@superdoc-dev/cli 0.2.0-next.7 → 0.2.0-next.9
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 +783 -260
- package/package.json +8 -8
package/dist/index.js
CHANGED
|
@@ -5,25 +5,43 @@ var __getProtoOf = Object.getPrototypeOf;
|
|
|
5
5
|
var __defProp = Object.defineProperty;
|
|
6
6
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
7
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
function __accessProp(key) {
|
|
9
|
+
return this[key];
|
|
10
|
+
}
|
|
11
|
+
var __toESMCache_node;
|
|
12
|
+
var __toESMCache_esm;
|
|
8
13
|
var __toESM = (mod, isNodeMode, target) => {
|
|
14
|
+
var canCache = mod != null && typeof mod === "object";
|
|
15
|
+
if (canCache) {
|
|
16
|
+
var cache = isNodeMode ? __toESMCache_node ??= new WeakMap : __toESMCache_esm ??= new WeakMap;
|
|
17
|
+
var cached = cache.get(mod);
|
|
18
|
+
if (cached)
|
|
19
|
+
return cached;
|
|
20
|
+
}
|
|
9
21
|
target = mod != null ? __create(__getProtoOf(mod)) : {};
|
|
10
22
|
const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
|
|
11
23
|
for (let key of __getOwnPropNames(mod))
|
|
12
24
|
if (!__hasOwnProp.call(to, key))
|
|
13
25
|
__defProp(to, key, {
|
|
14
|
-
get: (
|
|
26
|
+
get: __accessProp.bind(mod, key),
|
|
15
27
|
enumerable: true
|
|
16
28
|
});
|
|
29
|
+
if (canCache)
|
|
30
|
+
cache.set(mod, to);
|
|
17
31
|
return to;
|
|
18
32
|
};
|
|
19
33
|
var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
|
|
34
|
+
var __returnValue = (v) => v;
|
|
35
|
+
function __exportSetter(name, newValue) {
|
|
36
|
+
this[name] = __returnValue.bind(null, newValue);
|
|
37
|
+
}
|
|
20
38
|
var __export = (target, all) => {
|
|
21
39
|
for (var name in all)
|
|
22
40
|
__defProp(target, name, {
|
|
23
41
|
get: all[name],
|
|
24
42
|
enumerable: true,
|
|
25
43
|
configurable: true,
|
|
26
|
-
set: (
|
|
44
|
+
set: __exportSetter.bind(all, name)
|
|
27
45
|
});
|
|
28
46
|
};
|
|
29
47
|
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
@@ -548,6 +566,9 @@ var init_operation_definitions = __esm(() => {
|
|
|
548
566
|
"TARGET_MOVED",
|
|
549
567
|
"PLAN_CONFLICT_OVERLAP",
|
|
550
568
|
"INVALID_STEP_COMBINATION",
|
|
569
|
+
"REVISION_CHANGED_SINCE_COMPILE",
|
|
570
|
+
"INVALID_INSERTION_CONTEXT",
|
|
571
|
+
"DOCUMENT_IDENTITY_CONFLICT",
|
|
551
572
|
"CAPABILITY_UNAVAILABLE"
|
|
552
573
|
];
|
|
553
574
|
T_QUERY_MATCH = ["MATCH_NOT_FOUND", "AMBIGUOUS_MATCH", "INVALID_INPUT", "INTERNAL_ERROR"];
|
|
@@ -18365,7 +18386,7 @@ var init_constants_DBKi0Amm_es = __esm(() => {
|
|
|
18365
18386
|
]);
|
|
18366
18387
|
});
|
|
18367
18388
|
|
|
18368
|
-
// ../../packages/superdoc/dist/chunks/SuperConverter-
|
|
18389
|
+
// ../../packages/superdoc/dist/chunks/SuperConverter-DFpPWkcl.es.js
|
|
18369
18390
|
function getExtensionConfigField(extension, field, context = { name: "" }) {
|
|
18370
18391
|
const fieldValue = extension.config[field];
|
|
18371
18392
|
if (typeof fieldValue === "function")
|
|
@@ -19305,7 +19326,8 @@ function decodeProperties(params, translatorsBySdName, properties) {
|
|
|
19305
19326
|
node: { attrs: { [key]: properties[key] } }
|
|
19306
19327
|
});
|
|
19307
19328
|
if (result != null) {
|
|
19308
|
-
result.name
|
|
19329
|
+
if (result.name == null)
|
|
19330
|
+
result.name = translator$202.xmlName;
|
|
19309
19331
|
elements.push(result);
|
|
19310
19332
|
}
|
|
19311
19333
|
}
|
|
@@ -42116,7 +42138,7 @@ Please report this to https://github.com/markedjs/marked.`, e) {
|
|
|
42116
42138
|
state.kern = kernNode.attributes["w:val"];
|
|
42117
42139
|
}
|
|
42118
42140
|
}, SuperConverter;
|
|
42119
|
-
var
|
|
42141
|
+
var init_SuperConverter_DFpPWkcl_es = __esm(() => {
|
|
42120
42142
|
init_rolldown_runtime_B2q5OVn9_es();
|
|
42121
42143
|
init_jszip_ChlR43oI_es();
|
|
42122
42144
|
init_xml_js_DLE8mr0n_es();
|
|
@@ -87504,9 +87526,9 @@ var init_remark_gfm_RDxetNVS_es = __esm(() => {
|
|
|
87504
87526
|
emptyOptions4 = {};
|
|
87505
87527
|
});
|
|
87506
87528
|
|
|
87507
|
-
// ../../packages/superdoc/dist/chunks/src-
|
|
87508
|
-
var
|
|
87509
|
-
__export(
|
|
87529
|
+
// ../../packages/superdoc/dist/chunks/src-Cl9CKlDG.es.js
|
|
87530
|
+
var exports_src_Cl9CKlDG_es = {};
|
|
87531
|
+
__export(exports_src_Cl9CKlDG_es, {
|
|
87510
87532
|
zt: () => defineMark,
|
|
87511
87533
|
z: () => cM,
|
|
87512
87534
|
yt: () => removeAwarenessStates,
|
|
@@ -95639,9 +95661,11 @@ function checkRevision(editor, expectedRevision) {
|
|
|
95639
95661
|
return;
|
|
95640
95662
|
const current = getRevision(editor);
|
|
95641
95663
|
if (expectedRevision !== current)
|
|
95642
|
-
throw new PlanError("REVISION_MISMATCH", `REVISION_MISMATCH — expected revision "${expectedRevision}" but document is at "${current}"
|
|
95664
|
+
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
95665
|
expectedRevision,
|
|
95644
|
-
currentRevision: current
|
|
95666
|
+
currentRevision: current,
|
|
95667
|
+
refStability: "ephemeral",
|
|
95668
|
+
remediation: "Re-run query.match() to obtain a fresh ref valid for the current revision."
|
|
95645
95669
|
});
|
|
95646
95670
|
}
|
|
95647
95671
|
function resolveSegmentPosition(targetOffset, segmentStart, segmentLength, docFrom, docTo) {
|
|
@@ -95897,7 +95921,9 @@ function captureRunsInRange(editor, blockPos, from$12, to) {
|
|
|
95897
95921
|
return;
|
|
95898
95922
|
}
|
|
95899
95923
|
if (node3.isLeaf) {
|
|
95924
|
+
const start$1 = offset$1;
|
|
95900
95925
|
offset$1 += 1;
|
|
95926
|
+
maybePushRun(start$1, offset$1, []);
|
|
95901
95927
|
return;
|
|
95902
95928
|
}
|
|
95903
95929
|
let isFirstChild = true;
|
|
@@ -96335,12 +96361,69 @@ function executeBlockSelector(index2, query2, diagnostics) {
|
|
|
96335
96361
|
function isAssertStep(step) {
|
|
96336
96362
|
return step.op === "assert";
|
|
96337
96363
|
}
|
|
96364
|
+
function isCreateOp(op) {
|
|
96365
|
+
return op === "create.heading" || op === "create.paragraph";
|
|
96366
|
+
}
|
|
96338
96367
|
function isSelectWhere(where) {
|
|
96339
96368
|
return where.by === "select";
|
|
96340
96369
|
}
|
|
96341
96370
|
function isRefWhere(where) {
|
|
96342
96371
|
return where.by === "ref";
|
|
96343
96372
|
}
|
|
96373
|
+
function validateCreateStepPosition(step) {
|
|
96374
|
+
const args$1 = step.args;
|
|
96375
|
+
if (args$1.position === undefined || args$1.position === null) {
|
|
96376
|
+
args$1.position = "after";
|
|
96377
|
+
return;
|
|
96378
|
+
}
|
|
96379
|
+
if (!VALID_CREATE_POSITIONS.includes(args$1.position))
|
|
96380
|
+
throw planError("INVALID_INPUT", `create step requires args.position to be 'before' or 'after'`, step.id, {
|
|
96381
|
+
receivedPosition: args$1.position,
|
|
96382
|
+
allowedValues: [...VALID_CREATE_POSITIONS],
|
|
96383
|
+
default: "after"
|
|
96384
|
+
});
|
|
96385
|
+
}
|
|
96386
|
+
function resolveCreateAnchorFromTargets(targets, position4, stepId) {
|
|
96387
|
+
const target = targets[0];
|
|
96388
|
+
if (!target)
|
|
96389
|
+
throw planError("INVALID_INPUT", "create step has no resolved targets", stepId);
|
|
96390
|
+
if (target.kind === "range")
|
|
96391
|
+
return target.blockId;
|
|
96392
|
+
const segments = target.segments;
|
|
96393
|
+
if (!segments.length)
|
|
96394
|
+
throw planError("INVALID_INPUT", "span target has no segments", stepId);
|
|
96395
|
+
return position4 === "before" ? segments[0].blockId : segments[segments.length - 1].blockId;
|
|
96396
|
+
}
|
|
96397
|
+
function validateInsertionContext(editor, index2, step, stepIndex, anchorBlockId, position4) {
|
|
96398
|
+
const candidate = index2.candidates.find((c$3) => c$3.nodeId === anchorBlockId);
|
|
96399
|
+
if (!candidate)
|
|
96400
|
+
return;
|
|
96401
|
+
const paragraphType = editor.state.schema?.nodes?.paragraph;
|
|
96402
|
+
if (!paragraphType)
|
|
96403
|
+
return;
|
|
96404
|
+
const resolvedPos = editor.state.doc.resolve(candidate.pos);
|
|
96405
|
+
const parent = resolvedPos.parent;
|
|
96406
|
+
const anchorIndex = resolvedPos.index();
|
|
96407
|
+
const insertionIndex = position4 === "before" ? anchorIndex : anchorIndex + 1;
|
|
96408
|
+
if (!(typeof parent.canReplaceWith === "function" ? parent.canReplaceWith(insertionIndex, insertionIndex, paragraphType) : parent.type.contentMatch.matchType(paragraphType))) {
|
|
96409
|
+
const allowedChildTypes = [];
|
|
96410
|
+
const match$1 = parent.type.contentMatch;
|
|
96411
|
+
for (const nodeType of Object.values(editor.state.schema.nodes))
|
|
96412
|
+
if (match$1.matchType(nodeType))
|
|
96413
|
+
allowedChildTypes.push(nodeType.name);
|
|
96414
|
+
throw planError("INVALID_INSERTION_CONTEXT", `Cannot create ${step.op} inside ${parent.type.name}`, step.id, {
|
|
96415
|
+
stepIndex,
|
|
96416
|
+
stepId: step.id,
|
|
96417
|
+
operation: step.op,
|
|
96418
|
+
anchorBlockId,
|
|
96419
|
+
parentType: parent.type.name,
|
|
96420
|
+
allowedChildTypes,
|
|
96421
|
+
insertionIndex,
|
|
96422
|
+
requestedChildType: "paragraph",
|
|
96423
|
+
requestedSemanticType: step.op === "create.heading" ? "heading" : "paragraph"
|
|
96424
|
+
});
|
|
96425
|
+
}
|
|
96426
|
+
}
|
|
96344
96427
|
function isV3Ref(payload) {
|
|
96345
96428
|
return typeof payload === "object" && payload !== null && "v" in payload && payload.v === 3;
|
|
96346
96429
|
}
|
|
@@ -96575,9 +96658,13 @@ function decodeTextRefPayload(encoded, stepId) {
|
|
|
96575
96658
|
function resolveV3TextRef(editor, index2, step, refData) {
|
|
96576
96659
|
const currentRevision = getRevision(editor);
|
|
96577
96660
|
if (refData.rev !== currentRevision)
|
|
96578
|
-
throw planError("REVISION_MISMATCH", `
|
|
96661
|
+
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
96662
|
refRevision: refData.rev,
|
|
96580
|
-
currentRevision
|
|
96663
|
+
currentRevision,
|
|
96664
|
+
refStability: "ephemeral",
|
|
96665
|
+
refScope: refData.scope,
|
|
96666
|
+
blockId: refData.segments?.[0]?.blockId,
|
|
96667
|
+
remediation: `Re-run query.match() to obtain a fresh ref valid for the current revision.`
|
|
96581
96668
|
});
|
|
96582
96669
|
if (!refData.segments?.length)
|
|
96583
96670
|
return [];
|
|
@@ -96668,7 +96755,11 @@ function resolveStepTargets(editor, index2, step) {
|
|
|
96668
96755
|
});
|
|
96669
96756
|
if (refWhere) {
|
|
96670
96757
|
if (targets.length === 0)
|
|
96671
|
-
throw planError("MATCH_NOT_FOUND", `ref "${refWhere.ref}" did not resolve to any targets`, step.id
|
|
96758
|
+
throw planError("MATCH_NOT_FOUND", `ref "${refWhere.ref}" did not resolve to any targets`, step.id, {
|
|
96759
|
+
selectorType: "ref",
|
|
96760
|
+
selectorPattern: refWhere.ref,
|
|
96761
|
+
candidateCount: 0
|
|
96762
|
+
});
|
|
96672
96763
|
if (targets.length > 1)
|
|
96673
96764
|
throw planError("AMBIGUOUS_MATCH", `ref "${refWhere.ref}" resolved to ${targets.length} targets`, step.id, { matchCount: targets.length });
|
|
96674
96765
|
return targets;
|
|
@@ -96680,6 +96771,18 @@ function resolveStepTargets(editor, index2, step) {
|
|
|
96680
96771
|
targets = [targets[0]];
|
|
96681
96772
|
return targets;
|
|
96682
96773
|
}
|
|
96774
|
+
function buildMatchNotFoundDetails(step) {
|
|
96775
|
+
const where = step.where;
|
|
96776
|
+
const select2 = "select" in where ? where.select : undefined;
|
|
96777
|
+
const within$1 = "within" in where ? where.within : undefined;
|
|
96778
|
+
return {
|
|
96779
|
+
selectorType: select2?.type ?? "unknown",
|
|
96780
|
+
selectorPattern: select2?.pattern ?? "",
|
|
96781
|
+
selectorMode: select2?.mode ?? "contains",
|
|
96782
|
+
searchScope: within$1?.blockId ?? "document",
|
|
96783
|
+
candidateCount: 0
|
|
96784
|
+
};
|
|
96785
|
+
}
|
|
96683
96786
|
function applyCardinalityCheck(step, targets) {
|
|
96684
96787
|
const where = step.where;
|
|
96685
96788
|
if (!("require" in where) || where.require === undefined)
|
|
@@ -96687,62 +96790,131 @@ function applyCardinalityCheck(step, targets) {
|
|
|
96687
96790
|
const require$1 = where.require;
|
|
96688
96791
|
if (require$1 === "first") {
|
|
96689
96792
|
if (targets.length === 0)
|
|
96690
|
-
throw planError("MATCH_NOT_FOUND", "selector matched zero ranges", step.id);
|
|
96793
|
+
throw planError("MATCH_NOT_FOUND", "selector matched zero ranges", step.id, buildMatchNotFoundDetails(step));
|
|
96691
96794
|
} else if (require$1 === "exactlyOne") {
|
|
96692
96795
|
if (targets.length === 0)
|
|
96693
|
-
throw planError("MATCH_NOT_FOUND", "selector matched zero ranges", step.id);
|
|
96796
|
+
throw planError("MATCH_NOT_FOUND", "selector matched zero ranges", step.id, buildMatchNotFoundDetails(step));
|
|
96694
96797
|
if (targets.length > 1)
|
|
96695
96798
|
throw planError("AMBIGUOUS_MATCH", `selector matched ${targets.length} ranges, expected exactly one`, step.id, { matchCount: targets.length });
|
|
96696
96799
|
} else if (require$1 === "all") {
|
|
96697
96800
|
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
|
-
|
|
96801
|
+
throw planError("MATCH_NOT_FOUND", "selector matched zero ranges", step.id, buildMatchNotFoundDetails(step));
|
|
96802
|
+
}
|
|
96803
|
+
}
|
|
96804
|
+
function normalizeOpForMatrix(op) {
|
|
96805
|
+
return op.startsWith("create.") ? "create.*" : op;
|
|
96806
|
+
}
|
|
96807
|
+
function classifyOverlap(stepA, stepB) {
|
|
96808
|
+
const rangesA = extractBlockRanges(stepA);
|
|
96809
|
+
const rangesB = extractBlockRanges(stepB);
|
|
96810
|
+
const opA = normalizeOpForMatrix(stepA.step.op);
|
|
96811
|
+
const opB = normalizeOpForMatrix(stepB.step.op);
|
|
96812
|
+
const isCreateA = opA === "create.*";
|
|
96813
|
+
const isCreateB = opB === "create.*";
|
|
96814
|
+
for (const [blockId, aEntries] of rangesA) {
|
|
96815
|
+
const bEntries = rangesB.get(blockId);
|
|
96816
|
+
if (!bEntries)
|
|
96817
|
+
continue;
|
|
96818
|
+
for (const a2 of aEntries)
|
|
96819
|
+
for (const b$1 of bEntries) {
|
|
96820
|
+
if (isCreateA || isCreateB)
|
|
96821
|
+
return {
|
|
96822
|
+
overlapClass: "same_block",
|
|
96823
|
+
blockId,
|
|
96824
|
+
rangeA: a2,
|
|
96825
|
+
rangeB: b$1
|
|
96826
|
+
};
|
|
96827
|
+
if (a2.to <= b$1.from || b$1.to <= a2.from)
|
|
96828
|
+
continue;
|
|
96829
|
+
if (a2.from === b$1.from && a2.to === b$1.to)
|
|
96830
|
+
return {
|
|
96831
|
+
overlapClass: "same_target",
|
|
96832
|
+
blockId,
|
|
96833
|
+
rangeA: a2,
|
|
96834
|
+
rangeB: b$1
|
|
96835
|
+
};
|
|
96836
|
+
return {
|
|
96837
|
+
overlapClass: "overlapping",
|
|
96717
96838
|
blockId,
|
|
96718
|
-
rangeA:
|
|
96719
|
-
|
|
96720
|
-
|
|
96721
|
-
|
|
96722
|
-
rangeB: {
|
|
96723
|
-
from: curr.from,
|
|
96724
|
-
to: curr.to
|
|
96725
|
-
}
|
|
96726
|
-
});
|
|
96727
|
-
}
|
|
96839
|
+
rangeA: a2,
|
|
96840
|
+
rangeB: b$1
|
|
96841
|
+
};
|
|
96842
|
+
}
|
|
96728
96843
|
}
|
|
96729
96844
|
}
|
|
96730
|
-
function
|
|
96731
|
-
|
|
96732
|
-
|
|
96733
|
-
|
|
96734
|
-
|
|
96845
|
+
function extractBlockRanges(compiled) {
|
|
96846
|
+
const result = /* @__PURE__ */ new Map;
|
|
96847
|
+
for (const target of compiled.targets)
|
|
96848
|
+
if (target.kind === "range")
|
|
96849
|
+
pushBlockRange(result, target.blockId, target.from, target.to);
|
|
96850
|
+
else
|
|
96851
|
+
for (const seg of target.segments)
|
|
96852
|
+
pushBlockRange(result, seg.blockId, seg.from, seg.to);
|
|
96853
|
+
return result;
|
|
96854
|
+
}
|
|
96855
|
+
function pushBlockRange(map$22, blockId, from$12, to) {
|
|
96856
|
+
let entries = map$22.get(blockId);
|
|
96857
|
+
if (!entries) {
|
|
96858
|
+
entries = [];
|
|
96859
|
+
map$22.set(blockId, entries);
|
|
96735
96860
|
}
|
|
96736
|
-
|
|
96737
|
-
stepId,
|
|
96861
|
+
entries.push({
|
|
96738
96862
|
from: from$12,
|
|
96739
96863
|
to
|
|
96740
96864
|
});
|
|
96741
96865
|
}
|
|
96866
|
+
function validateStepInteractions(steps) {
|
|
96867
|
+
for (let i$1 = 0;i$1 < steps.length; i$1++)
|
|
96868
|
+
for (let j2 = i$1 + 1;j2 < steps.length; j2++) {
|
|
96869
|
+
const stepA = steps[i$1];
|
|
96870
|
+
const stepB = steps[j2];
|
|
96871
|
+
if (MATRIX_EXEMPT_OPS.has(stepA.step.op) || MATRIX_EXEMPT_OPS.has(stepB.step.op))
|
|
96872
|
+
continue;
|
|
96873
|
+
const overlap = classifyOverlap(stepA, stepB);
|
|
96874
|
+
if (!overlap)
|
|
96875
|
+
continue;
|
|
96876
|
+
const matrixKey = `${normalizeOpForMatrix(stepA.step.op)}::${normalizeOpForMatrix(stepB.step.op)}::${overlap.overlapClass}`;
|
|
96877
|
+
const verdict = STEP_INTERACTION_MATRIX.get(matrixKey) ?? "reject";
|
|
96878
|
+
if (verdict === "reject")
|
|
96879
|
+
throw planError("PLAN_CONFLICT_OVERLAP", `steps "${stepA.step.id}" and "${stepB.step.id}" target overlapping ranges in block "${overlap.blockId}"`, stepB.step.id, {
|
|
96880
|
+
blockId: overlap.blockId,
|
|
96881
|
+
stepIdA: stepA.step.id,
|
|
96882
|
+
stepIdB: stepB.step.id,
|
|
96883
|
+
opKeyA: stepA.step.op,
|
|
96884
|
+
opKeyB: stepB.step.op,
|
|
96885
|
+
rangeA: overlap.rangeA,
|
|
96886
|
+
rangeB: overlap.rangeB,
|
|
96887
|
+
overlapRegion: {
|
|
96888
|
+
from: Math.max(overlap.rangeA.from, overlap.rangeB.from),
|
|
96889
|
+
to: Math.min(overlap.rangeA.to, overlap.rangeB.to)
|
|
96890
|
+
},
|
|
96891
|
+
matrixVerdict: verdict,
|
|
96892
|
+
matrixKey
|
|
96893
|
+
});
|
|
96894
|
+
}
|
|
96895
|
+
}
|
|
96896
|
+
function assertNoDuplicateBlockIds(index2) {
|
|
96897
|
+
const seen = /* @__PURE__ */ new Map;
|
|
96898
|
+
const duplicates = [];
|
|
96899
|
+
for (const candidate of index2.candidates) {
|
|
96900
|
+
const count = seen.get(candidate.nodeId) ?? 0;
|
|
96901
|
+
seen.set(candidate.nodeId, count + 1);
|
|
96902
|
+
if (count === 1)
|
|
96903
|
+
duplicates.push(candidate.nodeId);
|
|
96904
|
+
}
|
|
96905
|
+
if (duplicates.length > 0)
|
|
96906
|
+
throw planError("DOCUMENT_IDENTITY_CONFLICT", "Document contains blocks with duplicate identities. This must be resolved before mutations can be applied.", undefined, {
|
|
96907
|
+
duplicateBlockIds: duplicates,
|
|
96908
|
+
blockCount: duplicates.length,
|
|
96909
|
+
remediation: "Re-import the document or call document.repair() to assign unique identities."
|
|
96910
|
+
});
|
|
96911
|
+
}
|
|
96742
96912
|
function compilePlan(editor, steps) {
|
|
96743
96913
|
if (steps.length > 200)
|
|
96744
96914
|
throw planError("INVALID_INPUT", `plan contains ${steps.length} steps, maximum is 200`);
|
|
96915
|
+
const compiledRevision = getRevision(editor);
|
|
96745
96916
|
const index2 = getBlockIndex(editor);
|
|
96917
|
+
assertNoDuplicateBlockIds(index2);
|
|
96746
96918
|
const mutationSteps = [];
|
|
96747
96919
|
const assertSteps = [];
|
|
96748
96920
|
const seenIds = /* @__PURE__ */ new Set;
|
|
@@ -96754,28 +96926,45 @@ function compilePlan(editor, steps) {
|
|
|
96754
96926
|
seenIds.add(step.id);
|
|
96755
96927
|
}
|
|
96756
96928
|
let totalTargets = 0;
|
|
96929
|
+
let stepIndex = 0;
|
|
96757
96930
|
for (const step of steps) {
|
|
96758
96931
|
if (isAssertStep(step)) {
|
|
96759
96932
|
assertSteps.push(step);
|
|
96933
|
+
stepIndex++;
|
|
96760
96934
|
continue;
|
|
96761
96935
|
}
|
|
96762
96936
|
if (!hasStepExecutor(step.op))
|
|
96763
96937
|
throw planError("INVALID_INPUT", `unknown step op "${step.op}"`, step.id);
|
|
96938
|
+
if (isCreateOp(step.op))
|
|
96939
|
+
validateCreateStepPosition(step);
|
|
96764
96940
|
const targets = resolveStepTargets(editor, index2, step);
|
|
96941
|
+
if (isCreateOp(step.op) && targets.length > 0) {
|
|
96942
|
+
const position4 = step.args.position ?? "after";
|
|
96943
|
+
const anchorBlockId = resolveCreateAnchorFromTargets(targets, position4, step.id);
|
|
96944
|
+
validateInsertionContext(editor, index2, step, stepIndex, anchorBlockId, position4);
|
|
96945
|
+
}
|
|
96765
96946
|
totalTargets += targets.length;
|
|
96766
96947
|
mutationSteps.push({
|
|
96767
96948
|
step,
|
|
96768
96949
|
targets
|
|
96769
96950
|
});
|
|
96951
|
+
stepIndex++;
|
|
96770
96952
|
}
|
|
96771
96953
|
if (totalTargets > 500)
|
|
96772
96954
|
throw planError("INVALID_INPUT", `plan resolved ${totalTargets} total targets, maximum is 500`);
|
|
96773
|
-
|
|
96955
|
+
validateStepInteractions(mutationSteps);
|
|
96774
96956
|
return {
|
|
96775
96957
|
mutationSteps,
|
|
96776
|
-
assertSteps
|
|
96958
|
+
assertSteps,
|
|
96959
|
+
compiledRevision
|
|
96777
96960
|
};
|
|
96778
96961
|
}
|
|
96962
|
+
function resolveBlockInsertionPos(editor, anchorBlockId, position4, stepId) {
|
|
96963
|
+
const candidate = getBlockIndex(editor).candidates.find((c$3) => c$3.nodeId === anchorBlockId);
|
|
96964
|
+
if (!candidate)
|
|
96965
|
+
throw planError("TARGET_NOT_FOUND", `block "${anchorBlockId}" not found`, stepId);
|
|
96966
|
+
return position4 === "before" ? candidate.pos : candidate.end;
|
|
96967
|
+
}
|
|
96779
96968
|
function applyDirectMutationMeta(tr) {
|
|
96780
96969
|
tr.setMeta("inputType", "programmatic");
|
|
96781
96970
|
tr.setMeta("skipTrackChanges", true);
|
|
@@ -96828,11 +97017,33 @@ function buildMarksFromSetMarks(editor, setMarks) {
|
|
|
96828
97017
|
marks.push(schema.marks.strike.create());
|
|
96829
97018
|
return marks;
|
|
96830
97019
|
}
|
|
96831
|
-
function
|
|
96832
|
-
const
|
|
96833
|
-
|
|
96834
|
-
|
|
96835
|
-
|
|
97020
|
+
function applyInlineMarkPatches(editor, tr, absFrom, absTo, inline) {
|
|
97021
|
+
const { schema } = editor.state;
|
|
97022
|
+
let changed = false;
|
|
97023
|
+
const markEntries = [
|
|
97024
|
+
[inline.bold, schema.marks.bold],
|
|
97025
|
+
[inline.italic, schema.marks.italic],
|
|
97026
|
+
[inline.underline, schema.marks.underline],
|
|
97027
|
+
[inline.strike, schema.marks.strike]
|
|
97028
|
+
];
|
|
97029
|
+
for (const [value, markType] of markEntries) {
|
|
97030
|
+
if (value === undefined || !markType)
|
|
97031
|
+
continue;
|
|
97032
|
+
if (value)
|
|
97033
|
+
tr.addMark(absFrom, absTo, markType.create());
|
|
97034
|
+
else
|
|
97035
|
+
tr.removeMark(absFrom, absTo, markType);
|
|
97036
|
+
changed = true;
|
|
97037
|
+
}
|
|
97038
|
+
return changed;
|
|
97039
|
+
}
|
|
97040
|
+
function resolveCreateAnchorBlockId(target, position4, stepId) {
|
|
97041
|
+
if (target.kind === "range")
|
|
97042
|
+
return target.blockId;
|
|
97043
|
+
const segments = target.segments;
|
|
97044
|
+
if (!segments.length)
|
|
97045
|
+
throw planError("INVALID_INPUT", "span target has no segments", stepId);
|
|
97046
|
+
return position4 === "before" ? segments[0].blockId : segments[segments.length - 1].blockId;
|
|
96836
97047
|
}
|
|
96837
97048
|
function executeTextRewrite(editor, tr, target, step, mapping) {
|
|
96838
97049
|
const absFrom = mapping.map(target.absFrom);
|
|
@@ -96873,42 +97084,7 @@ function executeTextDelete(_editor, tr, target, _step, mapping) {
|
|
|
96873
97084
|
return { changed: true };
|
|
96874
97085
|
}
|
|
96875
97086
|
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 };
|
|
97087
|
+
return { changed: applyInlineMarkPatches(editor, tr, mapping.map(target.absFrom), mapping.map(target.absTo), step.args.inline) };
|
|
96912
97088
|
}
|
|
96913
97089
|
function validateMappedSpanContiguity(target, mapping, stepId) {
|
|
96914
97090
|
let lastMappedEnd = -1;
|
|
@@ -96974,44 +97150,9 @@ function executeSpanTextDelete(_editor, tr, target, step, mapping) {
|
|
|
96974
97150
|
}
|
|
96975
97151
|
function executeSpanStyleApply(editor, tr, target, step, mapping) {
|
|
96976
97152
|
validateMappedSpanContiguity(target, mapping, step.id);
|
|
96977
|
-
const { schema } = editor.state;
|
|
96978
|
-
let changed = false;
|
|
96979
97153
|
const firstSeg = target.segments[0];
|
|
96980
97154
|
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 };
|
|
97155
|
+
return { changed: applyInlineMarkPatches(editor, tr, mapping.map(firstSeg.absFrom, 1), mapping.map(lastSeg.absTo, -1), step.args.inline) };
|
|
97015
97156
|
}
|
|
97016
97157
|
function getReplacementText(replacement) {
|
|
97017
97158
|
if (replacement.blocks !== undefined)
|
|
@@ -97212,10 +97353,12 @@ function executeAssertStep(_editor, tr, step) {
|
|
|
97212
97353
|
}
|
|
97213
97354
|
function executeCreateStep(editor, tr, step, targets, mapping) {
|
|
97214
97355
|
const target = targets[0];
|
|
97215
|
-
if (!target
|
|
97216
|
-
throw planError("INVALID_INPUT", `${step.op} step requires
|
|
97356
|
+
if (!target)
|
|
97357
|
+
throw planError("INVALID_INPUT", `${step.op} step requires at least one target`, step.id);
|
|
97217
97358
|
const args$1 = step.args;
|
|
97218
|
-
const
|
|
97359
|
+
const position4 = args$1.position ?? "after";
|
|
97360
|
+
const anchorPos = resolveBlockInsertionPos(editor, resolveCreateAnchorBlockId(target, position4, step.id), position4, step.id);
|
|
97361
|
+
const pos = mapping.map(anchorPos);
|
|
97219
97362
|
const paragraphType = editor.state.schema?.nodes?.paragraph;
|
|
97220
97363
|
if (!paragraphType)
|
|
97221
97364
|
throw planError("INVALID_INPUT", "paragraph node type not in schema", step.id);
|
|
@@ -97235,6 +97378,7 @@ function executeCreateStep(editor, tr, step, targets, mapping) {
|
|
|
97235
97378
|
if (!node3)
|
|
97236
97379
|
throw planError("INVALID_INPUT", `could not create ${step.op} node`, step.id);
|
|
97237
97380
|
tr.insert(pos, node3);
|
|
97381
|
+
assertNoPostInsertDuplicateIds(tr.doc, step.id);
|
|
97238
97382
|
return {
|
|
97239
97383
|
stepId: step.id,
|
|
97240
97384
|
op: step.op,
|
|
@@ -97246,6 +97390,31 @@ function executeCreateStep(editor, tr, step, targets, mapping) {
|
|
|
97246
97390
|
}
|
|
97247
97391
|
};
|
|
97248
97392
|
}
|
|
97393
|
+
function assertNoPostInsertDuplicateIds(doc$2, stepId) {
|
|
97394
|
+
const seen = /* @__PURE__ */ new Set;
|
|
97395
|
+
const duplicateSet = /* @__PURE__ */ new Set;
|
|
97396
|
+
doc$2.descendants((node3) => {
|
|
97397
|
+
if (!node3.isTextblock)
|
|
97398
|
+
return true;
|
|
97399
|
+
const attrs = node3.attrs ?? {};
|
|
97400
|
+
const id2 = typeof attrs.paraId === "string" && attrs.paraId || typeof attrs.sdBlockId === "string" && attrs.sdBlockId || typeof attrs.nodeId === "string" && attrs.nodeId;
|
|
97401
|
+
if (!id2)
|
|
97402
|
+
return true;
|
|
97403
|
+
if (seen.has(id2))
|
|
97404
|
+
duplicateSet.add(id2);
|
|
97405
|
+
else
|
|
97406
|
+
seen.add(id2);
|
|
97407
|
+
return true;
|
|
97408
|
+
});
|
|
97409
|
+
if (duplicateSet.size > 0) {
|
|
97410
|
+
const duplicates = [...duplicateSet];
|
|
97411
|
+
throw planError("INTERNAL_ERROR", `create step produced duplicate block identities: [${duplicates.join(", ")}]`, stepId, {
|
|
97412
|
+
source: "executor:checkPostInsertIdentityUniqueness",
|
|
97413
|
+
invariant: "post-insert block IDs must be unique",
|
|
97414
|
+
duplicateBlockIds: duplicates
|
|
97415
|
+
});
|
|
97416
|
+
}
|
|
97417
|
+
}
|
|
97249
97418
|
function runMutationsOnTransaction(editor, tr, compiled, options) {
|
|
97250
97419
|
const mapping = tr.mapping;
|
|
97251
97420
|
const stepOutcomes = [];
|
|
@@ -97303,6 +97472,14 @@ function executeCompiledPlan(editor, compiled, options = {}) {
|
|
|
97303
97472
|
const startTime = performance.now();
|
|
97304
97473
|
const revisionBefore = getRevision(editor);
|
|
97305
97474
|
checkRevision(editor, options.expectedRevision);
|
|
97475
|
+
if (compiled.compiledRevision !== revisionBefore)
|
|
97476
|
+
throw planError("REVISION_CHANGED_SINCE_COMPILE", `Document revision changed between compile and execute. Compiled at "${compiled.compiledRevision}", now at "${revisionBefore}".`, undefined, {
|
|
97477
|
+
compiledRevision: compiled.compiledRevision,
|
|
97478
|
+
currentRevision: revisionBefore,
|
|
97479
|
+
stepCount: compiled.mutationSteps.length,
|
|
97480
|
+
failedAtStep: "pre-execution",
|
|
97481
|
+
remediation: "Re-compile the plan against the current document state."
|
|
97482
|
+
});
|
|
97306
97483
|
const tr = editor.state.tr;
|
|
97307
97484
|
if ((options.changeMode ?? "direct") === "tracked")
|
|
97308
97485
|
applyTrackedMutationMeta(tr);
|
|
@@ -97522,7 +97699,8 @@ function executeDomainCommand(editor, handler2, options) {
|
|
|
97522
97699
|
},
|
|
97523
97700
|
targets: []
|
|
97524
97701
|
}],
|
|
97525
|
-
assertSteps: []
|
|
97702
|
+
assertSteps: [],
|
|
97703
|
+
compiledRevision: getRevision(editor)
|
|
97526
97704
|
}, { expectedRevision: options?.expectedRevision });
|
|
97527
97705
|
}
|
|
97528
97706
|
function validateWriteRequest(request, resolved) {
|
|
@@ -97618,7 +97796,8 @@ function writeWrapper(editor, request, options) {
|
|
|
97618
97796
|
step: stepDef,
|
|
97619
97797
|
targets: [toCompiledTarget(stepId, op, resolved)]
|
|
97620
97798
|
}],
|
|
97621
|
-
assertSteps: []
|
|
97799
|
+
assertSteps: [],
|
|
97800
|
+
compiledRevision: getRevision(editor)
|
|
97622
97801
|
}, {
|
|
97623
97802
|
changeMode: mode,
|
|
97624
97803
|
expectedRevision: options?.expectedRevision
|
|
@@ -97683,7 +97862,8 @@ function styleApplyWrapper(editor, input2, options) {
|
|
|
97683
97862
|
marks: []
|
|
97684
97863
|
}]
|
|
97685
97864
|
}],
|
|
97686
|
-
assertSteps: []
|
|
97865
|
+
assertSteps: [],
|
|
97866
|
+
compiledRevision: getRevision(editor)
|
|
97687
97867
|
}, {
|
|
97688
97868
|
changeMode: mode,
|
|
97689
97869
|
expectedRevision: options?.expectedRevision
|
|
@@ -98705,10 +98885,7 @@ function resolveCreateInsertPosition(editor, at, operationLabel) {
|
|
|
98705
98885
|
return 0;
|
|
98706
98886
|
if (location$1.kind === "documentEnd")
|
|
98707
98887
|
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;
|
|
98888
|
+
return resolveBlockInsertionPos(editor, location$1.target.nodeId, location$1.kind);
|
|
98712
98889
|
}
|
|
98713
98890
|
function resolveCreatedBlock(editor, nodeType, blockId) {
|
|
98714
98891
|
const index2 = getBlockIndex(editor);
|
|
@@ -98817,7 +98994,10 @@ function createParagraphWrapper(editor, input2, options) {
|
|
|
98817
98994
|
const paragraph2 = resolveCreatedBlock(editor, "paragraph", paragraphId);
|
|
98818
98995
|
if (mode === "tracked")
|
|
98819
98996
|
trackedChangeRefs = collectTrackInsertRefsInRange(editor, paragraph2.pos, paragraph2.end);
|
|
98820
|
-
} catch {
|
|
98997
|
+
} catch (e) {
|
|
98998
|
+
if (!(e instanceof DocumentApiAdapterError))
|
|
98999
|
+
throw e;
|
|
99000
|
+
}
|
|
98821
99001
|
}
|
|
98822
99002
|
return didApply;
|
|
98823
99003
|
}, { expectedRevision: options?.expectedRevision }).steps[0]?.effect !== "changed")
|
|
@@ -98883,7 +99063,10 @@ function createHeadingWrapper(editor, input2, options) {
|
|
|
98883
99063
|
const heading3 = resolveCreatedBlock(editor, "heading", headingId);
|
|
98884
99064
|
if (mode === "tracked")
|
|
98885
99065
|
trackedChangeRefs = collectTrackInsertRefsInRange(editor, heading3.pos, heading3.end);
|
|
98886
|
-
} catch {
|
|
99066
|
+
} catch (e) {
|
|
99067
|
+
if (!(e instanceof DocumentApiAdapterError))
|
|
99068
|
+
throw e;
|
|
99069
|
+
}
|
|
98887
99070
|
}
|
|
98888
99071
|
return didApply;
|
|
98889
99072
|
}, { expectedRevision: options?.expectedRevision }).steps[0]?.effect !== "changed")
|
|
@@ -100242,15 +100425,16 @@ function trackChangesRejectAllWrapper(editor, _input, options) {
|
|
|
100242
100425
|
return { success: true };
|
|
100243
100426
|
}
|
|
100244
100427
|
function previewPlan(editor, input2) {
|
|
100245
|
-
const evaluatedRevision = getRevision(editor);
|
|
100246
100428
|
checkRevision(editor, input2.expectedRevision);
|
|
100247
100429
|
if (!input2.steps?.length)
|
|
100248
100430
|
throw planError("INVALID_INPUT", "plan must contain at least one step");
|
|
100249
100431
|
const failures = [];
|
|
100250
100432
|
const stepPreviews = [];
|
|
100251
100433
|
let currentPhase = "compile";
|
|
100434
|
+
let evaluatedRevision = getRevision(editor);
|
|
100252
100435
|
try {
|
|
100253
100436
|
const compiled = compilePlan(editor, input2.steps);
|
|
100437
|
+
evaluatedRevision = compiled.compiledRevision;
|
|
100254
100438
|
currentPhase = "execute";
|
|
100255
100439
|
const tr = editor.state.tr;
|
|
100256
100440
|
const { stepOutcomes, assertFailures } = runMutationsOnTransaction(editor, tr, compiled, { throwOnAssertFailure: false });
|
|
@@ -100662,7 +100846,13 @@ function queryMatchAdapter(editor, input2) {
|
|
|
100662
100846
|
const paginatedMatches = isTextSelector ? applyPagination(rawMatches, userOffset, input2.limit) : rawMatches;
|
|
100663
100847
|
if (require$1 === "first" || require$1 === "exactlyOne" || require$1 === "all") {
|
|
100664
100848
|
if (totalMatches === 0)
|
|
100665
|
-
throw planError("MATCH_NOT_FOUND", "selector matched zero ranges"
|
|
100849
|
+
throw planError("MATCH_NOT_FOUND", "selector matched zero ranges", undefined, {
|
|
100850
|
+
selectorType: input2.select?.type ?? "unknown",
|
|
100851
|
+
selectorPattern: input2.select?.pattern ?? "",
|
|
100852
|
+
selectorMode: input2.select?.mode ?? "contains",
|
|
100853
|
+
searchScope: (input2.within?.kind === "block" ? input2.within.nodeId : undefined) ?? "document",
|
|
100854
|
+
candidateCount: 0
|
|
100855
|
+
});
|
|
100666
100856
|
}
|
|
100667
100857
|
if (require$1 === "exactlyOne" && totalMatches > 1)
|
|
100668
100858
|
throw planError("AMBIGUOUS_MATCH", `selector matched ${totalMatches} ranges, expected exactly one`, undefined, { matchCount: totalMatches });
|
|
@@ -100671,7 +100861,11 @@ function queryMatchAdapter(editor, input2) {
|
|
|
100671
100861
|
if (isTextSelector && raw.textRanges?.length) {
|
|
100672
100862
|
const blocks2 = buildMatchBlocks(editor, raw.textRanges, evaluatedRevision, id2);
|
|
100673
100863
|
if (blocks2.length === 0)
|
|
100674
|
-
throw planError("INTERNAL_ERROR", `text match produced no blocks for ${id2}
|
|
100864
|
+
throw planError("INTERNAL_ERROR", `text match produced no blocks for ${id2}`, undefined, {
|
|
100865
|
+
source: "query-match-adapter:buildMatchEntries",
|
|
100866
|
+
invariant: "text match must have at least one block after zero-width filtering",
|
|
100867
|
+
context: { matchId: id2 }
|
|
100868
|
+
});
|
|
100675
100869
|
const snippetResult = buildBlocksSnippet(editor, blocks2);
|
|
100676
100870
|
return {
|
|
100677
100871
|
id: id2,
|
|
@@ -134950,7 +135144,7 @@ var Node$13 = class Node$14 {
|
|
|
134950
135144
|
console.warn("Failed to initialize developer tools:", error);
|
|
134951
135145
|
}
|
|
134952
135146
|
}
|
|
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 {
|
|
135147
|
+
}, BLANK_DOCX_DATA_URI = `data:application/vnd.openxmlformats-officedocument.wordprocessingml.document;base64,UEsDBBQAAAAIAAAAIQAykW9XXgEAAKUFAAATABwAW0NvbnRlbnRfVHlwZXNdLnhtbFVUCQADMNDOEjDQzhJ1eAsAAQT1AQAABBQAAAC1lMtqwzAQRfeF/oPRNthKuiilxMmij2UbaPoBijRORPVCmrz+vuM4NaWkMeSxMcgz994zQsxwvLEmW0FM2ruSDYo+y8BJr7Sbl+xz+po/sCyhcEoY76BkW0hsPLq9GU63AVJGapdKtkAMj5wnuQArUuEDOKpUPlqBdIxzHoT8EnPgd/3+PZfeITjMsfZgo+EzVGJpMHvZ0O+GJIJJLHtqGuuskokQjJYCqc5XTv1JyfcJBSl3PWmhQ+pRA+MHE+rK/wF73TtdTdQKsomI+CYsdfG1j4orL5eWlMVxmwOcvqq0hFZfu4XoJaREd25N0Vas0K7XxeGWdgaRlJcHaa07IRJuDaTLEzS+3fGASIJrAOydOxHWMPu4GsUv806QinKnYmbg8hitdScE0hqA5js4m2NncyySOifRh0RrJZ4w9s/eqNU5DRwgoj7+6tpEsj57PqhXkgJ1IJvvluzoG1BLAwQKAAAAAACTZE1bAAAAAAAAAAAAAAAACQAcAGRvY1Byb3BzL1VUCQADhhztaIcc7Wh1eAsAAQT1AQAABBQAAABQSwMEFAAAAAgAAAAhACEYr1llAQAAxQIAABAAHABkb2NQcm9wcy9hcHAueG1sVVQJAAMw0M4SMNDOEnV4CwABBPUBAAAEFAAAAJ1STU/DMAy9I/Efqt63dBwmNHlBaAhx4GPSCpyjxG0j0iRKson9e5wVSoEbOdnP9st7TuDqvTfFAUPUzq7LxbwqC7TSKW3bdflc384uyyImYZUwzuK6PGIsr/j5GWyD8xiSxlgQhY3rskvJrxiLssNexDmVLVUaF3qRKA0tc02jJd44ue/RJnZRVUuG7wmtQjXzI2E5MK4O6b+kysmsL77UR098HGrsvREJ+WOeNHPlUg9sRKF2SZha98grgscEtqLFyBfAhgBeXVAx9wwBbDoRhEy0vwxOMrj23mgpEu2VP2gZXHRNKp5OYos8DWzaAmRgh3IfdDpmqmkK99ri6YIhIFVBtEH47gROMthJYXBD1nkjTERg3wBsXO+FJTo2RsT3Fp997W7yFj5HfoITi686dTsvJP4yO8FhRygqUj8KGAG4o8cIJrPTrG1RffX8LeT1vQy/ki+W84rOaV9fGLkevwv/AFBLAwQUAAAACAAAACEACvOn+GYBAADtAgAAEQAcAGRvY1Byb3BzL2NvcmUueG1sVVQJAAMw0M4SMNDOEnV4CwABBPUBAAAEFAAAAJ2SXU+DMBSG7038D6T3UGBqDAGWTLMrZ0yc0XhX27Otjn6k7cb27y0wmMRdeXc+nvP29G3z6UFUwR6M5UoWKIliFICkinG5LtDbch7eo8A6IhmplIQCHcGiaXl9lVOdUWXgxSgNxnGwgVeSNqO6QBvndIaxpRsQxEaekL65UkYQ51OzxprQLVkDTuP4DgtwhBFHcCMY6kERnSQZHST1zlStAKMYKhAgncVJlOAz68AIe3Gg7fwiBXdHDRfRvjnQB8sHsK7rqJ60qN8/wR+Lp9f2qiGXjVcUUJkzmjnuKihzfA59ZHdf30BdVx4SH1MDxClTPnO6DWZgJKlapq83jm/hWCvDrJ8eZR5jYKnh2vl37LRHBU9XxLqFf9gVBzY7jo/5224mDOx58y/KtCWGND+Z3K0GLPDmZJ2Vfed98vC4nKMyjdObMEnD5G6Zpll8m8XxZ7PdaP4sKE4L/FuxF+gMGn/Q8gdQSwMECgAAAAAAk2RNWwAAAAAAAAAAAAAAAAYAHABfcmVscy9VVAkAA4Yc7WiHHO1odXgLAAEE9QEAAAQUAAAAUEsDBBQAAAAIAAAAIQAekRq36QAAAE4CAAALABwAX3JlbHMvLnJlbHNVVAkAAzDQzhIw0M4SdXgLAAEE9QEAAAQUAAAArZLBasMwDEDvg/2D0b1R2sEYo04vY9DbGNkHCFtJTBPb2GrX/v082NgCXelhR8vS05PQenOcRnXglF3wGpZVDYq9Cdb5XsNb+7x4AJWFvKUxeNZw4gyb5vZm/cojSSnKg4tZFYrPGgaR+IiYzcAT5SpE9uWnC2kiKc/UYySzo55xVdf3mH4zoJkx1dZqSFt7B6o9Rb6GHbrOGX4KZj+xlzMtkI/C3rJdxFTqk7gyjWop9SwabDAvJZyRYqwKGvC80ep6o7+nxYmFLAmhCYkv+3xmXBJa/ueK5hk/Nu8hWbRf4W8bnF1B8wFQSwMECgAAAAAAk2RNWwAAAAAAAAAAAAAAAAUAHAB3b3JkL1VUCQADhhztaIcc7Wh1eAsAAQT1AQAABBQAAABQSwMEFAAAAAgAoWRNW+xw0GIQAgAAtAcAABIAHAB3b3JkL2ZvbnRUYWJsZS54bWxVVAkAA54c7WieHO1odXgLAAEE9QEAAAQUAAAAvZPBbqMwEIbvlfoOlu8NhpA0RSFV222kvexh1T6AY0ywFtvI44Tk7dcYiBSyuy3tqiCEGf75mPnHLO8PskR7bkBoleJwQjDiiulMqG2KX1/WNwuMwFKV0VIrnuIjB3y/ur5a1kmulQXk8hUkkqW4sLZKggBYwSWFia64ci9zbSS17tFsA0nNr111w7SsqBUbUQp7DCJC5vj6CrmjZZn3oHSeC8a/abaTXFkPCQwvHVYrKEQFZ8j6Pcham6wymnEA170sW6ikQp2zwviCJgUzGnRuJ663rjbPc4yQ+JUsB5TZOEr0Z8qc8cM40KIDBS7zAiaycbD5CSayIexjZQ0p2W4UJ5r2FTW3Jn0IhMxmxThmP8GgyaWWFhSKCywf1+/sxDxKNwgkWfJ9q7Shm9KR3CZDbosgD0btZJobaieO+j6Qdwiv2mK6nxLViaLSUV6E5IB+8Br91JKqXtZJK6o08NCp97RMMWkanZMpmZHYXZFbxTg4T2EFNcDtKYUMBTmVojz2743/6kBSCcuKXrGnRjQdD0Ugtk6ygw1J8TMhJHper3EbCVP85CK3i9ljF4maSvxx10WmpwhpIsxz/GPYcpjnnDT915dB6+Bf/HzSOyO4aRx908tb59+d97TxMv60l1Jn3PzbzFwcePYRJ+PpVzv54MZevunho9uPsfewPT/rIdQC4P/sx4evdrFfwuo3UEsDBBQAAAAIAAAAIQCWFrgr1QIAAIgLAAARABwAd29yZC9kb2N1bWVudC54bWxVVAkAAzDQzhIw0M4SdXgLAAEE9QEAAAQUAAAApZZbb9sgFMffJ+07WH5v8S1OYjWttGab+jCpWrcPQIDEqAYsILd9+h3s+LJ5qxz3CXPg/PjDORxz93AShXdg2nAlV354G/gek0RRLncr/+ePLzcL3zMWS4oLJdnKPzPjP9x//HB3zKgie8Gk9QAhTXYsycrPrS0zhAzJmcDmVnCilVFbe0uUQGq75YSho9IURUEYVF+lVoQZA+s9YnnAxr/gyGkcjWp8BGcHTBDJsbbs1DHCqyEztESLISiaAIIdRuEQFV+NSpFTNQAlk0CgakCaTSP9Y3PpNFI0JM2nkeIhaTGNNEgnMUxwVTIJg1ulBbbQ1TsksH7dlzcALrHlG15wewZmkDYYzOXrBEXg1RJETK8mzJFQlBUxbShq5e+1zC7+N62/k57V/pem9WDFuGVhuSViJ1sY2/jqMWdXu68vhaU6NaRZAeeopMl52VYHMZUGg3kDObx1AAdR+G1lC0detf+VtnUdhg44Rv4ldqKolb9NDIMR0XSI1mOMhD/XbJQIyOBu4UlH0zvccGTxaQDRAJASNvJn0TAWFwYi3e12HD7yWjWctOVw2uNME9MD0P1ViChudLjGufdYhlqaX4drYoScL7Y4xybvE9l1G5y1uLPonXe5e9+l+qrVvuxo/H20p668HuV1GwzSvyNYmveJeclxCVVXkOxpJ5XGmwIUwVXz4LZ4VQS8Ol1d49U3wGti7VUJ5Lmq5d/DO22j6Nm1JQwkWYk1foI0T8JlmqTz0K+s8Jezzhoks+VivpyBNYM3If0OJkiveD3/1JqetTPGYZA8fm6Na7bF+8IOpz/3JiMnwzBin/VYfiV89/ILBqFihVGUBG4iJHQ4W8A3qid8w45oFRTWMKmnaL7LbdfdKGuV6PoF2/ZGc4Ypg3XnUdXdKmV73d3eVt3LckQVBqymxITVcyozvIe/aheSrOCSPXNLQGWcVqOo2Xf1WUcEdU/o+99QSwMEFAAAAAgAAAAhAMrnZYorBAAAvgwAABEAHAB3b3JkL3NldHRpbmdzLnhtbFVUCQADMNDOEjDQzhJ1eAsAAQT1AQAABBQAAAC1V22PmzgQ/n7S/QfE58uG1ySLmq3yervV5lqVre6zAZNYa2Nkm03T0/33GwwO9BZVSav9hJln5pnxeGYM795/ZdR6wUISXsxt98axLVykPCPFfm5/edqOZrYlFSoyRHmB5/YJS/v93e+/vTtGEisFatICikJGLJ3bB6XKaDyW6QEzJG94iQsAcy4YUvAq9mOGxHNVjlLOSqRIQihRp7HnOBO7peFzuxJF1FKMGEkFlzxXtUnE85ykuH0YC3GJ38ZkzdOK4UJpj2OBKcTAC3kgpTRs7GfZADwYkpcfbeKFUaN3dJ0LtnvkIjtbXBJebVAKnmIp4YAYNQGSonMcvCI6+74B3+0WNRWYu45e9SMPryPwXhFMUvz1Oo5ZyzEGyz4Pya7jmZx5SNbj+blgegRZdRWF55s46kdt3uOSmcoO19GZMxrXtkihA5KHPiO+boPhme7EunxLekkFNtAjSQQSp375sTR62BdcoIRCOFCGFlSSpaOzmqOsH1ZTHZbJg6WTa9/B1PnGObOOUYlFCq0HI8tz7HENQMHzPFZIAVEkS0ypnmEpxQj8HqO9QAymj5FomwznqKLqCSWx4iUovSDY3tRQpgckUKqwiEuUAtuKF0pwavQy/hdXK5hkAhqttdBzrVvFzYwEiwIx2PB3c2/HM1xHVgly+cnYxrsb9l3+3xGHmS5Ihp/qRMfqRPEWgo/JN7wosg+VVAQY9fT7hQh+FAAuas8foTSeTiXeYqQqSNMbOdMnsaWk3BEhuHgoMqiNN3NG8hwLcECg1nZQPkTwo87zPUYZXKVv5LeS+G9Qhs70n6Asn5dcKc7uT+UBcv1rJ6nrfdwvX/ggyKRZfOZcnVVhbPnr6bKJtEYvQXzXCVabQWTibN1hm0XgO/4gsnLXbjCMhLPlaggJboOJuxhCJqG3CcIhZLH0Zv5sCFku3Wk4iKxW/srfDiIbZz28n83Km04HY9vees7tpj2d9kxYVH9qfBJmVTe2xRqLFWKJIMja1R8j41ojEc9LUhg8wTClcR+Jq8SAo1EDSIYo3UKJGcBp5BmR5Rrnek13SOw73lZDDEphyn44c9VTG4s/Ba/KBj0KVDYNa1TcIGgtSaEeCTNyWSWxsSrgXulBVZF9fBE6T116jpGCBtCD7xHpRtK6uBh9idtGoyKumwTvUFk2vZbs3blNyf6g3Lo9FLxl8M2qX5K912KexrwG0y8orXcG2u2ik3lG1tPzjczvZIGRBZ0sNLKwk02MbFLLDjBdBVx1z9D2ZlnLc04pP+LsvsNficwlmBI48fjEku5uu2kwSiTMoRKuQcWFwf7QmBtEGU8f6vs6aOT+YhGuF860gUN9fSo9qiC1n3G+RBJnLWZMw8b0n8nEmbjuajYKZpvb0WYaBKOZu7wdTafO1PW3rufPnH/bPjA/Hnf/AVBLAwQUAAAACAAAACEA24Vsw30EAACXHQAAEgAcAHdvcmQvbnVtYmVyaW5nLnhtbFVUCQADMNDOEjDQzhJ1eAsAAQT1AQAABBQAAADNmc1u4zYQx+8F+g6CgB4Tifq2sM4iySZFFttF0U3RMy3RlhB+CBRlx9d9mT5CH2tfoaRkyXLkxJIctz4pJjk/zQxnyL+dDx+fCdaWiOcpo1MdXJq6hmjE4pQupvqfj/cXga7lAtIYYkbRVF+jXP949fNPH1YhLcgMcblQkwyah6ssmuqJEFloGHmUIALzS5JGnOVsLi4jRgw2n6cRMlaMx4ZlArP8K+MsQnkuObeQLmGub3DRcz9azOFKGiugY0QJ5AI9bxlgMMQ1JkbQBVkjQDJCC3RR9mCUZyivOiBnFEh61SG540h7gvPGkawuyR9HsrukYBypU06kW+AsQ1ROzhknUMiPfGEQyJ+K7EKCMyjSWYpTsZZM06sxMKVPIzySVg2B2PFggm8QFiNsxzWFTfWC03Bjf9HYK9fDyn7zaCwQ7vda+bqJgZ4FzkVty/vkrjL/xKKCICrKrBkcYZlHRvMkzZrTgYylycmkhizfSsCSYL052UDPVnvtaPtUbcMW2Mf9zd4RXHn+NhGYPXZTIRqLPi7svrP2hMgK3r54VGpayQU9D58aYHUAXoR6XhY1I9gwjGjb3YqT9myrmuM1nDRuccY50wLExSCEZdd+qIcyb7HyWMTJMFy9R4ayhQImME/aRDQsQLfBrUkr39niuKb6lbMi29LS42gP2+N1RYcFaHovdzDLj3PmWwIzeeqSKHxYUMbhDEuPZKtpslu0cge0qlzVQ6s6QKv3WisLSFOnln4lhRqc5YLDSHwtiLbz6UFWuxR8khlyJFUeV4OVprueC8RvOIJPaomi0Fy9LVxCeQUAD1jejenrhpohBRbpF7RE+HGdoXpNsp7xNP5NzWE1V60VJMP1Chfc3Tp3ZlDN4KWaSOWjcioUGZb3remYE9M0QelD6WPjRGUnZeg9aQZnBcZINMRHeQfVUz++/9OMf47qUYzmm+XZ71w9UqrCVMNT3bdKTxJIF6Ugtj1TrTWaxXzzuGdU5Cq5eZTKOvy2JjOGS9NrmbedgZRKcIzmUGZmAyspRunYy0yATibsckTeZ/JSXCK14ujMsKF5AY4zLjG3rOAp4tpXtGpl58VolHcXDsua1cma+/5Z+/H976F5s4A3Lm9/ydXqO1neytru2LAE2Xsa7AQJGtxwVhD83x3nnGXHyTycdce5Z9pxjj3yCH/vjvPOtONcc+RR/n4d559lx7n+yLP6P+q44Ew7znNGHuHHd5yxo24PSl8wRvq6gW8C++b6OOl7d+c5wL91+kjf+57bGKMoJRDv3cdfwOU7a9+echVMRhYlZivEvyAh92J/RNbgiA6p1p5aEtwcE9IfjEC6PyJ7X0Q8XSQDBCUIeoTUVX/3I0N6s+acwTt0SP71VGynKzp3cEiHhFtPOXWyovOGF11HU/Uquq4AOknR+YN36JAC6ilaTld0wfCQDmiXnoriZEU3GV50HVnxStF1NQAt737auvPVD2dhXJQ/q5WDMlTHn3jWy5/LHpprv34X3cO09jGdwHWB7wDwOhO0mUbrH6pX/wJQSwMEFAAAAAgAAAAhAL5+dmJWAQAA0AMAABQAHAB3b3JkL3dlYlNldHRpbmdzLnhtbFVUCQADMNDOEjDQzhJ1eAsAAQT1AQAABBQAAACd01FvwiAQAOD3JfsPhHelumlMYzVZFpe9LEu2/QAKV0sGXAO46n79aLWuiy92T0DLfbnjYLneG02+wHmFNqOTcUIJWIFS2W1GP943owUlPnAruUYLGT2Ap+vV7c2yTmvI3yCEuNOTqFifGpHRMoQqZcyLEgz3Y6zAxp8FOsNDXLotM9x97qqRQFPxoHKlVTiwaZLM6Ylx1yhYFErAI4qdARvaeOZARxGtL1XlO62+RqvRycqhAO9jPUYfPcOVPTOT+wvIKOHQYxHGsZhTRi0VwydJOzP6F5gNA6YXwFzAfpixOBksRvYdJYc587OjZM/5XzI9QO4GEdO7Lo9maMJ7lpdBlsO4rkesieWBl9yXfRGGFTg7cwfTnLcR6fPWouO5jlK8QSReAtLC5NiFZiDHxpKuBNKeC13FJ4ZVUEZ9wwbdg8Pag2PNZ6411q8vT3HB/rzD1Q9QSwMEFAAAAAgAAAAhAD+v4WZfDwAADaYAAA8AHAB3b3JkL3N0eWxlcy54bWxVVAkAAzDQzhIw0M4SdXgLAAEE9QEAAAQUAAAA3Z1tc9s2Esff38x9B45e9V6ksp5lT92O7STnzCWpWzvX1xAJWaj5oCOpOO6nPwB8EKUlKC64UdRMZlqL4v4I4L+7xIIU+dMvXwLf+czjREThZW/w41nP4aEbeSJ8vOx9enj7at5zkpSFHvOjkF/2XnjS++Xnf/7jp+eLJH3xeeJIQJhcBO5lb5Wm64t+P3FXPGDJj9Gah/LLZRQHLJUf48d+wOKnzfqVGwVrloqF8EX60h+enU17OSZuQ4mWS+Hy15G7CXiYavt+zH1JjMJkJdZJQXtuQ3uOYm8dRy5PEtnpwM94ARNhiRmMASgQbhwl0TL9UXYmb5FGSfPBmf4r8LeACQ4wBICpy7/gGPOc0ZeWVY7wcJxpyRFehWPXmArA26AQw1HRDvU/ZV5hJV7qrXC4QqO+smUpW7FkVSVyXAcnJe4lUOMduBfvHsMoZgtfkqQHOdIJHA12MhXU/5xMWKfogqPHpfezjC4vcl/zJdv4aaI+xndx/jH/pP/3NgrTxHm+YIkrxGXvKhZMDvHzBWdJepUI9iBbLg8fCNmS26swEerLlfqjsrObXPYeRCBD+SN/dn6PAhY6P1xH3otzc/+vXl8d6InHodzzM/Mve8NsU/JXuWFcbLlJ9rf5LHwstvHw1af7ausqmxbCk01i8av7K204GF/44pGlm1g2S33ShCwRxd6N7Db/km5k++XO/Xw8+vujtC4/ZXvtDalMGDJ93GdZTH7Ll+8j94l796n84rJ31ss2fnp3F4solpnqsnd+nm+854G4FZ7Hw8qO4Up4/I8VDz8l3Ntu/+2tzjb5BjfahPLv0WyqZfYT780Xl69V7pLfhkzp9VEZaG02Yntwbf6/AjbIB7jOfsWZSuDOYB9xjkYMlUVS6W09c7PX9wH6QKNjHWh8rANNjnWg6bEONDvWgebHOtD51z6QCD2Z3wf1hwHUQxxDNKI5hmBDcwyxhOYYQgXNMUQCmmNwdDTH4MdojsFNEZw0ck1eWHH2kcHbm7mHzxF23MOnBDvu4TOAHfdwwrfjHs7vdtzD6dyOezh723EPJ2s8N5tqOe9kmIVp5yhbRlEaRil31PS0M42FkqWrWhqeOunxmKSTBJgss+Un4s40l+nPhz1k0u18nqqCzomWzlI8quKkc8N5+Jn70Zo7zPMkjxAYc1k+GUbExqdjvuQxD11O6dh0UF+E3Ak3wYLAN9fskYzFQ494+AoiSVIoHZpt0pUKEkHg1AFz44hgzsLI8sN7kXQfKwVxrje+z4lYH2lcTLO61wYa07000JjulYHGdC8MKppRDVFOIxqpnEY0YDmNaNwy/6Qat5xGNG45jWjcclr3cXsQqc/3Zx2D9mt3N36UUCS8e/EY6vXTzqR8zdS5YzF7jNl65ahl54MzLfRx9JLzA8U5rSRRzeu1i6hVZxFuug/oDo0quEoeUXiVPKIAK3ndQ+yDnCarCdotTT1zv1mktUHbviq4Z/4mm9B2jzaWdvewbQC8FXFCFgb1WAIP/qims7dEU71tK7s3bMvqHlb7WYm0eTmSoJV+5D7RpOHblzWPZVn21Jn0NvL96Jl7dMT7NI4yX6uG/HDYOuTfBOsVS0QCEO1P9cUdDM4Htu7coTufiZBGtzevAiZ8h24Gcfvw4b3zEK1VmakGhgZ4HaVpFJAx85XAH/7gi3/RNPBKFsHhC1Fvr4iWhzTsRhCcZDJS5BGR5DRThILkHKp5/+Evi4jFHg3tLubZTUMpJyLes2DtU8WWzIvPMv8QzIY0778sFmpdiCqoHkhglWXDZLP4k7vdU93HyCFZGfp1k+r1Rz3V7X61dwfXfZqwg+s+RdBqytOD8l+Czu7gund2B0fV2RufJYkwXkK15lF1t+BR97d78ZfzIj+KlxufbgALINkIFkCyIYz8TRAmlD3WPMIOax51fwldRvMIluQ079+x8MjE0DAqJTSMSgYNo9JAw0gF6H6HTgXW/TadCqz7vToZjGgKUIFR+Rnp6Z/oKk8FRuVnGkblZxpG5WcaRuVno9cOXy7lJJjuFFNBUvlcBUl3oglTHqyjmMUvRMg3Pn9kBAukGe0ujpbq1yRRmN3ETTGd3SxSysl2hqMS+Q++IGuaYlG2i2BFlPl+FBGtrW1PONpy9961Q2b65xydm3DnM5evIt/jsaFPjfXy/Zq5Ai6dtr9Y8l48rlLnflWu9lcx07ODlkXBvmN2+IB1Yz4dNl5m8sQmKBoKf0wxHbU3HgLj8WHj7Uxix3LS0hIec3rYcjtL3rGctbSEx5y3tBwBy6Z4eM3ip1pHmDX5T1njGZxv1nhhvjCuPWyTI5WWdS44a/KinVBxrlxXXS2A6rSLGbN9u+Ax22OiyEzBhJOZ0jquzIimAPudfxZJ7Rr1gevf5d0TIO+PW2fO3zZRCi5TD9v/qOudnDiFCXdqOaP2F652sox5HFunGzOidd4xI1onIDOiVSYymqNSkpnSOjeZEa2TlBmBzlbwjIDLVtAel62gvU22ghSbbNVhFmBGtJ4OmBHoQIUIdKB2mCmYEahABeZWgQop6ECFCHSgQgQ6UOEEDBeo0B4XqNDeJlAhxSZQIQUdqBCBDlSIQAcqRKADFSLQgWo5tzeaWwUqpKADFSLQgQoR6EAddwxUaI8LVGhvE6iQYhOokIIOVIhABypEoAMVItCBChHoQIUIVKACc6tAhRR0oEIEOlAhAh2ok46BCu1xgQrtbQIVUmwCFVLQgQoR6ECFCHSgQgQ6UCECHagQgQpUYG4VqJCCDlSIQAcqRKADddoxUKE9LlChvU2gQopNoEIKOlAhAh2oEIEOVIhABypEoAMVIlCBCsytAhVS0IEKEehAhYgm/8wvUZpusx/gVz2Nd+wjfueTNer36k+5d9ZQ26OKVplZ7X+LcB1FT07tDw9Ho/YQsfBFpJeoDZfVq9wZ+sLnrzfNv/Bp8RiPtl3Jfwuhr5kC+LitJVhTGTe5fNUSFHnjJk+vWoJZ57gp+1YtwWlw3JR0dVwWN6XI0xEwbkozFeOBwbwpW1fM4RA35eiKIRzhpsxcMYQD3JSPK4YTRyXnfetJy3GalveXAkKTO1YIMzOhyS2hVsa1/daimQlt1TMT2spoJqD0NGLwwppRaIXNKDupYZhhpbYPVDMBKzUkWEkNMPZSQ5S11BBlJzVMjFipIQErtX1yNhOspAYYe6khylpqiLKTGp7KsFJDAlZqSMBK3fGEbMTYSw1R1lJDlJ3UcHKHlRoSsFJDAlZqSLCSGmDspYYoa6khyk5qUCWjpYYErNSQgJUaEqykBhh7qSHKWmqIapJar6LYV0sVc9wkrGKIOyFXDHHJuWJoUS1VrC2rpQrBslqCWtlVS1XR7Kqlqnp21VJVRrtqCehpVy3VCmtXLdUqbFctmaXGVUt1UtsHql21VCc1rloySo2rlhqlxlVLjVLjqiWz1LhqqU5qXLVUJ7V9crarloxS46qlRqlx1VKj1LhqySw1rlqqkxpXLdVJjauW6qTueEK2q5YapcZVS41S46ols9S4aqlOaly1VCc1rlqqkxpXLRmlxlVLjVLjqqVGqXHVkllqXLVUJzWuWqqTGlct1UmNq5aMUuOqpUapcdVSo9S4aumDNBEEj4C6D1icOnTPi7tlySpl3R9O+CmMeRL5n7nn0Hb1PaqX/eed118ptn6dn9w/lWOmnoBe+bmSlz0BNgfqHd955WuqlLFqiZO/5yvfrBucX67NjqgNDxyqhOfXigcAv325lT7Cgsle/RrWHTxUD0as2a4cotheHOZmxeLs262rFvuc7/fl+SJO1Avcsq/Pzoaj0evZdbbXOns12xPn64/y+P3ig9SHJ/pTkv2AVpov1DPF5AiMpvq3V2yZ8viyN8+jNsqe2vT+s18eKZcuP0btW+CKV76xPyuvfNt/H5z68k2+TX2vXwlXa+kmaWXztfBE1jhXRXnZrrfj2VT7ht5ZZ4DLHtPxv92sbkpR9xm8zQjbF8gVF5urL5AbF30tXu1m4zxDo/MMKZ1n2MJ5tmGZ7bcTlF/ZvQYt3WvwfbrXaAjdK9vW0b1GRvcaUbrX6Dtxr2Gzex1yomO4ynAOXSXb1tFVxkZXGVO6yvjEXWVe9ZSx0VNGX8dTRPbfm4TEbzp6xMToERNKj5h8Hx4xPs3c0dEHpkYfmFL6wPTEfcAs++ToiWByrv7tO4F609LWBR6EeoPv1ZTAA2ZGD5hResDsb+sB0yME/pE1nxs1n1NqPj8pzaGys6PH9nCm/rXR+TXFnO/cqPM5pc7nJ67z/AgRTK+sKweVufkD1Q3rX/mLkcon++jXIu1rbnh7kkGvQTu9zO1O1SpsQ5v1Km3jwl3+sHaTQ7X2qHThZ1LLP96FyqGe83fYZy31vrBeseMN9/0PLNs7Wpt39fkyzb4dnM1rvl9kr4Qw2sf62oER0N9tTL/shHm8s5dE5j9qMa6T6keGweHOHiXWcaRb+rC7SeTQ6OXe/fbtrIHut/K2WG51tnlmL3HVxoEpXQ0OpCpz8vle1qO6LHciJR02SjokknSIO/t8/wp3WXFEKjxqVHhEpPDoayn8d1/0Q6o1blRrTKTW+NTUOvbCG1KVSaMqEyJVJqemysnpMG3UYUqkw/TUdDjqahRSklmjJDMiSWanJslpiTBvFGFOJML81EQ46koOUpLzRknOiSQ5PzVJvslyWvZgi/2xzrZSrKNpUtMi2iAv2FBrZNtF7r0L4656fcWXdMP8/En6jctjxyyBtk3W3XpV9PuJx+XgbifLZXqcwunzhDgRbiWqdYOu4VbxJbP6p1m2Hl+z+iAtX6K9L1D5BUWoFrDGaB1YRGu4CbI/hA/vhyq/BDE9mB64Je+bTECAVwwm36Lm3RHL5BZdQ3fXvczecOJzxq8sWX3MZq8B2Fcm20oRrZrUFKpDmztrD92ANige3venW3BUEcvj2khtmGSOz9S/NhpS18PbgasVp2vMVBQ2a3IwYI46cvUOrC6fbN+rsT9We6/dOOTRcChGYwv3FPpSl7pQpZ6R12LO19Jdyk7nD44rn2a3323wuDuco9R4BOqEetg7jnifVT4W9Ylu920oFAmverimvDeyKSjW117lAqneL5GelL9X+y91j5yTZUeuJ61OPuyW6+PlpdSvfKT+tmeHfhgxKjJ7NcbmU90afWU3+0SS/L/peijwo0bX7Xo62AmSAx57cnHfmCO3z9Y0DeB2j65Zsrjmh8qSi+yo+WglMqn4N2xNM3ZgSjmpH9Hir+Tn/wNQSwMECgAAAAAAk2RNWwAAAAAAAAAAAAAAAAsAHAB3b3JkL3RoZW1lL1VUCQADhhztaIcc7Wh1eAsAAQT1AQAABBQAAABQSwMEFAAAAAgAAAAhAGeA/LSbBgAAzSAAABUAHAB3b3JkL3RoZW1lL3RoZW1lMS54bWxVVAkAAzDQzhIw0M4SdXgLAAEE9QEAAAQUAAAA7VlPb9s2FL8P2HcgdHf1x5IsBXUL/23XJm3RpB16ZGRaYkyJAkknMYoCQ3vaZcCAbthlwG47DMMKrMCKXfZhCrTYug8xSnZs0abatE23AksMxCL5e48/vvf4+ExdvHycEnCIGMc0axv2BcsAKIvoCGdx27izN2wEBuACZiNIaIbaxgxx4/KlTz+5CLdEglIEpHzGt2DbSITIt0yTR7Ib8gs0R5kcG1OWQiGbLDZHDB5JvSkxHcvyzRTizAAZTKXam+MxjhDYK1Qal06UD4j8lwledESE7UbljFWJEjua2MUXn/EeYeAQkrYh5xnRoz10LAxAIBdyoG1Y5Z9hXrpoLoWIqJGtyA3Lv4XcQmA0cUo5Fu8vBa2BE7j2Ur8z17+JGwTFZ6mvBMAokiu1N7C251uBs8BWQPNHje6wZTdVfEV/c1N/6HcdV8E3V3h3c43DcND3FLy7wnsb+I7ldMOmgvdWeH8D7w46LWeg4EtQQnA22UT7rSDwF+glZEzJVS089H2r1V/AVyizEl1z+UzUxVoKDygbSkDpXChwBsQsR2MYSVwnF5SDPuY5gTMD5DCjXHZbjm3LwHMtZ/kpLQ63EKxIz7sivtFV8AE8YjgXbeOa1GpUIC+ePXv+8Onzh789f/To+cNfwDaOE6GRuwqzuCr36sev//7+C/DXrz+8evyNHs+r+Jc/f/ny9z9ep14otL598vLpkxffffXnT4818A6D+1X4Hk4RBzfQEbhNU7lAzQRon72dxF4CcVWik8UcZrCQ0aAHIlHQN2aQQA2ui1Q73mUyXeiAV6YHCuHdhE0F1gCvJ6kC3KGUdCnTrul6MVfVCtMs1k/OplXcbQgPdXP31rw8mOYy7rFOZS9BCs1bRLocxihDAhRjdIKQRuwexopdd3DEKKdjAe5h0IVYa5I9vC/0QldxKv0y0xGU/lZss3MXdCnRqe+jQxUp9wYkOpWIKGa8AqcCplrGMCVV5DYUiY7k7oxFisG5kJ6OEaFgMEKc62RusplC9zqUeUvr9h0yS1UkE3iiQ25DSqvIPp30EpjmWs44S6rYz/hEhigEt6jQkqDqDina0g8wq3X3XYzE2+3tOzIN6QOkGJky3ZZAVN2PMzKGSKe8w1IlxXYY1kZHdxorob2NEIFHcIQQuPOZDk9zqid9LZFZ5SrS2eYaVGO1aGeIy1qpKG40jsVcCdldFNMaPjuztcQzg1kKWZ3mGxM1ZAb7TG5GXbySaKKkUsyKTasncZOn8FRabyVQCauizfXxOmPZ2+4xKXPwDjLorWVkYj+1bfYgQfqA2YMYbOvSrRSZ6kWK7VSKTbVyY3XTrtxgrhU9Kc7eUAH9N5XPB6t5zr7aqUso6zVOHW69sulRNsIff2HTh9PsFpJnyXldc17X/B/rmrr9fF7NnFcz59XMv1bNrAoYs3rZU2pJa29+xpiQXTEjaJuXpQ+Xe380lJ1loxRaXjTliXxcTKfgYgbLZ8Co+ByLZDeBuZzGLmeI+UJ1zEFOuSyfjFrdZfE1TXfoaHGPZ5/cbUoBKFb9lrfsl6WamPf6rdVF6FJ92Yp5lYBXKj09icpkKommhkSreToStnVWLEINi8B+HQuz4hV5OAFYXIt77pyRDDcZ0qPCT3P5E++euafrjKku29EsL3TPzNMKiUq4qSQqYZjIw2O9+4x9HYZ6VztaGq3gQ/ja3MwNJFNb4EjuuaYn1UQwbxtj+bNJPqa51MeLTAVJnLWNSCwM/S6ZJWdc9CFP5rByaL7+FAvEAMGpjPWqG0i24mY7LevjJRdaH5/lzHUno/EYRaKmZ9WUY3Ml2tH3BBcNOpWkd5PREdgnU3YbSkN5Lbsw4AhzsbTmCLNKcK+suJauFltReQO02qKQ5AlcnCjVZD6Hl89LOpV1lEzXV2XqTLgfD8/i1H2z0FrSrDlAWrVZ7MMd8hVWTT0rT5vrwsB6/Snx/gdChVqgp9bUU6s7O86wIKhM59fYzan15nueButRa1bqyrK18XKb7h/IyO/LanVKBJ9fkB3L8rt38lpyngnK3pPscizAlOG2cd/yOm7P8XoNK/AGDbfpWo3A6zQbHc9r2gPPtvpd54E0ikhS25vPPZQ/9sls8e6+7N94f5+elNoXIpqatKyDzVK4fH9vO/Xv7wGWlrnvO8OwGXb9RtjsDBtuvxs0wp7fbfT9Xqs/7Pe8IBw+MMBhCXY7zZ7rD4KGb/d6Dde3CvpB2Gi5jtNxW51g4HYeLGwtV37yfWLektelfwBQSwMECgAAAAAAk2RNWwAAAAAAAAAAAAAAAAsAHAB3b3JkL19yZWxzL1VUCQADhhztaIcc7Wh1eAsAAQT1AQAABBQAAABQSwMEFAAAAAgAAAAhALO+ix3+AAAAtgMAABwAHAB3b3JkL19yZWxzL2RvY3VtZW50LnhtbC5yZWxzVVQJAAMw0M4SiBztaHV4CwABBPUBAAAEFAAAAK2TzWrDMBCE74W+g9h7LTttQwmRcymBXFv3AWR7/UP1Y6RNWr99RUoShwbTg44zYme+hdV6860VO6DzvTUCsiQFhqaydW9aAR/F9uEFmCdpaqmsQQEjetjk93frN1SSwpDv+sGzkGK8gI5oWHHuqw619Ikd0ISXxjotKUjX8kFWn7JFvkjTJXfTDMivMtmuFuB29SOwYhzwP9m2afoKX22112joRgX3SBQ28yFTuhZJwMlJQhbw2wiLqAg0KpwCHPVcfRaz3ux1iS5sfCE4W3MQy5gQFGbxAnCUv2Y2x/Ack6GxhgpZqgnH2ZqDeIoJ8YXl+5+TnJgnEH712/IfUEsBAh4DFAAAAAgAAAAhADKRb1deAQAApQUAABMAGAAAAAAAAQAAAKSBAAAAAFtDb250ZW50X1R5cGVzXS54bWxVVAUAAzDQzhJ1eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAACTZE1bAAAAAAAAAAAAAAAACQAYAAAAAAAAABAA7UGrAQAAZG9jUHJvcHMvVVQFAAOGHO1odXgLAAEE9QEAAAQUAAAAUEsBAh4DFAAAAAgAAAAhACEYr1llAQAAxQIAABAAGAAAAAAAAQAAAKSB7gEAAGRvY1Byb3BzL2FwcC54bWxVVAUAAzDQzhJ1eAsAAQT1AQAABBQAAABQSwECHgMUAAAACAAAACEACvOn+GYBAADtAgAAEQAYAAAAAAABAAAApIGdAwAAZG9jUHJvcHMvY29yZS54bWxVVAUAAzDQzhJ1eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAACTZE1bAAAAAAAAAAAAAAAABgAYAAAAAAAAABAA7UFOBQAAX3JlbHMvVVQFAAOGHO1odXgLAAEE9QEAAAQUAAAAUEsBAh4DFAAAAAgAAAAhAB6RGrfpAAAATgIAAAsAGAAAAAAAAQAAAKSBjgUAAF9yZWxzLy5yZWxzVVQFAAMw0M4SdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAAk2RNWwAAAAAAAAAAAAAAAAUAGAAAAAAAAAAQAO1BvAYAAHdvcmQvVVQFAAOGHO1odXgLAAEE9QEAAAQUAAAAUEsBAh4DFAAAAAgAoWRNW+xw0GIQAgAAtAcAABIAGAAAAAAAAQAAAKSB+wYAAHdvcmQvZm9udFRhYmxlLnhtbFVUBQADnhztaHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAAAIAAAAIQCWFrgr1QIAAIgLAAARABgAAAAAAAEAAACkgVcJAAB3b3JkL2RvY3VtZW50LnhtbFVUBQADMNDOEnV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAAAIAAAAIQDK52WKKwQAAL4MAAARABgAAAAAAAEAAACkgXcMAAB3b3JkL3NldHRpbmdzLnhtbFVUBQADMNDOEnV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAAAIAAAAIQDbhWzDfQQAAJcdAAASABgAAAAAAAEAAACkge0QAAB3b3JkL251bWJlcmluZy54bWxVVAUAAzDQzhJ1eAsAAQT1AQAABBQAAABQSwECHgMUAAAACAAAACEAvn52YlYBAADQAwAAFAAYAAAAAAABAAAApIG2FQAAd29yZC93ZWJTZXR0aW5ncy54bWxVVAUAAzDQzhJ1eAsAAQT1AQAABBQAAABQSwECHgMUAAAACAAAACEAP6/hZl8PAAANpgAADwAYAAAAAAABAAAApIFaFwAAd29yZC9zdHlsZXMueG1sVVQFAAMw0M4SdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAAk2RNWwAAAAAAAAAAAAAAAAsAGAAAAAAAAAAQAO1BAicAAHdvcmQvdGhlbWUvVVQFAAOGHO1odXgLAAEE9QEAAAQUAAAAUEsBAh4DFAAAAAgAAAAhAGeA/LSbBgAAzSAAABUAGAAAAAAAAQAAAKSBRycAAHdvcmQvdGhlbWUvdGhlbWUxLnhtbFVUBQADMNDOEnV4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAAJNkTVsAAAAAAAAAAAAAAAALABgAAAAAAAAAEADtQTEuAAB3b3JkL19yZWxzL1VUBQADhhztaHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAAAIAAAAIQCzvosd/gAAALYDAAAcABgAAAAAAAEAAACkgXYuAAB3b3JkL19yZWxzL2RvY3VtZW50LnhtbC5yZWxzVVQFAAMw0M4SdXgLAAEE9QEAAAQUAAAAUEsFBgAAAAARABEAqQUAAMovAAAAAA==`, 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
135148
|
constructor(config2) {
|
|
134955
135149
|
this.search = config2.search;
|
|
134956
135150
|
this.caseSensitive = !!config2.caseSensitive;
|
|
@@ -153021,9 +153215,9 @@ var Node$13 = class Node$14 {
|
|
|
153021
153215
|
trackedChanges: context.trackedChanges ?? []
|
|
153022
153216
|
});
|
|
153023
153217
|
}, _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
|
|
153218
|
+
var init_src_Cl9CKlDG_es = __esm(() => {
|
|
153025
153219
|
init_rolldown_runtime_B2q5OVn9_es();
|
|
153026
|
-
|
|
153220
|
+
init_SuperConverter_DFpPWkcl_es();
|
|
153027
153221
|
init_jszip_ChlR43oI_es();
|
|
153028
153222
|
init_uuid_2IzDu5nl_es();
|
|
153029
153223
|
init_constants_DBKi0Amm_es();
|
|
@@ -161141,6 +161335,9 @@ function print() { __p += __j.call(arguments, '') }
|
|
|
161141
161335
|
"TARGET_MOVED",
|
|
161142
161336
|
"PLAN_CONFLICT_OVERLAP",
|
|
161143
161337
|
"INVALID_STEP_COMBINATION",
|
|
161338
|
+
"REVISION_CHANGED_SINCE_COMPILE",
|
|
161339
|
+
"INVALID_INSERTION_CONTEXT",
|
|
161340
|
+
"DOCUMENT_IDENTITY_CONFLICT",
|
|
161144
161341
|
"CAPABILITY_UNAVAILABLE"
|
|
161145
161342
|
];
|
|
161146
161343
|
T_QUERY_MATCH2 = [
|
|
@@ -162654,6 +162851,7 @@ function print() { __p += __j.call(arguments, '') }
|
|
|
162654
162851
|
"commentRangeStart",
|
|
162655
162852
|
"commentRangeEnd"
|
|
162656
162853
|
]);
|
|
162854
|
+
VALID_CREATE_POSITIONS = ["before", "after"];
|
|
162657
162855
|
REF_HANDLERS = [
|
|
162658
162856
|
{
|
|
162659
162857
|
prefix: "text:",
|
|
@@ -162676,6 +162874,34 @@ function print() { __p += __j.call(arguments, '') }
|
|
|
162676
162874
|
handler: resolveBlockRef
|
|
162677
162875
|
}
|
|
162678
162876
|
];
|
|
162877
|
+
STEP_INTERACTION_MATRIX = new Map([
|
|
162878
|
+
["text.rewrite::format.apply::same_target", "allow"],
|
|
162879
|
+
["text.rewrite::text.rewrite::same_target", "reject"],
|
|
162880
|
+
["text.rewrite::text.delete::overlapping", "reject"],
|
|
162881
|
+
["text.rewrite::create.*::same_block", "allow"],
|
|
162882
|
+
["text.rewrite::text.insert::same_target", "reject"],
|
|
162883
|
+
["format.apply::format.apply::same_target", "allow"],
|
|
162884
|
+
["format.apply::text.rewrite::same_target", "reject"],
|
|
162885
|
+
["format.apply::text.delete::overlapping", "reject"],
|
|
162886
|
+
["format.apply::create.*::same_block", "allow"],
|
|
162887
|
+
["format.apply::text.insert::same_target", "allow"],
|
|
162888
|
+
["text.delete::text.rewrite::overlapping", "reject"],
|
|
162889
|
+
["text.delete::text.delete::overlapping", "reject"],
|
|
162890
|
+
["text.delete::format.apply::overlapping", "reject"],
|
|
162891
|
+
["text.delete::create.*::same_block", "allow"],
|
|
162892
|
+
["text.delete::text.insert::overlapping", "reject"],
|
|
162893
|
+
["create.*::text.rewrite::same_block", "allow"],
|
|
162894
|
+
["create.*::format.apply::same_block", "allow"],
|
|
162895
|
+
["create.*::text.delete::same_block", "allow"],
|
|
162896
|
+
["create.*::create.*::same_block", "allow"],
|
|
162897
|
+
["create.*::text.insert::same_block", "allow"],
|
|
162898
|
+
["text.insert::format.apply::same_target", "allow"],
|
|
162899
|
+
["text.insert::text.rewrite::same_target", "reject"],
|
|
162900
|
+
["text.insert::text.delete::overlapping", "reject"],
|
|
162901
|
+
["text.insert::create.*::same_block", "allow"],
|
|
162902
|
+
["text.insert::text.insert::same_target", "reject"]
|
|
162903
|
+
]);
|
|
162904
|
+
MATRIX_EXEMPT_OPS = new Set(["assert"]);
|
|
162679
162905
|
DEFAULT_INLINE_POLICY = {
|
|
162680
162906
|
mode: "preserve",
|
|
162681
162907
|
onNonUniform: "majority"
|
|
@@ -184692,8 +184918,8 @@ function print() { __p += __j.call(arguments, '') }
|
|
|
184692
184918
|
return isObjectLike_default(value) && hasOwnProperty$8.call(value, "callee") && !propertyIsEnumerable$1.call(value, "callee");
|
|
184693
184919
|
};
|
|
184694
184920
|
stubFalse_default = stubFalse;
|
|
184695
|
-
freeExports$2 = typeof
|
|
184696
|
-
freeModule$2 = freeExports$2 && typeof
|
|
184921
|
+
freeExports$2 = typeof exports_src_Cl9CKlDG_es == "object" && exports_src_Cl9CKlDG_es && !exports_src_Cl9CKlDG_es.nodeType && exports_src_Cl9CKlDG_es;
|
|
184922
|
+
freeModule$2 = freeExports$2 && typeof module_src_Cl9CKlDG_es == "object" && module_src_Cl9CKlDG_es && !module_src_Cl9CKlDG_es.nodeType && module_src_Cl9CKlDG_es;
|
|
184697
184923
|
Buffer$1 = freeModule$2 && freeModule$2.exports === freeExports$2 ? _root_default.Buffer : undefined;
|
|
184698
184924
|
isBuffer_default = (Buffer$1 ? Buffer$1.isBuffer : undefined) || stubFalse_default;
|
|
184699
184925
|
typedArrayTags = {};
|
|
@@ -184701,8 +184927,8 @@ function print() { __p += __j.call(arguments, '') }
|
|
|
184701
184927
|
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
184928
|
_baseIsTypedArray_default = baseIsTypedArray;
|
|
184703
184929
|
_baseUnary_default = baseUnary;
|
|
184704
|
-
freeExports$1 = typeof
|
|
184705
|
-
freeModule$1 = freeExports$1 && typeof
|
|
184930
|
+
freeExports$1 = typeof exports_src_Cl9CKlDG_es == "object" && exports_src_Cl9CKlDG_es && !exports_src_Cl9CKlDG_es.nodeType && exports_src_Cl9CKlDG_es;
|
|
184931
|
+
freeModule$1 = freeExports$1 && typeof module_src_Cl9CKlDG_es == "object" && module_src_Cl9CKlDG_es && !module_src_Cl9CKlDG_es.nodeType && module_src_Cl9CKlDG_es;
|
|
184706
184932
|
freeProcess = freeModule$1 && freeModule$1.exports === freeExports$1 && _freeGlobal_default.process;
|
|
184707
184933
|
_nodeUtil_default = function() {
|
|
184708
184934
|
try {
|
|
@@ -184807,8 +185033,8 @@ function print() { __p += __j.call(arguments, '') }
|
|
|
184807
185033
|
Stack.prototype.has = _stackHas_default;
|
|
184808
185034
|
Stack.prototype.set = _stackSet_default;
|
|
184809
185035
|
_Stack_default = Stack;
|
|
184810
|
-
freeExports = typeof
|
|
184811
|
-
freeModule = freeExports && typeof
|
|
185036
|
+
freeExports = typeof exports_src_Cl9CKlDG_es == "object" && exports_src_Cl9CKlDG_es && !exports_src_Cl9CKlDG_es.nodeType && exports_src_Cl9CKlDG_es;
|
|
185037
|
+
freeModule = freeExports && typeof module_src_Cl9CKlDG_es == "object" && module_src_Cl9CKlDG_es && !module_src_Cl9CKlDG_es.nodeType && module_src_Cl9CKlDG_es;
|
|
184812
185038
|
Buffer4 = freeModule && freeModule.exports === freeExports ? _root_default.Buffer : undefined;
|
|
184813
185039
|
allocUnsafe = Buffer4 ? Buffer4.allocUnsafe : undefined;
|
|
184814
185040
|
_cloneBuffer_default = cloneBuffer;
|
|
@@ -192427,8 +192653,8 @@ var init_zipper_BJHqrQMq_es = __esm(() => {
|
|
|
192427
192653
|
|
|
192428
192654
|
// ../../packages/superdoc/dist/super-editor.es.js
|
|
192429
192655
|
var init_super_editor_es = __esm(() => {
|
|
192430
|
-
|
|
192431
|
-
|
|
192656
|
+
init_src_Cl9CKlDG_es();
|
|
192657
|
+
init_SuperConverter_DFpPWkcl_es();
|
|
192432
192658
|
init_jszip_ChlR43oI_es();
|
|
192433
192659
|
init_xml_js_DLE8mr0n_es();
|
|
192434
192660
|
init_constants_DBKi0Amm_es();
|
|
@@ -193116,7 +193342,7 @@ function addNode2(child, target) {
|
|
|
193116
193342
|
else
|
|
193117
193343
|
target.push(child);
|
|
193118
193344
|
}
|
|
193119
|
-
function
|
|
193345
|
+
function addRange2($start, $end, depth, target) {
|
|
193120
193346
|
let node3 = ($end || $start).node(depth);
|
|
193121
193347
|
let startIndex = 0, endIndex = $end ? $end.index(depth) : node3.childCount;
|
|
193122
193348
|
if ($start) {
|
|
@@ -193141,28 +193367,28 @@ function replaceThreeWay2($from, $start, $end, $to, depth) {
|
|
|
193141
193367
|
let openStart = $from.depth > depth && joinable2($from, $start, depth + 1);
|
|
193142
193368
|
let openEnd = $to.depth > depth && joinable2($end, $to, depth + 1);
|
|
193143
193369
|
let content2 = [];
|
|
193144
|
-
|
|
193370
|
+
addRange2(null, $from, depth, content2);
|
|
193145
193371
|
if (openStart && openEnd && $start.index(depth) == $end.index(depth)) {
|
|
193146
193372
|
checkJoin2(openStart, openEnd);
|
|
193147
193373
|
addNode2(close2(openStart, replaceThreeWay2($from, $start, $end, $to, depth + 1)), content2);
|
|
193148
193374
|
} else {
|
|
193149
193375
|
if (openStart)
|
|
193150
193376
|
addNode2(close2(openStart, replaceTwoWay2($from, $start, depth + 1)), content2);
|
|
193151
|
-
|
|
193377
|
+
addRange2($start, $end, depth, content2);
|
|
193152
193378
|
if (openEnd)
|
|
193153
193379
|
addNode2(close2(openEnd, replaceTwoWay2($end, $to, depth + 1)), content2);
|
|
193154
193380
|
}
|
|
193155
|
-
|
|
193381
|
+
addRange2($to, null, depth, content2);
|
|
193156
193382
|
return new Fragment4(content2);
|
|
193157
193383
|
}
|
|
193158
193384
|
function replaceTwoWay2($from, $to, depth) {
|
|
193159
193385
|
let content2 = [];
|
|
193160
|
-
|
|
193386
|
+
addRange2(null, $from, depth, content2);
|
|
193161
193387
|
if ($from.depth > depth) {
|
|
193162
193388
|
let type = joinable2($from, $to, depth + 1);
|
|
193163
193389
|
addNode2(close2(type, replaceTwoWay2($from, $to, depth + 1)), content2);
|
|
193164
193390
|
}
|
|
193165
|
-
|
|
193391
|
+
addRange2($to, null, depth, content2);
|
|
193166
193392
|
return new Fragment4(content2);
|
|
193167
193393
|
}
|
|
193168
193394
|
function prepareSliceForReplace2(slice2, $along) {
|
|
@@ -197829,7 +198055,12 @@ function checkRevision2(editor, expectedRevision) {
|
|
|
197829
198055
|
return;
|
|
197830
198056
|
const current = getRevision2(editor);
|
|
197831
198057
|
if (expectedRevision !== current) {
|
|
197832
|
-
throw new PlanError2("REVISION_MISMATCH", `REVISION_MISMATCH — expected revision "${expectedRevision}" but document is at "${current}"
|
|
198058
|
+
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, {
|
|
198059
|
+
expectedRevision,
|
|
198060
|
+
currentRevision: current,
|
|
198061
|
+
refStability: "ephemeral",
|
|
198062
|
+
remediation: "Re-run query.match() to obtain a fresh ref valid for the current revision."
|
|
198063
|
+
});
|
|
197833
198064
|
}
|
|
197834
198065
|
}
|
|
197835
198066
|
var revisionMap2, subscribedEditors2;
|
|
@@ -198091,7 +198322,9 @@ function captureRunsInRange2(editor, blockPos, from3, to) {
|
|
|
198091
198322
|
return;
|
|
198092
198323
|
}
|
|
198093
198324
|
if (node3.isLeaf) {
|
|
198325
|
+
const start2 = offset2;
|
|
198094
198326
|
offset2 += 1;
|
|
198327
|
+
maybePushRun(start2, offset2, []);
|
|
198095
198328
|
return;
|
|
198096
198329
|
}
|
|
198097
198330
|
let isFirstChild = true;
|
|
@@ -198604,12 +198837,73 @@ var init_block_strategy = __esm(() => {
|
|
|
198604
198837
|
function isAssertStep2(step) {
|
|
198605
198838
|
return step.op === "assert";
|
|
198606
198839
|
}
|
|
198840
|
+
function isCreateOp2(op) {
|
|
198841
|
+
return op === "create.heading" || op === "create.paragraph";
|
|
198842
|
+
}
|
|
198607
198843
|
function isSelectWhere2(where) {
|
|
198608
198844
|
return where.by === "select";
|
|
198609
198845
|
}
|
|
198610
198846
|
function isRefWhere2(where) {
|
|
198611
198847
|
return where.by === "ref";
|
|
198612
198848
|
}
|
|
198849
|
+
function validateCreateStepPosition2(step) {
|
|
198850
|
+
const args3 = step.args;
|
|
198851
|
+
if (args3.position === undefined || args3.position === null) {
|
|
198852
|
+
args3.position = "after";
|
|
198853
|
+
return;
|
|
198854
|
+
}
|
|
198855
|
+
if (!VALID_CREATE_POSITIONS2.includes(args3.position)) {
|
|
198856
|
+
throw planError2("INVALID_INPUT", `create step requires args.position to be 'before' or 'after'`, step.id, {
|
|
198857
|
+
receivedPosition: args3.position,
|
|
198858
|
+
allowedValues: [...VALID_CREATE_POSITIONS2],
|
|
198859
|
+
default: "after"
|
|
198860
|
+
});
|
|
198861
|
+
}
|
|
198862
|
+
}
|
|
198863
|
+
function resolveCreateAnchorFromTargets2(targets, position4, stepId) {
|
|
198864
|
+
const target = targets[0];
|
|
198865
|
+
if (!target)
|
|
198866
|
+
throw planError2("INVALID_INPUT", "create step has no resolved targets", stepId);
|
|
198867
|
+
if (target.kind === "range")
|
|
198868
|
+
return target.blockId;
|
|
198869
|
+
const segments = target.segments;
|
|
198870
|
+
if (!segments.length)
|
|
198871
|
+
throw planError2("INVALID_INPUT", "span target has no segments", stepId);
|
|
198872
|
+
return position4 === "before" ? segments[0].blockId : segments[segments.length - 1].blockId;
|
|
198873
|
+
}
|
|
198874
|
+
function validateInsertionContext2(editor, index2, step, stepIndex, anchorBlockId, position4) {
|
|
198875
|
+
const candidate = index2.candidates.find((c2) => c2.nodeId === anchorBlockId);
|
|
198876
|
+
if (!candidate)
|
|
198877
|
+
return;
|
|
198878
|
+
const paragraphType = editor.state.schema?.nodes?.paragraph;
|
|
198879
|
+
if (!paragraphType)
|
|
198880
|
+
return;
|
|
198881
|
+
const resolvedPos = editor.state.doc.resolve(candidate.pos);
|
|
198882
|
+
const parent = resolvedPos.parent;
|
|
198883
|
+
const anchorIndex = resolvedPos.index();
|
|
198884
|
+
const insertionIndex = position4 === "before" ? anchorIndex : anchorIndex + 1;
|
|
198885
|
+
const canInsert = typeof parent.canReplaceWith === "function" ? parent.canReplaceWith(insertionIndex, insertionIndex, paragraphType) : parent.type.contentMatch.matchType(paragraphType);
|
|
198886
|
+
if (!canInsert) {
|
|
198887
|
+
const allowedChildTypes = [];
|
|
198888
|
+
const match2 = parent.type.contentMatch;
|
|
198889
|
+
for (const nodeType of Object.values(editor.state.schema.nodes)) {
|
|
198890
|
+
if (match2.matchType(nodeType)) {
|
|
198891
|
+
allowedChildTypes.push(nodeType.name);
|
|
198892
|
+
}
|
|
198893
|
+
}
|
|
198894
|
+
throw planError2("INVALID_INSERTION_CONTEXT", `Cannot create ${step.op} inside ${parent.type.name}`, step.id, {
|
|
198895
|
+
stepIndex,
|
|
198896
|
+
stepId: step.id,
|
|
198897
|
+
operation: step.op,
|
|
198898
|
+
anchorBlockId,
|
|
198899
|
+
parentType: parent.type.name,
|
|
198900
|
+
allowedChildTypes,
|
|
198901
|
+
insertionIndex,
|
|
198902
|
+
requestedChildType: "paragraph",
|
|
198903
|
+
requestedSemanticType: step.op === "create.heading" ? "heading" : "paragraph"
|
|
198904
|
+
});
|
|
198905
|
+
}
|
|
198906
|
+
}
|
|
198613
198907
|
function isV3Ref2(payload) {
|
|
198614
198908
|
return typeof payload === "object" && payload !== null && "v" in payload && payload.v === 3;
|
|
198615
198909
|
}
|
|
@@ -198837,7 +199131,14 @@ function decodeTextRefPayload2(encoded, stepId) {
|
|
|
198837
199131
|
function resolveV3TextRef2(editor, index2, step, refData) {
|
|
198838
199132
|
const currentRevision = getRevision2(editor);
|
|
198839
199133
|
if (refData.rev !== currentRevision) {
|
|
198840
|
-
throw planError2("REVISION_MISMATCH", `
|
|
199134
|
+
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, {
|
|
199135
|
+
refRevision: refData.rev,
|
|
199136
|
+
currentRevision,
|
|
199137
|
+
refStability: "ephemeral",
|
|
199138
|
+
refScope: refData.scope,
|
|
199139
|
+
blockId: refData.segments?.[0]?.blockId,
|
|
199140
|
+
remediation: `Re-run query.match() to obtain a fresh ref valid for the current revision.`
|
|
199141
|
+
});
|
|
198841
199142
|
}
|
|
198842
199143
|
if (!refData.segments?.length)
|
|
198843
199144
|
return [];
|
|
@@ -198936,7 +199237,11 @@ function resolveStepTargets2(editor, index2, step) {
|
|
|
198936
199237
|
});
|
|
198937
199238
|
if (refWhere) {
|
|
198938
199239
|
if (targets.length === 0) {
|
|
198939
|
-
throw planError2("MATCH_NOT_FOUND", `ref "${refWhere.ref}" did not resolve to any targets`, step.id
|
|
199240
|
+
throw planError2("MATCH_NOT_FOUND", `ref "${refWhere.ref}" did not resolve to any targets`, step.id, {
|
|
199241
|
+
selectorType: "ref",
|
|
199242
|
+
selectorPattern: refWhere.ref,
|
|
199243
|
+
candidateCount: 0
|
|
199244
|
+
});
|
|
198940
199245
|
}
|
|
198941
199246
|
if (targets.length > 1) {
|
|
198942
199247
|
throw planError2("AMBIGUOUS_MATCH", `ref "${refWhere.ref}" resolved to ${targets.length} targets`, step.id, {
|
|
@@ -198955,6 +199260,18 @@ function resolveStepTargets2(editor, index2, step) {
|
|
|
198955
199260
|
}
|
|
198956
199261
|
return targets;
|
|
198957
199262
|
}
|
|
199263
|
+
function buildMatchNotFoundDetails2(step) {
|
|
199264
|
+
const where = step.where;
|
|
199265
|
+
const select2 = "select" in where ? where.select : undefined;
|
|
199266
|
+
const within2 = "within" in where ? where.within : undefined;
|
|
199267
|
+
return {
|
|
199268
|
+
selectorType: select2?.type ?? "unknown",
|
|
199269
|
+
selectorPattern: select2?.pattern ?? "",
|
|
199270
|
+
selectorMode: select2?.mode ?? "contains",
|
|
199271
|
+
searchScope: within2?.blockId ?? "document",
|
|
199272
|
+
candidateCount: 0
|
|
199273
|
+
};
|
|
199274
|
+
}
|
|
198958
199275
|
function applyCardinalityCheck2(step, targets) {
|
|
198959
199276
|
const where = step.where;
|
|
198960
199277
|
if (!("require" in where) || where.require === undefined)
|
|
@@ -198962,11 +199279,11 @@ function applyCardinalityCheck2(step, targets) {
|
|
|
198962
199279
|
const require2 = where.require;
|
|
198963
199280
|
if (require2 === "first") {
|
|
198964
199281
|
if (targets.length === 0) {
|
|
198965
|
-
throw planError2("MATCH_NOT_FOUND", "selector matched zero ranges", step.id);
|
|
199282
|
+
throw planError2("MATCH_NOT_FOUND", "selector matched zero ranges", step.id, buildMatchNotFoundDetails2(step));
|
|
198966
199283
|
}
|
|
198967
199284
|
} else if (require2 === "exactlyOne") {
|
|
198968
199285
|
if (targets.length === 0) {
|
|
198969
|
-
throw planError2("MATCH_NOT_FOUND", "selector matched zero ranges", step.id);
|
|
199286
|
+
throw planError2("MATCH_NOT_FOUND", "selector matched zero ranges", step.id, buildMatchNotFoundDetails2(step));
|
|
198970
199287
|
}
|
|
198971
199288
|
if (targets.length > 1) {
|
|
198972
199289
|
throw planError2("AMBIGUOUS_MATCH", `selector matched ${targets.length} ranges, expected exactly one`, step.id, {
|
|
@@ -198975,47 +199292,119 @@ function applyCardinalityCheck2(step, targets) {
|
|
|
198975
199292
|
}
|
|
198976
199293
|
} else if (require2 === "all") {
|
|
198977
199294
|
if (targets.length === 0) {
|
|
198978
|
-
throw planError2("MATCH_NOT_FOUND", "selector matched zero ranges", step.id);
|
|
199295
|
+
throw planError2("MATCH_NOT_FOUND", "selector matched zero ranges", step.id, buildMatchNotFoundDetails2(step));
|
|
198979
199296
|
}
|
|
198980
199297
|
}
|
|
198981
199298
|
}
|
|
198982
|
-
function
|
|
198983
|
-
|
|
198984
|
-
|
|
198985
|
-
|
|
198986
|
-
|
|
198987
|
-
|
|
198988
|
-
|
|
198989
|
-
|
|
198990
|
-
|
|
199299
|
+
function normalizeOpForMatrix2(op) {
|
|
199300
|
+
return op.startsWith("create.") ? "create.*" : op;
|
|
199301
|
+
}
|
|
199302
|
+
function classifyOverlap2(stepA, stepB) {
|
|
199303
|
+
const rangesA = extractBlockRanges2(stepA);
|
|
199304
|
+
const rangesB = extractBlockRanges2(stepB);
|
|
199305
|
+
const opA = normalizeOpForMatrix2(stepA.step.op);
|
|
199306
|
+
const opB = normalizeOpForMatrix2(stepB.step.op);
|
|
199307
|
+
const isCreateA = opA === "create.*";
|
|
199308
|
+
const isCreateB = opB === "create.*";
|
|
199309
|
+
for (const [blockId, aEntries] of rangesA) {
|
|
199310
|
+
const bEntries = rangesB.get(blockId);
|
|
199311
|
+
if (!bEntries)
|
|
199312
|
+
continue;
|
|
199313
|
+
for (const a2 of aEntries) {
|
|
199314
|
+
for (const b3 of bEntries) {
|
|
199315
|
+
if (isCreateA || isCreateB) {
|
|
199316
|
+
return { overlapClass: "same_block", blockId, rangeA: a2, rangeB: b3 };
|
|
198991
199317
|
}
|
|
199318
|
+
if (a2.to <= b3.from || b3.to <= a2.from)
|
|
199319
|
+
continue;
|
|
199320
|
+
if (a2.from === b3.from && a2.to === b3.to) {
|
|
199321
|
+
return { overlapClass: "same_target", blockId, rangeA: a2, rangeB: b3 };
|
|
199322
|
+
}
|
|
199323
|
+
return { overlapClass: "overlapping", blockId, rangeA: a2, rangeB: b3 };
|
|
199324
|
+
}
|
|
199325
|
+
}
|
|
199326
|
+
}
|
|
199327
|
+
return;
|
|
199328
|
+
}
|
|
199329
|
+
function extractBlockRanges2(compiled) {
|
|
199330
|
+
const result = new Map;
|
|
199331
|
+
for (const target of compiled.targets) {
|
|
199332
|
+
if (target.kind === "range") {
|
|
199333
|
+
pushBlockRange2(result, target.blockId, target.from, target.to);
|
|
199334
|
+
} else {
|
|
199335
|
+
for (const seg of target.segments) {
|
|
199336
|
+
pushBlockRange2(result, seg.blockId, seg.from, seg.to);
|
|
198992
199337
|
}
|
|
198993
199338
|
}
|
|
198994
199339
|
}
|
|
198995
|
-
|
|
198996
|
-
|
|
198997
|
-
|
|
198998
|
-
|
|
198999
|
-
|
|
199000
|
-
|
|
199001
|
-
|
|
199340
|
+
return result;
|
|
199341
|
+
}
|
|
199342
|
+
function pushBlockRange2(map6, blockId, from3, to) {
|
|
199343
|
+
let entries = map6.get(blockId);
|
|
199344
|
+
if (!entries) {
|
|
199345
|
+
entries = [];
|
|
199346
|
+
map6.set(blockId, entries);
|
|
199347
|
+
}
|
|
199348
|
+
entries.push({ from: from3, to });
|
|
199349
|
+
}
|
|
199350
|
+
function validateStepInteractions2(steps) {
|
|
199351
|
+
for (let i4 = 0;i4 < steps.length; i4++) {
|
|
199352
|
+
for (let j2 = i4 + 1;j2 < steps.length; j2++) {
|
|
199353
|
+
const stepA = steps[i4];
|
|
199354
|
+
const stepB = steps[j2];
|
|
199355
|
+
if (MATRIX_EXEMPT_OPS2.has(stepA.step.op) || MATRIX_EXEMPT_OPS2.has(stepB.step.op))
|
|
199356
|
+
continue;
|
|
199357
|
+
const overlap = classifyOverlap2(stepA, stepB);
|
|
199358
|
+
if (!overlap)
|
|
199359
|
+
continue;
|
|
199360
|
+
const opA = normalizeOpForMatrix2(stepA.step.op);
|
|
199361
|
+
const opB = normalizeOpForMatrix2(stepB.step.op);
|
|
199362
|
+
const matrixKey = `${opA}::${opB}::${overlap.overlapClass}`;
|
|
199363
|
+
const verdict = STEP_INTERACTION_MATRIX2.get(matrixKey) ?? "reject";
|
|
199364
|
+
if (verdict === "reject") {
|
|
199365
|
+
throw planError2("PLAN_CONFLICT_OVERLAP", `steps "${stepA.step.id}" and "${stepB.step.id}" target overlapping ranges in block "${overlap.blockId}"`, stepB.step.id, {
|
|
199366
|
+
blockId: overlap.blockId,
|
|
199367
|
+
stepIdA: stepA.step.id,
|
|
199368
|
+
stepIdB: stepB.step.id,
|
|
199369
|
+
opKeyA: stepA.step.op,
|
|
199370
|
+
opKeyB: stepB.step.op,
|
|
199371
|
+
rangeA: overlap.rangeA,
|
|
199372
|
+
rangeB: overlap.rangeB,
|
|
199373
|
+
overlapRegion: {
|
|
199374
|
+
from: Math.max(overlap.rangeA.from, overlap.rangeB.from),
|
|
199375
|
+
to: Math.min(overlap.rangeA.to, overlap.rangeB.to)
|
|
199376
|
+
},
|
|
199377
|
+
matrixVerdict: verdict,
|
|
199378
|
+
matrixKey
|
|
199379
|
+
});
|
|
199002
199380
|
}
|
|
199003
199381
|
}
|
|
199004
199382
|
}
|
|
199005
199383
|
}
|
|
199006
|
-
function
|
|
199007
|
-
|
|
199008
|
-
|
|
199009
|
-
|
|
199010
|
-
|
|
199384
|
+
function assertNoDuplicateBlockIds2(index2) {
|
|
199385
|
+
const seen = new Map;
|
|
199386
|
+
const duplicates = [];
|
|
199387
|
+
for (const candidate of index2.candidates) {
|
|
199388
|
+
const count = seen.get(candidate.nodeId) ?? 0;
|
|
199389
|
+
seen.set(candidate.nodeId, count + 1);
|
|
199390
|
+
if (count === 1)
|
|
199391
|
+
duplicates.push(candidate.nodeId);
|
|
199392
|
+
}
|
|
199393
|
+
if (duplicates.length > 0) {
|
|
199394
|
+
throw planError2("DOCUMENT_IDENTITY_CONFLICT", "Document contains blocks with duplicate identities. This must be resolved before mutations can be applied.", undefined, {
|
|
199395
|
+
duplicateBlockIds: duplicates,
|
|
199396
|
+
blockCount: duplicates.length,
|
|
199397
|
+
remediation: "Re-import the document or call document.repair() to assign unique identities."
|
|
199398
|
+
});
|
|
199011
199399
|
}
|
|
199012
|
-
blockRanges.push({ stepId, from: from3, to });
|
|
199013
199400
|
}
|
|
199014
199401
|
function compilePlan2(editor, steps) {
|
|
199015
199402
|
if (steps.length > MAX_PLAN_STEPS) {
|
|
199016
199403
|
throw planError2("INVALID_INPUT", `plan contains ${steps.length} steps, maximum is ${MAX_PLAN_STEPS}`);
|
|
199017
199404
|
}
|
|
199405
|
+
const compiledRevision = getRevision2(editor);
|
|
199018
199406
|
const index2 = getBlockIndex2(editor);
|
|
199407
|
+
assertNoDuplicateBlockIds2(index2);
|
|
199019
199408
|
const mutationSteps = [];
|
|
199020
199409
|
const assertSteps = [];
|
|
199021
199410
|
const seenIds = new Set;
|
|
@@ -199029,25 +199418,36 @@ function compilePlan2(editor, steps) {
|
|
|
199029
199418
|
seenIds.add(step.id);
|
|
199030
199419
|
}
|
|
199031
199420
|
let totalTargets = 0;
|
|
199421
|
+
let stepIndex = 0;
|
|
199032
199422
|
for (const step of steps) {
|
|
199033
199423
|
if (isAssertStep2(step)) {
|
|
199034
199424
|
assertSteps.push(step);
|
|
199425
|
+
stepIndex++;
|
|
199035
199426
|
continue;
|
|
199036
199427
|
}
|
|
199037
199428
|
if (!hasStepExecutor2(step.op)) {
|
|
199038
199429
|
throw planError2("INVALID_INPUT", `unknown step op "${step.op}"`, step.id);
|
|
199039
199430
|
}
|
|
199431
|
+
if (isCreateOp2(step.op)) {
|
|
199432
|
+
validateCreateStepPosition2(step);
|
|
199433
|
+
}
|
|
199040
199434
|
const targets = resolveStepTargets2(editor, index2, step);
|
|
199435
|
+
if (isCreateOp2(step.op) && targets.length > 0) {
|
|
199436
|
+
const position4 = step.args.position ?? "after";
|
|
199437
|
+
const anchorBlockId = resolveCreateAnchorFromTargets2(targets, position4, step.id);
|
|
199438
|
+
validateInsertionContext2(editor, index2, step, stepIndex, anchorBlockId, position4);
|
|
199439
|
+
}
|
|
199041
199440
|
totalTargets += targets.length;
|
|
199042
199441
|
mutationSteps.push({ step, targets });
|
|
199442
|
+
stepIndex++;
|
|
199043
199443
|
}
|
|
199044
199444
|
if (totalTargets > MAX_PLAN_RESOLVED_TARGETS) {
|
|
199045
199445
|
throw planError2("INVALID_INPUT", `plan resolved ${totalTargets} total targets, maximum is ${MAX_PLAN_RESOLVED_TARGETS}`);
|
|
199046
199446
|
}
|
|
199047
|
-
|
|
199048
|
-
return { mutationSteps, assertSteps };
|
|
199447
|
+
validateStepInteractions2(mutationSteps);
|
|
199448
|
+
return { mutationSteps, assertSteps, compiledRevision };
|
|
199049
199449
|
}
|
|
199050
|
-
var REF_HANDLERS2;
|
|
199450
|
+
var VALID_CREATE_POSITIONS2, REF_HANDLERS2, STEP_INTERACTION_MATRIX2, MATRIX_EXEMPT_OPS2;
|
|
199051
199451
|
var init_compiler = __esm(() => {
|
|
199052
199452
|
init_src();
|
|
199053
199453
|
init_errors4();
|
|
@@ -199058,6 +199458,7 @@ var init_compiler = __esm(() => {
|
|
|
199058
199458
|
init_text_strategy();
|
|
199059
199459
|
init_block_strategy();
|
|
199060
199460
|
init_node_address_resolver();
|
|
199461
|
+
VALID_CREATE_POSITIONS2 = ["before", "after"];
|
|
199061
199462
|
REF_HANDLERS2 = [
|
|
199062
199463
|
{ prefix: "text:", handler: resolveTextRef2 },
|
|
199063
199464
|
{
|
|
@@ -199074,6 +199475,48 @@ var init_compiler = __esm(() => {
|
|
|
199074
199475
|
},
|
|
199075
199476
|
{ prefix: "", handler: resolveBlockRef2 }
|
|
199076
199477
|
];
|
|
199478
|
+
STEP_INTERACTION_MATRIX2 = new Map([
|
|
199479
|
+
["text.rewrite::format.apply::same_target", "allow"],
|
|
199480
|
+
["text.rewrite::text.rewrite::same_target", "reject"],
|
|
199481
|
+
["text.rewrite::text.delete::overlapping", "reject"],
|
|
199482
|
+
["text.rewrite::create.*::same_block", "allow"],
|
|
199483
|
+
["text.rewrite::text.insert::same_target", "reject"],
|
|
199484
|
+
["format.apply::format.apply::same_target", "allow"],
|
|
199485
|
+
["format.apply::text.rewrite::same_target", "reject"],
|
|
199486
|
+
["format.apply::text.delete::overlapping", "reject"],
|
|
199487
|
+
["format.apply::create.*::same_block", "allow"],
|
|
199488
|
+
["format.apply::text.insert::same_target", "allow"],
|
|
199489
|
+
["text.delete::text.rewrite::overlapping", "reject"],
|
|
199490
|
+
["text.delete::text.delete::overlapping", "reject"],
|
|
199491
|
+
["text.delete::format.apply::overlapping", "reject"],
|
|
199492
|
+
["text.delete::create.*::same_block", "allow"],
|
|
199493
|
+
["text.delete::text.insert::overlapping", "reject"],
|
|
199494
|
+
["create.*::text.rewrite::same_block", "allow"],
|
|
199495
|
+
["create.*::format.apply::same_block", "allow"],
|
|
199496
|
+
["create.*::text.delete::same_block", "allow"],
|
|
199497
|
+
["create.*::create.*::same_block", "allow"],
|
|
199498
|
+
["create.*::text.insert::same_block", "allow"],
|
|
199499
|
+
["text.insert::format.apply::same_target", "allow"],
|
|
199500
|
+
["text.insert::text.rewrite::same_target", "reject"],
|
|
199501
|
+
["text.insert::text.delete::overlapping", "reject"],
|
|
199502
|
+
["text.insert::create.*::same_block", "allow"],
|
|
199503
|
+
["text.insert::text.insert::same_target", "reject"]
|
|
199504
|
+
]);
|
|
199505
|
+
MATRIX_EXEMPT_OPS2 = new Set(["assert"]);
|
|
199506
|
+
});
|
|
199507
|
+
|
|
199508
|
+
// ../../packages/super-editor/src/document-api-adapters/plan-engine/create-insertion.ts
|
|
199509
|
+
function resolveBlockInsertionPos2(editor, anchorBlockId, position4, stepId) {
|
|
199510
|
+
const index2 = getBlockIndex2(editor);
|
|
199511
|
+
const candidate = index2.candidates.find((c2) => c2.nodeId === anchorBlockId);
|
|
199512
|
+
if (!candidate) {
|
|
199513
|
+
throw planError2("TARGET_NOT_FOUND", `block "${anchorBlockId}" not found`, stepId);
|
|
199514
|
+
}
|
|
199515
|
+
return position4 === "before" ? candidate.pos : candidate.end;
|
|
199516
|
+
}
|
|
199517
|
+
var init_create_insertion = __esm(() => {
|
|
199518
|
+
init_index_cache();
|
|
199519
|
+
init_errors4();
|
|
199077
199520
|
});
|
|
199078
199521
|
|
|
199079
199522
|
// ../../packages/super-editor/src/document-api-adapters/helpers/transaction-meta.ts
|
|
@@ -199141,12 +199584,36 @@ function buildMarksFromSetMarks2(editor, setMarks) {
|
|
|
199141
199584
|
marks.push(schema.marks.strike.create());
|
|
199142
199585
|
return marks;
|
|
199143
199586
|
}
|
|
199144
|
-
function
|
|
199145
|
-
const
|
|
199146
|
-
|
|
199147
|
-
|
|
199148
|
-
|
|
199149
|
-
|
|
199587
|
+
function applyInlineMarkPatches2(editor, tr, absFrom, absTo, inline) {
|
|
199588
|
+
const { schema } = editor.state;
|
|
199589
|
+
let changed = false;
|
|
199590
|
+
const markEntries = [
|
|
199591
|
+
[inline.bold, schema.marks.bold],
|
|
199592
|
+
[inline.italic, schema.marks.italic],
|
|
199593
|
+
[inline.underline, schema.marks.underline],
|
|
199594
|
+
[inline.strike, schema.marks.strike]
|
|
199595
|
+
];
|
|
199596
|
+
for (const [value, markType] of markEntries) {
|
|
199597
|
+
if (value === undefined || !markType)
|
|
199598
|
+
continue;
|
|
199599
|
+
if (value) {
|
|
199600
|
+
tr.addMark(absFrom, absTo, markType.create());
|
|
199601
|
+
} else {
|
|
199602
|
+
tr.removeMark(absFrom, absTo, markType);
|
|
199603
|
+
}
|
|
199604
|
+
changed = true;
|
|
199605
|
+
}
|
|
199606
|
+
return changed;
|
|
199607
|
+
}
|
|
199608
|
+
function resolveCreateAnchorBlockId2(target, position4, stepId) {
|
|
199609
|
+
if (target.kind === "range") {
|
|
199610
|
+
return target.blockId;
|
|
199611
|
+
}
|
|
199612
|
+
const segments = target.segments;
|
|
199613
|
+
if (!segments.length) {
|
|
199614
|
+
throw planError2("INVALID_INPUT", "span target has no segments", stepId);
|
|
199615
|
+
}
|
|
199616
|
+
return position4 === "before" ? segments[0].blockId : segments[segments.length - 1].blockId;
|
|
199150
199617
|
}
|
|
199151
199618
|
function executeTextRewrite2(editor, tr, target, step, mapping) {
|
|
199152
199619
|
const absFrom = mapping.map(target.absFrom);
|
|
@@ -199193,25 +199660,7 @@ function executeTextDelete2(_editor, tr, target, _step, mapping) {
|
|
|
199193
199660
|
function executeStyleApply3(editor, tr, target, step, mapping) {
|
|
199194
199661
|
const absFrom = mapping.map(target.absFrom);
|
|
199195
199662
|
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 };
|
|
199663
|
+
return { changed: applyInlineMarkPatches2(editor, tr, absFrom, absTo, step.args.inline) };
|
|
199215
199664
|
}
|
|
199216
199665
|
function validateMappedSpanContiguity2(target, mapping, stepId) {
|
|
199217
199666
|
let lastMappedEnd = -1;
|
|
@@ -199282,29 +199731,11 @@ function executeSpanTextDelete2(_editor, tr, target, step, mapping) {
|
|
|
199282
199731
|
}
|
|
199283
199732
|
function executeSpanStyleApply2(editor, tr, target, step, mapping) {
|
|
199284
199733
|
validateMappedSpanContiguity2(target, mapping, step.id);
|
|
199285
|
-
const { schema } = editor.state;
|
|
199286
|
-
let changed = false;
|
|
199287
199734
|
const firstSeg = target.segments[0];
|
|
199288
199735
|
const lastSeg = target.segments[target.segments.length - 1];
|
|
199289
199736
|
const absFrom = mapping.map(firstSeg.absFrom, 1);
|
|
199290
199737
|
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 };
|
|
199738
|
+
return { changed: applyInlineMarkPatches2(editor, tr, absFrom, absTo, step.args.inline) };
|
|
199308
199739
|
}
|
|
199309
199740
|
function getReplacementText2(replacement) {
|
|
199310
199741
|
if (replacement.blocks !== undefined) {
|
|
@@ -199503,11 +199934,14 @@ function executeAssertStep2(_editor, tr, step) {
|
|
|
199503
199934
|
}
|
|
199504
199935
|
function executeCreateStep2(editor, tr, step, targets, mapping) {
|
|
199505
199936
|
const target = targets[0];
|
|
199506
|
-
if (!target
|
|
199507
|
-
throw planError2("INVALID_INPUT", `${step.op} step requires
|
|
199937
|
+
if (!target) {
|
|
199938
|
+
throw planError2("INVALID_INPUT", `${step.op} step requires at least one target`, step.id);
|
|
199508
199939
|
}
|
|
199509
199940
|
const args3 = step.args;
|
|
199510
|
-
const
|
|
199941
|
+
const position4 = args3.position ?? "after";
|
|
199942
|
+
const anchorBlockId = resolveCreateAnchorBlockId2(target, position4, step.id);
|
|
199943
|
+
const anchorPos = resolveBlockInsertionPos2(editor, anchorBlockId, position4, step.id);
|
|
199944
|
+
const pos = mapping.map(anchorPos);
|
|
199511
199945
|
const paragraphType = editor.state.schema?.nodes?.paragraph;
|
|
199512
199946
|
if (!paragraphType) {
|
|
199513
199947
|
throw planError2("INVALID_INPUT", "paragraph node type not in schema", step.id);
|
|
@@ -199530,6 +199964,7 @@ function executeCreateStep2(editor, tr, step, targets, mapping) {
|
|
|
199530
199964
|
throw planError2("INVALID_INPUT", `could not create ${step.op} node`, step.id);
|
|
199531
199965
|
}
|
|
199532
199966
|
tr.insert(pos, node3);
|
|
199967
|
+
assertNoPostInsertDuplicateIds2(tr.doc, step.id);
|
|
199533
199968
|
return {
|
|
199534
199969
|
stepId: step.id,
|
|
199535
199970
|
op: step.op,
|
|
@@ -199538,6 +199973,32 @@ function executeCreateStep2(editor, tr, step, targets, mapping) {
|
|
|
199538
199973
|
data: { domain: "text", resolutions: [] }
|
|
199539
199974
|
};
|
|
199540
199975
|
}
|
|
199976
|
+
function assertNoPostInsertDuplicateIds2(doc4, stepId) {
|
|
199977
|
+
const seen = new Set;
|
|
199978
|
+
const duplicateSet = new Set;
|
|
199979
|
+
doc4.descendants((node3) => {
|
|
199980
|
+
if (!node3.isTextblock)
|
|
199981
|
+
return true;
|
|
199982
|
+
const attrs = node3.attrs ?? {};
|
|
199983
|
+
const id2 = typeof attrs.paraId === "string" && attrs.paraId || typeof attrs.sdBlockId === "string" && attrs.sdBlockId || typeof attrs.nodeId === "string" && attrs.nodeId;
|
|
199984
|
+
if (!id2)
|
|
199985
|
+
return true;
|
|
199986
|
+
if (seen.has(id2)) {
|
|
199987
|
+
duplicateSet.add(id2);
|
|
199988
|
+
} else {
|
|
199989
|
+
seen.add(id2);
|
|
199990
|
+
}
|
|
199991
|
+
return true;
|
|
199992
|
+
});
|
|
199993
|
+
if (duplicateSet.size > 0) {
|
|
199994
|
+
const duplicates = [...duplicateSet];
|
|
199995
|
+
throw planError2("INTERNAL_ERROR", `create step produced duplicate block identities: [${duplicates.join(", ")}]`, stepId, {
|
|
199996
|
+
source: "executor:checkPostInsertIdentityUniqueness",
|
|
199997
|
+
invariant: "post-insert block IDs must be unique",
|
|
199998
|
+
duplicateBlockIds: duplicates
|
|
199999
|
+
});
|
|
200000
|
+
}
|
|
200001
|
+
}
|
|
199541
200002
|
function runMutationsOnTransaction2(editor, tr, compiled, options) {
|
|
199542
200003
|
const mapping = tr.mapping;
|
|
199543
200004
|
const stepOutcomes = [];
|
|
@@ -199586,6 +200047,15 @@ function executeCompiledPlan2(editor, compiled, options = {}) {
|
|
|
199586
200047
|
const startTime = performance.now();
|
|
199587
200048
|
const revisionBefore = getRevision2(editor);
|
|
199588
200049
|
checkRevision2(editor, options.expectedRevision);
|
|
200050
|
+
if (compiled.compiledRevision !== revisionBefore) {
|
|
200051
|
+
throw planError2("REVISION_CHANGED_SINCE_COMPILE", `Document revision changed between compile and execute. Compiled at "${compiled.compiledRevision}", now at "${revisionBefore}".`, undefined, {
|
|
200052
|
+
compiledRevision: compiled.compiledRevision,
|
|
200053
|
+
currentRevision: revisionBefore,
|
|
200054
|
+
stepCount: compiled.mutationSteps.length,
|
|
200055
|
+
failedAtStep: "pre-execution",
|
|
200056
|
+
remediation: "Re-compile the plan against the current document state."
|
|
200057
|
+
});
|
|
200058
|
+
}
|
|
199589
200059
|
const tr = editor.state.tr;
|
|
199590
200060
|
const changeMode = options.changeMode ?? "direct";
|
|
199591
200061
|
if (changeMode === "tracked") {
|
|
@@ -199626,6 +200096,7 @@ var init_executor = __esm(() => {
|
|
|
199626
200096
|
init_revision_tracker();
|
|
199627
200097
|
init_compiler();
|
|
199628
200098
|
init_index_cache();
|
|
200099
|
+
init_create_insertion();
|
|
199629
200100
|
init_style_resolver();
|
|
199630
200101
|
init_node_address_resolver();
|
|
199631
200102
|
init_adapter_utils();
|
|
@@ -199795,7 +200266,11 @@ function executeDomainCommand2(editor, handler2, options) {
|
|
|
199795
200266
|
args: {},
|
|
199796
200267
|
_handler: handler2
|
|
199797
200268
|
};
|
|
199798
|
-
const compiled = {
|
|
200269
|
+
const compiled = {
|
|
200270
|
+
mutationSteps: [{ step, targets: [] }],
|
|
200271
|
+
assertSteps: [],
|
|
200272
|
+
compiledRevision: getRevision2(editor)
|
|
200273
|
+
};
|
|
199799
200274
|
return executeCompiledPlan2(editor, compiled, { expectedRevision: options?.expectedRevision });
|
|
199800
200275
|
}
|
|
199801
200276
|
function validateWriteRequest2(request, resolved) {
|
|
@@ -199871,7 +200346,8 @@ function writeWrapper2(editor, request, options) {
|
|
|
199871
200346
|
const target = toCompiledTarget2(stepId, op, resolved);
|
|
199872
200347
|
const compiled = {
|
|
199873
200348
|
mutationSteps: [{ step, targets: [target] }],
|
|
199874
|
-
assertSteps: []
|
|
200349
|
+
assertSteps: [],
|
|
200350
|
+
compiledRevision: getRevision2(editor)
|
|
199875
200351
|
};
|
|
199876
200352
|
const receipt2 = executeCompiledPlan2(editor, compiled, {
|
|
199877
200353
|
changeMode: mode,
|
|
@@ -199935,7 +200411,8 @@ function styleApplyWrapper2(editor, input2, options) {
|
|
|
199935
200411
|
};
|
|
199936
200412
|
const compiled = {
|
|
199937
200413
|
mutationSteps: [{ step, targets: [target] }],
|
|
199938
|
-
assertSteps: []
|
|
200414
|
+
assertSteps: [],
|
|
200415
|
+
compiledRevision: getRevision2(editor)
|
|
199939
200416
|
};
|
|
199940
200417
|
const receipt2 = executeCompiledPlan2(editor, compiled, {
|
|
199941
200418
|
changeMode: mode,
|
|
@@ -199947,6 +200424,7 @@ var STUB_WHERE2, MARK_KEY_TO_SCHEMA_NAME2;
|
|
|
199947
200424
|
var init_plan_wrappers = __esm(() => {
|
|
199948
200425
|
init_wrapper();
|
|
199949
200426
|
init_executor();
|
|
200427
|
+
init_revision_tracker();
|
|
199950
200428
|
init_errors3();
|
|
199951
200429
|
init_adapter_utils();
|
|
199952
200430
|
init_mutation_helpers();
|
|
@@ -201067,14 +201545,7 @@ function resolveCreateInsertPosition2(editor, at, operationLabel) {
|
|
|
201067
201545
|
return 0;
|
|
201068
201546
|
if (location3.kind === "documentEnd")
|
|
201069
201547
|
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;
|
|
201548
|
+
return resolveBlockInsertionPos2(editor, location3.target.nodeId, location3.kind);
|
|
201078
201549
|
}
|
|
201079
201550
|
function resolveCreatedBlock2(editor, nodeType, blockId) {
|
|
201080
201551
|
const index2 = getBlockIndex2(editor);
|
|
@@ -201180,7 +201651,10 @@ function createParagraphWrapper2(editor, input2, options) {
|
|
|
201180
201651
|
if (mode === "tracked") {
|
|
201181
201652
|
trackedChangeRefs = collectTrackInsertRefsInRange2(editor, paragraph2.pos, paragraph2.end);
|
|
201182
201653
|
}
|
|
201183
|
-
} catch {
|
|
201654
|
+
} catch (e) {
|
|
201655
|
+
if (!(e instanceof DocumentApiAdapterError3))
|
|
201656
|
+
throw e;
|
|
201657
|
+
}
|
|
201184
201658
|
}
|
|
201185
201659
|
return didApply;
|
|
201186
201660
|
}, { expectedRevision: options?.expectedRevision });
|
|
@@ -201249,7 +201723,10 @@ function createHeadingWrapper2(editor, input2, options) {
|
|
|
201249
201723
|
if (mode === "tracked") {
|
|
201250
201724
|
trackedChangeRefs = collectTrackInsertRefsInRange2(editor, heading3.pos, heading3.end);
|
|
201251
201725
|
}
|
|
201252
|
-
} catch {
|
|
201726
|
+
} catch (e) {
|
|
201727
|
+
if (!(e instanceof DocumentApiAdapterError3))
|
|
201728
|
+
throw e;
|
|
201729
|
+
}
|
|
201253
201730
|
}
|
|
201254
201731
|
return didApply;
|
|
201255
201732
|
}, { expectedRevision: options?.expectedRevision });
|
|
@@ -201267,7 +201744,7 @@ function createHeadingWrapper2(editor, input2, options) {
|
|
|
201267
201744
|
var init_create_wrappers = __esm(() => {
|
|
201268
201745
|
init_wrapper();
|
|
201269
201746
|
init_index_cache();
|
|
201270
|
-
|
|
201747
|
+
init_create_insertion();
|
|
201271
201748
|
init_tracked_change_refs();
|
|
201272
201749
|
init_errors3();
|
|
201273
201750
|
init_mutation_helpers();
|
|
@@ -209435,7 +209912,9 @@ function decodeProperties2(params3, translatorsBySdName, properties) {
|
|
|
209435
209912
|
if (translator5) {
|
|
209436
209913
|
const result = translator5.decode({ ...params3, node: { attrs: { [key2]: properties[key2] } } });
|
|
209437
209914
|
if (result != null) {
|
|
209438
|
-
result.name
|
|
209915
|
+
if (result.name == null) {
|
|
209916
|
+
result.name = translator5.xmlName;
|
|
209917
|
+
}
|
|
209439
209918
|
elements.push(result);
|
|
209440
209919
|
}
|
|
209441
209920
|
}
|
|
@@ -235692,7 +236171,6 @@ var init_track_changes_wrappers = __esm(() => {
|
|
|
235692
236171
|
|
|
235693
236172
|
// ../../packages/super-editor/src/document-api-adapters/plan-engine/preview.ts
|
|
235694
236173
|
function previewPlan2(editor, input2) {
|
|
235695
|
-
const evaluatedRevision = getRevision2(editor);
|
|
235696
236174
|
checkRevision2(editor, input2.expectedRevision);
|
|
235697
236175
|
if (!input2.steps?.length) {
|
|
235698
236176
|
throw planError2("INVALID_INPUT", "plan must contain at least one step");
|
|
@@ -235700,8 +236178,10 @@ function previewPlan2(editor, input2) {
|
|
|
235700
236178
|
const failures = [];
|
|
235701
236179
|
const stepPreviews = [];
|
|
235702
236180
|
let currentPhase = "compile";
|
|
236181
|
+
let evaluatedRevision = getRevision2(editor);
|
|
235703
236182
|
try {
|
|
235704
236183
|
const compiled = compilePlan2(editor, input2.steps);
|
|
236184
|
+
evaluatedRevision = compiled.compiledRevision;
|
|
235705
236185
|
currentPhase = "execute";
|
|
235706
236186
|
const tr = editor.state.tr;
|
|
235707
236187
|
const { stepOutcomes, assertFailures } = runMutationsOnTransaction2(editor, tr, compiled, {
|
|
@@ -236269,7 +236749,13 @@ function queryMatchAdapter2(editor, input2) {
|
|
|
236269
236749
|
const paginatedMatches = isTextSelector ? applyPagination2(rawMatches, userOffset, input2.limit) : rawMatches;
|
|
236270
236750
|
if (require2 === "first" || require2 === "exactlyOne" || require2 === "all") {
|
|
236271
236751
|
if (totalMatches === 0) {
|
|
236272
|
-
throw planError2("MATCH_NOT_FOUND", "selector matched zero ranges"
|
|
236752
|
+
throw planError2("MATCH_NOT_FOUND", "selector matched zero ranges", undefined, {
|
|
236753
|
+
selectorType: input2.select?.type ?? "unknown",
|
|
236754
|
+
selectorPattern: input2.select?.pattern ?? "",
|
|
236755
|
+
selectorMode: input2.select?.mode ?? "contains",
|
|
236756
|
+
searchScope: (input2.within?.kind === "block" ? input2.within.nodeId : undefined) ?? "document",
|
|
236757
|
+
candidateCount: 0
|
|
236758
|
+
});
|
|
236273
236759
|
}
|
|
236274
236760
|
}
|
|
236275
236761
|
if (require2 === "exactlyOne" && totalMatches > 1) {
|
|
@@ -236282,7 +236768,11 @@ function queryMatchAdapter2(editor, input2) {
|
|
|
236282
236768
|
if (isTextSelector && raw.textRanges?.length) {
|
|
236283
236769
|
const blocks2 = buildMatchBlocks2(editor, raw.textRanges, evaluatedRevision, id2);
|
|
236284
236770
|
if (blocks2.length === 0) {
|
|
236285
|
-
throw planError2("INTERNAL_ERROR", `text match produced no blocks for ${id2}
|
|
236771
|
+
throw planError2("INTERNAL_ERROR", `text match produced no blocks for ${id2}`, undefined, {
|
|
236772
|
+
source: "query-match-adapter:buildMatchEntries",
|
|
236773
|
+
invariant: "text match must have at least one block after zero-width filtering",
|
|
236774
|
+
context: { matchId: id2 }
|
|
236775
|
+
});
|
|
236286
236776
|
}
|
|
236287
236777
|
const snippetResult = buildBlocksSnippet2(editor, blocks2);
|
|
236288
236778
|
const segments = blocks2.map((b4) => ({ blockId: b4.blockId, start: b4.range.start, end: b4.range.end }));
|
|
@@ -239496,6 +239986,9 @@ function mapListsError(operationId, error, code7) {
|
|
|
239496
239986
|
function mapTextMutationError(operationId, error, code7) {
|
|
239497
239987
|
const message = extractErrorMessage(error);
|
|
239498
239988
|
const details = extractErrorDetails(error);
|
|
239989
|
+
const planEngineError = tryMapPlanEngineError(operationId, error, code7);
|
|
239990
|
+
if (planEngineError)
|
|
239991
|
+
return planEngineError;
|
|
239499
239992
|
if (code7 === "TARGET_NOT_FOUND") {
|
|
239500
239993
|
return new CliError("TARGET_NOT_FOUND", message, { operationId, details });
|
|
239501
239994
|
}
|
|
@@ -239515,6 +240008,9 @@ function mapTextMutationError(operationId, error, code7) {
|
|
|
239515
240008
|
function mapCreateError(operationId, error, code7) {
|
|
239516
240009
|
const message = extractErrorMessage(error);
|
|
239517
240010
|
const details = extractErrorDetails(error);
|
|
240011
|
+
const planEngineError = tryMapPlanEngineError(operationId, error, code7);
|
|
240012
|
+
if (planEngineError)
|
|
240013
|
+
return planEngineError;
|
|
239518
240014
|
if (code7 === "TARGET_NOT_FOUND") {
|
|
239519
240015
|
return new CliError("TARGET_NOT_FOUND", message, { operationId, details });
|
|
239520
240016
|
}
|
|
@@ -239571,6 +240067,14 @@ function mapQueryError(operationId, error, code7) {
|
|
|
239571
240067
|
return error;
|
|
239572
240068
|
return new CliError("COMMAND_FAILED", message, { operationId, details });
|
|
239573
240069
|
}
|
|
240070
|
+
function tryMapPlanEngineError(operationId, error, code7) {
|
|
240071
|
+
if (!code7 || !PLAN_ENGINE_PASSTHROUGH_CODES.has(code7))
|
|
240072
|
+
return null;
|
|
240073
|
+
return new CliError(code7, extractErrorMessage(error), {
|
|
240074
|
+
operationId,
|
|
240075
|
+
details: extractErrorDetails(error)
|
|
240076
|
+
});
|
|
240077
|
+
}
|
|
239574
240078
|
function mapInvokeError(operationId, error) {
|
|
239575
240079
|
if (error instanceof CliError)
|
|
239576
240080
|
return error;
|
|
@@ -239595,6 +240099,9 @@ function mapFailedReceipt(operationId, result) {
|
|
|
239595
240099
|
}
|
|
239596
240100
|
const failureCode = failure.code;
|
|
239597
240101
|
const failureMessage = failure.message ?? `${operationId}: operation failed.`;
|
|
240102
|
+
if (failureCode && PLAN_ENGINE_PASSTHROUGH_CODES.has(failureCode)) {
|
|
240103
|
+
return new CliError(failureCode, failureMessage, { operationId, failure });
|
|
240104
|
+
}
|
|
239598
240105
|
if (family === "trackChanges") {
|
|
239599
240106
|
if (failureCode === "TRACK_CHANGE_COMMAND_UNAVAILABLE") {
|
|
239600
240107
|
return new CliError("TRACK_CHANGE_COMMAND_UNAVAILABLE", failureMessage, { operationId, failure });
|
|
@@ -239648,10 +240155,23 @@ function mapFailedReceipt(operationId, result) {
|
|
|
239648
240155
|
}
|
|
239649
240156
|
return new CliError("COMMAND_FAILED", failureMessage, { operationId, failure });
|
|
239650
240157
|
}
|
|
239651
|
-
var FAMILY_MAPPERS;
|
|
240158
|
+
var PLAN_ENGINE_PASSTHROUGH_CODES, FAMILY_MAPPERS;
|
|
239652
240159
|
var init_error_mapping = __esm(() => {
|
|
239653
240160
|
init_operation_hints();
|
|
239654
240161
|
init_errors();
|
|
240162
|
+
PLAN_ENGINE_PASSTHROUGH_CODES = new Set([
|
|
240163
|
+
"REVISION_MISMATCH",
|
|
240164
|
+
"REVISION_CHANGED_SINCE_COMPILE",
|
|
240165
|
+
"PLAN_CONFLICT_OVERLAP",
|
|
240166
|
+
"DOCUMENT_IDENTITY_CONFLICT",
|
|
240167
|
+
"INVALID_INSERTION_CONTEXT",
|
|
240168
|
+
"INVALID_INPUT",
|
|
240169
|
+
"INVALID_STEP_COMBINATION",
|
|
240170
|
+
"MATCH_NOT_FOUND",
|
|
240171
|
+
"PRECONDITION_FAILED",
|
|
240172
|
+
"CROSS_BLOCK_MATCH",
|
|
240173
|
+
"SPAN_FRAGMENTED"
|
|
240174
|
+
]);
|
|
239655
240175
|
FAMILY_MAPPERS = {
|
|
239656
240176
|
trackChanges: mapTrackChangesError,
|
|
239657
240177
|
comments: mapCommentsError,
|
|
@@ -239660,7 +240180,10 @@ var init_error_mapping = __esm(() => {
|
|
|
239660
240180
|
create: mapCreateError,
|
|
239661
240181
|
blocks: mapBlocksError,
|
|
239662
240182
|
query: mapQueryError,
|
|
239663
|
-
general: (operationId, error) => {
|
|
240183
|
+
general: (operationId, error, code7) => {
|
|
240184
|
+
const planEngineError = tryMapPlanEngineError(operationId, error, code7);
|
|
240185
|
+
if (planEngineError)
|
|
240186
|
+
return planEngineError;
|
|
239664
240187
|
if (error instanceof CliError)
|
|
239665
240188
|
return error;
|
|
239666
240189
|
return new CliError("COMMAND_FAILED", extractErrorMessage(error), { operationId });
|