@ bytecask/ 核心
浏览器- 本地, 内容地址为 blob 存储 .
将二进制数据存储在索引DB、OPFS或一个输入的API后面的内存中 BLAKE3处理、分解、生命周期核算和回收工具.
pnpm add @bytecask/core
这是什么
@bytecask/core 是框架中立的 Bytecask 存储引擎。 它接受
Blob, (中文(简体) ), Uint8Array,或流出字节并返回小写 BLAKE3 内容
散货 相同内容存储一次, 而生命周期元数据决定
对象是否为活、可收藏或缺失.
| 它规定 | 它故意离开 给主机 |
|---|---|
| 内容处理二进制存储 | 记录和关系数据 |
| 索引DB、OPFS和内存适配器 | 用户授权和同步 |
| 重复、参考、GC、对账 | 签名和出版商身份 |
| 配额和诚信差错 | 不可替代数据的唯一副本 |
可移植 blobs/<hash> 包装 | 产品专用附件工作流程 |
要点
- BLAKE3 内容身份 : 稳定的散列支持分解和可移植 名单.
- 索引DB-第一个持久性: 无宽跨浏览器存储 数据库依赖性.
- 可选 OPFS 流线: 工人支持的大文件 I/O 只有在 选中 .
- 明确的生命周期模型: 使用重新计数或对帐 主机列表 .
- 失败意识写道: 部分对象在配额、元数据、, 完整性,或流出故障.
- 无害环境管理和类型脚本: 输入没有顶级浏览器- 全球的公开导出 进入,所以在SSY期间导入是安全的.
安装
安装索引数据库、内存和自动后端选择的核心软件包:
pnpm add @bytecask/core
仅在使用 OPFS 时添加工人包 :
pnpm add @bytecask/core @bytecask/worker
快速启动
import { createBlobStore } from '@bytecask/core'
const store = await createBlobStore({ backend: 'idb' })
const hash = await store.put(new Blob(['hello, Bytecask']))
console.log(hash) // lowercase BLAKE3 hex
const blob = await store.getBlob(hash)
const bytes = await store.get(hash)
await store.close()
自动选择尝试索引DB, 然后是 OPFS, 然后是内存并曝光
结果是 store.backend。强制为必须保存的档案提供一个持久的后端
永不降为会话记忆.
存储后端
| 后端 | 选择 | 持久性 | 最适合 |
|---|---|---|---|
| 索引数据库 | 默认持久等级 | 浏览器管理, 可驱逐 | 一般文件和附件 |
| 财务处 | 明确或自动倒置 | 浏览器管理, 可驱逐 | 流和大型二进制对象 |
| 内存 | 明确或最后退缩 | 仅会话 | 测试、预览和瞬间数据 |
const store = await createBlobStore({
backend: 'idb',
idb: { databaseName: 'archive-blobs' },
metadata: { databaseName: 'archive-metadata' },
verifyOnRead: true,
})
const persistenceGranted = await store.requestPersistence()
const report = await store.reconcile(liveAttachmentHashes)
无法使用时强制后端拒绝 。 它永远不会悄悄改变 要求的耐久性模型.
生命周期模型
每个商店选择一个权限 :
- 存储管理 :
put()创建引用; 平衡所有权与ref()财务报告和审定财务报表unref(),然后与gc()。 。 。 . - 主机管理 : 以犬目为纲目而行之
reconcile(liveHashes)用于修复元数据并识别缺失或 未引用字节 .
不为同一档案维护独立的再计算系统 .
主要 API
| 导出 | 目的 |
|---|---|
createBlobStore(options) | 选择或强迫存储后端 |
put, (中文(简体) ), get, (中文(简体) ), getBlob, (中文(简体) ), has, (中文(简体) ), delete | 通过散列存储和取回字节 |
ref, (中文(简体) ), unref, (中文(简体) ), gc | 库存管理的生命周期核算 |
reconcile(liveHashes) | 从主机授权列表进行修复状态 |
subscribe(listener) | 观察本地字节存储突变结果 |
estimate, (中文(简体) ), requestPersistence | 浏览器存储和持续 |
packBlobs, (中文(简体) ), unpackBlobs | 移动便携式 blobs/<hash> 条目 |
BytecaskError, (中文(简体) ), QuotaError, (中文(简体) ), IntegrityError | 处理打入的存储失败 |
const unsubscribe = store.subscribe((event) => {
if (event.type === 'put') {
console.log(event.hash, event.refcount)
}
})
变换饲料是存储级和本地到 BlobStore 举个例子 它发出
Bytecask 字节/ 生命周期结果, 而不是主机记录的语义或跨 Tab 同步
留言.
浏览器支持
- IndexedDB行为在Chrimium,Firefox,和Playwright WebKit中测试.
- OPFS的工人行为在Chrimium和Firefox测试.
- 内存存储在浏览器和JavaScript测试环境中工作.
- 该套件仅以无害环境管理为对象并针对现代浏览器.
Playwright WebKit是一个引擎代理,而不是苹果公司的Safari二进制. 将浏览器存储视为可重建的本地副本, 因为持续请求 减少驱逐风险,但不能消除.
相关软件包
| 软件包 | 目的 |
|---|---|
@bytecask/worker | OPFS任选工作者和流动I/ 欧 |
@bytecask/react | 可选反应提供者和钩 |
文档
警卫
Bytecask验证内容身份,而非出版商身份. 验证签名 在水分不可信字节之前的容器或硬体。 报告脆弱性 通过项目 安全政策, (中文(简体) ), 这不是一个公开的问题.
许可证
AGPL-3.0 -仅限. 见 自由主义。 。 。 .