UNPKG

@curvenote/schema

Version:

Schema and markdown parser for @curvenote/editor

42 lines 1.42 kB
import { Step as PMStep } from 'prosemirror-transform'; import { EditorState } from 'prosemirror-state'; import { collab, receiveTransaction } from 'prosemirror-collab'; import { fromHTML } from './parse/html'; import { getSchema } from './schemas'; export { EditorState }; function serverPlugins(version) { return [collab({ version })]; } export function docToEditorState(doc, version) { return EditorState.create({ doc, plugins: serverPlugins(version), }); } export function getEditorState(useSchema, content, version, document, DOMParser) { const schema = getSchema(useSchema); try { const data = JSON.parse(content); return EditorState.fromJSON({ schema, plugins: serverPlugins(version) }, { doc: data, selection: { type: 'text', anchor: 0, head: 0 } }); } catch (error) { const doc = fromHTML(content, useSchema, document, DOMParser); return docToEditorState(doc, version); } } export function applySteps(state, stepsData, client) { const steps = []; const clientIDs = []; stepsData.forEach((data) => { const stepPM = PMStep.fromJSON(state.schema, data); steps.push(stepPM); clientIDs.push(client); }); const tr = receiveTransaction(state, steps, clientIDs); const nextState = state.apply(tr); return { state: nextState, tr, }; } //# sourceMappingURL=server.js.map