From 184240054261bef28251bc5b212bae07ae5786fe Mon Sep 17 00:00:00 2001 From: Jasper De Moor Date: Sun, 17 Oct 2021 20:10:44 +0200 Subject: [PATCH 1/3] log a warning if image optimizer failed --- packages/core/integration-tests/test/image.js | 25 ++++++++++++++++ .../test/integration/image/banana.jpg | Bin 0 -> 38128 bytes .../optimizers/image/src/ImageOptimizer.js | 27 ++++++++++++++---- 3 files changed, 46 insertions(+), 6 deletions(-) create mode 100644 packages/core/integration-tests/test/integration/image/banana.jpg diff --git a/packages/core/integration-tests/test/image.js b/packages/core/integration-tests/test/image.js index 4299e050aed..a12897068cf 100644 --- a/packages/core/integration-tests/test/image.js +++ b/packages/core/integration-tests/test/image.js @@ -113,6 +113,31 @@ describe('image', function() { assert(output.length < input.length); }); + it('should lossless optimise progressive JPEGs', async function() { + let img = path.join(__dirname, '/integration/image/banana.jpg'); + let b = await bundle(img, { + defaultTargetOptions: { + shouldOptimize: true, + }, + logLevel: 'verbose', + }); + + const imagePath = b.getBundles().find(b => b.type === 'jpg').filePath; + + // let input = await inputFS.readFile(img); + // let inputRaw = await sharp(input) + // .toFormat('raw') + // .toBuffer(); + // Check validity of image + let output = await outputFS.readFile(imagePath); + await sharp(output) + .toFormat('raw') + .toBuffer(); + + // assert(outputRaw.equals(inputRaw)); + // assert(output.length < input.length); + }); + it('should lossless optimise PNGs', async function() { let img = path.join(__dirname, '/integration/image/clock.png'); let b = await bundle(img, { diff --git a/packages/core/integration-tests/test/integration/image/banana.jpg b/packages/core/integration-tests/test/integration/image/banana.jpg new file mode 100644 index 0000000000000000000000000000000000000000..23b5408399ec6aa9c6920c697aefe8de6295ae0e GIT binary patch literal 38128 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 Date: Sun, 17 Oct 2021 20:56:15 +0200 Subject: [PATCH 2/3] fix flow? --- packages/optimizers/image/src/ImageOptimizer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/optimizers/image/src/ImageOptimizer.js b/packages/optimizers/image/src/ImageOptimizer.js index 4287c05617f..13dd46eff5c 100644 --- a/packages/optimizers/image/src/ImageOptimizer.js +++ b/packages/optimizers/image/src/ImageOptimizer.js @@ -18,7 +18,7 @@ export default (new Optimizer({ contents: optimized.length < buffer.length ? optimized : buffer, }; } catch (err) { - const filepath = bundle.getMainEntry().filePath; + const filepath = bundle.getMainEntry()?.filePath; const filename = filepath ? relativePath(options.projectRoot, filepath) : 'unknown'; From 141bc0ed9b35bffec83a16fa92d0f5139e915670 Mon Sep 17 00:00:00 2001 From: Jasper De Moor Date: Tue, 26 Oct 2021 18:45:04 +0200 Subject: [PATCH 3/3] tweaks --- packages/optimizers/image/package.json | 1 + packages/optimizers/image/src/ImageOptimizer.js | 11 +++++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/packages/optimizers/image/package.json b/packages/optimizers/image/package.json index 686b08ba34b..57bbf8ff2d8 100644 --- a/packages/optimizers/image/package.json +++ b/packages/optimizers/image/package.json @@ -34,6 +34,7 @@ "dependencies": { "@parcel/plugin": "^2.0.0", "@parcel/utils": "^2.0.0", + "@parcel/diagnostic": "^2.0.0", "detect-libc": "^1.0.3" }, "devDependencies": { diff --git a/packages/optimizers/image/src/ImageOptimizer.js b/packages/optimizers/image/src/ImageOptimizer.js index 13dd46eff5c..5f4f506ffdc 100644 --- a/packages/optimizers/image/src/ImageOptimizer.js +++ b/packages/optimizers/image/src/ImageOptimizer.js @@ -1,10 +1,13 @@ // @flow +import path from 'path'; +import process from 'process'; import {Optimizer} from '@parcel/plugin'; -import {blobToBuffer, relativePath} from '@parcel/utils'; +import {blobToBuffer} from '@parcel/utils'; +import {md} from '@parcel/diagnostic'; import {optimize} from '../native'; export default (new Optimizer({ - async optimize({bundle, contents, logger, options}) { + async optimize({bundle, contents, logger}) { if (!bundle.env.shouldOptimize) { return {contents}; } @@ -20,10 +23,10 @@ export default (new Optimizer({ } catch (err) { const filepath = bundle.getMainEntry()?.filePath; const filename = filepath - ? relativePath(options.projectRoot, filepath) + ? path.relative(process.cwd(), filepath) : 'unknown'; logger.warn({ - message: `Could not optimize image ${filename}: ${err.message}`, + message: md`Could not optimize image ${filename}: ${err.message}`, stack: err.stack, }); }