@superdoc-dev/cli 0.2.0-next.7 → 0.2.0-next.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +754 -252
- package/package.json +8 -8
package/dist/index.js
CHANGED
|
@@ -548,6 +548,9 @@ var init_operation_definitions = __esm(() => {
|
|
|
548
548
|
"TARGET_MOVED",
|
|
549
549
|
"PLAN_CONFLICT_OVERLAP",
|
|
550
550
|
"INVALID_STEP_COMBINATION",
|
|
551
|
+
"REVISION_CHANGED_SINCE_COMPILE",
|
|
552
|
+
"INVALID_INSERTION_CONTEXT",
|
|
553
|
+
"DOCUMENT_IDENTITY_CONFLICT",
|
|
551
554
|
"CAPABILITY_UNAVAILABLE"
|
|
552
555
|
];
|
|
553
556
|
T_QUERY_MATCH = ["MATCH_NOT_FOUND", "AMBIGUOUS_MATCH", "INVALID_INPUT", "INTERNAL_ERROR"];
|
|
@@ -87504,9 +87507,9 @@ var init_remark_gfm_RDxetNVS_es = __esm(() => {
|
|
|
87504
87507
|
emptyOptions4 = {};
|
|
87505
87508
|
});
|
|
87506
87509
|
|
|
87507
|
-
// ../../packages/superdoc/dist/chunks/src-
|
|
87508
|
-
var
|
|
87509
|
-
__export(
|
|
87510
|
+
// ../../packages/superdoc/dist/chunks/src-0UjFcd91.es.js
|
|
87511
|
+
var exports_src_0UjFcd91_es = {};
|
|
87512
|
+
__export(exports_src_0UjFcd91_es, {
|
|
87510
87513
|
zt: () => defineMark,
|
|
87511
87514
|
z: () => cM,
|
|
87512
87515
|
yt: () => removeAwarenessStates,
|
|
@@ -95639,9 +95642,11 @@ function checkRevision(editor, expectedRevision) {
|
|
|
95639
95642
|
return;
|
|
95640
95643
|
const current = getRevision(editor);
|
|
95641
95644
|
if (expectedRevision !== current)
|
|
95642
|
-
throw new PlanError("REVISION_MISMATCH", `REVISION_MISMATCH — expected revision "${expectedRevision}" but document is at "${current}"
|
|
95645
|
+
throw new PlanError("REVISION_MISMATCH", `REVISION_MISMATCH — expected revision "${expectedRevision}" but document is at "${current}". Re-run query.match to obtain a fresh ref.`, undefined, {
|
|
95643
95646
|
expectedRevision,
|
|
95644
|
-
currentRevision: current
|
|
95647
|
+
currentRevision: current,
|
|
95648
|
+
refStability: "ephemeral",
|
|
95649
|
+
remediation: "Re-run query.match() to obtain a fresh ref valid for the current revision."
|
|
95645
95650
|
});
|
|
95646
95651
|
}
|
|
95647
95652
|
function resolveSegmentPosition(targetOffset, segmentStart, segmentLength, docFrom, docTo) {
|
|
@@ -95897,7 +95902,9 @@ function captureRunsInRange(editor, blockPos, from$12, to) {
|
|
|
95897
95902
|
return;
|
|
95898
95903
|
}
|
|
95899
95904
|
if (node3.isLeaf) {
|
|
95905
|
+
const start$1 = offset$1;
|
|
95900
95906
|
offset$1 += 1;
|
|
95907
|
+
maybePushRun(start$1, offset$1, []);
|
|
95901
95908
|
return;
|
|
95902
95909
|
}
|
|
95903
95910
|
let isFirstChild = true;
|
|
@@ -96335,12 +96342,69 @@ function executeBlockSelector(index2, query2, diagnostics) {
|
|
|
96335
96342
|
function isAssertStep(step) {
|
|
96336
96343
|
return step.op === "assert";
|
|
96337
96344
|
}
|
|
96345
|
+
function isCreateOp(op) {
|
|
96346
|
+
return op === "create.heading" || op === "create.paragraph";
|
|
96347
|
+
}
|
|
96338
96348
|
function isSelectWhere(where) {
|
|
96339
96349
|
return where.by === "select";
|
|
96340
96350
|
}
|
|
96341
96351
|
function isRefWhere(where) {
|
|
96342
96352
|
return where.by === "ref";
|
|
96343
96353
|
}
|
|
96354
|
+
function validateCreateStepPosition(step) {
|
|
96355
|
+
const args$1 = step.args;
|
|
96356
|
+
if (args$1.position === undefined || args$1.position === null) {
|
|
96357
|
+
args$1.position = "after";
|
|
96358
|
+
return;
|
|
96359
|
+
}
|
|
96360
|
+
if (!VALID_CREATE_POSITIONS.includes(args$1.position))
|
|
96361
|
+
throw planError("INVALID_INPUT", `create step requires args.position to be 'before' or 'after'`, step.id, {
|
|
96362
|
+
receivedPosition: args$1.position,
|
|
96363
|
+
allowedValues: [...VALID_CREATE_POSITIONS],
|
|
96364
|
+
default: "after"
|
|
96365
|
+
});
|
|
96366
|
+
}
|
|
96367
|
+
function resolveCreateAnchorFromTargets(targets, position4, stepId) {
|
|
96368
|
+
const target = targets[0];
|
|
96369
|
+
if (!target)
|
|
96370
|
+
throw planError("INVALID_INPUT", "create step has no resolved targets", stepId);
|
|
96371
|
+
if (target.kind === "range")
|
|
96372
|
+
return target.blockId;
|
|
96373
|
+
const segments = target.segments;
|
|
96374
|
+
if (!segments.length)
|
|
96375
|
+
throw planError("INVALID_INPUT", "span target has no segments", stepId);
|
|
96376
|
+
return position4 === "before" ? segments[0].blockId : segments[segments.length - 1].blockId;
|
|
96377
|
+
}
|
|
96378
|
+
function validateInsertionContext(editor, index2, step, stepIndex, anchorBlockId, position4) {
|
|
96379
|
+
const candidate = index2.candidates.find((c$3) => c$3.nodeId === anchorBlockId);
|
|
96380
|
+
if (!candidate)
|
|
96381
|
+
return;
|
|
96382
|
+
const paragraphType = editor.state.schema?.nodes?.paragraph;
|
|
96383
|
+
if (!paragraphType)
|
|
96384
|
+
return;
|
|
96385
|
+
const resolvedPos = editor.state.doc.resolve(candidate.pos);
|
|
96386
|
+
const parent = resolvedPos.parent;
|
|
96387
|
+
const anchorIndex = resolvedPos.index();
|
|
96388
|
+
const insertionIndex = position4 === "before" ? anchorIndex : anchorIndex + 1;
|
|
96389
|
+
if (!(typeof parent.canReplaceWith === "function" ? parent.canReplaceWith(insertionIndex, insertionIndex, paragraphType) : parent.type.contentMatch.matchType(paragraphType))) {
|
|
96390
|
+
const allowedChildTypes = [];
|
|
96391
|
+
const match$1 = parent.type.contentMatch;
|
|
96392
|
+
for (const nodeType of Object.values(editor.state.schema.nodes))
|
|
96393
|
+
if (match$1.matchType(nodeType))
|
|
96394
|
+
allowedChildTypes.push(nodeType.name);
|
|
96395
|
+
throw planError("INVALID_INSERTION_CONTEXT", `Cannot create ${step.op} inside ${parent.type.name}`, step.id, {
|
|
96396
|
+
stepIndex,
|
|
96397
|
+
stepId: step.id,
|
|
96398
|
+
operation: step.op,
|
|
96399
|
+
anchorBlockId,
|
|
96400
|
+
parentType: parent.type.name,
|
|
96401
|
+
allowedChildTypes,
|
|
96402
|
+
insertionIndex,
|
|
96403
|
+
requestedChildType: "paragraph",
|
|
96404
|
+
requestedSemanticType: step.op === "create.heading" ? "heading" : "paragraph"
|
|
96405
|
+
});
|
|
96406
|
+
}
|
|
96407
|
+
}
|
|
96344
96408
|
function isV3Ref(payload) {
|
|
96345
96409
|
return typeof payload === "object" && payload !== null && "v" in payload && payload.v === 3;
|
|
96346
96410
|
}
|
|
@@ -96575,9 +96639,13 @@ function decodeTextRefPayload(encoded, stepId) {
|
|
|
96575
96639
|
function resolveV3TextRef(editor, index2, step, refData) {
|
|
96576
96640
|
const currentRevision = getRevision(editor);
|
|
96577
96641
|
if (refData.rev !== currentRevision)
|
|
96578
|
-
throw planError("REVISION_MISMATCH", `
|
|
96642
|
+
throw planError("REVISION_MISMATCH", `Text ref is ephemeral and revision-scoped. Re-run query.match to obtain a fresh handle.ref for revision ${currentRevision}.`, step.id, {
|
|
96579
96643
|
refRevision: refData.rev,
|
|
96580
|
-
currentRevision
|
|
96644
|
+
currentRevision,
|
|
96645
|
+
refStability: "ephemeral",
|
|
96646
|
+
refScope: refData.scope,
|
|
96647
|
+
blockId: refData.segments?.[0]?.blockId,
|
|
96648
|
+
remediation: `Re-run query.match() to obtain a fresh ref valid for the current revision.`
|
|
96581
96649
|
});
|
|
96582
96650
|
if (!refData.segments?.length)
|
|
96583
96651
|
return [];
|
|
@@ -96668,7 +96736,11 @@ function resolveStepTargets(editor, index2, step) {
|
|
|
96668
96736
|
});
|
|
96669
96737
|
if (refWhere) {
|
|
96670
96738
|
if (targets.length === 0)
|
|
96671
|
-
throw planError("MATCH_NOT_FOUND", `ref "${refWhere.ref}" did not resolve to any targets`, step.id
|
|
96739
|
+
throw planError("MATCH_NOT_FOUND", `ref "${refWhere.ref}" did not resolve to any targets`, step.id, {
|
|
96740
|
+
selectorType: "ref",
|
|
96741
|
+
selectorPattern: refWhere.ref,
|
|
96742
|
+
candidateCount: 0
|
|
96743
|
+
});
|
|
96672
96744
|
if (targets.length > 1)
|
|
96673
96745
|
throw planError("AMBIGUOUS_MATCH", `ref "${refWhere.ref}" resolved to ${targets.length} targets`, step.id, { matchCount: targets.length });
|
|
96674
96746
|
return targets;
|
|
@@ -96680,6 +96752,18 @@ function resolveStepTargets(editor, index2, step) {
|
|
|
96680
96752
|
targets = [targets[0]];
|
|
96681
96753
|
return targets;
|
|
96682
96754
|
}
|
|
96755
|
+
function buildMatchNotFoundDetails(step) {
|
|
96756
|
+
const where = step.where;
|
|
96757
|
+
const select2 = "select" in where ? where.select : undefined;
|
|
96758
|
+
const within$1 = "within" in where ? where.within : undefined;
|
|
96759
|
+
return {
|
|
96760
|
+
selectorType: select2?.type ?? "unknown",
|
|
96761
|
+
selectorPattern: select2?.pattern ?? "",
|
|
96762
|
+
selectorMode: select2?.mode ?? "contains",
|
|
96763
|
+
searchScope: within$1?.blockId ?? "document",
|
|
96764
|
+
candidateCount: 0
|
|
96765
|
+
};
|
|
96766
|
+
}
|
|
96683
96767
|
function applyCardinalityCheck(step, targets) {
|
|
96684
96768
|
const where = step.where;
|
|
96685
96769
|
if (!("require" in where) || where.require === undefined)
|
|
@@ -96687,62 +96771,131 @@ function applyCardinalityCheck(step, targets) {
|
|
|
96687
96771
|
const require$1 = where.require;
|
|
96688
96772
|
if (require$1 === "first") {
|
|
96689
96773
|
if (targets.length === 0)
|
|
96690
|
-
throw planError("MATCH_NOT_FOUND", "selector matched zero ranges", step.id);
|
|
96774
|
+
throw planError("MATCH_NOT_FOUND", "selector matched zero ranges", step.id, buildMatchNotFoundDetails(step));
|
|
96691
96775
|
} else if (require$1 === "exactlyOne") {
|
|
96692
96776
|
if (targets.length === 0)
|
|
96693
|
-
throw planError("MATCH_NOT_FOUND", "selector matched zero ranges", step.id);
|
|
96777
|
+
throw planError("MATCH_NOT_FOUND", "selector matched zero ranges", step.id, buildMatchNotFoundDetails(step));
|
|
96694
96778
|
if (targets.length > 1)
|
|
96695
96779
|
throw planError("AMBIGUOUS_MATCH", `selector matched ${targets.length} ranges, expected exactly one`, step.id, { matchCount: targets.length });
|
|
96696
96780
|
} else if (require$1 === "all") {
|
|
96697
96781
|
if (targets.length === 0)
|
|
96698
|
-
throw planError("MATCH_NOT_FOUND", "selector matched zero ranges", step.id);
|
|
96699
|
-
}
|
|
96700
|
-
}
|
|
96701
|
-
function
|
|
96702
|
-
|
|
96703
|
-
|
|
96704
|
-
|
|
96705
|
-
|
|
96706
|
-
|
|
96707
|
-
|
|
96708
|
-
|
|
96709
|
-
|
|
96710
|
-
|
|
96711
|
-
|
|
96712
|
-
|
|
96713
|
-
|
|
96714
|
-
|
|
96715
|
-
|
|
96716
|
-
|
|
96782
|
+
throw planError("MATCH_NOT_FOUND", "selector matched zero ranges", step.id, buildMatchNotFoundDetails(step));
|
|
96783
|
+
}
|
|
96784
|
+
}
|
|
96785
|
+
function normalizeOpForMatrix(op) {
|
|
96786
|
+
return op.startsWith("create.") ? "create.*" : op;
|
|
96787
|
+
}
|
|
96788
|
+
function classifyOverlap(stepA, stepB) {
|
|
96789
|
+
const rangesA = extractBlockRanges(stepA);
|
|
96790
|
+
const rangesB = extractBlockRanges(stepB);
|
|
96791
|
+
const opA = normalizeOpForMatrix(stepA.step.op);
|
|
96792
|
+
const opB = normalizeOpForMatrix(stepB.step.op);
|
|
96793
|
+
const isCreateA = opA === "create.*";
|
|
96794
|
+
const isCreateB = opB === "create.*";
|
|
96795
|
+
for (const [blockId, aEntries] of rangesA) {
|
|
96796
|
+
const bEntries = rangesB.get(blockId);
|
|
96797
|
+
if (!bEntries)
|
|
96798
|
+
continue;
|
|
96799
|
+
for (const a2 of aEntries)
|
|
96800
|
+
for (const b$1 of bEntries) {
|
|
96801
|
+
if (isCreateA || isCreateB)
|
|
96802
|
+
return {
|
|
96803
|
+
overlapClass: "same_block",
|
|
96804
|
+
blockId,
|
|
96805
|
+
rangeA: a2,
|
|
96806
|
+
rangeB: b$1
|
|
96807
|
+
};
|
|
96808
|
+
if (a2.to <= b$1.from || b$1.to <= a2.from)
|
|
96809
|
+
continue;
|
|
96810
|
+
if (a2.from === b$1.from && a2.to === b$1.to)
|
|
96811
|
+
return {
|
|
96812
|
+
overlapClass: "same_target",
|
|
96813
|
+
blockId,
|
|
96814
|
+
rangeA: a2,
|
|
96815
|
+
rangeB: b$1
|
|
96816
|
+
};
|
|
96817
|
+
return {
|
|
96818
|
+
overlapClass: "overlapping",
|
|
96717
96819
|
blockId,
|
|
96718
|
-
rangeA:
|
|
96719
|
-
|
|
96720
|
-
|
|
96721
|
-
|
|
96722
|
-
rangeB: {
|
|
96723
|
-
from: curr.from,
|
|
96724
|
-
to: curr.to
|
|
96725
|
-
}
|
|
96726
|
-
});
|
|
96727
|
-
}
|
|
96820
|
+
rangeA: a2,
|
|
96821
|
+
rangeB: b$1
|
|
96822
|
+
};
|
|
96823
|
+
}
|
|
96728
96824
|
}
|
|
96729
96825
|
}
|
|
96730
|
-
function
|
|
96731
|
-
|
|
96732
|
-
|
|
96733
|
-
|
|
96734
|
-
|
|
96826
|
+
function extractBlockRanges(compiled) {
|
|
96827
|
+
const result = /* @__PURE__ */ new Map;
|
|
96828
|
+
for (const target of compiled.targets)
|
|
96829
|
+
if (target.kind === "range")
|
|
96830
|
+
pushBlockRange(result, target.blockId, target.from, target.to);
|
|
96831
|
+
else
|
|
96832
|
+
for (const seg of target.segments)
|
|
96833
|
+
pushBlockRange(result, seg.blockId, seg.from, seg.to);
|
|
96834
|
+
return result;
|
|
96835
|
+
}
|
|
96836
|
+
function pushBlockRange(map$22, blockId, from$12, to) {
|
|
96837
|
+
let entries = map$22.get(blockId);
|
|
96838
|
+
if (!entries) {
|
|
96839
|
+
entries = [];
|
|
96840
|
+
map$22.set(blockId, entries);
|
|
96735
96841
|
}
|
|
96736
|
-
|
|
96737
|
-
stepId,
|
|
96842
|
+
entries.push({
|
|
96738
96843
|
from: from$12,
|
|
96739
96844
|
to
|
|
96740
96845
|
});
|
|
96741
96846
|
}
|
|
96847
|
+
function validateStepInteractions(steps) {
|
|
96848
|
+
for (let i$1 = 0;i$1 < steps.length; i$1++)
|
|
96849
|
+
for (let j2 = i$1 + 1;j2 < steps.length; j2++) {
|
|
96850
|
+
const stepA = steps[i$1];
|
|
96851
|
+
const stepB = steps[j2];
|
|
96852
|
+
if (MATRIX_EXEMPT_OPS.has(stepA.step.op) || MATRIX_EXEMPT_OPS.has(stepB.step.op))
|
|
96853
|
+
continue;
|
|
96854
|
+
const overlap = classifyOverlap(stepA, stepB);
|
|
96855
|
+
if (!overlap)
|
|
96856
|
+
continue;
|
|
96857
|
+
const matrixKey = `${normalizeOpForMatrix(stepA.step.op)}::${normalizeOpForMatrix(stepB.step.op)}::${overlap.overlapClass}`;
|
|
96858
|
+
const verdict = STEP_INTERACTION_MATRIX.get(matrixKey) ?? "reject";
|
|
96859
|
+
if (verdict === "reject")
|
|
96860
|
+
throw planError("PLAN_CONFLICT_OVERLAP", `steps "${stepA.step.id}" and "${stepB.step.id}" target overlapping ranges in block "${overlap.blockId}"`, stepB.step.id, {
|
|
96861
|
+
blockId: overlap.blockId,
|
|
96862
|
+
stepIdA: stepA.step.id,
|
|
96863
|
+
stepIdB: stepB.step.id,
|
|
96864
|
+
opKeyA: stepA.step.op,
|
|
96865
|
+
opKeyB: stepB.step.op,
|
|
96866
|
+
rangeA: overlap.rangeA,
|
|
96867
|
+
rangeB: overlap.rangeB,
|
|
96868
|
+
overlapRegion: {
|
|
96869
|
+
from: Math.max(overlap.rangeA.from, overlap.rangeB.from),
|
|
96870
|
+
to: Math.min(overlap.rangeA.to, overlap.rangeB.to)
|
|
96871
|
+
},
|
|
96872
|
+
matrixVerdict: verdict,
|
|
96873
|
+
matrixKey
|
|
96874
|
+
});
|
|
96875
|
+
}
|
|
96876
|
+
}
|
|
96877
|
+
function assertNoDuplicateBlockIds(index2) {
|
|
96878
|
+
const seen = /* @__PURE__ */ new Map;
|
|
96879
|
+
const duplicates = [];
|
|
96880
|
+
for (const candidate of index2.candidates) {
|
|
96881
|
+
const count = seen.get(candidate.nodeId) ?? 0;
|
|
96882
|
+
seen.set(candidate.nodeId, count + 1);
|
|
96883
|
+
if (count === 1)
|
|
96884
|
+
duplicates.push(candidate.nodeId);
|
|
96885
|
+
}
|
|
96886
|
+
if (duplicates.length > 0)
|
|
96887
|
+
throw planError("DOCUMENT_IDENTITY_CONFLICT", "Document contains blocks with duplicate identities. This must be resolved before mutations can be applied.", undefined, {
|
|
96888
|
+
duplicateBlockIds: duplicates,
|
|
96889
|
+
blockCount: duplicates.length,
|
|
96890
|
+
remediation: "Re-import the document or call document.repair() to assign unique identities."
|
|
96891
|
+
});
|
|
96892
|
+
}
|
|
96742
96893
|
function compilePlan(editor, steps) {
|
|
96743
96894
|
if (steps.length > 200)
|
|
96744
96895
|
throw planError("INVALID_INPUT", `plan contains ${steps.length} steps, maximum is 200`);
|
|
96896
|
+
const compiledRevision = getRevision(editor);
|
|
96745
96897
|
const index2 = getBlockIndex(editor);
|
|
96898
|
+
assertNoDuplicateBlockIds(index2);
|
|
96746
96899
|
const mutationSteps = [];
|
|
96747
96900
|
const assertSteps = [];
|
|
96748
96901
|
const seenIds = /* @__PURE__ */ new Set;
|
|
@@ -96754,28 +96907,45 @@ function compilePlan(editor, steps) {
|
|
|
96754
96907
|
seenIds.add(step.id);
|
|
96755
96908
|
}
|
|
96756
96909
|
let totalTargets = 0;
|
|
96910
|
+
let stepIndex = 0;
|
|
96757
96911
|
for (const step of steps) {
|
|
96758
96912
|
if (isAssertStep(step)) {
|
|
96759
96913
|
assertSteps.push(step);
|
|
96914
|
+
stepIndex++;
|
|
96760
96915
|
continue;
|
|
96761
96916
|
}
|
|
96762
96917
|
if (!hasStepExecutor(step.op))
|
|
96763
96918
|
throw planError("INVALID_INPUT", `unknown step op "${step.op}"`, step.id);
|
|
96919
|
+
if (isCreateOp(step.op))
|
|
96920
|
+
validateCreateStepPosition(step);
|
|
96764
96921
|
const targets = resolveStepTargets(editor, index2, step);
|
|
96922
|
+
if (isCreateOp(step.op) && targets.length > 0) {
|
|
96923
|
+
const position4 = step.args.position ?? "after";
|
|
96924
|
+
const anchorBlockId = resolveCreateAnchorFromTargets(targets, position4, step.id);
|
|
96925
|
+
validateInsertionContext(editor, index2, step, stepIndex, anchorBlockId, position4);
|
|
96926
|
+
}
|
|
96765
96927
|
totalTargets += targets.length;
|
|
96766
96928
|
mutationSteps.push({
|
|
96767
96929
|
step,
|
|
96768
96930
|
targets
|
|
96769
96931
|
});
|
|
96932
|
+
stepIndex++;
|
|
96770
96933
|
}
|
|
96771
96934
|
if (totalTargets > 500)
|
|
96772
96935
|
throw planError("INVALID_INPUT", `plan resolved ${totalTargets} total targets, maximum is 500`);
|
|
96773
|
-
|
|
96936
|
+
validateStepInteractions(mutationSteps);
|
|
96774
96937
|
return {
|
|
96775
96938
|
mutationSteps,
|
|
96776
|
-
assertSteps
|
|
96939
|
+
assertSteps,
|
|
96940
|
+
compiledRevision
|
|
96777
96941
|
};
|
|
96778
96942
|
}
|
|
96943
|
+
function resolveBlockInsertionPos(editor, anchorBlockId, position4, stepId) {
|
|
96944
|
+
const candidate = getBlockIndex(editor).candidates.find((c$3) => c$3.nodeId === anchorBlockId);
|
|
96945
|
+
if (!candidate)
|
|
96946
|
+
throw planError("TARGET_NOT_FOUND", `block "${anchorBlockId}" not found`, stepId);
|
|
96947
|
+
return position4 === "before" ? candidate.pos : candidate.end;
|
|
96948
|
+
}
|
|
96779
96949
|
function applyDirectMutationMeta(tr) {
|
|
96780
96950
|
tr.setMeta("inputType", "programmatic");
|
|
96781
96951
|
tr.setMeta("skipTrackChanges", true);
|
|
@@ -96828,11 +96998,33 @@ function buildMarksFromSetMarks(editor, setMarks) {
|
|
|
96828
96998
|
marks.push(schema.marks.strike.create());
|
|
96829
96999
|
return marks;
|
|
96830
97000
|
}
|
|
96831
|
-
function
|
|
96832
|
-
const
|
|
96833
|
-
|
|
96834
|
-
|
|
96835
|
-
|
|
97001
|
+
function applyInlineMarkPatches(editor, tr, absFrom, absTo, inline) {
|
|
97002
|
+
const { schema } = editor.state;
|
|
97003
|
+
let changed = false;
|
|
97004
|
+
const markEntries = [
|
|
97005
|
+
[inline.bold, schema.marks.bold],
|
|
97006
|
+
[inline.italic, schema.marks.italic],
|
|
97007
|
+
[inline.underline, schema.marks.underline],
|
|
97008
|
+
[inline.strike, schema.marks.strike]
|
|
97009
|
+
];
|
|
97010
|
+
for (const [value, markType] of markEntries) {
|
|
97011
|
+
if (value === undefined || !markType)
|
|
97012
|
+
continue;
|
|
97013
|
+
if (value)
|
|
97014
|
+
tr.addMark(absFrom, absTo, markType.create());
|
|
97015
|
+
else
|
|
97016
|
+
tr.removeMark(absFrom, absTo, markType);
|
|
97017
|
+
changed = true;
|
|
97018
|
+
}
|
|
97019
|
+
return changed;
|
|
97020
|
+
}
|
|
97021
|
+
function resolveCreateAnchorBlockId(target, position4, stepId) {
|
|
97022
|
+
if (target.kind === "range")
|
|
97023
|
+
return target.blockId;
|
|
97024
|
+
const segments = target.segments;
|
|
97025
|
+
if (!segments.length)
|
|
97026
|
+
throw planError("INVALID_INPUT", "span target has no segments", stepId);
|
|
97027
|
+
return position4 === "before" ? segments[0].blockId : segments[segments.length - 1].blockId;
|
|
96836
97028
|
}
|
|
96837
97029
|
function executeTextRewrite(editor, tr, target, step, mapping) {
|
|
96838
97030
|
const absFrom = mapping.map(target.absFrom);
|
|
@@ -96873,42 +97065,7 @@ function executeTextDelete(_editor, tr, target, _step, mapping) {
|
|
|
96873
97065
|
return { changed: true };
|
|
96874
97066
|
}
|
|
96875
97067
|
function executeStyleApply2(editor, tr, target, step, mapping) {
|
|
96876
|
-
|
|
96877
|
-
const absTo = mapping.map(target.absTo);
|
|
96878
|
-
const { schema } = editor.state;
|
|
96879
|
-
let changed = false;
|
|
96880
|
-
const markEntries = [
|
|
96881
|
-
[
|
|
96882
|
-
"bold",
|
|
96883
|
-
step.args.inline.bold,
|
|
96884
|
-
schema.marks.bold
|
|
96885
|
-
],
|
|
96886
|
-
[
|
|
96887
|
-
"italic",
|
|
96888
|
-
step.args.inline.italic,
|
|
96889
|
-
schema.marks.italic
|
|
96890
|
-
],
|
|
96891
|
-
[
|
|
96892
|
-
"underline",
|
|
96893
|
-
step.args.inline.underline,
|
|
96894
|
-
schema.marks.underline
|
|
96895
|
-
],
|
|
96896
|
-
[
|
|
96897
|
-
"strike",
|
|
96898
|
-
step.args.inline.strike,
|
|
96899
|
-
schema.marks.strike
|
|
96900
|
-
]
|
|
96901
|
-
];
|
|
96902
|
-
for (const [, value, markType] of markEntries) {
|
|
96903
|
-
if (value === undefined || !markType)
|
|
96904
|
-
continue;
|
|
96905
|
-
if (value)
|
|
96906
|
-
tr.addMark(absFrom, absTo, markType.create());
|
|
96907
|
-
else
|
|
96908
|
-
tr.removeMark(absFrom, absTo, markType);
|
|
96909
|
-
changed = true;
|
|
96910
|
-
}
|
|
96911
|
-
return { changed };
|
|
97068
|
+
return { changed: applyInlineMarkPatches(editor, tr, mapping.map(target.absFrom), mapping.map(target.absTo), step.args.inline) };
|
|
96912
97069
|
}
|
|
96913
97070
|
function validateMappedSpanContiguity(target, mapping, stepId) {
|
|
96914
97071
|
let lastMappedEnd = -1;
|
|
@@ -96974,44 +97131,9 @@ function executeSpanTextDelete(_editor, tr, target, step, mapping) {
|
|
|
96974
97131
|
}
|
|
96975
97132
|
function executeSpanStyleApply(editor, tr, target, step, mapping) {
|
|
96976
97133
|
validateMappedSpanContiguity(target, mapping, step.id);
|
|
96977
|
-
const { schema } = editor.state;
|
|
96978
|
-
let changed = false;
|
|
96979
97134
|
const firstSeg = target.segments[0];
|
|
96980
97135
|
const lastSeg = target.segments[target.segments.length - 1];
|
|
96981
|
-
|
|
96982
|
-
const absTo = mapping.map(lastSeg.absTo, -1);
|
|
96983
|
-
const markEntries = [
|
|
96984
|
-
[
|
|
96985
|
-
"bold",
|
|
96986
|
-
step.args.inline.bold,
|
|
96987
|
-
schema.marks.bold
|
|
96988
|
-
],
|
|
96989
|
-
[
|
|
96990
|
-
"italic",
|
|
96991
|
-
step.args.inline.italic,
|
|
96992
|
-
schema.marks.italic
|
|
96993
|
-
],
|
|
96994
|
-
[
|
|
96995
|
-
"underline",
|
|
96996
|
-
step.args.inline.underline,
|
|
96997
|
-
schema.marks.underline
|
|
96998
|
-
],
|
|
96999
|
-
[
|
|
97000
|
-
"strike",
|
|
97001
|
-
step.args.inline.strike,
|
|
97002
|
-
schema.marks.strike
|
|
97003
|
-
]
|
|
97004
|
-
];
|
|
97005
|
-
for (const [, value, markType] of markEntries) {
|
|
97006
|
-
if (value === undefined || !markType)
|
|
97007
|
-
continue;
|
|
97008
|
-
if (value)
|
|
97009
|
-
tr.addMark(absFrom, absTo, markType.create());
|
|
97010
|
-
else
|
|
97011
|
-
tr.removeMark(absFrom, absTo, markType);
|
|
97012
|
-
changed = true;
|
|
97013
|
-
}
|
|
97014
|
-
return { changed };
|
|
97136
|
+
return { changed: applyInlineMarkPatches(editor, tr, mapping.map(firstSeg.absFrom, 1), mapping.map(lastSeg.absTo, -1), step.args.inline) };
|
|
97015
97137
|
}
|
|
97016
97138
|
function getReplacementText(replacement) {
|
|
97017
97139
|
if (replacement.blocks !== undefined)
|
|
@@ -97212,10 +97334,12 @@ function executeAssertStep(_editor, tr, step) {
|
|
|
97212
97334
|
}
|
|
97213
97335
|
function executeCreateStep(editor, tr, step, targets, mapping) {
|
|
97214
97336
|
const target = targets[0];
|
|
97215
|
-
if (!target
|
|
97216
|
-
throw planError("INVALID_INPUT", `${step.op} step requires
|
|
97337
|
+
if (!target)
|
|
97338
|
+
throw planError("INVALID_INPUT", `${step.op} step requires at least one target`, step.id);
|
|
97217
97339
|
const args$1 = step.args;
|
|
97218
|
-
const
|
|
97340
|
+
const position4 = args$1.position ?? "after";
|
|
97341
|
+
const anchorPos = resolveBlockInsertionPos(editor, resolveCreateAnchorBlockId(target, position4, step.id), position4, step.id);
|
|
97342
|
+
const pos = mapping.map(anchorPos);
|
|
97219
97343
|
const paragraphType = editor.state.schema?.nodes?.paragraph;
|
|
97220
97344
|
if (!paragraphType)
|
|
97221
97345
|
throw planError("INVALID_INPUT", "paragraph node type not in schema", step.id);
|
|
@@ -97235,6 +97359,7 @@ function executeCreateStep(editor, tr, step, targets, mapping) {
|
|
|
97235
97359
|
if (!node3)
|
|
97236
97360
|
throw planError("INVALID_INPUT", `could not create ${step.op} node`, step.id);
|
|
97237
97361
|
tr.insert(pos, node3);
|
|
97362
|
+
assertNoPostInsertDuplicateIds(tr.doc, step.id);
|
|
97238
97363
|
return {
|
|
97239
97364
|
stepId: step.id,
|
|
97240
97365
|
op: step.op,
|
|
@@ -97246,6 +97371,31 @@ function executeCreateStep(editor, tr, step, targets, mapping) {
|
|
|
97246
97371
|
}
|
|
97247
97372
|
};
|
|
97248
97373
|
}
|
|
97374
|
+
function assertNoPostInsertDuplicateIds(doc$2, stepId) {
|
|
97375
|
+
const seen = /* @__PURE__ */ new Set;
|
|
97376
|
+
const duplicateSet = /* @__PURE__ */ new Set;
|
|
97377
|
+
doc$2.descendants((node3) => {
|
|
97378
|
+
if (!node3.isTextblock)
|
|
97379
|
+
return true;
|
|
97380
|
+
const attrs = node3.attrs ?? {};
|
|
97381
|
+
const id2 = typeof attrs.paraId === "string" && attrs.paraId || typeof attrs.sdBlockId === "string" && attrs.sdBlockId || typeof attrs.nodeId === "string" && attrs.nodeId;
|
|
97382
|
+
if (!id2)
|
|
97383
|
+
return true;
|
|
97384
|
+
if (seen.has(id2))
|
|
97385
|
+
duplicateSet.add(id2);
|
|
97386
|
+
else
|
|
97387
|
+
seen.add(id2);
|
|
97388
|
+
return true;
|
|
97389
|
+
});
|
|
97390
|
+
if (duplicateSet.size > 0) {
|
|
97391
|
+
const duplicates = [...duplicateSet];
|
|
97392
|
+
throw planError("INTERNAL_ERROR", `create step produced duplicate block identities: [${duplicates.join(", ")}]`, stepId, {
|
|
97393
|
+
source: "executor:checkPostInsertIdentityUniqueness",
|
|
97394
|
+
invariant: "post-insert block IDs must be unique",
|
|
97395
|
+
duplicateBlockIds: duplicates
|
|
97396
|
+
});
|
|
97397
|
+
}
|
|
97398
|
+
}
|
|
97249
97399
|
function runMutationsOnTransaction(editor, tr, compiled, options) {
|
|
97250
97400
|
const mapping = tr.mapping;
|
|
97251
97401
|
const stepOutcomes = [];
|
|
@@ -97303,6 +97453,14 @@ function executeCompiledPlan(editor, compiled, options = {}) {
|
|
|
97303
97453
|
const startTime = performance.now();
|
|
97304
97454
|
const revisionBefore = getRevision(editor);
|
|
97305
97455
|
checkRevision(editor, options.expectedRevision);
|
|
97456
|
+
if (compiled.compiledRevision !== revisionBefore)
|
|
97457
|
+
throw planError("REVISION_CHANGED_SINCE_COMPILE", `Document revision changed between compile and execute. Compiled at "${compiled.compiledRevision}", now at "${revisionBefore}".`, undefined, {
|
|
97458
|
+
compiledRevision: compiled.compiledRevision,
|
|
97459
|
+
currentRevision: revisionBefore,
|
|
97460
|
+
stepCount: compiled.mutationSteps.length,
|
|
97461
|
+
failedAtStep: "pre-execution",
|
|
97462
|
+
remediation: "Re-compile the plan against the current document state."
|
|
97463
|
+
});
|
|
97306
97464
|
const tr = editor.state.tr;
|
|
97307
97465
|
if ((options.changeMode ?? "direct") === "tracked")
|
|
97308
97466
|
applyTrackedMutationMeta(tr);
|
|
@@ -97522,7 +97680,8 @@ function executeDomainCommand(editor, handler2, options) {
|
|
|
97522
97680
|
},
|
|
97523
97681
|
targets: []
|
|
97524
97682
|
}],
|
|
97525
|
-
assertSteps: []
|
|
97683
|
+
assertSteps: [],
|
|
97684
|
+
compiledRevision: getRevision(editor)
|
|
97526
97685
|
}, { expectedRevision: options?.expectedRevision });
|
|
97527
97686
|
}
|
|
97528
97687
|
function validateWriteRequest(request, resolved) {
|
|
@@ -97618,7 +97777,8 @@ function writeWrapper(editor, request, options) {
|
|
|
97618
97777
|
step: stepDef,
|
|
97619
97778
|
targets: [toCompiledTarget(stepId, op, resolved)]
|
|
97620
97779
|
}],
|
|
97621
|
-
assertSteps: []
|
|
97780
|
+
assertSteps: [],
|
|
97781
|
+
compiledRevision: getRevision(editor)
|
|
97622
97782
|
}, {
|
|
97623
97783
|
changeMode: mode,
|
|
97624
97784
|
expectedRevision: options?.expectedRevision
|
|
@@ -97683,7 +97843,8 @@ function styleApplyWrapper(editor, input2, options) {
|
|
|
97683
97843
|
marks: []
|
|
97684
97844
|
}]
|
|
97685
97845
|
}],
|
|
97686
|
-
assertSteps: []
|
|
97846
|
+
assertSteps: [],
|
|
97847
|
+
compiledRevision: getRevision(editor)
|
|
97687
97848
|
}, {
|
|
97688
97849
|
changeMode: mode,
|
|
97689
97850
|
expectedRevision: options?.expectedRevision
|
|
@@ -98705,10 +98866,7 @@ function resolveCreateInsertPosition(editor, at, operationLabel) {
|
|
|
98705
98866
|
return 0;
|
|
98706
98867
|
if (location$1.kind === "documentEnd")
|
|
98707
98868
|
return editor.state.doc.content.size;
|
|
98708
|
-
|
|
98709
|
-
if (!target)
|
|
98710
|
-
throw new DocumentApiAdapterError("TARGET_NOT_FOUND", `Create ${operationLabel} target block was not found.`, { target: location$1.target });
|
|
98711
|
-
return location$1.kind === "before" ? target.pos : target.end;
|
|
98869
|
+
return resolveBlockInsertionPos(editor, location$1.target.nodeId, location$1.kind);
|
|
98712
98870
|
}
|
|
98713
98871
|
function resolveCreatedBlock(editor, nodeType, blockId) {
|
|
98714
98872
|
const index2 = getBlockIndex(editor);
|
|
@@ -98817,7 +98975,10 @@ function createParagraphWrapper(editor, input2, options) {
|
|
|
98817
98975
|
const paragraph2 = resolveCreatedBlock(editor, "paragraph", paragraphId);
|
|
98818
98976
|
if (mode === "tracked")
|
|
98819
98977
|
trackedChangeRefs = collectTrackInsertRefsInRange(editor, paragraph2.pos, paragraph2.end);
|
|
98820
|
-
} catch {
|
|
98978
|
+
} catch (e) {
|
|
98979
|
+
if (!(e instanceof DocumentApiAdapterError))
|
|
98980
|
+
throw e;
|
|
98981
|
+
}
|
|
98821
98982
|
}
|
|
98822
98983
|
return didApply;
|
|
98823
98984
|
}, { expectedRevision: options?.expectedRevision }).steps[0]?.effect !== "changed")
|
|
@@ -98883,7 +99044,10 @@ function createHeadingWrapper(editor, input2, options) {
|
|
|
98883
99044
|
const heading3 = resolveCreatedBlock(editor, "heading", headingId);
|
|
98884
99045
|
if (mode === "tracked")
|
|
98885
99046
|
trackedChangeRefs = collectTrackInsertRefsInRange(editor, heading3.pos, heading3.end);
|
|
98886
|
-
} catch {
|
|
99047
|
+
} catch (e) {
|
|
99048
|
+
if (!(e instanceof DocumentApiAdapterError))
|
|
99049
|
+
throw e;
|
|
99050
|
+
}
|
|
98887
99051
|
}
|
|
98888
99052
|
return didApply;
|
|
98889
99053
|
}, { expectedRevision: options?.expectedRevision }).steps[0]?.effect !== "changed")
|
|
@@ -100242,15 +100406,16 @@ function trackChangesRejectAllWrapper(editor, _input, options) {
|
|
|
100242
100406
|
return { success: true };
|
|
100243
100407
|
}
|
|
100244
100408
|
function previewPlan(editor, input2) {
|
|
100245
|
-
const evaluatedRevision = getRevision(editor);
|
|
100246
100409
|
checkRevision(editor, input2.expectedRevision);
|
|
100247
100410
|
if (!input2.steps?.length)
|
|
100248
100411
|
throw planError("INVALID_INPUT", "plan must contain at least one step");
|
|
100249
100412
|
const failures = [];
|
|
100250
100413
|
const stepPreviews = [];
|
|
100251
100414
|
let currentPhase = "compile";
|
|
100415
|
+
let evaluatedRevision = getRevision(editor);
|
|
100252
100416
|
try {
|
|
100253
100417
|
const compiled = compilePlan(editor, input2.steps);
|
|
100418
|
+
evaluatedRevision = compiled.compiledRevision;
|
|
100254
100419
|
currentPhase = "execute";
|
|
100255
100420
|
const tr = editor.state.tr;
|
|
100256
100421
|
const { stepOutcomes, assertFailures } = runMutationsOnTransaction(editor, tr, compiled, { throwOnAssertFailure: false });
|
|
@@ -100662,7 +100827,13 @@ function queryMatchAdapter(editor, input2) {
|
|
|
100662
100827
|
const paginatedMatches = isTextSelector ? applyPagination(rawMatches, userOffset, input2.limit) : rawMatches;
|
|
100663
100828
|
if (require$1 === "first" || require$1 === "exactlyOne" || require$1 === "all") {
|
|
100664
100829
|
if (totalMatches === 0)
|
|
100665
|
-
throw planError("MATCH_NOT_FOUND", "selector matched zero ranges"
|
|
100830
|
+
throw planError("MATCH_NOT_FOUND", "selector matched zero ranges", undefined, {
|
|
100831
|
+
selectorType: input2.select?.type ?? "unknown",
|
|
100832
|
+
selectorPattern: input2.select?.pattern ?? "",
|
|
100833
|
+
selectorMode: input2.select?.mode ?? "contains",
|
|
100834
|
+
searchScope: (input2.within?.kind === "block" ? input2.within.nodeId : undefined) ?? "document",
|
|
100835
|
+
candidateCount: 0
|
|
100836
|
+
});
|
|
100666
100837
|
}
|
|
100667
100838
|
if (require$1 === "exactlyOne" && totalMatches > 1)
|
|
100668
100839
|
throw planError("AMBIGUOUS_MATCH", `selector matched ${totalMatches} ranges, expected exactly one`, undefined, { matchCount: totalMatches });
|
|
@@ -100671,7 +100842,11 @@ function queryMatchAdapter(editor, input2) {
|
|
|
100671
100842
|
if (isTextSelector && raw.textRanges?.length) {
|
|
100672
100843
|
const blocks2 = buildMatchBlocks(editor, raw.textRanges, evaluatedRevision, id2);
|
|
100673
100844
|
if (blocks2.length === 0)
|
|
100674
|
-
throw planError("INTERNAL_ERROR", `text match produced no blocks for ${id2}
|
|
100845
|
+
throw planError("INTERNAL_ERROR", `text match produced no blocks for ${id2}`, undefined, {
|
|
100846
|
+
source: "query-match-adapter:buildMatchEntries",
|
|
100847
|
+
invariant: "text match must have at least one block after zero-width filtering",
|
|
100848
|
+
context: { matchId: id2 }
|
|
100849
|
+
});
|
|
100675
100850
|
const snippetResult = buildBlocksSnippet(editor, blocks2);
|
|
100676
100851
|
return {
|
|
100677
100852
|
id: id2,
|
|
@@ -134950,7 +135125,7 @@ var Node$13 = class Node$14 {
|
|
|
134950
135125
|
console.warn("Failed to initialize developer tools:", error);
|
|
134951
135126
|
}
|
|
134952
135127
|
}
|
|
134953
|
-
}, BLANK_DOCX_DATA_URI = `data:application/vnd.openxmlformats-officedocument.wordprocessingml.document;base64,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`, NODE_TYPES2, BLOCK_NODE_TYPES2, DELETABLE_BLOCK_NODE_TYPES2, INLINE_NODE_TYPES2, MARK_KEYS2, MARK_KEY_SET2, NONE_FAILURES2, NONE_THROWS2, T_NOT_FOUND2, T_NOT_FOUND_CAPABLE2, T_PLAN_ENGINE2, T_QUERY_MATCH2, OPERATION_DEFINITIONS2, OPERATION_IDS2, COMMAND_CATALOG2, DocumentApiValidationError2, ALIGNMENTS2, ALIGNMENT_SET2, STYLE_APPLY_INPUT_ALLOWED_KEYS2, FONT_SIZE_ALLOWED_KEYS2, FONT_FAMILY_ALLOWED_KEYS2, COLOR_ALLOWED_KEYS2, ALIGN_ALLOWED_KEYS2, nodeTypeValues2, blockNodeTypeValues2, deletableBlockNodeTypeValues2, inlineNodeTypeValues2, rangeSchema2, textAddressSchema2, textTargetSchema2, blockNodeAddressSchema2, deletableBlockNodeAddressSchema2, paragraphAddressSchema2, headingAddressSchema2, listItemAddressSchema2, nodeAddressSchema2, commentAddressSchema2, trackedChangeAddressSchema2, resolvedHandleSchema2, pageInfoSchema2, receiptSuccessSchema2, textMutationResolutionSchema2, textMutationSuccessSchema2, matchBlockSchema2, trackChangeRefSchema2, createParagraphSuccessSchema2, createHeadingSuccessSchema2, headingLevelSchema2, listsInsertSuccessSchema2, listsMutateItemSuccessSchema2, listsExitSuccessSchema2, nodeSummarySchema2, nodeInfoSchema2, matchContextSchema2, unknownNodeDiagnosticSchema2, textSelectorSchema2, nodeSelectorSchema2, findItemDomainSchema2, documentInfoCountsSchema2, documentInfoOutlineItemSchema2, documentInfoCapabilitiesSchema2, listKindSchema2, listInsertPositionSchema2, capabilityReasonsSchema2, capabilityFlagSchema2, operationRuntimeCapabilitySchema2, operationCapabilitiesSchema2, formatCapabilitiesSchema2, GROUP_METADATA2, CAPABILITY_REASON_CODES2, CREATE_COMMENT_ALLOWED_KEYS2, PATCH_COMMENT_ALLOWED_KEYS2, DELETE_INPUT_ALLOWED_KEYS2, INSERT_INPUT_ALLOWED_KEYS2, REPLACE_INPUT_ALLOWED_KEYS2, SUPPORTED_DELETE_NODE_TYPES2, REJECTED_DELETE_NODE_TYPES2, REQUIRED_COMMANDS, VALID_CAPABILITY_REASON_CODES, REQUIRED_HELPERS, STYLE_MARK_SCHEMA_NAMES, INLINE_FORMAT_OPERATIONS, SUPPORTED_STEP_OPS, SUPPORTED_NON_UNIFORM_STRATEGIES, SUPPORTED_SET_MARKS, REGEX_MAX_PATTERN_LENGTH = 1024, DocumentApiAdapterError, LINK_MARK_NAME = "link", COMMENT_MARK_NAME, SUPPORTED_INLINE_TYPES, ALIAS_ELIGIBLE_TYPES, cacheByEditor, PlanError, revisionMap, subscribedEditors, registry, CORE_MARK_NAMES, METADATA_MARK_NAMES, SNIPPET_PADDING = 30, DUAL_KIND_TYPES, KNOWN_BLOCK_PM_NODE_TYPES, KNOWN_INLINE_PM_NODE_TYPES, MAX_PATTERN_LENGTH = 1024, REF_HANDLERS, DEFAULT_INLINE_POLICY, OBJECT_REPLACEMENT_CHAR = "", STUB_WHERE, MARK_KEY_TO_SCHEMA_NAME, FALLBACK_STORE_KEY = "__documentApiComments", SUPPORTED_NODE_TYPES, REJECTED_NODE_TYPES, DERIVED_ID_LENGTH = 24, groupedCache, CSS_NAMED_COLORS, registered = false, empty_exports, init_empty, PIXELS_PER_INCH$1 = 96, MAX_HEIGHT_BUFFER_PX = 50, MAX_WIDTH_BUFFER_PX = 20, Editor, ContextMenuPluginKey, MENU_OFFSET_X = 0, MENU_OFFSET_Y = 28, CONTEXT_MENU_OFFSET_X = 10, CONTEXT_MENU_OFFSET_Y = 10, SLASH_COOLDOWN_MS = 5000, ContextMenu, SearchQuery = class {
|
|
135128
|
+
}, BLANK_DOCX_DATA_URI = `data:application/vnd.openxmlformats-officedocument.wordprocessingml.document;base64,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`, NODE_TYPES2, BLOCK_NODE_TYPES2, DELETABLE_BLOCK_NODE_TYPES2, INLINE_NODE_TYPES2, MARK_KEYS2, MARK_KEY_SET2, NONE_FAILURES2, NONE_THROWS2, T_NOT_FOUND2, T_NOT_FOUND_CAPABLE2, T_PLAN_ENGINE2, T_QUERY_MATCH2, OPERATION_DEFINITIONS2, OPERATION_IDS2, COMMAND_CATALOG2, DocumentApiValidationError2, ALIGNMENTS2, ALIGNMENT_SET2, STYLE_APPLY_INPUT_ALLOWED_KEYS2, FONT_SIZE_ALLOWED_KEYS2, FONT_FAMILY_ALLOWED_KEYS2, COLOR_ALLOWED_KEYS2, ALIGN_ALLOWED_KEYS2, nodeTypeValues2, blockNodeTypeValues2, deletableBlockNodeTypeValues2, inlineNodeTypeValues2, rangeSchema2, textAddressSchema2, textTargetSchema2, blockNodeAddressSchema2, deletableBlockNodeAddressSchema2, paragraphAddressSchema2, headingAddressSchema2, listItemAddressSchema2, nodeAddressSchema2, commentAddressSchema2, trackedChangeAddressSchema2, resolvedHandleSchema2, pageInfoSchema2, receiptSuccessSchema2, textMutationResolutionSchema2, textMutationSuccessSchema2, matchBlockSchema2, trackChangeRefSchema2, createParagraphSuccessSchema2, createHeadingSuccessSchema2, headingLevelSchema2, listsInsertSuccessSchema2, listsMutateItemSuccessSchema2, listsExitSuccessSchema2, nodeSummarySchema2, nodeInfoSchema2, matchContextSchema2, unknownNodeDiagnosticSchema2, textSelectorSchema2, nodeSelectorSchema2, findItemDomainSchema2, documentInfoCountsSchema2, documentInfoOutlineItemSchema2, documentInfoCapabilitiesSchema2, listKindSchema2, listInsertPositionSchema2, capabilityReasonsSchema2, capabilityFlagSchema2, operationRuntimeCapabilitySchema2, operationCapabilitiesSchema2, formatCapabilitiesSchema2, GROUP_METADATA2, CAPABILITY_REASON_CODES2, CREATE_COMMENT_ALLOWED_KEYS2, PATCH_COMMENT_ALLOWED_KEYS2, DELETE_INPUT_ALLOWED_KEYS2, INSERT_INPUT_ALLOWED_KEYS2, REPLACE_INPUT_ALLOWED_KEYS2, SUPPORTED_DELETE_NODE_TYPES2, REJECTED_DELETE_NODE_TYPES2, REQUIRED_COMMANDS, VALID_CAPABILITY_REASON_CODES, REQUIRED_HELPERS, STYLE_MARK_SCHEMA_NAMES, INLINE_FORMAT_OPERATIONS, SUPPORTED_STEP_OPS, SUPPORTED_NON_UNIFORM_STRATEGIES, SUPPORTED_SET_MARKS, REGEX_MAX_PATTERN_LENGTH = 1024, DocumentApiAdapterError, LINK_MARK_NAME = "link", COMMENT_MARK_NAME, SUPPORTED_INLINE_TYPES, ALIAS_ELIGIBLE_TYPES, cacheByEditor, PlanError, revisionMap, subscribedEditors, registry, CORE_MARK_NAMES, METADATA_MARK_NAMES, SNIPPET_PADDING = 30, DUAL_KIND_TYPES, KNOWN_BLOCK_PM_NODE_TYPES, KNOWN_INLINE_PM_NODE_TYPES, MAX_PATTERN_LENGTH = 1024, VALID_CREATE_POSITIONS, REF_HANDLERS, STEP_INTERACTION_MATRIX, MATRIX_EXEMPT_OPS, DEFAULT_INLINE_POLICY, OBJECT_REPLACEMENT_CHAR = "", STUB_WHERE, MARK_KEY_TO_SCHEMA_NAME, FALLBACK_STORE_KEY = "__documentApiComments", SUPPORTED_NODE_TYPES, REJECTED_NODE_TYPES, DERIVED_ID_LENGTH = 24, groupedCache, CSS_NAMED_COLORS, registered = false, empty_exports, init_empty, PIXELS_PER_INCH$1 = 96, MAX_HEIGHT_BUFFER_PX = 50, MAX_WIDTH_BUFFER_PX = 20, Editor, ContextMenuPluginKey, MENU_OFFSET_X = 0, MENU_OFFSET_Y = 28, CONTEXT_MENU_OFFSET_X = 10, CONTEXT_MENU_OFFSET_Y = 10, SLASH_COOLDOWN_MS = 5000, ContextMenu, SearchQuery = class {
|
|
134954
135129
|
constructor(config2) {
|
|
134955
135130
|
this.search = config2.search;
|
|
134956
135131
|
this.caseSensitive = !!config2.caseSensitive;
|
|
@@ -153021,7 +153196,7 @@ var Node$13 = class Node$14 {
|
|
|
153021
153196
|
trackedChanges: context.trackedChanges ?? []
|
|
153022
153197
|
});
|
|
153023
153198
|
}, _hoisted_1$6, _hoisted_2$1, _hoisted_3, _hoisted_4, ContextMenu_default, _hoisted_1$5, BasicUpload_default, _hoisted_1$4, MIN_WIDTH = 200, PPI = 96, alignment = "flex-end", Ruler_default, GenericPopover_default, _hoisted_1$3, RESIZE_HANDLE_WIDTH_PX = 9, RESIZE_HANDLE_OFFSET_PX = 4, DRAG_OVERLAY_EXTENSION_PX = 1000, MIN_DRAG_OVERLAY_WIDTH_PX = 2000, THROTTLE_INTERVAL_MS = 16, MIN_RESIZE_DELTA_PX = 1, TableResizeOverlay_default, _hoisted_1$2, OVERLAY_EXPANSION_PX = 2000, RESIZE_HANDLE_SIZE_PX = 12, MOUSE_MOVE_THROTTLE_MS = 16, DIMENSION_CHANGE_THRESHOLD_PX = 1, Z_INDEX_OVERLAY = 10, Z_INDEX_HANDLE = 15, Z_INDEX_GUIDELINE = 20, ImageResizeOverlay_default, LINK_CLICK_DEBOUNCE_MS = 300, CURSOR_UPDATE_TIMEOUT_MS = 10, LinkClickHandler_default, _hoisted_1$1, _hoisted_2, DOCX2 = "application/vnd.openxmlformats-officedocument.wordprocessingml.document", TABLE_RESIZE_HOVER_THRESHOLD = 8, TABLE_RESIZE_THROTTLE_MS = 16, SuperEditor_default, _hoisted_1, SuperInput_default, SlashMenu, Extensions;
|
|
153024
|
-
var
|
|
153199
|
+
var init_src_0UjFcd91_es = __esm(() => {
|
|
153025
153200
|
init_rolldown_runtime_B2q5OVn9_es();
|
|
153026
153201
|
init_SuperConverter_BxBclpFg_es();
|
|
153027
153202
|
init_jszip_ChlR43oI_es();
|
|
@@ -161141,6 +161316,9 @@ function print() { __p += __j.call(arguments, '') }
|
|
|
161141
161316
|
"TARGET_MOVED",
|
|
161142
161317
|
"PLAN_CONFLICT_OVERLAP",
|
|
161143
161318
|
"INVALID_STEP_COMBINATION",
|
|
161319
|
+
"REVISION_CHANGED_SINCE_COMPILE",
|
|
161320
|
+
"INVALID_INSERTION_CONTEXT",
|
|
161321
|
+
"DOCUMENT_IDENTITY_CONFLICT",
|
|
161144
161322
|
"CAPABILITY_UNAVAILABLE"
|
|
161145
161323
|
];
|
|
161146
161324
|
T_QUERY_MATCH2 = [
|
|
@@ -162654,6 +162832,7 @@ function print() { __p += __j.call(arguments, '') }
|
|
|
162654
162832
|
"commentRangeStart",
|
|
162655
162833
|
"commentRangeEnd"
|
|
162656
162834
|
]);
|
|
162835
|
+
VALID_CREATE_POSITIONS = ["before", "after"];
|
|
162657
162836
|
REF_HANDLERS = [
|
|
162658
162837
|
{
|
|
162659
162838
|
prefix: "text:",
|
|
@@ -162676,6 +162855,34 @@ function print() { __p += __j.call(arguments, '') }
|
|
|
162676
162855
|
handler: resolveBlockRef
|
|
162677
162856
|
}
|
|
162678
162857
|
];
|
|
162858
|
+
STEP_INTERACTION_MATRIX = new Map([
|
|
162859
|
+
["text.rewrite::format.apply::same_target", "allow"],
|
|
162860
|
+
["text.rewrite::text.rewrite::same_target", "reject"],
|
|
162861
|
+
["text.rewrite::text.delete::overlapping", "reject"],
|
|
162862
|
+
["text.rewrite::create.*::same_block", "allow"],
|
|
162863
|
+
["text.rewrite::text.insert::same_target", "reject"],
|
|
162864
|
+
["format.apply::format.apply::same_target", "allow"],
|
|
162865
|
+
["format.apply::text.rewrite::same_target", "reject"],
|
|
162866
|
+
["format.apply::text.delete::overlapping", "reject"],
|
|
162867
|
+
["format.apply::create.*::same_block", "allow"],
|
|
162868
|
+
["format.apply::text.insert::same_target", "allow"],
|
|
162869
|
+
["text.delete::text.rewrite::overlapping", "reject"],
|
|
162870
|
+
["text.delete::text.delete::overlapping", "reject"],
|
|
162871
|
+
["text.delete::format.apply::overlapping", "reject"],
|
|
162872
|
+
["text.delete::create.*::same_block", "allow"],
|
|
162873
|
+
["text.delete::text.insert::overlapping", "reject"],
|
|
162874
|
+
["create.*::text.rewrite::same_block", "allow"],
|
|
162875
|
+
["create.*::format.apply::same_block", "allow"],
|
|
162876
|
+
["create.*::text.delete::same_block", "allow"],
|
|
162877
|
+
["create.*::create.*::same_block", "allow"],
|
|
162878
|
+
["create.*::text.insert::same_block", "allow"],
|
|
162879
|
+
["text.insert::format.apply::same_target", "allow"],
|
|
162880
|
+
["text.insert::text.rewrite::same_target", "reject"],
|
|
162881
|
+
["text.insert::text.delete::overlapping", "reject"],
|
|
162882
|
+
["text.insert::create.*::same_block", "allow"],
|
|
162883
|
+
["text.insert::text.insert::same_target", "reject"]
|
|
162884
|
+
]);
|
|
162885
|
+
MATRIX_EXEMPT_OPS = new Set(["assert"]);
|
|
162679
162886
|
DEFAULT_INLINE_POLICY = {
|
|
162680
162887
|
mode: "preserve",
|
|
162681
162888
|
onNonUniform: "majority"
|
|
@@ -184692,8 +184899,8 @@ function print() { __p += __j.call(arguments, '') }
|
|
|
184692
184899
|
return isObjectLike_default(value) && hasOwnProperty$8.call(value, "callee") && !propertyIsEnumerable$1.call(value, "callee");
|
|
184693
184900
|
};
|
|
184694
184901
|
stubFalse_default = stubFalse;
|
|
184695
|
-
freeExports$2 = typeof
|
|
184696
|
-
freeModule$2 = freeExports$2 && typeof
|
|
184902
|
+
freeExports$2 = typeof exports_src_0UjFcd91_es == "object" && exports_src_0UjFcd91_es && !exports_src_0UjFcd91_es.nodeType && exports_src_0UjFcd91_es;
|
|
184903
|
+
freeModule$2 = freeExports$2 && typeof module_src_0UjFcd91_es == "object" && module_src_0UjFcd91_es && !module_src_0UjFcd91_es.nodeType && module_src_0UjFcd91_es;
|
|
184697
184904
|
Buffer$1 = freeModule$2 && freeModule$2.exports === freeExports$2 ? _root_default.Buffer : undefined;
|
|
184698
184905
|
isBuffer_default = (Buffer$1 ? Buffer$1.isBuffer : undefined) || stubFalse_default;
|
|
184699
184906
|
typedArrayTags = {};
|
|
@@ -184701,8 +184908,8 @@ function print() { __p += __j.call(arguments, '') }
|
|
|
184701
184908
|
typedArrayTags[argsTag$1] = typedArrayTags[arrayTag$1] = typedArrayTags[arrayBufferTag$1] = typedArrayTags[boolTag$1] = typedArrayTags[dataViewTag$2] = typedArrayTags[dateTag$1] = typedArrayTags[errorTag$1] = typedArrayTags[funcTag] = typedArrayTags[mapTag$2] = typedArrayTags[numberTag$1] = typedArrayTags[objectTag$3] = typedArrayTags[regexpTag$1] = typedArrayTags[setTag$2] = typedArrayTags[stringTag$1] = typedArrayTags[weakMapTag$1] = false;
|
|
184702
184909
|
_baseIsTypedArray_default = baseIsTypedArray;
|
|
184703
184910
|
_baseUnary_default = baseUnary;
|
|
184704
|
-
freeExports$1 = typeof
|
|
184705
|
-
freeModule$1 = freeExports$1 && typeof
|
|
184911
|
+
freeExports$1 = typeof exports_src_0UjFcd91_es == "object" && exports_src_0UjFcd91_es && !exports_src_0UjFcd91_es.nodeType && exports_src_0UjFcd91_es;
|
|
184912
|
+
freeModule$1 = freeExports$1 && typeof module_src_0UjFcd91_es == "object" && module_src_0UjFcd91_es && !module_src_0UjFcd91_es.nodeType && module_src_0UjFcd91_es;
|
|
184706
184913
|
freeProcess = freeModule$1 && freeModule$1.exports === freeExports$1 && _freeGlobal_default.process;
|
|
184707
184914
|
_nodeUtil_default = function() {
|
|
184708
184915
|
try {
|
|
@@ -184807,8 +185014,8 @@ function print() { __p += __j.call(arguments, '') }
|
|
|
184807
185014
|
Stack.prototype.has = _stackHas_default;
|
|
184808
185015
|
Stack.prototype.set = _stackSet_default;
|
|
184809
185016
|
_Stack_default = Stack;
|
|
184810
|
-
freeExports = typeof
|
|
184811
|
-
freeModule = freeExports && typeof
|
|
185017
|
+
freeExports = typeof exports_src_0UjFcd91_es == "object" && exports_src_0UjFcd91_es && !exports_src_0UjFcd91_es.nodeType && exports_src_0UjFcd91_es;
|
|
185018
|
+
freeModule = freeExports && typeof module_src_0UjFcd91_es == "object" && module_src_0UjFcd91_es && !module_src_0UjFcd91_es.nodeType && module_src_0UjFcd91_es;
|
|
184812
185019
|
Buffer4 = freeModule && freeModule.exports === freeExports ? _root_default.Buffer : undefined;
|
|
184813
185020
|
allocUnsafe = Buffer4 ? Buffer4.allocUnsafe : undefined;
|
|
184814
185021
|
_cloneBuffer_default = cloneBuffer;
|
|
@@ -192427,7 +192634,7 @@ var init_zipper_BJHqrQMq_es = __esm(() => {
|
|
|
192427
192634
|
|
|
192428
192635
|
// ../../packages/superdoc/dist/super-editor.es.js
|
|
192429
192636
|
var init_super_editor_es = __esm(() => {
|
|
192430
|
-
|
|
192637
|
+
init_src_0UjFcd91_es();
|
|
192431
192638
|
init_SuperConverter_BxBclpFg_es();
|
|
192432
192639
|
init_jszip_ChlR43oI_es();
|
|
192433
192640
|
init_xml_js_DLE8mr0n_es();
|
|
@@ -193116,7 +193323,7 @@ function addNode2(child, target) {
|
|
|
193116
193323
|
else
|
|
193117
193324
|
target.push(child);
|
|
193118
193325
|
}
|
|
193119
|
-
function
|
|
193326
|
+
function addRange2($start, $end, depth, target) {
|
|
193120
193327
|
let node3 = ($end || $start).node(depth);
|
|
193121
193328
|
let startIndex = 0, endIndex = $end ? $end.index(depth) : node3.childCount;
|
|
193122
193329
|
if ($start) {
|
|
@@ -193141,28 +193348,28 @@ function replaceThreeWay2($from, $start, $end, $to, depth) {
|
|
|
193141
193348
|
let openStart = $from.depth > depth && joinable2($from, $start, depth + 1);
|
|
193142
193349
|
let openEnd = $to.depth > depth && joinable2($end, $to, depth + 1);
|
|
193143
193350
|
let content2 = [];
|
|
193144
|
-
|
|
193351
|
+
addRange2(null, $from, depth, content2);
|
|
193145
193352
|
if (openStart && openEnd && $start.index(depth) == $end.index(depth)) {
|
|
193146
193353
|
checkJoin2(openStart, openEnd);
|
|
193147
193354
|
addNode2(close2(openStart, replaceThreeWay2($from, $start, $end, $to, depth + 1)), content2);
|
|
193148
193355
|
} else {
|
|
193149
193356
|
if (openStart)
|
|
193150
193357
|
addNode2(close2(openStart, replaceTwoWay2($from, $start, depth + 1)), content2);
|
|
193151
|
-
|
|
193358
|
+
addRange2($start, $end, depth, content2);
|
|
193152
193359
|
if (openEnd)
|
|
193153
193360
|
addNode2(close2(openEnd, replaceTwoWay2($end, $to, depth + 1)), content2);
|
|
193154
193361
|
}
|
|
193155
|
-
|
|
193362
|
+
addRange2($to, null, depth, content2);
|
|
193156
193363
|
return new Fragment4(content2);
|
|
193157
193364
|
}
|
|
193158
193365
|
function replaceTwoWay2($from, $to, depth) {
|
|
193159
193366
|
let content2 = [];
|
|
193160
|
-
|
|
193367
|
+
addRange2(null, $from, depth, content2);
|
|
193161
193368
|
if ($from.depth > depth) {
|
|
193162
193369
|
let type = joinable2($from, $to, depth + 1);
|
|
193163
193370
|
addNode2(close2(type, replaceTwoWay2($from, $to, depth + 1)), content2);
|
|
193164
193371
|
}
|
|
193165
|
-
|
|
193372
|
+
addRange2($to, null, depth, content2);
|
|
193166
193373
|
return new Fragment4(content2);
|
|
193167
193374
|
}
|
|
193168
193375
|
function prepareSliceForReplace2(slice2, $along) {
|
|
@@ -197829,7 +198036,12 @@ function checkRevision2(editor, expectedRevision) {
|
|
|
197829
198036
|
return;
|
|
197830
198037
|
const current = getRevision2(editor);
|
|
197831
198038
|
if (expectedRevision !== current) {
|
|
197832
|
-
throw new PlanError2("REVISION_MISMATCH", `REVISION_MISMATCH — expected revision "${expectedRevision}" but document is at "${current}"
|
|
198039
|
+
throw new PlanError2("REVISION_MISMATCH", `REVISION_MISMATCH — expected revision "${expectedRevision}" but document is at "${current}". Re-run query.match to obtain a fresh ref.`, undefined, {
|
|
198040
|
+
expectedRevision,
|
|
198041
|
+
currentRevision: current,
|
|
198042
|
+
refStability: "ephemeral",
|
|
198043
|
+
remediation: "Re-run query.match() to obtain a fresh ref valid for the current revision."
|
|
198044
|
+
});
|
|
197833
198045
|
}
|
|
197834
198046
|
}
|
|
197835
198047
|
var revisionMap2, subscribedEditors2;
|
|
@@ -198091,7 +198303,9 @@ function captureRunsInRange2(editor, blockPos, from3, to) {
|
|
|
198091
198303
|
return;
|
|
198092
198304
|
}
|
|
198093
198305
|
if (node3.isLeaf) {
|
|
198306
|
+
const start2 = offset2;
|
|
198094
198307
|
offset2 += 1;
|
|
198308
|
+
maybePushRun(start2, offset2, []);
|
|
198095
198309
|
return;
|
|
198096
198310
|
}
|
|
198097
198311
|
let isFirstChild = true;
|
|
@@ -198604,12 +198818,73 @@ var init_block_strategy = __esm(() => {
|
|
|
198604
198818
|
function isAssertStep2(step) {
|
|
198605
198819
|
return step.op === "assert";
|
|
198606
198820
|
}
|
|
198821
|
+
function isCreateOp2(op) {
|
|
198822
|
+
return op === "create.heading" || op === "create.paragraph";
|
|
198823
|
+
}
|
|
198607
198824
|
function isSelectWhere2(where) {
|
|
198608
198825
|
return where.by === "select";
|
|
198609
198826
|
}
|
|
198610
198827
|
function isRefWhere2(where) {
|
|
198611
198828
|
return where.by === "ref";
|
|
198612
198829
|
}
|
|
198830
|
+
function validateCreateStepPosition2(step) {
|
|
198831
|
+
const args3 = step.args;
|
|
198832
|
+
if (args3.position === undefined || args3.position === null) {
|
|
198833
|
+
args3.position = "after";
|
|
198834
|
+
return;
|
|
198835
|
+
}
|
|
198836
|
+
if (!VALID_CREATE_POSITIONS2.includes(args3.position)) {
|
|
198837
|
+
throw planError2("INVALID_INPUT", `create step requires args.position to be 'before' or 'after'`, step.id, {
|
|
198838
|
+
receivedPosition: args3.position,
|
|
198839
|
+
allowedValues: [...VALID_CREATE_POSITIONS2],
|
|
198840
|
+
default: "after"
|
|
198841
|
+
});
|
|
198842
|
+
}
|
|
198843
|
+
}
|
|
198844
|
+
function resolveCreateAnchorFromTargets2(targets, position4, stepId) {
|
|
198845
|
+
const target = targets[0];
|
|
198846
|
+
if (!target)
|
|
198847
|
+
throw planError2("INVALID_INPUT", "create step has no resolved targets", stepId);
|
|
198848
|
+
if (target.kind === "range")
|
|
198849
|
+
return target.blockId;
|
|
198850
|
+
const segments = target.segments;
|
|
198851
|
+
if (!segments.length)
|
|
198852
|
+
throw planError2("INVALID_INPUT", "span target has no segments", stepId);
|
|
198853
|
+
return position4 === "before" ? segments[0].blockId : segments[segments.length - 1].blockId;
|
|
198854
|
+
}
|
|
198855
|
+
function validateInsertionContext2(editor, index2, step, stepIndex, anchorBlockId, position4) {
|
|
198856
|
+
const candidate = index2.candidates.find((c2) => c2.nodeId === anchorBlockId);
|
|
198857
|
+
if (!candidate)
|
|
198858
|
+
return;
|
|
198859
|
+
const paragraphType = editor.state.schema?.nodes?.paragraph;
|
|
198860
|
+
if (!paragraphType)
|
|
198861
|
+
return;
|
|
198862
|
+
const resolvedPos = editor.state.doc.resolve(candidate.pos);
|
|
198863
|
+
const parent = resolvedPos.parent;
|
|
198864
|
+
const anchorIndex = resolvedPos.index();
|
|
198865
|
+
const insertionIndex = position4 === "before" ? anchorIndex : anchorIndex + 1;
|
|
198866
|
+
const canInsert = typeof parent.canReplaceWith === "function" ? parent.canReplaceWith(insertionIndex, insertionIndex, paragraphType) : parent.type.contentMatch.matchType(paragraphType);
|
|
198867
|
+
if (!canInsert) {
|
|
198868
|
+
const allowedChildTypes = [];
|
|
198869
|
+
const match2 = parent.type.contentMatch;
|
|
198870
|
+
for (const nodeType of Object.values(editor.state.schema.nodes)) {
|
|
198871
|
+
if (match2.matchType(nodeType)) {
|
|
198872
|
+
allowedChildTypes.push(nodeType.name);
|
|
198873
|
+
}
|
|
198874
|
+
}
|
|
198875
|
+
throw planError2("INVALID_INSERTION_CONTEXT", `Cannot create ${step.op} inside ${parent.type.name}`, step.id, {
|
|
198876
|
+
stepIndex,
|
|
198877
|
+
stepId: step.id,
|
|
198878
|
+
operation: step.op,
|
|
198879
|
+
anchorBlockId,
|
|
198880
|
+
parentType: parent.type.name,
|
|
198881
|
+
allowedChildTypes,
|
|
198882
|
+
insertionIndex,
|
|
198883
|
+
requestedChildType: "paragraph",
|
|
198884
|
+
requestedSemanticType: step.op === "create.heading" ? "heading" : "paragraph"
|
|
198885
|
+
});
|
|
198886
|
+
}
|
|
198887
|
+
}
|
|
198613
198888
|
function isV3Ref2(payload) {
|
|
198614
198889
|
return typeof payload === "object" && payload !== null && "v" in payload && payload.v === 3;
|
|
198615
198890
|
}
|
|
@@ -198837,7 +199112,14 @@ function decodeTextRefPayload2(encoded, stepId) {
|
|
|
198837
199112
|
function resolveV3TextRef2(editor, index2, step, refData) {
|
|
198838
199113
|
const currentRevision = getRevision2(editor);
|
|
198839
199114
|
if (refData.rev !== currentRevision) {
|
|
198840
|
-
throw planError2("REVISION_MISMATCH", `
|
|
199115
|
+
throw planError2("REVISION_MISMATCH", `Text ref is ephemeral and revision-scoped. Re-run query.match to obtain a fresh handle.ref for revision ${currentRevision}.`, step.id, {
|
|
199116
|
+
refRevision: refData.rev,
|
|
199117
|
+
currentRevision,
|
|
199118
|
+
refStability: "ephemeral",
|
|
199119
|
+
refScope: refData.scope,
|
|
199120
|
+
blockId: refData.segments?.[0]?.blockId,
|
|
199121
|
+
remediation: `Re-run query.match() to obtain a fresh ref valid for the current revision.`
|
|
199122
|
+
});
|
|
198841
199123
|
}
|
|
198842
199124
|
if (!refData.segments?.length)
|
|
198843
199125
|
return [];
|
|
@@ -198936,7 +199218,11 @@ function resolveStepTargets2(editor, index2, step) {
|
|
|
198936
199218
|
});
|
|
198937
199219
|
if (refWhere) {
|
|
198938
199220
|
if (targets.length === 0) {
|
|
198939
|
-
throw planError2("MATCH_NOT_FOUND", `ref "${refWhere.ref}" did not resolve to any targets`, step.id
|
|
199221
|
+
throw planError2("MATCH_NOT_FOUND", `ref "${refWhere.ref}" did not resolve to any targets`, step.id, {
|
|
199222
|
+
selectorType: "ref",
|
|
199223
|
+
selectorPattern: refWhere.ref,
|
|
199224
|
+
candidateCount: 0
|
|
199225
|
+
});
|
|
198940
199226
|
}
|
|
198941
199227
|
if (targets.length > 1) {
|
|
198942
199228
|
throw planError2("AMBIGUOUS_MATCH", `ref "${refWhere.ref}" resolved to ${targets.length} targets`, step.id, {
|
|
@@ -198955,6 +199241,18 @@ function resolveStepTargets2(editor, index2, step) {
|
|
|
198955
199241
|
}
|
|
198956
199242
|
return targets;
|
|
198957
199243
|
}
|
|
199244
|
+
function buildMatchNotFoundDetails2(step) {
|
|
199245
|
+
const where = step.where;
|
|
199246
|
+
const select2 = "select" in where ? where.select : undefined;
|
|
199247
|
+
const within2 = "within" in where ? where.within : undefined;
|
|
199248
|
+
return {
|
|
199249
|
+
selectorType: select2?.type ?? "unknown",
|
|
199250
|
+
selectorPattern: select2?.pattern ?? "",
|
|
199251
|
+
selectorMode: select2?.mode ?? "contains",
|
|
199252
|
+
searchScope: within2?.blockId ?? "document",
|
|
199253
|
+
candidateCount: 0
|
|
199254
|
+
};
|
|
199255
|
+
}
|
|
198958
199256
|
function applyCardinalityCheck2(step, targets) {
|
|
198959
199257
|
const where = step.where;
|
|
198960
199258
|
if (!("require" in where) || where.require === undefined)
|
|
@@ -198962,11 +199260,11 @@ function applyCardinalityCheck2(step, targets) {
|
|
|
198962
199260
|
const require2 = where.require;
|
|
198963
199261
|
if (require2 === "first") {
|
|
198964
199262
|
if (targets.length === 0) {
|
|
198965
|
-
throw planError2("MATCH_NOT_FOUND", "selector matched zero ranges", step.id);
|
|
199263
|
+
throw planError2("MATCH_NOT_FOUND", "selector matched zero ranges", step.id, buildMatchNotFoundDetails2(step));
|
|
198966
199264
|
}
|
|
198967
199265
|
} else if (require2 === "exactlyOne") {
|
|
198968
199266
|
if (targets.length === 0) {
|
|
198969
|
-
throw planError2("MATCH_NOT_FOUND", "selector matched zero ranges", step.id);
|
|
199267
|
+
throw planError2("MATCH_NOT_FOUND", "selector matched zero ranges", step.id, buildMatchNotFoundDetails2(step));
|
|
198970
199268
|
}
|
|
198971
199269
|
if (targets.length > 1) {
|
|
198972
199270
|
throw planError2("AMBIGUOUS_MATCH", `selector matched ${targets.length} ranges, expected exactly one`, step.id, {
|
|
@@ -198975,47 +199273,119 @@ function applyCardinalityCheck2(step, targets) {
|
|
|
198975
199273
|
}
|
|
198976
199274
|
} else if (require2 === "all") {
|
|
198977
199275
|
if (targets.length === 0) {
|
|
198978
|
-
throw planError2("MATCH_NOT_FOUND", "selector matched zero ranges", step.id);
|
|
199276
|
+
throw planError2("MATCH_NOT_FOUND", "selector matched zero ranges", step.id, buildMatchNotFoundDetails2(step));
|
|
198979
199277
|
}
|
|
198980
199278
|
}
|
|
198981
199279
|
}
|
|
198982
|
-
function
|
|
198983
|
-
|
|
198984
|
-
|
|
198985
|
-
|
|
198986
|
-
|
|
198987
|
-
|
|
198988
|
-
|
|
198989
|
-
|
|
198990
|
-
|
|
199280
|
+
function normalizeOpForMatrix2(op) {
|
|
199281
|
+
return op.startsWith("create.") ? "create.*" : op;
|
|
199282
|
+
}
|
|
199283
|
+
function classifyOverlap2(stepA, stepB) {
|
|
199284
|
+
const rangesA = extractBlockRanges2(stepA);
|
|
199285
|
+
const rangesB = extractBlockRanges2(stepB);
|
|
199286
|
+
const opA = normalizeOpForMatrix2(stepA.step.op);
|
|
199287
|
+
const opB = normalizeOpForMatrix2(stepB.step.op);
|
|
199288
|
+
const isCreateA = opA === "create.*";
|
|
199289
|
+
const isCreateB = opB === "create.*";
|
|
199290
|
+
for (const [blockId, aEntries] of rangesA) {
|
|
199291
|
+
const bEntries = rangesB.get(blockId);
|
|
199292
|
+
if (!bEntries)
|
|
199293
|
+
continue;
|
|
199294
|
+
for (const a2 of aEntries) {
|
|
199295
|
+
for (const b3 of bEntries) {
|
|
199296
|
+
if (isCreateA || isCreateB) {
|
|
199297
|
+
return { overlapClass: "same_block", blockId, rangeA: a2, rangeB: b3 };
|
|
199298
|
+
}
|
|
199299
|
+
if (a2.to <= b3.from || b3.to <= a2.from)
|
|
199300
|
+
continue;
|
|
199301
|
+
if (a2.from === b3.from && a2.to === b3.to) {
|
|
199302
|
+
return { overlapClass: "same_target", blockId, rangeA: a2, rangeB: b3 };
|
|
198991
199303
|
}
|
|
199304
|
+
return { overlapClass: "overlapping", blockId, rangeA: a2, rangeB: b3 };
|
|
198992
199305
|
}
|
|
198993
199306
|
}
|
|
198994
199307
|
}
|
|
198995
|
-
|
|
198996
|
-
|
|
198997
|
-
|
|
198998
|
-
|
|
198999
|
-
|
|
199000
|
-
|
|
199001
|
-
|
|
199308
|
+
return;
|
|
199309
|
+
}
|
|
199310
|
+
function extractBlockRanges2(compiled) {
|
|
199311
|
+
const result = new Map;
|
|
199312
|
+
for (const target of compiled.targets) {
|
|
199313
|
+
if (target.kind === "range") {
|
|
199314
|
+
pushBlockRange2(result, target.blockId, target.from, target.to);
|
|
199315
|
+
} else {
|
|
199316
|
+
for (const seg of target.segments) {
|
|
199317
|
+
pushBlockRange2(result, seg.blockId, seg.from, seg.to);
|
|
199002
199318
|
}
|
|
199003
199319
|
}
|
|
199004
199320
|
}
|
|
199321
|
+
return result;
|
|
199005
199322
|
}
|
|
199006
|
-
function
|
|
199007
|
-
let
|
|
199008
|
-
if (!
|
|
199009
|
-
|
|
199010
|
-
map6.set(blockId,
|
|
199323
|
+
function pushBlockRange2(map6, blockId, from3, to) {
|
|
199324
|
+
let entries = map6.get(blockId);
|
|
199325
|
+
if (!entries) {
|
|
199326
|
+
entries = [];
|
|
199327
|
+
map6.set(blockId, entries);
|
|
199328
|
+
}
|
|
199329
|
+
entries.push({ from: from3, to });
|
|
199330
|
+
}
|
|
199331
|
+
function validateStepInteractions2(steps) {
|
|
199332
|
+
for (let i4 = 0;i4 < steps.length; i4++) {
|
|
199333
|
+
for (let j2 = i4 + 1;j2 < steps.length; j2++) {
|
|
199334
|
+
const stepA = steps[i4];
|
|
199335
|
+
const stepB = steps[j2];
|
|
199336
|
+
if (MATRIX_EXEMPT_OPS2.has(stepA.step.op) || MATRIX_EXEMPT_OPS2.has(stepB.step.op))
|
|
199337
|
+
continue;
|
|
199338
|
+
const overlap = classifyOverlap2(stepA, stepB);
|
|
199339
|
+
if (!overlap)
|
|
199340
|
+
continue;
|
|
199341
|
+
const opA = normalizeOpForMatrix2(stepA.step.op);
|
|
199342
|
+
const opB = normalizeOpForMatrix2(stepB.step.op);
|
|
199343
|
+
const matrixKey = `${opA}::${opB}::${overlap.overlapClass}`;
|
|
199344
|
+
const verdict = STEP_INTERACTION_MATRIX2.get(matrixKey) ?? "reject";
|
|
199345
|
+
if (verdict === "reject") {
|
|
199346
|
+
throw planError2("PLAN_CONFLICT_OVERLAP", `steps "${stepA.step.id}" and "${stepB.step.id}" target overlapping ranges in block "${overlap.blockId}"`, stepB.step.id, {
|
|
199347
|
+
blockId: overlap.blockId,
|
|
199348
|
+
stepIdA: stepA.step.id,
|
|
199349
|
+
stepIdB: stepB.step.id,
|
|
199350
|
+
opKeyA: stepA.step.op,
|
|
199351
|
+
opKeyB: stepB.step.op,
|
|
199352
|
+
rangeA: overlap.rangeA,
|
|
199353
|
+
rangeB: overlap.rangeB,
|
|
199354
|
+
overlapRegion: {
|
|
199355
|
+
from: Math.max(overlap.rangeA.from, overlap.rangeB.from),
|
|
199356
|
+
to: Math.min(overlap.rangeA.to, overlap.rangeB.to)
|
|
199357
|
+
},
|
|
199358
|
+
matrixVerdict: verdict,
|
|
199359
|
+
matrixKey
|
|
199360
|
+
});
|
|
199361
|
+
}
|
|
199362
|
+
}
|
|
199363
|
+
}
|
|
199364
|
+
}
|
|
199365
|
+
function assertNoDuplicateBlockIds2(index2) {
|
|
199366
|
+
const seen = new Map;
|
|
199367
|
+
const duplicates = [];
|
|
199368
|
+
for (const candidate of index2.candidates) {
|
|
199369
|
+
const count = seen.get(candidate.nodeId) ?? 0;
|
|
199370
|
+
seen.set(candidate.nodeId, count + 1);
|
|
199371
|
+
if (count === 1)
|
|
199372
|
+
duplicates.push(candidate.nodeId);
|
|
199373
|
+
}
|
|
199374
|
+
if (duplicates.length > 0) {
|
|
199375
|
+
throw planError2("DOCUMENT_IDENTITY_CONFLICT", "Document contains blocks with duplicate identities. This must be resolved before mutations can be applied.", undefined, {
|
|
199376
|
+
duplicateBlockIds: duplicates,
|
|
199377
|
+
blockCount: duplicates.length,
|
|
199378
|
+
remediation: "Re-import the document or call document.repair() to assign unique identities."
|
|
199379
|
+
});
|
|
199011
199380
|
}
|
|
199012
|
-
blockRanges.push({ stepId, from: from3, to });
|
|
199013
199381
|
}
|
|
199014
199382
|
function compilePlan2(editor, steps) {
|
|
199015
199383
|
if (steps.length > MAX_PLAN_STEPS) {
|
|
199016
199384
|
throw planError2("INVALID_INPUT", `plan contains ${steps.length} steps, maximum is ${MAX_PLAN_STEPS}`);
|
|
199017
199385
|
}
|
|
199386
|
+
const compiledRevision = getRevision2(editor);
|
|
199018
199387
|
const index2 = getBlockIndex2(editor);
|
|
199388
|
+
assertNoDuplicateBlockIds2(index2);
|
|
199019
199389
|
const mutationSteps = [];
|
|
199020
199390
|
const assertSteps = [];
|
|
199021
199391
|
const seenIds = new Set;
|
|
@@ -199029,25 +199399,36 @@ function compilePlan2(editor, steps) {
|
|
|
199029
199399
|
seenIds.add(step.id);
|
|
199030
199400
|
}
|
|
199031
199401
|
let totalTargets = 0;
|
|
199402
|
+
let stepIndex = 0;
|
|
199032
199403
|
for (const step of steps) {
|
|
199033
199404
|
if (isAssertStep2(step)) {
|
|
199034
199405
|
assertSteps.push(step);
|
|
199406
|
+
stepIndex++;
|
|
199035
199407
|
continue;
|
|
199036
199408
|
}
|
|
199037
199409
|
if (!hasStepExecutor2(step.op)) {
|
|
199038
199410
|
throw planError2("INVALID_INPUT", `unknown step op "${step.op}"`, step.id);
|
|
199039
199411
|
}
|
|
199412
|
+
if (isCreateOp2(step.op)) {
|
|
199413
|
+
validateCreateStepPosition2(step);
|
|
199414
|
+
}
|
|
199040
199415
|
const targets = resolveStepTargets2(editor, index2, step);
|
|
199416
|
+
if (isCreateOp2(step.op) && targets.length > 0) {
|
|
199417
|
+
const position4 = step.args.position ?? "after";
|
|
199418
|
+
const anchorBlockId = resolveCreateAnchorFromTargets2(targets, position4, step.id);
|
|
199419
|
+
validateInsertionContext2(editor, index2, step, stepIndex, anchorBlockId, position4);
|
|
199420
|
+
}
|
|
199041
199421
|
totalTargets += targets.length;
|
|
199042
199422
|
mutationSteps.push({ step, targets });
|
|
199423
|
+
stepIndex++;
|
|
199043
199424
|
}
|
|
199044
199425
|
if (totalTargets > MAX_PLAN_RESOLVED_TARGETS) {
|
|
199045
199426
|
throw planError2("INVALID_INPUT", `plan resolved ${totalTargets} total targets, maximum is ${MAX_PLAN_RESOLVED_TARGETS}`);
|
|
199046
199427
|
}
|
|
199047
|
-
|
|
199048
|
-
return { mutationSteps, assertSteps };
|
|
199428
|
+
validateStepInteractions2(mutationSteps);
|
|
199429
|
+
return { mutationSteps, assertSteps, compiledRevision };
|
|
199049
199430
|
}
|
|
199050
|
-
var REF_HANDLERS2;
|
|
199431
|
+
var VALID_CREATE_POSITIONS2, REF_HANDLERS2, STEP_INTERACTION_MATRIX2, MATRIX_EXEMPT_OPS2;
|
|
199051
199432
|
var init_compiler = __esm(() => {
|
|
199052
199433
|
init_src();
|
|
199053
199434
|
init_errors4();
|
|
@@ -199058,6 +199439,7 @@ var init_compiler = __esm(() => {
|
|
|
199058
199439
|
init_text_strategy();
|
|
199059
199440
|
init_block_strategy();
|
|
199060
199441
|
init_node_address_resolver();
|
|
199442
|
+
VALID_CREATE_POSITIONS2 = ["before", "after"];
|
|
199061
199443
|
REF_HANDLERS2 = [
|
|
199062
199444
|
{ prefix: "text:", handler: resolveTextRef2 },
|
|
199063
199445
|
{
|
|
@@ -199074,6 +199456,48 @@ var init_compiler = __esm(() => {
|
|
|
199074
199456
|
},
|
|
199075
199457
|
{ prefix: "", handler: resolveBlockRef2 }
|
|
199076
199458
|
];
|
|
199459
|
+
STEP_INTERACTION_MATRIX2 = new Map([
|
|
199460
|
+
["text.rewrite::format.apply::same_target", "allow"],
|
|
199461
|
+
["text.rewrite::text.rewrite::same_target", "reject"],
|
|
199462
|
+
["text.rewrite::text.delete::overlapping", "reject"],
|
|
199463
|
+
["text.rewrite::create.*::same_block", "allow"],
|
|
199464
|
+
["text.rewrite::text.insert::same_target", "reject"],
|
|
199465
|
+
["format.apply::format.apply::same_target", "allow"],
|
|
199466
|
+
["format.apply::text.rewrite::same_target", "reject"],
|
|
199467
|
+
["format.apply::text.delete::overlapping", "reject"],
|
|
199468
|
+
["format.apply::create.*::same_block", "allow"],
|
|
199469
|
+
["format.apply::text.insert::same_target", "allow"],
|
|
199470
|
+
["text.delete::text.rewrite::overlapping", "reject"],
|
|
199471
|
+
["text.delete::text.delete::overlapping", "reject"],
|
|
199472
|
+
["text.delete::format.apply::overlapping", "reject"],
|
|
199473
|
+
["text.delete::create.*::same_block", "allow"],
|
|
199474
|
+
["text.delete::text.insert::overlapping", "reject"],
|
|
199475
|
+
["create.*::text.rewrite::same_block", "allow"],
|
|
199476
|
+
["create.*::format.apply::same_block", "allow"],
|
|
199477
|
+
["create.*::text.delete::same_block", "allow"],
|
|
199478
|
+
["create.*::create.*::same_block", "allow"],
|
|
199479
|
+
["create.*::text.insert::same_block", "allow"],
|
|
199480
|
+
["text.insert::format.apply::same_target", "allow"],
|
|
199481
|
+
["text.insert::text.rewrite::same_target", "reject"],
|
|
199482
|
+
["text.insert::text.delete::overlapping", "reject"],
|
|
199483
|
+
["text.insert::create.*::same_block", "allow"],
|
|
199484
|
+
["text.insert::text.insert::same_target", "reject"]
|
|
199485
|
+
]);
|
|
199486
|
+
MATRIX_EXEMPT_OPS2 = new Set(["assert"]);
|
|
199487
|
+
});
|
|
199488
|
+
|
|
199489
|
+
// ../../packages/super-editor/src/document-api-adapters/plan-engine/create-insertion.ts
|
|
199490
|
+
function resolveBlockInsertionPos2(editor, anchorBlockId, position4, stepId) {
|
|
199491
|
+
const index2 = getBlockIndex2(editor);
|
|
199492
|
+
const candidate = index2.candidates.find((c2) => c2.nodeId === anchorBlockId);
|
|
199493
|
+
if (!candidate) {
|
|
199494
|
+
throw planError2("TARGET_NOT_FOUND", `block "${anchorBlockId}" not found`, stepId);
|
|
199495
|
+
}
|
|
199496
|
+
return position4 === "before" ? candidate.pos : candidate.end;
|
|
199497
|
+
}
|
|
199498
|
+
var init_create_insertion = __esm(() => {
|
|
199499
|
+
init_index_cache();
|
|
199500
|
+
init_errors4();
|
|
199077
199501
|
});
|
|
199078
199502
|
|
|
199079
199503
|
// ../../packages/super-editor/src/document-api-adapters/helpers/transaction-meta.ts
|
|
@@ -199141,12 +199565,36 @@ function buildMarksFromSetMarks2(editor, setMarks) {
|
|
|
199141
199565
|
marks.push(schema.marks.strike.create());
|
|
199142
199566
|
return marks;
|
|
199143
199567
|
}
|
|
199144
|
-
function
|
|
199145
|
-
const
|
|
199146
|
-
|
|
199147
|
-
|
|
199148
|
-
|
|
199149
|
-
|
|
199568
|
+
function applyInlineMarkPatches2(editor, tr, absFrom, absTo, inline) {
|
|
199569
|
+
const { schema } = editor.state;
|
|
199570
|
+
let changed = false;
|
|
199571
|
+
const markEntries = [
|
|
199572
|
+
[inline.bold, schema.marks.bold],
|
|
199573
|
+
[inline.italic, schema.marks.italic],
|
|
199574
|
+
[inline.underline, schema.marks.underline],
|
|
199575
|
+
[inline.strike, schema.marks.strike]
|
|
199576
|
+
];
|
|
199577
|
+
for (const [value, markType] of markEntries) {
|
|
199578
|
+
if (value === undefined || !markType)
|
|
199579
|
+
continue;
|
|
199580
|
+
if (value) {
|
|
199581
|
+
tr.addMark(absFrom, absTo, markType.create());
|
|
199582
|
+
} else {
|
|
199583
|
+
tr.removeMark(absFrom, absTo, markType);
|
|
199584
|
+
}
|
|
199585
|
+
changed = true;
|
|
199586
|
+
}
|
|
199587
|
+
return changed;
|
|
199588
|
+
}
|
|
199589
|
+
function resolveCreateAnchorBlockId2(target, position4, stepId) {
|
|
199590
|
+
if (target.kind === "range") {
|
|
199591
|
+
return target.blockId;
|
|
199592
|
+
}
|
|
199593
|
+
const segments = target.segments;
|
|
199594
|
+
if (!segments.length) {
|
|
199595
|
+
throw planError2("INVALID_INPUT", "span target has no segments", stepId);
|
|
199596
|
+
}
|
|
199597
|
+
return position4 === "before" ? segments[0].blockId : segments[segments.length - 1].blockId;
|
|
199150
199598
|
}
|
|
199151
199599
|
function executeTextRewrite2(editor, tr, target, step, mapping) {
|
|
199152
199600
|
const absFrom = mapping.map(target.absFrom);
|
|
@@ -199193,25 +199641,7 @@ function executeTextDelete2(_editor, tr, target, _step, mapping) {
|
|
|
199193
199641
|
function executeStyleApply3(editor, tr, target, step, mapping) {
|
|
199194
199642
|
const absFrom = mapping.map(target.absFrom);
|
|
199195
199643
|
const absTo = mapping.map(target.absTo);
|
|
199196
|
-
|
|
199197
|
-
let changed = false;
|
|
199198
|
-
const markEntries = [
|
|
199199
|
-
["bold", step.args.inline.bold, schema.marks.bold],
|
|
199200
|
-
["italic", step.args.inline.italic, schema.marks.italic],
|
|
199201
|
-
["underline", step.args.inline.underline, schema.marks.underline],
|
|
199202
|
-
["strike", step.args.inline.strike, schema.marks.strike]
|
|
199203
|
-
];
|
|
199204
|
-
for (const [, value, markType] of markEntries) {
|
|
199205
|
-
if (value === undefined || !markType)
|
|
199206
|
-
continue;
|
|
199207
|
-
if (value) {
|
|
199208
|
-
tr.addMark(absFrom, absTo, markType.create());
|
|
199209
|
-
} else {
|
|
199210
|
-
tr.removeMark(absFrom, absTo, markType);
|
|
199211
|
-
}
|
|
199212
|
-
changed = true;
|
|
199213
|
-
}
|
|
199214
|
-
return { changed };
|
|
199644
|
+
return { changed: applyInlineMarkPatches2(editor, tr, absFrom, absTo, step.args.inline) };
|
|
199215
199645
|
}
|
|
199216
199646
|
function validateMappedSpanContiguity2(target, mapping, stepId) {
|
|
199217
199647
|
let lastMappedEnd = -1;
|
|
@@ -199282,29 +199712,11 @@ function executeSpanTextDelete2(_editor, tr, target, step, mapping) {
|
|
|
199282
199712
|
}
|
|
199283
199713
|
function executeSpanStyleApply2(editor, tr, target, step, mapping) {
|
|
199284
199714
|
validateMappedSpanContiguity2(target, mapping, step.id);
|
|
199285
|
-
const { schema } = editor.state;
|
|
199286
|
-
let changed = false;
|
|
199287
199715
|
const firstSeg = target.segments[0];
|
|
199288
199716
|
const lastSeg = target.segments[target.segments.length - 1];
|
|
199289
199717
|
const absFrom = mapping.map(firstSeg.absFrom, 1);
|
|
199290
199718
|
const absTo = mapping.map(lastSeg.absTo, -1);
|
|
199291
|
-
|
|
199292
|
-
["bold", step.args.inline.bold, schema.marks.bold],
|
|
199293
|
-
["italic", step.args.inline.italic, schema.marks.italic],
|
|
199294
|
-
["underline", step.args.inline.underline, schema.marks.underline],
|
|
199295
|
-
["strike", step.args.inline.strike, schema.marks.strike]
|
|
199296
|
-
];
|
|
199297
|
-
for (const [, value, markType] of markEntries) {
|
|
199298
|
-
if (value === undefined || !markType)
|
|
199299
|
-
continue;
|
|
199300
|
-
if (value) {
|
|
199301
|
-
tr.addMark(absFrom, absTo, markType.create());
|
|
199302
|
-
} else {
|
|
199303
|
-
tr.removeMark(absFrom, absTo, markType);
|
|
199304
|
-
}
|
|
199305
|
-
changed = true;
|
|
199306
|
-
}
|
|
199307
|
-
return { changed };
|
|
199719
|
+
return { changed: applyInlineMarkPatches2(editor, tr, absFrom, absTo, step.args.inline) };
|
|
199308
199720
|
}
|
|
199309
199721
|
function getReplacementText2(replacement) {
|
|
199310
199722
|
if (replacement.blocks !== undefined) {
|
|
@@ -199503,11 +199915,14 @@ function executeAssertStep2(_editor, tr, step) {
|
|
|
199503
199915
|
}
|
|
199504
199916
|
function executeCreateStep2(editor, tr, step, targets, mapping) {
|
|
199505
199917
|
const target = targets[0];
|
|
199506
|
-
if (!target
|
|
199507
|
-
throw planError2("INVALID_INPUT", `${step.op} step requires
|
|
199918
|
+
if (!target) {
|
|
199919
|
+
throw planError2("INVALID_INPUT", `${step.op} step requires at least one target`, step.id);
|
|
199508
199920
|
}
|
|
199509
199921
|
const args3 = step.args;
|
|
199510
|
-
const
|
|
199922
|
+
const position4 = args3.position ?? "after";
|
|
199923
|
+
const anchorBlockId = resolveCreateAnchorBlockId2(target, position4, step.id);
|
|
199924
|
+
const anchorPos = resolveBlockInsertionPos2(editor, anchorBlockId, position4, step.id);
|
|
199925
|
+
const pos = mapping.map(anchorPos);
|
|
199511
199926
|
const paragraphType = editor.state.schema?.nodes?.paragraph;
|
|
199512
199927
|
if (!paragraphType) {
|
|
199513
199928
|
throw planError2("INVALID_INPUT", "paragraph node type not in schema", step.id);
|
|
@@ -199530,6 +199945,7 @@ function executeCreateStep2(editor, tr, step, targets, mapping) {
|
|
|
199530
199945
|
throw planError2("INVALID_INPUT", `could not create ${step.op} node`, step.id);
|
|
199531
199946
|
}
|
|
199532
199947
|
tr.insert(pos, node3);
|
|
199948
|
+
assertNoPostInsertDuplicateIds2(tr.doc, step.id);
|
|
199533
199949
|
return {
|
|
199534
199950
|
stepId: step.id,
|
|
199535
199951
|
op: step.op,
|
|
@@ -199538,6 +199954,32 @@ function executeCreateStep2(editor, tr, step, targets, mapping) {
|
|
|
199538
199954
|
data: { domain: "text", resolutions: [] }
|
|
199539
199955
|
};
|
|
199540
199956
|
}
|
|
199957
|
+
function assertNoPostInsertDuplicateIds2(doc4, stepId) {
|
|
199958
|
+
const seen = new Set;
|
|
199959
|
+
const duplicateSet = new Set;
|
|
199960
|
+
doc4.descendants((node3) => {
|
|
199961
|
+
if (!node3.isTextblock)
|
|
199962
|
+
return true;
|
|
199963
|
+
const attrs = node3.attrs ?? {};
|
|
199964
|
+
const id2 = typeof attrs.paraId === "string" && attrs.paraId || typeof attrs.sdBlockId === "string" && attrs.sdBlockId || typeof attrs.nodeId === "string" && attrs.nodeId;
|
|
199965
|
+
if (!id2)
|
|
199966
|
+
return true;
|
|
199967
|
+
if (seen.has(id2)) {
|
|
199968
|
+
duplicateSet.add(id2);
|
|
199969
|
+
} else {
|
|
199970
|
+
seen.add(id2);
|
|
199971
|
+
}
|
|
199972
|
+
return true;
|
|
199973
|
+
});
|
|
199974
|
+
if (duplicateSet.size > 0) {
|
|
199975
|
+
const duplicates = [...duplicateSet];
|
|
199976
|
+
throw planError2("INTERNAL_ERROR", `create step produced duplicate block identities: [${duplicates.join(", ")}]`, stepId, {
|
|
199977
|
+
source: "executor:checkPostInsertIdentityUniqueness",
|
|
199978
|
+
invariant: "post-insert block IDs must be unique",
|
|
199979
|
+
duplicateBlockIds: duplicates
|
|
199980
|
+
});
|
|
199981
|
+
}
|
|
199982
|
+
}
|
|
199541
199983
|
function runMutationsOnTransaction2(editor, tr, compiled, options) {
|
|
199542
199984
|
const mapping = tr.mapping;
|
|
199543
199985
|
const stepOutcomes = [];
|
|
@@ -199586,6 +200028,15 @@ function executeCompiledPlan2(editor, compiled, options = {}) {
|
|
|
199586
200028
|
const startTime = performance.now();
|
|
199587
200029
|
const revisionBefore = getRevision2(editor);
|
|
199588
200030
|
checkRevision2(editor, options.expectedRevision);
|
|
200031
|
+
if (compiled.compiledRevision !== revisionBefore) {
|
|
200032
|
+
throw planError2("REVISION_CHANGED_SINCE_COMPILE", `Document revision changed between compile and execute. Compiled at "${compiled.compiledRevision}", now at "${revisionBefore}".`, undefined, {
|
|
200033
|
+
compiledRevision: compiled.compiledRevision,
|
|
200034
|
+
currentRevision: revisionBefore,
|
|
200035
|
+
stepCount: compiled.mutationSteps.length,
|
|
200036
|
+
failedAtStep: "pre-execution",
|
|
200037
|
+
remediation: "Re-compile the plan against the current document state."
|
|
200038
|
+
});
|
|
200039
|
+
}
|
|
199589
200040
|
const tr = editor.state.tr;
|
|
199590
200041
|
const changeMode = options.changeMode ?? "direct";
|
|
199591
200042
|
if (changeMode === "tracked") {
|
|
@@ -199626,6 +200077,7 @@ var init_executor = __esm(() => {
|
|
|
199626
200077
|
init_revision_tracker();
|
|
199627
200078
|
init_compiler();
|
|
199628
200079
|
init_index_cache();
|
|
200080
|
+
init_create_insertion();
|
|
199629
200081
|
init_style_resolver();
|
|
199630
200082
|
init_node_address_resolver();
|
|
199631
200083
|
init_adapter_utils();
|
|
@@ -199795,7 +200247,11 @@ function executeDomainCommand2(editor, handler2, options) {
|
|
|
199795
200247
|
args: {},
|
|
199796
200248
|
_handler: handler2
|
|
199797
200249
|
};
|
|
199798
|
-
const compiled = {
|
|
200250
|
+
const compiled = {
|
|
200251
|
+
mutationSteps: [{ step, targets: [] }],
|
|
200252
|
+
assertSteps: [],
|
|
200253
|
+
compiledRevision: getRevision2(editor)
|
|
200254
|
+
};
|
|
199799
200255
|
return executeCompiledPlan2(editor, compiled, { expectedRevision: options?.expectedRevision });
|
|
199800
200256
|
}
|
|
199801
200257
|
function validateWriteRequest2(request, resolved) {
|
|
@@ -199871,7 +200327,8 @@ function writeWrapper2(editor, request, options) {
|
|
|
199871
200327
|
const target = toCompiledTarget2(stepId, op, resolved);
|
|
199872
200328
|
const compiled = {
|
|
199873
200329
|
mutationSteps: [{ step, targets: [target] }],
|
|
199874
|
-
assertSteps: []
|
|
200330
|
+
assertSteps: [],
|
|
200331
|
+
compiledRevision: getRevision2(editor)
|
|
199875
200332
|
};
|
|
199876
200333
|
const receipt2 = executeCompiledPlan2(editor, compiled, {
|
|
199877
200334
|
changeMode: mode,
|
|
@@ -199935,7 +200392,8 @@ function styleApplyWrapper2(editor, input2, options) {
|
|
|
199935
200392
|
};
|
|
199936
200393
|
const compiled = {
|
|
199937
200394
|
mutationSteps: [{ step, targets: [target] }],
|
|
199938
|
-
assertSteps: []
|
|
200395
|
+
assertSteps: [],
|
|
200396
|
+
compiledRevision: getRevision2(editor)
|
|
199939
200397
|
};
|
|
199940
200398
|
const receipt2 = executeCompiledPlan2(editor, compiled, {
|
|
199941
200399
|
changeMode: mode,
|
|
@@ -199947,6 +200405,7 @@ var STUB_WHERE2, MARK_KEY_TO_SCHEMA_NAME2;
|
|
|
199947
200405
|
var init_plan_wrappers = __esm(() => {
|
|
199948
200406
|
init_wrapper();
|
|
199949
200407
|
init_executor();
|
|
200408
|
+
init_revision_tracker();
|
|
199950
200409
|
init_errors3();
|
|
199951
200410
|
init_adapter_utils();
|
|
199952
200411
|
init_mutation_helpers();
|
|
@@ -201067,14 +201526,7 @@ function resolveCreateInsertPosition2(editor, at, operationLabel) {
|
|
|
201067
201526
|
return 0;
|
|
201068
201527
|
if (location3.kind === "documentEnd")
|
|
201069
201528
|
return editor.state.doc.content.size;
|
|
201070
|
-
|
|
201071
|
-
const target = findBlockById2(index2, location3.target);
|
|
201072
|
-
if (!target) {
|
|
201073
|
-
throw new DocumentApiAdapterError3("TARGET_NOT_FOUND", `Create ${operationLabel} target block was not found.`, {
|
|
201074
|
-
target: location3.target
|
|
201075
|
-
});
|
|
201076
|
-
}
|
|
201077
|
-
return location3.kind === "before" ? target.pos : target.end;
|
|
201529
|
+
return resolveBlockInsertionPos2(editor, location3.target.nodeId, location3.kind);
|
|
201078
201530
|
}
|
|
201079
201531
|
function resolveCreatedBlock2(editor, nodeType, blockId) {
|
|
201080
201532
|
const index2 = getBlockIndex2(editor);
|
|
@@ -201180,7 +201632,10 @@ function createParagraphWrapper2(editor, input2, options) {
|
|
|
201180
201632
|
if (mode === "tracked") {
|
|
201181
201633
|
trackedChangeRefs = collectTrackInsertRefsInRange2(editor, paragraph2.pos, paragraph2.end);
|
|
201182
201634
|
}
|
|
201183
|
-
} catch {
|
|
201635
|
+
} catch (e) {
|
|
201636
|
+
if (!(e instanceof DocumentApiAdapterError3))
|
|
201637
|
+
throw e;
|
|
201638
|
+
}
|
|
201184
201639
|
}
|
|
201185
201640
|
return didApply;
|
|
201186
201641
|
}, { expectedRevision: options?.expectedRevision });
|
|
@@ -201249,7 +201704,10 @@ function createHeadingWrapper2(editor, input2, options) {
|
|
|
201249
201704
|
if (mode === "tracked") {
|
|
201250
201705
|
trackedChangeRefs = collectTrackInsertRefsInRange2(editor, heading3.pos, heading3.end);
|
|
201251
201706
|
}
|
|
201252
|
-
} catch {
|
|
201707
|
+
} catch (e) {
|
|
201708
|
+
if (!(e instanceof DocumentApiAdapterError3))
|
|
201709
|
+
throw e;
|
|
201710
|
+
}
|
|
201253
201711
|
}
|
|
201254
201712
|
return didApply;
|
|
201255
201713
|
}, { expectedRevision: options?.expectedRevision });
|
|
@@ -201267,7 +201725,7 @@ function createHeadingWrapper2(editor, input2, options) {
|
|
|
201267
201725
|
var init_create_wrappers = __esm(() => {
|
|
201268
201726
|
init_wrapper();
|
|
201269
201727
|
init_index_cache();
|
|
201270
|
-
|
|
201728
|
+
init_create_insertion();
|
|
201271
201729
|
init_tracked_change_refs();
|
|
201272
201730
|
init_errors3();
|
|
201273
201731
|
init_mutation_helpers();
|
|
@@ -235692,7 +236150,6 @@ var init_track_changes_wrappers = __esm(() => {
|
|
|
235692
236150
|
|
|
235693
236151
|
// ../../packages/super-editor/src/document-api-adapters/plan-engine/preview.ts
|
|
235694
236152
|
function previewPlan2(editor, input2) {
|
|
235695
|
-
const evaluatedRevision = getRevision2(editor);
|
|
235696
236153
|
checkRevision2(editor, input2.expectedRevision);
|
|
235697
236154
|
if (!input2.steps?.length) {
|
|
235698
236155
|
throw planError2("INVALID_INPUT", "plan must contain at least one step");
|
|
@@ -235700,8 +236157,10 @@ function previewPlan2(editor, input2) {
|
|
|
235700
236157
|
const failures = [];
|
|
235701
236158
|
const stepPreviews = [];
|
|
235702
236159
|
let currentPhase = "compile";
|
|
236160
|
+
let evaluatedRevision = getRevision2(editor);
|
|
235703
236161
|
try {
|
|
235704
236162
|
const compiled = compilePlan2(editor, input2.steps);
|
|
236163
|
+
evaluatedRevision = compiled.compiledRevision;
|
|
235705
236164
|
currentPhase = "execute";
|
|
235706
236165
|
const tr = editor.state.tr;
|
|
235707
236166
|
const { stepOutcomes, assertFailures } = runMutationsOnTransaction2(editor, tr, compiled, {
|
|
@@ -236269,7 +236728,13 @@ function queryMatchAdapter2(editor, input2) {
|
|
|
236269
236728
|
const paginatedMatches = isTextSelector ? applyPagination2(rawMatches, userOffset, input2.limit) : rawMatches;
|
|
236270
236729
|
if (require2 === "first" || require2 === "exactlyOne" || require2 === "all") {
|
|
236271
236730
|
if (totalMatches === 0) {
|
|
236272
|
-
throw planError2("MATCH_NOT_FOUND", "selector matched zero ranges"
|
|
236731
|
+
throw planError2("MATCH_NOT_FOUND", "selector matched zero ranges", undefined, {
|
|
236732
|
+
selectorType: input2.select?.type ?? "unknown",
|
|
236733
|
+
selectorPattern: input2.select?.pattern ?? "",
|
|
236734
|
+
selectorMode: input2.select?.mode ?? "contains",
|
|
236735
|
+
searchScope: (input2.within?.kind === "block" ? input2.within.nodeId : undefined) ?? "document",
|
|
236736
|
+
candidateCount: 0
|
|
236737
|
+
});
|
|
236273
236738
|
}
|
|
236274
236739
|
}
|
|
236275
236740
|
if (require2 === "exactlyOne" && totalMatches > 1) {
|
|
@@ -236282,7 +236747,11 @@ function queryMatchAdapter2(editor, input2) {
|
|
|
236282
236747
|
if (isTextSelector && raw.textRanges?.length) {
|
|
236283
236748
|
const blocks2 = buildMatchBlocks2(editor, raw.textRanges, evaluatedRevision, id2);
|
|
236284
236749
|
if (blocks2.length === 0) {
|
|
236285
|
-
throw planError2("INTERNAL_ERROR", `text match produced no blocks for ${id2}
|
|
236750
|
+
throw planError2("INTERNAL_ERROR", `text match produced no blocks for ${id2}`, undefined, {
|
|
236751
|
+
source: "query-match-adapter:buildMatchEntries",
|
|
236752
|
+
invariant: "text match must have at least one block after zero-width filtering",
|
|
236753
|
+
context: { matchId: id2 }
|
|
236754
|
+
});
|
|
236286
236755
|
}
|
|
236287
236756
|
const snippetResult = buildBlocksSnippet2(editor, blocks2);
|
|
236288
236757
|
const segments = blocks2.map((b4) => ({ blockId: b4.blockId, start: b4.range.start, end: b4.range.end }));
|
|
@@ -239496,6 +239965,9 @@ function mapListsError(operationId, error, code7) {
|
|
|
239496
239965
|
function mapTextMutationError(operationId, error, code7) {
|
|
239497
239966
|
const message = extractErrorMessage(error);
|
|
239498
239967
|
const details = extractErrorDetails(error);
|
|
239968
|
+
const planEngineError = tryMapPlanEngineError(operationId, error, code7);
|
|
239969
|
+
if (planEngineError)
|
|
239970
|
+
return planEngineError;
|
|
239499
239971
|
if (code7 === "TARGET_NOT_FOUND") {
|
|
239500
239972
|
return new CliError("TARGET_NOT_FOUND", message, { operationId, details });
|
|
239501
239973
|
}
|
|
@@ -239515,6 +239987,9 @@ function mapTextMutationError(operationId, error, code7) {
|
|
|
239515
239987
|
function mapCreateError(operationId, error, code7) {
|
|
239516
239988
|
const message = extractErrorMessage(error);
|
|
239517
239989
|
const details = extractErrorDetails(error);
|
|
239990
|
+
const planEngineError = tryMapPlanEngineError(operationId, error, code7);
|
|
239991
|
+
if (planEngineError)
|
|
239992
|
+
return planEngineError;
|
|
239518
239993
|
if (code7 === "TARGET_NOT_FOUND") {
|
|
239519
239994
|
return new CliError("TARGET_NOT_FOUND", message, { operationId, details });
|
|
239520
239995
|
}
|
|
@@ -239571,6 +240046,14 @@ function mapQueryError(operationId, error, code7) {
|
|
|
239571
240046
|
return error;
|
|
239572
240047
|
return new CliError("COMMAND_FAILED", message, { operationId, details });
|
|
239573
240048
|
}
|
|
240049
|
+
function tryMapPlanEngineError(operationId, error, code7) {
|
|
240050
|
+
if (!code7 || !PLAN_ENGINE_PASSTHROUGH_CODES.has(code7))
|
|
240051
|
+
return null;
|
|
240052
|
+
return new CliError(code7, extractErrorMessage(error), {
|
|
240053
|
+
operationId,
|
|
240054
|
+
details: extractErrorDetails(error)
|
|
240055
|
+
});
|
|
240056
|
+
}
|
|
239574
240057
|
function mapInvokeError(operationId, error) {
|
|
239575
240058
|
if (error instanceof CliError)
|
|
239576
240059
|
return error;
|
|
@@ -239595,6 +240078,9 @@ function mapFailedReceipt(operationId, result) {
|
|
|
239595
240078
|
}
|
|
239596
240079
|
const failureCode = failure.code;
|
|
239597
240080
|
const failureMessage = failure.message ?? `${operationId}: operation failed.`;
|
|
240081
|
+
if (failureCode && PLAN_ENGINE_PASSTHROUGH_CODES.has(failureCode)) {
|
|
240082
|
+
return new CliError(failureCode, failureMessage, { operationId, failure });
|
|
240083
|
+
}
|
|
239598
240084
|
if (family === "trackChanges") {
|
|
239599
240085
|
if (failureCode === "TRACK_CHANGE_COMMAND_UNAVAILABLE") {
|
|
239600
240086
|
return new CliError("TRACK_CHANGE_COMMAND_UNAVAILABLE", failureMessage, { operationId, failure });
|
|
@@ -239648,10 +240134,23 @@ function mapFailedReceipt(operationId, result) {
|
|
|
239648
240134
|
}
|
|
239649
240135
|
return new CliError("COMMAND_FAILED", failureMessage, { operationId, failure });
|
|
239650
240136
|
}
|
|
239651
|
-
var FAMILY_MAPPERS;
|
|
240137
|
+
var PLAN_ENGINE_PASSTHROUGH_CODES, FAMILY_MAPPERS;
|
|
239652
240138
|
var init_error_mapping = __esm(() => {
|
|
239653
240139
|
init_operation_hints();
|
|
239654
240140
|
init_errors();
|
|
240141
|
+
PLAN_ENGINE_PASSTHROUGH_CODES = new Set([
|
|
240142
|
+
"REVISION_MISMATCH",
|
|
240143
|
+
"REVISION_CHANGED_SINCE_COMPILE",
|
|
240144
|
+
"PLAN_CONFLICT_OVERLAP",
|
|
240145
|
+
"DOCUMENT_IDENTITY_CONFLICT",
|
|
240146
|
+
"INVALID_INSERTION_CONTEXT",
|
|
240147
|
+
"INVALID_INPUT",
|
|
240148
|
+
"INVALID_STEP_COMBINATION",
|
|
240149
|
+
"MATCH_NOT_FOUND",
|
|
240150
|
+
"PRECONDITION_FAILED",
|
|
240151
|
+
"CROSS_BLOCK_MATCH",
|
|
240152
|
+
"SPAN_FRAGMENTED"
|
|
240153
|
+
]);
|
|
239655
240154
|
FAMILY_MAPPERS = {
|
|
239656
240155
|
trackChanges: mapTrackChangesError,
|
|
239657
240156
|
comments: mapCommentsError,
|
|
@@ -239660,7 +240159,10 @@ var init_error_mapping = __esm(() => {
|
|
|
239660
240159
|
create: mapCreateError,
|
|
239661
240160
|
blocks: mapBlocksError,
|
|
239662
240161
|
query: mapQueryError,
|
|
239663
|
-
general: (operationId, error) => {
|
|
240162
|
+
general: (operationId, error, code7) => {
|
|
240163
|
+
const planEngineError = tryMapPlanEngineError(operationId, error, code7);
|
|
240164
|
+
if (planEngineError)
|
|
240165
|
+
return planEngineError;
|
|
239664
240166
|
if (error instanceof CliError)
|
|
239665
240167
|
return error;
|
|
239666
240168
|
return new CliError("COMMAND_FAILED", extractErrorMessage(error), { operationId });
|