@bigbluebutton/store

中文文档
2.0.0-alpha.36发布于 2026/09/17Apache-2.0TypeScriptCommonJS近 30 天下载 7156

Big BlueButton's fork of tldraw 2.0-alpha.19 - 一个小小的绘图应用(商店).

中文使用文档
文档目录34 节
  1. RecordStore
  2. put(records: R[]): void
  3. update(id: ID<R>, updater: (record: R) => R): void
  4. remove(ids: ID<R>[]): void
  5. get(id: ID<R>): R
  6. allRecords(): R[]
  7. clear(): void
  8. has(id: ID<R>): boolean
  9. serialize(filter?: (record: R) => boolean): RecordStoreSnap…
  10. deserialize(snapshot: RecordStoreSnapshot<R>): void
  11. listen(listener: ((entry: HistoryEntry) => void): () => void
  12. mergeRemoteChanges(fn: () => void): void
  13. createDerivationCache(name: string, derive: ((record: R) =>…
  14. RecordType
  15. create(properties: Pick<R, RequiredProperties> & Omit<Parti…
  16. clone(record: R): R
  17. createId(): ID<R>
  18. createCustomId(id: string): ID<R>
  19. isInstance
  20. isId
  21. withDefaultProperties
  22. RecordStoreQueries
  23. 帮助者
  24. executeQuery
  25. DerivationCache
  26. createRecordType
  27. assertIdType
  28. 类型
  29. ID
  30. BaseRecord
  31. AllRecords
  32. RecordsDiff
  33. CollectionDiff
  34. 许可证

@ bigblue 按钮/ tlstore

tlstore 是一个创建和管理数据的库.

在这个文库中,"记录"是存储在打入的ID下的对象.

tlstore 用于 笔画 以存储其数据.

它被设计为与 tlstate (@ bigbluebutton/tlstate) (英语).

使用量

首先为您的记录创建类型 .

interface Book extends BaseRecord<'book'> {
    title: string
    author: ID<Author>
    numPages: number
}

interface Author extends BaseRecord<'author'> {
    name: string
    isPseudonym: boolean
}

然后创建你的 RecordType 实例.

const Book = createRecordType<Book>('book')

const Author = createRecordType<Author>('author').withDefaultProperties(() => ({
    isPseudonym: false,
}))

然后创建你的 RecordStore 举个例子.

const store = new RecordStore<Book | Author>()

然后可以创建记录,添加到商店,更新,并去除.

const tolkeinId = Author.createCustomId('tolkein')

store.put([
    Author.create({
        id: jrrTolkeinId,
        name: 'J.R.R Tolkein',
    }),
])

store.update(tolkeinId, (author) => ({
    ...author,
    name: 'DJJ Tolkz',
    isPseudonym: true,
}))

store.remove(tolkeinId)

API 密码

RecordStore

这个 RecordStore 班级是图书馆的主要班级.

const store = new RecordStore()

put(records: R[]): void

将一些记录添加到商店. 如果它们已经存在,那就是一个错误.

const record = Author.create({
    name: 'J.R.R Tolkein',
    id: Author.createCustomId('tolkein'),
})

store.put([record])

update(id: ID<R>, updater: (record: R) => R): void

更新记录。 要同时更新多个记录,请使用 update 方法 TypedRecordStore 课.

const id = Author.createCustomId('tolkein')

store.update(id, (r) => ({ ...r, name: 'Jimmy Tolks' }))

remove(ids: ID<R>[]): void

从商店中取出一些记录 以他们的身份证.

const id = Author.createCustomId('tolkein')

store.remove([id])

get(id: ID<R>): R

以 ID 获取商店记录的值 .

const id = Author.createCustomId('tolkein')

const result = store.get(id)

allRecords(): R[]

获取商店中所有值的阵列 .

const results = store.allRecords()

clear(): void

从商店取出所有记录 .

store.clear()

has(id: ID<R>): boolean

获取记录店是否有记录存储在给定的ID下.

const id = Author.createCustomId('tolkein')

const result = store.has(id)

serialize(filter?: (record: R) => boolean): RecordStoreSnapshot<R>

对面 deserialize从唱片店创建 JSON 有效载荷.

const serialized = store.serialize()
const serialized = store.serialize((record) => record.name === 'J.R.R Tolkein')

deserialize(snapshot: RecordStoreSnapshot<R>): void

对面 serialize。用简单的 JSON 结构定义的记录替换商店的当前记录.

const serialized = { ... }

store.deserialize(serialized)

listen(listener: ((entry: HistoryEntry) => void): () => void

向商店添加新收听器 商店会在每次历史变化时调用函数. 返回一个删除收听器的函数.

store.listen((entry) => doSomethingWith(entry))

mergeRemoteChanges(fn: () => void): void

合并远程源的更改而不会触发听众 .

store.mergeRemoteChanges(() => {
    store.put(recordsFromRemoteSource)
})

createDerivationCache(name: string, derive: ((record: R) => R | undefined)): DerivationCache<R>

创建新的衍生缓存 .

const derivationCache = createDerivationCache('popular_authors', (record) => {
    return record.popularity > 62 ? record : undefined
})

RecordType

这个 RecordType 类用于定义记录的结构.

const recordType = new RecordType('author', () => ({ living: true }))

RecordType 实例通常与 createRecordType。 。 。 .

create(properties: Pick<R, RequiredProperties> & Omit<Partial<R>, RequiredProperties>): R

创建此类型的新记录 .

const record = recordType.create({ name: 'J.R.R Tolkein' })

clone(record: R): R

切除这种记录.

const record = recordType.create({ name: 'J.R.R Tolkein' })

const clone = recordType.clone(record)

createId(): ID<R>

创建用于此类型记录的ID .

const id = recordType.createId()

createCustomId(id: string): ID<R>

创建自定义 为了记录这种类型.

const id = recordType.createCustomId('tolkein')

isInstance

检查一个值是否是此记录类型的实例 .

const record = recordType.create({ name: 'J.R.R Tolkein' })

const result1 = recordType.isInstance(record) // true
const result2 = recordType.isInstance(someOtherRecord) // false

isId

检查该类型记录的值是否为 ID .

const id = recordType.createCustomId('tolkein')

const result1 = recordType.isId(id) // true
const result2 = recordType.isId(someOtherId) // false

withDefaultProperties

创建带有默认属性的新记录类型 .

const youngLivingAuthor = new RecordType('author', () => ({ age: 28, living: true }))

const oldDeadAuthor = recordType.withDefaultProperties({ age: 93, living: false })

RecordStoreQueries

开始

帮助者

executeQuery

开始

DerivationCache

这个 DerivationCache 类用于创建衍生记录的缓存.

const derivationCache = new DerivationCache('popular_authors', (record) => {
    return record.popularity > 62 ? record : undefined
})

createRecordType

一个帮助者用来创建新 RecordType 没有默认属性.

const recordType = createRecordType('author'))

assertIdType

一个帮助者用来断言一个值是特定类型记录的ID.

const id = recordType.createCustomId('tolkein')

assertIdType(id, recordType)

类型

ID

一个用来代表记录的ID的类型.

const id: ID<Author> = Author.createCustomId('tolkein')

BaseRecord

A 类 BaseRecord 是一个有身份和类型的记录。 这是所有记录的基础类型.

type AuthorRecord extends BaseRecord<"author"> {
  name: string
  age: number
  living: boolean
}

AllRecords

一个在唱片店中获取所有记录类型的助手.

type AllAuthorRecords = AllRecords<RecordStore<Author>>

RecordsDiff

描述更改为记录的diff .

CollectionDiff

描述对收藏的更改的 diff .

许可证

该寄存器中的源代码(以及我们的2.0+发行和发行)目前根据Apache-2.0获得许可. 这些许可证在即将发行的"2.0"中可能会被更改. 如果你打算在商业产品中使用拖网,请联系 你好@ bigbluebutton.com。 。 。 .

版本与发布记录

@bigbluebutton/store 共发布 13 个版本,首次发布于 2024/05/23;过去 12 个月发布了 5 个版本。

版本发布日期距今
2.0.0-alpha.36latest2026/09/171 个月前
2.0.0-alpha.352026/05/215 个月前
2.0.0-alpha.342026/05/165 个月前
2.0.0-alpha.332026/01/229 个月前
2.0.0-alpha.322026/01/159 个月前
2.0.0-alpha.312025/09/221.1 年前

关于 @bigbluebutton/store 的常见问题

@bigbluebutton/store 是什么?

Big BlueButton's fork of tldraw 2.0-alpha.19 - 一个小小的绘图应用(商店).

如何安装 @bigbluebutton/store?

在项目目录运行 npm install @bigbluebutton/store,或使用 pnpm add / yarn add / bun add。

@bigbluebutton/store 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@bigbluebutton/store 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@bigbluebutton/store 可以商用吗?

@bigbluebutton/store 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@bigbluebutton/store 的下载量有多少?

根据 npm 官方下载统计,@bigbluebutton/store 在 2026/10/08 – 2026/11/06 这 30 天内被下载 7,156 次,日均约 239 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@bigbluebutton/store 还在维护吗?

最新版本 2.0.0-alpha.36 发布于 2026/09/17(1 个月前);至今共发布 13 个版本,其中过去 12 个月发布了 5 个;首次发布于 2024/05/23。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。