spawnpack 0.1.13 → 0.1.14
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 +21 -21
- package/README.md +128 -128
- package/dist/spawnpack.js +505 -388
- package/package.json +1 -1
- package/templates/AGENTS.md +609 -601
- package/templates/CLAUDE.md +609 -601
package/dist/spawnpack.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env bun
|
|
2
|
+
// @bun
|
|
2
3
|
var __create = Object.create;
|
|
3
4
|
var __getProtoOf = Object.getPrototypeOf;
|
|
4
5
|
var __defProp = Object.defineProperty;
|
|
@@ -159,6 +160,76 @@ var require_picocolors = __commonJS((exports, module) => {
|
|
|
159
160
|
module.exports.createColors = createColors;
|
|
160
161
|
});
|
|
161
162
|
|
|
163
|
+
// node_modules/picocolors/picocolors.js
|
|
164
|
+
var require_picocolors2 = __commonJS((exports, module) => {
|
|
165
|
+
var p2 = process || {};
|
|
166
|
+
var argv = p2.argv || [];
|
|
167
|
+
var env = p2.env || {};
|
|
168
|
+
var isColorSupported = !(!!env.NO_COLOR || argv.includes("--no-color")) && (!!env.FORCE_COLOR || argv.includes("--color") || p2.platform === "win32" || (p2.stdout || {}).isTTY && env.TERM !== "dumb" || !!env.CI);
|
|
169
|
+
var formatter = (open, close, replace = open) => (input) => {
|
|
170
|
+
let string = "" + input, index = string.indexOf(close, open.length);
|
|
171
|
+
return ~index ? open + replaceClose(string, close, replace, index) + close : open + string + close;
|
|
172
|
+
};
|
|
173
|
+
var replaceClose = (string, close, replace, index) => {
|
|
174
|
+
let result = "", cursor = 0;
|
|
175
|
+
do {
|
|
176
|
+
result += string.substring(cursor, index) + replace;
|
|
177
|
+
cursor = index + close.length;
|
|
178
|
+
index = string.indexOf(close, cursor);
|
|
179
|
+
} while (~index);
|
|
180
|
+
return result + string.substring(cursor);
|
|
181
|
+
};
|
|
182
|
+
var createColors = (enabled = isColorSupported) => {
|
|
183
|
+
let f = enabled ? formatter : () => String;
|
|
184
|
+
return {
|
|
185
|
+
isColorSupported: enabled,
|
|
186
|
+
reset: f("\x1B[0m", "\x1B[0m"),
|
|
187
|
+
bold: f("\x1B[1m", "\x1B[22m", "\x1B[22m\x1B[1m"),
|
|
188
|
+
dim: f("\x1B[2m", "\x1B[22m", "\x1B[22m\x1B[2m"),
|
|
189
|
+
italic: f("\x1B[3m", "\x1B[23m"),
|
|
190
|
+
underline: f("\x1B[4m", "\x1B[24m"),
|
|
191
|
+
inverse: f("\x1B[7m", "\x1B[27m"),
|
|
192
|
+
hidden: f("\x1B[8m", "\x1B[28m"),
|
|
193
|
+
strikethrough: f("\x1B[9m", "\x1B[29m"),
|
|
194
|
+
black: f("\x1B[30m", "\x1B[39m"),
|
|
195
|
+
red: f("\x1B[31m", "\x1B[39m"),
|
|
196
|
+
green: f("\x1B[32m", "\x1B[39m"),
|
|
197
|
+
yellow: f("\x1B[33m", "\x1B[39m"),
|
|
198
|
+
blue: f("\x1B[34m", "\x1B[39m"),
|
|
199
|
+
magenta: f("\x1B[35m", "\x1B[39m"),
|
|
200
|
+
cyan: f("\x1B[36m", "\x1B[39m"),
|
|
201
|
+
white: f("\x1B[37m", "\x1B[39m"),
|
|
202
|
+
gray: f("\x1B[90m", "\x1B[39m"),
|
|
203
|
+
bgBlack: f("\x1B[40m", "\x1B[49m"),
|
|
204
|
+
bgRed: f("\x1B[41m", "\x1B[49m"),
|
|
205
|
+
bgGreen: f("\x1B[42m", "\x1B[49m"),
|
|
206
|
+
bgYellow: f("\x1B[43m", "\x1B[49m"),
|
|
207
|
+
bgBlue: f("\x1B[44m", "\x1B[49m"),
|
|
208
|
+
bgMagenta: f("\x1B[45m", "\x1B[49m"),
|
|
209
|
+
bgCyan: f("\x1B[46m", "\x1B[49m"),
|
|
210
|
+
bgWhite: f("\x1B[47m", "\x1B[49m"),
|
|
211
|
+
blackBright: f("\x1B[90m", "\x1B[39m"),
|
|
212
|
+
redBright: f("\x1B[91m", "\x1B[39m"),
|
|
213
|
+
greenBright: f("\x1B[92m", "\x1B[39m"),
|
|
214
|
+
yellowBright: f("\x1B[93m", "\x1B[39m"),
|
|
215
|
+
blueBright: f("\x1B[94m", "\x1B[39m"),
|
|
216
|
+
magentaBright: f("\x1B[95m", "\x1B[39m"),
|
|
217
|
+
cyanBright: f("\x1B[96m", "\x1B[39m"),
|
|
218
|
+
whiteBright: f("\x1B[97m", "\x1B[39m"),
|
|
219
|
+
bgBlackBright: f("\x1B[100m", "\x1B[49m"),
|
|
220
|
+
bgRedBright: f("\x1B[101m", "\x1B[49m"),
|
|
221
|
+
bgGreenBright: f("\x1B[102m", "\x1B[49m"),
|
|
222
|
+
bgYellowBright: f("\x1B[103m", "\x1B[49m"),
|
|
223
|
+
bgBlueBright: f("\x1B[104m", "\x1B[49m"),
|
|
224
|
+
bgMagentaBright: f("\x1B[105m", "\x1B[49m"),
|
|
225
|
+
bgCyanBright: f("\x1B[106m", "\x1B[49m"),
|
|
226
|
+
bgWhiteBright: f("\x1B[107m", "\x1B[49m")
|
|
227
|
+
};
|
|
228
|
+
};
|
|
229
|
+
module.exports = createColors();
|
|
230
|
+
module.exports.createColors = createColors;
|
|
231
|
+
});
|
|
232
|
+
|
|
162
233
|
// node_modules/@clack/core/dist/index.mjs
|
|
163
234
|
import { styleText as y } from "node:util";
|
|
164
235
|
import { stdout as S, stdin as $ } from "node:process";
|
|
@@ -1203,133 +1274,6 @@ var he = w2("●", "•");
|
|
|
1203
1274
|
var pe = w2("◆", "*");
|
|
1204
1275
|
var me = w2("▲", "!");
|
|
1205
1276
|
var ge = w2("■", "x");
|
|
1206
|
-
var V2 = (e) => {
|
|
1207
|
-
switch (e) {
|
|
1208
|
-
case "initial":
|
|
1209
|
-
case "active":
|
|
1210
|
-
return t("cyan", _e);
|
|
1211
|
-
case "cancel":
|
|
1212
|
-
return t("red", oe);
|
|
1213
|
-
case "error":
|
|
1214
|
-
return t("yellow", ue);
|
|
1215
|
-
case "submit":
|
|
1216
|
-
return t("green", F2);
|
|
1217
|
-
}
|
|
1218
|
-
};
|
|
1219
|
-
var ye = (e) => {
|
|
1220
|
-
switch (e) {
|
|
1221
|
-
case "initial":
|
|
1222
|
-
case "active":
|
|
1223
|
-
return t("cyan", d2);
|
|
1224
|
-
case "cancel":
|
|
1225
|
-
return t("red", d2);
|
|
1226
|
-
case "error":
|
|
1227
|
-
return t("yellow", d2);
|
|
1228
|
-
case "submit":
|
|
1229
|
-
return t("green", d2);
|
|
1230
|
-
}
|
|
1231
|
-
};
|
|
1232
|
-
var et2 = (e, i, s, r, u2) => {
|
|
1233
|
-
let n = i, o = 0;
|
|
1234
|
-
for (let c2 = s;c2 < r; c2++) {
|
|
1235
|
-
const a = e[c2];
|
|
1236
|
-
if (n = n - a.length, o++, n <= u2)
|
|
1237
|
-
break;
|
|
1238
|
-
}
|
|
1239
|
-
return { lineCount: n, removals: o };
|
|
1240
|
-
};
|
|
1241
|
-
var Y2 = ({ cursor: e, options: i, style: s, output: r = process.stdout, maxItems: u2 = Number.POSITIVE_INFINITY, columnPadding: n = 0, rowPadding: o = 4 }) => {
|
|
1242
|
-
const c2 = O(r) - n, a = A(r), l = t("dim", "..."), $2 = Math.max(a - o, 0), y2 = Math.max(Math.min(u2, $2), 5);
|
|
1243
|
-
let p2 = 0;
|
|
1244
|
-
e >= y2 - 3 && (p2 = Math.max(Math.min(e - y2 + 3, i.length - y2), 0));
|
|
1245
|
-
let m = y2 < i.length && p2 > 0, g = y2 < i.length && p2 + y2 < i.length;
|
|
1246
|
-
const S2 = Math.min(p2 + y2, i.length), h = [];
|
|
1247
|
-
let f = 0;
|
|
1248
|
-
m && f++, g && f++;
|
|
1249
|
-
const v = p2 + (m ? 1 : 0), T2 = S2 - (g ? 1 : 0);
|
|
1250
|
-
for (let b = v;b < T2; b++) {
|
|
1251
|
-
const x = wrapAnsi(s(i[b], b === e), c2, { hard: true, trim: false }).split(`
|
|
1252
|
-
`);
|
|
1253
|
-
h.push(x), f += x.length;
|
|
1254
|
-
}
|
|
1255
|
-
if (f > $2) {
|
|
1256
|
-
let b = 0, x = 0, G2 = f;
|
|
1257
|
-
const M2 = e - v, R2 = (j2, D2) => et2(h, G2, j2, D2, $2);
|
|
1258
|
-
m ? ({ lineCount: G2, removals: b } = R2(0, M2), G2 > $2 && ({ lineCount: G2, removals: x } = R2(M2 + 1, h.length))) : ({ lineCount: G2, removals: x } = R2(M2 + 1, h.length), G2 > $2 && ({ lineCount: G2, removals: b } = R2(0, M2))), b > 0 && (m = true, h.splice(0, b)), x > 0 && (g = true, h.splice(h.length - x, x));
|
|
1259
|
-
}
|
|
1260
|
-
const C2 = [];
|
|
1261
|
-
m && C2.push(l);
|
|
1262
|
-
for (const b of h)
|
|
1263
|
-
for (const x of b)
|
|
1264
|
-
C2.push(x);
|
|
1265
|
-
return g && C2.push(l), C2;
|
|
1266
|
-
};
|
|
1267
|
-
var ot2 = (e) => {
|
|
1268
|
-
const i = e.active ?? "Yes", s = e.inactive ?? "No";
|
|
1269
|
-
return new Q({ active: i, inactive: s, signal: e.signal, input: e.input, output: e.output, initialValue: e.initialValue ?? true, render() {
|
|
1270
|
-
const r = e.withGuide ?? u.withGuide, u2 = `${V2(this.state)} `, n = r ? `${t("gray", d2)} ` : "", o = R(e.output, e.message, n, u2), c2 = `${r ? `${t("gray", d2)}
|
|
1271
|
-
` : ""}${o}
|
|
1272
|
-
`, a = this.value ? i : s;
|
|
1273
|
-
switch (this.state) {
|
|
1274
|
-
case "submit": {
|
|
1275
|
-
const l = r ? `${t("gray", d2)} ` : "";
|
|
1276
|
-
return `${c2}${l}${t("dim", a)}`;
|
|
1277
|
-
}
|
|
1278
|
-
case "cancel": {
|
|
1279
|
-
const l = r ? `${t("gray", d2)} ` : "";
|
|
1280
|
-
return `${c2}${l}${t(["strikethrough", "dim"], a)}${r ? `
|
|
1281
|
-
${t("gray", d2)}` : ""}`;
|
|
1282
|
-
}
|
|
1283
|
-
default: {
|
|
1284
|
-
const l = r ? `${t("cyan", d2)} ` : "", $2 = r ? t("cyan", E2) : "";
|
|
1285
|
-
return `${c2}${l}${this.value ? `${t("green", z2)} ${i}` : `${t("dim", H2)} ${t("dim", i)}`}${e.vertical ? r ? `
|
|
1286
|
-
${t("cyan", d2)} ` : `
|
|
1287
|
-
` : ` ${t("dim", "/")} `}${this.value ? `${t("dim", H2)} ${t("dim", s)}` : `${t("green", z2)} ${s}`}
|
|
1288
|
-
${$2}
|
|
1289
|
-
`;
|
|
1290
|
-
}
|
|
1291
|
-
}
|
|
1292
|
-
} }).prompt();
|
|
1293
|
-
};
|
|
1294
|
-
var O2 = { message: (e = [], { symbol: i = t("gray", d2), secondarySymbol: s = t("gray", d2), output: r = process.stdout, spacing: u2 = 1, withGuide: n } = {}) => {
|
|
1295
|
-
const o = [], c2 = n ?? u.withGuide, a = c2 ? s : "", l = c2 ? `${i} ` : "", $2 = c2 ? `${s} ` : "";
|
|
1296
|
-
for (let p2 = 0;p2 < u2; p2++)
|
|
1297
|
-
o.push(a);
|
|
1298
|
-
const y2 = Array.isArray(e) ? e : e.split(`
|
|
1299
|
-
`);
|
|
1300
|
-
if (y2.length > 0) {
|
|
1301
|
-
const [p2, ...m] = y2;
|
|
1302
|
-
p2.length > 0 ? o.push(`${l}${p2}`) : o.push(c2 ? i : "");
|
|
1303
|
-
for (const g of m)
|
|
1304
|
-
g.length > 0 ? o.push(`${$2}${g}`) : o.push(c2 ? s : "");
|
|
1305
|
-
}
|
|
1306
|
-
r.write(`${o.join(`
|
|
1307
|
-
`)}
|
|
1308
|
-
`);
|
|
1309
|
-
}, info: (e, i) => {
|
|
1310
|
-
O2.message(e, { ...i, symbol: t("blue", he) });
|
|
1311
|
-
}, success: (e, i) => {
|
|
1312
|
-
O2.message(e, { ...i, symbol: t("green", pe) });
|
|
1313
|
-
}, step: (e, i) => {
|
|
1314
|
-
O2.message(e, { ...i, symbol: t("green", F2) });
|
|
1315
|
-
}, warn: (e, i) => {
|
|
1316
|
-
O2.message(e, { ...i, symbol: t("yellow", me) });
|
|
1317
|
-
}, warning: (e, i) => {
|
|
1318
|
-
O2.warn(e, i);
|
|
1319
|
-
}, error: (e, i) => {
|
|
1320
|
-
O2.message(e, { ...i, symbol: t("red", ge) });
|
|
1321
|
-
} };
|
|
1322
|
-
var pt = (e = "", i) => {
|
|
1323
|
-
const s = i?.output ?? process.stdout, r = i?.withGuide ?? u.withGuide ? `${t("gray", E2)} ` : "";
|
|
1324
|
-
s.write(`${r}${t("red", e)}
|
|
1325
|
-
|
|
1326
|
-
`);
|
|
1327
|
-
};
|
|
1328
|
-
var mt = (e = "", i) => {
|
|
1329
|
-
const s = i?.output ?? process.stdout, r = i?.withGuide ?? u.withGuide ? `${t("gray", le)} ` : "";
|
|
1330
|
-
s.write(`${r}${e}
|
|
1331
|
-
`);
|
|
1332
|
-
};
|
|
1333
1277
|
var gt = (e = "", i) => {
|
|
1334
1278
|
const s = i?.output ?? process.stdout, r = i?.withGuide ?? u.withGuide ? `${t("gray", d2)}
|
|
1335
1279
|
${t("gray", E2)} ` : "";
|
|
@@ -1337,62 +1281,6 @@ ${t("gray", E2)} ` : "";
|
|
|
1337
1281
|
|
|
1338
1282
|
`);
|
|
1339
1283
|
};
|
|
1340
|
-
var Q2 = (e, i) => e.split(`
|
|
1341
|
-
`).map((s) => i(s)).join(`
|
|
1342
|
-
`);
|
|
1343
|
-
var yt = (e) => {
|
|
1344
|
-
const i = (r, u2) => {
|
|
1345
|
-
const n = r.label ?? String(r.value);
|
|
1346
|
-
return u2 === "disabled" ? `${t("gray", J2)} ${Q2(n, (o) => t(["strikethrough", "gray"], o))}${r.hint ? ` ${t("dim", `(${r.hint ?? "disabled"})`)}` : ""}` : u2 === "active" ? `${t("cyan", te)} ${n}${r.hint ? ` ${t("dim", `(${r.hint})`)}` : ""}` : u2 === "selected" ? `${t("green", U)} ${Q2(n, (o) => t("dim", o))}${r.hint ? ` ${t("dim", `(${r.hint})`)}` : ""}` : u2 === "cancelled" ? `${Q2(n, (o) => t(["strikethrough", "dim"], o))}` : u2 === "active-selected" ? `${t("green", U)} ${n}${r.hint ? ` ${t("dim", `(${r.hint})`)}` : ""}` : u2 === "submitted" ? `${Q2(n, (o) => t("dim", o))}` : `${t("dim", J2)} ${Q2(n, (o) => t("dim", o))}`;
|
|
1347
|
-
}, s = e.required ?? true;
|
|
1348
|
-
return new it({ options: e.options, signal: e.signal, input: e.input, output: e.output, initialValues: e.initialValues, required: s, cursorAt: e.cursorAt, validate(r) {
|
|
1349
|
-
if (s && (r === undefined || r.length === 0))
|
|
1350
|
-
return `Please select at least one option.
|
|
1351
|
-
${t("reset", t("dim", `Press ${t(["gray", "bgWhite", "inverse"], " space ")} to select, ${t("gray", t("bgWhite", t("inverse", " enter ")))} to submit`))}`;
|
|
1352
|
-
}, render() {
|
|
1353
|
-
const r = e.withGuide ?? u.withGuide, u2 = R(e.output, e.message, r ? `${ye(this.state)} ` : "", `${V2(this.state)} `), n = `${r ? `${t("gray", d2)}
|
|
1354
|
-
` : ""}${u2}
|
|
1355
|
-
`, o = this.value ?? [], c2 = (a, l) => {
|
|
1356
|
-
if (a.disabled)
|
|
1357
|
-
return i(a, "disabled");
|
|
1358
|
-
const $2 = o.includes(a.value);
|
|
1359
|
-
return l && $2 ? i(a, "active-selected") : $2 ? i(a, "selected") : i(a, l ? "active" : "inactive");
|
|
1360
|
-
};
|
|
1361
|
-
switch (this.state) {
|
|
1362
|
-
case "submit": {
|
|
1363
|
-
const a = this.options.filter(({ value: $2 }) => o.includes($2)).map(($2) => i($2, "submitted")).join(t("dim", ", ")) || t("dim", "none"), l = R(e.output, a, r ? `${t("gray", d2)} ` : "");
|
|
1364
|
-
return `${n}${l}`;
|
|
1365
|
-
}
|
|
1366
|
-
case "cancel": {
|
|
1367
|
-
const a = this.options.filter(({ value: $2 }) => o.includes($2)).map(($2) => i($2, "cancelled")).join(t("dim", ", "));
|
|
1368
|
-
if (a.trim() === "")
|
|
1369
|
-
return `${n}${t("gray", d2)}`;
|
|
1370
|
-
const l = R(e.output, a, r ? `${t("gray", d2)} ` : "");
|
|
1371
|
-
return `${n}${l}${r ? `
|
|
1372
|
-
${t("gray", d2)}` : ""}`;
|
|
1373
|
-
}
|
|
1374
|
-
case "error": {
|
|
1375
|
-
const a = r ? `${t("yellow", d2)} ` : "", l = this.error.split(`
|
|
1376
|
-
`).map((p2, m) => m === 0 ? `${r ? `${t("yellow", E2)} ` : ""}${t("yellow", p2)}` : ` ${p2}`).join(`
|
|
1377
|
-
`), $2 = n.split(`
|
|
1378
|
-
`).length, y2 = l.split(`
|
|
1379
|
-
`).length + 1;
|
|
1380
|
-
return `${n}${a}${Y2({ output: e.output, options: this.options, cursor: this.cursor, maxItems: e.maxItems, columnPadding: a.length, rowPadding: $2 + y2, style: c2 }).join(`
|
|
1381
|
-
${a}`)}
|
|
1382
|
-
${l}
|
|
1383
|
-
`;
|
|
1384
|
-
}
|
|
1385
|
-
default: {
|
|
1386
|
-
const a = r ? `${t("cyan", d2)} ` : "", l = n.split(`
|
|
1387
|
-
`).length, $2 = r ? 2 : 1;
|
|
1388
|
-
return `${n}${a}${Y2({ output: e.output, options: this.options, cursor: this.cursor, maxItems: e.maxItems, columnPadding: a.length, rowPadding: l + $2, style: c2 }).join(`
|
|
1389
|
-
${a}`)}
|
|
1390
|
-
${r ? t("cyan", E2) : ""}
|
|
1391
|
-
`;
|
|
1392
|
-
}
|
|
1393
|
-
}
|
|
1394
|
-
} }).prompt();
|
|
1395
|
-
};
|
|
1396
1284
|
var Ct = (e) => t("magenta", e);
|
|
1397
1285
|
var fe = ({ indicator: e = "dots", onCancel: i, output: s = process.stdout, cancelMessage: r, errorMessage: u2, frames: n = ee ? ["◒", "◐", "◓", "◑"] : ["•", "o", "O", "0"], delay: o = ee ? 80 : 120, signal: c2, ...a } = {}) => {
|
|
1398
1286
|
const l = ae();
|
|
@@ -1452,84 +1340,10 @@ var fe = ({ indicator: e = "dots", onCancel: i, output: s = process.stdout, canc
|
|
|
1452
1340
|
} };
|
|
1453
1341
|
};
|
|
1454
1342
|
var Ve = { light: w2("─", "-"), heavy: w2("━", "="), block: w2("█", "#") };
|
|
1455
|
-
var re = (e, i) => e.includes(`
|
|
1456
|
-
`) ? e.split(`
|
|
1457
|
-
`).map((s) => i(s)).join(`
|
|
1458
|
-
`) : i(e);
|
|
1459
|
-
var _t = (e) => {
|
|
1460
|
-
const i = (s, r) => {
|
|
1461
|
-
const u2 = s.label ?? String(s.value);
|
|
1462
|
-
switch (r) {
|
|
1463
|
-
case "disabled":
|
|
1464
|
-
return `${t("gray", H2)} ${re(u2, (n) => t("gray", n))}${s.hint ? ` ${t("dim", `(${s.hint ?? "disabled"})`)}` : ""}`;
|
|
1465
|
-
case "selected":
|
|
1466
|
-
return `${re(u2, (n) => t("dim", n))}`;
|
|
1467
|
-
case "active":
|
|
1468
|
-
return `${t("green", z2)} ${u2}${s.hint ? ` ${t("dim", `(${s.hint})`)}` : ""}`;
|
|
1469
|
-
case "cancelled":
|
|
1470
|
-
return `${re(u2, (n) => t(["strikethrough", "dim"], n))}`;
|
|
1471
|
-
default:
|
|
1472
|
-
return `${t("dim", H2)} ${re(u2, (n) => t("dim", n))}`;
|
|
1473
|
-
}
|
|
1474
|
-
};
|
|
1475
|
-
return new nt({ options: e.options, signal: e.signal, input: e.input, output: e.output, initialValue: e.initialValue, render() {
|
|
1476
|
-
const s = e.withGuide ?? u.withGuide, r = `${V2(this.state)} `, u2 = `${ye(this.state)} `, n = R(e.output, e.message, u2, r), o = `${s ? `${t("gray", d2)}
|
|
1477
|
-
` : ""}${n}
|
|
1478
|
-
`;
|
|
1479
|
-
switch (this.state) {
|
|
1480
|
-
case "submit": {
|
|
1481
|
-
const c2 = s ? `${t("gray", d2)} ` : "", a = R(e.output, i(this.options[this.cursor], "selected"), c2);
|
|
1482
|
-
return `${o}${a}`;
|
|
1483
|
-
}
|
|
1484
|
-
case "cancel": {
|
|
1485
|
-
const c2 = s ? `${t("gray", d2)} ` : "", a = R(e.output, i(this.options[this.cursor], "cancelled"), c2);
|
|
1486
|
-
return `${o}${a}${s ? `
|
|
1487
|
-
${t("gray", d2)}` : ""}`;
|
|
1488
|
-
}
|
|
1489
|
-
default: {
|
|
1490
|
-
const c2 = s ? `${t("cyan", d2)} ` : "", a = s ? t("cyan", E2) : "", l = o.split(`
|
|
1491
|
-
`).length, $2 = s ? 2 : 1;
|
|
1492
|
-
return `${o}${c2}${Y2({ output: e.output, cursor: this.cursor, options: this.options, maxItems: e.maxItems, columnPadding: c2.length, rowPadding: l + $2, style: (y2, p2) => i(y2, y2.disabled ? "disabled" : p2 ? "active" : "inactive") }).join(`
|
|
1493
|
-
${c2}`)}
|
|
1494
|
-
${a}
|
|
1495
|
-
`;
|
|
1496
|
-
}
|
|
1497
|
-
}
|
|
1498
|
-
} }).prompt();
|
|
1499
|
-
};
|
|
1500
1343
|
var je = `${t("gray", d2)} `;
|
|
1501
|
-
var Ot = (e) => new at({ validate: e.validate, placeholder: e.placeholder, defaultValue: e.defaultValue, initialValue: e.initialValue, output: e.output, signal: e.signal, input: e.input, render() {
|
|
1502
|
-
const i = e?.withGuide ?? u.withGuide, s = `${`${i ? `${t("gray", d2)}
|
|
1503
|
-
` : ""}${V2(this.state)} `}${e.message}
|
|
1504
|
-
`, r = e.placeholder ? t("inverse", e.placeholder[0]) + t("dim", e.placeholder.slice(1)) : t(["inverse", "hidden"], "_"), u2 = this.userInput ? this.userInputWithCursor : r, n = this.value ?? "";
|
|
1505
|
-
switch (this.state) {
|
|
1506
|
-
case "error": {
|
|
1507
|
-
const o = this.error ? ` ${t("yellow", this.error)}` : "", c2 = i ? `${t("yellow", d2)} ` : "", a = i ? t("yellow", E2) : "";
|
|
1508
|
-
return `${s.trim()}
|
|
1509
|
-
${c2}${u2}
|
|
1510
|
-
${a}${o}
|
|
1511
|
-
`;
|
|
1512
|
-
}
|
|
1513
|
-
case "submit": {
|
|
1514
|
-
const o = n ? ` ${t("dim", n)}` : "", c2 = i ? t("gray", d2) : "";
|
|
1515
|
-
return `${s}${c2}${o}`;
|
|
1516
|
-
}
|
|
1517
|
-
case "cancel": {
|
|
1518
|
-
const o = n ? ` ${t(["strikethrough", "dim"], n)}` : "", c2 = i ? t("gray", d2) : "";
|
|
1519
|
-
return `${s}${c2}${o}${n.trim() ? `
|
|
1520
|
-
${c2}` : ""}`;
|
|
1521
|
-
}
|
|
1522
|
-
default: {
|
|
1523
|
-
const o = i ? `${t("cyan", d2)} ` : "", c2 = i ? t("cyan", E2) : "";
|
|
1524
|
-
return `${s}${o}${u2}
|
|
1525
|
-
${c2}
|
|
1526
|
-
`;
|
|
1527
|
-
}
|
|
1528
|
-
}
|
|
1529
|
-
} }).prompt();
|
|
1530
1344
|
|
|
1531
1345
|
// src/index.ts
|
|
1532
|
-
var
|
|
1346
|
+
var import_picocolors4 = __toESM(require_picocolors(), 1);
|
|
1533
1347
|
|
|
1534
1348
|
// src/engine/generator.ts
|
|
1535
1349
|
import { mkdir, writeFile } from "node:fs/promises";
|
|
@@ -2453,9 +2267,354 @@ async function runProvisioning(config) {
|
|
|
2453
2267
|
return results;
|
|
2454
2268
|
}
|
|
2455
2269
|
|
|
2270
|
+
// node_modules/@clack/prompts/dist/index.mjs
|
|
2271
|
+
import { styleText as t2, stripVTControlCharacters as ne2 } from "node:util";
|
|
2272
|
+
import P3 from "node:process";
|
|
2273
|
+
var import_sisteransi3 = __toESM(require_src(), 1);
|
|
2274
|
+
function Ze2() {
|
|
2275
|
+
return P3.platform !== "win32" ? P3.env.TERM !== "linux" : !!P3.env.CI || !!P3.env.WT_SESSION || !!P3.env.TERMINUS_SUBLIME || P3.env.ConEmuTask === "{cmd::Cmder}" || P3.env.TERM_PROGRAM === "Terminus-Sublime" || P3.env.TERM_PROGRAM === "vscode" || P3.env.TERM === "xterm-256color" || P3.env.TERM === "alacritty" || P3.env.TERMINAL_EMULATOR === "JetBrains-JediTerm";
|
|
2276
|
+
}
|
|
2277
|
+
var ee2 = Ze2();
|
|
2278
|
+
var w3 = (e, i) => ee2 ? e : i;
|
|
2279
|
+
var _e2 = w3("◆", "*");
|
|
2280
|
+
var oe2 = w3("■", "x");
|
|
2281
|
+
var ue2 = w3("▲", "x");
|
|
2282
|
+
var F3 = w3("◇", "o");
|
|
2283
|
+
var le2 = w3("┌", "T");
|
|
2284
|
+
var d3 = w3("│", "|");
|
|
2285
|
+
var E3 = w3("└", "—");
|
|
2286
|
+
var Ie2 = w3("┐", "T");
|
|
2287
|
+
var Ee2 = w3("┘", "—");
|
|
2288
|
+
var z3 = w3("●", ">");
|
|
2289
|
+
var H3 = w3("○", " ");
|
|
2290
|
+
var te2 = w3("◻", "[•]");
|
|
2291
|
+
var U2 = w3("◼", "[+]");
|
|
2292
|
+
var J3 = w3("◻", "[ ]");
|
|
2293
|
+
var xe2 = w3("▪", "•");
|
|
2294
|
+
var se2 = w3("─", "-");
|
|
2295
|
+
var ce2 = w3("╮", "+");
|
|
2296
|
+
var Ge2 = w3("├", "+");
|
|
2297
|
+
var $e2 = w3("╯", "+");
|
|
2298
|
+
var de2 = w3("╰", "+");
|
|
2299
|
+
var Oe2 = w3("╭", "+");
|
|
2300
|
+
var he2 = w3("●", "•");
|
|
2301
|
+
var pe2 = w3("◆", "*");
|
|
2302
|
+
var me2 = w3("▲", "!");
|
|
2303
|
+
var ge2 = w3("■", "x");
|
|
2304
|
+
var V2 = (e) => {
|
|
2305
|
+
switch (e) {
|
|
2306
|
+
case "initial":
|
|
2307
|
+
case "active":
|
|
2308
|
+
return t2("cyan", _e2);
|
|
2309
|
+
case "cancel":
|
|
2310
|
+
return t2("red", oe2);
|
|
2311
|
+
case "error":
|
|
2312
|
+
return t2("yellow", ue2);
|
|
2313
|
+
case "submit":
|
|
2314
|
+
return t2("green", F3);
|
|
2315
|
+
}
|
|
2316
|
+
};
|
|
2317
|
+
var ye = (e) => {
|
|
2318
|
+
switch (e) {
|
|
2319
|
+
case "initial":
|
|
2320
|
+
case "active":
|
|
2321
|
+
return t2("cyan", d3);
|
|
2322
|
+
case "cancel":
|
|
2323
|
+
return t2("red", d3);
|
|
2324
|
+
case "error":
|
|
2325
|
+
return t2("yellow", d3);
|
|
2326
|
+
case "submit":
|
|
2327
|
+
return t2("green", d3);
|
|
2328
|
+
}
|
|
2329
|
+
};
|
|
2330
|
+
var et2 = (e, i, s, r, u2) => {
|
|
2331
|
+
let n = i, o = 0;
|
|
2332
|
+
for (let c2 = s;c2 < r; c2++) {
|
|
2333
|
+
const a = e[c2];
|
|
2334
|
+
if (n = n - a.length, o++, n <= u2)
|
|
2335
|
+
break;
|
|
2336
|
+
}
|
|
2337
|
+
return { lineCount: n, removals: o };
|
|
2338
|
+
};
|
|
2339
|
+
var Y2 = ({ cursor: e, options: i, style: s, output: r = process.stdout, maxItems: u2 = Number.POSITIVE_INFINITY, columnPadding: n = 0, rowPadding: o = 4 }) => {
|
|
2340
|
+
const c2 = O(r) - n, a = A(r), l = t2("dim", "..."), $2 = Math.max(a - o, 0), y2 = Math.max(Math.min(u2, $2), 5);
|
|
2341
|
+
let p2 = 0;
|
|
2342
|
+
e >= y2 - 3 && (p2 = Math.max(Math.min(e - y2 + 3, i.length - y2), 0));
|
|
2343
|
+
let m = y2 < i.length && p2 > 0, g = y2 < i.length && p2 + y2 < i.length;
|
|
2344
|
+
const S2 = Math.min(p2 + y2, i.length), h = [];
|
|
2345
|
+
let f = 0;
|
|
2346
|
+
m && f++, g && f++;
|
|
2347
|
+
const v = p2 + (m ? 1 : 0), T2 = S2 - (g ? 1 : 0);
|
|
2348
|
+
for (let b = v;b < T2; b++) {
|
|
2349
|
+
const x = wrapAnsi(s(i[b], b === e), c2, { hard: true, trim: false }).split(`
|
|
2350
|
+
`);
|
|
2351
|
+
h.push(x), f += x.length;
|
|
2352
|
+
}
|
|
2353
|
+
if (f > $2) {
|
|
2354
|
+
let b = 0, x = 0, G2 = f;
|
|
2355
|
+
const M2 = e - v, R2 = (j2, D2) => et2(h, G2, j2, D2, $2);
|
|
2356
|
+
m ? ({ lineCount: G2, removals: b } = R2(0, M2), G2 > $2 && ({ lineCount: G2, removals: x } = R2(M2 + 1, h.length))) : ({ lineCount: G2, removals: x } = R2(M2 + 1, h.length), G2 > $2 && ({ lineCount: G2, removals: b } = R2(0, M2))), b > 0 && (m = true, h.splice(0, b)), x > 0 && (g = true, h.splice(h.length - x, x));
|
|
2357
|
+
}
|
|
2358
|
+
const C2 = [];
|
|
2359
|
+
m && C2.push(l);
|
|
2360
|
+
for (const b of h)
|
|
2361
|
+
for (const x of b)
|
|
2362
|
+
C2.push(x);
|
|
2363
|
+
return g && C2.push(l), C2;
|
|
2364
|
+
};
|
|
2365
|
+
var ot2 = (e) => {
|
|
2366
|
+
const i = e.active ?? "Yes", s = e.inactive ?? "No";
|
|
2367
|
+
return new Q({ active: i, inactive: s, signal: e.signal, input: e.input, output: e.output, initialValue: e.initialValue ?? true, render() {
|
|
2368
|
+
const r = e.withGuide ?? u.withGuide, u2 = `${V2(this.state)} `, n = r ? `${t2("gray", d3)} ` : "", o = R(e.output, e.message, n, u2), c2 = `${r ? `${t2("gray", d3)}
|
|
2369
|
+
` : ""}${o}
|
|
2370
|
+
`, a = this.value ? i : s;
|
|
2371
|
+
switch (this.state) {
|
|
2372
|
+
case "submit": {
|
|
2373
|
+
const l = r ? `${t2("gray", d3)} ` : "";
|
|
2374
|
+
return `${c2}${l}${t2("dim", a)}`;
|
|
2375
|
+
}
|
|
2376
|
+
case "cancel": {
|
|
2377
|
+
const l = r ? `${t2("gray", d3)} ` : "";
|
|
2378
|
+
return `${c2}${l}${t2(["strikethrough", "dim"], a)}${r ? `
|
|
2379
|
+
${t2("gray", d3)}` : ""}`;
|
|
2380
|
+
}
|
|
2381
|
+
default: {
|
|
2382
|
+
const l = r ? `${t2("cyan", d3)} ` : "", $2 = r ? t2("cyan", E3) : "";
|
|
2383
|
+
return `${c2}${l}${this.value ? `${t2("green", z3)} ${i}` : `${t2("dim", H3)} ${t2("dim", i)}`}${e.vertical ? r ? `
|
|
2384
|
+
${t2("cyan", d3)} ` : `
|
|
2385
|
+
` : ` ${t2("dim", "/")} `}${this.value ? `${t2("dim", H3)} ${t2("dim", s)}` : `${t2("green", z3)} ${s}`}
|
|
2386
|
+
${$2}
|
|
2387
|
+
`;
|
|
2388
|
+
}
|
|
2389
|
+
}
|
|
2390
|
+
} }).prompt();
|
|
2391
|
+
};
|
|
2392
|
+
var O2 = { message: (e = [], { symbol: i = t2("gray", d3), secondarySymbol: s = t2("gray", d3), output: r = process.stdout, spacing: u2 = 1, withGuide: n } = {}) => {
|
|
2393
|
+
const o = [], c2 = n ?? u.withGuide, a = c2 ? s : "", l = c2 ? `${i} ` : "", $2 = c2 ? `${s} ` : "";
|
|
2394
|
+
for (let p2 = 0;p2 < u2; p2++)
|
|
2395
|
+
o.push(a);
|
|
2396
|
+
const y2 = Array.isArray(e) ? e : e.split(`
|
|
2397
|
+
`);
|
|
2398
|
+
if (y2.length > 0) {
|
|
2399
|
+
const [p2, ...m] = y2;
|
|
2400
|
+
p2.length > 0 ? o.push(`${l}${p2}`) : o.push(c2 ? i : "");
|
|
2401
|
+
for (const g of m)
|
|
2402
|
+
g.length > 0 ? o.push(`${$2}${g}`) : o.push(c2 ? s : "");
|
|
2403
|
+
}
|
|
2404
|
+
r.write(`${o.join(`
|
|
2405
|
+
`)}
|
|
2406
|
+
`);
|
|
2407
|
+
}, info: (e, i) => {
|
|
2408
|
+
O2.message(e, { ...i, symbol: t2("blue", he2) });
|
|
2409
|
+
}, success: (e, i) => {
|
|
2410
|
+
O2.message(e, { ...i, symbol: t2("green", pe2) });
|
|
2411
|
+
}, step: (e, i) => {
|
|
2412
|
+
O2.message(e, { ...i, symbol: t2("green", F3) });
|
|
2413
|
+
}, warn: (e, i) => {
|
|
2414
|
+
O2.message(e, { ...i, symbol: t2("yellow", me2) });
|
|
2415
|
+
}, warning: (e, i) => {
|
|
2416
|
+
O2.warn(e, i);
|
|
2417
|
+
}, error: (e, i) => {
|
|
2418
|
+
O2.message(e, { ...i, symbol: t2("red", ge2) });
|
|
2419
|
+
} };
|
|
2420
|
+
var pt = (e = "", i) => {
|
|
2421
|
+
const s = i?.output ?? process.stdout, r = i?.withGuide ?? u.withGuide ? `${t2("gray", E3)} ` : "";
|
|
2422
|
+
s.write(`${r}${t2("red", e)}
|
|
2423
|
+
|
|
2424
|
+
`);
|
|
2425
|
+
};
|
|
2426
|
+
var mt = (e = "", i) => {
|
|
2427
|
+
const s = i?.output ?? process.stdout, r = i?.withGuide ?? u.withGuide ? `${t2("gray", le2)} ` : "";
|
|
2428
|
+
s.write(`${r}${e}
|
|
2429
|
+
`);
|
|
2430
|
+
};
|
|
2431
|
+
var Q2 = (e, i) => e.split(`
|
|
2432
|
+
`).map((s) => i(s)).join(`
|
|
2433
|
+
`);
|
|
2434
|
+
var yt = (e) => {
|
|
2435
|
+
const i = (r, u2) => {
|
|
2436
|
+
const n = r.label ?? String(r.value);
|
|
2437
|
+
return u2 === "disabled" ? `${t2("gray", J3)} ${Q2(n, (o) => t2(["strikethrough", "gray"], o))}${r.hint ? ` ${t2("dim", `(${r.hint ?? "disabled"})`)}` : ""}` : u2 === "active" ? `${t2("cyan", te2)} ${n}${r.hint ? ` ${t2("dim", `(${r.hint})`)}` : ""}` : u2 === "selected" ? `${t2("green", U2)} ${Q2(n, (o) => t2("dim", o))}${r.hint ? ` ${t2("dim", `(${r.hint})`)}` : ""}` : u2 === "cancelled" ? `${Q2(n, (o) => t2(["strikethrough", "dim"], o))}` : u2 === "active-selected" ? `${t2("green", U2)} ${n}${r.hint ? ` ${t2("dim", `(${r.hint})`)}` : ""}` : u2 === "submitted" ? `${Q2(n, (o) => t2("dim", o))}` : `${t2("dim", J3)} ${Q2(n, (o) => t2("dim", o))}`;
|
|
2438
|
+
}, s = e.required ?? true;
|
|
2439
|
+
return new it({ options: e.options, signal: e.signal, input: e.input, output: e.output, initialValues: e.initialValues, required: s, cursorAt: e.cursorAt, validate(r) {
|
|
2440
|
+
if (s && (r === undefined || r.length === 0))
|
|
2441
|
+
return `Please select at least one option.
|
|
2442
|
+
${t2("reset", t2("dim", `Press ${t2(["gray", "bgWhite", "inverse"], " space ")} to select, ${t2("gray", t2("bgWhite", t2("inverse", " enter ")))} to submit`))}`;
|
|
2443
|
+
}, render() {
|
|
2444
|
+
const r = e.withGuide ?? u.withGuide, u2 = R(e.output, e.message, r ? `${ye(this.state)} ` : "", `${V2(this.state)} `), n = `${r ? `${t2("gray", d3)}
|
|
2445
|
+
` : ""}${u2}
|
|
2446
|
+
`, o = this.value ?? [], c2 = (a, l) => {
|
|
2447
|
+
if (a.disabled)
|
|
2448
|
+
return i(a, "disabled");
|
|
2449
|
+
const $2 = o.includes(a.value);
|
|
2450
|
+
return l && $2 ? i(a, "active-selected") : $2 ? i(a, "selected") : i(a, l ? "active" : "inactive");
|
|
2451
|
+
};
|
|
2452
|
+
switch (this.state) {
|
|
2453
|
+
case "submit": {
|
|
2454
|
+
const a = this.options.filter(({ value: $2 }) => o.includes($2)).map(($2) => i($2, "submitted")).join(t2("dim", ", ")) || t2("dim", "none"), l = R(e.output, a, r ? `${t2("gray", d3)} ` : "");
|
|
2455
|
+
return `${n}${l}`;
|
|
2456
|
+
}
|
|
2457
|
+
case "cancel": {
|
|
2458
|
+
const a = this.options.filter(({ value: $2 }) => o.includes($2)).map(($2) => i($2, "cancelled")).join(t2("dim", ", "));
|
|
2459
|
+
if (a.trim() === "")
|
|
2460
|
+
return `${n}${t2("gray", d3)}`;
|
|
2461
|
+
const l = R(e.output, a, r ? `${t2("gray", d3)} ` : "");
|
|
2462
|
+
return `${n}${l}${r ? `
|
|
2463
|
+
${t2("gray", d3)}` : ""}`;
|
|
2464
|
+
}
|
|
2465
|
+
case "error": {
|
|
2466
|
+
const a = r ? `${t2("yellow", d3)} ` : "", l = this.error.split(`
|
|
2467
|
+
`).map((p2, m) => m === 0 ? `${r ? `${t2("yellow", E3)} ` : ""}${t2("yellow", p2)}` : ` ${p2}`).join(`
|
|
2468
|
+
`), $2 = n.split(`
|
|
2469
|
+
`).length, y2 = l.split(`
|
|
2470
|
+
`).length + 1;
|
|
2471
|
+
return `${n}${a}${Y2({ output: e.output, options: this.options, cursor: this.cursor, maxItems: e.maxItems, columnPadding: a.length, rowPadding: $2 + y2, style: c2 }).join(`
|
|
2472
|
+
${a}`)}
|
|
2473
|
+
${l}
|
|
2474
|
+
`;
|
|
2475
|
+
}
|
|
2476
|
+
default: {
|
|
2477
|
+
const a = r ? `${t2("cyan", d3)} ` : "", l = n.split(`
|
|
2478
|
+
`).length, $2 = r ? 2 : 1;
|
|
2479
|
+
return `${n}${a}${Y2({ output: e.output, options: this.options, cursor: this.cursor, maxItems: e.maxItems, columnPadding: a.length, rowPadding: l + $2, style: c2 }).join(`
|
|
2480
|
+
${a}`)}
|
|
2481
|
+
${r ? t2("cyan", E3) : ""}
|
|
2482
|
+
`;
|
|
2483
|
+
}
|
|
2484
|
+
}
|
|
2485
|
+
} }).prompt();
|
|
2486
|
+
};
|
|
2487
|
+
var Ve2 = { light: w3("─", "-"), heavy: w3("━", "="), block: w3("█", "#") };
|
|
2488
|
+
var re = (e, i) => e.includes(`
|
|
2489
|
+
`) ? e.split(`
|
|
2490
|
+
`).map((s) => i(s)).join(`
|
|
2491
|
+
`) : i(e);
|
|
2492
|
+
var _t = (e) => {
|
|
2493
|
+
const i = (s, r) => {
|
|
2494
|
+
const u2 = s.label ?? String(s.value);
|
|
2495
|
+
switch (r) {
|
|
2496
|
+
case "disabled":
|
|
2497
|
+
return `${t2("gray", H3)} ${re(u2, (n) => t2("gray", n))}${s.hint ? ` ${t2("dim", `(${s.hint ?? "disabled"})`)}` : ""}`;
|
|
2498
|
+
case "selected":
|
|
2499
|
+
return `${re(u2, (n) => t2("dim", n))}`;
|
|
2500
|
+
case "active":
|
|
2501
|
+
return `${t2("green", z3)} ${u2}${s.hint ? ` ${t2("dim", `(${s.hint})`)}` : ""}`;
|
|
2502
|
+
case "cancelled":
|
|
2503
|
+
return `${re(u2, (n) => t2(["strikethrough", "dim"], n))}`;
|
|
2504
|
+
default:
|
|
2505
|
+
return `${t2("dim", H3)} ${re(u2, (n) => t2("dim", n))}`;
|
|
2506
|
+
}
|
|
2507
|
+
};
|
|
2508
|
+
return new nt({ options: e.options, signal: e.signal, input: e.input, output: e.output, initialValue: e.initialValue, render() {
|
|
2509
|
+
const s = e.withGuide ?? u.withGuide, r = `${V2(this.state)} `, u2 = `${ye(this.state)} `, n = R(e.output, e.message, u2, r), o = `${s ? `${t2("gray", d3)}
|
|
2510
|
+
` : ""}${n}
|
|
2511
|
+
`;
|
|
2512
|
+
switch (this.state) {
|
|
2513
|
+
case "submit": {
|
|
2514
|
+
const c2 = s ? `${t2("gray", d3)} ` : "", a = R(e.output, i(this.options[this.cursor], "selected"), c2);
|
|
2515
|
+
return `${o}${a}`;
|
|
2516
|
+
}
|
|
2517
|
+
case "cancel": {
|
|
2518
|
+
const c2 = s ? `${t2("gray", d3)} ` : "", a = R(e.output, i(this.options[this.cursor], "cancelled"), c2);
|
|
2519
|
+
return `${o}${a}${s ? `
|
|
2520
|
+
${t2("gray", d3)}` : ""}`;
|
|
2521
|
+
}
|
|
2522
|
+
default: {
|
|
2523
|
+
const c2 = s ? `${t2("cyan", d3)} ` : "", a = s ? t2("cyan", E3) : "", l = o.split(`
|
|
2524
|
+
`).length, $2 = s ? 2 : 1;
|
|
2525
|
+
return `${o}${c2}${Y2({ output: e.output, cursor: this.cursor, options: this.options, maxItems: e.maxItems, columnPadding: c2.length, rowPadding: l + $2, style: (y2, p2) => i(y2, y2.disabled ? "disabled" : p2 ? "active" : "inactive") }).join(`
|
|
2526
|
+
${c2}`)}
|
|
2527
|
+
${a}
|
|
2528
|
+
`;
|
|
2529
|
+
}
|
|
2530
|
+
}
|
|
2531
|
+
} }).prompt();
|
|
2532
|
+
};
|
|
2533
|
+
var je2 = `${t2("gray", d3)} `;
|
|
2534
|
+
var Ot = (e) => new at({ validate: e.validate, placeholder: e.placeholder, defaultValue: e.defaultValue, initialValue: e.initialValue, output: e.output, signal: e.signal, input: e.input, render() {
|
|
2535
|
+
const i = e?.withGuide ?? u.withGuide, s = `${`${i ? `${t2("gray", d3)}
|
|
2536
|
+
` : ""}${V2(this.state)} `}${e.message}
|
|
2537
|
+
`, r = e.placeholder ? t2("inverse", e.placeholder[0]) + t2("dim", e.placeholder.slice(1)) : t2(["inverse", "hidden"], "_"), u2 = this.userInput ? this.userInputWithCursor : r, n = this.value ?? "";
|
|
2538
|
+
switch (this.state) {
|
|
2539
|
+
case "error": {
|
|
2540
|
+
const o = this.error ? ` ${t2("yellow", this.error)}` : "", c2 = i ? `${t2("yellow", d3)} ` : "", a = i ? t2("yellow", E3) : "";
|
|
2541
|
+
return `${s.trim()}
|
|
2542
|
+
${c2}${u2}
|
|
2543
|
+
${a}${o}
|
|
2544
|
+
`;
|
|
2545
|
+
}
|
|
2546
|
+
case "submit": {
|
|
2547
|
+
const o = n ? ` ${t2("dim", n)}` : "", c2 = i ? t2("gray", d3) : "";
|
|
2548
|
+
return `${s}${c2}${o}`;
|
|
2549
|
+
}
|
|
2550
|
+
case "cancel": {
|
|
2551
|
+
const o = n ? ` ${t2(["strikethrough", "dim"], n)}` : "", c2 = i ? t2("gray", d3) : "";
|
|
2552
|
+
return `${s}${c2}${o}${n.trim() ? `
|
|
2553
|
+
${c2}` : ""}`;
|
|
2554
|
+
}
|
|
2555
|
+
default: {
|
|
2556
|
+
const o = i ? `${t2("cyan", d3)} ` : "", c2 = i ? t2("cyan", E3) : "";
|
|
2557
|
+
return `${s}${o}${u2}
|
|
2558
|
+
${c2}
|
|
2559
|
+
`;
|
|
2560
|
+
}
|
|
2561
|
+
}
|
|
2562
|
+
} }).prompt();
|
|
2563
|
+
|
|
2456
2564
|
// src/tui/display.ts
|
|
2457
|
-
var import_picocolors = __toESM(
|
|
2565
|
+
var import_picocolors = __toESM(require_picocolors2(), 1);
|
|
2458
2566
|
var teal = (value) => `\x1B[38;2;47;208;181m${value}\x1B[39m`;
|
|
2567
|
+
function formatValue(value) {
|
|
2568
|
+
return import_picocolors.default.bold(import_picocolors.default.white(value));
|
|
2569
|
+
}
|
|
2570
|
+
function showPostGeneration(config) {
|
|
2571
|
+
const nextSteps = [teal(import_picocolors.default.bold("Next steps"))];
|
|
2572
|
+
if (config.destination !== "." && config.destination !== "./") {
|
|
2573
|
+
nextSteps.push(` ${import_picocolors.default.cyan("cd")} ${formatValue(config.destination)}`);
|
|
2574
|
+
}
|
|
2575
|
+
if (config.scripting !== "none") {
|
|
2576
|
+
nextSteps.push(` ${import_picocolors.default.cyan("bun install")} ${import_picocolors.default.dim("or")} ${import_picocolors.default.cyan("npm install")} ${import_picocolors.default.dim("Install project dependencies")}`);
|
|
2577
|
+
}
|
|
2578
|
+
if (config.useRgl) {
|
|
2579
|
+
nextSteps.push(` ${import_picocolors.default.cyan("rgl watch")} ${import_picocolors.default.dim("Watch files and rebuild/export while you work")}`);
|
|
2580
|
+
}
|
|
2581
|
+
const usefulCommands = [teal(import_picocolors.default.bold("Useful commands"))];
|
|
2582
|
+
if (config.useRgl) {
|
|
2583
|
+
usefulCommands.push(` ${import_picocolors.default.cyan("rgl run")} ${import_picocolors.default.dim("Build for development")}`);
|
|
2584
|
+
usefulCommands.push(` ${import_picocolors.default.cyan("rgl run build")} ${import_picocolors.default.dim("Build for distribution")}`);
|
|
2585
|
+
}
|
|
2586
|
+
if (config.scripting === "typescript") {
|
|
2587
|
+
usefulCommands.push(` ${import_picocolors.default.cyan("bun run typecheck")} ${import_picocolors.default.dim("or")} ${import_picocolors.default.cyan("npm run typecheck")} ${import_picocolors.default.dim("Check TypeScript types")}`);
|
|
2588
|
+
}
|
|
2589
|
+
if (config.scripting === "none" && !config.useRgl) {
|
|
2590
|
+
usefulCommands.push(` ${import_picocolors.default.dim("No extra build commands needed for this scaffold")}`);
|
|
2591
|
+
}
|
|
2592
|
+
if (config.aiSetup !== "none") {
|
|
2593
|
+
usefulCommands.push("");
|
|
2594
|
+
usefulCommands.push(`${teal(import_picocolors.default.bold("Note"))} ${import_picocolors.default.dim(".mcp.json is ready to use — the configured MCP servers need no API keys.")}`);
|
|
2595
|
+
}
|
|
2596
|
+
if (config.installPonytail) {
|
|
2597
|
+
usefulCommands.push("");
|
|
2598
|
+
if (config.aiSetup === "claude") {
|
|
2599
|
+
usefulCommands.push(`${teal(import_picocolors.default.bold("Ponytail"))} ${import_picocolors.default.dim("Run inside Claude Code:")}`);
|
|
2600
|
+
usefulCommands.push(` ${import_picocolors.default.cyan("/plugin marketplace add DietrichGebert/ponytail")}`);
|
|
2601
|
+
usefulCommands.push(` ${import_picocolors.default.cyan("/plugin install ponytail@ponytail")}`);
|
|
2602
|
+
} else {
|
|
2603
|
+
usefulCommands.push(`${teal(import_picocolors.default.bold("Ponytail"))} ${import_picocolors.default.dim("Added to opencode.json — installs on next opencode run.")}`);
|
|
2604
|
+
}
|
|
2605
|
+
}
|
|
2606
|
+
O2.message([...nextSteps, "", ...usefulCommands].join(`
|
|
2607
|
+
`), {
|
|
2608
|
+
symbol: teal("▲")
|
|
2609
|
+
});
|
|
2610
|
+
}
|
|
2611
|
+
|
|
2612
|
+
// src/tui/wizard.ts
|
|
2613
|
+
var import_picocolors3 = __toESM(require_picocolors2(), 1);
|
|
2614
|
+
|
|
2615
|
+
// src/tui/display.ts
|
|
2616
|
+
var import_picocolors2 = __toESM(require_picocolors2(), 1);
|
|
2617
|
+
var teal2 = (value) => `\x1B[38;2;47;208;181m${value}\x1B[39m`;
|
|
2459
2618
|
function bgTeal(value) {
|
|
2460
2619
|
return `\x1B[48;2;47;208;181m${value}\x1B[49m`;
|
|
2461
2620
|
}
|
|
@@ -2496,11 +2655,11 @@ function getSelectedPackages(scriptPackages) {
|
|
|
2496
2655
|
}
|
|
2497
2656
|
return packages;
|
|
2498
2657
|
}
|
|
2499
|
-
function
|
|
2500
|
-
return
|
|
2658
|
+
function formatValue2(value) {
|
|
2659
|
+
return import_picocolors2.default.bold(import_picocolors2.default.white(value));
|
|
2501
2660
|
}
|
|
2502
2661
|
function formatToggle(enabled) {
|
|
2503
|
-
return enabled ?
|
|
2662
|
+
return enabled ? import_picocolors2.default.green("Yes") : import_picocolors2.default.dim("No");
|
|
2504
2663
|
}
|
|
2505
2664
|
function padLabel(label) {
|
|
2506
2665
|
return label.padEnd(22, " ");
|
|
@@ -2513,15 +2672,15 @@ function getTreeRoot(config) {
|
|
|
2513
2672
|
return destination.replace(/[\\/]+$/, "");
|
|
2514
2673
|
}
|
|
2515
2674
|
function pushScopedFolder(lines, folderPrefix, scopePrefix, folder, config) {
|
|
2516
|
-
lines.push(
|
|
2675
|
+
lines.push(import_picocolors2.default.dim(`${folderPrefix}${folder}/`));
|
|
2517
2676
|
if (config.useMarketplaceStructure) {
|
|
2518
|
-
lines.push(
|
|
2677
|
+
lines.push(import_picocolors2.default.dim(`${scopePrefix}${getMarketplaceScopeLabel(config)}/`));
|
|
2519
2678
|
}
|
|
2520
2679
|
}
|
|
2521
2680
|
function showFolderTree(config) {
|
|
2522
|
-
const lines = [
|
|
2523
|
-
lines.push(
|
|
2524
|
-
lines.push(
|
|
2681
|
+
const lines = [import_picocolors2.default.bold(import_picocolors2.default.white(getTreeRoot(config)))];
|
|
2682
|
+
lines.push(import_picocolors2.default.dim("├─ packs/"));
|
|
2683
|
+
lines.push(import_picocolors2.default.dim("│ ├─ BP/"));
|
|
2525
2684
|
pushScopedFolder(lines, "│ │ ├─ ", "│ │ │ └─ ", "animation_controllers", config);
|
|
2526
2685
|
pushScopedFolder(lines, "│ │ ├─ ", "│ │ │ └─ ", "animations", config);
|
|
2527
2686
|
pushScopedFolder(lines, "│ │ ├─ ", "│ │ │ └─ ", "blocks", config);
|
|
@@ -2531,164 +2690,122 @@ function showFolderTree(config) {
|
|
|
2531
2690
|
pushScopedFolder(lines, "│ │ ├─ ", "│ │ │ └─ ", "recipes", config);
|
|
2532
2691
|
pushScopedFolder(lines, "│ │ ├─ ", "│ │ │ └─ ", "spawn_rules", config);
|
|
2533
2692
|
pushScopedFolder(lines, "│ │ ├─ ", "│ │ │ └─ ", "structures", config);
|
|
2534
|
-
lines.push(
|
|
2693
|
+
lines.push(import_picocolors2.default.dim("│ │ ├─ texts/"));
|
|
2535
2694
|
pushScopedFolder(lines, "│ │ ├─ ", "│ │ │ └─ ", "trading", config);
|
|
2536
2695
|
if (config.scripting === "javascript" || config.scripting === "typescript" && !config.useRgl) {
|
|
2537
|
-
lines.push(
|
|
2696
|
+
lines.push(import_picocolors2.default.dim(`│ │ ├─ scripts/${config.identifier}/${config.projectId}/`));
|
|
2538
2697
|
}
|
|
2539
|
-
lines.push(
|
|
2540
|
-
lines.push(
|
|
2698
|
+
lines.push(import_picocolors2.default.dim("│ │ └─ manifest.json"));
|
|
2699
|
+
lines.push(import_picocolors2.default.dim("│ └─ RP/"));
|
|
2541
2700
|
pushScopedFolder(lines, "│ ├─ ", "│ │ └─ ", "animation_controllers", config);
|
|
2542
2701
|
pushScopedFolder(lines, "│ ├─ ", "│ │ └─ ", "animations", config);
|
|
2543
2702
|
pushScopedFolder(lines, "│ ├─ ", "│ │ └─ ", "attachables", config);
|
|
2544
2703
|
pushScopedFolder(lines, "│ ├─ ", "│ │ └─ ", "entity", config);
|
|
2545
2704
|
pushScopedFolder(lines, "│ ├─ ", "│ │ └─ ", "fogs", config);
|
|
2546
|
-
lines.push(
|
|
2705
|
+
lines.push(import_picocolors2.default.dim("│ ├─ models/entity/"));
|
|
2547
2706
|
if (config.useMarketplaceStructure) {
|
|
2548
|
-
lines.push(
|
|
2707
|
+
lines.push(import_picocolors2.default.dim(`│ │ └─ ${getMarketplaceScopeLabel(config)}/`));
|
|
2549
2708
|
}
|
|
2550
2709
|
pushScopedFolder(lines, "│ ├─ ", "│ │ └─ ", "particles", config);
|
|
2551
2710
|
pushScopedFolder(lines, "│ ├─ ", "│ │ └─ ", "render_controllers", config);
|
|
2552
2711
|
pushScopedFolder(lines, "│ ├─ ", "│ │ └─ ", "sounds", config);
|
|
2553
|
-
lines.push(
|
|
2554
|
-
lines.push(
|
|
2712
|
+
lines.push(import_picocolors2.default.dim("│ ├─ texts/"));
|
|
2713
|
+
lines.push(import_picocolors2.default.dim("│ ├─ textures/blocks/"));
|
|
2555
2714
|
if (config.useMarketplaceStructure) {
|
|
2556
|
-
lines.push(
|
|
2715
|
+
lines.push(import_picocolors2.default.dim(`│ │ └─ ${getMarketplaceScopeLabel(config)}/`));
|
|
2557
2716
|
}
|
|
2558
|
-
lines.push(
|
|
2717
|
+
lines.push(import_picocolors2.default.dim("│ ├─ textures/entity/"));
|
|
2559
2718
|
if (config.useMarketplaceStructure) {
|
|
2560
|
-
lines.push(
|
|
2719
|
+
lines.push(import_picocolors2.default.dim(`│ │ └─ ${getMarketplaceScopeLabel(config)}/`));
|
|
2561
2720
|
}
|
|
2562
|
-
lines.push(
|
|
2721
|
+
lines.push(import_picocolors2.default.dim("│ ├─ textures/items/"));
|
|
2563
2722
|
if (config.useMarketplaceStructure) {
|
|
2564
|
-
lines.push(
|
|
2723
|
+
lines.push(import_picocolors2.default.dim(`│ │ └─ ${getMarketplaceScopeLabel(config)}/`));
|
|
2565
2724
|
}
|
|
2566
2725
|
pushScopedFolder(lines, "│ ├─ ", "│ │ └─ ", "ui", config);
|
|
2567
|
-
lines.push(
|
|
2568
|
-
lines.push(
|
|
2569
|
-
lines.push(
|
|
2570
|
-
lines.push(
|
|
2571
|
-
lines.push(
|
|
2572
|
-
lines.push(
|
|
2573
|
-
lines.push(
|
|
2726
|
+
lines.push(import_picocolors2.default.dim("│ ├─ blocks.json"));
|
|
2727
|
+
lines.push(import_picocolors2.default.dim("│ ├─ sounds.json"));
|
|
2728
|
+
lines.push(import_picocolors2.default.dim("│ ├─ sound_definitions.json"));
|
|
2729
|
+
lines.push(import_picocolors2.default.dim("│ ├─ item_texture.json"));
|
|
2730
|
+
lines.push(import_picocolors2.default.dim("│ ├─ terrain_texture.json"));
|
|
2731
|
+
lines.push(import_picocolors2.default.dim("│ ├─ flipbook_textures.json"));
|
|
2732
|
+
lines.push(import_picocolors2.default.dim("│ └─ manifest.json"));
|
|
2574
2733
|
if (config.scripting === "typescript") {
|
|
2575
|
-
lines.push(
|
|
2734
|
+
lines.push(import_picocolors2.default.dim("├─ data/scripts/"));
|
|
2576
2735
|
if (config.useRgl) {
|
|
2577
|
-
lines.push(
|
|
2578
|
-
lines.push(
|
|
2579
|
-
lines.push(
|
|
2580
|
-
lines.push(
|
|
2581
|
-
lines.push(
|
|
2582
|
-
lines.push(
|
|
2583
|
-
lines.push(
|
|
2584
|
-
lines.push(
|
|
2585
|
-
lines.push(
|
|
2736
|
+
lines.push(import_picocolors2.default.dim("│ ├─ main.ts"));
|
|
2737
|
+
lines.push(import_picocolors2.default.dim("│ └─ tsconfig.json"));
|
|
2738
|
+
lines.push(import_picocolors2.default.dim("├─ filters/"));
|
|
2739
|
+
lines.push(import_picocolors2.default.dim("│ ├─ rolldown/"));
|
|
2740
|
+
lines.push(import_picocolors2.default.dim("│ │ ├─ main.js"));
|
|
2741
|
+
lines.push(import_picocolors2.default.dim("│ │ └─ package.json"));
|
|
2742
|
+
lines.push(import_picocolors2.default.dim("│ └─ typegen/"));
|
|
2743
|
+
lines.push(import_picocolors2.default.dim("│ ├─ main.js"));
|
|
2744
|
+
lines.push(import_picocolors2.default.dim("│ └─ package.json"));
|
|
2586
2745
|
} else {
|
|
2587
|
-
lines.push(
|
|
2588
|
-
lines.push(
|
|
2746
|
+
lines.push(import_picocolors2.default.dim("│ └─ main.ts"));
|
|
2747
|
+
lines.push(import_picocolors2.default.dim("├─ tsconfig.json"));
|
|
2589
2748
|
}
|
|
2590
|
-
lines.push(
|
|
2749
|
+
lines.push(import_picocolors2.default.dim("├─ dprint.json"));
|
|
2591
2750
|
}
|
|
2592
2751
|
if (config.scripting === "javascript") {
|
|
2593
|
-
lines.push(
|
|
2752
|
+
lines.push(import_picocolors2.default.dim(`├─ packs/BP/scripts/${config.identifier}/${config.projectId}/main.js`));
|
|
2594
2753
|
}
|
|
2595
2754
|
if (config.scripting !== "none") {
|
|
2596
|
-
lines.push(
|
|
2755
|
+
lines.push(import_picocolors2.default.dim("├─ package.json"));
|
|
2597
2756
|
}
|
|
2598
2757
|
if (config.useRgl) {
|
|
2599
|
-
lines.push(
|
|
2758
|
+
lines.push(import_picocolors2.default.dim("├─ config.json"));
|
|
2600
2759
|
}
|
|
2601
2760
|
const aiDocFilename = getAiDocFilename(config.aiSetup);
|
|
2602
2761
|
if (aiDocFilename !== null) {
|
|
2603
|
-
lines.push(
|
|
2604
|
-
lines.push(
|
|
2762
|
+
lines.push(import_picocolors2.default.dim(`├─ ${aiDocFilename}`));
|
|
2763
|
+
lines.push(import_picocolors2.default.dim("├─ .mcp.json"));
|
|
2605
2764
|
if (config.installPonytail && config.aiSetup === "other") {
|
|
2606
|
-
lines.push(
|
|
2765
|
+
lines.push(import_picocolors2.default.dim("├─ opencode.json"));
|
|
2607
2766
|
}
|
|
2608
2767
|
}
|
|
2609
|
-
lines.push(
|
|
2610
|
-
lines.push(
|
|
2768
|
+
lines.push(import_picocolors2.default.dim("├─ .gitignore"));
|
|
2769
|
+
lines.push(import_picocolors2.default.dim("└─ README.md"));
|
|
2611
2770
|
return lines.join(`
|
|
2612
2771
|
`);
|
|
2613
2772
|
}
|
|
2614
2773
|
function showReview(config) {
|
|
2615
|
-
const border =
|
|
2616
|
-
const packages = config.scripting === "none" ?
|
|
2774
|
+
const border = teal2("│");
|
|
2775
|
+
const packages = config.scripting === "none" ? import_picocolors2.default.dim("None") : getSelectedPackages(config.scriptPackages).length > 0 ? formatValue2(getSelectedPackages(config.scriptPackages).join(", ")) : import_picocolors2.default.dim("None");
|
|
2617
2776
|
const lines = [
|
|
2618
|
-
`${whiteOnTeal(" Spawnpack ")} ${
|
|
2777
|
+
`${whiteOnTeal(" Spawnpack ")} ${import_picocolors2.default.dim("Review your Bedrock addon scaffold")}`,
|
|
2619
2778
|
"",
|
|
2620
|
-
`${border} ${
|
|
2621
|
-
`${border} ${
|
|
2779
|
+
`${border} ${import_picocolors2.default.dim(padLabel("Project:"))} ${formatValue2(config.projectName)}`,
|
|
2780
|
+
`${border} ${import_picocolors2.default.dim(padLabel("Author:"))} ${config.author ? formatValue2(config.author) : import_picocolors2.default.dim("—")}`,
|
|
2622
2781
|
...config.useMarketplaceStructure ? [
|
|
2623
|
-
`${border} ${
|
|
2624
|
-
`${border} ${
|
|
2625
|
-
`${border} ${
|
|
2782
|
+
`${border} ${import_picocolors2.default.dim(padLabel("Publisher ID:"))} ${formatValue2(config.identifier)}`,
|
|
2783
|
+
`${border} ${import_picocolors2.default.dim(padLabel("Project ID:"))} ${formatValue2(config.projectId)}`,
|
|
2784
|
+
`${border} ${import_picocolors2.default.dim(padLabel("Marketplace structure:"))} ${formatValue2(getMarketplaceScopeLabel(config))}`
|
|
2626
2785
|
] : [
|
|
2627
|
-
`${border} ${
|
|
2786
|
+
`${border} ${import_picocolors2.default.dim(padLabel("Marketplace structure:"))} ${import_picocolors2.default.dim("Disabled")}`
|
|
2628
2787
|
],
|
|
2629
|
-
`${border} ${
|
|
2630
|
-
`${border} ${
|
|
2631
|
-
`${border} ${
|
|
2632
|
-
`${border} ${
|
|
2633
|
-
`${border} ${
|
|
2634
|
-
`${border} ${
|
|
2635
|
-
...config.aiSetup !== "none" ? [`${border} ${
|
|
2788
|
+
`${border} ${import_picocolors2.default.dim(padLabel("Destination:"))} ${formatValue2(config.destination)}`,
|
|
2789
|
+
`${border} ${import_picocolors2.default.dim(padLabel("Scripting:"))} ${formatValue2(getScriptingLabel(config.scripting))}`,
|
|
2790
|
+
`${border} ${import_picocolors2.default.dim(padLabel("Packages:"))} ${packages}`,
|
|
2791
|
+
`${border} ${import_picocolors2.default.dim(padLabel("rgl:"))} ${formatToggle(config.useRgl)}`,
|
|
2792
|
+
`${border} ${import_picocolors2.default.dim(padLabel("Rockide:"))} ${formatToggle(config.installRockide)}`,
|
|
2793
|
+
`${border} ${import_picocolors2.default.dim(padLabel("AI Setup:"))} ${formatValue2(getAiSetupLabel(config.aiSetup))}`,
|
|
2794
|
+
...config.aiSetup !== "none" ? [`${border} ${import_picocolors2.default.dim(padLabel("Ponytail:"))} ${formatToggle(config.installPonytail)}`] : [],
|
|
2636
2795
|
"",
|
|
2637
|
-
`${border} ${
|
|
2796
|
+
`${border} ${teal2(import_picocolors2.default.bold("Planned structure"))}`,
|
|
2638
2797
|
...showFolderTree(config).split(`
|
|
2639
2798
|
`).map((line) => `${border} ${line}`)
|
|
2640
2799
|
];
|
|
2641
2800
|
O2.message(lines.join(`
|
|
2642
|
-
`), { symbol:
|
|
2643
|
-
}
|
|
2644
|
-
function showPostGeneration(config) {
|
|
2645
|
-
const nextSteps = [teal(import_picocolors.default.bold("Next steps"))];
|
|
2646
|
-
if (config.destination !== "." && config.destination !== "./") {
|
|
2647
|
-
nextSteps.push(` ${import_picocolors.default.cyan("cd")} ${formatValue(config.destination)}`);
|
|
2648
|
-
}
|
|
2649
|
-
if (config.scripting !== "none") {
|
|
2650
|
-
nextSteps.push(` ${import_picocolors.default.cyan("bun install")} ${import_picocolors.default.dim("or")} ${import_picocolors.default.cyan("npm install")} ${import_picocolors.default.dim("Install project dependencies")}`);
|
|
2651
|
-
}
|
|
2652
|
-
if (config.useRgl) {
|
|
2653
|
-
nextSteps.push(` ${import_picocolors.default.cyan("rgl watch")} ${import_picocolors.default.dim("Watch files and rebuild/export while you work")}`);
|
|
2654
|
-
}
|
|
2655
|
-
const usefulCommands = [teal(import_picocolors.default.bold("Useful commands"))];
|
|
2656
|
-
if (config.useRgl) {
|
|
2657
|
-
usefulCommands.push(` ${import_picocolors.default.cyan("rgl run")} ${import_picocolors.default.dim("Build for development")}`);
|
|
2658
|
-
usefulCommands.push(` ${import_picocolors.default.cyan("rgl run build")} ${import_picocolors.default.dim("Build for distribution")}`);
|
|
2659
|
-
}
|
|
2660
|
-
if (config.scripting === "typescript") {
|
|
2661
|
-
usefulCommands.push(` ${import_picocolors.default.cyan("bun run typecheck")} ${import_picocolors.default.dim("or")} ${import_picocolors.default.cyan("npm run typecheck")} ${import_picocolors.default.dim("Check TypeScript types")}`);
|
|
2662
|
-
}
|
|
2663
|
-
if (config.scripting === "none" && !config.useRgl) {
|
|
2664
|
-
usefulCommands.push(` ${import_picocolors.default.dim("No extra build commands needed for this scaffold")}`);
|
|
2665
|
-
}
|
|
2666
|
-
if (config.aiSetup !== "none") {
|
|
2667
|
-
usefulCommands.push("");
|
|
2668
|
-
usefulCommands.push(`${teal(import_picocolors.default.bold("Note"))} ${import_picocolors.default.dim(".mcp.json is ready to use — the configured MCP servers need no API keys.")}`);
|
|
2669
|
-
}
|
|
2670
|
-
if (config.installPonytail) {
|
|
2671
|
-
usefulCommands.push("");
|
|
2672
|
-
if (config.aiSetup === "claude") {
|
|
2673
|
-
usefulCommands.push(`${teal(import_picocolors.default.bold("Ponytail"))} ${import_picocolors.default.dim("Run inside Claude Code:")}`);
|
|
2674
|
-
usefulCommands.push(` ${import_picocolors.default.cyan("/plugin marketplace add DietrichGebert/ponytail")}`);
|
|
2675
|
-
usefulCommands.push(` ${import_picocolors.default.cyan("/plugin install ponytail@ponytail")}`);
|
|
2676
|
-
} else {
|
|
2677
|
-
usefulCommands.push(`${teal(import_picocolors.default.bold("Ponytail"))} ${import_picocolors.default.dim("Added to opencode.json — installs on next opencode run.")}`);
|
|
2678
|
-
}
|
|
2679
|
-
}
|
|
2680
|
-
O2.message([...nextSteps, "", ...usefulCommands].join(`
|
|
2681
|
-
`), {
|
|
2682
|
-
symbol: teal("▲")
|
|
2683
|
-
});
|
|
2801
|
+
`), { symbol: teal2("◆") });
|
|
2684
2802
|
}
|
|
2685
2803
|
|
|
2686
2804
|
// src/tui/wizard.ts
|
|
2687
|
-
var
|
|
2688
|
-
var teal2 = (value) => `\x1B[38;2;47;208;181m${value}\x1B[39m`;
|
|
2805
|
+
var teal3 = (value) => `\x1B[38;2;47;208;181m${value}\x1B[39m`;
|
|
2689
2806
|
var bgTeal2 = (value) => `\x1B[48;2;47;208;181m${value}\x1B[49m`;
|
|
2690
2807
|
function abortWizard() {
|
|
2691
|
-
pt(
|
|
2808
|
+
pt(import_picocolors3.default.red("Spawnpack cancelled."));
|
|
2692
2809
|
return null;
|
|
2693
2810
|
}
|
|
2694
2811
|
function toScriptPackages(selected) {
|
|
@@ -2700,9 +2817,9 @@ function toScriptPackages(selected) {
|
|
|
2700
2817
|
};
|
|
2701
2818
|
}
|
|
2702
2819
|
async function runWizard() {
|
|
2703
|
-
mt(`${bgTeal2(
|
|
2820
|
+
mt(`${bgTeal2(import_picocolors3.default.bold(import_picocolors3.default.white(" Spawnpack ")))} ${teal3("Initialize your Minecraft Bedrock addon")}`);
|
|
2704
2821
|
const projectName = await Ot({
|
|
2705
|
-
message:
|
|
2822
|
+
message: import_picocolors3.default.bold("Project name"),
|
|
2706
2823
|
placeholder: "My Cool Addon",
|
|
2707
2824
|
validate(value) {
|
|
2708
2825
|
const trimmed = (value ?? "").trim();
|
|
@@ -2724,14 +2841,14 @@ async function runWizard() {
|
|
|
2724
2841
|
const trimmedProjectName = projectName.trim();
|
|
2725
2842
|
const suggestedProjectId = generateProjectId(trimmedProjectName);
|
|
2726
2843
|
const author = await Ot({
|
|
2727
|
-
message: `${
|
|
2844
|
+
message: `${import_picocolors3.default.bold("Author")} ${import_picocolors3.default.dim("optional")}`,
|
|
2728
2845
|
placeholder: "Your Name or Studio"
|
|
2729
2846
|
});
|
|
2730
2847
|
if (q(author)) {
|
|
2731
2848
|
return abortWizard();
|
|
2732
2849
|
}
|
|
2733
2850
|
const useMarketplaceStructure = await ot2({
|
|
2734
|
-
message: `${
|
|
2851
|
+
message: `${import_picocolors3.default.bold("Marketplace Add-On structure?")} ${import_picocolors3.default.dim("Nest BP/RP content under publisher_id/project_id for better coexistence")}`,
|
|
2735
2852
|
initialValue: false
|
|
2736
2853
|
});
|
|
2737
2854
|
if (q(useMarketplaceStructure)) {
|
|
@@ -2741,7 +2858,7 @@ async function runWizard() {
|
|
|
2741
2858
|
let identifierValue = defaultPublisherId;
|
|
2742
2859
|
let projectIdValue = suggestedProjectId;
|
|
2743
2860
|
const destination = await Ot({
|
|
2744
|
-
message:
|
|
2861
|
+
message: import_picocolors3.default.bold("Destination folder"),
|
|
2745
2862
|
placeholder: ".",
|
|
2746
2863
|
initialValue: ".",
|
|
2747
2864
|
validate(value) {
|
|
@@ -2762,7 +2879,7 @@ async function runWizard() {
|
|
|
2762
2879
|
return abortWizard();
|
|
2763
2880
|
}
|
|
2764
2881
|
const scripting = await _t({
|
|
2765
|
-
message:
|
|
2882
|
+
message: import_picocolors3.default.bold("Scripting API"),
|
|
2766
2883
|
initialValue: "typescript",
|
|
2767
2884
|
options: [
|
|
2768
2885
|
{ value: "none", label: "None", hint: "manifest-only addon scaffold" },
|
|
@@ -2776,7 +2893,7 @@ async function runWizard() {
|
|
|
2776
2893
|
if (useMarketplaceStructure || scripting !== "none") {
|
|
2777
2894
|
const publisherHint = useMarketplaceStructure ? "used for scoped folders like publisher_id/project_id" : "used for script folders and package naming";
|
|
2778
2895
|
const publisherId = await Ot({
|
|
2779
|
-
message: `${
|
|
2896
|
+
message: `${import_picocolors3.default.bold("Publisher ID")} ${import_picocolors3.default.dim(publisherHint)}`,
|
|
2780
2897
|
placeholder: defaultPublisherId,
|
|
2781
2898
|
initialValue: defaultPublisherId,
|
|
2782
2899
|
validate(value) {
|
|
@@ -2795,7 +2912,7 @@ async function runWizard() {
|
|
|
2795
2912
|
}
|
|
2796
2913
|
identifierValue = publisherId.trim();
|
|
2797
2914
|
const projectId = await Ot({
|
|
2798
|
-
message: `${
|
|
2915
|
+
message: `${import_picocolors3.default.bold("Project ID")} ${import_picocolors3.default.dim("1-10 lowercase letters, numbers, or underscores")}`,
|
|
2799
2916
|
placeholder: suggestedProjectId,
|
|
2800
2917
|
initialValue: suggestedProjectId,
|
|
2801
2918
|
validate(value) {
|
|
@@ -2815,7 +2932,7 @@ async function runWizard() {
|
|
|
2815
2932
|
let useRgl = false;
|
|
2816
2933
|
if (scripting !== "none") {
|
|
2817
2934
|
const selectedPackages = await yt({
|
|
2818
|
-
message:
|
|
2935
|
+
message: import_picocolors3.default.bold("Script packages"),
|
|
2819
2936
|
required: false,
|
|
2820
2937
|
initialValues: Object.entries(DEFAULT_SCRIPT_PACKAGES).filter(([, enabled]) => enabled).map(([key]) => key),
|
|
2821
2938
|
options: [
|
|
@@ -2830,7 +2947,7 @@ async function runWizard() {
|
|
|
2830
2947
|
}
|
|
2831
2948
|
scriptPackages = toScriptPackages(Array.from(new Set(["server", ...selectedPackages])));
|
|
2832
2949
|
const rglChoice = await ot2({
|
|
2833
|
-
message: `${
|
|
2950
|
+
message: `${import_picocolors3.default.bold("Use rgl?")} ${import_picocolors3.default.dim("fast Bedrock addon compiler, 16x faster than Regolith")}`,
|
|
2834
2951
|
initialValue: true
|
|
2835
2952
|
});
|
|
2836
2953
|
if (q(rglChoice)) {
|
|
@@ -2839,14 +2956,14 @@ async function runWizard() {
|
|
|
2839
2956
|
useRgl = rglChoice;
|
|
2840
2957
|
}
|
|
2841
2958
|
const installRockide2 = await ot2({
|
|
2842
|
-
message: `${
|
|
2959
|
+
message: `${import_picocolors3.default.bold("Install Rockide?")} ${import_picocolors3.default.dim("VSCode extension for Bedrock JSON autocompletion")}`,
|
|
2843
2960
|
initialValue: true
|
|
2844
2961
|
});
|
|
2845
2962
|
if (q(installRockide2)) {
|
|
2846
2963
|
return abortWizard();
|
|
2847
2964
|
}
|
|
2848
2965
|
const aiSetup = await _t({
|
|
2849
|
-
message:
|
|
2966
|
+
message: import_picocolors3.default.bold("AI setup"),
|
|
2850
2967
|
initialValue: "none",
|
|
2851
2968
|
options: [
|
|
2852
2969
|
{ value: "none", label: "None", hint: "No AI configuration setup" },
|
|
@@ -2860,7 +2977,7 @@ async function runWizard() {
|
|
|
2860
2977
|
let installPonytail = false;
|
|
2861
2978
|
if (aiSetup !== "none") {
|
|
2862
2979
|
const ponytailChoice = await ot2({
|
|
2863
|
-
message: `${
|
|
2980
|
+
message: `${import_picocolors3.default.bold("Install ponytail plugin?")} ${import_picocolors3.default.dim("Makes your AI agent think like the laziest senior dev in the room. The best code is the code you never wrote. https://github.com/DietrichGebert/ponytail")}`,
|
|
2864
2981
|
initialValue: true
|
|
2865
2982
|
});
|
|
2866
2983
|
if (q(ponytailChoice)) {
|
|
@@ -2884,7 +3001,7 @@ async function runWizard() {
|
|
|
2884
3001
|
};
|
|
2885
3002
|
showReview(config);
|
|
2886
3003
|
const shouldGenerate = await ot2({
|
|
2887
|
-
message: `${
|
|
3004
|
+
message: `${import_picocolors3.default.bold("Generate addon scaffold?")} ${import_picocolors3.default.dim("create the project files now")}`,
|
|
2888
3005
|
initialValue: true
|
|
2889
3006
|
});
|
|
2890
3007
|
if (q(shouldGenerate) || !shouldGenerate) {
|
|
@@ -2894,7 +3011,7 @@ async function runWizard() {
|
|
|
2894
3011
|
}
|
|
2895
3012
|
|
|
2896
3013
|
// src/index.ts
|
|
2897
|
-
var
|
|
3014
|
+
var teal4 = (value) => `\x1B[38;2;47;208;181m${value}\x1B[39m`;
|
|
2898
3015
|
var args = new Set(process.argv.slice(2));
|
|
2899
3016
|
if (args.has("-v") || args.has("--version")) {
|
|
2900
3017
|
const packageJson = await Bun.file(new URL("../package.json", import.meta.url)).json();
|
|
@@ -2906,12 +3023,12 @@ if (config === null) {
|
|
|
2906
3023
|
process.exit(0);
|
|
2907
3024
|
}
|
|
2908
3025
|
var generation = fe();
|
|
2909
|
-
generation.start(
|
|
3026
|
+
generation.start(teal4("Generating your Bedrock addon scaffold..."));
|
|
2910
3027
|
await generateProject(config);
|
|
2911
3028
|
if (config.aiSetup !== "none") {
|
|
2912
3029
|
await setupAi(config.destination, config.aiSetup, config.installPonytail);
|
|
2913
3030
|
}
|
|
2914
3031
|
await runProvisioning(config);
|
|
2915
|
-
generation.stop(
|
|
3032
|
+
generation.stop(import_picocolors4.default.green("Spawnpack scaffold generated."));
|
|
2916
3033
|
showPostGeneration(config);
|
|
2917
|
-
gt(
|
|
3034
|
+
gt(teal4("Your addon is ready."));
|