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