marshall-y-slate
Version:
Yjs bindings for Slate.
62 lines (52 loc) • 1.31 kB
text/typescript
import { createEditor, Node, Text } from 'slate';
import * as Y from 'yjs';
import {
SharedType,
SyncElement,
toSharedType,
toSlateDoc,
withYjs
} from '../src';
import { TestEditor, withTest } from './test-editor';
export function createText(text = ''): Text {
return {
text
};
}
export function createNode(
type = 'paragraph',
text = '',
data?: { [key: string]: any }
) {
return {
type,
children: [createText(text)],
...data
};
}
export function createValue(children?: Node[]): { children: Node[] } {
return {
children: children || [createNode()]
};
}
export function createDoc(children?: Node[]): Y.Doc {
const doc = new Y.Doc();
toSharedType(doc.getArray('content'), createValue(children).children);
return doc;
}
export function cloneDoc(doc: SharedType): Y.Doc {
const clone = new Y.Doc();
toSharedType(clone.getArray('content'), toSlateDoc(doc));
return clone;
}
export function wait(ms = 0): Promise<void> {
return new Promise<void>((resolve) => setTimeout(resolve, ms));
}
export function createTestEditor(value?: Node[]): TestEditor {
const doc = new Y.Doc();
const syncType = doc.getArray<SyncElement>('content');
if (value) {
toSharedType(syncType, value);
}
return withTest(withYjs(createEditor(), syncType));
}