1
0
mirror of https://github.com/koloml/philomena-tagging-assistant.git synced 2026-05-09 15:12:21 +00:00

Reworking post-svelte build process for the extension

This commit is contained in:
2024-05-08 01:47:35 +04:00
parent 2ffef5951d
commit 571b8dd575
7 changed files with 351 additions and 146 deletions

46
.vite/lib/index-file.js Normal file
View File

@@ -0,0 +1,46 @@
import fs from "fs";
import {createHash} from "crypto";
import {load} from "cheerio";
import path from "path";
/**
* Find and extract all inline scripts injected into index file by the SvelteKit builder. This needs to be done due to
* ManifestV3 restrictions on inline/loaded scripts usage. The only way to run scripts in popup is by specifying
* `<script>` tag with the path. Thanks, ManifestV3!
*
* @param {string} indexFilePath Path to the index.html file. This file will be overridden and all the inline scripts
* found inside it will be placed in the same directory.
*/
export function extractInlineScriptsFromIndex(indexFilePath) {
const directory = path.dirname(indexFilePath);
const html = fs.readFileSync(indexFilePath, 'utf8');
const ch = load(html);
ch('script').each((index, scriptElement) => {
const $script = ch(scriptElement);
const scriptContent = $script.text();
const contentsHash = createHash('sha256')
.update(scriptContent)
.digest('base64url')
.substring(0, 8);
const fileName = `init.${contentsHash}.js`;
const filePath = path.resolve(directory, fileName);
const publicPath = `./${fileName}`;
fs.writeFileSync(
filePath,
// This will work for minifying index script of the SvelteKit, but might cause some issues if any other scripts
// will appear. Good for now.
scriptContent
.replaceAll("\t", "")
.replaceAll("\n", "")
);
$script.attr('src', publicPath);
$script.text('');
});
fs.writeFileSync(indexFilePath, ch.html());
}