diff --git a/lib/svgo-node.js b/lib/svgo-node.js index 95c9f97c..6769f771 100644 --- a/lib/svgo-node.js +++ b/lib/svgo-node.js @@ -1,5 +1,5 @@ import os from 'os'; -import fs from 'fs'; +import fs from 'fs/promises'; import path from 'path'; import { VERSION, @@ -35,7 +35,7 @@ const importConfig = async (configFile) => { */ const isFile = async (file) => { try { - const stats = await fs.promises.stat(file); + const stats = await fs.stat(file); return stats.isFile(); } catch { return false; diff --git a/package.json b/package.json index 934343b1..2f2fe244 100644 --- a/package.json +++ b/package.json @@ -115,7 +115,7 @@ "sax": "^1.4.1" }, "devDependencies": { - "@eslint/js": "^9.3.0", + "@eslint/js": "^9.25.1", "@jest/globals": "^29.7.0", "@rollup/plugin-commonjs": "^25.0.7", "@rollup/plugin-node-resolve": "^15.2.3", @@ -125,8 +125,9 @@ "@types/jest": "^29.5.12", "@types/node": "^20.12.11", "@types/sax": "^1.2.7", + "@types/tar-stream": "^3.1.3", "cross-env": "^7.0.3", - "eslint": "^9.3.0", + "eslint": "^9.25.1", "globals": "^14.0.0", "jest": "^29.7.0", "pixelmatch": "^7.1.0", diff --git a/rollup.config.js b/rollup.config.js index 946c3961..e087fdd3 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -41,7 +41,13 @@ export default [ format: 'cjs', exports: 'named', }, - external: ['os', 'fs', 'url', 'path', ...Object.keys(PKG.dependencies)], + external: [ + 'os', + 'fs/promises', + 'url', + 'path', + ...Object.keys(PKG.dependencies), + ], onwarn(warning) { throw Error(warning.toString()); }, diff --git a/test/coa/_index.test.js b/test/coa/_index.test.js index 118c3e79..40378047 100644 --- a/test/coa/_index.test.js +++ b/test/coa/_index.test.js @@ -13,15 +13,18 @@ const svgFiles = [ path.resolve(__dirname, 'testSvg/test.1.svg'), ]; const tempFolder = 'temp'; -const noop = () => {}; +/** + * @param {string[]} args + * @returns {Promise} + */ function runProgram(args) { const program = new Command(); svgo(program); // prevent running process.exit program.exitOverride(() => {}); // parser skips first two arguments - return program.parseAsync([0, 1, ...args]); + return program.parseAsync(['', '', ...args]); } describe('coa', function () { @@ -34,18 +37,10 @@ describe('coa', function () { await fs.promises.rm(tempFolder, { force: true, recursive: true }); }); - const initialConsoleError = global.console.error; - const initialProcessExit = global.process.exit; - - function replaceConsoleError() { - global.process.exit = noop; - } - - function restoreConsoleError() { - global.console.error = initialConsoleError; - global.process.exit = initialProcessExit; - } - + /** + * @param {string} folderPath + * @returns {number} + */ function calcFolderSvgWeight(folderPath) { return fs .readdirSync(folderPath) @@ -120,14 +115,9 @@ describe('coa', function () { }); it('should throw error when stated in input folder does not exist', async () => { - replaceConsoleError(); - try { - await expect( - runProgram(['--input', svgFolderPath + 'temp', '--output', tempFolder]), - ).rejects.toThrow(/no such file or directory/); - } finally { - restoreConsoleError(); - } + await expect( + runProgram(['--input', svgFolderPath + 'temp', '--output', tempFolder]), + ).rejects.toThrow(/no such file or directory/); }); describe('stdout', () => { diff --git a/test/fixtures/config-loader/invalid-runtime.js b/test/fixtures/config-loader/invalid-runtime.js index 4a5f9c5b..15fba663 100644 --- a/test/fixtures/config-loader/invalid-runtime.js +++ b/test/fixtures/config-loader/invalid-runtime.js @@ -1,2 +1,3 @@ /* eslint-disable no-undef */ +// @ts-expect-error Testing malformed configuration. export default { plugins }; diff --git a/test/fixtures/config-loader/invalid-runtime.mjs b/test/fixtures/config-loader/invalid-runtime.mjs index edc79a4c..15fba663 100644 --- a/test/fixtures/config-loader/invalid-runtime.mjs +++ b/test/fixtures/config-loader/invalid-runtime.mjs @@ -1 +1,3 @@ -export default { plugins }; // eslint-disable-line no-undef +/* eslint-disable no-undef */ +// @ts-expect-error Testing malformed configuration. +export default { plugins }; diff --git a/test/plugins/_index.test.js b/test/plugins/_index.test.js index 42fd1776..4fe81f27 100644 --- a/test/plugins/_index.test.js +++ b/test/plugins/_index.test.js @@ -1,32 +1,39 @@ -import FS from 'fs'; -import PATH from 'path'; +import fs from 'fs/promises'; +import path from 'path'; import { EOL } from 'os'; import { fileURLToPath } from 'url'; import { optimize } from '../../lib/svgo.js'; -const regEOL = new RegExp(EOL, 'g'); +/** + * @typedef {import('../../lib/svgo.js').PluginConfig} PluginConfig + * @typedef {import('../../lib/svgo.js').CustomPlugin} CustomPlugin + */ + const regFilename = /^(.*)\.(\d+)\.svg\.txt$/; -const __dirname = PATH.dirname(fileURLToPath(import.meta.url)); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const files = await fs.readdir(__dirname); describe('plugins tests', function () { - FS.readdirSync(__dirname).forEach(function (file) { - var match = file.match(regFilename), - index, - name; + for (let file of files) { + const match = file.match(regFilename); + let index; + /** @type {any} */ + let name; if (match) { name = match[1]; index = match[2]; - file = PATH.resolve(__dirname, file); + file = path.resolve(__dirname, file); - it(name + '.' + index, function () { + it(name + '.' + index, () => { return readFile(file).then(function (data) { // remove description const items = normalize(data).split(/\s*===\s*/); const test = items.length === 2 ? items[1] : items[0]; // extract test case const [original, should, params] = test.split(/\s*@@@\s*/); + /** @type {Exclude} */ const plugin = { name, params: params ? JSON.parse(params) : {}, @@ -48,18 +55,21 @@ describe('plugins tests', function () { }); }); } - }); + } }); +/** + * @param {string} file + * @returns {string} + */ function normalize(file) { - return file.trim().replace(regEOL, '\n'); + return file.trim().replaceAll(EOL, '\n'); } +/** + * @param {string} file + * @returns {Promise} + */ function readFile(file) { - return new Promise(function (resolve, reject) { - FS.readFile(file, 'utf8', function (err, data) { - if (err) return reject(err); - resolve(data); - }); - }); + return fs.readFile(file, 'utf-8'); } diff --git a/test/plugins/_transforms.test.js b/test/plugins/_transforms.test.js index f60e54f6..d3076b1c 100644 --- a/test/plugins/_transforms.test.js +++ b/test/plugins/_transforms.test.js @@ -1,7 +1,7 @@ import { matrixToTransform } from '../../plugins/_transforms.js'; /** - * @typedef {import('../../plugins/_transforms').TransformParams} TransformParams + * @typedef {import('../../plugins/_transforms.js').TransformParams} TransformParams */ /** @type {TransformParams} */ diff --git a/test/regression-extract.js b/test/regression-extract.js index c5086a2e..ca5662a3 100644 --- a/test/regression-extract.js +++ b/test/regression-extract.js @@ -200,8 +200,13 @@ const extractTarGz = async (url, baseDir) => { stream.resume(); next(); }); - const response = await fetch(url); - await pipeline(response.body, zlib.createGunzip(), extract); + const { body } = await fetch(url); + + if (!body) { + throw Error('No body returned when fetching SVGO Test Suite.'); + } + + await pipeline(body, zlib.createGunzip(), extract); }; (async () => { diff --git a/test/svg2js/_index.test.js b/test/svg2js/_index.test.js index fee646e6..e644fdc4 100644 --- a/test/svg2js/_index.test.js +++ b/test/svg2js/_index.test.js @@ -1,17 +1,18 @@ -import FS from 'fs'; -import PATH from 'path'; +import fs from 'fs'; +import path from 'path'; import { fileURLToPath } from 'url'; import { parseSvg } from '../../lib/parser.js'; -const __dirname = PATH.dirname(fileURLToPath(import.meta.url)); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); -describe('svg2js', function () { - describe('working svg', function () { - var filepath = PATH.resolve(__dirname, './test.svg'), - root; +describe('svg2js', () => { + describe('working svg', () => { + const filepath = path.resolve(__dirname, './test.svg'); + /** @type {any} */ + let root; - beforeAll(function (done) { - FS.readFile(filepath, 'utf8', function (err, data) { + beforeAll((done) => { + fs.readFile(filepath, 'utf8', (err, data) => { if (err) { throw err; } @@ -21,26 +22,26 @@ describe('svg2js', function () { }); }); - describe('root', function () { - it('should exist', function () { + describe('root', () => { + it('should exist', () => { expect(root).toStrictEqual(expect.anything()); }); - it('should be an instance of Object', function () { + it('should be an instance of Object', () => { expect(root).toBeInstanceOf(Object); }); - it('should have property "children"', function () { + it('should have property "children"', () => { expect(root).toHaveProperty('children'); }); }); - describe('root.children', function () { - it('should be an instance of Array', function () { + describe('root.children', () => { + it('should be an instance of Array', () => { expect(root.children).toBeInstanceOf(Array); }); - it('should have length 4', function () { + it('should have length 4', () => { expect(root.children).toHaveLength(4); }); }); @@ -72,7 +73,7 @@ describe('svg2js', function () { }); }); - describe('name', function () { + describe('name', () => { it('should have property name: "svg"', function () { expect(root.children[3]).toStrictEqual( expect.objectContaining({ @@ -82,22 +83,22 @@ describe('svg2js', function () { }); }); - describe('children', function () { - it('should exist', function () { + describe('children', () => { + it('should exist', () => { expect(root.children[3].children).toStrictEqual(expect.anything()); }); - it('should be an instance of Array', function () { + it('should be an instance of Array', () => { expect(root.children[3].children).toBeInstanceOf(Array); }); - it('should eventually have length 3', function () { + it('should eventually have length 3', () => { expect(root.children[3].children).toHaveLength(3); }); }); - describe('text nodes', function () { - it('should contain preserved whitespace', function () { + describe('text nodes', () => { + it('should contain preserved whitespace', () => { const textNode = root.children[3].children[1].children[0].children[1]; expect(textNode.children[0].value).toBe(' test '); }); diff --git a/test/svgo/_index.test.js b/test/svgo/_index.test.js index 6bdddc19..255b78d8 100644 --- a/test/svgo/_index.test.js +++ b/test/svgo/_index.test.js @@ -6,12 +6,18 @@ import { VERSION, optimize, builtinPlugins } from '../../lib/svgo.js'; const __dirname = path.dirname(fileURLToPath(import.meta.url)); -const regEOL = new RegExp(EOL, 'g'); - +/** + * @param {string} file + * @returns {string} + */ const normalize = (file) => { - return file.trim().replace(regEOL, '\n'); + return file.trim().replaceAll(EOL, '\n'); }; +/** + * @param {string} file + * @returns {Promise} + */ const parseFixture = async (file) => { const filepath = path.resolve(__dirname, file); const content = await fs.readFile(filepath, 'utf-8'); diff --git a/tsconfig.json b/tsconfig.json index 4dd2ac5c..f2e2e5e7 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -2,12 +2,21 @@ "compilerOptions": { "noEmit": true, "module": "node16", - "target": "es2020", - "lib": ["es2020"], + "target": "es2021", + "lib": ["es2021"], "allowJs": true, "checkJs": true, "strict": true, "resolveJsonModule": true }, - "include": ["lib/**/*.js", "plugins/**/*", "test/cli/**/*"] + "exclude": [ + ".yarn/", + "coverage/", + "dist/", + "node_modules/", + "rollup.config.js", + "test/browser.js", + "test/regression.js", + "test/svgo.cjs" + ] } diff --git a/yarn.lock b/yarn.lock index d11c1797..8a968205 100644 --- a/yarn.lock +++ b/yarn.lock @@ -420,16 +420,43 @@ __metadata: languageName: node linkType: hard -"@eslint-community/regexpp@npm:^4.6.1": - version: 4.10.0 - resolution: "@eslint-community/regexpp@npm:4.10.0" - checksum: 2a6e345429ea8382aaaf3a61f865cae16ed44d31ca917910033c02dc00d505d939f10b81e079fa14d43b51499c640138e153b7e40743c4c094d9df97d4e56f7b +"@eslint-community/regexpp@npm:^4.12.1": + version: 4.12.1 + resolution: "@eslint-community/regexpp@npm:4.12.1" + checksum: 0d628680e204bc316d545b4993d3658427ca404ae646ce541fcc65306b8c712c340e5e573e30fb9f85f4855c0c5f6dca9868931f2fcced06417fbe1a0c6cd2d6 languageName: node linkType: hard -"@eslint/eslintrc@npm:^3.1.0": - version: 3.1.0 - resolution: "@eslint/eslintrc@npm:3.1.0" +"@eslint/config-array@npm:^0.20.0": + version: 0.20.0 + resolution: "@eslint/config-array@npm:0.20.0" + dependencies: + "@eslint/object-schema": ^2.1.6 + debug: ^4.3.1 + minimatch: ^3.1.2 + checksum: 55824ea31f0502166a6fea97176c9c25089a0354474cdc72a5f739b1cf6925f44f667bf8f4f3a9dabf1112ab0fa671778ca3f96f1499f31ec42caf84cae55005 + languageName: node + linkType: hard + +"@eslint/config-helpers@npm:^0.2.1": + version: 0.2.1 + resolution: "@eslint/config-helpers@npm:0.2.1" + checksum: b463805bc319608436a8b19c94fd533d8196b326c03361db54c0f3ec59d7bd6337c9764bc945ef15df94f50443973241dc265f661b07aceed4938f7d1cf2e822 + languageName: node + linkType: hard + +"@eslint/core@npm:^0.13.0": + version: 0.13.0 + resolution: "@eslint/core@npm:0.13.0" + dependencies: + "@types/json-schema": ^7.0.15 + checksum: 4d1a4163ba7f667297ba6e60de82f41d139b01951e2870b1bb609072c3c5df68b0288cc911ce3af0564dfa19bfda23cbf04eebd243ccb4960e0b5f927aa9a723 + languageName: node + linkType: hard + +"@eslint/eslintrc@npm:^3.3.1": + version: 3.3.1 + resolution: "@eslint/eslintrc@npm:3.3.1" dependencies: ajv: ^6.12.4 debug: ^4.3.2 @@ -440,25 +467,48 @@ __metadata: js-yaml: ^4.1.0 minimatch: ^3.1.2 strip-json-comments: ^3.1.1 - checksum: b0a9bbd98c8b9e0f4d975b042ff9b874dde722b20834ea2ff46551c3de740d4f10f56c449b790ef34d7f82147cbddfc22b004a43cc885dbc2664bb134766b5e4 + checksum: 8241f998f0857abf5a615072273b90b1244d75c1c45d217c6a8eb444c6e12bbb5506b4879c14fb262eb72b7d8e3d2f0542da2db1a7f414a12496ebb790fb4d62 languageName: node linkType: hard -"@eslint/js@npm:9.3.0, @eslint/js@npm:^9.3.0": - version: 9.3.0 - resolution: "@eslint/js@npm:9.3.0" - checksum: 5af317c8bcfef660efc17624b825c71bac16770f8866bfdc2922e1fcc2010af96e4f896e91724b81550e5dba6db6983c221b5be9a1294c9e727dee9ada15c9f8 +"@eslint/js@npm:9.25.1, @eslint/js@npm:^9.25.1": + version: 9.25.1 + resolution: "@eslint/js@npm:9.25.1" + checksum: f5b9c9c40694fbb858fc84ac0f9468ca3f09d8b4935da21dcab3f65c094e8e266a4926ec7bb1e18441440c5ddd722a5f62dabd58096aefbe6b517ed809d8fa8b languageName: node linkType: hard -"@humanwhocodes/config-array@npm:^0.13.0": - version: 0.13.0 - resolution: "@humanwhocodes/config-array@npm:0.13.0" +"@eslint/object-schema@npm:^2.1.6": + version: 2.1.6 + resolution: "@eslint/object-schema@npm:2.1.6" + checksum: e32e565319f6544d36d3fa69a3e163120722d12d666d1a4525c9a6f02e9b54c29d9b1f03139e25d7e759e08dda8da433590bc23c09db8d511162157ef1b86a4c + languageName: node + linkType: hard + +"@eslint/plugin-kit@npm:^0.2.8": + version: 0.2.8 + resolution: "@eslint/plugin-kit@npm:0.2.8" dependencies: - "@humanwhocodes/object-schema": ^2.0.3 - debug: ^4.3.1 - minimatch: ^3.0.5 - checksum: eae69ff9134025dd2924f0b430eb324981494be26f0fddd267a33c28711c4db643242cf9fddf7dadb9d16c96b54b2d2c073e60a56477df86e0173149313bd5d6 + "@eslint/core": ^0.13.0 + levn: ^0.4.1 + checksum: b5bd769f3f96cb3bdc4051d9ebd973b30d1cd00a02953ded1eeb74fb5b2af73cf38c20cc76acddc8e74828f0dbf92ba9d725414b3026177935fc4b48784a7fba + languageName: node + linkType: hard + +"@humanfs/core@npm:^0.19.1": + version: 0.19.1 + resolution: "@humanfs/core@npm:0.19.1" + checksum: 611e0545146f55ddfdd5c20239cfb7911f9d0e28258787c4fc1a1f6214250830c9367aaaeace0096ed90b6739bee1e9c52ad5ba8adaf74ab8b449119303babfe + languageName: node + linkType: hard + +"@humanfs/node@npm:^0.16.6": + version: 0.16.6 + resolution: "@humanfs/node@npm:0.16.6" + dependencies: + "@humanfs/core": ^0.19.1 + "@humanwhocodes/retry": ^0.3.0 + checksum: f9cb52bb235f8b9c6fcff43a7e500669a38f8d6ce26593404a9b56365a1644e0ed60c720dc65ff6a696b1f85f3563ab055bb554ec8674f2559085ba840e47710 languageName: node linkType: hard @@ -469,13 +519,6 @@ __metadata: languageName: node linkType: hard -"@humanwhocodes/object-schema@npm:^2.0.3": - version: 2.0.3 - resolution: "@humanwhocodes/object-schema@npm:2.0.3" - checksum: d3b78f6c5831888c6ecc899df0d03bcc25d46f3ad26a11d7ea52944dc36a35ef543fad965322174238d677a43d5c694434f6607532cff7077062513ad7022631 - languageName: node - linkType: hard - "@humanwhocodes/retry@npm:^0.3.0": version: 0.3.0 resolution: "@humanwhocodes/retry@npm:0.3.0" @@ -483,6 +526,13 @@ __metadata: languageName: node linkType: hard +"@humanwhocodes/retry@npm:^0.4.2": + version: 0.4.2 + resolution: "@humanwhocodes/retry@npm:0.4.2" + checksum: 764127449a9f97d807b9c47f898fce8d7e0e8e8438366116b9ddcaacded99b2c285b8eed2cfdd5fdcb68be47728218db949f9618a58c0d3898d9fd14a6d6671e + languageName: node + linkType: hard + "@isaacs/cliui@npm:^8.0.2": version: 8.0.2 resolution: "@isaacs/cliui@npm:8.0.2" @@ -799,33 +849,6 @@ __metadata: languageName: node linkType: hard -"@nodelib/fs.scandir@npm:2.1.5": - version: 2.1.5 - resolution: "@nodelib/fs.scandir@npm:2.1.5" - dependencies: - "@nodelib/fs.stat": 2.0.5 - run-parallel: ^1.1.9 - checksum: a970d595bd23c66c880e0ef1817791432dbb7acbb8d44b7e7d0e7a22f4521260d4a83f7f9fd61d44fda4610105577f8f58a60718105fb38352baed612fd79e59 - languageName: node - linkType: hard - -"@nodelib/fs.stat@npm:2.0.5": - version: 2.0.5 - resolution: "@nodelib/fs.stat@npm:2.0.5" - checksum: 012480b5ca9d97bff9261571dbbec7bbc6033f69cc92908bc1ecfad0792361a5a1994bc48674b9ef76419d056a03efadfce5a6cf6dbc0a36559571a7a483f6f0 - languageName: node - linkType: hard - -"@nodelib/fs.walk@npm:^1.2.8": - version: 1.2.8 - resolution: "@nodelib/fs.walk@npm:1.2.8" - dependencies: - "@nodelib/fs.scandir": 2.1.5 - fastq: ^1.6.0 - checksum: 190c643f156d8f8f277bf2a6078af1ffde1fd43f498f187c2db24d35b4b4b5785c02c7dc52e356497b9a1b65b13edc996de08de0b961c32844364da02986dc53 - languageName: node - linkType: hard - "@npmcli/agent@npm:^2.0.0": version: 2.2.2 resolution: "@npmcli/agent@npm:2.2.2" @@ -1119,7 +1142,14 @@ __metadata: languageName: node linkType: hard -"@types/estree@npm:*, @types/estree@npm:1.0.5, @types/estree@npm:^1.0.0": +"@types/estree@npm:*, @types/estree@npm:^1.0.0, @types/estree@npm:^1.0.6": + version: 1.0.7 + resolution: "@types/estree@npm:1.0.7" + checksum: d9312b7075bdd08f3c9e1bb477102f5458aaa42a8eec31a169481ce314ca99ac716645cff4fca81ea65a2294b0276a0de63159d1baca0f8e7b5050a92de950ad + languageName: node + linkType: hard + +"@types/estree@npm:1.0.5": version: 1.0.5 resolution: "@types/estree@npm:1.0.5" checksum: dd8b5bed28e6213b7acd0fb665a84e693554d850b0df423ac8076cc3ad5823a6bc26b0251d080bdc545af83179ede51dd3f6fa78cad2c46ed1f29624ddf3e41a @@ -1170,6 +1200,13 @@ __metadata: languageName: node linkType: hard +"@types/json-schema@npm:^7.0.15": + version: 7.0.15 + resolution: "@types/json-schema@npm:7.0.15" + checksum: 97ed0cb44d4070aecea772b7b2e2ed971e10c81ec87dd4ecc160322ffa55ff330dace1793489540e3e318d90942064bb697cc0f8989391797792d919737b3b98 + languageName: node + linkType: hard + "@types/node@npm:*, @types/node@npm:^20.12.11": version: 20.12.11 resolution: "@types/node@npm:20.12.11" @@ -1202,6 +1239,15 @@ __metadata: languageName: node linkType: hard +"@types/tar-stream@npm:^3.1.3": + version: 3.1.3 + resolution: "@types/tar-stream@npm:3.1.3" + dependencies: + "@types/node": "*" + checksum: 187387748288b35924284afc26cf36b6b966377f5131398bf484c475f7191c50f5e5903c94a7391049b6cdfce174ae2e63f776dea9425d94ddc6bd31ebe386ee + languageName: node + linkType: hard + "@types/yargs-parser@npm:*": version: 21.0.3 resolution: "@types/yargs-parser@npm:21.0.3" @@ -1234,12 +1280,12 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.11.3, acorn@npm:^8.8.2": - version: 8.11.3 - resolution: "acorn@npm:8.11.3" +"acorn@npm:^8.14.0, acorn@npm:^8.8.2": + version: 8.14.1 + resolution: "acorn@npm:8.14.1" bin: acorn: bin/acorn - checksum: 76d8e7d559512566b43ab4aadc374f11f563f0a9e21626dd59cb2888444e9445923ae9f3699972767f18af61df89cd89f5eaaf772d1327b055b45cb829b4a88c + checksum: 260d9bb6017a1b6e42d31364687f0258f78eb20210b36ef2baad38fd619d78d4e95ff7dde9b3dbe0d81f137f79a8d651a845363a26e6985997f7b71145dc5e94 languageName: node linkType: hard @@ -1749,14 +1795,14 @@ __metadata: languageName: node linkType: hard -"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.1, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": - version: 7.0.3 - resolution: "cross-spawn@npm:7.0.3" +"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.1, cross-spawn@npm:^7.0.3, cross-spawn@npm:^7.0.6": + version: 7.0.6 + resolution: "cross-spawn@npm:7.0.6" dependencies: path-key: ^3.1.0 shebang-command: ^2.0.0 which: ^2.0.1 - checksum: 671cc7c7288c3a8406f3c69a3ae2fc85555c04169e9d611def9a675635472614f1c0ed0ef80955d5b6d4e724f6ced67f0ad1bb006c2ea643488fcfef994d7f52 + checksum: 8d306efacaf6f3f60e0224c287664093fa9185680b2d195852ba9a863f85d02dcc737094c6e512175f8ee0161f9b87c73c6826034c2422e39de7d6569cf4503b languageName: node linkType: hard @@ -2001,13 +2047,13 @@ __metadata: languageName: node linkType: hard -"eslint-scope@npm:^8.0.1": - version: 8.0.1 - resolution: "eslint-scope@npm:8.0.1" +"eslint-scope@npm:^8.3.0": + version: 8.3.0 + resolution: "eslint-scope@npm:8.3.0" dependencies: esrecurse: ^4.3.0 estraverse: ^5.2.0 - checksum: 67a5a39312dadb8c9a677df0f2e8add8daf15280b08bfe07f898d5347ee2d7cd2a1f5c2760f34e46e8f5f13f7192f47c2c10abe676bfa4173ae5539365551940 + checksum: 57a58b6716533e25d527089826c4add89a047aecf75e4a88fee05f113ef5a72b85392b304a69bf670646cc3e068354aec70361b9718c2453949a05fc4d9bfe73 languageName: node linkType: hard @@ -2018,34 +2064,39 @@ __metadata: languageName: node linkType: hard -"eslint-visitor-keys@npm:^4.0.0": - version: 4.0.0 - resolution: "eslint-visitor-keys@npm:4.0.0" - checksum: 5c09f89cf29d87cdbfbac38802a880d3c2e65f8cb61c689888346758f1e24a4c7f6caefeac9474dfa52058a99920623599bdb00516976a30134abeba91275aa2 +"eslint-visitor-keys@npm:^4.2.0": + version: 4.2.0 + resolution: "eslint-visitor-keys@npm:4.2.0" + checksum: 779c604672b570bb4da84cef32f6abb085ac78379779c1122d7879eade8bb38ae715645324597cf23232d03cef06032c9844d25c73625bc282a5bfd30247e5b5 languageName: node linkType: hard -"eslint@npm:^9.3.0": - version: 9.3.0 - resolution: "eslint@npm:9.3.0" +"eslint@npm:^9.25.1": + version: 9.25.1 + resolution: "eslint@npm:9.25.1" dependencies: "@eslint-community/eslint-utils": ^4.2.0 - "@eslint-community/regexpp": ^4.6.1 - "@eslint/eslintrc": ^3.1.0 - "@eslint/js": 9.3.0 - "@humanwhocodes/config-array": ^0.13.0 + "@eslint-community/regexpp": ^4.12.1 + "@eslint/config-array": ^0.20.0 + "@eslint/config-helpers": ^0.2.1 + "@eslint/core": ^0.13.0 + "@eslint/eslintrc": ^3.3.1 + "@eslint/js": 9.25.1 + "@eslint/plugin-kit": ^0.2.8 + "@humanfs/node": ^0.16.6 "@humanwhocodes/module-importer": ^1.0.1 - "@humanwhocodes/retry": ^0.3.0 - "@nodelib/fs.walk": ^1.2.8 + "@humanwhocodes/retry": ^0.4.2 + "@types/estree": ^1.0.6 + "@types/json-schema": ^7.0.15 ajv: ^6.12.4 chalk: ^4.0.0 - cross-spawn: ^7.0.2 + cross-spawn: ^7.0.6 debug: ^4.3.2 escape-string-regexp: ^4.0.0 - eslint-scope: ^8.0.1 - eslint-visitor-keys: ^4.0.0 - espree: ^10.0.1 - esquery: ^1.4.2 + eslint-scope: ^8.3.0 + eslint-visitor-keys: ^4.2.0 + espree: ^10.3.0 + esquery: ^1.5.0 esutils: ^2.0.2 fast-deep-equal: ^3.1.3 file-entry-cache: ^8.0.0 @@ -2054,29 +2105,30 @@ __metadata: ignore: ^5.2.0 imurmurhash: ^0.1.4 is-glob: ^4.0.0 - is-path-inside: ^3.0.3 json-stable-stringify-without-jsonify: ^1.0.1 - levn: ^0.4.1 lodash.merge: ^4.6.2 minimatch: ^3.1.2 natural-compare: ^1.4.0 optionator: ^0.9.3 - strip-ansi: ^6.0.1 - text-table: ^0.2.0 + peerDependencies: + jiti: "*" + peerDependenciesMeta: + jiti: + optional: true bin: eslint: bin/eslint.js - checksum: c6d1eb8b4b064470a99f0d927b0d2b88f1947d7e871761b43b84e6c9b6464db4f6ebbb868f7196a45d2589978b09919a8807d200e3b1640d0a9cd245c9504707 + checksum: 498a9dcb28f7ad154e5ad744a80f31397fe971959c317af710794de3cc3518e59f581d0a1668b9d3872f05dbff55093c23019677a729087d097c19295473eb8b languageName: node linkType: hard -"espree@npm:^10.0.1": - version: 10.0.1 - resolution: "espree@npm:10.0.1" +"espree@npm:^10.0.1, espree@npm:^10.3.0": + version: 10.3.0 + resolution: "espree@npm:10.3.0" dependencies: - acorn: ^8.11.3 + acorn: ^8.14.0 acorn-jsx: ^5.3.2 - eslint-visitor-keys: ^4.0.0 - checksum: 62c9242a84c6741cebd35ede6574131d0419be7e5559566403e384087d99c4ddb2ced44e32acd44a4c3d8a8a84997cf8d78810c4e46b3fe25a804f1a92dc6b9d + eslint-visitor-keys: ^4.2.0 + checksum: 63e8030ff5a98cea7f8b3e3a1487c998665e28d674af08b9b3100ed991670eb3cbb0e308c4548c79e03762753838fbe530c783f17309450d6b47a889fee72bef languageName: node linkType: hard @@ -2090,12 +2142,12 @@ __metadata: languageName: node linkType: hard -"esquery@npm:^1.4.2": - version: 1.5.0 - resolution: "esquery@npm:1.5.0" +"esquery@npm:^1.5.0": + version: 1.6.0 + resolution: "esquery@npm:1.6.0" dependencies: estraverse: ^5.1.0 - checksum: aefb0d2596c230118656cd4ec7532d447333a410a48834d80ea648b1e7b5c9bc9ed8b5e33a89cb04e487b60d622f44cf5713bf4abed7c97343edefdc84a35900 + checksum: 08ec4fe446d9ab27186da274d979558557fbdbbd10968fa9758552482720c54152a5640e08b9009e5a30706b66aba510692054d4129d32d0e12e05bbc0b96fb2 languageName: node linkType: hard @@ -2201,15 +2253,6 @@ __metadata: languageName: node linkType: hard -"fastq@npm:^1.6.0": - version: 1.17.1 - resolution: "fastq@npm:1.17.1" - dependencies: - reusify: ^1.0.4 - checksum: a8c5b26788d5a1763f88bae56a8ddeee579f935a831c5fe7a8268cea5b0a91fbfe705f612209e02d639b881d7b48e461a50da4a10cfaa40da5ca7cc9da098d88 - languageName: node - linkType: hard - "fb-watchman@npm:^2.0.0": version: 2.0.2 resolution: "fb-watchman@npm:2.0.2" @@ -2673,13 +2716,6 @@ __metadata: languageName: node linkType: hard -"is-path-inside@npm:^3.0.3": - version: 3.0.3 - resolution: "is-path-inside@npm:3.0.3" - checksum: abd50f06186a052b349c15e55b182326f1936c89a78bf6c8f2b707412517c097ce04bc49a0ca221787bc44e1049f51f09a2ffb63d22899051988d3a618ba13e9 - languageName: node - linkType: hard - "is-reference@npm:1.2.1": version: 1.2.1 resolution: "is-reference@npm:1.2.1" @@ -3476,7 +3512,7 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": +"minimatch@npm:^3.0.4, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": version: 3.1.2 resolution: "minimatch@npm:3.1.2" dependencies: @@ -3977,13 +4013,6 @@ __metadata: languageName: node linkType: hard -"queue-microtask@npm:^1.2.2": - version: 1.2.3 - resolution: "queue-microtask@npm:1.2.3" - checksum: b676f8c040cdc5b12723ad2f91414d267605b26419d5c821ff03befa817ddd10e238d22b25d604920340fd73efd8ba795465a0377c4adf45a4a41e4234e42dc4 - languageName: node - linkType: hard - "queue-tick@npm:^1.0.1": version: 1.0.1 resolution: "queue-tick@npm:1.0.1" @@ -4077,13 +4106,6 @@ __metadata: languageName: node linkType: hard -"reusify@npm:^1.0.4": - version: 1.0.4 - resolution: "reusify@npm:1.0.4" - checksum: c3076ebcc22a6bc252cb0b9c77561795256c22b757f40c0d8110b1300723f15ec0fc8685e8d4ea6d7666f36c79ccc793b1939c748bf36f18f542744a4e379fcc - languageName: node - linkType: hard - "rimraf@npm:^5.0.7": version: 5.0.7 resolution: "rimraf@npm:5.0.7" @@ -4158,15 +4180,6 @@ __metadata: languageName: node linkType: hard -"run-parallel@npm:^1.1.9": - version: 1.2.0 - resolution: "run-parallel@npm:1.2.0" - dependencies: - queue-microtask: ^1.2.2 - checksum: cb4f97ad25a75ebc11a8ef4e33bb962f8af8516bb2001082ceabd8902e15b98f4b84b4f8a9b222e5d57fc3bd1379c483886ed4619367a7680dad65316993021d - languageName: node - linkType: hard - "safe-buffer@npm:^5.1.0": version: 5.2.1 resolution: "safe-buffer@npm:5.2.1" @@ -4490,7 +4503,7 @@ __metadata: version: 0.0.0-use.local resolution: "svgo@workspace:." dependencies: - "@eslint/js": ^9.3.0 + "@eslint/js": ^9.25.1 "@jest/globals": ^29.7.0 "@rollup/plugin-commonjs": ^25.0.7 "@rollup/plugin-node-resolve": ^15.2.3 @@ -4500,13 +4513,14 @@ __metadata: "@types/jest": ^29.5.12 "@types/node": ^20.12.11 "@types/sax": ^1.2.7 + "@types/tar-stream": ^3.1.3 commander: ^11.1.0 cross-env: ^7.0.3 css-select: ^5.1.0 css-tree: ^3.0.1 css-what: ^6.1.0 csso: ^5.0.5 - eslint: ^9.3.0 + eslint: ^9.25.1 globals: ^14.0.0 jest: ^29.7.0 picocolors: ^1.1.1 @@ -4574,13 +4588,6 @@ __metadata: languageName: node linkType: hard -"text-table@npm:^0.2.0": - version: 0.2.0 - resolution: "text-table@npm:0.2.0" - checksum: b6937a38c80c7f84d9c11dd75e49d5c44f71d95e810a3250bd1f1797fc7117c57698204adf676b71497acc205d769d65c16ae8fa10afad832ae1322630aef10a - languageName: node - linkType: hard - "tmpl@npm:1.0.5": version: 1.0.5 resolution: "tmpl@npm:1.0.5"