From 6c7506eca90daa2a49fa753d1cc373383584cb4c Mon Sep 17 00:00:00 2001 From: cap-Bernardito Date: Fri, 19 Mar 2021 16:22:33 +0300 Subject: [PATCH] refactor: code --- README.md | 2 +- src/index.js | 55 +++++++++++++++++--------------- test/transformAll-option.test.js | 8 ++--- 3 files changed, 33 insertions(+), 32 deletions(-) diff --git a/README.md b/README.md index 7389074..44510fa 100644 --- a/README.md +++ b/README.md @@ -755,7 +755,7 @@ module.exports = { const result = assets.reduce((accumulator, asset) => { // The asset content can be obtained from `asset.source` using `source` method. // The asset content is a [`Buffer`](https://nodejs.org/api/buffer.html) object, it could be converted to a `String` to be processed using `content.toString()` - const content = asset.source.source(); + const content = asset.data; accumulator = `${accumulator}${content}\n`; return accumulator; diff --git a/src/index.js b/src/index.js index c19b954..d1b6a65 100644 --- a/src/index.js +++ b/src/index.js @@ -407,6 +407,7 @@ class CopyPlugin { logger.debug(`snapshot for '${absoluteFilename}' is valid`); result.source = cacheEntry.source; + result.data = cacheEntry.data; } else { logger.debug(`snapshot for '${absoluteFilename}' is invalid`); } @@ -419,10 +420,8 @@ class CopyPlugin { logger.debug(`reading '${absoluteFilename}'...`); - let data; - try { - data = await readFile(inputFileSystem, absoluteFilename); + result.data = await readFile(inputFileSystem, absoluteFilename); } catch (error) { compilation.errors.push(error); @@ -431,7 +430,7 @@ class CopyPlugin { logger.debug(`read '${absoluteFilename}'`); - result.source = new RawSource(data); + result.source = new RawSource(result.data); let snapshot; @@ -456,6 +455,7 @@ class CopyPlugin { try { await cache.storePromise(`${sourceFilename}|${index}`, null, { source: result.source, + data: result.data, snapshot, }); } catch (error) { @@ -477,8 +477,6 @@ class CopyPlugin { if (transform.transformer) { logger.log(`transforming content for '${absoluteFilename}'...`); - const buffer = result.source.source(); - if (transform.cache) { const defaultCacheKeys = { version, @@ -486,7 +484,7 @@ class CopyPlugin { transform: transform.transformer, contentHash: crypto .createHash("md4") - .update(buffer) + .update(result.data) .digest("hex"), index, }; @@ -518,7 +516,7 @@ class CopyPlugin { if (!result.source) { const transformed = await transform.transformer( - buffer, + result.data, absoluteFilename ); @@ -536,7 +534,7 @@ class CopyPlugin { } } else { result.source = new RawSource( - await transform.transformer(buffer, absoluteFilename) + await transform.transformer(result.data, absoluteFilename) ); } } @@ -550,7 +548,7 @@ class CopyPlugin { const contentHash = CopyPlugin.getContentHash( compiler, compilation, - result.source.source() + result.data ); const ext = path.extname(result.sourceFilename); const base = path.basename(result.sourceFilename); @@ -664,16 +662,14 @@ class CopyPlugin { const mergedEtag = assets.length === 1 - ? cache.getLazyHashedEtag(assets[0].source.source()) - : assets.reduce((accumulator, asset, ind) => { + ? cache.getLazyHashedEtag(assets[0].data) + : assets.reduce((accumulator, asset, i) => { // eslint-disable-next-line no-param-reassign accumulator = cache.mergeEtags( - ind === 1 - ? cache.getLazyHashedEtag( - accumulator.source.source() - ) + i === 1 + ? cache.getLazyHashedEtag(accumulator.data) : accumulator, - cache.getLazyHashedEtag(asset.source.source()) + cache.getLazyHashedEtag(asset.data) ); return accumulator; @@ -683,22 +679,24 @@ class CopyPlugin { version, from: item.from, to: item.to, - transform: item.transformAll, + transformAll: item.transformAll, })}`; const eTag = cache.getLazyHashedEtag(mergedEtag); const cacheItem = cache.getItemCache(cacheKeys, eTag); let transformedAsset = await cacheItem.getPromise(); if (!transformedAsset) { - const { RawSource } = compiler.webpack.sources; - - transformedAsset = { - filename: item.to, - }; + transformedAsset = { filename: item.to }; try { - transformedAsset.source = new RawSource( - await item.transformAll(assets) + transformedAsset.data = await item.transformAll( + assets.map((asset) => { + return { + data: asset.data, + sourceFilename: asset.sourceFilename, + absoluteFilename: asset.absoluteFilename, + }; + }) ); } catch (error) { compilation.errors.push(error); @@ -710,7 +708,7 @@ class CopyPlugin { const contentHash = CopyPlugin.getContentHash( compiler, compilation, - transformedAsset.source.source() + transformedAsset.data ); const data = { @@ -733,6 +731,11 @@ class CopyPlugin { transformedAsset.info = assetInfo; } + const { RawSource } = compiler.webpack.sources; + + transformedAsset.source = new RawSource( + transformedAsset.data + ); transformedAsset.force = item.force; await cacheItem.storePromise(transformedAsset); diff --git a/test/transformAll-option.test.js b/test/transformAll-option.test.js index a7186a9..deca8aa 100644 --- a/test/transformAll-option.test.js +++ b/test/transformAll-option.test.js @@ -36,8 +36,7 @@ describe("transformAll option", () => { to: "file.txt", transformAll(assets) { const result = assets.reduce((accumulator, asset) => { - const content = - asset.source.source().toString() || asset.sourceFilename; + const content = asset.data.toString() || asset.sourceFilename; // eslint-disable-next-line no-param-reassign accumulator = `${accumulator}${content}::`; return accumulator; @@ -164,7 +163,7 @@ describe("transformAll option", () => { transformAll(assets) { const result = assets.reduce((accumulator, asset) => { // eslint-disable-next-line no-param-reassign - accumulator = `${accumulator}${asset.source.source()}::`; + accumulator = `${accumulator}${asset.data}::`; return accumulator; }, ""); @@ -189,8 +188,7 @@ describe("cache", () => { to: "file.txt", transformAll(assets) { const result = assets.reduce((accumulator, asset) => { - const content = - asset.source.source().toString() || asset.sourceFilename; + const content = asset.data.toString() || asset.sourceFilename; // eslint-disable-next-line no-param-reassign accumulator = `${accumulator}${content}::`; return accumulator;