@better-webhook/cli 3.8.0 → 3.10.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 (59) hide show
  1. package/LICENSE +0 -1
  2. package/dist/_binary_entry.js +29 -0
  3. package/dist/commands/capture.d.ts +2 -0
  4. package/dist/commands/capture.js +33 -0
  5. package/dist/commands/captures.d.ts +2 -0
  6. package/dist/commands/captures.js +316 -0
  7. package/dist/commands/dashboard.d.ts +2 -0
  8. package/dist/commands/dashboard.js +70 -0
  9. package/dist/commands/index.d.ts +6 -0
  10. package/dist/commands/index.js +6 -0
  11. package/dist/commands/replay.d.ts +2 -0
  12. package/dist/commands/replay.js +140 -0
  13. package/dist/commands/run.d.ts +2 -0
  14. package/dist/commands/run.js +182 -0
  15. package/dist/commands/templates.d.ts +2 -0
  16. package/dist/commands/templates.js +285 -0
  17. package/dist/core/capture-server.d.ts +37 -0
  18. package/dist/core/capture-server.js +400 -0
  19. package/dist/core/capture-server.test.d.ts +1 -0
  20. package/dist/core/capture-server.test.js +86 -0
  21. package/dist/core/cli-version.d.ts +1 -0
  22. package/dist/core/cli-version.js +30 -0
  23. package/dist/core/cli-version.test.d.ts +1 -0
  24. package/dist/core/cli-version.test.js +42 -0
  25. package/dist/core/dashboard-api.d.ts +8 -0
  26. package/dist/core/dashboard-api.js +333 -0
  27. package/dist/core/dashboard-server.d.ts +24 -0
  28. package/dist/core/dashboard-server.js +224 -0
  29. package/dist/core/debug-output.d.ts +3 -0
  30. package/dist/core/debug-output.js +69 -0
  31. package/dist/core/debug-verify.d.ts +25 -0
  32. package/dist/core/debug-verify.js +253 -0
  33. package/dist/core/executor.d.ts +11 -0
  34. package/dist/core/executor.js +152 -0
  35. package/dist/core/index.d.ts +5 -0
  36. package/dist/core/index.js +5 -0
  37. package/dist/core/replay-engine.d.ts +20 -0
  38. package/dist/core/replay-engine.js +293 -0
  39. package/dist/core/replay-engine.test.d.ts +1 -0
  40. package/dist/core/replay-engine.test.js +482 -0
  41. package/dist/core/runtime-paths.d.ts +2 -0
  42. package/dist/core/runtime-paths.js +65 -0
  43. package/dist/core/runtime-paths.test.d.ts +1 -0
  44. package/dist/core/runtime-paths.test.js +50 -0
  45. package/dist/core/signature.d.ts +25 -0
  46. package/dist/core/signature.js +224 -0
  47. package/dist/core/signature.test.d.ts +1 -0
  48. package/dist/core/signature.test.js +38 -0
  49. package/dist/core/template-manager.d.ts +33 -0
  50. package/dist/core/template-manager.js +313 -0
  51. package/dist/core/template-manager.test.d.ts +1 -0
  52. package/dist/core/template-manager.test.js +236 -0
  53. package/dist/index.cjs +3472 -262
  54. package/dist/index.d.cts +2 -1
  55. package/dist/index.d.ts +2 -1
  56. package/dist/index.js +3509 -276
  57. package/dist/types/index.d.ts +312 -0
  58. package/dist/types/index.js +87 -0
  59. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -1,22 +1,3140 @@
1
1
  #!/usr/bin/env node
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __commonJS = (cb, mod) => function __require() {
9
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+
28
+ // ../../node_modules/.pnpm/cli-spinners@2.9.2/node_modules/cli-spinners/spinners.json
29
+ var require_spinners = __commonJS({
30
+ "../../node_modules/.pnpm/cli-spinners@2.9.2/node_modules/cli-spinners/spinners.json"(exports, module) {
31
+ module.exports = {
32
+ dots: {
33
+ interval: 80,
34
+ frames: [
35
+ "\u280B",
36
+ "\u2819",
37
+ "\u2839",
38
+ "\u2838",
39
+ "\u283C",
40
+ "\u2834",
41
+ "\u2826",
42
+ "\u2827",
43
+ "\u2807",
44
+ "\u280F"
45
+ ]
46
+ },
47
+ dots2: {
48
+ interval: 80,
49
+ frames: [
50
+ "\u28FE",
51
+ "\u28FD",
52
+ "\u28FB",
53
+ "\u28BF",
54
+ "\u287F",
55
+ "\u28DF",
56
+ "\u28EF",
57
+ "\u28F7"
58
+ ]
59
+ },
60
+ dots3: {
61
+ interval: 80,
62
+ frames: [
63
+ "\u280B",
64
+ "\u2819",
65
+ "\u281A",
66
+ "\u281E",
67
+ "\u2816",
68
+ "\u2826",
69
+ "\u2834",
70
+ "\u2832",
71
+ "\u2833",
72
+ "\u2813"
73
+ ]
74
+ },
75
+ dots4: {
76
+ interval: 80,
77
+ frames: [
78
+ "\u2804",
79
+ "\u2806",
80
+ "\u2807",
81
+ "\u280B",
82
+ "\u2819",
83
+ "\u2838",
84
+ "\u2830",
85
+ "\u2820",
86
+ "\u2830",
87
+ "\u2838",
88
+ "\u2819",
89
+ "\u280B",
90
+ "\u2807",
91
+ "\u2806"
92
+ ]
93
+ },
94
+ dots5: {
95
+ interval: 80,
96
+ frames: [
97
+ "\u280B",
98
+ "\u2819",
99
+ "\u281A",
100
+ "\u2812",
101
+ "\u2802",
102
+ "\u2802",
103
+ "\u2812",
104
+ "\u2832",
105
+ "\u2834",
106
+ "\u2826",
107
+ "\u2816",
108
+ "\u2812",
109
+ "\u2810",
110
+ "\u2810",
111
+ "\u2812",
112
+ "\u2813",
113
+ "\u280B"
114
+ ]
115
+ },
116
+ dots6: {
117
+ interval: 80,
118
+ frames: [
119
+ "\u2801",
120
+ "\u2809",
121
+ "\u2819",
122
+ "\u281A",
123
+ "\u2812",
124
+ "\u2802",
125
+ "\u2802",
126
+ "\u2812",
127
+ "\u2832",
128
+ "\u2834",
129
+ "\u2824",
130
+ "\u2804",
131
+ "\u2804",
132
+ "\u2824",
133
+ "\u2834",
134
+ "\u2832",
135
+ "\u2812",
136
+ "\u2802",
137
+ "\u2802",
138
+ "\u2812",
139
+ "\u281A",
140
+ "\u2819",
141
+ "\u2809",
142
+ "\u2801"
143
+ ]
144
+ },
145
+ dots7: {
146
+ interval: 80,
147
+ frames: [
148
+ "\u2808",
149
+ "\u2809",
150
+ "\u280B",
151
+ "\u2813",
152
+ "\u2812",
153
+ "\u2810",
154
+ "\u2810",
155
+ "\u2812",
156
+ "\u2816",
157
+ "\u2826",
158
+ "\u2824",
159
+ "\u2820",
160
+ "\u2820",
161
+ "\u2824",
162
+ "\u2826",
163
+ "\u2816",
164
+ "\u2812",
165
+ "\u2810",
166
+ "\u2810",
167
+ "\u2812",
168
+ "\u2813",
169
+ "\u280B",
170
+ "\u2809",
171
+ "\u2808"
172
+ ]
173
+ },
174
+ dots8: {
175
+ interval: 80,
176
+ frames: [
177
+ "\u2801",
178
+ "\u2801",
179
+ "\u2809",
180
+ "\u2819",
181
+ "\u281A",
182
+ "\u2812",
183
+ "\u2802",
184
+ "\u2802",
185
+ "\u2812",
186
+ "\u2832",
187
+ "\u2834",
188
+ "\u2824",
189
+ "\u2804",
190
+ "\u2804",
191
+ "\u2824",
192
+ "\u2820",
193
+ "\u2820",
194
+ "\u2824",
195
+ "\u2826",
196
+ "\u2816",
197
+ "\u2812",
198
+ "\u2810",
199
+ "\u2810",
200
+ "\u2812",
201
+ "\u2813",
202
+ "\u280B",
203
+ "\u2809",
204
+ "\u2808",
205
+ "\u2808"
206
+ ]
207
+ },
208
+ dots9: {
209
+ interval: 80,
210
+ frames: [
211
+ "\u28B9",
212
+ "\u28BA",
213
+ "\u28BC",
214
+ "\u28F8",
215
+ "\u28C7",
216
+ "\u2867",
217
+ "\u2857",
218
+ "\u284F"
219
+ ]
220
+ },
221
+ dots10: {
222
+ interval: 80,
223
+ frames: [
224
+ "\u2884",
225
+ "\u2882",
226
+ "\u2881",
227
+ "\u2841",
228
+ "\u2848",
229
+ "\u2850",
230
+ "\u2860"
231
+ ]
232
+ },
233
+ dots11: {
234
+ interval: 100,
235
+ frames: [
236
+ "\u2801",
237
+ "\u2802",
238
+ "\u2804",
239
+ "\u2840",
240
+ "\u2880",
241
+ "\u2820",
242
+ "\u2810",
243
+ "\u2808"
244
+ ]
245
+ },
246
+ dots12: {
247
+ interval: 80,
248
+ frames: [
249
+ "\u2880\u2800",
250
+ "\u2840\u2800",
251
+ "\u2804\u2800",
252
+ "\u2882\u2800",
253
+ "\u2842\u2800",
254
+ "\u2805\u2800",
255
+ "\u2883\u2800",
256
+ "\u2843\u2800",
257
+ "\u280D\u2800",
258
+ "\u288B\u2800",
259
+ "\u284B\u2800",
260
+ "\u280D\u2801",
261
+ "\u288B\u2801",
262
+ "\u284B\u2801",
263
+ "\u280D\u2809",
264
+ "\u280B\u2809",
265
+ "\u280B\u2809",
266
+ "\u2809\u2819",
267
+ "\u2809\u2819",
268
+ "\u2809\u2829",
269
+ "\u2808\u2899",
270
+ "\u2808\u2859",
271
+ "\u2888\u2829",
272
+ "\u2840\u2899",
273
+ "\u2804\u2859",
274
+ "\u2882\u2829",
275
+ "\u2842\u2898",
276
+ "\u2805\u2858",
277
+ "\u2883\u2828",
278
+ "\u2843\u2890",
279
+ "\u280D\u2850",
280
+ "\u288B\u2820",
281
+ "\u284B\u2880",
282
+ "\u280D\u2841",
283
+ "\u288B\u2801",
284
+ "\u284B\u2801",
285
+ "\u280D\u2809",
286
+ "\u280B\u2809",
287
+ "\u280B\u2809",
288
+ "\u2809\u2819",
289
+ "\u2809\u2819",
290
+ "\u2809\u2829",
291
+ "\u2808\u2899",
292
+ "\u2808\u2859",
293
+ "\u2808\u2829",
294
+ "\u2800\u2899",
295
+ "\u2800\u2859",
296
+ "\u2800\u2829",
297
+ "\u2800\u2898",
298
+ "\u2800\u2858",
299
+ "\u2800\u2828",
300
+ "\u2800\u2890",
301
+ "\u2800\u2850",
302
+ "\u2800\u2820",
303
+ "\u2800\u2880",
304
+ "\u2800\u2840"
305
+ ]
306
+ },
307
+ dots13: {
308
+ interval: 80,
309
+ frames: [
310
+ "\u28FC",
311
+ "\u28F9",
312
+ "\u28BB",
313
+ "\u283F",
314
+ "\u285F",
315
+ "\u28CF",
316
+ "\u28E7",
317
+ "\u28F6"
318
+ ]
319
+ },
320
+ dots8Bit: {
321
+ interval: 80,
322
+ frames: [
323
+ "\u2800",
324
+ "\u2801",
325
+ "\u2802",
326
+ "\u2803",
327
+ "\u2804",
328
+ "\u2805",
329
+ "\u2806",
330
+ "\u2807",
331
+ "\u2840",
332
+ "\u2841",
333
+ "\u2842",
334
+ "\u2843",
335
+ "\u2844",
336
+ "\u2845",
337
+ "\u2846",
338
+ "\u2847",
339
+ "\u2808",
340
+ "\u2809",
341
+ "\u280A",
342
+ "\u280B",
343
+ "\u280C",
344
+ "\u280D",
345
+ "\u280E",
346
+ "\u280F",
347
+ "\u2848",
348
+ "\u2849",
349
+ "\u284A",
350
+ "\u284B",
351
+ "\u284C",
352
+ "\u284D",
353
+ "\u284E",
354
+ "\u284F",
355
+ "\u2810",
356
+ "\u2811",
357
+ "\u2812",
358
+ "\u2813",
359
+ "\u2814",
360
+ "\u2815",
361
+ "\u2816",
362
+ "\u2817",
363
+ "\u2850",
364
+ "\u2851",
365
+ "\u2852",
366
+ "\u2853",
367
+ "\u2854",
368
+ "\u2855",
369
+ "\u2856",
370
+ "\u2857",
371
+ "\u2818",
372
+ "\u2819",
373
+ "\u281A",
374
+ "\u281B",
375
+ "\u281C",
376
+ "\u281D",
377
+ "\u281E",
378
+ "\u281F",
379
+ "\u2858",
380
+ "\u2859",
381
+ "\u285A",
382
+ "\u285B",
383
+ "\u285C",
384
+ "\u285D",
385
+ "\u285E",
386
+ "\u285F",
387
+ "\u2820",
388
+ "\u2821",
389
+ "\u2822",
390
+ "\u2823",
391
+ "\u2824",
392
+ "\u2825",
393
+ "\u2826",
394
+ "\u2827",
395
+ "\u2860",
396
+ "\u2861",
397
+ "\u2862",
398
+ "\u2863",
399
+ "\u2864",
400
+ "\u2865",
401
+ "\u2866",
402
+ "\u2867",
403
+ "\u2828",
404
+ "\u2829",
405
+ "\u282A",
406
+ "\u282B",
407
+ "\u282C",
408
+ "\u282D",
409
+ "\u282E",
410
+ "\u282F",
411
+ "\u2868",
412
+ "\u2869",
413
+ "\u286A",
414
+ "\u286B",
415
+ "\u286C",
416
+ "\u286D",
417
+ "\u286E",
418
+ "\u286F",
419
+ "\u2830",
420
+ "\u2831",
421
+ "\u2832",
422
+ "\u2833",
423
+ "\u2834",
424
+ "\u2835",
425
+ "\u2836",
426
+ "\u2837",
427
+ "\u2870",
428
+ "\u2871",
429
+ "\u2872",
430
+ "\u2873",
431
+ "\u2874",
432
+ "\u2875",
433
+ "\u2876",
434
+ "\u2877",
435
+ "\u2838",
436
+ "\u2839",
437
+ "\u283A",
438
+ "\u283B",
439
+ "\u283C",
440
+ "\u283D",
441
+ "\u283E",
442
+ "\u283F",
443
+ "\u2878",
444
+ "\u2879",
445
+ "\u287A",
446
+ "\u287B",
447
+ "\u287C",
448
+ "\u287D",
449
+ "\u287E",
450
+ "\u287F",
451
+ "\u2880",
452
+ "\u2881",
453
+ "\u2882",
454
+ "\u2883",
455
+ "\u2884",
456
+ "\u2885",
457
+ "\u2886",
458
+ "\u2887",
459
+ "\u28C0",
460
+ "\u28C1",
461
+ "\u28C2",
462
+ "\u28C3",
463
+ "\u28C4",
464
+ "\u28C5",
465
+ "\u28C6",
466
+ "\u28C7",
467
+ "\u2888",
468
+ "\u2889",
469
+ "\u288A",
470
+ "\u288B",
471
+ "\u288C",
472
+ "\u288D",
473
+ "\u288E",
474
+ "\u288F",
475
+ "\u28C8",
476
+ "\u28C9",
477
+ "\u28CA",
478
+ "\u28CB",
479
+ "\u28CC",
480
+ "\u28CD",
481
+ "\u28CE",
482
+ "\u28CF",
483
+ "\u2890",
484
+ "\u2891",
485
+ "\u2892",
486
+ "\u2893",
487
+ "\u2894",
488
+ "\u2895",
489
+ "\u2896",
490
+ "\u2897",
491
+ "\u28D0",
492
+ "\u28D1",
493
+ "\u28D2",
494
+ "\u28D3",
495
+ "\u28D4",
496
+ "\u28D5",
497
+ "\u28D6",
498
+ "\u28D7",
499
+ "\u2898",
500
+ "\u2899",
501
+ "\u289A",
502
+ "\u289B",
503
+ "\u289C",
504
+ "\u289D",
505
+ "\u289E",
506
+ "\u289F",
507
+ "\u28D8",
508
+ "\u28D9",
509
+ "\u28DA",
510
+ "\u28DB",
511
+ "\u28DC",
512
+ "\u28DD",
513
+ "\u28DE",
514
+ "\u28DF",
515
+ "\u28A0",
516
+ "\u28A1",
517
+ "\u28A2",
518
+ "\u28A3",
519
+ "\u28A4",
520
+ "\u28A5",
521
+ "\u28A6",
522
+ "\u28A7",
523
+ "\u28E0",
524
+ "\u28E1",
525
+ "\u28E2",
526
+ "\u28E3",
527
+ "\u28E4",
528
+ "\u28E5",
529
+ "\u28E6",
530
+ "\u28E7",
531
+ "\u28A8",
532
+ "\u28A9",
533
+ "\u28AA",
534
+ "\u28AB",
535
+ "\u28AC",
536
+ "\u28AD",
537
+ "\u28AE",
538
+ "\u28AF",
539
+ "\u28E8",
540
+ "\u28E9",
541
+ "\u28EA",
542
+ "\u28EB",
543
+ "\u28EC",
544
+ "\u28ED",
545
+ "\u28EE",
546
+ "\u28EF",
547
+ "\u28B0",
548
+ "\u28B1",
549
+ "\u28B2",
550
+ "\u28B3",
551
+ "\u28B4",
552
+ "\u28B5",
553
+ "\u28B6",
554
+ "\u28B7",
555
+ "\u28F0",
556
+ "\u28F1",
557
+ "\u28F2",
558
+ "\u28F3",
559
+ "\u28F4",
560
+ "\u28F5",
561
+ "\u28F6",
562
+ "\u28F7",
563
+ "\u28B8",
564
+ "\u28B9",
565
+ "\u28BA",
566
+ "\u28BB",
567
+ "\u28BC",
568
+ "\u28BD",
569
+ "\u28BE",
570
+ "\u28BF",
571
+ "\u28F8",
572
+ "\u28F9",
573
+ "\u28FA",
574
+ "\u28FB",
575
+ "\u28FC",
576
+ "\u28FD",
577
+ "\u28FE",
578
+ "\u28FF"
579
+ ]
580
+ },
581
+ sand: {
582
+ interval: 80,
583
+ frames: [
584
+ "\u2801",
585
+ "\u2802",
586
+ "\u2804",
587
+ "\u2840",
588
+ "\u2848",
589
+ "\u2850",
590
+ "\u2860",
591
+ "\u28C0",
592
+ "\u28C1",
593
+ "\u28C2",
594
+ "\u28C4",
595
+ "\u28CC",
596
+ "\u28D4",
597
+ "\u28E4",
598
+ "\u28E5",
599
+ "\u28E6",
600
+ "\u28EE",
601
+ "\u28F6",
602
+ "\u28F7",
603
+ "\u28FF",
604
+ "\u287F",
605
+ "\u283F",
606
+ "\u289F",
607
+ "\u281F",
608
+ "\u285B",
609
+ "\u281B",
610
+ "\u282B",
611
+ "\u288B",
612
+ "\u280B",
613
+ "\u280D",
614
+ "\u2849",
615
+ "\u2809",
616
+ "\u2811",
617
+ "\u2821",
618
+ "\u2881"
619
+ ]
620
+ },
621
+ line: {
622
+ interval: 130,
623
+ frames: [
624
+ "-",
625
+ "\\",
626
+ "|",
627
+ "/"
628
+ ]
629
+ },
630
+ line2: {
631
+ interval: 100,
632
+ frames: [
633
+ "\u2802",
634
+ "-",
635
+ "\u2013",
636
+ "\u2014",
637
+ "\u2013",
638
+ "-"
639
+ ]
640
+ },
641
+ pipe: {
642
+ interval: 100,
643
+ frames: [
644
+ "\u2524",
645
+ "\u2518",
646
+ "\u2534",
647
+ "\u2514",
648
+ "\u251C",
649
+ "\u250C",
650
+ "\u252C",
651
+ "\u2510"
652
+ ]
653
+ },
654
+ simpleDots: {
655
+ interval: 400,
656
+ frames: [
657
+ ". ",
658
+ ".. ",
659
+ "...",
660
+ " "
661
+ ]
662
+ },
663
+ simpleDotsScrolling: {
664
+ interval: 200,
665
+ frames: [
666
+ ". ",
667
+ ".. ",
668
+ "...",
669
+ " ..",
670
+ " .",
671
+ " "
672
+ ]
673
+ },
674
+ star: {
675
+ interval: 70,
676
+ frames: [
677
+ "\u2736",
678
+ "\u2738",
679
+ "\u2739",
680
+ "\u273A",
681
+ "\u2739",
682
+ "\u2737"
683
+ ]
684
+ },
685
+ star2: {
686
+ interval: 80,
687
+ frames: [
688
+ "+",
689
+ "x",
690
+ "*"
691
+ ]
692
+ },
693
+ flip: {
694
+ interval: 70,
695
+ frames: [
696
+ "_",
697
+ "_",
698
+ "_",
699
+ "-",
700
+ "`",
701
+ "`",
702
+ "'",
703
+ "\xB4",
704
+ "-",
705
+ "_",
706
+ "_",
707
+ "_"
708
+ ]
709
+ },
710
+ hamburger: {
711
+ interval: 100,
712
+ frames: [
713
+ "\u2631",
714
+ "\u2632",
715
+ "\u2634"
716
+ ]
717
+ },
718
+ growVertical: {
719
+ interval: 120,
720
+ frames: [
721
+ "\u2581",
722
+ "\u2583",
723
+ "\u2584",
724
+ "\u2585",
725
+ "\u2586",
726
+ "\u2587",
727
+ "\u2586",
728
+ "\u2585",
729
+ "\u2584",
730
+ "\u2583"
731
+ ]
732
+ },
733
+ growHorizontal: {
734
+ interval: 120,
735
+ frames: [
736
+ "\u258F",
737
+ "\u258E",
738
+ "\u258D",
739
+ "\u258C",
740
+ "\u258B",
741
+ "\u258A",
742
+ "\u2589",
743
+ "\u258A",
744
+ "\u258B",
745
+ "\u258C",
746
+ "\u258D",
747
+ "\u258E"
748
+ ]
749
+ },
750
+ balloon: {
751
+ interval: 140,
752
+ frames: [
753
+ " ",
754
+ ".",
755
+ "o",
756
+ "O",
757
+ "@",
758
+ "*",
759
+ " "
760
+ ]
761
+ },
762
+ balloon2: {
763
+ interval: 120,
764
+ frames: [
765
+ ".",
766
+ "o",
767
+ "O",
768
+ "\xB0",
769
+ "O",
770
+ "o",
771
+ "."
772
+ ]
773
+ },
774
+ noise: {
775
+ interval: 100,
776
+ frames: [
777
+ "\u2593",
778
+ "\u2592",
779
+ "\u2591"
780
+ ]
781
+ },
782
+ bounce: {
783
+ interval: 120,
784
+ frames: [
785
+ "\u2801",
786
+ "\u2802",
787
+ "\u2804",
788
+ "\u2802"
789
+ ]
790
+ },
791
+ boxBounce: {
792
+ interval: 120,
793
+ frames: [
794
+ "\u2596",
795
+ "\u2598",
796
+ "\u259D",
797
+ "\u2597"
798
+ ]
799
+ },
800
+ boxBounce2: {
801
+ interval: 100,
802
+ frames: [
803
+ "\u258C",
804
+ "\u2580",
805
+ "\u2590",
806
+ "\u2584"
807
+ ]
808
+ },
809
+ triangle: {
810
+ interval: 50,
811
+ frames: [
812
+ "\u25E2",
813
+ "\u25E3",
814
+ "\u25E4",
815
+ "\u25E5"
816
+ ]
817
+ },
818
+ binary: {
819
+ interval: 80,
820
+ frames: [
821
+ "010010",
822
+ "001100",
823
+ "100101",
824
+ "111010",
825
+ "111101",
826
+ "010111",
827
+ "101011",
828
+ "111000",
829
+ "110011",
830
+ "110101"
831
+ ]
832
+ },
833
+ arc: {
834
+ interval: 100,
835
+ frames: [
836
+ "\u25DC",
837
+ "\u25E0",
838
+ "\u25DD",
839
+ "\u25DE",
840
+ "\u25E1",
841
+ "\u25DF"
842
+ ]
843
+ },
844
+ circle: {
845
+ interval: 120,
846
+ frames: [
847
+ "\u25E1",
848
+ "\u2299",
849
+ "\u25E0"
850
+ ]
851
+ },
852
+ squareCorners: {
853
+ interval: 180,
854
+ frames: [
855
+ "\u25F0",
856
+ "\u25F3",
857
+ "\u25F2",
858
+ "\u25F1"
859
+ ]
860
+ },
861
+ circleQuarters: {
862
+ interval: 120,
863
+ frames: [
864
+ "\u25F4",
865
+ "\u25F7",
866
+ "\u25F6",
867
+ "\u25F5"
868
+ ]
869
+ },
870
+ circleHalves: {
871
+ interval: 50,
872
+ frames: [
873
+ "\u25D0",
874
+ "\u25D3",
875
+ "\u25D1",
876
+ "\u25D2"
877
+ ]
878
+ },
879
+ squish: {
880
+ interval: 100,
881
+ frames: [
882
+ "\u256B",
883
+ "\u256A"
884
+ ]
885
+ },
886
+ toggle: {
887
+ interval: 250,
888
+ frames: [
889
+ "\u22B6",
890
+ "\u22B7"
891
+ ]
892
+ },
893
+ toggle2: {
894
+ interval: 80,
895
+ frames: [
896
+ "\u25AB",
897
+ "\u25AA"
898
+ ]
899
+ },
900
+ toggle3: {
901
+ interval: 120,
902
+ frames: [
903
+ "\u25A1",
904
+ "\u25A0"
905
+ ]
906
+ },
907
+ toggle4: {
908
+ interval: 100,
909
+ frames: [
910
+ "\u25A0",
911
+ "\u25A1",
912
+ "\u25AA",
913
+ "\u25AB"
914
+ ]
915
+ },
916
+ toggle5: {
917
+ interval: 100,
918
+ frames: [
919
+ "\u25AE",
920
+ "\u25AF"
921
+ ]
922
+ },
923
+ toggle6: {
924
+ interval: 300,
925
+ frames: [
926
+ "\u101D",
927
+ "\u1040"
928
+ ]
929
+ },
930
+ toggle7: {
931
+ interval: 80,
932
+ frames: [
933
+ "\u29BE",
934
+ "\u29BF"
935
+ ]
936
+ },
937
+ toggle8: {
938
+ interval: 100,
939
+ frames: [
940
+ "\u25CD",
941
+ "\u25CC"
942
+ ]
943
+ },
944
+ toggle9: {
945
+ interval: 100,
946
+ frames: [
947
+ "\u25C9",
948
+ "\u25CE"
949
+ ]
950
+ },
951
+ toggle10: {
952
+ interval: 100,
953
+ frames: [
954
+ "\u3282",
955
+ "\u3280",
956
+ "\u3281"
957
+ ]
958
+ },
959
+ toggle11: {
960
+ interval: 50,
961
+ frames: [
962
+ "\u29C7",
963
+ "\u29C6"
964
+ ]
965
+ },
966
+ toggle12: {
967
+ interval: 120,
968
+ frames: [
969
+ "\u2617",
970
+ "\u2616"
971
+ ]
972
+ },
973
+ toggle13: {
974
+ interval: 80,
975
+ frames: [
976
+ "=",
977
+ "*",
978
+ "-"
979
+ ]
980
+ },
981
+ arrow: {
982
+ interval: 100,
983
+ frames: [
984
+ "\u2190",
985
+ "\u2196",
986
+ "\u2191",
987
+ "\u2197",
988
+ "\u2192",
989
+ "\u2198",
990
+ "\u2193",
991
+ "\u2199"
992
+ ]
993
+ },
994
+ arrow2: {
995
+ interval: 80,
996
+ frames: [
997
+ "\u2B06\uFE0F ",
998
+ "\u2197\uFE0F ",
999
+ "\u27A1\uFE0F ",
1000
+ "\u2198\uFE0F ",
1001
+ "\u2B07\uFE0F ",
1002
+ "\u2199\uFE0F ",
1003
+ "\u2B05\uFE0F ",
1004
+ "\u2196\uFE0F "
1005
+ ]
1006
+ },
1007
+ arrow3: {
1008
+ interval: 120,
1009
+ frames: [
1010
+ "\u25B9\u25B9\u25B9\u25B9\u25B9",
1011
+ "\u25B8\u25B9\u25B9\u25B9\u25B9",
1012
+ "\u25B9\u25B8\u25B9\u25B9\u25B9",
1013
+ "\u25B9\u25B9\u25B8\u25B9\u25B9",
1014
+ "\u25B9\u25B9\u25B9\u25B8\u25B9",
1015
+ "\u25B9\u25B9\u25B9\u25B9\u25B8"
1016
+ ]
1017
+ },
1018
+ bouncingBar: {
1019
+ interval: 80,
1020
+ frames: [
1021
+ "[ ]",
1022
+ "[= ]",
1023
+ "[== ]",
1024
+ "[=== ]",
1025
+ "[====]",
1026
+ "[ ===]",
1027
+ "[ ==]",
1028
+ "[ =]",
1029
+ "[ ]",
1030
+ "[ =]",
1031
+ "[ ==]",
1032
+ "[ ===]",
1033
+ "[====]",
1034
+ "[=== ]",
1035
+ "[== ]",
1036
+ "[= ]"
1037
+ ]
1038
+ },
1039
+ bouncingBall: {
1040
+ interval: 80,
1041
+ frames: [
1042
+ "( \u25CF )",
1043
+ "( \u25CF )",
1044
+ "( \u25CF )",
1045
+ "( \u25CF )",
1046
+ "( \u25CF)",
1047
+ "( \u25CF )",
1048
+ "( \u25CF )",
1049
+ "( \u25CF )",
1050
+ "( \u25CF )",
1051
+ "(\u25CF )"
1052
+ ]
1053
+ },
1054
+ smiley: {
1055
+ interval: 200,
1056
+ frames: [
1057
+ "\u{1F604} ",
1058
+ "\u{1F61D} "
1059
+ ]
1060
+ },
1061
+ monkey: {
1062
+ interval: 300,
1063
+ frames: [
1064
+ "\u{1F648} ",
1065
+ "\u{1F648} ",
1066
+ "\u{1F649} ",
1067
+ "\u{1F64A} "
1068
+ ]
1069
+ },
1070
+ hearts: {
1071
+ interval: 100,
1072
+ frames: [
1073
+ "\u{1F49B} ",
1074
+ "\u{1F499} ",
1075
+ "\u{1F49C} ",
1076
+ "\u{1F49A} ",
1077
+ "\u2764\uFE0F "
1078
+ ]
1079
+ },
1080
+ clock: {
1081
+ interval: 100,
1082
+ frames: [
1083
+ "\u{1F55B} ",
1084
+ "\u{1F550} ",
1085
+ "\u{1F551} ",
1086
+ "\u{1F552} ",
1087
+ "\u{1F553} ",
1088
+ "\u{1F554} ",
1089
+ "\u{1F555} ",
1090
+ "\u{1F556} ",
1091
+ "\u{1F557} ",
1092
+ "\u{1F558} ",
1093
+ "\u{1F559} ",
1094
+ "\u{1F55A} "
1095
+ ]
1096
+ },
1097
+ earth: {
1098
+ interval: 180,
1099
+ frames: [
1100
+ "\u{1F30D} ",
1101
+ "\u{1F30E} ",
1102
+ "\u{1F30F} "
1103
+ ]
1104
+ },
1105
+ material: {
1106
+ interval: 17,
1107
+ frames: [
1108
+ "\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
1109
+ "\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
1110
+ "\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
1111
+ "\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
1112
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
1113
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
1114
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
1115
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
1116
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
1117
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
1118
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
1119
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
1120
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
1121
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581",
1122
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581",
1123
+ "\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581",
1124
+ "\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581",
1125
+ "\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581",
1126
+ "\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581",
1127
+ "\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581",
1128
+ "\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581",
1129
+ "\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581",
1130
+ "\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581",
1131
+ "\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581",
1132
+ "\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581",
1133
+ "\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581",
1134
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
1135
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
1136
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
1137
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
1138
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
1139
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
1140
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
1141
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
1142
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
1143
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
1144
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
1145
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
1146
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588",
1147
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588",
1148
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588",
1149
+ "\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588",
1150
+ "\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588",
1151
+ "\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588",
1152
+ "\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588",
1153
+ "\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588",
1154
+ "\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588",
1155
+ "\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588",
1156
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588",
1157
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
1158
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
1159
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
1160
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
1161
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
1162
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
1163
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
1164
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
1165
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581",
1166
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581",
1167
+ "\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581",
1168
+ "\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581",
1169
+ "\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581",
1170
+ "\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581",
1171
+ "\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581",
1172
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581",
1173
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581",
1174
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581",
1175
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581",
1176
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581",
1177
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581",
1178
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581",
1179
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581",
1180
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581",
1181
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581",
1182
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
1183
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
1184
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588",
1185
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588",
1186
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588",
1187
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588",
1188
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588",
1189
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588",
1190
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588",
1191
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588",
1192
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588",
1193
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588",
1194
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588",
1195
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588",
1196
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
1197
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
1198
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
1199
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581"
1200
+ ]
1201
+ },
1202
+ moon: {
1203
+ interval: 80,
1204
+ frames: [
1205
+ "\u{1F311} ",
1206
+ "\u{1F312} ",
1207
+ "\u{1F313} ",
1208
+ "\u{1F314} ",
1209
+ "\u{1F315} ",
1210
+ "\u{1F316} ",
1211
+ "\u{1F317} ",
1212
+ "\u{1F318} "
1213
+ ]
1214
+ },
1215
+ runner: {
1216
+ interval: 140,
1217
+ frames: [
1218
+ "\u{1F6B6} ",
1219
+ "\u{1F3C3} "
1220
+ ]
1221
+ },
1222
+ pong: {
1223
+ interval: 80,
1224
+ frames: [
1225
+ "\u2590\u2802 \u258C",
1226
+ "\u2590\u2808 \u258C",
1227
+ "\u2590 \u2802 \u258C",
1228
+ "\u2590 \u2820 \u258C",
1229
+ "\u2590 \u2840 \u258C",
1230
+ "\u2590 \u2820 \u258C",
1231
+ "\u2590 \u2802 \u258C",
1232
+ "\u2590 \u2808 \u258C",
1233
+ "\u2590 \u2802 \u258C",
1234
+ "\u2590 \u2820 \u258C",
1235
+ "\u2590 \u2840 \u258C",
1236
+ "\u2590 \u2820 \u258C",
1237
+ "\u2590 \u2802 \u258C",
1238
+ "\u2590 \u2808 \u258C",
1239
+ "\u2590 \u2802\u258C",
1240
+ "\u2590 \u2820\u258C",
1241
+ "\u2590 \u2840\u258C",
1242
+ "\u2590 \u2820 \u258C",
1243
+ "\u2590 \u2802 \u258C",
1244
+ "\u2590 \u2808 \u258C",
1245
+ "\u2590 \u2802 \u258C",
1246
+ "\u2590 \u2820 \u258C",
1247
+ "\u2590 \u2840 \u258C",
1248
+ "\u2590 \u2820 \u258C",
1249
+ "\u2590 \u2802 \u258C",
1250
+ "\u2590 \u2808 \u258C",
1251
+ "\u2590 \u2802 \u258C",
1252
+ "\u2590 \u2820 \u258C",
1253
+ "\u2590 \u2840 \u258C",
1254
+ "\u2590\u2820 \u258C"
1255
+ ]
1256
+ },
1257
+ shark: {
1258
+ interval: 120,
1259
+ frames: [
1260
+ "\u2590|\\____________\u258C",
1261
+ "\u2590_|\\___________\u258C",
1262
+ "\u2590__|\\__________\u258C",
1263
+ "\u2590___|\\_________\u258C",
1264
+ "\u2590____|\\________\u258C",
1265
+ "\u2590_____|\\_______\u258C",
1266
+ "\u2590______|\\______\u258C",
1267
+ "\u2590_______|\\_____\u258C",
1268
+ "\u2590________|\\____\u258C",
1269
+ "\u2590_________|\\___\u258C",
1270
+ "\u2590__________|\\__\u258C",
1271
+ "\u2590___________|\\_\u258C",
1272
+ "\u2590____________|\\\u258C",
1273
+ "\u2590____________/|\u258C",
1274
+ "\u2590___________/|_\u258C",
1275
+ "\u2590__________/|__\u258C",
1276
+ "\u2590_________/|___\u258C",
1277
+ "\u2590________/|____\u258C",
1278
+ "\u2590_______/|_____\u258C",
1279
+ "\u2590______/|______\u258C",
1280
+ "\u2590_____/|_______\u258C",
1281
+ "\u2590____/|________\u258C",
1282
+ "\u2590___/|_________\u258C",
1283
+ "\u2590__/|__________\u258C",
1284
+ "\u2590_/|___________\u258C",
1285
+ "\u2590/|____________\u258C"
1286
+ ]
1287
+ },
1288
+ dqpb: {
1289
+ interval: 100,
1290
+ frames: [
1291
+ "d",
1292
+ "q",
1293
+ "p",
1294
+ "b"
1295
+ ]
1296
+ },
1297
+ weather: {
1298
+ interval: 100,
1299
+ frames: [
1300
+ "\u2600\uFE0F ",
1301
+ "\u2600\uFE0F ",
1302
+ "\u2600\uFE0F ",
1303
+ "\u{1F324} ",
1304
+ "\u26C5\uFE0F ",
1305
+ "\u{1F325} ",
1306
+ "\u2601\uFE0F ",
1307
+ "\u{1F327} ",
1308
+ "\u{1F328} ",
1309
+ "\u{1F327} ",
1310
+ "\u{1F328} ",
1311
+ "\u{1F327} ",
1312
+ "\u{1F328} ",
1313
+ "\u26C8 ",
1314
+ "\u{1F328} ",
1315
+ "\u{1F327} ",
1316
+ "\u{1F328} ",
1317
+ "\u2601\uFE0F ",
1318
+ "\u{1F325} ",
1319
+ "\u26C5\uFE0F ",
1320
+ "\u{1F324} ",
1321
+ "\u2600\uFE0F ",
1322
+ "\u2600\uFE0F "
1323
+ ]
1324
+ },
1325
+ christmas: {
1326
+ interval: 400,
1327
+ frames: [
1328
+ "\u{1F332}",
1329
+ "\u{1F384}"
1330
+ ]
1331
+ },
1332
+ grenade: {
1333
+ interval: 80,
1334
+ frames: [
1335
+ "\u060C ",
1336
+ "\u2032 ",
1337
+ " \xB4 ",
1338
+ " \u203E ",
1339
+ " \u2E0C",
1340
+ " \u2E0A",
1341
+ " |",
1342
+ " \u204E",
1343
+ " \u2055",
1344
+ " \u0DF4 ",
1345
+ " \u2053",
1346
+ " ",
1347
+ " ",
1348
+ " "
1349
+ ]
1350
+ },
1351
+ point: {
1352
+ interval: 125,
1353
+ frames: [
1354
+ "\u2219\u2219\u2219",
1355
+ "\u25CF\u2219\u2219",
1356
+ "\u2219\u25CF\u2219",
1357
+ "\u2219\u2219\u25CF",
1358
+ "\u2219\u2219\u2219"
1359
+ ]
1360
+ },
1361
+ layer: {
1362
+ interval: 150,
1363
+ frames: [
1364
+ "-",
1365
+ "=",
1366
+ "\u2261"
1367
+ ]
1368
+ },
1369
+ betaWave: {
1370
+ interval: 80,
1371
+ frames: [
1372
+ "\u03C1\u03B2\u03B2\u03B2\u03B2\u03B2\u03B2",
1373
+ "\u03B2\u03C1\u03B2\u03B2\u03B2\u03B2\u03B2",
1374
+ "\u03B2\u03B2\u03C1\u03B2\u03B2\u03B2\u03B2",
1375
+ "\u03B2\u03B2\u03B2\u03C1\u03B2\u03B2\u03B2",
1376
+ "\u03B2\u03B2\u03B2\u03B2\u03C1\u03B2\u03B2",
1377
+ "\u03B2\u03B2\u03B2\u03B2\u03B2\u03C1\u03B2",
1378
+ "\u03B2\u03B2\u03B2\u03B2\u03B2\u03B2\u03C1"
1379
+ ]
1380
+ },
1381
+ fingerDance: {
1382
+ interval: 160,
1383
+ frames: [
1384
+ "\u{1F918} ",
1385
+ "\u{1F91F} ",
1386
+ "\u{1F596} ",
1387
+ "\u270B ",
1388
+ "\u{1F91A} ",
1389
+ "\u{1F446} "
1390
+ ]
1391
+ },
1392
+ fistBump: {
1393
+ interval: 80,
1394
+ frames: [
1395
+ "\u{1F91C}\u3000\u3000\u3000\u3000\u{1F91B} ",
1396
+ "\u{1F91C}\u3000\u3000\u3000\u3000\u{1F91B} ",
1397
+ "\u{1F91C}\u3000\u3000\u3000\u3000\u{1F91B} ",
1398
+ "\u3000\u{1F91C}\u3000\u3000\u{1F91B}\u3000 ",
1399
+ "\u3000\u3000\u{1F91C}\u{1F91B}\u3000\u3000 ",
1400
+ "\u3000\u{1F91C}\u2728\u{1F91B}\u3000\u3000 ",
1401
+ "\u{1F91C}\u3000\u2728\u3000\u{1F91B}\u3000 "
1402
+ ]
1403
+ },
1404
+ soccerHeader: {
1405
+ interval: 80,
1406
+ frames: [
1407
+ " \u{1F9D1}\u26BD\uFE0F \u{1F9D1} ",
1408
+ "\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ",
1409
+ "\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ",
1410
+ "\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ",
1411
+ "\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ",
1412
+ "\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ",
1413
+ "\u{1F9D1} \u26BD\uFE0F\u{1F9D1} ",
1414
+ "\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ",
1415
+ "\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ",
1416
+ "\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ",
1417
+ "\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ",
1418
+ "\u{1F9D1} \u26BD\uFE0F \u{1F9D1} "
1419
+ ]
1420
+ },
1421
+ mindblown: {
1422
+ interval: 160,
1423
+ frames: [
1424
+ "\u{1F610} ",
1425
+ "\u{1F610} ",
1426
+ "\u{1F62E} ",
1427
+ "\u{1F62E} ",
1428
+ "\u{1F626} ",
1429
+ "\u{1F626} ",
1430
+ "\u{1F627} ",
1431
+ "\u{1F627} ",
1432
+ "\u{1F92F} ",
1433
+ "\u{1F4A5} ",
1434
+ "\u2728 ",
1435
+ "\u3000 ",
1436
+ "\u3000 ",
1437
+ "\u3000 "
1438
+ ]
1439
+ },
1440
+ speaker: {
1441
+ interval: 160,
1442
+ frames: [
1443
+ "\u{1F508} ",
1444
+ "\u{1F509} ",
1445
+ "\u{1F50A} ",
1446
+ "\u{1F509} "
1447
+ ]
1448
+ },
1449
+ orangePulse: {
1450
+ interval: 100,
1451
+ frames: [
1452
+ "\u{1F538} ",
1453
+ "\u{1F536} ",
1454
+ "\u{1F7E0} ",
1455
+ "\u{1F7E0} ",
1456
+ "\u{1F536} "
1457
+ ]
1458
+ },
1459
+ bluePulse: {
1460
+ interval: 100,
1461
+ frames: [
1462
+ "\u{1F539} ",
1463
+ "\u{1F537} ",
1464
+ "\u{1F535} ",
1465
+ "\u{1F535} ",
1466
+ "\u{1F537} "
1467
+ ]
1468
+ },
1469
+ orangeBluePulse: {
1470
+ interval: 100,
1471
+ frames: [
1472
+ "\u{1F538} ",
1473
+ "\u{1F536} ",
1474
+ "\u{1F7E0} ",
1475
+ "\u{1F7E0} ",
1476
+ "\u{1F536} ",
1477
+ "\u{1F539} ",
1478
+ "\u{1F537} ",
1479
+ "\u{1F535} ",
1480
+ "\u{1F535} ",
1481
+ "\u{1F537} "
1482
+ ]
1483
+ },
1484
+ timeTravel: {
1485
+ interval: 100,
1486
+ frames: [
1487
+ "\u{1F55B} ",
1488
+ "\u{1F55A} ",
1489
+ "\u{1F559} ",
1490
+ "\u{1F558} ",
1491
+ "\u{1F557} ",
1492
+ "\u{1F556} ",
1493
+ "\u{1F555} ",
1494
+ "\u{1F554} ",
1495
+ "\u{1F553} ",
1496
+ "\u{1F552} ",
1497
+ "\u{1F551} ",
1498
+ "\u{1F550} "
1499
+ ]
1500
+ },
1501
+ aesthetic: {
1502
+ interval: 80,
1503
+ frames: [
1504
+ "\u25B0\u25B1\u25B1\u25B1\u25B1\u25B1\u25B1",
1505
+ "\u25B0\u25B0\u25B1\u25B1\u25B1\u25B1\u25B1",
1506
+ "\u25B0\u25B0\u25B0\u25B1\u25B1\u25B1\u25B1",
1507
+ "\u25B0\u25B0\u25B0\u25B0\u25B1\u25B1\u25B1",
1508
+ "\u25B0\u25B0\u25B0\u25B0\u25B0\u25B1\u25B1",
1509
+ "\u25B0\u25B0\u25B0\u25B0\u25B0\u25B0\u25B1",
1510
+ "\u25B0\u25B0\u25B0\u25B0\u25B0\u25B0\u25B0",
1511
+ "\u25B0\u25B1\u25B1\u25B1\u25B1\u25B1\u25B1"
1512
+ ]
1513
+ },
1514
+ dwarfFortress: {
1515
+ interval: 80,
1516
+ frames: [
1517
+ " \u2588\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
1518
+ "\u263A\u2588\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
1519
+ "\u263A\u2588\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
1520
+ "\u263A\u2593\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
1521
+ "\u263A\u2593\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
1522
+ "\u263A\u2592\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
1523
+ "\u263A\u2592\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
1524
+ "\u263A\u2591\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
1525
+ "\u263A\u2591\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
1526
+ "\u263A \u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
1527
+ " \u263A\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
1528
+ " \u263A\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
1529
+ " \u263A\u2593\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
1530
+ " \u263A\u2593\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
1531
+ " \u263A\u2592\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
1532
+ " \u263A\u2592\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
1533
+ " \u263A\u2591\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
1534
+ " \u263A\u2591\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
1535
+ " \u263A \u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
1536
+ " \u263A\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
1537
+ " \u263A\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
1538
+ " \u263A\u2593\u2588\u2588\u2588\xA3\xA3\xA3 ",
1539
+ " \u263A\u2593\u2588\u2588\u2588\xA3\xA3\xA3 ",
1540
+ " \u263A\u2592\u2588\u2588\u2588\xA3\xA3\xA3 ",
1541
+ " \u263A\u2592\u2588\u2588\u2588\xA3\xA3\xA3 ",
1542
+ " \u263A\u2591\u2588\u2588\u2588\xA3\xA3\xA3 ",
1543
+ " \u263A\u2591\u2588\u2588\u2588\xA3\xA3\xA3 ",
1544
+ " \u263A \u2588\u2588\u2588\xA3\xA3\xA3 ",
1545
+ " \u263A\u2588\u2588\u2588\xA3\xA3\xA3 ",
1546
+ " \u263A\u2588\u2588\u2588\xA3\xA3\xA3 ",
1547
+ " \u263A\u2593\u2588\u2588\xA3\xA3\xA3 ",
1548
+ " \u263A\u2593\u2588\u2588\xA3\xA3\xA3 ",
1549
+ " \u263A\u2592\u2588\u2588\xA3\xA3\xA3 ",
1550
+ " \u263A\u2592\u2588\u2588\xA3\xA3\xA3 ",
1551
+ " \u263A\u2591\u2588\u2588\xA3\xA3\xA3 ",
1552
+ " \u263A\u2591\u2588\u2588\xA3\xA3\xA3 ",
1553
+ " \u263A \u2588\u2588\xA3\xA3\xA3 ",
1554
+ " \u263A\u2588\u2588\xA3\xA3\xA3 ",
1555
+ " \u263A\u2588\u2588\xA3\xA3\xA3 ",
1556
+ " \u263A\u2593\u2588\xA3\xA3\xA3 ",
1557
+ " \u263A\u2593\u2588\xA3\xA3\xA3 ",
1558
+ " \u263A\u2592\u2588\xA3\xA3\xA3 ",
1559
+ " \u263A\u2592\u2588\xA3\xA3\xA3 ",
1560
+ " \u263A\u2591\u2588\xA3\xA3\xA3 ",
1561
+ " \u263A\u2591\u2588\xA3\xA3\xA3 ",
1562
+ " \u263A \u2588\xA3\xA3\xA3 ",
1563
+ " \u263A\u2588\xA3\xA3\xA3 ",
1564
+ " \u263A\u2588\xA3\xA3\xA3 ",
1565
+ " \u263A\u2593\xA3\xA3\xA3 ",
1566
+ " \u263A\u2593\xA3\xA3\xA3 ",
1567
+ " \u263A\u2592\xA3\xA3\xA3 ",
1568
+ " \u263A\u2592\xA3\xA3\xA3 ",
1569
+ " \u263A\u2591\xA3\xA3\xA3 ",
1570
+ " \u263A\u2591\xA3\xA3\xA3 ",
1571
+ " \u263A \xA3\xA3\xA3 ",
1572
+ " \u263A\xA3\xA3\xA3 ",
1573
+ " \u263A\xA3\xA3\xA3 ",
1574
+ " \u263A\u2593\xA3\xA3 ",
1575
+ " \u263A\u2593\xA3\xA3 ",
1576
+ " \u263A\u2592\xA3\xA3 ",
1577
+ " \u263A\u2592\xA3\xA3 ",
1578
+ " \u263A\u2591\xA3\xA3 ",
1579
+ " \u263A\u2591\xA3\xA3 ",
1580
+ " \u263A \xA3\xA3 ",
1581
+ " \u263A\xA3\xA3 ",
1582
+ " \u263A\xA3\xA3 ",
1583
+ " \u263A\u2593\xA3 ",
1584
+ " \u263A\u2593\xA3 ",
1585
+ " \u263A\u2592\xA3 ",
1586
+ " \u263A\u2592\xA3 ",
1587
+ " \u263A\u2591\xA3 ",
1588
+ " \u263A\u2591\xA3 ",
1589
+ " \u263A \xA3 ",
1590
+ " \u263A\xA3 ",
1591
+ " \u263A\xA3 ",
1592
+ " \u263A\u2593 ",
1593
+ " \u263A\u2593 ",
1594
+ " \u263A\u2592 ",
1595
+ " \u263A\u2592 ",
1596
+ " \u263A\u2591 ",
1597
+ " \u263A\u2591 ",
1598
+ " \u263A ",
1599
+ " \u263A &",
1600
+ " \u263A \u263C&",
1601
+ " \u263A \u263C &",
1602
+ " \u263A\u263C &",
1603
+ " \u263A\u263C & ",
1604
+ " \u203C & ",
1605
+ " \u263A & ",
1606
+ " \u203C & ",
1607
+ " \u263A & ",
1608
+ " \u203C & ",
1609
+ " \u263A & ",
1610
+ "\u203C & ",
1611
+ " & ",
1612
+ " & ",
1613
+ " & \u2591 ",
1614
+ " & \u2592 ",
1615
+ " & \u2593 ",
1616
+ " & \xA3 ",
1617
+ " & \u2591\xA3 ",
1618
+ " & \u2592\xA3 ",
1619
+ " & \u2593\xA3 ",
1620
+ " & \xA3\xA3 ",
1621
+ " & \u2591\xA3\xA3 ",
1622
+ " & \u2592\xA3\xA3 ",
1623
+ "& \u2593\xA3\xA3 ",
1624
+ "& \xA3\xA3\xA3 ",
1625
+ " \u2591\xA3\xA3\xA3 ",
1626
+ " \u2592\xA3\xA3\xA3 ",
1627
+ " \u2593\xA3\xA3\xA3 ",
1628
+ " \u2588\xA3\xA3\xA3 ",
1629
+ " \u2591\u2588\xA3\xA3\xA3 ",
1630
+ " \u2592\u2588\xA3\xA3\xA3 ",
1631
+ " \u2593\u2588\xA3\xA3\xA3 ",
1632
+ " \u2588\u2588\xA3\xA3\xA3 ",
1633
+ " \u2591\u2588\u2588\xA3\xA3\xA3 ",
1634
+ " \u2592\u2588\u2588\xA3\xA3\xA3 ",
1635
+ " \u2593\u2588\u2588\xA3\xA3\xA3 ",
1636
+ " \u2588\u2588\u2588\xA3\xA3\xA3 ",
1637
+ " \u2591\u2588\u2588\u2588\xA3\xA3\xA3 ",
1638
+ " \u2592\u2588\u2588\u2588\xA3\xA3\xA3 ",
1639
+ " \u2593\u2588\u2588\u2588\xA3\xA3\xA3 ",
1640
+ " \u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
1641
+ " \u2591\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
1642
+ " \u2592\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
1643
+ " \u2593\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
1644
+ " \u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
1645
+ " \u2591\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
1646
+ " \u2592\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
1647
+ " \u2593\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
1648
+ " \u2588\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
1649
+ " \u2588\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 "
1650
+ ]
1651
+ }
1652
+ };
1653
+ }
1654
+ });
1655
+
1656
+ // ../../node_modules/.pnpm/cli-spinners@2.9.2/node_modules/cli-spinners/index.js
1657
+ var require_cli_spinners = __commonJS({
1658
+ "../../node_modules/.pnpm/cli-spinners@2.9.2/node_modules/cli-spinners/index.js"(exports, module) {
1659
+ "use strict";
1660
+ var spinners = Object.assign({}, require_spinners());
1661
+ var spinnersList = Object.keys(spinners);
1662
+ Object.defineProperty(spinners, "random", {
1663
+ get() {
1664
+ const randomIndex = Math.floor(Math.random() * spinnersList.length);
1665
+ const spinnerName = spinnersList[randomIndex];
1666
+ return spinners[spinnerName];
1667
+ }
1668
+ });
1669
+ module.exports = spinners;
1670
+ }
1671
+ });
2
1672
 
3
1673
  // src/index.ts
4
1674
  import { Command as Command7 } from "commander";
5
- import { readFileSync as readFileSync5 } from "fs";
6
- import { fileURLToPath as fileURLToPath2 } from "url";
1675
+
1676
+ // src/core/runtime-paths.ts
1677
+ import { existsSync, readFileSync, realpathSync } from "fs";
1678
+ import path from "path";
1679
+ import { fileURLToPath } from "url";
1680
+ var CLI_PACKAGE_NAMES = /* @__PURE__ */ new Set(["@better-webhook/cli", "better-webhook"]);
1681
+ function resolveRealPath(filePath) {
1682
+ try {
1683
+ return realpathSync(filePath);
1684
+ } catch {
1685
+ return filePath;
1686
+ }
1687
+ }
1688
+ function readPackageName(packageJsonPath) {
1689
+ if (!existsSync(packageJsonPath)) {
1690
+ return void 0;
1691
+ }
1692
+ try {
1693
+ const packageJson = JSON.parse(
1694
+ readFileSync(packageJsonPath, { encoding: "utf8" })
1695
+ );
1696
+ return typeof packageJson.name === "string" ? packageJson.name : void 0;
1697
+ } catch {
1698
+ return void 0;
1699
+ }
1700
+ }
1701
+ function isCliPackageName(packageName) {
1702
+ return typeof packageName === "string" && CLI_PACKAGE_NAMES.has(packageName);
1703
+ }
1704
+ function findCliPackageRoot(startDir) {
1705
+ let currentDir = resolveRealPath(path.resolve(startDir));
1706
+ while (true) {
1707
+ const packageJsonPath = path.join(currentDir, "package.json");
1708
+ const packageName = readPackageName(packageJsonPath);
1709
+ if (isCliPackageName(packageName)) {
1710
+ return currentDir;
1711
+ }
1712
+ const parentDir = path.dirname(currentDir);
1713
+ if (parentDir === currentDir) {
1714
+ return void 0;
1715
+ }
1716
+ currentDir = parentDir;
1717
+ }
1718
+ }
1719
+ function resolveRuntimeDir() {
1720
+ if (typeof __dirname !== "undefined") {
1721
+ return resolveRealPath(__dirname);
1722
+ }
1723
+ const moduleUrl = import.meta.url;
1724
+ if (typeof moduleUrl === "string" && moduleUrl.startsWith("file:")) {
1725
+ return path.dirname(resolveRealPath(fileURLToPath(moduleUrl)));
1726
+ }
1727
+ const entryPath = process.argv[1];
1728
+ if (entryPath) {
1729
+ const entryDir = path.dirname(resolveRealPath(path.resolve(entryPath)));
1730
+ const cliPackageRoot = findCliPackageRoot(entryDir);
1731
+ if (cliPackageRoot) {
1732
+ return cliPackageRoot;
1733
+ }
1734
+ return entryDir;
1735
+ }
1736
+ const cwdPackageRoot = findCliPackageRoot(process.cwd());
1737
+ if (cwdPackageRoot) {
1738
+ return cwdPackageRoot;
1739
+ }
1740
+ return process.cwd();
1741
+ }
1742
+
1743
+ // src/core/cli-version.ts
1744
+ import { readFileSync as readFileSync2 } from "fs";
1745
+ import path2 from "path";
1746
+ function readPackageVersion(packageJsonPath) {
1747
+ try {
1748
+ const packageJson = JSON.parse(
1749
+ readFileSync2(packageJsonPath, { encoding: "utf8" })
1750
+ );
1751
+ return typeof packageJson.version === "string" && packageJson.version ? packageJson.version : void 0;
1752
+ } catch {
1753
+ return void 0;
1754
+ }
1755
+ }
1756
+ function resolveRuntimePackageVersion(runtimeDir) {
1757
+ const searchDirs = [runtimeDir, path2.resolve(runtimeDir, "..")];
1758
+ const visitedRoots = /* @__PURE__ */ new Set();
1759
+ for (const searchDir of searchDirs) {
1760
+ const cliPackageRoot = findCliPackageRoot(searchDir);
1761
+ if (!cliPackageRoot || visitedRoots.has(cliPackageRoot)) {
1762
+ continue;
1763
+ }
1764
+ visitedRoots.add(cliPackageRoot);
1765
+ const version = readPackageVersion(
1766
+ path2.join(cliPackageRoot, "package.json")
1767
+ );
1768
+ if (version) {
1769
+ return version;
1770
+ }
1771
+ }
1772
+ return void 0;
1773
+ }
7
1774
 
8
1775
  // src/commands/templates.ts
9
1776
  import { Command } from "commander";
10
- import ora from "ora";
1777
+
1778
+ // ../../node_modules/.pnpm/ora@8.2.0/node_modules/ora/index.js
1779
+ import process9 from "process";
1780
+
1781
+ // ../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/vendor/ansi-styles/index.js
1782
+ var ANSI_BACKGROUND_OFFSET = 10;
1783
+ var wrapAnsi16 = (offset = 0) => (code) => `\x1B[${code + offset}m`;
1784
+ var wrapAnsi256 = (offset = 0) => (code) => `\x1B[${38 + offset};5;${code}m`;
1785
+ var wrapAnsi16m = (offset = 0) => (red, green, blue) => `\x1B[${38 + offset};2;${red};${green};${blue}m`;
1786
+ var styles = {
1787
+ modifier: {
1788
+ reset: [0, 0],
1789
+ // 21 isn't widely supported and 22 does the same thing
1790
+ bold: [1, 22],
1791
+ dim: [2, 22],
1792
+ italic: [3, 23],
1793
+ underline: [4, 24],
1794
+ overline: [53, 55],
1795
+ inverse: [7, 27],
1796
+ hidden: [8, 28],
1797
+ strikethrough: [9, 29]
1798
+ },
1799
+ color: {
1800
+ black: [30, 39],
1801
+ red: [31, 39],
1802
+ green: [32, 39],
1803
+ yellow: [33, 39],
1804
+ blue: [34, 39],
1805
+ magenta: [35, 39],
1806
+ cyan: [36, 39],
1807
+ white: [37, 39],
1808
+ // Bright color
1809
+ blackBright: [90, 39],
1810
+ gray: [90, 39],
1811
+ // Alias of `blackBright`
1812
+ grey: [90, 39],
1813
+ // Alias of `blackBright`
1814
+ redBright: [91, 39],
1815
+ greenBright: [92, 39],
1816
+ yellowBright: [93, 39],
1817
+ blueBright: [94, 39],
1818
+ magentaBright: [95, 39],
1819
+ cyanBright: [96, 39],
1820
+ whiteBright: [97, 39]
1821
+ },
1822
+ bgColor: {
1823
+ bgBlack: [40, 49],
1824
+ bgRed: [41, 49],
1825
+ bgGreen: [42, 49],
1826
+ bgYellow: [43, 49],
1827
+ bgBlue: [44, 49],
1828
+ bgMagenta: [45, 49],
1829
+ bgCyan: [46, 49],
1830
+ bgWhite: [47, 49],
1831
+ // Bright color
1832
+ bgBlackBright: [100, 49],
1833
+ bgGray: [100, 49],
1834
+ // Alias of `bgBlackBright`
1835
+ bgGrey: [100, 49],
1836
+ // Alias of `bgBlackBright`
1837
+ bgRedBright: [101, 49],
1838
+ bgGreenBright: [102, 49],
1839
+ bgYellowBright: [103, 49],
1840
+ bgBlueBright: [104, 49],
1841
+ bgMagentaBright: [105, 49],
1842
+ bgCyanBright: [106, 49],
1843
+ bgWhiteBright: [107, 49]
1844
+ }
1845
+ };
1846
+ var modifierNames = Object.keys(styles.modifier);
1847
+ var foregroundColorNames = Object.keys(styles.color);
1848
+ var backgroundColorNames = Object.keys(styles.bgColor);
1849
+ var colorNames = [...foregroundColorNames, ...backgroundColorNames];
1850
+ function assembleStyles() {
1851
+ const codes = /* @__PURE__ */ new Map();
1852
+ for (const [groupName, group] of Object.entries(styles)) {
1853
+ for (const [styleName, style] of Object.entries(group)) {
1854
+ styles[styleName] = {
1855
+ open: `\x1B[${style[0]}m`,
1856
+ close: `\x1B[${style[1]}m`
1857
+ };
1858
+ group[styleName] = styles[styleName];
1859
+ codes.set(style[0], style[1]);
1860
+ }
1861
+ Object.defineProperty(styles, groupName, {
1862
+ value: group,
1863
+ enumerable: false
1864
+ });
1865
+ }
1866
+ Object.defineProperty(styles, "codes", {
1867
+ value: codes,
1868
+ enumerable: false
1869
+ });
1870
+ styles.color.close = "\x1B[39m";
1871
+ styles.bgColor.close = "\x1B[49m";
1872
+ styles.color.ansi = wrapAnsi16();
1873
+ styles.color.ansi256 = wrapAnsi256();
1874
+ styles.color.ansi16m = wrapAnsi16m();
1875
+ styles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);
1876
+ styles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);
1877
+ styles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);
1878
+ Object.defineProperties(styles, {
1879
+ rgbToAnsi256: {
1880
+ value(red, green, blue) {
1881
+ if (red === green && green === blue) {
1882
+ if (red < 8) {
1883
+ return 16;
1884
+ }
1885
+ if (red > 248) {
1886
+ return 231;
1887
+ }
1888
+ return Math.round((red - 8) / 247 * 24) + 232;
1889
+ }
1890
+ return 16 + 36 * Math.round(red / 255 * 5) + 6 * Math.round(green / 255 * 5) + Math.round(blue / 255 * 5);
1891
+ },
1892
+ enumerable: false
1893
+ },
1894
+ hexToRgb: {
1895
+ value(hex) {
1896
+ const matches = /[a-f\d]{6}|[a-f\d]{3}/i.exec(hex.toString(16));
1897
+ if (!matches) {
1898
+ return [0, 0, 0];
1899
+ }
1900
+ let [colorString] = matches;
1901
+ if (colorString.length === 3) {
1902
+ colorString = [...colorString].map((character) => character + character).join("");
1903
+ }
1904
+ const integer = Number.parseInt(colorString, 16);
1905
+ return [
1906
+ /* eslint-disable no-bitwise */
1907
+ integer >> 16 & 255,
1908
+ integer >> 8 & 255,
1909
+ integer & 255
1910
+ /* eslint-enable no-bitwise */
1911
+ ];
1912
+ },
1913
+ enumerable: false
1914
+ },
1915
+ hexToAnsi256: {
1916
+ value: (hex) => styles.rgbToAnsi256(...styles.hexToRgb(hex)),
1917
+ enumerable: false
1918
+ },
1919
+ ansi256ToAnsi: {
1920
+ value(code) {
1921
+ if (code < 8) {
1922
+ return 30 + code;
1923
+ }
1924
+ if (code < 16) {
1925
+ return 90 + (code - 8);
1926
+ }
1927
+ let red;
1928
+ let green;
1929
+ let blue;
1930
+ if (code >= 232) {
1931
+ red = ((code - 232) * 10 + 8) / 255;
1932
+ green = red;
1933
+ blue = red;
1934
+ } else {
1935
+ code -= 16;
1936
+ const remainder = code % 36;
1937
+ red = Math.floor(code / 36) / 5;
1938
+ green = Math.floor(remainder / 6) / 5;
1939
+ blue = remainder % 6 / 5;
1940
+ }
1941
+ const value = Math.max(red, green, blue) * 2;
1942
+ if (value === 0) {
1943
+ return 30;
1944
+ }
1945
+ let result = 30 + (Math.round(blue) << 2 | Math.round(green) << 1 | Math.round(red));
1946
+ if (value === 2) {
1947
+ result += 60;
1948
+ }
1949
+ return result;
1950
+ },
1951
+ enumerable: false
1952
+ },
1953
+ rgbToAnsi: {
1954
+ value: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),
1955
+ enumerable: false
1956
+ },
1957
+ hexToAnsi: {
1958
+ value: (hex) => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),
1959
+ enumerable: false
1960
+ }
1961
+ });
1962
+ return styles;
1963
+ }
1964
+ var ansiStyles = assembleStyles();
1965
+ var ansi_styles_default = ansiStyles;
1966
+
1967
+ // ../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/vendor/supports-color/index.js
1968
+ import process2 from "process";
1969
+ import os from "os";
1970
+ import tty from "tty";
1971
+ function hasFlag(flag, argv = globalThis.Deno ? globalThis.Deno.args : process2.argv) {
1972
+ const prefix = flag.startsWith("-") ? "" : flag.length === 1 ? "-" : "--";
1973
+ const position = argv.indexOf(prefix + flag);
1974
+ const terminatorPosition = argv.indexOf("--");
1975
+ return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);
1976
+ }
1977
+ var { env } = process2;
1978
+ var flagForceColor;
1979
+ if (hasFlag("no-color") || hasFlag("no-colors") || hasFlag("color=false") || hasFlag("color=never")) {
1980
+ flagForceColor = 0;
1981
+ } else if (hasFlag("color") || hasFlag("colors") || hasFlag("color=true") || hasFlag("color=always")) {
1982
+ flagForceColor = 1;
1983
+ }
1984
+ function envForceColor() {
1985
+ if ("FORCE_COLOR" in env) {
1986
+ if (env.FORCE_COLOR === "true") {
1987
+ return 1;
1988
+ }
1989
+ if (env.FORCE_COLOR === "false") {
1990
+ return 0;
1991
+ }
1992
+ return env.FORCE_COLOR.length === 0 ? 1 : Math.min(Number.parseInt(env.FORCE_COLOR, 10), 3);
1993
+ }
1994
+ }
1995
+ function translateLevel(level) {
1996
+ if (level === 0) {
1997
+ return false;
1998
+ }
1999
+ return {
2000
+ level,
2001
+ hasBasic: true,
2002
+ has256: level >= 2,
2003
+ has16m: level >= 3
2004
+ };
2005
+ }
2006
+ function _supportsColor(haveStream, { streamIsTTY, sniffFlags = true } = {}) {
2007
+ const noFlagForceColor = envForceColor();
2008
+ if (noFlagForceColor !== void 0) {
2009
+ flagForceColor = noFlagForceColor;
2010
+ }
2011
+ const forceColor = sniffFlags ? flagForceColor : noFlagForceColor;
2012
+ if (forceColor === 0) {
2013
+ return 0;
2014
+ }
2015
+ if (sniffFlags) {
2016
+ if (hasFlag("color=16m") || hasFlag("color=full") || hasFlag("color=truecolor")) {
2017
+ return 3;
2018
+ }
2019
+ if (hasFlag("color=256")) {
2020
+ return 2;
2021
+ }
2022
+ }
2023
+ if ("TF_BUILD" in env && "AGENT_NAME" in env) {
2024
+ return 1;
2025
+ }
2026
+ if (haveStream && !streamIsTTY && forceColor === void 0) {
2027
+ return 0;
2028
+ }
2029
+ const min = forceColor || 0;
2030
+ if (env.TERM === "dumb") {
2031
+ return min;
2032
+ }
2033
+ if (process2.platform === "win32") {
2034
+ const osRelease = os.release().split(".");
2035
+ if (Number(osRelease[0]) >= 10 && Number(osRelease[2]) >= 10586) {
2036
+ return Number(osRelease[2]) >= 14931 ? 3 : 2;
2037
+ }
2038
+ return 1;
2039
+ }
2040
+ if ("CI" in env) {
2041
+ if (["GITHUB_ACTIONS", "GITEA_ACTIONS", "CIRCLECI"].some((key) => key in env)) {
2042
+ return 3;
2043
+ }
2044
+ if (["TRAVIS", "APPVEYOR", "GITLAB_CI", "BUILDKITE", "DRONE"].some((sign) => sign in env) || env.CI_NAME === "codeship") {
2045
+ return 1;
2046
+ }
2047
+ return min;
2048
+ }
2049
+ if ("TEAMCITY_VERSION" in env) {
2050
+ return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;
2051
+ }
2052
+ if (env.COLORTERM === "truecolor") {
2053
+ return 3;
2054
+ }
2055
+ if (env.TERM === "xterm-kitty") {
2056
+ return 3;
2057
+ }
2058
+ if (env.TERM === "xterm-ghostty") {
2059
+ return 3;
2060
+ }
2061
+ if (env.TERM === "wezterm") {
2062
+ return 3;
2063
+ }
2064
+ if ("TERM_PROGRAM" in env) {
2065
+ const version = Number.parseInt((env.TERM_PROGRAM_VERSION || "").split(".")[0], 10);
2066
+ switch (env.TERM_PROGRAM) {
2067
+ case "iTerm.app": {
2068
+ return version >= 3 ? 3 : 2;
2069
+ }
2070
+ case "Apple_Terminal": {
2071
+ return 2;
2072
+ }
2073
+ }
2074
+ }
2075
+ if (/-256(color)?$/i.test(env.TERM)) {
2076
+ return 2;
2077
+ }
2078
+ if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {
2079
+ return 1;
2080
+ }
2081
+ if ("COLORTERM" in env) {
2082
+ return 1;
2083
+ }
2084
+ return min;
2085
+ }
2086
+ function createSupportsColor(stream, options = {}) {
2087
+ const level = _supportsColor(stream, {
2088
+ streamIsTTY: stream && stream.isTTY,
2089
+ ...options
2090
+ });
2091
+ return translateLevel(level);
2092
+ }
2093
+ var supportsColor = {
2094
+ stdout: createSupportsColor({ isTTY: tty.isatty(1) }),
2095
+ stderr: createSupportsColor({ isTTY: tty.isatty(2) })
2096
+ };
2097
+ var supports_color_default = supportsColor;
2098
+
2099
+ // ../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/utilities.js
2100
+ function stringReplaceAll(string, substring, replacer) {
2101
+ let index = string.indexOf(substring);
2102
+ if (index === -1) {
2103
+ return string;
2104
+ }
2105
+ const substringLength = substring.length;
2106
+ let endIndex = 0;
2107
+ let returnValue = "";
2108
+ do {
2109
+ returnValue += string.slice(endIndex, index) + substring + replacer;
2110
+ endIndex = index + substringLength;
2111
+ index = string.indexOf(substring, endIndex);
2112
+ } while (index !== -1);
2113
+ returnValue += string.slice(endIndex);
2114
+ return returnValue;
2115
+ }
2116
+ function stringEncaseCRLFWithFirstIndex(string, prefix, postfix, index) {
2117
+ let endIndex = 0;
2118
+ let returnValue = "";
2119
+ do {
2120
+ const gotCR = string[index - 1] === "\r";
2121
+ returnValue += string.slice(endIndex, gotCR ? index - 1 : index) + prefix + (gotCR ? "\r\n" : "\n") + postfix;
2122
+ endIndex = index + 1;
2123
+ index = string.indexOf("\n", endIndex);
2124
+ } while (index !== -1);
2125
+ returnValue += string.slice(endIndex);
2126
+ return returnValue;
2127
+ }
2128
+
2129
+ // ../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/index.js
2130
+ var { stdout: stdoutColor, stderr: stderrColor } = supports_color_default;
2131
+ var GENERATOR = Symbol("GENERATOR");
2132
+ var STYLER = Symbol("STYLER");
2133
+ var IS_EMPTY = Symbol("IS_EMPTY");
2134
+ var levelMapping = [
2135
+ "ansi",
2136
+ "ansi",
2137
+ "ansi256",
2138
+ "ansi16m"
2139
+ ];
2140
+ var styles2 = /* @__PURE__ */ Object.create(null);
2141
+ var applyOptions = (object, options = {}) => {
2142
+ if (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {
2143
+ throw new Error("The `level` option should be an integer from 0 to 3");
2144
+ }
2145
+ const colorLevel = stdoutColor ? stdoutColor.level : 0;
2146
+ object.level = options.level === void 0 ? colorLevel : options.level;
2147
+ };
2148
+ var chalkFactory = (options) => {
2149
+ const chalk2 = (...strings) => strings.join(" ");
2150
+ applyOptions(chalk2, options);
2151
+ Object.setPrototypeOf(chalk2, createChalk.prototype);
2152
+ return chalk2;
2153
+ };
2154
+ function createChalk(options) {
2155
+ return chalkFactory(options);
2156
+ }
2157
+ Object.setPrototypeOf(createChalk.prototype, Function.prototype);
2158
+ for (const [styleName, style] of Object.entries(ansi_styles_default)) {
2159
+ styles2[styleName] = {
2160
+ get() {
2161
+ const builder = createBuilder(this, createStyler(style.open, style.close, this[STYLER]), this[IS_EMPTY]);
2162
+ Object.defineProperty(this, styleName, { value: builder });
2163
+ return builder;
2164
+ }
2165
+ };
2166
+ }
2167
+ styles2.visible = {
2168
+ get() {
2169
+ const builder = createBuilder(this, this[STYLER], true);
2170
+ Object.defineProperty(this, "visible", { value: builder });
2171
+ return builder;
2172
+ }
2173
+ };
2174
+ var getModelAnsi = (model, level, type, ...arguments_) => {
2175
+ if (model === "rgb") {
2176
+ if (level === "ansi16m") {
2177
+ return ansi_styles_default[type].ansi16m(...arguments_);
2178
+ }
2179
+ if (level === "ansi256") {
2180
+ return ansi_styles_default[type].ansi256(ansi_styles_default.rgbToAnsi256(...arguments_));
2181
+ }
2182
+ return ansi_styles_default[type].ansi(ansi_styles_default.rgbToAnsi(...arguments_));
2183
+ }
2184
+ if (model === "hex") {
2185
+ return getModelAnsi("rgb", level, type, ...ansi_styles_default.hexToRgb(...arguments_));
2186
+ }
2187
+ return ansi_styles_default[type][model](...arguments_);
2188
+ };
2189
+ var usedModels = ["rgb", "hex", "ansi256"];
2190
+ for (const model of usedModels) {
2191
+ styles2[model] = {
2192
+ get() {
2193
+ const { level } = this;
2194
+ return function(...arguments_) {
2195
+ const styler = createStyler(getModelAnsi(model, levelMapping[level], "color", ...arguments_), ansi_styles_default.color.close, this[STYLER]);
2196
+ return createBuilder(this, styler, this[IS_EMPTY]);
2197
+ };
2198
+ }
2199
+ };
2200
+ const bgModel = "bg" + model[0].toUpperCase() + model.slice(1);
2201
+ styles2[bgModel] = {
2202
+ get() {
2203
+ const { level } = this;
2204
+ return function(...arguments_) {
2205
+ const styler = createStyler(getModelAnsi(model, levelMapping[level], "bgColor", ...arguments_), ansi_styles_default.bgColor.close, this[STYLER]);
2206
+ return createBuilder(this, styler, this[IS_EMPTY]);
2207
+ };
2208
+ }
2209
+ };
2210
+ }
2211
+ var proto = Object.defineProperties(() => {
2212
+ }, {
2213
+ ...styles2,
2214
+ level: {
2215
+ enumerable: true,
2216
+ get() {
2217
+ return this[GENERATOR].level;
2218
+ },
2219
+ set(level) {
2220
+ this[GENERATOR].level = level;
2221
+ }
2222
+ }
2223
+ });
2224
+ var createStyler = (open, close, parent) => {
2225
+ let openAll;
2226
+ let closeAll;
2227
+ if (parent === void 0) {
2228
+ openAll = open;
2229
+ closeAll = close;
2230
+ } else {
2231
+ openAll = parent.openAll + open;
2232
+ closeAll = close + parent.closeAll;
2233
+ }
2234
+ return {
2235
+ open,
2236
+ close,
2237
+ openAll,
2238
+ closeAll,
2239
+ parent
2240
+ };
2241
+ };
2242
+ var createBuilder = (self, _styler, _isEmpty) => {
2243
+ const builder = (...arguments_) => applyStyle(builder, arguments_.length === 1 ? "" + arguments_[0] : arguments_.join(" "));
2244
+ Object.setPrototypeOf(builder, proto);
2245
+ builder[GENERATOR] = self;
2246
+ builder[STYLER] = _styler;
2247
+ builder[IS_EMPTY] = _isEmpty;
2248
+ return builder;
2249
+ };
2250
+ var applyStyle = (self, string) => {
2251
+ if (self.level <= 0 || !string) {
2252
+ return self[IS_EMPTY] ? "" : string;
2253
+ }
2254
+ let styler = self[STYLER];
2255
+ if (styler === void 0) {
2256
+ return string;
2257
+ }
2258
+ const { openAll, closeAll } = styler;
2259
+ if (string.includes("\x1B")) {
2260
+ while (styler !== void 0) {
2261
+ string = stringReplaceAll(string, styler.close, styler.open);
2262
+ styler = styler.parent;
2263
+ }
2264
+ }
2265
+ const lfIndex = string.indexOf("\n");
2266
+ if (lfIndex !== -1) {
2267
+ string = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);
2268
+ }
2269
+ return openAll + string + closeAll;
2270
+ };
2271
+ Object.defineProperties(createChalk.prototype, styles2);
2272
+ var chalk = createChalk();
2273
+ var chalkStderr = createChalk({ level: stderrColor ? stderrColor.level : 0 });
2274
+ var source_default = chalk;
2275
+
2276
+ // ../../node_modules/.pnpm/cli-cursor@5.0.0/node_modules/cli-cursor/index.js
2277
+ import process5 from "process";
2278
+
2279
+ // ../../node_modules/.pnpm/restore-cursor@5.1.0/node_modules/restore-cursor/index.js
2280
+ import process4 from "process";
2281
+
2282
+ // ../../node_modules/.pnpm/mimic-function@5.0.1/node_modules/mimic-function/index.js
2283
+ var copyProperty = (to, from, property, ignoreNonConfigurable) => {
2284
+ if (property === "length" || property === "prototype") {
2285
+ return;
2286
+ }
2287
+ if (property === "arguments" || property === "caller") {
2288
+ return;
2289
+ }
2290
+ const toDescriptor = Object.getOwnPropertyDescriptor(to, property);
2291
+ const fromDescriptor = Object.getOwnPropertyDescriptor(from, property);
2292
+ if (!canCopyProperty(toDescriptor, fromDescriptor) && ignoreNonConfigurable) {
2293
+ return;
2294
+ }
2295
+ Object.defineProperty(to, property, fromDescriptor);
2296
+ };
2297
+ var canCopyProperty = function(toDescriptor, fromDescriptor) {
2298
+ return toDescriptor === void 0 || toDescriptor.configurable || toDescriptor.writable === fromDescriptor.writable && toDescriptor.enumerable === fromDescriptor.enumerable && toDescriptor.configurable === fromDescriptor.configurable && (toDescriptor.writable || toDescriptor.value === fromDescriptor.value);
2299
+ };
2300
+ var changePrototype = (to, from) => {
2301
+ const fromPrototype = Object.getPrototypeOf(from);
2302
+ if (fromPrototype === Object.getPrototypeOf(to)) {
2303
+ return;
2304
+ }
2305
+ Object.setPrototypeOf(to, fromPrototype);
2306
+ };
2307
+ var wrappedToString = (withName, fromBody) => `/* Wrapped ${withName}*/
2308
+ ${fromBody}`;
2309
+ var toStringDescriptor = Object.getOwnPropertyDescriptor(Function.prototype, "toString");
2310
+ var toStringName = Object.getOwnPropertyDescriptor(Function.prototype.toString, "name");
2311
+ var changeToString = (to, from, name) => {
2312
+ const withName = name === "" ? "" : `with ${name.trim()}() `;
2313
+ const newToString = wrappedToString.bind(null, withName, from.toString());
2314
+ Object.defineProperty(newToString, "name", toStringName);
2315
+ const { writable, enumerable, configurable } = toStringDescriptor;
2316
+ Object.defineProperty(to, "toString", { value: newToString, writable, enumerable, configurable });
2317
+ };
2318
+ function mimicFunction(to, from, { ignoreNonConfigurable = false } = {}) {
2319
+ const { name } = to;
2320
+ for (const property of Reflect.ownKeys(from)) {
2321
+ copyProperty(to, from, property, ignoreNonConfigurable);
2322
+ }
2323
+ changePrototype(to, from);
2324
+ changeToString(to, from, name);
2325
+ return to;
2326
+ }
2327
+
2328
+ // ../../node_modules/.pnpm/onetime@7.0.0/node_modules/onetime/index.js
2329
+ var calledFunctions = /* @__PURE__ */ new WeakMap();
2330
+ var onetime = (function_, options = {}) => {
2331
+ if (typeof function_ !== "function") {
2332
+ throw new TypeError("Expected a function");
2333
+ }
2334
+ let returnValue;
2335
+ let callCount = 0;
2336
+ const functionName = function_.displayName || function_.name || "<anonymous>";
2337
+ const onetime2 = function(...arguments_) {
2338
+ calledFunctions.set(onetime2, ++callCount);
2339
+ if (callCount === 1) {
2340
+ returnValue = function_.apply(this, arguments_);
2341
+ function_ = void 0;
2342
+ } else if (options.throw === true) {
2343
+ throw new Error(`Function \`${functionName}\` can only be called once`);
2344
+ }
2345
+ return returnValue;
2346
+ };
2347
+ mimicFunction(onetime2, function_);
2348
+ calledFunctions.set(onetime2, callCount);
2349
+ return onetime2;
2350
+ };
2351
+ onetime.callCount = (function_) => {
2352
+ if (!calledFunctions.has(function_)) {
2353
+ throw new Error(`The given function \`${function_.name}\` is not wrapped by the \`onetime\` package`);
2354
+ }
2355
+ return calledFunctions.get(function_);
2356
+ };
2357
+ var onetime_default = onetime;
2358
+
2359
+ // ../../node_modules/.pnpm/signal-exit@4.1.0/node_modules/signal-exit/dist/mjs/signals.js
2360
+ var signals = [];
2361
+ signals.push("SIGHUP", "SIGINT", "SIGTERM");
2362
+ if (process.platform !== "win32") {
2363
+ signals.push(
2364
+ "SIGALRM",
2365
+ "SIGABRT",
2366
+ "SIGVTALRM",
2367
+ "SIGXCPU",
2368
+ "SIGXFSZ",
2369
+ "SIGUSR2",
2370
+ "SIGTRAP",
2371
+ "SIGSYS",
2372
+ "SIGQUIT",
2373
+ "SIGIOT"
2374
+ // should detect profiler and enable/disable accordingly.
2375
+ // see #21
2376
+ // 'SIGPROF'
2377
+ );
2378
+ }
2379
+ if (process.platform === "linux") {
2380
+ signals.push("SIGIO", "SIGPOLL", "SIGPWR", "SIGSTKFLT");
2381
+ }
2382
+
2383
+ // ../../node_modules/.pnpm/signal-exit@4.1.0/node_modules/signal-exit/dist/mjs/index.js
2384
+ var processOk = (process10) => !!process10 && typeof process10 === "object" && typeof process10.removeListener === "function" && typeof process10.emit === "function" && typeof process10.reallyExit === "function" && typeof process10.listeners === "function" && typeof process10.kill === "function" && typeof process10.pid === "number" && typeof process10.on === "function";
2385
+ var kExitEmitter = Symbol.for("signal-exit emitter");
2386
+ var global = globalThis;
2387
+ var ObjectDefineProperty = Object.defineProperty.bind(Object);
2388
+ var Emitter = class {
2389
+ emitted = {
2390
+ afterExit: false,
2391
+ exit: false
2392
+ };
2393
+ listeners = {
2394
+ afterExit: [],
2395
+ exit: []
2396
+ };
2397
+ count = 0;
2398
+ id = Math.random();
2399
+ constructor() {
2400
+ if (global[kExitEmitter]) {
2401
+ return global[kExitEmitter];
2402
+ }
2403
+ ObjectDefineProperty(global, kExitEmitter, {
2404
+ value: this,
2405
+ writable: false,
2406
+ enumerable: false,
2407
+ configurable: false
2408
+ });
2409
+ }
2410
+ on(ev, fn) {
2411
+ this.listeners[ev].push(fn);
2412
+ }
2413
+ removeListener(ev, fn) {
2414
+ const list = this.listeners[ev];
2415
+ const i = list.indexOf(fn);
2416
+ if (i === -1) {
2417
+ return;
2418
+ }
2419
+ if (i === 0 && list.length === 1) {
2420
+ list.length = 0;
2421
+ } else {
2422
+ list.splice(i, 1);
2423
+ }
2424
+ }
2425
+ emit(ev, code, signal) {
2426
+ if (this.emitted[ev]) {
2427
+ return false;
2428
+ }
2429
+ this.emitted[ev] = true;
2430
+ let ret = false;
2431
+ for (const fn of this.listeners[ev]) {
2432
+ ret = fn(code, signal) === true || ret;
2433
+ }
2434
+ if (ev === "exit") {
2435
+ ret = this.emit("afterExit", code, signal) || ret;
2436
+ }
2437
+ return ret;
2438
+ }
2439
+ };
2440
+ var SignalExitBase = class {
2441
+ };
2442
+ var signalExitWrap = (handler) => {
2443
+ return {
2444
+ onExit(cb, opts) {
2445
+ return handler.onExit(cb, opts);
2446
+ },
2447
+ load() {
2448
+ return handler.load();
2449
+ },
2450
+ unload() {
2451
+ return handler.unload();
2452
+ }
2453
+ };
2454
+ };
2455
+ var SignalExitFallback = class extends SignalExitBase {
2456
+ onExit() {
2457
+ return () => {
2458
+ };
2459
+ }
2460
+ load() {
2461
+ }
2462
+ unload() {
2463
+ }
2464
+ };
2465
+ var SignalExit = class extends SignalExitBase {
2466
+ // "SIGHUP" throws an `ENOSYS` error on Windows,
2467
+ // so use a supported signal instead
2468
+ /* c8 ignore start */
2469
+ #hupSig = process3.platform === "win32" ? "SIGINT" : "SIGHUP";
2470
+ /* c8 ignore stop */
2471
+ #emitter = new Emitter();
2472
+ #process;
2473
+ #originalProcessEmit;
2474
+ #originalProcessReallyExit;
2475
+ #sigListeners = {};
2476
+ #loaded = false;
2477
+ constructor(process10) {
2478
+ super();
2479
+ this.#process = process10;
2480
+ this.#sigListeners = {};
2481
+ for (const sig of signals) {
2482
+ this.#sigListeners[sig] = () => {
2483
+ const listeners = this.#process.listeners(sig);
2484
+ let { count } = this.#emitter;
2485
+ const p = process10;
2486
+ if (typeof p.__signal_exit_emitter__ === "object" && typeof p.__signal_exit_emitter__.count === "number") {
2487
+ count += p.__signal_exit_emitter__.count;
2488
+ }
2489
+ if (listeners.length === count) {
2490
+ this.unload();
2491
+ const ret = this.#emitter.emit("exit", null, sig);
2492
+ const s = sig === "SIGHUP" ? this.#hupSig : sig;
2493
+ if (!ret)
2494
+ process10.kill(process10.pid, s);
2495
+ }
2496
+ };
2497
+ }
2498
+ this.#originalProcessReallyExit = process10.reallyExit;
2499
+ this.#originalProcessEmit = process10.emit;
2500
+ }
2501
+ onExit(cb, opts) {
2502
+ if (!processOk(this.#process)) {
2503
+ return () => {
2504
+ };
2505
+ }
2506
+ if (this.#loaded === false) {
2507
+ this.load();
2508
+ }
2509
+ const ev = opts?.alwaysLast ? "afterExit" : "exit";
2510
+ this.#emitter.on(ev, cb);
2511
+ return () => {
2512
+ this.#emitter.removeListener(ev, cb);
2513
+ if (this.#emitter.listeners["exit"].length === 0 && this.#emitter.listeners["afterExit"].length === 0) {
2514
+ this.unload();
2515
+ }
2516
+ };
2517
+ }
2518
+ load() {
2519
+ if (this.#loaded) {
2520
+ return;
2521
+ }
2522
+ this.#loaded = true;
2523
+ this.#emitter.count += 1;
2524
+ for (const sig of signals) {
2525
+ try {
2526
+ const fn = this.#sigListeners[sig];
2527
+ if (fn)
2528
+ this.#process.on(sig, fn);
2529
+ } catch (_) {
2530
+ }
2531
+ }
2532
+ this.#process.emit = (ev, ...a) => {
2533
+ return this.#processEmit(ev, ...a);
2534
+ };
2535
+ this.#process.reallyExit = (code) => {
2536
+ return this.#processReallyExit(code);
2537
+ };
2538
+ }
2539
+ unload() {
2540
+ if (!this.#loaded) {
2541
+ return;
2542
+ }
2543
+ this.#loaded = false;
2544
+ signals.forEach((sig) => {
2545
+ const listener = this.#sigListeners[sig];
2546
+ if (!listener) {
2547
+ throw new Error("Listener not defined for signal: " + sig);
2548
+ }
2549
+ try {
2550
+ this.#process.removeListener(sig, listener);
2551
+ } catch (_) {
2552
+ }
2553
+ });
2554
+ this.#process.emit = this.#originalProcessEmit;
2555
+ this.#process.reallyExit = this.#originalProcessReallyExit;
2556
+ this.#emitter.count -= 1;
2557
+ }
2558
+ #processReallyExit(code) {
2559
+ if (!processOk(this.#process)) {
2560
+ return 0;
2561
+ }
2562
+ this.#process.exitCode = code || 0;
2563
+ this.#emitter.emit("exit", this.#process.exitCode, null);
2564
+ return this.#originalProcessReallyExit.call(this.#process, this.#process.exitCode);
2565
+ }
2566
+ #processEmit(ev, ...args) {
2567
+ const og = this.#originalProcessEmit;
2568
+ if (ev === "exit" && processOk(this.#process)) {
2569
+ if (typeof args[0] === "number") {
2570
+ this.#process.exitCode = args[0];
2571
+ }
2572
+ const ret = og.call(this.#process, ev, ...args);
2573
+ this.#emitter.emit("exit", this.#process.exitCode, null);
2574
+ return ret;
2575
+ } else {
2576
+ return og.call(this.#process, ev, ...args);
2577
+ }
2578
+ }
2579
+ };
2580
+ var process3 = globalThis.process;
2581
+ var {
2582
+ /**
2583
+ * Called when the process is exiting, whether via signal, explicit
2584
+ * exit, or running out of stuff to do.
2585
+ *
2586
+ * If the global process object is not suitable for instrumentation,
2587
+ * then this will be a no-op.
2588
+ *
2589
+ * Returns a function that may be used to unload signal-exit.
2590
+ */
2591
+ onExit,
2592
+ /**
2593
+ * Load the listeners. Likely you never need to call this, unless
2594
+ * doing a rather deep integration with signal-exit functionality.
2595
+ * Mostly exposed for the benefit of testing.
2596
+ *
2597
+ * @internal
2598
+ */
2599
+ load,
2600
+ /**
2601
+ * Unload the listeners. Likely you never need to call this, unless
2602
+ * doing a rather deep integration with signal-exit functionality.
2603
+ * Mostly exposed for the benefit of testing.
2604
+ *
2605
+ * @internal
2606
+ */
2607
+ unload
2608
+ } = signalExitWrap(processOk(process3) ? new SignalExit(process3) : new SignalExitFallback());
2609
+
2610
+ // ../../node_modules/.pnpm/restore-cursor@5.1.0/node_modules/restore-cursor/index.js
2611
+ var terminal = process4.stderr.isTTY ? process4.stderr : process4.stdout.isTTY ? process4.stdout : void 0;
2612
+ var restoreCursor = terminal ? onetime_default(() => {
2613
+ onExit(() => {
2614
+ terminal.write("\x1B[?25h");
2615
+ }, { alwaysLast: true });
2616
+ }) : () => {
2617
+ };
2618
+ var restore_cursor_default = restoreCursor;
2619
+
2620
+ // ../../node_modules/.pnpm/cli-cursor@5.0.0/node_modules/cli-cursor/index.js
2621
+ var isHidden = false;
2622
+ var cliCursor = {};
2623
+ cliCursor.show = (writableStream = process5.stderr) => {
2624
+ if (!writableStream.isTTY) {
2625
+ return;
2626
+ }
2627
+ isHidden = false;
2628
+ writableStream.write("\x1B[?25h");
2629
+ };
2630
+ cliCursor.hide = (writableStream = process5.stderr) => {
2631
+ if (!writableStream.isTTY) {
2632
+ return;
2633
+ }
2634
+ restore_cursor_default();
2635
+ isHidden = true;
2636
+ writableStream.write("\x1B[?25l");
2637
+ };
2638
+ cliCursor.toggle = (force, writableStream) => {
2639
+ if (force !== void 0) {
2640
+ isHidden = force;
2641
+ }
2642
+ if (isHidden) {
2643
+ cliCursor.show(writableStream);
2644
+ } else {
2645
+ cliCursor.hide(writableStream);
2646
+ }
2647
+ };
2648
+ var cli_cursor_default = cliCursor;
2649
+
2650
+ // ../../node_modules/.pnpm/ora@8.2.0/node_modules/ora/index.js
2651
+ var import_cli_spinners = __toESM(require_cli_spinners(), 1);
2652
+
2653
+ // ../../node_modules/.pnpm/is-unicode-supported@1.3.0/node_modules/is-unicode-supported/index.js
2654
+ import process6 from "process";
2655
+ function isUnicodeSupported() {
2656
+ if (process6.platform !== "win32") {
2657
+ return process6.env.TERM !== "linux";
2658
+ }
2659
+ return Boolean(process6.env.CI) || Boolean(process6.env.WT_SESSION) || Boolean(process6.env.TERMINUS_SUBLIME) || process6.env.ConEmuTask === "{cmd::Cmder}" || process6.env.TERM_PROGRAM === "Terminus-Sublime" || process6.env.TERM_PROGRAM === "vscode" || process6.env.TERM === "xterm-256color" || process6.env.TERM === "alacritty" || process6.env.TERMINAL_EMULATOR === "JetBrains-JediTerm";
2660
+ }
2661
+
2662
+ // ../../node_modules/.pnpm/log-symbols@6.0.0/node_modules/log-symbols/index.js
2663
+ var main = {
2664
+ info: source_default.blue("\u2139"),
2665
+ success: source_default.green("\u2714"),
2666
+ warning: source_default.yellow("\u26A0"),
2667
+ error: source_default.red("\u2716")
2668
+ };
2669
+ var fallback = {
2670
+ info: source_default.blue("i"),
2671
+ success: source_default.green("\u221A"),
2672
+ warning: source_default.yellow("\u203C"),
2673
+ error: source_default.red("\xD7")
2674
+ };
2675
+ var logSymbols = isUnicodeSupported() ? main : fallback;
2676
+ var log_symbols_default = logSymbols;
2677
+
2678
+ // ../../node_modules/.pnpm/ansi-regex@6.2.2/node_modules/ansi-regex/index.js
2679
+ function ansiRegex({ onlyFirst = false } = {}) {
2680
+ const ST = "(?:\\u0007|\\u001B\\u005C|\\u009C)";
2681
+ const osc = `(?:\\u001B\\][\\s\\S]*?${ST})`;
2682
+ const csi = "[\\u001B\\u009B][[\\]()#;?]*(?:\\d{1,4}(?:[;:]\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]";
2683
+ const pattern = `${osc}|${csi}`;
2684
+ return new RegExp(pattern, onlyFirst ? void 0 : "g");
2685
+ }
2686
+
2687
+ // ../../node_modules/.pnpm/strip-ansi@7.1.2/node_modules/strip-ansi/index.js
2688
+ var regex = ansiRegex();
2689
+ function stripAnsi(string) {
2690
+ if (typeof string !== "string") {
2691
+ throw new TypeError(`Expected a \`string\`, got \`${typeof string}\``);
2692
+ }
2693
+ return string.replace(regex, "");
2694
+ }
2695
+
2696
+ // ../../node_modules/.pnpm/get-east-asian-width@1.4.0/node_modules/get-east-asian-width/lookup.js
2697
+ function isAmbiguous(x) {
2698
+ return x === 161 || x === 164 || x === 167 || x === 168 || x === 170 || x === 173 || x === 174 || x >= 176 && x <= 180 || x >= 182 && x <= 186 || x >= 188 && x <= 191 || x === 198 || x === 208 || x === 215 || x === 216 || x >= 222 && x <= 225 || x === 230 || x >= 232 && x <= 234 || x === 236 || x === 237 || x === 240 || x === 242 || x === 243 || x >= 247 && x <= 250 || x === 252 || x === 254 || x === 257 || x === 273 || x === 275 || x === 283 || x === 294 || x === 295 || x === 299 || x >= 305 && x <= 307 || x === 312 || x >= 319 && x <= 322 || x === 324 || x >= 328 && x <= 331 || x === 333 || x === 338 || x === 339 || x === 358 || x === 359 || x === 363 || x === 462 || x === 464 || x === 466 || x === 468 || x === 470 || x === 472 || x === 474 || x === 476 || x === 593 || x === 609 || x === 708 || x === 711 || x >= 713 && x <= 715 || x === 717 || x === 720 || x >= 728 && x <= 731 || x === 733 || x === 735 || x >= 768 && x <= 879 || x >= 913 && x <= 929 || x >= 931 && x <= 937 || x >= 945 && x <= 961 || x >= 963 && x <= 969 || x === 1025 || x >= 1040 && x <= 1103 || x === 1105 || x === 8208 || x >= 8211 && x <= 8214 || x === 8216 || x === 8217 || x === 8220 || x === 8221 || x >= 8224 && x <= 8226 || x >= 8228 && x <= 8231 || x === 8240 || x === 8242 || x === 8243 || x === 8245 || x === 8251 || x === 8254 || x === 8308 || x === 8319 || x >= 8321 && x <= 8324 || x === 8364 || x === 8451 || x === 8453 || x === 8457 || x === 8467 || x === 8470 || x === 8481 || x === 8482 || x === 8486 || x === 8491 || x === 8531 || x === 8532 || x >= 8539 && x <= 8542 || x >= 8544 && x <= 8555 || x >= 8560 && x <= 8569 || x === 8585 || x >= 8592 && x <= 8601 || x === 8632 || x === 8633 || x === 8658 || x === 8660 || x === 8679 || x === 8704 || x === 8706 || x === 8707 || x === 8711 || x === 8712 || x === 8715 || x === 8719 || x === 8721 || x === 8725 || x === 8730 || x >= 8733 && x <= 8736 || x === 8739 || x === 8741 || x >= 8743 && x <= 8748 || x === 8750 || x >= 8756 && x <= 8759 || x === 8764 || x === 8765 || x === 8776 || x === 8780 || x === 8786 || x === 8800 || x === 8801 || x >= 8804 && x <= 8807 || x === 8810 || x === 8811 || x === 8814 || x === 8815 || x === 8834 || x === 8835 || x === 8838 || x === 8839 || x === 8853 || x === 8857 || x === 8869 || x === 8895 || x === 8978 || x >= 9312 && x <= 9449 || x >= 9451 && x <= 9547 || x >= 9552 && x <= 9587 || x >= 9600 && x <= 9615 || x >= 9618 && x <= 9621 || x === 9632 || x === 9633 || x >= 9635 && x <= 9641 || x === 9650 || x === 9651 || x === 9654 || x === 9655 || x === 9660 || x === 9661 || x === 9664 || x === 9665 || x >= 9670 && x <= 9672 || x === 9675 || x >= 9678 && x <= 9681 || x >= 9698 && x <= 9701 || x === 9711 || x === 9733 || x === 9734 || x === 9737 || x === 9742 || x === 9743 || x === 9756 || x === 9758 || x === 9792 || x === 9794 || x === 9824 || x === 9825 || x >= 9827 && x <= 9829 || x >= 9831 && x <= 9834 || x === 9836 || x === 9837 || x === 9839 || x === 9886 || x === 9887 || x === 9919 || x >= 9926 && x <= 9933 || x >= 9935 && x <= 9939 || x >= 9941 && x <= 9953 || x === 9955 || x === 9960 || x === 9961 || x >= 9963 && x <= 9969 || x === 9972 || x >= 9974 && x <= 9977 || x === 9979 || x === 9980 || x === 9982 || x === 9983 || x === 10045 || x >= 10102 && x <= 10111 || x >= 11094 && x <= 11097 || x >= 12872 && x <= 12879 || x >= 57344 && x <= 63743 || x >= 65024 && x <= 65039 || x === 65533 || x >= 127232 && x <= 127242 || x >= 127248 && x <= 127277 || x >= 127280 && x <= 127337 || x >= 127344 && x <= 127373 || x === 127375 || x === 127376 || x >= 127387 && x <= 127404 || x >= 917760 && x <= 917999 || x >= 983040 && x <= 1048573 || x >= 1048576 && x <= 1114109;
2699
+ }
2700
+ function isFullWidth(x) {
2701
+ return x === 12288 || x >= 65281 && x <= 65376 || x >= 65504 && x <= 65510;
2702
+ }
2703
+ function isWide(x) {
2704
+ return x >= 4352 && x <= 4447 || x === 8986 || x === 8987 || x === 9001 || x === 9002 || x >= 9193 && x <= 9196 || x === 9200 || x === 9203 || x === 9725 || x === 9726 || x === 9748 || x === 9749 || x >= 9776 && x <= 9783 || x >= 9800 && x <= 9811 || x === 9855 || x >= 9866 && x <= 9871 || x === 9875 || x === 9889 || x === 9898 || x === 9899 || x === 9917 || x === 9918 || x === 9924 || x === 9925 || x === 9934 || x === 9940 || x === 9962 || x === 9970 || x === 9971 || x === 9973 || x === 9978 || x === 9981 || x === 9989 || x === 9994 || x === 9995 || x === 10024 || x === 10060 || x === 10062 || x >= 10067 && x <= 10069 || x === 10071 || x >= 10133 && x <= 10135 || x === 10160 || x === 10175 || x === 11035 || x === 11036 || x === 11088 || x === 11093 || x >= 11904 && x <= 11929 || x >= 11931 && x <= 12019 || x >= 12032 && x <= 12245 || x >= 12272 && x <= 12287 || x >= 12289 && x <= 12350 || x >= 12353 && x <= 12438 || x >= 12441 && x <= 12543 || x >= 12549 && x <= 12591 || x >= 12593 && x <= 12686 || x >= 12688 && x <= 12773 || x >= 12783 && x <= 12830 || x >= 12832 && x <= 12871 || x >= 12880 && x <= 42124 || x >= 42128 && x <= 42182 || x >= 43360 && x <= 43388 || x >= 44032 && x <= 55203 || x >= 63744 && x <= 64255 || x >= 65040 && x <= 65049 || x >= 65072 && x <= 65106 || x >= 65108 && x <= 65126 || x >= 65128 && x <= 65131 || x >= 94176 && x <= 94180 || x >= 94192 && x <= 94198 || x >= 94208 && x <= 101589 || x >= 101631 && x <= 101662 || x >= 101760 && x <= 101874 || x >= 110576 && x <= 110579 || x >= 110581 && x <= 110587 || x === 110589 || x === 110590 || x >= 110592 && x <= 110882 || x === 110898 || x >= 110928 && x <= 110930 || x === 110933 || x >= 110948 && x <= 110951 || x >= 110960 && x <= 111355 || x >= 119552 && x <= 119638 || x >= 119648 && x <= 119670 || x === 126980 || x === 127183 || x === 127374 || x >= 127377 && x <= 127386 || x >= 127488 && x <= 127490 || x >= 127504 && x <= 127547 || x >= 127552 && x <= 127560 || x === 127568 || x === 127569 || x >= 127584 && x <= 127589 || x >= 127744 && x <= 127776 || x >= 127789 && x <= 127797 || x >= 127799 && x <= 127868 || x >= 127870 && x <= 127891 || x >= 127904 && x <= 127946 || x >= 127951 && x <= 127955 || x >= 127968 && x <= 127984 || x === 127988 || x >= 127992 && x <= 128062 || x === 128064 || x >= 128066 && x <= 128252 || x >= 128255 && x <= 128317 || x >= 128331 && x <= 128334 || x >= 128336 && x <= 128359 || x === 128378 || x === 128405 || x === 128406 || x === 128420 || x >= 128507 && x <= 128591 || x >= 128640 && x <= 128709 || x === 128716 || x >= 128720 && x <= 128722 || x >= 128725 && x <= 128728 || x >= 128732 && x <= 128735 || x === 128747 || x === 128748 || x >= 128756 && x <= 128764 || x >= 128992 && x <= 129003 || x === 129008 || x >= 129292 && x <= 129338 || x >= 129340 && x <= 129349 || x >= 129351 && x <= 129535 || x >= 129648 && x <= 129660 || x >= 129664 && x <= 129674 || x >= 129678 && x <= 129734 || x === 129736 || x >= 129741 && x <= 129756 || x >= 129759 && x <= 129770 || x >= 129775 && x <= 129784 || x >= 131072 && x <= 196605 || x >= 196608 && x <= 262141;
2705
+ }
2706
+
2707
+ // ../../node_modules/.pnpm/get-east-asian-width@1.4.0/node_modules/get-east-asian-width/index.js
2708
+ function validate(codePoint) {
2709
+ if (!Number.isSafeInteger(codePoint)) {
2710
+ throw new TypeError(`Expected a code point, got \`${typeof codePoint}\`.`);
2711
+ }
2712
+ }
2713
+ function eastAsianWidth(codePoint, { ambiguousAsWide = false } = {}) {
2714
+ validate(codePoint);
2715
+ if (isFullWidth(codePoint) || isWide(codePoint) || ambiguousAsWide && isAmbiguous(codePoint)) {
2716
+ return 2;
2717
+ }
2718
+ return 1;
2719
+ }
2720
+
2721
+ // ../../node_modules/.pnpm/emoji-regex@10.6.0/node_modules/emoji-regex/index.mjs
2722
+ var emoji_regex_default = () => {
2723
+ return /[#*0-9]\uFE0F?\u20E3|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26AA\u26B0\u26B1\u26BD\u26BE\u26C4\u26C8\u26CF\u26D1\u26E9\u26F0-\u26F5\u26F7\u26F8\u26FA\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B55\u3030\u303D\u3297\u3299]\uFE0F?|[\u261D\u270C\u270D](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\u270A\u270B](?:\uD83C[\uDFFB-\uDFFF])?|[\u23E9-\u23EC\u23F0\u23F3\u25FD\u2693\u26A1\u26AB\u26C5\u26CE\u26D4\u26EA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2795-\u2797\u27B0\u27BF\u2B50]|\u26D3\uFE0F?(?:\u200D\uD83D\uDCA5)?|\u26F9(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\u2764\uFE0F?(?:\u200D(?:\uD83D\uDD25|\uD83E\uDE79))?|\uD83C(?:[\uDC04\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]\uFE0F?|[\uDF85\uDFC2\uDFC7](?:\uD83C[\uDFFB-\uDFFF])?|[\uDFC4\uDFCA](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDFCB\uDFCC](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF43\uDF45-\uDF4A\uDF4C-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF7\uDDFA-\uDDFF]|\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uDDF4\uD83C\uDDF2|\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uDDF6\uD83C\uDDE6|\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF]|\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uDDFC\uD83C[\uDDEB\uDDF8]|\uDDFD\uD83C\uDDF0|\uDDFE\uD83C[\uDDEA\uDDF9]|\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uDF44(?:\u200D\uD83D\uDFEB)?|\uDF4B(?:\u200D\uD83D\uDFE9)?|\uDFC3(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDFF3\uFE0F?(?:\u200D(?:\u26A7\uFE0F?|\uD83C\uDF08))?|\uDFF4(?:\u200D\u2620\uFE0F?|\uDB40\uDC67\uDB40\uDC62\uDB40(?:\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDC73\uDB40\uDC63\uDB40\uDC74|\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F)?)|\uD83D(?:[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3]\uFE0F?|[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC](?:\uD83C[\uDFFB-\uDFFF])?|[\uDC6E-\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4\uDEB5](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD74\uDD90](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC25\uDC27-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE41\uDE43\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED8\uDEDC-\uDEDF\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB\uDFF0]|\uDC08(?:\u200D\u2B1B)?|\uDC15(?:\u200D\uD83E\uDDBA)?|\uDC26(?:\u200D(?:\u2B1B|\uD83D\uDD25))?|\uDC3B(?:\u200D\u2744\uFE0F?)?|\uDC41\uFE0F?(?:\u200D\uD83D\uDDE8\uFE0F?)?|\uDC68(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDC68\uDC69]\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?))?|\uDC69(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?[\uDC68\uDC69]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?|\uDC69\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?))|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFC-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFC-\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFD-\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFD\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFE])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFE]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFE])))?))?|\uDD75(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDE2E(?:\u200D\uD83D\uDCA8)?|\uDE35(?:\u200D\uD83D\uDCAB)?|\uDE36(?:\u200D\uD83C\uDF2B\uFE0F?)?|\uDE42(?:\u200D[\u2194\u2195]\uFE0F?)?|\uDEB6(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?)|\uD83E(?:[\uDD0C\uDD0F\uDD18-\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5\uDEC3-\uDEC5\uDEF0\uDEF2-\uDEF8](?:\uD83C[\uDFFB-\uDFFF])?|[\uDD26\uDD35\uDD37-\uDD39\uDD3C-\uDD3E\uDDB8\uDDB9\uDDCD\uDDCF\uDDD4\uDDD6-\uDDDD](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDDDE\uDDDF](?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD0D\uDD0E\uDD10-\uDD17\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCC\uDDD0\uDDE0-\uDDFF\uDE70-\uDE7C\uDE80-\uDE8A\uDE8E-\uDEC2\uDEC6\uDEC8\uDECD-\uDEDC\uDEDF-\uDEEA\uDEEF]|\uDDCE(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDDD1(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1|\uDDD1\u200D\uD83E\uDDD2(?:\u200D\uD83E\uDDD2)?|\uDDD2(?:\u200D\uD83E\uDDD2)?))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE])))?))?|\uDEF1(?:\uD83C(?:\uDFFB(?:\u200D\uD83E\uDEF2\uD83C[\uDFFC-\uDFFF])?|\uDFFC(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFD-\uDFFF])?|\uDFFD(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])?|\uDFFE(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFD\uDFFF])?|\uDFFF(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFE])?))?)/g;
2724
+ };
2725
+
2726
+ // ../../node_modules/.pnpm/string-width@7.2.0/node_modules/string-width/index.js
2727
+ var segmenter = new Intl.Segmenter();
2728
+ var defaultIgnorableCodePointRegex = new RegExp("^\\p{Default_Ignorable_Code_Point}$", "u");
2729
+ function stringWidth(string, options = {}) {
2730
+ if (typeof string !== "string" || string.length === 0) {
2731
+ return 0;
2732
+ }
2733
+ const {
2734
+ ambiguousIsNarrow = true,
2735
+ countAnsiEscapeCodes = false
2736
+ } = options;
2737
+ if (!countAnsiEscapeCodes) {
2738
+ string = stripAnsi(string);
2739
+ }
2740
+ if (string.length === 0) {
2741
+ return 0;
2742
+ }
2743
+ let width = 0;
2744
+ const eastAsianWidthOptions = { ambiguousAsWide: !ambiguousIsNarrow };
2745
+ for (const { segment: character } of segmenter.segment(string)) {
2746
+ const codePoint = character.codePointAt(0);
2747
+ if (codePoint <= 31 || codePoint >= 127 && codePoint <= 159) {
2748
+ continue;
2749
+ }
2750
+ if (codePoint >= 8203 && codePoint <= 8207 || codePoint === 65279) {
2751
+ continue;
2752
+ }
2753
+ if (codePoint >= 768 && codePoint <= 879 || codePoint >= 6832 && codePoint <= 6911 || codePoint >= 7616 && codePoint <= 7679 || codePoint >= 8400 && codePoint <= 8447 || codePoint >= 65056 && codePoint <= 65071) {
2754
+ continue;
2755
+ }
2756
+ if (codePoint >= 55296 && codePoint <= 57343) {
2757
+ continue;
2758
+ }
2759
+ if (codePoint >= 65024 && codePoint <= 65039) {
2760
+ continue;
2761
+ }
2762
+ if (defaultIgnorableCodePointRegex.test(character)) {
2763
+ continue;
2764
+ }
2765
+ if (emoji_regex_default().test(character)) {
2766
+ width += 2;
2767
+ continue;
2768
+ }
2769
+ width += eastAsianWidth(codePoint, eastAsianWidthOptions);
2770
+ }
2771
+ return width;
2772
+ }
2773
+
2774
+ // ../../node_modules/.pnpm/is-interactive@2.0.0/node_modules/is-interactive/index.js
2775
+ function isInteractive({ stream = process.stdout } = {}) {
2776
+ return Boolean(
2777
+ stream && stream.isTTY && process.env.TERM !== "dumb" && !("CI" in process.env)
2778
+ );
2779
+ }
2780
+
2781
+ // ../../node_modules/.pnpm/is-unicode-supported@2.1.0/node_modules/is-unicode-supported/index.js
2782
+ import process7 from "process";
2783
+ function isUnicodeSupported2() {
2784
+ const { env: env2 } = process7;
2785
+ const { TERM, TERM_PROGRAM } = env2;
2786
+ if (process7.platform !== "win32") {
2787
+ return TERM !== "linux";
2788
+ }
2789
+ return Boolean(env2.WT_SESSION) || Boolean(env2.TERMINUS_SUBLIME) || env2.ConEmuTask === "{cmd::Cmder}" || TERM_PROGRAM === "Terminus-Sublime" || TERM_PROGRAM === "vscode" || TERM === "xterm-256color" || TERM === "alacritty" || TERM === "rxvt-unicode" || TERM === "rxvt-unicode-256color" || env2.TERMINAL_EMULATOR === "JetBrains-JediTerm";
2790
+ }
2791
+
2792
+ // ../../node_modules/.pnpm/stdin-discarder@0.2.2/node_modules/stdin-discarder/index.js
2793
+ import process8 from "process";
2794
+ var ASCII_ETX_CODE = 3;
2795
+ var StdinDiscarder = class {
2796
+ #activeCount = 0;
2797
+ start() {
2798
+ this.#activeCount++;
2799
+ if (this.#activeCount === 1) {
2800
+ this.#realStart();
2801
+ }
2802
+ }
2803
+ stop() {
2804
+ if (this.#activeCount <= 0) {
2805
+ throw new Error("`stop` called more times than `start`");
2806
+ }
2807
+ this.#activeCount--;
2808
+ if (this.#activeCount === 0) {
2809
+ this.#realStop();
2810
+ }
2811
+ }
2812
+ #realStart() {
2813
+ if (process8.platform === "win32" || !process8.stdin.isTTY) {
2814
+ return;
2815
+ }
2816
+ process8.stdin.setRawMode(true);
2817
+ process8.stdin.on("data", this.#handleInput);
2818
+ process8.stdin.resume();
2819
+ }
2820
+ #realStop() {
2821
+ if (!process8.stdin.isTTY) {
2822
+ return;
2823
+ }
2824
+ process8.stdin.off("data", this.#handleInput);
2825
+ process8.stdin.pause();
2826
+ process8.stdin.setRawMode(false);
2827
+ }
2828
+ #handleInput(chunk) {
2829
+ if (chunk[0] === ASCII_ETX_CODE) {
2830
+ process8.emit("SIGINT");
2831
+ }
2832
+ }
2833
+ };
2834
+ var stdinDiscarder = new StdinDiscarder();
2835
+ var stdin_discarder_default = stdinDiscarder;
2836
+
2837
+ // ../../node_modules/.pnpm/ora@8.2.0/node_modules/ora/index.js
2838
+ var import_cli_spinners2 = __toESM(require_cli_spinners(), 1);
2839
+ var Ora = class {
2840
+ #linesToClear = 0;
2841
+ #isDiscardingStdin = false;
2842
+ #lineCount = 0;
2843
+ #frameIndex = -1;
2844
+ #lastSpinnerFrameTime = 0;
2845
+ #options;
2846
+ #spinner;
2847
+ #stream;
2848
+ #id;
2849
+ #initialInterval;
2850
+ #isEnabled;
2851
+ #isSilent;
2852
+ #indent;
2853
+ #text;
2854
+ #prefixText;
2855
+ #suffixText;
2856
+ color;
2857
+ constructor(options) {
2858
+ if (typeof options === "string") {
2859
+ options = {
2860
+ text: options
2861
+ };
2862
+ }
2863
+ this.#options = {
2864
+ color: "cyan",
2865
+ stream: process9.stderr,
2866
+ discardStdin: true,
2867
+ hideCursor: true,
2868
+ ...options
2869
+ };
2870
+ this.color = this.#options.color;
2871
+ this.spinner = this.#options.spinner;
2872
+ this.#initialInterval = this.#options.interval;
2873
+ this.#stream = this.#options.stream;
2874
+ this.#isEnabled = typeof this.#options.isEnabled === "boolean" ? this.#options.isEnabled : isInteractive({ stream: this.#stream });
2875
+ this.#isSilent = typeof this.#options.isSilent === "boolean" ? this.#options.isSilent : false;
2876
+ this.text = this.#options.text;
2877
+ this.prefixText = this.#options.prefixText;
2878
+ this.suffixText = this.#options.suffixText;
2879
+ this.indent = this.#options.indent;
2880
+ if (process9.env.NODE_ENV === "test") {
2881
+ this._stream = this.#stream;
2882
+ this._isEnabled = this.#isEnabled;
2883
+ Object.defineProperty(this, "_linesToClear", {
2884
+ get() {
2885
+ return this.#linesToClear;
2886
+ },
2887
+ set(newValue) {
2888
+ this.#linesToClear = newValue;
2889
+ }
2890
+ });
2891
+ Object.defineProperty(this, "_frameIndex", {
2892
+ get() {
2893
+ return this.#frameIndex;
2894
+ }
2895
+ });
2896
+ Object.defineProperty(this, "_lineCount", {
2897
+ get() {
2898
+ return this.#lineCount;
2899
+ }
2900
+ });
2901
+ }
2902
+ }
2903
+ get indent() {
2904
+ return this.#indent;
2905
+ }
2906
+ set indent(indent = 0) {
2907
+ if (!(indent >= 0 && Number.isInteger(indent))) {
2908
+ throw new Error("The `indent` option must be an integer from 0 and up");
2909
+ }
2910
+ this.#indent = indent;
2911
+ this.#updateLineCount();
2912
+ }
2913
+ get interval() {
2914
+ return this.#initialInterval ?? this.#spinner.interval ?? 100;
2915
+ }
2916
+ get spinner() {
2917
+ return this.#spinner;
2918
+ }
2919
+ set spinner(spinner) {
2920
+ this.#frameIndex = -1;
2921
+ this.#initialInterval = void 0;
2922
+ if (typeof spinner === "object") {
2923
+ if (spinner.frames === void 0) {
2924
+ throw new Error("The given spinner must have a `frames` property");
2925
+ }
2926
+ this.#spinner = spinner;
2927
+ } else if (!isUnicodeSupported2()) {
2928
+ this.#spinner = import_cli_spinners.default.line;
2929
+ } else if (spinner === void 0) {
2930
+ this.#spinner = import_cli_spinners.default.dots;
2931
+ } else if (spinner !== "default" && import_cli_spinners.default[spinner]) {
2932
+ this.#spinner = import_cli_spinners.default[spinner];
2933
+ } else {
2934
+ throw new Error(`There is no built-in spinner named '${spinner}'. See https://github.com/sindresorhus/cli-spinners/blob/main/spinners.json for a full list.`);
2935
+ }
2936
+ }
2937
+ get text() {
2938
+ return this.#text;
2939
+ }
2940
+ set text(value = "") {
2941
+ this.#text = value;
2942
+ this.#updateLineCount();
2943
+ }
2944
+ get prefixText() {
2945
+ return this.#prefixText;
2946
+ }
2947
+ set prefixText(value = "") {
2948
+ this.#prefixText = value;
2949
+ this.#updateLineCount();
2950
+ }
2951
+ get suffixText() {
2952
+ return this.#suffixText;
2953
+ }
2954
+ set suffixText(value = "") {
2955
+ this.#suffixText = value;
2956
+ this.#updateLineCount();
2957
+ }
2958
+ get isSpinning() {
2959
+ return this.#id !== void 0;
2960
+ }
2961
+ #getFullPrefixText(prefixText = this.#prefixText, postfix = " ") {
2962
+ if (typeof prefixText === "string" && prefixText !== "") {
2963
+ return prefixText + postfix;
2964
+ }
2965
+ if (typeof prefixText === "function") {
2966
+ return prefixText() + postfix;
2967
+ }
2968
+ return "";
2969
+ }
2970
+ #getFullSuffixText(suffixText = this.#suffixText, prefix = " ") {
2971
+ if (typeof suffixText === "string" && suffixText !== "") {
2972
+ return prefix + suffixText;
2973
+ }
2974
+ if (typeof suffixText === "function") {
2975
+ return prefix + suffixText();
2976
+ }
2977
+ return "";
2978
+ }
2979
+ #updateLineCount() {
2980
+ const columns = this.#stream.columns ?? 80;
2981
+ const fullPrefixText = this.#getFullPrefixText(this.#prefixText, "-");
2982
+ const fullSuffixText = this.#getFullSuffixText(this.#suffixText, "-");
2983
+ const fullText = " ".repeat(this.#indent) + fullPrefixText + "--" + this.#text + "--" + fullSuffixText;
2984
+ this.#lineCount = 0;
2985
+ for (const line of stripAnsi(fullText).split("\n")) {
2986
+ this.#lineCount += Math.max(1, Math.ceil(stringWidth(line, { countAnsiEscapeCodes: true }) / columns));
2987
+ }
2988
+ }
2989
+ get isEnabled() {
2990
+ return this.#isEnabled && !this.#isSilent;
2991
+ }
2992
+ set isEnabled(value) {
2993
+ if (typeof value !== "boolean") {
2994
+ throw new TypeError("The `isEnabled` option must be a boolean");
2995
+ }
2996
+ this.#isEnabled = value;
2997
+ }
2998
+ get isSilent() {
2999
+ return this.#isSilent;
3000
+ }
3001
+ set isSilent(value) {
3002
+ if (typeof value !== "boolean") {
3003
+ throw new TypeError("The `isSilent` option must be a boolean");
3004
+ }
3005
+ this.#isSilent = value;
3006
+ }
3007
+ frame() {
3008
+ const now = Date.now();
3009
+ if (this.#frameIndex === -1 || now - this.#lastSpinnerFrameTime >= this.interval) {
3010
+ this.#frameIndex = ++this.#frameIndex % this.#spinner.frames.length;
3011
+ this.#lastSpinnerFrameTime = now;
3012
+ }
3013
+ const { frames } = this.#spinner;
3014
+ let frame = frames[this.#frameIndex];
3015
+ if (this.color) {
3016
+ frame = source_default[this.color](frame);
3017
+ }
3018
+ const fullPrefixText = typeof this.#prefixText === "string" && this.#prefixText !== "" ? this.#prefixText + " " : "";
3019
+ const fullText = typeof this.text === "string" ? " " + this.text : "";
3020
+ const fullSuffixText = typeof this.#suffixText === "string" && this.#suffixText !== "" ? " " + this.#suffixText : "";
3021
+ return fullPrefixText + frame + fullText + fullSuffixText;
3022
+ }
3023
+ clear() {
3024
+ if (!this.#isEnabled || !this.#stream.isTTY) {
3025
+ return this;
3026
+ }
3027
+ this.#stream.cursorTo(0);
3028
+ for (let index = 0; index < this.#linesToClear; index++) {
3029
+ if (index > 0) {
3030
+ this.#stream.moveCursor(0, -1);
3031
+ }
3032
+ this.#stream.clearLine(1);
3033
+ }
3034
+ if (this.#indent || this.lastIndent !== this.#indent) {
3035
+ this.#stream.cursorTo(this.#indent);
3036
+ }
3037
+ this.lastIndent = this.#indent;
3038
+ this.#linesToClear = 0;
3039
+ return this;
3040
+ }
3041
+ render() {
3042
+ if (this.#isSilent) {
3043
+ return this;
3044
+ }
3045
+ this.clear();
3046
+ this.#stream.write(this.frame());
3047
+ this.#linesToClear = this.#lineCount;
3048
+ return this;
3049
+ }
3050
+ start(text) {
3051
+ if (text) {
3052
+ this.text = text;
3053
+ }
3054
+ if (this.#isSilent) {
3055
+ return this;
3056
+ }
3057
+ if (!this.#isEnabled) {
3058
+ if (this.text) {
3059
+ this.#stream.write(`- ${this.text}
3060
+ `);
3061
+ }
3062
+ return this;
3063
+ }
3064
+ if (this.isSpinning) {
3065
+ return this;
3066
+ }
3067
+ if (this.#options.hideCursor) {
3068
+ cli_cursor_default.hide(this.#stream);
3069
+ }
3070
+ if (this.#options.discardStdin && process9.stdin.isTTY) {
3071
+ this.#isDiscardingStdin = true;
3072
+ stdin_discarder_default.start();
3073
+ }
3074
+ this.render();
3075
+ this.#id = setInterval(this.render.bind(this), this.interval);
3076
+ return this;
3077
+ }
3078
+ stop() {
3079
+ if (!this.#isEnabled) {
3080
+ return this;
3081
+ }
3082
+ clearInterval(this.#id);
3083
+ this.#id = void 0;
3084
+ this.#frameIndex = 0;
3085
+ this.clear();
3086
+ if (this.#options.hideCursor) {
3087
+ cli_cursor_default.show(this.#stream);
3088
+ }
3089
+ if (this.#options.discardStdin && process9.stdin.isTTY && this.#isDiscardingStdin) {
3090
+ stdin_discarder_default.stop();
3091
+ this.#isDiscardingStdin = false;
3092
+ }
3093
+ return this;
3094
+ }
3095
+ succeed(text) {
3096
+ return this.stopAndPersist({ symbol: log_symbols_default.success, text });
3097
+ }
3098
+ fail(text) {
3099
+ return this.stopAndPersist({ symbol: log_symbols_default.error, text });
3100
+ }
3101
+ warn(text) {
3102
+ return this.stopAndPersist({ symbol: log_symbols_default.warning, text });
3103
+ }
3104
+ info(text) {
3105
+ return this.stopAndPersist({ symbol: log_symbols_default.info, text });
3106
+ }
3107
+ stopAndPersist(options = {}) {
3108
+ if (this.#isSilent) {
3109
+ return this;
3110
+ }
3111
+ const prefixText = options.prefixText ?? this.#prefixText;
3112
+ const fullPrefixText = this.#getFullPrefixText(prefixText, " ");
3113
+ const symbolText = options.symbol ?? " ";
3114
+ const text = options.text ?? this.text;
3115
+ const separatorText = symbolText ? " " : "";
3116
+ const fullText = typeof text === "string" ? separatorText + text : "";
3117
+ const suffixText = options.suffixText ?? this.#suffixText;
3118
+ const fullSuffixText = this.#getFullSuffixText(suffixText, " ");
3119
+ const textToWrite = fullPrefixText + symbolText + fullText + fullSuffixText + "\n";
3120
+ this.stop();
3121
+ this.#stream.write(textToWrite);
3122
+ return this;
3123
+ }
3124
+ };
3125
+ function ora(options) {
3126
+ return new Ora(options);
3127
+ }
3128
+
3129
+ // src/commands/templates.ts
11
3130
  import prompts from "prompts";
12
- import chalk from "chalk";
13
3131
 
14
3132
  // src/core/template-manager.ts
15
3133
  import { request } from "undici";
16
3134
  import {
17
- existsSync,
3135
+ existsSync as existsSync2,
18
3136
  mkdirSync,
19
- readFileSync,
3137
+ readFileSync as readFileSync3,
20
3138
  readdirSync,
21
3139
  rmdirSync,
22
3140
  unlinkSync,
@@ -46,6 +3164,7 @@ var WebhookProviderSchema = z.enum([
46
3164
  "shopify",
47
3165
  "twilio",
48
3166
  "ragie",
3167
+ "recall",
49
3168
  "sendgrid",
50
3169
  "slack",
51
3170
  "discord",
@@ -124,10 +3243,10 @@ var TemplateManager = class {
124
3243
  this.baseDir = baseDir || join(homedir(), ".better-webhook");
125
3244
  this.templatesDir = join(this.baseDir, "templates");
126
3245
  this.cacheFile = join(this.baseDir, "templates-cache.json");
127
- if (!existsSync(this.baseDir)) {
3246
+ if (!existsSync2(this.baseDir)) {
128
3247
  mkdirSync(this.baseDir, { recursive: true });
129
3248
  }
130
- if (!existsSync(this.templatesDir)) {
3249
+ if (!existsSync2(this.templatesDir)) {
131
3250
  mkdirSync(this.templatesDir, { recursive: true });
132
3251
  }
133
3252
  }
@@ -144,9 +3263,9 @@ var TemplateManager = class {
144
3263
  if (!forceRefresh && this.indexCache) {
145
3264
  return this.indexCache;
146
3265
  }
147
- if (!forceRefresh && existsSync(this.cacheFile)) {
3266
+ if (!forceRefresh && existsSync2(this.cacheFile)) {
148
3267
  try {
149
- const cached = JSON.parse(readFileSync(this.cacheFile, "utf-8"));
3268
+ const cached = JSON.parse(readFileSync3(this.cacheFile, "utf-8"));
150
3269
  const cacheAge = Date.now() - (cached.cachedAt || 0);
151
3270
  if (cacheAge < 36e5) {
152
3271
  this.indexCache = cached.index;
@@ -170,9 +3289,9 @@ var TemplateManager = class {
170
3289
  );
171
3290
  return index;
172
3291
  } catch (error) {
173
- if (existsSync(this.cacheFile)) {
3292
+ if (existsSync2(this.cacheFile)) {
174
3293
  try {
175
- const cached = JSON.parse(readFileSync(this.cacheFile, "utf-8"));
3294
+ const cached = JSON.parse(readFileSync3(this.cacheFile, "utf-8"));
176
3295
  if (cached.index) {
177
3296
  this.indexCache = cached.index;
178
3297
  return cached.index;
@@ -213,7 +3332,7 @@ var TemplateManager = class {
213
3332
  const json = JSON.parse(text);
214
3333
  const template = WebhookTemplateSchema.parse(json);
215
3334
  const providerDir = join(this.templatesDir, templateMeta.provider);
216
- if (!existsSync(providerDir)) {
3335
+ if (!existsSync2(providerDir)) {
217
3336
  mkdirSync(providerDir, { recursive: true });
218
3337
  }
219
3338
  const fileName = `${templateId}.json`;
@@ -245,7 +3364,7 @@ var TemplateManager = class {
245
3364
  */
246
3365
  listLocalTemplates() {
247
3366
  const templates2 = [];
248
- if (!existsSync(this.templatesDir)) {
3367
+ if (!existsSync2(this.templatesDir)) {
249
3368
  return templates2;
250
3369
  }
251
3370
  const scanDir = (dir) => {
@@ -256,7 +3375,7 @@ var TemplateManager = class {
256
3375
  scanDir(fullPath);
257
3376
  } else if (entry.isFile() && entry.name.endsWith(".json")) {
258
3377
  try {
259
- const content = JSON.parse(readFileSync(fullPath, "utf-8"));
3378
+ const content = JSON.parse(readFileSync3(fullPath, "utf-8"));
260
3379
  const metadata = content._metadata;
261
3380
  if (metadata) {
262
3381
  const { _metadata, ...templateData } = content;
@@ -333,7 +3452,7 @@ var TemplateManager = class {
333
3452
  */
334
3453
  clearCache() {
335
3454
  this.indexCache = null;
336
- if (existsSync(this.cacheFile)) {
3455
+ if (existsSync2(this.cacheFile)) {
337
3456
  unlinkSync(this.cacheFile);
338
3457
  }
339
3458
  }
@@ -351,7 +3470,7 @@ var TemplateManager = class {
351
3470
  } catch {
352
3471
  }
353
3472
  }
354
- if (existsSync(this.templatesDir)) {
3473
+ if (existsSync2(this.templatesDir)) {
355
3474
  const entries = readdirSync(this.templatesDir, { withFileTypes: true });
356
3475
  for (const entry of entries) {
357
3476
  if (entry.isDirectory()) {
@@ -410,7 +3529,7 @@ var TemplateManager = class {
410
3529
  );
411
3530
  }
412
3531
  const providerDir = join(this.templatesDir, provider);
413
- if (!existsSync(providerDir)) {
3532
+ if (!existsSync2(providerDir)) {
414
3533
  mkdirSync(providerDir, { recursive: true });
415
3534
  }
416
3535
  const metadata = {
@@ -460,7 +3579,7 @@ var listCommand = new Command().name("list").alias("ls").description("List avail
460
3579
  });
461
3580
  spinner.stop();
462
3581
  if (templates2.length === 0) {
463
- console.log(chalk.yellow("\u{1F4ED} No remote templates found."));
3582
+ console.log(source_default.yellow("\u{1F4ED} No remote templates found."));
464
3583
  return;
465
3584
  }
466
3585
  let filtered = templates2;
@@ -471,13 +3590,13 @@ var listCommand = new Command().name("list").alias("ls").description("List avail
471
3590
  }
472
3591
  if (filtered.length === 0) {
473
3592
  console.log(
474
- chalk.yellow(
3593
+ source_default.yellow(
475
3594
  `\u{1F4ED} No templates found for provider: ${options.provider}`
476
3595
  )
477
3596
  );
478
3597
  return;
479
3598
  }
480
- console.log(chalk.bold("\n\u{1F4E6} Available Templates\n"));
3599
+ console.log(source_default.bold("\n\u{1F4E6} Available Templates\n"));
481
3600
  const byProvider = /* @__PURE__ */ new Map();
482
3601
  for (const t of filtered) {
483
3602
  const provider = t.metadata.provider;
@@ -487,24 +3606,24 @@ var listCommand = new Command().name("list").alias("ls").description("List avail
487
3606
  byProvider.get(provider).push(t);
488
3607
  }
489
3608
  for (const [provider, providerTemplates] of byProvider) {
490
- console.log(chalk.cyan.bold(` ${provider.toUpperCase()}`));
3609
+ console.log(source_default.cyan.bold(` ${provider.toUpperCase()}`));
491
3610
  for (const t of providerTemplates) {
492
- const status = t.isDownloaded ? chalk.green("\u2713 downloaded") : chalk.gray("\u25CB remote");
493
- console.log(` ${chalk.white(t.metadata.id)} ${status}`);
3611
+ const status = t.isDownloaded ? source_default.green("\u2713 downloaded") : source_default.gray("\u25CB remote");
3612
+ console.log(` ${source_default.white(t.metadata.id)} ${status}`);
494
3613
  if (t.metadata.description) {
495
- console.log(chalk.gray(` ${t.metadata.description}`));
3614
+ console.log(source_default.gray(` ${t.metadata.description}`));
496
3615
  }
497
3616
  }
498
3617
  console.log();
499
3618
  }
500
- console.log(chalk.gray(` Total: ${filtered.length} templates`));
3619
+ console.log(source_default.gray(` Total: ${filtered.length} templates`));
501
3620
  console.log(
502
- chalk.gray(` Download: better-webhook templates download <id>
3621
+ source_default.gray(` Download: better-webhook templates download <id>
503
3622
  `)
504
3623
  );
505
3624
  } catch (error) {
506
3625
  spinner.fail("Failed to fetch templates");
507
- console.error(chalk.red(error.message));
3626
+ console.error(source_default.red(error.message));
508
3627
  process.exitCode = 1;
509
3628
  }
510
3629
  });
@@ -520,11 +3639,11 @@ var downloadCommand = new Command().name("download").alias("get").argument("[tem
520
3639
  const toDownload = templates2.filter((t) => !t.isDownloaded);
521
3640
  spinner2.stop();
522
3641
  if (toDownload.length === 0) {
523
- console.log(chalk.green("\u2713 All templates already downloaded"));
3642
+ console.log(source_default.green("\u2713 All templates already downloaded"));
524
3643
  return;
525
3644
  }
526
3645
  console.log(
527
- chalk.bold(`
3646
+ source_default.bold(`
528
3647
  Downloading ${toDownload.length} templates...
529
3648
  `)
530
3649
  );
@@ -541,10 +3660,10 @@ Downloading ${toDownload.length} templates...
541
3660
  );
542
3661
  }
543
3662
  }
544
- console.log(chalk.green("\n\u2713 Download complete\n"));
3663
+ console.log(source_default.green("\n\u2713 Download complete\n"));
545
3664
  } catch (error) {
546
3665
  spinner2.fail("Failed to fetch templates");
547
- console.error(chalk.red(error.message));
3666
+ console.error(source_default.red(error.message));
548
3667
  process.exitCode = 1;
549
3668
  }
550
3669
  return;
@@ -558,7 +3677,7 @@ Downloading ${toDownload.length} templates...
558
3677
  spinner2.stop();
559
3678
  const notDownloaded = templates2.filter((t) => !t.isDownloaded);
560
3679
  if (notDownloaded.length === 0) {
561
- console.log(chalk.green("\u2713 All templates already downloaded"));
3680
+ console.log(source_default.green("\u2713 All templates already downloaded"));
562
3681
  return;
563
3682
  }
564
3683
  const choices = notDownloaded.map((t) => ({
@@ -573,13 +3692,13 @@ Downloading ${toDownload.length} templates...
573
3692
  choices
574
3693
  });
575
3694
  if (!response.templateId) {
576
- console.log(chalk.yellow("Cancelled"));
3695
+ console.log(source_default.yellow("Cancelled"));
577
3696
  return;
578
3697
  }
579
3698
  templateId = response.templateId;
580
3699
  } catch (error) {
581
3700
  spinner2.fail("Failed to fetch templates");
582
- console.error(chalk.red(error.message));
3701
+ console.error(source_default.red(error.message));
583
3702
  process.exitCode = 1;
584
3703
  return;
585
3704
  }
@@ -588,14 +3707,14 @@ Downloading ${toDownload.length} templates...
588
3707
  try {
589
3708
  const template = await manager.downloadTemplate(templateId);
590
3709
  spinner.succeed(`Downloaded ${templateId}`);
591
- console.log(chalk.gray(` Saved to: ${template.filePath}`));
3710
+ console.log(source_default.gray(` Saved to: ${template.filePath}`));
592
3711
  console.log(
593
- chalk.gray(` Run with: better-webhook run ${templateId}
3712
+ source_default.gray(` Run with: better-webhook run ${templateId}
594
3713
  `)
595
3714
  );
596
3715
  } catch (error) {
597
3716
  spinner.fail(`Failed to download ${templateId}`);
598
- console.error(chalk.red(error.message));
3717
+ console.error(source_default.red(error.message));
599
3718
  process.exitCode = 1;
600
3719
  }
601
3720
  }
@@ -609,15 +3728,15 @@ var localCommand = new Command().name("local").description("List downloaded loca
609
3728
  );
610
3729
  }
611
3730
  if (templates2.length === 0) {
612
- console.log(chalk.yellow("\n\u{1F4ED} No local templates found."));
3731
+ console.log(source_default.yellow("\n\u{1F4ED} No local templates found."));
613
3732
  console.log(
614
- chalk.gray(
3733
+ source_default.gray(
615
3734
  " Download templates with: better-webhook templates download\n"
616
3735
  )
617
3736
  );
618
3737
  return;
619
3738
  }
620
- console.log(chalk.bold("\n\u{1F4C1} Local Templates\n"));
3739
+ console.log(source_default.bold("\n\u{1F4C1} Local Templates\n"));
621
3740
  const byProvider = /* @__PURE__ */ new Map();
622
3741
  for (const t of templates2) {
623
3742
  const provider = t.metadata.provider;
@@ -627,20 +3746,20 @@ var localCommand = new Command().name("local").description("List downloaded loca
627
3746
  byProvider.get(provider).push(t);
628
3747
  }
629
3748
  for (const [provider, providerTemplates] of byProvider) {
630
- console.log(chalk.cyan.bold(` ${provider.toUpperCase()}`));
3749
+ console.log(source_default.cyan.bold(` ${provider.toUpperCase()}`));
631
3750
  for (const t of providerTemplates) {
632
- console.log(` ${chalk.white(t.id)}`);
633
- console.log(chalk.gray(` Event: ${t.metadata.event}`));
3751
+ console.log(` ${source_default.white(t.id)}`);
3752
+ console.log(source_default.gray(` Event: ${t.metadata.event}`));
634
3753
  console.log(
635
- chalk.gray(
3754
+ source_default.gray(
636
3755
  ` Downloaded: ${new Date(t.downloadedAt).toLocaleDateString()}`
637
3756
  )
638
3757
  );
639
3758
  }
640
3759
  console.log();
641
3760
  }
642
- console.log(chalk.gray(` Total: ${templates2.length} templates`));
643
- console.log(chalk.gray(` Storage: ${manager.getTemplatesDir()}
3761
+ console.log(source_default.gray(` Total: ${templates2.length} templates`));
3762
+ console.log(source_default.gray(` Storage: ${manager.getTemplatesDir()}
644
3763
  `));
645
3764
  });
646
3765
  var searchCommand = new Command().name("search").argument("<query>", "Search query").description("Search templates by name, provider, or event").action(async (query) => {
@@ -651,38 +3770,38 @@ var searchCommand = new Command().name("search").argument("<query>", "Search que
651
3770
  spinner.stop();
652
3771
  const totalCount = results.remote.length + results.local.length;
653
3772
  if (totalCount === 0) {
654
- console.log(chalk.yellow(`
3773
+ console.log(source_default.yellow(`
655
3774
  \u{1F4ED} No templates found for: "${query}"
656
3775
  `));
657
3776
  return;
658
3777
  }
659
- console.log(chalk.bold(`
3778
+ console.log(source_default.bold(`
660
3779
  \u{1F50D} Search Results for "${query}"
661
3780
  `));
662
3781
  if (results.local.length > 0) {
663
- console.log(chalk.cyan.bold(" LOCAL TEMPLATES"));
3782
+ console.log(source_default.cyan.bold(" LOCAL TEMPLATES"));
664
3783
  for (const t of results.local) {
665
3784
  console.log(
666
- ` ${chalk.green("\u2713")} ${t.id} (${t.metadata.provider})`
3785
+ ` ${source_default.green("\u2713")} ${t.id} (${t.metadata.provider})`
667
3786
  );
668
3787
  }
669
3788
  console.log();
670
3789
  }
671
3790
  if (results.remote.length > 0) {
672
- console.log(chalk.cyan.bold(" REMOTE TEMPLATES"));
3791
+ console.log(source_default.cyan.bold(" REMOTE TEMPLATES"));
673
3792
  for (const t of results.remote) {
674
- const status = t.isDownloaded ? chalk.green("\u2713") : chalk.gray("\u25CB");
3793
+ const status = t.isDownloaded ? source_default.green("\u2713") : source_default.gray("\u25CB");
675
3794
  console.log(
676
3795
  ` ${status} ${t.metadata.id} (${t.metadata.provider})`
677
3796
  );
678
3797
  }
679
3798
  console.log();
680
3799
  }
681
- console.log(chalk.gray(` Found: ${totalCount} templates
3800
+ console.log(source_default.gray(` Found: ${totalCount} templates
682
3801
  `));
683
3802
  } catch (error) {
684
3803
  spinner.fail("Search failed");
685
- console.error(chalk.red(error.message));
3804
+ console.error(source_default.red(error.message));
686
3805
  process.exitCode = 1;
687
3806
  }
688
3807
  });
@@ -690,7 +3809,7 @@ var cacheCommand = new Command().name("cache").description("Manage template cach
690
3809
  if (options.clear) {
691
3810
  const manager = getTemplateManager();
692
3811
  manager.clearCache();
693
- console.log(chalk.green("\u2713 Template cache cleared"));
3812
+ console.log(source_default.green("\u2713 Template cache cleared"));
694
3813
  } else {
695
3814
  console.log("Use --clear to clear the template cache");
696
3815
  }
@@ -699,16 +3818,16 @@ var cleanCommand = new Command().name("clean").alias("remove-all").description("
699
3818
  const manager = getTemplateManager();
700
3819
  const templates2 = manager.listLocalTemplates();
701
3820
  if (templates2.length === 0) {
702
- console.log(chalk.yellow("\n\u{1F4ED} No local templates to remove.\n"));
3821
+ console.log(source_default.yellow("\n\u{1F4ED} No local templates to remove.\n"));
703
3822
  return;
704
3823
  }
705
3824
  console.log(
706
- chalk.bold(`
3825
+ source_default.bold(`
707
3826
  \u{1F5D1}\uFE0F Found ${templates2.length} downloaded template(s)
708
3827
  `)
709
3828
  );
710
3829
  for (const t of templates2) {
711
- console.log(chalk.gray(` ${t.id} (${t.metadata.provider})`));
3830
+ console.log(source_default.gray(` ${t.id} (${t.metadata.provider})`));
712
3831
  }
713
3832
  console.log();
714
3833
  if (!options.force) {
@@ -719,28 +3838,27 @@ var cleanCommand = new Command().name("clean").alias("remove-all").description("
719
3838
  initial: false
720
3839
  });
721
3840
  if (!response.confirm) {
722
- console.log(chalk.yellow("Cancelled"));
3841
+ console.log(source_default.yellow("Cancelled"));
723
3842
  return;
724
3843
  }
725
3844
  }
726
3845
  const deleted = manager.deleteAllLocalTemplates();
727
- console.log(chalk.green(`
3846
+ console.log(source_default.green(`
728
3847
  \u2713 Removed ${deleted} template(s)`));
729
- console.log(chalk.gray(` Storage: ${manager.getTemplatesDir()}
3848
+ console.log(source_default.gray(` Storage: ${manager.getTemplatesDir()}
730
3849
  `));
731
3850
  });
732
3851
  var templates = new Command().name("templates").alias("t").description("Manage webhook templates").addCommand(listCommand).addCommand(downloadCommand).addCommand(localCommand).addCommand(searchCommand).addCommand(cacheCommand).addCommand(cleanCommand);
733
3852
 
734
3853
  // src/commands/run.ts
735
3854
  import { Command as Command2 } from "commander";
736
- import ora2 from "ora";
737
3855
  import prompts2 from "prompts";
738
- import chalk2 from "chalk";
739
3856
 
740
3857
  // src/core/executor.ts
741
3858
  import { request as request2 } from "undici";
742
3859
 
743
3860
  // src/core/signature.ts
3861
+ import { Buffer as Buffer2 } from "buffer";
744
3862
  import { createHmac } from "crypto";
745
3863
  function generateStripeSignature(payload, secret, timestamp) {
746
3864
  const ts = timestamp || Math.floor(Date.now() / 1e3);
@@ -815,6 +3933,25 @@ function generateRagieSignature(payload, secret) {
815
3933
  value: signature
816
3934
  };
817
3935
  }
3936
+ function generateRecallSignature(payload, secret, timestamp, webhookId) {
3937
+ if (!secret.startsWith("whsec_")) {
3938
+ throw new Error(
3939
+ "Recall signature generation requires a secret with the whsec_ prefix"
3940
+ );
3941
+ }
3942
+ const ts = timestamp ?? Math.floor(Date.now() / 1e3);
3943
+ const msgId = webhookId ?? `msg_${Date.now()}`;
3944
+ const key = Buffer2.from(secret.slice("whsec_".length), "base64");
3945
+ if (key.length === 0) {
3946
+ throw new Error("Recall signing secret is invalid");
3947
+ }
3948
+ const signedPayload = `${msgId}.${ts}.${payload}`;
3949
+ const signature = createHmac("sha256", key).update(signedPayload).digest("base64");
3950
+ return {
3951
+ header: "Webhook-Signature",
3952
+ value: `v1,${signature}`
3953
+ };
3954
+ }
818
3955
  function generateSignature(provider, payload, secret, options) {
819
3956
  const timestamp = options?.timestamp;
820
3957
  switch (provider) {
@@ -844,6 +3981,13 @@ function generateSignature(provider, payload, secret, options) {
844
3981
  return generateSendGridSignature(payload, secret, timestamp);
845
3982
  case "ragie":
846
3983
  return generateRagieSignature(payload, secret);
3984
+ case "recall":
3985
+ return generateRecallSignature(
3986
+ payload,
3987
+ secret,
3988
+ timestamp,
3989
+ options?.webhookId
3990
+ );
847
3991
  case "discord":
848
3992
  case "custom":
849
3993
  default:
@@ -932,6 +4076,13 @@ function getProviderHeaders(provider, options) {
932
4076
  // Event type + nonce are included in the JSON body envelope.
933
4077
  );
934
4078
  break;
4079
+ case "recall":
4080
+ headers.push(
4081
+ { key: "Content-Type", value: "application/json" },
4082
+ { key: "Webhook-Id", value: options?.webhookId || `msg_${Date.now()}` },
4083
+ { key: "Webhook-Timestamp", value: String(timestamp) }
4084
+ );
4085
+ break;
935
4086
  default:
936
4087
  headers.push({ key: "Content-Type", value: "application/json" });
937
4088
  }
@@ -970,8 +4121,14 @@ async function executeWebhook(options) {
970
4121
  }
971
4122
  }
972
4123
  if (options.secret && options.provider && bodyStr) {
4124
+ const timestampHeader = headers["Webhook-Timestamp"] || headers["webhook-timestamp"] || headers["Svix-Timestamp"] || headers["svix-timestamp"] || headers["X-Slack-Request-Timestamp"] || headers["x-slack-request-timestamp"] || headers["X-Twilio-Email-Event-Webhook-Timestamp"] || headers["x-twilio-email-event-webhook-timestamp"];
4125
+ const parsedTimestamp = timestampHeader ? Number.parseInt(timestampHeader, 10) : void 0;
4126
+ const timestamp = Number.isFinite(parsedTimestamp) ? parsedTimestamp : void 0;
4127
+ const webhookId = headers["Webhook-Id"] || headers["webhook-id"] || headers["Svix-Id"] || headers["svix-id"] || headers["X-GitHub-Delivery"] || headers["x-github-delivery"];
973
4128
  const sig = generateSignature(options.provider, bodyStr, options.secret, {
974
- url: options.url
4129
+ url: options.url,
4130
+ timestamp,
4131
+ webhookId
975
4132
  });
976
4133
  if (sig) {
977
4134
  headers[sig.header] = sig.value;
@@ -1086,6 +4243,7 @@ function getSecretEnvVarName(provider) {
1086
4243
  shopify: "SHOPIFY_WEBHOOK_SECRET",
1087
4244
  twilio: "TWILIO_WEBHOOK_SECRET",
1088
4245
  ragie: "RAGIE_WEBHOOK_SECRET",
4246
+ recall: "RECALL_WEBHOOK_SECRET",
1089
4247
  slack: "SLACK_WEBHOOK_SECRET",
1090
4248
  linear: "LINEAR_WEBHOOK_SECRET",
1091
4249
  clerk: "CLERK_WEBHOOK_SECRET",
@@ -1113,15 +4271,15 @@ var run = new Command2().name("run").argument("[templateId]", "Template ID to ru
1113
4271
  async (templateId, options) => {
1114
4272
  const manager = getTemplateManager();
1115
4273
  if (!templateId) {
1116
- const spinner2 = ora2("Loading templates...").start();
4274
+ const spinner2 = ora("Loading templates...").start();
1117
4275
  try {
1118
4276
  const local = manager.listLocalTemplates();
1119
4277
  const remote = await manager.listRemoteTemplates();
1120
4278
  spinner2.stop();
1121
4279
  if (local.length === 0 && remote.length === 0) {
1122
- console.log(chalk2.yellow("\n\u{1F4ED} No templates available."));
4280
+ console.log(source_default.yellow("\n\u{1F4ED} No templates available."));
1123
4281
  console.log(
1124
- chalk2.gray(
4282
+ source_default.gray(
1125
4283
  " Download templates with: better-webhook templates download\n"
1126
4284
  )
1127
4285
  );
@@ -1131,7 +4289,7 @@ var run = new Command2().name("run").argument("[templateId]", "Template ID to ru
1131
4289
  if (local.length > 0) {
1132
4290
  for (const t of local) {
1133
4291
  choices.push({
1134
- title: `${t.id} ${chalk2.green("(local)")}`,
4292
+ title: `${t.id} ${source_default.green("(local)")}`,
1135
4293
  description: `${t.metadata.provider} - ${t.metadata.event}`,
1136
4294
  value: t.id
1137
4295
  });
@@ -1140,7 +4298,7 @@ var run = new Command2().name("run").argument("[templateId]", "Template ID to ru
1140
4298
  const remoteOnly = remote.filter((t) => !t.isDownloaded);
1141
4299
  for (const t of remoteOnly) {
1142
4300
  choices.push({
1143
- title: `${t.metadata.id} ${chalk2.gray("(remote)")}`,
4301
+ title: `${t.metadata.id} ${source_default.gray("(remote)")}`,
1144
4302
  description: `${t.metadata.provider} - ${t.metadata.event}`,
1145
4303
  value: `remote:${t.metadata.id}`
1146
4304
  });
@@ -1152,20 +4310,20 @@ var run = new Command2().name("run").argument("[templateId]", "Template ID to ru
1152
4310
  choices
1153
4311
  });
1154
4312
  if (!response.templateId) {
1155
- console.log(chalk2.yellow("Cancelled"));
4313
+ console.log(source_default.yellow("Cancelled"));
1156
4314
  return;
1157
4315
  }
1158
4316
  templateId = response.templateId;
1159
4317
  } catch (error) {
1160
4318
  spinner2.fail("Failed to load templates");
1161
- console.error(chalk2.red(error.message));
4319
+ console.error(source_default.red(error.message));
1162
4320
  process.exitCode = 1;
1163
4321
  return;
1164
4322
  }
1165
4323
  }
1166
4324
  if (templateId?.startsWith("remote:")) {
1167
4325
  const remoteId = templateId.replace("remote:", "");
1168
- const downloadSpinner = ora2(`Downloading ${remoteId}...`).start();
4326
+ const downloadSpinner = ora(`Downloading ${remoteId}...`).start();
1169
4327
  try {
1170
4328
  await manager.downloadTemplate(remoteId);
1171
4329
  downloadSpinner.succeed(`Downloaded ${remoteId}`);
@@ -1178,10 +4336,10 @@ var run = new Command2().name("run").argument("[templateId]", "Template ID to ru
1178
4336
  }
1179
4337
  const localTemplate = manager.getLocalTemplate(templateId);
1180
4338
  if (!localTemplate) {
1181
- console.log(chalk2.red(`
4339
+ console.log(source_default.red(`
1182
4340
  \u274C Template not found: ${templateId}`));
1183
4341
  console.log(
1184
- chalk2.gray(
4342
+ source_default.gray(
1185
4343
  " Download it with: better-webhook templates download " + templateId + "\n"
1186
4344
  )
1187
4345
  );
@@ -1194,24 +4352,24 @@ var run = new Command2().name("run").argument("[templateId]", "Template ID to ru
1194
4352
  const envVarName = getSecretEnvVarName(localTemplate.metadata.provider);
1195
4353
  secret = process.env[envVarName];
1196
4354
  }
1197
- console.log(chalk2.bold("\n\u{1F680} Executing Webhook\n"));
1198
- console.log(chalk2.gray(` Template: ${templateId}`));
4355
+ console.log(source_default.bold("\n\u{1F680} Executing Webhook\n"));
4356
+ console.log(source_default.gray(` Template: ${templateId}`));
1199
4357
  console.log(
1200
- chalk2.gray(` Provider: ${localTemplate.metadata.provider}`)
4358
+ source_default.gray(` Provider: ${localTemplate.metadata.provider}`)
1201
4359
  );
1202
- console.log(chalk2.gray(` Event: ${localTemplate.metadata.event}`));
1203
- console.log(chalk2.gray(` Target: ${targetUrl}`));
4360
+ console.log(source_default.gray(` Event: ${localTemplate.metadata.event}`));
4361
+ console.log(source_default.gray(` Target: ${targetUrl}`));
1204
4362
  if (secret) {
1205
- console.log(chalk2.gray(` Signature: Will be generated`));
4363
+ console.log(source_default.gray(` Signature: Will be generated`));
1206
4364
  } else {
1207
4365
  console.log(
1208
- chalk2.yellow(
4366
+ source_default.yellow(
1209
4367
  ` \u26A0\uFE0F No secret provided - signature will not be generated`
1210
4368
  )
1211
4369
  );
1212
4370
  }
1213
4371
  console.log();
1214
- const spinner = ora2("Sending webhook...").start();
4372
+ const spinner = ora("Sending webhook...").start();
1215
4373
  try {
1216
4374
  const result = await executeTemplate(localTemplate.template, {
1217
4375
  url: targetUrl,
@@ -1219,43 +4377,43 @@ var run = new Command2().name("run").argument("[templateId]", "Template ID to ru
1219
4377
  headers: options?.header
1220
4378
  });
1221
4379
  spinner.stop();
1222
- const statusColor = result.status >= 200 && result.status < 300 ? chalk2.green : result.status >= 400 ? chalk2.red : chalk2.yellow;
1223
- console.log(chalk2.bold("\u{1F4E5} Response\n"));
4380
+ const statusColor = result.status >= 200 && result.status < 300 ? source_default.green : result.status >= 400 ? source_default.red : source_default.yellow;
4381
+ console.log(source_default.bold("\u{1F4E5} Response\n"));
1224
4382
  console.log(
1225
4383
  ` Status: ${statusColor(`${result.status} ${result.statusText}`)}`
1226
4384
  );
1227
- console.log(` Duration: ${chalk2.cyan(`${result.duration}ms`)}`);
4385
+ console.log(` Duration: ${source_default.cyan(`${result.duration}ms`)}`);
1228
4386
  if (options?.verbose) {
1229
- console.log(chalk2.bold("\n Headers:"));
4387
+ console.log(source_default.bold("\n Headers:"));
1230
4388
  for (const [key, value] of Object.entries(result.headers)) {
1231
4389
  const headerValue = Array.isArray(value) ? value.join(", ") : value;
1232
- console.log(chalk2.gray(` ${key}: ${headerValue}`));
4390
+ console.log(source_default.gray(` ${key}: ${headerValue}`));
1233
4391
  }
1234
4392
  }
1235
4393
  if (result.json !== void 0) {
1236
- console.log(chalk2.bold("\n Body:"));
4394
+ console.log(source_default.bold("\n Body:"));
1237
4395
  console.log(
1238
- chalk2.gray(
4396
+ source_default.gray(
1239
4397
  JSON.stringify(result.json, null, 2).split("\n").map((l) => ` ${l}`).join("\n")
1240
4398
  )
1241
4399
  );
1242
4400
  } else if (result.bodyText) {
1243
- console.log(chalk2.bold("\n Body:"));
4401
+ console.log(source_default.bold("\n Body:"));
1244
4402
  const preview = result.bodyText.length > 500 ? result.bodyText.slice(0, 500) + "..." : result.bodyText;
1245
- console.log(chalk2.gray(` ${preview}`));
4403
+ console.log(source_default.gray(` ${preview}`));
1246
4404
  }
1247
4405
  console.log();
1248
4406
  if (result.status >= 200 && result.status < 300) {
1249
- console.log(chalk2.green("\u2713 Webhook delivered successfully\n"));
4407
+ console.log(source_default.green("\u2713 Webhook delivered successfully\n"));
1250
4408
  } else {
1251
4409
  console.log(
1252
- chalk2.yellow(`\u26A0 Webhook delivered with status ${result.status}
4410
+ source_default.yellow(`\u26A0 Webhook delivered with status ${result.status}
1253
4411
  `)
1254
4412
  );
1255
4413
  }
1256
4414
  } catch (error) {
1257
4415
  spinner.fail("Request failed");
1258
- console.error(chalk2.red(`
4416
+ console.error(source_default.red(`
1259
4417
  \u274C ${error.message}
1260
4418
  `));
1261
4419
  process.exitCode = 1;
@@ -1265,7 +4423,6 @@ var run = new Command2().name("run").argument("[templateId]", "Template ID to ru
1265
4423
 
1266
4424
  // src/commands/capture.ts
1267
4425
  import { Command as Command3 } from "commander";
1268
- import chalk3 from "chalk";
1269
4426
 
1270
4427
  // src/core/capture-server.ts
1271
4428
  import {
@@ -1275,9 +4432,9 @@ import { WebSocketServer } from "ws";
1275
4432
  import {
1276
4433
  writeFileSync as writeFileSync2,
1277
4434
  mkdirSync as mkdirSync2,
1278
- existsSync as existsSync2,
4435
+ existsSync as existsSync3,
1279
4436
  readdirSync as readdirSync2,
1280
- readFileSync as readFileSync2,
4437
+ readFileSync as readFileSync4,
1281
4438
  unlinkSync as unlinkSync2
1282
4439
  } from "fs";
1283
4440
  import { join as join2 } from "path";
@@ -1298,7 +4455,7 @@ var CaptureServer = class {
1298
4455
  this.enableWebSocket = typeof options === "object" ? options?.enableWebSocket !== false : true;
1299
4456
  this.onCapture = typeof options === "object" ? options?.onCapture : void 0;
1300
4457
  this.verbose = typeof options === "object" ? options?.verbose === true : false;
1301
- if (!existsSync2(this.capturesDir)) {
4458
+ if (!existsSync3(this.capturesDir)) {
1302
4459
  mkdirSync2(this.capturesDir, { recursive: true });
1303
4460
  }
1304
4461
  }
@@ -1533,6 +4690,12 @@ var CaptureServer = class {
1533
4690
  return "ragie";
1534
4691
  }
1535
4692
  }
4693
+ if (this.hasStandardWebhookHeaders(headers)) {
4694
+ const recallUserAgent = this.headerIncludes(headers["user-agent"], "recall");
4695
+ if (recallUserAgent || this.hasRecallStandardWebhookShape(body)) {
4696
+ return "recall";
4697
+ }
4698
+ }
1536
4699
  if (headers["x-shopify-hmac-sha256"] || headers["x-shopify-topic"]) {
1537
4700
  return "shopify";
1538
4701
  }
@@ -1552,6 +4715,9 @@ var CaptureServer = class {
1552
4715
  return "linear";
1553
4716
  }
1554
4717
  if (headers["svix-signature"]) {
4718
+ if (body && typeof body === "object" && "event" in body && typeof body.event === "string" && body.event.startsWith("bot.")) {
4719
+ return "recall";
4720
+ }
1555
4721
  return "clerk";
1556
4722
  }
1557
4723
  return void 0;
@@ -1567,6 +4733,57 @@ var CaptureServer = class {
1567
4733
  }
1568
4734
  }
1569
4735
  }
4736
+ hasStandardWebhookHeaders(headers) {
4737
+ return Boolean(
4738
+ headers["webhook-signature"] || headers["webhook-id"] && headers["webhook-timestamp"]
4739
+ );
4740
+ }
4741
+ hasRecallStandardWebhookShape(body) {
4742
+ if (!body || typeof body !== "object") {
4743
+ return false;
4744
+ }
4745
+ const payload = body;
4746
+ if (this.hasRecallEventPrefix(payload.event)) {
4747
+ return true;
4748
+ }
4749
+ if (this.hasRecallResourceCombination(payload)) {
4750
+ return true;
4751
+ }
4752
+ const nestedData = payload.data;
4753
+ if (nestedData && typeof nestedData === "object") {
4754
+ return this.hasRecallResourceCombination(
4755
+ nestedData
4756
+ );
4757
+ }
4758
+ return false;
4759
+ }
4760
+ hasRecallEventPrefix(event) {
4761
+ if (typeof event !== "string") {
4762
+ return false;
4763
+ }
4764
+ return ["bot.", "transcript.", "participant_events."].some(
4765
+ (prefix) => event.startsWith(prefix)
4766
+ );
4767
+ }
4768
+ hasRecallResourceCombination(payload) {
4769
+ const hasRealtimeEndpoint = "realtime_endpoint" in payload;
4770
+ const hasRecording = "recording" in payload;
4771
+ const hasParticipantEvents = "participant_events" in payload;
4772
+ const hasTranscript = "transcript" in payload;
4773
+ return hasRealtimeEndpoint && hasRecording && (hasParticipantEvents || hasTranscript);
4774
+ }
4775
+ headerIncludes(headerValue, searchText) {
4776
+ const normalizedSearchText = searchText.toLowerCase();
4777
+ if (typeof headerValue === "string") {
4778
+ return headerValue.toLowerCase().includes(normalizedSearchText);
4779
+ }
4780
+ if (Array.isArray(headerValue)) {
4781
+ return headerValue.some(
4782
+ (value) => value.toLowerCase().includes(normalizedSearchText)
4783
+ );
4784
+ }
4785
+ return false;
4786
+ }
1570
4787
  /**
1571
4788
  * Send message to a specific client
1572
4789
  */
@@ -1579,14 +4796,14 @@ var CaptureServer = class {
1579
4796
  * List all captured webhooks
1580
4797
  */
1581
4798
  listCaptures(limit = 100) {
1582
- if (!existsSync2(this.capturesDir)) {
4799
+ if (!existsSync3(this.capturesDir)) {
1583
4800
  return [];
1584
4801
  }
1585
4802
  const files = readdirSync2(this.capturesDir).filter((f) => f.endsWith(".json")).sort().reverse().slice(0, limit);
1586
4803
  const captures2 = [];
1587
4804
  for (const file of files) {
1588
4805
  try {
1589
- const content = readFileSync2(join2(this.capturesDir, file), "utf-8");
4806
+ const content = readFileSync4(join2(this.capturesDir, file), "utf-8");
1590
4807
  const capture2 = JSON.parse(content);
1591
4808
  captures2.push({ file, capture: capture2 });
1592
4809
  } catch {
@@ -1631,7 +4848,7 @@ var capture = new Command3().name("capture").description("Start a server to capt
1631
4848
  async (options) => {
1632
4849
  const port = parseInt(options.port, 10);
1633
4850
  if (isNaN(port) || port < 0 || port > 65535) {
1634
- console.error(chalk3.red("Invalid port number"));
4851
+ console.error(source_default.red("Invalid port number"));
1635
4852
  process.exitCode = 1;
1636
4853
  return;
1637
4854
  }
@@ -1646,7 +4863,7 @@ var capture = new Command3().name("capture").description("Start a server to capt
1646
4863
  process.on("SIGINT", shutdown);
1647
4864
  process.on("SIGTERM", shutdown);
1648
4865
  } catch (error) {
1649
- console.error(chalk3.red(`Failed to start server: ${error.message}`));
4866
+ console.error(source_default.red(`Failed to start server: ${error.message}`));
1650
4867
  process.exitCode = 1;
1651
4868
  }
1652
4869
  }
@@ -1654,12 +4871,11 @@ var capture = new Command3().name("capture").description("Start a server to capt
1654
4871
 
1655
4872
  // src/commands/captures.ts
1656
4873
  import { Command as Command4 } from "commander";
1657
- import chalk4 from "chalk";
1658
4874
  import prompts3 from "prompts";
1659
4875
  import { homedir as homedir4 } from "os";
1660
4876
 
1661
4877
  // src/core/replay-engine.ts
1662
- import { existsSync as existsSync3, readFileSync as readFileSync3, readdirSync as readdirSync3, unlinkSync as unlinkSync3 } from "fs";
4878
+ import { existsSync as existsSync4, readFileSync as readFileSync5, readdirSync as readdirSync3, unlinkSync as unlinkSync3 } from "fs";
1663
4879
  import { join as join3 } from "path";
1664
4880
  import { homedir as homedir3 } from "os";
1665
4881
  var ReplayEngine = class {
@@ -1677,14 +4893,14 @@ var ReplayEngine = class {
1677
4893
  * List all captured webhooks
1678
4894
  */
1679
4895
  listCaptures(limit = 100) {
1680
- if (!existsSync3(this.capturesDir)) {
4896
+ if (!existsSync4(this.capturesDir)) {
1681
4897
  return [];
1682
4898
  }
1683
4899
  const files = readdirSync3(this.capturesDir).filter((f) => f.endsWith(".json")).sort().reverse().slice(0, limit);
1684
4900
  const captures2 = [];
1685
4901
  for (const file of files) {
1686
4902
  try {
1687
- const content = readFileSync3(join3(this.capturesDir, file), "utf-8");
4903
+ const content = readFileSync5(join3(this.capturesDir, file), "utf-8");
1688
4904
  const capture2 = JSON.parse(content);
1689
4905
  captures2.push({ file, capture: capture2 });
1690
4906
  } catch {
@@ -1769,6 +4985,7 @@ var ReplayEngine = class {
1769
4985
  "x-twilio-signature",
1770
4986
  "x-slack-signature",
1771
4987
  "svix-signature",
4988
+ "webhook-signature",
1772
4989
  "linear-signature"
1773
4990
  ];
1774
4991
  const headers = [];
@@ -1840,10 +5057,19 @@ var ReplayEngine = class {
1840
5057
  }
1841
5058
  if (capture2.provider === "ragie" && capture2.body) {
1842
5059
  const body = capture2.body;
5060
+ if (typeof body.type === "string") {
5061
+ return body.type;
5062
+ }
1843
5063
  if (typeof body.event_type === "string") {
1844
5064
  return body.event_type;
1845
5065
  }
1846
5066
  }
5067
+ if (capture2.provider === "recall" && capture2.body) {
5068
+ const body = capture2.body;
5069
+ if (typeof body.event === "string") {
5070
+ return body.event;
5071
+ }
5072
+ }
1847
5073
  const shopifyTopic = headers["x-shopify-topic"];
1848
5074
  if (shopifyTopic) {
1849
5075
  return Array.isArray(shopifyTopic) ? shopifyTopic[0] : shopifyTopic;
@@ -1939,7 +5165,7 @@ var ReplayEngine = class {
1939
5165
  * @returns Number of captures deleted
1940
5166
  */
1941
5167
  deleteAllCaptures() {
1942
- if (!existsSync3(this.capturesDir)) {
5168
+ if (!existsSync4(this.capturesDir)) {
1943
5169
  return 0;
1944
5170
  }
1945
5171
  const files = readdirSync3(this.capturesDir).filter(
@@ -1975,7 +5201,7 @@ function toRelativePath(absolutePath) {
1975
5201
  var listCommand2 = new Command4().name("list").alias("ls").description("List captured webhooks").option("-l, --limit <limit>", "Maximum number of captures to show", "20").option("-p, --provider <provider>", "Filter by provider").action((options) => {
1976
5202
  const limit = parseInt(options.limit, 10);
1977
5203
  if (isNaN(limit) || limit <= 0) {
1978
- console.error(chalk4.red("Invalid limit value"));
5204
+ console.error(source_default.red("Invalid limit value"));
1979
5205
  process.exitCode = 1;
1980
5206
  return;
1981
5207
  }
@@ -1987,90 +5213,90 @@ var listCommand2 = new Command4().name("list").alias("ls").description("List cap
1987
5213
  );
1988
5214
  }
1989
5215
  if (captures2.length === 0) {
1990
- console.log(chalk4.yellow("\n\u{1F4ED} No captured webhooks found."));
5216
+ console.log(source_default.yellow("\n\u{1F4ED} No captured webhooks found."));
1991
5217
  console.log(
1992
- chalk4.gray(" Start capturing with: better-webhook capture\n")
5218
+ source_default.gray(" Start capturing with: better-webhook capture\n")
1993
5219
  );
1994
5220
  return;
1995
5221
  }
1996
- console.log(chalk4.bold("\n\u{1F4E6} Captured Webhooks\n"));
5222
+ console.log(source_default.bold("\n\u{1F4E6} Captured Webhooks\n"));
1997
5223
  for (const { file, capture: capture2 } of captures2) {
1998
5224
  const date = new Date(capture2.timestamp).toLocaleString();
1999
- const provider = capture2.provider ? chalk4.cyan(`[${capture2.provider}]`) : chalk4.gray("[unknown]");
5225
+ const provider = capture2.provider ? source_default.cyan(`[${capture2.provider}]`) : source_default.gray("[unknown]");
2000
5226
  const size = capture2.contentLength || capture2.rawBody?.length || 0;
2001
- console.log(` ${chalk4.white(capture2.id.slice(0, 8))} ${provider}`);
2002
- console.log(chalk4.gray(` ${capture2.method} ${capture2.path}`));
2003
- console.log(chalk4.gray(` ${date} | ${size} bytes`));
2004
- console.log(chalk4.gray(` File: ${file}`));
5227
+ console.log(` ${source_default.white(capture2.id.slice(0, 8))} ${provider}`);
5228
+ console.log(source_default.gray(` ${capture2.method} ${capture2.path}`));
5229
+ console.log(source_default.gray(` ${date} | ${size} bytes`));
5230
+ console.log(source_default.gray(` File: ${file}`));
2005
5231
  console.log();
2006
5232
  }
2007
- console.log(chalk4.gray(` Showing ${captures2.length} captures`));
2008
- console.log(chalk4.gray(` Storage: ${engine.getCapturesDir()}
5233
+ console.log(source_default.gray(` Showing ${captures2.length} captures`));
5234
+ console.log(source_default.gray(` Storage: ${engine.getCapturesDir()}
2009
5235
  `));
2010
5236
  });
2011
5237
  var showCommand = new Command4().name("show").argument("<captureId>", "Capture ID or partial ID").description("Show detailed information about a capture").option("-b, --body", "Show full body content").action((captureId, options) => {
2012
5238
  const engine = getReplayEngine();
2013
5239
  const captureFile = engine.getCapture(captureId);
2014
5240
  if (!captureFile) {
2015
- console.log(chalk4.red(`
5241
+ console.log(source_default.red(`
2016
5242
  \u274C Capture not found: ${captureId}
2017
5243
  `));
2018
5244
  process.exitCode = 1;
2019
5245
  return;
2020
5246
  }
2021
5247
  const { capture: capture2 } = captureFile;
2022
- console.log(chalk4.bold("\n\u{1F4CB} Capture Details\n"));
2023
- console.log(` ${chalk4.gray("ID:")} ${capture2.id}`);
2024
- console.log(` ${chalk4.gray("File:")} ${captureFile.file}`);
5248
+ console.log(source_default.bold("\n\u{1F4CB} Capture Details\n"));
5249
+ console.log(` ${source_default.gray("ID:")} ${capture2.id}`);
5250
+ console.log(` ${source_default.gray("File:")} ${captureFile.file}`);
2025
5251
  console.log(
2026
- ` ${chalk4.gray("Timestamp:")} ${new Date(capture2.timestamp).toLocaleString()}`
5252
+ ` ${source_default.gray("Timestamp:")} ${new Date(capture2.timestamp).toLocaleString()}`
2027
5253
  );
2028
- console.log(` ${chalk4.gray("Method:")} ${capture2.method}`);
2029
- console.log(` ${chalk4.gray("Path:")} ${capture2.path}`);
2030
- console.log(` ${chalk4.gray("URL:")} ${capture2.url}`);
5254
+ console.log(` ${source_default.gray("Method:")} ${capture2.method}`);
5255
+ console.log(` ${source_default.gray("Path:")} ${capture2.path}`);
5256
+ console.log(` ${source_default.gray("URL:")} ${capture2.url}`);
2031
5257
  if (capture2.provider) {
2032
5258
  console.log(
2033
- ` ${chalk4.gray("Provider:")} ${chalk4.cyan(capture2.provider)}`
5259
+ ` ${source_default.gray("Provider:")} ${source_default.cyan(capture2.provider)}`
2034
5260
  );
2035
5261
  }
2036
5262
  console.log(
2037
- ` ${chalk4.gray("Content-Type:")} ${capture2.contentType || "unknown"}`
5263
+ ` ${source_default.gray("Content-Type:")} ${capture2.contentType || "unknown"}`
2038
5264
  );
2039
5265
  console.log(
2040
- ` ${chalk4.gray("Content-Length:")} ${capture2.contentLength || 0} bytes`
5266
+ ` ${source_default.gray("Content-Length:")} ${capture2.contentLength || 0} bytes`
2041
5267
  );
2042
5268
  const queryKeys = Object.keys(capture2.query);
2043
5269
  if (queryKeys.length > 0) {
2044
- console.log(chalk4.bold("\n Query Parameters:"));
5270
+ console.log(source_default.bold("\n Query Parameters:"));
2045
5271
  for (const [key, value] of Object.entries(capture2.query)) {
2046
5272
  const queryValue = Array.isArray(value) ? value.join(", ") : value;
2047
- console.log(chalk4.gray(` ${key}: ${queryValue}`));
5273
+ console.log(source_default.gray(` ${key}: ${queryValue}`));
2048
5274
  }
2049
5275
  }
2050
- console.log(chalk4.bold("\n Headers:"));
5276
+ console.log(source_default.bold("\n Headers:"));
2051
5277
  for (const [key, value] of Object.entries(capture2.headers)) {
2052
5278
  const headerValue = Array.isArray(value) ? value.join(", ") : value;
2053
5279
  const display = headerValue.length > 80 ? headerValue.slice(0, 80) + "..." : headerValue;
2054
- console.log(chalk4.gray(` ${key}: ${display}`));
5280
+ console.log(source_default.gray(` ${key}: ${display}`));
2055
5281
  }
2056
5282
  if (options.body && capture2.body) {
2057
- console.log(chalk4.bold("\n Body:"));
5283
+ console.log(source_default.bold("\n Body:"));
2058
5284
  if (typeof capture2.body === "object") {
2059
5285
  console.log(
2060
- chalk4.gray(
5286
+ source_default.gray(
2061
5287
  JSON.stringify(capture2.body, null, 2).split("\n").map((l) => ` ${l}`).join("\n")
2062
5288
  )
2063
5289
  );
2064
5290
  } else {
2065
- console.log(chalk4.gray(` ${capture2.body}`));
5291
+ console.log(source_default.gray(` ${capture2.body}`));
2066
5292
  }
2067
5293
  } else if (capture2.body) {
2068
- console.log(chalk4.bold("\n Body:"));
5294
+ console.log(source_default.bold("\n Body:"));
2069
5295
  const preview = JSON.stringify(capture2.body).slice(0, 200);
2070
5296
  console.log(
2071
- chalk4.gray(` ${preview}${preview.length >= 200 ? "..." : ""}`)
5297
+ source_default.gray(` ${preview}${preview.length >= 200 ? "..." : ""}`)
2072
5298
  );
2073
- console.log(chalk4.gray(" Use --body to see full content"));
5299
+ console.log(source_default.gray(" Use --body to see full content"));
2074
5300
  }
2075
5301
  console.log();
2076
5302
  });
@@ -2078,30 +5304,30 @@ var searchCommand2 = new Command4().name("search").argument("<query>", "Search q
2078
5304
  const engine = getReplayEngine();
2079
5305
  const results = engine.searchCaptures(query);
2080
5306
  if (results.length === 0) {
2081
- console.log(chalk4.yellow(`
5307
+ console.log(source_default.yellow(`
2082
5308
  \u{1F4ED} No captures found for: "${query}"
2083
5309
  `));
2084
5310
  return;
2085
5311
  }
2086
- console.log(chalk4.bold(`
5312
+ console.log(source_default.bold(`
2087
5313
  \u{1F50D} Search Results for "${query}"
2088
5314
  `));
2089
5315
  for (const { file, capture: capture2 } of results) {
2090
5316
  const date = new Date(capture2.timestamp).toLocaleString();
2091
- const provider = capture2.provider ? chalk4.cyan(`[${capture2.provider}]`) : "";
2092
- console.log(` ${chalk4.white(capture2.id.slice(0, 8))} ${provider}`);
2093
- console.log(chalk4.gray(` ${capture2.method} ${capture2.path}`));
2094
- console.log(chalk4.gray(` ${date}`));
5317
+ const provider = capture2.provider ? source_default.cyan(`[${capture2.provider}]`) : "";
5318
+ console.log(` ${source_default.white(capture2.id.slice(0, 8))} ${provider}`);
5319
+ console.log(source_default.gray(` ${capture2.method} ${capture2.path}`));
5320
+ console.log(source_default.gray(` ${date}`));
2095
5321
  console.log();
2096
5322
  }
2097
- console.log(chalk4.gray(` Found: ${results.length} captures
5323
+ console.log(source_default.gray(` Found: ${results.length} captures
2098
5324
  `));
2099
5325
  });
2100
5326
  var deleteCommand = new Command4().name("delete").alias("rm").argument("<captureId>", "Capture ID or partial ID to delete").description("Delete a specific captured webhook").option("-f, --force", "Skip confirmation prompt").action(async (captureId, options) => {
2101
5327
  const engine = getReplayEngine();
2102
5328
  const captureFile = engine.getCapture(captureId);
2103
5329
  if (!captureFile) {
2104
- console.log(chalk4.red(`
5330
+ console.log(source_default.red(`
2105
5331
  \u274C Capture not found: ${captureId}
2106
5332
  `));
2107
5333
  process.exitCode = 1;
@@ -2109,11 +5335,11 @@ var deleteCommand = new Command4().name("delete").alias("rm").argument("<capture
2109
5335
  }
2110
5336
  const { capture: capture2 } = captureFile;
2111
5337
  if (!options.force) {
2112
- console.log(chalk4.bold("\n\u{1F5D1}\uFE0F Capture to delete:\n"));
2113
- console.log(` ${chalk4.white(capture2.id.slice(0, 8))}`);
2114
- console.log(chalk4.gray(` ${capture2.method} ${capture2.path}`));
5338
+ console.log(source_default.bold("\n\u{1F5D1}\uFE0F Capture to delete:\n"));
5339
+ console.log(` ${source_default.white(capture2.id.slice(0, 8))}`);
5340
+ console.log(source_default.gray(` ${capture2.method} ${capture2.path}`));
2115
5341
  console.log(
2116
- chalk4.gray(` ${new Date(capture2.timestamp).toLocaleString()}`)
5342
+ source_default.gray(` ${new Date(capture2.timestamp).toLocaleString()}`)
2117
5343
  );
2118
5344
  console.log();
2119
5345
  const response = await prompts3({
@@ -2123,19 +5349,19 @@ var deleteCommand = new Command4().name("delete").alias("rm").argument("<capture
2123
5349
  initial: false
2124
5350
  });
2125
5351
  if (!response.confirm) {
2126
- console.log(chalk4.yellow("Cancelled"));
5352
+ console.log(source_default.yellow("Cancelled"));
2127
5353
  return;
2128
5354
  }
2129
5355
  }
2130
5356
  const deleted = engine.deleteCapture(captureId);
2131
5357
  if (deleted) {
2132
5358
  console.log(
2133
- chalk4.green(`
5359
+ source_default.green(`
2134
5360
  \u2713 Deleted capture: ${capture2.id.slice(0, 8)}
2135
5361
  `)
2136
5362
  );
2137
5363
  } else {
2138
- console.log(chalk4.red(`
5364
+ console.log(source_default.red(`
2139
5365
  \u274C Failed to delete capture
2140
5366
  `));
2141
5367
  process.exitCode = 1;
@@ -2145,11 +5371,11 @@ var cleanCommand2 = new Command4().name("clean").alias("remove-all").description
2145
5371
  const engine = getReplayEngine();
2146
5372
  const captures2 = engine.listCaptures(1e4);
2147
5373
  if (captures2.length === 0) {
2148
- console.log(chalk4.yellow("\n\u{1F4ED} No captures to remove.\n"));
5374
+ console.log(source_default.yellow("\n\u{1F4ED} No captures to remove.\n"));
2149
5375
  return;
2150
5376
  }
2151
5377
  console.log(
2152
- chalk4.bold(`
5378
+ source_default.bold(`
2153
5379
  \u{1F5D1}\uFE0F Found ${captures2.length} captured webhook(s)
2154
5380
  `)
2155
5381
  );
@@ -2159,7 +5385,7 @@ var cleanCommand2 = new Command4().name("clean").alias("remove-all").description
2159
5385
  byProvider.set(provider, (byProvider.get(provider) || 0) + 1);
2160
5386
  }
2161
5387
  for (const [provider, count] of byProvider) {
2162
- console.log(chalk4.gray(` ${provider}: ${count}`));
5388
+ console.log(source_default.gray(` ${provider}: ${count}`));
2163
5389
  }
2164
5390
  console.log();
2165
5391
  if (!options.force) {
@@ -2170,14 +5396,14 @@ var cleanCommand2 = new Command4().name("clean").alias("remove-all").description
2170
5396
  initial: false
2171
5397
  });
2172
5398
  if (!response.confirm) {
2173
- console.log(chalk4.yellow("Cancelled"));
5399
+ console.log(source_default.yellow("Cancelled"));
2174
5400
  return;
2175
5401
  }
2176
5402
  }
2177
5403
  const deleted = engine.deleteAllCaptures();
2178
- console.log(chalk4.green(`
5404
+ console.log(source_default.green(`
2179
5405
  \u2713 Removed ${deleted} capture(s)`));
2180
- console.log(chalk4.gray(` Storage: ${engine.getCapturesDir()}
5406
+ console.log(source_default.gray(` Storage: ${engine.getCapturesDir()}
2181
5407
  `));
2182
5408
  });
2183
5409
  var saveAsTemplateCommand = new Command4().name("save-as-template").alias("sat").argument("<captureId>", "Capture ID or partial ID").description("Save a captured webhook as a reusable template").option("--id <id>", "Template ID (auto-generated if not provided)").option("--name <name>", "Template display name").option("--event <event>", "Event type (auto-detected if not provided)").option("--description <description>", "Template description").option("--url <url>", "Default target URL for the template").option("--overwrite", "Overwrite existing template with same ID").action(
@@ -2186,18 +5412,18 @@ var saveAsTemplateCommand = new Command4().name("save-as-template").alias("sat")
2186
5412
  const templateManager = getTemplateManager();
2187
5413
  const captureFile = engine.getCapture(captureId);
2188
5414
  if (!captureFile) {
2189
- console.log(chalk4.red(`
5415
+ console.log(source_default.red(`
2190
5416
  \u274C Capture not found: ${captureId}
2191
5417
  `));
2192
5418
  process.exitCode = 1;
2193
5419
  return;
2194
5420
  }
2195
5421
  const { capture: capture2 } = captureFile;
2196
- console.log(chalk4.bold("\n\u{1F4CB} Capture to save as template:\n"));
2197
- console.log(` ${chalk4.white(capture2.id.slice(0, 8))}`);
2198
- console.log(chalk4.gray(` ${capture2.method} ${capture2.path}`));
5422
+ console.log(source_default.bold("\n\u{1F4CB} Capture to save as template:\n"));
5423
+ console.log(` ${source_default.white(capture2.id.slice(0, 8))}`);
5424
+ console.log(source_default.gray(` ${capture2.method} ${capture2.path}`));
2199
5425
  if (capture2.provider) {
2200
- console.log(chalk4.gray(` Provider: ${capture2.provider}`));
5426
+ console.log(source_default.gray(` Provider: ${capture2.provider}`));
2201
5427
  }
2202
5428
  console.log();
2203
5429
  const template = engine.captureToTemplate(captureId, {
@@ -2215,7 +5441,7 @@ var saveAsTemplateCommand = new Command4().name("save-as-template").alias("sat")
2215
5441
  validate: (value) => value.trim().length > 0 || "Template ID is required"
2216
5442
  });
2217
5443
  if (!response.templateId) {
2218
- console.log(chalk4.yellow("Cancelled"));
5444
+ console.log(source_default.yellow("Cancelled"));
2219
5445
  return;
2220
5446
  }
2221
5447
  templateId = response.templateId;
@@ -2228,7 +5454,7 @@ var saveAsTemplateCommand = new Command4().name("save-as-template").alias("sat")
2228
5454
  initial: false
2229
5455
  });
2230
5456
  if (!response.overwrite) {
2231
- console.log(chalk4.yellow("Cancelled"));
5457
+ console.log(source_default.yellow("Cancelled"));
2232
5458
  return;
2233
5459
  }
2234
5460
  options.overwrite = true;
@@ -2241,24 +5467,24 @@ var saveAsTemplateCommand = new Command4().name("save-as-template").alias("sat")
2241
5467
  description: options.description,
2242
5468
  overwrite: options.overwrite
2243
5469
  });
2244
- console.log(chalk4.green(`
5470
+ console.log(source_default.green(`
2245
5471
  \u2713 Saved template: ${result.id}`));
2246
- console.log(chalk4.gray(` File: ${toRelativePath(result.filePath)}`));
2247
- console.log(chalk4.gray(` Provider: ${template.provider || "custom"}`));
5472
+ console.log(source_default.gray(` File: ${toRelativePath(result.filePath)}`));
5473
+ console.log(source_default.gray(` Provider: ${template.provider || "custom"}`));
2248
5474
  if (template.event) {
2249
- console.log(chalk4.gray(` Event: ${template.event}`));
5475
+ console.log(source_default.gray(` Event: ${template.event}`));
2250
5476
  }
2251
5477
  console.log();
2252
- console.log(chalk4.gray(" Run it with:"));
5478
+ console.log(source_default.gray(" Run it with:"));
2253
5479
  console.log(
2254
- chalk4.cyan(
5480
+ source_default.cyan(
2255
5481
  ` better-webhook run ${result.id} --url http://localhost:3000/webhooks
2256
5482
  `
2257
5483
  )
2258
5484
  );
2259
5485
  } catch (error) {
2260
5486
  const message = error instanceof Error ? error.message : "Failed to save template";
2261
- console.log(chalk4.red(`
5487
+ console.log(source_default.red(`
2262
5488
  \u274C ${message}
2263
5489
  `));
2264
5490
  process.exitCode = 1;
@@ -2269,9 +5495,7 @@ var captures = new Command4().name("captures").alias("c").description("Manage ca
2269
5495
 
2270
5496
  // src/commands/replay.ts
2271
5497
  import { Command as Command5 } from "commander";
2272
- import ora3 from "ora";
2273
5498
  import prompts4 from "prompts";
2274
- import chalk5 from "chalk";
2275
5499
  var replay = new Command5().name("replay").argument("[captureId]", "Capture ID to replay").argument("[targetUrl]", "Target URL to replay to").description("Replay a captured webhook to a target URL").option("-m, --method <method>", "Override HTTP method").option(
2276
5500
  "-H, --header <header>",
2277
5501
  "Add or override header (format: key:value)",
@@ -2292,9 +5516,9 @@ var replay = new Command5().name("replay").argument("[captureId]", "Capture ID t
2292
5516
  if (!captureId) {
2293
5517
  const captures2 = engine.listCaptures(50);
2294
5518
  if (captures2.length === 0) {
2295
- console.log(chalk5.yellow("\n\u{1F4ED} No captured webhooks found."));
5519
+ console.log(source_default.yellow("\n\u{1F4ED} No captured webhooks found."));
2296
5520
  console.log(
2297
- chalk5.gray(" Start capturing with: better-webhook capture\n")
5521
+ source_default.gray(" Start capturing with: better-webhook capture\n")
2298
5522
  );
2299
5523
  return;
2300
5524
  }
@@ -2314,14 +5538,14 @@ var replay = new Command5().name("replay").argument("[captureId]", "Capture ID t
2314
5538
  choices
2315
5539
  });
2316
5540
  if (!response.captureId) {
2317
- console.log(chalk5.yellow("Cancelled"));
5541
+ console.log(source_default.yellow("Cancelled"));
2318
5542
  return;
2319
5543
  }
2320
5544
  captureId = response.captureId;
2321
5545
  }
2322
5546
  const captureFile = engine.getCapture(captureId);
2323
5547
  if (!captureFile) {
2324
- console.log(chalk5.red(`
5548
+ console.log(source_default.red(`
2325
5549
  \u274C Capture not found: ${captureId}
2326
5550
  `));
2327
5551
  process.exitCode = 1;
@@ -2343,21 +5567,21 @@ var replay = new Command5().name("replay").argument("[captureId]", "Capture ID t
2343
5567
  }
2344
5568
  });
2345
5569
  if (!response.url) {
2346
- console.log(chalk5.yellow("Cancelled"));
5570
+ console.log(source_default.yellow("Cancelled"));
2347
5571
  return;
2348
5572
  }
2349
5573
  targetUrl = response.url;
2350
5574
  }
2351
5575
  const { capture: capture2 } = captureFile;
2352
- console.log(chalk5.bold("\n\u{1F504} Replaying Webhook\n"));
2353
- console.log(chalk5.gray(` Capture ID: ${capture2.id.slice(0, 8)}`));
2354
- console.log(chalk5.gray(` Original: ${capture2.method} ${capture2.path}`));
5576
+ console.log(source_default.bold("\n\u{1F504} Replaying Webhook\n"));
5577
+ console.log(source_default.gray(` Capture ID: ${capture2.id.slice(0, 8)}`));
5578
+ console.log(source_default.gray(` Original: ${capture2.method} ${capture2.path}`));
2355
5579
  if (capture2.provider) {
2356
- console.log(chalk5.gray(` Provider: ${capture2.provider}`));
5580
+ console.log(source_default.gray(` Provider: ${capture2.provider}`));
2357
5581
  }
2358
- console.log(chalk5.gray(` Target: ${targetUrl}`));
5582
+ console.log(source_default.gray(` Target: ${targetUrl}`));
2359
5583
  console.log();
2360
- const spinner = ora3("Replaying webhook...").start();
5584
+ const spinner = ora("Replaying webhook...").start();
2361
5585
  try {
2362
5586
  const result = await engine.replay(captureId, {
2363
5587
  targetUrl,
@@ -2365,43 +5589,43 @@ var replay = new Command5().name("replay").argument("[captureId]", "Capture ID t
2365
5589
  headers: options?.header
2366
5590
  });
2367
5591
  spinner.stop();
2368
- const statusColor = result.status >= 200 && result.status < 300 ? chalk5.green : result.status >= 400 ? chalk5.red : chalk5.yellow;
2369
- console.log(chalk5.bold("\u{1F4E5} Response\n"));
5592
+ const statusColor = result.status >= 200 && result.status < 300 ? source_default.green : result.status >= 400 ? source_default.red : source_default.yellow;
5593
+ console.log(source_default.bold("\u{1F4E5} Response\n"));
2370
5594
  console.log(
2371
5595
  ` Status: ${statusColor(`${result.status} ${result.statusText}`)}`
2372
5596
  );
2373
- console.log(` Duration: ${chalk5.cyan(`${result.duration}ms`)}`);
5597
+ console.log(` Duration: ${source_default.cyan(`${result.duration}ms`)}`);
2374
5598
  if (options?.verbose) {
2375
- console.log(chalk5.bold("\n Headers:"));
5599
+ console.log(source_default.bold("\n Headers:"));
2376
5600
  for (const [key, value] of Object.entries(result.headers)) {
2377
5601
  const headerValue = Array.isArray(value) ? value.join(", ") : value;
2378
- console.log(chalk5.gray(` ${key}: ${headerValue}`));
5602
+ console.log(source_default.gray(` ${key}: ${headerValue}`));
2379
5603
  }
2380
5604
  }
2381
5605
  if (result.json !== void 0) {
2382
- console.log(chalk5.bold("\n Body:"));
5606
+ console.log(source_default.bold("\n Body:"));
2383
5607
  console.log(
2384
- chalk5.gray(
5608
+ source_default.gray(
2385
5609
  JSON.stringify(result.json, null, 2).split("\n").map((l) => ` ${l}`).join("\n")
2386
5610
  )
2387
5611
  );
2388
5612
  } else if (result.bodyText) {
2389
- console.log(chalk5.bold("\n Body:"));
5613
+ console.log(source_default.bold("\n Body:"));
2390
5614
  const preview = result.bodyText.length > 500 ? result.bodyText.slice(0, 500) + "..." : result.bodyText;
2391
- console.log(chalk5.gray(` ${preview}`));
5615
+ console.log(source_default.gray(` ${preview}`));
2392
5616
  }
2393
5617
  console.log();
2394
5618
  if (result.status >= 200 && result.status < 300) {
2395
- console.log(chalk5.green("\u2713 Replay completed successfully\n"));
5619
+ console.log(source_default.green("\u2713 Replay completed successfully\n"));
2396
5620
  } else {
2397
5621
  console.log(
2398
- chalk5.yellow(`\u26A0 Replay completed with status ${result.status}
5622
+ source_default.yellow(`\u26A0 Replay completed with status ${result.status}
2399
5623
  `)
2400
5624
  );
2401
5625
  }
2402
5626
  } catch (error) {
2403
5627
  spinner.fail("Replay failed");
2404
- console.error(chalk5.red(`
5628
+ console.error(source_default.red(`
2405
5629
  \u274C ${error.message}
2406
5630
  `));
2407
5631
  process.exitCode = 1;
@@ -2411,15 +5635,13 @@ var replay = new Command5().name("replay").argument("[captureId]", "Capture ID t
2411
5635
 
2412
5636
  // src/commands/dashboard.ts
2413
5637
  import { Command as Command6 } from "commander";
2414
- import chalk6 from "chalk";
2415
5638
 
2416
5639
  // src/core/dashboard-server.ts
2417
5640
  import express2 from "express";
2418
5641
  import { createServer as createServer2 } from "http";
2419
5642
  import { WebSocketServer as WebSocketServer2 } from "ws";
2420
- import path from "path";
2421
- import { existsSync as existsSync4 } from "fs";
2422
- import { fileURLToPath } from "url";
5643
+ import path3 from "path";
5644
+ import { existsSync as existsSync5 } from "fs";
2423
5645
 
2424
5646
  // src/core/dashboard-api.ts
2425
5647
  import express from "express";
@@ -2434,6 +5656,7 @@ function getSecretEnvVarName2(provider) {
2434
5656
  shopify: "SHOPIFY_WEBHOOK_SECRET",
2435
5657
  twilio: "TWILIO_WEBHOOK_SECRET",
2436
5658
  ragie: "RAGIE_WEBHOOK_SECRET",
5659
+ recall: "RECALL_WEBHOOK_SECRET",
2437
5660
  slack: "SLACK_WEBHOOK_SECRET",
2438
5661
  linear: "LINEAR_WEBHOOK_SECRET",
2439
5662
  clerk: "CLERK_WEBHOOK_SECRET",
@@ -2783,7 +6006,7 @@ function isStandaloneBinary() {
2783
6006
  return false;
2784
6007
  }
2785
6008
  function getMimeType(filePath) {
2786
- const ext = path.extname(filePath).toLowerCase();
6009
+ const ext = path3.extname(filePath).toLowerCase();
2787
6010
  const mimeTypes = {
2788
6011
  ".html": "text/html; charset=utf-8",
2789
6012
  ".js": "application/javascript; charset=utf-8",
@@ -2856,20 +6079,35 @@ function createEmbeddedDashboardMiddleware() {
2856
6079
  };
2857
6080
  return { staticMiddleware, spaFallback };
2858
6081
  }
2859
- function resolveDashboardDistDir(runtimeDir) {
6082
+ function resolveDashboardDistDir(runtimeDir, options = {}) {
6083
+ const runtimePackageRoot = findCliPackageRoot(runtimeDir);
6084
+ const includePackageRootDistCandidate = runtimePackageRoot !== void 0 && runtimePackageRoot === runtimeDir;
2860
6085
  const candidates = [
6086
+ // Package root fallback -> dist/dashboard (only when runtimeDir is package root)
6087
+ ...includePackageRootDistCandidate ? [path3.resolve(runtimeDir, "dist", "dashboard")] : [],
2861
6088
  // Bundled CLI: dist/index.js -> dist/dashboard
2862
- path.resolve(runtimeDir, "dashboard"),
6089
+ path3.resolve(runtimeDir, "dashboard"),
2863
6090
  // Legacy/unbundled: dist/core -> dist/dashboard
2864
- path.resolve(runtimeDir, "..", "dashboard"),
6091
+ path3.resolve(runtimeDir, "..", "dashboard"),
6092
+ // Dev from src -> dist/dashboard
6093
+ path3.resolve(runtimeDir, "..", "dist", "dashboard"),
2865
6094
  // Dev from src/core -> dist/dashboard
2866
- path.resolve(runtimeDir, "..", "..", "dist", "dashboard"),
6095
+ path3.resolve(runtimeDir, "..", "..", "dist", "dashboard"),
6096
+ // Dev from package root -> apps/dashboard/dist
6097
+ path3.resolve(runtimeDir, "..", "dashboard", "dist"),
6098
+ // Dev from src -> apps/dashboard/dist
6099
+ path3.resolve(runtimeDir, "..", "..", "dashboard", "dist"),
2867
6100
  // Dev from src/core -> apps/dashboard/dist
2868
- path.resolve(runtimeDir, "..", "..", "..", "dashboard", "dist")
6101
+ path3.resolve(runtimeDir, "..", "..", "..", "dashboard", "dist")
2869
6102
  ];
6103
+ if (options.verbose) {
6104
+ console.debug(
6105
+ `[dashboard] dist resolution candidates: ${candidates.join(", ")}`
6106
+ );
6107
+ }
2870
6108
  for (const distDir of candidates) {
2871
- const indexHtml = path.join(distDir, "index.html");
2872
- if (existsSync4(indexHtml)) {
6109
+ const indexHtml = path3.join(distDir, "index.html");
6110
+ if (existsSync5(indexHtml)) {
2873
6111
  return { distDir, indexHtml };
2874
6112
  }
2875
6113
  }
@@ -2914,11 +6152,8 @@ async function startDashboardServer(options = {}) {
2914
6152
  app.use(staticMiddleware);
2915
6153
  app.get("*", spaFallback);
2916
6154
  } else {
2917
- const runtimeDir = typeof __dirname !== "undefined" ? (
2918
- // eslint-disable-next-line no-undef
2919
- __dirname
2920
- ) : path.dirname(fileURLToPath(import.meta.url));
2921
- const { distDir: dashboardDistDir, indexHtml: dashboardIndexHtml } = resolveDashboardDistDir(runtimeDir);
6155
+ const runtimeDir = resolveRuntimeDir();
6156
+ const { distDir: dashboardDistDir, indexHtml: dashboardIndexHtml } = resolveDashboardDistDir(runtimeDir, { verbose: options.verbose });
2922
6157
  app.use(express2.static(dashboardDistDir));
2923
6158
  app.get("*", (req, res, next) => {
2924
6159
  if (req.path.startsWith("/api") || req.path === "/health") return next();
@@ -2991,82 +6226,80 @@ async function startDashboardServer(options = {}) {
2991
6226
  }
2992
6227
 
2993
6228
  // src/commands/dashboard.ts
2994
- var dashboard = new Command6().name("dashboard").description("Start the local dashboard (UI + API + WebSocket) server").option("-p, --port <port>", "Port to listen on", "4000").option("-h, --host <host>", "Host to bind to", "localhost").option("--capture-port <port>", "Capture server port", "3001").option("--capture-host <host>", "Capture server host", "0.0.0.0").option("--no-capture", "Do not start the capture server").option("--captures-dir <dir>", "Override captures directory").option("--templates-dir <dir>", "Override templates base directory").action(async (options) => {
2995
- const port = Number.parseInt(String(options.port), 10);
2996
- if (!Number.isFinite(port) || port < 0 || port > 65535) {
2997
- console.error(chalk6.red("Invalid port number"));
2998
- process.exitCode = 1;
2999
- return;
3000
- }
3001
- try {
6229
+ var dashboard = new Command6().name("dashboard").description("Start the local dashboard (UI + API + WebSocket) server").option("-p, --port <port>", "Port to listen on", "4000").option("-h, --host <host>", "Host to bind to", "localhost").option("-v, --verbose", "Show dashboard startup debug details").option("--debug", "Alias for --verbose").option("--capture-port <port>", "Capture server port", "3001").option("--capture-host <host>", "Capture server host", "0.0.0.0").option("--no-capture", "Do not start the capture server").option("--captures-dir <dir>", "Override captures directory").option("--templates-dir <dir>", "Override templates base directory").action(
6230
+ async (options) => {
6231
+ const port = Number.parseInt(String(options.port), 10);
6232
+ if (!Number.isFinite(port) || port < 0 || port > 65535) {
6233
+ console.error(source_default.red("Invalid port number"));
6234
+ process.exitCode = 1;
6235
+ return;
6236
+ }
3002
6237
  const capturePort = Number.parseInt(String(options.capturePort), 10);
3003
6238
  if (!Number.isFinite(capturePort) || capturePort < 0 || capturePort > 65535) {
3004
- console.error(chalk6.red("Invalid capture port number"));
6239
+ console.error(source_default.red("Invalid capture port number"));
3005
6240
  process.exitCode = 1;
3006
6241
  return;
3007
6242
  }
3008
- const { url, server, capture: capture2 } = await startDashboardServer({
3009
- host: options.host,
3010
- port,
3011
- captureHost: options.captureHost,
3012
- capturePort,
3013
- startCapture: options.capture !== false,
3014
- capturesDir: options.capturesDir,
3015
- templatesBaseDir: options.templatesDir
3016
- });
3017
- console.log(chalk6.bold("\n\u{1F9ED} Dashboard Server\n"));
3018
- console.log(chalk6.gray(` Dashboard: ${url}/`));
3019
- console.log(chalk6.gray(` Health: ${url}/health`));
3020
- console.log(chalk6.gray(` API Base: ${url}/api`));
3021
- console.log(
3022
- chalk6.gray(` WebSocket: ${url.replace("http://", "ws://")}/ws`)
3023
- );
3024
- if (capture2) {
3025
- console.log();
3026
- console.log(chalk6.bold("\u{1F3A3} Capture Server"));
3027
- console.log(chalk6.gray(` Capture: ${capture2.url}`));
6243
+ try {
6244
+ const verbose = Boolean(options.verbose || options.debug);
6245
+ const { url, server, capture: capture2 } = await startDashboardServer({
6246
+ host: options.host,
6247
+ port,
6248
+ captureHost: options.captureHost,
6249
+ capturePort,
6250
+ startCapture: options.capture !== false,
6251
+ capturesDir: options.capturesDir,
6252
+ templatesBaseDir: options.templatesDir,
6253
+ verbose
6254
+ });
6255
+ console.log(source_default.bold("\n\u{1F9ED} Dashboard Server\n"));
6256
+ console.log(source_default.gray(` Dashboard: ${url}/`));
6257
+ console.log(source_default.gray(` Health: ${url}/health`));
6258
+ console.log(source_default.gray(` API Base: ${url}/api`));
3028
6259
  console.log(
3029
- chalk6.gray(
3030
- ` Tip: Send webhooks to any path, e.g. ${capture2.url}/webhooks/github`
3031
- )
6260
+ source_default.gray(` WebSocket: ${url.replace("http://", "ws://")}/ws`)
3032
6261
  );
3033
- }
3034
- console.log();
3035
- const shutdown = async () => {
3036
6262
  if (capture2) {
3037
- await capture2.server.stop();
6263
+ console.log();
6264
+ console.log(source_default.bold("\u{1F3A3} Capture Server"));
6265
+ console.log(source_default.gray(` Capture: ${capture2.url}`));
6266
+ console.log(
6267
+ source_default.gray(
6268
+ ` Tip: Send webhooks to any path, e.g. ${capture2.url}/webhooks/github`
6269
+ )
6270
+ );
3038
6271
  }
3039
- await new Promise((resolve) => server.close(() => resolve()));
3040
- process.exit(0);
3041
- };
3042
- process.on("SIGINT", shutdown);
3043
- process.on("SIGTERM", shutdown);
3044
- } catch (error) {
3045
- console.error(
3046
- chalk6.red(
3047
- `Failed to start dashboard server: ${error?.message || error}`
3048
- )
3049
- );
3050
- process.exitCode = 1;
6272
+ console.log();
6273
+ const shutdown = async () => {
6274
+ if (capture2) {
6275
+ await capture2.server.stop();
6276
+ }
6277
+ await new Promise((resolve) => server.close(() => resolve()));
6278
+ process.exit(0);
6279
+ };
6280
+ process.on("SIGINT", shutdown);
6281
+ process.on("SIGTERM", shutdown);
6282
+ } catch (error) {
6283
+ const message = error instanceof Error ? error.message : String(error);
6284
+ console.error(
6285
+ source_default.red(`Failed to start dashboard server: ${message}`)
6286
+ );
6287
+ process.exitCode = 1;
6288
+ }
3051
6289
  }
3052
- });
6290
+ );
3053
6291
 
3054
6292
  // src/index.ts
3055
6293
  function getVersion() {
3056
6294
  if (typeof CLI_VERSION !== "undefined") {
3057
6295
  return CLI_VERSION;
3058
6296
  }
3059
- try {
3060
- const packageJsonPath = fileURLToPath2(
3061
- new URL("../package.json", import.meta.url)
3062
- );
3063
- const packageJson = JSON.parse(
3064
- readFileSync5(packageJsonPath, { encoding: "utf8" })
3065
- );
3066
- return packageJson.version;
3067
- } catch {
3068
- return "0.0.0-unknown";
6297
+ const runtimeDir = resolveRuntimeDir();
6298
+ const runtimeVersion = resolveRuntimePackageVersion(runtimeDir);
6299
+ if (runtimeVersion) {
6300
+ return runtimeVersion;
3069
6301
  }
6302
+ return "0.0.0-unknown";
3070
6303
  }
3071
6304
  var program = new Command7().name("better-webhook").description(
3072
6305
  "Modern CLI for developing, capturing, and replaying webhooks locally"