Some checks failed
build / lint (22) (push) Failing after 17s
build / test (22) (push) Failing after 8s
build / lint (23) (push) Failing after 2s
build / build (22) (push) Has been skipped
build / build (23) (push) Has been skipped
build / test (23) (push) Failing after 4s
docsearch / docsearch (push) Failing after 1s
51 lines
2.1 KiB
Markdown
51 lines
2.1 KiB
Markdown
# @hocuspocus/extension-database
|
|
[](https://www.npmjs.com/package/@hocuspocus/extension-database)
|
|
[](https://npmcharts.com/compare/tiptap?minimal=true)
|
|
[](https://www.npmjs.com/package/@hocuspocus/extension-database)
|
|
[](https://github.com/sponsors/ueberdosis)
|
|
|
|
A generic persistence base class for [Hocuspocus](https://github.com/ueberdosis/hocuspocus). Provide your own `fetch` and `store` functions to plug any database into the collaboration backend — Postgres, MySQL, MongoDB, a REST API, etc.
|
|
|
|
## Installation
|
|
|
|
```bash
|
|
npm install @hocuspocus/extension-database
|
|
```
|
|
|
|
## Usage
|
|
|
|
Plug in any storage backend by implementing two async functions:
|
|
|
|
```js
|
|
import { Server } from "@hocuspocus/server"
|
|
import { Database } from "@hocuspocus/extension-database"
|
|
|
|
const server = new Server({
|
|
extensions: [
|
|
new Database({
|
|
fetch: async ({ documentName }) => {
|
|
// return a Uint8Array of the stored Y.js update, or null for new documents
|
|
return await yourDb.findDocument(documentName)
|
|
},
|
|
store: async ({ documentName, state }) => {
|
|
// persist the binary Y.js state wherever you like
|
|
await yourDb.upsertDocument(documentName, state)
|
|
},
|
|
}),
|
|
],
|
|
})
|
|
|
|
server.listen()
|
|
```
|
|
|
|
`state` is a `Buffer` containing the encoded Y.js update. Store it as-is and return it unchanged from `fetch`.
|
|
|
|
For dedicated storage drivers, see [`@hocuspocus/extension-sqlite`](../extension-sqlite) or [`@hocuspocus/extension-s3`](../extension-s3), both of which extend this base class.
|
|
|
|
## Documentation
|
|
|
|
Persistence patterns and performance tips: [tiptap.dev/docs/hocuspocus/guides/persistence](https://tiptap.dev/docs/hocuspocus/guides/persistence).
|
|
|
|
## License
|
|
|
|
MIT — see [LICENSE.md](https://github.com/ueberdosis/hocuspocus/blob/main/LICENSE.md). |