prettier 3.2.1 → 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +22 -2
  3. data/README.md +23 -59
  4. data/lib/prettier.rb +7 -5
  5. data/node_modules/prettier/LICENSE +5205 -0
  6. data/node_modules/prettier/README.md +109 -0
  7. data/node_modules/prettier/{bin-prettier.js → bin/prettier.cjs} +10 -5
  8. data/node_modules/prettier/doc.d.ts +240 -0
  9. data/node_modules/prettier/doc.js +1257 -1309
  10. data/node_modules/prettier/doc.mjs +1312 -0
  11. data/node_modules/prettier/index.cjs +655 -0
  12. data/node_modules/prettier/index.d.ts +915 -0
  13. data/node_modules/prettier/index.mjs +21845 -0
  14. data/node_modules/prettier/internal/cli.mjs +6978 -0
  15. data/node_modules/prettier/internal/internal.mjs +6531 -0
  16. data/node_modules/prettier/package.json +179 -6
  17. data/node_modules/prettier/plugins/acorn.d.ts +6 -0
  18. data/node_modules/prettier/plugins/acorn.js +13 -0
  19. data/node_modules/prettier/plugins/acorn.mjs +13 -0
  20. data/node_modules/prettier/plugins/angular.d.ts +8 -0
  21. data/node_modules/prettier/plugins/angular.js +2 -0
  22. data/node_modules/prettier/plugins/angular.mjs +2 -0
  23. data/node_modules/prettier/plugins/babel.d.ts +17 -0
  24. data/node_modules/prettier/plugins/babel.js +16 -0
  25. data/node_modules/prettier/plugins/babel.mjs +16 -0
  26. data/node_modules/prettier/plugins/estree.d.ts +0 -0
  27. data/node_modules/prettier/plugins/estree.js +35 -0
  28. data/node_modules/prettier/plugins/estree.mjs +35 -0
  29. data/node_modules/prettier/plugins/flow.d.ts +5 -0
  30. data/node_modules/prettier/plugins/flow.js +21 -0
  31. data/node_modules/prettier/plugins/flow.mjs +21 -0
  32. data/node_modules/prettier/plugins/glimmer.d.ts +5 -0
  33. data/node_modules/prettier/plugins/glimmer.js +30 -0
  34. data/node_modules/prettier/plugins/glimmer.mjs +30 -0
  35. data/node_modules/prettier/plugins/graphql.d.ts +5 -0
  36. data/node_modules/prettier/plugins/graphql.js +29 -0
  37. data/node_modules/prettier/plugins/graphql.mjs +29 -0
  38. data/node_modules/prettier/plugins/html.d.ts +8 -0
  39. data/node_modules/prettier/plugins/html.js +19 -0
  40. data/node_modules/prettier/plugins/html.mjs +19 -0
  41. data/node_modules/prettier/plugins/markdown.d.ts +7 -0
  42. data/node_modules/prettier/plugins/markdown.js +59 -0
  43. data/node_modules/prettier/plugins/markdown.mjs +59 -0
  44. data/node_modules/prettier/plugins/meriyah.d.ts +5 -0
  45. data/node_modules/prettier/plugins/meriyah.js +5 -0
  46. data/node_modules/prettier/plugins/meriyah.mjs +5 -0
  47. data/node_modules/prettier/plugins/postcss.d.ts +7 -0
  48. data/node_modules/prettier/plugins/postcss.js +52 -0
  49. data/node_modules/prettier/plugins/postcss.mjs +52 -0
  50. data/node_modules/prettier/plugins/typescript.d.ts +5 -0
  51. data/node_modules/prettier/plugins/typescript.js +27 -0
  52. data/node_modules/prettier/plugins/typescript.mjs +27 -0
  53. data/node_modules/prettier/plugins/yaml.d.ts +5 -0
  54. data/node_modules/prettier/plugins/yaml.js +161 -0
  55. data/node_modules/prettier/plugins/yaml.mjs +161 -0
  56. data/node_modules/prettier/standalone.d.ts +33 -0
  57. data/node_modules/prettier/standalone.js +34 -0
  58. data/node_modules/prettier/standalone.mjs +34 -0
  59. data/package.json +15 -10
  60. data/src/plugin.js +210 -14
  61. data/src/server.rb +50 -85
  62. metadata +60 -28
  63. data/CONTRIBUTING.md +0 -185
  64. data/node_modules/prettier/cli.js +0 -15085
  65. data/node_modules/prettier/index.js +0 -37282
  66. data/node_modules/prettier/parser-angular.js +0 -2
  67. data/node_modules/prettier/parser-babel.js +0 -27
  68. data/node_modules/prettier/parser-espree.js +0 -26
  69. data/node_modules/prettier/parser-flow.js +0 -35
  70. data/node_modules/prettier/parser-glimmer.js +0 -27
  71. data/node_modules/prettier/parser-graphql.js +0 -15
  72. data/node_modules/prettier/parser-html.js +0 -36
  73. data/node_modules/prettier/parser-markdown.js +0 -76
  74. data/node_modules/prettier/parser-meriyah.js +0 -19
  75. data/node_modules/prettier/parser-postcss.js +0 -76
  76. data/node_modules/prettier/parser-typescript.js +0 -280
  77. data/node_modules/prettier/parser-yaml.js +0 -150
  78. data/node_modules/prettier/third-party.js +0 -8978
  79. data/src/getInfo.js +0 -23
  80. data/src/netcat.js +0 -13
  81. data/src/parseSync.js +0 -227
@@ -1,8 +1,13 @@
1
1
  (function (factory) {
2
+ function interopModuleDefault() {
3
+ var module = factory();
4
+ return module.default || module;
5
+ }
6
+
2
7
  if (typeof exports === "object" && typeof module === "object") {
3
- module.exports = factory();
8
+ module.exports = interopModuleDefault();
4
9
  } else if (typeof define === "function" && define.amd) {
5
- define(factory);
10
+ define(interopModuleDefault);
6
11
  } else {
7
12
  var root =
8
13
  typeof globalThis !== "undefined"
@@ -12,1381 +17,1324 @@
12
17
  : typeof self !== "undefined"
13
18
  ? self
14
19
  : this || {};
15
- root.doc = factory();
20
+ root.doc = interopModuleDefault();
16
21
  }
17
22
  })(function() {
18
23
  "use strict";
24
+ var __defProp = Object.defineProperty;
25
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
19
26
  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;
27
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
28
+ var __export = (target, all) => {
29
+ for (var name in all)
30
+ __defProp(target, name, { get: all[name], enumerable: true });
31
+ };
32
+ var __copyProps = (to, from, except, desc) => {
33
+ if (from && typeof from === "object" || typeof from === "function") {
34
+ for (let key of __getOwnPropNames(from))
35
+ if (!__hasOwnProp.call(to, key) && key !== except)
36
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
37
+ }
38
+ return to;
22
39
  };
40
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
23
41
 
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
- };
42
+ // src/document/public.js
43
+ var public_exports = {};
44
+ __export(public_exports, {
45
+ builders: () => builders,
46
+ printer: () => printer,
47
+ utils: () => utils
48
+ });
49
+
50
+ // src/document/constants.js
51
+ var DOC_TYPE_STRING = "string";
52
+ var DOC_TYPE_ARRAY = "array";
53
+ var DOC_TYPE_CURSOR = "cursor";
54
+ var DOC_TYPE_INDENT = "indent";
55
+ var DOC_TYPE_ALIGN = "align";
56
+ var DOC_TYPE_TRIM = "trim";
57
+ var DOC_TYPE_GROUP = "group";
58
+ var DOC_TYPE_FILL = "fill";
59
+ var DOC_TYPE_IF_BREAK = "if-break";
60
+ var DOC_TYPE_INDENT_IF_BREAK = "indent-if-break";
61
+ var DOC_TYPE_LINE_SUFFIX = "line-suffix";
62
+ var DOC_TYPE_LINE_SUFFIX_BOUNDARY = "line-suffix-boundary";
63
+ var DOC_TYPE_LINE = "line";
64
+ var DOC_TYPE_LABEL = "label";
65
+ var DOC_TYPE_BREAK_PARENT = "break-parent";
66
+ var VALID_OBJECT_DOC_TYPES = /* @__PURE__ */ new Set([
67
+ DOC_TYPE_CURSOR,
68
+ DOC_TYPE_INDENT,
69
+ DOC_TYPE_ALIGN,
70
+ DOC_TYPE_TRIM,
71
+ DOC_TYPE_GROUP,
72
+ DOC_TYPE_FILL,
73
+ DOC_TYPE_IF_BREAK,
74
+ DOC_TYPE_INDENT_IF_BREAK,
75
+ DOC_TYPE_LINE_SUFFIX,
76
+ DOC_TYPE_LINE_SUFFIX_BOUNDARY,
77
+ DOC_TYPE_LINE,
78
+ DOC_TYPE_LABEL,
79
+ DOC_TYPE_BREAK_PARENT
80
+ ]);
81
+
82
+ // src/document/utils/get-doc-type.js
83
+ function getDocType(doc) {
84
+ if (typeof doc === "string") {
85
+ return DOC_TYPE_STRING;
86
+ }
87
+ if (Array.isArray(doc)) {
88
+ return DOC_TYPE_ARRAY;
89
+ }
90
+ if (!doc) {
91
+ return;
92
+ }
93
+ const { type } = doc;
94
+ if (VALID_OBJECT_DOC_TYPES.has(type)) {
95
+ return type;
96
+ }
97
+ }
98
+ var get_doc_type_default = getDocType;
99
+
100
+ // src/document/invalid-doc-error.js
101
+ var disjunctionListFormat = (list) => new Intl.ListFormat("en-US", { type: "disjunction" }).format(list);
102
+ function getDocErrorMessage(doc) {
103
+ const type = doc === null ? "null" : typeof doc;
104
+ if (type !== "string" && type !== "object") {
105
+ return `Unexpected doc '${type}',
106
+ Expected it to be 'string' or 'object'.`;
107
+ }
108
+ if (get_doc_type_default(doc)) {
109
+ throw new Error("doc is valid.");
110
+ }
111
+ const objectType = Object.prototype.toString.call(doc);
112
+ if (objectType !== "[object Object]") {
113
+ return `Unexpected doc '${objectType}'.`;
114
+ }
115
+ const EXPECTED_TYPE_VALUES = disjunctionListFormat(
116
+ [...VALID_OBJECT_DOC_TYPES].map((type2) => `'${type2}'`)
117
+ );
118
+ return `Unexpected doc.type '${doc.type}'.
119
+ Expected it to be ${EXPECTED_TYPE_VALUES}.`;
120
+ }
121
+ var InvalidDocError = class extends Error {
122
+ name = "InvalidDocError";
123
+ constructor(doc) {
124
+ super(getDocErrorMessage(doc));
125
+ this.doc = doc;
126
+ }
127
+ };
128
+ var invalid_doc_error_default = InvalidDocError;
129
+
130
+ // src/document/utils/traverse-doc.js
131
+ var traverseDocOnExitStackMarker = {};
132
+ function traverseDoc(doc, onEnter, onExit, shouldTraverseConditionalGroups) {
133
+ const docsStack = [doc];
134
+ while (docsStack.length > 0) {
135
+ const doc2 = docsStack.pop();
136
+ if (doc2 === traverseDocOnExitStackMarker) {
137
+ onExit(docsStack.pop());
138
+ continue;
139
+ }
140
+ if (onExit) {
141
+ docsStack.push(doc2, traverseDocOnExitStackMarker);
142
+ }
143
+ const docType = get_doc_type_default(doc2);
144
+ if (!docType) {
145
+ throw new invalid_doc_error_default(doc2);
146
+ }
147
+ if ((onEnter == null ? void 0 : onEnter(doc2)) === false) {
148
+ continue;
149
+ }
150
+ switch (docType) {
151
+ case DOC_TYPE_ARRAY:
152
+ case DOC_TYPE_FILL: {
153
+ const parts = docType === DOC_TYPE_ARRAY ? doc2 : doc2.parts;
154
+ for (let ic = parts.length, i = ic - 1; i >= 0; --i) {
155
+ docsStack.push(parts[i]);
236
156
  }
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
- };
157
+ break;
264
158
  }
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";
159
+ case DOC_TYPE_IF_BREAK:
160
+ docsStack.push(doc2.flatContents, doc2.breakContents);
161
+ break;
162
+ case DOC_TYPE_GROUP:
163
+ if (shouldTraverseConditionalGroups && doc2.expandedStates) {
164
+ for (let ic = doc2.expandedStates.length, i = ic - 1; i >= 0; --i) {
165
+ docsStack.push(doc2.expandedStates[i]);
274
166
  }
275
- return "lf";
167
+ } else {
168
+ docsStack.push(doc2.contents);
276
169
  }
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");
170
+ break;
171
+ case DOC_TYPE_ALIGN:
172
+ case DOC_TYPE_INDENT:
173
+ case DOC_TYPE_INDENT_IF_BREAK:
174
+ case DOC_TYPE_LABEL:
175
+ case DOC_TYPE_LINE_SUFFIX:
176
+ docsStack.push(doc2.contents);
177
+ break;
178
+ case DOC_TYPE_STRING:
179
+ case DOC_TYPE_CURSOR:
180
+ case DOC_TYPE_TRIM:
181
+ case DOC_TYPE_LINE_SUFFIX_BOUNDARY:
182
+ case DOC_TYPE_LINE:
183
+ case DOC_TYPE_BREAK_PARENT:
184
+ break;
185
+ default:
186
+ throw new invalid_doc_error_default(doc2);
187
+ }
188
+ }
189
+ }
190
+ var traverse_doc_default = traverseDoc;
191
+
192
+ // src/document/utils/assert-doc.js
193
+ var noop = () => {
194
+ };
195
+ var assertDoc = true ? noop : function(doc) {
196
+ traverse_doc_default(doc, (doc2) => {
197
+ if (checked.has(doc2)) {
198
+ return false;
199
+ }
200
+ if (typeof doc2 !== "string") {
201
+ checked.add(doc2);
202
+ }
203
+ });
204
+ };
205
+ var assertDocArray = true ? noop : function(docs, optional = false) {
206
+ if (optional && !docs) {
207
+ return;
208
+ }
209
+ if (!Array.isArray(docs)) {
210
+ throw new TypeError("Unexpected doc array.");
211
+ }
212
+ for (const doc of docs) {
213
+ assertDoc(doc);
214
+ }
215
+ };
216
+
217
+ // src/document/builders.js
218
+ function indent(contents) {
219
+ assertDoc(contents);
220
+ return { type: DOC_TYPE_INDENT, contents };
221
+ }
222
+ function align(widthOrString, contents) {
223
+ assertDoc(contents);
224
+ return { type: DOC_TYPE_ALIGN, contents, n: widthOrString };
225
+ }
226
+ function group(contents, opts = {}) {
227
+ assertDoc(contents);
228
+ assertDocArray(
229
+ opts.expandedStates,
230
+ /* optional */
231
+ true
232
+ );
233
+ return {
234
+ type: DOC_TYPE_GROUP,
235
+ id: opts.id,
236
+ contents,
237
+ break: Boolean(opts.shouldBreak),
238
+ expandedStates: opts.expandedStates
239
+ };
240
+ }
241
+ function dedentToRoot(contents) {
242
+ return align(Number.NEGATIVE_INFINITY, contents);
243
+ }
244
+ function markAsRoot(contents) {
245
+ return align({ type: "root" }, contents);
246
+ }
247
+ function dedent(contents) {
248
+ return align(-1, contents);
249
+ }
250
+ function conditionalGroup(states, opts) {
251
+ return group(states[0], { ...opts, expandedStates: states });
252
+ }
253
+ function fill(parts) {
254
+ assertDocArray(parts);
255
+ return { type: DOC_TYPE_FILL, parts };
256
+ }
257
+ function ifBreak(breakContents, flatContents = "", opts = {}) {
258
+ assertDoc(breakContents);
259
+ if (flatContents !== "") {
260
+ assertDoc(flatContents);
261
+ }
262
+ return {
263
+ type: DOC_TYPE_IF_BREAK,
264
+ breakContents,
265
+ flatContents,
266
+ groupId: opts.groupId
267
+ };
268
+ }
269
+ function indentIfBreak(contents, opts) {
270
+ assertDoc(contents);
271
+ return {
272
+ type: DOC_TYPE_INDENT_IF_BREAK,
273
+ contents,
274
+ groupId: opts.groupId,
275
+ negate: opts.negate
276
+ };
277
+ }
278
+ function lineSuffix(contents) {
279
+ assertDoc(contents);
280
+ return { type: DOC_TYPE_LINE_SUFFIX, contents };
281
+ }
282
+ var lineSuffixBoundary = { type: DOC_TYPE_LINE_SUFFIX_BOUNDARY };
283
+ var breakParent = { type: DOC_TYPE_BREAK_PARENT };
284
+ var trim = { type: DOC_TYPE_TRIM };
285
+ var hardlineWithoutBreakParent = { type: DOC_TYPE_LINE, hard: true };
286
+ var literallineWithoutBreakParent = {
287
+ type: DOC_TYPE_LINE,
288
+ hard: true,
289
+ literal: true
290
+ };
291
+ var line = { type: DOC_TYPE_LINE };
292
+ var softline = { type: DOC_TYPE_LINE, soft: true };
293
+ var hardline = [hardlineWithoutBreakParent, breakParent];
294
+ var literalline = [literallineWithoutBreakParent, breakParent];
295
+ var cursor = { type: DOC_TYPE_CURSOR };
296
+ function join(separator, docs) {
297
+ assertDoc(separator);
298
+ assertDocArray(docs);
299
+ const parts = [];
300
+ for (let i = 0; i < docs.length; i++) {
301
+ if (i !== 0) {
302
+ parts.push(separator);
303
+ }
304
+ parts.push(docs[i]);
305
+ }
306
+ return parts;
307
+ }
308
+ function addAlignmentToDoc(doc, size, tabWidth) {
309
+ assertDoc(doc);
310
+ let aligned = doc;
311
+ if (size > 0) {
312
+ for (let i = 0; i < Math.floor(size / tabWidth); ++i) {
313
+ aligned = indent(aligned);
314
+ }
315
+ aligned = align(size % tabWidth, aligned);
316
+ aligned = align(Number.NEGATIVE_INFINITY, aligned);
317
+ }
318
+ return aligned;
319
+ }
320
+ function label(label2, contents) {
321
+ assertDoc(contents);
322
+ return label2 ? { type: DOC_TYPE_LABEL, label: label2, contents } : contents;
323
+ }
324
+
325
+ // scripts/build/shims/at.js
326
+ var at = (isOptionalObject, object, index) => {
327
+ if (isOptionalObject && (object === void 0 || object === null)) {
328
+ return;
329
+ }
330
+ if (Array.isArray(object) || typeof object === "string") {
331
+ return object[index < 0 ? object.length + index : index];
332
+ }
333
+ return object.at(index);
334
+ };
335
+ var at_default = at;
336
+
337
+ // scripts/build/shims/string-replace-all.js
338
+ var stringReplaceAll = (isOptionalObject, original, pattern, replacement) => {
339
+ if (isOptionalObject && (original === void 0 || original === null)) {
340
+ return;
341
+ }
342
+ if (original.replaceAll) {
343
+ return original.replaceAll(pattern, replacement);
344
+ }
345
+ if (pattern.global) {
346
+ return original.replace(pattern, replacement);
347
+ }
348
+ return original.split(pattern).join(replacement);
349
+ };
350
+ var string_replace_all_default = stringReplaceAll;
351
+
352
+ // src/common/end-of-line.js
353
+ function convertEndOfLineToChars(value) {
354
+ switch (value) {
355
+ case "cr":
356
+ return "\r";
357
+ case "crlf":
358
+ return "\r\n";
359
+ default:
360
+ return "\n";
361
+ }
362
+ }
363
+
364
+ // node_modules/emoji-regex/index.mjs
365
+ var emoji_regex_default = () => {
366
+ 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\u26D3\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](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?|[\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]|\u26F9(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\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])?|[\uDFC3\uDFC4\uDFCA](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDFCB\uDFCC](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\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]|\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-\uDDF5\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]|\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(?:[\uDC08\uDC26](?:\u200D\u2B1B)?|[\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\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD74\uDD90](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?|[\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-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEDC-\uDEDF\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB\uDFF0]|\uDC15(?:\u200D\uD83E\uDDBA)?|\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-\uDDB3\uDDBC\uDDBD])|\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]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF])))?|\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]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\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]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\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]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\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]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE])))?))?|\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-\uDDB3\uDDBC\uDDBD])|\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]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\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]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\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]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\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]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\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]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFE])))?))?|\uDC6F(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDD75(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDE2E(?:\u200D\uD83D\uDCA8)?|\uDE35(?:\u200D\uD83D\uDCAB)?|\uDE36(?:\u200D\uD83C\uDF2B\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\uDD3D\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-\uDE88\uDE90-\uDEBD\uDEBF-\uDEC2\uDECE-\uDEDB\uDEE0-\uDEE8]|\uDD3C(?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF])?|\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-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1))|\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]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\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]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\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]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\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]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\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]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?))?|\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;
367
+ };
368
+
369
+ // node_modules/eastasianwidth/eastasianwidth.js
370
+ var eastasianwidth_default = {
371
+ eastAsianWidth(character) {
372
+ var x = character.charCodeAt(0);
373
+ var y = character.length == 2 ? character.charCodeAt(1) : 0;
374
+ var codePoint = x;
375
+ if (55296 <= x && x <= 56319 && 56320 <= y && y <= 57343) {
376
+ x &= 1023;
377
+ y &= 1023;
378
+ codePoint = x << 10 | y;
379
+ codePoint += 65536;
380
+ }
381
+ if (12288 == codePoint || 65281 <= codePoint && codePoint <= 65376 || 65504 <= codePoint && codePoint <= 65510) {
382
+ return "F";
383
+ }
384
+ if (4352 <= codePoint && codePoint <= 4447 || 4515 <= codePoint && codePoint <= 4519 || 4602 <= codePoint && codePoint <= 4607 || 9001 <= codePoint && codePoint <= 9002 || 11904 <= codePoint && codePoint <= 11929 || 11931 <= codePoint && codePoint <= 12019 || 12032 <= codePoint && codePoint <= 12245 || 12272 <= codePoint && codePoint <= 12283 || 12289 <= codePoint && codePoint <= 12350 || 12353 <= codePoint && codePoint <= 12438 || 12441 <= codePoint && codePoint <= 12543 || 12549 <= codePoint && codePoint <= 12589 || 12593 <= codePoint && codePoint <= 12686 || 12688 <= codePoint && codePoint <= 12730 || 12736 <= codePoint && codePoint <= 12771 || 12784 <= codePoint && codePoint <= 12830 || 12832 <= codePoint && codePoint <= 12871 || 12880 <= codePoint && codePoint <= 13054 || 13056 <= codePoint && codePoint <= 19903 || 19968 <= codePoint && codePoint <= 42124 || 42128 <= codePoint && codePoint <= 42182 || 43360 <= codePoint && codePoint <= 43388 || 44032 <= codePoint && codePoint <= 55203 || 55216 <= codePoint && codePoint <= 55238 || 55243 <= codePoint && codePoint <= 55291 || 63744 <= codePoint && codePoint <= 64255 || 65040 <= codePoint && codePoint <= 65049 || 65072 <= codePoint && codePoint <= 65106 || 65108 <= codePoint && codePoint <= 65126 || 65128 <= codePoint && codePoint <= 65131 || 110592 <= codePoint && codePoint <= 110593 || 127488 <= codePoint && codePoint <= 127490 || 127504 <= codePoint && codePoint <= 127546 || 127552 <= codePoint && codePoint <= 127560 || 127568 <= codePoint && codePoint <= 127569 || 131072 <= codePoint && codePoint <= 194367 || 177984 <= codePoint && codePoint <= 196605 || 196608 <= codePoint && codePoint <= 262141) {
385
+ return "W";
386
+ }
387
+ return "N";
388
+ }
389
+ };
390
+
391
+ // src/utils/get-string-width.js
392
+ var notAsciiRegex = /[^\x20-\x7F]/;
393
+ function getStringWidth(text) {
394
+ if (!text) {
395
+ return 0;
396
+ }
397
+ if (!notAsciiRegex.test(text)) {
398
+ return text.length;
399
+ }
400
+ text = text.replace(emoji_regex_default(), " ");
401
+ let width = 0;
402
+ for (const character of text) {
403
+ const codePoint = character.codePointAt(0);
404
+ if (codePoint <= 31 || codePoint >= 127 && codePoint <= 159) {
405
+ continue;
406
+ }
407
+ if (codePoint >= 768 && codePoint <= 879) {
408
+ continue;
409
+ }
410
+ const code = eastasianwidth_default.eastAsianWidth(character);
411
+ width += code === "F" || code === "W" ? 2 : 1;
412
+ }
413
+ return width;
414
+ }
415
+ var get_string_width_default = getStringWidth;
416
+
417
+ // src/document/utils.js
418
+ var getDocParts = (doc) => {
419
+ if (Array.isArray(doc)) {
420
+ return doc;
421
+ }
422
+ if (doc.type !== DOC_TYPE_FILL) {
423
+ throw new Error(`Expect doc to be 'array' or '${DOC_TYPE_FILL}'.`);
424
+ }
425
+ return doc.parts;
426
+ };
427
+ function mapDoc(doc, cb) {
428
+ if (typeof doc === "string") {
429
+ return cb(doc);
430
+ }
431
+ const mapped = /* @__PURE__ */ new Map();
432
+ return rec(doc);
433
+ function rec(doc2) {
434
+ if (mapped.has(doc2)) {
435
+ return mapped.get(doc2);
436
+ }
437
+ const result = process2(doc2);
438
+ mapped.set(doc2, result);
439
+ return result;
440
+ }
441
+ function process2(doc2) {
442
+ switch (get_doc_type_default(doc2)) {
443
+ case DOC_TYPE_ARRAY:
444
+ return cb(doc2.map(rec));
445
+ case DOC_TYPE_FILL:
446
+ return cb({
447
+ ...doc2,
448
+ parts: doc2.parts.map(rec)
449
+ });
450
+ case DOC_TYPE_IF_BREAK:
451
+ return cb({
452
+ ...doc2,
453
+ breakContents: rec(doc2.breakContents),
454
+ flatContents: rec(doc2.flatContents)
455
+ });
456
+ case DOC_TYPE_GROUP: {
457
+ let {
458
+ expandedStates,
459
+ contents
460
+ } = doc2;
461
+ if (expandedStates) {
462
+ expandedStates = expandedStates.map(rec);
463
+ contents = expandedStates[0];
464
+ } else {
465
+ contents = rec(contents);
307
466
  }
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;
467
+ return cb({
468
+ ...doc2,
469
+ contents,
470
+ expandedStates
471
+ });
322
472
  }
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");
473
+ case DOC_TYPE_ALIGN:
474
+ case DOC_TYPE_INDENT:
475
+ case DOC_TYPE_INDENT_IF_BREAK:
476
+ case DOC_TYPE_LABEL:
477
+ case DOC_TYPE_LINE_SUFFIX:
478
+ return cb({
479
+ ...doc2,
480
+ contents: rec(doc2.contents)
481
+ });
482
+ case DOC_TYPE_STRING:
483
+ case DOC_TYPE_CURSOR:
484
+ case DOC_TYPE_TRIM:
485
+ case DOC_TYPE_LINE_SUFFIX_BOUNDARY:
486
+ case DOC_TYPE_LINE:
487
+ case DOC_TYPE_BREAK_PARENT:
488
+ return cb(doc2);
489
+ default:
490
+ throw new invalid_doc_error_default(doc2);
330
491
  }
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(), "");
492
+ }
493
+ }
494
+ function findInDoc(doc, fn, defaultValue) {
495
+ let result = defaultValue;
496
+ let shouldSkipFurtherProcessing = false;
497
+ function findInDocOnEnterFn(doc2) {
498
+ if (shouldSkipFurtherProcessing) {
499
+ return false;
341
500
  }
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)) {
501
+ const maybeResult = fn(doc2);
502
+ if (maybeResult !== void 0) {
503
+ shouldSkipFurtherProcessing = true;
504
+ result = maybeResult;
505
+ }
506
+ }
507
+ traverse_doc_default(doc, findInDocOnEnterFn);
508
+ return result;
509
+ }
510
+ function willBreakFn(doc) {
511
+ if (doc.type === DOC_TYPE_GROUP && doc.break) {
512
+ return true;
513
+ }
514
+ if (doc.type === DOC_TYPE_LINE && doc.hard) {
515
+ return true;
516
+ }
517
+ if (doc.type === DOC_TYPE_BREAK_PARENT) {
518
+ return true;
519
+ }
520
+ }
521
+ function willBreak(doc) {
522
+ return findInDoc(doc, willBreakFn, false);
523
+ }
524
+ function breakParentGroup(groupStack) {
525
+ if (groupStack.length > 0) {
526
+ const parentGroup = at_default(
527
+ /* isOptionalObject*/
528
+ false,
529
+ groupStack,
530
+ -1
531
+ );
532
+ if (!parentGroup.expandedStates && !parentGroup.break) {
533
+ parentGroup.break = "propagated";
534
+ }
535
+ }
536
+ return null;
537
+ }
538
+ function propagateBreaks(doc) {
539
+ const alreadyVisitedSet = /* @__PURE__ */ new Set();
540
+ const groupStack = [];
541
+ function propagateBreaksOnEnterFn(doc2) {
542
+ if (doc2.type === DOC_TYPE_BREAK_PARENT) {
543
+ breakParentGroup(groupStack);
544
+ }
545
+ if (doc2.type === DOC_TYPE_GROUP) {
546
+ groupStack.push(doc2);
547
+ if (alreadyVisitedSet.has(doc2)) {
350
548
  return false;
351
549
  }
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);
550
+ alreadyVisitedSet.add(doc2);
353
551
  }
354
- var init_is_fullwidth_code_point = __esm({
355
- "node_modules/is-fullwidth-code-point/index.js"() {
356
- init_define_process();
552
+ }
553
+ function propagateBreaksOnExitFn(doc2) {
554
+ if (doc2.type === DOC_TYPE_GROUP) {
555
+ const group2 = groupStack.pop();
556
+ if (group2.break) {
557
+ breakParentGroup(groupStack);
357
558
  }
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
- };
559
+ }
560
+ }
561
+ traverse_doc_default(
562
+ doc,
563
+ propagateBreaksOnEnterFn,
564
+ propagateBreaksOnExitFn,
565
+ /* shouldTraverseConditionalGroups */
566
+ true
567
+ );
568
+ }
569
+ function removeLinesFn(doc) {
570
+ if (doc.type === DOC_TYPE_LINE && !doc.hard) {
571
+ return doc.soft ? "" : " ";
572
+ }
573
+ if (doc.type === DOC_TYPE_IF_BREAK) {
574
+ return doc.flatContents;
575
+ }
576
+ return doc;
577
+ }
578
+ function removeLines(doc) {
579
+ return mapDoc(doc, removeLinesFn);
580
+ }
581
+ function stripTrailingHardlineFromParts(parts) {
582
+ parts = [...parts];
583
+ while (parts.length >= 2 && at_default(
584
+ /* isOptionalObject*/
585
+ false,
586
+ parts,
587
+ -2
588
+ ).type === DOC_TYPE_LINE && at_default(
589
+ /* isOptionalObject*/
590
+ false,
591
+ parts,
592
+ -1
593
+ ).type === DOC_TYPE_BREAK_PARENT) {
594
+ parts.length -= 2;
595
+ }
596
+ if (parts.length > 0) {
597
+ const lastPart = stripTrailingHardlineFromDoc(at_default(
598
+ /* isOptionalObject*/
599
+ false,
600
+ parts,
601
+ -1
602
+ ));
603
+ parts[parts.length - 1] = lastPart;
604
+ }
605
+ return parts;
606
+ }
607
+ function stripTrailingHardlineFromDoc(doc) {
608
+ switch (get_doc_type_default(doc)) {
609
+ case DOC_TYPE_ALIGN:
610
+ case DOC_TYPE_INDENT:
611
+ case DOC_TYPE_INDENT_IF_BREAK:
612
+ case DOC_TYPE_GROUP:
613
+ case DOC_TYPE_LINE_SUFFIX:
614
+ case DOC_TYPE_LABEL: {
615
+ const contents = stripTrailingHardlineFromDoc(doc.contents);
616
+ return {
617
+ ...doc,
618
+ contents
619
+ };
620
+ }
621
+ case DOC_TYPE_IF_BREAK:
622
+ return {
623
+ ...doc,
624
+ breakContents: stripTrailingHardlineFromDoc(doc.breakContents),
625
+ flatContents: stripTrailingHardlineFromDoc(doc.flatContents)
626
+ };
627
+ case DOC_TYPE_FILL:
628
+ return {
629
+ ...doc,
630
+ parts: stripTrailingHardlineFromParts(doc.parts)
631
+ };
632
+ case DOC_TYPE_ARRAY:
633
+ return stripTrailingHardlineFromParts(doc);
634
+ case DOC_TYPE_STRING:
635
+ return doc.replace(/[\n\r]*$/, "");
636
+ case DOC_TYPE_CURSOR:
637
+ case DOC_TYPE_TRIM:
638
+ case DOC_TYPE_LINE_SUFFIX_BOUNDARY:
639
+ case DOC_TYPE_LINE:
640
+ case DOC_TYPE_BREAK_PARENT:
641
+ break;
642
+ default:
643
+ throw new invalid_doc_error_default(doc);
644
+ }
645
+ return doc;
646
+ }
647
+ function stripTrailingHardline(doc) {
648
+ return stripTrailingHardlineFromDoc(cleanDoc(doc));
649
+ }
650
+ function cleanDocFn(doc) {
651
+ switch (get_doc_type_default(doc)) {
652
+ case DOC_TYPE_FILL:
653
+ if (doc.parts.every((part) => part === "")) {
654
+ return "";
366
655
  }
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;
656
+ break;
657
+ case DOC_TYPE_GROUP:
658
+ if (!doc.contents && !doc.id && !doc.break && !doc.expandedStates) {
659
+ return "";
375
660
  }
376
- string = stripAnsi(string);
377
- if (string.length === 0) {
378
- return 0;
661
+ if (doc.contents.type === DOC_TYPE_GROUP && doc.contents.id === doc.id && doc.contents.break === doc.break && doc.contents.expandedStates === doc.expandedStates) {
662
+ return doc.contents;
379
663
  }
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) {
664
+ break;
665
+ case DOC_TYPE_ALIGN:
666
+ case DOC_TYPE_INDENT:
667
+ case DOC_TYPE_INDENT_IF_BREAK:
668
+ case DOC_TYPE_LINE_SUFFIX:
669
+ if (!doc.contents) {
670
+ return "";
671
+ }
672
+ break;
673
+ case DOC_TYPE_IF_BREAK:
674
+ if (!doc.flatContents && !doc.breakContents) {
675
+ return "";
676
+ }
677
+ break;
678
+ case DOC_TYPE_ARRAY: {
679
+ const parts = [];
680
+ for (const part of doc) {
681
+ if (!part) {
388
682
  continue;
389
683
  }
390
- if (codePoint > 65535) {
391
- index++;
684
+ const [currentPart, ...restParts] = Array.isArray(part) ? part : [part];
685
+ if (typeof currentPart === "string" && typeof at_default(
686
+ /* isOptionalObject*/
687
+ false,
688
+ parts,
689
+ -1
690
+ ) === "string") {
691
+ parts[parts.length - 1] += currentPart;
692
+ } else {
693
+ parts.push(currentPart);
392
694
  }
393
- width += isFullwidthCodePoint(codePoint) ? 2 : 1;
695
+ parts.push(...restParts);
394
696
  }
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());
697
+ if (parts.length === 0) {
698
+ return "";
404
699
  }
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;
700
+ if (parts.length === 1) {
701
+ return parts[0];
422
702
  }
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;
703
+ return parts;
704
+ }
705
+ case DOC_TYPE_STRING:
706
+ case DOC_TYPE_CURSOR:
707
+ case DOC_TYPE_TRIM:
708
+ case DOC_TYPE_LINE_SUFFIX_BOUNDARY:
709
+ case DOC_TYPE_LINE:
710
+ case DOC_TYPE_LABEL:
711
+ case DOC_TYPE_BREAK_PARENT:
712
+ break;
713
+ default:
714
+ throw new invalid_doc_error_default(doc);
715
+ }
716
+ return doc;
717
+ }
718
+ function cleanDoc(doc) {
719
+ return mapDoc(doc, (currentDoc) => cleanDocFn(currentDoc));
720
+ }
721
+ function replaceEndOfLine(doc, replacement = literalline) {
722
+ return mapDoc(doc, (currentDoc) => typeof currentDoc === "string" ? join(replacement, currentDoc.split("\n")) : currentDoc);
723
+ }
724
+ function canBreakFn(doc) {
725
+ if (doc.type === DOC_TYPE_LINE) {
726
+ return true;
727
+ }
728
+ }
729
+ function canBreak(doc) {
730
+ return findInDoc(doc, canBreakFn, false);
731
+ }
732
+
733
+ // src/document/printer.js
734
+ var MODE_BREAK = Symbol("MODE_BREAK");
735
+ var MODE_FLAT = Symbol("MODE_FLAT");
736
+ var CURSOR_PLACEHOLDER = Symbol("cursor");
737
+ function rootIndent() {
738
+ return {
739
+ value: "",
740
+ length: 0,
741
+ queue: []
742
+ };
743
+ }
744
+ function makeIndent(ind, options) {
745
+ return generateInd(ind, {
746
+ type: "indent"
747
+ }, options);
748
+ }
749
+ function makeAlign(indent2, widthOrDoc, options) {
750
+ if (widthOrDoc === Number.NEGATIVE_INFINITY) {
751
+ return indent2.root || rootIndent();
752
+ }
753
+ if (widthOrDoc < 0) {
754
+ return generateInd(indent2, {
755
+ type: "dedent"
756
+ }, options);
757
+ }
758
+ if (!widthOrDoc) {
759
+ return indent2;
760
+ }
761
+ if (widthOrDoc.type === "root") {
762
+ return {
763
+ ...indent2,
764
+ root: indent2
765
+ };
766
+ }
767
+ const alignType = typeof widthOrDoc === "string" ? "stringAlign" : "numberAlign";
768
+ return generateInd(indent2, {
769
+ type: alignType,
770
+ n: widthOrDoc
771
+ }, options);
772
+ }
773
+ function generateInd(ind, newPart, options) {
774
+ const queue = newPart.type === "dedent" ? ind.queue.slice(0, -1) : [...ind.queue, newPart];
775
+ let value = "";
776
+ let length = 0;
777
+ let lastTabs = 0;
778
+ let lastSpaces = 0;
779
+ for (const part of queue) {
780
+ switch (part.type) {
781
+ case "indent":
782
+ flush();
783
+ if (options.useTabs) {
784
+ addTabs(1);
785
+ } else {
786
+ addSpaces(options.tabWidth);
644
787
  }
645
- function stripTrailingHardline(doc) {
646
- return stripDocTrailingHardlineFromDoc(cleanDoc(doc));
788
+ break;
789
+ case "stringAlign":
790
+ flush();
791
+ value += part.n;
792
+ length += part.n.length;
793
+ break;
794
+ case "numberAlign":
795
+ lastTabs += 1;
796
+ lastSpaces += part.n;
797
+ break;
798
+ default:
799
+ throw new Error(`Unexpected type '${part.type}'`);
800
+ }
801
+ }
802
+ flushSpaces();
803
+ return {
804
+ ...ind,
805
+ value,
806
+ length,
807
+ queue
808
+ };
809
+ function addTabs(count) {
810
+ value += " ".repeat(count);
811
+ length += options.tabWidth * count;
812
+ }
813
+ function addSpaces(count) {
814
+ value += " ".repeat(count);
815
+ length += count;
816
+ }
817
+ function flush() {
818
+ if (options.useTabs) {
819
+ flushTabs();
820
+ } else {
821
+ flushSpaces();
822
+ }
823
+ }
824
+ function flushTabs() {
825
+ if (lastTabs > 0) {
826
+ addTabs(lastTabs);
827
+ }
828
+ resetLast();
829
+ }
830
+ function flushSpaces() {
831
+ if (lastSpaces > 0) {
832
+ addSpaces(lastSpaces);
833
+ }
834
+ resetLast();
835
+ }
836
+ function resetLast() {
837
+ lastTabs = 0;
838
+ lastSpaces = 0;
839
+ }
840
+ }
841
+ function trim2(out) {
842
+ let trimCount = 0;
843
+ let cursorCount = 0;
844
+ let outIndex = out.length;
845
+ outer:
846
+ while (outIndex--) {
847
+ const last = out[outIndex];
848
+ if (last === CURSOR_PLACEHOLDER) {
849
+ cursorCount++;
850
+ continue;
851
+ }
852
+ if (false) {
853
+ throw new Error(`Unexpected value in trim: '${typeof last}'`);
854
+ }
855
+ for (let charIndex = last.length - 1; charIndex >= 0; charIndex--) {
856
+ const char = last[charIndex];
857
+ if (char === " " || char === " ") {
858
+ trimCount++;
859
+ } else {
860
+ out[outIndex] = last.slice(0, charIndex + 1);
861
+ break outer;
647
862
  }
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
863
+ }
864
+ }
865
+ if (trimCount > 0 || cursorCount > 0) {
866
+ out.length = outIndex + 1;
867
+ while (cursorCount-- > 0) {
868
+ out.push(CURSOR_PLACEHOLDER);
869
+ }
870
+ }
871
+ return trimCount;
872
+ }
873
+ function fits(next, restCommands, width, hasLineSuffix, groupModeMap, mustBeFlat) {
874
+ if (width === Number.POSITIVE_INFINITY) {
875
+ return true;
876
+ }
877
+ let restIdx = restCommands.length;
878
+ const cmds = [next];
879
+ const out = [];
880
+ while (width >= 0) {
881
+ if (cmds.length === 0) {
882
+ if (restIdx === 0) {
883
+ return true;
884
+ }
885
+ cmds.push(restCommands[--restIdx]);
886
+ continue;
887
+ }
888
+ const {
889
+ mode,
890
+ doc
891
+ } = cmds.pop();
892
+ switch (get_doc_type_default(doc)) {
893
+ case DOC_TYPE_STRING:
894
+ out.push(doc);
895
+ width -= get_string_width_default(doc);
896
+ break;
897
+ case DOC_TYPE_ARRAY:
898
+ case DOC_TYPE_FILL: {
899
+ const parts = getDocParts(doc);
900
+ for (let i = parts.length - 1; i >= 0; i--) {
901
+ cmds.push({
902
+ mode,
903
+ doc: parts[i]
701
904
  });
702
905
  }
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;
906
+ break;
907
+ }
908
+ case DOC_TYPE_INDENT:
909
+ case DOC_TYPE_ALIGN:
910
+ case DOC_TYPE_INDENT_IF_BREAK:
911
+ case DOC_TYPE_LABEL:
912
+ cmds.push({
913
+ mode,
914
+ doc: doc.contents
915
+ });
916
+ break;
917
+ case DOC_TYPE_TRIM:
918
+ width += trim2(out);
919
+ break;
920
+ case DOC_TYPE_GROUP: {
921
+ if (mustBeFlat && doc.break) {
922
+ return false;
725
923
  }
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
- });
924
+ const groupMode = doc.break ? MODE_BREAK : mode;
925
+ const contents = doc.expandedStates && groupMode === MODE_BREAK ? at_default(
926
+ /* isOptionalObject*/
927
+ false,
928
+ doc.expandedStates,
929
+ -1
930
+ ) : doc.contents;
931
+ cmds.push({
932
+ mode: groupMode,
933
+ doc: contents
934
+ });
935
+ break;
936
+ }
937
+ case DOC_TYPE_IF_BREAK: {
938
+ const groupMode = doc.groupId ? groupModeMap[doc.groupId] || MODE_FLAT : mode;
939
+ const contents = groupMode === MODE_BREAK ? doc.breakContents : doc.flatContents;
940
+ if (contents) {
941
+ cmds.push({
942
+ mode,
943
+ doc: contents
737
944
  });
738
945
  }
739
- function replaceEndOfLine(doc) {
740
- return mapDoc(doc, (currentDoc) => typeof currentDoc === "string" && currentDoc.includes("\n") ? replaceTextEndOfLine(currentDoc) : currentDoc);
946
+ break;
947
+ }
948
+ case DOC_TYPE_LINE:
949
+ if (mode === MODE_BREAK || doc.hard) {
950
+ return true;
741
951
  }
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;
952
+ if (!doc.soft) {
953
+ out.push(" ");
954
+ width--;
745
955
  }
746
- function canBreakFn(doc) {
747
- if (doc.type === "line") {
748
- return true;
749
- }
956
+ break;
957
+ case DOC_TYPE_LINE_SUFFIX:
958
+ hasLineSuffix = true;
959
+ break;
960
+ case DOC_TYPE_LINE_SUFFIX_BOUNDARY:
961
+ if (hasLineSuffix) {
962
+ return false;
750
963
  }
751
- function canBreak(doc) {
752
- return findInDoc(doc, canBreakFn, false);
964
+ break;
965
+ }
966
+ }
967
+ return false;
968
+ }
969
+ function printDocToString(doc, options) {
970
+ const groupModeMap = {};
971
+ const width = options.printWidth;
972
+ const newLine = convertEndOfLineToChars(options.endOfLine);
973
+ let pos = 0;
974
+ const cmds = [{
975
+ ind: rootIndent(),
976
+ mode: MODE_BREAK,
977
+ doc
978
+ }];
979
+ const out = [];
980
+ let shouldRemeasure = false;
981
+ const lineSuffix2 = [];
982
+ let printedCursorCount = 0;
983
+ propagateBreaks(doc);
984
+ while (cmds.length > 0) {
985
+ const {
986
+ ind,
987
+ mode,
988
+ doc: doc2
989
+ } = cmds.pop();
990
+ switch (get_doc_type_default(doc2)) {
991
+ case DOC_TYPE_STRING: {
992
+ const formatted = newLine !== "\n" ? string_replace_all_default(
993
+ /* isOptionalObject*/
994
+ false,
995
+ doc2,
996
+ "\n",
997
+ newLine
998
+ ) : doc2;
999
+ out.push(formatted);
1000
+ if (cmds.length > 0) {
1001
+ pos += get_string_width_default(formatted);
753
1002
  }
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
- };
1003
+ break;
771
1004
  }
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
1005
+ case DOC_TYPE_ARRAY:
1006
+ for (let i = doc2.length - 1; i >= 0; i--) {
1007
+ cmds.push({
1008
+ ind,
1009
+ mode,
1010
+ doc: doc2[i]
863
1011
  });
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
1012
  }
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;
1013
+ break;
1014
+ case DOC_TYPE_CURSOR:
1015
+ if (printedCursorCount >= 2) {
1016
+ throw new Error("There are too many 'cursor' in doc.");
910
1017
  }
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
- }
1018
+ out.push(CURSOR_PLACEHOLDER);
1019
+ printedCursorCount++;
1020
+ break;
1021
+ case DOC_TYPE_INDENT:
1022
+ cmds.push({
1023
+ ind: makeIndent(ind, options),
1024
+ mode,
1025
+ doc: doc2.contents
1026
+ });
1027
+ break;
1028
+ case DOC_TYPE_ALIGN:
1029
+ cmds.push({
1030
+ ind: makeAlign(ind, doc2.n, options),
1031
+ mode,
1032
+ doc: doc2.contents
1033
+ });
1034
+ break;
1035
+ case DOC_TYPE_TRIM:
1036
+ pos -= trim2(out);
1037
+ break;
1038
+ case DOC_TYPE_GROUP:
1039
+ switch (mode) {
1040
+ case MODE_FLAT:
1041
+ if (!shouldRemeasure) {
1042
+ cmds.push({
1043
+ ind,
1044
+ mode: doc2.break ? MODE_BREAK : MODE_FLAT,
1045
+ doc: doc2.contents
1046
+ });
1047
+ break;
1004
1048
  }
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
- }
1049
+ case MODE_BREAK: {
1050
+ shouldRemeasure = false;
1051
+ const next = {
1052
+ ind,
1053
+ mode: MODE_FLAT,
1054
+ doc: doc2.contents
1055
+ };
1056
+ const rem = width - pos;
1057
+ const hasLineSuffix = lineSuffix2.length > 0;
1058
+ if (!doc2.break && fits(next, cmds, rem, hasLineSuffix, groupModeMap)) {
1059
+ cmds.push(next);
1028
1060
  } 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);
1061
+ if (doc2.expandedStates) {
1062
+ const mostExpanded = at_default(
1063
+ /* isOptionalObject*/
1064
+ false,
1065
+ doc2.expandedStates,
1066
+ -1
1067
+ );
1068
+ if (doc2.break) {
1069
+ cmds.push({
1070
+ ind,
1071
+ mode: MODE_BREAK,
1072
+ doc: mostExpanded
1073
+ });
1041
1074
  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
- }
1075
+ } else {
1076
+ for (let i = 1; i < doc2.expandedStates.length + 1; i++) {
1077
+ if (i >= doc2.expandedStates.length) {
1078
+ cmds.push({
1079
+ ind,
1080
+ mode: MODE_BREAK,
1081
+ doc: mostExpanded
1082
+ });
1081
1083
  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
1084
  } 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 = [];
1085
+ const state = doc2.expandedStates[i];
1086
+ const cmd = {
1087
+ ind,
1088
+ mode: MODE_FLAT,
1089
+ doc: state
1090
+ };
1091
+ if (fits(cmd, cmds, rem, hasLineSuffix, groupModeMap)) {
1092
+ cmds.push(cmd);
1176
1093
  break;
1177
1094
  }
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;
1095
+ }
1192
1096
  }
1193
- break;
1194
- case "label":
1195
- cmds.push([ind, mode, doc2.contents]);
1196
- break;
1197
- default:
1097
+ }
1098
+ } else {
1099
+ cmds.push({
1100
+ ind,
1101
+ mode: MODE_BREAK,
1102
+ doc: doc2.contents
1103
+ });
1198
1104
  }
1199
1105
  }
1200
- if (cmds.length === 0 && lineSuffix.length > 0) {
1201
- cmds.push(...lineSuffix.reverse());
1202
- lineSuffix = [];
1203
- }
1106
+ break;
1204
1107
  }
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
1108
  }
1221
- module2.exports = {
1222
- printDocToString
1109
+ if (doc2.id) {
1110
+ groupModeMap[doc2.id] = at_default(
1111
+ /* isOptionalObject*/
1112
+ false,
1113
+ cmds,
1114
+ -1
1115
+ ).mode;
1116
+ }
1117
+ break;
1118
+ case DOC_TYPE_FILL: {
1119
+ const rem = width - pos;
1120
+ const {
1121
+ parts
1122
+ } = doc2;
1123
+ if (parts.length === 0) {
1124
+ break;
1125
+ }
1126
+ const [content, whitespace] = parts;
1127
+ const contentFlatCmd = {
1128
+ ind,
1129
+ mode: MODE_FLAT,
1130
+ doc: content
1223
1131
  };
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
- };
1132
+ const contentBreakCmd = {
1133
+ ind,
1134
+ mode: MODE_BREAK,
1135
+ doc: content
1136
+ };
1137
+ const contentFits = fits(contentFlatCmd, [], rem, lineSuffix2.length > 0, groupModeMap, true);
1138
+ if (parts.length === 1) {
1139
+ if (contentFits) {
1140
+ cmds.push(contentFlatCmd);
1141
+ } else {
1142
+ cmds.push(contentBreakCmd);
1254
1143
  }
1255
- if (doc.type === "if-break") {
1256
- return Object.assign(Object.assign({}, doc), {}, {
1257
- breakContents: flattenDoc(doc.breakContents),
1258
- flatContents: flattenDoc(doc.flatContents)
1259
- });
1144
+ break;
1145
+ }
1146
+ const whitespaceFlatCmd = {
1147
+ ind,
1148
+ mode: MODE_FLAT,
1149
+ doc: whitespace
1150
+ };
1151
+ const whitespaceBreakCmd = {
1152
+ ind,
1153
+ mode: MODE_BREAK,
1154
+ doc: whitespace
1155
+ };
1156
+ if (parts.length === 2) {
1157
+ if (contentFits) {
1158
+ cmds.push(whitespaceFlatCmd, contentFlatCmd);
1159
+ } else {
1160
+ cmds.push(whitespaceBreakCmd, contentBreakCmd);
1260
1161
  }
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)
1162
+ break;
1163
+ }
1164
+ parts.splice(0, 2);
1165
+ const remainingCmd = {
1166
+ ind,
1167
+ mode,
1168
+ doc: fill(parts)
1169
+ };
1170
+ const secondContent = parts[0];
1171
+ const firstAndSecondContentFlatCmd = {
1172
+ ind,
1173
+ mode: MODE_FLAT,
1174
+ doc: [content, whitespace, secondContent]
1175
+ };
1176
+ const firstAndSecondContentFits = fits(firstAndSecondContentFlatCmd, [], rem, lineSuffix2.length > 0, groupModeMap, true);
1177
+ if (firstAndSecondContentFits) {
1178
+ cmds.push(remainingCmd, whitespaceFlatCmd, contentFlatCmd);
1179
+ } else if (contentFits) {
1180
+ cmds.push(remainingCmd, whitespaceBreakCmd, contentFlatCmd);
1181
+ } else {
1182
+ cmds.push(remainingCmd, whitespaceBreakCmd, contentBreakCmd);
1183
+ }
1184
+ break;
1185
+ }
1186
+ case DOC_TYPE_IF_BREAK:
1187
+ case DOC_TYPE_INDENT_IF_BREAK: {
1188
+ const groupMode = doc2.groupId ? groupModeMap[doc2.groupId] : mode;
1189
+ if (groupMode === MODE_BREAK) {
1190
+ const breakContents = doc2.type === DOC_TYPE_IF_BREAK ? doc2.breakContents : doc2.negate ? doc2.contents : indent(doc2.contents);
1191
+ if (breakContents) {
1192
+ cmds.push({
1193
+ ind,
1194
+ mode,
1195
+ doc: breakContents
1265
1196
  });
1266
1197
  }
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)
1198
+ }
1199
+ if (groupMode === MODE_FLAT) {
1200
+ const flatContents = doc2.type === DOC_TYPE_IF_BREAK ? doc2.flatContents : doc2.negate ? indent(doc2.contents) : doc2.contents;
1201
+ if (flatContents) {
1202
+ cmds.push({
1203
+ ind,
1204
+ mode,
1205
+ doc: flatContents
1276
1206
  });
1277
1207
  }
1278
- return doc;
1279
1208
  }
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, ")");
1209
+ break;
1210
+ }
1211
+ case DOC_TYPE_LINE_SUFFIX:
1212
+ lineSuffix2.push({
1213
+ ind,
1214
+ mode,
1215
+ doc: doc2.contents
1216
+ });
1217
+ break;
1218
+ case DOC_TYPE_LINE_SUFFIX_BOUNDARY:
1219
+ if (lineSuffix2.length > 0) {
1220
+ cmds.push({
1221
+ ind,
1222
+ mode,
1223
+ doc: hardlineWithoutBreakParent
1224
+ });
1225
+ }
1226
+ break;
1227
+ case DOC_TYPE_LINE:
1228
+ switch (mode) {
1229
+ case MODE_FLAT:
1230
+ if (!doc2.hard) {
1231
+ if (!doc2.soft) {
1232
+ out.push(" ");
1233
+ pos += 1;
1343
1234
  }
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));
1235
+ break;
1236
+ } else {
1237
+ shouldRemeasure = true;
1363
1238
  }
1364
- if (id in printedSymbols) {
1365
- return printedSymbols[id];
1239
+ case MODE_BREAK:
1240
+ if (lineSuffix2.length > 0) {
1241
+ cmds.push({
1242
+ ind,
1243
+ mode,
1244
+ doc: doc2
1245
+ }, ...lineSuffix2.reverse());
1246
+ lineSuffix2.length = 0;
1247
+ break;
1366
1248
  }
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), ")");
1249
+ if (doc2.literal) {
1250
+ if (ind.root) {
1251
+ out.push(newLine, ind.root.value);
1252
+ pos = ind.root.length;
1253
+ } else {
1254
+ out.push(newLine);
1255
+ pos = 0;
1373
1256
  }
1257
+ } else {
1258
+ pos -= trim2(out);
1259
+ out.push(newLine + ind.value);
1260
+ pos = ind.length;
1374
1261
  }
1375
- }
1262
+ break;
1376
1263
  }
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()
1264
+ break;
1265
+ case DOC_TYPE_LABEL:
1266
+ cmds.push({
1267
+ ind,
1268
+ mode,
1269
+ doc: doc2.contents
1270
+ });
1271
+ break;
1272
+ case DOC_TYPE_BREAK_PARENT:
1273
+ break;
1274
+ default:
1275
+ throw new invalid_doc_error_default(doc2);
1276
+ }
1277
+ if (cmds.length === 0 && lineSuffix2.length > 0) {
1278
+ cmds.push(...lineSuffix2.reverse());
1279
+ lineSuffix2.length = 0;
1280
+ }
1281
+ }
1282
+ const cursorPlaceholderIndex = out.indexOf(CURSOR_PLACEHOLDER);
1283
+ if (cursorPlaceholderIndex !== -1) {
1284
+ const otherCursorPlaceholderIndex = out.indexOf(CURSOR_PLACEHOLDER, cursorPlaceholderIndex + 1);
1285
+ const beforeCursor = out.slice(0, cursorPlaceholderIndex).join("");
1286
+ const aroundCursor = out.slice(cursorPlaceholderIndex + 1, otherCursorPlaceholderIndex).join("");
1287
+ const afterCursor = out.slice(otherCursorPlaceholderIndex + 1).join("");
1288
+ return {
1289
+ formatted: beforeCursor + aroundCursor + afterCursor,
1290
+ cursorNodeStart: beforeCursor.length,
1291
+ cursorNodeText: aroundCursor
1388
1292
  };
1389
1293
  }
1390
- });
1391
- return require_doc_js_umd();
1294
+ return {
1295
+ formatted: out.join("")
1296
+ };
1297
+ }
1298
+
1299
+ // src/document/public.js
1300
+ var builders = {
1301
+ join,
1302
+ line,
1303
+ softline,
1304
+ hardline,
1305
+ literalline,
1306
+ group,
1307
+ conditionalGroup,
1308
+ fill,
1309
+ lineSuffix,
1310
+ lineSuffixBoundary,
1311
+ cursor,
1312
+ breakParent,
1313
+ ifBreak,
1314
+ trim,
1315
+ indent,
1316
+ indentIfBreak,
1317
+ align,
1318
+ addAlignmentToDoc,
1319
+ markAsRoot,
1320
+ dedentToRoot,
1321
+ dedent,
1322
+ hardlineWithoutBreakParent,
1323
+ literallineWithoutBreakParent,
1324
+ label,
1325
+ // TODO: Remove this in v4
1326
+ concat: (parts) => parts
1327
+ };
1328
+ var printer = { printDocToString };
1329
+ var utils = {
1330
+ willBreak,
1331
+ traverseDoc: traverse_doc_default,
1332
+ findInDoc,
1333
+ mapDoc,
1334
+ removeLines,
1335
+ stripTrailingHardline,
1336
+ replaceEndOfLine,
1337
+ canBreak
1338
+ };
1339
+ return __toCommonJS(public_exports);
1392
1340
  });