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