@baukit/data-contracts-dexie
4.x 执行 @baukit/data-contracts 网络
需要关键/值数据、ID排序记录、便携式图案的应用程序
元数据,以及复合写交易.
import { openDexieStore } from '@baukit/data-contracts-dexie';
interface CachedRecord {
readonly id: string;
readonly value: string;
}
const storage = await openDexieStore<CachedRecord>('product-cache');
await storage.withTransaction(async (transaction) => {
await transaction.records.put({ id: 'record-1', value: 'local' });
await transaction.keyValues.set('outbox:mutation-1', {
entityId: 'record-1',
operation: 'put',
});
});
await storage.close();
该软件包拥有三个通用索引DB对象商店. 它没有定义 产品表、实体关系、软删除行为、修订、同步 协议,或数据库命名政策.
认证产品应使用
@baukit/data-contracts 打电话前 openDexieStore。假缩写DB和
Chromium/WebKit套房管理共享的离线E-F-E身份过渡案例
除了交易合同之外.
交易模式
嵌入式交易明确加入环境交易 通过调用交易范围上下文开始 :
await storage.withTransaction((transaction) =>
transaction.withTransaction((sameTransaction) => sameTransaction.records.put(record)),
);
从这种范围化的语境组成交易存储库。 一个呼叫
根号 storage 对象是一个独立交易,并在后面序列化
已经启动的交易。 交易背景不得保留
在他们的回话结束之后.
准备网络、本地、加密、文件系统或其他外部承诺结果 在打开书面交易之前。 德克西追踪自己的承诺区,但 不相干的承诺层可以让浏览器的索引 DB 请求排出队列和 自动承诺提前。 将回调限制在完整的本地写作集.
别给Dexie带毛毯 PrematureCommitError。这个错误可能意味着
浏览器只承诺了预定写作的早期子集. 把它当作
没有证据的成功可以静静地分割一个复合操作. 接受情况
测试必须观察每一个预定的书写、匹配的发件箱条目和完整
任何一步都失败时倒车.
配额失败表面为 StorageError 有代码
storage_quota_exceeded之后 close() 解析后, 代码操作失败
storage_closed。 。 。 .
核查
pnpm test 用途 fake-indexeddb 并保持快速。 浏览器套件是
将铬和WebKit门分开。 将浏览器安装到本地仓库
缓存并从寄存器根运行 :
PLAYWRIGHT_BROWSERS_PATH="$PWD/typescript/.playwright-browsers" \
corepack pnpm --dir typescript --filter @baukit/data-contracts-dexie \
exec playwright install --with-deps chromium webkit
PLAYWRIGHT_BROWSERS_PATH="$PWD/typescript/.playwright-browsers" \
corepack pnpm --dir typescript --filter @baukit/data-contracts-dexie \
run test:browser
运行 corepack pnpm --dir typescript run check 正常工作空间大门.
本地软件包 check 脚本还包括浏览器套件, 因此
期望安装两个浏览器二进制 。 CI 应该添加相同的
仓库本地浏览器安装和 test:browser 命令作为单独的
步骤; 工作空间的普通 test 任务故意保持快速.