/** * Capabilities Plugin for Rspack * * 解析 `virtual:capabilities` 虚拟模块——`@lark-apaas/client-capability` SDK * (经 client-toolkit 间接消费)把 `virtual:capabilities` 标 tsup external 保留 * 在 dist 里,下游构建工具必须自己提供解析,否则 rspack build / dev 直接 fail: * * Module not found: Can't resolve 'virtual:capabilities' in * node_modules/@lark-apaas/client-capability/dist/index.js * * 实现策略(参考同目录 static-assets-plugin 的虚拟模块模式): * - 扫 /server/capabilities/*.json + /shared/capabilities/*.json * 生成 capability map(都不存在时空 map,SDK 在 dev 预览 / 沙箱也能正常加载) * - 写虚拟模块文件到 node_modules/.cache/capabilities-virtual/index.js * - 通过 `compiler.hooks.normalModuleFactory + beforeResolve` 拦截 * `virtual:capabilities` import,把 resolveData.request 改写为虚拟模块文件路径 * * 跟 vite 版本的语义保持一致:DEFAULT_DIRS 顺序、capability 合并规则(后 id 覆盖前 id)、 * 没有 id 的 JSON 跳过 + warn、JSON 解析失败跳过 + warn。 */ import type { Compiler } from '@rspack/core'; export interface CapabilitiesPluginOptions { /** 覆盖扫描目录(相对项目根)。不传按 DEFAULT_DIRS 依次扫描。 */ dir?: string; /** 项目根目录,不传走 compiler.options.context || process.cwd() */ rootDir?: string; } export declare class CapabilitiesPlugin { private options; constructor(options?: CapabilitiesPluginOptions); private listDirs; private loadMap; apply(compiler: Compiler): void; } export default CapabilitiesPlugin;