@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.
- package/LICENSE +0 -1
- package/dist/_binary_entry.js +29 -0
- package/dist/commands/capture.d.ts +2 -0
- package/dist/commands/capture.js +33 -0
- package/dist/commands/captures.d.ts +2 -0
- package/dist/commands/captures.js +316 -0
- package/dist/commands/dashboard.d.ts +2 -0
- package/dist/commands/dashboard.js +70 -0
- package/dist/commands/index.d.ts +6 -0
- package/dist/commands/index.js +6 -0
- package/dist/commands/replay.d.ts +2 -0
- package/dist/commands/replay.js +140 -0
- package/dist/commands/run.d.ts +2 -0
- package/dist/commands/run.js +182 -0
- package/dist/commands/templates.d.ts +2 -0
- package/dist/commands/templates.js +285 -0
- package/dist/core/capture-server.d.ts +37 -0
- package/dist/core/capture-server.js +400 -0
- package/dist/core/capture-server.test.d.ts +1 -0
- package/dist/core/capture-server.test.js +86 -0
- package/dist/core/cli-version.d.ts +1 -0
- package/dist/core/cli-version.js +30 -0
- package/dist/core/cli-version.test.d.ts +1 -0
- package/dist/core/cli-version.test.js +42 -0
- package/dist/core/dashboard-api.d.ts +8 -0
- package/dist/core/dashboard-api.js +333 -0
- package/dist/core/dashboard-server.d.ts +24 -0
- package/dist/core/dashboard-server.js +224 -0
- package/dist/core/debug-output.d.ts +3 -0
- package/dist/core/debug-output.js +69 -0
- package/dist/core/debug-verify.d.ts +25 -0
- package/dist/core/debug-verify.js +253 -0
- package/dist/core/executor.d.ts +11 -0
- package/dist/core/executor.js +152 -0
- package/dist/core/index.d.ts +5 -0
- package/dist/core/index.js +5 -0
- package/dist/core/replay-engine.d.ts +20 -0
- package/dist/core/replay-engine.js +293 -0
- package/dist/core/replay-engine.test.d.ts +1 -0
- package/dist/core/replay-engine.test.js +482 -0
- package/dist/core/runtime-paths.d.ts +2 -0
- package/dist/core/runtime-paths.js +65 -0
- package/dist/core/runtime-paths.test.d.ts +1 -0
- package/dist/core/runtime-paths.test.js +50 -0
- package/dist/core/signature.d.ts +25 -0
- package/dist/core/signature.js +224 -0
- package/dist/core/signature.test.d.ts +1 -0
- package/dist/core/signature.test.js +38 -0
- package/dist/core/template-manager.d.ts +33 -0
- package/dist/core/template-manager.js +313 -0
- package/dist/core/template-manager.test.d.ts +1 -0
- package/dist/core/template-manager.test.js +236 -0
- package/dist/index.cjs +3472 -262
- package/dist/index.d.cts +2 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +3509 -276
- package/dist/types/index.d.ts +312 -0
- package/dist/types/index.js +87 -0
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -6,6 +6,9 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
|
6
6
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
7
|
var __getProtoOf = Object.getPrototypeOf;
|
|
8
8
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
9
|
+
var __commonJS = (cb, mod) => function __require() {
|
|
10
|
+
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
11
|
+
};
|
|
9
12
|
var __copyProps = (to, from, except, desc) => {
|
|
10
13
|
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
14
|
for (let key of __getOwnPropNames(from))
|
|
@@ -23,16 +26,3110 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
23
26
|
mod
|
|
24
27
|
));
|
|
25
28
|
|
|
29
|
+
// ../../node_modules/.pnpm/cli-spinners@2.9.2/node_modules/cli-spinners/spinners.json
|
|
30
|
+
var require_spinners = __commonJS({
|
|
31
|
+
"../../node_modules/.pnpm/cli-spinners@2.9.2/node_modules/cli-spinners/spinners.json"(exports2, module2) {
|
|
32
|
+
module2.exports = {
|
|
33
|
+
dots: {
|
|
34
|
+
interval: 80,
|
|
35
|
+
frames: [
|
|
36
|
+
"\u280B",
|
|
37
|
+
"\u2819",
|
|
38
|
+
"\u2839",
|
|
39
|
+
"\u2838",
|
|
40
|
+
"\u283C",
|
|
41
|
+
"\u2834",
|
|
42
|
+
"\u2826",
|
|
43
|
+
"\u2827",
|
|
44
|
+
"\u2807",
|
|
45
|
+
"\u280F"
|
|
46
|
+
]
|
|
47
|
+
},
|
|
48
|
+
dots2: {
|
|
49
|
+
interval: 80,
|
|
50
|
+
frames: [
|
|
51
|
+
"\u28FE",
|
|
52
|
+
"\u28FD",
|
|
53
|
+
"\u28FB",
|
|
54
|
+
"\u28BF",
|
|
55
|
+
"\u287F",
|
|
56
|
+
"\u28DF",
|
|
57
|
+
"\u28EF",
|
|
58
|
+
"\u28F7"
|
|
59
|
+
]
|
|
60
|
+
},
|
|
61
|
+
dots3: {
|
|
62
|
+
interval: 80,
|
|
63
|
+
frames: [
|
|
64
|
+
"\u280B",
|
|
65
|
+
"\u2819",
|
|
66
|
+
"\u281A",
|
|
67
|
+
"\u281E",
|
|
68
|
+
"\u2816",
|
|
69
|
+
"\u2826",
|
|
70
|
+
"\u2834",
|
|
71
|
+
"\u2832",
|
|
72
|
+
"\u2833",
|
|
73
|
+
"\u2813"
|
|
74
|
+
]
|
|
75
|
+
},
|
|
76
|
+
dots4: {
|
|
77
|
+
interval: 80,
|
|
78
|
+
frames: [
|
|
79
|
+
"\u2804",
|
|
80
|
+
"\u2806",
|
|
81
|
+
"\u2807",
|
|
82
|
+
"\u280B",
|
|
83
|
+
"\u2819",
|
|
84
|
+
"\u2838",
|
|
85
|
+
"\u2830",
|
|
86
|
+
"\u2820",
|
|
87
|
+
"\u2830",
|
|
88
|
+
"\u2838",
|
|
89
|
+
"\u2819",
|
|
90
|
+
"\u280B",
|
|
91
|
+
"\u2807",
|
|
92
|
+
"\u2806"
|
|
93
|
+
]
|
|
94
|
+
},
|
|
95
|
+
dots5: {
|
|
96
|
+
interval: 80,
|
|
97
|
+
frames: [
|
|
98
|
+
"\u280B",
|
|
99
|
+
"\u2819",
|
|
100
|
+
"\u281A",
|
|
101
|
+
"\u2812",
|
|
102
|
+
"\u2802",
|
|
103
|
+
"\u2802",
|
|
104
|
+
"\u2812",
|
|
105
|
+
"\u2832",
|
|
106
|
+
"\u2834",
|
|
107
|
+
"\u2826",
|
|
108
|
+
"\u2816",
|
|
109
|
+
"\u2812",
|
|
110
|
+
"\u2810",
|
|
111
|
+
"\u2810",
|
|
112
|
+
"\u2812",
|
|
113
|
+
"\u2813",
|
|
114
|
+
"\u280B"
|
|
115
|
+
]
|
|
116
|
+
},
|
|
117
|
+
dots6: {
|
|
118
|
+
interval: 80,
|
|
119
|
+
frames: [
|
|
120
|
+
"\u2801",
|
|
121
|
+
"\u2809",
|
|
122
|
+
"\u2819",
|
|
123
|
+
"\u281A",
|
|
124
|
+
"\u2812",
|
|
125
|
+
"\u2802",
|
|
126
|
+
"\u2802",
|
|
127
|
+
"\u2812",
|
|
128
|
+
"\u2832",
|
|
129
|
+
"\u2834",
|
|
130
|
+
"\u2824",
|
|
131
|
+
"\u2804",
|
|
132
|
+
"\u2804",
|
|
133
|
+
"\u2824",
|
|
134
|
+
"\u2834",
|
|
135
|
+
"\u2832",
|
|
136
|
+
"\u2812",
|
|
137
|
+
"\u2802",
|
|
138
|
+
"\u2802",
|
|
139
|
+
"\u2812",
|
|
140
|
+
"\u281A",
|
|
141
|
+
"\u2819",
|
|
142
|
+
"\u2809",
|
|
143
|
+
"\u2801"
|
|
144
|
+
]
|
|
145
|
+
},
|
|
146
|
+
dots7: {
|
|
147
|
+
interval: 80,
|
|
148
|
+
frames: [
|
|
149
|
+
"\u2808",
|
|
150
|
+
"\u2809",
|
|
151
|
+
"\u280B",
|
|
152
|
+
"\u2813",
|
|
153
|
+
"\u2812",
|
|
154
|
+
"\u2810",
|
|
155
|
+
"\u2810",
|
|
156
|
+
"\u2812",
|
|
157
|
+
"\u2816",
|
|
158
|
+
"\u2826",
|
|
159
|
+
"\u2824",
|
|
160
|
+
"\u2820",
|
|
161
|
+
"\u2820",
|
|
162
|
+
"\u2824",
|
|
163
|
+
"\u2826",
|
|
164
|
+
"\u2816",
|
|
165
|
+
"\u2812",
|
|
166
|
+
"\u2810",
|
|
167
|
+
"\u2810",
|
|
168
|
+
"\u2812",
|
|
169
|
+
"\u2813",
|
|
170
|
+
"\u280B",
|
|
171
|
+
"\u2809",
|
|
172
|
+
"\u2808"
|
|
173
|
+
]
|
|
174
|
+
},
|
|
175
|
+
dots8: {
|
|
176
|
+
interval: 80,
|
|
177
|
+
frames: [
|
|
178
|
+
"\u2801",
|
|
179
|
+
"\u2801",
|
|
180
|
+
"\u2809",
|
|
181
|
+
"\u2819",
|
|
182
|
+
"\u281A",
|
|
183
|
+
"\u2812",
|
|
184
|
+
"\u2802",
|
|
185
|
+
"\u2802",
|
|
186
|
+
"\u2812",
|
|
187
|
+
"\u2832",
|
|
188
|
+
"\u2834",
|
|
189
|
+
"\u2824",
|
|
190
|
+
"\u2804",
|
|
191
|
+
"\u2804",
|
|
192
|
+
"\u2824",
|
|
193
|
+
"\u2820",
|
|
194
|
+
"\u2820",
|
|
195
|
+
"\u2824",
|
|
196
|
+
"\u2826",
|
|
197
|
+
"\u2816",
|
|
198
|
+
"\u2812",
|
|
199
|
+
"\u2810",
|
|
200
|
+
"\u2810",
|
|
201
|
+
"\u2812",
|
|
202
|
+
"\u2813",
|
|
203
|
+
"\u280B",
|
|
204
|
+
"\u2809",
|
|
205
|
+
"\u2808",
|
|
206
|
+
"\u2808"
|
|
207
|
+
]
|
|
208
|
+
},
|
|
209
|
+
dots9: {
|
|
210
|
+
interval: 80,
|
|
211
|
+
frames: [
|
|
212
|
+
"\u28B9",
|
|
213
|
+
"\u28BA",
|
|
214
|
+
"\u28BC",
|
|
215
|
+
"\u28F8",
|
|
216
|
+
"\u28C7",
|
|
217
|
+
"\u2867",
|
|
218
|
+
"\u2857",
|
|
219
|
+
"\u284F"
|
|
220
|
+
]
|
|
221
|
+
},
|
|
222
|
+
dots10: {
|
|
223
|
+
interval: 80,
|
|
224
|
+
frames: [
|
|
225
|
+
"\u2884",
|
|
226
|
+
"\u2882",
|
|
227
|
+
"\u2881",
|
|
228
|
+
"\u2841",
|
|
229
|
+
"\u2848",
|
|
230
|
+
"\u2850",
|
|
231
|
+
"\u2860"
|
|
232
|
+
]
|
|
233
|
+
},
|
|
234
|
+
dots11: {
|
|
235
|
+
interval: 100,
|
|
236
|
+
frames: [
|
|
237
|
+
"\u2801",
|
|
238
|
+
"\u2802",
|
|
239
|
+
"\u2804",
|
|
240
|
+
"\u2840",
|
|
241
|
+
"\u2880",
|
|
242
|
+
"\u2820",
|
|
243
|
+
"\u2810",
|
|
244
|
+
"\u2808"
|
|
245
|
+
]
|
|
246
|
+
},
|
|
247
|
+
dots12: {
|
|
248
|
+
interval: 80,
|
|
249
|
+
frames: [
|
|
250
|
+
"\u2880\u2800",
|
|
251
|
+
"\u2840\u2800",
|
|
252
|
+
"\u2804\u2800",
|
|
253
|
+
"\u2882\u2800",
|
|
254
|
+
"\u2842\u2800",
|
|
255
|
+
"\u2805\u2800",
|
|
256
|
+
"\u2883\u2800",
|
|
257
|
+
"\u2843\u2800",
|
|
258
|
+
"\u280D\u2800",
|
|
259
|
+
"\u288B\u2800",
|
|
260
|
+
"\u284B\u2800",
|
|
261
|
+
"\u280D\u2801",
|
|
262
|
+
"\u288B\u2801",
|
|
263
|
+
"\u284B\u2801",
|
|
264
|
+
"\u280D\u2809",
|
|
265
|
+
"\u280B\u2809",
|
|
266
|
+
"\u280B\u2809",
|
|
267
|
+
"\u2809\u2819",
|
|
268
|
+
"\u2809\u2819",
|
|
269
|
+
"\u2809\u2829",
|
|
270
|
+
"\u2808\u2899",
|
|
271
|
+
"\u2808\u2859",
|
|
272
|
+
"\u2888\u2829",
|
|
273
|
+
"\u2840\u2899",
|
|
274
|
+
"\u2804\u2859",
|
|
275
|
+
"\u2882\u2829",
|
|
276
|
+
"\u2842\u2898",
|
|
277
|
+
"\u2805\u2858",
|
|
278
|
+
"\u2883\u2828",
|
|
279
|
+
"\u2843\u2890",
|
|
280
|
+
"\u280D\u2850",
|
|
281
|
+
"\u288B\u2820",
|
|
282
|
+
"\u284B\u2880",
|
|
283
|
+
"\u280D\u2841",
|
|
284
|
+
"\u288B\u2801",
|
|
285
|
+
"\u284B\u2801",
|
|
286
|
+
"\u280D\u2809",
|
|
287
|
+
"\u280B\u2809",
|
|
288
|
+
"\u280B\u2809",
|
|
289
|
+
"\u2809\u2819",
|
|
290
|
+
"\u2809\u2819",
|
|
291
|
+
"\u2809\u2829",
|
|
292
|
+
"\u2808\u2899",
|
|
293
|
+
"\u2808\u2859",
|
|
294
|
+
"\u2808\u2829",
|
|
295
|
+
"\u2800\u2899",
|
|
296
|
+
"\u2800\u2859",
|
|
297
|
+
"\u2800\u2829",
|
|
298
|
+
"\u2800\u2898",
|
|
299
|
+
"\u2800\u2858",
|
|
300
|
+
"\u2800\u2828",
|
|
301
|
+
"\u2800\u2890",
|
|
302
|
+
"\u2800\u2850",
|
|
303
|
+
"\u2800\u2820",
|
|
304
|
+
"\u2800\u2880",
|
|
305
|
+
"\u2800\u2840"
|
|
306
|
+
]
|
|
307
|
+
},
|
|
308
|
+
dots13: {
|
|
309
|
+
interval: 80,
|
|
310
|
+
frames: [
|
|
311
|
+
"\u28FC",
|
|
312
|
+
"\u28F9",
|
|
313
|
+
"\u28BB",
|
|
314
|
+
"\u283F",
|
|
315
|
+
"\u285F",
|
|
316
|
+
"\u28CF",
|
|
317
|
+
"\u28E7",
|
|
318
|
+
"\u28F6"
|
|
319
|
+
]
|
|
320
|
+
},
|
|
321
|
+
dots8Bit: {
|
|
322
|
+
interval: 80,
|
|
323
|
+
frames: [
|
|
324
|
+
"\u2800",
|
|
325
|
+
"\u2801",
|
|
326
|
+
"\u2802",
|
|
327
|
+
"\u2803",
|
|
328
|
+
"\u2804",
|
|
329
|
+
"\u2805",
|
|
330
|
+
"\u2806",
|
|
331
|
+
"\u2807",
|
|
332
|
+
"\u2840",
|
|
333
|
+
"\u2841",
|
|
334
|
+
"\u2842",
|
|
335
|
+
"\u2843",
|
|
336
|
+
"\u2844",
|
|
337
|
+
"\u2845",
|
|
338
|
+
"\u2846",
|
|
339
|
+
"\u2847",
|
|
340
|
+
"\u2808",
|
|
341
|
+
"\u2809",
|
|
342
|
+
"\u280A",
|
|
343
|
+
"\u280B",
|
|
344
|
+
"\u280C",
|
|
345
|
+
"\u280D",
|
|
346
|
+
"\u280E",
|
|
347
|
+
"\u280F",
|
|
348
|
+
"\u2848",
|
|
349
|
+
"\u2849",
|
|
350
|
+
"\u284A",
|
|
351
|
+
"\u284B",
|
|
352
|
+
"\u284C",
|
|
353
|
+
"\u284D",
|
|
354
|
+
"\u284E",
|
|
355
|
+
"\u284F",
|
|
356
|
+
"\u2810",
|
|
357
|
+
"\u2811",
|
|
358
|
+
"\u2812",
|
|
359
|
+
"\u2813",
|
|
360
|
+
"\u2814",
|
|
361
|
+
"\u2815",
|
|
362
|
+
"\u2816",
|
|
363
|
+
"\u2817",
|
|
364
|
+
"\u2850",
|
|
365
|
+
"\u2851",
|
|
366
|
+
"\u2852",
|
|
367
|
+
"\u2853",
|
|
368
|
+
"\u2854",
|
|
369
|
+
"\u2855",
|
|
370
|
+
"\u2856",
|
|
371
|
+
"\u2857",
|
|
372
|
+
"\u2818",
|
|
373
|
+
"\u2819",
|
|
374
|
+
"\u281A",
|
|
375
|
+
"\u281B",
|
|
376
|
+
"\u281C",
|
|
377
|
+
"\u281D",
|
|
378
|
+
"\u281E",
|
|
379
|
+
"\u281F",
|
|
380
|
+
"\u2858",
|
|
381
|
+
"\u2859",
|
|
382
|
+
"\u285A",
|
|
383
|
+
"\u285B",
|
|
384
|
+
"\u285C",
|
|
385
|
+
"\u285D",
|
|
386
|
+
"\u285E",
|
|
387
|
+
"\u285F",
|
|
388
|
+
"\u2820",
|
|
389
|
+
"\u2821",
|
|
390
|
+
"\u2822",
|
|
391
|
+
"\u2823",
|
|
392
|
+
"\u2824",
|
|
393
|
+
"\u2825",
|
|
394
|
+
"\u2826",
|
|
395
|
+
"\u2827",
|
|
396
|
+
"\u2860",
|
|
397
|
+
"\u2861",
|
|
398
|
+
"\u2862",
|
|
399
|
+
"\u2863",
|
|
400
|
+
"\u2864",
|
|
401
|
+
"\u2865",
|
|
402
|
+
"\u2866",
|
|
403
|
+
"\u2867",
|
|
404
|
+
"\u2828",
|
|
405
|
+
"\u2829",
|
|
406
|
+
"\u282A",
|
|
407
|
+
"\u282B",
|
|
408
|
+
"\u282C",
|
|
409
|
+
"\u282D",
|
|
410
|
+
"\u282E",
|
|
411
|
+
"\u282F",
|
|
412
|
+
"\u2868",
|
|
413
|
+
"\u2869",
|
|
414
|
+
"\u286A",
|
|
415
|
+
"\u286B",
|
|
416
|
+
"\u286C",
|
|
417
|
+
"\u286D",
|
|
418
|
+
"\u286E",
|
|
419
|
+
"\u286F",
|
|
420
|
+
"\u2830",
|
|
421
|
+
"\u2831",
|
|
422
|
+
"\u2832",
|
|
423
|
+
"\u2833",
|
|
424
|
+
"\u2834",
|
|
425
|
+
"\u2835",
|
|
426
|
+
"\u2836",
|
|
427
|
+
"\u2837",
|
|
428
|
+
"\u2870",
|
|
429
|
+
"\u2871",
|
|
430
|
+
"\u2872",
|
|
431
|
+
"\u2873",
|
|
432
|
+
"\u2874",
|
|
433
|
+
"\u2875",
|
|
434
|
+
"\u2876",
|
|
435
|
+
"\u2877",
|
|
436
|
+
"\u2838",
|
|
437
|
+
"\u2839",
|
|
438
|
+
"\u283A",
|
|
439
|
+
"\u283B",
|
|
440
|
+
"\u283C",
|
|
441
|
+
"\u283D",
|
|
442
|
+
"\u283E",
|
|
443
|
+
"\u283F",
|
|
444
|
+
"\u2878",
|
|
445
|
+
"\u2879",
|
|
446
|
+
"\u287A",
|
|
447
|
+
"\u287B",
|
|
448
|
+
"\u287C",
|
|
449
|
+
"\u287D",
|
|
450
|
+
"\u287E",
|
|
451
|
+
"\u287F",
|
|
452
|
+
"\u2880",
|
|
453
|
+
"\u2881",
|
|
454
|
+
"\u2882",
|
|
455
|
+
"\u2883",
|
|
456
|
+
"\u2884",
|
|
457
|
+
"\u2885",
|
|
458
|
+
"\u2886",
|
|
459
|
+
"\u2887",
|
|
460
|
+
"\u28C0",
|
|
461
|
+
"\u28C1",
|
|
462
|
+
"\u28C2",
|
|
463
|
+
"\u28C3",
|
|
464
|
+
"\u28C4",
|
|
465
|
+
"\u28C5",
|
|
466
|
+
"\u28C6",
|
|
467
|
+
"\u28C7",
|
|
468
|
+
"\u2888",
|
|
469
|
+
"\u2889",
|
|
470
|
+
"\u288A",
|
|
471
|
+
"\u288B",
|
|
472
|
+
"\u288C",
|
|
473
|
+
"\u288D",
|
|
474
|
+
"\u288E",
|
|
475
|
+
"\u288F",
|
|
476
|
+
"\u28C8",
|
|
477
|
+
"\u28C9",
|
|
478
|
+
"\u28CA",
|
|
479
|
+
"\u28CB",
|
|
480
|
+
"\u28CC",
|
|
481
|
+
"\u28CD",
|
|
482
|
+
"\u28CE",
|
|
483
|
+
"\u28CF",
|
|
484
|
+
"\u2890",
|
|
485
|
+
"\u2891",
|
|
486
|
+
"\u2892",
|
|
487
|
+
"\u2893",
|
|
488
|
+
"\u2894",
|
|
489
|
+
"\u2895",
|
|
490
|
+
"\u2896",
|
|
491
|
+
"\u2897",
|
|
492
|
+
"\u28D0",
|
|
493
|
+
"\u28D1",
|
|
494
|
+
"\u28D2",
|
|
495
|
+
"\u28D3",
|
|
496
|
+
"\u28D4",
|
|
497
|
+
"\u28D5",
|
|
498
|
+
"\u28D6",
|
|
499
|
+
"\u28D7",
|
|
500
|
+
"\u2898",
|
|
501
|
+
"\u2899",
|
|
502
|
+
"\u289A",
|
|
503
|
+
"\u289B",
|
|
504
|
+
"\u289C",
|
|
505
|
+
"\u289D",
|
|
506
|
+
"\u289E",
|
|
507
|
+
"\u289F",
|
|
508
|
+
"\u28D8",
|
|
509
|
+
"\u28D9",
|
|
510
|
+
"\u28DA",
|
|
511
|
+
"\u28DB",
|
|
512
|
+
"\u28DC",
|
|
513
|
+
"\u28DD",
|
|
514
|
+
"\u28DE",
|
|
515
|
+
"\u28DF",
|
|
516
|
+
"\u28A0",
|
|
517
|
+
"\u28A1",
|
|
518
|
+
"\u28A2",
|
|
519
|
+
"\u28A3",
|
|
520
|
+
"\u28A4",
|
|
521
|
+
"\u28A5",
|
|
522
|
+
"\u28A6",
|
|
523
|
+
"\u28A7",
|
|
524
|
+
"\u28E0",
|
|
525
|
+
"\u28E1",
|
|
526
|
+
"\u28E2",
|
|
527
|
+
"\u28E3",
|
|
528
|
+
"\u28E4",
|
|
529
|
+
"\u28E5",
|
|
530
|
+
"\u28E6",
|
|
531
|
+
"\u28E7",
|
|
532
|
+
"\u28A8",
|
|
533
|
+
"\u28A9",
|
|
534
|
+
"\u28AA",
|
|
535
|
+
"\u28AB",
|
|
536
|
+
"\u28AC",
|
|
537
|
+
"\u28AD",
|
|
538
|
+
"\u28AE",
|
|
539
|
+
"\u28AF",
|
|
540
|
+
"\u28E8",
|
|
541
|
+
"\u28E9",
|
|
542
|
+
"\u28EA",
|
|
543
|
+
"\u28EB",
|
|
544
|
+
"\u28EC",
|
|
545
|
+
"\u28ED",
|
|
546
|
+
"\u28EE",
|
|
547
|
+
"\u28EF",
|
|
548
|
+
"\u28B0",
|
|
549
|
+
"\u28B1",
|
|
550
|
+
"\u28B2",
|
|
551
|
+
"\u28B3",
|
|
552
|
+
"\u28B4",
|
|
553
|
+
"\u28B5",
|
|
554
|
+
"\u28B6",
|
|
555
|
+
"\u28B7",
|
|
556
|
+
"\u28F0",
|
|
557
|
+
"\u28F1",
|
|
558
|
+
"\u28F2",
|
|
559
|
+
"\u28F3",
|
|
560
|
+
"\u28F4",
|
|
561
|
+
"\u28F5",
|
|
562
|
+
"\u28F6",
|
|
563
|
+
"\u28F7",
|
|
564
|
+
"\u28B8",
|
|
565
|
+
"\u28B9",
|
|
566
|
+
"\u28BA",
|
|
567
|
+
"\u28BB",
|
|
568
|
+
"\u28BC",
|
|
569
|
+
"\u28BD",
|
|
570
|
+
"\u28BE",
|
|
571
|
+
"\u28BF",
|
|
572
|
+
"\u28F8",
|
|
573
|
+
"\u28F9",
|
|
574
|
+
"\u28FA",
|
|
575
|
+
"\u28FB",
|
|
576
|
+
"\u28FC",
|
|
577
|
+
"\u28FD",
|
|
578
|
+
"\u28FE",
|
|
579
|
+
"\u28FF"
|
|
580
|
+
]
|
|
581
|
+
},
|
|
582
|
+
sand: {
|
|
583
|
+
interval: 80,
|
|
584
|
+
frames: [
|
|
585
|
+
"\u2801",
|
|
586
|
+
"\u2802",
|
|
587
|
+
"\u2804",
|
|
588
|
+
"\u2840",
|
|
589
|
+
"\u2848",
|
|
590
|
+
"\u2850",
|
|
591
|
+
"\u2860",
|
|
592
|
+
"\u28C0",
|
|
593
|
+
"\u28C1",
|
|
594
|
+
"\u28C2",
|
|
595
|
+
"\u28C4",
|
|
596
|
+
"\u28CC",
|
|
597
|
+
"\u28D4",
|
|
598
|
+
"\u28E4",
|
|
599
|
+
"\u28E5",
|
|
600
|
+
"\u28E6",
|
|
601
|
+
"\u28EE",
|
|
602
|
+
"\u28F6",
|
|
603
|
+
"\u28F7",
|
|
604
|
+
"\u28FF",
|
|
605
|
+
"\u287F",
|
|
606
|
+
"\u283F",
|
|
607
|
+
"\u289F",
|
|
608
|
+
"\u281F",
|
|
609
|
+
"\u285B",
|
|
610
|
+
"\u281B",
|
|
611
|
+
"\u282B",
|
|
612
|
+
"\u288B",
|
|
613
|
+
"\u280B",
|
|
614
|
+
"\u280D",
|
|
615
|
+
"\u2849",
|
|
616
|
+
"\u2809",
|
|
617
|
+
"\u2811",
|
|
618
|
+
"\u2821",
|
|
619
|
+
"\u2881"
|
|
620
|
+
]
|
|
621
|
+
},
|
|
622
|
+
line: {
|
|
623
|
+
interval: 130,
|
|
624
|
+
frames: [
|
|
625
|
+
"-",
|
|
626
|
+
"\\",
|
|
627
|
+
"|",
|
|
628
|
+
"/"
|
|
629
|
+
]
|
|
630
|
+
},
|
|
631
|
+
line2: {
|
|
632
|
+
interval: 100,
|
|
633
|
+
frames: [
|
|
634
|
+
"\u2802",
|
|
635
|
+
"-",
|
|
636
|
+
"\u2013",
|
|
637
|
+
"\u2014",
|
|
638
|
+
"\u2013",
|
|
639
|
+
"-"
|
|
640
|
+
]
|
|
641
|
+
},
|
|
642
|
+
pipe: {
|
|
643
|
+
interval: 100,
|
|
644
|
+
frames: [
|
|
645
|
+
"\u2524",
|
|
646
|
+
"\u2518",
|
|
647
|
+
"\u2534",
|
|
648
|
+
"\u2514",
|
|
649
|
+
"\u251C",
|
|
650
|
+
"\u250C",
|
|
651
|
+
"\u252C",
|
|
652
|
+
"\u2510"
|
|
653
|
+
]
|
|
654
|
+
},
|
|
655
|
+
simpleDots: {
|
|
656
|
+
interval: 400,
|
|
657
|
+
frames: [
|
|
658
|
+
". ",
|
|
659
|
+
".. ",
|
|
660
|
+
"...",
|
|
661
|
+
" "
|
|
662
|
+
]
|
|
663
|
+
},
|
|
664
|
+
simpleDotsScrolling: {
|
|
665
|
+
interval: 200,
|
|
666
|
+
frames: [
|
|
667
|
+
". ",
|
|
668
|
+
".. ",
|
|
669
|
+
"...",
|
|
670
|
+
" ..",
|
|
671
|
+
" .",
|
|
672
|
+
" "
|
|
673
|
+
]
|
|
674
|
+
},
|
|
675
|
+
star: {
|
|
676
|
+
interval: 70,
|
|
677
|
+
frames: [
|
|
678
|
+
"\u2736",
|
|
679
|
+
"\u2738",
|
|
680
|
+
"\u2739",
|
|
681
|
+
"\u273A",
|
|
682
|
+
"\u2739",
|
|
683
|
+
"\u2737"
|
|
684
|
+
]
|
|
685
|
+
},
|
|
686
|
+
star2: {
|
|
687
|
+
interval: 80,
|
|
688
|
+
frames: [
|
|
689
|
+
"+",
|
|
690
|
+
"x",
|
|
691
|
+
"*"
|
|
692
|
+
]
|
|
693
|
+
},
|
|
694
|
+
flip: {
|
|
695
|
+
interval: 70,
|
|
696
|
+
frames: [
|
|
697
|
+
"_",
|
|
698
|
+
"_",
|
|
699
|
+
"_",
|
|
700
|
+
"-",
|
|
701
|
+
"`",
|
|
702
|
+
"`",
|
|
703
|
+
"'",
|
|
704
|
+
"\xB4",
|
|
705
|
+
"-",
|
|
706
|
+
"_",
|
|
707
|
+
"_",
|
|
708
|
+
"_"
|
|
709
|
+
]
|
|
710
|
+
},
|
|
711
|
+
hamburger: {
|
|
712
|
+
interval: 100,
|
|
713
|
+
frames: [
|
|
714
|
+
"\u2631",
|
|
715
|
+
"\u2632",
|
|
716
|
+
"\u2634"
|
|
717
|
+
]
|
|
718
|
+
},
|
|
719
|
+
growVertical: {
|
|
720
|
+
interval: 120,
|
|
721
|
+
frames: [
|
|
722
|
+
"\u2581",
|
|
723
|
+
"\u2583",
|
|
724
|
+
"\u2584",
|
|
725
|
+
"\u2585",
|
|
726
|
+
"\u2586",
|
|
727
|
+
"\u2587",
|
|
728
|
+
"\u2586",
|
|
729
|
+
"\u2585",
|
|
730
|
+
"\u2584",
|
|
731
|
+
"\u2583"
|
|
732
|
+
]
|
|
733
|
+
},
|
|
734
|
+
growHorizontal: {
|
|
735
|
+
interval: 120,
|
|
736
|
+
frames: [
|
|
737
|
+
"\u258F",
|
|
738
|
+
"\u258E",
|
|
739
|
+
"\u258D",
|
|
740
|
+
"\u258C",
|
|
741
|
+
"\u258B",
|
|
742
|
+
"\u258A",
|
|
743
|
+
"\u2589",
|
|
744
|
+
"\u258A",
|
|
745
|
+
"\u258B",
|
|
746
|
+
"\u258C",
|
|
747
|
+
"\u258D",
|
|
748
|
+
"\u258E"
|
|
749
|
+
]
|
|
750
|
+
},
|
|
751
|
+
balloon: {
|
|
752
|
+
interval: 140,
|
|
753
|
+
frames: [
|
|
754
|
+
" ",
|
|
755
|
+
".",
|
|
756
|
+
"o",
|
|
757
|
+
"O",
|
|
758
|
+
"@",
|
|
759
|
+
"*",
|
|
760
|
+
" "
|
|
761
|
+
]
|
|
762
|
+
},
|
|
763
|
+
balloon2: {
|
|
764
|
+
interval: 120,
|
|
765
|
+
frames: [
|
|
766
|
+
".",
|
|
767
|
+
"o",
|
|
768
|
+
"O",
|
|
769
|
+
"\xB0",
|
|
770
|
+
"O",
|
|
771
|
+
"o",
|
|
772
|
+
"."
|
|
773
|
+
]
|
|
774
|
+
},
|
|
775
|
+
noise: {
|
|
776
|
+
interval: 100,
|
|
777
|
+
frames: [
|
|
778
|
+
"\u2593",
|
|
779
|
+
"\u2592",
|
|
780
|
+
"\u2591"
|
|
781
|
+
]
|
|
782
|
+
},
|
|
783
|
+
bounce: {
|
|
784
|
+
interval: 120,
|
|
785
|
+
frames: [
|
|
786
|
+
"\u2801",
|
|
787
|
+
"\u2802",
|
|
788
|
+
"\u2804",
|
|
789
|
+
"\u2802"
|
|
790
|
+
]
|
|
791
|
+
},
|
|
792
|
+
boxBounce: {
|
|
793
|
+
interval: 120,
|
|
794
|
+
frames: [
|
|
795
|
+
"\u2596",
|
|
796
|
+
"\u2598",
|
|
797
|
+
"\u259D",
|
|
798
|
+
"\u2597"
|
|
799
|
+
]
|
|
800
|
+
},
|
|
801
|
+
boxBounce2: {
|
|
802
|
+
interval: 100,
|
|
803
|
+
frames: [
|
|
804
|
+
"\u258C",
|
|
805
|
+
"\u2580",
|
|
806
|
+
"\u2590",
|
|
807
|
+
"\u2584"
|
|
808
|
+
]
|
|
809
|
+
},
|
|
810
|
+
triangle: {
|
|
811
|
+
interval: 50,
|
|
812
|
+
frames: [
|
|
813
|
+
"\u25E2",
|
|
814
|
+
"\u25E3",
|
|
815
|
+
"\u25E4",
|
|
816
|
+
"\u25E5"
|
|
817
|
+
]
|
|
818
|
+
},
|
|
819
|
+
binary: {
|
|
820
|
+
interval: 80,
|
|
821
|
+
frames: [
|
|
822
|
+
"010010",
|
|
823
|
+
"001100",
|
|
824
|
+
"100101",
|
|
825
|
+
"111010",
|
|
826
|
+
"111101",
|
|
827
|
+
"010111",
|
|
828
|
+
"101011",
|
|
829
|
+
"111000",
|
|
830
|
+
"110011",
|
|
831
|
+
"110101"
|
|
832
|
+
]
|
|
833
|
+
},
|
|
834
|
+
arc: {
|
|
835
|
+
interval: 100,
|
|
836
|
+
frames: [
|
|
837
|
+
"\u25DC",
|
|
838
|
+
"\u25E0",
|
|
839
|
+
"\u25DD",
|
|
840
|
+
"\u25DE",
|
|
841
|
+
"\u25E1",
|
|
842
|
+
"\u25DF"
|
|
843
|
+
]
|
|
844
|
+
},
|
|
845
|
+
circle: {
|
|
846
|
+
interval: 120,
|
|
847
|
+
frames: [
|
|
848
|
+
"\u25E1",
|
|
849
|
+
"\u2299",
|
|
850
|
+
"\u25E0"
|
|
851
|
+
]
|
|
852
|
+
},
|
|
853
|
+
squareCorners: {
|
|
854
|
+
interval: 180,
|
|
855
|
+
frames: [
|
|
856
|
+
"\u25F0",
|
|
857
|
+
"\u25F3",
|
|
858
|
+
"\u25F2",
|
|
859
|
+
"\u25F1"
|
|
860
|
+
]
|
|
861
|
+
},
|
|
862
|
+
circleQuarters: {
|
|
863
|
+
interval: 120,
|
|
864
|
+
frames: [
|
|
865
|
+
"\u25F4",
|
|
866
|
+
"\u25F7",
|
|
867
|
+
"\u25F6",
|
|
868
|
+
"\u25F5"
|
|
869
|
+
]
|
|
870
|
+
},
|
|
871
|
+
circleHalves: {
|
|
872
|
+
interval: 50,
|
|
873
|
+
frames: [
|
|
874
|
+
"\u25D0",
|
|
875
|
+
"\u25D3",
|
|
876
|
+
"\u25D1",
|
|
877
|
+
"\u25D2"
|
|
878
|
+
]
|
|
879
|
+
},
|
|
880
|
+
squish: {
|
|
881
|
+
interval: 100,
|
|
882
|
+
frames: [
|
|
883
|
+
"\u256B",
|
|
884
|
+
"\u256A"
|
|
885
|
+
]
|
|
886
|
+
},
|
|
887
|
+
toggle: {
|
|
888
|
+
interval: 250,
|
|
889
|
+
frames: [
|
|
890
|
+
"\u22B6",
|
|
891
|
+
"\u22B7"
|
|
892
|
+
]
|
|
893
|
+
},
|
|
894
|
+
toggle2: {
|
|
895
|
+
interval: 80,
|
|
896
|
+
frames: [
|
|
897
|
+
"\u25AB",
|
|
898
|
+
"\u25AA"
|
|
899
|
+
]
|
|
900
|
+
},
|
|
901
|
+
toggle3: {
|
|
902
|
+
interval: 120,
|
|
903
|
+
frames: [
|
|
904
|
+
"\u25A1",
|
|
905
|
+
"\u25A0"
|
|
906
|
+
]
|
|
907
|
+
},
|
|
908
|
+
toggle4: {
|
|
909
|
+
interval: 100,
|
|
910
|
+
frames: [
|
|
911
|
+
"\u25A0",
|
|
912
|
+
"\u25A1",
|
|
913
|
+
"\u25AA",
|
|
914
|
+
"\u25AB"
|
|
915
|
+
]
|
|
916
|
+
},
|
|
917
|
+
toggle5: {
|
|
918
|
+
interval: 100,
|
|
919
|
+
frames: [
|
|
920
|
+
"\u25AE",
|
|
921
|
+
"\u25AF"
|
|
922
|
+
]
|
|
923
|
+
},
|
|
924
|
+
toggle6: {
|
|
925
|
+
interval: 300,
|
|
926
|
+
frames: [
|
|
927
|
+
"\u101D",
|
|
928
|
+
"\u1040"
|
|
929
|
+
]
|
|
930
|
+
},
|
|
931
|
+
toggle7: {
|
|
932
|
+
interval: 80,
|
|
933
|
+
frames: [
|
|
934
|
+
"\u29BE",
|
|
935
|
+
"\u29BF"
|
|
936
|
+
]
|
|
937
|
+
},
|
|
938
|
+
toggle8: {
|
|
939
|
+
interval: 100,
|
|
940
|
+
frames: [
|
|
941
|
+
"\u25CD",
|
|
942
|
+
"\u25CC"
|
|
943
|
+
]
|
|
944
|
+
},
|
|
945
|
+
toggle9: {
|
|
946
|
+
interval: 100,
|
|
947
|
+
frames: [
|
|
948
|
+
"\u25C9",
|
|
949
|
+
"\u25CE"
|
|
950
|
+
]
|
|
951
|
+
},
|
|
952
|
+
toggle10: {
|
|
953
|
+
interval: 100,
|
|
954
|
+
frames: [
|
|
955
|
+
"\u3282",
|
|
956
|
+
"\u3280",
|
|
957
|
+
"\u3281"
|
|
958
|
+
]
|
|
959
|
+
},
|
|
960
|
+
toggle11: {
|
|
961
|
+
interval: 50,
|
|
962
|
+
frames: [
|
|
963
|
+
"\u29C7",
|
|
964
|
+
"\u29C6"
|
|
965
|
+
]
|
|
966
|
+
},
|
|
967
|
+
toggle12: {
|
|
968
|
+
interval: 120,
|
|
969
|
+
frames: [
|
|
970
|
+
"\u2617",
|
|
971
|
+
"\u2616"
|
|
972
|
+
]
|
|
973
|
+
},
|
|
974
|
+
toggle13: {
|
|
975
|
+
interval: 80,
|
|
976
|
+
frames: [
|
|
977
|
+
"=",
|
|
978
|
+
"*",
|
|
979
|
+
"-"
|
|
980
|
+
]
|
|
981
|
+
},
|
|
982
|
+
arrow: {
|
|
983
|
+
interval: 100,
|
|
984
|
+
frames: [
|
|
985
|
+
"\u2190",
|
|
986
|
+
"\u2196",
|
|
987
|
+
"\u2191",
|
|
988
|
+
"\u2197",
|
|
989
|
+
"\u2192",
|
|
990
|
+
"\u2198",
|
|
991
|
+
"\u2193",
|
|
992
|
+
"\u2199"
|
|
993
|
+
]
|
|
994
|
+
},
|
|
995
|
+
arrow2: {
|
|
996
|
+
interval: 80,
|
|
997
|
+
frames: [
|
|
998
|
+
"\u2B06\uFE0F ",
|
|
999
|
+
"\u2197\uFE0F ",
|
|
1000
|
+
"\u27A1\uFE0F ",
|
|
1001
|
+
"\u2198\uFE0F ",
|
|
1002
|
+
"\u2B07\uFE0F ",
|
|
1003
|
+
"\u2199\uFE0F ",
|
|
1004
|
+
"\u2B05\uFE0F ",
|
|
1005
|
+
"\u2196\uFE0F "
|
|
1006
|
+
]
|
|
1007
|
+
},
|
|
1008
|
+
arrow3: {
|
|
1009
|
+
interval: 120,
|
|
1010
|
+
frames: [
|
|
1011
|
+
"\u25B9\u25B9\u25B9\u25B9\u25B9",
|
|
1012
|
+
"\u25B8\u25B9\u25B9\u25B9\u25B9",
|
|
1013
|
+
"\u25B9\u25B8\u25B9\u25B9\u25B9",
|
|
1014
|
+
"\u25B9\u25B9\u25B8\u25B9\u25B9",
|
|
1015
|
+
"\u25B9\u25B9\u25B9\u25B8\u25B9",
|
|
1016
|
+
"\u25B9\u25B9\u25B9\u25B9\u25B8"
|
|
1017
|
+
]
|
|
1018
|
+
},
|
|
1019
|
+
bouncingBar: {
|
|
1020
|
+
interval: 80,
|
|
1021
|
+
frames: [
|
|
1022
|
+
"[ ]",
|
|
1023
|
+
"[= ]",
|
|
1024
|
+
"[== ]",
|
|
1025
|
+
"[=== ]",
|
|
1026
|
+
"[====]",
|
|
1027
|
+
"[ ===]",
|
|
1028
|
+
"[ ==]",
|
|
1029
|
+
"[ =]",
|
|
1030
|
+
"[ ]",
|
|
1031
|
+
"[ =]",
|
|
1032
|
+
"[ ==]",
|
|
1033
|
+
"[ ===]",
|
|
1034
|
+
"[====]",
|
|
1035
|
+
"[=== ]",
|
|
1036
|
+
"[== ]",
|
|
1037
|
+
"[= ]"
|
|
1038
|
+
]
|
|
1039
|
+
},
|
|
1040
|
+
bouncingBall: {
|
|
1041
|
+
interval: 80,
|
|
1042
|
+
frames: [
|
|
1043
|
+
"( \u25CF )",
|
|
1044
|
+
"( \u25CF )",
|
|
1045
|
+
"( \u25CF )",
|
|
1046
|
+
"( \u25CF )",
|
|
1047
|
+
"( \u25CF)",
|
|
1048
|
+
"( \u25CF )",
|
|
1049
|
+
"( \u25CF )",
|
|
1050
|
+
"( \u25CF )",
|
|
1051
|
+
"( \u25CF )",
|
|
1052
|
+
"(\u25CF )"
|
|
1053
|
+
]
|
|
1054
|
+
},
|
|
1055
|
+
smiley: {
|
|
1056
|
+
interval: 200,
|
|
1057
|
+
frames: [
|
|
1058
|
+
"\u{1F604} ",
|
|
1059
|
+
"\u{1F61D} "
|
|
1060
|
+
]
|
|
1061
|
+
},
|
|
1062
|
+
monkey: {
|
|
1063
|
+
interval: 300,
|
|
1064
|
+
frames: [
|
|
1065
|
+
"\u{1F648} ",
|
|
1066
|
+
"\u{1F648} ",
|
|
1067
|
+
"\u{1F649} ",
|
|
1068
|
+
"\u{1F64A} "
|
|
1069
|
+
]
|
|
1070
|
+
},
|
|
1071
|
+
hearts: {
|
|
1072
|
+
interval: 100,
|
|
1073
|
+
frames: [
|
|
1074
|
+
"\u{1F49B} ",
|
|
1075
|
+
"\u{1F499} ",
|
|
1076
|
+
"\u{1F49C} ",
|
|
1077
|
+
"\u{1F49A} ",
|
|
1078
|
+
"\u2764\uFE0F "
|
|
1079
|
+
]
|
|
1080
|
+
},
|
|
1081
|
+
clock: {
|
|
1082
|
+
interval: 100,
|
|
1083
|
+
frames: [
|
|
1084
|
+
"\u{1F55B} ",
|
|
1085
|
+
"\u{1F550} ",
|
|
1086
|
+
"\u{1F551} ",
|
|
1087
|
+
"\u{1F552} ",
|
|
1088
|
+
"\u{1F553} ",
|
|
1089
|
+
"\u{1F554} ",
|
|
1090
|
+
"\u{1F555} ",
|
|
1091
|
+
"\u{1F556} ",
|
|
1092
|
+
"\u{1F557} ",
|
|
1093
|
+
"\u{1F558} ",
|
|
1094
|
+
"\u{1F559} ",
|
|
1095
|
+
"\u{1F55A} "
|
|
1096
|
+
]
|
|
1097
|
+
},
|
|
1098
|
+
earth: {
|
|
1099
|
+
interval: 180,
|
|
1100
|
+
frames: [
|
|
1101
|
+
"\u{1F30D} ",
|
|
1102
|
+
"\u{1F30E} ",
|
|
1103
|
+
"\u{1F30F} "
|
|
1104
|
+
]
|
|
1105
|
+
},
|
|
1106
|
+
material: {
|
|
1107
|
+
interval: 17,
|
|
1108
|
+
frames: [
|
|
1109
|
+
"\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
|
|
1110
|
+
"\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
|
|
1111
|
+
"\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
|
|
1112
|
+
"\u2588\u2588\u2588\u2588\u2581\u2581\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\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
|
|
1115
|
+
"\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
|
|
1116
|
+
"\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\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\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
|
|
1119
|
+
"\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
|
|
1120
|
+
"\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
|
|
1121
|
+
"\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\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
|
+
"\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\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\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581",
|
|
1127
|
+
"\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581",
|
|
1128
|
+
"\u2581\u2581\u2581\u2588\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\u2581\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\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\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\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581",
|
|
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\u2588\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\u2588\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\u2588\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\u2588\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\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
|
|
1145
|
+
"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
|
|
1146
|
+
"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
|
|
1147
|
+
"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\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
|
+
"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588",
|
|
1150
|
+
"\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\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\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588",
|
|
1153
|
+
"\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588",
|
|
1154
|
+
"\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\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\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588",
|
|
1157
|
+
"\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588",
|
|
1158
|
+
"\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\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\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
|
|
1163
|
+
"\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\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\u2581\u2581\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
|
+
"\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\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\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581",
|
|
1170
|
+
"\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\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\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581",
|
|
1173
|
+
"\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\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\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\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\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581",
|
|
1178
|
+
"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\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\u2588\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\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581",
|
|
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\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
|
|
1185
|
+
"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\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\u2588\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\u2588\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\u2588\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\u2588",
|
|
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
|
+
"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581"
|
|
1201
|
+
]
|
|
1202
|
+
},
|
|
1203
|
+
moon: {
|
|
1204
|
+
interval: 80,
|
|
1205
|
+
frames: [
|
|
1206
|
+
"\u{1F311} ",
|
|
1207
|
+
"\u{1F312} ",
|
|
1208
|
+
"\u{1F313} ",
|
|
1209
|
+
"\u{1F314} ",
|
|
1210
|
+
"\u{1F315} ",
|
|
1211
|
+
"\u{1F316} ",
|
|
1212
|
+
"\u{1F317} ",
|
|
1213
|
+
"\u{1F318} "
|
|
1214
|
+
]
|
|
1215
|
+
},
|
|
1216
|
+
runner: {
|
|
1217
|
+
interval: 140,
|
|
1218
|
+
frames: [
|
|
1219
|
+
"\u{1F6B6} ",
|
|
1220
|
+
"\u{1F3C3} "
|
|
1221
|
+
]
|
|
1222
|
+
},
|
|
1223
|
+
pong: {
|
|
1224
|
+
interval: 80,
|
|
1225
|
+
frames: [
|
|
1226
|
+
"\u2590\u2802 \u258C",
|
|
1227
|
+
"\u2590\u2808 \u258C",
|
|
1228
|
+
"\u2590 \u2802 \u258C",
|
|
1229
|
+
"\u2590 \u2820 \u258C",
|
|
1230
|
+
"\u2590 \u2840 \u258C",
|
|
1231
|
+
"\u2590 \u2820 \u258C",
|
|
1232
|
+
"\u2590 \u2802 \u258C",
|
|
1233
|
+
"\u2590 \u2808 \u258C",
|
|
1234
|
+
"\u2590 \u2802 \u258C",
|
|
1235
|
+
"\u2590 \u2820 \u258C",
|
|
1236
|
+
"\u2590 \u2840 \u258C",
|
|
1237
|
+
"\u2590 \u2820 \u258C",
|
|
1238
|
+
"\u2590 \u2802 \u258C",
|
|
1239
|
+
"\u2590 \u2808 \u258C",
|
|
1240
|
+
"\u2590 \u2802\u258C",
|
|
1241
|
+
"\u2590 \u2820\u258C",
|
|
1242
|
+
"\u2590 \u2840\u258C",
|
|
1243
|
+
"\u2590 \u2820 \u258C",
|
|
1244
|
+
"\u2590 \u2802 \u258C",
|
|
1245
|
+
"\u2590 \u2808 \u258C",
|
|
1246
|
+
"\u2590 \u2802 \u258C",
|
|
1247
|
+
"\u2590 \u2820 \u258C",
|
|
1248
|
+
"\u2590 \u2840 \u258C",
|
|
1249
|
+
"\u2590 \u2820 \u258C",
|
|
1250
|
+
"\u2590 \u2802 \u258C",
|
|
1251
|
+
"\u2590 \u2808 \u258C",
|
|
1252
|
+
"\u2590 \u2802 \u258C",
|
|
1253
|
+
"\u2590 \u2820 \u258C",
|
|
1254
|
+
"\u2590 \u2840 \u258C",
|
|
1255
|
+
"\u2590\u2820 \u258C"
|
|
1256
|
+
]
|
|
1257
|
+
},
|
|
1258
|
+
shark: {
|
|
1259
|
+
interval: 120,
|
|
1260
|
+
frames: [
|
|
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
|
+
"\u2590/|____________\u258C"
|
|
1287
|
+
]
|
|
1288
|
+
},
|
|
1289
|
+
dqpb: {
|
|
1290
|
+
interval: 100,
|
|
1291
|
+
frames: [
|
|
1292
|
+
"d",
|
|
1293
|
+
"q",
|
|
1294
|
+
"p",
|
|
1295
|
+
"b"
|
|
1296
|
+
]
|
|
1297
|
+
},
|
|
1298
|
+
weather: {
|
|
1299
|
+
interval: 100,
|
|
1300
|
+
frames: [
|
|
1301
|
+
"\u2600\uFE0F ",
|
|
1302
|
+
"\u2600\uFE0F ",
|
|
1303
|
+
"\u2600\uFE0F ",
|
|
1304
|
+
"\u{1F324} ",
|
|
1305
|
+
"\u26C5\uFE0F ",
|
|
1306
|
+
"\u{1F325} ",
|
|
1307
|
+
"\u2601\uFE0F ",
|
|
1308
|
+
"\u{1F327} ",
|
|
1309
|
+
"\u{1F328} ",
|
|
1310
|
+
"\u{1F327} ",
|
|
1311
|
+
"\u{1F328} ",
|
|
1312
|
+
"\u{1F327} ",
|
|
1313
|
+
"\u{1F328} ",
|
|
1314
|
+
"\u26C8 ",
|
|
1315
|
+
"\u{1F328} ",
|
|
1316
|
+
"\u{1F327} ",
|
|
1317
|
+
"\u{1F328} ",
|
|
1318
|
+
"\u2601\uFE0F ",
|
|
1319
|
+
"\u{1F325} ",
|
|
1320
|
+
"\u26C5\uFE0F ",
|
|
1321
|
+
"\u{1F324} ",
|
|
1322
|
+
"\u2600\uFE0F ",
|
|
1323
|
+
"\u2600\uFE0F "
|
|
1324
|
+
]
|
|
1325
|
+
},
|
|
1326
|
+
christmas: {
|
|
1327
|
+
interval: 400,
|
|
1328
|
+
frames: [
|
|
1329
|
+
"\u{1F332}",
|
|
1330
|
+
"\u{1F384}"
|
|
1331
|
+
]
|
|
1332
|
+
},
|
|
1333
|
+
grenade: {
|
|
1334
|
+
interval: 80,
|
|
1335
|
+
frames: [
|
|
1336
|
+
"\u060C ",
|
|
1337
|
+
"\u2032 ",
|
|
1338
|
+
" \xB4 ",
|
|
1339
|
+
" \u203E ",
|
|
1340
|
+
" \u2E0C",
|
|
1341
|
+
" \u2E0A",
|
|
1342
|
+
" |",
|
|
1343
|
+
" \u204E",
|
|
1344
|
+
" \u2055",
|
|
1345
|
+
" \u0DF4 ",
|
|
1346
|
+
" \u2053",
|
|
1347
|
+
" ",
|
|
1348
|
+
" ",
|
|
1349
|
+
" "
|
|
1350
|
+
]
|
|
1351
|
+
},
|
|
1352
|
+
point: {
|
|
1353
|
+
interval: 125,
|
|
1354
|
+
frames: [
|
|
1355
|
+
"\u2219\u2219\u2219",
|
|
1356
|
+
"\u25CF\u2219\u2219",
|
|
1357
|
+
"\u2219\u25CF\u2219",
|
|
1358
|
+
"\u2219\u2219\u25CF",
|
|
1359
|
+
"\u2219\u2219\u2219"
|
|
1360
|
+
]
|
|
1361
|
+
},
|
|
1362
|
+
layer: {
|
|
1363
|
+
interval: 150,
|
|
1364
|
+
frames: [
|
|
1365
|
+
"-",
|
|
1366
|
+
"=",
|
|
1367
|
+
"\u2261"
|
|
1368
|
+
]
|
|
1369
|
+
},
|
|
1370
|
+
betaWave: {
|
|
1371
|
+
interval: 80,
|
|
1372
|
+
frames: [
|
|
1373
|
+
"\u03C1\u03B2\u03B2\u03B2\u03B2\u03B2\u03B2",
|
|
1374
|
+
"\u03B2\u03C1\u03B2\u03B2\u03B2\u03B2\u03B2",
|
|
1375
|
+
"\u03B2\u03B2\u03C1\u03B2\u03B2\u03B2\u03B2",
|
|
1376
|
+
"\u03B2\u03B2\u03B2\u03C1\u03B2\u03B2\u03B2",
|
|
1377
|
+
"\u03B2\u03B2\u03B2\u03B2\u03C1\u03B2\u03B2",
|
|
1378
|
+
"\u03B2\u03B2\u03B2\u03B2\u03B2\u03C1\u03B2",
|
|
1379
|
+
"\u03B2\u03B2\u03B2\u03B2\u03B2\u03B2\u03C1"
|
|
1380
|
+
]
|
|
1381
|
+
},
|
|
1382
|
+
fingerDance: {
|
|
1383
|
+
interval: 160,
|
|
1384
|
+
frames: [
|
|
1385
|
+
"\u{1F918} ",
|
|
1386
|
+
"\u{1F91F} ",
|
|
1387
|
+
"\u{1F596} ",
|
|
1388
|
+
"\u270B ",
|
|
1389
|
+
"\u{1F91A} ",
|
|
1390
|
+
"\u{1F446} "
|
|
1391
|
+
]
|
|
1392
|
+
},
|
|
1393
|
+
fistBump: {
|
|
1394
|
+
interval: 80,
|
|
1395
|
+
frames: [
|
|
1396
|
+
"\u{1F91C}\u3000\u3000\u3000\u3000\u{1F91B} ",
|
|
1397
|
+
"\u{1F91C}\u3000\u3000\u3000\u3000\u{1F91B} ",
|
|
1398
|
+
"\u{1F91C}\u3000\u3000\u3000\u3000\u{1F91B} ",
|
|
1399
|
+
"\u3000\u{1F91C}\u3000\u3000\u{1F91B}\u3000 ",
|
|
1400
|
+
"\u3000\u3000\u{1F91C}\u{1F91B}\u3000\u3000 ",
|
|
1401
|
+
"\u3000\u{1F91C}\u2728\u{1F91B}\u3000\u3000 ",
|
|
1402
|
+
"\u{1F91C}\u3000\u2728\u3000\u{1F91B}\u3000 "
|
|
1403
|
+
]
|
|
1404
|
+
},
|
|
1405
|
+
soccerHeader: {
|
|
1406
|
+
interval: 80,
|
|
1407
|
+
frames: [
|
|
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
|
+
"\u{1F9D1} \u26BD\uFE0F \u{1F9D1} "
|
|
1420
|
+
]
|
|
1421
|
+
},
|
|
1422
|
+
mindblown: {
|
|
1423
|
+
interval: 160,
|
|
1424
|
+
frames: [
|
|
1425
|
+
"\u{1F610} ",
|
|
1426
|
+
"\u{1F610} ",
|
|
1427
|
+
"\u{1F62E} ",
|
|
1428
|
+
"\u{1F62E} ",
|
|
1429
|
+
"\u{1F626} ",
|
|
1430
|
+
"\u{1F626} ",
|
|
1431
|
+
"\u{1F627} ",
|
|
1432
|
+
"\u{1F627} ",
|
|
1433
|
+
"\u{1F92F} ",
|
|
1434
|
+
"\u{1F4A5} ",
|
|
1435
|
+
"\u2728 ",
|
|
1436
|
+
"\u3000 ",
|
|
1437
|
+
"\u3000 ",
|
|
1438
|
+
"\u3000 "
|
|
1439
|
+
]
|
|
1440
|
+
},
|
|
1441
|
+
speaker: {
|
|
1442
|
+
interval: 160,
|
|
1443
|
+
frames: [
|
|
1444
|
+
"\u{1F508} ",
|
|
1445
|
+
"\u{1F509} ",
|
|
1446
|
+
"\u{1F50A} ",
|
|
1447
|
+
"\u{1F509} "
|
|
1448
|
+
]
|
|
1449
|
+
},
|
|
1450
|
+
orangePulse: {
|
|
1451
|
+
interval: 100,
|
|
1452
|
+
frames: [
|
|
1453
|
+
"\u{1F538} ",
|
|
1454
|
+
"\u{1F536} ",
|
|
1455
|
+
"\u{1F7E0} ",
|
|
1456
|
+
"\u{1F7E0} ",
|
|
1457
|
+
"\u{1F536} "
|
|
1458
|
+
]
|
|
1459
|
+
},
|
|
1460
|
+
bluePulse: {
|
|
1461
|
+
interval: 100,
|
|
1462
|
+
frames: [
|
|
1463
|
+
"\u{1F539} ",
|
|
1464
|
+
"\u{1F537} ",
|
|
1465
|
+
"\u{1F535} ",
|
|
1466
|
+
"\u{1F535} ",
|
|
1467
|
+
"\u{1F537} "
|
|
1468
|
+
]
|
|
1469
|
+
},
|
|
1470
|
+
orangeBluePulse: {
|
|
1471
|
+
interval: 100,
|
|
1472
|
+
frames: [
|
|
1473
|
+
"\u{1F538} ",
|
|
1474
|
+
"\u{1F536} ",
|
|
1475
|
+
"\u{1F7E0} ",
|
|
1476
|
+
"\u{1F7E0} ",
|
|
1477
|
+
"\u{1F536} ",
|
|
1478
|
+
"\u{1F539} ",
|
|
1479
|
+
"\u{1F537} ",
|
|
1480
|
+
"\u{1F535} ",
|
|
1481
|
+
"\u{1F535} ",
|
|
1482
|
+
"\u{1F537} "
|
|
1483
|
+
]
|
|
1484
|
+
},
|
|
1485
|
+
timeTravel: {
|
|
1486
|
+
interval: 100,
|
|
1487
|
+
frames: [
|
|
1488
|
+
"\u{1F55B} ",
|
|
1489
|
+
"\u{1F55A} ",
|
|
1490
|
+
"\u{1F559} ",
|
|
1491
|
+
"\u{1F558} ",
|
|
1492
|
+
"\u{1F557} ",
|
|
1493
|
+
"\u{1F556} ",
|
|
1494
|
+
"\u{1F555} ",
|
|
1495
|
+
"\u{1F554} ",
|
|
1496
|
+
"\u{1F553} ",
|
|
1497
|
+
"\u{1F552} ",
|
|
1498
|
+
"\u{1F551} ",
|
|
1499
|
+
"\u{1F550} "
|
|
1500
|
+
]
|
|
1501
|
+
},
|
|
1502
|
+
aesthetic: {
|
|
1503
|
+
interval: 80,
|
|
1504
|
+
frames: [
|
|
1505
|
+
"\u25B0\u25B1\u25B1\u25B1\u25B1\u25B1\u25B1",
|
|
1506
|
+
"\u25B0\u25B0\u25B1\u25B1\u25B1\u25B1\u25B1",
|
|
1507
|
+
"\u25B0\u25B0\u25B0\u25B1\u25B1\u25B1\u25B1",
|
|
1508
|
+
"\u25B0\u25B0\u25B0\u25B0\u25B1\u25B1\u25B1",
|
|
1509
|
+
"\u25B0\u25B0\u25B0\u25B0\u25B0\u25B1\u25B1",
|
|
1510
|
+
"\u25B0\u25B0\u25B0\u25B0\u25B0\u25B0\u25B1",
|
|
1511
|
+
"\u25B0\u25B0\u25B0\u25B0\u25B0\u25B0\u25B0",
|
|
1512
|
+
"\u25B0\u25B1\u25B1\u25B1\u25B1\u25B1\u25B1"
|
|
1513
|
+
]
|
|
1514
|
+
},
|
|
1515
|
+
dwarfFortress: {
|
|
1516
|
+
interval: 80,
|
|
1517
|
+
frames: [
|
|
1518
|
+
" \u2588\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
|
|
1519
|
+
"\u263A\u2588\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
|
|
1520
|
+
"\u263A\u2588\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
|
|
1521
|
+
"\u263A\u2593\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
|
|
1522
|
+
"\u263A\u2593\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
|
|
1523
|
+
"\u263A\u2592\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
|
|
1524
|
+
"\u263A\u2592\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
|
|
1525
|
+
"\u263A\u2591\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
|
|
1526
|
+
"\u263A\u2591\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\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
|
|
1530
|
+
" \u263A\u2593\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
|
|
1531
|
+
" \u263A\u2593\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
|
|
1532
|
+
" \u263A\u2592\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
|
|
1533
|
+
" \u263A\u2592\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
|
|
1534
|
+
" \u263A\u2591\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
|
|
1535
|
+
" \u263A\u2591\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\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
|
|
1539
|
+
" \u263A\u2593\u2588\u2588\u2588\xA3\xA3\xA3 ",
|
|
1540
|
+
" \u263A\u2593\u2588\u2588\u2588\xA3\xA3\xA3 ",
|
|
1541
|
+
" \u263A\u2592\u2588\u2588\u2588\xA3\xA3\xA3 ",
|
|
1542
|
+
" \u263A\u2592\u2588\u2588\u2588\xA3\xA3\xA3 ",
|
|
1543
|
+
" \u263A\u2591\u2588\u2588\u2588\xA3\xA3\xA3 ",
|
|
1544
|
+
" \u263A\u2591\u2588\u2588\u2588\xA3\xA3\xA3 ",
|
|
1545
|
+
" \u263A \u2588\u2588\u2588\xA3\xA3\xA3 ",
|
|
1546
|
+
" \u263A\u2588\u2588\u2588\xA3\xA3\xA3 ",
|
|
1547
|
+
" \u263A\u2588\u2588\u2588\xA3\xA3\xA3 ",
|
|
1548
|
+
" \u263A\u2593\u2588\u2588\xA3\xA3\xA3 ",
|
|
1549
|
+
" \u263A\u2593\u2588\u2588\xA3\xA3\xA3 ",
|
|
1550
|
+
" \u263A\u2592\u2588\u2588\xA3\xA3\xA3 ",
|
|
1551
|
+
" \u263A\u2592\u2588\u2588\xA3\xA3\xA3 ",
|
|
1552
|
+
" \u263A\u2591\u2588\u2588\xA3\xA3\xA3 ",
|
|
1553
|
+
" \u263A\u2591\u2588\u2588\xA3\xA3\xA3 ",
|
|
1554
|
+
" \u263A \u2588\u2588\xA3\xA3\xA3 ",
|
|
1555
|
+
" \u263A\u2588\u2588\xA3\xA3\xA3 ",
|
|
1556
|
+
" \u263A\u2588\u2588\xA3\xA3\xA3 ",
|
|
1557
|
+
" \u263A\u2593\u2588\xA3\xA3\xA3 ",
|
|
1558
|
+
" \u263A\u2593\u2588\xA3\xA3\xA3 ",
|
|
1559
|
+
" \u263A\u2592\u2588\xA3\xA3\xA3 ",
|
|
1560
|
+
" \u263A\u2592\u2588\xA3\xA3\xA3 ",
|
|
1561
|
+
" \u263A\u2591\u2588\xA3\xA3\xA3 ",
|
|
1562
|
+
" \u263A\u2591\u2588\xA3\xA3\xA3 ",
|
|
1563
|
+
" \u263A \u2588\xA3\xA3\xA3 ",
|
|
1564
|
+
" \u263A\u2588\xA3\xA3\xA3 ",
|
|
1565
|
+
" \u263A\u2588\xA3\xA3\xA3 ",
|
|
1566
|
+
" \u263A\u2593\xA3\xA3\xA3 ",
|
|
1567
|
+
" \u263A\u2593\xA3\xA3\xA3 ",
|
|
1568
|
+
" \u263A\u2592\xA3\xA3\xA3 ",
|
|
1569
|
+
" \u263A\u2592\xA3\xA3\xA3 ",
|
|
1570
|
+
" \u263A\u2591\xA3\xA3\xA3 ",
|
|
1571
|
+
" \u263A\u2591\xA3\xA3\xA3 ",
|
|
1572
|
+
" \u263A \xA3\xA3\xA3 ",
|
|
1573
|
+
" \u263A\xA3\xA3\xA3 ",
|
|
1574
|
+
" \u263A\xA3\xA3\xA3 ",
|
|
1575
|
+
" \u263A\u2593\xA3\xA3 ",
|
|
1576
|
+
" \u263A\u2593\xA3\xA3 ",
|
|
1577
|
+
" \u263A\u2592\xA3\xA3 ",
|
|
1578
|
+
" \u263A\u2592\xA3\xA3 ",
|
|
1579
|
+
" \u263A\u2591\xA3\xA3 ",
|
|
1580
|
+
" \u263A\u2591\xA3\xA3 ",
|
|
1581
|
+
" \u263A \xA3\xA3 ",
|
|
1582
|
+
" \u263A\xA3\xA3 ",
|
|
1583
|
+
" \u263A\xA3\xA3 ",
|
|
1584
|
+
" \u263A\u2593\xA3 ",
|
|
1585
|
+
" \u263A\u2593\xA3 ",
|
|
1586
|
+
" \u263A\u2592\xA3 ",
|
|
1587
|
+
" \u263A\u2592\xA3 ",
|
|
1588
|
+
" \u263A\u2591\xA3 ",
|
|
1589
|
+
" \u263A\u2591\xA3 ",
|
|
1590
|
+
" \u263A \xA3 ",
|
|
1591
|
+
" \u263A\xA3 ",
|
|
1592
|
+
" \u263A\xA3 ",
|
|
1593
|
+
" \u263A\u2593 ",
|
|
1594
|
+
" \u263A\u2593 ",
|
|
1595
|
+
" \u263A\u2592 ",
|
|
1596
|
+
" \u263A\u2592 ",
|
|
1597
|
+
" \u263A\u2591 ",
|
|
1598
|
+
" \u263A\u2591 ",
|
|
1599
|
+
" \u263A ",
|
|
1600
|
+
" \u263A &",
|
|
1601
|
+
" \u263A \u263C&",
|
|
1602
|
+
" \u263A \u263C &",
|
|
1603
|
+
" \u263A\u263C &",
|
|
1604
|
+
" \u263A\u263C & ",
|
|
1605
|
+
" \u203C & ",
|
|
1606
|
+
" \u263A & ",
|
|
1607
|
+
" \u203C & ",
|
|
1608
|
+
" \u263A & ",
|
|
1609
|
+
" \u203C & ",
|
|
1610
|
+
" \u263A & ",
|
|
1611
|
+
"\u203C & ",
|
|
1612
|
+
" & ",
|
|
1613
|
+
" & ",
|
|
1614
|
+
" & \u2591 ",
|
|
1615
|
+
" & \u2592 ",
|
|
1616
|
+
" & \u2593 ",
|
|
1617
|
+
" & \xA3 ",
|
|
1618
|
+
" & \u2591\xA3 ",
|
|
1619
|
+
" & \u2592\xA3 ",
|
|
1620
|
+
" & \u2593\xA3 ",
|
|
1621
|
+
" & \xA3\xA3 ",
|
|
1622
|
+
" & \u2591\xA3\xA3 ",
|
|
1623
|
+
" & \u2592\xA3\xA3 ",
|
|
1624
|
+
"& \u2593\xA3\xA3 ",
|
|
1625
|
+
"& \xA3\xA3\xA3 ",
|
|
1626
|
+
" \u2591\xA3\xA3\xA3 ",
|
|
1627
|
+
" \u2592\xA3\xA3\xA3 ",
|
|
1628
|
+
" \u2593\xA3\xA3\xA3 ",
|
|
1629
|
+
" \u2588\xA3\xA3\xA3 ",
|
|
1630
|
+
" \u2591\u2588\xA3\xA3\xA3 ",
|
|
1631
|
+
" \u2592\u2588\xA3\xA3\xA3 ",
|
|
1632
|
+
" \u2593\u2588\xA3\xA3\xA3 ",
|
|
1633
|
+
" \u2588\u2588\xA3\xA3\xA3 ",
|
|
1634
|
+
" \u2591\u2588\u2588\xA3\xA3\xA3 ",
|
|
1635
|
+
" \u2592\u2588\u2588\xA3\xA3\xA3 ",
|
|
1636
|
+
" \u2593\u2588\u2588\xA3\xA3\xA3 ",
|
|
1637
|
+
" \u2588\u2588\u2588\xA3\xA3\xA3 ",
|
|
1638
|
+
" \u2591\u2588\u2588\u2588\xA3\xA3\xA3 ",
|
|
1639
|
+
" \u2592\u2588\u2588\u2588\xA3\xA3\xA3 ",
|
|
1640
|
+
" \u2593\u2588\u2588\u2588\xA3\xA3\xA3 ",
|
|
1641
|
+
" \u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
|
|
1642
|
+
" \u2591\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
|
|
1643
|
+
" \u2592\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
|
|
1644
|
+
" \u2593\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
|
|
1645
|
+
" \u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
|
|
1646
|
+
" \u2591\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
|
|
1647
|
+
" \u2592\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
|
|
1648
|
+
" \u2593\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
|
|
1649
|
+
" \u2588\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
|
|
1650
|
+
" \u2588\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 "
|
|
1651
|
+
]
|
|
1652
|
+
}
|
|
1653
|
+
};
|
|
1654
|
+
}
|
|
1655
|
+
});
|
|
1656
|
+
|
|
1657
|
+
// ../../node_modules/.pnpm/cli-spinners@2.9.2/node_modules/cli-spinners/index.js
|
|
1658
|
+
var require_cli_spinners = __commonJS({
|
|
1659
|
+
"../../node_modules/.pnpm/cli-spinners@2.9.2/node_modules/cli-spinners/index.js"(exports2, module2) {
|
|
1660
|
+
"use strict";
|
|
1661
|
+
var spinners = Object.assign({}, require_spinners());
|
|
1662
|
+
var spinnersList = Object.keys(spinners);
|
|
1663
|
+
Object.defineProperty(spinners, "random", {
|
|
1664
|
+
get() {
|
|
1665
|
+
const randomIndex = Math.floor(Math.random() * spinnersList.length);
|
|
1666
|
+
const spinnerName = spinnersList[randomIndex];
|
|
1667
|
+
return spinners[spinnerName];
|
|
1668
|
+
}
|
|
1669
|
+
});
|
|
1670
|
+
module2.exports = spinners;
|
|
1671
|
+
}
|
|
1672
|
+
});
|
|
1673
|
+
|
|
26
1674
|
// src/index.ts
|
|
27
1675
|
var import_commander7 = require("commander");
|
|
1676
|
+
|
|
1677
|
+
// src/core/runtime-paths.ts
|
|
28
1678
|
var import_node_fs = require("fs");
|
|
1679
|
+
var import_node_path = __toESM(require("path"), 1);
|
|
29
1680
|
var import_node_url = require("url");
|
|
1681
|
+
var import_meta = {};
|
|
1682
|
+
var CLI_PACKAGE_NAMES = /* @__PURE__ */ new Set(["@better-webhook/cli", "better-webhook"]);
|
|
1683
|
+
function resolveRealPath(filePath) {
|
|
1684
|
+
try {
|
|
1685
|
+
return (0, import_node_fs.realpathSync)(filePath);
|
|
1686
|
+
} catch {
|
|
1687
|
+
return filePath;
|
|
1688
|
+
}
|
|
1689
|
+
}
|
|
1690
|
+
function readPackageName(packageJsonPath) {
|
|
1691
|
+
if (!(0, import_node_fs.existsSync)(packageJsonPath)) {
|
|
1692
|
+
return void 0;
|
|
1693
|
+
}
|
|
1694
|
+
try {
|
|
1695
|
+
const packageJson = JSON.parse(
|
|
1696
|
+
(0, import_node_fs.readFileSync)(packageJsonPath, { encoding: "utf8" })
|
|
1697
|
+
);
|
|
1698
|
+
return typeof packageJson.name === "string" ? packageJson.name : void 0;
|
|
1699
|
+
} catch {
|
|
1700
|
+
return void 0;
|
|
1701
|
+
}
|
|
1702
|
+
}
|
|
1703
|
+
function isCliPackageName(packageName) {
|
|
1704
|
+
return typeof packageName === "string" && CLI_PACKAGE_NAMES.has(packageName);
|
|
1705
|
+
}
|
|
1706
|
+
function findCliPackageRoot(startDir) {
|
|
1707
|
+
let currentDir = resolveRealPath(import_node_path.default.resolve(startDir));
|
|
1708
|
+
while (true) {
|
|
1709
|
+
const packageJsonPath = import_node_path.default.join(currentDir, "package.json");
|
|
1710
|
+
const packageName = readPackageName(packageJsonPath);
|
|
1711
|
+
if (isCliPackageName(packageName)) {
|
|
1712
|
+
return currentDir;
|
|
1713
|
+
}
|
|
1714
|
+
const parentDir = import_node_path.default.dirname(currentDir);
|
|
1715
|
+
if (parentDir === currentDir) {
|
|
1716
|
+
return void 0;
|
|
1717
|
+
}
|
|
1718
|
+
currentDir = parentDir;
|
|
1719
|
+
}
|
|
1720
|
+
}
|
|
1721
|
+
function resolveRuntimeDir() {
|
|
1722
|
+
if (typeof __dirname !== "undefined") {
|
|
1723
|
+
return resolveRealPath(__dirname);
|
|
1724
|
+
}
|
|
1725
|
+
const moduleUrl = import_meta.url;
|
|
1726
|
+
if (typeof moduleUrl === "string" && moduleUrl.startsWith("file:")) {
|
|
1727
|
+
return import_node_path.default.dirname(resolveRealPath((0, import_node_url.fileURLToPath)(moduleUrl)));
|
|
1728
|
+
}
|
|
1729
|
+
const entryPath = process.argv[1];
|
|
1730
|
+
if (entryPath) {
|
|
1731
|
+
const entryDir = import_node_path.default.dirname(resolveRealPath(import_node_path.default.resolve(entryPath)));
|
|
1732
|
+
const cliPackageRoot = findCliPackageRoot(entryDir);
|
|
1733
|
+
if (cliPackageRoot) {
|
|
1734
|
+
return cliPackageRoot;
|
|
1735
|
+
}
|
|
1736
|
+
return entryDir;
|
|
1737
|
+
}
|
|
1738
|
+
const cwdPackageRoot = findCliPackageRoot(process.cwd());
|
|
1739
|
+
if (cwdPackageRoot) {
|
|
1740
|
+
return cwdPackageRoot;
|
|
1741
|
+
}
|
|
1742
|
+
return process.cwd();
|
|
1743
|
+
}
|
|
1744
|
+
|
|
1745
|
+
// src/core/cli-version.ts
|
|
1746
|
+
var import_node_fs2 = require("fs");
|
|
1747
|
+
var import_node_path2 = __toESM(require("path"), 1);
|
|
1748
|
+
function readPackageVersion(packageJsonPath) {
|
|
1749
|
+
try {
|
|
1750
|
+
const packageJson = JSON.parse(
|
|
1751
|
+
(0, import_node_fs2.readFileSync)(packageJsonPath, { encoding: "utf8" })
|
|
1752
|
+
);
|
|
1753
|
+
return typeof packageJson.version === "string" && packageJson.version ? packageJson.version : void 0;
|
|
1754
|
+
} catch {
|
|
1755
|
+
return void 0;
|
|
1756
|
+
}
|
|
1757
|
+
}
|
|
1758
|
+
function resolveRuntimePackageVersion(runtimeDir) {
|
|
1759
|
+
const searchDirs = [runtimeDir, import_node_path2.default.resolve(runtimeDir, "..")];
|
|
1760
|
+
const visitedRoots = /* @__PURE__ */ new Set();
|
|
1761
|
+
for (const searchDir of searchDirs) {
|
|
1762
|
+
const cliPackageRoot = findCliPackageRoot(searchDir);
|
|
1763
|
+
if (!cliPackageRoot || visitedRoots.has(cliPackageRoot)) {
|
|
1764
|
+
continue;
|
|
1765
|
+
}
|
|
1766
|
+
visitedRoots.add(cliPackageRoot);
|
|
1767
|
+
const version = readPackageVersion(
|
|
1768
|
+
import_node_path2.default.join(cliPackageRoot, "package.json")
|
|
1769
|
+
);
|
|
1770
|
+
if (version) {
|
|
1771
|
+
return version;
|
|
1772
|
+
}
|
|
1773
|
+
}
|
|
1774
|
+
return void 0;
|
|
1775
|
+
}
|
|
30
1776
|
|
|
31
1777
|
// src/commands/templates.ts
|
|
32
1778
|
var import_commander = require("commander");
|
|
33
|
-
|
|
1779
|
+
|
|
1780
|
+
// ../../node_modules/.pnpm/ora@8.2.0/node_modules/ora/index.js
|
|
1781
|
+
var import_node_process7 = __toESM(require("process"), 1);
|
|
1782
|
+
|
|
1783
|
+
// ../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/vendor/ansi-styles/index.js
|
|
1784
|
+
var ANSI_BACKGROUND_OFFSET = 10;
|
|
1785
|
+
var wrapAnsi16 = (offset = 0) => (code) => `\x1B[${code + offset}m`;
|
|
1786
|
+
var wrapAnsi256 = (offset = 0) => (code) => `\x1B[${38 + offset};5;${code}m`;
|
|
1787
|
+
var wrapAnsi16m = (offset = 0) => (red, green, blue) => `\x1B[${38 + offset};2;${red};${green};${blue}m`;
|
|
1788
|
+
var styles = {
|
|
1789
|
+
modifier: {
|
|
1790
|
+
reset: [0, 0],
|
|
1791
|
+
// 21 isn't widely supported and 22 does the same thing
|
|
1792
|
+
bold: [1, 22],
|
|
1793
|
+
dim: [2, 22],
|
|
1794
|
+
italic: [3, 23],
|
|
1795
|
+
underline: [4, 24],
|
|
1796
|
+
overline: [53, 55],
|
|
1797
|
+
inverse: [7, 27],
|
|
1798
|
+
hidden: [8, 28],
|
|
1799
|
+
strikethrough: [9, 29]
|
|
1800
|
+
},
|
|
1801
|
+
color: {
|
|
1802
|
+
black: [30, 39],
|
|
1803
|
+
red: [31, 39],
|
|
1804
|
+
green: [32, 39],
|
|
1805
|
+
yellow: [33, 39],
|
|
1806
|
+
blue: [34, 39],
|
|
1807
|
+
magenta: [35, 39],
|
|
1808
|
+
cyan: [36, 39],
|
|
1809
|
+
white: [37, 39],
|
|
1810
|
+
// Bright color
|
|
1811
|
+
blackBright: [90, 39],
|
|
1812
|
+
gray: [90, 39],
|
|
1813
|
+
// Alias of `blackBright`
|
|
1814
|
+
grey: [90, 39],
|
|
1815
|
+
// Alias of `blackBright`
|
|
1816
|
+
redBright: [91, 39],
|
|
1817
|
+
greenBright: [92, 39],
|
|
1818
|
+
yellowBright: [93, 39],
|
|
1819
|
+
blueBright: [94, 39],
|
|
1820
|
+
magentaBright: [95, 39],
|
|
1821
|
+
cyanBright: [96, 39],
|
|
1822
|
+
whiteBright: [97, 39]
|
|
1823
|
+
},
|
|
1824
|
+
bgColor: {
|
|
1825
|
+
bgBlack: [40, 49],
|
|
1826
|
+
bgRed: [41, 49],
|
|
1827
|
+
bgGreen: [42, 49],
|
|
1828
|
+
bgYellow: [43, 49],
|
|
1829
|
+
bgBlue: [44, 49],
|
|
1830
|
+
bgMagenta: [45, 49],
|
|
1831
|
+
bgCyan: [46, 49],
|
|
1832
|
+
bgWhite: [47, 49],
|
|
1833
|
+
// Bright color
|
|
1834
|
+
bgBlackBright: [100, 49],
|
|
1835
|
+
bgGray: [100, 49],
|
|
1836
|
+
// Alias of `bgBlackBright`
|
|
1837
|
+
bgGrey: [100, 49],
|
|
1838
|
+
// Alias of `bgBlackBright`
|
|
1839
|
+
bgRedBright: [101, 49],
|
|
1840
|
+
bgGreenBright: [102, 49],
|
|
1841
|
+
bgYellowBright: [103, 49],
|
|
1842
|
+
bgBlueBright: [104, 49],
|
|
1843
|
+
bgMagentaBright: [105, 49],
|
|
1844
|
+
bgCyanBright: [106, 49],
|
|
1845
|
+
bgWhiteBright: [107, 49]
|
|
1846
|
+
}
|
|
1847
|
+
};
|
|
1848
|
+
var modifierNames = Object.keys(styles.modifier);
|
|
1849
|
+
var foregroundColorNames = Object.keys(styles.color);
|
|
1850
|
+
var backgroundColorNames = Object.keys(styles.bgColor);
|
|
1851
|
+
var colorNames = [...foregroundColorNames, ...backgroundColorNames];
|
|
1852
|
+
function assembleStyles() {
|
|
1853
|
+
const codes = /* @__PURE__ */ new Map();
|
|
1854
|
+
for (const [groupName, group] of Object.entries(styles)) {
|
|
1855
|
+
for (const [styleName, style] of Object.entries(group)) {
|
|
1856
|
+
styles[styleName] = {
|
|
1857
|
+
open: `\x1B[${style[0]}m`,
|
|
1858
|
+
close: `\x1B[${style[1]}m`
|
|
1859
|
+
};
|
|
1860
|
+
group[styleName] = styles[styleName];
|
|
1861
|
+
codes.set(style[0], style[1]);
|
|
1862
|
+
}
|
|
1863
|
+
Object.defineProperty(styles, groupName, {
|
|
1864
|
+
value: group,
|
|
1865
|
+
enumerable: false
|
|
1866
|
+
});
|
|
1867
|
+
}
|
|
1868
|
+
Object.defineProperty(styles, "codes", {
|
|
1869
|
+
value: codes,
|
|
1870
|
+
enumerable: false
|
|
1871
|
+
});
|
|
1872
|
+
styles.color.close = "\x1B[39m";
|
|
1873
|
+
styles.bgColor.close = "\x1B[49m";
|
|
1874
|
+
styles.color.ansi = wrapAnsi16();
|
|
1875
|
+
styles.color.ansi256 = wrapAnsi256();
|
|
1876
|
+
styles.color.ansi16m = wrapAnsi16m();
|
|
1877
|
+
styles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);
|
|
1878
|
+
styles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);
|
|
1879
|
+
styles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);
|
|
1880
|
+
Object.defineProperties(styles, {
|
|
1881
|
+
rgbToAnsi256: {
|
|
1882
|
+
value(red, green, blue) {
|
|
1883
|
+
if (red === green && green === blue) {
|
|
1884
|
+
if (red < 8) {
|
|
1885
|
+
return 16;
|
|
1886
|
+
}
|
|
1887
|
+
if (red > 248) {
|
|
1888
|
+
return 231;
|
|
1889
|
+
}
|
|
1890
|
+
return Math.round((red - 8) / 247 * 24) + 232;
|
|
1891
|
+
}
|
|
1892
|
+
return 16 + 36 * Math.round(red / 255 * 5) + 6 * Math.round(green / 255 * 5) + Math.round(blue / 255 * 5);
|
|
1893
|
+
},
|
|
1894
|
+
enumerable: false
|
|
1895
|
+
},
|
|
1896
|
+
hexToRgb: {
|
|
1897
|
+
value(hex) {
|
|
1898
|
+
const matches = /[a-f\d]{6}|[a-f\d]{3}/i.exec(hex.toString(16));
|
|
1899
|
+
if (!matches) {
|
|
1900
|
+
return [0, 0, 0];
|
|
1901
|
+
}
|
|
1902
|
+
let [colorString] = matches;
|
|
1903
|
+
if (colorString.length === 3) {
|
|
1904
|
+
colorString = [...colorString].map((character) => character + character).join("");
|
|
1905
|
+
}
|
|
1906
|
+
const integer = Number.parseInt(colorString, 16);
|
|
1907
|
+
return [
|
|
1908
|
+
/* eslint-disable no-bitwise */
|
|
1909
|
+
integer >> 16 & 255,
|
|
1910
|
+
integer >> 8 & 255,
|
|
1911
|
+
integer & 255
|
|
1912
|
+
/* eslint-enable no-bitwise */
|
|
1913
|
+
];
|
|
1914
|
+
},
|
|
1915
|
+
enumerable: false
|
|
1916
|
+
},
|
|
1917
|
+
hexToAnsi256: {
|
|
1918
|
+
value: (hex) => styles.rgbToAnsi256(...styles.hexToRgb(hex)),
|
|
1919
|
+
enumerable: false
|
|
1920
|
+
},
|
|
1921
|
+
ansi256ToAnsi: {
|
|
1922
|
+
value(code) {
|
|
1923
|
+
if (code < 8) {
|
|
1924
|
+
return 30 + code;
|
|
1925
|
+
}
|
|
1926
|
+
if (code < 16) {
|
|
1927
|
+
return 90 + (code - 8);
|
|
1928
|
+
}
|
|
1929
|
+
let red;
|
|
1930
|
+
let green;
|
|
1931
|
+
let blue;
|
|
1932
|
+
if (code >= 232) {
|
|
1933
|
+
red = ((code - 232) * 10 + 8) / 255;
|
|
1934
|
+
green = red;
|
|
1935
|
+
blue = red;
|
|
1936
|
+
} else {
|
|
1937
|
+
code -= 16;
|
|
1938
|
+
const remainder = code % 36;
|
|
1939
|
+
red = Math.floor(code / 36) / 5;
|
|
1940
|
+
green = Math.floor(remainder / 6) / 5;
|
|
1941
|
+
blue = remainder % 6 / 5;
|
|
1942
|
+
}
|
|
1943
|
+
const value = Math.max(red, green, blue) * 2;
|
|
1944
|
+
if (value === 0) {
|
|
1945
|
+
return 30;
|
|
1946
|
+
}
|
|
1947
|
+
let result = 30 + (Math.round(blue) << 2 | Math.round(green) << 1 | Math.round(red));
|
|
1948
|
+
if (value === 2) {
|
|
1949
|
+
result += 60;
|
|
1950
|
+
}
|
|
1951
|
+
return result;
|
|
1952
|
+
},
|
|
1953
|
+
enumerable: false
|
|
1954
|
+
},
|
|
1955
|
+
rgbToAnsi: {
|
|
1956
|
+
value: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),
|
|
1957
|
+
enumerable: false
|
|
1958
|
+
},
|
|
1959
|
+
hexToAnsi: {
|
|
1960
|
+
value: (hex) => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),
|
|
1961
|
+
enumerable: false
|
|
1962
|
+
}
|
|
1963
|
+
});
|
|
1964
|
+
return styles;
|
|
1965
|
+
}
|
|
1966
|
+
var ansiStyles = assembleStyles();
|
|
1967
|
+
var ansi_styles_default = ansiStyles;
|
|
1968
|
+
|
|
1969
|
+
// ../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/vendor/supports-color/index.js
|
|
1970
|
+
var import_node_process = __toESM(require("process"), 1);
|
|
1971
|
+
var import_node_os = __toESM(require("os"), 1);
|
|
1972
|
+
var import_node_tty = __toESM(require("tty"), 1);
|
|
1973
|
+
function hasFlag(flag, argv = globalThis.Deno ? globalThis.Deno.args : import_node_process.default.argv) {
|
|
1974
|
+
const prefix = flag.startsWith("-") ? "" : flag.length === 1 ? "-" : "--";
|
|
1975
|
+
const position = argv.indexOf(prefix + flag);
|
|
1976
|
+
const terminatorPosition = argv.indexOf("--");
|
|
1977
|
+
return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);
|
|
1978
|
+
}
|
|
1979
|
+
var { env } = import_node_process.default;
|
|
1980
|
+
var flagForceColor;
|
|
1981
|
+
if (hasFlag("no-color") || hasFlag("no-colors") || hasFlag("color=false") || hasFlag("color=never")) {
|
|
1982
|
+
flagForceColor = 0;
|
|
1983
|
+
} else if (hasFlag("color") || hasFlag("colors") || hasFlag("color=true") || hasFlag("color=always")) {
|
|
1984
|
+
flagForceColor = 1;
|
|
1985
|
+
}
|
|
1986
|
+
function envForceColor() {
|
|
1987
|
+
if ("FORCE_COLOR" in env) {
|
|
1988
|
+
if (env.FORCE_COLOR === "true") {
|
|
1989
|
+
return 1;
|
|
1990
|
+
}
|
|
1991
|
+
if (env.FORCE_COLOR === "false") {
|
|
1992
|
+
return 0;
|
|
1993
|
+
}
|
|
1994
|
+
return env.FORCE_COLOR.length === 0 ? 1 : Math.min(Number.parseInt(env.FORCE_COLOR, 10), 3);
|
|
1995
|
+
}
|
|
1996
|
+
}
|
|
1997
|
+
function translateLevel(level) {
|
|
1998
|
+
if (level === 0) {
|
|
1999
|
+
return false;
|
|
2000
|
+
}
|
|
2001
|
+
return {
|
|
2002
|
+
level,
|
|
2003
|
+
hasBasic: true,
|
|
2004
|
+
has256: level >= 2,
|
|
2005
|
+
has16m: level >= 3
|
|
2006
|
+
};
|
|
2007
|
+
}
|
|
2008
|
+
function _supportsColor(haveStream, { streamIsTTY, sniffFlags = true } = {}) {
|
|
2009
|
+
const noFlagForceColor = envForceColor();
|
|
2010
|
+
if (noFlagForceColor !== void 0) {
|
|
2011
|
+
flagForceColor = noFlagForceColor;
|
|
2012
|
+
}
|
|
2013
|
+
const forceColor = sniffFlags ? flagForceColor : noFlagForceColor;
|
|
2014
|
+
if (forceColor === 0) {
|
|
2015
|
+
return 0;
|
|
2016
|
+
}
|
|
2017
|
+
if (sniffFlags) {
|
|
2018
|
+
if (hasFlag("color=16m") || hasFlag("color=full") || hasFlag("color=truecolor")) {
|
|
2019
|
+
return 3;
|
|
2020
|
+
}
|
|
2021
|
+
if (hasFlag("color=256")) {
|
|
2022
|
+
return 2;
|
|
2023
|
+
}
|
|
2024
|
+
}
|
|
2025
|
+
if ("TF_BUILD" in env && "AGENT_NAME" in env) {
|
|
2026
|
+
return 1;
|
|
2027
|
+
}
|
|
2028
|
+
if (haveStream && !streamIsTTY && forceColor === void 0) {
|
|
2029
|
+
return 0;
|
|
2030
|
+
}
|
|
2031
|
+
const min = forceColor || 0;
|
|
2032
|
+
if (env.TERM === "dumb") {
|
|
2033
|
+
return min;
|
|
2034
|
+
}
|
|
2035
|
+
if (import_node_process.default.platform === "win32") {
|
|
2036
|
+
const osRelease = import_node_os.default.release().split(".");
|
|
2037
|
+
if (Number(osRelease[0]) >= 10 && Number(osRelease[2]) >= 10586) {
|
|
2038
|
+
return Number(osRelease[2]) >= 14931 ? 3 : 2;
|
|
2039
|
+
}
|
|
2040
|
+
return 1;
|
|
2041
|
+
}
|
|
2042
|
+
if ("CI" in env) {
|
|
2043
|
+
if (["GITHUB_ACTIONS", "GITEA_ACTIONS", "CIRCLECI"].some((key) => key in env)) {
|
|
2044
|
+
return 3;
|
|
2045
|
+
}
|
|
2046
|
+
if (["TRAVIS", "APPVEYOR", "GITLAB_CI", "BUILDKITE", "DRONE"].some((sign) => sign in env) || env.CI_NAME === "codeship") {
|
|
2047
|
+
return 1;
|
|
2048
|
+
}
|
|
2049
|
+
return min;
|
|
2050
|
+
}
|
|
2051
|
+
if ("TEAMCITY_VERSION" in env) {
|
|
2052
|
+
return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;
|
|
2053
|
+
}
|
|
2054
|
+
if (env.COLORTERM === "truecolor") {
|
|
2055
|
+
return 3;
|
|
2056
|
+
}
|
|
2057
|
+
if (env.TERM === "xterm-kitty") {
|
|
2058
|
+
return 3;
|
|
2059
|
+
}
|
|
2060
|
+
if (env.TERM === "xterm-ghostty") {
|
|
2061
|
+
return 3;
|
|
2062
|
+
}
|
|
2063
|
+
if (env.TERM === "wezterm") {
|
|
2064
|
+
return 3;
|
|
2065
|
+
}
|
|
2066
|
+
if ("TERM_PROGRAM" in env) {
|
|
2067
|
+
const version = Number.parseInt((env.TERM_PROGRAM_VERSION || "").split(".")[0], 10);
|
|
2068
|
+
switch (env.TERM_PROGRAM) {
|
|
2069
|
+
case "iTerm.app": {
|
|
2070
|
+
return version >= 3 ? 3 : 2;
|
|
2071
|
+
}
|
|
2072
|
+
case "Apple_Terminal": {
|
|
2073
|
+
return 2;
|
|
2074
|
+
}
|
|
2075
|
+
}
|
|
2076
|
+
}
|
|
2077
|
+
if (/-256(color)?$/i.test(env.TERM)) {
|
|
2078
|
+
return 2;
|
|
2079
|
+
}
|
|
2080
|
+
if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {
|
|
2081
|
+
return 1;
|
|
2082
|
+
}
|
|
2083
|
+
if ("COLORTERM" in env) {
|
|
2084
|
+
return 1;
|
|
2085
|
+
}
|
|
2086
|
+
return min;
|
|
2087
|
+
}
|
|
2088
|
+
function createSupportsColor(stream, options = {}) {
|
|
2089
|
+
const level = _supportsColor(stream, {
|
|
2090
|
+
streamIsTTY: stream && stream.isTTY,
|
|
2091
|
+
...options
|
|
2092
|
+
});
|
|
2093
|
+
return translateLevel(level);
|
|
2094
|
+
}
|
|
2095
|
+
var supportsColor = {
|
|
2096
|
+
stdout: createSupportsColor({ isTTY: import_node_tty.default.isatty(1) }),
|
|
2097
|
+
stderr: createSupportsColor({ isTTY: import_node_tty.default.isatty(2) })
|
|
2098
|
+
};
|
|
2099
|
+
var supports_color_default = supportsColor;
|
|
2100
|
+
|
|
2101
|
+
// ../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/utilities.js
|
|
2102
|
+
function stringReplaceAll(string, substring, replacer) {
|
|
2103
|
+
let index = string.indexOf(substring);
|
|
2104
|
+
if (index === -1) {
|
|
2105
|
+
return string;
|
|
2106
|
+
}
|
|
2107
|
+
const substringLength = substring.length;
|
|
2108
|
+
let endIndex = 0;
|
|
2109
|
+
let returnValue = "";
|
|
2110
|
+
do {
|
|
2111
|
+
returnValue += string.slice(endIndex, index) + substring + replacer;
|
|
2112
|
+
endIndex = index + substringLength;
|
|
2113
|
+
index = string.indexOf(substring, endIndex);
|
|
2114
|
+
} while (index !== -1);
|
|
2115
|
+
returnValue += string.slice(endIndex);
|
|
2116
|
+
return returnValue;
|
|
2117
|
+
}
|
|
2118
|
+
function stringEncaseCRLFWithFirstIndex(string, prefix, postfix, index) {
|
|
2119
|
+
let endIndex = 0;
|
|
2120
|
+
let returnValue = "";
|
|
2121
|
+
do {
|
|
2122
|
+
const gotCR = string[index - 1] === "\r";
|
|
2123
|
+
returnValue += string.slice(endIndex, gotCR ? index - 1 : index) + prefix + (gotCR ? "\r\n" : "\n") + postfix;
|
|
2124
|
+
endIndex = index + 1;
|
|
2125
|
+
index = string.indexOf("\n", endIndex);
|
|
2126
|
+
} while (index !== -1);
|
|
2127
|
+
returnValue += string.slice(endIndex);
|
|
2128
|
+
return returnValue;
|
|
2129
|
+
}
|
|
2130
|
+
|
|
2131
|
+
// ../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/index.js
|
|
2132
|
+
var { stdout: stdoutColor, stderr: stderrColor } = supports_color_default;
|
|
2133
|
+
var GENERATOR = Symbol("GENERATOR");
|
|
2134
|
+
var STYLER = Symbol("STYLER");
|
|
2135
|
+
var IS_EMPTY = Symbol("IS_EMPTY");
|
|
2136
|
+
var levelMapping = [
|
|
2137
|
+
"ansi",
|
|
2138
|
+
"ansi",
|
|
2139
|
+
"ansi256",
|
|
2140
|
+
"ansi16m"
|
|
2141
|
+
];
|
|
2142
|
+
var styles2 = /* @__PURE__ */ Object.create(null);
|
|
2143
|
+
var applyOptions = (object, options = {}) => {
|
|
2144
|
+
if (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {
|
|
2145
|
+
throw new Error("The `level` option should be an integer from 0 to 3");
|
|
2146
|
+
}
|
|
2147
|
+
const colorLevel = stdoutColor ? stdoutColor.level : 0;
|
|
2148
|
+
object.level = options.level === void 0 ? colorLevel : options.level;
|
|
2149
|
+
};
|
|
2150
|
+
var chalkFactory = (options) => {
|
|
2151
|
+
const chalk2 = (...strings) => strings.join(" ");
|
|
2152
|
+
applyOptions(chalk2, options);
|
|
2153
|
+
Object.setPrototypeOf(chalk2, createChalk.prototype);
|
|
2154
|
+
return chalk2;
|
|
2155
|
+
};
|
|
2156
|
+
function createChalk(options) {
|
|
2157
|
+
return chalkFactory(options);
|
|
2158
|
+
}
|
|
2159
|
+
Object.setPrototypeOf(createChalk.prototype, Function.prototype);
|
|
2160
|
+
for (const [styleName, style] of Object.entries(ansi_styles_default)) {
|
|
2161
|
+
styles2[styleName] = {
|
|
2162
|
+
get() {
|
|
2163
|
+
const builder = createBuilder(this, createStyler(style.open, style.close, this[STYLER]), this[IS_EMPTY]);
|
|
2164
|
+
Object.defineProperty(this, styleName, { value: builder });
|
|
2165
|
+
return builder;
|
|
2166
|
+
}
|
|
2167
|
+
};
|
|
2168
|
+
}
|
|
2169
|
+
styles2.visible = {
|
|
2170
|
+
get() {
|
|
2171
|
+
const builder = createBuilder(this, this[STYLER], true);
|
|
2172
|
+
Object.defineProperty(this, "visible", { value: builder });
|
|
2173
|
+
return builder;
|
|
2174
|
+
}
|
|
2175
|
+
};
|
|
2176
|
+
var getModelAnsi = (model, level, type, ...arguments_) => {
|
|
2177
|
+
if (model === "rgb") {
|
|
2178
|
+
if (level === "ansi16m") {
|
|
2179
|
+
return ansi_styles_default[type].ansi16m(...arguments_);
|
|
2180
|
+
}
|
|
2181
|
+
if (level === "ansi256") {
|
|
2182
|
+
return ansi_styles_default[type].ansi256(ansi_styles_default.rgbToAnsi256(...arguments_));
|
|
2183
|
+
}
|
|
2184
|
+
return ansi_styles_default[type].ansi(ansi_styles_default.rgbToAnsi(...arguments_));
|
|
2185
|
+
}
|
|
2186
|
+
if (model === "hex") {
|
|
2187
|
+
return getModelAnsi("rgb", level, type, ...ansi_styles_default.hexToRgb(...arguments_));
|
|
2188
|
+
}
|
|
2189
|
+
return ansi_styles_default[type][model](...arguments_);
|
|
2190
|
+
};
|
|
2191
|
+
var usedModels = ["rgb", "hex", "ansi256"];
|
|
2192
|
+
for (const model of usedModels) {
|
|
2193
|
+
styles2[model] = {
|
|
2194
|
+
get() {
|
|
2195
|
+
const { level } = this;
|
|
2196
|
+
return function(...arguments_) {
|
|
2197
|
+
const styler = createStyler(getModelAnsi(model, levelMapping[level], "color", ...arguments_), ansi_styles_default.color.close, this[STYLER]);
|
|
2198
|
+
return createBuilder(this, styler, this[IS_EMPTY]);
|
|
2199
|
+
};
|
|
2200
|
+
}
|
|
2201
|
+
};
|
|
2202
|
+
const bgModel = "bg" + model[0].toUpperCase() + model.slice(1);
|
|
2203
|
+
styles2[bgModel] = {
|
|
2204
|
+
get() {
|
|
2205
|
+
const { level } = this;
|
|
2206
|
+
return function(...arguments_) {
|
|
2207
|
+
const styler = createStyler(getModelAnsi(model, levelMapping[level], "bgColor", ...arguments_), ansi_styles_default.bgColor.close, this[STYLER]);
|
|
2208
|
+
return createBuilder(this, styler, this[IS_EMPTY]);
|
|
2209
|
+
};
|
|
2210
|
+
}
|
|
2211
|
+
};
|
|
2212
|
+
}
|
|
2213
|
+
var proto = Object.defineProperties(() => {
|
|
2214
|
+
}, {
|
|
2215
|
+
...styles2,
|
|
2216
|
+
level: {
|
|
2217
|
+
enumerable: true,
|
|
2218
|
+
get() {
|
|
2219
|
+
return this[GENERATOR].level;
|
|
2220
|
+
},
|
|
2221
|
+
set(level) {
|
|
2222
|
+
this[GENERATOR].level = level;
|
|
2223
|
+
}
|
|
2224
|
+
}
|
|
2225
|
+
});
|
|
2226
|
+
var createStyler = (open, close, parent) => {
|
|
2227
|
+
let openAll;
|
|
2228
|
+
let closeAll;
|
|
2229
|
+
if (parent === void 0) {
|
|
2230
|
+
openAll = open;
|
|
2231
|
+
closeAll = close;
|
|
2232
|
+
} else {
|
|
2233
|
+
openAll = parent.openAll + open;
|
|
2234
|
+
closeAll = close + parent.closeAll;
|
|
2235
|
+
}
|
|
2236
|
+
return {
|
|
2237
|
+
open,
|
|
2238
|
+
close,
|
|
2239
|
+
openAll,
|
|
2240
|
+
closeAll,
|
|
2241
|
+
parent
|
|
2242
|
+
};
|
|
2243
|
+
};
|
|
2244
|
+
var createBuilder = (self, _styler, _isEmpty) => {
|
|
2245
|
+
const builder = (...arguments_) => applyStyle(builder, arguments_.length === 1 ? "" + arguments_[0] : arguments_.join(" "));
|
|
2246
|
+
Object.setPrototypeOf(builder, proto);
|
|
2247
|
+
builder[GENERATOR] = self;
|
|
2248
|
+
builder[STYLER] = _styler;
|
|
2249
|
+
builder[IS_EMPTY] = _isEmpty;
|
|
2250
|
+
return builder;
|
|
2251
|
+
};
|
|
2252
|
+
var applyStyle = (self, string) => {
|
|
2253
|
+
if (self.level <= 0 || !string) {
|
|
2254
|
+
return self[IS_EMPTY] ? "" : string;
|
|
2255
|
+
}
|
|
2256
|
+
let styler = self[STYLER];
|
|
2257
|
+
if (styler === void 0) {
|
|
2258
|
+
return string;
|
|
2259
|
+
}
|
|
2260
|
+
const { openAll, closeAll } = styler;
|
|
2261
|
+
if (string.includes("\x1B")) {
|
|
2262
|
+
while (styler !== void 0) {
|
|
2263
|
+
string = stringReplaceAll(string, styler.close, styler.open);
|
|
2264
|
+
styler = styler.parent;
|
|
2265
|
+
}
|
|
2266
|
+
}
|
|
2267
|
+
const lfIndex = string.indexOf("\n");
|
|
2268
|
+
if (lfIndex !== -1) {
|
|
2269
|
+
string = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);
|
|
2270
|
+
}
|
|
2271
|
+
return openAll + string + closeAll;
|
|
2272
|
+
};
|
|
2273
|
+
Object.defineProperties(createChalk.prototype, styles2);
|
|
2274
|
+
var chalk = createChalk();
|
|
2275
|
+
var chalkStderr = createChalk({ level: stderrColor ? stderrColor.level : 0 });
|
|
2276
|
+
var source_default = chalk;
|
|
2277
|
+
|
|
2278
|
+
// ../../node_modules/.pnpm/cli-cursor@5.0.0/node_modules/cli-cursor/index.js
|
|
2279
|
+
var import_node_process3 = __toESM(require("process"), 1);
|
|
2280
|
+
|
|
2281
|
+
// ../../node_modules/.pnpm/restore-cursor@5.1.0/node_modules/restore-cursor/index.js
|
|
2282
|
+
var import_node_process2 = __toESM(require("process"), 1);
|
|
2283
|
+
|
|
2284
|
+
// ../../node_modules/.pnpm/mimic-function@5.0.1/node_modules/mimic-function/index.js
|
|
2285
|
+
var copyProperty = (to, from, property, ignoreNonConfigurable) => {
|
|
2286
|
+
if (property === "length" || property === "prototype") {
|
|
2287
|
+
return;
|
|
2288
|
+
}
|
|
2289
|
+
if (property === "arguments" || property === "caller") {
|
|
2290
|
+
return;
|
|
2291
|
+
}
|
|
2292
|
+
const toDescriptor = Object.getOwnPropertyDescriptor(to, property);
|
|
2293
|
+
const fromDescriptor = Object.getOwnPropertyDescriptor(from, property);
|
|
2294
|
+
if (!canCopyProperty(toDescriptor, fromDescriptor) && ignoreNonConfigurable) {
|
|
2295
|
+
return;
|
|
2296
|
+
}
|
|
2297
|
+
Object.defineProperty(to, property, fromDescriptor);
|
|
2298
|
+
};
|
|
2299
|
+
var canCopyProperty = function(toDescriptor, fromDescriptor) {
|
|
2300
|
+
return toDescriptor === void 0 || toDescriptor.configurable || toDescriptor.writable === fromDescriptor.writable && toDescriptor.enumerable === fromDescriptor.enumerable && toDescriptor.configurable === fromDescriptor.configurable && (toDescriptor.writable || toDescriptor.value === fromDescriptor.value);
|
|
2301
|
+
};
|
|
2302
|
+
var changePrototype = (to, from) => {
|
|
2303
|
+
const fromPrototype = Object.getPrototypeOf(from);
|
|
2304
|
+
if (fromPrototype === Object.getPrototypeOf(to)) {
|
|
2305
|
+
return;
|
|
2306
|
+
}
|
|
2307
|
+
Object.setPrototypeOf(to, fromPrototype);
|
|
2308
|
+
};
|
|
2309
|
+
var wrappedToString = (withName, fromBody) => `/* Wrapped ${withName}*/
|
|
2310
|
+
${fromBody}`;
|
|
2311
|
+
var toStringDescriptor = Object.getOwnPropertyDescriptor(Function.prototype, "toString");
|
|
2312
|
+
var toStringName = Object.getOwnPropertyDescriptor(Function.prototype.toString, "name");
|
|
2313
|
+
var changeToString = (to, from, name) => {
|
|
2314
|
+
const withName = name === "" ? "" : `with ${name.trim()}() `;
|
|
2315
|
+
const newToString = wrappedToString.bind(null, withName, from.toString());
|
|
2316
|
+
Object.defineProperty(newToString, "name", toStringName);
|
|
2317
|
+
const { writable, enumerable, configurable } = toStringDescriptor;
|
|
2318
|
+
Object.defineProperty(to, "toString", { value: newToString, writable, enumerable, configurable });
|
|
2319
|
+
};
|
|
2320
|
+
function mimicFunction(to, from, { ignoreNonConfigurable = false } = {}) {
|
|
2321
|
+
const { name } = to;
|
|
2322
|
+
for (const property of Reflect.ownKeys(from)) {
|
|
2323
|
+
copyProperty(to, from, property, ignoreNonConfigurable);
|
|
2324
|
+
}
|
|
2325
|
+
changePrototype(to, from);
|
|
2326
|
+
changeToString(to, from, name);
|
|
2327
|
+
return to;
|
|
2328
|
+
}
|
|
2329
|
+
|
|
2330
|
+
// ../../node_modules/.pnpm/onetime@7.0.0/node_modules/onetime/index.js
|
|
2331
|
+
var calledFunctions = /* @__PURE__ */ new WeakMap();
|
|
2332
|
+
var onetime = (function_, options = {}) => {
|
|
2333
|
+
if (typeof function_ !== "function") {
|
|
2334
|
+
throw new TypeError("Expected a function");
|
|
2335
|
+
}
|
|
2336
|
+
let returnValue;
|
|
2337
|
+
let callCount = 0;
|
|
2338
|
+
const functionName = function_.displayName || function_.name || "<anonymous>";
|
|
2339
|
+
const onetime2 = function(...arguments_) {
|
|
2340
|
+
calledFunctions.set(onetime2, ++callCount);
|
|
2341
|
+
if (callCount === 1) {
|
|
2342
|
+
returnValue = function_.apply(this, arguments_);
|
|
2343
|
+
function_ = void 0;
|
|
2344
|
+
} else if (options.throw === true) {
|
|
2345
|
+
throw new Error(`Function \`${functionName}\` can only be called once`);
|
|
2346
|
+
}
|
|
2347
|
+
return returnValue;
|
|
2348
|
+
};
|
|
2349
|
+
mimicFunction(onetime2, function_);
|
|
2350
|
+
calledFunctions.set(onetime2, callCount);
|
|
2351
|
+
return onetime2;
|
|
2352
|
+
};
|
|
2353
|
+
onetime.callCount = (function_) => {
|
|
2354
|
+
if (!calledFunctions.has(function_)) {
|
|
2355
|
+
throw new Error(`The given function \`${function_.name}\` is not wrapped by the \`onetime\` package`);
|
|
2356
|
+
}
|
|
2357
|
+
return calledFunctions.get(function_);
|
|
2358
|
+
};
|
|
2359
|
+
var onetime_default = onetime;
|
|
2360
|
+
|
|
2361
|
+
// ../../node_modules/.pnpm/signal-exit@4.1.0/node_modules/signal-exit/dist/mjs/signals.js
|
|
2362
|
+
var signals = [];
|
|
2363
|
+
signals.push("SIGHUP", "SIGINT", "SIGTERM");
|
|
2364
|
+
if (process.platform !== "win32") {
|
|
2365
|
+
signals.push(
|
|
2366
|
+
"SIGALRM",
|
|
2367
|
+
"SIGABRT",
|
|
2368
|
+
"SIGVTALRM",
|
|
2369
|
+
"SIGXCPU",
|
|
2370
|
+
"SIGXFSZ",
|
|
2371
|
+
"SIGUSR2",
|
|
2372
|
+
"SIGTRAP",
|
|
2373
|
+
"SIGSYS",
|
|
2374
|
+
"SIGQUIT",
|
|
2375
|
+
"SIGIOT"
|
|
2376
|
+
// should detect profiler and enable/disable accordingly.
|
|
2377
|
+
// see #21
|
|
2378
|
+
// 'SIGPROF'
|
|
2379
|
+
);
|
|
2380
|
+
}
|
|
2381
|
+
if (process.platform === "linux") {
|
|
2382
|
+
signals.push("SIGIO", "SIGPOLL", "SIGPWR", "SIGSTKFLT");
|
|
2383
|
+
}
|
|
2384
|
+
|
|
2385
|
+
// ../../node_modules/.pnpm/signal-exit@4.1.0/node_modules/signal-exit/dist/mjs/index.js
|
|
2386
|
+
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";
|
|
2387
|
+
var kExitEmitter = Symbol.for("signal-exit emitter");
|
|
2388
|
+
var global = globalThis;
|
|
2389
|
+
var ObjectDefineProperty = Object.defineProperty.bind(Object);
|
|
2390
|
+
var Emitter = class {
|
|
2391
|
+
emitted = {
|
|
2392
|
+
afterExit: false,
|
|
2393
|
+
exit: false
|
|
2394
|
+
};
|
|
2395
|
+
listeners = {
|
|
2396
|
+
afterExit: [],
|
|
2397
|
+
exit: []
|
|
2398
|
+
};
|
|
2399
|
+
count = 0;
|
|
2400
|
+
id = Math.random();
|
|
2401
|
+
constructor() {
|
|
2402
|
+
if (global[kExitEmitter]) {
|
|
2403
|
+
return global[kExitEmitter];
|
|
2404
|
+
}
|
|
2405
|
+
ObjectDefineProperty(global, kExitEmitter, {
|
|
2406
|
+
value: this,
|
|
2407
|
+
writable: false,
|
|
2408
|
+
enumerable: false,
|
|
2409
|
+
configurable: false
|
|
2410
|
+
});
|
|
2411
|
+
}
|
|
2412
|
+
on(ev, fn) {
|
|
2413
|
+
this.listeners[ev].push(fn);
|
|
2414
|
+
}
|
|
2415
|
+
removeListener(ev, fn) {
|
|
2416
|
+
const list = this.listeners[ev];
|
|
2417
|
+
const i = list.indexOf(fn);
|
|
2418
|
+
if (i === -1) {
|
|
2419
|
+
return;
|
|
2420
|
+
}
|
|
2421
|
+
if (i === 0 && list.length === 1) {
|
|
2422
|
+
list.length = 0;
|
|
2423
|
+
} else {
|
|
2424
|
+
list.splice(i, 1);
|
|
2425
|
+
}
|
|
2426
|
+
}
|
|
2427
|
+
emit(ev, code, signal) {
|
|
2428
|
+
if (this.emitted[ev]) {
|
|
2429
|
+
return false;
|
|
2430
|
+
}
|
|
2431
|
+
this.emitted[ev] = true;
|
|
2432
|
+
let ret = false;
|
|
2433
|
+
for (const fn of this.listeners[ev]) {
|
|
2434
|
+
ret = fn(code, signal) === true || ret;
|
|
2435
|
+
}
|
|
2436
|
+
if (ev === "exit") {
|
|
2437
|
+
ret = this.emit("afterExit", code, signal) || ret;
|
|
2438
|
+
}
|
|
2439
|
+
return ret;
|
|
2440
|
+
}
|
|
2441
|
+
};
|
|
2442
|
+
var SignalExitBase = class {
|
|
2443
|
+
};
|
|
2444
|
+
var signalExitWrap = (handler) => {
|
|
2445
|
+
return {
|
|
2446
|
+
onExit(cb, opts) {
|
|
2447
|
+
return handler.onExit(cb, opts);
|
|
2448
|
+
},
|
|
2449
|
+
load() {
|
|
2450
|
+
return handler.load();
|
|
2451
|
+
},
|
|
2452
|
+
unload() {
|
|
2453
|
+
return handler.unload();
|
|
2454
|
+
}
|
|
2455
|
+
};
|
|
2456
|
+
};
|
|
2457
|
+
var SignalExitFallback = class extends SignalExitBase {
|
|
2458
|
+
onExit() {
|
|
2459
|
+
return () => {
|
|
2460
|
+
};
|
|
2461
|
+
}
|
|
2462
|
+
load() {
|
|
2463
|
+
}
|
|
2464
|
+
unload() {
|
|
2465
|
+
}
|
|
2466
|
+
};
|
|
2467
|
+
var SignalExit = class extends SignalExitBase {
|
|
2468
|
+
// "SIGHUP" throws an `ENOSYS` error on Windows,
|
|
2469
|
+
// so use a supported signal instead
|
|
2470
|
+
/* c8 ignore start */
|
|
2471
|
+
#hupSig = process3.platform === "win32" ? "SIGINT" : "SIGHUP";
|
|
2472
|
+
/* c8 ignore stop */
|
|
2473
|
+
#emitter = new Emitter();
|
|
2474
|
+
#process;
|
|
2475
|
+
#originalProcessEmit;
|
|
2476
|
+
#originalProcessReallyExit;
|
|
2477
|
+
#sigListeners = {};
|
|
2478
|
+
#loaded = false;
|
|
2479
|
+
constructor(process10) {
|
|
2480
|
+
super();
|
|
2481
|
+
this.#process = process10;
|
|
2482
|
+
this.#sigListeners = {};
|
|
2483
|
+
for (const sig of signals) {
|
|
2484
|
+
this.#sigListeners[sig] = () => {
|
|
2485
|
+
const listeners = this.#process.listeners(sig);
|
|
2486
|
+
let { count } = this.#emitter;
|
|
2487
|
+
const p = process10;
|
|
2488
|
+
if (typeof p.__signal_exit_emitter__ === "object" && typeof p.__signal_exit_emitter__.count === "number") {
|
|
2489
|
+
count += p.__signal_exit_emitter__.count;
|
|
2490
|
+
}
|
|
2491
|
+
if (listeners.length === count) {
|
|
2492
|
+
this.unload();
|
|
2493
|
+
const ret = this.#emitter.emit("exit", null, sig);
|
|
2494
|
+
const s = sig === "SIGHUP" ? this.#hupSig : sig;
|
|
2495
|
+
if (!ret)
|
|
2496
|
+
process10.kill(process10.pid, s);
|
|
2497
|
+
}
|
|
2498
|
+
};
|
|
2499
|
+
}
|
|
2500
|
+
this.#originalProcessReallyExit = process10.reallyExit;
|
|
2501
|
+
this.#originalProcessEmit = process10.emit;
|
|
2502
|
+
}
|
|
2503
|
+
onExit(cb, opts) {
|
|
2504
|
+
if (!processOk(this.#process)) {
|
|
2505
|
+
return () => {
|
|
2506
|
+
};
|
|
2507
|
+
}
|
|
2508
|
+
if (this.#loaded === false) {
|
|
2509
|
+
this.load();
|
|
2510
|
+
}
|
|
2511
|
+
const ev = opts?.alwaysLast ? "afterExit" : "exit";
|
|
2512
|
+
this.#emitter.on(ev, cb);
|
|
2513
|
+
return () => {
|
|
2514
|
+
this.#emitter.removeListener(ev, cb);
|
|
2515
|
+
if (this.#emitter.listeners["exit"].length === 0 && this.#emitter.listeners["afterExit"].length === 0) {
|
|
2516
|
+
this.unload();
|
|
2517
|
+
}
|
|
2518
|
+
};
|
|
2519
|
+
}
|
|
2520
|
+
load() {
|
|
2521
|
+
if (this.#loaded) {
|
|
2522
|
+
return;
|
|
2523
|
+
}
|
|
2524
|
+
this.#loaded = true;
|
|
2525
|
+
this.#emitter.count += 1;
|
|
2526
|
+
for (const sig of signals) {
|
|
2527
|
+
try {
|
|
2528
|
+
const fn = this.#sigListeners[sig];
|
|
2529
|
+
if (fn)
|
|
2530
|
+
this.#process.on(sig, fn);
|
|
2531
|
+
} catch (_) {
|
|
2532
|
+
}
|
|
2533
|
+
}
|
|
2534
|
+
this.#process.emit = (ev, ...a) => {
|
|
2535
|
+
return this.#processEmit(ev, ...a);
|
|
2536
|
+
};
|
|
2537
|
+
this.#process.reallyExit = (code) => {
|
|
2538
|
+
return this.#processReallyExit(code);
|
|
2539
|
+
};
|
|
2540
|
+
}
|
|
2541
|
+
unload() {
|
|
2542
|
+
if (!this.#loaded) {
|
|
2543
|
+
return;
|
|
2544
|
+
}
|
|
2545
|
+
this.#loaded = false;
|
|
2546
|
+
signals.forEach((sig) => {
|
|
2547
|
+
const listener = this.#sigListeners[sig];
|
|
2548
|
+
if (!listener) {
|
|
2549
|
+
throw new Error("Listener not defined for signal: " + sig);
|
|
2550
|
+
}
|
|
2551
|
+
try {
|
|
2552
|
+
this.#process.removeListener(sig, listener);
|
|
2553
|
+
} catch (_) {
|
|
2554
|
+
}
|
|
2555
|
+
});
|
|
2556
|
+
this.#process.emit = this.#originalProcessEmit;
|
|
2557
|
+
this.#process.reallyExit = this.#originalProcessReallyExit;
|
|
2558
|
+
this.#emitter.count -= 1;
|
|
2559
|
+
}
|
|
2560
|
+
#processReallyExit(code) {
|
|
2561
|
+
if (!processOk(this.#process)) {
|
|
2562
|
+
return 0;
|
|
2563
|
+
}
|
|
2564
|
+
this.#process.exitCode = code || 0;
|
|
2565
|
+
this.#emitter.emit("exit", this.#process.exitCode, null);
|
|
2566
|
+
return this.#originalProcessReallyExit.call(this.#process, this.#process.exitCode);
|
|
2567
|
+
}
|
|
2568
|
+
#processEmit(ev, ...args) {
|
|
2569
|
+
const og = this.#originalProcessEmit;
|
|
2570
|
+
if (ev === "exit" && processOk(this.#process)) {
|
|
2571
|
+
if (typeof args[0] === "number") {
|
|
2572
|
+
this.#process.exitCode = args[0];
|
|
2573
|
+
}
|
|
2574
|
+
const ret = og.call(this.#process, ev, ...args);
|
|
2575
|
+
this.#emitter.emit("exit", this.#process.exitCode, null);
|
|
2576
|
+
return ret;
|
|
2577
|
+
} else {
|
|
2578
|
+
return og.call(this.#process, ev, ...args);
|
|
2579
|
+
}
|
|
2580
|
+
}
|
|
2581
|
+
};
|
|
2582
|
+
var process3 = globalThis.process;
|
|
2583
|
+
var {
|
|
2584
|
+
/**
|
|
2585
|
+
* Called when the process is exiting, whether via signal, explicit
|
|
2586
|
+
* exit, or running out of stuff to do.
|
|
2587
|
+
*
|
|
2588
|
+
* If the global process object is not suitable for instrumentation,
|
|
2589
|
+
* then this will be a no-op.
|
|
2590
|
+
*
|
|
2591
|
+
* Returns a function that may be used to unload signal-exit.
|
|
2592
|
+
*/
|
|
2593
|
+
onExit,
|
|
2594
|
+
/**
|
|
2595
|
+
* Load the listeners. Likely you never need to call this, unless
|
|
2596
|
+
* doing a rather deep integration with signal-exit functionality.
|
|
2597
|
+
* Mostly exposed for the benefit of testing.
|
|
2598
|
+
*
|
|
2599
|
+
* @internal
|
|
2600
|
+
*/
|
|
2601
|
+
load,
|
|
2602
|
+
/**
|
|
2603
|
+
* Unload the listeners. Likely you never need to call this, unless
|
|
2604
|
+
* doing a rather deep integration with signal-exit functionality.
|
|
2605
|
+
* Mostly exposed for the benefit of testing.
|
|
2606
|
+
*
|
|
2607
|
+
* @internal
|
|
2608
|
+
*/
|
|
2609
|
+
unload
|
|
2610
|
+
} = signalExitWrap(processOk(process3) ? new SignalExit(process3) : new SignalExitFallback());
|
|
2611
|
+
|
|
2612
|
+
// ../../node_modules/.pnpm/restore-cursor@5.1.0/node_modules/restore-cursor/index.js
|
|
2613
|
+
var terminal = import_node_process2.default.stderr.isTTY ? import_node_process2.default.stderr : import_node_process2.default.stdout.isTTY ? import_node_process2.default.stdout : void 0;
|
|
2614
|
+
var restoreCursor = terminal ? onetime_default(() => {
|
|
2615
|
+
onExit(() => {
|
|
2616
|
+
terminal.write("\x1B[?25h");
|
|
2617
|
+
}, { alwaysLast: true });
|
|
2618
|
+
}) : () => {
|
|
2619
|
+
};
|
|
2620
|
+
var restore_cursor_default = restoreCursor;
|
|
2621
|
+
|
|
2622
|
+
// ../../node_modules/.pnpm/cli-cursor@5.0.0/node_modules/cli-cursor/index.js
|
|
2623
|
+
var isHidden = false;
|
|
2624
|
+
var cliCursor = {};
|
|
2625
|
+
cliCursor.show = (writableStream = import_node_process3.default.stderr) => {
|
|
2626
|
+
if (!writableStream.isTTY) {
|
|
2627
|
+
return;
|
|
2628
|
+
}
|
|
2629
|
+
isHidden = false;
|
|
2630
|
+
writableStream.write("\x1B[?25h");
|
|
2631
|
+
};
|
|
2632
|
+
cliCursor.hide = (writableStream = import_node_process3.default.stderr) => {
|
|
2633
|
+
if (!writableStream.isTTY) {
|
|
2634
|
+
return;
|
|
2635
|
+
}
|
|
2636
|
+
restore_cursor_default();
|
|
2637
|
+
isHidden = true;
|
|
2638
|
+
writableStream.write("\x1B[?25l");
|
|
2639
|
+
};
|
|
2640
|
+
cliCursor.toggle = (force, writableStream) => {
|
|
2641
|
+
if (force !== void 0) {
|
|
2642
|
+
isHidden = force;
|
|
2643
|
+
}
|
|
2644
|
+
if (isHidden) {
|
|
2645
|
+
cliCursor.show(writableStream);
|
|
2646
|
+
} else {
|
|
2647
|
+
cliCursor.hide(writableStream);
|
|
2648
|
+
}
|
|
2649
|
+
};
|
|
2650
|
+
var cli_cursor_default = cliCursor;
|
|
2651
|
+
|
|
2652
|
+
// ../../node_modules/.pnpm/ora@8.2.0/node_modules/ora/index.js
|
|
2653
|
+
var import_cli_spinners = __toESM(require_cli_spinners(), 1);
|
|
2654
|
+
|
|
2655
|
+
// ../../node_modules/.pnpm/is-unicode-supported@1.3.0/node_modules/is-unicode-supported/index.js
|
|
2656
|
+
var import_node_process4 = __toESM(require("process"), 1);
|
|
2657
|
+
function isUnicodeSupported() {
|
|
2658
|
+
if (import_node_process4.default.platform !== "win32") {
|
|
2659
|
+
return import_node_process4.default.env.TERM !== "linux";
|
|
2660
|
+
}
|
|
2661
|
+
return Boolean(import_node_process4.default.env.CI) || Boolean(import_node_process4.default.env.WT_SESSION) || Boolean(import_node_process4.default.env.TERMINUS_SUBLIME) || import_node_process4.default.env.ConEmuTask === "{cmd::Cmder}" || import_node_process4.default.env.TERM_PROGRAM === "Terminus-Sublime" || import_node_process4.default.env.TERM_PROGRAM === "vscode" || import_node_process4.default.env.TERM === "xterm-256color" || import_node_process4.default.env.TERM === "alacritty" || import_node_process4.default.env.TERMINAL_EMULATOR === "JetBrains-JediTerm";
|
|
2662
|
+
}
|
|
2663
|
+
|
|
2664
|
+
// ../../node_modules/.pnpm/log-symbols@6.0.0/node_modules/log-symbols/index.js
|
|
2665
|
+
var main = {
|
|
2666
|
+
info: source_default.blue("\u2139"),
|
|
2667
|
+
success: source_default.green("\u2714"),
|
|
2668
|
+
warning: source_default.yellow("\u26A0"),
|
|
2669
|
+
error: source_default.red("\u2716")
|
|
2670
|
+
};
|
|
2671
|
+
var fallback = {
|
|
2672
|
+
info: source_default.blue("i"),
|
|
2673
|
+
success: source_default.green("\u221A"),
|
|
2674
|
+
warning: source_default.yellow("\u203C"),
|
|
2675
|
+
error: source_default.red("\xD7")
|
|
2676
|
+
};
|
|
2677
|
+
var logSymbols = isUnicodeSupported() ? main : fallback;
|
|
2678
|
+
var log_symbols_default = logSymbols;
|
|
2679
|
+
|
|
2680
|
+
// ../../node_modules/.pnpm/ansi-regex@6.2.2/node_modules/ansi-regex/index.js
|
|
2681
|
+
function ansiRegex({ onlyFirst = false } = {}) {
|
|
2682
|
+
const ST = "(?:\\u0007|\\u001B\\u005C|\\u009C)";
|
|
2683
|
+
const osc = `(?:\\u001B\\][\\s\\S]*?${ST})`;
|
|
2684
|
+
const csi = "[\\u001B\\u009B][[\\]()#;?]*(?:\\d{1,4}(?:[;:]\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]";
|
|
2685
|
+
const pattern = `${osc}|${csi}`;
|
|
2686
|
+
return new RegExp(pattern, onlyFirst ? void 0 : "g");
|
|
2687
|
+
}
|
|
2688
|
+
|
|
2689
|
+
// ../../node_modules/.pnpm/strip-ansi@7.1.2/node_modules/strip-ansi/index.js
|
|
2690
|
+
var regex = ansiRegex();
|
|
2691
|
+
function stripAnsi(string) {
|
|
2692
|
+
if (typeof string !== "string") {
|
|
2693
|
+
throw new TypeError(`Expected a \`string\`, got \`${typeof string}\``);
|
|
2694
|
+
}
|
|
2695
|
+
return string.replace(regex, "");
|
|
2696
|
+
}
|
|
2697
|
+
|
|
2698
|
+
// ../../node_modules/.pnpm/get-east-asian-width@1.4.0/node_modules/get-east-asian-width/lookup.js
|
|
2699
|
+
function isAmbiguous(x) {
|
|
2700
|
+
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;
|
|
2701
|
+
}
|
|
2702
|
+
function isFullWidth(x) {
|
|
2703
|
+
return x === 12288 || x >= 65281 && x <= 65376 || x >= 65504 && x <= 65510;
|
|
2704
|
+
}
|
|
2705
|
+
function isWide(x) {
|
|
2706
|
+
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;
|
|
2707
|
+
}
|
|
2708
|
+
|
|
2709
|
+
// ../../node_modules/.pnpm/get-east-asian-width@1.4.0/node_modules/get-east-asian-width/index.js
|
|
2710
|
+
function validate(codePoint) {
|
|
2711
|
+
if (!Number.isSafeInteger(codePoint)) {
|
|
2712
|
+
throw new TypeError(`Expected a code point, got \`${typeof codePoint}\`.`);
|
|
2713
|
+
}
|
|
2714
|
+
}
|
|
2715
|
+
function eastAsianWidth(codePoint, { ambiguousAsWide = false } = {}) {
|
|
2716
|
+
validate(codePoint);
|
|
2717
|
+
if (isFullWidth(codePoint) || isWide(codePoint) || ambiguousAsWide && isAmbiguous(codePoint)) {
|
|
2718
|
+
return 2;
|
|
2719
|
+
}
|
|
2720
|
+
return 1;
|
|
2721
|
+
}
|
|
2722
|
+
|
|
2723
|
+
// ../../node_modules/.pnpm/emoji-regex@10.6.0/node_modules/emoji-regex/index.mjs
|
|
2724
|
+
var emoji_regex_default = () => {
|
|
2725
|
+
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;
|
|
2726
|
+
};
|
|
2727
|
+
|
|
2728
|
+
// ../../node_modules/.pnpm/string-width@7.2.0/node_modules/string-width/index.js
|
|
2729
|
+
var segmenter = new Intl.Segmenter();
|
|
2730
|
+
var defaultIgnorableCodePointRegex = new RegExp("^\\p{Default_Ignorable_Code_Point}$", "u");
|
|
2731
|
+
function stringWidth(string, options = {}) {
|
|
2732
|
+
if (typeof string !== "string" || string.length === 0) {
|
|
2733
|
+
return 0;
|
|
2734
|
+
}
|
|
2735
|
+
const {
|
|
2736
|
+
ambiguousIsNarrow = true,
|
|
2737
|
+
countAnsiEscapeCodes = false
|
|
2738
|
+
} = options;
|
|
2739
|
+
if (!countAnsiEscapeCodes) {
|
|
2740
|
+
string = stripAnsi(string);
|
|
2741
|
+
}
|
|
2742
|
+
if (string.length === 0) {
|
|
2743
|
+
return 0;
|
|
2744
|
+
}
|
|
2745
|
+
let width = 0;
|
|
2746
|
+
const eastAsianWidthOptions = { ambiguousAsWide: !ambiguousIsNarrow };
|
|
2747
|
+
for (const { segment: character } of segmenter.segment(string)) {
|
|
2748
|
+
const codePoint = character.codePointAt(0);
|
|
2749
|
+
if (codePoint <= 31 || codePoint >= 127 && codePoint <= 159) {
|
|
2750
|
+
continue;
|
|
2751
|
+
}
|
|
2752
|
+
if (codePoint >= 8203 && codePoint <= 8207 || codePoint === 65279) {
|
|
2753
|
+
continue;
|
|
2754
|
+
}
|
|
2755
|
+
if (codePoint >= 768 && codePoint <= 879 || codePoint >= 6832 && codePoint <= 6911 || codePoint >= 7616 && codePoint <= 7679 || codePoint >= 8400 && codePoint <= 8447 || codePoint >= 65056 && codePoint <= 65071) {
|
|
2756
|
+
continue;
|
|
2757
|
+
}
|
|
2758
|
+
if (codePoint >= 55296 && codePoint <= 57343) {
|
|
2759
|
+
continue;
|
|
2760
|
+
}
|
|
2761
|
+
if (codePoint >= 65024 && codePoint <= 65039) {
|
|
2762
|
+
continue;
|
|
2763
|
+
}
|
|
2764
|
+
if (defaultIgnorableCodePointRegex.test(character)) {
|
|
2765
|
+
continue;
|
|
2766
|
+
}
|
|
2767
|
+
if (emoji_regex_default().test(character)) {
|
|
2768
|
+
width += 2;
|
|
2769
|
+
continue;
|
|
2770
|
+
}
|
|
2771
|
+
width += eastAsianWidth(codePoint, eastAsianWidthOptions);
|
|
2772
|
+
}
|
|
2773
|
+
return width;
|
|
2774
|
+
}
|
|
2775
|
+
|
|
2776
|
+
// ../../node_modules/.pnpm/is-interactive@2.0.0/node_modules/is-interactive/index.js
|
|
2777
|
+
function isInteractive({ stream = process.stdout } = {}) {
|
|
2778
|
+
return Boolean(
|
|
2779
|
+
stream && stream.isTTY && process.env.TERM !== "dumb" && !("CI" in process.env)
|
|
2780
|
+
);
|
|
2781
|
+
}
|
|
2782
|
+
|
|
2783
|
+
// ../../node_modules/.pnpm/is-unicode-supported@2.1.0/node_modules/is-unicode-supported/index.js
|
|
2784
|
+
var import_node_process5 = __toESM(require("process"), 1);
|
|
2785
|
+
function isUnicodeSupported2() {
|
|
2786
|
+
const { env: env2 } = import_node_process5.default;
|
|
2787
|
+
const { TERM, TERM_PROGRAM } = env2;
|
|
2788
|
+
if (import_node_process5.default.platform !== "win32") {
|
|
2789
|
+
return TERM !== "linux";
|
|
2790
|
+
}
|
|
2791
|
+
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";
|
|
2792
|
+
}
|
|
2793
|
+
|
|
2794
|
+
// ../../node_modules/.pnpm/stdin-discarder@0.2.2/node_modules/stdin-discarder/index.js
|
|
2795
|
+
var import_node_process6 = __toESM(require("process"), 1);
|
|
2796
|
+
var ASCII_ETX_CODE = 3;
|
|
2797
|
+
var StdinDiscarder = class {
|
|
2798
|
+
#activeCount = 0;
|
|
2799
|
+
start() {
|
|
2800
|
+
this.#activeCount++;
|
|
2801
|
+
if (this.#activeCount === 1) {
|
|
2802
|
+
this.#realStart();
|
|
2803
|
+
}
|
|
2804
|
+
}
|
|
2805
|
+
stop() {
|
|
2806
|
+
if (this.#activeCount <= 0) {
|
|
2807
|
+
throw new Error("`stop` called more times than `start`");
|
|
2808
|
+
}
|
|
2809
|
+
this.#activeCount--;
|
|
2810
|
+
if (this.#activeCount === 0) {
|
|
2811
|
+
this.#realStop();
|
|
2812
|
+
}
|
|
2813
|
+
}
|
|
2814
|
+
#realStart() {
|
|
2815
|
+
if (import_node_process6.default.platform === "win32" || !import_node_process6.default.stdin.isTTY) {
|
|
2816
|
+
return;
|
|
2817
|
+
}
|
|
2818
|
+
import_node_process6.default.stdin.setRawMode(true);
|
|
2819
|
+
import_node_process6.default.stdin.on("data", this.#handleInput);
|
|
2820
|
+
import_node_process6.default.stdin.resume();
|
|
2821
|
+
}
|
|
2822
|
+
#realStop() {
|
|
2823
|
+
if (!import_node_process6.default.stdin.isTTY) {
|
|
2824
|
+
return;
|
|
2825
|
+
}
|
|
2826
|
+
import_node_process6.default.stdin.off("data", this.#handleInput);
|
|
2827
|
+
import_node_process6.default.stdin.pause();
|
|
2828
|
+
import_node_process6.default.stdin.setRawMode(false);
|
|
2829
|
+
}
|
|
2830
|
+
#handleInput(chunk) {
|
|
2831
|
+
if (chunk[0] === ASCII_ETX_CODE) {
|
|
2832
|
+
import_node_process6.default.emit("SIGINT");
|
|
2833
|
+
}
|
|
2834
|
+
}
|
|
2835
|
+
};
|
|
2836
|
+
var stdinDiscarder = new StdinDiscarder();
|
|
2837
|
+
var stdin_discarder_default = stdinDiscarder;
|
|
2838
|
+
|
|
2839
|
+
// ../../node_modules/.pnpm/ora@8.2.0/node_modules/ora/index.js
|
|
2840
|
+
var import_cli_spinners2 = __toESM(require_cli_spinners(), 1);
|
|
2841
|
+
var Ora = class {
|
|
2842
|
+
#linesToClear = 0;
|
|
2843
|
+
#isDiscardingStdin = false;
|
|
2844
|
+
#lineCount = 0;
|
|
2845
|
+
#frameIndex = -1;
|
|
2846
|
+
#lastSpinnerFrameTime = 0;
|
|
2847
|
+
#options;
|
|
2848
|
+
#spinner;
|
|
2849
|
+
#stream;
|
|
2850
|
+
#id;
|
|
2851
|
+
#initialInterval;
|
|
2852
|
+
#isEnabled;
|
|
2853
|
+
#isSilent;
|
|
2854
|
+
#indent;
|
|
2855
|
+
#text;
|
|
2856
|
+
#prefixText;
|
|
2857
|
+
#suffixText;
|
|
2858
|
+
color;
|
|
2859
|
+
constructor(options) {
|
|
2860
|
+
if (typeof options === "string") {
|
|
2861
|
+
options = {
|
|
2862
|
+
text: options
|
|
2863
|
+
};
|
|
2864
|
+
}
|
|
2865
|
+
this.#options = {
|
|
2866
|
+
color: "cyan",
|
|
2867
|
+
stream: import_node_process7.default.stderr,
|
|
2868
|
+
discardStdin: true,
|
|
2869
|
+
hideCursor: true,
|
|
2870
|
+
...options
|
|
2871
|
+
};
|
|
2872
|
+
this.color = this.#options.color;
|
|
2873
|
+
this.spinner = this.#options.spinner;
|
|
2874
|
+
this.#initialInterval = this.#options.interval;
|
|
2875
|
+
this.#stream = this.#options.stream;
|
|
2876
|
+
this.#isEnabled = typeof this.#options.isEnabled === "boolean" ? this.#options.isEnabled : isInteractive({ stream: this.#stream });
|
|
2877
|
+
this.#isSilent = typeof this.#options.isSilent === "boolean" ? this.#options.isSilent : false;
|
|
2878
|
+
this.text = this.#options.text;
|
|
2879
|
+
this.prefixText = this.#options.prefixText;
|
|
2880
|
+
this.suffixText = this.#options.suffixText;
|
|
2881
|
+
this.indent = this.#options.indent;
|
|
2882
|
+
if (import_node_process7.default.env.NODE_ENV === "test") {
|
|
2883
|
+
this._stream = this.#stream;
|
|
2884
|
+
this._isEnabled = this.#isEnabled;
|
|
2885
|
+
Object.defineProperty(this, "_linesToClear", {
|
|
2886
|
+
get() {
|
|
2887
|
+
return this.#linesToClear;
|
|
2888
|
+
},
|
|
2889
|
+
set(newValue) {
|
|
2890
|
+
this.#linesToClear = newValue;
|
|
2891
|
+
}
|
|
2892
|
+
});
|
|
2893
|
+
Object.defineProperty(this, "_frameIndex", {
|
|
2894
|
+
get() {
|
|
2895
|
+
return this.#frameIndex;
|
|
2896
|
+
}
|
|
2897
|
+
});
|
|
2898
|
+
Object.defineProperty(this, "_lineCount", {
|
|
2899
|
+
get() {
|
|
2900
|
+
return this.#lineCount;
|
|
2901
|
+
}
|
|
2902
|
+
});
|
|
2903
|
+
}
|
|
2904
|
+
}
|
|
2905
|
+
get indent() {
|
|
2906
|
+
return this.#indent;
|
|
2907
|
+
}
|
|
2908
|
+
set indent(indent = 0) {
|
|
2909
|
+
if (!(indent >= 0 && Number.isInteger(indent))) {
|
|
2910
|
+
throw new Error("The `indent` option must be an integer from 0 and up");
|
|
2911
|
+
}
|
|
2912
|
+
this.#indent = indent;
|
|
2913
|
+
this.#updateLineCount();
|
|
2914
|
+
}
|
|
2915
|
+
get interval() {
|
|
2916
|
+
return this.#initialInterval ?? this.#spinner.interval ?? 100;
|
|
2917
|
+
}
|
|
2918
|
+
get spinner() {
|
|
2919
|
+
return this.#spinner;
|
|
2920
|
+
}
|
|
2921
|
+
set spinner(spinner) {
|
|
2922
|
+
this.#frameIndex = -1;
|
|
2923
|
+
this.#initialInterval = void 0;
|
|
2924
|
+
if (typeof spinner === "object") {
|
|
2925
|
+
if (spinner.frames === void 0) {
|
|
2926
|
+
throw new Error("The given spinner must have a `frames` property");
|
|
2927
|
+
}
|
|
2928
|
+
this.#spinner = spinner;
|
|
2929
|
+
} else if (!isUnicodeSupported2()) {
|
|
2930
|
+
this.#spinner = import_cli_spinners.default.line;
|
|
2931
|
+
} else if (spinner === void 0) {
|
|
2932
|
+
this.#spinner = import_cli_spinners.default.dots;
|
|
2933
|
+
} else if (spinner !== "default" && import_cli_spinners.default[spinner]) {
|
|
2934
|
+
this.#spinner = import_cli_spinners.default[spinner];
|
|
2935
|
+
} else {
|
|
2936
|
+
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.`);
|
|
2937
|
+
}
|
|
2938
|
+
}
|
|
2939
|
+
get text() {
|
|
2940
|
+
return this.#text;
|
|
2941
|
+
}
|
|
2942
|
+
set text(value = "") {
|
|
2943
|
+
this.#text = value;
|
|
2944
|
+
this.#updateLineCount();
|
|
2945
|
+
}
|
|
2946
|
+
get prefixText() {
|
|
2947
|
+
return this.#prefixText;
|
|
2948
|
+
}
|
|
2949
|
+
set prefixText(value = "") {
|
|
2950
|
+
this.#prefixText = value;
|
|
2951
|
+
this.#updateLineCount();
|
|
2952
|
+
}
|
|
2953
|
+
get suffixText() {
|
|
2954
|
+
return this.#suffixText;
|
|
2955
|
+
}
|
|
2956
|
+
set suffixText(value = "") {
|
|
2957
|
+
this.#suffixText = value;
|
|
2958
|
+
this.#updateLineCount();
|
|
2959
|
+
}
|
|
2960
|
+
get isSpinning() {
|
|
2961
|
+
return this.#id !== void 0;
|
|
2962
|
+
}
|
|
2963
|
+
#getFullPrefixText(prefixText = this.#prefixText, postfix = " ") {
|
|
2964
|
+
if (typeof prefixText === "string" && prefixText !== "") {
|
|
2965
|
+
return prefixText + postfix;
|
|
2966
|
+
}
|
|
2967
|
+
if (typeof prefixText === "function") {
|
|
2968
|
+
return prefixText() + postfix;
|
|
2969
|
+
}
|
|
2970
|
+
return "";
|
|
2971
|
+
}
|
|
2972
|
+
#getFullSuffixText(suffixText = this.#suffixText, prefix = " ") {
|
|
2973
|
+
if (typeof suffixText === "string" && suffixText !== "") {
|
|
2974
|
+
return prefix + suffixText;
|
|
2975
|
+
}
|
|
2976
|
+
if (typeof suffixText === "function") {
|
|
2977
|
+
return prefix + suffixText();
|
|
2978
|
+
}
|
|
2979
|
+
return "";
|
|
2980
|
+
}
|
|
2981
|
+
#updateLineCount() {
|
|
2982
|
+
const columns = this.#stream.columns ?? 80;
|
|
2983
|
+
const fullPrefixText = this.#getFullPrefixText(this.#prefixText, "-");
|
|
2984
|
+
const fullSuffixText = this.#getFullSuffixText(this.#suffixText, "-");
|
|
2985
|
+
const fullText = " ".repeat(this.#indent) + fullPrefixText + "--" + this.#text + "--" + fullSuffixText;
|
|
2986
|
+
this.#lineCount = 0;
|
|
2987
|
+
for (const line of stripAnsi(fullText).split("\n")) {
|
|
2988
|
+
this.#lineCount += Math.max(1, Math.ceil(stringWidth(line, { countAnsiEscapeCodes: true }) / columns));
|
|
2989
|
+
}
|
|
2990
|
+
}
|
|
2991
|
+
get isEnabled() {
|
|
2992
|
+
return this.#isEnabled && !this.#isSilent;
|
|
2993
|
+
}
|
|
2994
|
+
set isEnabled(value) {
|
|
2995
|
+
if (typeof value !== "boolean") {
|
|
2996
|
+
throw new TypeError("The `isEnabled` option must be a boolean");
|
|
2997
|
+
}
|
|
2998
|
+
this.#isEnabled = value;
|
|
2999
|
+
}
|
|
3000
|
+
get isSilent() {
|
|
3001
|
+
return this.#isSilent;
|
|
3002
|
+
}
|
|
3003
|
+
set isSilent(value) {
|
|
3004
|
+
if (typeof value !== "boolean") {
|
|
3005
|
+
throw new TypeError("The `isSilent` option must be a boolean");
|
|
3006
|
+
}
|
|
3007
|
+
this.#isSilent = value;
|
|
3008
|
+
}
|
|
3009
|
+
frame() {
|
|
3010
|
+
const now = Date.now();
|
|
3011
|
+
if (this.#frameIndex === -1 || now - this.#lastSpinnerFrameTime >= this.interval) {
|
|
3012
|
+
this.#frameIndex = ++this.#frameIndex % this.#spinner.frames.length;
|
|
3013
|
+
this.#lastSpinnerFrameTime = now;
|
|
3014
|
+
}
|
|
3015
|
+
const { frames } = this.#spinner;
|
|
3016
|
+
let frame = frames[this.#frameIndex];
|
|
3017
|
+
if (this.color) {
|
|
3018
|
+
frame = source_default[this.color](frame);
|
|
3019
|
+
}
|
|
3020
|
+
const fullPrefixText = typeof this.#prefixText === "string" && this.#prefixText !== "" ? this.#prefixText + " " : "";
|
|
3021
|
+
const fullText = typeof this.text === "string" ? " " + this.text : "";
|
|
3022
|
+
const fullSuffixText = typeof this.#suffixText === "string" && this.#suffixText !== "" ? " " + this.#suffixText : "";
|
|
3023
|
+
return fullPrefixText + frame + fullText + fullSuffixText;
|
|
3024
|
+
}
|
|
3025
|
+
clear() {
|
|
3026
|
+
if (!this.#isEnabled || !this.#stream.isTTY) {
|
|
3027
|
+
return this;
|
|
3028
|
+
}
|
|
3029
|
+
this.#stream.cursorTo(0);
|
|
3030
|
+
for (let index = 0; index < this.#linesToClear; index++) {
|
|
3031
|
+
if (index > 0) {
|
|
3032
|
+
this.#stream.moveCursor(0, -1);
|
|
3033
|
+
}
|
|
3034
|
+
this.#stream.clearLine(1);
|
|
3035
|
+
}
|
|
3036
|
+
if (this.#indent || this.lastIndent !== this.#indent) {
|
|
3037
|
+
this.#stream.cursorTo(this.#indent);
|
|
3038
|
+
}
|
|
3039
|
+
this.lastIndent = this.#indent;
|
|
3040
|
+
this.#linesToClear = 0;
|
|
3041
|
+
return this;
|
|
3042
|
+
}
|
|
3043
|
+
render() {
|
|
3044
|
+
if (this.#isSilent) {
|
|
3045
|
+
return this;
|
|
3046
|
+
}
|
|
3047
|
+
this.clear();
|
|
3048
|
+
this.#stream.write(this.frame());
|
|
3049
|
+
this.#linesToClear = this.#lineCount;
|
|
3050
|
+
return this;
|
|
3051
|
+
}
|
|
3052
|
+
start(text) {
|
|
3053
|
+
if (text) {
|
|
3054
|
+
this.text = text;
|
|
3055
|
+
}
|
|
3056
|
+
if (this.#isSilent) {
|
|
3057
|
+
return this;
|
|
3058
|
+
}
|
|
3059
|
+
if (!this.#isEnabled) {
|
|
3060
|
+
if (this.text) {
|
|
3061
|
+
this.#stream.write(`- ${this.text}
|
|
3062
|
+
`);
|
|
3063
|
+
}
|
|
3064
|
+
return this;
|
|
3065
|
+
}
|
|
3066
|
+
if (this.isSpinning) {
|
|
3067
|
+
return this;
|
|
3068
|
+
}
|
|
3069
|
+
if (this.#options.hideCursor) {
|
|
3070
|
+
cli_cursor_default.hide(this.#stream);
|
|
3071
|
+
}
|
|
3072
|
+
if (this.#options.discardStdin && import_node_process7.default.stdin.isTTY) {
|
|
3073
|
+
this.#isDiscardingStdin = true;
|
|
3074
|
+
stdin_discarder_default.start();
|
|
3075
|
+
}
|
|
3076
|
+
this.render();
|
|
3077
|
+
this.#id = setInterval(this.render.bind(this), this.interval);
|
|
3078
|
+
return this;
|
|
3079
|
+
}
|
|
3080
|
+
stop() {
|
|
3081
|
+
if (!this.#isEnabled) {
|
|
3082
|
+
return this;
|
|
3083
|
+
}
|
|
3084
|
+
clearInterval(this.#id);
|
|
3085
|
+
this.#id = void 0;
|
|
3086
|
+
this.#frameIndex = 0;
|
|
3087
|
+
this.clear();
|
|
3088
|
+
if (this.#options.hideCursor) {
|
|
3089
|
+
cli_cursor_default.show(this.#stream);
|
|
3090
|
+
}
|
|
3091
|
+
if (this.#options.discardStdin && import_node_process7.default.stdin.isTTY && this.#isDiscardingStdin) {
|
|
3092
|
+
stdin_discarder_default.stop();
|
|
3093
|
+
this.#isDiscardingStdin = false;
|
|
3094
|
+
}
|
|
3095
|
+
return this;
|
|
3096
|
+
}
|
|
3097
|
+
succeed(text) {
|
|
3098
|
+
return this.stopAndPersist({ symbol: log_symbols_default.success, text });
|
|
3099
|
+
}
|
|
3100
|
+
fail(text) {
|
|
3101
|
+
return this.stopAndPersist({ symbol: log_symbols_default.error, text });
|
|
3102
|
+
}
|
|
3103
|
+
warn(text) {
|
|
3104
|
+
return this.stopAndPersist({ symbol: log_symbols_default.warning, text });
|
|
3105
|
+
}
|
|
3106
|
+
info(text) {
|
|
3107
|
+
return this.stopAndPersist({ symbol: log_symbols_default.info, text });
|
|
3108
|
+
}
|
|
3109
|
+
stopAndPersist(options = {}) {
|
|
3110
|
+
if (this.#isSilent) {
|
|
3111
|
+
return this;
|
|
3112
|
+
}
|
|
3113
|
+
const prefixText = options.prefixText ?? this.#prefixText;
|
|
3114
|
+
const fullPrefixText = this.#getFullPrefixText(prefixText, " ");
|
|
3115
|
+
const symbolText = options.symbol ?? " ";
|
|
3116
|
+
const text = options.text ?? this.text;
|
|
3117
|
+
const separatorText = symbolText ? " " : "";
|
|
3118
|
+
const fullText = typeof text === "string" ? separatorText + text : "";
|
|
3119
|
+
const suffixText = options.suffixText ?? this.#suffixText;
|
|
3120
|
+
const fullSuffixText = this.#getFullSuffixText(suffixText, " ");
|
|
3121
|
+
const textToWrite = fullPrefixText + symbolText + fullText + fullSuffixText + "\n";
|
|
3122
|
+
this.stop();
|
|
3123
|
+
this.#stream.write(textToWrite);
|
|
3124
|
+
return this;
|
|
3125
|
+
}
|
|
3126
|
+
};
|
|
3127
|
+
function ora(options) {
|
|
3128
|
+
return new Ora(options);
|
|
3129
|
+
}
|
|
3130
|
+
|
|
3131
|
+
// src/commands/templates.ts
|
|
34
3132
|
var import_prompts = __toESM(require("prompts"), 1);
|
|
35
|
-
var import_chalk = __toESM(require("chalk"), 1);
|
|
36
3133
|
|
|
37
3134
|
// src/core/template-manager.ts
|
|
38
3135
|
var import_undici = require("undici");
|
|
@@ -61,6 +3158,7 @@ var WebhookProviderSchema = import_zod.z.enum([
|
|
|
61
3158
|
"shopify",
|
|
62
3159
|
"twilio",
|
|
63
3160
|
"ragie",
|
|
3161
|
+
"recall",
|
|
64
3162
|
"sendgrid",
|
|
65
3163
|
"slack",
|
|
66
3164
|
"discord",
|
|
@@ -467,7 +3565,7 @@ var listCommand = new import_commander.Command().name("list").alias("ls").descri
|
|
|
467
3565
|
"-p, --provider <provider>",
|
|
468
3566
|
"Filter by provider (stripe, github, etc.)"
|
|
469
3567
|
).option("-r, --refresh", "Force refresh the template index cache").action(async (options) => {
|
|
470
|
-
const spinner = (
|
|
3568
|
+
const spinner = ora("Fetching remote templates...").start();
|
|
471
3569
|
try {
|
|
472
3570
|
const manager = getTemplateManager();
|
|
473
3571
|
const templates2 = await manager.listRemoteTemplates({
|
|
@@ -475,7 +3573,7 @@ var listCommand = new import_commander.Command().name("list").alias("ls").descri
|
|
|
475
3573
|
});
|
|
476
3574
|
spinner.stop();
|
|
477
3575
|
if (templates2.length === 0) {
|
|
478
|
-
console.log(
|
|
3576
|
+
console.log(source_default.yellow("\u{1F4ED} No remote templates found."));
|
|
479
3577
|
return;
|
|
480
3578
|
}
|
|
481
3579
|
let filtered = templates2;
|
|
@@ -486,13 +3584,13 @@ var listCommand = new import_commander.Command().name("list").alias("ls").descri
|
|
|
486
3584
|
}
|
|
487
3585
|
if (filtered.length === 0) {
|
|
488
3586
|
console.log(
|
|
489
|
-
|
|
3587
|
+
source_default.yellow(
|
|
490
3588
|
`\u{1F4ED} No templates found for provider: ${options.provider}`
|
|
491
3589
|
)
|
|
492
3590
|
);
|
|
493
3591
|
return;
|
|
494
3592
|
}
|
|
495
|
-
console.log(
|
|
3593
|
+
console.log(source_default.bold("\n\u{1F4E6} Available Templates\n"));
|
|
496
3594
|
const byProvider = /* @__PURE__ */ new Map();
|
|
497
3595
|
for (const t of filtered) {
|
|
498
3596
|
const provider = t.metadata.provider;
|
|
@@ -502,24 +3600,24 @@ var listCommand = new import_commander.Command().name("list").alias("ls").descri
|
|
|
502
3600
|
byProvider.get(provider).push(t);
|
|
503
3601
|
}
|
|
504
3602
|
for (const [provider, providerTemplates] of byProvider) {
|
|
505
|
-
console.log(
|
|
3603
|
+
console.log(source_default.cyan.bold(` ${provider.toUpperCase()}`));
|
|
506
3604
|
for (const t of providerTemplates) {
|
|
507
|
-
const status = t.isDownloaded ?
|
|
508
|
-
console.log(` ${
|
|
3605
|
+
const status = t.isDownloaded ? source_default.green("\u2713 downloaded") : source_default.gray("\u25CB remote");
|
|
3606
|
+
console.log(` ${source_default.white(t.metadata.id)} ${status}`);
|
|
509
3607
|
if (t.metadata.description) {
|
|
510
|
-
console.log(
|
|
3608
|
+
console.log(source_default.gray(` ${t.metadata.description}`));
|
|
511
3609
|
}
|
|
512
3610
|
}
|
|
513
3611
|
console.log();
|
|
514
3612
|
}
|
|
515
|
-
console.log(
|
|
3613
|
+
console.log(source_default.gray(` Total: ${filtered.length} templates`));
|
|
516
3614
|
console.log(
|
|
517
|
-
|
|
3615
|
+
source_default.gray(` Download: better-webhook templates download <id>
|
|
518
3616
|
`)
|
|
519
3617
|
);
|
|
520
3618
|
} catch (error) {
|
|
521
3619
|
spinner.fail("Failed to fetch templates");
|
|
522
|
-
console.error(
|
|
3620
|
+
console.error(source_default.red(error.message));
|
|
523
3621
|
process.exitCode = 1;
|
|
524
3622
|
}
|
|
525
3623
|
});
|
|
@@ -527,7 +3625,7 @@ var downloadCommand = new import_commander.Command().name("download").alias("get
|
|
|
527
3625
|
async (templateId, options) => {
|
|
528
3626
|
const manager = getTemplateManager();
|
|
529
3627
|
if (options?.all) {
|
|
530
|
-
const spinner2 = (
|
|
3628
|
+
const spinner2 = ora("Fetching template list...").start();
|
|
531
3629
|
try {
|
|
532
3630
|
const templates2 = await manager.listRemoteTemplates({
|
|
533
3631
|
forceRefresh: true
|
|
@@ -535,16 +3633,16 @@ var downloadCommand = new import_commander.Command().name("download").alias("get
|
|
|
535
3633
|
const toDownload = templates2.filter((t) => !t.isDownloaded);
|
|
536
3634
|
spinner2.stop();
|
|
537
3635
|
if (toDownload.length === 0) {
|
|
538
|
-
console.log(
|
|
3636
|
+
console.log(source_default.green("\u2713 All templates already downloaded"));
|
|
539
3637
|
return;
|
|
540
3638
|
}
|
|
541
3639
|
console.log(
|
|
542
|
-
|
|
3640
|
+
source_default.bold(`
|
|
543
3641
|
Downloading ${toDownload.length} templates...
|
|
544
3642
|
`)
|
|
545
3643
|
);
|
|
546
3644
|
for (const t of toDownload) {
|
|
547
|
-
const downloadSpinner = (
|
|
3645
|
+
const downloadSpinner = ora(
|
|
548
3646
|
`Downloading ${t.metadata.id}...`
|
|
549
3647
|
).start();
|
|
550
3648
|
try {
|
|
@@ -556,16 +3654,16 @@ Downloading ${toDownload.length} templates...
|
|
|
556
3654
|
);
|
|
557
3655
|
}
|
|
558
3656
|
}
|
|
559
|
-
console.log(
|
|
3657
|
+
console.log(source_default.green("\n\u2713 Download complete\n"));
|
|
560
3658
|
} catch (error) {
|
|
561
3659
|
spinner2.fail("Failed to fetch templates");
|
|
562
|
-
console.error(
|
|
3660
|
+
console.error(source_default.red(error.message));
|
|
563
3661
|
process.exitCode = 1;
|
|
564
3662
|
}
|
|
565
3663
|
return;
|
|
566
3664
|
}
|
|
567
3665
|
if (!templateId) {
|
|
568
|
-
const spinner2 = (
|
|
3666
|
+
const spinner2 = ora("Fetching templates...").start();
|
|
569
3667
|
try {
|
|
570
3668
|
const templates2 = await manager.listRemoteTemplates({
|
|
571
3669
|
forceRefresh: !!options?.refresh
|
|
@@ -573,7 +3671,7 @@ Downloading ${toDownload.length} templates...
|
|
|
573
3671
|
spinner2.stop();
|
|
574
3672
|
const notDownloaded = templates2.filter((t) => !t.isDownloaded);
|
|
575
3673
|
if (notDownloaded.length === 0) {
|
|
576
|
-
console.log(
|
|
3674
|
+
console.log(source_default.green("\u2713 All templates already downloaded"));
|
|
577
3675
|
return;
|
|
578
3676
|
}
|
|
579
3677
|
const choices = notDownloaded.map((t) => ({
|
|
@@ -588,29 +3686,29 @@ Downloading ${toDownload.length} templates...
|
|
|
588
3686
|
choices
|
|
589
3687
|
});
|
|
590
3688
|
if (!response.templateId) {
|
|
591
|
-
console.log(
|
|
3689
|
+
console.log(source_default.yellow("Cancelled"));
|
|
592
3690
|
return;
|
|
593
3691
|
}
|
|
594
3692
|
templateId = response.templateId;
|
|
595
3693
|
} catch (error) {
|
|
596
3694
|
spinner2.fail("Failed to fetch templates");
|
|
597
|
-
console.error(
|
|
3695
|
+
console.error(source_default.red(error.message));
|
|
598
3696
|
process.exitCode = 1;
|
|
599
3697
|
return;
|
|
600
3698
|
}
|
|
601
3699
|
}
|
|
602
|
-
const spinner = (
|
|
3700
|
+
const spinner = ora(`Downloading ${templateId}...`).start();
|
|
603
3701
|
try {
|
|
604
3702
|
const template = await manager.downloadTemplate(templateId);
|
|
605
3703
|
spinner.succeed(`Downloaded ${templateId}`);
|
|
606
|
-
console.log(
|
|
3704
|
+
console.log(source_default.gray(` Saved to: ${template.filePath}`));
|
|
607
3705
|
console.log(
|
|
608
|
-
|
|
3706
|
+
source_default.gray(` Run with: better-webhook run ${templateId}
|
|
609
3707
|
`)
|
|
610
3708
|
);
|
|
611
3709
|
} catch (error) {
|
|
612
3710
|
spinner.fail(`Failed to download ${templateId}`);
|
|
613
|
-
console.error(
|
|
3711
|
+
console.error(source_default.red(error.message));
|
|
614
3712
|
process.exitCode = 1;
|
|
615
3713
|
}
|
|
616
3714
|
}
|
|
@@ -624,15 +3722,15 @@ var localCommand = new import_commander.Command().name("local").description("Lis
|
|
|
624
3722
|
);
|
|
625
3723
|
}
|
|
626
3724
|
if (templates2.length === 0) {
|
|
627
|
-
console.log(
|
|
3725
|
+
console.log(source_default.yellow("\n\u{1F4ED} No local templates found."));
|
|
628
3726
|
console.log(
|
|
629
|
-
|
|
3727
|
+
source_default.gray(
|
|
630
3728
|
" Download templates with: better-webhook templates download\n"
|
|
631
3729
|
)
|
|
632
3730
|
);
|
|
633
3731
|
return;
|
|
634
3732
|
}
|
|
635
|
-
console.log(
|
|
3733
|
+
console.log(source_default.bold("\n\u{1F4C1} Local Templates\n"));
|
|
636
3734
|
const byProvider = /* @__PURE__ */ new Map();
|
|
637
3735
|
for (const t of templates2) {
|
|
638
3736
|
const provider = t.metadata.provider;
|
|
@@ -642,62 +3740,62 @@ var localCommand = new import_commander.Command().name("local").description("Lis
|
|
|
642
3740
|
byProvider.get(provider).push(t);
|
|
643
3741
|
}
|
|
644
3742
|
for (const [provider, providerTemplates] of byProvider) {
|
|
645
|
-
console.log(
|
|
3743
|
+
console.log(source_default.cyan.bold(` ${provider.toUpperCase()}`));
|
|
646
3744
|
for (const t of providerTemplates) {
|
|
647
|
-
console.log(` ${
|
|
648
|
-
console.log(
|
|
3745
|
+
console.log(` ${source_default.white(t.id)}`);
|
|
3746
|
+
console.log(source_default.gray(` Event: ${t.metadata.event}`));
|
|
649
3747
|
console.log(
|
|
650
|
-
|
|
3748
|
+
source_default.gray(
|
|
651
3749
|
` Downloaded: ${new Date(t.downloadedAt).toLocaleDateString()}`
|
|
652
3750
|
)
|
|
653
3751
|
);
|
|
654
3752
|
}
|
|
655
3753
|
console.log();
|
|
656
3754
|
}
|
|
657
|
-
console.log(
|
|
658
|
-
console.log(
|
|
3755
|
+
console.log(source_default.gray(` Total: ${templates2.length} templates`));
|
|
3756
|
+
console.log(source_default.gray(` Storage: ${manager.getTemplatesDir()}
|
|
659
3757
|
`));
|
|
660
3758
|
});
|
|
661
3759
|
var searchCommand = new import_commander.Command().name("search").argument("<query>", "Search query").description("Search templates by name, provider, or event").action(async (query) => {
|
|
662
|
-
const spinner = (
|
|
3760
|
+
const spinner = ora("Searching...").start();
|
|
663
3761
|
try {
|
|
664
3762
|
const manager = getTemplateManager();
|
|
665
3763
|
const results = await manager.searchTemplates(query);
|
|
666
3764
|
spinner.stop();
|
|
667
3765
|
const totalCount = results.remote.length + results.local.length;
|
|
668
3766
|
if (totalCount === 0) {
|
|
669
|
-
console.log(
|
|
3767
|
+
console.log(source_default.yellow(`
|
|
670
3768
|
\u{1F4ED} No templates found for: "${query}"
|
|
671
3769
|
`));
|
|
672
3770
|
return;
|
|
673
3771
|
}
|
|
674
|
-
console.log(
|
|
3772
|
+
console.log(source_default.bold(`
|
|
675
3773
|
\u{1F50D} Search Results for "${query}"
|
|
676
3774
|
`));
|
|
677
3775
|
if (results.local.length > 0) {
|
|
678
|
-
console.log(
|
|
3776
|
+
console.log(source_default.cyan.bold(" LOCAL TEMPLATES"));
|
|
679
3777
|
for (const t of results.local) {
|
|
680
3778
|
console.log(
|
|
681
|
-
` ${
|
|
3779
|
+
` ${source_default.green("\u2713")} ${t.id} (${t.metadata.provider})`
|
|
682
3780
|
);
|
|
683
3781
|
}
|
|
684
3782
|
console.log();
|
|
685
3783
|
}
|
|
686
3784
|
if (results.remote.length > 0) {
|
|
687
|
-
console.log(
|
|
3785
|
+
console.log(source_default.cyan.bold(" REMOTE TEMPLATES"));
|
|
688
3786
|
for (const t of results.remote) {
|
|
689
|
-
const status = t.isDownloaded ?
|
|
3787
|
+
const status = t.isDownloaded ? source_default.green("\u2713") : source_default.gray("\u25CB");
|
|
690
3788
|
console.log(
|
|
691
3789
|
` ${status} ${t.metadata.id} (${t.metadata.provider})`
|
|
692
3790
|
);
|
|
693
3791
|
}
|
|
694
3792
|
console.log();
|
|
695
3793
|
}
|
|
696
|
-
console.log(
|
|
3794
|
+
console.log(source_default.gray(` Found: ${totalCount} templates
|
|
697
3795
|
`));
|
|
698
3796
|
} catch (error) {
|
|
699
3797
|
spinner.fail("Search failed");
|
|
700
|
-
console.error(
|
|
3798
|
+
console.error(source_default.red(error.message));
|
|
701
3799
|
process.exitCode = 1;
|
|
702
3800
|
}
|
|
703
3801
|
});
|
|
@@ -705,7 +3803,7 @@ var cacheCommand = new import_commander.Command().name("cache").description("Man
|
|
|
705
3803
|
if (options.clear) {
|
|
706
3804
|
const manager = getTemplateManager();
|
|
707
3805
|
manager.clearCache();
|
|
708
|
-
console.log(
|
|
3806
|
+
console.log(source_default.green("\u2713 Template cache cleared"));
|
|
709
3807
|
} else {
|
|
710
3808
|
console.log("Use --clear to clear the template cache");
|
|
711
3809
|
}
|
|
@@ -714,16 +3812,16 @@ var cleanCommand = new import_commander.Command().name("clean").alias("remove-al
|
|
|
714
3812
|
const manager = getTemplateManager();
|
|
715
3813
|
const templates2 = manager.listLocalTemplates();
|
|
716
3814
|
if (templates2.length === 0) {
|
|
717
|
-
console.log(
|
|
3815
|
+
console.log(source_default.yellow("\n\u{1F4ED} No local templates to remove.\n"));
|
|
718
3816
|
return;
|
|
719
3817
|
}
|
|
720
3818
|
console.log(
|
|
721
|
-
|
|
3819
|
+
source_default.bold(`
|
|
722
3820
|
\u{1F5D1}\uFE0F Found ${templates2.length} downloaded template(s)
|
|
723
3821
|
`)
|
|
724
3822
|
);
|
|
725
3823
|
for (const t of templates2) {
|
|
726
|
-
console.log(
|
|
3824
|
+
console.log(source_default.gray(` ${t.id} (${t.metadata.provider})`));
|
|
727
3825
|
}
|
|
728
3826
|
console.log();
|
|
729
3827
|
if (!options.force) {
|
|
@@ -734,47 +3832,46 @@ var cleanCommand = new import_commander.Command().name("clean").alias("remove-al
|
|
|
734
3832
|
initial: false
|
|
735
3833
|
});
|
|
736
3834
|
if (!response.confirm) {
|
|
737
|
-
console.log(
|
|
3835
|
+
console.log(source_default.yellow("Cancelled"));
|
|
738
3836
|
return;
|
|
739
3837
|
}
|
|
740
3838
|
}
|
|
741
3839
|
const deleted = manager.deleteAllLocalTemplates();
|
|
742
|
-
console.log(
|
|
3840
|
+
console.log(source_default.green(`
|
|
743
3841
|
\u2713 Removed ${deleted} template(s)`));
|
|
744
|
-
console.log(
|
|
3842
|
+
console.log(source_default.gray(` Storage: ${manager.getTemplatesDir()}
|
|
745
3843
|
`));
|
|
746
3844
|
});
|
|
747
3845
|
var templates = new import_commander.Command().name("templates").alias("t").description("Manage webhook templates").addCommand(listCommand).addCommand(downloadCommand).addCommand(localCommand).addCommand(searchCommand).addCommand(cacheCommand).addCommand(cleanCommand);
|
|
748
3846
|
|
|
749
3847
|
// src/commands/run.ts
|
|
750
3848
|
var import_commander2 = require("commander");
|
|
751
|
-
var import_ora2 = __toESM(require("ora"), 1);
|
|
752
3849
|
var import_prompts2 = __toESM(require("prompts"), 1);
|
|
753
|
-
var import_chalk2 = __toESM(require("chalk"), 1);
|
|
754
3850
|
|
|
755
3851
|
// src/core/executor.ts
|
|
756
3852
|
var import_undici2 = require("undici");
|
|
757
3853
|
|
|
758
3854
|
// src/core/signature.ts
|
|
759
|
-
var
|
|
3855
|
+
var import_node_buffer = require("buffer");
|
|
3856
|
+
var import_node_crypto = require("crypto");
|
|
760
3857
|
function generateStripeSignature(payload, secret, timestamp) {
|
|
761
3858
|
const ts = timestamp || Math.floor(Date.now() / 1e3);
|
|
762
3859
|
const signedPayload = `${ts}.${payload}`;
|
|
763
|
-
const signature = (0,
|
|
3860
|
+
const signature = (0, import_node_crypto.createHmac)("sha256", secret).update(signedPayload).digest("hex");
|
|
764
3861
|
return {
|
|
765
3862
|
header: "Stripe-Signature",
|
|
766
3863
|
value: `t=${ts},v1=${signature}`
|
|
767
3864
|
};
|
|
768
3865
|
}
|
|
769
3866
|
function generateGitHubSignature(payload, secret) {
|
|
770
|
-
const signature = (0,
|
|
3867
|
+
const signature = (0, import_node_crypto.createHmac)("sha256", secret).update(payload).digest("hex");
|
|
771
3868
|
return {
|
|
772
3869
|
header: "X-Hub-Signature-256",
|
|
773
3870
|
value: `sha256=${signature}`
|
|
774
3871
|
};
|
|
775
3872
|
}
|
|
776
3873
|
function generateShopifySignature(payload, secret) {
|
|
777
|
-
const signature = (0,
|
|
3874
|
+
const signature = (0, import_node_crypto.createHmac)("sha256", secret).update(payload).digest("base64");
|
|
778
3875
|
return {
|
|
779
3876
|
header: "X-Shopify-Hmac-SHA256",
|
|
780
3877
|
value: signature
|
|
@@ -782,7 +3879,7 @@ function generateShopifySignature(payload, secret) {
|
|
|
782
3879
|
}
|
|
783
3880
|
function generateTwilioSignature(payload, secret, url) {
|
|
784
3881
|
const signatureInput = url + payload;
|
|
785
|
-
const signature = (0,
|
|
3882
|
+
const signature = (0, import_node_crypto.createHmac)("sha1", secret).update(signatureInput).digest("base64");
|
|
786
3883
|
return {
|
|
787
3884
|
header: "X-Twilio-Signature",
|
|
788
3885
|
value: signature
|
|
@@ -791,14 +3888,14 @@ function generateTwilioSignature(payload, secret, url) {
|
|
|
791
3888
|
function generateSlackSignature(payload, secret, timestamp) {
|
|
792
3889
|
const ts = timestamp || Math.floor(Date.now() / 1e3);
|
|
793
3890
|
const signatureBaseString = `v0:${ts}:${payload}`;
|
|
794
|
-
const signature = (0,
|
|
3891
|
+
const signature = (0, import_node_crypto.createHmac)("sha256", secret).update(signatureBaseString).digest("hex");
|
|
795
3892
|
return {
|
|
796
3893
|
header: "X-Slack-Signature",
|
|
797
3894
|
value: `v0=${signature}`
|
|
798
3895
|
};
|
|
799
3896
|
}
|
|
800
3897
|
function generateLinearSignature(payload, secret) {
|
|
801
|
-
const signature = (0,
|
|
3898
|
+
const signature = (0, import_node_crypto.createHmac)("sha256", secret).update(payload).digest("hex");
|
|
802
3899
|
return {
|
|
803
3900
|
header: "Linear-Signature",
|
|
804
3901
|
value: signature
|
|
@@ -808,7 +3905,7 @@ function generateClerkSignature(payload, secret, timestamp, webhookId) {
|
|
|
808
3905
|
const ts = timestamp || Math.floor(Date.now() / 1e3);
|
|
809
3906
|
const msgId = webhookId || `msg_${Date.now()}`;
|
|
810
3907
|
const signedPayload = `${msgId}.${ts}.${payload}`;
|
|
811
|
-
const signature = (0,
|
|
3908
|
+
const signature = (0, import_node_crypto.createHmac)("sha256", secret).update(signedPayload).digest("base64");
|
|
812
3909
|
return {
|
|
813
3910
|
header: "Svix-Signature",
|
|
814
3911
|
value: `v1,${signature}`
|
|
@@ -817,19 +3914,38 @@ function generateClerkSignature(payload, secret, timestamp, webhookId) {
|
|
|
817
3914
|
function generateSendGridSignature(payload, secret, timestamp) {
|
|
818
3915
|
const ts = timestamp || Math.floor(Date.now() / 1e3);
|
|
819
3916
|
const signedPayload = `${ts}${payload}`;
|
|
820
|
-
const signature = (0,
|
|
3917
|
+
const signature = (0, import_node_crypto.createHmac)("sha256", secret).update(signedPayload).digest("base64");
|
|
821
3918
|
return {
|
|
822
3919
|
header: "X-Twilio-Email-Event-Webhook-Signature",
|
|
823
3920
|
value: signature
|
|
824
3921
|
};
|
|
825
3922
|
}
|
|
826
3923
|
function generateRagieSignature(payload, secret) {
|
|
827
|
-
const signature = (0,
|
|
3924
|
+
const signature = (0, import_node_crypto.createHmac)("sha256", secret).update(payload).digest("hex");
|
|
828
3925
|
return {
|
|
829
3926
|
header: "X-Signature",
|
|
830
3927
|
value: signature
|
|
831
3928
|
};
|
|
832
3929
|
}
|
|
3930
|
+
function generateRecallSignature(payload, secret, timestamp, webhookId) {
|
|
3931
|
+
if (!secret.startsWith("whsec_")) {
|
|
3932
|
+
throw new Error(
|
|
3933
|
+
"Recall signature generation requires a secret with the whsec_ prefix"
|
|
3934
|
+
);
|
|
3935
|
+
}
|
|
3936
|
+
const ts = timestamp ?? Math.floor(Date.now() / 1e3);
|
|
3937
|
+
const msgId = webhookId ?? `msg_${Date.now()}`;
|
|
3938
|
+
const key = import_node_buffer.Buffer.from(secret.slice("whsec_".length), "base64");
|
|
3939
|
+
if (key.length === 0) {
|
|
3940
|
+
throw new Error("Recall signing secret is invalid");
|
|
3941
|
+
}
|
|
3942
|
+
const signedPayload = `${msgId}.${ts}.${payload}`;
|
|
3943
|
+
const signature = (0, import_node_crypto.createHmac)("sha256", key).update(signedPayload).digest("base64");
|
|
3944
|
+
return {
|
|
3945
|
+
header: "Webhook-Signature",
|
|
3946
|
+
value: `v1,${signature}`
|
|
3947
|
+
};
|
|
3948
|
+
}
|
|
833
3949
|
function generateSignature(provider, payload, secret, options) {
|
|
834
3950
|
const timestamp = options?.timestamp;
|
|
835
3951
|
switch (provider) {
|
|
@@ -859,6 +3975,13 @@ function generateSignature(provider, payload, secret, options) {
|
|
|
859
3975
|
return generateSendGridSignature(payload, secret, timestamp);
|
|
860
3976
|
case "ragie":
|
|
861
3977
|
return generateRagieSignature(payload, secret);
|
|
3978
|
+
case "recall":
|
|
3979
|
+
return generateRecallSignature(
|
|
3980
|
+
payload,
|
|
3981
|
+
secret,
|
|
3982
|
+
timestamp,
|
|
3983
|
+
options?.webhookId
|
|
3984
|
+
);
|
|
862
3985
|
case "discord":
|
|
863
3986
|
case "custom":
|
|
864
3987
|
default:
|
|
@@ -947,6 +4070,13 @@ function getProviderHeaders(provider, options) {
|
|
|
947
4070
|
// Event type + nonce are included in the JSON body envelope.
|
|
948
4071
|
);
|
|
949
4072
|
break;
|
|
4073
|
+
case "recall":
|
|
4074
|
+
headers.push(
|
|
4075
|
+
{ key: "Content-Type", value: "application/json" },
|
|
4076
|
+
{ key: "Webhook-Id", value: options?.webhookId || `msg_${Date.now()}` },
|
|
4077
|
+
{ key: "Webhook-Timestamp", value: String(timestamp) }
|
|
4078
|
+
);
|
|
4079
|
+
break;
|
|
950
4080
|
default:
|
|
951
4081
|
headers.push({ key: "Content-Type", value: "application/json" });
|
|
952
4082
|
}
|
|
@@ -985,8 +4115,14 @@ async function executeWebhook(options) {
|
|
|
985
4115
|
}
|
|
986
4116
|
}
|
|
987
4117
|
if (options.secret && options.provider && bodyStr) {
|
|
4118
|
+
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"];
|
|
4119
|
+
const parsedTimestamp = timestampHeader ? Number.parseInt(timestampHeader, 10) : void 0;
|
|
4120
|
+
const timestamp = Number.isFinite(parsedTimestamp) ? parsedTimestamp : void 0;
|
|
4121
|
+
const webhookId = headers["Webhook-Id"] || headers["webhook-id"] || headers["Svix-Id"] || headers["svix-id"] || headers["X-GitHub-Delivery"] || headers["x-github-delivery"];
|
|
988
4122
|
const sig = generateSignature(options.provider, bodyStr, options.secret, {
|
|
989
|
-
url: options.url
|
|
4123
|
+
url: options.url,
|
|
4124
|
+
timestamp,
|
|
4125
|
+
webhookId
|
|
990
4126
|
});
|
|
991
4127
|
if (sig) {
|
|
992
4128
|
headers[sig.header] = sig.value;
|
|
@@ -1101,6 +4237,7 @@ function getSecretEnvVarName(provider) {
|
|
|
1101
4237
|
shopify: "SHOPIFY_WEBHOOK_SECRET",
|
|
1102
4238
|
twilio: "TWILIO_WEBHOOK_SECRET",
|
|
1103
4239
|
ragie: "RAGIE_WEBHOOK_SECRET",
|
|
4240
|
+
recall: "RECALL_WEBHOOK_SECRET",
|
|
1104
4241
|
slack: "SLACK_WEBHOOK_SECRET",
|
|
1105
4242
|
linear: "LINEAR_WEBHOOK_SECRET",
|
|
1106
4243
|
clerk: "CLERK_WEBHOOK_SECRET",
|
|
@@ -1128,15 +4265,15 @@ var run = new import_commander2.Command().name("run").argument("[templateId]", "
|
|
|
1128
4265
|
async (templateId, options) => {
|
|
1129
4266
|
const manager = getTemplateManager();
|
|
1130
4267
|
if (!templateId) {
|
|
1131
|
-
const spinner2 = (
|
|
4268
|
+
const spinner2 = ora("Loading templates...").start();
|
|
1132
4269
|
try {
|
|
1133
4270
|
const local = manager.listLocalTemplates();
|
|
1134
4271
|
const remote = await manager.listRemoteTemplates();
|
|
1135
4272
|
spinner2.stop();
|
|
1136
4273
|
if (local.length === 0 && remote.length === 0) {
|
|
1137
|
-
console.log(
|
|
4274
|
+
console.log(source_default.yellow("\n\u{1F4ED} No templates available."));
|
|
1138
4275
|
console.log(
|
|
1139
|
-
|
|
4276
|
+
source_default.gray(
|
|
1140
4277
|
" Download templates with: better-webhook templates download\n"
|
|
1141
4278
|
)
|
|
1142
4279
|
);
|
|
@@ -1146,7 +4283,7 @@ var run = new import_commander2.Command().name("run").argument("[templateId]", "
|
|
|
1146
4283
|
if (local.length > 0) {
|
|
1147
4284
|
for (const t of local) {
|
|
1148
4285
|
choices.push({
|
|
1149
|
-
title: `${t.id} ${
|
|
4286
|
+
title: `${t.id} ${source_default.green("(local)")}`,
|
|
1150
4287
|
description: `${t.metadata.provider} - ${t.metadata.event}`,
|
|
1151
4288
|
value: t.id
|
|
1152
4289
|
});
|
|
@@ -1155,7 +4292,7 @@ var run = new import_commander2.Command().name("run").argument("[templateId]", "
|
|
|
1155
4292
|
const remoteOnly = remote.filter((t) => !t.isDownloaded);
|
|
1156
4293
|
for (const t of remoteOnly) {
|
|
1157
4294
|
choices.push({
|
|
1158
|
-
title: `${t.metadata.id} ${
|
|
4295
|
+
title: `${t.metadata.id} ${source_default.gray("(remote)")}`,
|
|
1159
4296
|
description: `${t.metadata.provider} - ${t.metadata.event}`,
|
|
1160
4297
|
value: `remote:${t.metadata.id}`
|
|
1161
4298
|
});
|
|
@@ -1167,20 +4304,20 @@ var run = new import_commander2.Command().name("run").argument("[templateId]", "
|
|
|
1167
4304
|
choices
|
|
1168
4305
|
});
|
|
1169
4306
|
if (!response.templateId) {
|
|
1170
|
-
console.log(
|
|
4307
|
+
console.log(source_default.yellow("Cancelled"));
|
|
1171
4308
|
return;
|
|
1172
4309
|
}
|
|
1173
4310
|
templateId = response.templateId;
|
|
1174
4311
|
} catch (error) {
|
|
1175
4312
|
spinner2.fail("Failed to load templates");
|
|
1176
|
-
console.error(
|
|
4313
|
+
console.error(source_default.red(error.message));
|
|
1177
4314
|
process.exitCode = 1;
|
|
1178
4315
|
return;
|
|
1179
4316
|
}
|
|
1180
4317
|
}
|
|
1181
4318
|
if (templateId?.startsWith("remote:")) {
|
|
1182
4319
|
const remoteId = templateId.replace("remote:", "");
|
|
1183
|
-
const downloadSpinner = (
|
|
4320
|
+
const downloadSpinner = ora(`Downloading ${remoteId}...`).start();
|
|
1184
4321
|
try {
|
|
1185
4322
|
await manager.downloadTemplate(remoteId);
|
|
1186
4323
|
downloadSpinner.succeed(`Downloaded ${remoteId}`);
|
|
@@ -1193,10 +4330,10 @@ var run = new import_commander2.Command().name("run").argument("[templateId]", "
|
|
|
1193
4330
|
}
|
|
1194
4331
|
const localTemplate = manager.getLocalTemplate(templateId);
|
|
1195
4332
|
if (!localTemplate) {
|
|
1196
|
-
console.log(
|
|
4333
|
+
console.log(source_default.red(`
|
|
1197
4334
|
\u274C Template not found: ${templateId}`));
|
|
1198
4335
|
console.log(
|
|
1199
|
-
|
|
4336
|
+
source_default.gray(
|
|
1200
4337
|
" Download it with: better-webhook templates download " + templateId + "\n"
|
|
1201
4338
|
)
|
|
1202
4339
|
);
|
|
@@ -1209,24 +4346,24 @@ var run = new import_commander2.Command().name("run").argument("[templateId]", "
|
|
|
1209
4346
|
const envVarName = getSecretEnvVarName(localTemplate.metadata.provider);
|
|
1210
4347
|
secret = process.env[envVarName];
|
|
1211
4348
|
}
|
|
1212
|
-
console.log(
|
|
1213
|
-
console.log(
|
|
4349
|
+
console.log(source_default.bold("\n\u{1F680} Executing Webhook\n"));
|
|
4350
|
+
console.log(source_default.gray(` Template: ${templateId}`));
|
|
1214
4351
|
console.log(
|
|
1215
|
-
|
|
4352
|
+
source_default.gray(` Provider: ${localTemplate.metadata.provider}`)
|
|
1216
4353
|
);
|
|
1217
|
-
console.log(
|
|
1218
|
-
console.log(
|
|
4354
|
+
console.log(source_default.gray(` Event: ${localTemplate.metadata.event}`));
|
|
4355
|
+
console.log(source_default.gray(` Target: ${targetUrl}`));
|
|
1219
4356
|
if (secret) {
|
|
1220
|
-
console.log(
|
|
4357
|
+
console.log(source_default.gray(` Signature: Will be generated`));
|
|
1221
4358
|
} else {
|
|
1222
4359
|
console.log(
|
|
1223
|
-
|
|
4360
|
+
source_default.yellow(
|
|
1224
4361
|
` \u26A0\uFE0F No secret provided - signature will not be generated`
|
|
1225
4362
|
)
|
|
1226
4363
|
);
|
|
1227
4364
|
}
|
|
1228
4365
|
console.log();
|
|
1229
|
-
const spinner = (
|
|
4366
|
+
const spinner = ora("Sending webhook...").start();
|
|
1230
4367
|
try {
|
|
1231
4368
|
const result = await executeTemplate(localTemplate.template, {
|
|
1232
4369
|
url: targetUrl,
|
|
@@ -1234,43 +4371,43 @@ var run = new import_commander2.Command().name("run").argument("[templateId]", "
|
|
|
1234
4371
|
headers: options?.header
|
|
1235
4372
|
});
|
|
1236
4373
|
spinner.stop();
|
|
1237
|
-
const statusColor = result.status >= 200 && result.status < 300 ?
|
|
1238
|
-
console.log(
|
|
4374
|
+
const statusColor = result.status >= 200 && result.status < 300 ? source_default.green : result.status >= 400 ? source_default.red : source_default.yellow;
|
|
4375
|
+
console.log(source_default.bold("\u{1F4E5} Response\n"));
|
|
1239
4376
|
console.log(
|
|
1240
4377
|
` Status: ${statusColor(`${result.status} ${result.statusText}`)}`
|
|
1241
4378
|
);
|
|
1242
|
-
console.log(` Duration: ${
|
|
4379
|
+
console.log(` Duration: ${source_default.cyan(`${result.duration}ms`)}`);
|
|
1243
4380
|
if (options?.verbose) {
|
|
1244
|
-
console.log(
|
|
4381
|
+
console.log(source_default.bold("\n Headers:"));
|
|
1245
4382
|
for (const [key, value] of Object.entries(result.headers)) {
|
|
1246
4383
|
const headerValue = Array.isArray(value) ? value.join(", ") : value;
|
|
1247
|
-
console.log(
|
|
4384
|
+
console.log(source_default.gray(` ${key}: ${headerValue}`));
|
|
1248
4385
|
}
|
|
1249
4386
|
}
|
|
1250
4387
|
if (result.json !== void 0) {
|
|
1251
|
-
console.log(
|
|
4388
|
+
console.log(source_default.bold("\n Body:"));
|
|
1252
4389
|
console.log(
|
|
1253
|
-
|
|
4390
|
+
source_default.gray(
|
|
1254
4391
|
JSON.stringify(result.json, null, 2).split("\n").map((l) => ` ${l}`).join("\n")
|
|
1255
4392
|
)
|
|
1256
4393
|
);
|
|
1257
4394
|
} else if (result.bodyText) {
|
|
1258
|
-
console.log(
|
|
4395
|
+
console.log(source_default.bold("\n Body:"));
|
|
1259
4396
|
const preview = result.bodyText.length > 500 ? result.bodyText.slice(0, 500) + "..." : result.bodyText;
|
|
1260
|
-
console.log(
|
|
4397
|
+
console.log(source_default.gray(` ${preview}`));
|
|
1261
4398
|
}
|
|
1262
4399
|
console.log();
|
|
1263
4400
|
if (result.status >= 200 && result.status < 300) {
|
|
1264
|
-
console.log(
|
|
4401
|
+
console.log(source_default.green("\u2713 Webhook delivered successfully\n"));
|
|
1265
4402
|
} else {
|
|
1266
4403
|
console.log(
|
|
1267
|
-
|
|
4404
|
+
source_default.yellow(`\u26A0 Webhook delivered with status ${result.status}
|
|
1268
4405
|
`)
|
|
1269
4406
|
);
|
|
1270
4407
|
}
|
|
1271
4408
|
} catch (error) {
|
|
1272
4409
|
spinner.fail("Request failed");
|
|
1273
|
-
console.error(
|
|
4410
|
+
console.error(source_default.red(`
|
|
1274
4411
|
\u274C ${error.message}
|
|
1275
4412
|
`));
|
|
1276
4413
|
process.exitCode = 1;
|
|
@@ -1280,14 +4417,13 @@ var run = new import_commander2.Command().name("run").argument("[templateId]", "
|
|
|
1280
4417
|
|
|
1281
4418
|
// src/commands/capture.ts
|
|
1282
4419
|
var import_commander3 = require("commander");
|
|
1283
|
-
var import_chalk3 = __toESM(require("chalk"), 1);
|
|
1284
4420
|
|
|
1285
4421
|
// src/core/capture-server.ts
|
|
1286
4422
|
var import_http = require("http");
|
|
1287
4423
|
var import_ws = require("ws");
|
|
1288
4424
|
var import_fs2 = require("fs");
|
|
1289
4425
|
var import_path2 = require("path");
|
|
1290
|
-
var
|
|
4426
|
+
var import_crypto = require("crypto");
|
|
1291
4427
|
var import_os2 = require("os");
|
|
1292
4428
|
var CaptureServer = class {
|
|
1293
4429
|
server = null;
|
|
@@ -1399,7 +4535,7 @@ var CaptureServer = class {
|
|
|
1399
4535
|
return;
|
|
1400
4536
|
}
|
|
1401
4537
|
const timestamp = (/* @__PURE__ */ new Date()).toISOString();
|
|
1402
|
-
const id = (0,
|
|
4538
|
+
const id = (0, import_crypto.randomUUID)();
|
|
1403
4539
|
const url = req.url || "/";
|
|
1404
4540
|
const hostHeader = req.headers.host;
|
|
1405
4541
|
const hostValue = typeof hostHeader === "string" ? hostHeader : "";
|
|
@@ -1539,6 +4675,12 @@ var CaptureServer = class {
|
|
|
1539
4675
|
return "ragie";
|
|
1540
4676
|
}
|
|
1541
4677
|
}
|
|
4678
|
+
if (this.hasStandardWebhookHeaders(headers)) {
|
|
4679
|
+
const recallUserAgent = this.headerIncludes(headers["user-agent"], "recall");
|
|
4680
|
+
if (recallUserAgent || this.hasRecallStandardWebhookShape(body)) {
|
|
4681
|
+
return "recall";
|
|
4682
|
+
}
|
|
4683
|
+
}
|
|
1542
4684
|
if (headers["x-shopify-hmac-sha256"] || headers["x-shopify-topic"]) {
|
|
1543
4685
|
return "shopify";
|
|
1544
4686
|
}
|
|
@@ -1558,6 +4700,9 @@ var CaptureServer = class {
|
|
|
1558
4700
|
return "linear";
|
|
1559
4701
|
}
|
|
1560
4702
|
if (headers["svix-signature"]) {
|
|
4703
|
+
if (body && typeof body === "object" && "event" in body && typeof body.event === "string" && body.event.startsWith("bot.")) {
|
|
4704
|
+
return "recall";
|
|
4705
|
+
}
|
|
1561
4706
|
return "clerk";
|
|
1562
4707
|
}
|
|
1563
4708
|
return void 0;
|
|
@@ -1573,6 +4718,57 @@ var CaptureServer = class {
|
|
|
1573
4718
|
}
|
|
1574
4719
|
}
|
|
1575
4720
|
}
|
|
4721
|
+
hasStandardWebhookHeaders(headers) {
|
|
4722
|
+
return Boolean(
|
|
4723
|
+
headers["webhook-signature"] || headers["webhook-id"] && headers["webhook-timestamp"]
|
|
4724
|
+
);
|
|
4725
|
+
}
|
|
4726
|
+
hasRecallStandardWebhookShape(body) {
|
|
4727
|
+
if (!body || typeof body !== "object") {
|
|
4728
|
+
return false;
|
|
4729
|
+
}
|
|
4730
|
+
const payload = body;
|
|
4731
|
+
if (this.hasRecallEventPrefix(payload.event)) {
|
|
4732
|
+
return true;
|
|
4733
|
+
}
|
|
4734
|
+
if (this.hasRecallResourceCombination(payload)) {
|
|
4735
|
+
return true;
|
|
4736
|
+
}
|
|
4737
|
+
const nestedData = payload.data;
|
|
4738
|
+
if (nestedData && typeof nestedData === "object") {
|
|
4739
|
+
return this.hasRecallResourceCombination(
|
|
4740
|
+
nestedData
|
|
4741
|
+
);
|
|
4742
|
+
}
|
|
4743
|
+
return false;
|
|
4744
|
+
}
|
|
4745
|
+
hasRecallEventPrefix(event) {
|
|
4746
|
+
if (typeof event !== "string") {
|
|
4747
|
+
return false;
|
|
4748
|
+
}
|
|
4749
|
+
return ["bot.", "transcript.", "participant_events."].some(
|
|
4750
|
+
(prefix) => event.startsWith(prefix)
|
|
4751
|
+
);
|
|
4752
|
+
}
|
|
4753
|
+
hasRecallResourceCombination(payload) {
|
|
4754
|
+
const hasRealtimeEndpoint = "realtime_endpoint" in payload;
|
|
4755
|
+
const hasRecording = "recording" in payload;
|
|
4756
|
+
const hasParticipantEvents = "participant_events" in payload;
|
|
4757
|
+
const hasTranscript = "transcript" in payload;
|
|
4758
|
+
return hasRealtimeEndpoint && hasRecording && (hasParticipantEvents || hasTranscript);
|
|
4759
|
+
}
|
|
4760
|
+
headerIncludes(headerValue, searchText) {
|
|
4761
|
+
const normalizedSearchText = searchText.toLowerCase();
|
|
4762
|
+
if (typeof headerValue === "string") {
|
|
4763
|
+
return headerValue.toLowerCase().includes(normalizedSearchText);
|
|
4764
|
+
}
|
|
4765
|
+
if (Array.isArray(headerValue)) {
|
|
4766
|
+
return headerValue.some(
|
|
4767
|
+
(value) => value.toLowerCase().includes(normalizedSearchText)
|
|
4768
|
+
);
|
|
4769
|
+
}
|
|
4770
|
+
return false;
|
|
4771
|
+
}
|
|
1576
4772
|
/**
|
|
1577
4773
|
* Send message to a specific client
|
|
1578
4774
|
*/
|
|
@@ -1637,7 +4833,7 @@ var capture = new import_commander3.Command().name("capture").description("Start
|
|
|
1637
4833
|
async (options) => {
|
|
1638
4834
|
const port = parseInt(options.port, 10);
|
|
1639
4835
|
if (isNaN(port) || port < 0 || port > 65535) {
|
|
1640
|
-
console.error(
|
|
4836
|
+
console.error(source_default.red("Invalid port number"));
|
|
1641
4837
|
process.exitCode = 1;
|
|
1642
4838
|
return;
|
|
1643
4839
|
}
|
|
@@ -1652,7 +4848,7 @@ var capture = new import_commander3.Command().name("capture").description("Start
|
|
|
1652
4848
|
process.on("SIGINT", shutdown);
|
|
1653
4849
|
process.on("SIGTERM", shutdown);
|
|
1654
4850
|
} catch (error) {
|
|
1655
|
-
console.error(
|
|
4851
|
+
console.error(source_default.red(`Failed to start server: ${error.message}`));
|
|
1656
4852
|
process.exitCode = 1;
|
|
1657
4853
|
}
|
|
1658
4854
|
}
|
|
@@ -1660,7 +4856,6 @@ var capture = new import_commander3.Command().name("capture").description("Start
|
|
|
1660
4856
|
|
|
1661
4857
|
// src/commands/captures.ts
|
|
1662
4858
|
var import_commander4 = require("commander");
|
|
1663
|
-
var import_chalk4 = __toESM(require("chalk"), 1);
|
|
1664
4859
|
var import_prompts3 = __toESM(require("prompts"), 1);
|
|
1665
4860
|
var import_os4 = require("os");
|
|
1666
4861
|
|
|
@@ -1775,6 +4970,7 @@ var ReplayEngine = class {
|
|
|
1775
4970
|
"x-twilio-signature",
|
|
1776
4971
|
"x-slack-signature",
|
|
1777
4972
|
"svix-signature",
|
|
4973
|
+
"webhook-signature",
|
|
1778
4974
|
"linear-signature"
|
|
1779
4975
|
];
|
|
1780
4976
|
const headers = [];
|
|
@@ -1846,10 +5042,19 @@ var ReplayEngine = class {
|
|
|
1846
5042
|
}
|
|
1847
5043
|
if (capture2.provider === "ragie" && capture2.body) {
|
|
1848
5044
|
const body = capture2.body;
|
|
5045
|
+
if (typeof body.type === "string") {
|
|
5046
|
+
return body.type;
|
|
5047
|
+
}
|
|
1849
5048
|
if (typeof body.event_type === "string") {
|
|
1850
5049
|
return body.event_type;
|
|
1851
5050
|
}
|
|
1852
5051
|
}
|
|
5052
|
+
if (capture2.provider === "recall" && capture2.body) {
|
|
5053
|
+
const body = capture2.body;
|
|
5054
|
+
if (typeof body.event === "string") {
|
|
5055
|
+
return body.event;
|
|
5056
|
+
}
|
|
5057
|
+
}
|
|
1853
5058
|
const shopifyTopic = headers["x-shopify-topic"];
|
|
1854
5059
|
if (shopifyTopic) {
|
|
1855
5060
|
return Array.isArray(shopifyTopic) ? shopifyTopic[0] : shopifyTopic;
|
|
@@ -1981,7 +5186,7 @@ function toRelativePath(absolutePath) {
|
|
|
1981
5186
|
var listCommand2 = new import_commander4.Command().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) => {
|
|
1982
5187
|
const limit = parseInt(options.limit, 10);
|
|
1983
5188
|
if (isNaN(limit) || limit <= 0) {
|
|
1984
|
-
console.error(
|
|
5189
|
+
console.error(source_default.red("Invalid limit value"));
|
|
1985
5190
|
process.exitCode = 1;
|
|
1986
5191
|
return;
|
|
1987
5192
|
}
|
|
@@ -1993,90 +5198,90 @@ var listCommand2 = new import_commander4.Command().name("list").alias("ls").desc
|
|
|
1993
5198
|
);
|
|
1994
5199
|
}
|
|
1995
5200
|
if (captures2.length === 0) {
|
|
1996
|
-
console.log(
|
|
5201
|
+
console.log(source_default.yellow("\n\u{1F4ED} No captured webhooks found."));
|
|
1997
5202
|
console.log(
|
|
1998
|
-
|
|
5203
|
+
source_default.gray(" Start capturing with: better-webhook capture\n")
|
|
1999
5204
|
);
|
|
2000
5205
|
return;
|
|
2001
5206
|
}
|
|
2002
|
-
console.log(
|
|
5207
|
+
console.log(source_default.bold("\n\u{1F4E6} Captured Webhooks\n"));
|
|
2003
5208
|
for (const { file, capture: capture2 } of captures2) {
|
|
2004
5209
|
const date = new Date(capture2.timestamp).toLocaleString();
|
|
2005
|
-
const provider = capture2.provider ?
|
|
5210
|
+
const provider = capture2.provider ? source_default.cyan(`[${capture2.provider}]`) : source_default.gray("[unknown]");
|
|
2006
5211
|
const size = capture2.contentLength || capture2.rawBody?.length || 0;
|
|
2007
|
-
console.log(` ${
|
|
2008
|
-
console.log(
|
|
2009
|
-
console.log(
|
|
2010
|
-
console.log(
|
|
5212
|
+
console.log(` ${source_default.white(capture2.id.slice(0, 8))} ${provider}`);
|
|
5213
|
+
console.log(source_default.gray(` ${capture2.method} ${capture2.path}`));
|
|
5214
|
+
console.log(source_default.gray(` ${date} | ${size} bytes`));
|
|
5215
|
+
console.log(source_default.gray(` File: ${file}`));
|
|
2011
5216
|
console.log();
|
|
2012
5217
|
}
|
|
2013
|
-
console.log(
|
|
2014
|
-
console.log(
|
|
5218
|
+
console.log(source_default.gray(` Showing ${captures2.length} captures`));
|
|
5219
|
+
console.log(source_default.gray(` Storage: ${engine.getCapturesDir()}
|
|
2015
5220
|
`));
|
|
2016
5221
|
});
|
|
2017
5222
|
var showCommand = new import_commander4.Command().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) => {
|
|
2018
5223
|
const engine = getReplayEngine();
|
|
2019
5224
|
const captureFile = engine.getCapture(captureId);
|
|
2020
5225
|
if (!captureFile) {
|
|
2021
|
-
console.log(
|
|
5226
|
+
console.log(source_default.red(`
|
|
2022
5227
|
\u274C Capture not found: ${captureId}
|
|
2023
5228
|
`));
|
|
2024
5229
|
process.exitCode = 1;
|
|
2025
5230
|
return;
|
|
2026
5231
|
}
|
|
2027
5232
|
const { capture: capture2 } = captureFile;
|
|
2028
|
-
console.log(
|
|
2029
|
-
console.log(` ${
|
|
2030
|
-
console.log(` ${
|
|
5233
|
+
console.log(source_default.bold("\n\u{1F4CB} Capture Details\n"));
|
|
5234
|
+
console.log(` ${source_default.gray("ID:")} ${capture2.id}`);
|
|
5235
|
+
console.log(` ${source_default.gray("File:")} ${captureFile.file}`);
|
|
2031
5236
|
console.log(
|
|
2032
|
-
` ${
|
|
5237
|
+
` ${source_default.gray("Timestamp:")} ${new Date(capture2.timestamp).toLocaleString()}`
|
|
2033
5238
|
);
|
|
2034
|
-
console.log(` ${
|
|
2035
|
-
console.log(` ${
|
|
2036
|
-
console.log(` ${
|
|
5239
|
+
console.log(` ${source_default.gray("Method:")} ${capture2.method}`);
|
|
5240
|
+
console.log(` ${source_default.gray("Path:")} ${capture2.path}`);
|
|
5241
|
+
console.log(` ${source_default.gray("URL:")} ${capture2.url}`);
|
|
2037
5242
|
if (capture2.provider) {
|
|
2038
5243
|
console.log(
|
|
2039
|
-
` ${
|
|
5244
|
+
` ${source_default.gray("Provider:")} ${source_default.cyan(capture2.provider)}`
|
|
2040
5245
|
);
|
|
2041
5246
|
}
|
|
2042
5247
|
console.log(
|
|
2043
|
-
` ${
|
|
5248
|
+
` ${source_default.gray("Content-Type:")} ${capture2.contentType || "unknown"}`
|
|
2044
5249
|
);
|
|
2045
5250
|
console.log(
|
|
2046
|
-
` ${
|
|
5251
|
+
` ${source_default.gray("Content-Length:")} ${capture2.contentLength || 0} bytes`
|
|
2047
5252
|
);
|
|
2048
5253
|
const queryKeys = Object.keys(capture2.query);
|
|
2049
5254
|
if (queryKeys.length > 0) {
|
|
2050
|
-
console.log(
|
|
5255
|
+
console.log(source_default.bold("\n Query Parameters:"));
|
|
2051
5256
|
for (const [key, value] of Object.entries(capture2.query)) {
|
|
2052
5257
|
const queryValue = Array.isArray(value) ? value.join(", ") : value;
|
|
2053
|
-
console.log(
|
|
5258
|
+
console.log(source_default.gray(` ${key}: ${queryValue}`));
|
|
2054
5259
|
}
|
|
2055
5260
|
}
|
|
2056
|
-
console.log(
|
|
5261
|
+
console.log(source_default.bold("\n Headers:"));
|
|
2057
5262
|
for (const [key, value] of Object.entries(capture2.headers)) {
|
|
2058
5263
|
const headerValue = Array.isArray(value) ? value.join(", ") : value;
|
|
2059
5264
|
const display = headerValue.length > 80 ? headerValue.slice(0, 80) + "..." : headerValue;
|
|
2060
|
-
console.log(
|
|
5265
|
+
console.log(source_default.gray(` ${key}: ${display}`));
|
|
2061
5266
|
}
|
|
2062
5267
|
if (options.body && capture2.body) {
|
|
2063
|
-
console.log(
|
|
5268
|
+
console.log(source_default.bold("\n Body:"));
|
|
2064
5269
|
if (typeof capture2.body === "object") {
|
|
2065
5270
|
console.log(
|
|
2066
|
-
|
|
5271
|
+
source_default.gray(
|
|
2067
5272
|
JSON.stringify(capture2.body, null, 2).split("\n").map((l) => ` ${l}`).join("\n")
|
|
2068
5273
|
)
|
|
2069
5274
|
);
|
|
2070
5275
|
} else {
|
|
2071
|
-
console.log(
|
|
5276
|
+
console.log(source_default.gray(` ${capture2.body}`));
|
|
2072
5277
|
}
|
|
2073
5278
|
} else if (capture2.body) {
|
|
2074
|
-
console.log(
|
|
5279
|
+
console.log(source_default.bold("\n Body:"));
|
|
2075
5280
|
const preview = JSON.stringify(capture2.body).slice(0, 200);
|
|
2076
5281
|
console.log(
|
|
2077
|
-
|
|
5282
|
+
source_default.gray(` ${preview}${preview.length >= 200 ? "..." : ""}`)
|
|
2078
5283
|
);
|
|
2079
|
-
console.log(
|
|
5284
|
+
console.log(source_default.gray(" Use --body to see full content"));
|
|
2080
5285
|
}
|
|
2081
5286
|
console.log();
|
|
2082
5287
|
});
|
|
@@ -2084,30 +5289,30 @@ var searchCommand2 = new import_commander4.Command().name("search").argument("<q
|
|
|
2084
5289
|
const engine = getReplayEngine();
|
|
2085
5290
|
const results = engine.searchCaptures(query);
|
|
2086
5291
|
if (results.length === 0) {
|
|
2087
|
-
console.log(
|
|
5292
|
+
console.log(source_default.yellow(`
|
|
2088
5293
|
\u{1F4ED} No captures found for: "${query}"
|
|
2089
5294
|
`));
|
|
2090
5295
|
return;
|
|
2091
5296
|
}
|
|
2092
|
-
console.log(
|
|
5297
|
+
console.log(source_default.bold(`
|
|
2093
5298
|
\u{1F50D} Search Results for "${query}"
|
|
2094
5299
|
`));
|
|
2095
5300
|
for (const { file, capture: capture2 } of results) {
|
|
2096
5301
|
const date = new Date(capture2.timestamp).toLocaleString();
|
|
2097
|
-
const provider = capture2.provider ?
|
|
2098
|
-
console.log(` ${
|
|
2099
|
-
console.log(
|
|
2100
|
-
console.log(
|
|
5302
|
+
const provider = capture2.provider ? source_default.cyan(`[${capture2.provider}]`) : "";
|
|
5303
|
+
console.log(` ${source_default.white(capture2.id.slice(0, 8))} ${provider}`);
|
|
5304
|
+
console.log(source_default.gray(` ${capture2.method} ${capture2.path}`));
|
|
5305
|
+
console.log(source_default.gray(` ${date}`));
|
|
2101
5306
|
console.log();
|
|
2102
5307
|
}
|
|
2103
|
-
console.log(
|
|
5308
|
+
console.log(source_default.gray(` Found: ${results.length} captures
|
|
2104
5309
|
`));
|
|
2105
5310
|
});
|
|
2106
5311
|
var deleteCommand = new import_commander4.Command().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) => {
|
|
2107
5312
|
const engine = getReplayEngine();
|
|
2108
5313
|
const captureFile = engine.getCapture(captureId);
|
|
2109
5314
|
if (!captureFile) {
|
|
2110
|
-
console.log(
|
|
5315
|
+
console.log(source_default.red(`
|
|
2111
5316
|
\u274C Capture not found: ${captureId}
|
|
2112
5317
|
`));
|
|
2113
5318
|
process.exitCode = 1;
|
|
@@ -2115,11 +5320,11 @@ var deleteCommand = new import_commander4.Command().name("delete").alias("rm").a
|
|
|
2115
5320
|
}
|
|
2116
5321
|
const { capture: capture2 } = captureFile;
|
|
2117
5322
|
if (!options.force) {
|
|
2118
|
-
console.log(
|
|
2119
|
-
console.log(` ${
|
|
2120
|
-
console.log(
|
|
5323
|
+
console.log(source_default.bold("\n\u{1F5D1}\uFE0F Capture to delete:\n"));
|
|
5324
|
+
console.log(` ${source_default.white(capture2.id.slice(0, 8))}`);
|
|
5325
|
+
console.log(source_default.gray(` ${capture2.method} ${capture2.path}`));
|
|
2121
5326
|
console.log(
|
|
2122
|
-
|
|
5327
|
+
source_default.gray(` ${new Date(capture2.timestamp).toLocaleString()}`)
|
|
2123
5328
|
);
|
|
2124
5329
|
console.log();
|
|
2125
5330
|
const response = await (0, import_prompts3.default)({
|
|
@@ -2129,19 +5334,19 @@ var deleteCommand = new import_commander4.Command().name("delete").alias("rm").a
|
|
|
2129
5334
|
initial: false
|
|
2130
5335
|
});
|
|
2131
5336
|
if (!response.confirm) {
|
|
2132
|
-
console.log(
|
|
5337
|
+
console.log(source_default.yellow("Cancelled"));
|
|
2133
5338
|
return;
|
|
2134
5339
|
}
|
|
2135
5340
|
}
|
|
2136
5341
|
const deleted = engine.deleteCapture(captureId);
|
|
2137
5342
|
if (deleted) {
|
|
2138
5343
|
console.log(
|
|
2139
|
-
|
|
5344
|
+
source_default.green(`
|
|
2140
5345
|
\u2713 Deleted capture: ${capture2.id.slice(0, 8)}
|
|
2141
5346
|
`)
|
|
2142
5347
|
);
|
|
2143
5348
|
} else {
|
|
2144
|
-
console.log(
|
|
5349
|
+
console.log(source_default.red(`
|
|
2145
5350
|
\u274C Failed to delete capture
|
|
2146
5351
|
`));
|
|
2147
5352
|
process.exitCode = 1;
|
|
@@ -2151,11 +5356,11 @@ var cleanCommand2 = new import_commander4.Command().name("clean").alias("remove-
|
|
|
2151
5356
|
const engine = getReplayEngine();
|
|
2152
5357
|
const captures2 = engine.listCaptures(1e4);
|
|
2153
5358
|
if (captures2.length === 0) {
|
|
2154
|
-
console.log(
|
|
5359
|
+
console.log(source_default.yellow("\n\u{1F4ED} No captures to remove.\n"));
|
|
2155
5360
|
return;
|
|
2156
5361
|
}
|
|
2157
5362
|
console.log(
|
|
2158
|
-
|
|
5363
|
+
source_default.bold(`
|
|
2159
5364
|
\u{1F5D1}\uFE0F Found ${captures2.length} captured webhook(s)
|
|
2160
5365
|
`)
|
|
2161
5366
|
);
|
|
@@ -2165,7 +5370,7 @@ var cleanCommand2 = new import_commander4.Command().name("clean").alias("remove-
|
|
|
2165
5370
|
byProvider.set(provider, (byProvider.get(provider) || 0) + 1);
|
|
2166
5371
|
}
|
|
2167
5372
|
for (const [provider, count] of byProvider) {
|
|
2168
|
-
console.log(
|
|
5373
|
+
console.log(source_default.gray(` ${provider}: ${count}`));
|
|
2169
5374
|
}
|
|
2170
5375
|
console.log();
|
|
2171
5376
|
if (!options.force) {
|
|
@@ -2176,14 +5381,14 @@ var cleanCommand2 = new import_commander4.Command().name("clean").alias("remove-
|
|
|
2176
5381
|
initial: false
|
|
2177
5382
|
});
|
|
2178
5383
|
if (!response.confirm) {
|
|
2179
|
-
console.log(
|
|
5384
|
+
console.log(source_default.yellow("Cancelled"));
|
|
2180
5385
|
return;
|
|
2181
5386
|
}
|
|
2182
5387
|
}
|
|
2183
5388
|
const deleted = engine.deleteAllCaptures();
|
|
2184
|
-
console.log(
|
|
5389
|
+
console.log(source_default.green(`
|
|
2185
5390
|
\u2713 Removed ${deleted} capture(s)`));
|
|
2186
|
-
console.log(
|
|
5391
|
+
console.log(source_default.gray(` Storage: ${engine.getCapturesDir()}
|
|
2187
5392
|
`));
|
|
2188
5393
|
});
|
|
2189
5394
|
var saveAsTemplateCommand = new import_commander4.Command().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(
|
|
@@ -2192,18 +5397,18 @@ var saveAsTemplateCommand = new import_commander4.Command().name("save-as-templa
|
|
|
2192
5397
|
const templateManager = getTemplateManager();
|
|
2193
5398
|
const captureFile = engine.getCapture(captureId);
|
|
2194
5399
|
if (!captureFile) {
|
|
2195
|
-
console.log(
|
|
5400
|
+
console.log(source_default.red(`
|
|
2196
5401
|
\u274C Capture not found: ${captureId}
|
|
2197
5402
|
`));
|
|
2198
5403
|
process.exitCode = 1;
|
|
2199
5404
|
return;
|
|
2200
5405
|
}
|
|
2201
5406
|
const { capture: capture2 } = captureFile;
|
|
2202
|
-
console.log(
|
|
2203
|
-
console.log(` ${
|
|
2204
|
-
console.log(
|
|
5407
|
+
console.log(source_default.bold("\n\u{1F4CB} Capture to save as template:\n"));
|
|
5408
|
+
console.log(` ${source_default.white(capture2.id.slice(0, 8))}`);
|
|
5409
|
+
console.log(source_default.gray(` ${capture2.method} ${capture2.path}`));
|
|
2205
5410
|
if (capture2.provider) {
|
|
2206
|
-
console.log(
|
|
5411
|
+
console.log(source_default.gray(` Provider: ${capture2.provider}`));
|
|
2207
5412
|
}
|
|
2208
5413
|
console.log();
|
|
2209
5414
|
const template = engine.captureToTemplate(captureId, {
|
|
@@ -2221,7 +5426,7 @@ var saveAsTemplateCommand = new import_commander4.Command().name("save-as-templa
|
|
|
2221
5426
|
validate: (value) => value.trim().length > 0 || "Template ID is required"
|
|
2222
5427
|
});
|
|
2223
5428
|
if (!response.templateId) {
|
|
2224
|
-
console.log(
|
|
5429
|
+
console.log(source_default.yellow("Cancelled"));
|
|
2225
5430
|
return;
|
|
2226
5431
|
}
|
|
2227
5432
|
templateId = response.templateId;
|
|
@@ -2234,7 +5439,7 @@ var saveAsTemplateCommand = new import_commander4.Command().name("save-as-templa
|
|
|
2234
5439
|
initial: false
|
|
2235
5440
|
});
|
|
2236
5441
|
if (!response.overwrite) {
|
|
2237
|
-
console.log(
|
|
5442
|
+
console.log(source_default.yellow("Cancelled"));
|
|
2238
5443
|
return;
|
|
2239
5444
|
}
|
|
2240
5445
|
options.overwrite = true;
|
|
@@ -2247,24 +5452,24 @@ var saveAsTemplateCommand = new import_commander4.Command().name("save-as-templa
|
|
|
2247
5452
|
description: options.description,
|
|
2248
5453
|
overwrite: options.overwrite
|
|
2249
5454
|
});
|
|
2250
|
-
console.log(
|
|
5455
|
+
console.log(source_default.green(`
|
|
2251
5456
|
\u2713 Saved template: ${result.id}`));
|
|
2252
|
-
console.log(
|
|
2253
|
-
console.log(
|
|
5457
|
+
console.log(source_default.gray(` File: ${toRelativePath(result.filePath)}`));
|
|
5458
|
+
console.log(source_default.gray(` Provider: ${template.provider || "custom"}`));
|
|
2254
5459
|
if (template.event) {
|
|
2255
|
-
console.log(
|
|
5460
|
+
console.log(source_default.gray(` Event: ${template.event}`));
|
|
2256
5461
|
}
|
|
2257
5462
|
console.log();
|
|
2258
|
-
console.log(
|
|
5463
|
+
console.log(source_default.gray(" Run it with:"));
|
|
2259
5464
|
console.log(
|
|
2260
|
-
|
|
5465
|
+
source_default.cyan(
|
|
2261
5466
|
` better-webhook run ${result.id} --url http://localhost:3000/webhooks
|
|
2262
5467
|
`
|
|
2263
5468
|
)
|
|
2264
5469
|
);
|
|
2265
5470
|
} catch (error) {
|
|
2266
5471
|
const message = error instanceof Error ? error.message : "Failed to save template";
|
|
2267
|
-
console.log(
|
|
5472
|
+
console.log(source_default.red(`
|
|
2268
5473
|
\u274C ${message}
|
|
2269
5474
|
`));
|
|
2270
5475
|
process.exitCode = 1;
|
|
@@ -2275,9 +5480,7 @@ var captures = new import_commander4.Command().name("captures").alias("c").descr
|
|
|
2275
5480
|
|
|
2276
5481
|
// src/commands/replay.ts
|
|
2277
5482
|
var import_commander5 = require("commander");
|
|
2278
|
-
var import_ora3 = __toESM(require("ora"), 1);
|
|
2279
5483
|
var import_prompts4 = __toESM(require("prompts"), 1);
|
|
2280
|
-
var import_chalk5 = __toESM(require("chalk"), 1);
|
|
2281
5484
|
var replay = new import_commander5.Command().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(
|
|
2282
5485
|
"-H, --header <header>",
|
|
2283
5486
|
"Add or override header (format: key:value)",
|
|
@@ -2298,9 +5501,9 @@ var replay = new import_commander5.Command().name("replay").argument("[captureId
|
|
|
2298
5501
|
if (!captureId) {
|
|
2299
5502
|
const captures2 = engine.listCaptures(50);
|
|
2300
5503
|
if (captures2.length === 0) {
|
|
2301
|
-
console.log(
|
|
5504
|
+
console.log(source_default.yellow("\n\u{1F4ED} No captured webhooks found."));
|
|
2302
5505
|
console.log(
|
|
2303
|
-
|
|
5506
|
+
source_default.gray(" Start capturing with: better-webhook capture\n")
|
|
2304
5507
|
);
|
|
2305
5508
|
return;
|
|
2306
5509
|
}
|
|
@@ -2320,14 +5523,14 @@ var replay = new import_commander5.Command().name("replay").argument("[captureId
|
|
|
2320
5523
|
choices
|
|
2321
5524
|
});
|
|
2322
5525
|
if (!response.captureId) {
|
|
2323
|
-
console.log(
|
|
5526
|
+
console.log(source_default.yellow("Cancelled"));
|
|
2324
5527
|
return;
|
|
2325
5528
|
}
|
|
2326
5529
|
captureId = response.captureId;
|
|
2327
5530
|
}
|
|
2328
5531
|
const captureFile = engine.getCapture(captureId);
|
|
2329
5532
|
if (!captureFile) {
|
|
2330
|
-
console.log(
|
|
5533
|
+
console.log(source_default.red(`
|
|
2331
5534
|
\u274C Capture not found: ${captureId}
|
|
2332
5535
|
`));
|
|
2333
5536
|
process.exitCode = 1;
|
|
@@ -2349,21 +5552,21 @@ var replay = new import_commander5.Command().name("replay").argument("[captureId
|
|
|
2349
5552
|
}
|
|
2350
5553
|
});
|
|
2351
5554
|
if (!response.url) {
|
|
2352
|
-
console.log(
|
|
5555
|
+
console.log(source_default.yellow("Cancelled"));
|
|
2353
5556
|
return;
|
|
2354
5557
|
}
|
|
2355
5558
|
targetUrl = response.url;
|
|
2356
5559
|
}
|
|
2357
5560
|
const { capture: capture2 } = captureFile;
|
|
2358
|
-
console.log(
|
|
2359
|
-
console.log(
|
|
2360
|
-
console.log(
|
|
5561
|
+
console.log(source_default.bold("\n\u{1F504} Replaying Webhook\n"));
|
|
5562
|
+
console.log(source_default.gray(` Capture ID: ${capture2.id.slice(0, 8)}`));
|
|
5563
|
+
console.log(source_default.gray(` Original: ${capture2.method} ${capture2.path}`));
|
|
2361
5564
|
if (capture2.provider) {
|
|
2362
|
-
console.log(
|
|
5565
|
+
console.log(source_default.gray(` Provider: ${capture2.provider}`));
|
|
2363
5566
|
}
|
|
2364
|
-
console.log(
|
|
5567
|
+
console.log(source_default.gray(` Target: ${targetUrl}`));
|
|
2365
5568
|
console.log();
|
|
2366
|
-
const spinner = (
|
|
5569
|
+
const spinner = ora("Replaying webhook...").start();
|
|
2367
5570
|
try {
|
|
2368
5571
|
const result = await engine.replay(captureId, {
|
|
2369
5572
|
targetUrl,
|
|
@@ -2371,43 +5574,43 @@ var replay = new import_commander5.Command().name("replay").argument("[captureId
|
|
|
2371
5574
|
headers: options?.header
|
|
2372
5575
|
});
|
|
2373
5576
|
spinner.stop();
|
|
2374
|
-
const statusColor = result.status >= 200 && result.status < 300 ?
|
|
2375
|
-
console.log(
|
|
5577
|
+
const statusColor = result.status >= 200 && result.status < 300 ? source_default.green : result.status >= 400 ? source_default.red : source_default.yellow;
|
|
5578
|
+
console.log(source_default.bold("\u{1F4E5} Response\n"));
|
|
2376
5579
|
console.log(
|
|
2377
5580
|
` Status: ${statusColor(`${result.status} ${result.statusText}`)}`
|
|
2378
5581
|
);
|
|
2379
|
-
console.log(` Duration: ${
|
|
5582
|
+
console.log(` Duration: ${source_default.cyan(`${result.duration}ms`)}`);
|
|
2380
5583
|
if (options?.verbose) {
|
|
2381
|
-
console.log(
|
|
5584
|
+
console.log(source_default.bold("\n Headers:"));
|
|
2382
5585
|
for (const [key, value] of Object.entries(result.headers)) {
|
|
2383
5586
|
const headerValue = Array.isArray(value) ? value.join(", ") : value;
|
|
2384
|
-
console.log(
|
|
5587
|
+
console.log(source_default.gray(` ${key}: ${headerValue}`));
|
|
2385
5588
|
}
|
|
2386
5589
|
}
|
|
2387
5590
|
if (result.json !== void 0) {
|
|
2388
|
-
console.log(
|
|
5591
|
+
console.log(source_default.bold("\n Body:"));
|
|
2389
5592
|
console.log(
|
|
2390
|
-
|
|
5593
|
+
source_default.gray(
|
|
2391
5594
|
JSON.stringify(result.json, null, 2).split("\n").map((l) => ` ${l}`).join("\n")
|
|
2392
5595
|
)
|
|
2393
5596
|
);
|
|
2394
5597
|
} else if (result.bodyText) {
|
|
2395
|
-
console.log(
|
|
5598
|
+
console.log(source_default.bold("\n Body:"));
|
|
2396
5599
|
const preview = result.bodyText.length > 500 ? result.bodyText.slice(0, 500) + "..." : result.bodyText;
|
|
2397
|
-
console.log(
|
|
5600
|
+
console.log(source_default.gray(` ${preview}`));
|
|
2398
5601
|
}
|
|
2399
5602
|
console.log();
|
|
2400
5603
|
if (result.status >= 200 && result.status < 300) {
|
|
2401
|
-
console.log(
|
|
5604
|
+
console.log(source_default.green("\u2713 Replay completed successfully\n"));
|
|
2402
5605
|
} else {
|
|
2403
5606
|
console.log(
|
|
2404
|
-
|
|
5607
|
+
source_default.yellow(`\u26A0 Replay completed with status ${result.status}
|
|
2405
5608
|
`)
|
|
2406
5609
|
);
|
|
2407
5610
|
}
|
|
2408
5611
|
} catch (error) {
|
|
2409
5612
|
spinner.fail("Replay failed");
|
|
2410
|
-
console.error(
|
|
5613
|
+
console.error(source_default.red(`
|
|
2411
5614
|
\u274C ${error.message}
|
|
2412
5615
|
`));
|
|
2413
5616
|
process.exitCode = 1;
|
|
@@ -2417,7 +5620,6 @@ var replay = new import_commander5.Command().name("replay").argument("[captureId
|
|
|
2417
5620
|
|
|
2418
5621
|
// src/commands/dashboard.ts
|
|
2419
5622
|
var import_commander6 = require("commander");
|
|
2420
|
-
var import_chalk6 = __toESM(require("chalk"), 1);
|
|
2421
5623
|
|
|
2422
5624
|
// src/core/dashboard-server.ts
|
|
2423
5625
|
var import_express2 = __toESM(require("express"), 1);
|
|
@@ -2425,7 +5627,6 @@ var import_http2 = require("http");
|
|
|
2425
5627
|
var import_ws2 = require("ws");
|
|
2426
5628
|
var import_path4 = __toESM(require("path"), 1);
|
|
2427
5629
|
var import_fs4 = require("fs");
|
|
2428
|
-
var import_url = require("url");
|
|
2429
5630
|
|
|
2430
5631
|
// src/core/dashboard-api.ts
|
|
2431
5632
|
var import_express = __toESM(require("express"), 1);
|
|
@@ -2440,6 +5641,7 @@ function getSecretEnvVarName2(provider) {
|
|
|
2440
5641
|
shopify: "SHOPIFY_WEBHOOK_SECRET",
|
|
2441
5642
|
twilio: "TWILIO_WEBHOOK_SECRET",
|
|
2442
5643
|
ragie: "RAGIE_WEBHOOK_SECRET",
|
|
5644
|
+
recall: "RECALL_WEBHOOK_SECRET",
|
|
2443
5645
|
slack: "SLACK_WEBHOOK_SECRET",
|
|
2444
5646
|
linear: "LINEAR_WEBHOOK_SECRET",
|
|
2445
5647
|
clerk: "CLERK_WEBHOOK_SECRET",
|
|
@@ -2779,7 +5981,6 @@ function createDashboardApiRouter(options = {}) {
|
|
|
2779
5981
|
}
|
|
2780
5982
|
|
|
2781
5983
|
// src/core/dashboard-server.ts
|
|
2782
|
-
var import_meta = {};
|
|
2783
5984
|
function isStandaloneBinary() {
|
|
2784
5985
|
if (typeof STANDALONE_BINARY !== "undefined" && STANDALONE_BINARY) {
|
|
2785
5986
|
return true;
|
|
@@ -2863,17 +6064,32 @@ function createEmbeddedDashboardMiddleware() {
|
|
|
2863
6064
|
};
|
|
2864
6065
|
return { staticMiddleware, spaFallback };
|
|
2865
6066
|
}
|
|
2866
|
-
function resolveDashboardDistDir(runtimeDir) {
|
|
6067
|
+
function resolveDashboardDistDir(runtimeDir, options = {}) {
|
|
6068
|
+
const runtimePackageRoot = findCliPackageRoot(runtimeDir);
|
|
6069
|
+
const includePackageRootDistCandidate = runtimePackageRoot !== void 0 && runtimePackageRoot === runtimeDir;
|
|
2867
6070
|
const candidates = [
|
|
6071
|
+
// Package root fallback -> dist/dashboard (only when runtimeDir is package root)
|
|
6072
|
+
...includePackageRootDistCandidate ? [import_path4.default.resolve(runtimeDir, "dist", "dashboard")] : [],
|
|
2868
6073
|
// Bundled CLI: dist/index.js -> dist/dashboard
|
|
2869
6074
|
import_path4.default.resolve(runtimeDir, "dashboard"),
|
|
2870
6075
|
// Legacy/unbundled: dist/core -> dist/dashboard
|
|
2871
6076
|
import_path4.default.resolve(runtimeDir, "..", "dashboard"),
|
|
6077
|
+
// Dev from src -> dist/dashboard
|
|
6078
|
+
import_path4.default.resolve(runtimeDir, "..", "dist", "dashboard"),
|
|
2872
6079
|
// Dev from src/core -> dist/dashboard
|
|
2873
6080
|
import_path4.default.resolve(runtimeDir, "..", "..", "dist", "dashboard"),
|
|
6081
|
+
// Dev from package root -> apps/dashboard/dist
|
|
6082
|
+
import_path4.default.resolve(runtimeDir, "..", "dashboard", "dist"),
|
|
6083
|
+
// Dev from src -> apps/dashboard/dist
|
|
6084
|
+
import_path4.default.resolve(runtimeDir, "..", "..", "dashboard", "dist"),
|
|
2874
6085
|
// Dev from src/core -> apps/dashboard/dist
|
|
2875
6086
|
import_path4.default.resolve(runtimeDir, "..", "..", "..", "dashboard", "dist")
|
|
2876
6087
|
];
|
|
6088
|
+
if (options.verbose) {
|
|
6089
|
+
console.debug(
|
|
6090
|
+
`[dashboard] dist resolution candidates: ${candidates.join(", ")}`
|
|
6091
|
+
);
|
|
6092
|
+
}
|
|
2877
6093
|
for (const distDir of candidates) {
|
|
2878
6094
|
const indexHtml = import_path4.default.join(distDir, "index.html");
|
|
2879
6095
|
if ((0, import_fs4.existsSync)(indexHtml)) {
|
|
@@ -2921,11 +6137,8 @@ async function startDashboardServer(options = {}) {
|
|
|
2921
6137
|
app.use(staticMiddleware);
|
|
2922
6138
|
app.get("*", spaFallback);
|
|
2923
6139
|
} else {
|
|
2924
|
-
const runtimeDir =
|
|
2925
|
-
|
|
2926
|
-
__dirname
|
|
2927
|
-
) : import_path4.default.dirname((0, import_url.fileURLToPath)(import_meta.url));
|
|
2928
|
-
const { distDir: dashboardDistDir, indexHtml: dashboardIndexHtml } = resolveDashboardDistDir(runtimeDir);
|
|
6140
|
+
const runtimeDir = resolveRuntimeDir();
|
|
6141
|
+
const { distDir: dashboardDistDir, indexHtml: dashboardIndexHtml } = resolveDashboardDistDir(runtimeDir, { verbose: options.verbose });
|
|
2929
6142
|
app.use(import_express2.default.static(dashboardDistDir));
|
|
2930
6143
|
app.get("*", (req, res, next) => {
|
|
2931
6144
|
if (req.path.startsWith("/api") || req.path === "/health") return next();
|
|
@@ -2998,83 +6211,80 @@ async function startDashboardServer(options = {}) {
|
|
|
2998
6211
|
}
|
|
2999
6212
|
|
|
3000
6213
|
// src/commands/dashboard.ts
|
|
3001
|
-
var dashboard = new import_commander6.Command().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(
|
|
3002
|
-
|
|
3003
|
-
|
|
3004
|
-
|
|
3005
|
-
|
|
3006
|
-
|
|
3007
|
-
|
|
3008
|
-
|
|
6214
|
+
var dashboard = new import_commander6.Command().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(
|
|
6215
|
+
async (options) => {
|
|
6216
|
+
const port = Number.parseInt(String(options.port), 10);
|
|
6217
|
+
if (!Number.isFinite(port) || port < 0 || port > 65535) {
|
|
6218
|
+
console.error(source_default.red("Invalid port number"));
|
|
6219
|
+
process.exitCode = 1;
|
|
6220
|
+
return;
|
|
6221
|
+
}
|
|
3009
6222
|
const capturePort = Number.parseInt(String(options.capturePort), 10);
|
|
3010
6223
|
if (!Number.isFinite(capturePort) || capturePort < 0 || capturePort > 65535) {
|
|
3011
|
-
console.error(
|
|
6224
|
+
console.error(source_default.red("Invalid capture port number"));
|
|
3012
6225
|
process.exitCode = 1;
|
|
3013
6226
|
return;
|
|
3014
6227
|
}
|
|
3015
|
-
|
|
3016
|
-
|
|
3017
|
-
|
|
3018
|
-
|
|
3019
|
-
|
|
3020
|
-
|
|
3021
|
-
|
|
3022
|
-
|
|
3023
|
-
|
|
3024
|
-
|
|
3025
|
-
|
|
3026
|
-
|
|
3027
|
-
|
|
3028
|
-
|
|
3029
|
-
|
|
3030
|
-
|
|
3031
|
-
if (capture2) {
|
|
3032
|
-
console.log();
|
|
3033
|
-
console.log(import_chalk6.default.bold("\u{1F3A3} Capture Server"));
|
|
3034
|
-
console.log(import_chalk6.default.gray(` Capture: ${capture2.url}`));
|
|
6228
|
+
try {
|
|
6229
|
+
const verbose = Boolean(options.verbose || options.debug);
|
|
6230
|
+
const { url, server, capture: capture2 } = await startDashboardServer({
|
|
6231
|
+
host: options.host,
|
|
6232
|
+
port,
|
|
6233
|
+
captureHost: options.captureHost,
|
|
6234
|
+
capturePort,
|
|
6235
|
+
startCapture: options.capture !== false,
|
|
6236
|
+
capturesDir: options.capturesDir,
|
|
6237
|
+
templatesBaseDir: options.templatesDir,
|
|
6238
|
+
verbose
|
|
6239
|
+
});
|
|
6240
|
+
console.log(source_default.bold("\n\u{1F9ED} Dashboard Server\n"));
|
|
6241
|
+
console.log(source_default.gray(` Dashboard: ${url}/`));
|
|
6242
|
+
console.log(source_default.gray(` Health: ${url}/health`));
|
|
6243
|
+
console.log(source_default.gray(` API Base: ${url}/api`));
|
|
3035
6244
|
console.log(
|
|
3036
|
-
|
|
3037
|
-
` Tip: Send webhooks to any path, e.g. ${capture2.url}/webhooks/github`
|
|
3038
|
-
)
|
|
6245
|
+
source_default.gray(` WebSocket: ${url.replace("http://", "ws://")}/ws`)
|
|
3039
6246
|
);
|
|
3040
|
-
}
|
|
3041
|
-
console.log();
|
|
3042
|
-
const shutdown = async () => {
|
|
3043
6247
|
if (capture2) {
|
|
3044
|
-
|
|
6248
|
+
console.log();
|
|
6249
|
+
console.log(source_default.bold("\u{1F3A3} Capture Server"));
|
|
6250
|
+
console.log(source_default.gray(` Capture: ${capture2.url}`));
|
|
6251
|
+
console.log(
|
|
6252
|
+
source_default.gray(
|
|
6253
|
+
` Tip: Send webhooks to any path, e.g. ${capture2.url}/webhooks/github`
|
|
6254
|
+
)
|
|
6255
|
+
);
|
|
3045
6256
|
}
|
|
3046
|
-
|
|
3047
|
-
|
|
3048
|
-
|
|
3049
|
-
|
|
3050
|
-
|
|
3051
|
-
|
|
3052
|
-
|
|
3053
|
-
|
|
3054
|
-
|
|
3055
|
-
)
|
|
3056
|
-
)
|
|
3057
|
-
|
|
6257
|
+
console.log();
|
|
6258
|
+
const shutdown = async () => {
|
|
6259
|
+
if (capture2) {
|
|
6260
|
+
await capture2.server.stop();
|
|
6261
|
+
}
|
|
6262
|
+
await new Promise((resolve) => server.close(() => resolve()));
|
|
6263
|
+
process.exit(0);
|
|
6264
|
+
};
|
|
6265
|
+
process.on("SIGINT", shutdown);
|
|
6266
|
+
process.on("SIGTERM", shutdown);
|
|
6267
|
+
} catch (error) {
|
|
6268
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
6269
|
+
console.error(
|
|
6270
|
+
source_default.red(`Failed to start dashboard server: ${message}`)
|
|
6271
|
+
);
|
|
6272
|
+
process.exitCode = 1;
|
|
6273
|
+
}
|
|
3058
6274
|
}
|
|
3059
|
-
|
|
6275
|
+
);
|
|
3060
6276
|
|
|
3061
6277
|
// src/index.ts
|
|
3062
|
-
var import_meta2 = {};
|
|
3063
6278
|
function getVersion() {
|
|
3064
6279
|
if (typeof CLI_VERSION !== "undefined") {
|
|
3065
6280
|
return CLI_VERSION;
|
|
3066
6281
|
}
|
|
3067
|
-
|
|
3068
|
-
|
|
3069
|
-
|
|
3070
|
-
|
|
3071
|
-
const packageJson = JSON.parse(
|
|
3072
|
-
(0, import_node_fs.readFileSync)(packageJsonPath, { encoding: "utf8" })
|
|
3073
|
-
);
|
|
3074
|
-
return packageJson.version;
|
|
3075
|
-
} catch {
|
|
3076
|
-
return "0.0.0-unknown";
|
|
6282
|
+
const runtimeDir = resolveRuntimeDir();
|
|
6283
|
+
const runtimeVersion = resolveRuntimePackageVersion(runtimeDir);
|
|
6284
|
+
if (runtimeVersion) {
|
|
6285
|
+
return runtimeVersion;
|
|
3077
6286
|
}
|
|
6287
|
+
return "0.0.0-unknown";
|
|
3078
6288
|
}
|
|
3079
6289
|
var program = new import_commander7.Command().name("better-webhook").description(
|
|
3080
6290
|
"Modern CLI for developing, capturing, and replaying webhooks locally"
|