Skip to content

Commit

Permalink
fix(minify): invalid esbuild options with custom implementation (#197)
Browse files Browse the repository at this point in the history
Co-authored-by: Hiroki Osame <hiroki.osame@gmail.com>
  • Loading branch information
arthurfalcao and privatenumber committed Aug 19, 2021
1 parent 52b8d14 commit 21a5dd1
Show file tree
Hide file tree
Showing 3 changed files with 80 additions and 2 deletions.
4 changes: 2 additions & 2 deletions src/minify-plugin.ts
Expand Up @@ -42,7 +42,7 @@ class ESBuildMinifyPlugin {
private readonly transform: typeof defaultEsbuildTransform;

constructor(options: MinifyPluginOptions = {}) {
const { implementation } = options;
const { implementation, ...remainingOptions } = options;
if (implementation && typeof implementation.transform !== 'function') {
throw new TypeError(
`ESBuildMinifyPlugin: implementation.transform must be an ESBuild transform function. Received ${typeof implementation.transform}`,
Expand All @@ -51,7 +51,7 @@ class ESBuildMinifyPlugin {

this.transform = implementation?.transform ?? defaultEsbuildTransform;

this.options = { ...options };
this.options = remainingOptions;

const hasGranularMinificationConfig = granularMinifyConfigs.some(
minifyConfig => minifyConfig in options,
Expand Down
58 changes: 58 additions & 0 deletions test/__snapshots__/minify.test.ts.snap
Expand Up @@ -205,6 +205,35 @@ exports[`Webpack 4 Loader + Minification minify w/ source-map option and source-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy9zcmMvZm9vLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIyQkFDRSxHQUFJLEdBQW1CLEdBR3ZCLFdBQTZCLEVBQVUsQ0FHdEMsR0FBRyxFQUFpQixHQUNuQixNQUFPLEdBQWlCLEdBQVUsUUFHbkMsR0FBSSxHQUFTLEVBQWlCLEdBQVksQ0FDekMsRUFBRyxFQUNILEVBQUcsR0FDSCxRQUFTLElBSVYsU0FBUSxHQUFVLEtBQUssRUFBTyxRQUFTLEVBQVEsRUFBTyxRQUFTLEdBRy9ELEVBQU8sRUFBSSxHQUdKLEVBQU8sUUFLZixTQUFvQixFQUFJLEVBR3hCLEVBQW9CLEVBQUksRUFHeEIsRUFBb0IsRUFBSSxTQUFTLEVBQVMsRUFBTSxFQUFRLENBQ25ELEVBQW9CLEVBQUUsRUFBUyxJQUNsQyxPQUFPLGVBQWUsRUFBUyxFQUFNLENBQUUsV0FBWSxHQUFNLElBQUssS0FLaEUsRUFBb0IsRUFBSSxTQUFTLEVBQVMsQ0FDdEMsTUFBTyxTQUFXLGFBQWUsT0FBTyxhQUMxQyxPQUFPLGVBQWUsRUFBUyxPQUFPLFlBQWEsQ0FBRSxNQUFPLFdBRTdELE9BQU8sZUFBZSxFQUFTLGFBQWMsQ0FBRSxNQUFPLE1BUXZELEVBQW9CLEVBQUksU0FBUyxFQUFPLEVBQU0sQ0FHN0MsR0FGRyxFQUFPLEdBQUcsR0FBUSxFQUFvQixJQUN0QyxFQUFPLEdBQ04sRUFBTyxHQUFNLE1BQU8sSUFBVSxVQUFZLEdBQVMsRUFBTSxXQUFZLE1BQU8sR0FDaEYsR0FBSSxHQUFLLE9BQU8sT0FBTyxNQUd2QixHQUZBLEVBQW9CLEVBQUUsR0FDdEIsT0FBTyxlQUFlLEVBQUksVUFBVyxDQUFFLFdBQVksR0FBTSxNQUFPLElBQzdELEVBQU8sR0FBSyxNQUFPLElBQVMsU0FBVSxPQUFRLEtBQU8sR0FBTyxFQUFvQixFQUFFLEVBQUksRUFBSyxTQUFTLEVBQUssQ0FBRSxNQUFPLEdBQU0sSUFBUSxLQUFLLEtBQU0sSUFDOUksTUFBTyxJQUlSLEVBQW9CLEVBQUksU0FBUyxFQUFRLENBQ3hDLEdBQUksR0FBUyxHQUFVLEVBQU8sV0FDN0IsVUFBc0IsQ0FBRSxNQUFPLEdBQU8sU0FDdEMsVUFBNEIsQ0FBRSxNQUFPLElBQ3RDLFNBQW9CLEVBQUUsRUFBUSxJQUFLLEdBQzVCLEdBSVIsRUFBb0IsRUFBSSxTQUFTLEVBQVEsRUFBVSxDQUFFLE1BQU8sUUFBTyxVQUFVLGVBQWUsS0FBSyxFQUFRLElBR3pHLEVBQW9CLEVBQUksR0FJakIsRUFBb0IsRUFBb0IsRUFBSSxtQiwrcUNDbEZyRCxXQUNlLEVBQVMsS0FBTSxHQUVmLEVBQVMsV0FFVCxFQUFXLEtBQUssQ0FDNUIsS0FBTSxHQUFJLENBQUUsRUFBRyxHQUNmLEdBQUksR0FBSSxLQUFJLEdBRVosTUFEUSxHQUFLLEVBQUwsUUFJSSxFQUFXLEtBQUssQ0FDNUIsR0FBSSxDQUNILE1BQU8sWUFDQSxFQURBLE9BSUksRUFBVyxLQUFLLENBbEIvQixNQW1CRyxLQUFNLEdBQU0sQ0FDWCxTQUFVLEdBRVgsTUFBTyxDQUNOLGlCQUFLLFNBQ0wsS0FBSSxPQUFKLE9BQVksRUFDWixPQUlXLEVBQVcsS0FBSyxDQUM1QixHQUFJLEdBQ0EsRUFBSSxFQUNSLEtBQU0sR0FBSSxFQUNWLE1BQU8sQ0FDTixNQUFNLEdBQ04sTUFBTSxRQUlLLEVBQVcsS0FBSyxDQXZDL0IsMEJBd0NHLE1BQU8sQ0FDTixLQUFNLENBQU4sYUF6Q0osQ0F5Q1ksV0FBSSxLQUNaLFFBQU0sR0FBUyxFQUFmLEVBQWUsSUFBSSxHQUFuQixHQUNBLFFBQU0sQ0FBTixhQTNDSixDQTJDWSw0QkFBRSxVQUFHLEdBQWIsR0FDQSxRQUFNLENBQU4sYUE1Q0osQ0E0Q1ksaUNBQVIsR0FDQSxRQUFNLEdBQVMsZ0JBQWYsRUFBZSxVQUFmLEdBQ0EsUUFBTSxHQUFTLGdCQUFFLFVBQUcsR0FBTCxFQUFmLEVBQWUsR0FBZixHQUNBIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9zcmMvaW5kZXguanNcIik7XG4iLCJcblx0XHRleHBvcnQgY29uc3QgZXMyMDE2ID0gMTAgKiogNDtcblxuXHRcdGV4cG9ydCBjb25zdCBlczIwMTcgPSB0eXBlb2YgKGFzeW5jICgpID0+IHt9KTtcblxuXHRcdGV4cG9ydCBjb25zdCBlczIwMTggPSAoKCkgPT4ge1xuXHRcdFx0Y29uc3QgeSA9IHsgYTogMSB9XG5cdFx0XHRsZXQgeCA9IHsuLi55fVxuXHRcdFx0bGV0IHsuLi56fSA9IHlcblx0XHRcdHJldHVybiB6O1xuXHRcdH0pKCk7XG5cblx0XHRleHBvcnQgY29uc3QgZXMyMDE5ID0gKCgpID0+IHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHJldHVybiAndHJ5J1xuXHRcdFx0fSBjYXRjaCB7fVxuXHRcdH0pKCk7XG5cblx0XHRleHBvcnQgY29uc3QgZXMyMDIwID0gKCgpID0+IHtcblx0XHRcdGNvbnN0IG9iaiA9IHtcblx0XHRcdFx0cHJvcGVydHk6IDEsXG5cdFx0XHR9O1xuXHRcdFx0cmV0dXJuIFtcblx0XHRcdFx0b2JqPy5wcm9wZXJ0eSxcblx0XHRcdFx0b2JqLnByb3AgPz8gMixcblx0XHRcdFx0aW1wb3J0Lm1ldGEsXG5cdFx0XHRdO1xuXHRcdH0pKCk7XG5cblx0XHRleHBvcnQgY29uc3QgZXMyMDIxID0gKCgpID0+IHtcblx0XHRcdGxldCBhO1xuXHRcdFx0bGV0IHggPSAwO1xuXHRcdFx0Y29uc3QgeSA9IDM7XG5cdFx0XHRyZXR1cm4gW1xuXHRcdFx0XHRhID8/PSAyLFxuXHRcdFx0XHR4IHx8PSB5LFxuXHRcdFx0XTtcblx0XHR9KSgpO1xuXG5cdFx0ZXhwb3J0IGNvbnN0IGVzbmV4dCA9ICgoKSA9PiB7XG5cdFx0XHRyZXR1cm4gW1xuXHRcdFx0XHRjbGFzcyB7IHggPSAyOyB9LFxuXHRcdFx0XHRjbGFzcyB7IHN0YXRpYyB4ID0gMTsgfSxcblx0XHRcdFx0Y2xhc3MgeyAjeCgpIHt9IH0sXG5cdFx0XHRcdGNsYXNzIHsgI3ggfSxcblx0XHRcdFx0Y2xhc3MgeyBzdGF0aWMgI3ggfSxcblx0XHRcdFx0Y2xhc3MgeyBzdGF0aWMgI3goKSB7fSB9LFxuXHRcdFx0XHQxXzAwMF8wMDBfMDAwLFxuXHRcdFx0XTtcblx0XHR9KSgpO1xuXHQiXSwic291cmNlUm9vdCI6IiJ9"
`;
exports[`Webpack 4 Loader + Minification minify with custom implementation - real 1`] = `
Object {
"es2016": 10000,
"es2017": "function",
"es2018": Object {
"a": 1,
},
"es2019": "try",
"es2020": Array [
1,
2,
Object {},
],
"es2021": Array [
2,
3,
],
"esnext": Array [
[Function],
[Function],
[Function],
[Function],
[Function],
[Function],
1000000000,
],
}
`;
exports[`Webpack 4 Loader + Minification minify with custom implementation 1`] = `"export function foo() { return \\"MY_CUSTOM_ESBUILD_IMPLEMENTATION\\"; }"`;
exports[`Webpack 4 Loader + Minification minifyIdentifiers 1`] = `
Expand Down Expand Up @@ -872,6 +901,35 @@ exports[`Webpack 5 Loader + Minification minify w/ source-map option and source-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly8vLi9zcmMvZm9vLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJtQkFDQSxHQUFJLEdBQXNCLEcsTUNBMUIsRUFBb0IsRUFBSSxDQUFDLEVBQVMsSUFBZSxDQUNoRCxPQUFRLEtBQU8sR0FDWCxFQUFvQixFQUFFLEVBQVksSUFBUSxDQUFDLEVBQW9CLEVBQUUsRUFBUyxJQUM1RSxPQUFPLGVBQWUsRUFBUyxFQUFLLENBQUUsV0FBWSxHQUFNLElBQUssRUFBVyxVLE1DSjNFLEVBQW9CLEVBQUksQ0FBQyxFQUFLLElBQVUsT0FBTyxVQUFVLGVBQWUsS0FBSyxFQUFLLE8sTUNDbEYsRUFBb0IsRUFBSyxHQUFZLENBQ2pDLE1BQU8sU0FBVyxhQUFlLE9BQU8sYUFDMUMsT0FBTyxlQUFlLEVBQVMsT0FBTyxZQUFhLENBQUUsTUFBTyxXQUU3RCxPQUFPLGVBQWUsRUFBUyxhQUFjLENBQUUsTUFBTyxVLDArQkNMdkQsV0FDZSxFQUFTLEtBQU0sR0FFZixFQUFTLFdBRVQsRUFBVyxLQUFLLENBQzVCLEtBQU0sR0FBSSxDQUFFLEVBQUcsR0FDZixHQUFJLEdBQUksS0FBSSxHQUVaLE1BRFEsR0FBSyxFQUFMLFFBSUksRUFBVyxLQUFLLENBQzVCLEdBQUksQ0FDSCxNQUFPLFlBQ0EsRUFEQSxPQUlJLEVBQVcsS0FBSyxDQWxCL0IsTUFtQkcsS0FBTSxHQUFNLENBQ1gsU0FBVSxHQUVYLE1BQU8sQ0FDTixpQkFBSyxTQUNMLEtBQUksT0FBSixPQUFZLEVBQ1osT0FJVyxFQUFXLEtBQUssQ0FDNUIsR0FBSSxHQUNBLEVBQUksRUFDUixLQUFNLEdBQUksRUFDVixNQUFPLENBQ04sTUFBTSxHQUNOLE1BQU0sUUFJSyxFQUFXLEtBQUssQ0F2Qy9CLDBCQXdDRyxNQUFPLENBQ04sS0FBTSxDQUFOLGFBekNKLENBeUNZLFdBQUksS0FDWixRQUFNLEdBQVMsRUFBZixFQUFlLElBQUksR0FBbkIsR0FDQSxRQUFNLENBQU4sYUEzQ0osQ0EyQ1ksNEJBQUUsVUFBRyxHQUFiLEdBQ0EsUUFBTSxDQUFOLGFBNUNKLENBNENZLGlDQUFSLEdBQ0EsUUFBTSxHQUFTLGdCQUFmLEVBQWUsVUFBZixHQUNBLFFBQU0sR0FBUyxnQkFBRSxVQUFHLEdBQUwsRUFBZixFQUFlLEdBQWYsR0FDQSxTIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhlIHJlcXVpcmUgc2NvcGVcbnZhciBfX3dlYnBhY2tfcmVxdWlyZV9fID0ge307XG5cbiIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCJcblx0XHRleHBvcnQgY29uc3QgZXMyMDE2ID0gMTAgKiogNDtcblxuXHRcdGV4cG9ydCBjb25zdCBlczIwMTcgPSB0eXBlb2YgKGFzeW5jICgpID0+IHt9KTtcblxuXHRcdGV4cG9ydCBjb25zdCBlczIwMTggPSAoKCkgPT4ge1xuXHRcdFx0Y29uc3QgeSA9IHsgYTogMSB9XG5cdFx0XHRsZXQgeCA9IHsuLi55fVxuXHRcdFx0bGV0IHsuLi56fSA9IHlcblx0XHRcdHJldHVybiB6O1xuXHRcdH0pKCk7XG5cblx0XHRleHBvcnQgY29uc3QgZXMyMDE5ID0gKCgpID0+IHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHJldHVybiAndHJ5J1xuXHRcdFx0fSBjYXRjaCB7fVxuXHRcdH0pKCk7XG5cblx0XHRleHBvcnQgY29uc3QgZXMyMDIwID0gKCgpID0+IHtcblx0XHRcdGNvbnN0IG9iaiA9IHtcblx0XHRcdFx0cHJvcGVydHk6IDEsXG5cdFx0XHR9O1xuXHRcdFx0cmV0dXJuIFtcblx0XHRcdFx0b2JqPy5wcm9wZXJ0eSxcblx0XHRcdFx0b2JqLnByb3AgPz8gMixcblx0XHRcdFx0aW1wb3J0Lm1ldGEsXG5cdFx0XHRdO1xuXHRcdH0pKCk7XG5cblx0XHRleHBvcnQgY29uc3QgZXMyMDIxID0gKCgpID0+IHtcblx0XHRcdGxldCBhO1xuXHRcdFx0bGV0IHggPSAwO1xuXHRcdFx0Y29uc3QgeSA9IDM7XG5cdFx0XHRyZXR1cm4gW1xuXHRcdFx0XHRhID8/PSAyLFxuXHRcdFx0XHR4IHx8PSB5LFxuXHRcdFx0XTtcblx0XHR9KSgpO1xuXG5cdFx0ZXhwb3J0IGNvbnN0IGVzbmV4dCA9ICgoKSA9PiB7XG5cdFx0XHRyZXR1cm4gW1xuXHRcdFx0XHRjbGFzcyB7IHggPSAyOyB9LFxuXHRcdFx0XHRjbGFzcyB7IHN0YXRpYyB4ID0gMTsgfSxcblx0XHRcdFx0Y2xhc3MgeyAjeCgpIHt9IH0sXG5cdFx0XHRcdGNsYXNzIHsgI3ggfSxcblx0XHRcdFx0Y2xhc3MgeyBzdGF0aWMgI3ggfSxcblx0XHRcdFx0Y2xhc3MgeyBzdGF0aWMgI3goKSB7fSB9LFxuXHRcdFx0XHQxXzAwMF8wMDBfMDAwLFxuXHRcdFx0XTtcblx0XHR9KSgpO1xuXHQiXSwic291cmNlUm9vdCI6IiJ9"
`;
exports[`Webpack 5 Loader + Minification minify with custom implementation - real 1`] = `
Object {
"es2016": 10000,
"es2017": "function",
"es2018": Object {
"a": 1,
},
"es2019": "try",
"es2020": Array [
1,
2,
Object {},
],
"es2021": Array [
2,
3,
],
"esnext": Array [
[Function],
[Function],
[Function],
[Function],
[Function],
[Function],
1000000000,
],
}
`;
exports[`Webpack 5 Loader + Minification minify with custom implementation 1`] = `"export function foo() { return \\"MY_CUSTOM_ESBUILD_IMPLEMENTATION\\"; }"`;
exports[`Webpack 5 Loader + Minification minifyIdentifiers 1`] = `
Expand Down
20 changes: 20 additions & 0 deletions test/minify.test.ts
Expand Up @@ -2,6 +2,7 @@ import webpack4 from 'webpack';
import webpack5 from 'webpack5';
import MiniCssExtractPlugin from 'mini-css-extract-plugin';
import { RawSource } from 'webpack-sources';
import * as esbuild from 'esbuild';
import { MinifyPluginOptions } from '../src/interfaces';
import { ESBuildMinifyPlugin } from '../src/index';
import { build, getFile } from './utils';
Expand Down Expand Up @@ -384,6 +385,25 @@ describe.each([
expect(content).toMatchSnapshot();
});

test('minify with custom implementation - real', async () => {
const statsUnminified = await build(webpack, fixtures.js);
const stats = await build(webpack, fixtures.js, (config) => {
config.optimization = {
minimize: true,
minimizer: [
new ESBuildMinifyPlugin({
target: 'es2019',
implementation: esbuild,
}),
],
};
});
expect(statsUnminified.hash).not.toBe(stats.hash);

const file = getFile(stats, '/dist/index.js');
expect(file.execute()).toMatchSnapshot();
});

describe('CSS', () => {
test('minify via loader', async () => {
const stats = await build(webpack, fixtures.css, (config) => {
Expand Down

0 comments on commit 21a5dd1

Please sign in to comment.