From ca0376d417d9de1b49f0b76509b6873850b6e63a Mon Sep 17 00:00:00 2001 From: 1000ch Date: Fri, 17 Dec 2021 15:14:51 +0900 Subject: [PATCH] Use native ESM --- .github/workflows/test.yml | 77 ++++++++++---------------------------- index.js | 20 +++++----- package.json | 14 ++++--- readme.md | 4 +- test.js | 32 +++++++--------- 5 files changed, 54 insertions(+), 93 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 76c979b..c364634 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,64 +1,25 @@ name: test - on: - push: - branches: - - master - pull_request: - branches: - - master - + - push + - pull_request jobs: - linux: - runs-on: ubuntu-latest - + test: + name: Node.js ${{ matrix.node-version }} on ${{ matrix.os }} + runs-on: ${{ matrix.os }} strategy: matrix: - node-version: [10.x, 12.x, 14.x] - + node-version: + - 16 + - 14 + - 12 + os: + - ubuntu-latest + - macos-latest + - windows-latest steps: - - uses: actions/checkout@v2 - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v1 - with: - node-version: ${{ matrix.node-version }} - - run: npm install - - run: npm test - env: - CI: true - - macos: - runs-on: macos-latest - - strategy: - matrix: - node-version: [10.x, 12.x, 14.x] - - steps: - - uses: actions/checkout@v2 - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v1 - with: - node-version: ${{ matrix.node-version }} - - run: npm install - - run: npm test - env: - CI: true - - windows: - runs-on: windows-latest - - strategy: - matrix: - node-version: [10.x, 12.x, 14.x] - - steps: - - uses: actions/checkout@v2 - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v1 - with: - node-version: ${{ matrix.node-version }} - - run: npm install - - run: npm test - env: - CI: true + - uses: actions/checkout@v2 + - uses: actions/setup-node@v2 + with: + node-version: ${{ matrix.node-version }} + - run: npm install + - run: npm test diff --git a/index.js b/index.js index 7866bfd..b66c2b4 100644 --- a/index.js +++ b/index.js @@ -1,9 +1,9 @@ -'use strict'; -const execa = require('execa'); -const isJpg = require('is-jpg'); -const jpegoptim = require('jpegoptim-bin'); +import {Buffer} from 'node:buffer'; +import {execa} from 'execa'; +import isJpg from 'is-jpg'; +import jpegoptim from 'jpegoptim-bin'; -module.exports = options => async buffer => { +const imageminJpegoptim = options => async buffer => { options = { stripAll: true, stripCom: true, @@ -11,7 +11,7 @@ module.exports = options => async buffer => { stripIptc: true, stripIcc: true, stripXmp: true, - ...options + ...options, }; if (!Buffer.isBuffer(buffer)) { @@ -24,7 +24,7 @@ module.exports = options => async buffer => { const args = [ '--stdin', - '--stdout' + '--stdout', ]; if (options.stripAll) { @@ -59,15 +59,17 @@ module.exports = options => async buffer => { args.push(`--max=${options.max}`); } - if (options.size) { + if (options.size > 0) { args.push(`--size=${options.size}`); } const {stdout} = await execa(jpegoptim, args, { encoding: null, input: buffer, - maxBuffer: Infinity + maxBuffer: Number.POSITIVE_INFINITY, }); return stdout; }; + +export default imageminJpegoptim; diff --git a/package.json b/package.json index b3b1a15..643113c 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,8 @@ "description": "Imagemin plugin for jpegoptim", "license": "MIT", "repository": "imagemin/imagemin-jpegoptim", + "type": "module", + "exports": "./index.js", "author": { "name": "Kevin MÃ¥rtensson", "email": "kevinmartensson@gmail.com", @@ -21,7 +23,7 @@ } ], "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "scripts": { "test": "xo && ava" @@ -39,13 +41,13 @@ "optimize" ], "dependencies": { - "execa": "^4.0.0", - "is-jpg": "^2.0.0", - "jpegoptim-bin": "^6.0.0" + "execa": "^6.0.0", + "is-jpg": "^3.0.0", + "jpegoptim-bin": "^7.1.0" }, "devDependencies": { - "ava": "^3.8.0", + "ava": "^3.15.0", "is-progressive": "^3.0.0", - "xo": "^0.30.0" + "xo": "^0.47.0" } } diff --git a/readme.md b/readme.md index d7f7f5c..e2d141d 100644 --- a/readme.md +++ b/readme.md @@ -13,8 +13,8 @@ See [`jpegoptim-bin`'s install section](https://github.com/imagemin/jpegoptim-bi ## Usage ```js -const imagemin = require('imagemin'); -const imageminJpegoptim = require('imagemin-jpegoptim'); +import imagemin from 'imagemin'; +import imageminJpegoptim from 'imagemin-jpegoptim'; (async () => { await imagemin(['images/*.jpg'], { diff --git a/test.js b/test.js index 246fd72..9457bad 100644 --- a/test.js +++ b/test.js @@ -1,42 +1,38 @@ -const {promisify} = require('util'); -const fs = require('fs'); -const path = require('path'); -const isJpg = require('is-jpg'); -const isProgressive = require('is-progressive'); -const test = require('ava'); -const m = require('.'); - -const readFile = promisify(fs.readFile); +import {promises as fs} from 'node:fs'; +import isJpg from 'is-jpg'; +import isProgressive from 'is-progressive'; +import test from 'ava'; +import imageminJpegoptim from './index.js'; test('optimize a JPG', async t => { - const buffer = await readFile(path.join(__dirname, 'fixtures/test.jpg')); - const data = await m()(buffer); + const buffer = await fs.readFile(new URL('fixtures/test.jpg', import.meta.url)); + const data = await imageminJpegoptim()(buffer); t.true(data.length < buffer.length); t.true(isJpg(data)); }); test('throw error when a JPG is corrupt', async t => { - const buffer = await readFile(path.join(__dirname, 'fixtures/test-corrupt.jpg')); + const buffer = await fs.readFile(new URL('fixtures/test-corrupt.jpg', import.meta.url)); await t.throwsAsync(async () => { - await m()(buffer); + await imageminJpegoptim()(buffer); }, {message: /JFIF/}); }); test('throw error when a large JPG is corrupt', async t => { - const buffer = await readFile(path.join(__dirname, 'fixtures/test-corrupt-large.jpg')); + const buffer = await fs.readFile(new URL('fixtures/test-corrupt-large.jpg', import.meta.url)); await t.throwsAsync(async () => { - await m()(buffer); + await imageminJpegoptim()(buffer); }, {message: /EPIPE|ERROR/}); }); test('progressive option', async t => { - const buffer = await readFile(path.join(__dirname, 'fixtures/test.jpg')); - const data = await m({progressive: true})(buffer); + const buffer = await fs.readFile(new URL('fixtures/test.jpg', import.meta.url)); + const data = await imageminJpegoptim({progressive: true})(buffer); t.true(isProgressive.buffer(data)); }); test('throw on wrong input', async t => { await t.throwsAsync(async () => { - await m()('foo'); + await imageminJpegoptim()('foo'); }, {message: 'Expected a Buffer, got string'}); });