import type { ReadableStream, WritableStream } from "node:stream/web"; /** * 显式定义 BodyInit 兼容类型,确保在没有 DOM 类型的环境下也能编译 * 涵盖了 string, Blob, ArrayBuffer, 以及 ReadableStream */ export type CompatibleBodyInit = | string | Blob | ArrayBuffer | Uint8Array | ReadableStream; export interface SpawnOptions { cwd?: string; env?: Record; /** * 参考 Unjs/Nitro 的设计: * 'pipe': 走 Web Stream,适合自动化处理 * 'inherit': 走物理 TTY,适合交互式 CLI (如你的 drizzle-kit 报错场景) */ stdio?: "pipe" | "inherit"; } export interface FileStat { size: number; mtime: Date; isDirectory: boolean; } export interface ProcHandle { pid?: number; exited: Promise; kill: (signal?: string) => void; // 符合 WinterCG 的流定义 stdout?: ReadableStream; stderr?: ReadableStream; stdin?: WritableStream; } export interface RuntimeContext { fs: { // --- 基础接口 exists: (path: string) => Promise; read: (path: string) => Promise; /** 使用我们定义的兼容类型 */ write: (path: string, data: CompatibleBodyInit) => Promise; /** * 流式写入:适合导出大型 SQL 备份或持续写入日志 * 遵循 Web 文件系统规范命名习惯 * 返回 WritableStream,用于流式写入 * 流式写入句柄 (对齐 Web WritableStream 概念) * 适合大文件写入或持续日志 */ openWritable: (path: string) => WritableStream; /** 创建目录:recursive 选项是实现“一键初始化数据库项目”的关键 */ mkdir: ( path: string, options?: { recursive?: boolean }, ) => Promise; /** 删除:支持递归删除整个数据库文件夹 */ remove: (path: string) => Promise; /** 软链接:这就是你实现 dbs/ 链接的核心能力 */ symlink: (target: string, path: string) => Promise; /** 读取目录下的文件列表 */ readdir: ( path: string, options?: { recursive?: boolean }, ) => Promise; // --- 建议增加的增强接口 --- /** 获取文件状态:用于判断配置文件是否被篡改或检查数据大小 */ stat: (path: string) => Promise; /** 监听文件:如果 .env 或 schema 变了,管理程序可以自动重载或提醒 */ watch?: ( path: string, callback: (event: "change" | "rename") => void, ) => () => void; }; proc: { //test spawn: (args: string[], options?: SpawnOptions) => ProcHandle; }; }