From 3caf3e95a8648aaaad77423adf6c1de28191ec35 Mon Sep 17 00:00:00 2001 From: Tobias Koppers Date: Wed, 7 Apr 2021 20:48:07 +0200 Subject: [PATCH] avoid leaking processed assets --- lib/Compilation.js | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/lib/Compilation.js b/lib/Compilation.js index 5a458df26..7a7d40075 100644 --- a/lib/Compilation.js +++ b/lib/Compilation.js @@ -358,12 +358,13 @@ class Compilation { const { fn, additionalAssets, ...remainingTap } = tap; const additionalAssetsFn = additionalAssets === true ? fn : additionalAssets; - let processedAssets = undefined; + const processedAssets = additionalAssetsFn ? new WeakSet() : undefined; switch (type) { case "sync": if (additionalAssetsFn) { this.hooks.processAdditionalAssets.tap(name, assets => { - if (processedAssets === this.assets) additionalAssetsFn(assets); + if (processedAssets.has(this.assets)) + additionalAssetsFn(assets); }); } return { @@ -375,7 +376,8 @@ class Compilation { } catch (e) { return callback(e); } - processedAssets = this.assets; + if (processedAssets !== undefined) + processedAssets.add(this.assets); const newAssets = popNewAssets(assets); if (newAssets !== undefined) { this.hooks.processAdditionalAssets.callAsync( @@ -392,7 +394,7 @@ class Compilation { this.hooks.processAdditionalAssets.tapAsync( name, (assets, callback) => { - if (processedAssets === this.assets) + if (processedAssets.has(this.assets)) return additionalAssetsFn(assets, callback); callback(); } @@ -403,7 +405,8 @@ class Compilation { fn: (assets, callback) => { fn(assets, err => { if (err) return callback(err); - processedAssets = this.assets; + if (processedAssets !== undefined) + processedAssets.add(this.assets); const newAssets = popNewAssets(assets); if (newAssets !== undefined) { this.hooks.processAdditionalAssets.callAsync( @@ -419,7 +422,7 @@ class Compilation { case "promise": if (additionalAssetsFn) { this.hooks.processAdditionalAssets.tapPromise(name, assets => { - if (processedAssets === this.assets) + if (processedAssets.has(this.assets)) return additionalAssetsFn(assets); return Promise.resolve(); }); @@ -430,7 +433,8 @@ class Compilation { const p = fn(assets); if (!p || !p.then) return p; return p.then(() => { - processedAssets = this.assets; + if (processedAssets !== undefined) + processedAssets.add(this.assets); const newAssets = popNewAssets(assets); if (newAssets !== undefined) { return this.hooks.processAdditionalAssets.promise(