prettier 3.8.4 → 3.9.0

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/bin/prettier.cjs CHANGED
@@ -3,7 +3,11 @@
3
3
  var __getOwnPropNames = Object.getOwnPropertyNames;
4
4
  var __commonJS = function(cb, mod) {
5
5
  return function __require() {
6
- return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
6
+ try {
7
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
8
+ } catch (e) {
9
+ throw mod = 0, e;
10
+ }
7
11
  };
8
12
  };
9
13
 
package/doc.js CHANGED
@@ -61,7 +61,7 @@
61
61
  function stringOrArrayAt(index) {
62
62
  return this[index < 0 ? this.length + index : index];
63
63
  }
64
- var at = createMethodShim("at", function() {
64
+ var at = /* @__PURE__ */ createMethodShim("at", function() {
65
65
  if (Array.isArray(this) || typeof this === "string") {
66
66
  return stringOrArrayAt;
67
67
  }
@@ -159,6 +159,15 @@
159
159
  return end < string.length ? string.slice(0, end) : string;
160
160
  }
161
161
 
162
+ // src/utilities/get-or-insert.js
163
+ function getOrInsertComputed(map, key, callback) {
164
+ if (!map.has(key)) {
165
+ const value = callback(key);
166
+ map.set(key, value);
167
+ }
168
+ return map.get(key);
169
+ }
170
+
162
171
  // src/document/utilities/get-doc-type.js
163
172
  function getDocType(doc) {
164
173
  if (typeof doc === "string") {
@@ -277,12 +286,7 @@ Expected it to be ${EXPECTED_TYPE_VALUES}.`;
277
286
  const mapped = /* @__PURE__ */ new Map();
278
287
  return rec(doc);
279
288
  function rec(doc2) {
280
- if (mapped.has(doc2)) {
281
- return mapped.get(doc2);
282
- }
283
- const result = process2(doc2);
284
- mapped.set(doc2, result);
285
- return result;
289
+ return getOrInsertComputed(mapped, doc2, process2);
286
290
  }
287
291
  function process2(doc2) {
288
292
  switch (get_doc_type_default(doc2)) {
@@ -495,11 +499,18 @@ Expected it to be ${EXPECTED_TYPE_VALUES}.`;
495
499
  }
496
500
  function cleanDocFn(doc) {
497
501
  switch (get_doc_type_default(doc)) {
498
- case DOC_TYPE_FILL:
499
- if (doc.parts.every((part) => part === "")) {
502
+ case DOC_TYPE_FILL: {
503
+ const {
504
+ parts
505
+ } = doc;
506
+ if (parts.every((part) => part === "")) {
500
507
  return "";
501
508
  }
509
+ if (parts.length === 1) {
510
+ return parts[0];
511
+ }
502
512
  break;
513
+ }
503
514
  case DOC_TYPE_GROUP:
504
515
  if (!doc.contents && !doc.id && !doc.break && !doc.expandedStates) {
505
516
  return "";
@@ -777,7 +788,7 @@ Expected it to be ${EXPECTED_TYPE_VALUES}.`;
777
788
  }
778
789
  return this.split(pattern).join(replacement);
779
790
  };
780
- var replaceAll = createMethodShim("replaceAll", function() {
791
+ var replaceAll = /* @__PURE__ */ createMethodShim("replaceAll", function() {
781
792
  if (typeof this === "string") {
782
793
  return stringReplaceAll;
783
794
  }
@@ -800,20 +811,73 @@ Expected it to be ${EXPECTED_TYPE_VALUES}.`;
800
811
  return /[#*0-9]\uFE0F?\u20E3|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26AA\u26B0\u26B1\u26BD\u26BE\u26C4\u26C8\u26CF\u26D1\u26E9\u26F0-\u26F5\u26F7\u26F8\u26FA\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B55\u3030\u303D\u3297\u3299]\uFE0F?|[\u261D\u270C\u270D](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\u270A\u270B](?:\uD83C[\uDFFB-\uDFFF])?|[\u23E9-\u23EC\u23F0\u23F3\u25FD\u2693\u26A1\u26AB\u26C5\u26CE\u26D4\u26EA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2795-\u2797\u27B0\u27BF\u2B50]|\u26D3\uFE0F?(?:\u200D\uD83D\uDCA5)?|\u26F9(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\u2764\uFE0F?(?:\u200D(?:\uD83D\uDD25|\uD83E\uDE79))?|\uD83C(?:[\uDC04\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]\uFE0F?|[\uDF85\uDFC2\uDFC7](?:\uD83C[\uDFFB-\uDFFF])?|[\uDFC4\uDFCA](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDFCB\uDFCC](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF43\uDF45-\uDF4A\uDF4C-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF7\uDDFA-\uDDFF]|\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uDDF4\uD83C\uDDF2|\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uDDF6\uD83C\uDDE6|\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF]|\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uDDFC\uD83C[\uDDEB\uDDF8]|\uDDFD\uD83C\uDDF0|\uDDFE\uD83C[\uDDEA\uDDF9]|\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uDF44(?:\u200D\uD83D\uDFEB)?|\uDF4B(?:\u200D\uD83D\uDFE9)?|\uDFC3(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDFF3\uFE0F?(?:\u200D(?:\u26A7\uFE0F?|\uD83C\uDF08))?|\uDFF4(?:\u200D\u2620\uFE0F?|\uDB40\uDC67\uDB40\uDC62\uDB40(?:\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDC73\uDB40\uDC63\uDB40\uDC74|\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F)?)|\uD83D(?:[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3]\uFE0F?|[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC](?:\uD83C[\uDFFB-\uDFFF])?|[\uDC6E-\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4\uDEB5](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD74\uDD90](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC25\uDC27-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE41\uDE43\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED8\uDEDC-\uDEDF\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB\uDFF0]|\uDC08(?:\u200D\u2B1B)?|\uDC15(?:\u200D\uD83E\uDDBA)?|\uDC26(?:\u200D(?:\u2B1B|\uD83D\uDD25))?|\uDC3B(?:\u200D\u2744\uFE0F?)?|\uDC41\uFE0F?(?:\u200D\uD83D\uDDE8\uFE0F?)?|\uDC68(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDC68\uDC69]\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?))?|\uDC69(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?[\uDC68\uDC69]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?|\uDC69\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?))|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFC-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFC-\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFD-\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFD\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFE])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFE]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFE])))?))?|\uDD75(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDE2E(?:\u200D\uD83D\uDCA8)?|\uDE35(?:\u200D\uD83D\uDCAB)?|\uDE36(?:\u200D\uD83C\uDF2B\uFE0F?)?|\uDE42(?:\u200D[\u2194\u2195]\uFE0F?)?|\uDEB6(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?)|\uD83E(?:[\uDD0C\uDD0F\uDD18-\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5\uDEC3-\uDEC5\uDEF0\uDEF2-\uDEF8](?:\uD83C[\uDFFB-\uDFFF])?|[\uDD26\uDD35\uDD37-\uDD39\uDD3C-\uDD3E\uDDB8\uDDB9\uDDCD\uDDCF\uDDD4\uDDD6-\uDDDD](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDDDE\uDDDF](?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD0D\uDD0E\uDD10-\uDD17\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCC\uDDD0\uDDE0-\uDDFF\uDE70-\uDE7C\uDE80-\uDE8A\uDE8E-\uDEC2\uDEC6\uDEC8\uDECD-\uDEDC\uDEDF-\uDEEA\uDEEF]|\uDDCE(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDDD1(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1|\uDDD1\u200D\uD83E\uDDD2(?:\u200D\uD83E\uDDD2)?|\uDDD2(?:\u200D\uD83E\uDDD2)?))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE])))?))?|\uDEF1(?:\uD83C(?:\uDFFB(?:\u200D\uD83E\uDEF2\uD83C[\uDFFC-\uDFFF])?|\uDFFC(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFD-\uDFFF])?|\uDFFD(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])?|\uDFFE(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFD\uDFFF])?|\uDFFF(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFE])?))?)/g;
801
812
  };
802
813
 
814
+ // node_modules/get-east-asian-width/lookup-data.js
815
+ var fullwidthMinimalCodePoint = 12288;
816
+ var fullwidthMaximumCodePoint = 65510;
817
+ var fullwidthRanges = [12288, 12288, 65281, 65376, 65504, 65510];
818
+ var wideMinimalCodePoint = 4352;
819
+ var wideMaximumCodePoint = 262141;
820
+ var wideRanges = [4352, 4447, 8986, 8987, 9001, 9002, 9193, 9196, 9200, 9200, 9203, 9203, 9725, 9726, 9748, 9749, 9776, 9783, 9800, 9811, 9855, 9855, 9866, 9871, 9875, 9875, 9889, 9889, 9898, 9899, 9917, 9918, 9924, 9925, 9934, 9934, 9940, 9940, 9962, 9962, 9970, 9971, 9973, 9973, 9978, 9978, 9981, 9981, 9989, 9989, 9994, 9995, 10024, 10024, 10060, 10060, 10062, 10062, 10067, 10069, 10071, 10071, 10133, 10135, 10160, 10160, 10175, 10175, 11035, 11036, 11088, 11088, 11093, 11093, 11904, 11929, 11931, 12019, 12032, 12245, 12272, 12287, 12289, 12350, 12353, 12438, 12441, 12543, 12549, 12591, 12593, 12686, 12688, 12773, 12783, 12830, 12832, 12871, 12880, 42124, 42128, 42182, 43360, 43388, 44032, 55203, 63744, 64255, 65040, 65049, 65072, 65106, 65108, 65126, 65128, 65131, 94176, 94180, 94192, 94198, 94208, 101589, 101631, 101662, 101760, 101874, 110576, 110579, 110581, 110587, 110589, 110590, 110592, 110882, 110898, 110898, 110928, 110930, 110933, 110933, 110948, 110951, 110960, 111355, 119552, 119638, 119648, 119670, 126980, 126980, 127183, 127183, 127374, 127374, 127377, 127386, 127488, 127490, 127504, 127547, 127552, 127560, 127568, 127569, 127584, 127589, 127744, 127776, 127789, 127797, 127799, 127868, 127870, 127891, 127904, 127946, 127951, 127955, 127968, 127984, 127988, 127988, 127992, 128062, 128064, 128064, 128066, 128252, 128255, 128317, 128331, 128334, 128336, 128359, 128378, 128378, 128405, 128406, 128420, 128420, 128507, 128591, 128640, 128709, 128716, 128716, 128720, 128722, 128725, 128728, 128732, 128735, 128747, 128748, 128756, 128764, 128992, 129003, 129008, 129008, 129292, 129338, 129340, 129349, 129351, 129535, 129648, 129660, 129664, 129674, 129678, 129734, 129736, 129736, 129741, 129756, 129759, 129770, 129775, 129784, 131072, 196605, 196608, 262141];
821
+
822
+ // node_modules/get-east-asian-width/utilities.js
823
+ var isInRange = (ranges, codePoint) => {
824
+ let low = 0;
825
+ let high = Math.floor(ranges.length / 2) - 1;
826
+ while (low <= high) {
827
+ const mid = Math.floor((low + high) / 2);
828
+ const i = mid * 2;
829
+ if (codePoint < ranges[i]) {
830
+ high = mid - 1;
831
+ } else if (codePoint > ranges[i + 1]) {
832
+ low = mid + 1;
833
+ } else {
834
+ return true;
835
+ }
836
+ }
837
+ return false;
838
+ };
839
+
803
840
  // node_modules/get-east-asian-width/lookup.js
804
- function isFullWidth(x) {
805
- return x === 12288 || x >= 65281 && x <= 65376 || x >= 65504 && x <= 65510;
806
- }
807
- function isWide(x) {
808
- return x >= 4352 && x <= 4447 || x === 8986 || x === 8987 || x === 9001 || x === 9002 || x >= 9193 && x <= 9196 || x === 9200 || x === 9203 || x === 9725 || x === 9726 || x === 9748 || x === 9749 || x >= 9776 && x <= 9783 || x >= 9800 && x <= 9811 || x === 9855 || x >= 9866 && x <= 9871 || x === 9875 || x === 9889 || x === 9898 || x === 9899 || x === 9917 || x === 9918 || x === 9924 || x === 9925 || x === 9934 || x === 9940 || x === 9962 || x === 9970 || x === 9971 || x === 9973 || x === 9978 || x === 9981 || x === 9989 || x === 9994 || x === 9995 || x === 10024 || x === 10060 || x === 10062 || x >= 10067 && x <= 10069 || x === 10071 || x >= 10133 && x <= 10135 || x === 10160 || x === 10175 || x === 11035 || x === 11036 || x === 11088 || x === 11093 || x >= 11904 && x <= 11929 || x >= 11931 && x <= 12019 || x >= 12032 && x <= 12245 || x >= 12272 && x <= 12287 || x >= 12289 && x <= 12350 || x >= 12353 && x <= 12438 || x >= 12441 && x <= 12543 || x >= 12549 && x <= 12591 || x >= 12593 && x <= 12686 || x >= 12688 && x <= 12773 || x >= 12783 && x <= 12830 || x >= 12832 && x <= 12871 || x >= 12880 && x <= 42124 || x >= 42128 && x <= 42182 || x >= 43360 && x <= 43388 || x >= 44032 && x <= 55203 || x >= 63744 && x <= 64255 || x >= 65040 && x <= 65049 || x >= 65072 && x <= 65106 || x >= 65108 && x <= 65126 || x >= 65128 && x <= 65131 || x >= 94176 && x <= 94180 || x >= 94192 && x <= 94198 || x >= 94208 && x <= 101589 || x >= 101631 && x <= 101662 || x >= 101760 && x <= 101874 || x >= 110576 && x <= 110579 || x >= 110581 && x <= 110587 || x === 110589 || x === 110590 || x >= 110592 && x <= 110882 || x === 110898 || x >= 110928 && x <= 110930 || x === 110933 || x >= 110948 && x <= 110951 || x >= 110960 && x <= 111355 || x >= 119552 && x <= 119638 || x >= 119648 && x <= 119670 || x === 126980 || x === 127183 || x === 127374 || x >= 127377 && x <= 127386 || x >= 127488 && x <= 127490 || x >= 127504 && x <= 127547 || x >= 127552 && x <= 127560 || x === 127568 || x === 127569 || x >= 127584 && x <= 127589 || x >= 127744 && x <= 127776 || x >= 127789 && x <= 127797 || x >= 127799 && x <= 127868 || x >= 127870 && x <= 127891 || x >= 127904 && x <= 127946 || x >= 127951 && x <= 127955 || x >= 127968 && x <= 127984 || x === 127988 || x >= 127992 && x <= 128062 || x === 128064 || x >= 128066 && x <= 128252 || x >= 128255 && x <= 128317 || x >= 128331 && x <= 128334 || x >= 128336 && x <= 128359 || x === 128378 || x === 128405 || x === 128406 || x === 128420 || x >= 128507 && x <= 128591 || x >= 128640 && x <= 128709 || x === 128716 || x >= 128720 && x <= 128722 || x >= 128725 && x <= 128728 || x >= 128732 && x <= 128735 || x === 128747 || x === 128748 || x >= 128756 && x <= 128764 || x >= 128992 && x <= 129003 || x === 129008 || x >= 129292 && x <= 129338 || x >= 129340 && x <= 129349 || x >= 129351 && x <= 129535 || x >= 129648 && x <= 129660 || x >= 129664 && x <= 129674 || x >= 129678 && x <= 129734 || x === 129736 || x >= 129741 && x <= 129756 || x >= 129759 && x <= 129770 || x >= 129775 && x <= 129784 || x >= 131072 && x <= 196605 || x >= 196608 && x <= 262141;
841
+ var commonCjkCodePoint = 19968;
842
+ var [wideFastPathStart, wideFastPathEnd] = /* @__PURE__ */ findWideFastPathRange(wideRanges);
843
+ function findWideFastPathRange(ranges) {
844
+ let fastPathStart = ranges[0];
845
+ let fastPathEnd = ranges[1];
846
+ for (let index = 0; index < ranges.length; index += 2) {
847
+ const start = ranges[index];
848
+ const end = ranges[index + 1];
849
+ if (commonCjkCodePoint >= start && commonCjkCodePoint <= end) {
850
+ return [start, end];
851
+ }
852
+ if (end - start > fastPathEnd - fastPathStart) {
853
+ fastPathStart = start;
854
+ fastPathEnd = end;
855
+ }
856
+ }
857
+ return [fastPathStart, fastPathEnd];
809
858
  }
859
+ var isFullWidth = (codePoint) => {
860
+ if (codePoint < fullwidthMinimalCodePoint || codePoint > fullwidthMaximumCodePoint) {
861
+ return false;
862
+ }
863
+ return isInRange(fullwidthRanges, codePoint);
864
+ };
865
+ var isWide = (codePoint) => {
866
+ if (codePoint >= wideFastPathStart && codePoint <= wideFastPathEnd) {
867
+ return true;
868
+ }
869
+ if (codePoint < wideMinimalCodePoint || codePoint > wideMaximumCodePoint) {
870
+ return false;
871
+ }
872
+ return isInRange(wideRanges, codePoint);
873
+ };
810
874
 
811
- // src/utilities/narrow-emojis.evaluate.js
812
- var narrow_emojis_evaluate_default = "\xA9\xAE\u203C\u2049\u2122\u2139\u2194\u2195\u2196\u2197\u2198\u2199\u21A9\u21AA\u2328\u23CF\u23F1\u23F2\u23F8\u23F9\u23FA\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600\u2601\u2602\u2603\u2604\u260E\u2611\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638\u2639\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694\u2695\u2696\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F1\u26F7\u26F8\u26F9\u2702\u2708\u2709\u270C\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u2764\u27A1\u2934\u2935\u2B05\u2B06\u2B07";
875
+ // node_modules/narrow-emojis/index.js
876
+ var narrowEmojiRegexp = /^(?:[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u2764\u27A1\u2934\u2935\u2B05-\u2B07]|\uD83C[\uDD70\uDD71\uDD7E\uDD7F\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF3\uDFF5\uDFF7]|\uD83D[\uDC3F\uDC41\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3])$/;
877
+ var isNarrowEmojiCharacter = (character) => narrowEmojiRegexp.test(character);
813
878
 
814
879
  // src/utilities/get-string-width.js
815
- var notAsciiRegex = /[^\x20-\x7F]/u;
816
- var narrowEmojisSet = new Set(narrow_emojis_evaluate_default);
880
+ var notAsciiRegex = /[^\x20-\x7F]/;
817
881
  function getStringWidth(text) {
818
882
  if (!text) {
819
883
  return 0;
@@ -821,11 +885,11 @@ Expected it to be ${EXPECTED_TYPE_VALUES}.`;
821
885
  if (!notAsciiRegex.test(text)) {
822
886
  return text.length;
823
887
  }
824
- text = text.replace(
825
- emoji_regex_default(),
826
- (match) => narrowEmojisSet.has(match) ? " " : " "
827
- );
828
888
  let width = 0;
889
+ text = text.replace(emoji_regex_default(), (character) => {
890
+ width += isNarrowEmojiCharacter(character) ? 1 : 2;
891
+ return "";
892
+ });
829
893
  for (const character of text) {
830
894
  const codePoint = character.codePointAt(0);
831
895
  if (codePoint <= 31 || codePoint >= 127 && codePoint <= 159) {
@@ -970,10 +1034,62 @@ Expected it to be ${EXPECTED_TYPE_VALUES}.`;
970
1034
  return { text: trimmed, count: length };
971
1035
  }
972
1036
 
1037
+ // src/document/printer/print-result.js
1038
+ var printResult = class {
1039
+ /** @type {string[]} */
1040
+ #settledTexts = [];
1041
+ #unsettledText = "";
1042
+ #settledTextLength = 0;
1043
+ /** @type {number[]} */
1044
+ #settledPositions = [];
1045
+ /** @type {number[]} */
1046
+ #unsettledPositions = [];
1047
+ #settle() {
1048
+ const text = this.#unsettledText;
1049
+ if (text !== "") {
1050
+ this.#settledTexts.push(text);
1051
+ this.#settledTextLength += text.length;
1052
+ this.#unsettledText = "";
1053
+ }
1054
+ for (const position of this.#unsettledPositions) {
1055
+ this.#settledPositions.push(Math.min(position, this.#settledTextLength));
1056
+ }
1057
+ this.#unsettledPositions.length = 0;
1058
+ }
1059
+ markPosition() {
1060
+ if (this.#settledPositions.length + this.#unsettledPositions.length >= 2) {
1061
+ throw new Error("There are too many 'cursor' in doc.");
1062
+ }
1063
+ this.#unsettledPositions.push(
1064
+ this.#settledTextLength + this.#unsettledText.length
1065
+ );
1066
+ }
1067
+ /**
1068
+ @param {string} text
1069
+ */
1070
+ write(text) {
1071
+ this.#unsettledText += text;
1072
+ }
1073
+ trim() {
1074
+ const { text: trimmed, count } = trimIndentation(this.#unsettledText);
1075
+ this.#unsettledText = trimmed;
1076
+ this.#settle();
1077
+ return count;
1078
+ }
1079
+ finish() {
1080
+ this.#settle();
1081
+ return {
1082
+ text: this.#settledTexts.join(""),
1083
+ positions: this.#settledPositions
1084
+ };
1085
+ }
1086
+ };
1087
+ var print_result_default = printResult;
1088
+
973
1089
  // src/document/printer/printer.js
974
- var MODE_BREAK = Symbol("MODE_BREAK");
975
- var MODE_FLAT = Symbol("MODE_FLAT");
976
- var DOC_FILL_PRINTED_LENGTH = Symbol("DOC_FILL_PRINTED_LENGTH");
1090
+ var MODE_BREAK = /* @__PURE__ */ Symbol("MODE_BREAK");
1091
+ var MODE_FLAT = /* @__PURE__ */ Symbol("MODE_FLAT");
1092
+ var DOC_FILL_PRINTED_LENGTH = /* @__PURE__ */ Symbol("DOC_FILL_PRINTED_LENGTH");
977
1093
  function fits(next, restCommands, remainingWidth, hasLineSuffix, groupModeMap, mustBeFlat) {
978
1094
  if (remainingWidth === Number.POSITIVE_INFINITY) {
979
1095
  return true;
@@ -1095,13 +1211,9 @@ Expected it to be ${EXPECTED_TYPE_VALUES}.`;
1095
1211
  mode: MODE_BREAK,
1096
1212
  doc
1097
1213
  }];
1098
- let output = "";
1099
1214
  let shouldRemeasure = false;
1100
1215
  const lineSuffix2 = [];
1101
- const cursorPositions = [];
1102
- const settledOutput = [];
1103
- const settledCursorPositions = [];
1104
- let settledTextLength = 0;
1216
+ const result = new print_result_default();
1105
1217
  propagateBreaks(doc);
1106
1218
  while (commands.length > 0) {
1107
1219
  const {
@@ -1119,7 +1231,7 @@ Expected it to be ${EXPECTED_TYPE_VALUES}.`;
1119
1231
  newLine
1120
1232
  ) : doc2;
1121
1233
  if (formatted2) {
1122
- output += formatted2;
1234
+ result.write(formatted2);
1123
1235
  if (commands.length > 0) {
1124
1236
  position += get_string_width_default(formatted2);
1125
1237
  }
@@ -1136,10 +1248,7 @@ Expected it to be ${EXPECTED_TYPE_VALUES}.`;
1136
1248
  }
1137
1249
  break;
1138
1250
  case DOC_TYPE_CURSOR:
1139
- if (cursorPositions.length >= 2) {
1140
- throw new Error("There are too many 'cursor' in doc.");
1141
- }
1142
- cursorPositions.push(settledTextLength + output.length);
1251
+ result.markPosition();
1143
1252
  break;
1144
1253
  case DOC_TYPE_INDENT:
1145
1254
  commands.push({
@@ -1156,89 +1265,64 @@ Expected it to be ${EXPECTED_TYPE_VALUES}.`;
1156
1265
  });
1157
1266
  break;
1158
1267
  case DOC_TYPE_TRIM:
1159
- trim2();
1268
+ position -= result.trim();
1160
1269
  break;
1161
- case DOC_TYPE_GROUP:
1162
- switch (mode) {
1163
- case MODE_FLAT:
1164
- if (!shouldRemeasure) {
1165
- commands.push({
1166
- indent: indent2,
1167
- mode: doc2.break ? MODE_BREAK : MODE_FLAT,
1168
- doc: doc2.contents
1169
- });
1170
- break;
1171
- }
1172
- // fallthrough
1173
- case MODE_BREAK: {
1174
- shouldRemeasure = false;
1175
- const next = {
1270
+ case DOC_TYPE_GROUP: {
1271
+ const command = (function printGroup() {
1272
+ if (mode === MODE_FLAT && !shouldRemeasure) {
1273
+ return {
1176
1274
  indent: indent2,
1177
- mode: MODE_FLAT,
1275
+ mode: doc2.break ? MODE_BREAK : MODE_FLAT,
1178
1276
  doc: doc2.contents
1179
1277
  };
1180
- const remainingWidth = width - position;
1181
- const hasLineSuffix = lineSuffix2.length > 0;
1182
- if (!doc2.break && fits(next, commands, remainingWidth, hasLineSuffix, groupModeMap)) {
1183
- commands.push(next);
1184
- } else {
1185
- if (doc2.expandedStates) {
1186
- const mostExpanded = method_at_default(
1187
- /* OPTIONAL_OBJECT: false */
1188
- 0,
1189
- doc2.expandedStates,
1190
- -1
1191
- );
1192
- if (doc2.break) {
1193
- commands.push({
1194
- indent: indent2,
1195
- mode: MODE_BREAK,
1196
- doc: mostExpanded
1197
- });
1198
- break;
1199
- } else {
1200
- for (let index = 1; index < doc2.expandedStates.length + 1; index++) {
1201
- if (index >= doc2.expandedStates.length) {
1202
- commands.push({
1203
- indent: indent2,
1204
- mode: MODE_BREAK,
1205
- doc: mostExpanded
1206
- });
1207
- break;
1208
- } else {
1209
- const state = doc2.expandedStates[index];
1210
- const cmd = {
1211
- indent: indent2,
1212
- mode: MODE_FLAT,
1213
- doc: state
1214
- };
1215
- if (fits(cmd, commands, remainingWidth, hasLineSuffix, groupModeMap)) {
1216
- commands.push(cmd);
1217
- break;
1218
- }
1219
- }
1220
- }
1221
- }
1222
- } else {
1223
- commands.push({
1224
- indent: indent2,
1225
- mode: MODE_BREAK,
1226
- doc: doc2.contents
1227
- });
1278
+ }
1279
+ shouldRemeasure = false;
1280
+ const remainingWidth = width - position;
1281
+ const hasLineSuffix = lineSuffix2.length > 0;
1282
+ const flatCommand = {
1283
+ indent: indent2,
1284
+ mode: MODE_FLAT,
1285
+ doc: doc2.contents
1286
+ };
1287
+ if (!doc2.break && fits(flatCommand, commands, remainingWidth, hasLineSuffix, groupModeMap)) {
1288
+ return flatCommand;
1289
+ }
1290
+ if (!doc2.expandedStates) {
1291
+ return {
1292
+ indent: indent2,
1293
+ mode: MODE_BREAK,
1294
+ doc: doc2.contents
1295
+ };
1296
+ }
1297
+ if (!doc2.break) {
1298
+ for (let index = 1; index < doc2.expandedStates.length - 1; index++) {
1299
+ const flatCommand2 = {
1300
+ indent: indent2,
1301
+ mode: MODE_FLAT,
1302
+ doc: doc2.expandedStates[index]
1303
+ };
1304
+ if (fits(flatCommand2, commands, remainingWidth, hasLineSuffix, groupModeMap)) {
1305
+ return flatCommand2;
1228
1306
  }
1229
1307
  }
1230
- break;
1231
1308
  }
1232
- }
1309
+ return {
1310
+ indent: indent2,
1311
+ mode: MODE_BREAK,
1312
+ doc: method_at_default(
1313
+ /* OPTIONAL_OBJECT: false */
1314
+ 0,
1315
+ doc2.expandedStates,
1316
+ -1
1317
+ )
1318
+ };
1319
+ })();
1320
+ commands.push(command);
1233
1321
  if (doc2.id) {
1234
- groupModeMap[doc2.id] = method_at_default(
1235
- /* OPTIONAL_OBJECT: false */
1236
- 0,
1237
- commands,
1238
- -1
1239
- ).mode;
1322
+ groupModeMap[doc2.id] = command.mode;
1240
1323
  }
1241
1324
  break;
1325
+ }
1242
1326
  // Fills each line with as much code as possible before moving to a new
1243
1327
  // line with the same indentation.
1244
1328
  //
@@ -1379,13 +1463,12 @@ Expected it to be ${EXPECTED_TYPE_VALUES}.`;
1379
1463
  case MODE_FLAT:
1380
1464
  if (!doc2.hard) {
1381
1465
  if (!doc2.soft) {
1382
- output += " ";
1466
+ result.write(" ");
1383
1467
  position += 1;
1384
1468
  }
1385
1469
  break;
1386
- } else {
1387
- shouldRemeasure = true;
1388
1470
  }
1471
+ shouldRemeasure = true;
1389
1472
  // fallthrough
1390
1473
  case MODE_BREAK:
1391
1474
  if (lineSuffix2.length > 0) {
@@ -1398,17 +1481,17 @@ Expected it to be ${EXPECTED_TYPE_VALUES}.`;
1398
1481
  break;
1399
1482
  }
1400
1483
  if (doc2.literal) {
1401
- output += newLine;
1484
+ result.write(newLine);
1402
1485
  position = 0;
1403
1486
  if (indent2.root) {
1404
1487
  if (indent2.root.value) {
1405
- output += indent2.root.value;
1488
+ result.write(indent2.root.value);
1406
1489
  }
1407
1490
  position = indent2.root.length;
1408
1491
  }
1409
1492
  } else {
1410
- trim2();
1411
- output += newLine + indent2.value;
1493
+ result.trim();
1494
+ result.write(newLine + indent2.value);
1412
1495
  position = indent2.length;
1413
1496
  }
1414
1497
  break;
@@ -1431,40 +1514,21 @@ Expected it to be ${EXPECTED_TYPE_VALUES}.`;
1431
1514
  lineSuffix2.length = 0;
1432
1515
  }
1433
1516
  }
1434
- const formatted = settledOutput.join("") + output;
1435
- const finalCursorPositions = [...settledCursorPositions, ...cursorPositions];
1436
- if (finalCursorPositions.length !== 2) {
1517
+ const {
1518
+ text: formatted,
1519
+ positions: cursorPositions
1520
+ } = result.finish();
1521
+ if (cursorPositions.length !== 2) {
1437
1522
  return {
1438
1523
  formatted
1439
1524
  };
1440
1525
  }
1441
- const cursorNodeStart = finalCursorPositions[0];
1526
+ const [cursorNodeStart, cursorNodeEnd] = cursorPositions;
1442
1527
  return {
1443
1528
  formatted,
1444
1529
  cursorNodeStart,
1445
- cursorNodeText: formatted.slice(cursorNodeStart, method_at_default(
1446
- /* OPTIONAL_OBJECT: false */
1447
- 0,
1448
- finalCursorPositions,
1449
- -1
1450
- ))
1530
+ cursorNodeText: formatted.slice(cursorNodeStart, cursorNodeEnd)
1451
1531
  };
1452
- function trim2() {
1453
- const {
1454
- text: trimmed,
1455
- count
1456
- } = trimIndentation(output);
1457
- if (trimmed) {
1458
- settledOutput.push(trimmed);
1459
- settledTextLength += trimmed.length;
1460
- }
1461
- output = "";
1462
- position -= count;
1463
- if (cursorPositions.length > 0) {
1464
- settledCursorPositions.push(...cursorPositions.map((position2) => Math.min(position2, settledTextLength)));
1465
- cursorPositions.length = 0;
1466
- }
1467
- }
1468
1532
  }
1469
1533
 
1470
1534
  // src/document/public.js