@bcibibi/y-utils
v1.0.0
Published
Utilities for Yjs documents, part of the y-sync project
Downloads
117
Readme
@bcibibi/y-utils
Beta: this package is currently in beta and APIs/behavior may evolve.
Shared utilities for the y-sync suite.
Installation
npm install @bcibibi/y-utils yjsExports
- primary export:
@bcibibi/y-utils - secondary export:
@bcibibi/y-utils/override
YConverter
YConverter is exported by @bcibibi/y-utils and provides one main helper:
YConverter.toYjs(value, root?)
It converts plain JavaScript values into the corresponding Yjs types.
Conversion rules
string->Y.Text(setText)number->Y.Text(setNumber)boolean->Y.Text(setBoolean)Date->Y.Text(setDate)- Delta-like object (
{ ops: [...] }) ->Y.Text(applyDelta+__type = 'delta') Array->Y.Array- plain object ->
Y.Map - existing
Y.AbstractType-> returned as-is
If a root value is provided, the converter reuses and updates that existing Yjs type instead of always creating a new one.
Basic example
import { YConverter } from '@bcibibi/y-utils'
const yText = YConverter.toYjs('hello')
const yNumber = YConverter.toYjs(42)
const yObject = YConverter.toYjs({ title: 'Doc', published: true })Reuse an existing root
import * as Y from 'yjs'
import { YConverter } from '@bcibibi/y-utils'
const rootMap = new Y.Map<{ count: number }>()
const sameMap = YConverter.toYjs({ count: 1 }, rootMap)Yjs Overrides (@bcibibi/y-utils/override)
The override entrypoint patches Yjs prototypes at runtime.
Enable overrides with a side-effect import:
import '@bcibibi/y-utils/override'Y.Text additions
setText(value: string)/getText()setDate(value: Date)/getDate()setNumber(value: number)/getNumber()setBoolean(value: boolean)/getBoolean()
Typed values are stored in Y.Text using an internal __type attribute.
Y.Text.toJSON() behavior
- returns
stringby default - returns
Datewhen__type = 'date' - returns
numberwhen__type = 'number' - returns
booleanwhen__type = 'boolean' - returns HTML when
__type = 'html'andtoHtml()is available
Y.Map overrides
set(key, value)converts plain JS values to Yjs types throughYConverter.toYjs(...)getValue(key)returns plain JS values (toJSON()for nested Yjs types)setObject(value)applies a full object using Yjs conversion rules
Y.Array overrides
insert(index, values)andpush(values)auto-convert plain JS values to Yjs typesreplace(values)updates array content in place using conversion rulesgetValue(index)returns plain JS values (toJSON()for nested Yjs types)
Notes
- Overrides are global once imported.
- This package also augments Yjs TypeScript types (module augmentation).
