UNPKG

koishi-plugin-mediawiki

Version:
60 lines (59 loc) 1.95 kB
import { MediaWikiApi } from 'wiki-saikou'; import { resolveBrackets } from './resolveBrackets'; const MOCK_HEADERS = [ { match: (url) => url.hostname.includes('huijiwiki.com'), headers: { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.67', }, }, ]; export function useApi(baseURL) { const api = new MediaWikiApi(baseURL); const matchedMockHeader = MOCK_HEADERS.find((item) => item.match(new URL(baseURL))); if (matchedMockHeader) { api.request.interceptors.request.use((ctx) => { ctx.headers = { ...ctx.headers, ...matchedMockHeader.headers }; return ctx; }); } return api; } export function getWikiTitleDBKey(raw) { const title = raw .replace(/[\s_]+/g, ' ') .trim() .replace(/\s+/g, '_'); return title[0].toUpperCase() + title.slice(1); } export function getWikiDisplayTitle(raw) { const title = raw.replace(/[\s_]+/g, ' ').trim(); return title[0].toUpperCase() + title.slice(1); } export function parseTitlesFromText(str) { str = resolveBrackets(str); const reg = /\[\[(.+?)\]\]/g; return Array.from(new Set(Array.from(str.matchAll(reg)) .map((i) => i[1].split('|')[0]) .map(getWikiTitleDBKey))).filter((i) => !!i); } export function getUrl(base, params = {}, script = 'index') { const query = Object.keys(params).length ? '?' + new URLSearchParams(params) : ''; return `${base.replace('/api.php', `/${script ? script.trim() : 'index'}.php`)}${query}`; } export function isValidApi(api) { let url; try { url = new URL(api); } catch (err) { return false; } const { protocol, pathname } = url; if (protocol.startsWith('http') && pathname.endsWith('/api.php')) { return true; } return false; }