@ bendyline/ docblocks (英语)
DocBlocks的核心类型和抽象——跨越一个过程或存储边界(文件系统提供者,工作空间管理,以及Electron主机合同)的一切事物的单一真理来源.
安装
npm install @bendyline/docblocks
出口
该软件包暴露出有重点的子路径模块. 文件系统、文档、工作空间, 和主机 API 也从包根再导出; 边界特异性 电线协议在自己的入口处保持隔离.
文件系统( E)@bendyline/docblocks/filesystem(中文(简体) )
正确性第一,字节授权文件系统抽象—— 用于用户文档存储的单个连接. UI 代码从不触碰 indexedDB, (中文(简体) ), node:fs,或 electron 直接;它通过一个提供者.
FileSystemProviderV2——划出有口碑的路径,打出错误,有明显的突变模式,不透明版本,能力,快照,手表,和处置WorkspacePath编号 :parseWorkspacePath()——可移植逻辑路径表示(''是工作空间根)FsError——能活过IPC/结构克隆边界的稳定出错代码IndexedDBFileSystemProvider– 浏览器- 本地持久存储( site, VS Code webview refack)NativeFileSystemProvider– 浏览器中通过文件系统访问 API 的真实文件夹ElectronFileSystemProvider——连接主机API上的桌面主进程MemoryFileSystemProvider– 权威内膜v2存储,用于瞬态松散文件和 DBK 工作空间IndexedDBContentContainer编号 :FileSystemContentContainer– 媒体与文档同时使用的内容-容器层createFileMediaProvider——媒体供应商接通文件系统供应商
import { IndexedDBFileSystemProvider, parseWorkspacePath } from '@bendyline/docblocks/filesystem';
const fs = new IndexedDBFileSystemProvider('my-workspace', 'My workspace');
const path = parseWorkspacePath('/doc.md');
await fs.v2.writeFile(path, new TextEncoder().encode('# Hello'), {
mode: 'create',
createParents: true,
});
const content = await fs.v2.readFile(path);
FileSystemProvider 在 v2 迁移期间, 文本兼容性仍为被贬值的外观。 新的代码应该发现 provider.v2 与 getFileSystemProviderV2() 并仅使用 v1 作为明确的相容倒置。 每个新的后端都必须通过共享的 v2 兼容套件.
提供者家庭也有隔离的入口, 所以是一个浏览器或桌面 表面只能装入它选择的后端 :
@bendyline/docblocks/filesystem/indexeddb@bendyline/docblocks/filesystem/memory@bendyline/docblocks/filesystem/native@bendyline/docblocks/filesystem/electron
在多地壳中使用这些亚道的活性进口。 这个
兼容性 filesystem 枪管仍然可以再出口每个供应商 但急切地
从那个管子上建起 将互相排斥的后端放入一个启动器
捆绑.
突变行为明显: writeFile 接受一个 create, (中文(简体) ), replace,或
upsert 模式和默认值 upsert 省略时; remove 区分空目录去除和
递归性除去树;以及 move 永远不能覆盖它的目的地。 失踪
条目以 null 只有通过 stat 财务报告和审定财务报表 readFile允许,
错误类型、冲突、配额和 I/O 失败仍然被输入 FsError编号.
能力宣言是保守的承诺,而不是营销标签:
| 提供者 | 写入 | 移动 | 抓图 | 有条件写入 | 看着 | 重复性 |
|---|---|---|---|---|---|---|
| 内存 | 进程 | 进程 | 进程 | 进程 | 对 | 不稳定 |
| 索引数据库 | 横线 | 横线 | 横线 | 存储-原子 | 没有 | 最佳成绩 |
| 本地文件系统访问 | 无 | 无 | 无 | 进程 | 没有 | 最佳成绩 |
| 电子工作空间 | 进程 | 进程 | 进程 | 进程 | 对 | 最佳成绩 |
版本是不透明的平等象征物,其发行商可以使用。 A 类
消费者决不能分析它们或比较不同供应商的征兆.
当一个表报 overflow,放弃增量假设并重新装入或
拍下相关状态.
索引 DB 工作空间迁移遗产 fs:* 文本/二进制命名空间
交易,然后使用 v2 记录作为其唯一的权限。 不同的遗产
或发布前 v2 数据作为明确的回收对象予以保留
被猜想离开。 如果过时的标签重现了遗留的密钥, 则以
a. 在要求的作业复试之前进行分行的前缀探测器隔离;
普通操作不会扫描或去除整个工作空间.
文 件 (续)@bendyline/docblocks/document(中文(简体) )
框架中性文件交易/会话原始:序列化的最新写作,单调修改,明确转换/再目标/删除/关闭,冲突状态,以及崩溃恢复等期刊.
工作空间( E)@bendyline/docblocks/workspace(中文(简体) )
工作空间注册——DocBlocks如何跟踪一个用户打开的文档收藏.
WorkspaceDescriptor工作空间记录类型listWorkspaces编号 :getWorkspace编号 :saveWorkspace编号 :removeWorkspace- 登记册CRUDtouchWorkspace——更新最后打开的时间戳ensureDefaultWorkspace—— 如果不存在, 则创建默认的工作空间
import { listWorkspaces, ensureDefaultWorkspace } from '@bendyline/docblocks/workspace';
const workspaces = await listWorkspaces();
东道主( E)@bendyline/docblocks/host(中文(简体) )
Electron桌面外壳暴露于其渲染器的犬类合同(fsV2遗产 fs, (中文(简体) ), workspaces, (中文(简体) ), shell, (中文(简体) ), ffmpeg, (中文(简体) ), updater, (中文(简体) ), menu,打开文件请求).
DocBlocksHostAPI合同类型(由desktop/main/ipc-*.ts,由desktop/preload/preload.ts(中文(简体) )isElectronHost()——特征- 检测桌面外壳getDocBlocksHost()——获得主机API(向电外推出)maybeGetDocBlocksHost()——获得主机API或null,用于在浏览器中优雅地降解代码
import { isElectronHost, maybeGetDocBlocksHost } from '@bendyline/docblocks/host';
const host = maybeGetDocBlocksHost();
if (host) {
await host.shell.revealInFolder(workspaceId, path);
}
VS 代码协议 (@bendyline/docblocks/vscode(中文(简体) )
条子双向 postMessage vS码扩展合同
主机和编辑器网页视图。 双方都拥有同样的受歧视的结合
必须解析来源 unknown 数值为 parseWebviewToExtensionMessage()
或者说 parseExtensionToWebviewMessage() 在发送前.
公约
任何跨越 IPC,后Message,HTTP,或MCP边界的都属于这个包中——表面包决不能定义自己所复制的线型.
线型文档形状; 它们不授予权限 。 特权宿主必须
将运行时间值分析为 unknown,应用 HOST_WIRE_LIMITS,使用时
parseExternalHttpUrl ,并接受工作空间ID或
所有者范围不透明的赠款,而不是由渲染器提供的绝对路径.
许可证
麻省理工学院