diff --git a/index.test.js b/index.test.js index 04b2d79..bb0308f 100644 --- a/index.test.js +++ b/index.test.js @@ -161,8 +161,8 @@ filteredFixturesWithAttributes.forEach(({attrName, isVoid, tagName}) => it(`supp ["img", "source"].forEach(tagName => it(`supports <${tagName} src srcset="…">`, () => { - const input = `<${tagName} src="image1.png" srcset="image1a.png 2x, image1b.png 100w, image1c.png 100h">`; - const output = `<${tagName} src="http://domain.com/image1.png" srcset="http://domain.com/image1a.png 2x, http://domain.com/image1b.png 100w, http://domain.com/image1c.png 100h">`; + const input = `<${tagName} src="image1.png" srcset="image1a.png 2x, image1b.png 100w, image1c.png">`; + const output = `<${tagName} src="http://domain.com/image1.png" srcset="http://domain.com/image1a.png 2x, http://domain.com/image1b.png 100w, http://domain.com/image1c.png">`; const options = { diff --git a/lib/index.js b/lib/index.js index db2e0f1..007a294 100644 --- a/lib/index.js +++ b/lib/index.js @@ -1,13 +1,12 @@ "use strict"; const DEFAULT_OPTIONS = require("./defaultOptions"); const parseMetaRefresh = require("http-equiv-refresh"); -const parseSrcset = require("parse-srcset"); +const { parseSrcset, stringifySrcset } = require("srcset"); const CONTENT_ATTR = "content"; const PING_ATTR = "ping"; const SRCSET_ATTR = "srcset"; -const EMPTY_STRING = ""; const EMPTY_TAG_GROUP = Object.freeze({}); const FUNCTION_TYPE = "function"; const PRETTY_DELIMITER = ", "; @@ -148,17 +147,16 @@ const transformSrcset = (node, attrName, transformer) => if (values.length > 0) { - const promises = values.map(({d, h, url, w}) => Promise.resolve( transformer(url, attrName, tag, node) ) - .then(newUrl => + const promises = values.map((srcset) => Promise.resolve( transformer(srcset.url, attrName, tag, node) ) + .then( + /** @returns {import('srcset').SrcSetDefinition} */ + newUrl => { - d = d !== undefined ? ` ${d}x` : EMPTY_STRING; - h = h !== undefined ? ` ${h}h` : EMPTY_STRING; - w = w !== undefined ? ` ${w}w` : EMPTY_STRING; - - return `${newUrl}${w}${h}${d}`; + + return { ...srcset, url: newUrl }; })); - return Promise.all(promises).then(newValues => attrs[attrName] = newValues.join(PRETTY_DELIMITER)); + return Promise.all(promises).then(newValues => attrs[attrName] = stringifySrcset(newValues)); } }; diff --git a/package-lock.json b/package-lock.json index 8ada646..02da01f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "license": "MIT", "dependencies": { "http-equiv-refresh": "^2.0.1", - "parse-srcset": "^1.0.2" + "srcset": "^5.0.3" }, "devDependencies": { "@vitest/coverage-v8": "^4.1.5", @@ -1282,12 +1282,6 @@ ], "license": "MIT" }, - "node_modules/parse-srcset": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz", - "integrity": "sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q==", - "license": "MIT" - }, "node_modules/pathe": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", @@ -1435,6 +1429,18 @@ "node": ">=0.10.0" } }, + "node_modules/srcset": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/srcset/-/srcset-5.0.3.tgz", + "integrity": "sha512-AZswtOXIsu0LeHdo6YY7d0r2pCH2Rl1D8ae1utvXUX4GxG3RggsVUAOFX1r8RI4YHFMYb4g89+UBPBv3mNUU2g==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/stackback": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", diff --git a/package.json b/package.json index c45b93b..076240a 100644 --- a/package.json +++ b/package.json @@ -17,13 +17,13 @@ }, "dependencies": { "http-equiv-refresh": "^2.0.1", - "parse-srcset": "^1.0.2" + "srcset": "^5.0.3" }, "devDependencies": { - "vitest": "^4.1.5", "@vitest/coverage-v8": "^4.1.5", "html-tags": "^3.1.1", - "posthtml": "~0.16.6" + "posthtml": "~0.16.6", + "vitest": "^4.1.5" }, "engines": { "node": ">= 20"