create-mastra 0.1.0-alpha.35 → 0.1.0-alpha.38

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/dist/index.js DELETED
@@ -1,1543 +0,0 @@
1
- #! /usr/bin/env node
2
- import { Command } from 'commander';
3
- import { randomUUID } from 'node:crypto';
4
- import * as fs3__default from 'node:fs';
5
- import fs3__default__default, { existsSync, readFileSync, writeFileSync } from 'node:fs';
6
- import os from 'node:os';
7
- import path, { dirname } from 'node:path';
8
- import { PostHog } from 'posthog-node';
9
- import { fileURLToPath } from 'node:url';
10
- import h, { stdin, stdout } from 'node:process';
11
- import * as f from 'node:readline';
12
- import f__default from 'node:readline';
13
- import tty, { WriteStream } from 'node:tty';
14
- import child_process from 'node:child_process';
15
- import util from 'node:util';
16
- import prettier from 'prettier';
17
- import fsExtra3 from 'fs-extra/esm';
18
- import fs4 from 'node:fs/promises';
19
- import { execa } from 'execa';
20
- import pino from 'pino';
21
- import pretty from 'pino-pretty';
22
- import { Transform } from 'node:stream';
23
- import fsExtra from 'fs-extra';
24
-
25
- var __filename = fileURLToPath(import.meta.url);
26
- var __dirname = path.dirname(__filename);
27
- var PosthogAnalytics = class {
28
- sessionId;
29
- client;
30
- distinctId;
31
- version;
32
- constructor({
33
- version,
34
- apiKey,
35
- host = "https://app.posthog.com"
36
- }) {
37
- this.version = version;
38
- const cliConfigPath = path.join(__dirname, "mastra-cli.json");
39
- if (existsSync(cliConfigPath)) {
40
- try {
41
- const { distinctId, sessionId } = JSON.parse(readFileSync(cliConfigPath, "utf-8"));
42
- this.distinctId = distinctId;
43
- this.sessionId = sessionId;
44
- } catch (e) {
45
- this.sessionId = randomUUID();
46
- this.distinctId = this.getDistinctId();
47
- }
48
- this.writeCliConfig({
49
- distinctId: this.distinctId,
50
- sessionId: this.sessionId
51
- });
52
- } else {
53
- this.sessionId = randomUUID();
54
- this.distinctId = this.getDistinctId();
55
- this.writeCliConfig({
56
- distinctId: this.distinctId,
57
- sessionId: this.sessionId
58
- });
59
- }
60
- if (this.isTelemetryEnabled()) {
61
- this.initializePostHog(apiKey, host);
62
- }
63
- }
64
- writeCliConfig({ distinctId, sessionId }) {
65
- try {
66
- writeFileSync(path.join(__dirname, "mastra-cli.json"), JSON.stringify({ distinctId, sessionId }));
67
- } catch (e) {
68
- }
69
- }
70
- initializePostHog(apiKey, host) {
71
- this.client = new PostHog(apiKey, {
72
- host,
73
- flushAt: 1,
74
- flushInterval: 0
75
- });
76
- this.captureSessionStart();
77
- process.on("exit", () => {
78
- this.client?.flush();
79
- });
80
- }
81
- isTelemetryEnabled() {
82
- if (process.env.NO_MASTRA_TELEMETRY) {
83
- return false;
84
- }
85
- return true;
86
- }
87
- getDistinctId() {
88
- const machineId = os.hostname();
89
- return `mastra-${machineId}`;
90
- }
91
- getSystemProperties() {
92
- return {
93
- os: process.platform,
94
- os_version: os.release(),
95
- node_version: process.version,
96
- platform: process.arch,
97
- session_id: this.sessionId,
98
- cli_version: this.version || "unknown",
99
- machine_id: os.hostname()
100
- };
101
- }
102
- captureSessionStart() {
103
- if (!this.client) {
104
- return;
105
- }
106
- this.client.capture({
107
- distinctId: this.distinctId,
108
- event: "cli_session_start",
109
- properties: {
110
- ...this.getSystemProperties()
111
- }
112
- });
113
- }
114
- trackCommand(options) {
115
- try {
116
- if (!this.client) {
117
- return;
118
- }
119
- const commandData = {
120
- command: options.command,
121
- status: options.status || "success"
122
- };
123
- if (options.args) {
124
- commandData.args = options.args;
125
- }
126
- if (options.durationMs) {
127
- commandData.durationMs = options.durationMs;
128
- }
129
- if (options.error) {
130
- commandData.error = options.error;
131
- }
132
- this.client.capture({
133
- distinctId: this.distinctId,
134
- event: "cli_command",
135
- properties: {
136
- ...this.getSystemProperties(),
137
- ...commandData
138
- }
139
- });
140
- } catch (e) {
141
- }
142
- }
143
- // Helper method to wrap command execution with timing
144
- async trackCommandExecution({
145
- command,
146
- args,
147
- execution
148
- }) {
149
- const startTime = process.hrtime();
150
- try {
151
- const result = await execution();
152
- const [seconds, nanoseconds] = process.hrtime(startTime);
153
- const durationMs = seconds * 1e3 + nanoseconds / 1e6;
154
- this.trackCommand({
155
- command,
156
- args,
157
- durationMs,
158
- status: "success"
159
- });
160
- return result;
161
- } catch (error) {
162
- const [seconds, nanoseconds] = process.hrtime(startTime);
163
- const durationMs = seconds * 1e3 + nanoseconds / 1e6;
164
- this.trackCommand({
165
- command,
166
- args,
167
- durationMs,
168
- status: "error",
169
- error: error instanceof Error ? error.message : String(error)
170
- });
171
- throw error;
172
- }
173
- }
174
- // Ensure PostHog client is shutdown properly
175
- async shutdown() {
176
- if (!this.client) {
177
- return;
178
- }
179
- try {
180
- await this.client.shutdown();
181
- } catch (e) {
182
- }
183
- }
184
- };
185
-
186
- function getDefaultExportFromCjs (x) {
187
- return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
188
- }
189
-
190
- var src;
191
- var hasRequiredSrc;
192
-
193
- function requireSrc () {
194
- if (hasRequiredSrc) return src;
195
- hasRequiredSrc = 1;
196
-
197
- const ESC = '\x1B';
198
- const CSI = `${ESC}[`;
199
- const beep = '\u0007';
200
-
201
- const cursor = {
202
- to(x, y) {
203
- if (!y) return `${CSI}${x + 1}G`;
204
- return `${CSI}${y + 1};${x + 1}H`;
205
- },
206
- move(x, y) {
207
- let ret = '';
208
-
209
- if (x < 0) ret += `${CSI}${-x}D`;
210
- else if (x > 0) ret += `${CSI}${x}C`;
211
-
212
- if (y < 0) ret += `${CSI}${-y}A`;
213
- else if (y > 0) ret += `${CSI}${y}B`;
214
-
215
- return ret;
216
- },
217
- up: (count = 1) => `${CSI}${count}A`,
218
- down: (count = 1) => `${CSI}${count}B`,
219
- forward: (count = 1) => `${CSI}${count}C`,
220
- backward: (count = 1) => `${CSI}${count}D`,
221
- nextLine: (count = 1) => `${CSI}E`.repeat(count),
222
- prevLine: (count = 1) => `${CSI}F`.repeat(count),
223
- left: `${CSI}G`,
224
- hide: `${CSI}?25l`,
225
- show: `${CSI}?25h`,
226
- save: `${ESC}7`,
227
- restore: `${ESC}8`
228
- };
229
-
230
- const scroll = {
231
- up: (count = 1) => `${CSI}S`.repeat(count),
232
- down: (count = 1) => `${CSI}T`.repeat(count)
233
- };
234
-
235
- const erase = {
236
- screen: `${CSI}2J`,
237
- up: (count = 1) => `${CSI}1J`.repeat(count),
238
- down: (count = 1) => `${CSI}J`.repeat(count),
239
- line: `${CSI}2K`,
240
- lineEnd: `${CSI}K`,
241
- lineStart: `${CSI}1K`,
242
- lines(count) {
243
- let clear = '';
244
- for (let i = 0; i < count; i++)
245
- clear += this.line + (i < count - 1 ? cursor.up() : '');
246
- if (count)
247
- clear += cursor.left;
248
- return clear;
249
- }
250
- };
251
-
252
- src = { cursor, scroll, erase, beep };
253
- return src;
254
- }
255
-
256
- var srcExports = requireSrc();
257
-
258
- var picocolors = {exports: {}};
259
-
260
- var hasRequiredPicocolors;
261
-
262
- function requirePicocolors () {
263
- if (hasRequiredPicocolors) return picocolors.exports;
264
- hasRequiredPicocolors = 1;
265
- let p = process || {}, argv = p.argv || [], env = p.env || {};
266
- let isColorSupported =
267
- !(!!env.NO_COLOR || argv.includes("--no-color")) &&
268
- (!!env.FORCE_COLOR || argv.includes("--color") || p.platform === "win32" || ((p.stdout || {}).isTTY && env.TERM !== "dumb") || !!env.CI);
269
-
270
- let formatter = (open, close, replace = open) =>
271
- input => {
272
- let string = "" + input, index = string.indexOf(close, open.length);
273
- return ~index ? open + replaceClose(string, close, replace, index) + close : open + string + close
274
- };
275
-
276
- let replaceClose = (string, close, replace, index) => {
277
- let result = "", cursor = 0;
278
- do {
279
- result += string.substring(cursor, index) + replace;
280
- cursor = index + close.length;
281
- index = string.indexOf(close, cursor);
282
- } while (~index)
283
- return result + string.substring(cursor)
284
- };
285
-
286
- let createColors = (enabled = isColorSupported) => {
287
- let f = enabled ? formatter : () => String;
288
- return {
289
- isColorSupported: enabled,
290
- reset: f("\x1b[0m", "\x1b[0m"),
291
- bold: f("\x1b[1m", "\x1b[22m", "\x1b[22m\x1b[1m"),
292
- dim: f("\x1b[2m", "\x1b[22m", "\x1b[22m\x1b[2m"),
293
- italic: f("\x1b[3m", "\x1b[23m"),
294
- underline: f("\x1b[4m", "\x1b[24m"),
295
- inverse: f("\x1b[7m", "\x1b[27m"),
296
- hidden: f("\x1b[8m", "\x1b[28m"),
297
- strikethrough: f("\x1b[9m", "\x1b[29m"),
298
-
299
- black: f("\x1b[30m", "\x1b[39m"),
300
- red: f("\x1b[31m", "\x1b[39m"),
301
- green: f("\x1b[32m", "\x1b[39m"),
302
- yellow: f("\x1b[33m", "\x1b[39m"),
303
- blue: f("\x1b[34m", "\x1b[39m"),
304
- magenta: f("\x1b[35m", "\x1b[39m"),
305
- cyan: f("\x1b[36m", "\x1b[39m"),
306
- white: f("\x1b[37m", "\x1b[39m"),
307
- gray: f("\x1b[90m", "\x1b[39m"),
308
-
309
- bgBlack: f("\x1b[40m", "\x1b[49m"),
310
- bgRed: f("\x1b[41m", "\x1b[49m"),
311
- bgGreen: f("\x1b[42m", "\x1b[49m"),
312
- bgYellow: f("\x1b[43m", "\x1b[49m"),
313
- bgBlue: f("\x1b[44m", "\x1b[49m"),
314
- bgMagenta: f("\x1b[45m", "\x1b[49m"),
315
- bgCyan: f("\x1b[46m", "\x1b[49m"),
316
- bgWhite: f("\x1b[47m", "\x1b[49m"),
317
-
318
- blackBright: f("\x1b[90m", "\x1b[39m"),
319
- redBright: f("\x1b[91m", "\x1b[39m"),
320
- greenBright: f("\x1b[92m", "\x1b[39m"),
321
- yellowBright: f("\x1b[93m", "\x1b[39m"),
322
- blueBright: f("\x1b[94m", "\x1b[39m"),
323
- magentaBright: f("\x1b[95m", "\x1b[39m"),
324
- cyanBright: f("\x1b[96m", "\x1b[39m"),
325
- whiteBright: f("\x1b[97m", "\x1b[39m"),
326
-
327
- bgBlackBright: f("\x1b[100m", "\x1b[49m"),
328
- bgRedBright: f("\x1b[101m", "\x1b[49m"),
329
- bgGreenBright: f("\x1b[102m", "\x1b[49m"),
330
- bgYellowBright: f("\x1b[103m", "\x1b[49m"),
331
- bgBlueBright: f("\x1b[104m", "\x1b[49m"),
332
- bgMagentaBright: f("\x1b[105m", "\x1b[49m"),
333
- bgCyanBright: f("\x1b[106m", "\x1b[49m"),
334
- bgWhiteBright: f("\x1b[107m", "\x1b[49m"),
335
- }
336
- };
337
-
338
- picocolors.exports = createColors();
339
- picocolors.exports.createColors = createColors;
340
- return picocolors.exports;
341
- }
342
-
343
- var picocolorsExports = /*@__PURE__*/ requirePicocolors();
344
- var color2 = /*@__PURE__*/getDefaultExportFromCjs(picocolorsExports);
345
-
346
- function q({onlyFirst:e=false}={}){const F=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?(?:\\u0007|\\u001B\\u005C|\\u009C))","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))"].join("|");return new RegExp(F,e?undefined:"g")}const J=q();function S(e){if(typeof e!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof e}\``);return e.replace(J,"")}function T$1(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var j$1={exports:{}};(function(e){var u={};e.exports=u,u.eastAsianWidth=function(t){var s=t.charCodeAt(0),C=t.length==2?t.charCodeAt(1):0,D=s;return 55296<=s&&s<=56319&&56320<=C&&C<=57343&&(s&=1023,C&=1023,D=s<<10|C,D+=65536),D==12288||65281<=D&&D<=65376||65504<=D&&D<=65510?"F":D==8361||65377<=D&&D<=65470||65474<=D&&D<=65479||65482<=D&&D<=65487||65490<=D&&D<=65495||65498<=D&&D<=65500||65512<=D&&D<=65518?"H":4352<=D&&D<=4447||4515<=D&&D<=4519||4602<=D&&D<=4607||9001<=D&&D<=9002||11904<=D&&D<=11929||11931<=D&&D<=12019||12032<=D&&D<=12245||12272<=D&&D<=12283||12289<=D&&D<=12350||12353<=D&&D<=12438||12441<=D&&D<=12543||12549<=D&&D<=12589||12593<=D&&D<=12686||12688<=D&&D<=12730||12736<=D&&D<=12771||12784<=D&&D<=12830||12832<=D&&D<=12871||12880<=D&&D<=13054||13056<=D&&D<=19903||19968<=D&&D<=42124||42128<=D&&D<=42182||43360<=D&&D<=43388||44032<=D&&D<=55203||55216<=D&&D<=55238||55243<=D&&D<=55291||63744<=D&&D<=64255||65040<=D&&D<=65049||65072<=D&&D<=65106||65108<=D&&D<=65126||65128<=D&&D<=65131||110592<=D&&D<=110593||127488<=D&&D<=127490||127504<=D&&D<=127546||127552<=D&&D<=127560||127568<=D&&D<=127569||131072<=D&&D<=194367||177984<=D&&D<=196605||196608<=D&&D<=262141?"W":32<=D&&D<=126||162<=D&&D<=163||165<=D&&D<=166||D==172||D==175||10214<=D&&D<=10221||10629<=D&&D<=10630?"Na":D==161||D==164||167<=D&&D<=168||D==170||173<=D&&D<=174||176<=D&&D<=180||182<=D&&D<=186||188<=D&&D<=191||D==198||D==208||215<=D&&D<=216||222<=D&&D<=225||D==230||232<=D&&D<=234||236<=D&&D<=237||D==240||242<=D&&D<=243||247<=D&&D<=250||D==252||D==254||D==257||D==273||D==275||D==283||294<=D&&D<=295||D==299||305<=D&&D<=307||D==312||319<=D&&D<=322||D==324||328<=D&&D<=331||D==333||338<=D&&D<=339||358<=D&&D<=359||D==363||D==462||D==464||D==466||D==468||D==470||D==472||D==474||D==476||D==593||D==609||D==708||D==711||713<=D&&D<=715||D==717||D==720||728<=D&&D<=731||D==733||D==735||768<=D&&D<=879||913<=D&&D<=929||931<=D&&D<=937||945<=D&&D<=961||963<=D&&D<=969||D==1025||1040<=D&&D<=1103||D==1105||D==8208||8211<=D&&D<=8214||8216<=D&&D<=8217||8220<=D&&D<=8221||8224<=D&&D<=8226||8228<=D&&D<=8231||D==8240||8242<=D&&D<=8243||D==8245||D==8251||D==8254||D==8308||D==8319||8321<=D&&D<=8324||D==8364||D==8451||D==8453||D==8457||D==8467||D==8470||8481<=D&&D<=8482||D==8486||D==8491||8531<=D&&D<=8532||8539<=D&&D<=8542||8544<=D&&D<=8555||8560<=D&&D<=8569||D==8585||8592<=D&&D<=8601||8632<=D&&D<=8633||D==8658||D==8660||D==8679||D==8704||8706<=D&&D<=8707||8711<=D&&D<=8712||D==8715||D==8719||D==8721||D==8725||D==8730||8733<=D&&D<=8736||D==8739||D==8741||8743<=D&&D<=8748||D==8750||8756<=D&&D<=8759||8764<=D&&D<=8765||D==8776||D==8780||D==8786||8800<=D&&D<=8801||8804<=D&&D<=8807||8810<=D&&D<=8811||8814<=D&&D<=8815||8834<=D&&D<=8835||8838<=D&&D<=8839||D==8853||D==8857||D==8869||D==8895||D==8978||9312<=D&&D<=9449||9451<=D&&D<=9547||9552<=D&&D<=9587||9600<=D&&D<=9615||9618<=D&&D<=9621||9632<=D&&D<=9633||9635<=D&&D<=9641||9650<=D&&D<=9651||9654<=D&&D<=9655||9660<=D&&D<=9661||9664<=D&&D<=9665||9670<=D&&D<=9672||D==9675||9678<=D&&D<=9681||9698<=D&&D<=9701||D==9711||9733<=D&&D<=9734||D==9737||9742<=D&&D<=9743||9748<=D&&D<=9749||D==9756||D==9758||D==9792||D==9794||9824<=D&&D<=9825||9827<=D&&D<=9829||9831<=D&&D<=9834||9836<=D&&D<=9837||D==9839||9886<=D&&D<=9887||9918<=D&&D<=9919||9924<=D&&D<=9933||9935<=D&&D<=9953||D==9955||9960<=D&&D<=9983||D==10045||D==10071||10102<=D&&D<=10111||11093<=D&&D<=11097||12872<=D&&D<=12879||57344<=D&&D<=63743||65024<=D&&D<=65039||D==65533||127232<=D&&D<=127242||127248<=D&&D<=127277||127280<=D&&D<=127337||127344<=D&&D<=127386||917760<=D&&D<=917999||983040<=D&&D<=1048573||1048576<=D&&D<=1114109?"A":"N"},u.characterLength=function(t){var s=this.eastAsianWidth(t);return s=="F"||s=="W"||s=="A"?2:1};function F(t){return t.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]|[^\uD800-\uDFFF]/g)||[]}u.length=function(t){for(var s=F(t),C=0,D=0;D<s.length;D++)C=C+this.characterLength(s[D]);return C},u.slice=function(t,s,C){textLen=u.length(t),s=s||0,C=C||1,s<0&&(s=textLen+s),C<0&&(C=textLen+C);for(var D="",i=0,n=F(t),E=0;E<n.length;E++){var h=n[E],o=u.length(h);if(i>=s-(o==2?1:0))if(i+o<=C)D+=h;else break;i+=o;}return D};})(j$1);var Q$1=j$1.exports;const X=T$1(Q$1);var DD=function(){return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|(?:\uD83E\uDDD1\uD83C\uDFFF\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFC-\uDFFF])|\uD83D\uDC68(?:\uD83C\uDFFB(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|[\u2695\u2696\u2708]\uFE0F|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))?|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC)?|(?:\uD83D\uDC69(?:\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC69(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83E\uDDD1(?:\u200D(?:\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDE36\u200D\uD83C\uDF2B|\uD83C\uDFF3\uFE0F\u200D\u26A7|\uD83D\uDC3B\u200D\u2744|(?:(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\uD83C\uDFF4\u200D\u2620|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299]|\uD83C[\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]|\uD83D[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3])\uFE0F|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDE35\u200D\uD83D\uDCAB|\uD83D\uDE2E\u200D\uD83D\uDCA8|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83E\uDDD1(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83D\uDC69(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC08\u200D\u2B1B|\u2764\uFE0F\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\uD83D\uDC41\uFE0F|\uD83C\uDFF3\uFE0F|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF4|(?:[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270C\u270D]|\uD83D[\uDD74\uDD90])(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC08\uDC15\uDC3B\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE2E\uDE35\uDE36\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5]|\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD]|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0D\uDD0E\uDD10-\uDD17\uDD1D\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78\uDD7A-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCB\uDDD0\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6]|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5-\uDED7\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDD77\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g};const uD=T$1(DD);function A(e,u={}){if(typeof e!="string"||e.length===0||(u={ambiguousIsNarrow:true,...u},e=S(e),e.length===0))return 0;e=e.replace(uD()," ");const F=u.ambiguousIsNarrow?1:2;let t=0;for(const s of e){const C=s.codePointAt(0);if(C<=31||C>=127&&C<=159||C>=768&&C<=879)continue;switch(X.eastAsianWidth(s)){case "F":case "W":t+=2;break;case "A":t+=F;break;default:t+=1;}}return t}const d=10,M$1=(e=0)=>u=>`\x1B[${u+e}m`,P$1=(e=0)=>u=>`\x1B[${38+e};5;${u}m`,W=(e=0)=>(u,F,t)=>`\x1B[${38+e};2;${u};${F};${t}m`,r={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};Object.keys(r.modifier);const FD=Object.keys(r.color),eD=Object.keys(r.bgColor);[...FD,...eD];function tD(){const e=new Map;for(const[u,F]of Object.entries(r)){for(const[t,s]of Object.entries(F))r[t]={open:`\x1B[${s[0]}m`,close:`\x1B[${s[1]}m`},F[t]=r[t],e.set(s[0],s[1]);Object.defineProperty(r,u,{value:F,enumerable:false});}return Object.defineProperty(r,"codes",{value:e,enumerable:false}),r.color.close="\x1B[39m",r.bgColor.close="\x1B[49m",r.color.ansi=M$1(),r.color.ansi256=P$1(),r.color.ansi16m=W(),r.bgColor.ansi=M$1(d),r.bgColor.ansi256=P$1(d),r.bgColor.ansi16m=W(d),Object.defineProperties(r,{rgbToAnsi256:{value:(u,F,t)=>u===F&&F===t?u<8?16:u>248?231:Math.round((u-8)/247*24)+232:16+36*Math.round(u/255*5)+6*Math.round(F/255*5)+Math.round(t/255*5),enumerable:false},hexToRgb:{value:u=>{const F=/[a-f\d]{6}|[a-f\d]{3}/i.exec(u.toString(16));if(!F)return [0,0,0];let[t]=F;t.length===3&&(t=[...t].map(C=>C+C).join(""));const s=Number.parseInt(t,16);return [s>>16&255,s>>8&255,s&255]},enumerable:false},hexToAnsi256:{value:u=>r.rgbToAnsi256(...r.hexToRgb(u)),enumerable:false},ansi256ToAnsi:{value:u=>{if(u<8)return 30+u;if(u<16)return 90+(u-8);let F,t,s;if(u>=232)F=((u-232)*10+8)/255,t=F,s=F;else {u-=16;const i=u%36;F=Math.floor(u/36)/5,t=Math.floor(i/6)/5,s=i%6/5;}const C=Math.max(F,t,s)*2;if(C===0)return 30;let D=30+(Math.round(s)<<2|Math.round(t)<<1|Math.round(F));return C===2&&(D+=60),D},enumerable:false},rgbToAnsi:{value:(u,F,t)=>r.ansi256ToAnsi(r.rgbToAnsi256(u,F,t)),enumerable:false},hexToAnsi:{value:u=>r.ansi256ToAnsi(r.hexToAnsi256(u)),enumerable:false}}),r}const sD=tD(),g=new Set(["\x1B","\x9B"]),CD=39,b$1="\x07",O="[",iD="]",I$1="m",w=`${iD}8;;`,N=e=>`${g.values().next().value}${O}${e}${I$1}`,L=e=>`${g.values().next().value}${w}${e}${b$1}`,rD=e=>e.split(" ").map(u=>A(u)),y$1=(e,u,F)=>{const t=[...u];let s=false,C=false,D=A(S(e[e.length-1]));for(const[i,n]of t.entries()){const E=A(n);if(D+E<=F?e[e.length-1]+=n:(e.push(n),D=0),g.has(n)&&(s=true,C=t.slice(i+1).join("").startsWith(w)),s){C?n===b$1&&(s=false,C=false):n===I$1&&(s=false);continue}D+=E,D===F&&i<t.length-1&&(e.push(""),D=0);}!D&&e[e.length-1].length>0&&e.length>1&&(e[e.length-2]+=e.pop());},ED=e=>{const u=e.split(" ");let F=u.length;for(;F>0&&!(A(u[F-1])>0);)F--;return F===u.length?e:u.slice(0,F).join(" ")+u.slice(F).join("")},oD=(e,u,F={})=>{if(F.trim!==false&&e.trim()==="")return "";let t="",s,C;const D=rD(e);let i=[""];for(const[E,h]of e.split(" ").entries()){F.trim!==false&&(i[i.length-1]=i[i.length-1].trimStart());let o=A(i[i.length-1]);if(E!==0&&(o>=u&&(F.wordWrap===false||F.trim===false)&&(i.push(""),o=0),(o>0||F.trim===false)&&(i[i.length-1]+=" ",o++)),F.hard&&D[E]>u){const B=u-o,p=1+Math.floor((D[E]-B-1)/u);Math.floor((D[E]-1)/u)<p&&i.push(""),y$1(i,h,u);continue}if(o+D[E]>u&&o>0&&D[E]>0){if(F.wordWrap===false&&o<u){y$1(i,h,u);continue}i.push("");}if(o+D[E]>u&&F.wordWrap===false){y$1(i,h,u);continue}i[i.length-1]+=h;}F.trim!==false&&(i=i.map(E=>ED(E)));const n=[...i.join(`
347
- `)];for(const[E,h]of n.entries()){if(t+=h,g.has(h)){const{groups:B}=new RegExp(`(?:\\${O}(?<code>\\d+)m|\\${w}(?<uri>.*)${b$1})`).exec(n.slice(E).join(""))||{groups:{}};if(B.code!==undefined){const p=Number.parseFloat(B.code);s=p===CD?undefined:p;}else B.uri!==undefined&&(C=B.uri.length===0?undefined:B.uri);}const o=sD.codes.get(Number(s));n[E+1]===`
348
- `?(C&&(t+=L("")),s&&o&&(t+=N(o))):h===`
349
- `&&(s&&o&&(t+=N(s)),C&&(t+=L(C)));}return t};function R$1(e,u,F){return String(e).normalize().replace(/\r\n/g,`
350
- `).split(`
351
- `).map(t=>oD(t,u,F)).join(`
352
- `)}var nD=Object.defineProperty,aD=(e,u,F)=>u in e?nD(e,u,{enumerable:true,configurable:true,writable:true,value:F}):e[u]=F,a$1=(e,u,F)=>(aD(e,typeof u!="symbol"?u+"":u,F),F);function hD(e,u){if(e===u)return;const F=e.split(`
353
- `),t=u.split(`
354
- `),s=[];for(let C=0;C<Math.max(F.length,t.length);C++)F[C]!==t[C]&&s.push(C);return s}const V$1=Symbol("clack:cancel");function lD(e){return e===V$1}function v(e,u){e.isTTY&&e.setRawMode(u);}const z=new Map([["k","up"],["j","down"],["h","left"],["l","right"]]),xD=new Set(["up","down","left","right","space","enter"]);class x{constructor({render:u,input:F=stdin,output:t=stdout,...s},C=true){a$1(this,"input"),a$1(this,"output"),a$1(this,"rl"),a$1(this,"opts"),a$1(this,"_track",false),a$1(this,"_render"),a$1(this,"_cursor",0),a$1(this,"state","initial"),a$1(this,"value"),a$1(this,"error",""),a$1(this,"subscribers",new Map),a$1(this,"_prevFrame",""),this.opts=s,this.onKeypress=this.onKeypress.bind(this),this.close=this.close.bind(this),this.render=this.render.bind(this),this._render=u.bind(this),this._track=C,this.input=F,this.output=t;}prompt(){const u=new WriteStream(0);return u._write=(F,t,s)=>{this._track&&(this.value=this.rl.line.replace(/\t/g,""),this._cursor=this.rl.cursor,this.emit("value",this.value)),s();},this.input.pipe(u),this.rl=f__default.createInterface({input:this.input,output:u,tabSize:2,prompt:"",escapeCodeTimeout:50}),f__default.emitKeypressEvents(this.input,this.rl),this.rl.prompt(),this.opts.initialValue!==undefined&&this._track&&this.rl.write(this.opts.initialValue),this.input.on("keypress",this.onKeypress),v(this.input,true),this.output.on("resize",this.render),this.render(),new Promise((F,t)=>{this.once("submit",()=>{this.output.write(srcExports.cursor.show),this.output.off("resize",this.render),v(this.input,false),F(this.value);}),this.once("cancel",()=>{this.output.write(srcExports.cursor.show),this.output.off("resize",this.render),v(this.input,false),F(V$1);});})}on(u,F){const t=this.subscribers.get(u)??[];t.push({cb:F}),this.subscribers.set(u,t);}once(u,F){const t=this.subscribers.get(u)??[];t.push({cb:F,once:true}),this.subscribers.set(u,t);}emit(u,...F){const t=this.subscribers.get(u)??[],s=[];for(const C of t)C.cb(...F),C.once&&s.push(()=>t.splice(t.indexOf(C),1));for(const C of s)C();}unsubscribe(){this.subscribers.clear();}onKeypress(u,F){if(this.state==="error"&&(this.state="active"),F?.name&&!this._track&&z.has(F.name)&&this.emit("cursor",z.get(F.name)),F?.name&&xD.has(F.name)&&this.emit("cursor",F.name),u&&(u.toLowerCase()==="y"||u.toLowerCase()==="n")&&this.emit("confirm",u.toLowerCase()==="y"),u===" "&&this.opts.placeholder&&(this.value||(this.rl.write(this.opts.placeholder),this.emit("value",this.opts.placeholder))),u&&this.emit("key",u.toLowerCase()),F?.name==="return"){if(this.opts.validate){const t=this.opts.validate(this.value);t&&(this.error=t,this.state="error",this.rl.write(this.value));}this.state!=="error"&&(this.state="submit");}u===""&&(this.state="cancel"),(this.state==="submit"||this.state==="cancel")&&this.emit("finalize"),this.render(),(this.state==="submit"||this.state==="cancel")&&this.close();}close(){this.input.unpipe(),this.input.removeListener("keypress",this.onKeypress),this.output.write(`
355
- `),v(this.input,false),this.rl.close(),this.emit(`${this.state}`,this.value),this.unsubscribe();}restoreCursor(){const u=R$1(this._prevFrame,process.stdout.columns,{hard:true}).split(`
356
- `).length-1;this.output.write(srcExports.cursor.move(-999,u*-1));}render(){const u=R$1(this._render(this)??"",process.stdout.columns,{hard:true});if(u!==this._prevFrame){if(this.state==="initial")this.output.write(srcExports.cursor.hide);else {const F=hD(this._prevFrame,u);if(this.restoreCursor(),F&&F?.length===1){const t=F[0];this.output.write(srcExports.cursor.move(0,t)),this.output.write(srcExports.erase.lines(1));const s=u.split(`
357
- `);this.output.write(s[t]),this._prevFrame=u,this.output.write(srcExports.cursor.move(0,s.length-t-1));return}else if(F&&F?.length>1){const t=F[0];this.output.write(srcExports.cursor.move(0,t)),this.output.write(srcExports.erase.down());const s=u.split(`
358
- `).slice(t);this.output.write(s.join(`
359
- `)),this._prevFrame=u;return}this.output.write(srcExports.erase.down());}this.output.write(u),this.state==="initial"&&(this.state="active"),this._prevFrame=u;}}}class BD extends x{get cursor(){return this.value?0:1}get _value(){return this.cursor===0}constructor(u){super(u,false),this.value=!!u.initialValue,this.on("value",()=>{this.value=this._value;}),this.on("confirm",F=>{this.output.write(srcExports.cursor.move(0,-1)),this.value=F,this.state="submit",this.close();}),this.on("cursor",()=>{this.value=!this.value;});}}var fD=Object.defineProperty,gD=(e,u,F)=>u in e?fD(e,u,{enumerable:true,configurable:true,writable:true,value:F}):e[u]=F,K$1=(e,u,F)=>(gD(e,typeof u!="symbol"?u+"":u,F),F);let vD=class extends x{constructor(u){super(u,false),K$1(this,"options"),K$1(this,"cursor",0),this.options=u.options,this.value=[...u.initialValues??[]],this.cursor=Math.max(this.options.findIndex(({value:F})=>F===u.cursorAt),0),this.on("key",F=>{F==="a"&&this.toggleAll();}),this.on("cursor",F=>{switch(F){case "left":case "up":this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;break;case "down":case "right":this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;break;case "space":this.toggleValue();break}});}get _value(){return this.options[this.cursor].value}toggleAll(){const u=this.value.length===this.options.length;this.value=u?[]:this.options.map(F=>F.value);}toggleValue(){const u=this.value.includes(this._value);this.value=u?this.value.filter(F=>F!==this._value):[...this.value,this._value];}};var wD=Object.defineProperty,yD=(e,u,F)=>u in e?wD(e,u,{enumerable:true,configurable:true,writable:true,value:F}):e[u]=F,Z=(e,u,F)=>(yD(e,typeof u!="symbol"?u+"":u,F),F);let $D=class extends x{constructor(u){super(u,false),Z(this,"options"),Z(this,"cursor",0),this.options=u.options,this.cursor=this.options.findIndex(({value:F})=>F===u.initialValue),this.cursor===-1&&(this.cursor=0),this.changeValue(),this.on("cursor",F=>{switch(F){case "left":case "up":this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;break;case "down":case "right":this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;break}this.changeValue();});}get _value(){return this.options[this.cursor]}changeValue(){this.value=this._value.value;}};var TD=Object.defineProperty,jD=(e,u,F)=>u in e?TD(e,u,{enumerable:true,configurable:true,writable:true,value:F}):e[u]=F,MD=(e,u,F)=>(jD(e,u+"",F),F);class PD extends x{constructor(u){super(u),MD(this,"valueWithCursor",""),this.on("finalize",()=>{this.value||(this.value=u.defaultValue),this.valueWithCursor=this.value;}),this.on("value",()=>{if(this.cursor>=this.value.length)this.valueWithCursor=`${this.value}${color2.inverse(color2.hidden("_"))}`;else {const F=this.value.slice(0,this.cursor),t=this.value.slice(this.cursor);this.valueWithCursor=`${F}${color2.inverse(t[0])}${t.slice(1)}`;}});}get cursor(){return this._cursor}}const WD=globalThis.process.platform.startsWith("win");function OD({input:e=stdin,output:u=stdout,overwrite:F=true,hideCursor:t=true}={}){const s=f.createInterface({input:e,output:u,prompt:"",tabSize:1});f.emitKeypressEvents(e,s),e.isTTY&&e.setRawMode(true);const C=(D,{name:i})=>{if(String(D)===""){t&&u.write(srcExports.cursor.show),process.exit(0);return}if(!F)return;let n=i==="return"?0:-1,E=i==="return"?-1:0;f.moveCursor(u,n,E,()=>{f.clearLine(u,1,()=>{e.once("keypress",C);});});};return t&&u.write(srcExports.cursor.hide),e.once("keypress",C),()=>{e.off("keypress",C),t&&u.write(srcExports.cursor.show),e.isTTY&&!WD&&e.setRawMode(false),s.terminal=false,s.close();}}
360
-
361
- function K(){return h.platform!=="win32"?h.env.TERM!=="linux":!!h.env.CI||!!h.env.WT_SESSION||!!h.env.TERMINUS_SUBLIME||h.env.ConEmuTask==="{cmd::Cmder}"||h.env.TERM_PROGRAM==="Terminus-Sublime"||h.env.TERM_PROGRAM==="vscode"||h.env.TERM==="xterm-256color"||h.env.TERM==="alacritty"||h.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}const C=K(),u=(s,n)=>C?s:n,Y=u("\u25C6","*"),P=u("\u25A0","x"),V=u("\u25B2","x"),M=u("\u25C7","o"),Q=u("\u250C","T"),a=u("\u2502","|"),$=u("\u2514","\u2014"),I=u("\u25CF",">"),T=u("\u25CB"," "),j=u("\u25FB","[\u2022]"),b=u("\u25FC","[+]"),B=u("\u25FB","[ ]"),G=u("\u2500","-"),H=u("\u256E","+"),ee=u("\u251C","+"),te=u("\u256F","+"),y=s=>{switch(s){case "initial":case "active":return color2.cyan(Y);case "cancel":return color2.red(P);case "error":return color2.yellow(V);case "submit":return color2.green(M)}},E=s=>{const{cursor:n,options:t,style:i}=s,r=s.maxItems??1/0,o=Math.max(process.stdout.rows-4,0),c=Math.min(o,Math.max(r,5));let l=0;n>=l+c-3?l=Math.max(Math.min(n-c+3,t.length-c),0):n<l+2&&(l=Math.max(n-2,0));const d=c<t.length&&l>0,p=c<t.length&&l+c<t.length;return t.slice(l,l+c).map((S,f,x)=>{const g=f===0&&d,m=f===x.length-1&&p;return g||m?color2.dim("..."):i(S,f+l===n)})},ae=s=>new PD({validate:s.validate,placeholder:s.placeholder,defaultValue:s.defaultValue,initialValue:s.initialValue,render(){const n=`${color2.gray(a)}
362
- ${y(this.state)} ${s.message}
363
- `,t=s.placeholder?color2.inverse(s.placeholder[0])+color2.dim(s.placeholder.slice(1)):color2.inverse(color2.hidden("_")),i=this.value?this.valueWithCursor:t;switch(this.state){case "error":return `${n.trim()}
364
- ${color2.yellow(a)} ${i}
365
- ${color2.yellow($)} ${color2.yellow(this.error)}
366
- `;case "submit":return `${n}${color2.gray(a)} ${color2.dim(this.value||s.placeholder)}`;case "cancel":return `${n}${color2.gray(a)} ${color2.strikethrough(color2.dim(this.value??""))}${this.value?.trim()?`
367
- `+color2.gray(a):""}`;default:return `${n}${color2.cyan(a)} ${i}
368
- ${color2.cyan($)}
369
- `}}}).prompt(),ce=s=>{const n=s.active??"Yes",t=s.inactive??"No";return new BD({active:n,inactive:t,initialValue:s.initialValue??true,render(){const i=`${color2.gray(a)}
370
- ${y(this.state)} ${s.message}
371
- `,r=this.value?n:t;switch(this.state){case "submit":return `${i}${color2.gray(a)} ${color2.dim(r)}`;case "cancel":return `${i}${color2.gray(a)} ${color2.strikethrough(color2.dim(r))}
372
- ${color2.gray(a)}`;default:return `${i}${color2.cyan(a)} ${this.value?`${color2.green(I)} ${n}`:`${color2.dim(T)} ${color2.dim(n)}`} ${color2.dim("/")} ${this.value?`${color2.dim(T)} ${color2.dim(t)}`:`${color2.green(I)} ${t}`}
373
- ${color2.cyan($)}
374
- `}}}).prompt()},le=s=>{const n=(t,i)=>{const r=t.label??String(t.value);switch(i){case "selected":return `${color2.dim(r)}`;case "active":return `${color2.green(I)} ${r} ${t.hint?color2.dim(`(${t.hint})`):""}`;case "cancelled":return `${color2.strikethrough(color2.dim(r))}`;default:return `${color2.dim(T)} ${color2.dim(r)}`}};return new $D({options:s.options,initialValue:s.initialValue,render(){const t=`${color2.gray(a)}
375
- ${y(this.state)} ${s.message}
376
- `;switch(this.state){case "submit":return `${t}${color2.gray(a)} ${n(this.options[this.cursor],"selected")}`;case "cancel":return `${t}${color2.gray(a)} ${n(this.options[this.cursor],"cancelled")}
377
- ${color2.gray(a)}`;default:return `${t}${color2.cyan(a)} ${E({cursor:this.cursor,options:this.options,maxItems:s.maxItems,style:(i,r)=>n(i,r?"active":"inactive")}).join(`
378
- ${color2.cyan(a)} `)}
379
- ${color2.cyan($)}
380
- `}}}).prompt()},$e=s=>{const n=(t,i)=>{const r=t.label??String(t.value);return i==="active"?`${color2.cyan(j)} ${r} ${t.hint?color2.dim(`(${t.hint})`):""}`:i==="selected"?`${color2.green(b)} ${color2.dim(r)}`:i==="cancelled"?`${color2.strikethrough(color2.dim(r))}`:i==="active-selected"?`${color2.green(b)} ${r} ${t.hint?color2.dim(`(${t.hint})`):""}`:i==="submitted"?`${color2.dim(r)}`:`${color2.dim(B)} ${color2.dim(r)}`};return new vD({options:s.options,initialValues:s.initialValues,required:s.required??true,cursorAt:s.cursorAt,validate(t){if(this.required&&t.length===0)return `Please select at least one option.
381
- ${color2.reset(color2.dim(`Press ${color2.gray(color2.bgWhite(color2.inverse(" space ")))} to select, ${color2.gray(color2.bgWhite(color2.inverse(" enter ")))} to submit`))}`},render(){let t=`${color2.gray(a)}
382
- ${y(this.state)} ${s.message}
383
- `;const i=(r,o)=>{const c=this.value.includes(r.value);return o&&c?n(r,"active-selected"):c?n(r,"selected"):n(r,o?"active":"inactive")};switch(this.state){case "submit":return `${t}${color2.gray(a)} ${this.options.filter(({value:r})=>this.value.includes(r)).map(r=>n(r,"submitted")).join(color2.dim(", "))||color2.dim("none")}`;case "cancel":{const r=this.options.filter(({value:o})=>this.value.includes(o)).map(o=>n(o,"cancelled")).join(color2.dim(", "));return `${t}${color2.gray(a)} ${r.trim()?`${r}
384
- ${color2.gray(a)}`:""}`}case "error":{const r=this.error.split(`
385
- `).map((o,c)=>c===0?`${color2.yellow($)} ${color2.yellow(o)}`:` ${o}`).join(`
386
- `);return t+color2.yellow(a)+" "+E({options:this.options,cursor:this.cursor,maxItems:s.maxItems,style:i}).join(`
387
- ${color2.yellow(a)} `)+`
388
- `+r+`
389
- `}default:return `${t}${color2.cyan(a)} ${E({options:this.options,cursor:this.cursor,maxItems:s.maxItems,style:i}).join(`
390
- ${color2.cyan(a)} `)}
391
- ${color2.cyan($)}
392
- `}}}).prompt()},R=s=>s.replace(ye(),""),me=(s="",n="")=>{const t=`
393
- ${s}
394
- `.split(`
395
- `),i=R(n).length,r=Math.max(t.reduce((c,l)=>(l=R(l),l.length>c?l.length:c),0),i)+2,o=t.map(c=>`${color2.gray(a)} ${color2.dim(c)}${" ".repeat(r-R(c).length)}${color2.gray(a)}`).join(`
396
- `);process.stdout.write(`${color2.gray(a)}
397
- ${color2.green(M)} ${color2.reset(n)} ${color2.gray(G.repeat(Math.max(r-i-1,1))+H)}
398
- ${o}
399
- ${color2.gray(ee+G.repeat(r+2)+te)}
400
- `);},he=(s="")=>{process.stdout.write(`${color2.gray($)} ${color2.red(s)}
401
-
402
- `);},pe=(s="")=>{process.stdout.write(`${color2.gray(Q)} ${s}
403
- `);},ge=(s="")=>{process.stdout.write(`${color2.gray(a)}
404
- ${color2.gray($)} ${s}
405
-
406
- `);},_=()=>{const s=C?["\u25D2","\u25D0","\u25D3","\u25D1"]:["\u2022","o","O","0"],n=C?80:120;let t,i,r=false,o="";const c=g=>{const m=g>1?"Something went wrong":"Canceled";r&&x(m,g);},l=()=>c(2),d=()=>c(1),p=()=>{process.on("uncaughtExceptionMonitor",l),process.on("unhandledRejection",l),process.on("SIGINT",d),process.on("SIGTERM",d),process.on("exit",c);},S=()=>{process.removeListener("uncaughtExceptionMonitor",l),process.removeListener("unhandledRejection",l),process.removeListener("SIGINT",d),process.removeListener("SIGTERM",d),process.removeListener("exit",c);},f=(g="")=>{r=true,t=OD(),o=g.replace(/\.+$/,""),process.stdout.write(`${color2.gray(a)}
407
- `);let m=0,w=0;p(),i=setInterval(()=>{const L=color2.magenta(s[m]),O=".".repeat(Math.floor(w)).slice(0,3);process.stdout.write(srcExports.cursor.move(-999,0)),process.stdout.write(srcExports.erase.down(1)),process.stdout.write(`${L} ${o}${O}`),m=m+1<s.length?m+1:0,w=w<s.length?w+.125:0;},n);},x=(g="",m=0)=>{o=g??o,r=false,clearInterval(i);const w=m===0?color2.green(M):m===1?color2.red(P):color2.red(V);process.stdout.write(srcExports.cursor.move(-999,0)),process.stdout.write(srcExports.erase.down(1)),process.stdout.write(`${w} ${o}
408
- `),S(),t();};return {start:f,stop:x,message:(g="")=>{o=g??o;}}};function ye(){const s=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))"].join("|");return new RegExp(s,"g")}const ve=async(s,n)=>{const t={},i=Object.keys(s);for(const r of i){const o=s[r],c=await o({results:t})?.catch(l=>{throw l});if(typeof n?.onCancel=="function"&&lD(c)){t[r]="canceled",n.onCancel({results:t});continue}t[r]=c;}return t};
409
-
410
- // eslint-disable-next-line no-warning-comments
411
- // TODO: Use a better method when it's added to Node.js (https://github.com/nodejs/node/pull/40240)
412
- // Lots of optionals here to support Deno.
413
- const hasColors = tty?.WriteStream?.prototype?.hasColors?.() ?? false;
414
-
415
- const format = (open, close) => {
416
- if (!hasColors) {
417
- return input => input;
418
- }
419
-
420
- const openCode = `\u001B[${open}m`;
421
- const closeCode = `\u001B[${close}m`;
422
-
423
- return input => {
424
- const string = input + ''; // eslint-disable-line no-implicit-coercion -- This is faster.
425
- let index = string.indexOf(closeCode);
426
-
427
- if (index === -1) {
428
- // Note: Intentionally not using string interpolation for performance reasons.
429
- return openCode + string + closeCode;
430
- }
431
-
432
- // Handle nested colors.
433
-
434
- // We could have done this, but it's too slow (as of Node.js 22).
435
- // return openCode + string.replaceAll(closeCode, openCode) + closeCode;
436
-
437
- let result = openCode;
438
- let lastIndex = 0;
439
-
440
- while (index !== -1) {
441
- result += string.slice(lastIndex, index) + openCode;
442
- lastIndex = index + closeCode.length;
443
- index = string.indexOf(closeCode, lastIndex);
444
- }
445
-
446
- result += string.slice(lastIndex) + closeCode;
447
-
448
- return result;
449
- };
450
- };
451
-
452
- const reset = format(0, 0);
453
- const bold = format(1, 22);
454
- const dim = format(2, 22);
455
- const italic = format(3, 23);
456
- const underline = format(4, 24);
457
- const overline = format(53, 55);
458
- const inverse = format(7, 27);
459
- const hidden = format(8, 28);
460
- const strikethrough = format(9, 29);
461
-
462
- const black = format(30, 39);
463
- const red = format(31, 39);
464
- const green = format(32, 39);
465
- const yellow = format(33, 39);
466
- const blue = format(34, 39);
467
- const magenta = format(35, 39);
468
- const cyan = format(36, 39);
469
- const white = format(37, 39);
470
- const gray = format(90, 39);
471
-
472
- const bgBlack = format(40, 49);
473
- const bgRed = format(41, 49);
474
- const bgGreen = format(42, 49);
475
- const bgYellow = format(43, 49);
476
- const bgBlue = format(44, 49);
477
- const bgMagenta = format(45, 49);
478
- const bgCyan = format(46, 49);
479
- const bgWhite = format(47, 49);
480
- const bgGray = format(100, 49);
481
-
482
- const redBright = format(91, 39);
483
- const greenBright = format(92, 39);
484
- const yellowBright = format(93, 39);
485
- const blueBright = format(94, 39);
486
- const magentaBright = format(95, 39);
487
- const cyanBright = format(96, 39);
488
- const whiteBright = format(97, 39);
489
-
490
- const bgRedBright = format(101, 49);
491
- const bgGreenBright = format(102, 49);
492
- const bgYellowBright = format(103, 49);
493
- const bgBlueBright = format(104, 49);
494
- const bgMagentaBright = format(105, 49);
495
- const bgCyanBright = format(106, 49);
496
- const bgWhiteBright = format(107, 49);
497
-
498
- var yoctocolors = /*#__PURE__*/Object.freeze({
499
- __proto__: null,
500
- bgBlack: bgBlack,
501
- bgBlue: bgBlue,
502
- bgBlueBright: bgBlueBright,
503
- bgCyan: bgCyan,
504
- bgCyanBright: bgCyanBright,
505
- bgGray: bgGray,
506
- bgGreen: bgGreen,
507
- bgGreenBright: bgGreenBright,
508
- bgMagenta: bgMagenta,
509
- bgMagentaBright: bgMagentaBright,
510
- bgRed: bgRed,
511
- bgRedBright: bgRedBright,
512
- bgWhite: bgWhite,
513
- bgWhiteBright: bgWhiteBright,
514
- bgYellow: bgYellow,
515
- bgYellowBright: bgYellowBright,
516
- black: black,
517
- blue: blue,
518
- blueBright: blueBright,
519
- bold: bold,
520
- cyan: cyan,
521
- cyanBright: cyanBright,
522
- dim: dim,
523
- gray: gray,
524
- green: green,
525
- greenBright: greenBright,
526
- hidden: hidden,
527
- inverse: inverse,
528
- italic: italic,
529
- magenta: magenta,
530
- magentaBright: magentaBright,
531
- overline: overline,
532
- red: red,
533
- redBright: redBright,
534
- reset: reset,
535
- strikethrough: strikethrough,
536
- underline: underline,
537
- white: white,
538
- whiteBright: whiteBright,
539
- yellow: yellow,
540
- yellowBright: yellowBright
541
- });
542
-
543
- const isUnicodeSupported = h.platform !== 'win32' || Boolean(h.env.WT_SESSION);
544
-
545
- const isInteractive = stream => Boolean(
546
- stream.isTTY
547
- && h.env.TERM !== 'dumb'
548
- && !('CI' in h.env),
549
- );
550
-
551
- const infoSymbol = blue(isUnicodeSupported ? 'ℹ' : 'i');
552
- const successSymbol = green(isUnicodeSupported ? '✔' : '√');
553
- const warningSymbol = yellow(isUnicodeSupported ? '⚠' : '‼');
554
- const errorSymbol = red(isUnicodeSupported ? '✖️' : '×');
555
-
556
- const defaultSpinner = {
557
- frames: isUnicodeSupported
558
- ? [
559
- '⠋',
560
- '⠙',
561
- '⠹',
562
- '⠸',
563
- '⠼',
564
- '⠴',
565
- '⠦',
566
- '⠧',
567
- '⠇',
568
- '⠏',
569
- ]
570
- : [
571
- '-',
572
- '\\',
573
- '|',
574
- '/',
575
- ],
576
- interval: 80,
577
- };
578
-
579
- class YoctoSpinner {
580
- #frames;
581
- #interval;
582
- #currentFrame = -1;
583
- #timer;
584
- #text;
585
- #stream;
586
- #color;
587
- #lines = 0;
588
- #exitHandlerBound;
589
- #isInteractive;
590
- #lastSpinnerFrameTime = 0;
591
-
592
- constructor(options = {}) {
593
- const spinner = options.spinner ?? defaultSpinner;
594
- this.#frames = spinner.frames;
595
- this.#interval = spinner.interval;
596
- this.#text = options.text ?? '';
597
- this.#stream = options.stream ?? h.stderr;
598
- this.#color = options.color ?? 'cyan';
599
- this.#isInteractive = isInteractive(this.#stream);
600
- this.#exitHandlerBound = this.#exitHandler.bind(this);
601
- }
602
-
603
- start(text) {
604
- if (text) {
605
- this.#text = text;
606
- }
607
-
608
- if (this.isSpinning) {
609
- return this;
610
- }
611
-
612
- this.#hideCursor();
613
- this.#render();
614
- this.#subscribeToProcessEvents();
615
-
616
- this.#timer = setInterval(() => {
617
- this.#render();
618
- }, this.#interval);
619
-
620
- return this;
621
- }
622
-
623
- stop(finalText) {
624
- if (!this.isSpinning) {
625
- return this;
626
- }
627
-
628
- clearInterval(this.#timer);
629
- this.#timer = undefined;
630
- this.#showCursor();
631
- this.clear();
632
- this.#unsubscribeFromProcessEvents();
633
-
634
- if (finalText) {
635
- this.#stream.write(`${finalText}\n`);
636
- }
637
-
638
- return this;
639
- }
640
-
641
- #symbolStop(symbol, text) {
642
- return this.stop(`${symbol} ${text ?? this.#text}`);
643
- }
644
-
645
- success(text) {
646
- return this.#symbolStop(successSymbol, text);
647
- }
648
-
649
- error(text) {
650
- return this.#symbolStop(errorSymbol, text);
651
- }
652
-
653
- warning(text) {
654
- return this.#symbolStop(warningSymbol, text);
655
- }
656
-
657
- info(text) {
658
- return this.#symbolStop(infoSymbol, text);
659
- }
660
-
661
- get isSpinning() {
662
- return this.#timer !== undefined;
663
- }
664
-
665
- get text() {
666
- return this.#text;
667
- }
668
-
669
- set text(value = '') {
670
- this.#text = value;
671
- this.#render();
672
- }
673
-
674
- get color() {
675
- return this.#color;
676
- }
677
-
678
- set color(value) {
679
- this.#color = value;
680
- this.#render();
681
- }
682
-
683
- clear() {
684
- if (!this.#isInteractive) {
685
- return this;
686
- }
687
-
688
- this.#stream.cursorTo(0);
689
-
690
- for (let index = 0; index < this.#lines; index++) {
691
- if (index > 0) {
692
- this.#stream.moveCursor(0, -1);
693
- }
694
-
695
- this.#stream.clearLine(1);
696
- }
697
-
698
- this.#lines = 0;
699
-
700
- return this;
701
- }
702
-
703
- #render() {
704
- // Ensure we only update the spinner frame at the wanted interval,
705
- // even if the frame method is called more often.
706
- const now = Date.now();
707
- if (this.#currentFrame === -1 || now - this.#lastSpinnerFrameTime >= this.#interval) {
708
- this.#currentFrame = ++this.#currentFrame % this.#frames.length;
709
- this.#lastSpinnerFrameTime = now;
710
- }
711
-
712
- const applyColor = yoctocolors[this.#color] ?? cyan;
713
- const frame = this.#frames[this.#currentFrame];
714
- let string = `${applyColor(frame)} ${this.#text}`;
715
-
716
- if (!this.#isInteractive) {
717
- string += '\n';
718
- }
719
-
720
- this.clear();
721
- this.#write(string);
722
-
723
- if (this.#isInteractive) {
724
- this.#lines = this.#lineCount(string);
725
- }
726
- }
727
-
728
- #write(text) {
729
- this.#stream.write(text);
730
- }
731
-
732
- #lineCount(text) {
733
- const width = this.#stream.columns ?? 80;
734
- const lines = text.split('\n');
735
-
736
- let lineCount = 0;
737
- for (const line of lines) {
738
- lineCount += Math.max(1, Math.ceil(line.length / width));
739
- }
740
-
741
- return lineCount;
742
- }
743
-
744
- #hideCursor() {
745
- if (this.#isInteractive) {
746
- this.#write('\u001B[?25l');
747
- }
748
- }
749
-
750
- #showCursor() {
751
- if (this.#isInteractive) {
752
- this.#write('\u001B[?25h');
753
- }
754
- }
755
-
756
- #subscribeToProcessEvents() {
757
- h.once('SIGINT', this.#exitHandlerBound);
758
- h.once('SIGTERM', this.#exitHandlerBound);
759
- }
760
-
761
- #unsubscribeFromProcessEvents() {
762
- h.off('SIGINT', this.#exitHandlerBound);
763
- h.off('SIGTERM', this.#exitHandlerBound);
764
- }
765
-
766
- #exitHandler(signal) {
767
- if (this.isSpinning) {
768
- this.stop();
769
- }
770
-
771
- // SIGINT: 128 + 2
772
- // SIGTERM: 128 + 15
773
- const exitCode = signal === 'SIGINT' ? 130 : (signal === 'SIGTERM' ? 143 : 1);
774
- h.exit(exitCode);
775
- }
776
- }
777
-
778
- function yoctoSpinner(options) {
779
- return new YoctoSpinner(options);
780
- }
781
-
782
- var __defProp = Object.defineProperty;
783
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
784
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
785
- var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
786
-
787
- var LogLevel = {
788
- DEBUG: "debug",
789
- INFO: "info",
790
- WARN: "warn",
791
- ERROR: "error",
792
- NONE: "silent"
793
- };
794
- var _LoggerTransport = class _LoggerTransport2 extends Transform {
795
- async getLogsByRunId({ runId }) {
796
- console.log(runId);
797
- return [];
798
- }
799
- async getLogs() {
800
- return [];
801
- }
802
- };
803
- __name(_LoggerTransport, "LoggerTransport");
804
- var _Logger = class _Logger2 {
805
- constructor(options = {}) {
806
- __publicField(this, "logger");
807
- __publicField(this, "transports");
808
- this.transports = options.transports || {};
809
- const transportsAry = Object.entries(this.transports);
810
- this.logger = pino({
811
- name: options.name || "app",
812
- level: options.level || LogLevel.INFO
813
- }, options.overrideDefaultTransports ? options?.transports?.default : transportsAry.length === 0 ? pretty({
814
- colorize: true,
815
- levelFirst: true,
816
- ignore: "pid,hostname",
817
- colorizeObjects: true,
818
- translateTime: "SYS:standard",
819
- singleLine: false
820
- }) : pino.multistream([
821
- ...transportsAry.map(([_, transport]) => ({
822
- stream: transport,
823
- level: options.level || LogLevel.INFO
824
- })),
825
- {
826
- stream: pretty({
827
- colorize: true,
828
- levelFirst: true,
829
- ignore: "pid,hostname",
830
- colorizeObjects: true,
831
- translateTime: "SYS:standard",
832
- singleLine: false
833
- }),
834
- level: options.level || LogLevel.INFO
835
- }
836
- ]));
837
- }
838
- debug(message, args = {}) {
839
- this.logger.debug(args, message);
840
- }
841
- info(message, args = {}) {
842
- this.logger.info(args, message);
843
- }
844
- warn(message, args = {}) {
845
- this.logger.warn(args, message);
846
- }
847
- error(message, args = {}) {
848
- this.logger.error(args, message);
849
- }
850
- // Stream creation for process output handling
851
- createStream() {
852
- return new Transform({
853
- transform: /* @__PURE__ */ __name((chunk, _encoding, callback) => {
854
- const line = chunk.toString().trim();
855
- if (line) {
856
- this.info(line);
857
- }
858
- callback(null, chunk);
859
- }, "transform")
860
- });
861
- }
862
- async getLogs(transportId) {
863
- if (!transportId || !this.transports[transportId]) {
864
- return [];
865
- }
866
- return this.transports[transportId].getLogs();
867
- }
868
- async getLogsByRunId({ runId, transportId }) {
869
- return this.transports[transportId]?.getLogsByRunId({
870
- runId
871
- });
872
- }
873
- };
874
- __name(_Logger, "Logger");
875
- var Logger = _Logger;
876
- function createLogger(options) {
877
- return new Logger(options);
878
- }
879
- __name(createLogger, "createLogger");
880
- var _MultiLogger = class _MultiLogger2 {
881
- constructor(loggers) {
882
- __publicField(this, "loggers");
883
- this.loggers = loggers;
884
- }
885
- debug(message, ...args) {
886
- this.loggers.forEach((logger) => logger.debug(message, ...args));
887
- }
888
- info(message, ...args) {
889
- this.loggers.forEach((logger) => logger.info(message, ...args));
890
- }
891
- warn(message, ...args) {
892
- this.loggers.forEach((logger) => logger.warn(message, ...args));
893
- }
894
- error(message, ...args) {
895
- this.loggers.forEach((logger) => logger.error(message, ...args));
896
- }
897
- };
898
- __name(_MultiLogger, "MultiLogger");
899
- var MultiLogger = _MultiLogger;
900
- function combineLoggers(loggers) {
901
- return new MultiLogger(loggers);
902
- }
903
- __name(combineLoggers, "combineLoggers");
904
-
905
- var DepsService = class {
906
- packageManager;
907
- constructor() {
908
- this.packageManager = this.getPackageManager();
909
- }
910
- findLockFile(dir) {
911
- const lockFiles = ["pnpm-lock.yaml", "package-lock.json", "yarn.lock", "bun.lock"];
912
- for (const file of lockFiles) {
913
- if (fs3__default__default.existsSync(path.join(dir, file))) {
914
- return file;
915
- }
916
- }
917
- const parentDir = path.resolve(dir, "..");
918
- if (parentDir !== dir) {
919
- return this.findLockFile(parentDir);
920
- }
921
- return null;
922
- }
923
- getPackageManager() {
924
- const lockFile = this.findLockFile(process.cwd());
925
- switch (lockFile) {
926
- case "pnpm-lock.yaml":
927
- return "pnpm";
928
- case "package-lock.json":
929
- return "npm";
930
- case "yarn.lock":
931
- return "yarn";
932
- case "bun.lock":
933
- return "bun";
934
- default:
935
- return "npm";
936
- }
937
- }
938
- async installPackages(packages) {
939
- let runCommand = this.packageManager;
940
- if (this.packageManager === "npm") {
941
- runCommand = `${this.packageManager} i`;
942
- } else {
943
- runCommand = `${this.packageManager} add`;
944
- }
945
- const packageList = packages.join(" ");
946
- return execa(`${runCommand} ${packageList}`, {
947
- all: true,
948
- shell: true,
949
- stdio: "inherit"
950
- });
951
- }
952
- async checkDependencies(dependencies) {
953
- try {
954
- const packageJsonPath = path.join(process.cwd(), "package.json");
955
- try {
956
- await fs4.access(packageJsonPath);
957
- } catch {
958
- return "No package.json file found in the current directory";
959
- }
960
- const packageJson = JSON.parse(await fs4.readFile(packageJsonPath, "utf-8"));
961
- for (const dependency of dependencies) {
962
- if (!packageJson.dependencies || !packageJson.dependencies[dependency]) {
963
- return `Please install ${dependency} before running this command (${this.packageManager} install ${dependency})`;
964
- }
965
- }
966
- return "ok";
967
- } catch (err) {
968
- console.error(err);
969
- return "Could not check dependencies";
970
- }
971
- }
972
- async getProjectName() {
973
- try {
974
- const packageJsonPath = path.join(process.cwd(), "package.json");
975
- const packageJson = await fs4.readFile(packageJsonPath, "utf-8");
976
- const pkg = JSON.parse(packageJson);
977
- return pkg.name;
978
- } catch (err) {
979
- throw err;
980
- }
981
- }
982
- async getPackageVersion() {
983
- const __filename = fileURLToPath(import.meta.url);
984
- const __dirname = dirname(__filename);
985
- const pkgJsonPath = path.join(__dirname, "..", "package.json");
986
- const content = await fsExtra3.readJSON(pkgJsonPath);
987
- return content.version;
988
- }
989
- async addScriptsToPackageJson(scripts) {
990
- const packageJson = JSON.parse(await fs4.readFile("package.json", "utf-8"));
991
- packageJson.scripts = {
992
- ...packageJson.scripts,
993
- ...scripts
994
- };
995
- await fs4.writeFile("package.json", JSON.stringify(packageJson, null, 2));
996
- }
997
- };
998
- var EnvService = class {
999
- };
1000
- var FileEnvService = class extends EnvService {
1001
- filePath;
1002
- constructor(filePath) {
1003
- super();
1004
- this.filePath = filePath;
1005
- }
1006
- readFile(filePath) {
1007
- return new Promise((resolve, reject) => {
1008
- fs3__default.readFile(filePath, "utf8", (err, data) => {
1009
- if (err) reject(err);
1010
- else resolve(data);
1011
- });
1012
- });
1013
- }
1014
- writeFile({ filePath, data }) {
1015
- return new Promise((resolve, reject) => {
1016
- fs3__default.writeFile(filePath, data, "utf8", (err) => {
1017
- if (err) reject(err);
1018
- else resolve();
1019
- });
1020
- });
1021
- }
1022
- async updateEnvData({
1023
- key,
1024
- value,
1025
- filePath = this.filePath,
1026
- data
1027
- }) {
1028
- const regex = new RegExp(`^${key}=.*$`, "m");
1029
- if (data.match(regex)) {
1030
- data = data.replace(regex, `${key}=${value}`);
1031
- } else {
1032
- data += `
1033
- ${key}=${value}`;
1034
- }
1035
- await this.writeFile({ filePath, data });
1036
- console.log(`${key} set to ${value} in ENV file.`);
1037
- return data;
1038
- }
1039
- async getEnvValue(key) {
1040
- try {
1041
- const data = await this.readFile(this.filePath);
1042
- const regex = new RegExp(`^${key}=(.*)$`, "m");
1043
- const match = data.match(regex);
1044
- return match?.[1] || null;
1045
- } catch (err) {
1046
- console.error(`Error reading ENV value: ${err}`);
1047
- return null;
1048
- }
1049
- }
1050
- async setEnvValue(key, value) {
1051
- try {
1052
- const data = await this.readFile(this.filePath);
1053
- await this.updateEnvData({ key, value, data });
1054
- } catch (err) {
1055
- console.error(`Error writing ENV value: ${err}`);
1056
- }
1057
- }
1058
- };
1059
- var FileService = class {
1060
- /**
1061
- *
1062
- * @param inputFile the file in the starter files directory to copy
1063
- * @param outputFilePath the destination path
1064
- * @param replaceIfExists flag to replace if it exists
1065
- * @returns
1066
- */
1067
- async copyStarterFile(inputFile, outputFilePath, replaceIfExists) {
1068
- const __filename = fileURLToPath(import.meta.url);
1069
- const __dirname = path.dirname(__filename);
1070
- const filePath = path.resolve(__dirname, "starter-files", inputFile);
1071
- const fileString = fs3__default__default.readFileSync(filePath, "utf8");
1072
- if (fs3__default__default.existsSync(outputFilePath) && !replaceIfExists) {
1073
- console.log(`${outputFilePath} already exists`);
1074
- return false;
1075
- }
1076
- await fsExtra3.outputFile(outputFilePath, fileString);
1077
- return true;
1078
- }
1079
- async setupEnvFile({ dbUrl }) {
1080
- const envPath = path.join(process.cwd(), ".env.development");
1081
- await fsExtra3.ensureFile(envPath);
1082
- const fileEnvService = new FileEnvService(envPath);
1083
- await fileEnvService.setEnvValue("DB_URL", dbUrl);
1084
- }
1085
- getFirstExistingFile(files) {
1086
- for (const f of files) {
1087
- if (fs3__default__default.existsSync(f)) {
1088
- return f;
1089
- }
1090
- }
1091
- throw new Error("Missing required file, checked the following paths: " + files.join(", "));
1092
- }
1093
- replaceValuesInFile({
1094
- filePath,
1095
- replacements
1096
- }) {
1097
- let fileContent = fs3__default__default.readFileSync(filePath, "utf8");
1098
- replacements.forEach(({ search, replace }) => {
1099
- fileContent = fileContent.replaceAll(search, replace);
1100
- });
1101
- fs3__default__default.writeFileSync(filePath, fileContent);
1102
- }
1103
- };
1104
- createLogger({
1105
- name: "Mastra CLI",
1106
- level: "debug"
1107
- });
1108
- var exec = util.promisify(child_process.exec);
1109
- var getAISDKPackage = (llmProvider) => {
1110
- switch (llmProvider) {
1111
- case "openai":
1112
- return "@ai-sdk/openai";
1113
- case "anthropic":
1114
- return "@ai-sdk/anthropic";
1115
- case "groq":
1116
- return "@ai-sdk/groq";
1117
- default:
1118
- return "@ai-sdk/openai";
1119
- }
1120
- };
1121
- async function writeAgentSample(llmProvider, destPath, addExampleTool) {
1122
- let providerImport = "";
1123
- let modelItem = "";
1124
- if (llmProvider === "openai") {
1125
- providerImport = `import { openai } from '${getAISDKPackage(llmProvider)}';`;
1126
- modelItem = `openai('gpt-4o')`;
1127
- } else if (llmProvider === "anthropic") {
1128
- providerImport = `import { anthropic } from '${getAISDKPackage(llmProvider)}';`;
1129
- modelItem = `anthropic('claude-3-5-sonnet-20241022')`;
1130
- } else if (llmProvider === "groq") {
1131
- providerImport = `import { groq } from '${getAISDKPackage(llmProvider)}';`;
1132
- modelItem = `groq('llama3-groq-70b-8192-tool-use-preview')`;
1133
- }
1134
- const instructions = `
1135
- You are a helpful weather assistant that provides accurate weather information.
1136
-
1137
- Your primary function is to help users get weather details for specific locations. When responding:
1138
- - Always ask for a location if none is provided
1139
- - If giving a location with multiple parts (e.g. "New York, NY"), use the most relevant part (e.g. "New York")
1140
- - Include relevant details like humidity, wind conditions, and precipitation
1141
- - Keep responses concise but informative
1142
-
1143
- ${addExampleTool ? "Use the weatherTool to fetch current weather data." : ""}
1144
- `;
1145
- const content = `
1146
- ${providerImport}
1147
- import { Agent } from '@mastra/core/agent';
1148
- ${addExampleTool ? `import { weatherTool } from '../tools';` : ""}
1149
-
1150
- export const weatherAgent = new Agent({
1151
- name: 'Weather Agent',
1152
- instructions: \`${instructions}\`,
1153
- model: ${modelItem},
1154
- ${addExampleTool ? "tools: { weatherTool }," : ""}
1155
- });
1156
- `;
1157
- const formattedContent = await prettier.format(content, {
1158
- parser: "typescript",
1159
- singleQuote: true
1160
- });
1161
- await fs4.writeFile(destPath, "");
1162
- await fs4.writeFile(destPath, formattedContent);
1163
- }
1164
- async function writeWorkflowSample(destPath) {
1165
- const fileService = new FileService();
1166
- await fileService.copyStarterFile("workflow.ts", destPath);
1167
- }
1168
- async function writeToolSample(destPath) {
1169
- const fileService = new FileService();
1170
- await fileService.copyStarterFile("tools.ts", destPath);
1171
- }
1172
- async function writeCodeSampleForComponents(llmprovider, component, destPath, importComponents) {
1173
- switch (component) {
1174
- case "agents":
1175
- return writeAgentSample(llmprovider, destPath, importComponents.includes("tools"));
1176
- case "tools":
1177
- return writeToolSample(destPath);
1178
- case "workflows":
1179
- return writeWorkflowSample(destPath);
1180
- default:
1181
- return "";
1182
- }
1183
- }
1184
- var createComponentsDir = async (dirPath, component) => {
1185
- const componentPath = dirPath + `/${component}`;
1186
- await fsExtra3.ensureDir(componentPath);
1187
- };
1188
- var writeIndexFile = async ({
1189
- dirPath,
1190
- addAgent,
1191
- addExample,
1192
- addWorkflow
1193
- }) => {
1194
- const indexPath = dirPath + "/index.ts";
1195
- const destPath = path.join(indexPath);
1196
- try {
1197
- await fs4.writeFile(destPath, "");
1198
- const filteredExports = [
1199
- addWorkflow ? `workflows: { weatherWorkflow },` : "",
1200
- addAgent ? `agents: { weatherAgent },` : ""
1201
- ].filter(Boolean);
1202
- if (!addExample) {
1203
- await fs4.writeFile(
1204
- destPath,
1205
- `
1206
- import { Mastra } from '@mastra/core';
1207
-
1208
- export const mastra = new Mastra()
1209
- `
1210
- );
1211
- return;
1212
- }
1213
- await fs4.writeFile(
1214
- destPath,
1215
- `
1216
- import { Mastra } from '@mastra/core/mastra';
1217
- import { createLogger } from '@mastra/core/logger';
1218
- ${addWorkflow ? `import { weatherWorkflow } from './workflows';` : ""}
1219
- ${addAgent ? `import { weatherAgent } from './agents';` : ""}
1220
-
1221
- export const mastra = new Mastra({
1222
- ${filteredExports.join("\n ")}
1223
- logger: createLogger({
1224
- name: 'Mastra',
1225
- level: 'info',
1226
- }),
1227
- });
1228
- `
1229
- );
1230
- } catch (err) {
1231
- throw err;
1232
- }
1233
- };
1234
- yoctoSpinner({ text: "Installing Mastra core dependencies\n" });
1235
- var getAPIKey = async (provider) => {
1236
- let key = "OPENAI_API_KEY";
1237
- switch (provider) {
1238
- case "anthropic":
1239
- key = "ANTHROPIC_API_KEY";
1240
- return key;
1241
- case "groq":
1242
- key = "GROQ_API_KEY";
1243
- return key;
1244
- default:
1245
- return key;
1246
- }
1247
- };
1248
- var writeAPIKey = async ({
1249
- provider,
1250
- apiKey = "your-api-key"
1251
- }) => {
1252
- const key = await getAPIKey(provider);
1253
- await exec(`echo ${key}=${apiKey} >> .env.development`);
1254
- };
1255
- var createMastraDir = async (directory) => {
1256
- let dir = directory.trim().split("/").filter((item) => item !== "");
1257
- const dirPath = path.join(process.cwd(), ...dir, "mastra");
1258
- try {
1259
- await fs4.access(dirPath);
1260
- return { ok: false };
1261
- } catch {
1262
- await fsExtra3.ensureDir(dirPath);
1263
- return { ok: true, dirPath };
1264
- }
1265
- };
1266
- var writeCodeSample = async (dirPath, component, llmProvider, importComponents) => {
1267
- const destPath = dirPath + `/${component}/index.ts`;
1268
- try {
1269
- await writeCodeSampleForComponents(llmProvider, component, destPath, importComponents);
1270
- } catch (err) {
1271
- throw err;
1272
- }
1273
- };
1274
- var interactivePrompt = async () => {
1275
- pe(color2.inverse("Mastra Init"));
1276
- const mastraProject = await ve(
1277
- {
1278
- directory: () => ae({
1279
- message: "Where should we create the Mastra files? (default: src/)",
1280
- placeholder: "src/",
1281
- defaultValue: "src/"
1282
- }),
1283
- components: () => $e({
1284
- message: "Choose components to install:",
1285
- options: [
1286
- { value: "agents", label: "Agents", hint: "recommended" },
1287
- {
1288
- value: "workflows",
1289
- label: "Workflows"
1290
- }
1291
- ]
1292
- }),
1293
- shouldAddTools: () => ce({
1294
- message: "Add tools?",
1295
- initialValue: false
1296
- }),
1297
- llmProvider: () => le({
1298
- message: "Select default provider:",
1299
- options: [
1300
- { value: "openai", label: "OpenAI", hint: "recommended" },
1301
- { value: "anthropic", label: "Anthropic" },
1302
- { value: "groq", label: "Groq" }
1303
- ]
1304
- }),
1305
- llmApiKey: async ({ results: { llmProvider } }) => {
1306
- const keyChoice = await le({
1307
- message: `Enter your ${llmProvider} API key?`,
1308
- options: [
1309
- { value: "skip", label: "Skip for now", hint: "default" },
1310
- { value: "enter", label: "Enter API key" }
1311
- ],
1312
- initialValue: "skip"
1313
- });
1314
- if (keyChoice === "enter") {
1315
- return ae({
1316
- message: "Enter your API key:",
1317
- placeholder: "sk-..."
1318
- });
1319
- }
1320
- return undefined;
1321
- },
1322
- addExample: () => ce({
1323
- message: "Add example",
1324
- initialValue: false
1325
- })
1326
- },
1327
- {
1328
- onCancel: () => {
1329
- he("Operation cancelled.");
1330
- process.exit(0);
1331
- }
1332
- }
1333
- );
1334
- const { shouldAddTools, components, ...rest } = mastraProject;
1335
- const mastraComponents = shouldAddTools ? [...components, "tools"] : components;
1336
- return { ...rest, components: mastraComponents };
1337
- };
1338
- var s = _();
1339
- var exec2 = util.promisify(child_process.exec);
1340
- var init = async ({
1341
- directory,
1342
- addExample = false,
1343
- components,
1344
- llmProvider = "openai",
1345
- llmApiKey
1346
- }) => {
1347
- s.start("Initializing Mastra");
1348
- try {
1349
- const result = await createMastraDir(directory);
1350
- if (!result.ok) {
1351
- s.stop(color2.inverse(" Mastra already initialized "));
1352
- return { success: false };
1353
- }
1354
- const dirPath = result.dirPath;
1355
- await Promise.all([
1356
- writeIndexFile({
1357
- dirPath,
1358
- addExample,
1359
- addWorkflow: components.includes("workflows"),
1360
- addAgent: components.includes("agents")
1361
- }),
1362
- ...components.map((component) => createComponentsDir(dirPath, component)),
1363
- writeAPIKey({ provider: llmProvider, apiKey: llmApiKey })
1364
- ]);
1365
- if (addExample) {
1366
- await Promise.all([
1367
- ...components.map(
1368
- (component) => writeCodeSample(dirPath, component, llmProvider, components)
1369
- )
1370
- ]);
1371
- }
1372
- const key = await getAPIKey(llmProvider || "openai");
1373
- const aiSdkPackage = getAISDKPackage(llmProvider);
1374
- await exec2(`npm i ${aiSdkPackage}`);
1375
- s.stop();
1376
- if (!llmApiKey) {
1377
- me(`
1378
- ${color2.green("Mastra initialized successfully!")}
1379
-
1380
- Add your ${color2.cyan(key)} as an environment variable
1381
- in your ${color2.cyan(".env.development")} file
1382
- `);
1383
- } else {
1384
- me(`
1385
- ${color2.green("Mastra initialized successfully!")}
1386
- `);
1387
- }
1388
- return { success: true };
1389
- } catch (err) {
1390
- s.stop(color2.inverse("An error occurred while initializing Mastra"));
1391
- console.error(err);
1392
- return { success: false };
1393
- }
1394
- };
1395
- var exec3 = util.promisify(child_process.exec);
1396
- var createMastraProject = async () => {
1397
- pe(color2.inverse("Mastra Create"));
1398
- const projectName = await ae({
1399
- message: "What do you want to name your project?",
1400
- placeholder: "my-mastra-app",
1401
- defaultValue: "my-mastra-app"
1402
- });
1403
- if (lD(projectName)) {
1404
- he("Operation cancelled");
1405
- process.exit(0);
1406
- }
1407
- const s2 = _();
1408
- s2.start("Creating project");
1409
- try {
1410
- await fs4.mkdir(projectName);
1411
- } catch (error) {
1412
- if (error instanceof Error && "code" in error && error.code === "EEXIST") {
1413
- s2.stop(
1414
- `A directory named "${projectName}" already exists. Please choose a different name or delete the existing directory.`
1415
- );
1416
- process.exit(1);
1417
- }
1418
- throw error;
1419
- }
1420
- process.chdir(projectName);
1421
- s2.message("Creating project");
1422
- await exec3(`npm init -y`);
1423
- await exec3(`npm pkg set type="module"`);
1424
- const depsService = new DepsService();
1425
- await depsService.addScriptsToPackageJson({
1426
- dev: "mastra dev"
1427
- });
1428
- s2.stop("Project created");
1429
- s2.start("Installing npm dependencies");
1430
- await exec3(`npm i zod`);
1431
- await exec3(`npm i typescript tsx @types/node --save-dev`);
1432
- await exec3(`echo '{
1433
- "compilerOptions": {
1434
- "target": "ES2022",
1435
- "module": "ES2022",
1436
- "moduleResolution": "bundler",
1437
- "esModuleInterop": true,
1438
- "forceConsistentCasingInFileNames": true,
1439
- "strict": true,
1440
- "skipLibCheck": true,
1441
- "outDir": "dist"
1442
- },
1443
- "include": [
1444
- "src/**/*"
1445
- ],
1446
- "exclude": [
1447
- "node_modules",
1448
- "dist",
1449
- ".mastra"
1450
- ]
1451
- }' > tsconfig.json`);
1452
- s2.stop("NPM dependencies installed");
1453
- s2.start("Installing mastra");
1454
- await exec3(`npm i -D mastra`);
1455
- s2.stop("mastra installed");
1456
- s2.start("Installing @mastra/core");
1457
- await exec3(`npm i @mastra/core@alpha`);
1458
- s2.stop("@mastra/core installed");
1459
- s2.start("Adding .gitignore");
1460
- await exec3(`echo output.txt >> .gitignore`);
1461
- await exec3(`echo node_modules >> .gitignore`);
1462
- await exec3(`echo dist >> .gitignore`);
1463
- await exec3(`echo .mastra >> .gitignore`);
1464
- await exec3(`echo .env.development >> .gitignore`);
1465
- await exec3(`echo .env >> .gitignore`);
1466
- s2.stop(".gitignore added");
1467
- ge("Project created successfully");
1468
- console.log("");
1469
- return { projectName };
1470
- };
1471
- var create = async (args) => {
1472
- const { projectName } = await createMastraProject();
1473
- const directory = "/src";
1474
- if (!args.components || !args.llmProvider || !args.addExample) {
1475
- const result = await interactivePrompt();
1476
- await init({
1477
- ...result,
1478
- llmApiKey: result?.llmApiKey
1479
- });
1480
- postCreate({ projectName });
1481
- return;
1482
- }
1483
- const { components = [], llmProvider = "openai", addExample = false, llmApiKey } = args;
1484
- await init({
1485
- directory,
1486
- components,
1487
- llmProvider,
1488
- addExample,
1489
- llmApiKey
1490
- });
1491
- postCreate({ projectName });
1492
- };
1493
- var postCreate = ({ projectName }) => {
1494
- ge(`
1495
- ${color2.green("To start your project:")}
1496
-
1497
- ${color2.cyan("cd")} ${projectName}
1498
- ${color2.cyan("npm run dev")}
1499
- `);
1500
- };
1501
-
1502
- async function getPackageVersion() {
1503
- const __filename = fileURLToPath(import.meta.url);
1504
- const __dirname = dirname(__filename);
1505
- const pkgJsonPath = path.join(__dirname, "..", "package.json");
1506
- const content = await fsExtra.readJSON(pkgJsonPath);
1507
- return content.version;
1508
- }
1509
-
1510
- const version = await getPackageVersion();
1511
- const analytics = new PosthogAnalytics({
1512
- apiKey: "phc_SBLpZVAB6jmHOct9CABq3PF0Yn5FU3G2FgT4xUr2XrT",
1513
- host: "https://us.posthog.com",
1514
- version
1515
- });
1516
- const program = new Command();
1517
- program.version(`${version}`, "-v, --version").description(`create-mastra ${version}`).action(async () => {
1518
- try {
1519
- analytics.trackCommand({
1520
- command: "version"
1521
- });
1522
- console.log(`create-mastra ${version}`);
1523
- } catch (e) {
1524
- }
1525
- });
1526
- program.name("create-mastra").description("Create a new Mastra project").option("--default", "Quick start with defaults(src, OpenAI, no examples)").option("-c, --components <components>", "Comma-separated list of components (agents, tools, workflows)").option("-l, --llm <model-provider>", "Default model provider (openai, anthropic, or groq)").option("-k, --llm-api-key <api-key>", "API key for the model provider").option("-e, --example", "Include example code").action(async (args) => {
1527
- if (args.default) {
1528
- await create({
1529
- components: ["agents", "tools", "workflows"],
1530
- llmProvider: "openai",
1531
- addExample: false
1532
- });
1533
- return;
1534
- }
1535
- await create({
1536
- components: args.components ? args.components.split(",") : [],
1537
- llmProvider: args.llm,
1538
- addExample: args.example,
1539
- llmApiKey: args["llm-api-key"]
1540
- });
1541
- });
1542
- program.parse(process.argv);
1543
- //# sourceMappingURL=index.js.map