@superdoc-dev/cli 0.2.0-next.135 → 0.2.0-next.137

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.
Files changed (2) hide show
  1. package/dist/index.js +562 -183
  2. package/package.json +8 -8
package/dist/index.js CHANGED
@@ -38780,7 +38780,7 @@ var init_remark_gfm_z_sDF4ss_es = __esm(() => {
38780
38780
  emptyOptions2 = {};
38781
38781
  });
38782
38782
 
38783
- // ../../packages/superdoc/dist/chunks/SuperConverter-CEAHNaZj.es.js
38783
+ // ../../packages/superdoc/dist/chunks/SuperConverter-BQCVReWb.es.js
38784
38784
  function getExtensionConfigField(extension$1, field, context = { name: "" }) {
38785
38785
  const fieldValue = extension$1.config[field];
38786
38786
  if (typeof fieldValue === "function")
@@ -59094,7 +59094,7 @@ function decode$10(params) {
59094
59094
  return {
59095
59095
  name: "w:del",
59096
59096
  attributes: {
59097
- "w:id": trackedMark.attrs.id,
59097
+ "w:id": trackedMark.attrs.sourceId || trackedMark.attrs.id,
59098
59098
  "w:author": trackedMark.attrs.author,
59099
59099
  "w:authorEmail": trackedMark.attrs.authorEmail,
59100
59100
  "w:date": trackedMark.attrs.date
@@ -59119,7 +59119,7 @@ function decode$9(params) {
59119
59119
  return {
59120
59120
  name: "w:ins",
59121
59121
  attributes: {
59122
- "w:id": trackedMark.attrs.id,
59122
+ "w:id": trackedMark.attrs.sourceId || trackedMark.attrs.id,
59123
59123
  "w:author": trackedMark.attrs.author,
59124
59124
  "w:authorEmail": trackedMark.attrs.authorEmail,
59125
59125
  "w:date": trackedMark.attrs.date
@@ -59203,6 +59203,59 @@ function importCommentData({ docx, editor, converter }) {
59203
59203
  }
59204
59204
  return extendedComments;
59205
59205
  }
59206
+ function isReplacementPair(previous$1, current) {
59207
+ return previous$1.type !== current.type && previous$1.author === current.author && previous$1.date === current.date;
59208
+ }
59209
+ function assignInternalId(element, idMap, context, insideTrackedChange) {
59210
+ const wordId = String(element.attributes?.["w:id"] ?? "");
59211
+ if (!wordId)
59212
+ return;
59213
+ if (insideTrackedChange) {
59214
+ if (!idMap.has(wordId))
59215
+ idMap.set(wordId, v4_default());
59216
+ return;
59217
+ }
59218
+ const current = {
59219
+ type: element.name,
59220
+ author: element.attributes?.["w:author"] ?? "",
59221
+ date: element.attributes?.["w:date"] ?? ""
59222
+ };
59223
+ if (context.lastTrackedChange && isReplacementPair(context.lastTrackedChange, current)) {
59224
+ if (!idMap.has(wordId))
59225
+ idMap.set(wordId, context.lastTrackedChange.internalId);
59226
+ context.lastTrackedChange = null;
59227
+ } else {
59228
+ const internalId = idMap.get(wordId) ?? v4_default();
59229
+ idMap.set(wordId, internalId);
59230
+ context.lastTrackedChange = {
59231
+ ...current,
59232
+ internalId
59233
+ };
59234
+ }
59235
+ }
59236
+ function walkElements(elements, idMap, context, insideTrackedChange = false) {
59237
+ if (!Array.isArray(elements))
59238
+ return;
59239
+ for (const element of elements)
59240
+ if (TRACKED_CHANGE_NAMES.has(element.name)) {
59241
+ assignInternalId(element, idMap, context, insideTrackedChange);
59242
+ if (element.elements)
59243
+ walkElements(element.elements, idMap, { lastTrackedChange: null }, true);
59244
+ } else {
59245
+ if (!PAIRING_TRANSPARENT_NAMES.has(element.name))
59246
+ context.lastTrackedChange = null;
59247
+ if (element.elements)
59248
+ walkElements(element.elements, idMap, context, insideTrackedChange);
59249
+ }
59250
+ }
59251
+ function buildTrackedChangeIdMap(docx) {
59252
+ const body = docx?.["word/document.xml"]?.elements?.[0];
59253
+ if (!body?.elements)
59254
+ return /* @__PURE__ */ new Map;
59255
+ const idMap = /* @__PURE__ */ new Map;
59256
+ walkElements(body.elements, idMap, { lastTrackedChange: null });
59257
+ return idMap;
59258
+ }
59206
59259
  function importNoteEntries({ partXml, childElementName, filename, docx, editor, converter, nodeListHandler, numbering }) {
59207
59260
  const handler$1 = nodeListHandler || defaultNodeListHandler();
59208
59261
  if (!partXml?.elements?.length)
@@ -61592,7 +61645,7 @@ function getBibliographyPartExportPaths(bibliographyPart) {
61592
61645
  }
61593
61646
  function collectReferencedNumIds(convertedXml) {
61594
61647
  const numIds = /* @__PURE__ */ new Set;
61595
- function walkElements(elements) {
61648
+ function walkElements$1(elements) {
61596
61649
  if (!Array.isArray(elements))
61597
61650
  return;
61598
61651
  for (const el of elements) {
@@ -61601,12 +61654,12 @@ function collectReferencedNumIds(convertedXml) {
61601
61654
  if (el.name === "w:numId" && el.attributes?.["w:val"] != null)
61602
61655
  numIds.add(Number(el.attributes["w:val"]));
61603
61656
  if (el.elements)
61604
- walkElements(el.elements);
61657
+ walkElements$1(el.elements);
61605
61658
  }
61606
61659
  }
61607
61660
  for (const [path2, xml] of Object.entries(convertedXml))
61608
61661
  if (path2.startsWith("word/") && path2 !== "word/numbering.xml" && xml?.elements)
61609
- walkElements(xml.elements);
61662
+ walkElements$1(xml.elements);
61610
61663
  return numIds;
61611
61664
  }
61612
61665
  function getAbstractNumIdFromDef(numDef) {
@@ -63606,7 +63659,29 @@ var isRegExp = (value) => {
63606
63659
  name: XML_NODE_NAME$37,
63607
63660
  attributes
63608
63661
  };
63609
- }, config$36, translator$9, translator$140, translator$58, translator$51, translator$127, translator$129, translator$148, translator$149, translator$49, translator$135, translator$89, translator$209, translator$178, translator$136, translator$137, translator$62, translator$78, translator$106, translator$115, translator$116, translator$134, translator$192, translator$179, translator$60, translator$61, translator$173, translator$87, translator$124, translator$65, translator$59, translator$131, translator$54, translator$76, translator$193, XML_NAME$4 = "w14:ligatures", SD_KEY$4 = "ligatures", translator$210, XML_NAME$3 = "w14:numForm", SD_KEY$3 = "numForm", translator$211, XML_NAME$2 = "w14:numSpacing", SD_KEY$2 = "numSpacing", translator$212, XML_NAME$1 = "w14:stylisticSets", SD_KEY$1 = "stylisticSets", STYLISTIC_SET_CHILD_XML_NAME = "w14:ss", translator$213, XML_NAME = "w14:cntxtAlts", SD_KEY = "contextualAlternates", propertyTranslators$17, translator$128, XML_NODE_NAME$36 = "w:tab", SD_NODE_NAME$32 = "tab", encode$63 = (_, encodedAttrs = {}) => {
63662
+ }, config$36, translator$9, translator$140, translator$58, translator$51, translator$127, translator$129, translator$148, translator$149, translator$49, translator$135, translator$89, translator$209, translator$178, translator$136, translator$137, translator$62, translator$78, translator$106, translator$115, translator$116, translator$134, translator$192, translator$179, translator$60, translator$61, translator$173, translator$87, translator$124, translator$65, translator$59, translator$131, translator$54, translator$76, translator$193, XML_NAME$4 = "w14:ligatures", SD_KEY$4 = "ligatures", translator$210, XML_NAME$3 = "w14:numForm", SD_KEY$3 = "numForm", translator$211, XML_NAME$2 = "w14:numSpacing", SD_KEY$2 = "numSpacing", translator$212, XML_NAME$1 = "w14:stylisticSets", SD_KEY$1 = "stylisticSets", STYLISTIC_SET_CHILD_XML_NAME = "w14:ss", translator$213, XML_NAME = "w14:cntxtAlts", SD_KEY = "contextualAlternates", translator$214, createTrackChangeRunPropertyTranslator = (xmlName, sdNodeOrKeyName) => NodeTranslator.from({
63663
+ xmlName,
63664
+ sdNodeOrKeyName,
63665
+ attributes: [
63666
+ createAttributeHandler("w:id", "id"),
63667
+ createAttributeHandler("w:author", "author"),
63668
+ createAttributeHandler("w:authorEmail", "authorEmail"),
63669
+ createAttributeHandler("w:date", "date")
63670
+ ],
63671
+ encode: (_params, encodedAttrs = {}) => {
63672
+ return Object.keys(encodedAttrs).length ? encodedAttrs : undefined;
63673
+ },
63674
+ decode: function({ node: node3 }) {
63675
+ const source = node3?.attrs?.[sdNodeOrKeyName];
63676
+ if (!source || typeof source !== "object")
63677
+ return;
63678
+ const decodedAttrs = this.decodeAttributes({ node: {
63679
+ ...node3,
63680
+ attrs: source
63681
+ } });
63682
+ return Object.keys(decodedAttrs).length ? { attributes: decodedAttrs } : undefined;
63683
+ }
63684
+ }), propertyTranslators$17, translator$128, XML_NODE_NAME$36 = "w:tab", SD_NODE_NAME$32 = "tab", encode$63 = (_, encodedAttrs = {}) => {
63610
63685
  const translated = { type: "tab" };
63611
63686
  if (encodedAttrs)
63612
63687
  translated.attrs = { ...encodedAttrs };
@@ -73347,8 +73422,10 @@ var isRegExp = (value) => {
73347
73422
  }, drawingNodeHandlerEntity, XML_NODE_NAME$6 = "w:del", SD_ATTR_KEY$1 = "trackDelete", validXmlAttributes$3, encode$10 = (params, encodedAttrs = {}) => {
73348
73423
  const { nodeListHandler, extraParams = {}, converter } = params;
73349
73424
  const { node: node3 } = extraParams;
73350
- if (encodedAttrs.id && converter?.trackedChangeIdMap?.has(encodedAttrs.id))
73351
- encodedAttrs.id = converter.trackedChangeIdMap.get(encodedAttrs.id);
73425
+ const originalWordId = encodedAttrs.id;
73426
+ if (originalWordId && converter?.trackedChangeIdMap?.has(originalWordId))
73427
+ encodedAttrs.id = converter.trackedChangeIdMap.get(originalWordId);
73428
+ encodedAttrs.sourceId = originalWordId || "";
73352
73429
  const subs = nodeListHandler.handler({
73353
73430
  ...params,
73354
73431
  insideTrackChange: true,
@@ -73374,8 +73451,10 @@ var isRegExp = (value) => {
73374
73451
  }, config$6, translator$55, XML_NODE_NAME$5 = "w:ins", SD_ATTR_KEY = "trackInsert", validXmlAttributes$2, encode$9 = (params, encodedAttrs = {}) => {
73375
73452
  const { nodeListHandler, extraParams = {}, converter } = params;
73376
73453
  const { node: node3 } = extraParams;
73377
- if (encodedAttrs.id && converter?.trackedChangeIdMap?.has(encodedAttrs.id))
73378
- encodedAttrs.id = converter.trackedChangeIdMap.get(encodedAttrs.id);
73454
+ const originalWordId = encodedAttrs.id;
73455
+ if (originalWordId && converter?.trackedChangeIdMap?.has(originalWordId))
73456
+ encodedAttrs.id = converter.trackedChangeIdMap.get(originalWordId);
73457
+ encodedAttrs.sourceId = originalWordId || "";
73379
73458
  const subs = nodeListHandler.handler({
73380
73459
  ...params,
73381
73460
  insideTrackChange: true,
@@ -74010,8 +74089,7 @@ var isRegExp = (value) => {
74010
74089
  let positionIndex = 0;
74011
74090
  let lastElementWasCommentMarker = false;
74012
74091
  const recentlyClosedComments = /* @__PURE__ */ new Set;
74013
- let lastTrackedChange = null;
74014
- const walkElements = (elements, currentTrackedChangeId = null) => {
74092
+ const walkElements$1 = (elements, currentTrackedChangeId = null) => {
74015
74093
  if (!elements || !Array.isArray(elements))
74016
74094
  return;
74017
74095
  elements.forEach((element) => {
@@ -74057,62 +74135,32 @@ var isRegExp = (value) => {
74057
74135
  }
74058
74136
  lastElementWasCommentMarker = true;
74059
74137
  } else if (isTrackedChange) {
74060
- const trackedChangeId = element.attributes?.["w:id"];
74061
- const author = element.attributes?.["w:author"];
74062
- const date = element.attributes?.["w:date"];
74063
- const elementType = element.name;
74064
- let mappedId = trackedChangeId;
74065
- let isReplacement = false;
74066
- if (trackedChangeId !== undefined && converter) {
74067
- if (!converter.trackedChangeIdMap)
74068
- converter.trackedChangeIdMap = /* @__PURE__ */ new Map;
74069
- if (lastTrackedChange && lastTrackedChange.type !== elementType && lastTrackedChange.author === author && lastTrackedChange.date === date) {
74070
- mappedId = lastTrackedChange.mappedId;
74071
- converter.trackedChangeIdMap.set(String(trackedChangeId), mappedId);
74072
- isReplacement = true;
74073
- } else {
74074
- if (!converter.trackedChangeIdMap.has(String(trackedChangeId)))
74075
- converter.trackedChangeIdMap.set(String(trackedChangeId), v4_default());
74076
- mappedId = converter.trackedChangeIdMap.get(String(trackedChangeId));
74077
- }
74078
- }
74079
- if (currentTrackedChangeId === null)
74080
- if (isReplacement)
74081
- lastTrackedChange = null;
74082
- else
74083
- lastTrackedChange = {
74084
- type: elementType,
74085
- author,
74086
- date,
74087
- mappedId,
74088
- wordId: String(trackedChangeId)
74089
- };
74138
+ const wordId = element.attributes?.["w:id"];
74139
+ const mappedId = wordId != null ? converter?.trackedChangeIdMap?.get(String(wordId)) ?? String(wordId) : currentTrackedChangeId;
74090
74140
  if (mappedId && recentlyClosedComments.size > 0)
74091
74141
  recentlyClosedComments.forEach((commentId) => {
74092
74142
  if (!commentsInTrackedChanges.has(commentId))
74093
- commentsInTrackedChanges.set(commentId, String(mappedId));
74143
+ commentsInTrackedChanges.set(commentId, mappedId);
74094
74144
  });
74095
74145
  recentlyClosedComments.clear();
74096
74146
  if (element.elements && Array.isArray(element.elements))
74097
- walkElements(element.elements, mappedId !== undefined ? String(mappedId) : currentTrackedChangeId);
74147
+ walkElements$1(element.elements, mappedId);
74098
74148
  } else {
74099
74149
  if (lastElementWasCommentMarker) {
74100
74150
  positionIndex++;
74101
74151
  lastElementWasCommentMarker = false;
74102
74152
  }
74103
- if (element.name === "w:p") {
74153
+ if (element.name === "w:p")
74104
74154
  recentlyClosedComments.clear();
74105
- lastTrackedChange = null;
74106
- }
74107
74155
  if (element.elements && Array.isArray(element.elements))
74108
- walkElements(element.elements, currentTrackedChangeId);
74156
+ walkElements$1(element.elements, currentTrackedChangeId);
74109
74157
  }
74110
74158
  });
74111
74159
  };
74112
74160
  if (documentXml.elements && documentXml.elements.length > 0) {
74113
74161
  const body = documentXml.elements[0];
74114
74162
  if (body.elements)
74115
- walkElements(body.elements);
74163
+ walkElements$1(body.elements);
74116
74164
  }
74117
74165
  return {
74118
74166
  rangeEvents,
@@ -74258,7 +74306,7 @@ var isRegExp = (value) => {
74258
74306
  if (importedId == null || !Number.isFinite(createdTime))
74259
74307
  return v4_default();
74260
74308
  return `imported-${simpleHash(`${importedId}-${createdTime}`)}`;
74261
- }, stripFootnoteMarkerNodes = (nodes) => {
74309
+ }, TRACKED_CHANGE_NAMES, PAIRING_TRANSPARENT_NAMES, stripFootnoteMarkerNodes = (nodes) => {
74262
74310
  if (!Array.isArray(nodes) || nodes.length === 0)
74263
74311
  return nodes;
74264
74312
  const walk = (list$1) => {
@@ -74550,6 +74598,7 @@ var isRegExp = (value) => {
74550
74598
  const inlineDocumentFonts = [];
74551
74599
  patchNumberingDefinitions(docx);
74552
74600
  const numbering = getNumberingDefinitions(docx);
74601
+ converter.trackedChangeIdMap = buildTrackedChangeIdMap(docx);
74553
74602
  const comments = importCommentData({
74554
74603
  docx,
74555
74604
  nodeListHandler,
@@ -75508,7 +75557,7 @@ var isRegExp = (value) => {
75508
75557
  state.kern = kernNode.attributes["w:val"];
75509
75558
  }
75510
75559
  }, SuperConverter;
75511
- var init_SuperConverter_CEAHNaZj_es = __esm(() => {
75560
+ var init_SuperConverter_BQCVReWb_es = __esm(() => {
75512
75561
  init_rolldown_runtime_B2q5OVn9_es();
75513
75562
  init_jszip_ChlR43oI_es();
75514
75563
  init_xml_js_DLE8mr0n_es();
@@ -88872,6 +88921,24 @@ var init_SuperConverter_CEAHNaZj_es = __esm(() => {
88872
88921
  };
88873
88922
  }
88874
88923
  });
88924
+ translator$214 = NodeTranslator.from({
88925
+ xmlName: XML_NAME,
88926
+ sdNodeOrKeyName: SD_KEY,
88927
+ encode: ({ nodes }) => {
88928
+ const rawValue = readVal(nodes?.[0]);
88929
+ if (rawValue == null)
88930
+ return true;
88931
+ return parseBoolean(rawValue);
88932
+ },
88933
+ decode: ({ node: node3 }) => {
88934
+ const value = node3?.attrs?.[SD_KEY];
88935
+ if (value == null)
88936
+ return;
88937
+ if (value === true)
88938
+ return { attributes: {} };
88939
+ return { attributes: { "w14:val": "0" } };
88940
+ }
88941
+ });
88875
88942
  propertyTranslators$17 = [
88876
88943
  translator$45,
88877
88944
  translator$41,
@@ -88914,24 +88981,9 @@ var init_SuperConverter_CEAHNaZj_es = __esm(() => {
88914
88981
  translator$211,
88915
88982
  translator$212,
88916
88983
  translator$213,
88917
- NodeTranslator.from({
88918
- xmlName: XML_NAME,
88919
- sdNodeOrKeyName: SD_KEY,
88920
- encode: ({ nodes }) => {
88921
- const rawValue = readVal(nodes?.[0]);
88922
- if (rawValue == null)
88923
- return true;
88924
- return parseBoolean(rawValue);
88925
- },
88926
- decode: ({ node: node3 }) => {
88927
- const value = node3?.attrs?.[SD_KEY];
88928
- if (value == null)
88929
- return;
88930
- if (value === true)
88931
- return { attributes: {} };
88932
- return { attributes: { "w14:val": "0" } };
88933
- }
88934
- }),
88984
+ translator$214,
88985
+ createTrackChangeRunPropertyTranslator("w:ins", "trackInsert"),
88986
+ createTrackChangeRunPropertyTranslator("w:del", "trackDelete"),
88935
88987
  translator$193,
88936
88988
  translator$173
88937
88989
  ];
@@ -108395,6 +108447,20 @@ var init_SuperConverter_CEAHNaZj_es = __esm(() => {
108395
108447
  handlerName: "handlePictNode",
108396
108448
  handler: handlePictNode
108397
108449
  };
108450
+ TRACKED_CHANGE_NAMES = new Set(["w:ins", "w:del"]);
108451
+ PAIRING_TRANSPARENT_NAMES = new Set([
108452
+ "w:commentRangeStart",
108453
+ "w:commentRangeEnd",
108454
+ "w:bookmarkStart",
108455
+ "w:bookmarkEnd",
108456
+ "w:proofErr",
108457
+ "w:permStart",
108458
+ "w:permEnd",
108459
+ "w:moveFromRangeStart",
108460
+ "w:moveFromRangeEnd",
108461
+ "w:moveToRangeStart",
108462
+ "w:moveToRangeEnd"
108463
+ ]);
108398
108464
  DocxHelpers = {
108399
108465
  findRelationshipIdFromTarget,
108400
108466
  insertNewRelationship,
@@ -135913,7 +135979,7 @@ var init_remark_gfm_CjV8kaUy_es = __esm(() => {
135913
135979
  init_remark_gfm_z_sDF4ss_es();
135914
135980
  });
135915
135981
 
135916
- // ../../packages/superdoc/dist/chunks/src-CDxFqrrf.es.js
135982
+ // ../../packages/superdoc/dist/chunks/src-DpqULOk-.es.js
135917
135983
  function deleteProps(obj, propOrProps) {
135918
135984
  const props = typeof propOrProps === "string" ? [propOrProps] : propOrProps;
135919
135985
  const removeNested = (target, pathParts, index2 = 0) => {
@@ -146670,7 +146736,7 @@ function mapParagraphProperties(attrs) {
146670
146736
  };
146671
146737
  }
146672
146738
  function mapListNumbering(attrs) {
146673
- const listRendering = attrs?.listRendering ?? undefined;
146739
+ const listRendering = getListRendering(attrs?.listRendering);
146674
146740
  if (!listRendering)
146675
146741
  return;
146676
146742
  const listNumbering = {};
@@ -146678,8 +146744,7 @@ function mapListNumbering(attrs) {
146678
146744
  listNumbering.marker = listRendering.markerText;
146679
146745
  if (Array.isArray(listRendering.path))
146680
146746
  listNumbering.path = listRendering.path;
146681
- if (Array.isArray(listRendering.path) && listRendering.path.length > 0)
146682
- listNumbering.ordinal = listRendering.path[listRendering.path.length - 1];
146747
+ listNumbering.ordinal = getListOrdinalFromPath(listRendering.path);
146683
146748
  return Object.keys(listNumbering).length ? listNumbering : undefined;
146684
146749
  }
146685
146750
  function mapParagraphNode(candidate) {
@@ -155274,12 +155339,6 @@ function evaluateCanContinuePrevious(editor, target) {
155274
155339
  reason: "INCOMPATIBLE_DEFINITIONS"
155275
155340
  };
155276
155341
  }
155277
- function toPath(value) {
155278
- if (!Array.isArray(value))
155279
- return;
155280
- const parsed = value.map((entry) => toFiniteNumber$1(entry)).filter((entry) => entry != null);
155281
- return parsed.length > 0 ? parsed : undefined;
155282
- }
155283
155342
  function getNumberingProperties2(node3) {
155284
155343
  const attrs = node3.attrs ?? {};
155285
155344
  const paragraphNumbering = attrs.paragraphProperties?.numberingProperties ?? undefined;
@@ -155324,9 +155383,10 @@ function getListText(candidate) {
155324
155383
  function projectListItemCandidate(editor, candidate) {
155325
155384
  const attrs = candidate.node.attrs ?? {};
155326
155385
  const { numId, level } = getNumberingProperties2(candidate.node);
155327
- const path2 = toPath(attrs.listRendering?.path);
155328
- const ordinal = path2?.length ? path2[path2.length - 1] : undefined;
155329
- const marker = typeof attrs.listRendering?.markerText === "string" ? attrs.listRendering.markerText : undefined;
155386
+ const listRendering = getListRendering(attrs.listRendering);
155387
+ const path2 = listRendering?.path;
155388
+ const ordinal = getListOrdinalFromPath(path2);
155389
+ const marker = listRendering?.markerText;
155330
155390
  return {
155331
155391
  candidate,
155332
155392
  address: {
@@ -172632,7 +172692,7 @@ async function measureParagraphBlock(block, maxWidth) {
172632
172692
  dropCapDescriptor.measuredWidth = dropCapMeasured.width;
172633
172693
  dropCapDescriptor.measuredHeight = dropCapMeasured.height;
172634
172694
  }
172635
- const emptyParagraphRun = normalizedRuns.length === 1 && isEmptyTextRun(normalizedRuns[0]) ? normalizedRuns[0] : null;
172695
+ const emptyParagraphRun = normalizedRuns.length === 1 && isEmptyTextRun$1(normalizedRuns[0]) ? normalizedRuns[0] : null;
172636
172696
  if (emptyParagraphRun) {
172637
172697
  const metrics = calculateEmptyParagraphMetrics(emptyParagraphRun.fontSize ?? DEFAULT_PARAGRAPH_FONT_SIZE, spacing, getFontInfoFromRun(emptyParagraphRun));
172638
172698
  const emptyLine = {
@@ -181301,12 +181361,15 @@ function paragraphToFlowBlocks({ para, nextBlockId, positions, trackedChangesCon
181301
181361
  if (!para.content || para.content.length === 0) {
181302
181362
  if (paragraphProps.runProperties?.vanish)
181303
181363
  return blocks2;
181364
+ const paragraphMarkTrackedChange = getParagraphMarkTrackedChange(paragraphProps);
181304
181365
  const paraPos = positions.get(para);
181305
181366
  const emptyRun = {
181306
181367
  text: "",
181307
181368
  fontFamily: defaultFont,
181308
181369
  fontSize: defaultSize
181309
181370
  };
181371
+ if (paragraphMarkTrackedChange)
181372
+ emptyRun.trackedChange = paragraphMarkTrackedChange;
181310
181373
  if (paraPos) {
181311
181374
  emptyRun.pmStart = paraPos.start + 1;
181312
181375
  emptyRun.pmEnd = paraPos.start + 1;
@@ -181323,6 +181386,23 @@ function paragraphToFlowBlocks({ para, nextBlockId, positions, trackedChangesCon
181323
181386
  runs: [emptyRun],
181324
181387
  attrs: emptyParagraphAttrs
181325
181388
  });
181389
+ if (!trackedChangesConfig)
181390
+ return blocks2;
181391
+ const paragraphBlock = blocks2[blocks2.length - 1];
181392
+ if (paragraphBlock?.kind !== "paragraph")
181393
+ return blocks2;
181394
+ const filteredRuns = applyTrackedChangesModeToRuns(paragraphBlock.runs, trackedChangesConfig, hyperlinkConfig, applyMarksToRun, themeColors, enableComments);
181395
+ const isGhostTrackedListArtifact = trackedChangesConfig.enabled && isGhostSuppressionMode(trackedChangesConfig.mode) && Boolean(paragraphAttrs.numberingProperties) && Boolean(paragraphMarkTrackedChange) && filteredRuns.length > 0 && filteredRuns.every(isEmptyTextRun);
181396
+ if (trackedChangesConfig.enabled && (filteredRuns.length === 0 || isGhostTrackedListArtifact)) {
181397
+ blocks2.pop();
181398
+ return blocks2;
181399
+ }
181400
+ paragraphBlock.runs = filteredRuns;
181401
+ paragraphBlock.attrs = {
181402
+ ...paragraphBlock.attrs ?? {},
181403
+ trackedChangesMode: trackedChangesConfig.mode,
181404
+ trackedChangesEnabled: trackedChangesConfig.enabled
181405
+ };
181326
181406
  return blocks2;
181327
181407
  }
181328
181408
  let currentRuns = [];
@@ -181507,6 +181587,7 @@ function handleParagraphNode2(node3, context) {
181507
181587
  if (cached) {
181508
181588
  const delta = pmStart - cached.pmStart;
181509
181589
  const reusedBlocks = shiftCachedBlocks(cached.blocks, delta);
181590
+ applyTrackedGhostListAdjustments(node3, reusedBlocks, context);
181510
181591
  reusedBlocks.forEach((block) => {
181511
181592
  blocks2.push(block);
181512
181593
  recordBlockKind?.(block.kind);
@@ -181515,7 +181596,7 @@ function handleParagraphNode2(node3, context) {
181515
181596
  sectionState.currentParagraphIndex++;
181516
181597
  return;
181517
181598
  }
181518
- const paragraphBlocks = paragraphToFlowBlocks$1({
181599
+ const paragraphBlocks$1 = paragraphToFlowBlocks$1({
181519
181600
  para: node3,
181520
181601
  nextBlockId,
181521
181602
  positions,
@@ -181528,15 +181609,16 @@ function handleParagraphNode2(node3, context) {
181528
181609
  enableComments,
181529
181610
  stableBlockId: prefixedStableId
181530
181611
  });
181531
- paragraphBlocks.forEach((block) => {
181612
+ applyTrackedGhostListAdjustments(node3, paragraphBlocks$1, context);
181613
+ paragraphBlocks$1.forEach((block) => {
181532
181614
  blocks2.push(block);
181533
181615
  recordBlockKind?.(block.kind);
181534
181616
  });
181535
- flowBlockCache.set(prefixedStableId, nodeJson, nodeRev, paragraphBlocks, pmStart);
181617
+ flowBlockCache.set(prefixedStableId, nodeJson, nodeRev, paragraphBlocks$1, pmStart);
181536
181618
  sectionState.currentParagraphIndex++;
181537
181619
  return;
181538
181620
  }
181539
- paragraphToFlowBlocks$1({
181621
+ const paragraphBlocks = paragraphToFlowBlocks$1({
181540
181622
  para: node3,
181541
181623
  nextBlockId,
181542
181624
  positions,
@@ -181548,7 +181630,9 @@ function handleParagraphNode2(node3, context) {
181548
181630
  converterContext,
181549
181631
  enableComments,
181550
181632
  stableBlockId: prefixedStableId ?? undefined
181551
- }).forEach((block) => {
181633
+ });
181634
+ applyTrackedGhostListAdjustments(node3, paragraphBlocks, context);
181635
+ paragraphBlocks.forEach((block) => {
181552
181636
  blocks2.push(block);
181553
181637
  recordBlockKind?.(block.kind);
181554
181638
  });
@@ -181613,7 +181697,9 @@ function toFlowBlocks(pmDoc, options) {
181613
181697
  },
181614
181698
  converters,
181615
181699
  themeColors,
181616
- flowBlockCache
181700
+ flowBlockCache,
181701
+ trackedListMarkerOffsets: /* @__PURE__ */ new Map,
181702
+ trackedListLastOrdinals: /* @__PURE__ */ new Map
181617
181703
  };
181618
181704
  doc$2.content.forEach((node3) => {
181619
181705
  const handler2 = nodeHandlers2[node3.type];
@@ -188000,7 +188086,8 @@ function createNumberingPlugin(editor) {
188000
188086
  suffix,
188001
188087
  justification,
188002
188088
  path: path2,
188003
- numberingType: listNumberingType
188089
+ numberingType: listNumberingType,
188090
+ ...customFormat ? { customFormat } : {}
188004
188091
  };
188005
188092
  if (JSON.stringify(node3.attrs.listRendering) !== JSON.stringify(newListRendering)) {
188006
188093
  tr.setNodeAttribute(pos, "listRendering", newListRendering);
@@ -195025,7 +195112,36 @@ var Node$13 = class Node$14 {
195025
195112
  undoManager$1.destroy();
195026
195113
  } };
195027
195114
  }
195028
- }), comments_module_events, v_click_outside_default, DEFAULT_ENDPOINT = "https://ingest.superdoc.dev/v1/collect", Telemetry = class {
195115
+ }), comments_module_events, toFiniteNumber$2 = (value) => {
195116
+ if (typeof value === "number" && Number.isFinite(value))
195117
+ return value;
195118
+ if (typeof value === "string" && value.trim().length > 0) {
195119
+ const parsed = Number(value);
195120
+ if (Number.isFinite(parsed))
195121
+ return parsed;
195122
+ }
195123
+ }, getListOrdinalFromPath = (path2) => {
195124
+ if (!Array.isArray(path2) || path2.length === 0)
195125
+ return;
195126
+ const ordinal = toFiniteNumber$2(path2[path2.length - 1]);
195127
+ return ordinal != null && ordinal > 0 ? ordinal : undefined;
195128
+ }, getListRendering = (value) => {
195129
+ if (!value || typeof value !== "object")
195130
+ return;
195131
+ const attrs = value;
195132
+ const markerText = typeof attrs.markerText === "string" ? attrs.markerText : undefined;
195133
+ const numberingType = typeof attrs.numberingType === "string" ? attrs.numberingType : undefined;
195134
+ const customFormat = typeof attrs.customFormat === "string" ? attrs.customFormat : undefined;
195135
+ const path2 = Array.isArray(attrs.path) ? attrs.path.map(toFiniteNumber$2).filter((entry) => entry != null) : undefined;
195136
+ if (!markerText && !numberingType && (!path2 || path2.length === 0))
195137
+ return;
195138
+ return {
195139
+ markerText,
195140
+ numberingType,
195141
+ ...path2 && path2.length > 0 ? { path: path2 } : {},
195142
+ ...customFormat ? { customFormat } : {}
195143
+ };
195144
+ }, v_click_outside_default, DEFAULT_ENDPOINT = "https://ingest.superdoc.dev/v1/collect", Telemetry = class {
195029
195145
  constructor(config2) {
195030
195146
  this.enabled = config2.enabled;
195031
195147
  this.endpoint = config2.endpoint || DEFAULT_ENDPOINT;
@@ -203674,7 +203790,7 @@ var Node$13 = class Node$14 {
203674
203790
  return parsed;
203675
203791
  }
203676
203792
  return fallback;
203677
- }, normalizeFontFamily = (value, fallback = DEFAULT_PARAGRAPH_FONT_FAMILY) => typeof value === "string" && value.trim().length > 0 ? value : fallback, roundValue = (value) => measurementConfig.mode === "deterministic" ? Math.round(value * 10) / 10 : value, WORD_SINGLE_LINE_SPACING_MULTIPLIER = 1.15, isEmptyTextRun = (run2) => {
203793
+ }, normalizeFontFamily = (value, fallback = DEFAULT_PARAGRAPH_FONT_FAMILY) => typeof value === "string" && value.trim().length > 0 ? value : fallback, roundValue = (value) => measurementConfig.mode === "deterministic" ? Math.round(value * 10) / 10 : value, WORD_SINGLE_LINE_SPACING_MULTIPLIER = 1.15, isEmptyTextRun$1 = (run2) => {
203678
203794
  if (run2.kind && run2.kind !== "text")
203679
203795
  return false;
203680
203796
  return typeof run2.text === "string" && run2.text.length === 0;
@@ -208554,6 +208670,161 @@ var Node$13 = class Node$14 {
208554
208670
  if (aKeys[i$1] !== bKeys[i$1])
208555
208671
  return false;
208556
208672
  return true;
208673
+ }, toTrackChangeAttrs = (value) => {
208674
+ if (!value || typeof value !== "object")
208675
+ return;
208676
+ return value;
208677
+ }, getParagraphMarkTrackedChange = (paragraphProperties) => {
208678
+ const runProperties = paragraphProperties?.runProperties && typeof paragraphProperties.runProperties === "object" ? paragraphProperties.runProperties : undefined;
208679
+ if (!runProperties)
208680
+ return;
208681
+ const trackInsertAttrs = toTrackChangeAttrs(runProperties.trackInsert);
208682
+ const trackDeleteAttrs = toTrackChangeAttrs(runProperties.trackDelete);
208683
+ if (!trackInsertAttrs && !trackDeleteAttrs)
208684
+ return;
208685
+ const marks = [];
208686
+ if (trackInsertAttrs)
208687
+ marks.push({
208688
+ type: "trackInsert",
208689
+ attrs: trackInsertAttrs
208690
+ });
208691
+ if (trackDeleteAttrs)
208692
+ marks.push({
208693
+ type: "trackDelete",
208694
+ attrs: trackDeleteAttrs
208695
+ });
208696
+ return collectTrackedChangeFromMarks(marks);
208697
+ }, isEmptyTextRun = (run2) => {
208698
+ if (!isTextRun$2(run2))
208699
+ return false;
208700
+ return run2.text.length === 0;
208701
+ }, getBlockMarker = (block) => {
208702
+ if (!("attrs" in block) || !block.attrs || typeof block.attrs !== "object")
208703
+ return;
208704
+ const wordLayout = block.attrs.wordLayout;
208705
+ if (!wordLayout || typeof wordLayout !== "object")
208706
+ return;
208707
+ const marker = wordLayout.marker;
208708
+ if (!marker || typeof marker !== "object")
208709
+ return;
208710
+ return marker;
208711
+ }, getOriginalMarkerText = (marker) => {
208712
+ if (typeof marker.pmAdapterOriginalMarkerText === "string")
208713
+ return marker.pmAdapterOriginalMarkerText;
208714
+ return typeof marker.markerText === "string" ? marker.markerText : undefined;
208715
+ }, isGhostSuppressionMode = (mode) => mode !== "off" && mode !== "final" && mode !== "original", getListKey = (numId, ilvl) => {
208716
+ if (typeof numId !== "number" && typeof numId !== "string" || typeof ilvl !== "number")
208717
+ return;
208718
+ const normalizedNumId = String(numId).trim();
208719
+ if (!normalizedNumId)
208720
+ return;
208721
+ return `${normalizedNumId}:${ilvl}`;
208722
+ }, getParagraphListKeyFromAttrs = (attrs) => {
208723
+ if (!attrs || typeof attrs !== "object")
208724
+ return;
208725
+ const numberingProperties = attrs.numberingProperties;
208726
+ if (!numberingProperties)
208727
+ return;
208728
+ return getListKey(numberingProperties.numId, numberingProperties.ilvl);
208729
+ }, TRAILING_MARKER_TOKEN_RE, getNodeListOrdinal = (node3) => {
208730
+ const listRendering = getListRendering(node3.attrs?.listRendering);
208731
+ if (!listRendering || listRendering.numberingType === "bullet")
208732
+ return;
208733
+ return getListOrdinalFromPath(listRendering.path);
208734
+ }, formatListOrdinalToken = (numberingType, ordinal, customFormat) => {
208735
+ if (!Number.isFinite(ordinal) || ordinal < 1 || numberingType === "bullet")
208736
+ return;
208737
+ return generateOrderedListIndex({
208738
+ listLevel: [Math.trunc(ordinal)],
208739
+ lvlText: "%1",
208740
+ listNumberingType: numberingType,
208741
+ customFormat
208742
+ }) ?? undefined;
208743
+ }, replaceTrailingMarkerToken = (markerText, replacementToken) => {
208744
+ const match$1 = TRAILING_MARKER_TOKEN_RE.exec(markerText);
208745
+ if (!match$1)
208746
+ return;
208747
+ return `${match$1[1] ?? ""}${replacementToken}${match$1[3] ?? ""}`;
208748
+ }, updateGhostListMarkerOffsets = (node3, paragraphBlocks, context) => {
208749
+ if (!context.trackedChangesConfig.enabled)
208750
+ return;
208751
+ if (paragraphBlocks.some((block) => block.kind === "paragraph"))
208752
+ return;
208753
+ if (Array.isArray(node3.content) && node3.content.length > 0)
208754
+ return;
208755
+ if (!getParagraphMarkTrackedChange(typeof node3.attrs?.paragraphProperties === "object" && node3.attrs.paragraphProperties !== null ? node3.attrs.paragraphProperties : {}))
208756
+ return;
208757
+ const { paragraphAttrs } = computeParagraphAttrs(node3, context.converterContext);
208758
+ const key$1 = getParagraphListKeyFromAttrs(paragraphAttrs);
208759
+ if (!key$1)
208760
+ return;
208761
+ const offsets = context.trackedListMarkerOffsets;
208762
+ if (!offsets)
208763
+ return;
208764
+ offsets.set(key$1, (offsets.get(key$1) ?? 0) + 1);
208765
+ }, getNodeListKey = (node3, context) => {
208766
+ const { paragraphAttrs } = computeParagraphAttrs(node3, context.converterContext);
208767
+ return getParagraphListKeyFromAttrs(paragraphAttrs);
208768
+ }, applyGhostListMarkerOffsets = (node3, paragraphBlocks, context) => {
208769
+ const offsets = context.trackedListMarkerOffsets;
208770
+ const lastOrdinals = context.trackedListLastOrdinals;
208771
+ if (!offsets || offsets.size === 0 || !context.trackedChangesConfig.enabled)
208772
+ return;
208773
+ const listRendering = getListRendering(node3.attrs?.listRendering);
208774
+ const numberingType = listRendering?.numberingType;
208775
+ if (!numberingType || numberingType === "bullet")
208776
+ return;
208777
+ const sourceOrdinal = getNodeListOrdinal(node3);
208778
+ if (!sourceOrdinal)
208779
+ return;
208780
+ const nodeListKey = getNodeListKey(node3, context);
208781
+ if (!nodeListKey)
208782
+ return;
208783
+ const previousOrdinal = lastOrdinals?.get(nodeListKey);
208784
+ if (previousOrdinal != null && sourceOrdinal <= previousOrdinal)
208785
+ offsets.delete(nodeListKey);
208786
+ lastOrdinals?.set(nodeListKey, sourceOrdinal);
208787
+ const offset$1 = offsets.get(nodeListKey) ?? 0;
208788
+ if (offset$1 <= 0)
208789
+ return;
208790
+ const adjustedOrdinal = sourceOrdinal - offset$1;
208791
+ if (adjustedOrdinal < 1) {
208792
+ offsets.delete(nodeListKey);
208793
+ paragraphBlocks.forEach((block) => {
208794
+ if (block.kind !== "paragraph" || getParagraphListKeyFromAttrs(block.attrs) !== nodeListKey)
208795
+ return;
208796
+ const marker = getBlockMarker(block);
208797
+ if (!marker)
208798
+ return;
208799
+ const sourceMarkerText = getOriginalMarkerText(marker);
208800
+ if (sourceMarkerText)
208801
+ marker.markerText = sourceMarkerText;
208802
+ });
208803
+ return;
208804
+ }
208805
+ const replacementToken = formatListOrdinalToken(numberingType, adjustedOrdinal, listRendering.customFormat);
208806
+ if (!replacementToken)
208807
+ return;
208808
+ paragraphBlocks.forEach((block) => {
208809
+ if (block.kind !== "paragraph" || getParagraphListKeyFromAttrs(block.attrs) !== nodeListKey)
208810
+ return;
208811
+ const marker = getBlockMarker(block);
208812
+ if (!marker)
208813
+ return;
208814
+ const sourceMarkerText = getOriginalMarkerText(marker);
208815
+ if (!sourceMarkerText)
208816
+ return;
208817
+ const adjustedText = replaceTrailingMarkerToken(sourceMarkerText, replacementToken);
208818
+ if (!adjustedText || adjustedText === sourceMarkerText)
208819
+ return;
208820
+ marker.pmAdapterOriginalMarkerText = sourceMarkerText;
208821
+ marker.markerText = adjustedText;
208822
+ });
208823
+ }, applyTrackedGhostListAdjustments = (node3, paragraphBlocks, context) => {
208824
+ if (!context.trackedChangesConfig.enabled)
208825
+ return;
208826
+ updateGhostListMarkerOffsets(node3, paragraphBlocks, context);
208827
+ applyGhostListMarkerOffsets(node3, paragraphBlocks, context);
208557
208828
  }, INLINE_CONVERTERS_REGISTRY, SHAPE_CONVERTERS_REGISTRY, DEFAULT_FONT = "Times New Roman", DEFAULT_SIZE, nodeHandlers2, converters, measurementCanvas = null, measurementCtx = null, TAB_CHAR_LENGTH = 1, SPACE_CHARS$1, isTabRun = (run2) => run2?.kind === "tab", isWordChar$2 = (char) => {
208558
208829
  if (!char)
208559
208830
  return false;
@@ -217722,38 +217993,19 @@ var Node$13 = class Node$14 {
217722
217993
  return;
217723
217994
  const matchingChange = trackedChanges[changeIndex];
217724
217995
  const matchingId = matchingChange.mark.attrs.id;
217725
- const getSegmentSize = ({ from: from$1, to }) => to - from$1;
217726
- const areDirectlyConnected = (left$1, right$1) => {
217727
- if (!left$1 || !right$1)
217728
- return false;
217729
- if (left$1.to !== right$1.from)
217730
- return false;
217731
- return !(state.doc.textBetween(left$1.from, right$1.to, `
217732
- `).length > getSegmentSize(left$1) + getSegmentSize(right$1));
217733
- };
217734
- const isComplementaryPair = (firstType, secondType) => firstType === "trackDelete" && secondType === "trackInsert" || firstType === "trackInsert" && secondType === "trackDelete";
217735
217996
  const linkedBefore = [];
217736
217997
  const linkedAfter = [];
217737
217998
  const collectDirection = (direction, collection) => {
217738
217999
  let currentIndex = changeIndex;
217739
- let currentChange = matchingChange;
217740
218000
  while (true) {
217741
218001
  const neighborIndex = currentIndex + direction;
217742
218002
  const neighbor = trackedChanges[neighborIndex];
217743
218003
  if (!neighbor)
217744
218004
  break;
217745
- const [left$1, right$1] = direction < 0 ? [neighbor, currentChange] : [currentChange, neighbor];
217746
- const sharesId = neighbor.mark.attrs.id === matchingId;
217747
- const complementary = isComplementaryPair(currentChange.mark.type.name, neighbor.mark.type.name);
217748
- if (!sharesId && !areDirectlyConnected(left$1, right$1))
217749
- break;
217750
- if (!sharesId && !complementary)
218005
+ if (!(neighbor.mark.attrs.id === matchingId))
217751
218006
  break;
217752
218007
  collection.push(neighbor);
217753
218008
  currentIndex = neighborIndex;
217754
- currentChange = neighbor;
217755
- if (!sharesId)
217756
- break;
217757
218009
  }
217758
218010
  };
217759
218011
  collectDirection(-1, linkedBefore);
@@ -219444,9 +219696,9 @@ var Node$13 = class Node$14 {
219444
219696
  return false;
219445
219697
  return Boolean(checker(attrs));
219446
219698
  }, SuperToolbar, ICONS, TEXTS, tableActionsOptions;
219447
- var init_src_CDxFqrrf_es = __esm(() => {
219699
+ var init_src_DpqULOk_es = __esm(() => {
219448
219700
  init_rolldown_runtime_B2q5OVn9_es();
219449
- init_SuperConverter_CEAHNaZj_es();
219701
+ init_SuperConverter_BQCVReWb_es();
219450
219702
  init_jszip_ChlR43oI_es();
219451
219703
  init_uuid_qzgm05fK_es();
219452
219704
  init_constants_CMPtQbp7_es();
@@ -226553,7 +226805,7 @@ function print() { __p += __j.call(arguments, '') }
226553
226805
  iteratee$1(index2);
226554
226806
  return result$1;
226555
226807
  }
226556
- function toPath$1(value) {
226808
+ function toPath(value) {
226557
226809
  if (isArray$2(value))
226558
226810
  return arrayMap(value, toKey);
226559
226811
  return isSymbol2(value) ? [value] : copyArray(stringToPath(toString2(value)));
@@ -226723,7 +226975,7 @@ function print() { __p += __j.call(arguments, '') }
226723
226975
  lodash.toArray = toArray;
226724
226976
  lodash.toPairs = toPairs2;
226725
226977
  lodash.toPairsIn = toPairsIn;
226726
- lodash.toPath = toPath$1;
226978
+ lodash.toPath = toPath;
226727
226979
  lodash.toPlainObject = toPlainObject;
226728
226980
  lodash.transform = transform;
226729
226981
  lodash.unary = unary;
@@ -237461,6 +237713,7 @@ function print() { __p += __j.call(arguments, '') }
237461
237713
  chartType: "unknown",
237462
237714
  series: []
237463
237715
  };
237716
+ TRAILING_MARKER_TOKEN_RE = /^(.*?)([\p{L}\p{N}]+)([^\p{L}\p{N}]*)$/u;
237464
237717
  INLINE_CONVERTERS_REGISTRY = {
237465
237718
  footnoteReference: { inlineConverter: footnoteReferenceToBlock },
237466
237719
  endnoteReference: { inlineConverter: endnoteReferenceToBlock },
@@ -248246,6 +248499,10 @@ function print() { __p += __j.call(arguments, '') }
248246
248499
  return { "data-date": attrs.date };
248247
248500
  }
248248
248501
  },
248502
+ sourceId: {
248503
+ default: "",
248504
+ rendered: false
248505
+ },
248249
248506
  importedAuthor: {
248250
248507
  default: "",
248251
248508
  rendered: false
@@ -248317,6 +248574,10 @@ function print() { __p += __j.call(arguments, '') }
248317
248574
  return { "data-date": attrs.date };
248318
248575
  }
248319
248576
  },
248577
+ sourceId: {
248578
+ default: "",
248579
+ rendered: false
248580
+ },
248320
248581
  importedAuthor: {
248321
248582
  default: "",
248322
248583
  rendered: false
@@ -253128,8 +253389,8 @@ var init_zipper_DqXT7uTa_es = __esm(() => {
253128
253389
 
253129
253390
  // ../../packages/superdoc/dist/super-editor.es.js
253130
253391
  var init_super_editor_es = __esm(() => {
253131
- init_src_CDxFqrrf_es();
253132
- init_SuperConverter_CEAHNaZj_es();
253392
+ init_src_DpqULOk_es();
253393
+ init_SuperConverter_BQCVReWb_es();
253133
253394
  init_jszip_ChlR43oI_es();
253134
253395
  init_xml_js_DLE8mr0n_es();
253135
253396
  init_constants_CMPtQbp7_es();
@@ -261133,6 +261394,41 @@ var init_get_adapter = __esm(() => {
261133
261394
  init_sd_projection();
261134
261395
  });
261135
261396
 
261397
+ // ../../shared/common/list-rendering.ts
261398
+ var toFiniteNumber3 = (value) => {
261399
+ if (typeof value === "number" && Number.isFinite(value))
261400
+ return value;
261401
+ if (typeof value === "string" && value.trim().length > 0) {
261402
+ const parsed = Number(value);
261403
+ if (Number.isFinite(parsed))
261404
+ return parsed;
261405
+ }
261406
+ return;
261407
+ }, getListOrdinalFromPath2 = (path2) => {
261408
+ if (!Array.isArray(path2) || path2.length === 0)
261409
+ return;
261410
+ const ordinal = toFiniteNumber3(path2[path2.length - 1]);
261411
+ return ordinal != null && ordinal > 0 ? ordinal : undefined;
261412
+ }, getListRendering2 = (value) => {
261413
+ if (!value || typeof value !== "object") {
261414
+ return;
261415
+ }
261416
+ const attrs = value;
261417
+ const markerText = typeof attrs.markerText === "string" ? attrs.markerText : undefined;
261418
+ const numberingType = typeof attrs.numberingType === "string" ? attrs.numberingType : undefined;
261419
+ const customFormat = typeof attrs.customFormat === "string" ? attrs.customFormat : undefined;
261420
+ const path2 = Array.isArray(attrs.path) ? attrs.path.map(toFiniteNumber3).filter((entry) => entry != null) : undefined;
261421
+ if (!markerText && !numberingType && (!path2 || path2.length === 0)) {
261422
+ return;
261423
+ }
261424
+ return {
261425
+ markerText,
261426
+ numberingType,
261427
+ ...path2 && path2.length > 0 ? { path: path2 } : {},
261428
+ ...customFormat ? { customFormat } : {}
261429
+ };
261430
+ };
261431
+
261136
261432
  // ../../packages/super-editor/src/document-api-adapters/helpers/content-controls/target-resolution.ts
261137
261433
  function isSdtNode2(node3) {
261138
261434
  return SDT_NODE_NAMES2.includes(node3.type.name);
@@ -261482,7 +261778,7 @@ function mapParagraphProperties2(attrs) {
261482
261778
  };
261483
261779
  }
261484
261780
  function mapListNumbering2(attrs) {
261485
- const listRendering = attrs?.listRendering ?? undefined;
261781
+ const listRendering = getListRendering2(attrs?.listRendering);
261486
261782
  if (!listRendering)
261487
261783
  return;
261488
261784
  const listNumbering = {};
@@ -261490,9 +261786,7 @@ function mapListNumbering2(attrs) {
261490
261786
  listNumbering.marker = listRendering.markerText;
261491
261787
  if (Array.isArray(listRendering.path))
261492
261788
  listNumbering.path = listRendering.path;
261493
- if (Array.isArray(listRendering.path) && listRendering.path.length > 0) {
261494
- listNumbering.ordinal = listRendering.path[listRendering.path.length - 1];
261495
- }
261789
+ listNumbering.ordinal = getListOrdinalFromPath2(listRendering.path);
261496
261790
  return Object.keys(listNumbering).length ? listNumbering : undefined;
261497
261791
  }
261498
261792
  function mapParagraphNode2(candidate) {
@@ -284004,6 +284298,40 @@ var init_cntxtAlts_translator = __esm(() => {
284004
284298
  });
284005
284299
  });
284006
284300
 
284301
+ // ../../packages/super-editor/src/core/super-converter/v3/handlers/w/rpr/track-change-run-property-translator.js
284302
+ var createTrackChangeRunPropertyTranslator2 = (xmlName, sdNodeOrKeyName) => NodeTranslator3.from({
284303
+ xmlName,
284304
+ sdNodeOrKeyName,
284305
+ attributes: [
284306
+ createAttributeHandler2("w:id", "id"),
284307
+ createAttributeHandler2("w:author", "author"),
284308
+ createAttributeHandler2("w:authorEmail", "authorEmail"),
284309
+ createAttributeHandler2("w:date", "date")
284310
+ ],
284311
+ encode: (_params, encodedAttrs = {}) => {
284312
+ return Object.keys(encodedAttrs).length ? encodedAttrs : undefined;
284313
+ },
284314
+ decode: function({ node: node4 }) {
284315
+ const source = node4?.attrs?.[sdNodeOrKeyName];
284316
+ if (!source || typeof source !== "object") {
284317
+ return;
284318
+ }
284319
+ const decodedAttrs = this.decodeAttributes({
284320
+ node: {
284321
+ ...node4,
284322
+ attrs: source
284323
+ }
284324
+ });
284325
+ return Object.keys(decodedAttrs).length ? { attributes: decodedAttrs } : undefined;
284326
+ }
284327
+ }), trackInsertRunPropertyTranslator, trackDeleteRunPropertyTranslator;
284328
+ var init_track_change_run_property_translator = __esm(() => {
284329
+ init_node_translator2();
284330
+ init_utils();
284331
+ trackInsertRunPropertyTranslator = createTrackChangeRunPropertyTranslator2("w:ins", "trackInsert");
284332
+ trackDeleteRunPropertyTranslator = createTrackChangeRunPropertyTranslator2("w:del", "trackDelete");
284333
+ });
284334
+
284007
284335
  // ../../packages/super-editor/src/core/super-converter/v3/handlers/w/rpr/rpr-translator.js
284008
284336
  var propertyTranslators2, translator47;
284009
284337
  var init_rpr_translator = __esm(() => {
@@ -284053,6 +284381,7 @@ var init_rpr_translator = __esm(() => {
284053
284381
  init_numSpacing_translator();
284054
284382
  init_stylisticSets_translator();
284055
284383
  init_cntxtAlts_translator();
284384
+ init_track_change_run_property_translator();
284056
284385
  propertyTranslators2 = [
284057
284386
  translator5,
284058
284387
  translator4,
@@ -284096,6 +284425,8 @@ var init_rpr_translator = __esm(() => {
284096
284425
  translator44,
284097
284426
  translator45,
284098
284427
  translator46,
284428
+ trackInsertRunPropertyTranslator,
284429
+ trackDeleteRunPropertyTranslator,
284099
284430
  translator41,
284100
284431
  translator33
284101
284432
  ];
@@ -309195,7 +309526,7 @@ function decode74(params3) {
309195
309526
  return {
309196
309527
  name: "w:del",
309197
309528
  attributes: {
309198
- "w:id": trackedMark.attrs.id,
309529
+ "w:id": trackedMark.attrs.sourceId || trackedMark.attrs.id,
309199
309530
  "w:author": trackedMark.attrs.author,
309200
309531
  "w:authorEmail": trackedMark.attrs.authorEmail,
309201
309532
  "w:date": trackedMark.attrs.date
@@ -309206,9 +309537,11 @@ function decode74(params3) {
309206
309537
  var XML_NODE_NAME35 = "w:del", SD_ATTR_KEY5 = "trackDelete", validXmlAttributes11, encode70 = (params3, encodedAttrs = {}) => {
309207
309538
  const { nodeListHandler, extraParams = {}, converter } = params3;
309208
309539
  const { node: node4 } = extraParams;
309209
- if (encodedAttrs.id && converter?.trackedChangeIdMap?.has(encodedAttrs.id)) {
309210
- encodedAttrs.id = converter.trackedChangeIdMap.get(encodedAttrs.id);
309540
+ const originalWordId = encodedAttrs.id;
309541
+ if (originalWordId && converter?.trackedChangeIdMap?.has(originalWordId)) {
309542
+ encodedAttrs.id = converter.trackedChangeIdMap.get(originalWordId);
309211
309543
  }
309544
+ encodedAttrs.sourceId = originalWordId || "";
309212
309545
  const subs = nodeListHandler.handler({
309213
309546
  ...params3,
309214
309547
  insideTrackChange: true,
@@ -309275,7 +309608,7 @@ function decode75(params3) {
309275
309608
  return {
309276
309609
  name: "w:ins",
309277
309610
  attributes: {
309278
- "w:id": trackedMark.attrs.id,
309611
+ "w:id": trackedMark.attrs.sourceId || trackedMark.attrs.id,
309279
309612
  "w:author": trackedMark.attrs.author,
309280
309613
  "w:authorEmail": trackedMark.attrs.authorEmail,
309281
309614
  "w:date": trackedMark.attrs.date
@@ -309286,9 +309619,11 @@ function decode75(params3) {
309286
309619
  var XML_NODE_NAME36 = "w:ins", SD_ATTR_KEY6 = "trackInsert", validXmlAttributes12, encode71 = (params3, encodedAttrs = {}) => {
309287
309620
  const { nodeListHandler, extraParams = {}, converter } = params3;
309288
309621
  const { node: node4 } = extraParams;
309289
- if (encodedAttrs.id && converter?.trackedChangeIdMap?.has(encodedAttrs.id)) {
309290
- encodedAttrs.id = converter.trackedChangeIdMap.get(encodedAttrs.id);
309622
+ const originalWordId = encodedAttrs.id;
309623
+ if (originalWordId && converter?.trackedChangeIdMap?.has(originalWordId)) {
309624
+ encodedAttrs.id = converter.trackedChangeIdMap.get(originalWordId);
309291
309625
  }
309626
+ encodedAttrs.sourceId = originalWordId || "";
309292
309627
  const subs = nodeListHandler.handler({
309293
309628
  ...params3,
309294
309629
  insideTrackChange: true,
@@ -311655,8 +311990,7 @@ var generateCommentsWithExtendedData2 = ({ docx, comments, converter, threadingP
311655
311990
  let positionIndex = 0;
311656
311991
  let lastElementWasCommentMarker = false;
311657
311992
  const recentlyClosedComments = new Set;
311658
- let lastTrackedChange = null;
311659
- const walkElements = (elements, currentTrackedChangeId = null) => {
311993
+ const walkElements2 = (elements, currentTrackedChangeId = null) => {
311660
311994
  if (!elements || !Array.isArray(elements))
311661
311995
  return;
311662
311996
  elements.forEach((element3) => {
@@ -311699,50 +312033,18 @@ var generateCommentsWithExtendedData2 = ({ docx, comments, converter, threadingP
311699
312033
  }
311700
312034
  lastElementWasCommentMarker = true;
311701
312035
  } else if (isTrackedChange) {
311702
- const trackedChangeId = element3.attributes?.["w:id"];
311703
- const author = element3.attributes?.["w:author"];
311704
- const date = element3.attributes?.["w:date"];
311705
- const elementType = element3.name;
311706
- let mappedId = trackedChangeId;
311707
- let isReplacement = false;
311708
- if (trackedChangeId !== undefined && converter) {
311709
- if (!converter.trackedChangeIdMap) {
311710
- converter.trackedChangeIdMap = new Map;
311711
- }
311712
- if (lastTrackedChange && lastTrackedChange.type !== elementType && lastTrackedChange.author === author && lastTrackedChange.date === date) {
311713
- mappedId = lastTrackedChange.mappedId;
311714
- converter.trackedChangeIdMap.set(String(trackedChangeId), mappedId);
311715
- isReplacement = true;
311716
- } else {
311717
- if (!converter.trackedChangeIdMap.has(String(trackedChangeId))) {
311718
- converter.trackedChangeIdMap.set(String(trackedChangeId), v42());
311719
- }
311720
- mappedId = converter.trackedChangeIdMap.get(String(trackedChangeId));
311721
- }
311722
- }
311723
- if (currentTrackedChangeId === null) {
311724
- if (isReplacement) {
311725
- lastTrackedChange = null;
311726
- } else {
311727
- lastTrackedChange = {
311728
- type: elementType,
311729
- author,
311730
- date,
311731
- mappedId,
311732
- wordId: String(trackedChangeId)
311733
- };
311734
- }
311735
- }
312036
+ const wordId = element3.attributes?.["w:id"];
312037
+ const mappedId = wordId != null ? converter?.trackedChangeIdMap?.get(String(wordId)) ?? String(wordId) : currentTrackedChangeId;
311736
312038
  if (mappedId && recentlyClosedComments.size > 0) {
311737
312039
  recentlyClosedComments.forEach((commentId) => {
311738
312040
  if (!commentsInTrackedChanges.has(commentId)) {
311739
- commentsInTrackedChanges.set(commentId, String(mappedId));
312041
+ commentsInTrackedChanges.set(commentId, mappedId);
311740
312042
  }
311741
312043
  });
311742
312044
  }
311743
312045
  recentlyClosedComments.clear();
311744
312046
  if (element3.elements && Array.isArray(element3.elements)) {
311745
- walkElements(element3.elements, mappedId !== undefined ? String(mappedId) : currentTrackedChangeId);
312047
+ walkElements2(element3.elements, mappedId);
311746
312048
  }
311747
312049
  } else {
311748
312050
  if (lastElementWasCommentMarker) {
@@ -311751,10 +312053,9 @@ var generateCommentsWithExtendedData2 = ({ docx, comments, converter, threadingP
311751
312053
  }
311752
312054
  if (element3.name === "w:p") {
311753
312055
  recentlyClosedComments.clear();
311754
- lastTrackedChange = null;
311755
312056
  }
311756
312057
  if (element3.elements && Array.isArray(element3.elements)) {
311757
- walkElements(element3.elements, currentTrackedChangeId);
312058
+ walkElements2(element3.elements, currentTrackedChangeId);
311758
312059
  }
311759
312060
  }
311760
312061
  });
@@ -311762,7 +312063,7 @@ var generateCommentsWithExtendedData2 = ({ docx, comments, converter, threadingP
311762
312063
  if (documentXml.elements && documentXml.elements.length > 0) {
311763
312064
  const body = documentXml.elements[0];
311764
312065
  if (body.elements) {
311765
- walkElements(body.elements);
312066
+ walkElements2(body.elements);
311766
312067
  }
311767
312068
  }
311768
312069
  return { rangeEvents, rangePositions, commentsInTrackedChanges };
@@ -311916,6 +312217,82 @@ var init_documentCommentsImporter = __esm(() => {
311916
312217
  init_docxImporter();
311917
312218
  });
311918
312219
 
312220
+ // ../../packages/super-editor/src/core/super-converter/v2/importer/trackedChangeIdMapper.js
312221
+ function isReplacementPair2(previous5, current) {
312222
+ return previous5.type !== current.type && previous5.author === current.author && previous5.date === current.date;
312223
+ }
312224
+ function assignInternalId2(element3, idMap, context, insideTrackedChange) {
312225
+ const wordId = String(element3.attributes?.["w:id"] ?? "");
312226
+ if (!wordId)
312227
+ return;
312228
+ if (insideTrackedChange) {
312229
+ if (!idMap.has(wordId)) {
312230
+ idMap.set(wordId, v42());
312231
+ }
312232
+ return;
312233
+ }
312234
+ const current = {
312235
+ type: element3.name,
312236
+ author: element3.attributes?.["w:author"] ?? "",
312237
+ date: element3.attributes?.["w:date"] ?? ""
312238
+ };
312239
+ if (context.lastTrackedChange && isReplacementPair2(context.lastTrackedChange, current)) {
312240
+ if (!idMap.has(wordId)) {
312241
+ idMap.set(wordId, context.lastTrackedChange.internalId);
312242
+ }
312243
+ context.lastTrackedChange = null;
312244
+ } else {
312245
+ const internalId = idMap.get(wordId) ?? v42();
312246
+ idMap.set(wordId, internalId);
312247
+ context.lastTrackedChange = { ...current, internalId };
312248
+ }
312249
+ }
312250
+ function walkElements2(elements, idMap, context, insideTrackedChange = false) {
312251
+ if (!Array.isArray(elements))
312252
+ return;
312253
+ for (const element3 of elements) {
312254
+ if (TRACKED_CHANGE_NAMES2.has(element3.name)) {
312255
+ assignInternalId2(element3, idMap, context, insideTrackedChange);
312256
+ if (element3.elements) {
312257
+ walkElements2(element3.elements, idMap, { lastTrackedChange: null }, true);
312258
+ }
312259
+ } else {
312260
+ if (!PAIRING_TRANSPARENT_NAMES2.has(element3.name)) {
312261
+ context.lastTrackedChange = null;
312262
+ }
312263
+ if (element3.elements) {
312264
+ walkElements2(element3.elements, idMap, context, insideTrackedChange);
312265
+ }
312266
+ }
312267
+ }
312268
+ }
312269
+ function buildTrackedChangeIdMap2(docx) {
312270
+ const body = docx?.["word/document.xml"]?.elements?.[0];
312271
+ if (!body?.elements)
312272
+ return new Map;
312273
+ const idMap = new Map;
312274
+ walkElements2(body.elements, idMap, { lastTrackedChange: null });
312275
+ return idMap;
312276
+ }
312277
+ var TRACKED_CHANGE_NAMES2, PAIRING_TRANSPARENT_NAMES2;
312278
+ var init_trackedChangeIdMapper = __esm(() => {
312279
+ init_wrapper();
312280
+ TRACKED_CHANGE_NAMES2 = new Set(["w:ins", "w:del"]);
312281
+ PAIRING_TRANSPARENT_NAMES2 = new Set([
312282
+ "w:commentRangeStart",
312283
+ "w:commentRangeEnd",
312284
+ "w:bookmarkStart",
312285
+ "w:bookmarkEnd",
312286
+ "w:proofErr",
312287
+ "w:permStart",
312288
+ "w:permEnd",
312289
+ "w:moveFromRangeStart",
312290
+ "w:moveFromRangeEnd",
312291
+ "w:moveToRangeStart",
312292
+ "w:moveToRangeEnd"
312293
+ ]);
312294
+ });
312295
+
311919
312296
  // ../../packages/super-editor/src/core/super-converter/v2/importer/documentFootnotesImporter.js
311920
312297
  function importNoteEntries2({
311921
312298
  partXml,
@@ -313125,6 +313502,7 @@ var detectDocumentOrigin2 = (docx) => {
313125
313502
  const inlineDocumentFonts = [];
313126
313503
  patchNumberingDefinitions2(docx);
313127
313504
  const numbering = getNumberingDefinitions2(docx);
313505
+ converter.trackedChangeIdMap = buildTrackedChangeIdMap2(docx);
313128
313506
  const comments = importCommentData2({ docx, nodeListHandler, converter, editor });
313129
313507
  const footnotes = importFootnoteData2({ docx, nodeListHandler, converter, editor, numbering });
313130
313508
  const endnotes = importEndnoteData2({ docx, nodeListHandler, converter, editor, numbering });
@@ -313456,6 +313834,7 @@ var init_docxImporter = __esm(() => {
313456
313834
  init_pageReferenceImporter();
313457
313835
  init_pictNodeImporter();
313458
313836
  init_documentCommentsImporter();
313837
+ init_trackedChangeIdMapper();
313459
313838
  init_documentFootnotesImporter();
313460
313839
  init_docx_helpers2();
313461
313840
  init_ignoredNodes();
@@ -316143,7 +316522,7 @@ var init_citation_sources = __esm(() => {
316143
316522
  // ../../packages/super-editor/src/core/super-converter/export-helpers/strip-orphaned-numbering.js
316144
316523
  function collectReferencedNumIds2(convertedXml) {
316145
316524
  const numIds = new Set;
316146
- function walkElements(elements) {
316525
+ function walkElements3(elements) {
316147
316526
  if (!Array.isArray(elements))
316148
316527
  return;
316149
316528
  for (const el of elements) {
@@ -316153,12 +316532,12 @@ function collectReferencedNumIds2(convertedXml) {
316153
316532
  numIds.add(Number(el.attributes["w:val"]));
316154
316533
  }
316155
316534
  if (el.elements)
316156
- walkElements(el.elements);
316535
+ walkElements3(el.elements);
316157
316536
  }
316158
316537
  }
316159
316538
  for (const [path3, xml2] of Object.entries(convertedXml)) {
316160
316539
  if (path3.startsWith("word/") && path3 !== "word/numbering.xml" && xml2?.elements) {
316161
- walkElements(xml2.elements);
316540
+ walkElements3(xml2.elements);
316162
316541
  }
316163
316542
  }
316164
316543
  return numIds;
@@ -328716,12 +329095,6 @@ var init_list_sequence_helpers = __esm(() => {
328716
329095
  });
328717
329096
 
328718
329097
  // ../../packages/super-editor/src/document-api-adapters/helpers/list-item-resolver.ts
328719
- function toPath2(value) {
328720
- if (!Array.isArray(value))
328721
- return;
328722
- const parsed = value.map((entry) => toFiniteNumber2(entry)).filter((entry) => entry != null);
328723
- return parsed.length > 0 ? parsed : undefined;
328724
- }
328725
329098
  function getNumberingProperties4(node4) {
328726
329099
  const attrs = node4.attrs ?? {};
328727
329100
  const paragraphNumbering = attrs.paragraphProperties?.numberingProperties ?? undefined;
@@ -328761,9 +329134,10 @@ function getListText2(candidate) {
328761
329134
  function projectListItemCandidate2(editor, candidate) {
328762
329135
  const attrs = candidate.node.attrs ?? {};
328763
329136
  const { numId, level } = getNumberingProperties4(candidate.node);
328764
- const path3 = toPath2(attrs.listRendering?.path);
328765
- const ordinal = path3?.length ? path3[path3.length - 1] : undefined;
328766
- const marker = typeof attrs.listRendering?.markerText === "string" ? attrs.listRendering.markerText : undefined;
329137
+ const listRendering = getListRendering2(attrs.listRendering);
329138
+ const path3 = listRendering?.path;
329139
+ const ordinal = getListOrdinalFromPath2(path3);
329140
+ const marker = listRendering?.markerText;
328767
329141
  return {
328768
329142
  candidate,
328769
329143
  address: {
@@ -397270,6 +397644,9 @@ function sleep2(ms) {
397270
397644
  return Promise.resolve();
397271
397645
  return new Promise((resolve3) => setTimeout(resolve3, ms));
397272
397646
  }
397647
+ function nextTimerTurn() {
397648
+ return new Promise((resolve3) => setTimeout(resolve3, 0));
397649
+ }
397273
397650
  async function claimBootstrap(ydoc, settlingMs, jitterMs = DEFAULT_BOOTSTRAP_JITTER_MS) {
397274
397651
  const jitterDelayMs = Math.floor(Math.random() * jitterMs);
397275
397652
  if (jitterDelayMs > 0)
@@ -397283,8 +397660,10 @@ async function claimBootstrap(ydoc, settlingMs, jitterMs = DEFAULT_BOOTSTRAP_JIT
397283
397660
  });
397284
397661
  const observer = observeCompetitor(ydoc);
397285
397662
  try {
397286
- if (settlingMs > 0)
397663
+ if (settlingMs > 0) {
397287
397664
  await sleep2(settlingMs);
397665
+ await nextTimerTurn();
397666
+ }
397288
397667
  const competitor = observer.getCompetitor();
397289
397668
  if (competitor)
397290
397669
  return { granted: false, competitor };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@superdoc-dev/cli",
3
- "version": "0.2.0-next.135",
3
+ "version": "0.2.0-next.137",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "superdoc": "./dist/index.js"
@@ -22,19 +22,19 @@
22
22
  "typescript": "^5.9.2",
23
23
  "@superdoc/document-api": "0.0.1",
24
24
  "@superdoc/pm-adapter": "0.0.0",
25
- "@superdoc/super-editor": "0.0.1",
26
- "superdoc": "1.18.0"
25
+ "superdoc": "1.18.0",
26
+ "@superdoc/super-editor": "0.0.1"
27
27
  },
28
28
  "module": "src/index.ts",
29
29
  "publishConfig": {
30
30
  "access": "public"
31
31
  },
32
32
  "optionalDependencies": {
33
- "@superdoc-dev/cli-darwin-arm64": "0.2.0-next.135",
34
- "@superdoc-dev/cli-darwin-x64": "0.2.0-next.135",
35
- "@superdoc-dev/cli-linux-x64": "0.2.0-next.135",
36
- "@superdoc-dev/cli-windows-x64": "0.2.0-next.135",
37
- "@superdoc-dev/cli-linux-arm64": "0.2.0-next.135"
33
+ "@superdoc-dev/cli-darwin-arm64": "0.2.0-next.137",
34
+ "@superdoc-dev/cli-darwin-x64": "0.2.0-next.137",
35
+ "@superdoc-dev/cli-linux-x64": "0.2.0-next.137",
36
+ "@superdoc-dev/cli-linux-arm64": "0.2.0-next.137",
37
+ "@superdoc-dev/cli-windows-x64": "0.2.0-next.137"
38
38
  },
39
39
  "scripts": {
40
40
  "dev": "bun run src/index.ts",