UNPKG

@technik-sde/prosemirror-recreate-transform

Version:

Create a set of steps transforming one prosemirror json document to another

28 lines (23 loc) 863 B
import { Transform, ReplaceStep, Step } from "prosemirror-transform"; import { getReplaceStep } from "./getReplaceStep"; // join adjacent ReplaceSteps export function simplifyTransform(tr: Transform) { if (!tr.steps.length) { return undefined; } const newTr = new Transform(tr.docs[0]); const oldSteps = tr.steps.slice(); while (oldSteps.length) { let step = oldSteps.shift(); while (oldSteps.length && step.merge(oldSteps[0])) { const addedStep = oldSteps.shift(); if (step instanceof ReplaceStep && addedStep instanceof ReplaceStep) { step = getReplaceStep(newTr.doc, addedStep.apply(step.apply(newTr.doc).doc).doc) as Step<any>; } else { step = step.merge(addedStep); } } newTr.step(step); } return newTr; }