Files
lnreader-plugins/test_web/api/plugins.ts
T
Marcin Majewski e1207c172a Add accordion and fix minor issues (#742)
* Add docs v0.0.1

* Add icon size warning

* Fix sourcenover caution

* Fix semver descriptions

* Filters fix

* Quickfix quickstart

* Add icon warning v2

* Fix typos

* Add NovelItem

* Update plugins host

* Update plugins host

* Remove unnecesarry .js and .dist

* Update plugins host

* Add host.ps1

* Fix readme.txt

* Fix READNE.txt, again

* Remove .js and .dist

* Add accordion

* Working pagination

* readme update with ost

* Add linux/windows hosting functions

* Add tswatch

* Fix fetch function

* Change plugin versions

* Fix chrome

* Fix workflows

* Fix search not showing results

* remove unnecesarry code

* Revert novelupdates changes

* Reverted NobleMTL instead of novelupdates, fixing that

* Revert nobleMTL to e346c7d0

* WTF NobleMTL?
2024-02-04 23:39:07 +07:00

87 lines
2.9 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";
import { Filters } from "@libs/filterInputs";
const root = path.dirname(require?.main?.filename || "");
export const fetchHeaders: Record<string, string> = {};
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[languageEnglish] = [];
plugins.forEach((plugin) => {
if (plugin.startsWith(".")) return;
const requirePath = `@plugins/${languageEnglish.toLowerCase()}/${
plugin.split(".")[0]
}`;
const instance = require(requirePath).default;
const { id, name, version, icon } = instance;
const info: Plugin.PluginItem = {
id,
name: name + (plugin.match(/(\[.+\])/)?.[1] || ''),
lang: languageNative,
version,
requirePath,
icon,
}; // lang: language with native name
res[languageEnglish].push(info);
});
}
return res;
};
const getPlugin = async (
requirePath: string
): Promise<Plugin.PluginBase | null> => {
console.log("loading plugin", requirePath);
const plugin = await require(requirePath).default;
// console.log(plugin);
if (isPlugin(plugin)) {
console.log("loaded plugin", plugin.name);
return plugin;
}
console.error("Not a plugin!");
return null;
};
export const getFilter = async (pluginRequirePath: string) =>
(await getPlugin(pluginRequirePath))?.filters;
export const popularNovels = async (
pluginRequirePath: string,
page: number,
options: Plugin.PopularNovelsOptions<Filters>
) => (await getPlugin(pluginRequirePath))?.popularNovels(page, options);
export const searchNovels = async (
pluginRequirePath: string,
page: number,
searchTerm: string
) => (await getPlugin(pluginRequirePath))?.searchNovels(searchTerm, page);
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);