@pierre/diffs 1.3.0-beta.9 → 1.3.0-rc.2

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 (241) hide show
  1. package/README.md +9 -0
  2. package/dist/components/CodeView.d.ts +12 -13
  3. package/dist/components/CodeView.d.ts.map +1 -1
  4. package/dist/components/CodeView.js +50 -58
  5. package/dist/components/CodeView.js.map +1 -1
  6. package/dist/components/File.d.ts +10 -3
  7. package/dist/components/File.d.ts.map +1 -1
  8. package/dist/components/File.js +41 -10
  9. package/dist/components/File.js.map +1 -1
  10. package/dist/components/FileDiff.d.ts +37 -6
  11. package/dist/components/FileDiff.d.ts.map +1 -1
  12. package/dist/components/FileDiff.js +202 -19
  13. package/dist/components/FileDiff.js.map +1 -1
  14. package/dist/components/UnresolvedFile.d.ts.map +1 -1
  15. package/dist/components/UnresolvedFile.js +7 -2
  16. package/dist/components/UnresolvedFile.js.map +1 -1
  17. package/dist/components/VirtualizedFile.d.ts +2 -1
  18. package/dist/components/VirtualizedFile.d.ts.map +1 -1
  19. package/dist/components/VirtualizedFile.js +9 -5
  20. package/dist/components/VirtualizedFile.js.map +1 -1
  21. package/dist/components/VirtualizedFileDiff.d.ts +14 -0
  22. package/dist/components/VirtualizedFileDiff.d.ts.map +1 -1
  23. package/dist/components/VirtualizedFileDiff.js +61 -3
  24. package/dist/components/VirtualizedFileDiff.js.map +1 -1
  25. package/dist/components/Virtualizer.d.ts +14 -2
  26. package/dist/components/Virtualizer.d.ts.map +1 -1
  27. package/dist/components/Virtualizer.js +27 -2
  28. package/dist/components/Virtualizer.js.map +1 -1
  29. package/dist/edit/index.d.ts +5 -0
  30. package/dist/edit/index.js +3 -0
  31. package/dist/editor/command.d.ts +1 -1
  32. package/dist/editor/command.d.ts.map +1 -1
  33. package/dist/editor/command.js +11 -0
  34. package/dist/editor/command.js.map +1 -1
  35. package/dist/editor/editStack.d.ts +6 -2
  36. package/dist/editor/editStack.d.ts.map +1 -1
  37. package/dist/editor/editStack.js +53 -12
  38. package/dist/editor/editStack.js.map +1 -1
  39. package/dist/editor/editor.d.ts +51 -23
  40. package/dist/editor/editor.d.ts.map +1 -1
  41. package/dist/editor/editor.js +977 -241
  42. package/dist/editor/editor.js.map +1 -1
  43. package/dist/editor/editor2.js +1 -1
  44. package/dist/editor/languages.d.ts +26 -0
  45. package/dist/editor/languages.d.ts.map +1 -0
  46. package/dist/editor/languages.js +363 -0
  47. package/dist/editor/languages.js.map +1 -0
  48. package/dist/editor/lineAnnotations.d.ts.map +1 -1
  49. package/dist/editor/lineAnnotations.js +25 -26
  50. package/dist/editor/lineAnnotations.js.map +1 -1
  51. package/dist/editor/marker.d.ts +5 -3
  52. package/dist/editor/marker.d.ts.map +1 -1
  53. package/dist/editor/marker.js +111 -91
  54. package/dist/editor/marker.js.map +1 -1
  55. package/dist/editor/matchBrackets.d.ts +3 -2
  56. package/dist/editor/matchBrackets.d.ts.map +1 -1
  57. package/dist/editor/matchBrackets.js +2 -10
  58. package/dist/editor/matchBrackets.js.map +1 -1
  59. package/dist/editor/pieceTable.d.ts +2 -1
  60. package/dist/editor/pieceTable.d.ts.map +1 -1
  61. package/dist/editor/pieceTable.js +103 -39
  62. package/dist/editor/pieceTable.js.map +1 -1
  63. package/dist/editor/platform.js +2 -0
  64. package/dist/editor/platform.js.map +1 -1
  65. package/dist/editor/popover.d.ts +25 -5
  66. package/dist/editor/popover.d.ts.map +1 -1
  67. package/dist/editor/popover.js +60 -14
  68. package/dist/editor/popover.js.map +1 -1
  69. package/dist/editor/searchPanel.d.ts.map +1 -1
  70. package/dist/editor/searchPanel.js +9 -2
  71. package/dist/editor/searchPanel.js.map +1 -1
  72. package/dist/editor/selection.d.ts +31 -11
  73. package/dist/editor/selection.d.ts.map +1 -1
  74. package/dist/editor/selection.js +198 -70
  75. package/dist/editor/selection.js.map +1 -1
  76. package/dist/editor/selectionAction.d.ts +4 -3
  77. package/dist/editor/selectionAction.d.ts.map +1 -1
  78. package/dist/editor/selectionAction.js +9 -5
  79. package/dist/editor/selectionAction.js.map +1 -1
  80. package/dist/editor/stateStorage.d.ts +15 -0
  81. package/dist/editor/stateStorage.d.ts.map +1 -0
  82. package/dist/editor/stateStorage.js +65 -0
  83. package/dist/editor/stateStorage.js.map +1 -0
  84. package/dist/editor/textDocument.d.ts +12 -77
  85. package/dist/editor/textDocument.d.ts.map +1 -1
  86. package/dist/editor/textDocument.js +76 -34
  87. package/dist/editor/textDocument.js.map +1 -1
  88. package/dist/editor/textMeasure.d.ts +7 -12
  89. package/dist/editor/textMeasure.d.ts.map +1 -1
  90. package/dist/editor/textMeasure.js +40 -32
  91. package/dist/editor/textMeasure.js.map +1 -1
  92. package/dist/editor/{tokenzier.d.ts → tokenizer.d.ts} +3 -3
  93. package/dist/editor/tokenizer.d.ts.map +1 -0
  94. package/dist/editor/{tokenzier.js → tokenizer.js} +170 -50
  95. package/dist/editor/tokenizer.js.map +1 -0
  96. package/dist/editor/utils.js +1 -1
  97. package/dist/editor/utils.js.map +1 -1
  98. package/dist/index.d.ts +4 -3
  99. package/dist/index.js +6 -5
  100. package/dist/managers/InteractionManager.d.ts +18 -7
  101. package/dist/managers/InteractionManager.d.ts.map +1 -1
  102. package/dist/managers/InteractionManager.js +154 -99
  103. package/dist/managers/InteractionManager.js.map +1 -1
  104. package/dist/managers/UniversalRenderingManager.d.ts.map +1 -1
  105. package/dist/managers/UniversalRenderingManager.js +1 -2
  106. package/dist/managers/UniversalRenderingManager.js.map +1 -1
  107. package/dist/react/CodeView.d.ts +13 -13
  108. package/dist/react/CodeView.d.ts.map +1 -1
  109. package/dist/react/CodeView.js +37 -28
  110. package/dist/react/CodeView.js.map +1 -1
  111. package/dist/react/EditContext.d.ts +20 -0
  112. package/dist/react/EditContext.d.ts.map +1 -0
  113. package/dist/react/EditContext.js +20 -0
  114. package/dist/react/EditContext.js.map +1 -0
  115. package/dist/react/File.d.ts +2 -1
  116. package/dist/react/File.d.ts.map +1 -1
  117. package/dist/react/File.js +3 -2
  118. package/dist/react/File.js.map +1 -1
  119. package/dist/react/FileDiff.d.ts +2 -2
  120. package/dist/react/FileDiff.d.ts.map +1 -1
  121. package/dist/react/FileDiff.js +3 -2
  122. package/dist/react/FileDiff.js.map +1 -1
  123. package/dist/react/MultiFileDiff.d.ts +2 -2
  124. package/dist/react/MultiFileDiff.d.ts.map +1 -1
  125. package/dist/react/MultiFileDiff.js +3 -2
  126. package/dist/react/MultiFileDiff.js.map +1 -1
  127. package/dist/react/PatchDiff.d.ts +2 -2
  128. package/dist/react/PatchDiff.d.ts.map +1 -1
  129. package/dist/react/PatchDiff.js +3 -2
  130. package/dist/react/PatchDiff.js.map +1 -1
  131. package/dist/react/UnresolvedFile.d.ts +1 -1
  132. package/dist/react/UnresolvedFile.js.map +1 -1
  133. package/dist/react/index.d.ts +4 -4
  134. package/dist/react/index.js +3 -3
  135. package/dist/react/types.d.ts +9 -1
  136. package/dist/react/types.d.ts.map +1 -1
  137. package/dist/react/utils/useFileDiffInstance.d.ts +5 -3
  138. package/dist/react/utils/useFileDiffInstance.d.ts.map +1 -1
  139. package/dist/react/utils/useFileDiffInstance.js +24 -34
  140. package/dist/react/utils/useFileDiffInstance.js.map +1 -1
  141. package/dist/react/utils/useFileInstance.d.ts +5 -3
  142. package/dist/react/utils/useFileInstance.d.ts.map +1 -1
  143. package/dist/react/utils/useFileInstance.js +23 -33
  144. package/dist/react/utils/useFileInstance.js.map +1 -1
  145. package/dist/react/utils/useUnresolvedFileInstance.js +4 -4
  146. package/dist/react/utils/useUnresolvedFileInstance.js.map +1 -1
  147. package/dist/renderers/DiffHunksRenderer.d.ts +41 -1
  148. package/dist/renderers/DiffHunksRenderer.d.ts.map +1 -1
  149. package/dist/renderers/DiffHunksRenderer.js +167 -29
  150. package/dist/renderers/DiffHunksRenderer.js.map +1 -1
  151. package/dist/renderers/FileRenderer.d.ts +20 -1
  152. package/dist/renderers/FileRenderer.d.ts.map +1 -1
  153. package/dist/renderers/FileRenderer.js +119 -29
  154. package/dist/renderers/FileRenderer.js.map +1 -1
  155. package/dist/ssr/index.d.ts +2 -2
  156. package/dist/ssr/preloadDiffs.d.ts.map +1 -1
  157. package/dist/ssr/preloadDiffs.js +3 -1
  158. package/dist/ssr/preloadDiffs.js.map +1 -1
  159. package/dist/ssr/preloadFile.d.ts.map +1 -1
  160. package/dist/ssr/preloadFile.js +2 -0
  161. package/dist/ssr/preloadFile.js.map +1 -1
  162. package/dist/style.js +1 -1
  163. package/dist/types.d.ts +192 -42
  164. package/dist/types.d.ts.map +1 -1
  165. package/dist/utils/annotationHelpers.d.ts +20 -0
  166. package/dist/utils/annotationHelpers.d.ts.map +1 -0
  167. package/dist/utils/annotationHelpers.js +29 -0
  168. package/dist/utils/annotationHelpers.js.map +1 -0
  169. package/dist/utils/computeFileOffsets.d.ts.map +1 -1
  170. package/dist/utils/computeFileOffsets.js +34 -5
  171. package/dist/utils/computeFileOffsets.js.map +1 -1
  172. package/dist/utils/editSessionHunks.d.ts +66 -0
  173. package/dist/utils/editSessionHunks.d.ts.map +1 -0
  174. package/dist/utils/editSessionHunks.js +437 -0
  175. package/dist/utils/editSessionHunks.js.map +1 -0
  176. package/dist/utils/getDiffHunksRendererOptions.d.ts.map +1 -1
  177. package/dist/utils/getDiffHunksRendererOptions.js +2 -1
  178. package/dist/utils/getDiffHunksRendererOptions.js.map +1 -1
  179. package/dist/utils/getFileRendererOptions.d.ts.map +1 -1
  180. package/dist/utils/getFileRendererOptions.js +2 -1
  181. package/dist/utils/getFileRendererOptions.js.map +1 -1
  182. package/dist/utils/getHunkSideBoundaries.d.ts +7 -0
  183. package/dist/utils/getHunkSideBoundaries.d.ts.map +1 -0
  184. package/dist/utils/getHunkSideBoundaries.js +12 -0
  185. package/dist/utils/getHunkSideBoundaries.js.map +1 -0
  186. package/dist/utils/getTotalLineCountFromHunks.d.ts.map +1 -1
  187. package/dist/utils/getTotalLineCountFromHunks.js +2 -1
  188. package/dist/utils/getTotalLineCountFromHunks.js.map +1 -1
  189. package/dist/utils/hydratePartialDiff.d.ts.map +1 -1
  190. package/dist/utils/hydratePartialDiff.js +4 -3
  191. package/dist/utils/hydratePartialDiff.js.map +1 -1
  192. package/dist/utils/isGutterUtilityPath.d.ts +5 -0
  193. package/dist/utils/isGutterUtilityPath.d.ts.map +1 -0
  194. package/dist/utils/isGutterUtilityPath.js +12 -0
  195. package/dist/utils/isGutterUtilityPath.js.map +1 -0
  196. package/dist/utils/iterateOverDiff.d.ts.map +1 -1
  197. package/dist/utils/iterateOverDiff.js +17 -12
  198. package/dist/utils/iterateOverDiff.js.map +1 -1
  199. package/dist/utils/parseMergeConflictDiffFromFile.d.ts.map +1 -1
  200. package/dist/utils/parseMergeConflictDiffFromFile.js +9 -6
  201. package/dist/utils/parseMergeConflictDiffFromFile.js.map +1 -1
  202. package/dist/utils/parsePatchFiles.d.ts.map +1 -1
  203. package/dist/utils/parsePatchFiles.js +6 -3
  204. package/dist/utils/parsePatchFiles.js.map +1 -1
  205. package/dist/utils/realignChangeContent.d.ts +33 -0
  206. package/dist/utils/realignChangeContent.d.ts.map +1 -0
  207. package/dist/utils/realignChangeContent.js +148 -0
  208. package/dist/utils/realignChangeContent.js.map +1 -0
  209. package/dist/utils/renderDiffWithHighlighter.js +1 -1
  210. package/dist/utils/resolveRegion.d.ts.map +1 -1
  211. package/dist/utils/resolveRegion.js +18 -2
  212. package/dist/utils/resolveRegion.js.map +1 -1
  213. package/dist/utils/shouldUseTokenTransformer.d.ts +7 -3
  214. package/dist/utils/shouldUseTokenTransformer.d.ts.map +1 -1
  215. package/dist/utils/shouldUseTokenTransformer.js +1 -1
  216. package/dist/utils/shouldUseTokenTransformer.js.map +1 -1
  217. package/dist/utils/updateDiffHunks.d.ts +8 -2
  218. package/dist/utils/updateDiffHunks.d.ts.map +1 -1
  219. package/dist/utils/updateDiffHunks.js +9 -7
  220. package/dist/utils/updateDiffHunks.js.map +1 -1
  221. package/dist/utils/virtualDiffLayout.d.ts +42 -2
  222. package/dist/utils/virtualDiffLayout.d.ts.map +1 -1
  223. package/dist/utils/virtualDiffLayout.js +101 -7
  224. package/dist/utils/virtualDiffLayout.js.map +1 -1
  225. package/dist/worker/WorkerPoolManager.d.ts +2 -1
  226. package/dist/worker/WorkerPoolManager.d.ts.map +1 -1
  227. package/dist/worker/WorkerPoolManager.js +3 -0
  228. package/dist/worker/WorkerPoolManager.js.map +1 -1
  229. package/dist/worker/worker-portable.js +60 -20
  230. package/dist/worker/worker-portable.js.map +1 -1
  231. package/dist/worker/worker.js +61 -19
  232. package/dist/worker/worker.js.map +1 -1
  233. package/package.json +10 -7
  234. package/dist/editor/index.d.ts +0 -3
  235. package/dist/editor/index.js +0 -3
  236. package/dist/editor/tokenzier.d.ts.map +0 -1
  237. package/dist/editor/tokenzier.js.map +0 -1
  238. package/dist/react/EditorContext.d.ts +0 -15
  239. package/dist/react/EditorContext.d.ts.map +0 -1
  240. package/dist/react/EditorContext.js +0 -23
  241. package/dist/react/EditorContext.js.map +0 -1
@@ -706,6 +706,15 @@ function getLineNodes(nodes) {
706
706
  throw new Error("getLineNodes: Unable to find children");
707
707
  }
708
708
  //#endregion
709
+ //#region src/utils/getHunkSideBoundaries.ts
710
+ /** Converts a unified hunk side's start/count into its consumed-file range. */
711
+ function getHunkSideStartBoundary(start, count) {
712
+ return start - (count === 0 ? 0 : 1);
713
+ }
714
+ function getHunkSideEndBoundary(start, count) {
715
+ return getHunkSideStartBoundary(start, count) + count;
716
+ }
717
+ //#endregion
709
718
  //#region src/utils/virtualDiffLayout.ts
710
719
  function getExpandedRegion({ isPartial, rangeSize, expandedHunks, hunkIndex, collapsedContextThreshold }) {
711
720
  const normalizedRangeSize = Math.max(rangeSize, 0);
@@ -739,8 +748,8 @@ function getExpandedRegion({ isPartial, rangeSize, expandedHunks, hunkIndex, col
739
748
  function getTrailingContextRangeSize({ fileDiff, errorPrefix }) {
740
749
  const lastHunk = fileDiff.hunks[fileDiff.hunks.length - 1];
741
750
  if (lastHunk == null || fileDiff.isPartial || fileDiff.additionLines.length === 0 || fileDiff.deletionLines.length === 0) return 0;
742
- const additionRemaining = fileDiff.additionLines.length - (lastHunk.additionLineIndex + lastHunk.additionCount);
743
- const deletionRemaining = fileDiff.deletionLines.length - (lastHunk.deletionLineIndex + lastHunk.deletionCount);
751
+ const additionRemaining = fileDiff.additionLines.length - getHunkSideEndBoundary(lastHunk.additionStart, lastHunk.additionCount);
752
+ const deletionRemaining = fileDiff.deletionLines.length - getHunkSideEndBoundary(lastHunk.deletionStart, lastHunk.deletionCount);
744
753
  if (additionRemaining <= 0 && deletionRemaining <= 0) return 0;
745
754
  if (additionRemaining !== deletionRemaining) throw new Error(`${errorPrefix}: trailing context mismatch (additions=${additionRemaining}, deletions=${deletionRemaining}) for ${fileDiff.name}`);
746
755
  return Math.min(additionRemaining, deletionRemaining);
@@ -831,6 +840,10 @@ function iterateOverDiff({ diff, diffStyle, startingLine = 0, totalLines = Infin
831
840
  const hunk = diff.hunks[hunkIndex];
832
841
  if (hunk == null) throw new Error("iterateOverDiff: invalid hunk index");
833
842
  if (state.shouldBreak()) break;
843
+ const deletionBoundary = getHunkSideStartBoundary(hunk.deletionStart, hunk.deletionCount);
844
+ const additionBoundary = getHunkSideStartBoundary(hunk.additionStart, hunk.additionCount);
845
+ const deletionStartIndex = !diff.isPartial && hunk.deletionCount === 0 ? deletionBoundary : hunk.deletionLineIndex;
846
+ const additionStartIndex = !diff.isPartial && hunk.additionCount === 0 ? additionBoundary : hunk.additionLineIndex;
834
847
  const leadingRegion = getExpandedRegion({
835
848
  isPartial: diff.isPartial,
836
849
  rangeSize: hunk.collapsedBefore,
@@ -860,10 +873,10 @@ function iterateOverDiff({ diff, diffStyle, startingLine = 0, totalLines = Infin
860
873
  if (!state.shouldSkip(expandedLineCount, expandedLineCount)) {
861
874
  let unifiedLineIndex = hunk.unifiedLineStart - leadingRegion.rangeSize;
862
875
  let splitLineIndex = hunk.splitLineStart - leadingRegion.rangeSize;
863
- let deletionLineIndex = hunk.deletionLineIndex - leadingRegion.rangeSize;
864
- let additionLineIndex = hunk.additionLineIndex - leadingRegion.rangeSize;
865
- let deletionLineNumber = hunk.deletionStart - leadingRegion.rangeSize;
866
- let additionLineNumber = hunk.additionStart - leadingRegion.rangeSize;
876
+ let deletionLineIndex = deletionStartIndex - leadingRegion.rangeSize;
877
+ let additionLineIndex = additionStartIndex - leadingRegion.rangeSize;
878
+ let deletionLineNumber = deletionBoundary + 1 - leadingRegion.rangeSize;
879
+ let additionLineNumber = additionBoundary + 1 - leadingRegion.rangeSize;
867
880
  if (walkContextLines(state, leadingRegion.fromStart, diffStyle, (index) => {
868
881
  return state.emit({
869
882
  hunkIndex,
@@ -889,10 +902,10 @@ function iterateOverDiff({ diff, diffStyle, startingLine = 0, totalLines = Infin
889
902
  })) break hunkIterator;
890
903
  unifiedLineIndex = hunk.unifiedLineStart - leadingRegion.fromEnd;
891
904
  splitLineIndex = hunk.splitLineStart - leadingRegion.fromEnd;
892
- deletionLineIndex = hunk.deletionLineIndex - leadingRegion.fromEnd;
893
- additionLineIndex = hunk.additionLineIndex - leadingRegion.fromEnd;
894
- deletionLineNumber = hunk.deletionStart - leadingRegion.fromEnd;
895
- additionLineNumber = hunk.additionStart - leadingRegion.fromEnd;
905
+ deletionLineIndex = deletionStartIndex - leadingRegion.fromEnd;
906
+ additionLineIndex = additionStartIndex - leadingRegion.fromEnd;
907
+ deletionLineNumber = deletionBoundary + 1 - leadingRegion.fromEnd;
908
+ additionLineNumber = additionBoundary + 1 - leadingRegion.fromEnd;
896
909
  if (walkContextLines(state, leadingRegion.fromEnd, diffStyle, (index) => {
897
910
  return state.emit({
898
911
  hunkIndex,
@@ -924,10 +937,10 @@ function iterateOverDiff({ diff, diffStyle, startingLine = 0, totalLines = Infin
924
937
  }
925
938
  let unifiedLineIndex = hunk.unifiedLineStart;
926
939
  let splitLineIndex = hunk.splitLineStart;
927
- let deletionLineIndex = hunk.deletionLineIndex;
928
- let additionLineIndex = hunk.additionLineIndex;
929
- let deletionLineNumber = hunk.deletionStart;
930
- let additionLineNumber = hunk.additionStart;
940
+ let deletionLineIndex = deletionStartIndex;
941
+ let additionLineIndex = additionStartIndex;
942
+ let deletionLineNumber = deletionBoundary + 1;
943
+ let additionLineNumber = additionBoundary + 1;
931
944
  const lastContent = hunk.hunkContent.at(-1);
932
945
  for (const content of hunk.hunkContent) {
933
946
  if (state.shouldBreak()) break hunkIterator;
@@ -1536,16 +1549,45 @@ function renderTwoFiles({ deletionFile, additionFile, deletionInfo, additionInfo
1536
1549
  //#region src/utils/computeFileOffsets.ts
1537
1550
  const LINE_FEED = 10;
1538
1551
  const CARRIAGE_RETURN = 13;
1552
+ const DENSE_LINE_BREAK_BLOCK_SIZE = 4;
1553
+ const DENSE_LINE_BREAK_BLOCK_SPAN = 40;
1539
1554
  /**
1540
1555
  * Computes line start offsets for a string.
1541
1556
  */
1542
1557
  function computeLineOffsets(contents) {
1543
1558
  const offsets = [0];
1544
- for (let i = 0; i < contents.length; i++) {
1545
- const char = contents.charCodeAt(i);
1546
- if (char === LINE_FEED || char === CARRIAGE_RETURN) {
1547
- if (char === CARRIAGE_RETURN && i + 1 < contents.length && contents.charCodeAt(i + 1) === LINE_FEED) i++;
1548
- offsets.push(i + 1);
1559
+ let carriageReturn = contents.indexOf("\r");
1560
+ let lineFeed = contents.indexOf("\n");
1561
+ let blockStart = 0;
1562
+ let blockBreaks = 0;
1563
+ while (carriageReturn !== -1 || lineFeed !== -1) {
1564
+ let nextOffset;
1565
+ if (carriageReturn !== -1 && (lineFeed === -1 || carriageReturn < lineFeed)) if (lineFeed === carriageReturn + 1) {
1566
+ nextOffset = lineFeed + 1;
1567
+ carriageReturn = contents.indexOf("\r", nextOffset);
1568
+ lineFeed = contents.indexOf("\n", nextOffset);
1569
+ } else {
1570
+ nextOffset = carriageReturn + 1;
1571
+ carriageReturn = contents.indexOf("\r", nextOffset);
1572
+ }
1573
+ else {
1574
+ nextOffset = lineFeed + 1;
1575
+ lineFeed = contents.indexOf("\n", nextOffset);
1576
+ }
1577
+ offsets.push(nextOffset);
1578
+ if (++blockBreaks === DENSE_LINE_BREAK_BLOCK_SIZE) {
1579
+ if (nextOffset - blockStart <= DENSE_LINE_BREAK_BLOCK_SPAN) {
1580
+ for (let i = nextOffset; i < contents.length; i++) {
1581
+ const char = contents.charCodeAt(i);
1582
+ if (char === LINE_FEED || char === CARRIAGE_RETURN) {
1583
+ if (char === CARRIAGE_RETURN && i + 1 < contents.length && contents.charCodeAt(i + 1) === LINE_FEED) i++;
1584
+ offsets.push(i + 1);
1585
+ }
1586
+ }
1587
+ return offsets;
1588
+ }
1589
+ blockStart = nextOffset;
1590
+ blockBreaks = 0;
1549
1591
  }
1550
1592
  }
1551
1593
  return offsets;