aboutsummaryrefslogtreecommitdiff
path: root/node_modules/copy-webpack-plugin
diff options
context:
space:
mode:
authorruki <waruqi@gmail.com>2018-11-08 00:38:48 +0800
committerruki <waruqi@gmail.com>2018-11-07 21:53:09 +0800
commit26105034da4fcce7ac883c899d781f016559310d (patch)
treec459a5dc4e3aa0972d9919033ece511ce76dd129 /node_modules/copy-webpack-plugin
parent2c77f00f1a7ecb6c8192f9c16d3b2001b254a107 (diff)
downloadxmake-docs-26105034da4fcce7ac883c899d781f016559310d.tar.gz
xmake-docs-26105034da4fcce7ac883c899d781f016559310d.zip
switch to vuepress
Diffstat (limited to 'node_modules/copy-webpack-plugin')
-rw-r--r--node_modules/copy-webpack-plugin/CHANGELOG.md243
-rw-r--r--node_modules/copy-webpack-plugin/LICENSE20
-rw-r--r--node_modules/copy-webpack-plugin/README.md449
-rw-r--r--node_modules/copy-webpack-plugin/dist/index.js240
-rw-r--r--node_modules/copy-webpack-plugin/dist/preProcessPattern.js139
-rw-r--r--node_modules/copy-webpack-plugin/dist/processPattern.js138
-rw-r--r--node_modules/copy-webpack-plugin/dist/utils/escape.js35
-rw-r--r--node_modules/copy-webpack-plugin/dist/utils/isObject.js9
-rw-r--r--node_modules/copy-webpack-plugin/dist/utils/promisify.js26
-rw-r--r--node_modules/copy-webpack-plugin/dist/utils/readFilePromise.js17
-rw-r--r--node_modules/copy-webpack-plugin/dist/utils/readPromise.js17
-rw-r--r--node_modules/copy-webpack-plugin/dist/utils/statPromise.js17
-rw-r--r--node_modules/copy-webpack-plugin/dist/writeFile.js153
-rw-r--r--node_modules/copy-webpack-plugin/node_modules/globby/gitignore.js88
-rw-r--r--node_modules/copy-webpack-plugin/node_modules/globby/index.js134
-rw-r--r--node_modules/copy-webpack-plugin/node_modules/globby/license9
-rw-r--r--node_modules/copy-webpack-plugin/node_modules/globby/package.json74
-rw-r--r--node_modules/copy-webpack-plugin/node_modules/globby/readme.md156
-rw-r--r--node_modules/copy-webpack-plugin/node_modules/is-extglob/LICENSE21
-rw-r--r--node_modules/copy-webpack-plugin/node_modules/is-extglob/README.md107
-rw-r--r--node_modules/copy-webpack-plugin/node_modules/is-extglob/index.js20
-rw-r--r--node_modules/copy-webpack-plugin/node_modules/is-extglob/package.json69
-rw-r--r--node_modules/copy-webpack-plugin/node_modules/is-glob/LICENSE21
-rw-r--r--node_modules/copy-webpack-plugin/node_modules/is-glob/README.md190
-rw-r--r--node_modules/copy-webpack-plugin/node_modules/is-glob/index.js46
-rw-r--r--node_modules/copy-webpack-plugin/node_modules/is-glob/package.json81
-rw-r--r--node_modules/copy-webpack-plugin/package.json56
27 files changed, 2575 insertions, 0 deletions
diff --git a/node_modules/copy-webpack-plugin/CHANGELOG.md b/node_modules/copy-webpack-plugin/CHANGELOG.md
new file mode 100644
index 00000000..28d5632f
--- /dev/null
+++ b/node_modules/copy-webpack-plugin/CHANGELOG.md
@@ -0,0 +1,243 @@
+# Change Log
+
+All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
+
+<a name="4.6.0"></a>
+# [4.6.0](https://github.com/webpack-contrib/copy-webpack-plugin/compare/v4.5.4...v4.6.0) (2018-10-31)
+
+
+### Bug Fixes
+
+* handle undefined and null as stats value ([#302](https://github.com/webpack-contrib/copy-webpack-plugin/issues/302)) ([78c5d12](https://github.com/webpack-contrib/copy-webpack-plugin/commit/78c5d12))
+
+
+### Features
+
+* add support for target path transform ([#284](https://github.com/webpack-contrib/copy-webpack-plugin/issues/284)) ([7fe0c06](https://github.com/webpack-contrib/copy-webpack-plugin/commit/7fe0c06))
+
+
+
+<a name="4.5.4"></a>
+## [4.5.4](https://github.com/webpack-contrib/copy-webpack-plugin/compare/v4.5.3...v4.5.4) (2018-10-18)
+
+
+### Bug Fixes
+
+* **processPattern:** don't add `'glob'` as directory when it is a file (`contextDependencies`) ([#296](https://github.com/webpack-contrib/copy-webpack-plugin/issues/296)) ([5670926](https://github.com/webpack-contrib/copy-webpack-plugin/commit/5670926))
+
+
+
+<a name="4.5.3"></a>
+## [4.5.3](https://github.com/webpack-contrib/copy-webpack-plugin/compare/v4.5.2...v4.5.3) (2018-10-10)
+
+
+### Bug Fixes
+
+* **processPattern:** add `glob` directory context to `contextDependencies` ([#290](https://github.com/webpack-contrib/copy-webpack-plugin/issues/290)) ([5fa69db](https://github.com/webpack-contrib/copy-webpack-plugin/commit/5fa69db))
+
+
+
+<a name="4.5.2"></a>
+## [4.5.2](https://github.com/webpack-contrib/copy-webpack-plugin/compare/v4.5.1...v4.5.2) (2018-06-26)
+
+
+### Bug Fixes
+
+* allow square brackets in path ([#264](https://github.com/webpack-contrib/copy-webpack-plugin/issues/264)) ([3ef5b6c](https://github.com/webpack-contrib/copy-webpack-plugin/commit/3ef5b6c)), closes [#231](https://github.com/webpack-contrib/copy-webpack-plugin/issues/231)
+
+
+
+<a name="4.5.1"></a>
+## [4.5.1](https://github.com/webpack-contrib/copy-webpack-plugin/compare/v4.5.0...v4.5.1) (2018-03-09)
+
+
+### Bug Fixes
+
+* **package:** update `cacache` v10.0.1...10.0.4 (`dependencies`) ([#238](https://github.com/webpack-contrib/copy-webpack-plugin/issues/238)) ([0b288f9](https://github.com/webpack-contrib/copy-webpack-plugin/commit/0b288f9))
+
+
+### Performance Improvements
+
+* **index:** switch to `md4` for content hashing ([#239](https://github.com/webpack-contrib/copy-webpack-plugin/issues/239)) ([2be8191](https://github.com/webpack-contrib/copy-webpack-plugin/commit/2be8191))
+
+
+
+<a name="4.5.0"></a>
+# [4.5.0](https://github.com/webpack-contrib/copy-webpack-plugin/compare/v4.4.3...v4.5.0) (2018-03-02)
+
+
+### Features
+
+* **processPattern:** add support for `{RegExp)` matches (`pattern.test`) ([#235](https://github.com/webpack-contrib/copy-webpack-plugin/issues/235)) ([1861730](https://github.com/webpack-contrib/copy-webpack-plugin/commit/1861730))
+
+
+
+<a name="4.4.3"></a>
+## [4.4.3](https://github.com/webpack-contrib/copy-webpack-plugin/compare/v4.4.2...v4.4.3) (2018-03-01)
+
+
+### Bug Fixes
+
+* **index:** `tapable` deprecation warnings (`webpack >= v4.0.0`) ([#234](https://github.com/webpack-contrib/copy-webpack-plugin/issues/234)) ([445d548](https://github.com/webpack-contrib/copy-webpack-plugin/commit/445d548))
+
+
+
+<a name="4.4.2"></a>
+## [4.4.2](https://github.com/webpack-contrib/copy-webpack-plugin/compare/v4.4.1...v4.4.2) (2018-02-23)
+
+
+### Bug Fixes
+
+* **src/:** don't escape non-glob patterns ([#230](https://github.com/webpack-contrib/copy-webpack-plugin/issues/230)) ([0eb2cd5](https://github.com/webpack-contrib/copy-webpack-plugin/commit/0eb2cd5))
+
+
+
+<a name="4.4.1"></a>
+## [4.4.1](https://github.com/webpack-contrib/copy-webpack-plugin/compare/v4.4.0...v4.4.1) (2018-02-08)
+
+
+### Bug Fixes
+
+* replace `pify` with simpler promise helpers ([#221](https://github.com/webpack-contrib/copy-webpack-plugin/issues/221)) ([dadac24](https://github.com/webpack-contrib/copy-webpack-plugin/commit/dadac24))
+
+
+
+<a name="4.4.0"></a>
+# [4.4.0](https://github.com/webpack-contrib/copy-webpack-plugin/compare/v4.3.1...v4.4.0) (2018-02-08)
+
+
+### Bug Fixes
+
+* **package:** add `prepare` script ([9bf0d99](https://github.com/webpack-contrib/copy-webpack-plugin/commit/9bf0d99))
+* **preProcessPatterns:** support glob context paths with special characters ([#208](https://github.com/webpack-contrib/copy-webpack-plugin/issues/208)) ([ea0c05f](https://github.com/webpack-contrib/copy-webpack-plugin/commit/ea0c05f))
+* support `webpack >= v4.0.0` ([6a16b3c](https://github.com/webpack-contrib/copy-webpack-plugin/commit/6a16b3c))
+
+
+### Features
+
+* use `compiler.inputFileSystem` instead `fs` ([#205](https://github.com/webpack-contrib/copy-webpack-plugin/issues/205)) ([158f821](https://github.com/webpack-contrib/copy-webpack-plugin/commit/158f821))
+
+
+
+<a name="4.3.1"></a>
+## [4.3.1](https://github.com/webpack-contrib/copy-webpack-plugin/compare/v4.3.0...v4.3.1) (2017-12-22)
+
+
+### Bug Fixes
+
+* `cache` behaviour ([#196](https://github.com/webpack-contrib/copy-webpack-plugin/issues/196)) ([6beb89e](https://github.com/webpack-contrib/copy-webpack-plugin/commit/6beb89e))
+* `cache` option behaviour ([3b088d0](https://github.com/webpack-contrib/copy-webpack-plugin/commit/3b088d0))
+
+
+
+<a name="4.3.0"></a>
+# [4.3.0](https://github.com/webpack-contrib/copy-webpack-plugin/compare/v4.2.4...v4.3.0) (2017-12-14)
+
+
+### Features
+
+* add option to cache `pattern.transform` (`pattern.cache`) ([#176](https://github.com/webpack-contrib/copy-webpack-plugin/issues/176)) ([20c143b](https://github.com/webpack-contrib/copy-webpack-plugin/commit/20c143b))
+* option for caching `transform` function ([48c19ff](https://github.com/webpack-contrib/copy-webpack-plugin/commit/48c19ff))
+
+
+
+<a name="4.2.4"></a>
+## [4.2.4](https://github.com/webpack-contrib/copy-webpack-plugin/compare/v4.2.3...v4.2.4) (2017-12-14)
+
+
+### Refactoring
+
+* refactor: use native `{Promise}` instead of `bluebird` ([#178](https://github.com/webpack-contrib/copy-webpack-plugin/issues/178)) ([a508f14](https://github.com/webpack-contrib/copy-webpack-plugin/commit/a508f14))
+
+
+
+<a name="4.2.3"></a>
+## [4.2.3](https://github.com/webpack-contrib/copy-webpack-plugin/compare/v4.2.2...v4.2.3) (2017-11-23)
+
+
+
+<a name="4.2.2"></a>
+## [4.2.2](https://github.com/webpack-contrib/copy-webpack-plugin/compare/v4.2.0...v4.2.2) (2017-11-23)
+
+
+### Bug Fixes
+
+* copying same file to multiple targets ([#165](https://github.com/webpack-contrib/copy-webpack-plugin/issues/165)) ([43a9870](https://github.com/webpack-contrib/copy-webpack-plugin/commit/43a9870))
+
+
+
+<a name="4.2.0"></a>
+# [4.2.0](https://github.com/webpack-contrib/copy-webpack-plugin/compare/v4.1.1...v4.2.0) (2017-10-19)
+
+
+### Features
+
+* add `context` option (`options.context`) ([#149](https://github.com/webpack-contrib/copy-webpack-plugin/issues/149)) ([10cd1a2](https://github.com/webpack-contrib/copy-webpack-plugin/commit/10cd1a2))
+* allow async transforms ([#111](https://github.com/webpack-contrib/copy-webpack-plugin/issues/111)) ([8794e5f](https://github.com/webpack-contrib/copy-webpack-plugin/commit/8794e5f))
+* Plugin context option ([5c54e92](https://github.com/webpack-contrib/copy-webpack-plugin/commit/5c54e92)), closes [#148](https://github.com/webpack-contrib/copy-webpack-plugin/issues/148)
+* support `{String}` patterns ([#155](https://github.com/webpack-contrib/copy-webpack-plugin/issues/155)) ([b6c2e66](https://github.com/webpack-contrib/copy-webpack-plugin/commit/b6c2e66))
+* Support simple string patterns ([056a60b](https://github.com/webpack-contrib/copy-webpack-plugin/commit/056a60b)), closes [#150](https://github.com/webpack-contrib/copy-webpack-plugin/issues/150)
+
+
+
+<a name="4.1.1"></a>
+## [4.1.1](https://github.com/webpack-contrib/copy-webpack-plugin/compare/v4.1.0...v4.1.1) (2017-10-05)
+
+
+### Chore
+
+* Update dependencies for NSP security advisory ([#151](https://github.com/webpack-contrib/copy-webpack-plugin/issues/151)) ([6d4346e](https://github.com/webpack-contrib/copy-webpack-plugin/commit/6d4346e))
+
+ - Reference issue: https://nodesecurity.io/advisories/minimatch_regular-expression-denial-of-service
+
+
+
+<a name="4.1.0"></a>
+# [4.1.0](https://github.com/webpack-contrib/copy-webpack-plugin/compare/v2.1.3...v4.1.0) (2017-09-29)
+
+
+### Bug Fixes
+
+* Changed default ignore glob to ignore dot files ([#80](https://github.com/webpack-contrib/copy-webpack-plugin/issues/80)) ([08b69a4](https://github.com/webpack-contrib/copy-webpack-plugin/commit/08b69a4))
+* Fixed glob as object ([1b2c21a](https://github.com/webpack-contrib/copy-webpack-plugin/commit/1b2c21a))
+* Improved Windows compatibility ([#85](https://github.com/webpack-contrib/copy-webpack-plugin/issues/85)) ([ad62899](https://github.com/webpack-contrib/copy-webpack-plugin/commit/ad62899))
+* Memory leak in watch mode and use Set for performance ([#130](https://github.com/webpack-contrib/copy-webpack-plugin/issues/130)) ([de46fde](https://github.com/webpack-contrib/copy-webpack-plugin/commit/de46fde))
+* subdirectory errors in blob patterns ([c2720d0](https://github.com/webpack-contrib/copy-webpack-plugin/commit/c2720d0))
+
+
+### Features
+
+* Added non-wildcard glob support ([405d1ec](https://github.com/webpack-contrib/copy-webpack-plugin/commit/405d1ec))
+* Added transform method to patterns ([#77](https://github.com/webpack-contrib/copy-webpack-plugin/issues/77)) ([6371eb1](https://github.com/webpack-contrib/copy-webpack-plugin/commit/6371eb1))
+
+
+
+<a name="4.0.1"></a>
+## [4.0.1](https://github.com/webpack-contrib/copy-webpack-plugin/compare/v2.1.3...v4.0.1) (2017-09-29)
+
+
+### Bug Fixes
+
+* Fixed glob as object ([1b2c21a](https://github.com/webpack-contrib/copy-webpack-plugin/commit/1b2c21a))
+* Improved Windows compatibility ([#85](https://github.com/webpack-contrib/copy-webpack-plugin/issues/85)) ([ad62899](https://github.com/webpack-contrib/copy-webpack-plugin/commit/ad62899))
+* subdirectory errors in blob patterns ([c2720d0](https://github.com/webpack-contrib/copy-webpack-plugin/commit/c2720d0))
+
+
+### Features
+
+* Added non-wildcard glob support ([405d1ec](https://github.com/webpack-contrib/copy-webpack-plugin/commit/405d1ec))
+* Added transform method to patterns ([#77](https://github.com/webpack-contrib/copy-webpack-plugin/issues/77)) ([6371eb1](https://github.com/webpack-contrib/copy-webpack-plugin/commit/6371eb1))
+
+
+
+<a name="4.0.0"></a>
+## [4.0.0](https://github.com/webpack-contrib/copy-webpack-plugin/compare/v4.0.0...v3.0.1) (2016-10-23)
+
+
+### Bug Fixes
+
+* Changed default ignore glob to ignore dot files ([#80](https://github.com/webpack-contrib/copy-webpack-plugin/issues/80)) ([08b69a4](https://github.com/webpack-contrib/copy-webpack-plugin/commit/08b69a4))
+
+### Features
+
+* Added transform method to patterns ([6371eb1](https://github.com/webpack-contrib/copy-webpack-plugin/commit/6371eb1))
diff --git a/node_modules/copy-webpack-plugin/LICENSE b/node_modules/copy-webpack-plugin/LICENSE
new file mode 100644
index 00000000..8c11fc72
--- /dev/null
+++ b/node_modules/copy-webpack-plugin/LICENSE
@@ -0,0 +1,20 @@
+Copyright JS Foundation and other contributors
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+'Software'), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node_modules/copy-webpack-plugin/README.md b/node_modules/copy-webpack-plugin/README.md
new file mode 100644
index 00000000..48782730
--- /dev/null
+++ b/node_modules/copy-webpack-plugin/README.md
@@ -0,0 +1,449 @@
+[![npm][npm]][npm-url]
+[![node][node]][node-url]
+[![deps][deps]][deps-url]
+[![test][test]][test-url]
+[![coverage][cover]][cover-url]
+[![chat][chat]][chat-url]
+
+<div align="center">
+ <a href="https://github.com/webpack/webpack">
+ <img width="200" height="200"
+ src="https://webpack.js.org/assets/icon-square-big.svg">
+ </a>
+ <h1>Copy Webpack Plugin</h1>
+ <p>Copies individual files or entire directories to the build directory</p>
+</div>
+
+<h2 align="center">Install</h2>
+
+```bash
+npm i -D copy-webpack-plugin
+```
+
+<h2 align="center">Usage</h2>
+
+**webpack.config.js**
+```js
+const CopyWebpackPlugin = require('copy-webpack-plugin')
+
+const config = {
+ plugins: [
+ new CopyWebpackPlugin([ ...patterns ], options)
+ ]
+}
+```
+
+> ℹ️ If you want `webpack-dev-server` to write files to the output directory during development, you can force it with the [`write-file-webpack-plugin`](https://github.com/gajus/write-file-webpack-plugin).
+
+### `Patterns`
+
+A simple pattern looks like this
+
+```js
+{ from: 'source', to: 'dest' }
+```
+
+Or, in case of just a `from` with the default destination, you can also use a `{String}` as shorthand instead of an `{Object}`
+
+```js
+'source'
+```
+
+|Name|Type|Default|Description|
+|:--:|:--:|:-----:|:----------|
+|[`from`](#from)|`{String\|Object}`|`undefined`|Globs accept [minimatch options](https://github.com/isaacs/minimatch)|
+|[`fromArgs`](#fromArgs)|`{Object}`|`{ cwd: context }`|See the [`node-glob` options](https://github.com/isaacs/node-glob#options) in addition to the ones below|
+|[`to`](#to)|`{String\|Object}`|`undefined`|Output root if `from` is file or dir, resolved glob path if `from` is glob|
+|[`toType`](#toType)|`{String}`|``|[toType Options](#totype)|
+|[`test`](#test)|`{RegExp}`|``|Pattern for extracting elements to be used in `to` templates|
+|[`force`](#force)|`{Boolean}`|`false`|Overwrites files already in `compilation.assets` (usually added by other plugins/loaders)|
+|[`ignore`](#ignore)|`{Array}`|`[]`|Globs to ignore for this pattern|
+|`flatten`|`{Boolean}`|`false`|Removes all directory references and only copies file names.⚠️ If files have the same name, the result is non-deterministic|
+|[`transform`](#transform)|`{Function\|Promise}`|`(content, path) => content`|Function or Promise that modifies file contents before copying|
+|[`transformPath`](#transformPath)|`{Function\|Promise}`|`(targetPath, sourcePath) => path`|Function or Promise that modifies file writing path|
+|[`cache`](#cache)|`{Boolean\|Object}`|`false`|Enable `transform` caching. You can use `{ cache: { key: 'my-cache-key' } }` to invalidate the cache|
+|[`context`](#context)|`{String}`|`options.context \|\| compiler.options.context`|A path that determines how to interpret the `from` path|
+
+### `from`
+
+**webpack.config.js**
+```js
+[
+ new CopyWebpackPlugin([
+ 'relative/path/to/file.ext',
+ '/absolute/path/to/file.ext',
+ 'relative/path/to/dir',
+ '/absolute/path/to/dir',
+ '**/*',
+ { glob: '\*\*/\*', dot: true }
+ ], options)
+]
+```
+
+### `to`
+
+**webpack.config.js**
+```js
+[
+ new CopyWebpackPlugin([
+ { from: '**/*', to: 'relative/path/to/dest/' },
+ { from: '**/*', to: '/absolute/path/to/dest/' }
+ ], options)
+]
+```
+
+### `toType`
+
+|Name|Type|Default|Description|
+|:--:|:--:|:-----:|:----------|
+|**`'dir'`**|`{String}`|`undefined`|If `from` is directory, `to` has no extension or ends in `'/'`|
+|**`'file'`**|`{String}`|`undefined`|If `to` has extension or `from` is file|
+|**`'template'`**|`{String}`|`undefined`|If `to` contains [a template pattern](https://github.com/webpack-contrib/file-loader#placeholders)|
+
+#### `'dir'`
+
+**webpack.config.js**
+```js
+[
+ new CopyWebpackPlugin([
+ {
+ from: 'path/to/file.txt',
+ to: 'directory/with/extension.ext',
+ toType: 'dir'
+ }
+ ], options)
+]
+```
+
+#### `'file'`
+
+**webpack.config.js**
+```js
+[
+ new CopyWebpackPlugin([
+ {
+ from: 'path/to/file.txt',
+ to: 'file/without/extension',
+ toType: 'file'
+ },
+ ], options)
+]
+```
+
+#### `'template'`
+
+**webpack.config.js**
+```js
+[
+ new CopyWebpackPlugin([
+ {
+ from: 'src/',
+ to: 'dest/[name].[hash].[ext]',
+ toType: 'template'
+ }
+ ], options)
+]
+```
+
+### `test`
+
+Defines a `{RegExp}` to match some parts of the file path.
+These capture groups can be reused in the name property using `[N]` placeholder.
+Note that `[0]` will be replaced by the entire path of the file,
+whereas `[1]` will contain the first capturing parenthesis of your `{RegExp}`
+and so on...
+
+**webpack.config.js**
+```js
+[
+ new CopyWebpackPlugin([
+ {
+ from: '*/*',
+ to: '[1]-[2].[hash].[ext]',
+ test: /([^/]+)\/(.+)\.png$/
+ }
+ ], options)
+]
+```
+
+### `force`
+
+**webpack.config.js**
+```js
+[
+ new CopyWebpackPlugin([
+ { from: 'src/**/*', to: 'dest/', force: true }
+ ], options)
+]
+```
+
+### `ignore`
+
+**webpack.config.js**
+```js
+[
+ new CopyWebpackPlugin([
+ { from: 'src/**/*', to: 'dest/', ignore: [ '*.js' ] }
+ ], options)
+]
+```
+
+### `flatten`
+
+**webpack.config.js**
+```js
+[
+ new CopyWebpackPlugin([
+ { from: 'src/**/*', to: 'dest/', flatten: true }
+ ], options)
+]
+```
+
+### `transform`
+
+#### `{Function}`
+
+**webpack.config.js**
+```js
+[
+ new CopyWebpackPlugin([
+ {
+ from: 'src/*.png',
+ to: 'dest/',
+ transform (content, path) {
+ return optimize(content)
+ }
+ }
+ ], options)
+]
+```
+
+#### `{Promise}`
+
+**webpack.config.js**
+```js
+[
+ new CopyWebpackPlugin([
+ {
+ from: 'src/*.png',
+ to: 'dest/',
+ transform (content, path) {
+ return Promise.resolve(optimize(content))
+ }
+ }
+ ], options)
+]
+```
+
+### `transformPath`
+
+#### `{Function}`
+
+**webpack.config.js**
+```js
+[
+ new CopyWebpackPlugin([
+ {
+ from: 'src/*.png',
+ to: 'dest/',
+ transformPath (targetPath, absolutePath) {
+ return 'newPath';
+ }
+ }
+ ], options)
+]
+```
+
+#### `{Promise}`
+
+**webpack.config.js**
+```js
+[
+ new CopyWebpackPlugin([
+ {
+ from: 'src/*.png',
+ to: 'dest/',
+ transform (targePath, absolutePath) {
+ return Promise.resolve('newPath')
+ }
+ }
+ ], options)
+]
+```
+
+
+### `cache`
+
+**webpack.config.js**
+```js
+[
+ new CopyWebpackPlugin([
+ {
+ from: 'src/*.png',
+ to: 'dest/',
+ transform (content, path) {
+ return optimize(content)
+ },
+ cache: true
+ }
+ ], options)
+]
+```
+
+### `context`
+
+**webpack.config.js**
+```js
+[
+ new CopyWebpackPlugin([
+ { from: 'src/*.txt', to: 'dest/', context: 'app/' }
+ ], options)
+]
+```
+
+<h2 align="center">Options</h2>
+
+|Name|Type|Default|Description|
+|:--:|:--:|:-----:|:----------|
+|[`debug`](#debug)|`{String}`|**`'warning'`**|[Debug Options](#debug)|
+|[`ignore`](#ignore)|`{Array}`|`[]`|Array of globs to ignore (applied to `from`)|
+|[`context`](#context)|`{String}`|`compiler.options.context`|A path that determines how to interpret the `from` path, shared for all patterns|
+|[`copyUnmodified`](#copyUnmodified)|`{Boolean}`|`false`|Copies files, regardless of modification when using watch or `webpack-dev-server`. All files are copied on first build, regardless of this option|
+
+### `debug`
+
+|Name|Type|Default|Description|
+|:--:|:--:|:-----:|:----------|
+|**`'info'`**|`{String\|Boolean}`|`false`|File location and read info|
+|**`'debug'`**|`{String}`|`false`|Very detailed debugging info|
+|**`'warning'`**|`{String}`|`true`|Only warnings|
+
+#### `'info'`
+
+**webpack.config.js**
+```js
+[
+ new CopyWebpackPlugin(
+ [ ...patterns ],
+ { debug: 'info' }
+ )
+]
+```
+
+#### `'debug'`
+
+**webpack.config.js**
+```js
+[
+ new CopyWebpackPlugin(
+ [ ...patterns ],
+ { debug: 'debug' }
+ )
+]
+```
+
+#### `'warning' (default)`
+
+**webpack.config.js**
+```js
+[
+ new CopyWebpackPlugin(
+ [ ...patterns ],
+ { debug: true }
+ )
+]
+```
+
+### `ignore`
+
+**webpack.config.js**
+```js
+[
+ new CopyWebpackPlugin(
+ [ ...patterns ],
+ { ignore: [ '*.js', '*.css' ] }
+ )
+]
+```
+
+### `context`
+
+**webpack.config.js**
+```js
+[
+ new CopyWebpackPlugin(
+ [ ...patterns ],
+ { context: '/app' }
+ )
+]
+```
+
+### `copyUnmodified`
+
+> ℹ️ By default, we only copy **modified** files during a `webpack --watch` or `webpack-dev-server` build. Setting this option to `true` will copy all files.
+
+**webpack.config.js**
+```js
+[
+ new CopyWebpackPlugin(
+ [ ...patterns ],
+ { copyUnmodified: true }
+ )
+]
+```
+
+<h2 align="center">Maintainers</h2>
+
+<table>
+ <tbody>
+ <tr>
+ <td align="center">
+ <a href="https://github.com/bebraw">
+ <img width="150" height="150" src="https://github.com/bebraw.png?v=3&s=150">
+ </br>
+ Juho Vepsäläinen
+ </a>
+ </td>
+ <td align="center">
+ <a href="https://github.com/d3viant0ne">
+ <img width="150" height="150" src="https://github.com/d3viant0ne.png?v=3&s=150">
+ </br>
+ Joshua Wiens
+ </a>
+ </td>
+ <td align="center">
+ <a href="https://github.com/michael-ciniawsky">
+ <img width="150" height="150" src="https://github.com/michael-ciniawsky.png?v=3&s=150">
+ </br>
+ Michael Ciniawsky
+ </a>
+ </td>
+ <td align="center">
+ <a href="https://github.com/evilebottnawi">
+ <img width="150" height="150" src="https://github.com/evilebottnawi.png?v=3&s=150">
+ </br>
+ Alexander Krasnoyarov
+ </a>
+ </td>
+ </tr>
+ <tbody>
+</table>
+
+
+[npm]: https://img.shields.io/npm/v/copy-webpack-plugin.svg
+[npm-url]: https://npmjs.com/package/copy-webpack-plugin
+
+[node]: https://img.shields.io/node/v/copy-webpack-plugin.svg
+[node-url]: https://nodejs.org
+
+[deps]: https://david-dm.org/webpack-contrib/copy-webpack-plugin.svg
+[deps-url]: https://david-dm.org/webpack-contrib/copy-webpack-plugin
+
+[test]: https://secure.travis-ci.org/webpack-contrib/copy-webpack-plugin.svg
+[test-url]: http://travis-ci.org/webpack-contrib/copy-webpack-plugin
+
+[cover]: https://codecov.io/gh/webpack-contrib/copy-webpack-plugin/branch/master/graph/badge.svg
+[cover-url]: https://codecov.io/gh/webpack-contrib/copy-webpack-plugin
+
+[chat]: https://img.shields.io/badge/gitter-webpack%2Fwebpack-brightgreen.svg
+[chat-url]: https://gitter.im/webpack/webpack
diff --git a/node_modules/copy-webpack-plugin/dist/index.js b/node_modules/copy-webpack-plugin/dist/index.js
new file mode 100644
index 00000000..afaa29cd
--- /dev/null
+++ b/node_modules/copy-webpack-plugin/dist/index.js
@@ -0,0 +1,240 @@
+'use strict';
+
+var _path = require('path');
+
+var _path2 = _interopRequireDefault(_path);
+
+var _preProcessPattern = require('./preProcessPattern');
+
+var _preProcessPattern2 = _interopRequireDefault(_preProcessPattern);
+
+var _processPattern = require('./processPattern');
+
+var _processPattern2 = _interopRequireDefault(_processPattern);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function CopyWebpackPlugin() {
+ var patterns = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+
+ if (!Array.isArray(patterns)) {
+ throw new Error('[copy-webpack-plugin] patterns must be an array');
+ }
+
+ // Defaults debug level to 'warning'
+ options.debug = options.debug || 'warning';
+
+ // Defaults debugging to info if only true is specified
+ if (options.debug === true) {
+ options.debug = 'info';
+ }
+
+ var debugLevels = ['warning', 'info', 'debug'];
+ var debugLevelIndex = debugLevels.indexOf(options.debug);
+ function log(msg, level) {
+ if (level === 0) {
+ msg = 'WARNING - ' + msg;
+ } else {
+ level = level || 1;
+ }
+ if (level <= debugLevelIndex) {
+ console.log('[copy-webpack-plugin] ' + msg); // eslint-disable-line no-console
+ }
+ }
+
+ function warning(msg) {
+ log(msg, 0);
+ }
+
+ function info(msg) {
+ log(msg, 1);
+ }
+
+ function debug(msg) {
+ log(msg, 2);
+ }
+
+ var apply = function apply(compiler) {
+ var fileDependencies = void 0;
+ var contextDependencies = void 0;
+ var written = {};
+
+ var context = void 0;
+
+ if (!options.context) {
+ context = compiler.options.context;
+ } else if (!_path2.default.isAbsolute(options.context)) {
+ context = _path2.default.join(compiler.options.context, options.context);
+ } else {
+ context = options.context;
+ }
+
+ var emit = function emit(compilation, cb) {
+ debug('starting emit');
+ var callback = function callback() {
+ debug('finishing emit');
+ cb();
+ };
+
+ fileDependencies = [];
+ contextDependencies = [];
+
+ var globalRef = {
+ info: info,
+ debug: debug,
+ warning: warning,
+ compilation: compilation,
+ written: written,
+ fileDependencies: fileDependencies,
+ contextDependencies: contextDependencies,
+ context: context,
+ inputFileSystem: compiler.inputFileSystem,
+ output: compiler.options.output.path,
+ ignore: options.ignore || [],
+ copyUnmodified: options.copyUnmodified,
+ concurrency: options.concurrency
+ };
+
+ if (globalRef.output === '/' && compiler.options.devServer && compiler.options.devServer.outputPath) {
+ globalRef.output = compiler.options.devServer.outputPath;
+ }
+
+ var tasks = [];
+
+ patterns.forEach(function (pattern) {
+ tasks.push(Promise.resolve().then(function () {
+ return (0, _preProcessPattern2.default)(globalRef, pattern);
+ })
+ // Every source (from) is assumed to exist here
+ .then(function (pattern) {
+ return (0, _processPattern2.default)(globalRef, pattern);
+ }));
+ });
+
+ Promise.all(tasks).catch(function (err) {
+ compilation.errors.push(err);
+ }).then(function () {
+ return callback();
+ });
+ };
+
+ var afterEmit = function afterEmit(compilation, cb) {
+ debug('starting after-emit');
+ var callback = function callback() {
+ debug('finishing after-emit');
+ cb();
+ };
+
+ var compilationFileDependencies = void 0;
+ var addFileDependency = void 0;
+ if (Array.isArray(compilation.fileDependencies)) {
+ compilationFileDependencies = new Set(compilation.fileDependencies);
+ addFileDependency = function addFileDependency(file) {
+ return compilation.fileDependencies.push(file);
+ };
+ } else {
+ compilationFileDependencies = compilation.fileDependencies;
+ addFileDependency = function addFileDependency(file) {
+ return compilation.fileDependencies.add(file);
+ };
+ }
+
+ var compilationContextDependencies = void 0;
+ var addContextDependency = void 0;
+ if (Array.isArray(compilation.contextDependencies)) {
+ compilationContextDependencies = new Set(compilation.contextDependencies);
+ addContextDependency = function addContextDependency(file) {
+ return compilation.contextDependencies.push(file);
+ };
+ } else {
+ compilationContextDependencies = compilation.contextDependencies;
+ addContextDependency = function addContextDependency(file) {
+ return compilation.contextDependencies.add(file);
+ };
+ }
+
+ // Add file dependencies if they're not already tracked
+ var _iteratorNormalCompletion = true;
+ var _didIteratorError = false;
+ var _iteratorError = undefined;
+
+ try {
+ for (var _iterator = fileDependencies[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
+ var file = _step.value;
+
+ if (compilationFileDependencies.has(file)) {
+ debug('not adding ' + file + ' to change tracking, because it\'s already tracked');
+ } else {
+ debug('adding ' + file + ' to change tracking');
+ addFileDependency(file);
+ }
+ }
+
+ // Add context dependencies if they're not already tracked
+ } catch (err) {
+ _didIteratorError = true;
+ _iteratorError = err;
+ } finally {
+ try {
+ if (!_iteratorNormalCompletion && _iterator.return) {
+ _iterator.return();
+ }
+ } finally {
+ if (_didIteratorError) {
+ throw _iteratorError;
+ }
+ }
+ }
+
+ var _iteratorNormalCompletion2 = true;
+ var _didIteratorError2 = false;
+ var _iteratorError2 = undefined;
+
+ try {
+ for (var _iterator2 = contextDependencies[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
+ var _context = _step2.value;
+
+ if (compilationContextDependencies.has(_context)) {
+ debug('not adding ' + _context + ' to change tracking, because it\'s already tracked');
+ } else {
+ debug('adding ' + _context + ' to change tracking');
+ addContextDependency(_context);
+ }
+ }
+ } catch (err) {
+ _didIteratorError2 = true;
+ _iteratorError2 = err;
+ } finally {
+ try {
+ if (!_iteratorNormalCompletion2 && _iterator2.return) {
+ _iterator2.return();
+ }
+ } finally {
+ if (_didIteratorError2) {
+ throw _iteratorError2;
+ }
+ }
+ }
+
+ callback();
+ };
+
+ if (compiler.hooks) {
+ var plugin = { name: 'CopyPlugin' };
+
+ compiler.hooks.emit.tapAsync(plugin, emit);
+ compiler.hooks.afterEmit.tapAsync(plugin, afterEmit);
+ } else {
+ compiler.plugin('emit', emit);
+ compiler.plugin('after-emit', afterEmit);
+ }
+ };
+
+ return {
+ apply: apply
+ };
+}
+
+CopyWebpackPlugin['default'] = CopyWebpackPlugin;
+module.exports = CopyWebpackPlugin; \ No newline at end of file
diff --git a/node_modules/copy-webpack-plugin/dist/preProcessPattern.js b/node_modules/copy-webpack-plugin/dist/preProcessPattern.js
new file mode 100644
index 00000000..fb381397
--- /dev/null
+++ b/node_modules/copy-webpack-plugin/dist/preProcessPattern.js
@@ -0,0 +1,139 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = preProcessPattern;
+
+var _path = require('path');
+
+var _path2 = _interopRequireDefault(_path);
+
+var _isGlob = require('is-glob');
+
+var _isGlob2 = _interopRequireDefault(_isGlob);
+
+var _escape = require('./utils/escape');
+
+var _escape2 = _interopRequireDefault(_escape);
+
+var _isObject = require('./utils/isObject');
+
+var _isObject2 = _interopRequireDefault(_isObject);
+
+var _promisify = require('./utils/promisify');
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+// https://www.debuggex.com/r/VH2yS2mvJOitiyr3
+var isTemplateLike = /(\[ext\])|(\[name\])|(\[path\])|(\[folder\])|(\[emoji(:\d+)?\])|(\[(\w+:)?hash(:\w+)?(:\d+)?\])|(\[\d+\])/;
+
+function preProcessPattern(globalRef, pattern) {
+ var info = globalRef.info,
+ debug = globalRef.debug,
+ warning = globalRef.warning,
+ context = globalRef.context,
+ inputFileSystem = globalRef.inputFileSystem,
+ fileDependencies = globalRef.fileDependencies,
+ contextDependencies = globalRef.contextDependencies,
+ compilation = globalRef.compilation;
+
+
+ pattern = typeof pattern === 'string' ? {
+ from: pattern
+ } : Object.assign({}, pattern);
+ pattern.to = pattern.to || '';
+ pattern.context = pattern.context || context;
+ if (!_path2.default.isAbsolute(pattern.context)) {
+ pattern.context = _path2.default.join(context, pattern.context);
+ }
+ pattern.ignore = globalRef.ignore.concat(pattern.ignore || []);
+
+ info('processing from: \'' + pattern.from + '\' to: \'' + pattern.to + '\'');
+
+ switch (true) {
+ case !!pattern.toType:
+ // if toType already exists
+ break;
+ case isTemplateLike.test(pattern.to):
+ pattern.toType = 'template';
+ break;
+ case _path2.default.extname(pattern.to) === '' || pattern.to.slice(-1) === '/':
+ pattern.toType = 'dir';
+ break;
+ default:
+ pattern.toType = 'file';
+ }
+
+ debug('determined \'' + pattern.to + '\' is a \'' + pattern.toType + '\'');
+
+ // If we know it's a glob, then bail early
+ if ((0, _isObject2.default)(pattern.from) && pattern.from.glob) {
+ pattern.fromType = 'glob';
+
+ var fromArgs = Object.assign({}, pattern.from);
+ delete fromArgs.glob;
+
+ pattern.fromArgs = fromArgs;
+ pattern.glob = (0, _escape2.default)(pattern.context, pattern.from.glob);
+ pattern.absoluteFrom = _path2.default.resolve(pattern.context, pattern.from.glob);
+ return Promise.resolve(pattern);
+ }
+
+ if (_path2.default.isAbsolute(pattern.from)) {
+ pattern.absoluteFrom = pattern.from;
+ } else {
+ pattern.absoluteFrom = _path2.default.resolve(pattern.context, pattern.from);
+ }
+
+ debug('determined \'' + pattern.from + '\' to be read from \'' + pattern.absoluteFrom + '\'');
+
+ var noStatsHandler = function noStatsHandler() {
+ // If from doesn't appear to be a glob, then log a warning
+ if ((0, _isGlob2.default)(pattern.from) || pattern.from.indexOf('*') !== -1) {
+ pattern.fromType = 'glob';
+ pattern.glob = (0, _escape2.default)(pattern.context, pattern.from);
+ } else {
+ var msg = 'unable to locate \'' + pattern.from + '\' at \'' + pattern.absoluteFrom + '\'';
+ var warningMsg = '[copy-webpack-plugin] ' + msg;
+ // only display the same message once
+ if (compilation.errors.indexOf(warningMsg) === -1) {
+ warning(msg);
+ compilation.errors.push(warningMsg);
+ }
+
+ pattern.fromType = 'nonexistent';
+ }
+ };
+
+ return (0, _promisify.stat)(inputFileSystem, pattern.absoluteFrom).catch(function () {
+ return noStatsHandler();
+ }).then(function (stat) {
+ if (!stat) {
+ noStatsHandler();
+ return pattern;
+ }
+
+ if (stat.isDirectory()) {
+ pattern.fromType = 'dir';
+ pattern.context = pattern.absoluteFrom;
+ contextDependencies.push(pattern.absoluteFrom);
+ pattern.glob = (0, _escape2.default)(pattern.absoluteFrom, '**/*');
+ pattern.absoluteFrom = _path2.default.join(pattern.absoluteFrom, '**/*');
+ pattern.fromArgs = {
+ dot: true
+ };
+ } else if (stat.isFile()) {
+ pattern.fromType = 'file';
+ pattern.context = _path2.default.dirname(pattern.absoluteFrom);
+ pattern.glob = (0, _escape2.default)(pattern.absoluteFrom);
+ pattern.fromArgs = {
+ dot: true
+ };
+ fileDependencies.push(pattern.absoluteFrom);
+ } else if (!pattern.fromType) {
+ info('Unrecognized file type for ' + pattern.from);
+ }
+ return pattern;
+ });
+} \ No newline at end of file
diff --git a/node_modules/copy-webpack-plugin/dist/processPattern.js b/node_modules/copy-webpack-plugin/dist/processPattern.js
new file mode 100644
index 00000000..c2ac6a94
--- /dev/null
+++ b/node_modules/copy-webpack-plugin/dist/processPattern.js
@@ -0,0 +1,138 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = processPattern;
+
+var _globby = require('globby');
+
+var _globby2 = _interopRequireDefault(_globby);
+
+var _pLimit = require('p-limit');
+
+var _pLimit2 = _interopRequireDefault(_pLimit);
+
+var _isGlob = require('is-glob');
+
+var _isGlob2 = _interopRequireDefault(_isGlob);
+
+var _path = require('path');
+
+var _path2 = _interopRequireDefault(_path);
+
+var _minimatch = require('minimatch');
+
+var _minimatch2 = _interopRequireDefault(_minimatch);
+
+var _writeFile = require('./writeFile');
+
+var _writeFile2 = _interopRequireDefault(_writeFile);
+
+var _isObject = require('./utils/isObject');
+
+var _isObject2 = _interopRequireDefault(_isObject);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function processPattern(globalRef, pattern) {
+ var info = globalRef.info,
+ debug = globalRef.debug,
+ output = globalRef.output,
+ concurrency = globalRef.concurrency,
+ contextDependencies = globalRef.contextDependencies;
+
+ var globArgs = Object.assign({
+ cwd: pattern.context
+ }, pattern.fromArgs || {});
+
+ if (pattern.fromType === 'nonexistent') {
+ return Promise.resolve();
+ }
+
+ var limit = (0, _pLimit2.default)(concurrency || 100);
+
+ info('begin globbing \'' + pattern.glob + '\' with a context of \'' + pattern.context + '\'');
+ return (0, _globby2.default)(pattern.glob, globArgs).then(function (paths) {
+ return Promise.all(paths.map(function (from) {
+ return limit(function () {
+ var file = {
+ force: pattern.force,
+ absoluteFrom: _path2.default.resolve(pattern.context, from)
+ };
+ file.relativeFrom = _path2.default.relative(pattern.context, file.absoluteFrom);
+
+ if (pattern.flatten) {
+ file.relativeFrom = _path2.default.basename(file.relativeFrom);
+ }
+
+ // This is so webpack is able to watch the directory and when
+ // a new file is added it triggeres a rebuild
+ var contextPath = _path2.default.dirname(_path2.default.resolve(from));
+ if (contextDependencies.indexOf(contextPath) === -1 && (0, _isGlob2.default)(pattern.glob)) {
+ contextDependencies.push(contextPath);
+ }
+
+ debug('found ' + from);
+
+ // Check the ignore list
+ var il = pattern.ignore.length;
+ while (il--) {
+ var ignoreGlob = pattern.ignore[il];
+
+ var globParams = {
+ dot: true,
+ matchBase: true
+ };
+
+ var glob = void 0;
+ if (typeof ignoreGlob === 'string') {
+ glob = ignoreGlob;
+ } else if ((0, _isObject2.default)(ignoreGlob)) {
+ glob = ignoreGlob.glob || '';
+ var ignoreGlobParams = Object.assign({}, ignoreGlob);
+ delete ignoreGlobParams.glob;
+
+ // Overwrite minimatch defaults
+ globParams = Object.assign(globParams, ignoreGlobParams);
+ } else {
+ glob = '';
+ }
+
+ debug('testing ' + glob + ' against ' + file.relativeFrom);
+ if ((0, _minimatch2.default)(file.relativeFrom, glob, globParams)) {
+ info('ignoring \'' + file.relativeFrom + '\', because it matches the ignore glob \'' + glob + '\'');
+ return Promise.resolve();
+ } else {
+ debug(glob + ' doesn\'t match ' + file.relativeFrom);
+ }
+ }
+
+ // Change the to path to be relative for webpack
+ if (pattern.toType === 'dir') {
+ file.webpackTo = _path2.default.join(pattern.to, file.relativeFrom);
+ } else if (pattern.toType === 'file') {
+ file.webpackTo = pattern.to || file.relativeFrom;
+ } else if (pattern.toType === 'template') {
+ file.webpackTo = pattern.to;
+ file.webpackToRegExp = pattern.test;
+ }
+
+ if (_path2.default.isAbsolute(file.webpackTo)) {
+ if (output === '/') {
+ throw '[copy-webpack-plugin] Using older versions of webpack-dev-server, devServer.outputPath must be defined to write to absolute paths';
+ }
+
+ file.webpackTo = _path2.default.relative(output, file.webpackTo);
+ }
+
+ // ensure forward slashes
+ file.webpackTo = file.webpackTo.replace(/\\/g, '/');
+
+ info('determined that \'' + from + '\' should write to \'' + file.webpackTo + '\'');
+
+ return (0, _writeFile2.default)(globalRef, pattern, file);
+ });
+ }));
+ });
+} \ No newline at end of file
diff --git a/node_modules/copy-webpack-plugin/dist/utils/escape.js b/node_modules/copy-webpack-plugin/dist/utils/escape.js
new file mode 100644
index 00000000..ac900b69
--- /dev/null
+++ b/node_modules/copy-webpack-plugin/dist/utils/escape.js
@@ -0,0 +1,35 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = escape;
+
+var _path = require('path');
+
+var _path2 = _interopRequireDefault(_path);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function escape(context, from) {
+ if (from && _path2.default.isAbsolute(from)) {
+ return from;
+ } else {
+ // Ensure context is escaped before globbing
+ // Handles special characters in paths
+ var absoluteContext = _path2.default.resolve(context).replace(/[\*|\?|\!|\(|\)|\[|\]|\{|\}]/g, function (substring) {
+ return '[' + substring + ']';
+ });
+
+ if (!from) {
+ return absoluteContext;
+ }
+
+ // Cannot use path.join/resolve as it "fixes" the path separators
+ if (absoluteContext.endsWith('/')) {
+ return '' + absoluteContext + from;
+ } else {
+ return absoluteContext + '/' + from;
+ }
+ }
+} \ No newline at end of file
diff --git a/node_modules/copy-webpack-plugin/dist/utils/isObject.js b/node_modules/copy-webpack-plugin/dist/utils/isObject.js
new file mode 100644
index 00000000..e033557d
--- /dev/null
+++ b/node_modules/copy-webpack-plugin/dist/utils/isObject.js
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+exports.default = function (val) {
+ return Object.prototype.toString.call(val) === '[object Object]' ? true : false;
+}; \ No newline at end of file
diff --git a/node_modules/copy-webpack-plugin/dist/utils/promisify.js b/node_modules/copy-webpack-plugin/dist/utils/promisify.js
new file mode 100644
index 00000000..a49fc55b
--- /dev/null
+++ b/node_modules/copy-webpack-plugin/dist/utils/promisify.js
@@ -0,0 +1,26 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+var stat = exports.stat = function stat(inputFileSystem, path) {
+ return new Promise(function (resolve, reject) {
+ inputFileSystem.stat(path, function (err, stats) {
+ if (err) {
+ reject(err);
+ }
+ resolve(stats);
+ });
+ });
+};
+
+var readFile = exports.readFile = function readFile(inputFileSystem, path) {
+ return new Promise(function (resolve, reject) {
+ inputFileSystem.readFile(path, function (err, stats) {
+ if (err) {
+ reject(err);
+ }
+ resolve(stats);
+ });
+ });
+}; \ No newline at end of file
diff --git a/node_modules/copy-webpack-plugin/dist/utils/readFilePromise.js b/node_modules/copy-webpack-plugin/dist/utils/readFilePromise.js
new file mode 100644
index 00000000..cc266272
--- /dev/null
+++ b/node_modules/copy-webpack-plugin/dist/utils/readFilePromise.js
@@ -0,0 +1,17 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+exports.default = function (inputFileSystem, path) {
+ return new Promise(function (resolve, reject) {
+ inputFileSystem.readFile(path, function (err, stats) {
+ if (err) {
+ return reject(err);
+ }
+
+ return resolve(stats);
+ });
+ });
+}; \ No newline at end of file
diff --git a/node_modules/copy-webpack-plugin/dist/utils/readPromise.js b/node_modules/copy-webpack-plugin/dist/utils/readPromise.js
new file mode 100644
index 00000000..cc266272
--- /dev/null
+++ b/node_modules/copy-webpack-plugin/dist/utils/readPromise.js
@@ -0,0 +1,17 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+exports.default = function (inputFileSystem, path) {
+ return new Promise(function (resolve, reject) {
+ inputFileSystem.readFile(path, function (err, stats) {
+ if (err) {
+ return reject(err);
+ }
+
+ return resolve(stats);
+ });
+ });
+}; \ No newline at end of file
diff --git a/node_modules/copy-webpack-plugin/dist/utils/statPromise.js b/node_modules/copy-webpack-plugin/dist/utils/statPromise.js
new file mode 100644
index 00000000..4f421bfb
--- /dev/null
+++ b/node_modules/copy-webpack-plugin/dist/utils/statPromise.js
@@ -0,0 +1,17 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+exports.default = function (inputFileSystem, path) {
+ return new Promise(function (resolve, reject) {
+ inputFileSystem.stat(path, function (err, stats) {
+ if (err) {
+ return reject(err);
+ }
+
+ return resolve(stats);
+ });
+ });
+}; \ No newline at end of file
diff --git a/node_modules/copy-webpack-plugin/dist/writeFile.js b/node_modules/copy-webpack-plugin/dist/writeFile.js
new file mode 100644
index 00000000..fc3dc10a
--- /dev/null
+++ b/node_modules/copy-webpack-plugin/dist/writeFile.js
@@ -0,0 +1,153 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = writeFile;
+
+var _loaderUtils = require('loader-utils');
+
+var _loaderUtils2 = _interopRequireDefault(_loaderUtils);
+
+var _path = require('path');
+
+var _path2 = _interopRequireDefault(_path);
+
+var _cacache = require('cacache');
+
+var _cacache2 = _interopRequireDefault(_cacache);
+
+var _serializeJavascript = require('serialize-javascript');
+
+var _serializeJavascript2 = _interopRequireDefault(_serializeJavascript);
+
+var _package = require('../package.json');
+
+var _findCacheDir = require('find-cache-dir');
+
+var _findCacheDir2 = _interopRequireDefault(_findCacheDir);
+
+var _promisify = require('./utils/promisify');
+
+var _crypto = require('crypto');
+
+var _crypto2 = _interopRequireDefault(_crypto);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function writeFile(globalRef, pattern, file) {
+ var info = globalRef.info,
+ debug = globalRef.debug,
+ compilation = globalRef.compilation,
+ fileDependencies = globalRef.fileDependencies,
+ written = globalRef.written,
+ inputFileSystem = globalRef.inputFileSystem,
+ copyUnmodified = globalRef.copyUnmodified;
+
+
+ return (0, _promisify.stat)(inputFileSystem, file.absoluteFrom).then(function (stat) {
+ // We don't write empty directories
+ if (stat.isDirectory()) {
+ return;
+ }
+
+ // If this came from a glob, add it to the file watchlist
+ if (pattern.fromType === 'glob') {
+ fileDependencies.push(file.absoluteFrom);
+ }
+
+ info('reading ' + file.absoluteFrom + ' to write to assets');
+ return (0, _promisify.readFile)(inputFileSystem, file.absoluteFrom).then(function (content) {
+ if (pattern.transform) {
+ var transform = function transform(content, absoluteFrom) {
+ return pattern.transform(content, absoluteFrom);
+ };
+
+ if (pattern.cache) {
+ if (!globalRef.cacheDir) {
+ globalRef.cacheDir = (0, _findCacheDir2.default)({ name: 'copy-webpack-plugin' });
+ }
+
+ var cacheKey = pattern.cache.key ? pattern.cache.key : (0, _serializeJavascript2.default)({
+ name: _package.name,
+ version: _package.version,
+ pattern: pattern,
+ hash: _crypto2.default.createHash('md4').update(content).digest('hex')
+ });
+
+ return _cacache2.default.get(globalRef.cacheDir, cacheKey).then(function (result) {
+ return result.data;
+ }, function () {
+ return Promise.resolve().then(function () {
+ return transform(content, file.absoluteFrom);
+ }).then(function (content) {
+ return _cacache2.default.put(globalRef.cacheDir, cacheKey, content).then(function () {
+ return content;
+ });
+ });
+ });
+ }
+
+ content = transform(content, file.absoluteFrom);
+ }
+
+ return content;
+ }).then(function (content) {
+ if (pattern.toType === 'template') {
+ info('interpolating template \'' + file.webpackTo + '\' for \'' + file.relativeFrom + '\'');
+
+ // If it doesn't have an extension, remove it from the pattern
+ // ie. [name].[ext] or [name][ext] both become [name]
+ if (!_path2.default.extname(file.relativeFrom)) {
+ file.webpackTo = file.webpackTo.replace(/\.?\[ext\]/g, '');
+ }
+
+ file.webpackTo = _loaderUtils2.default.interpolateName({ resourcePath: file.absoluteFrom }, file.webpackTo, {
+ content: content,
+ regExp: file.webpackToRegExp,
+ context: pattern.context
+ });
+ }
+
+ return content;
+ }).then(function (content) {
+ if (pattern.transformPath) {
+ return Promise.resolve(pattern.transformPath(file.webpackTo, file.absoluteFrom)).then(function (newPath) {
+ file.webpackTo = newPath;
+ }).then(function () {
+ return content;
+ });
+ }
+
+ return content;
+ }).then(function (content) {
+ var hash = _loaderUtils2.default.getHashDigest(content);
+
+ if (!copyUnmodified && written[file.absoluteFrom] && written[file.absoluteFrom]['hash'] === hash && written[file.absoluteFrom]['webpackTo'] === file.webpackTo) {
+ info('skipping \'' + file.webpackTo + '\', because it hasn\'t changed');
+ return;
+ } else {
+ debug('added ' + hash + ' to written tracking for \'' + file.absoluteFrom + '\'');
+ written[file.absoluteFrom] = {
+ hash: hash,
+ webpackTo: file.webpackTo
+ };
+ }
+
+ if (compilation.assets[file.webpackTo] && !file.force) {
+ info('skipping \'' + file.webpackTo + '\', because it already exists');
+ return;
+ }
+
+ info('writing \'' + file.webpackTo + '\' to compilation assets from \'' + file.absoluteFrom + '\'');
+ compilation.assets[file.webpackTo] = {
+ size: function size() {
+ return stat.size;
+ },
+ source: function source() {
+ return content;
+ }
+ };
+ });
+ });
+} \ No newline at end of file
diff --git a/node_modules/copy-webpack-plugin/node_modules/globby/gitignore.js b/node_modules/copy-webpack-plugin/node_modules/globby/gitignore.js
new file mode 100644
index 00000000..53fd3119
--- /dev/null
+++ b/node_modules/copy-webpack-plugin/node_modules/globby/gitignore.js
@@ -0,0 +1,88 @@
+'use strict';
+const fs = require('fs');
+const path = require('path');
+const glob = require('glob');
+const gitIgnore = require('ignore');
+const pify = require('pify');
+const slash = require('slash');
+
+const globP = pify(glob);
+const readFileP = pify(fs.readFile);
+
+const mapGitIgnorePatternTo = base => ignore => {
+ if (ignore.startsWith('!')) {
+ return '!' + path.posix.join(base, ignore.substr(1));
+ }
+
+ return path.posix.join(base, ignore);
+};
+
+const parseGitIgnore = (content, opts) => {
+ const base = slash(path.relative(opts.cwd, path.dirname(opts.fileName)));
+
+ return content
+ .split(/\r?\n/)
+ .filter(Boolean)
+ .filter(l => l.charAt(0) !== '#')
+ .map(mapGitIgnorePatternTo(base));
+};
+
+const reduceIgnore = files => {
+ return files.reduce((ignores, file) => {
+ ignores.add(parseGitIgnore(file.content, {
+ cwd: file.cwd,
+ fileName: file.filePath
+ }));
+ return ignores;
+ }, gitIgnore());
+};
+
+const getIsIgnoredPredecate = (ignores, cwd) => {
+ return p => ignores.ignores(slash(path.relative(cwd, p)));
+};
+
+const getFile = (file, cwd) => {
+ const filePath = path.join(cwd, file);
+ return readFileP(filePath, 'utf8')
+ .then(content => ({
+ content,
+ cwd,
+ filePath
+ }));
+};
+
+const getFileSync = (file, cwd) => {
+ const filePath = path.join(cwd, file);
+ const content = fs.readFileSync(filePath, 'utf8');
+
+ return {
+ content,
+ cwd,
+ filePath
+ };
+};
+
+const normalizeOpts = opts => {
+ opts = opts || {};
+ const ignore = opts.ignore || [];
+ const cwd = opts.cwd || process.cwd();
+ return {ignore, cwd};
+};
+
+module.exports = o => {
+ const opts = normalizeOpts(o);
+
+ return globP('**/.gitignore', {ignore: opts.ignore, cwd: opts.cwd})
+ .then(paths => Promise.all(paths.map(file => getFile(file, opts.cwd))))
+ .then(files => reduceIgnore(files))
+ .then(ignores => getIsIgnoredPredecate(ignores, opts.cwd));
+};
+
+module.exports.sync = o => {
+ const opts = normalizeOpts(o);
+
+ const paths = glob.sync('**/.gitignore', {ignore: opts.ignore, cwd: opts.cwd});
+ const files = paths.map(file => getFileSync(file, opts.cwd));
+ const ignores = reduceIgnore(files);
+ return getIsIgnoredPredecate(ignores, opts.cwd);
+};
diff --git a/node_modules/copy-webpack-plugin/node_modules/globby/index.js b/node_modules/copy-webpack-plugin/node_modules/globby/index.js
new file mode 100644
index 00000000..a6b63f0b
--- /dev/null
+++ b/node_modules/copy-webpack-plugin/node_modules/globby/index.js
@@ -0,0 +1,134 @@
+'use strict';
+const arrayUnion = require('array-union');
+const glob = require('glob');
+const pify = require('pify');
+const dirGlob = require('dir-glob');
+const gitignore = require('./gitignore');
+
+const globP = pify(glob);
+const DEFAULT_FILTER = () => false;
+
+const isNegative = pattern => pattern[0] === '!';
+
+const assertPatternsInput = patterns => {
+ if (!patterns.every(x => typeof x === 'string')) {
+ throw new TypeError('Patterns must be a string or an array of strings');
+ }
+};
+
+const generateGlobTasks = (patterns, taskOpts) => {
+ patterns = [].concat(patterns);
+ assertPatternsInput(patterns);
+
+ const globTasks = [];
+
+ taskOpts = Object.assign({
+ cache: Object.create(null),
+ statCache: Object.create(null),
+ realpathCache: Object.create(null),
+ symlinks: Object.create(null),
+ ignore: [],
+ expandDirectories: true,
+ nodir: true
+ }, taskOpts);
+
+ patterns.forEach((pattern, i) => {
+ if (isNegative(pattern)) {
+ return;
+ }
+
+ const ignore = patterns
+ .slice(i)
+ .filter(isNegative)
+ .map(pattern => pattern.slice(1));
+
+ const opts = Object.assign({}, taskOpts, {
+ ignore: taskOpts.ignore.concat(ignore)
+ });
+
+ globTasks.push({pattern, opts});
+ });
+
+ return globTasks;
+};
+
+const globDirs = (task, fn) => {
+ if (Array.isArray(task.opts.expandDirectories)) {
+ return fn(task.pattern, {files: task.opts.expandDirectories});
+ }
+
+ if (typeof task.opts.expandDirectories === 'object') {
+ return fn(task.pattern, task.opts.expandDirectories);
+ }
+
+ return fn(task.pattern);
+};
+
+const getPattern = (task, fn) => task.opts.expandDirectories ? globDirs(task, fn) : [task.pattern];
+
+module.exports = (patterns, opts) => {
+ let globTasks;
+
+ try {
+ globTasks = generateGlobTasks(patterns, opts);
+ } catch (err) {
+ return Promise.reject(err);
+ }
+
+ const getTasks = Promise.all(globTasks.map(task => Promise.resolve(getPattern(task, dirGlob))
+ .then(globs => Promise.all(globs.map(glob => ({
+ pattern: glob,
+ opts: task.opts
+ }))))
+ ))
+ .then(tasks => arrayUnion.apply(null, tasks));
+
+ const getFilter = () => {
+ return Promise.resolve(
+ opts && opts.gitignore ?
+ gitignore({cwd: opts.cwd, ignore: opts.ignore}) :
+ DEFAULT_FILTER
+ );
+ };
+
+ return getFilter()
+ .then(filter => {
+ return getTasks
+ .then(tasks => Promise.all(tasks.map(task => globP(task.pattern, task.opts))))
+ .then(paths => arrayUnion.apply(null, paths))
+ .then(paths => paths.filter(p => !filter(p)));
+ });
+};
+
+module.exports.sync = (patterns, opts) => {
+ const globTasks = generateGlobTasks(patterns, opts);
+
+ const getFilter = () => {
+ return opts && opts.gitignore ?
+ gitignore.sync({cwd: opts.cwd, ignore: opts.ignore}) :
+ DEFAULT_FILTER;
+ };
+
+ const tasks = globTasks.reduce((tasks, task) => {
+ const newTask = getPattern(task, dirGlob.sync).map(glob => ({
+ pattern: glob,
+ opts: task.opts
+ }));
+ return tasks.concat(newTask);
+ }, []);
+
+ const filter = getFilter();
+
+ return tasks.reduce(
+ (matches, task) => arrayUnion(matches, glob.sync(task.pattern, task.opts)),
+ []
+ ).filter(p => !filter(p));
+};
+
+module.exports.generateGlobTasks = generateGlobTasks;
+
+module.exports.hasMagic = (patterns, opts) => []
+ .concat(patterns)
+ .some(pattern => glob.hasMagic(pattern, opts));
+
+module.exports.gitignore = gitignore;
diff --git a/node_modules/copy-webpack-plugin/node_modules/globby/license b/node_modules/copy-webpack-plugin/node_modules/globby/license
new file mode 100644
index 00000000..e7af2f77
--- /dev/null
+++ b/node_modules/copy-webpack-plugin/node_modules/globby/license
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node_modules/copy-webpack-plugin/node_modules/globby/package.json b/node_modules/copy-webpack-plugin/node_modules/globby/package.json
new file mode 100644
index 00000000..ad1e78d9
--- /dev/null
+++ b/node_modules/copy-webpack-plugin/node_modules/globby/package.json
@@ -0,0 +1,74 @@
+{
+ "name": "globby",
+ "version": "7.1.1",
+ "description": "Extends `glob` with support for multiple patterns and exposes a Promise API",
+ "license": "MIT",
+ "repository": "sindresorhus/globby",
+ "author": {
+ "email": "sindresorhus@gmail.com",
+ "name": "Sindre Sorhus",
+ "url": "sindresorhus.com"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "scripts": {
+ "bench": "npm update glob-stream fast-glob && matcha bench.js",
+ "test": "xo && ava"
+ },
+ "files": [
+ "index.js",
+ "gitignore.js"
+ ],
+ "keywords": [
+ "all",
+ "array",
+ "directories",
+ "dirs",
+ "expand",
+ "files",
+ "filesystem",
+ "filter",
+ "find",
+ "fnmatch",
+ "folders",
+ "fs",
+ "glob",
+ "globbing",
+ "globs",
+ "gulpfriendly",
+ "match",
+ "matcher",
+ "minimatch",
+ "multi",
+ "multiple",
+ "paths",
+ "pattern",
+ "patterns",
+ "traverse",
+ "util",
+ "utility",
+ "wildcard",
+ "wildcards",
+ "promise",
+ "gitignore",
+ "git"
+ ],
+ "dependencies": {
+ "array-union": "^1.0.1",
+ "dir-glob": "^2.0.0",
+ "glob": "^7.1.2",
+ "ignore": "^3.3.5",
+ "pify": "^3.0.0",
+ "slash": "^1.0.0"
+ },
+ "devDependencies": {
+ "ava": "*",
+ "fast-glob": "^1.0.1",
+ "glob-stream": "^6.1.0",
+ "globby": "sindresorhus/globby#master",
+ "matcha": "^0.7.0",
+ "rimraf": "^2.2.8",
+ "xo": "^0.18.0"
+ }
+}
diff --git a/node_modules/copy-webpack-plugin/node_modules/globby/readme.md b/node_modules/copy-webpack-plugin/node_modules/globby/readme.md
new file mode 100644
index 00000000..0143a7c4
--- /dev/null
+++ b/node_modules/copy-webpack-plugin/node_modules/globby/readme.md
@@ -0,0 +1,156 @@
+# globby [![Build Status](https://travis-ci.org/sindresorhus/globby.svg?branch=master)](https://travis-ci.org/sindresorhus/globby)
+
+> User-friendly glob matching
+
+Based on [`glob`](https://github.com/isaacs/node-glob), but adds a bunch of useful features and a nicer API.
+
+
+## Features
+
+- Promise API
+- Multiple patterns
+- Negated patterns: `['foo*', '!foobar']`
+- Expands directories: `dir` → `dir/**/*`
+- Supports `.gitignore`
+
+
+## Install
+
+```
+$ npm install globby
+```
+
+
+## Usage
+
+```
+├── unicorn
+├── cake
+└── rainbow
+```
+
+```js
+const globby = require('globby');
+
+(async () => {
+ const paths = await globby(['*', '!cake']);
+
+ console.log(paths);
+ //=> ['unicorn', 'rainbow']
+})();
+```
+
+
+## API
+
+### globby(patterns, [options])
+
+Returns a `Promise<Array>` of matching paths.
+
+#### patterns
+
+Type: `string` `Array`
+
+See supported `minimatch` [patterns](https://github.com/isaacs/minimatch#usage).
+
+#### options
+
+Type: `Object`
+
+See the [`node-glob` options](https://github.com/isaacs/node-glob#options) in addition to the ones below.
+
+One difference is that `nodir` is `true` by default here.
+
+##### expandDirectories
+
+Type: `boolean` `Array` `Object`<br>
+Default: `true`
+
+If set to `true`, `globby` will automatically glob directories for you. If you define an `Array` it will only glob files that matches the patterns inside the `Array`. You can also define an `Object` with `files` and `extensions` like below:
+
+```js
+(async () => {
+ const paths = await globby('images', {
+ expandDirectories: {
+ files: ['cat', 'unicorn', '*.jpg'],
+ extensions: ['png']
+ }
+ });
+
+ console.log(paths);
+ //=> ['cat.png', 'unicorn.png', 'cow.jpg', 'rainbow.jpg']
+})();
+```
+
+Note that if you set this option to `false`, you won't get back matched directories unless you set `nodir: false`.
+
+##### gitignore
+
+Type: `boolean`<br>
+Default: `false`
+
+Respect ignore patterns in `.gitignore` files that apply to the globbed files.
+
+### globby.sync(patterns, [options])
+
+Returns an `Array` of matching paths.
+
+### globby.generateGlobTasks(patterns, [options])
+
+Returns an `Array<Object>` in the format `{pattern: string, opts: Object}`, which can be passed as arguments to [`node-glob`](https://github.com/isaacs/node-glob). This is useful for other globbing-related packages.
+
+Note that you should avoid running the same tasks multiple times as they contain a file system cache. Instead, run this method each time to ensure file system changes are taken into consideration.
+
+### globby.hasMagic(patterns, [options])
+
+Returns a `boolean` of whether there are any special glob characters in the `patterns`.
+
+Note that the options affect the results. If `noext: true` is set, then `+(a|b)` will not be considered a magic pattern. If the pattern has a brace expansion, like `a/{b/c,x/y}`, then that is considered magical, unless `nobrace: true` is set.
+
+### globby.gitignore([options])
+
+Returns a `Promise<(path: string) => boolean>` indicating wether a given path is ignored via a `.gitignore` file.
+
+Takes `cwd?: string` and `ignore?: string[]` as options. `.gitignore` files matched by the ignore config are not
+used for the resulting filter function.
+
+```js
+const {gitignore} = require('globby');
+
+(async () => {
+ const isIgnored = await gitignore();
+ console.log(isIgnored('some/file'));
+})();
+```
+
+### globby.gitignore.sync([options])
+
+Returns a `(path: string) => boolean` indicating wether a given path is ignored via a `.gitignore` file.
+
+Takes the same options as `globby.gitignore`.
+
+
+## Globbing patterns
+
+Just a quick overview.
+
+- `*` matches any number of characters, but not `/`
+- `?` matches a single character, but not `/`
+- `**` matches any number of characters, including `/`, as long as it's the only thing in a path part
+- `{}` allows for a comma-separated list of "or" expressions
+- `!` at the beginning of a pattern will negate the match
+
+[Various patterns and expected matches.](https://github.com/sindresorhus/multimatch/blob/master/test/test.js)
+
+
+## Related
+
+- [multimatch](https://github.com/sindresorhus/multimatch) - Match against a list instead of the filesystem
+- [matcher](https://github.com/sindresorhus/matcher) - Simple wildcard matching
+- [del](https://github.com/sindresorhus/del) - Delete files and directories
+- [make-dir](https://github.com/sindresorhus/make-dir) - Make a directory and its parents if needed
+
+
+## License
+
+MIT © [Sindre Sorhus](https://sindresorhus.com)
diff --git a/node_modules/copy-webpack-plugin/node_modules/is-extglob/LICENSE b/node_modules/copy-webpack-plugin/node_modules/is-extglob/LICENSE
new file mode 100644
index 00000000..842218cf
--- /dev/null
+++ b/node_modules/copy-webpack-plugin/node_modules/is-extglob/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2016, Jon Schlinkert
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/node_modules/copy-webpack-plugin/node_modules/is-extglob/README.md b/node_modules/copy-webpack-plugin/node_modules/is-extglob/README.md
new file mode 100644
index 00000000..0416af5c
--- /dev/null
+++ b/node_modules/copy-webpack-plugin/node_modules/is-extglob/README.md
@@ -0,0 +1,107 @@
+# is-extglob [![NPM version](https://img.shields.io/npm/v/is-extglob.svg?style=flat)](https://www.npmjs.com/package/is-extglob) [![NPM downloads](https://img.shields.io/npm/dm/is-extglob.svg?style=flat)](https://npmjs.org/package/is-extglob) [![Build Status](https://img.shields.io/travis/jonschlinkert/is-extglob.svg?style=flat)](https://travis-ci.org/jonschlinkert/is-extglob)
+
+> Returns true if a string has an extglob.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save is-extglob
+```
+
+## Usage
+
+```js
+var isExtglob = require('is-extglob');
+```
+
+**True**
+
+```js
+isExtglob('?(abc)');
+isExtglob('@(abc)');
+isExtglob('!(abc)');
+isExtglob('*(abc)');
+isExtglob('+(abc)');
+```
+
+**False**
+
+Escaped extglobs:
+
+```js
+isExtglob('\\?(abc)');
+isExtglob('\\@(abc)');
+isExtglob('\\!(abc)');
+isExtglob('\\*(abc)');
+isExtglob('\\+(abc)');
+```
+
+Everything else...
+
+```js
+isExtglob('foo.js');
+isExtglob('!foo.js');
+isExtglob('*.js');
+isExtglob('**/abc.js');
+isExtglob('abc/*.js');
+isExtglob('abc/(aaa|bbb).js');
+isExtglob('abc/[a-z].js');
+isExtglob('abc/{a,b}.js');
+isExtglob('abc/?.js');
+isExtglob('abc.js');
+isExtglob('abc/def/ghi.js');
+```
+
+## History
+
+**v2.0**
+
+Adds support for escaping. Escaped exglobs no longer return true.
+
+## About
+
+### Related projects
+
+* [has-glob](https://www.npmjs.com/package/has-glob): Returns `true` if an array has a glob pattern. | [homepage](https://github.com/jonschlinkert/has-glob "Returns `true` if an array has a glob pattern.")
+* [is-glob](https://www.npmjs.com/package/is-glob): Returns `true` if the given string looks like a glob pattern or an extglob pattern… [more](https://github.com/jonschlinkert/is-glob) | [homepage](https://github.com/jonschlinkert/is-glob "Returns `true` if the given string looks like a glob pattern or an extglob pattern. This makes it easy to create code that only uses external modules like node-glob when necessary, resulting in much faster code execution and initialization time, and a bet")
+* [micromatch](https://www.npmjs.com/package/micromatch): Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch. | [homepage](https://github.com/jonschlinkert/micromatch "Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch.")
+
+### Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+### Building docs
+
+_(This document was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme) (a [verb](https://github.com/verbose/verb) generator), please don't edit the readme directly. Any changes to the readme must be made in [.verb.md](.verb.md).)_
+
+To generate the readme and API documentation with [verb](https://github.com/verbose/verb):
+
+```sh
+$ npm install -g verb verb-generate-readme && verb
+```
+
+### Running tests
+
+Install dev dependencies:
+
+```sh
+$ npm install -d && npm test
+```
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](http://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2016, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT license](https://github.com/jonschlinkert/is-extglob/blob/master/LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.1.31, on October 12, 2016._ \ No newline at end of file
diff --git a/node_modules/copy-webpack-plugin/node_modules/is-extglob/index.js b/node_modules/copy-webpack-plugin/node_modules/is-extglob/index.js
new file mode 100644
index 00000000..c1d986fc
--- /dev/null
+++ b/node_modules/copy-webpack-plugin/node_modules/is-extglob/index.js
@@ -0,0 +1,20 @@
+/*!
+ * is-extglob <https://github.com/jonschlinkert/is-extglob>
+ *
+ * Copyright (c) 2014-2016, Jon Schlinkert.
+ * Licensed under the MIT License.
+ */
+
+module.exports = function isExtglob(str) {
+ if (typeof str !== 'string' || str === '') {
+ return false;
+ }
+
+ var match;
+ while ((match = /(\\).|([@?!+*]\(.*\))/g.exec(str))) {
+ if (match[2]) return true;
+ str = str.slice(match.index + match[0].length);
+ }
+
+ return false;
+};
diff --git a/node_modules/copy-webpack-plugin/node_modules/is-extglob/package.json b/node_modules/copy-webpack-plugin/node_modules/is-extglob/package.json
new file mode 100644
index 00000000..7a908369
--- /dev/null
+++ b/node_modules/copy-webpack-plugin/node_modules/is-extglob/package.json
@@ -0,0 +1,69 @@
+{
+ "name": "is-extglob",
+ "description": "Returns true if a string has an extglob.",
+ "version": "2.1.1",
+ "homepage": "https://github.com/jonschlinkert/is-extglob",
+ "author": "Jon Schlinkert (https://github.com/jonschlinkert)",
+ "repository": "jonschlinkert/is-extglob",
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/is-extglob/issues"
+ },
+ "license": "MIT",
+ "files": [
+ "index.js"
+ ],
+ "main": "index.js",
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "devDependencies": {
+ "gulp-format-md": "^0.1.10",
+ "mocha": "^3.0.2"
+ },
+ "keywords": [
+ "bash",
+ "braces",
+ "check",
+ "exec",
+ "expression",
+ "extglob",
+ "glob",
+ "globbing",
+ "globstar",
+ "is",
+ "match",
+ "matches",
+ "pattern",
+ "regex",
+ "regular",
+ "string",
+ "test"
+ ],
+ "verb": {
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "related": {
+ "list": [
+ "has-glob",
+ "is-glob",
+ "micromatch"
+ ]
+ },
+ "reflinks": [
+ "verb",
+ "verb-generate-readme"
+ ],
+ "lint": {
+ "reflinks": true
+ }
+ }
+}
diff --git a/node_modules/copy-webpack-plugin/node_modules/is-glob/LICENSE b/node_modules/copy-webpack-plugin/node_modules/is-glob/LICENSE
new file mode 100644
index 00000000..3f2eca18
--- /dev/null
+++ b/node_modules/copy-webpack-plugin/node_modules/is-glob/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2017, Jon Schlinkert.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/node_modules/copy-webpack-plugin/node_modules/is-glob/README.md b/node_modules/copy-webpack-plugin/node_modules/is-glob/README.md
new file mode 100644
index 00000000..7c252291
--- /dev/null
+++ b/node_modules/copy-webpack-plugin/node_modules/is-glob/README.md
@@ -0,0 +1,190 @@
+# is-glob [![NPM version](https://img.shields.io/npm/v/is-glob.svg?style=flat)](https://www.npmjs.com/package/is-glob) [![NPM monthly downloads](https://img.shields.io/npm/dm/is-glob.svg?style=flat)](https://npmjs.org/package/is-glob) [![NPM total downloads](https://img.shields.io/npm/dt/is-glob.svg?style=flat)](https://npmjs.org/package/is-glob) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/is-glob.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/is-glob) [![Windows Build Status](https://img.shields.io/appveyor/ci/jonschlinkert/is-glob.svg?style=flat&label=AppVeyor)](https://ci.appveyor.com/project/jonschlinkert/is-glob)
+
+> Returns `true` if the given string looks like a glob pattern or an extglob pattern. This makes it easy to create code that only uses external modules like node-glob when necessary, resulting in much faster code execution and initialization time, and a better user experience.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save is-glob
+```
+
+You might also be interested in [is-valid-glob](https://github.com/jonschlinkert/is-valid-glob) and [has-glob](https://github.com/jonschlinkert/has-glob).
+
+## Usage
+
+```js
+var isGlob = require('is-glob');
+```
+
+### Default behavior
+
+**True**
+
+Patterns that have glob characters or regex patterns will return `true`:
+
+```js
+isGlob('!foo.js');
+isGlob('*.js');
+isGlob('**/abc.js');
+isGlob('abc/*.js');
+isGlob('abc/(aaa|bbb).js');
+isGlob('abc/[a-z].js');
+isGlob('abc/{a,b}.js');
+//=> true
+```
+
+Extglobs
+
+```js
+isGlob('abc/@(a).js');
+isGlob('abc/!(a).js');
+isGlob('abc/+(a).js');
+isGlob('abc/*(a).js');
+isGlob('abc/?(a).js');
+//=> true
+```
+
+**False**
+
+Escaped globs or extglobs return `false`:
+
+```js
+isGlob('abc/\\@(a).js');
+isGlob('abc/\\!(a).js');
+isGlob('abc/\\+(a).js');
+isGlob('abc/\\*(a).js');
+isGlob('abc/\\?(a).js');
+isGlob('\\!foo.js');
+isGlob('\\*.js');
+isGlob('\\*\\*/abc.js');
+isGlob('abc/\\*.js');
+isGlob('abc/\\(aaa|bbb).js');
+isGlob('abc/\\[a-z].js');
+isGlob('abc/\\{a,b}.js');
+//=> false
+```
+
+Patterns that do not have glob patterns return `false`:
+
+```js
+isGlob('abc.js');
+isGlob('abc/def/ghi.js');
+isGlob('foo.js');
+isGlob('abc/@.js');
+isGlob('abc/+.js');
+isGlob('abc/?.js');
+isGlob();
+isGlob(null);
+//=> false
+```
+
+Arrays are also `false` (If you want to check if an array has a glob pattern, use [has-glob](https://github.com/jonschlinkert/has-glob)):
+
+```js
+isGlob(['**/*.js']);
+isGlob(['foo.js']);
+//=> false
+```
+
+### Option strict
+
+When `options.strict === false` the behavior is less strict in determining if a pattern is a glob. Meaning that
+some patterns that would return `false` may return `true`. This is done so that matching libraries like [micromatch](https://github.com/micromatch/micromatch) have a chance at determining if the pattern is a glob or not.
+
+**True**
+
+Patterns that have glob characters or regex patterns will return `true`:
+
+```js
+isGlob('!foo.js', {strict: false});
+isGlob('*.js', {strict: false});
+isGlob('**/abc.js', {strict: false});
+isGlob('abc/*.js', {strict: false});
+isGlob('abc/(aaa|bbb).js', {strict: false});
+isGlob('abc/[a-z].js', {strict: false});
+isGlob('abc/{a,b}.js', {strict: false});
+//=> true
+```
+
+Extglobs
+
+```js
+isGlob('abc/@(a).js', {strict: false});
+isGlob('abc/!(a).js', {strict: false});
+isGlob('abc/+(a).js', {strict: false});
+isGlob('abc/*(a).js', {strict: false});
+isGlob('abc/?(a).js', {strict: false});
+//=> true
+```
+
+**False**
+
+Escaped globs or extglobs return `false`:
+
+```js
+isGlob('\\!foo.js', {strict: false});
+isGlob('\\*.js', {strict: false});
+isGlob('\\*\\*/abc.js', {strict: false});
+isGlob('abc/\\*.js', {strict: false});
+isGlob('abc/\\(aaa|bbb).js', {strict: false});
+isGlob('abc/\\[a-z].js', {strict: false});
+isGlob('abc/\\{a,b}.js', {strict: false});
+//=> false
+```
+
+## About
+
+### Related projects
+
+* [assemble](https://www.npmjs.com/package/assemble): Get the rocks out of your socks! Assemble makes you fast at creating web projects… [more](https://github.com/assemble/assemble) | [homepage](https://github.com/assemble/assemble "Get the rocks out of your socks! Assemble makes you fast at creating web projects. Assemble is used by thousands of projects for rapid prototyping, creating themes, scaffolds, boilerplates, e-books, UI components, API documentation, blogs, building websit")
+* [base](https://www.npmjs.com/package/base): Framework for rapidly creating high quality node.js applications, using plugins like building blocks | [homepage](https://github.com/node-base/base "Framework for rapidly creating high quality node.js applications, using plugins like building blocks")
+* [update](https://www.npmjs.com/package/update): Be scalable! Update is a new, open source developer framework and CLI for automating updates… [more](https://github.com/update/update) | [homepage](https://github.com/update/update "Be scalable! Update is a new, open source developer framework and CLI for automating updates of any kind in code projects.")
+* [verb](https://www.npmjs.com/package/verb): Documentation generator for GitHub projects. Verb is extremely powerful, easy to use, and is used… [more](https://github.com/verbose/verb) | [homepage](https://github.com/verbose/verb "Documentation generator for GitHub projects. Verb is extremely powerful, easy to use, and is used on hundreds of projects of all sizes to generate everything from API docs to readmes.")
+
+### Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+### Contributors
+
+| **Commits** | **Contributor** |
+| --- | --- |
+| 47 | [jonschlinkert](https://github.com/jonschlinkert) |
+| 1 | [doowb](https://github.com/doowb) |
+| 1 | [tuvistavie](https://github.com/tuvistavie) |
+
+### Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+### Running tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](https://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on August 07, 2017._ \ No newline at end of file
diff --git a/node_modules/copy-webpack-plugin/node_modules/is-glob/index.js b/node_modules/copy-webpack-plugin/node_modules/is-glob/index.js
new file mode 100644
index 00000000..711b8b25
--- /dev/null
+++ b/node_modules/copy-webpack-plugin/node_modules/is-glob/index.js
@@ -0,0 +1,46 @@
+/*!
+ * is-glob <https://github.com/jonschlinkert/is-glob>
+ *
+ * Copyright (c) 2014-2017, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+
+var isExtglob = require('is-extglob');
+var chars = { '{': '}', '(': ')', '[': ']'};
+
+module.exports = function isGlob(str, options) {
+ if (typeof str !== 'string' || str === '') {
+ return false;
+ }
+
+ if (isExtglob(str)) {
+ return true;
+ }
+
+ var regex = /\\(.)|(^!|\*|[\].+)]\?|\[[^\\\]]+\]|\{[^\\}]+\}|\(\?[:!=][^\\)]+\)|\([^|]+\|[^\\)]+\))/;
+ var match;
+
+ // optionally relax regex
+ if (options && options.strict === false) {
+ regex = /\\(.)|(^!|[*?{}()[\]]|\(\?)/;
+ }
+
+ while ((match = regex.exec(str))) {
+ if (match[2]) return true;
+ var idx = match.index + match[0].length;
+
+ // if an open bracket/brace/paren is escaped,
+ // set the index to the next closing character
+ var open = match[1];
+ var close = open ? chars[open] : null;
+ if (open && close) {
+ var n = str.indexOf(close, idx);
+ if (n !== -1) {
+ idx = n + 1;
+ }
+ }
+
+ str = str.slice(idx);
+ }
+ return false;
+};
diff --git a/node_modules/copy-webpack-plugin/node_modules/is-glob/package.json b/node_modules/copy-webpack-plugin/node_modules/is-glob/package.json
new file mode 100644
index 00000000..8d95d4ad
--- /dev/null
+++ b/node_modules/copy-webpack-plugin/node_modules/is-glob/package.json
@@ -0,0 +1,81 @@
+{
+ "name": "is-glob",
+ "description": "Returns `true` if the given string looks like a glob pattern or an extglob pattern. This makes it easy to create code that only uses external modules like node-glob when necessary, resulting in much faster code execution and initialization time, and a better user experience.",
+ "version": "4.0.0",
+ "homepage": "https://github.com/jonschlinkert/is-glob",
+ "author": "Jon Schlinkert (https://github.com/jonschlinkert)",
+ "contributors": [
+ "Brian Woodward (https://twitter.com/doowb)",
+ "Daniel Perez (https://tuvistavie.com)",
+ "Jon Schlinkert (http://twitter.com/jonschlinkert)"
+ ],
+ "repository": "jonschlinkert/is-glob",
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/is-glob/issues"
+ },
+ "license": "MIT",
+ "files": [
+ "index.js"
+ ],
+ "main": "index.js",
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "devDependencies": {
+ "gulp-format-md": "^0.1.10",
+ "mocha": "^3.0.2"
+ },
+ "keywords": [
+ "bash",
+ "braces",
+ "check",
+ "exec",
+ "expression",
+ "extglob",
+ "glob",
+ "globbing",
+ "globstar",
+ "is",
+ "match",
+ "matches",
+ "pattern",
+ "regex",
+ "regular",
+ "string",
+ "test"
+ ],
+ "verb": {
+ "layout": "default",
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "related": {
+ "list": [
+ "assemble",
+ "base",
+ "update",
+ "verb"
+ ]
+ },
+ "reflinks": [
+ "assemble",
+ "bach",
+ "base",
+ "composer",
+ "gulp",
+ "has-glob",
+ "is-valid-glob",
+ "micromatch",
+ "npm",
+ "scaffold",
+ "verb",
+ "vinyl"
+ ]
+ }
+}
diff --git a/node_modules/copy-webpack-plugin/package.json b/node_modules/copy-webpack-plugin/package.json
new file mode 100644
index 00000000..01469997
--- /dev/null
+++ b/node_modules/copy-webpack-plugin/package.json
@@ -0,0 +1,56 @@
+{
+ "name": "copy-webpack-plugin",
+ "version": "4.6.0",
+ "description": "Copy files && directories with webpack",
+ "author": "Len Boyette",
+ "license": "MIT",
+ "main": "dist/index.js",
+ "engines": {
+ "node": ">= 4"
+ },
+ "files": [
+ "dist"
+ ],
+ "scripts": {
+ "lint": "eslint src/ tests/",
+ "prepare": "npm run build",
+ "release": "standard-version",
+ "pretest": "npm run lint && npm run build && npm run build:tests",
+ "test": "mocha compiled_tests/",
+ "build": "babel src/ --out-dir dist/",
+ "build:tests": "babel tests/ --out-dir compiled_tests/ && rimraf compiled_tests/helpers && ncp tests/helpers compiled_tests/helpers && node scripts/createSpecialDirectory.js"
+ },
+ "dependencies": {
+ "globby": "^7.1.1",
+ "cacache": "^10.0.4",
+ "find-cache-dir": "^1.0.0",
+ "serialize-javascript": "^1.4.0",
+ "is-glob": "^4.0.0",
+ "loader-utils": "^1.1.0",
+ "minimatch": "^3.0.4",
+ "p-limit": "^1.0.0"
+ },
+ "devDependencies": {
+ "babel-cli": "^6.8.0",
+ "babel-preset-es2015": "^6.6.0",
+ "chai": "^3.4.0",
+ "enhanced-resolve": "^3.4.1",
+ "eslint": "^2.9.0",
+ "is-gzip": "^2.0.0",
+ "mkdirp": "^0.5.1",
+ "mocha": "^2.4.5",
+ "ncp": "^2.0.0",
+ "rimraf": "^2.6.2",
+ "standard-version": "^4.2.0"
+ },
+ "homepage": "https://github.com/webpack-contrib/copy-webpack-plugin",
+ "bugs": "https://github.com/webpack-contrib/copy-webpack-plugin/issues",
+ "repository": "https://github.com/webpack-contrib/copy-webpack-plugin.git",
+ "keywords": [
+ "webpack",
+ "plugin",
+ "transfer",
+ "move",
+ "copy"
+ ]
+}