diff --git a/.github/dependabot.yml b/.github/dependabot.yml index ce3bf491..ff2fcd54 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -62,7 +62,7 @@ updates: - 'recma-*' compiling: patterns: - - '@minify-html/wasm' + - '@swc/html-wasm' - '@rollup/*' - 'rolldown' - 'lightningcss-wasm' diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index e8424bd4..7469cffe 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -14,6 +14,7 @@ "@orama/orama": "^3.1.18", "@orama/ui": "^1.5.4", "@rollup/plugin-virtual": "^3.0.2", + "@swc/html-wasm": "^1.15.18", "acorn": "^8.16.0", "commander": "^14.0.3", "dedent": "^1.7.1", @@ -2464,6 +2465,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@swc/html-wasm": { + "version": "1.15.18", + "resolved": "https://registry.npmjs.org/@swc/html-wasm/-/html-wasm-1.15.18.tgz", + "integrity": "sha512-nABVlYRZjfTJA3bTEf7w6Gu8GgRfFJZqTAJ+ehJzwKtCreMy4QFBGiv3KkCjIjxXg+U8qrpnqgo9SjVOq3lPEw==", + "license": "Apache-2.0" + }, "node_modules/@tailwindcss/node": { "version": "4.1.18", "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.18.tgz", @@ -8334,6 +8341,7 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" diff --git a/package.json b/package.json index 3967317b..ccb9b753 100644 --- a/package.json +++ b/package.json @@ -49,6 +49,7 @@ "@orama/orama": "^3.1.18", "@orama/ui": "^1.5.4", "@rollup/plugin-virtual": "^3.0.2", + "@swc/html-wasm": "^1.15.18", "acorn": "^8.16.0", "commander": "^14.0.3", "dedent": "^1.7.1", diff --git a/src/generators/legacy-html-all/generate.mjs b/src/generators/legacy-html-all/generate.mjs index b9cc3a88..a322445e 100644 --- a/src/generators/legacy-html-all/generate.mjs +++ b/src/generators/legacy-html-all/generate.mjs @@ -63,7 +63,7 @@ export async function generate(input) { }); if (config.minify) { - result = Buffer.from(await minifyHTML(result)); + result = await minifyHTML(result); } if (config.output) { diff --git a/src/generators/legacy-html/generate.mjs b/src/generators/legacy-html/generate.mjs index 6888612d..4126c13c 100644 --- a/src/generators/legacy-html/generate.mjs +++ b/src/generators/legacy-html/generate.mjs @@ -130,7 +130,7 @@ export async function* generate(input, worker) { let result = replaceTemplateValues(apiTemplate, template, config); if (config.minify) { - result = Buffer.from(await minifyHTML(result)); + result = await minifyHTML(result); } await writeFile(join(config.output, `${template.api}.html`), result); diff --git a/src/generators/web/utils/processing.mjs b/src/generators/web/utils/processing.mjs index 902f1c22..14931700 100644 --- a/src/generators/web/utils/processing.mjs +++ b/src/generators/web/utils/processing.mjs @@ -123,10 +123,7 @@ export async function processJSXEntries( .replace('{{speculationRules}}', SPECULATION_RULES) .replace('{{ogTitle}}', title); - const minifiedHtml = await minifyHTML(renderedHtml); - const html = Buffer.from(minifiedHtml); - - return { html, api }; + return { html: await minifyHTML(renderedHtml), api }; }) ); diff --git a/src/utils/html-minifier.mjs b/src/utils/html-minifier.mjs index e3921288..a32b9d58 100644 --- a/src/utils/html-minifier.mjs +++ b/src/utils/html-minifier.mjs @@ -1,24 +1,12 @@ -import { minify } from '@minify-html/wasm'; - -const DEFAULT_HTML_MINIFIER_OPTIONS = { - minify_css: true, - minify_js: true, -}; - -const textEncoder = new TextEncoder(); -const textDecoder = new TextDecoder(); +import { minify } from '@swc/html-wasm'; /** - * Minifies HTML with project defaults and optional overrides. + * Minifies HTML with project defaults and optional overrides. At the moment, + * swc's defaults are suitable for our needs, but in the event that this changes, + * allowing project defaults is beneficial. * * @param {string} html - * @param {Record} [overrides] + * @param {import('@swc/html-wasm').Options} [options] */ -export const minifyHTML = async (html, overrides = {}) => { - const minified = minify(textEncoder.encode(html), { - ...DEFAULT_HTML_MINIFIER_OPTIONS, - ...overrides, - }); - - return textDecoder.decode(minified); -}; +export const minifyHTML = async (html, options = {}) => + minify(html, options).then(({ code }) => code);