e602df44c8
* remove lang, descrription in plugin script * remove languages import * Update README.md * fix: missing lang * clean: remove description * feat(Add Sources) (#15) * add many sources * add showToast * feat(Add Source): (#16) * add source * remove descriptions * Early Novel & Fast Novel (#1) * some more plugin * plugin * try something new * yes * try yes * genres is plural * fastnovel full fix * testings * early check * earlynovel fixed * showToast check * earlynovel done * fastnovel fixe * again * showToasts again * fix for fastnovel * done * for pr * Update freenovelupdates.js * MTL Reader and MTL Novel (#2) * first * test * wops * mtlreaders * ok * for PR * Nitro Scans and Novel Hold (#3) * start feature * more feature * something * eslint * yes * maybe * wa * asdasd * amazing * change it up * for pr * WPmangastream and Novelfull (#4) (#17) * source generation * fix json parse error * update plguins * delete fetchApi, nobleMTL (.js) * delete showToast.js * Typescript Support (#18) * Initial TS Config * Initial TS Config * Fix most errors * Fix test webserver * Fix webserver isPlugin not working * Fix typos * Add check if plugins have all the fields * Move exports.protected to the bottom of the plugin * Change username, reponame and branchname * Fix no exports error * Fix type * Fix typo in tsc_fix * Remove const from exports to not re-define consts * Readd const becuause exports may not exist. * Fix plugins to work in-app * Fix NobleMTL * Remove fix_ts.ts * Change template.ts * delete cheerio_space * move api into ./testweb * remove js dir * remove js dir (again) * remove ./js (again) * init multisrc generator (test) * remove module.exports in libs * madara generator * update template * rename generator, TS for hako * fix icon url for madara * fix icon for madara (again) * update Readme, nodemon * export default for all libs * fix madara novelurl * update: pluginId, name, filename for madara * feat: check same id error * update: precommit, fix: require.default * Revert "update: precommit, fix: require.default" This reverts commit c642c5c72241f13eccfe417210c22272c4739ffa. * Port all plugins to ts (#19) - fix cheerio - remove export default - fix spelling * update template * add multisrc noveltl, update generator param, fix web search * fix undefined id for Snailulitka * add rulate multisrc, fix max length textarea * add readwn multisrc * delete: erolate and rulate are in multisrc * Change broken extension and show error on commit for those files (#20) * Change to .broken.ts and show error on commit for those files * remove novelStatus * fix: wrong id in github action * remove mangastream multisrc * update icon for readwn multisrc --------- Co-authored-by: K1ngfish3r <trulyihu@gmail.com> Co-authored-by: Marcin Majewski <skilletssgames@gmail.com>
77 lines
2.4 KiB
TypeScript
77 lines
2.4 KiB
TypeScript
import fs from "fs";
|
|
import { languages } from "@libs/languages";
|
|
import path from "path";
|
|
import { PluginList } from "@typings/types";
|
|
import { Plugin, isPlugin } from "@typings/plugin";
|
|
const root = path.dirname(require?.main?.filename || "");
|
|
|
|
export const all_plugins = (): PluginList => {
|
|
const res: PluginList = {};
|
|
for (let languageEnglish in languages) {
|
|
//language with English name
|
|
const languageNative =
|
|
languages[languageEnglish as keyof typeof languages];
|
|
const langPath = path.join(
|
|
root,
|
|
"plugins",
|
|
languageEnglish.toLowerCase()
|
|
);
|
|
if (!fs.existsSync(langPath)) continue;
|
|
const plugins = fs.readdirSync(langPath);
|
|
res[languageNative] = [];
|
|
plugins.forEach((plugin) => {
|
|
if (plugin.startsWith(".")) return;
|
|
const requirePath = `@plugins/${languageEnglish.toLowerCase()}/${
|
|
plugin.split(".")[0]
|
|
}`;
|
|
const instance = require(requirePath);
|
|
const { id, name, version } = instance;
|
|
const info: Plugin.Info = {
|
|
id,
|
|
name,
|
|
lang: languageNative,
|
|
version,
|
|
requirePath,
|
|
}; // lang: language with native name
|
|
res[info.lang].push(info);
|
|
});
|
|
}
|
|
return res;
|
|
};
|
|
|
|
const getPlugin = async (
|
|
requirePath: string
|
|
): Promise<Plugin.instance | null> => {
|
|
const plugin = await require(requirePath);
|
|
if (isPlugin(plugin)) return plugin;
|
|
return null;
|
|
};
|
|
|
|
export const popularNovels = async (
|
|
pluginRequirePath: string,
|
|
options: Plugin.Options
|
|
) => {
|
|
const plugin = await getPlugin(pluginRequirePath);
|
|
if (!plugin) return null;
|
|
const popularNovels = await plugin.popularNovels(1, options);
|
|
return popularNovels;
|
|
};
|
|
|
|
export const searchNovels = async (
|
|
pluginRequirePath: string,
|
|
searchTerm: string
|
|
) => (await getPlugin(pluginRequirePath))?.searchNovels(searchTerm);
|
|
|
|
export const parseNovelAndChapters = async (
|
|
pluginRequirePath: string,
|
|
novelUrl: string
|
|
) => (await getPlugin(pluginRequirePath))?.parseNovelAndChapters(novelUrl);
|
|
|
|
export const parseChapter = async (
|
|
pluginRequirePath: string,
|
|
chapterUrl: string
|
|
) => (await getPlugin(pluginRequirePath))?.parseChapter(chapterUrl);
|
|
|
|
export const fetchImage = async (pluginRequirePath: string, url: string) =>
|
|
(await getPlugin(pluginRequirePath))?.fetchImage(url);
|