mirror of
https://github.com/koloml/furbooru-tagging-assistant.git
synced 2025-12-23 23:02:58 +00:00
91 lines
2.6 KiB
JavaScript
91 lines
2.6 KiB
JavaScript
import { loadManifest } from "./lib/manifest.js";
|
|
import path from "path";
|
|
import { buildScriptsAndStyles } from "./lib/content-scripts.js";
|
|
import { extractInlineScriptsFromIndex } from "./lib/index-file.js";
|
|
import { normalizePath } from "vite";
|
|
|
|
/**
|
|
* Build addition assets required for the extension and pack it into the directory.
|
|
* @param {PackExtensionSettings} settings Build settings.
|
|
*/
|
|
export async function packExtension(settings) {
|
|
const manifest = loadManifest(path.resolve(settings.rootDir, 'manifest.json'));
|
|
|
|
const replacementMapping = await buildScriptsAndStyles({
|
|
inputs: manifest.collectContentScripts(),
|
|
outputDir: settings.contentScriptsDir,
|
|
rootDir: settings.rootDir,
|
|
});
|
|
|
|
await manifest.mapContentScripts(async entry => {
|
|
if (entry.js) {
|
|
entry.js = entry.js
|
|
.map(jsSourcePath => {
|
|
if (!replacementMapping.has(jsSourcePath)) {
|
|
return [];
|
|
}
|
|
|
|
return replacementMapping.get(jsSourcePath);
|
|
})
|
|
.flat(1)
|
|
.map(pathName => {
|
|
return normalizePath(
|
|
path.relative(
|
|
settings.exportDir,
|
|
path.join(
|
|
settings.contentScriptsDir,
|
|
pathName
|
|
)
|
|
)
|
|
)
|
|
});
|
|
}
|
|
|
|
if (entry.css) {
|
|
entry.css = entry.css
|
|
.map(jsSourcePath => {
|
|
if (!replacementMapping.has(jsSourcePath)) {
|
|
return [];
|
|
}
|
|
|
|
return replacementMapping.get(jsSourcePath);
|
|
})
|
|
.flat(1)
|
|
.map(pathName => {
|
|
return normalizePath(
|
|
path.relative(
|
|
settings.exportDir,
|
|
path.join(
|
|
settings.contentScriptsDir,
|
|
pathName
|
|
)
|
|
)
|
|
)
|
|
})
|
|
}
|
|
|
|
return entry;
|
|
})
|
|
|
|
if (process.env.SITE === 'derpibooru') {
|
|
manifest.replaceHostTo([
|
|
'derpibooru.org',
|
|
'trixiebooru.org'
|
|
]);
|
|
manifest.replaceBooruNameWith('Derpibooru');
|
|
manifest.setGeckoIdentifier('derpibooru-tagging-assistant@thecore.city');
|
|
}
|
|
|
|
manifest.passVersionFromPackage(path.resolve(settings.rootDir, 'package.json'));
|
|
manifest.saveTo(path.resolve(settings.exportDir, 'manifest.json'));
|
|
|
|
extractInlineScriptsFromIndex(path.resolve(settings.exportDir, 'index.html'));
|
|
}
|
|
|
|
/**
|
|
* @typedef {Object} PackExtensionSettings
|
|
* @property {string} rootDir Root directory of the repository. Required for properly fetching source files.
|
|
* @property {string} exportDir Directory of the built extension.
|
|
* @property {string} contentScriptsDir Directory specifically for content scripts entries.
|
|
*/
|