UNPKG

68.3 kBJavaScriptView Raw
1(function (factory) {
2 if (typeof exports === "object" && typeof module === "object") {
3 module.exports = factory();
4 } else if (typeof define === "function" && define.amd) {
5 define(factory);
6 } else {
7 var root =
8 typeof globalThis !== "undefined"
9 ? globalThis
10 : typeof global !== "undefined"
11 ? global
12 : typeof self !== "undefined"
13 ? self
14 : this || {};
15 root.doc = factory();
16 }
17})(function() {
18 "use strict";
19 var __getOwnPropNames = Object.getOwnPropertyNames;
20 var __commonJS = (cb, mod) => function __require() {
21 return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
22 };
23
24 // dist/_doc.js.umd.js
25 var require_doc_js_umd = __commonJS({
26 "dist/_doc.js.umd.js"(exports, module) {
27 var __create = Object.create;
28 var __defProp = Object.defineProperty;
29 var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
30 var __getOwnPropNames2 = Object.getOwnPropertyNames;
31 var __getProtoOf = Object.getPrototypeOf;
32 var __hasOwnProp = Object.prototype.hasOwnProperty;
33 var __esm = (fn, res) => function __init() {
34 return fn && (res = (0, fn[__getOwnPropNames2(fn)[0]])(fn = 0)), res;
35 };
36 var __commonJS2 = (cb, mod) => function __require() {
37 return mod || (0, cb[__getOwnPropNames2(cb)[0]])((mod = {
38 exports: {}
39 }).exports, mod), mod.exports;
40 };
41 var __export = (target, all) => {
42 for (var name in all)
43 __defProp(target, name, {
44 get: all[name],
45 enumerable: true
46 });
47 };
48 var __copyProps = (to, from, except, desc) => {
49 if (from && typeof from === "object" || typeof from === "function") {
50 for (let key of __getOwnPropNames2(from))
51 if (!__hasOwnProp.call(to, key) && key !== except)
52 __defProp(to, key, {
53 get: () => from[key],
54 enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
55 });
56 }
57 return to;
58 };
59 var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
60 value: mod,
61 enumerable: true
62 }) : target, mod));
63 var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", {
64 value: true
65 }), mod);
66 var init_define_process = __esm({
67 "<define:process>"() {
68 }
69 });
70 var require_doc_builders = __commonJS2({
71 "src/document/doc-builders.js"(exports2, module2) {
72 "use strict";
73 init_define_process();
74 function concat(parts) {
75 if (false) {
76 for (const part of parts) {
77 assertDoc(part);
78 }
79 }
80 return {
81 type: "concat",
82 parts
83 };
84 }
85 function indent(contents) {
86 if (false) {
87 assertDoc(contents);
88 }
89 return {
90 type: "indent",
91 contents
92 };
93 }
94 function align(widthOrString, contents) {
95 if (false) {
96 assertDoc(contents);
97 }
98 return {
99 type: "align",
100 contents,
101 n: widthOrString
102 };
103 }
104 function group(contents) {
105 let opts = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
106 if (false) {
107 assertDoc(contents);
108 }
109 return {
110 type: "group",
111 id: opts.id,
112 contents,
113 break: Boolean(opts.shouldBreak),
114 expandedStates: opts.expandedStates
115 };
116 }
117 function dedentToRoot(contents) {
118 return align(Number.NEGATIVE_INFINITY, contents);
119 }
120 function markAsRoot(contents) {
121 return align({
122 type: "root"
123 }, contents);
124 }
125 function dedent(contents) {
126 return align(-1, contents);
127 }
128 function conditionalGroup(states, opts) {
129 return group(states[0], Object.assign(Object.assign({}, opts), {}, {
130 expandedStates: states
131 }));
132 }
133 function fill(parts) {
134 if (false) {
135 for (const part of parts) {
136 assertDoc(part);
137 }
138 }
139 return {
140 type: "fill",
141 parts
142 };
143 }
144 function ifBreak(breakContents, flatContents) {
145 let opts = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {};
146 if (false) {
147 if (breakContents) {
148 assertDoc(breakContents);
149 }
150 if (flatContents) {
151 assertDoc(flatContents);
152 }
153 }
154 return {
155 type: "if-break",
156 breakContents,
157 flatContents,
158 groupId: opts.groupId
159 };
160 }
161 function indentIfBreak(contents, opts) {
162 return {
163 type: "indent-if-break",
164 contents,
165 groupId: opts.groupId,
166 negate: opts.negate
167 };
168 }
169 function lineSuffix(contents) {
170 if (false) {
171 assertDoc(contents);
172 }
173 return {
174 type: "line-suffix",
175 contents
176 };
177 }
178 var lineSuffixBoundary = {
179 type: "line-suffix-boundary"
180 };
181 var breakParent = {
182 type: "break-parent"
183 };
184 var trim = {
185 type: "trim"
186 };
187 var hardlineWithoutBreakParent = {
188 type: "line",
189 hard: true
190 };
191 var literallineWithoutBreakParent = {
192 type: "line",
193 hard: true,
194 literal: true
195 };
196 var line = {
197 type: "line"
198 };
199 var softline = {
200 type: "line",
201 soft: true
202 };
203 var hardline = concat([hardlineWithoutBreakParent, breakParent]);
204 var literalline = concat([literallineWithoutBreakParent, breakParent]);
205 var cursor = {
206 type: "cursor",
207 placeholder: Symbol("cursor")
208 };
209 function join(sep, arr) {
210 const res = [];
211 for (let i = 0; i < arr.length; i++) {
212 if (i !== 0) {
213 res.push(sep);
214 }
215 res.push(arr[i]);
216 }
217 return concat(res);
218 }
219 function addAlignmentToDoc(doc, size, tabWidth) {
220 let aligned = doc;
221 if (size > 0) {
222 for (let i = 0; i < Math.floor(size / tabWidth); ++i) {
223 aligned = indent(aligned);
224 }
225 aligned = align(size % tabWidth, aligned);
226 aligned = align(Number.NEGATIVE_INFINITY, aligned);
227 }
228 return aligned;
229 }
230 function label(label2, contents) {
231 return {
232 type: "label",
233 label: label2,
234 contents
235 };
236 }
237 module2.exports = {
238 concat,
239 join,
240 line,
241 softline,
242 hardline,
243 literalline,
244 group,
245 conditionalGroup,
246 fill,
247 lineSuffix,
248 lineSuffixBoundary,
249 cursor,
250 breakParent,
251 ifBreak,
252 trim,
253 indent,
254 indentIfBreak,
255 align,
256 addAlignmentToDoc,
257 markAsRoot,
258 dedentToRoot,
259 dedent,
260 hardlineWithoutBreakParent,
261 literallineWithoutBreakParent,
262 label
263 };
264 }
265 });
266 var require_end_of_line = __commonJS2({
267 "src/common/end-of-line.js"(exports2, module2) {
268 "use strict";
269 init_define_process();
270 function guessEndOfLine(text) {
271 const index = text.indexOf("\r");
272 if (index >= 0) {
273 return text.charAt(index + 1) === "\n" ? "crlf" : "cr";
274 }
275 return "lf";
276 }
277 function convertEndOfLineToChars(value) {
278 switch (value) {
279 case "cr":
280 return "\r";
281 case "crlf":
282 return "\r\n";
283 default:
284 return "\n";
285 }
286 }
287 function countEndOfLineChars(text, eol) {
288 let regex;
289 switch (eol) {
290 case "\n":
291 regex = /\n/g;
292 break;
293 case "\r":
294 regex = /\r/g;
295 break;
296 case "\r\n":
297 regex = /\r\n/g;
298 break;
299 default:
300 throw new Error('Unexpected "eol" '.concat(JSON.stringify(eol), "."));
301 }
302 const endOfLines = text.match(regex);
303 return endOfLines ? endOfLines.length : 0;
304 }
305 function normalizeEndOfLine(text) {
306 return text.replace(/\r\n?/g, "\n");
307 }
308 module2.exports = {
309 guessEndOfLine,
310 convertEndOfLineToChars,
311 countEndOfLineChars,
312 normalizeEndOfLine
313 };
314 }
315 });
316 var require_get_last = __commonJS2({
317 "src/utils/get-last.js"(exports2, module2) {
318 "use strict";
319 init_define_process();
320 var getLast = (arr) => arr[arr.length - 1];
321 module2.exports = getLast;
322 }
323 });
324 function ansiRegex() {
325 let {
326 onlyFirst = false
327 } = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
328 const pattern = ["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)", "(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");
329 return new RegExp(pattern, onlyFirst ? void 0 : "g");
330 }
331 var init_ansi_regex = __esm({
332 "node_modules/strip-ansi/node_modules/ansi-regex/index.js"() {
333 init_define_process();
334 }
335 });
336 function stripAnsi(string) {
337 if (typeof string !== "string") {
338 throw new TypeError("Expected a `string`, got `".concat(typeof string, "`"));
339 }
340 return string.replace(ansiRegex(), "");
341 }
342 var init_strip_ansi = __esm({
343 "node_modules/strip-ansi/index.js"() {
344 init_define_process();
345 init_ansi_regex();
346 }
347 });
348 function isFullwidthCodePoint(codePoint) {
349 if (!Number.isInteger(codePoint)) {
350 return false;
351 }
352 return codePoint >= 4352 && (codePoint <= 4447 || codePoint === 9001 || codePoint === 9002 || 11904 <= codePoint && codePoint <= 12871 && codePoint !== 12351 || 12880 <= codePoint && codePoint <= 19903 || 19968 <= codePoint && codePoint <= 42182 || 43360 <= codePoint && codePoint <= 43388 || 44032 <= codePoint && codePoint <= 55203 || 63744 <= codePoint && codePoint <= 64255 || 65040 <= codePoint && codePoint <= 65049 || 65072 <= codePoint && codePoint <= 65131 || 65281 <= codePoint && codePoint <= 65376 || 65504 <= codePoint && codePoint <= 65510 || 110592 <= codePoint && codePoint <= 110593 || 127488 <= codePoint && codePoint <= 127569 || 131072 <= codePoint && codePoint <= 262141);
353 }
354 var init_is_fullwidth_code_point = __esm({
355 "node_modules/is-fullwidth-code-point/index.js"() {
356 init_define_process();
357 }
358 });
359 var require_emoji_regex = __commonJS2({
360 "node_modules/emoji-regex/index.js"(exports2, module2) {
361 "use strict";
362 init_define_process();
363 module2.exports = function() {
364 return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|(?:\uD83E\uDDD1\uD83C\uDFFF\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFC-\uDFFF])|\uD83D\uDC68(?:\uD83C\uDFFB(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|[\u2695\u2696\u2708]\uFE0F|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))?|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC)?|(?:\uD83D\uDC69(?:\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC69(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83E\uDDD1(?:\u200D(?:\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDE36\u200D\uD83C\uDF2B|\uD83C\uDFF3\uFE0F\u200D\u26A7|\uD83D\uDC3B\u200D\u2744|(?:(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\uD83C\uDFF4\u200D\u2620|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])\u200D[\u2640\u2642]|[\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\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299]|\uD83C[\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]|\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|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDE35\u200D\uD83D\uDCAB|\uD83D\uDE2E\u200D\uD83D\uDCA8|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83E\uDDD1(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83D\uDC69(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC08\u200D\u2B1B|\u2764\uFE0F\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\uD83D\uDC41\uFE0F|\uD83C\uDFF3\uFE0F|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF4|(?:[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\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]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270C\u270D]|\uD83D[\uDD74\uDD90])(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC08\uDC15\uDC3B\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE2E\uDE35\uDE36\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5]|\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD]|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\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-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0D\uDD0E\uDD10-\uDD17\uDD1D\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78\uDD7A-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCB\uDDD0\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6]|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5-\uDED7\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDD77\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g;
365 };
366 }
367 });
368 var string_width_exports = {};
369 __export(string_width_exports, {
370 default: () => stringWidth
371 });
372 function stringWidth(string) {
373 if (typeof string !== "string" || string.length === 0) {
374 return 0;
375 }
376 string = stripAnsi(string);
377 if (string.length === 0) {
378 return 0;
379 }
380 string = string.replace((0, import_emoji_regex.default)(), " ");
381 let width = 0;
382 for (let index = 0; index < string.length; index++) {
383 const codePoint = string.codePointAt(index);
384 if (codePoint <= 31 || codePoint >= 127 && codePoint <= 159) {
385 continue;
386 }
387 if (codePoint >= 768 && codePoint <= 879) {
388 continue;
389 }
390 if (codePoint > 65535) {
391 index++;
392 }
393 width += isFullwidthCodePoint(codePoint) ? 2 : 1;
394 }
395 return width;
396 }
397 var import_emoji_regex;
398 var init_string_width = __esm({
399 "node_modules/string-width/index.js"() {
400 init_define_process();
401 init_strip_ansi();
402 init_is_fullwidth_code_point();
403 import_emoji_regex = __toESM(require_emoji_regex());
404 }
405 });
406 var require_get_string_width = __commonJS2({
407 "src/utils/get-string-width.js"(exports2, module2) {
408 "use strict";
409 init_define_process();
410 var stringWidth2 = (init_string_width(), __toCommonJS(string_width_exports)).default;
411 var notAsciiRegex = /[^\x20-\x7F]/;
412 function getStringWidth(text) {
413 if (!text) {
414 return 0;
415 }
416 if (!notAsciiRegex.test(text)) {
417 return text.length;
418 }
419 return stringWidth2(text);
420 }
421 module2.exports = getStringWidth;
422 }
423 });
424 var require_doc_utils = __commonJS2({
425 "src/document/doc-utils.js"(exports2, module2) {
426 "use strict";
427 init_define_process();
428 var getLast = require_get_last();
429 var {
430 literalline,
431 join
432 } = require_doc_builders();
433 var isConcat = (doc) => Array.isArray(doc) || doc && doc.type === "concat";
434 var getDocParts = (doc) => {
435 if (Array.isArray(doc)) {
436 return doc;
437 }
438 if (doc.type !== "concat" && doc.type !== "fill") {
439 throw new Error("Expect doc type to be `concat` or `fill`.");
440 }
441 return doc.parts;
442 };
443 var traverseDocOnExitStackMarker = {};
444 function traverseDoc(doc, onEnter, onExit, shouldTraverseConditionalGroups) {
445 const docsStack = [doc];
446 while (docsStack.length > 0) {
447 const doc2 = docsStack.pop();
448 if (doc2 === traverseDocOnExitStackMarker) {
449 onExit(docsStack.pop());
450 continue;
451 }
452 if (onExit) {
453 docsStack.push(doc2, traverseDocOnExitStackMarker);
454 }
455 if (!onEnter || onEnter(doc2) !== false) {
456 if (isConcat(doc2) || doc2.type === "fill") {
457 const parts = getDocParts(doc2);
458 for (let ic = parts.length, i = ic - 1; i >= 0; --i) {
459 docsStack.push(parts[i]);
460 }
461 } else if (doc2.type === "if-break") {
462 if (doc2.flatContents) {
463 docsStack.push(doc2.flatContents);
464 }
465 if (doc2.breakContents) {
466 docsStack.push(doc2.breakContents);
467 }
468 } else if (doc2.type === "group" && doc2.expandedStates) {
469 if (shouldTraverseConditionalGroups) {
470 for (let ic = doc2.expandedStates.length, i = ic - 1; i >= 0; --i) {
471 docsStack.push(doc2.expandedStates[i]);
472 }
473 } else {
474 docsStack.push(doc2.contents);
475 }
476 } else if (doc2.contents) {
477 docsStack.push(doc2.contents);
478 }
479 }
480 }
481 }
482 function mapDoc(doc, cb) {
483 const mapped = /* @__PURE__ */ new Map();
484 return rec(doc);
485 function rec(doc2) {
486 if (mapped.has(doc2)) {
487 return mapped.get(doc2);
488 }
489 const result = process2(doc2);
490 mapped.set(doc2, result);
491 return result;
492 }
493 function process2(doc2) {
494 if (Array.isArray(doc2)) {
495 return cb(doc2.map(rec));
496 }
497 if (doc2.type === "concat" || doc2.type === "fill") {
498 const parts = doc2.parts.map(rec);
499 return cb(Object.assign(Object.assign({}, doc2), {}, {
500 parts
501 }));
502 }
503 if (doc2.type === "if-break") {
504 const breakContents = doc2.breakContents && rec(doc2.breakContents);
505 const flatContents = doc2.flatContents && rec(doc2.flatContents);
506 return cb(Object.assign(Object.assign({}, doc2), {}, {
507 breakContents,
508 flatContents
509 }));
510 }
511 if (doc2.type === "group" && doc2.expandedStates) {
512 const expandedStates = doc2.expandedStates.map(rec);
513 const contents = expandedStates[0];
514 return cb(Object.assign(Object.assign({}, doc2), {}, {
515 contents,
516 expandedStates
517 }));
518 }
519 if (doc2.contents) {
520 const contents = rec(doc2.contents);
521 return cb(Object.assign(Object.assign({}, doc2), {}, {
522 contents
523 }));
524 }
525 return cb(doc2);
526 }
527 }
528 function findInDoc(doc, fn, defaultValue) {
529 let result = defaultValue;
530 let hasStopped = false;
531 function findInDocOnEnterFn(doc2) {
532 const maybeResult = fn(doc2);
533 if (maybeResult !== void 0) {
534 hasStopped = true;
535 result = maybeResult;
536 }
537 if (hasStopped) {
538 return false;
539 }
540 }
541 traverseDoc(doc, findInDocOnEnterFn);
542 return result;
543 }
544 function willBreakFn(doc) {
545 if (doc.type === "group" && doc.break) {
546 return true;
547 }
548 if (doc.type === "line" && doc.hard) {
549 return true;
550 }
551 if (doc.type === "break-parent") {
552 return true;
553 }
554 }
555 function willBreak(doc) {
556 return findInDoc(doc, willBreakFn, false);
557 }
558 function breakParentGroup(groupStack) {
559 if (groupStack.length > 0) {
560 const parentGroup = getLast(groupStack);
561 if (!parentGroup.expandedStates && !parentGroup.break) {
562 parentGroup.break = "propagated";
563 }
564 }
565 return null;
566 }
567 function propagateBreaks(doc) {
568 const alreadyVisitedSet = /* @__PURE__ */ new Set();
569 const groupStack = [];
570 function propagateBreaksOnEnterFn(doc2) {
571 if (doc2.type === "break-parent") {
572 breakParentGroup(groupStack);
573 }
574 if (doc2.type === "group") {
575 groupStack.push(doc2);
576 if (alreadyVisitedSet.has(doc2)) {
577 return false;
578 }
579 alreadyVisitedSet.add(doc2);
580 }
581 }
582 function propagateBreaksOnExitFn(doc2) {
583 if (doc2.type === "group") {
584 const group = groupStack.pop();
585 if (group.break) {
586 breakParentGroup(groupStack);
587 }
588 }
589 }
590 traverseDoc(doc, propagateBreaksOnEnterFn, propagateBreaksOnExitFn, true);
591 }
592 function removeLinesFn(doc) {
593 if (doc.type === "line" && !doc.hard) {
594 return doc.soft ? "" : " ";
595 }
596 if (doc.type === "if-break") {
597 return doc.flatContents || "";
598 }
599 return doc;
600 }
601 function removeLines(doc) {
602 return mapDoc(doc, removeLinesFn);
603 }
604 var isHardline = (doc, nextDoc) => doc && doc.type === "line" && doc.hard && nextDoc && nextDoc.type === "break-parent";
605 function stripDocTrailingHardlineFromDoc(doc) {
606 if (!doc) {
607 return doc;
608 }
609 if (isConcat(doc) || doc.type === "fill") {
610 const parts = getDocParts(doc);
611 while (parts.length > 1 && isHardline(...parts.slice(-2))) {
612 parts.length -= 2;
613 }
614 if (parts.length > 0) {
615 const lastPart = stripDocTrailingHardlineFromDoc(getLast(parts));
616 parts[parts.length - 1] = lastPart;
617 }
618 return Array.isArray(doc) ? parts : Object.assign(Object.assign({}, doc), {}, {
619 parts
620 });
621 }
622 switch (doc.type) {
623 case "align":
624 case "indent":
625 case "indent-if-break":
626 case "group":
627 case "line-suffix":
628 case "label": {
629 const contents = stripDocTrailingHardlineFromDoc(doc.contents);
630 return Object.assign(Object.assign({}, doc), {}, {
631 contents
632 });
633 }
634 case "if-break": {
635 const breakContents = stripDocTrailingHardlineFromDoc(doc.breakContents);
636 const flatContents = stripDocTrailingHardlineFromDoc(doc.flatContents);
637 return Object.assign(Object.assign({}, doc), {}, {
638 breakContents,
639 flatContents
640 });
641 }
642 }
643 return doc;
644 }
645 function stripTrailingHardline(doc) {
646 return stripDocTrailingHardlineFromDoc(cleanDoc(doc));
647 }
648 function cleanDocFn(doc) {
649 switch (doc.type) {
650 case "fill":
651 if (doc.parts.every((part) => part === "")) {
652 return "";
653 }
654 break;
655 case "group":
656 if (!doc.contents && !doc.id && !doc.break && !doc.expandedStates) {
657 return "";
658 }
659 if (doc.contents.type === "group" && doc.contents.id === doc.id && doc.contents.break === doc.break && doc.contents.expandedStates === doc.expandedStates) {
660 return doc.contents;
661 }
662 break;
663 case "align":
664 case "indent":
665 case "indent-if-break":
666 case "line-suffix":
667 if (!doc.contents) {
668 return "";
669 }
670 break;
671 case "if-break":
672 if (!doc.flatContents && !doc.breakContents) {
673 return "";
674 }
675 break;
676 }
677 if (!isConcat(doc)) {
678 return doc;
679 }
680 const parts = [];
681 for (const part of getDocParts(doc)) {
682 if (!part) {
683 continue;
684 }
685 const [currentPart, ...restParts] = isConcat(part) ? getDocParts(part) : [part];
686 if (typeof currentPart === "string" && typeof getLast(parts) === "string") {
687 parts[parts.length - 1] += currentPart;
688 } else {
689 parts.push(currentPart);
690 }
691 parts.push(...restParts);
692 }
693 if (parts.length === 0) {
694 return "";
695 }
696 if (parts.length === 1) {
697 return parts[0];
698 }
699 return Array.isArray(doc) ? parts : Object.assign(Object.assign({}, doc), {}, {
700 parts
701 });
702 }
703 function cleanDoc(doc) {
704 return mapDoc(doc, (currentDoc) => cleanDocFn(currentDoc));
705 }
706 function normalizeParts(parts) {
707 const newParts = [];
708 const restParts = parts.filter(Boolean);
709 while (restParts.length > 0) {
710 const part = restParts.shift();
711 if (!part) {
712 continue;
713 }
714 if (isConcat(part)) {
715 restParts.unshift(...getDocParts(part));
716 continue;
717 }
718 if (newParts.length > 0 && typeof getLast(newParts) === "string" && typeof part === "string") {
719 newParts[newParts.length - 1] += part;
720 continue;
721 }
722 newParts.push(part);
723 }
724 return newParts;
725 }
726 function normalizeDoc(doc) {
727 return mapDoc(doc, (currentDoc) => {
728 if (Array.isArray(currentDoc)) {
729 return normalizeParts(currentDoc);
730 }
731 if (!currentDoc.parts) {
732 return currentDoc;
733 }
734 return Object.assign(Object.assign({}, currentDoc), {}, {
735 parts: normalizeParts(currentDoc.parts)
736 });
737 });
738 }
739 function replaceEndOfLine(doc) {
740 return mapDoc(doc, (currentDoc) => typeof currentDoc === "string" && currentDoc.includes("\n") ? replaceTextEndOfLine(currentDoc) : currentDoc);
741 }
742 function replaceTextEndOfLine(text) {
743 let replacement = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : literalline;
744 return join(replacement, text.split("\n")).parts;
745 }
746 function canBreakFn(doc) {
747 if (doc.type === "line") {
748 return true;
749 }
750 }
751 function canBreak(doc) {
752 return findInDoc(doc, canBreakFn, false);
753 }
754 module2.exports = {
755 isConcat,
756 getDocParts,
757 willBreak,
758 traverseDoc,
759 findInDoc,
760 mapDoc,
761 propagateBreaks,
762 removeLines,
763 stripTrailingHardline,
764 normalizeParts,
765 normalizeDoc,
766 cleanDoc,
767 replaceTextEndOfLine,
768 replaceEndOfLine,
769 canBreak
770 };
771 }
772 });
773 var require_doc_printer = __commonJS2({
774 "src/document/doc-printer.js"(exports2, module2) {
775 "use strict";
776 init_define_process();
777 var {
778 convertEndOfLineToChars
779 } = require_end_of_line();
780 var getLast = require_get_last();
781 var getStringWidth = require_get_string_width();
782 var {
783 fill,
784 cursor,
785 indent
786 } = require_doc_builders();
787 var {
788 isConcat,
789 getDocParts
790 } = require_doc_utils();
791 var groupModeMap;
792 var MODE_BREAK = 1;
793 var MODE_FLAT = 2;
794 function rootIndent() {
795 return {
796 value: "",
797 length: 0,
798 queue: []
799 };
800 }
801 function makeIndent(ind, options) {
802 return generateInd(ind, {
803 type: "indent"
804 }, options);
805 }
806 function makeAlign(indent2, widthOrDoc, options) {
807 if (widthOrDoc === Number.NEGATIVE_INFINITY) {
808 return indent2.root || rootIndent();
809 }
810 if (widthOrDoc < 0) {
811 return generateInd(indent2, {
812 type: "dedent"
813 }, options);
814 }
815 if (!widthOrDoc) {
816 return indent2;
817 }
818 if (widthOrDoc.type === "root") {
819 return Object.assign(Object.assign({}, indent2), {}, {
820 root: indent2
821 });
822 }
823 const alignType = typeof widthOrDoc === "string" ? "stringAlign" : "numberAlign";
824 return generateInd(indent2, {
825 type: alignType,
826 n: widthOrDoc
827 }, options);
828 }
829 function generateInd(ind, newPart, options) {
830 const queue = newPart.type === "dedent" ? ind.queue.slice(0, -1) : [...ind.queue, newPart];
831 let value = "";
832 let length = 0;
833 let lastTabs = 0;
834 let lastSpaces = 0;
835 for (const part of queue) {
836 switch (part.type) {
837 case "indent":
838 flush();
839 if (options.useTabs) {
840 addTabs(1);
841 } else {
842 addSpaces(options.tabWidth);
843 }
844 break;
845 case "stringAlign":
846 flush();
847 value += part.n;
848 length += part.n.length;
849 break;
850 case "numberAlign":
851 lastTabs += 1;
852 lastSpaces += part.n;
853 break;
854 default:
855 throw new Error("Unexpected type '".concat(part.type, "'"));
856 }
857 }
858 flushSpaces();
859 return Object.assign(Object.assign({}, ind), {}, {
860 value,
861 length,
862 queue
863 });
864 function addTabs(count) {
865 value += " ".repeat(count);
866 length += options.tabWidth * count;
867 }
868 function addSpaces(count) {
869 value += " ".repeat(count);
870 length += count;
871 }
872 function flush() {
873 if (options.useTabs) {
874 flushTabs();
875 } else {
876 flushSpaces();
877 }
878 }
879 function flushTabs() {
880 if (lastTabs > 0) {
881 addTabs(lastTabs);
882 }
883 resetLast();
884 }
885 function flushSpaces() {
886 if (lastSpaces > 0) {
887 addSpaces(lastSpaces);
888 }
889 resetLast();
890 }
891 function resetLast() {
892 lastTabs = 0;
893 lastSpaces = 0;
894 }
895 }
896 function trim(out) {
897 if (out.length === 0) {
898 return 0;
899 }
900 let trimCount = 0;
901 while (out.length > 0 && typeof getLast(out) === "string" && /^[\t ]*$/.test(getLast(out))) {
902 trimCount += out.pop().length;
903 }
904 if (out.length > 0 && typeof getLast(out) === "string") {
905 const trimmed = getLast(out).replace(/[\t ]*$/, "");
906 trimCount += getLast(out).length - trimmed.length;
907 out[out.length - 1] = trimmed;
908 }
909 return trimCount;
910 }
911 function fits(next, restCommands, width, options, hasLineSuffix, mustBeFlat) {
912 let restIdx = restCommands.length;
913 const cmds = [next];
914 const out = [];
915 while (width >= 0) {
916 if (cmds.length === 0) {
917 if (restIdx === 0) {
918 return true;
919 }
920 cmds.push(restCommands[restIdx - 1]);
921 restIdx--;
922 continue;
923 }
924 const [ind, mode, doc] = cmds.pop();
925 if (typeof doc === "string") {
926 out.push(doc);
927 width -= getStringWidth(doc);
928 } else if (isConcat(doc)) {
929 const parts = getDocParts(doc);
930 for (let i = parts.length - 1; i >= 0; i--) {
931 cmds.push([ind, mode, parts[i]]);
932 }
933 } else {
934 switch (doc.type) {
935 case "indent":
936 cmds.push([makeIndent(ind, options), mode, doc.contents]);
937 break;
938 case "align":
939 cmds.push([makeAlign(ind, doc.n, options), mode, doc.contents]);
940 break;
941 case "trim":
942 width += trim(out);
943 break;
944 case "group": {
945 if (mustBeFlat && doc.break) {
946 return false;
947 }
948 const groupMode = doc.break ? MODE_BREAK : mode;
949 cmds.push([ind, groupMode, doc.expandedStates && groupMode === MODE_BREAK ? getLast(doc.expandedStates) : doc.contents]);
950 if (doc.id) {
951 groupModeMap[doc.id] = groupMode;
952 }
953 break;
954 }
955 case "fill":
956 for (let i = doc.parts.length - 1; i >= 0; i--) {
957 cmds.push([ind, mode, doc.parts[i]]);
958 }
959 break;
960 case "if-break":
961 case "indent-if-break": {
962 const groupMode = doc.groupId ? groupModeMap[doc.groupId] : mode;
963 if (groupMode === MODE_BREAK) {
964 const breakContents = doc.type === "if-break" ? doc.breakContents : doc.negate ? doc.contents : indent(doc.contents);
965 if (breakContents) {
966 cmds.push([ind, mode, breakContents]);
967 }
968 }
969 if (groupMode === MODE_FLAT) {
970 const flatContents = doc.type === "if-break" ? doc.flatContents : doc.negate ? indent(doc.contents) : doc.contents;
971 if (flatContents) {
972 cmds.push([ind, mode, flatContents]);
973 }
974 }
975 break;
976 }
977 case "line":
978 switch (mode) {
979 case MODE_FLAT:
980 if (!doc.hard) {
981 if (!doc.soft) {
982 out.push(" ");
983 width -= 1;
984 }
985 break;
986 }
987 return true;
988 case MODE_BREAK:
989 return true;
990 }
991 break;
992 case "line-suffix":
993 hasLineSuffix = true;
994 break;
995 case "line-suffix-boundary":
996 if (hasLineSuffix) {
997 return false;
998 }
999 break;
1000 case "label":
1001 cmds.push([ind, mode, doc.contents]);
1002 break;
1003 }
1004 }
1005 }
1006 return false;
1007 }
1008 function printDocToString(doc, options) {
1009 groupModeMap = {};
1010 const width = options.printWidth;
1011 const newLine = convertEndOfLineToChars(options.endOfLine);
1012 let pos = 0;
1013 const cmds = [[rootIndent(), MODE_BREAK, doc]];
1014 const out = [];
1015 let shouldRemeasure = false;
1016 let lineSuffix = [];
1017 while (cmds.length > 0) {
1018 const [ind, mode, doc2] = cmds.pop();
1019 if (typeof doc2 === "string") {
1020 const formatted = newLine !== "\n" ? doc2.replace(/\n/g, newLine) : doc2;
1021 out.push(formatted);
1022 pos += getStringWidth(formatted);
1023 } else if (isConcat(doc2)) {
1024 const parts = getDocParts(doc2);
1025 for (let i = parts.length - 1; i >= 0; i--) {
1026 cmds.push([ind, mode, parts[i]]);
1027 }
1028 } else {
1029 switch (doc2.type) {
1030 case "cursor":
1031 out.push(cursor.placeholder);
1032 break;
1033 case "indent":
1034 cmds.push([makeIndent(ind, options), mode, doc2.contents]);
1035 break;
1036 case "align":
1037 cmds.push([makeAlign(ind, doc2.n, options), mode, doc2.contents]);
1038 break;
1039 case "trim":
1040 pos -= trim(out);
1041 break;
1042 case "group":
1043 switch (mode) {
1044 case MODE_FLAT:
1045 if (!shouldRemeasure) {
1046 cmds.push([ind, doc2.break ? MODE_BREAK : MODE_FLAT, doc2.contents]);
1047 break;
1048 }
1049 case MODE_BREAK: {
1050 shouldRemeasure = false;
1051 const next = [ind, MODE_FLAT, doc2.contents];
1052 const rem = width - pos;
1053 const hasLineSuffix = lineSuffix.length > 0;
1054 if (!doc2.break && fits(next, cmds, rem, options, hasLineSuffix)) {
1055 cmds.push(next);
1056 } else {
1057 if (doc2.expandedStates) {
1058 const mostExpanded = getLast(doc2.expandedStates);
1059 if (doc2.break) {
1060 cmds.push([ind, MODE_BREAK, mostExpanded]);
1061 break;
1062 } else {
1063 for (let i = 1; i < doc2.expandedStates.length + 1; i++) {
1064 if (i >= doc2.expandedStates.length) {
1065 cmds.push([ind, MODE_BREAK, mostExpanded]);
1066 break;
1067 } else {
1068 const state = doc2.expandedStates[i];
1069 const cmd = [ind, MODE_FLAT, state];
1070 if (fits(cmd, cmds, rem, options, hasLineSuffix)) {
1071 cmds.push(cmd);
1072 break;
1073 }
1074 }
1075 }
1076 }
1077 } else {
1078 cmds.push([ind, MODE_BREAK, doc2.contents]);
1079 }
1080 }
1081 break;
1082 }
1083 }
1084 if (doc2.id) {
1085 groupModeMap[doc2.id] = getLast(cmds)[1];
1086 }
1087 break;
1088 case "fill": {
1089 const rem = width - pos;
1090 const {
1091 parts
1092 } = doc2;
1093 if (parts.length === 0) {
1094 break;
1095 }
1096 const [content, whitespace] = parts;
1097 const contentFlatCmd = [ind, MODE_FLAT, content];
1098 const contentBreakCmd = [ind, MODE_BREAK, content];
1099 const contentFits = fits(contentFlatCmd, [], rem, options, lineSuffix.length > 0, true);
1100 if (parts.length === 1) {
1101 if (contentFits) {
1102 cmds.push(contentFlatCmd);
1103 } else {
1104 cmds.push(contentBreakCmd);
1105 }
1106 break;
1107 }
1108 const whitespaceFlatCmd = [ind, MODE_FLAT, whitespace];
1109 const whitespaceBreakCmd = [ind, MODE_BREAK, whitespace];
1110 if (parts.length === 2) {
1111 if (contentFits) {
1112 cmds.push(whitespaceFlatCmd, contentFlatCmd);
1113 } else {
1114 cmds.push(whitespaceBreakCmd, contentBreakCmd);
1115 }
1116 break;
1117 }
1118 parts.splice(0, 2);
1119 const remainingCmd = [ind, mode, fill(parts)];
1120 const secondContent = parts[0];
1121 const firstAndSecondContentFlatCmd = [ind, MODE_FLAT, [content, whitespace, secondContent]];
1122 const firstAndSecondContentFits = fits(firstAndSecondContentFlatCmd, [], rem, options, lineSuffix.length > 0, true);
1123 if (firstAndSecondContentFits) {
1124 cmds.push(remainingCmd, whitespaceFlatCmd, contentFlatCmd);
1125 } else if (contentFits) {
1126 cmds.push(remainingCmd, whitespaceBreakCmd, contentFlatCmd);
1127 } else {
1128 cmds.push(remainingCmd, whitespaceBreakCmd, contentBreakCmd);
1129 }
1130 break;
1131 }
1132 case "if-break":
1133 case "indent-if-break": {
1134 const groupMode = doc2.groupId ? groupModeMap[doc2.groupId] : mode;
1135 if (groupMode === MODE_BREAK) {
1136 const breakContents = doc2.type === "if-break" ? doc2.breakContents : doc2.negate ? doc2.contents : indent(doc2.contents);
1137 if (breakContents) {
1138 cmds.push([ind, mode, breakContents]);
1139 }
1140 }
1141 if (groupMode === MODE_FLAT) {
1142 const flatContents = doc2.type === "if-break" ? doc2.flatContents : doc2.negate ? indent(doc2.contents) : doc2.contents;
1143 if (flatContents) {
1144 cmds.push([ind, mode, flatContents]);
1145 }
1146 }
1147 break;
1148 }
1149 case "line-suffix":
1150 lineSuffix.push([ind, mode, doc2.contents]);
1151 break;
1152 case "line-suffix-boundary":
1153 if (lineSuffix.length > 0) {
1154 cmds.push([ind, mode, {
1155 type: "line",
1156 hard: true
1157 }]);
1158 }
1159 break;
1160 case "line":
1161 switch (mode) {
1162 case MODE_FLAT:
1163 if (!doc2.hard) {
1164 if (!doc2.soft) {
1165 out.push(" ");
1166 pos += 1;
1167 }
1168 break;
1169 } else {
1170 shouldRemeasure = true;
1171 }
1172 case MODE_BREAK:
1173 if (lineSuffix.length > 0) {
1174 cmds.push([ind, mode, doc2], ...lineSuffix.reverse());
1175 lineSuffix = [];
1176 break;
1177 }
1178 if (doc2.literal) {
1179 if (ind.root) {
1180 out.push(newLine, ind.root.value);
1181 pos = ind.root.length;
1182 } else {
1183 out.push(newLine);
1184 pos = 0;
1185 }
1186 } else {
1187 pos -= trim(out);
1188 out.push(newLine + ind.value);
1189 pos = ind.length;
1190 }
1191 break;
1192 }
1193 break;
1194 case "label":
1195 cmds.push([ind, mode, doc2.contents]);
1196 break;
1197 default:
1198 }
1199 }
1200 if (cmds.length === 0 && lineSuffix.length > 0) {
1201 cmds.push(...lineSuffix.reverse());
1202 lineSuffix = [];
1203 }
1204 }
1205 const cursorPlaceholderIndex = out.indexOf(cursor.placeholder);
1206 if (cursorPlaceholderIndex !== -1) {
1207 const otherCursorPlaceholderIndex = out.indexOf(cursor.placeholder, cursorPlaceholderIndex + 1);
1208 const beforeCursor = out.slice(0, cursorPlaceholderIndex).join("");
1209 const aroundCursor = out.slice(cursorPlaceholderIndex + 1, otherCursorPlaceholderIndex).join("");
1210 const afterCursor = out.slice(otherCursorPlaceholderIndex + 1).join("");
1211 return {
1212 formatted: beforeCursor + aroundCursor + afterCursor,
1213 cursorNodeStart: beforeCursor.length,
1214 cursorNodeText: aroundCursor
1215 };
1216 }
1217 return {
1218 formatted: out.join("")
1219 };
1220 }
1221 module2.exports = {
1222 printDocToString
1223 };
1224 }
1225 });
1226 var require_doc_debug = __commonJS2({
1227 "src/document/doc-debug.js"(exports2, module2) {
1228 "use strict";
1229 init_define_process();
1230 var {
1231 isConcat,
1232 getDocParts
1233 } = require_doc_utils();
1234 function flattenDoc(doc) {
1235 if (!doc) {
1236 return "";
1237 }
1238 if (isConcat(doc)) {
1239 const res = [];
1240 for (const part of getDocParts(doc)) {
1241 if (isConcat(part)) {
1242 res.push(...flattenDoc(part).parts);
1243 } else {
1244 const flattened = flattenDoc(part);
1245 if (flattened !== "") {
1246 res.push(flattened);
1247 }
1248 }
1249 }
1250 return {
1251 type: "concat",
1252 parts: res
1253 };
1254 }
1255 if (doc.type === "if-break") {
1256 return Object.assign(Object.assign({}, doc), {}, {
1257 breakContents: flattenDoc(doc.breakContents),
1258 flatContents: flattenDoc(doc.flatContents)
1259 });
1260 }
1261 if (doc.type === "group") {
1262 return Object.assign(Object.assign({}, doc), {}, {
1263 contents: flattenDoc(doc.contents),
1264 expandedStates: doc.expandedStates && doc.expandedStates.map(flattenDoc)
1265 });
1266 }
1267 if (doc.type === "fill") {
1268 return {
1269 type: "fill",
1270 parts: doc.parts.map(flattenDoc)
1271 };
1272 }
1273 if (doc.contents) {
1274 return Object.assign(Object.assign({}, doc), {}, {
1275 contents: flattenDoc(doc.contents)
1276 });
1277 }
1278 return doc;
1279 }
1280 function printDocToDebug(doc) {
1281 const printedSymbols = /* @__PURE__ */ Object.create(null);
1282 const usedKeysForSymbols = /* @__PURE__ */ new Set();
1283 return printDoc(flattenDoc(doc));
1284 function printDoc(doc2, index, parentParts) {
1285 if (typeof doc2 === "string") {
1286 return JSON.stringify(doc2);
1287 }
1288 if (isConcat(doc2)) {
1289 const printed = getDocParts(doc2).map(printDoc).filter(Boolean);
1290 return printed.length === 1 ? printed[0] : "[".concat(printed.join(", "), "]");
1291 }
1292 if (doc2.type === "line") {
1293 const withBreakParent = Array.isArray(parentParts) && parentParts[index + 1] && parentParts[index + 1].type === "break-parent";
1294 if (doc2.literal) {
1295 return withBreakParent ? "literalline" : "literallineWithoutBreakParent";
1296 }
1297 if (doc2.hard) {
1298 return withBreakParent ? "hardline" : "hardlineWithoutBreakParent";
1299 }
1300 if (doc2.soft) {
1301 return "softline";
1302 }
1303 return "line";
1304 }
1305 if (doc2.type === "break-parent") {
1306 const afterHardline = Array.isArray(parentParts) && parentParts[index - 1] && parentParts[index - 1].type === "line" && parentParts[index - 1].hard;
1307 return afterHardline ? void 0 : "breakParent";
1308 }
1309 if (doc2.type === "trim") {
1310 return "trim";
1311 }
1312 if (doc2.type === "indent") {
1313 return "indent(" + printDoc(doc2.contents) + ")";
1314 }
1315 if (doc2.type === "align") {
1316 return doc2.n === Number.NEGATIVE_INFINITY ? "dedentToRoot(" + printDoc(doc2.contents) + ")" : doc2.n < 0 ? "dedent(" + printDoc(doc2.contents) + ")" : doc2.n.type === "root" ? "markAsRoot(" + printDoc(doc2.contents) + ")" : "align(" + JSON.stringify(doc2.n) + ", " + printDoc(doc2.contents) + ")";
1317 }
1318 if (doc2.type === "if-break") {
1319 return "ifBreak(" + printDoc(doc2.breakContents) + (doc2.flatContents ? ", " + printDoc(doc2.flatContents) : "") + (doc2.groupId ? (!doc2.flatContents ? ', ""' : "") + ", { groupId: ".concat(printGroupId(doc2.groupId), " }") : "") + ")";
1320 }
1321 if (doc2.type === "indent-if-break") {
1322 const optionsParts = [];
1323 if (doc2.negate) {
1324 optionsParts.push("negate: true");
1325 }
1326 if (doc2.groupId) {
1327 optionsParts.push("groupId: ".concat(printGroupId(doc2.groupId)));
1328 }
1329 const options = optionsParts.length > 0 ? ", { ".concat(optionsParts.join(", "), " }") : "";
1330 return "indentIfBreak(".concat(printDoc(doc2.contents)).concat(options, ")");
1331 }
1332 if (doc2.type === "group") {
1333 const optionsParts = [];
1334 if (doc2.break && doc2.break !== "propagated") {
1335 optionsParts.push("shouldBreak: true");
1336 }
1337 if (doc2.id) {
1338 optionsParts.push("id: ".concat(printGroupId(doc2.id)));
1339 }
1340 const options = optionsParts.length > 0 ? ", { ".concat(optionsParts.join(", "), " }") : "";
1341 if (doc2.expandedStates) {
1342 return "conditionalGroup([".concat(doc2.expandedStates.map((part) => printDoc(part)).join(","), "]").concat(options, ")");
1343 }
1344 return "group(".concat(printDoc(doc2.contents)).concat(options, ")");
1345 }
1346 if (doc2.type === "fill") {
1347 return "fill([".concat(doc2.parts.map((part) => printDoc(part)).join(", "), "])");
1348 }
1349 if (doc2.type === "line-suffix") {
1350 return "lineSuffix(" + printDoc(doc2.contents) + ")";
1351 }
1352 if (doc2.type === "line-suffix-boundary") {
1353 return "lineSuffixBoundary";
1354 }
1355 if (doc2.type === "label") {
1356 return "label(".concat(JSON.stringify(doc2.label), ", ").concat(printDoc(doc2.contents), ")");
1357 }
1358 throw new Error("Unknown doc type " + doc2.type);
1359 }
1360 function printGroupId(id) {
1361 if (typeof id !== "symbol") {
1362 return JSON.stringify(String(id));
1363 }
1364 if (id in printedSymbols) {
1365 return printedSymbols[id];
1366 }
1367 const prefix = String(id).slice(7, -1) || "symbol";
1368 for (let counter = 0; ; counter++) {
1369 const key = prefix + (counter > 0 ? " #".concat(counter) : "");
1370 if (!usedKeysForSymbols.has(key)) {
1371 usedKeysForSymbols.add(key);
1372 return printedSymbols[id] = "Symbol.for(".concat(JSON.stringify(key), ")");
1373 }
1374 }
1375 }
1376 }
1377 module2.exports = {
1378 printDocToDebug
1379 };
1380 }
1381 });
1382 init_define_process();
1383 module.exports = {
1384 builders: require_doc_builders(),
1385 printer: require_doc_printer(),
1386 utils: require_doc_utils(),
1387 debug: require_doc_debug()
1388 };
1389 }
1390 });
1391 return require_doc_js_umd();
1392});
\No newline at end of file