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
2.1 KiB
2.1 KiB
@hocuspocus/extension-database
A generic persistence base class for Hocuspocus. Provide your own fetch and store functions to plug any database into the collaboration backend — Postgres, MySQL, MongoDB, a REST API, etc.
Installation
npm install @hocuspocus/extension-database
Usage
Plug in any storage backend by implementing two async functions:
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 or @hocuspocus/extension-s3, both of which extend this base class.
Documentation
Persistence patterns and performance tips: tiptap.dev/docs/hocuspocus/guides/persistence.
License
MIT — see LICENSE.md.