Files
lnreader-plugins/scripts/json_plugins.ts
T
nyagami 20efcf404c refactor: Classes for Plugins (#631)
* set target to ES5

* refactor types

* use .gitkeep

* use dot to make dist/js dirs on top

* add hako

* add Hako

* add madara

* fix: url path js -> .js

* fix: branch

* freestyle for using UA, cookie

* add parseNovels for Hako

* update readme

* fix: conflict types

* add Kolnovel, remove node-fetch

* add bestlightnovel

* add plugins

* WQMangaStreamScraper
* PandaMTL
* NobleMTL
* LightNovelBrasil
* WPMangaStream

* add filters for popularNovels

* fix undefined json

* Linovelib (#26)

* linovelib CN

* icon for linovelib

* fix undefined chapter

* add check

* fix: add artist

* TuNovelaLigera ES + Madara Fix (#28)

* app repo test

* POST is now working

* update madara template + run generator

* template fix didnt get pushed commited idk why

* template update POST

* generated

* fix: useNewChapterEndpoint update (#29)

* useNewChapterEndpoint update

* Update Selectors

---------

Co-authored-by: K1ngfish3r <trulyihu@gmail.com>
2023-11-04 15:45:49 +05:30

107 lines
3.2 KiB
TypeScript

require("module-alias/register");
import * as fs from "fs";
import { languages } from "@libs/languages";
import * as path from "path";
import { Plugin, isPlugin } from "@typings/plugin";
import config from "./../config.json";
const root = path.dirname(__dirname);
const outRoot = path.join(root, "..");
const username = config.githubUsername;
const repo = config.githubRepository;
const branch = config.githubBranch;
if (!username || !repo || !branch) {
console.error("config.json not provided!");
process.exit(1);
}
if (!fs.existsSync(path.join(outRoot, ".dist", username))) {
fs.mkdirSync(path.join(outRoot, ".dist", username));
}
const githubIconsLink = `https://raw.githubusercontent.com/${username}/${repo}/${branch}/icons`;
const githubPluginsLink = `https://raw.githubusercontent.com/${username}/${repo}/${branch}/.js/plugins`;
const json: {
[key: string]: {
id: string;
name: string;
site: string;
lang: string;
version: string;
url: string;
iconUrl: string;
}[];
} = {};
const jsonPath = path.join(outRoot, ".dist", username, "plugins.json");
const jsonMinPath = path.join(outRoot, ".dist", username, "plugins.min.json");
const pluginSet = new Set();
for (let language in languages) {
// language with English name
const languageNative = languages[language as keyof typeof languages];
const langPath = path.join(root, "plugins", language.toLowerCase());
if (!fs.existsSync(langPath)) continue;
const plugins = fs.readdirSync(langPath);
json[languageNative] = [];
plugins.forEach((plugin) => {
if (plugin.startsWith(".")) return;
const instance:
| Plugin.PluginBase
| unknown = require(`../plugins/${language.toLowerCase()}/${
plugin.split(".")[0]
}`).default;
if (!isPlugin(instance)) {
console.log(plugin);
return;
}
const { id, name, site, version, icon } = instance;
const info = {
id,
name,
site,
lang: languageNative,
version,
url: `${githubPluginsLink}/${language.toLowerCase()}/${plugin}`,
iconUrl: `${githubIconsLink}/${icon}`,
} as const;
if (pluginSet.has(id)) {
console.log("There's already a plugin with id:", id);
throw new Error("2 or more plugins have the same id");
} else {
pluginSet.add(id);
}
json[languageNative].push(info);
console.log(name, "✅");
});
}
for (let lang in json) json[lang].sort((a, b) => a.id.localeCompare(b.id));
fs.writeFileSync(jsonMinPath, JSON.stringify(json));
fs.writeFileSync(jsonPath, JSON.stringify(json, null, "\t"));
// check for broken plugins
for (let language in languages) {
const tsFiles = fs.readdirSync(
path.join(root, "..", "plugins", language.toLocaleLowerCase())
);
tsFiles
.filter((f) => f.endsWith(".broken.ts"))
.forEach((fn) => {
console.error(
language.toLocaleLowerCase() +
"/" +
fn.replace(".broken.ts", "") +
" ❌"
);
});
}
console.log(jsonPath);
console.log("Done ✅");