chore: Replace css-inline with @css-inline/css-inline-wasm (#6336)

* chore: Replace `css-inline` with `@css-inline/css-inline-wasm`

Signed-off-by: Dmitry Dygalo <dmitry@dygalo.dev>

* Update yarn.lock

* Import order

* lint

---------

Signed-off-by: Dmitry Dygalo <dmitry@dygalo.dev>
Co-authored-by: Tom Moor <tom@getoutline.com>
This commit is contained in:
Dmitry Dygalo
2024-04-21 16:20:12 +02:00
committed by GitHub
parent 9f3dd51b48
commit ea2c7cfcd4
7 changed files with 54 additions and 17 deletions

View File

@@ -0,0 +1,29 @@
import HTMLHelper from "./HTMLHelper";
describe("HTMLHelper", () => {
const document = `<html>
<head>
<style>h1 { color:blue; }</style>
</head>
<body>
<h1>Big Text</h1>
</body>
</html>`;
describe("inlineCSS", () => {
it("should inline CSS from style tags", async () => {
const result = await HTMLHelper.inlineCSS(document);
expect(result).toBe(`<html><head>
</head>
<body>
<h1 style="color: blue;">Big Text</h1>
</body></html>`);
});
it("should initialize once", async () => {
const first = await HTMLHelper.inlineCSS(document);
const second = await HTMLHelper.inlineCSS(document);
expect(first).toBe(second);
});
});
});

View File

@@ -1,6 +1,9 @@
import { inline } from "css-inline";
import { initWasm, inline } from "@css-inline/css-inline-wasm";
import fs from "fs-extra";
import env from "@server/env";
let initialized = false;
export default class HTMLHelper {
/**
* Move CSS styles from <style> tags to inline styles with default settings.
@@ -8,13 +11,18 @@ export default class HTMLHelper {
* @param html The HTML to inline CSS styles for.
* @returns The HTML with CSS styles inlined.
*/
public static inlineCSS(html: string): string {
public static async inlineCSS(html: string): Promise<string> {
if (!initialized) {
const path = require.resolve("@css-inline/css-inline-wasm/index_bg.wasm");
await initWasm(fs.readFileSync(path));
initialized = true;
}
return inline(html, {
base_url: env.URL,
inline_style_tags: true,
keep_link_tags: false,
keep_style_tags: false,
load_remote_stylesheets: false,
baseUrl: env.URL,
inlineStyleTags: true,
keepLinkTags: false,
keepStyleTags: false,
loadRemoteStylesheets: false,
});
}
}