2024-10-12 20:49:42 +00:00
|
|
|
import * as esbuild from "https://deno.land/x/esbuild@v0.23.0/mod.js";
|
2024-05-01 07:56:04 +00:00
|
|
|
|
|
|
|
class userjs {
|
|
|
|
name: string;
|
|
|
|
namespace: string;
|
|
|
|
version: string;
|
|
|
|
description: string;
|
|
|
|
author: string[];
|
|
|
|
source: string;
|
|
|
|
run_at: string;
|
|
|
|
grant: string[];
|
|
|
|
match: string[];
|
|
|
|
constructor(
|
|
|
|
name: string,
|
|
|
|
namespace: string,
|
|
|
|
version: string,
|
|
|
|
description: string,
|
|
|
|
author: string[],
|
|
|
|
source: string,
|
|
|
|
run_at:
|
|
|
|
| "document-start"
|
|
|
|
| "document-body"
|
|
|
|
| "document-end"
|
|
|
|
| "document-idle"
|
|
|
|
| "context-menu" = "document-end",
|
|
|
|
grant: string[] = [],
|
|
|
|
match: string[],
|
|
|
|
) {
|
|
|
|
this.name = name;
|
|
|
|
this.namespace = namespace;
|
|
|
|
this.version = version;
|
|
|
|
this.description = description;
|
|
|
|
this.author = author;
|
|
|
|
this.source = source;
|
|
|
|
this.run_at = run_at;
|
|
|
|
this.grant = grant;
|
|
|
|
this.match = match;
|
|
|
|
}
|
|
|
|
toString(): string {
|
|
|
|
const b = ["// ==UserScript=="];
|
|
|
|
b.push(`// @name ${this.name}`);
|
|
|
|
b.push(`// @version ${this.version}`);
|
|
|
|
b.push(`// @source ${this.source}`);
|
|
|
|
b.push(`// @description ${this.description}`);
|
|
|
|
for (const author of this.author) {
|
|
|
|
b.push(`// @author ${author}`);
|
|
|
|
}
|
|
|
|
b.push(`// @run-at ${this.run_at}`);
|
|
|
|
if (this.grant.length == 0) {
|
|
|
|
b.push(`// @grant none`);
|
|
|
|
}else {
|
|
|
|
for (const grant of this.grant)
|
|
|
|
b.push(`// @grant ${grant}`);
|
|
|
|
}
|
|
|
|
for (const match of this.match) {
|
|
|
|
b.push(`// @match ${match}`);
|
|
|
|
}
|
|
|
|
b.push("// ==/UserScript==");
|
|
|
|
return b.join("\n");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
async function userscript_build(prefix: string, metadata: userjs) {
|
|
|
|
console.log(`Building ${prefix}`);
|
|
|
|
await esbuild.build({
|
|
|
|
outfile: `userscripts/${prefix}.user.js`,
|
|
|
|
bundle: true,
|
|
|
|
charset: "utf8",
|
|
|
|
banner: {
|
|
|
|
"js": metadata.toString(),
|
|
|
|
},
|
|
|
|
entryPoints: [`userscripts/${prefix}.ts`],
|
|
|
|
minify: true,
|
|
|
|
platform: "browser",
|
|
|
|
target: "es2022",
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
await userscript_build(
|
|
|
|
"girlgenius",
|
|
|
|
new userjs(
|
|
|
|
"Girlgenius https fix",
|
|
|
|
"https://sebastian-tobie.de/",
|
|
|
|
"0.2",
|
|
|
|
"converts http to https urls",
|
|
|
|
["Sebastian Tobie"],
|
|
|
|
"https://gitea.sebastian-tobie.de/sebastian/cookiedb/raw/branch/stable/userscripts/girlgenius.user.js",
|
|
|
|
"document-body",
|
|
|
|
[],
|
|
|
|
[],
|
|
|
|
),
|
|
|
|
);
|
|
|
|
await userscript_build(
|
|
|
|
"kobo_easy_archive",
|
|
|
|
new userjs(
|
|
|
|
"Kobo library easy archive",
|
|
|
|
"https://sebastian-tobie.de/",
|
|
|
|
"0.1",
|
|
|
|
"Helps with archiving kobo books",
|
|
|
|
["Sebastian Tobie"],
|
|
|
|
"https://gitea.sebastian-tobie.de/sebastian/cookiedb/raw/branch/stable/userscripts/kobo_easy_archive.user.js",
|
|
|
|
"document-idle",
|
|
|
|
[],
|
|
|
|
[
|
|
|
|
"https://www.kobo.com/de/de/library/books",
|
|
|
|
"https://www.kobo.com/de/de/library/books?*",
|
|
|
|
],
|
|
|
|
),
|
|
|
|
);
|
|
|
|
await userscript_build(
|
|
|
|
"thalia-filter",
|
|
|
|
new userjs(
|
|
|
|
"Thalia Filter",
|
|
|
|
"https://sebastian-tobie.de/",
|
|
|
|
"0.2",
|
|
|
|
"Filters out unwanted books",
|
|
|
|
["Sebastian Tobie"],
|
|
|
|
"https://gitea.sebastian-tobie.de/sebastian/cookiedb/raw/branch/stable/userscripts/girlgenius.user.js",
|
|
|
|
"document-end",
|
|
|
|
["GM_registerMenuCommand"],
|
|
|
|
[
|
|
|
|
"https://www.thalia.de/kategorie/*",
|
|
|
|
"https://www.thalia.de/kategorie/*/",
|
|
|
|
"https://www.thalia.de/kategorie/*?*",
|
|
|
|
"https://www.thalia.de/ebook/kategorien/*/neuheiten",
|
|
|
|
],
|
|
|
|
),
|
|
|
|
);
|
|
|
|
Deno.exit();
|