Also minify css.
The minifier didn't keep the newlines anyway. Also, now I'm working on the build, return empty source mappings for a warning in the console less.
This commit is contained in:
parent
1973f87414
commit
0372d676e1
@ -3,6 +3,10 @@
|
|||||||
4chan XT uses a different user script namespace, so to migrate you need to export settings from 4chan X, and import them
|
4chan XT uses a different user script namespace, so to migrate you need to export settings from 4chan X, and import them
|
||||||
in XT.
|
in XT.
|
||||||
|
|
||||||
|
### Unreleased
|
||||||
|
|
||||||
|
- Also minify css in the minified build.
|
||||||
|
|
||||||
### XT v2.1.4 (2023-09-02)
|
### XT v2.1.4 (2023-09-02)
|
||||||
|
|
||||||
- Fix DataBoard class, should solve [#7](https://github.com/TuxedoTako/4chan-xt/issues/7)
|
- Fix DataBoard class, should solve [#7](https://github.com/TuxedoTako/4chan-xt/issues/7)
|
||||||
|
|||||||
@ -21,7 +21,7 @@ export default function importBase64(opts) {
|
|||||||
if (!filter(id)) return;
|
if (!filter(id)) return;
|
||||||
|
|
||||||
const file = await readFile(id);
|
const file = await readFile(id);
|
||||||
return `export default '${file.toString('base64')}';`;
|
return { code: `export default '${file.toString('base64')}';`, map: { mappings: '' } };
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@ -1,20 +1,16 @@
|
|||||||
import { createFilter } from "@rollup/pluginutils";
|
import { createFilter } from "@rollup/pluginutils";
|
||||||
import { dirname } from "path";
|
|
||||||
import { fileURLToPath } from "url";
|
|
||||||
|
|
||||||
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
||||||
|
|
||||||
export default async function setupFileInliner(packageJson) {
|
export default async function setupFileInliner(packageJson) {
|
||||||
/** @param {string} string */
|
/** @param {string} string */
|
||||||
const escape = (string) => string.replace(/\\/g, '\\\\').replace(/`/g, '\\`').replace(/\$\{/g, '\\\${');
|
const escape = (string) => string.replace(/\\/g, '\\\\').replace(/`/g, '\\`').replace(/\$\{/g, '\\\${');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {{
|
* @param {Object} opts
|
||||||
* include: import("@rollup/pluginutils").FilterPattern,
|
* @param {import("@rollup/pluginutils").FilterPattern} opts.include
|
||||||
* exclude?: import("@rollup/pluginutils").FilterPattern,
|
* @param {import("@rollup/pluginutils").FilterPattern} [opts.exclude]
|
||||||
* transformer?: (input: string) => string
|
* @param {(input: string) => string} [opts.transformer] Optional function to transform the string.
|
||||||
* wrap?: boolean
|
* @param {boolean} [opts.wrap] Wether to look for <%= meta.stuff %> and replace it, and wrap in a string,
|
||||||
* }} opts
|
* defaults to true.
|
||||||
* @returns {import("rollup").Plugin}
|
* @returns {import("rollup").Plugin}
|
||||||
*/
|
*/
|
||||||
return function inlineFile(opts) {
|
return function inlineFile(opts) {
|
||||||
@ -38,13 +34,15 @@ export default async function setupFileInliner(packageJson) {
|
|||||||
if (opts.transformer) {
|
if (opts.transformer) {
|
||||||
code = opts.transformer(code);
|
code = opts.transformer(code);
|
||||||
}
|
}
|
||||||
if (!wrap) return code;
|
if (wrap) {
|
||||||
|
code = escape(code);
|
||||||
|
code = code.replace(/<%= meta\.(\w+) %>/g, (match, $1) => {
|
||||||
|
return escape(packageJson.meta[$1]);
|
||||||
|
});
|
||||||
|
code = `export default \`${code}\`;`;
|
||||||
|
}
|
||||||
|
|
||||||
code = escape(code);
|
return { code, map: { mappings: '' } };
|
||||||
code = code.replace(/<%= meta\.(\w+) %>/g, (match, $1) => {
|
|
||||||
return escape(packageJson.meta[$1]);
|
|
||||||
});
|
|
||||||
return `export default \`${code}\`;`;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@ -39,7 +39,27 @@ const minify = process.argv.includes('-min');
|
|||||||
plugins: [
|
plugins: [
|
||||||
typescript(),
|
typescript(),
|
||||||
inlineFile({
|
inlineFile({
|
||||||
include: ["**/*.html", "**/*.css"],
|
include: ["**/*.html"],
|
||||||
|
}),
|
||||||
|
inlineFile({
|
||||||
|
include: ["**/*.css"],
|
||||||
|
transformer(css) {
|
||||||
|
if (!minify) return css;
|
||||||
|
|
||||||
|
return css
|
||||||
|
// Remove whitespace after colon in css rules.
|
||||||
|
.replace(/^ {2,}([a-z\-]+:) +/gm, '$1')
|
||||||
|
// Remove newlines and trailing whitespace.
|
||||||
|
.replace(/\r?\n[ \t+]*/g, '')
|
||||||
|
// Remove last semicolon before the }.
|
||||||
|
.replace(/;\}/g, '}')
|
||||||
|
// Remove space between rule set and {.
|
||||||
|
.replace(/ \{/g, '{')
|
||||||
|
// Remove comments.
|
||||||
|
.replace(/\/\*[^\*]*\*\//g, '')
|
||||||
|
// Remove space before and after these characters in selectors.
|
||||||
|
.replace(/ ([>+~]) /g, '$1');
|
||||||
|
}
|
||||||
}),
|
}),
|
||||||
importBase64({ include: ["**/*.png", "**/*.gif", "**/*.wav", "**/*.woff", "**/*.woff2"] }),
|
importBase64({ include: ["**/*.png", "**/*.gif", "**/*.wav", "**/*.woff", "**/*.woff2"] }),
|
||||||
inlineFile({
|
inlineFile({
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
{
|
{
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"moduleResolution": "node16",
|
"moduleResolution": "node16",
|
||||||
|
"target": "ES2021",
|
||||||
"types": [
|
"types": [
|
||||||
"@violentmonkey/types",
|
"@violentmonkey/types",
|
||||||
"@types/chrome",
|
"@types/chrome",
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user