plugin-sdk 工具库
@kabegame/plugin-sdk 是一个打包进插件产物的 npm 工具库,提供 URL 解析、正则、md5、类型声明等纯工具。
SDK 主要服务 V8 后端(用 TypeScript 写在 src/,打包成单个 dist/main.js)。WebView 后端有真实浏览器环境,通常直接用原生 API,用到的 SDK 较少。
安装与使用
仓库内的插件已把 @kabegame/plugin-sdk 作为 workspace 依赖。在插件源码里直接 import,打包器会把用到的部分内联进产物:
import { type kbCrawlFn, resolveUrl, sleep } from "@kabegame/plugin-sdk";
export const crawl = (async (common, custom) => { await Kabegame.to("https://example.test/posts"); await sleep(1000); await Kabegame.downloadImage(await resolveUrl("/image.jpg"));}) satisfies kbCrawlFn;URL
resolveUrl
两个重载:
resolveUrl(relative: string, base: string): string // 同步,相对显式 base 解析resolveUrl(relative: string): Promise<string> // 异步,相对 Kabegame.currentUrl() 解析- 给了
base→ 同步返回new URL(relative, base).toString()。 - 不给
base→ 异步,相对当前页面 URL解析(内部读Kabegame.currentUrl());当前 URL 不可用时原样返回relative。
const a = resolveUrl("/images/o.jpg", "https://example.test/post/1"); // 同步const b = await resolveUrl(href); // 相对当前页时间与延时(misc)
unixTimeMs(): number // = Date.now()randF64(min = 0, max = 1): number // [min, max) 随机浮点sleep(ms: number): Promise<void> // 至少等待 ms(用 Web timer,无需 Node API)await sleep(randF64(500, 1500)); // 随机退避正则(regex)
不抛异常的正则工具,适合处理来自插件配置的模式串(非法模式返回安全默认值而非报错):
reIsMatch(pattern: string | RegExp, text: string): booleanreReplaceAll(pattern: string | RegExp, replacement: string, text: string): stringreFindAll(pattern: string | RegExp, text: string): KbRegexMatch[]reFindAll 返回的每个 KbRegexMatch:
interface KbRegexMatch { match: string; // 完整匹配文本 captures: string[]; // 位置捕获组(缺失归一化为空串) groups: Record<string, string>; // 命名捕获组 index: number; // 匹配在文本中的 0 基下标}哈希(md5)
md5(value: string): string // 十六进制 md5,用于构造去重 key、签名参数等TypeScript 类型
SDK 还导出用于给 crawl 加类型的辅助(纯类型,无运行时开销):
| 类型 | 说明 |
|---|---|
kbCrawlFn<CustomCfg> | crawl 入口的签名:(common: KbCommonCfg, custom: CustomCfg) => void | Promise<void>。 |
KbCommonCfg | common 的形状:{ base_url: string | null }。 |
kbCustomCfg<Fields> | 由字段列表构建 custom 的类型。 |
kbCfgField<K, T> | 描述一个 custom 字段(键 + 值类型)。 |
kbCfgInt / kbCfgStr / kbCfgBool / kbCfgDate / kbCfgList<T> / kbCfgOption<T> / kbCfgCheckbox | 各 kbConfig 变量类型对应的值类型。 |
JsonValue / JsonObject / JsonPrimitive | 可跨宿主边界的 JSON 值。 |
给 custom 加类型:
import type { kbCfgField, kbCfgInt, kbCfgStr, kbCustomCfg, KbCommonCfg } from "@kabegame/plugin-sdk";
type Cfg = kbCustomCfg<[ kbCfgField<"startPage", kbCfgInt>, kbCfgField<"tag", kbCfgStr>,]>;
export async function crawl(common: KbCommonCfg, custom: Cfg) { const startPage = custom.startPage ?? 1; // 默认每个字段还接受 null const tag = custom.tag ?? "";}延伸阅读
- V8 脚本 —— 在哪里用这些工具,以及
Kabegame.*宿主能力。 - Kabegame API 字典 —— 宿主全局的完整签名。
- 插件清单字段 ——
kbConfig变量类型与 SDK 类型的对应。