@curvenote/schema
Version:
Schema and markdown parser for @curvenote/editor
42 lines • 1.42 kB
JavaScript
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