0.2.0 - Mid migration

This commit is contained in:
Daniel Mason 2022-04-25 14:47:15 +12:00
parent 139e6a915e
commit 7e38fdbd7d
42393 changed files with 5358157 additions and 62 deletions

View file

@ -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:#00f}body{margin:0;color:red}p{margin:1000px}"`;
exports[`Webpack Integration Tests removes-duplicate-css 1`] = `"a{color:#00f}body{color:red}p{color:green}"`;

View file

@ -0,0 +1 @@
body{color:red}a{color:blue}

View file

@ -0,0 +1 @@
body{margin:0;color:red}p{margin:1000px}

View file

@ -0,0 +1 @@
body{color:red;padding:0;margin:0}p{padding:500px;padding:1000px}

View file

@ -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}

View file

@ -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');

View file

@ -0,0 +1,25 @@
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'
}
})
},
],
},
plugins: [
new ExtractTextPlugin('file.css'),
new OptimizeCssAssetsPlugin({
assetNameRegExp: /optimize-me\.css/g
})
],
};

View file

@ -0,0 +1 @@
body{color:red}a{color:blue}

View file

@ -0,0 +1 @@
body{color:red}p{color:green}

View file

@ -0,0 +1 @@
body{color:red}a{color:blue}body{color:red}p{color:green}

View file

@ -0,0 +1,2 @@
require('./a.css');
require('./b.css');

View file

@ -0,0 +1,20 @@
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"
}
})
}
]
},
plugins: [new ExtractTextPlugin("file.css")]
};

View file

@ -0,0 +1,6 @@
body {
color: red;
}
a {
color: blue;
}

View file

@ -0,0 +1,7 @@
body {
margin: 0;
color: red;
}
p {
margin: 1000px;
}

View file

@ -0,0 +1,9 @@
body {
color: red;
padding: 0;
margin: 0;
}
p {
padding: 500px;
padding: 1000px;
}

View file

@ -0,0 +1,9 @@
body {
color: red;
padding: 0;
margin: 0;
}
p {
padding: 500px;
padding: 1000px;
}

View file

@ -0,0 +1 @@
a{color:#00f}body{margin:0;color:red}p{margin:1000px}

View file

@ -0,0 +1,3 @@
require('./a_optimize-me.css');
require('./b_optimize-me.css');
require('./c_as-is.css');

View file

@ -0,0 +1,38 @@
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"
}
})
},
{
test: /optimize-me\.css$/,
use: toProcess.extract({
fallback: { loader: "style-loader" },
use: {
loader: "css-loader"
}
})
}
]
},
plugins: [
notToProcess,
toProcess,
new OptimizeCssAssetsPlugin({
assetNameRegExp: /optimize\.css/g
})
]
};

View file

@ -0,0 +1,6 @@
body {
color: red;
}
a {
color: blue;
}

View file

@ -0,0 +1,6 @@
body {
color: red;
}
p {
color: green;
}

View file

@ -0,0 +1 @@
a{color:#00f}body{color:red}p{color:green}

View file

@ -0,0 +1,2 @@
require('./a.css');
require('./b.css');

View file

@ -0,0 +1,20 @@
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"
}
})
}
]
},
plugins: [new ExtractTextPlugin("file.css"), new OptimizeCssAssetsPlugin()]
};

View file

@ -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);
});
});

View file

@ -0,0 +1 @@
html{display:none}

View file

@ -0,0 +1,39 @@
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"
}
})
}
]
},
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()));
}

View file

@ -0,0 +1 @@
require('./default.css');

View file

@ -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();
});
});
});