@technik-sde/prosemirror-recreate-transform
Version:
Create a set of steps transforming one prosemirror json document to another
28 lines (23 loc) • 863 B
text/typescript
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;
}