From 26105034da4fcce7ac883c899d781f016559310d Mon Sep 17 00:00:00 2001 From: ruki Date: Thu, 8 Nov 2018 00:38:48 +0800 Subject: switch to vuepress --- .../optimize-css-assets-webpack-plugin/.babelrc | 25 +++++++ .../optimize-css-assets-webpack-plugin/.nvmrc | 1 + .../optimize-css-assets-webpack-plugin/LICENSE | 21 ++++++ .../optimize-css-assets-webpack-plugin/README.md | 57 +++++++++++++++ .../node_modules/.bin/webpack | 1 + .../package.json | 51 ++++++++++++++ .../src/index.js | 72 +++++++++++++++++++ .../__snapshots__/webpack-integration.test.js.snap | 22 ++++++ .../assetNameRegExp-no-source/a_optimize-me.css | 6 ++ .../assetNameRegExp-no-source/b_optimize-me.css | 7 ++ .../test/cases/assetNameRegExp-no-source/c.css | 9 +++ .../assetNameRegExp-no-source/expected/file.css | 1 + .../test/cases/assetNameRegExp-no-source/index.js | 10 +++ .../assetNameRegExp-no-source/webpack.config.js | 26 +++++++ .../duplicate-css-exists-without-plugin/a.css | 6 ++ .../duplicate-css-exists-without-plugin/b.css | 6 ++ .../expected/file.css | 1 + .../duplicate-css-exists-without-plugin/index.js | 2 + .../webpack.config.js | 23 ++++++ .../a.css | 6 ++ .../b.css | 4 ++ .../expected/file.css | 1 + .../index.js | 2 + .../webpack.config.js | 24 +++++++ .../a_optimize-me.css | 6 ++ .../b_optimize-me.css | 7 ++ .../only-assetNameRegExp-processed/c_as-is.css | 9 +++ .../expected/as_is.css | 9 +++ .../expected/optimize.css | 1 + .../cases/only-assetNameRegExp-processed/index.js | 3 + .../webpack.config.js | 40 +++++++++++ .../test/cases/removes-duplicate-css/a.css | 6 ++ .../test/cases/removes-duplicate-css/b.css | 6 ++ .../cases/removes-duplicate-css/expected/file.css | 1 + .../test/cases/removes-duplicate-css/index.js | 2 + .../cases/removes-duplicate-css/webpack.config.js | 24 +++++++ .../test/plugin.test.js | 26 +++++++ .../test/util/default.css | 1 + .../test/util/helpers.js | 40 +++++++++++ .../test/util/index.js | 1 + .../test/webpack-integration.test.js | 82 ++++++++++++++++++++++ 41 files changed, 648 insertions(+) create mode 100644 node_modules/optimize-css-assets-webpack-plugin/.babelrc create mode 100644 node_modules/optimize-css-assets-webpack-plugin/.nvmrc create mode 100644 node_modules/optimize-css-assets-webpack-plugin/LICENSE create mode 100644 node_modules/optimize-css-assets-webpack-plugin/README.md create mode 120000 node_modules/optimize-css-assets-webpack-plugin/node_modules/.bin/webpack create mode 100644 node_modules/optimize-css-assets-webpack-plugin/package.json create mode 100644 node_modules/optimize-css-assets-webpack-plugin/src/index.js create mode 100644 node_modules/optimize-css-assets-webpack-plugin/test/__snapshots__/webpack-integration.test.js.snap create mode 100644 node_modules/optimize-css-assets-webpack-plugin/test/cases/assetNameRegExp-no-source/a_optimize-me.css create mode 100644 node_modules/optimize-css-assets-webpack-plugin/test/cases/assetNameRegExp-no-source/b_optimize-me.css create mode 100644 node_modules/optimize-css-assets-webpack-plugin/test/cases/assetNameRegExp-no-source/c.css create mode 100644 node_modules/optimize-css-assets-webpack-plugin/test/cases/assetNameRegExp-no-source/expected/file.css create mode 100644 node_modules/optimize-css-assets-webpack-plugin/test/cases/assetNameRegExp-no-source/index.js create mode 100644 node_modules/optimize-css-assets-webpack-plugin/test/cases/assetNameRegExp-no-source/webpack.config.js create mode 100644 node_modules/optimize-css-assets-webpack-plugin/test/cases/duplicate-css-exists-without-plugin/a.css create mode 100644 node_modules/optimize-css-assets-webpack-plugin/test/cases/duplicate-css-exists-without-plugin/b.css create mode 100644 node_modules/optimize-css-assets-webpack-plugin/test/cases/duplicate-css-exists-without-plugin/expected/file.css create mode 100644 node_modules/optimize-css-assets-webpack-plugin/test/cases/duplicate-css-exists-without-plugin/index.js create mode 100644 node_modules/optimize-css-assets-webpack-plugin/test/cases/duplicate-css-exists-without-plugin/webpack.config.js create mode 100644 node_modules/optimize-css-assets-webpack-plugin/test/cases/mergePropertiesForSelectorWithOtherStylesPresentIssue52/a.css create mode 100644 node_modules/optimize-css-assets-webpack-plugin/test/cases/mergePropertiesForSelectorWithOtherStylesPresentIssue52/b.css create mode 100644 node_modules/optimize-css-assets-webpack-plugin/test/cases/mergePropertiesForSelectorWithOtherStylesPresentIssue52/expected/file.css create mode 100644 node_modules/optimize-css-assets-webpack-plugin/test/cases/mergePropertiesForSelectorWithOtherStylesPresentIssue52/index.js create mode 100644 node_modules/optimize-css-assets-webpack-plugin/test/cases/mergePropertiesForSelectorWithOtherStylesPresentIssue52/webpack.config.js create mode 100644 node_modules/optimize-css-assets-webpack-plugin/test/cases/only-assetNameRegExp-processed/a_optimize-me.css create mode 100644 node_modules/optimize-css-assets-webpack-plugin/test/cases/only-assetNameRegExp-processed/b_optimize-me.css create mode 100644 node_modules/optimize-css-assets-webpack-plugin/test/cases/only-assetNameRegExp-processed/c_as-is.css create mode 100644 node_modules/optimize-css-assets-webpack-plugin/test/cases/only-assetNameRegExp-processed/expected/as_is.css create mode 100644 node_modules/optimize-css-assets-webpack-plugin/test/cases/only-assetNameRegExp-processed/expected/optimize.css create mode 100644 node_modules/optimize-css-assets-webpack-plugin/test/cases/only-assetNameRegExp-processed/index.js create mode 100644 node_modules/optimize-css-assets-webpack-plugin/test/cases/only-assetNameRegExp-processed/webpack.config.js create mode 100644 node_modules/optimize-css-assets-webpack-plugin/test/cases/removes-duplicate-css/a.css create mode 100644 node_modules/optimize-css-assets-webpack-plugin/test/cases/removes-duplicate-css/b.css create mode 100644 node_modules/optimize-css-assets-webpack-plugin/test/cases/removes-duplicate-css/expected/file.css create mode 100644 node_modules/optimize-css-assets-webpack-plugin/test/cases/removes-duplicate-css/index.js create mode 100644 node_modules/optimize-css-assets-webpack-plugin/test/cases/removes-duplicate-css/webpack.config.js create mode 100644 node_modules/optimize-css-assets-webpack-plugin/test/plugin.test.js create mode 100644 node_modules/optimize-css-assets-webpack-plugin/test/util/default.css create mode 100644 node_modules/optimize-css-assets-webpack-plugin/test/util/helpers.js create mode 100644 node_modules/optimize-css-assets-webpack-plugin/test/util/index.js create mode 100644 node_modules/optimize-css-assets-webpack-plugin/test/webpack-integration.test.js (limited to 'node_modules/optimize-css-assets-webpack-plugin') diff --git a/node_modules/optimize-css-assets-webpack-plugin/.babelrc b/node_modules/optimize-css-assets-webpack-plugin/.babelrc new file mode 100644 index 00000000..bd4aa184 --- /dev/null +++ b/node_modules/optimize-css-assets-webpack-plugin/.babelrc @@ -0,0 +1,25 @@ +{ + "presets": [ + [ + "env", + { + "useBuiltIns": true, + "targets": { + "node": "current" + }, + "exclude": [ + "transform-async-to-generator", + "transform-regenerator" + ] + } + ] + ], + "plugins": [ + [ + "transform-object-rest-spread", + { + "useBuiltIns": true + } + ] + ] +} diff --git a/node_modules/optimize-css-assets-webpack-plugin/.nvmrc b/node_modules/optimize-css-assets-webpack-plugin/.nvmrc new file mode 100644 index 00000000..641c7df3 --- /dev/null +++ b/node_modules/optimize-css-assets-webpack-plugin/.nvmrc @@ -0,0 +1 @@ +v8.9.4 diff --git a/node_modules/optimize-css-assets-webpack-plugin/LICENSE b/node_modules/optimize-css-assets-webpack-plugin/LICENSE new file mode 100644 index 00000000..1973738e --- /dev/null +++ b/node_modules/optimize-css-assets-webpack-plugin/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 Nuno Rodrigues + +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/optimize-css-assets-webpack-plugin/README.md b/node_modules/optimize-css-assets-webpack-plugin/README.md new file mode 100644 index 00000000..71e2bf48 --- /dev/null +++ b/node_modules/optimize-css-assets-webpack-plugin/README.md @@ -0,0 +1,57 @@ +# Optimize CSS Assets Webpack Plugin + +A Webpack plugin to optimize \ minimize CSS assets. + +## What does the plugin do? + +It will search for CSS assets during the Webpack build and will optimize \ minimize the CSS (by default it uses [cssnano](http://github.com/ben-eb/cssnano) but a custom CSS processor can be specified). + +### Solves [extract-text-webpack-plugin](http://github.com/webpack/extract-text-webpack-plugin) CSS duplication problem: + +Since [extract-text-webpack-plugin](http://github.com/webpack/extract-text-webpack-plugin) only bundles (merges) text chunks, if its used to bundle CSS, the bundle might have duplicate entries (chunks can be duplicate free but when merged, duplicate CSS can be created). + +## Installation: + +Using npm: +```shell +$ npm install --save-dev optimize-css-assets-webpack-plugin +``` + +> :warning: For webpack v3 or below please use `optimize-css-assets-webpack-plugin@3.2.0`. The `optimize-css-assets-webpack-plugin@4.0.0` version and above supports webpack v4. + +## Configuration: + +The plugin can receive the following options (all of them are optional): +* assetNameRegExp: A regular expression that indicates the names of the assets that should be optimized \ minimized. The regular expression provided is run against the filenames of the files exported by the ExtractTextPlugin instances in your configuration, not the filenames of your source CSS files. Defaults to `/\.css$/g` +* cssProcessor: The CSS processor used to optimize \ minimize the CSS, defaults to [cssnano](http://github.com/ben-eb/cssnano). This should be a function that follows cssnano.process interface (receives a CSS and options parameters and returns a Promise). +* cssProcessorOptions: The options passed to the cssProcessor, defaults to `{}` +* canPrint: A boolean indicating if the plugin can print messages to the console, defaults to `true` + +## Example: + +``` javascript +var OptimizeCssAssetsPlugin = require('optimize-css-assets-webpack-plugin'); +module.exports = { + module: { + rules: [ + { + test: /\.css$/, + loader: ExtractTextPlugin.extract('style-loader', 'css-loader') + } + ] + }, + plugins: [ + new ExtractTextPlugin('styles.css'), + new OptimizeCssAssetsPlugin({ + assetNameRegExp: /\.optimize\.css$/g, + cssProcessor: require('cssnano'), + cssProcessorOptions: { safe: true, discardComments: { removeAll: true } }, + canPrint: true + }) + ] +}; +``` + +## License + +MIT (http://www.opensource.org/licenses/mit-license.php) diff --git a/node_modules/optimize-css-assets-webpack-plugin/node_modules/.bin/webpack b/node_modules/optimize-css-assets-webpack-plugin/node_modules/.bin/webpack new file mode 120000 index 00000000..8a1900f6 --- /dev/null +++ b/node_modules/optimize-css-assets-webpack-plugin/node_modules/.bin/webpack @@ -0,0 +1 @@ +../../../webpack/bin/webpack.js \ No newline at end of file diff --git a/node_modules/optimize-css-assets-webpack-plugin/package.json b/node_modules/optimize-css-assets-webpack-plugin/package.json new file mode 100644 index 00000000..79d69236 --- /dev/null +++ b/node_modules/optimize-css-assets-webpack-plugin/package.json @@ -0,0 +1,51 @@ +{ + "name": "optimize-css-assets-webpack-plugin", + "version": "4.0.3", + "description": "A Webpack plugin to optimize \\ minimize CSS assets.", + "keywords": [ + "CSS", + "duplicate", + "extract-text-webpack-plugin", + "minimize", + "optimize", + "remove", + "webpack" + ], + "homepage": "http://github.com/NMFR/optimize-css-assets-webpack-plugin", + "license": "MIT", + "author": "Nuno Rodrigues", + "main": "src/index.js", + "repository": { + "type": "git", + "url": "http://github.com/NMFR/optimize-css-assets-webpack-plugin.git" + }, + "scripts": { + "test": "jest", + "test:watch": "jest --watch" + }, + "jest": { + "testEnvironment": "node", + "watchPathIgnorePatterns": [ + "/test/js/*.*" + ] + }, + "dependencies": { + "cssnano": "^3.10.0", + "last-call-webpack-plugin": "^3.0.0" + }, + "devDependencies": { + "babel-core": "^6.26.0", + "babel-jest": "^22.1.0", + "babel-plugin-transform-object-rest-spread": "^6.26.0", + "babel-polyfill": "^6.26.0", + "babel-preset-env": "^1.6.1", + "css-loader": "^0.28.9", + "extract-text-webpack-plugin": "next", + "jest": "^22.1.4", + "style-loader": "^0.20.1", + "webpack": "^4.9.1" + }, + "peerDependencies": { + "webpack": "^4.0.0" + } +} diff --git a/node_modules/optimize-css-assets-webpack-plugin/src/index.js b/node_modules/optimize-css-assets-webpack-plugin/src/index.js new file mode 100644 index 00000000..4cfb8a50 --- /dev/null +++ b/node_modules/optimize-css-assets-webpack-plugin/src/index.js @@ -0,0 +1,72 @@ +const LastCallWebpackPlugin = require('last-call-webpack-plugin'); + +class OptimizeCssAssetsWebpackPlugin extends LastCallWebpackPlugin { + constructor(options) { + super({ + assetProcessors: [ + { + phase: LastCallWebpackPlugin.PHASES.OPTIMIZE_CHUNK_ASSETS, + regExp: (options && options.assetNameRegExp) || /\.css$/g, + processor: (assetName, asset, assets) => + this.processCss(assetName, asset, assets), + } + ], + canPrint: options && options.canPrint, + }); + + this.options.assetNameRegExp = !options || !options.assetNameRegExp ? + /\.css$/g : + options.assetNameRegExp; + this.options.cssProcessor = !options || !options.cssProcessor ? + require('cssnano') : + options.cssProcessor; + this.options.cssProcessorOptions = !options || options.cssProcessorOptions === undefined ? + {} : + options.cssProcessorOptions; + } + + buildPluginDescriptor() { + return { name: 'OptimizeCssAssetsWebpackPlugin' }; + } + + processCss(assetName, asset, assets) { + const css = asset.sourceAndMap ? asset.sourceAndMap() : { source: asset.source() }; + const processOptions = Object.assign( + { from: assetName, to: assetName }, + this.options.cssProcessorOptions + ); + + if (processOptions.map && !processOptions.map.prev) { + try { + let map = css.map; + if (!map) { + const mapJson = assets.getAsset(assetName + '.map'); + if (mapJson) { + map = JSON.parse(mapJson); + } + } + if ( + map && + ( + (map.sources && map.sources.length > 0) || + (map.mappings && map.mappings.length > 0) + ) + ) { + processOptions.map = Object.assign({ prev: map }, processOptions.map); + } + } catch (err) { + console.warn('OptimizeCssAssetsPlugin.processCss() Error getting previous source map', err); + } + } + return this.options + .cssProcessor.process(css.source, processOptions) + .then(r => { + if (processOptions.map && r.map && r.map.toString) { + assets.setAsset(assetName + '.map', r.map.toString()); + } + return r.css; + }); + } +} + +module.exports = OptimizeCssAssetsWebpackPlugin; diff --git a/node_modules/optimize-css-assets-webpack-plugin/test/__snapshots__/webpack-integration.test.js.snap b/node_modules/optimize-css-assets-webpack-plugin/test/__snapshots__/webpack-integration.test.js.snap new file mode 100644 index 00000000..b3b3b515 --- /dev/null +++ b/node_modules/optimize-css-assets-webpack-plugin/test/__snapshots__/webpack-integration.test.js.snap @@ -0,0 +1,22 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Webpack Integration Tests assetNameRegExp-no-source 1`] = `"body{color:red}a{color:blue}body{margin:0;color:red}p{margin:1000px}body{color:red;padding:0;margin:0}p{padding:500px;padding:1000px}"`; + +exports[`Webpack Integration Tests duplicate-css-exists-without-plugin 1`] = `"body{color:red}a{color:blue}body{color:red}p{color:green}"`; + +exports[`Webpack Integration Tests only-assetNameRegExp-processed 1`] = ` +"body { + color: red; + padding: 0; + margin: 0; +} +p { + padding: 500px; + padding: 1000px; +} +" +`; + +exports[`Webpack Integration Tests only-assetNameRegExp-processed 2`] = `"a{color:blue}body{margin:0;color:red}p{margin:1000px}"`; + +exports[`Webpack Integration Tests removes-duplicate-css 1`] = `"a{color:blue}body{color:red}p{color:green}"`; diff --git a/node_modules/optimize-css-assets-webpack-plugin/test/cases/assetNameRegExp-no-source/a_optimize-me.css b/node_modules/optimize-css-assets-webpack-plugin/test/cases/assetNameRegExp-no-source/a_optimize-me.css new file mode 100644 index 00000000..8e7ce09f --- /dev/null +++ b/node_modules/optimize-css-assets-webpack-plugin/test/cases/assetNameRegExp-no-source/a_optimize-me.css @@ -0,0 +1,6 @@ +body { + color: red; +} +a { + color: blue; +} diff --git a/node_modules/optimize-css-assets-webpack-plugin/test/cases/assetNameRegExp-no-source/b_optimize-me.css b/node_modules/optimize-css-assets-webpack-plugin/test/cases/assetNameRegExp-no-source/b_optimize-me.css new file mode 100644 index 00000000..e2dbd7e5 --- /dev/null +++ b/node_modules/optimize-css-assets-webpack-plugin/test/cases/assetNameRegExp-no-source/b_optimize-me.css @@ -0,0 +1,7 @@ +body { + margin: 0; + color: red; +} +p { + margin: 1000px; +} diff --git a/node_modules/optimize-css-assets-webpack-plugin/test/cases/assetNameRegExp-no-source/c.css b/node_modules/optimize-css-assets-webpack-plugin/test/cases/assetNameRegExp-no-source/c.css new file mode 100644 index 00000000..a26aba2e --- /dev/null +++ b/node_modules/optimize-css-assets-webpack-plugin/test/cases/assetNameRegExp-no-source/c.css @@ -0,0 +1,9 @@ +body { + color: red; + padding: 0; + margin: 0; +} +p { + padding: 500px; + padding: 1000px; +} diff --git a/node_modules/optimize-css-assets-webpack-plugin/test/cases/assetNameRegExp-no-source/expected/file.css b/node_modules/optimize-css-assets-webpack-plugin/test/cases/assetNameRegExp-no-source/expected/file.css new file mode 100644 index 00000000..5d659bfb --- /dev/null +++ b/node_modules/optimize-css-assets-webpack-plugin/test/cases/assetNameRegExp-no-source/expected/file.css @@ -0,0 +1 @@ +body{color:red}a{color:blue}body{margin:0;color:red}p{margin:1000px}body{color:red;padding:0;margin:0}p{padding:500px;padding:1000px} \ No newline at end of file diff --git a/node_modules/optimize-css-assets-webpack-plugin/test/cases/assetNameRegExp-no-source/index.js b/node_modules/optimize-css-assets-webpack-plugin/test/cases/assetNameRegExp-no-source/index.js new file mode 100644 index 00000000..3d11b7fc --- /dev/null +++ b/node_modules/optimize-css-assets-webpack-plugin/test/cases/assetNameRegExp-no-source/index.js @@ -0,0 +1,10 @@ +/* + + This test is here to confirm that assetNameRegExp option will apply + only to the names of the files exported byt ExtractTextPlugin + +*/ + +require('./a_optimize-me.css'); +require('./b_optimize-me.css'); +require('./c.css'); diff --git a/node_modules/optimize-css-assets-webpack-plugin/test/cases/assetNameRegExp-no-source/webpack.config.js b/node_modules/optimize-css-assets-webpack-plugin/test/cases/assetNameRegExp-no-source/webpack.config.js new file mode 100644 index 00000000..69d62ed4 --- /dev/null +++ b/node_modules/optimize-css-assets-webpack-plugin/test/cases/assetNameRegExp-no-source/webpack.config.js @@ -0,0 +1,26 @@ +import ExtractTextPlugin from 'extract-text-webpack-plugin'; +import OptimizeCssAssetsPlugin from '../../../src/'; + +module.exports = { + entry: './index', + module: { + rules: [ + { + test: /\.css$/, + use: ExtractTextPlugin.extract({ + fallback: { loader: 'style-loader' }, + use: { + loader: 'css-loader', + options: { minimize: true } + } + }) + }, + ], + }, + plugins: [ + new ExtractTextPlugin('file.css'), + new OptimizeCssAssetsPlugin({ + assetNameRegExp: /optimize-me\.css/g + }) + ], +}; diff --git a/node_modules/optimize-css-assets-webpack-plugin/test/cases/duplicate-css-exists-without-plugin/a.css b/node_modules/optimize-css-assets-webpack-plugin/test/cases/duplicate-css-exists-without-plugin/a.css new file mode 100644 index 00000000..8e7ce09f --- /dev/null +++ b/node_modules/optimize-css-assets-webpack-plugin/test/cases/duplicate-css-exists-without-plugin/a.css @@ -0,0 +1,6 @@ +body { + color: red; +} +a { + color: blue; +} diff --git a/node_modules/optimize-css-assets-webpack-plugin/test/cases/duplicate-css-exists-without-plugin/b.css b/node_modules/optimize-css-assets-webpack-plugin/test/cases/duplicate-css-exists-without-plugin/b.css new file mode 100644 index 00000000..a286d3e3 --- /dev/null +++ b/node_modules/optimize-css-assets-webpack-plugin/test/cases/duplicate-css-exists-without-plugin/b.css @@ -0,0 +1,6 @@ +body { + color: red; +} +p { + color: green; +} diff --git a/node_modules/optimize-css-assets-webpack-plugin/test/cases/duplicate-css-exists-without-plugin/expected/file.css b/node_modules/optimize-css-assets-webpack-plugin/test/cases/duplicate-css-exists-without-plugin/expected/file.css new file mode 100644 index 00000000..060a716e --- /dev/null +++ b/node_modules/optimize-css-assets-webpack-plugin/test/cases/duplicate-css-exists-without-plugin/expected/file.css @@ -0,0 +1 @@ +body{color:red}a{color:blue}body{color:red}p{color:green} \ No newline at end of file diff --git a/node_modules/optimize-css-assets-webpack-plugin/test/cases/duplicate-css-exists-without-plugin/index.js b/node_modules/optimize-css-assets-webpack-plugin/test/cases/duplicate-css-exists-without-plugin/index.js new file mode 100644 index 00000000..a2a7578a --- /dev/null +++ b/node_modules/optimize-css-assets-webpack-plugin/test/cases/duplicate-css-exists-without-plugin/index.js @@ -0,0 +1,2 @@ +require('./a.css'); +require('./b.css'); diff --git a/node_modules/optimize-css-assets-webpack-plugin/test/cases/duplicate-css-exists-without-plugin/webpack.config.js b/node_modules/optimize-css-assets-webpack-plugin/test/cases/duplicate-css-exists-without-plugin/webpack.config.js new file mode 100644 index 00000000..c1b29d44 --- /dev/null +++ b/node_modules/optimize-css-assets-webpack-plugin/test/cases/duplicate-css-exists-without-plugin/webpack.config.js @@ -0,0 +1,23 @@ +import ExtractTextPlugin from 'extract-text-webpack-plugin'; +import OptimizeCssAssetsPlugin from '../../../src/'; + +module.exports = { + entry: './index', + module: { + rules: [ + { + test: /\.css$/, + use: ExtractTextPlugin.extract({ + fallback: { loader: 'style-loader' }, + use: { + loader: 'css-loader', + options: { minimize: true } + } + }) + }, + ], + }, + plugins: [ + new ExtractTextPlugin('file.css') + ], +}; diff --git a/node_modules/optimize-css-assets-webpack-plugin/test/cases/mergePropertiesForSelectorWithOtherStylesPresentIssue52/a.css b/node_modules/optimize-css-assets-webpack-plugin/test/cases/mergePropertiesForSelectorWithOtherStylesPresentIssue52/a.css new file mode 100644 index 00000000..443957a6 --- /dev/null +++ b/node_modules/optimize-css-assets-webpack-plugin/test/cases/mergePropertiesForSelectorWithOtherStylesPresentIssue52/a.css @@ -0,0 +1,6 @@ +#root { + background-color: #f00; +} +body { + text-align: center; +} diff --git a/node_modules/optimize-css-assets-webpack-plugin/test/cases/mergePropertiesForSelectorWithOtherStylesPresentIssue52/b.css b/node_modules/optimize-css-assets-webpack-plugin/test/cases/mergePropertiesForSelectorWithOtherStylesPresentIssue52/b.css new file mode 100644 index 00000000..b67b6bd8 --- /dev/null +++ b/node_modules/optimize-css-assets-webpack-plugin/test/cases/mergePropertiesForSelectorWithOtherStylesPresentIssue52/b.css @@ -0,0 +1,4 @@ +#root { + width: 640px; + height: 360px; +} diff --git a/node_modules/optimize-css-assets-webpack-plugin/test/cases/mergePropertiesForSelectorWithOtherStylesPresentIssue52/expected/file.css b/node_modules/optimize-css-assets-webpack-plugin/test/cases/mergePropertiesForSelectorWithOtherStylesPresentIssue52/expected/file.css new file mode 100644 index 00000000..d3173b78 --- /dev/null +++ b/node_modules/optimize-css-assets-webpack-plugin/test/cases/mergePropertiesForSelectorWithOtherStylesPresentIssue52/expected/file.css @@ -0,0 +1 @@ +#root{width:640px;height:360px;background-color:red}body{text-align:center} \ No newline at end of file diff --git a/node_modules/optimize-css-assets-webpack-plugin/test/cases/mergePropertiesForSelectorWithOtherStylesPresentIssue52/index.js b/node_modules/optimize-css-assets-webpack-plugin/test/cases/mergePropertiesForSelectorWithOtherStylesPresentIssue52/index.js new file mode 100644 index 00000000..a2a7578a --- /dev/null +++ b/node_modules/optimize-css-assets-webpack-plugin/test/cases/mergePropertiesForSelectorWithOtherStylesPresentIssue52/index.js @@ -0,0 +1,2 @@ +require('./a.css'); +require('./b.css'); diff --git a/node_modules/optimize-css-assets-webpack-plugin/test/cases/mergePropertiesForSelectorWithOtherStylesPresentIssue52/webpack.config.js b/node_modules/optimize-css-assets-webpack-plugin/test/cases/mergePropertiesForSelectorWithOtherStylesPresentIssue52/webpack.config.js new file mode 100644 index 00000000..bc01d74f --- /dev/null +++ b/node_modules/optimize-css-assets-webpack-plugin/test/cases/mergePropertiesForSelectorWithOtherStylesPresentIssue52/webpack.config.js @@ -0,0 +1,24 @@ +import ExtractTextPlugin from 'extract-text-webpack-plugin'; +import OptimizeCssAssetsPlugin from '../../../src/'; + +module.exports = { + entry: './index', + module: { + rules: [ + { + test: /\.css$/, + use: ExtractTextPlugin.extract({ + fallback: { loader: 'style-loader' }, + use: { + loader: 'css-loader', + options: { minimize: true } + } + }) + }, + ], + }, + plugins: [ + new ExtractTextPlugin('file.css'), + new OptimizeCssAssetsPlugin() + ], +}; diff --git a/node_modules/optimize-css-assets-webpack-plugin/test/cases/only-assetNameRegExp-processed/a_optimize-me.css b/node_modules/optimize-css-assets-webpack-plugin/test/cases/only-assetNameRegExp-processed/a_optimize-me.css new file mode 100644 index 00000000..8e7ce09f --- /dev/null +++ b/node_modules/optimize-css-assets-webpack-plugin/test/cases/only-assetNameRegExp-processed/a_optimize-me.css @@ -0,0 +1,6 @@ +body { + color: red; +} +a { + color: blue; +} diff --git a/node_modules/optimize-css-assets-webpack-plugin/test/cases/only-assetNameRegExp-processed/b_optimize-me.css b/node_modules/optimize-css-assets-webpack-plugin/test/cases/only-assetNameRegExp-processed/b_optimize-me.css new file mode 100644 index 00000000..e2dbd7e5 --- /dev/null +++ b/node_modules/optimize-css-assets-webpack-plugin/test/cases/only-assetNameRegExp-processed/b_optimize-me.css @@ -0,0 +1,7 @@ +body { + margin: 0; + color: red; +} +p { + margin: 1000px; +} diff --git a/node_modules/optimize-css-assets-webpack-plugin/test/cases/only-assetNameRegExp-processed/c_as-is.css b/node_modules/optimize-css-assets-webpack-plugin/test/cases/only-assetNameRegExp-processed/c_as-is.css new file mode 100644 index 00000000..a26aba2e --- /dev/null +++ b/node_modules/optimize-css-assets-webpack-plugin/test/cases/only-assetNameRegExp-processed/c_as-is.css @@ -0,0 +1,9 @@ +body { + color: red; + padding: 0; + margin: 0; +} +p { + padding: 500px; + padding: 1000px; +} diff --git a/node_modules/optimize-css-assets-webpack-plugin/test/cases/only-assetNameRegExp-processed/expected/as_is.css b/node_modules/optimize-css-assets-webpack-plugin/test/cases/only-assetNameRegExp-processed/expected/as_is.css new file mode 100644 index 00000000..a26aba2e --- /dev/null +++ b/node_modules/optimize-css-assets-webpack-plugin/test/cases/only-assetNameRegExp-processed/expected/as_is.css @@ -0,0 +1,9 @@ +body { + color: red; + padding: 0; + margin: 0; +} +p { + padding: 500px; + padding: 1000px; +} diff --git a/node_modules/optimize-css-assets-webpack-plugin/test/cases/only-assetNameRegExp-processed/expected/optimize.css b/node_modules/optimize-css-assets-webpack-plugin/test/cases/only-assetNameRegExp-processed/expected/optimize.css new file mode 100644 index 00000000..3f7a2e9b --- /dev/null +++ b/node_modules/optimize-css-assets-webpack-plugin/test/cases/only-assetNameRegExp-processed/expected/optimize.css @@ -0,0 +1 @@ +a{color:blue}body{margin:0;color:red}p{margin:1000px} \ No newline at end of file diff --git a/node_modules/optimize-css-assets-webpack-plugin/test/cases/only-assetNameRegExp-processed/index.js b/node_modules/optimize-css-assets-webpack-plugin/test/cases/only-assetNameRegExp-processed/index.js new file mode 100644 index 00000000..d889e4ce --- /dev/null +++ b/node_modules/optimize-css-assets-webpack-plugin/test/cases/only-assetNameRegExp-processed/index.js @@ -0,0 +1,3 @@ +require('./a_optimize-me.css'); +require('./b_optimize-me.css'); +require('./c_as-is.css'); diff --git a/node_modules/optimize-css-assets-webpack-plugin/test/cases/only-assetNameRegExp-processed/webpack.config.js b/node_modules/optimize-css-assets-webpack-plugin/test/cases/only-assetNameRegExp-processed/webpack.config.js new file mode 100644 index 00000000..38701c3b --- /dev/null +++ b/node_modules/optimize-css-assets-webpack-plugin/test/cases/only-assetNameRegExp-processed/webpack.config.js @@ -0,0 +1,40 @@ +import ExtractTextPlugin from 'extract-text-webpack-plugin'; +import OptimizeCssAssetsPlugin from '../../../src/'; + +const notToProcess = new ExtractTextPlugin('as_is.css'); +const toProcess = new ExtractTextPlugin('optimize.css'); + +module.exports = { + entry: './index', + module: { + rules: [ + { + test: /as-is\.css$/, + use: notToProcess.extract({ + fallback: { loader: 'style-loader' }, + use: { + loader: 'css-loader', + options: { minimize: false } + } + }) + }, + { + test: /optimize-me\.css$/, + use: toProcess.extract({ + fallback: { loader: 'style-loader' }, + use: { + loader: 'css-loader', + options: { minimize: false } + } + }) + } + ], + }, + plugins: [ + notToProcess, + toProcess, + new OptimizeCssAssetsPlugin({ + assetNameRegExp: /optimize\.css/g + }) + ], +}; diff --git a/node_modules/optimize-css-assets-webpack-plugin/test/cases/removes-duplicate-css/a.css b/node_modules/optimize-css-assets-webpack-plugin/test/cases/removes-duplicate-css/a.css new file mode 100644 index 00000000..8e7ce09f --- /dev/null +++ b/node_modules/optimize-css-assets-webpack-plugin/test/cases/removes-duplicate-css/a.css @@ -0,0 +1,6 @@ +body { + color: red; +} +a { + color: blue; +} diff --git a/node_modules/optimize-css-assets-webpack-plugin/test/cases/removes-duplicate-css/b.css b/node_modules/optimize-css-assets-webpack-plugin/test/cases/removes-duplicate-css/b.css new file mode 100644 index 00000000..a286d3e3 --- /dev/null +++ b/node_modules/optimize-css-assets-webpack-plugin/test/cases/removes-duplicate-css/b.css @@ -0,0 +1,6 @@ +body { + color: red; +} +p { + color: green; +} diff --git a/node_modules/optimize-css-assets-webpack-plugin/test/cases/removes-duplicate-css/expected/file.css b/node_modules/optimize-css-assets-webpack-plugin/test/cases/removes-duplicate-css/expected/file.css new file mode 100644 index 00000000..9f0b4d55 --- /dev/null +++ b/node_modules/optimize-css-assets-webpack-plugin/test/cases/removes-duplicate-css/expected/file.css @@ -0,0 +1 @@ +a{color:blue}body{color:red}p{color:green} \ No newline at end of file diff --git a/node_modules/optimize-css-assets-webpack-plugin/test/cases/removes-duplicate-css/index.js b/node_modules/optimize-css-assets-webpack-plugin/test/cases/removes-duplicate-css/index.js new file mode 100644 index 00000000..a2a7578a --- /dev/null +++ b/node_modules/optimize-css-assets-webpack-plugin/test/cases/removes-duplicate-css/index.js @@ -0,0 +1,2 @@ +require('./a.css'); +require('./b.css'); diff --git a/node_modules/optimize-css-assets-webpack-plugin/test/cases/removes-duplicate-css/webpack.config.js b/node_modules/optimize-css-assets-webpack-plugin/test/cases/removes-duplicate-css/webpack.config.js new file mode 100644 index 00000000..bc01d74f --- /dev/null +++ b/node_modules/optimize-css-assets-webpack-plugin/test/cases/removes-duplicate-css/webpack.config.js @@ -0,0 +1,24 @@ +import ExtractTextPlugin from 'extract-text-webpack-plugin'; +import OptimizeCssAssetsPlugin from '../../../src/'; + +module.exports = { + entry: './index', + module: { + rules: [ + { + test: /\.css$/, + use: ExtractTextPlugin.extract({ + fallback: { loader: 'style-loader' }, + use: { + loader: 'css-loader', + options: { minimize: true } + } + }) + }, + ], + }, + plugins: [ + new ExtractTextPlugin('file.css'), + new OptimizeCssAssetsPlugin() + ], +}; diff --git a/node_modules/optimize-css-assets-webpack-plugin/test/plugin.test.js b/node_modules/optimize-css-assets-webpack-plugin/test/plugin.test.js new file mode 100644 index 00000000..1284ba6e --- /dev/null +++ b/node_modules/optimize-css-assets-webpack-plugin/test/plugin.test.js @@ -0,0 +1,26 @@ +import OptimizeCssAssetsPlugin from '../src/'; + +describe('plugin test', () => { + it('does not throw when called', () => { + expect(() => { + new OptimizeCssAssetsPlugin(); + }).not.toThrow(); + }); + + it('can override default parameters', () => { + const assetNameRegExp = /\.optimize\.css$/ + const cssProcessor = {}; + const cssProcessorOptions = { discardComments: { removeAll: true } }; + const canPrint = false; + const plugin = new OptimizeCssAssetsPlugin({ + assetNameRegExp, + cssProcessor, + cssProcessorOptions, + canPrint + }); + expect(plugin.options.assetNameRegExp).toEqual(assetNameRegExp); + expect(plugin.options.cssProcessor).toEqual(cssProcessor); + expect(plugin.options.cssProcessorOptions).toEqual(cssProcessorOptions); + expect(plugin.options.canPrint).toEqual(canPrint); + }); +}); diff --git a/node_modules/optimize-css-assets-webpack-plugin/test/util/default.css b/node_modules/optimize-css-assets-webpack-plugin/test/util/default.css new file mode 100644 index 00000000..b1c34c27 --- /dev/null +++ b/node_modules/optimize-css-assets-webpack-plugin/test/util/default.css @@ -0,0 +1 @@ +html{display:none} \ No newline at end of file diff --git a/node_modules/optimize-css-assets-webpack-plugin/test/util/helpers.js b/node_modules/optimize-css-assets-webpack-plugin/test/util/helpers.js new file mode 100644 index 00000000..4dc5e74b --- /dev/null +++ b/node_modules/optimize-css-assets-webpack-plugin/test/util/helpers.js @@ -0,0 +1,40 @@ +import fs from 'fs'; +import path from 'path'; +import ExtractTextPlugin from 'extract-text-webpack-plugin'; + +export function readFileOrEmpty(path) { + try { + return fs.readFileSync(path, 'utf-8'); + } catch (e) { + return ''; + } +} + +export const defaultConfig = { + entry: './index', + module: { + rules: [ + { + test: /\.css$/, + use: ExtractTextPlugin.extract({ + fallback: { loader: 'style-loader' }, + use: { + loader: 'css-loader', + options: { minimize: true } + } + }) + }, + ], + }, + plugins: [], + context: __dirname, + output: { + filename: 'destination.js', + path: path.resolve(__dirname, '../', 'js', 'default-exports') + } +}; + +export function checkForWebpackErrors({err, stats, done}) { + if (err) return done(err); + if (stats.hasErrors()) return done(new Error(stats.toString())); +} diff --git a/node_modules/optimize-css-assets-webpack-plugin/test/util/index.js b/node_modules/optimize-css-assets-webpack-plugin/test/util/index.js new file mode 100644 index 00000000..060068b7 --- /dev/null +++ b/node_modules/optimize-css-assets-webpack-plugin/test/util/index.js @@ -0,0 +1 @@ +require('./default.css'); diff --git a/node_modules/optimize-css-assets-webpack-plugin/test/webpack-integration.test.js b/node_modules/optimize-css-assets-webpack-plugin/test/webpack-integration.test.js new file mode 100644 index 00000000..424a74c4 --- /dev/null +++ b/node_modules/optimize-css-assets-webpack-plugin/test/webpack-integration.test.js @@ -0,0 +1,82 @@ +/* eslint-disable import/no-dynamic-require, global-require */ +import fs from 'fs'; +import path from 'path'; +import webpack from 'webpack'; +import ExtractTextPlugin from 'extract-text-webpack-plugin'; +import OptimizeCssAssetsPlugin from '../src/'; +import { readFileOrEmpty, defaultConfig, checkForWebpackErrors } from './util/helpers'; + +const cases = process.env.CASES ? process.env.CASES.split(',') : fs.readdirSync(path.join(__dirname, 'cases')); + +describe('Webpack Integration Tests', () => { + cases.forEach((testCase) => { + if (/^_skip_/.test(testCase)) return; + it(testCase, (done) => { + const testDirectory = path.join(__dirname, 'cases', testCase); + const outputDirectory = path.join(__dirname, 'js', testCase); + const expectedDirectory = path.join(testDirectory, 'expected'); + + const configFile = path.join(testDirectory, 'webpack.config.js'); + const config = Object.assign( + fs.existsSync(configFile) ? require(configFile) : { entry: { test: './index.js' } }, + { + context: testDirectory, + output: { + filename: '[name].js', + path: outputDirectory + } + } + ); + + webpack(config, (err, stats) => { + checkForWebpackErrors({ err, stats, done }); + fs.readdirSync(expectedDirectory).forEach((file) => { + const expectedFile = readFileOrEmpty(path.join(expectedDirectory, file)); + const actualFile = readFileOrEmpty(path.join(outputDirectory, file)); + expect(actualFile).toEqual(expectedFile); + expect(actualFile).toMatchSnapshot(); + }); + done(); + }); + }); + }); + + it('calls cssProcessor with correct arguments', (done) => { + const destination = 'destination.css'; + const expectedCss = readFileOrEmpty(__dirname + '/util/default.css'); + const cssProcessorOptions = { discardComments: { removeAll: true } }; + const cssProcessor = { + process: (actualCss, options) => { + expect(options).toEqual(expect.objectContaining(cssProcessorOptions)); + expect(actualCss).toEqual(expectedCss); + return Promise.resolve({ css: actualCss }); + } + }; + const plugin = new OptimizeCssAssetsPlugin({ cssProcessor, cssProcessorOptions }); + const config = Object.assign(defaultConfig, {plugins: [plugin, new ExtractTextPlugin(destination)]}); + + webpack(config, (err, stats) => { + checkForWebpackErrors({ err, stats, done }); + done(); + }); + }); + + it('writes processed css to destination', (done) => { + const destination = 'destination.css'; + const expectedCss = '.inifinity-pool{overflow:hidden;}'; + const fakeCssProcessor = { + process: jest.fn().mockReturnValue(Promise.resolve({ css: expectedCss })) + }; + const plugin = new OptimizeCssAssetsPlugin({ cssProcessor: fakeCssProcessor }); + const config = Object.assign(defaultConfig, {plugins: [plugin, new ExtractTextPlugin(destination)]}); + + webpack(config, (err, stats) => { + checkForWebpackErrors({ err, stats, done }); + const actualCss = readFileOrEmpty(__dirname + '/js/default-exports/destination.css'); + + expect(fakeCssProcessor.process).toHaveBeenCalled(); + expect(actualCss).toEqual(expectedCss); + done(); + }); + }); +}); -- cgit v1.2.3