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/doc.mjs CHANGED
@@ -26,7 +26,7 @@ var createMethodShim = (methodName, getImplementation) => (flags, object, ...arg
26
26
  function stringOrArrayAt(index) {
27
27
  return this[index < 0 ? this.length + index : index];
28
28
  }
29
- var at = createMethodShim("at", function() {
29
+ var at = /* @__PURE__ */ createMethodShim("at", function() {
30
30
  if (Array.isArray(this) || typeof this === "string") {
31
31
  return stringOrArrayAt;
32
32
  }
@@ -124,6 +124,15 @@ function trimNewlinesEnd(string) {
124
124
  return end < string.length ? string.slice(0, end) : string;
125
125
  }
126
126
 
127
+ // src/utilities/get-or-insert.js
128
+ function getOrInsertComputed(map, key, callback) {
129
+ if (!map.has(key)) {
130
+ const value = callback(key);
131
+ map.set(key, value);
132
+ }
133
+ return map.get(key);
134
+ }
135
+
127
136
  // src/document/utilities/get-doc-type.js
128
137
  function getDocType(doc) {
129
138
  if (typeof doc === "string") {
@@ -242,12 +251,7 @@ function mapDoc(doc, cb) {
242
251
  const mapped = /* @__PURE__ */ new Map();
243
252
  return rec(doc);
244
253
  function rec(doc2) {
245
- if (mapped.has(doc2)) {
246
- return mapped.get(doc2);
247
- }
248
- const result = process2(doc2);
249
- mapped.set(doc2, result);
250
- return result;
254
+ return getOrInsertComputed(mapped, doc2, process2);
251
255
  }
252
256
  function process2(doc2) {
253
257
  switch (get_doc_type_default(doc2)) {
@@ -460,11 +464,18 @@ function stripTrailingHardline(doc) {
460
464
  }
461
465
  function cleanDocFn(doc) {
462
466
  switch (get_doc_type_default(doc)) {
463
- case DOC_TYPE_FILL:
464
- if (doc.parts.every((part) => part === "")) {
467
+ case DOC_TYPE_FILL: {
468
+ const {
469
+ parts
470
+ } = doc;
471
+ if (parts.every((part) => part === "")) {
465
472
  return "";
466
473
  }
474
+ if (parts.length === 1) {
475
+ return parts[0];
476
+ }
467
477
  break;
478
+ }
468
479
  case DOC_TYPE_GROUP:
469
480
  if (!doc.contents && !doc.id && !doc.break && !doc.expandedStates) {
470
481
  return "";
@@ -742,7 +753,7 @@ var stringReplaceAll = String.prototype.replaceAll ?? function(pattern, replacem
742
753
  }
743
754
  return this.split(pattern).join(replacement);
744
755
  };
745
- var replaceAll = createMethodShim("replaceAll", function() {
756
+ var replaceAll = /* @__PURE__ */ createMethodShim("replaceAll", function() {
746
757
  if (typeof this === "string") {
747
758
  return stringReplaceAll;
748
759
  }
@@ -765,20 +776,73 @@ var emoji_regex_default = () => {
765
776
  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;
766
777
  };
767
778
 
779
+ // node_modules/get-east-asian-width/lookup-data.js
780
+ var fullwidthMinimalCodePoint = 12288;
781
+ var fullwidthMaximumCodePoint = 65510;
782
+ var fullwidthRanges = [12288, 12288, 65281, 65376, 65504, 65510];
783
+ var wideMinimalCodePoint = 4352;
784
+ var wideMaximumCodePoint = 262141;
785
+ 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];
786
+
787
+ // node_modules/get-east-asian-width/utilities.js
788
+ var isInRange = (ranges, codePoint) => {
789
+ let low = 0;
790
+ let high = Math.floor(ranges.length / 2) - 1;
791
+ while (low <= high) {
792
+ const mid = Math.floor((low + high) / 2);
793
+ const i = mid * 2;
794
+ if (codePoint < ranges[i]) {
795
+ high = mid - 1;
796
+ } else if (codePoint > ranges[i + 1]) {
797
+ low = mid + 1;
798
+ } else {
799
+ return true;
800
+ }
801
+ }
802
+ return false;
803
+ };
804
+
768
805
  // node_modules/get-east-asian-width/lookup.js
769
- function isFullWidth(x) {
770
- return x === 12288 || x >= 65281 && x <= 65376 || x >= 65504 && x <= 65510;
771
- }
772
- function isWide(x) {
773
- 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;
806
+ var commonCjkCodePoint = 19968;
807
+ var [wideFastPathStart, wideFastPathEnd] = /* @__PURE__ */ findWideFastPathRange(wideRanges);
808
+ function findWideFastPathRange(ranges) {
809
+ let fastPathStart = ranges[0];
810
+ let fastPathEnd = ranges[1];
811
+ for (let index = 0; index < ranges.length; index += 2) {
812
+ const start = ranges[index];
813
+ const end = ranges[index + 1];
814
+ if (commonCjkCodePoint >= start && commonCjkCodePoint <= end) {
815
+ return [start, end];
816
+ }
817
+ if (end - start > fastPathEnd - fastPathStart) {
818
+ fastPathStart = start;
819
+ fastPathEnd = end;
820
+ }
821
+ }
822
+ return [fastPathStart, fastPathEnd];
774
823
  }
824
+ var isFullWidth = (codePoint) => {
825
+ if (codePoint < fullwidthMinimalCodePoint || codePoint > fullwidthMaximumCodePoint) {
826
+ return false;
827
+ }
828
+ return isInRange(fullwidthRanges, codePoint);
829
+ };
830
+ var isWide = (codePoint) => {
831
+ if (codePoint >= wideFastPathStart && codePoint <= wideFastPathEnd) {
832
+ return true;
833
+ }
834
+ if (codePoint < wideMinimalCodePoint || codePoint > wideMaximumCodePoint) {
835
+ return false;
836
+ }
837
+ return isInRange(wideRanges, codePoint);
838
+ };
775
839
 
776
- // src/utilities/narrow-emojis.evaluate.js
777
- 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";
840
+ // node_modules/narrow-emojis/index.js
841
+ 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])$/;
842
+ var isNarrowEmojiCharacter = (character) => narrowEmojiRegexp.test(character);
778
843
 
779
844
  // src/utilities/get-string-width.js
780
- var notAsciiRegex = /[^\x20-\x7F]/u;
781
- var narrowEmojisSet = new Set(narrow_emojis_evaluate_default);
845
+ var notAsciiRegex = /[^\x20-\x7F]/;
782
846
  function getStringWidth(text) {
783
847
  if (!text) {
784
848
  return 0;
@@ -786,11 +850,11 @@ function getStringWidth(text) {
786
850
  if (!notAsciiRegex.test(text)) {
787
851
  return text.length;
788
852
  }
789
- text = text.replace(
790
- emoji_regex_default(),
791
- (match) => narrowEmojisSet.has(match) ? " " : " "
792
- );
793
853
  let width = 0;
854
+ text = text.replace(emoji_regex_default(), (character) => {
855
+ width += isNarrowEmojiCharacter(character) ? 1 : 2;
856
+ return "";
857
+ });
794
858
  for (const character of text) {
795
859
  const codePoint = character.codePointAt(0);
796
860
  if (codePoint <= 31 || codePoint >= 127 && codePoint <= 159) {
@@ -935,10 +999,62 @@ function trimIndentation(text) {
935
999
  return { text: trimmed, count: length };
936
1000
  }
937
1001
 
1002
+ // src/document/printer/print-result.js
1003
+ var printResult = class {
1004
+ /** @type {string[]} */
1005
+ #settledTexts = [];
1006
+ #unsettledText = "";
1007
+ #settledTextLength = 0;
1008
+ /** @type {number[]} */
1009
+ #settledPositions = [];
1010
+ /** @type {number[]} */
1011
+ #unsettledPositions = [];
1012
+ #settle() {
1013
+ const text = this.#unsettledText;
1014
+ if (text !== "") {
1015
+ this.#settledTexts.push(text);
1016
+ this.#settledTextLength += text.length;
1017
+ this.#unsettledText = "";
1018
+ }
1019
+ for (const position of this.#unsettledPositions) {
1020
+ this.#settledPositions.push(Math.min(position, this.#settledTextLength));
1021
+ }
1022
+ this.#unsettledPositions.length = 0;
1023
+ }
1024
+ markPosition() {
1025
+ if (this.#settledPositions.length + this.#unsettledPositions.length >= 2) {
1026
+ throw new Error("There are too many 'cursor' in doc.");
1027
+ }
1028
+ this.#unsettledPositions.push(
1029
+ this.#settledTextLength + this.#unsettledText.length
1030
+ );
1031
+ }
1032
+ /**
1033
+ @param {string} text
1034
+ */
1035
+ write(text) {
1036
+ this.#unsettledText += text;
1037
+ }
1038
+ trim() {
1039
+ const { text: trimmed, count } = trimIndentation(this.#unsettledText);
1040
+ this.#unsettledText = trimmed;
1041
+ this.#settle();
1042
+ return count;
1043
+ }
1044
+ finish() {
1045
+ this.#settle();
1046
+ return {
1047
+ text: this.#settledTexts.join(""),
1048
+ positions: this.#settledPositions
1049
+ };
1050
+ }
1051
+ };
1052
+ var print_result_default = printResult;
1053
+
938
1054
  // src/document/printer/printer.js
939
- var MODE_BREAK = Symbol("MODE_BREAK");
940
- var MODE_FLAT = Symbol("MODE_FLAT");
941
- var DOC_FILL_PRINTED_LENGTH = Symbol("DOC_FILL_PRINTED_LENGTH");
1055
+ var MODE_BREAK = /* @__PURE__ */ Symbol("MODE_BREAK");
1056
+ var MODE_FLAT = /* @__PURE__ */ Symbol("MODE_FLAT");
1057
+ var DOC_FILL_PRINTED_LENGTH = /* @__PURE__ */ Symbol("DOC_FILL_PRINTED_LENGTH");
942
1058
  function fits(next, restCommands, remainingWidth, hasLineSuffix, groupModeMap, mustBeFlat) {
943
1059
  if (remainingWidth === Number.POSITIVE_INFINITY) {
944
1060
  return true;
@@ -1060,13 +1176,9 @@ function printDocToString(doc, options) {
1060
1176
  mode: MODE_BREAK,
1061
1177
  doc
1062
1178
  }];
1063
- let output = "";
1064
1179
  let shouldRemeasure = false;
1065
1180
  const lineSuffix2 = [];
1066
- const cursorPositions = [];
1067
- const settledOutput = [];
1068
- const settledCursorPositions = [];
1069
- let settledTextLength = 0;
1181
+ const result = new print_result_default();
1070
1182
  propagateBreaks(doc);
1071
1183
  while (commands.length > 0) {
1072
1184
  const {
@@ -1084,7 +1196,7 @@ function printDocToString(doc, options) {
1084
1196
  newLine
1085
1197
  ) : doc2;
1086
1198
  if (formatted2) {
1087
- output += formatted2;
1199
+ result.write(formatted2);
1088
1200
  if (commands.length > 0) {
1089
1201
  position += get_string_width_default(formatted2);
1090
1202
  }
@@ -1101,10 +1213,7 @@ function printDocToString(doc, options) {
1101
1213
  }
1102
1214
  break;
1103
1215
  case DOC_TYPE_CURSOR:
1104
- if (cursorPositions.length >= 2) {
1105
- throw new Error("There are too many 'cursor' in doc.");
1106
- }
1107
- cursorPositions.push(settledTextLength + output.length);
1216
+ result.markPosition();
1108
1217
  break;
1109
1218
  case DOC_TYPE_INDENT:
1110
1219
  commands.push({
@@ -1121,89 +1230,64 @@ function printDocToString(doc, options) {
1121
1230
  });
1122
1231
  break;
1123
1232
  case DOC_TYPE_TRIM:
1124
- trim2();
1233
+ position -= result.trim();
1125
1234
  break;
1126
- case DOC_TYPE_GROUP:
1127
- switch (mode) {
1128
- case MODE_FLAT:
1129
- if (!shouldRemeasure) {
1130
- commands.push({
1131
- indent: indent2,
1132
- mode: doc2.break ? MODE_BREAK : MODE_FLAT,
1133
- doc: doc2.contents
1134
- });
1135
- break;
1136
- }
1137
- // fallthrough
1138
- case MODE_BREAK: {
1139
- shouldRemeasure = false;
1140
- const next = {
1235
+ case DOC_TYPE_GROUP: {
1236
+ const command = (function printGroup() {
1237
+ if (mode === MODE_FLAT && !shouldRemeasure) {
1238
+ return {
1141
1239
  indent: indent2,
1142
- mode: MODE_FLAT,
1240
+ mode: doc2.break ? MODE_BREAK : MODE_FLAT,
1143
1241
  doc: doc2.contents
1144
1242
  };
1145
- const remainingWidth = width - position;
1146
- const hasLineSuffix = lineSuffix2.length > 0;
1147
- if (!doc2.break && fits(next, commands, remainingWidth, hasLineSuffix, groupModeMap)) {
1148
- commands.push(next);
1149
- } else {
1150
- if (doc2.expandedStates) {
1151
- const mostExpanded = method_at_default(
1152
- /* OPTIONAL_OBJECT: false */
1153
- 0,
1154
- doc2.expandedStates,
1155
- -1
1156
- );
1157
- if (doc2.break) {
1158
- commands.push({
1159
- indent: indent2,
1160
- mode: MODE_BREAK,
1161
- doc: mostExpanded
1162
- });
1163
- break;
1164
- } else {
1165
- for (let index = 1; index < doc2.expandedStates.length + 1; index++) {
1166
- if (index >= doc2.expandedStates.length) {
1167
- commands.push({
1168
- indent: indent2,
1169
- mode: MODE_BREAK,
1170
- doc: mostExpanded
1171
- });
1172
- break;
1173
- } else {
1174
- const state = doc2.expandedStates[index];
1175
- const cmd = {
1176
- indent: indent2,
1177
- mode: MODE_FLAT,
1178
- doc: state
1179
- };
1180
- if (fits(cmd, commands, remainingWidth, hasLineSuffix, groupModeMap)) {
1181
- commands.push(cmd);
1182
- break;
1183
- }
1184
- }
1185
- }
1186
- }
1187
- } else {
1188
- commands.push({
1189
- indent: indent2,
1190
- mode: MODE_BREAK,
1191
- doc: doc2.contents
1192
- });
1243
+ }
1244
+ shouldRemeasure = false;
1245
+ const remainingWidth = width - position;
1246
+ const hasLineSuffix = lineSuffix2.length > 0;
1247
+ const flatCommand = {
1248
+ indent: indent2,
1249
+ mode: MODE_FLAT,
1250
+ doc: doc2.contents
1251
+ };
1252
+ if (!doc2.break && fits(flatCommand, commands, remainingWidth, hasLineSuffix, groupModeMap)) {
1253
+ return flatCommand;
1254
+ }
1255
+ if (!doc2.expandedStates) {
1256
+ return {
1257
+ indent: indent2,
1258
+ mode: MODE_BREAK,
1259
+ doc: doc2.contents
1260
+ };
1261
+ }
1262
+ if (!doc2.break) {
1263
+ for (let index = 1; index < doc2.expandedStates.length - 1; index++) {
1264
+ const flatCommand2 = {
1265
+ indent: indent2,
1266
+ mode: MODE_FLAT,
1267
+ doc: doc2.expandedStates[index]
1268
+ };
1269
+ if (fits(flatCommand2, commands, remainingWidth, hasLineSuffix, groupModeMap)) {
1270
+ return flatCommand2;
1193
1271
  }
1194
1272
  }
1195
- break;
1196
1273
  }
1197
- }
1274
+ return {
1275
+ indent: indent2,
1276
+ mode: MODE_BREAK,
1277
+ doc: method_at_default(
1278
+ /* OPTIONAL_OBJECT: false */
1279
+ 0,
1280
+ doc2.expandedStates,
1281
+ -1
1282
+ )
1283
+ };
1284
+ })();
1285
+ commands.push(command);
1198
1286
  if (doc2.id) {
1199
- groupModeMap[doc2.id] = method_at_default(
1200
- /* OPTIONAL_OBJECT: false */
1201
- 0,
1202
- commands,
1203
- -1
1204
- ).mode;
1287
+ groupModeMap[doc2.id] = command.mode;
1205
1288
  }
1206
1289
  break;
1290
+ }
1207
1291
  // Fills each line with as much code as possible before moving to a new
1208
1292
  // line with the same indentation.
1209
1293
  //
@@ -1344,13 +1428,12 @@ function printDocToString(doc, options) {
1344
1428
  case MODE_FLAT:
1345
1429
  if (!doc2.hard) {
1346
1430
  if (!doc2.soft) {
1347
- output += " ";
1431
+ result.write(" ");
1348
1432
  position += 1;
1349
1433
  }
1350
1434
  break;
1351
- } else {
1352
- shouldRemeasure = true;
1353
1435
  }
1436
+ shouldRemeasure = true;
1354
1437
  // fallthrough
1355
1438
  case MODE_BREAK:
1356
1439
  if (lineSuffix2.length > 0) {
@@ -1363,17 +1446,17 @@ function printDocToString(doc, options) {
1363
1446
  break;
1364
1447
  }
1365
1448
  if (doc2.literal) {
1366
- output += newLine;
1449
+ result.write(newLine);
1367
1450
  position = 0;
1368
1451
  if (indent2.root) {
1369
1452
  if (indent2.root.value) {
1370
- output += indent2.root.value;
1453
+ result.write(indent2.root.value);
1371
1454
  }
1372
1455
  position = indent2.root.length;
1373
1456
  }
1374
1457
  } else {
1375
- trim2();
1376
- output += newLine + indent2.value;
1458
+ result.trim();
1459
+ result.write(newLine + indent2.value);
1377
1460
  position = indent2.length;
1378
1461
  }
1379
1462
  break;
@@ -1396,40 +1479,21 @@ function printDocToString(doc, options) {
1396
1479
  lineSuffix2.length = 0;
1397
1480
  }
1398
1481
  }
1399
- const formatted = settledOutput.join("") + output;
1400
- const finalCursorPositions = [...settledCursorPositions, ...cursorPositions];
1401
- if (finalCursorPositions.length !== 2) {
1482
+ const {
1483
+ text: formatted,
1484
+ positions: cursorPositions
1485
+ } = result.finish();
1486
+ if (cursorPositions.length !== 2) {
1402
1487
  return {
1403
1488
  formatted
1404
1489
  };
1405
1490
  }
1406
- const cursorNodeStart = finalCursorPositions[0];
1491
+ const [cursorNodeStart, cursorNodeEnd] = cursorPositions;
1407
1492
  return {
1408
1493
  formatted,
1409
1494
  cursorNodeStart,
1410
- cursorNodeText: formatted.slice(cursorNodeStart, method_at_default(
1411
- /* OPTIONAL_OBJECT: false */
1412
- 0,
1413
- finalCursorPositions,
1414
- -1
1415
- ))
1495
+ cursorNodeText: formatted.slice(cursorNodeStart, cursorNodeEnd)
1416
1496
  };
1417
- function trim2() {
1418
- const {
1419
- text: trimmed,
1420
- count
1421
- } = trimIndentation(output);
1422
- if (trimmed) {
1423
- settledOutput.push(trimmed);
1424
- settledTextLength += trimmed.length;
1425
- }
1426
- output = "";
1427
- position -= count;
1428
- if (cursorPositions.length > 0) {
1429
- settledCursorPositions.push(...cursorPositions.map((position2) => Math.min(position2, settledTextLength)));
1430
- cursorPositions.length = 0;
1431
- }
1432
- }
1433
1497
  }
1434
1498
 
1435
1499
  // src/document/public.js