prettier 3.2.1 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
  });