@base44-preview/cli 0.0.4-pr.53.87c3b5f → 0.0.4-pr.56.1667015
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/cli/index.js +295 -111
- package/package.json +2 -1
package/dist/cli/index.js
CHANGED
|
@@ -4300,7 +4300,7 @@ ${J}${i.trimStart()}`), r$1 = 3 + stripVTControlCharacters(i.trimStart()).length
|
|
|
4300
4300
|
//#endregion
|
|
4301
4301
|
//#region node_modules/p-wait-for/index.js
|
|
4302
4302
|
const resolveValue = Symbol("resolveValue");
|
|
4303
|
-
const sleep
|
|
4303
|
+
const sleep = (ms, signal) => new Promise((resolve$1, reject) => {
|
|
4304
4304
|
if (signal?.aborted) {
|
|
4305
4305
|
reject(signal.reason);
|
|
4306
4306
|
return;
|
|
@@ -4338,14 +4338,14 @@ async function pWaitFor(condition, options = {}) {
|
|
|
4338
4338
|
const timeoutMs = typeof timeout$1 === "number" ? timeout$1 : timeout$1?.milliseconds ?? Number.POSITIVE_INFINITY;
|
|
4339
4339
|
const timeoutSignal = timeoutMs === Number.POSITIVE_INFINITY ? void 0 : AbortSignal.timeout(timeoutMs);
|
|
4340
4340
|
const combinedSignal = timeoutSignal && signal ? AbortSignal.any([timeoutSignal, signal]) : timeoutSignal ?? signal;
|
|
4341
|
-
if (!before) await sleep
|
|
4341
|
+
if (!before) await sleep(interval, combinedSignal);
|
|
4342
4342
|
if (combinedSignal?.aborted) return handleAbortError(timeoutSignal, timeout$1, signal);
|
|
4343
4343
|
while (true) try {
|
|
4344
4344
|
const value = await condition();
|
|
4345
4345
|
if (typeof value === "object" && value !== null && resolveValue in value) return value[resolveValue];
|
|
4346
4346
|
if (value === true) return;
|
|
4347
4347
|
if (value === false) {
|
|
4348
|
-
await sleep
|
|
4348
|
+
await sleep(interval, combinedSignal);
|
|
4349
4349
|
continue;
|
|
4350
4350
|
}
|
|
4351
4351
|
throw new TypeError("Expected condition to return a boolean");
|
|
@@ -9210,7 +9210,7 @@ var require_package$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
9210
9210
|
var require_main = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
9211
9211
|
const fs$6 = __require("fs");
|
|
9212
9212
|
const path$11 = __require("path");
|
|
9213
|
-
const os$
|
|
9213
|
+
const os$4 = __require("os");
|
|
9214
9214
|
const crypto = __require("crypto");
|
|
9215
9215
|
const version = require_package$1().version;
|
|
9216
9216
|
const TIPS = [
|
|
@@ -9352,7 +9352,7 @@ var require_main = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
9352
9352
|
return null;
|
|
9353
9353
|
}
|
|
9354
9354
|
function _resolveHome(envPath) {
|
|
9355
|
-
return envPath[0] === "~" ? path$11.join(os$
|
|
9355
|
+
return envPath[0] === "~" ? path$11.join(os$4.homedir(), envPath.slice(1)) : envPath;
|
|
9356
9356
|
}
|
|
9357
9357
|
function _configVault(options) {
|
|
9358
9358
|
const debug = parseBoolean(process.env.DOTENV_CONFIG_DEBUG || options && options.debug);
|
|
@@ -9712,9 +9712,9 @@ var require_fs$3 = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
9712
9712
|
var require_path = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
9713
9713
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9714
9714
|
exports.convertPosixPathToPattern = exports.convertWindowsPathToPattern = exports.convertPathToPattern = exports.escapePosixPath = exports.escapeWindowsPath = exports.escape = exports.removeLeadingDotSegment = exports.makeAbsolute = exports.unixify = void 0;
|
|
9715
|
-
const os$
|
|
9715
|
+
const os$3 = __require("os");
|
|
9716
9716
|
const path$10 = __require("path");
|
|
9717
|
-
const IS_WINDOWS_PLATFORM = os$
|
|
9717
|
+
const IS_WINDOWS_PLATFORM = os$3.platform() === "win32";
|
|
9718
9718
|
const LEADING_DOT_SEGMENT_CHARACTERS_COUNT = 2;
|
|
9719
9719
|
/**
|
|
9720
9720
|
* All non-escaped special characters.
|
|
@@ -15116,12 +15116,12 @@ var require_settings = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
15116
15116
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15117
15117
|
exports.DEFAULT_FILE_SYSTEM_ADAPTER = void 0;
|
|
15118
15118
|
const fs$3 = __require("fs");
|
|
15119
|
-
const os$
|
|
15119
|
+
const os$2 = __require("os");
|
|
15120
15120
|
/**
|
|
15121
15121
|
* The `os.cpus` method can return zero. We expect the number of cores to be greater than zero.
|
|
15122
15122
|
* https://github.com/nodejs/node/blob/7faeddf23a98c53896f8b574a6e66589e8fb1eb8/lib/os.js#L106-L107
|
|
15123
15123
|
*/
|
|
15124
|
-
const CPU_COUNT = Math.max(os$
|
|
15124
|
+
const CPU_COUNT = Math.max(os$2.cpus().length, 1);
|
|
15125
15125
|
exports.DEFAULT_FILE_SYSTEM_ADAPTER = {
|
|
15126
15126
|
lstat: fs$3.lstat,
|
|
15127
15127
|
lstatSync: fs$3.lstatSync,
|
|
@@ -18565,95 +18565,19 @@ async function getUserInfo(accessToken) {
|
|
|
18565
18565
|
return result.data;
|
|
18566
18566
|
}
|
|
18567
18567
|
|
|
18568
|
-
//#endregion
|
|
18569
|
-
//#region src/cli/utils/animate.ts
|
|
18570
|
-
const orange$2 = source_default.hex("#E86B3C");
|
|
18571
|
-
const gold = source_default.hex("#FFD700");
|
|
18572
|
-
/**
|
|
18573
|
-
* Sleep for a specified number of milliseconds.
|
|
18574
|
-
*/
|
|
18575
|
-
function sleep(ms) {
|
|
18576
|
-
return new Promise((resolve$1) => setTimeout(resolve$1, ms));
|
|
18577
|
-
}
|
|
18578
|
-
/**
|
|
18579
|
-
* Animate a single line with a left-to-right color reveal.
|
|
18580
|
-
*/
|
|
18581
|
-
async function animateLineReveal(line, duration$2) {
|
|
18582
|
-
const steps = 8;
|
|
18583
|
-
const stepDuration = duration$2 / steps;
|
|
18584
|
-
for (let step = 0; step <= steps; step++) {
|
|
18585
|
-
const progress = step / steps;
|
|
18586
|
-
const revealIndex = Math.floor(progress * line.length);
|
|
18587
|
-
let output = "";
|
|
18588
|
-
for (let i = 0; i < line.length; i++) if (i < revealIndex) output += orange$2(line[i]);
|
|
18589
|
-
else if (i === revealIndex) output += gold(line[i]);
|
|
18590
|
-
else output += source_default.dim(line[i]);
|
|
18591
|
-
process.stdout.write(`\r${output}`);
|
|
18592
|
-
await sleep(stepDuration);
|
|
18593
|
-
}
|
|
18594
|
-
process.stdout.write(`\r${orange$2(line)}\n`);
|
|
18595
|
-
}
|
|
18596
|
-
/**
|
|
18597
|
-
* Quick shimmer pass over the entire banner.
|
|
18598
|
-
*/
|
|
18599
|
-
async function shimmerPass(lines, duration$2) {
|
|
18600
|
-
const moveUp = `\x1b[${lines.length}A`;
|
|
18601
|
-
const steps = 12;
|
|
18602
|
-
const stepDuration = duration$2 / steps;
|
|
18603
|
-
const maxWidth = Math.max(...lines.map((l$1) => l$1.length));
|
|
18604
|
-
for (let step = 0; step <= steps; step++) {
|
|
18605
|
-
const shimmerPos = Math.floor(step / steps * (maxWidth + 6));
|
|
18606
|
-
process.stdout.write(moveUp);
|
|
18607
|
-
for (const line of lines) {
|
|
18608
|
-
let output = "";
|
|
18609
|
-
for (let i = 0; i < line.length; i++) {
|
|
18610
|
-
const dist = Math.abs(i - shimmerPos);
|
|
18611
|
-
if (dist < 3) output += dist === 0 ? source_default.white(line[i]) : gold(line[i]);
|
|
18612
|
-
else output += orange$2(line[i]);
|
|
18613
|
-
}
|
|
18614
|
-
console.log(output);
|
|
18615
|
-
}
|
|
18616
|
-
await sleep(stepDuration);
|
|
18617
|
-
}
|
|
18618
|
-
process.stdout.write(moveUp);
|
|
18619
|
-
for (const line of lines) console.log(orange$2(line));
|
|
18620
|
-
}
|
|
18621
|
-
/**
|
|
18622
|
-
* Animate the output with a smooth line-by-line reveal.
|
|
18623
|
-
* Each line fades in with a gradient sweep effect.
|
|
18624
|
-
*
|
|
18625
|
-
* Total duration: ~1.5 seconds for a magical but not slow feel.
|
|
18626
|
-
*/
|
|
18627
|
-
async function printAnimatedLines(lines) {
|
|
18628
|
-
const lineDelay = 1e3 / lines.length;
|
|
18629
|
-
for (let i = 0; i < lines.length; i++) {
|
|
18630
|
-
const line = lines[i];
|
|
18631
|
-
await animateLineReveal(line, 100);
|
|
18632
|
-
if (i < lines.length - 1) await sleep(lineDelay - 100);
|
|
18633
|
-
}
|
|
18634
|
-
await shimmerPass(lines, 200);
|
|
18635
|
-
}
|
|
18636
|
-
|
|
18637
18568
|
//#endregion
|
|
18638
18569
|
//#region src/cli/utils/banner.ts
|
|
18639
|
-
const orange
|
|
18640
|
-
const
|
|
18641
|
-
|
|
18642
|
-
|
|
18643
|
-
|
|
18644
|
-
|
|
18645
|
-
|
|
18646
|
-
|
|
18647
|
-
|
|
18648
|
-
|
|
18649
|
-
|
|
18650
|
-
/**
|
|
18651
|
-
* Print the Base44 banner with smooth animation if supported,
|
|
18652
|
-
* or fall back to static banner.
|
|
18653
|
-
*/
|
|
18654
|
-
async function printBanner() {
|
|
18655
|
-
if (process.stdout.isTTY) await printAnimatedLines(BANNER_LINES);
|
|
18656
|
-
else console.log(orange$1(BANNER_LINES.join("\n")));
|
|
18570
|
+
const orange = source_default.hex("#E86B3C");
|
|
18571
|
+
const BANNER = `
|
|
18572
|
+
${orange("██████╗ █████╗ ███████╗███████╗ ██╗ ██╗██╗ ██╗")}
|
|
18573
|
+
${orange("██╔══██╗██╔══██╗██╔════╝██╔════╝ ██║ ██║██║ ██║")}
|
|
18574
|
+
${orange("██████╔╝███████║███████╗█████╗ ███████║███████║")}
|
|
18575
|
+
${orange("██╔══██╗██╔══██║╚════██║██╔══╝ ╚════██║╚════██║")}
|
|
18576
|
+
${orange("██████╔╝██║ ██║███████║███████╗ ██║ ██║")}
|
|
18577
|
+
${orange("╚═════╝ ╚═╝ ╚═╝╚══════╝╚══════╝ ╚═╝ ╚═╝")}
|
|
18578
|
+
`;
|
|
18579
|
+
function printBanner() {
|
|
18580
|
+
console.log(BANNER);
|
|
18657
18581
|
}
|
|
18658
18582
|
|
|
18659
18583
|
//#endregion
|
|
@@ -18682,7 +18606,7 @@ const base44Color = source_default.bgHex("#E86B3C");
|
|
|
18682
18606
|
* });
|
|
18683
18607
|
*/
|
|
18684
18608
|
async function runCommand(commandFn, options) {
|
|
18685
|
-
if (options?.fullBanner)
|
|
18609
|
+
if (options?.fullBanner) printBanner();
|
|
18686
18610
|
else Ie(base44Color(" Base 44 "));
|
|
18687
18611
|
await loadProjectEnv();
|
|
18688
18612
|
try {
|
|
@@ -18760,6 +18684,270 @@ const onPromptCancel = () => {
|
|
|
18760
18684
|
process.exit(0);
|
|
18761
18685
|
};
|
|
18762
18686
|
|
|
18687
|
+
//#endregion
|
|
18688
|
+
//#region node_modules/ansi-escapes/index.js
|
|
18689
|
+
const ESC = "\x1B[";
|
|
18690
|
+
const OSC = "\x1B]";
|
|
18691
|
+
const BEL = "\x07";
|
|
18692
|
+
const SEP = ";";
|
|
18693
|
+
const isTerminalApp = process.env.TERM_PROGRAM === "Apple_Terminal";
|
|
18694
|
+
const ansiEscapes = {};
|
|
18695
|
+
ansiEscapes.cursorTo = (x$2, y$2) => {
|
|
18696
|
+
if (typeof x$2 !== "number") throw new TypeError("The `x` argument is required");
|
|
18697
|
+
if (typeof y$2 !== "number") return ESC + (x$2 + 1) + "G";
|
|
18698
|
+
return ESC + (y$2 + 1) + ";" + (x$2 + 1) + "H";
|
|
18699
|
+
};
|
|
18700
|
+
ansiEscapes.cursorMove = (x$2, y$2) => {
|
|
18701
|
+
if (typeof x$2 !== "number") throw new TypeError("The `x` argument is required");
|
|
18702
|
+
let returnValue = "";
|
|
18703
|
+
if (x$2 < 0) returnValue += ESC + -x$2 + "D";
|
|
18704
|
+
else if (x$2 > 0) returnValue += ESC + x$2 + "C";
|
|
18705
|
+
if (y$2 < 0) returnValue += ESC + -y$2 + "A";
|
|
18706
|
+
else if (y$2 > 0) returnValue += ESC + y$2 + "B";
|
|
18707
|
+
return returnValue;
|
|
18708
|
+
};
|
|
18709
|
+
ansiEscapes.cursorUp = (count = 1) => ESC + count + "A";
|
|
18710
|
+
ansiEscapes.cursorDown = (count = 1) => ESC + count + "B";
|
|
18711
|
+
ansiEscapes.cursorForward = (count = 1) => ESC + count + "C";
|
|
18712
|
+
ansiEscapes.cursorBackward = (count = 1) => ESC + count + "D";
|
|
18713
|
+
ansiEscapes.cursorLeft = ESC + "G";
|
|
18714
|
+
ansiEscapes.cursorSavePosition = isTerminalApp ? "\x1B7" : ESC + "s";
|
|
18715
|
+
ansiEscapes.cursorRestorePosition = isTerminalApp ? "\x1B8" : ESC + "u";
|
|
18716
|
+
ansiEscapes.cursorGetPosition = ESC + "6n";
|
|
18717
|
+
ansiEscapes.cursorNextLine = ESC + "E";
|
|
18718
|
+
ansiEscapes.cursorPrevLine = ESC + "F";
|
|
18719
|
+
ansiEscapes.cursorHide = ESC + "?25l";
|
|
18720
|
+
ansiEscapes.cursorShow = ESC + "?25h";
|
|
18721
|
+
ansiEscapes.eraseLines = (count) => {
|
|
18722
|
+
let clear = "";
|
|
18723
|
+
for (let i = 0; i < count; i++) clear += ansiEscapes.eraseLine + (i < count - 1 ? ansiEscapes.cursorUp() : "");
|
|
18724
|
+
if (count) clear += ansiEscapes.cursorLeft;
|
|
18725
|
+
return clear;
|
|
18726
|
+
};
|
|
18727
|
+
ansiEscapes.eraseEndLine = ESC + "K";
|
|
18728
|
+
ansiEscapes.eraseStartLine = ESC + "1K";
|
|
18729
|
+
ansiEscapes.eraseLine = ESC + "2K";
|
|
18730
|
+
ansiEscapes.eraseDown = ESC + "J";
|
|
18731
|
+
ansiEscapes.eraseUp = ESC + "1J";
|
|
18732
|
+
ansiEscapes.eraseScreen = ESC + "2J";
|
|
18733
|
+
ansiEscapes.scrollUp = ESC + "S";
|
|
18734
|
+
ansiEscapes.scrollDown = ESC + "T";
|
|
18735
|
+
ansiEscapes.clearScreen = "\x1Bc";
|
|
18736
|
+
ansiEscapes.clearTerminal = process.platform === "win32" ? `${ansiEscapes.eraseScreen}${ESC}0f` : `${ansiEscapes.eraseScreen}${ESC}3J${ESC}H`;
|
|
18737
|
+
ansiEscapes.beep = BEL;
|
|
18738
|
+
ansiEscapes.link = (text, url$1) => {
|
|
18739
|
+
return [
|
|
18740
|
+
OSC,
|
|
18741
|
+
"8",
|
|
18742
|
+
SEP,
|
|
18743
|
+
SEP,
|
|
18744
|
+
url$1,
|
|
18745
|
+
BEL,
|
|
18746
|
+
text,
|
|
18747
|
+
OSC,
|
|
18748
|
+
"8",
|
|
18749
|
+
SEP,
|
|
18750
|
+
SEP,
|
|
18751
|
+
BEL
|
|
18752
|
+
].join("");
|
|
18753
|
+
};
|
|
18754
|
+
ansiEscapes.image = (buffer, options = {}) => {
|
|
18755
|
+
let returnValue = `${OSC}1337;File=inline=1`;
|
|
18756
|
+
if (options.width) returnValue += `;width=${options.width}`;
|
|
18757
|
+
if (options.height) returnValue += `;height=${options.height}`;
|
|
18758
|
+
if (options.preserveAspectRatio === false) returnValue += ";preserveAspectRatio=0";
|
|
18759
|
+
return returnValue + ":" + buffer.toString("base64") + BEL;
|
|
18760
|
+
};
|
|
18761
|
+
ansiEscapes.iTerm = {
|
|
18762
|
+
setCwd: (cwd = process.cwd()) => `${OSC}50;CurrentDir=${cwd}${BEL}`,
|
|
18763
|
+
annotation: (message, options = {}) => {
|
|
18764
|
+
let returnValue = `${OSC}1337;`;
|
|
18765
|
+
const hasX = typeof options.x !== "undefined";
|
|
18766
|
+
const hasY = typeof options.y !== "undefined";
|
|
18767
|
+
if ((hasX || hasY) && !(hasX && hasY && typeof options.length !== "undefined")) throw new Error("`x`, `y` and `length` must be defined when `x` or `y` is defined");
|
|
18768
|
+
message = message.replace(/\|/g, "");
|
|
18769
|
+
returnValue += options.isHidden ? "AddHiddenAnnotation=" : "AddAnnotation=";
|
|
18770
|
+
if (options.length > 0) returnValue += (hasX ? [
|
|
18771
|
+
message,
|
|
18772
|
+
options.length,
|
|
18773
|
+
options.x,
|
|
18774
|
+
options.y
|
|
18775
|
+
] : [options.length, message]).join("|");
|
|
18776
|
+
else returnValue += message;
|
|
18777
|
+
return returnValue + BEL;
|
|
18778
|
+
}
|
|
18779
|
+
};
|
|
18780
|
+
var ansi_escapes_default = ansiEscapes;
|
|
18781
|
+
|
|
18782
|
+
//#endregion
|
|
18783
|
+
//#region node_modules/has-flag/index.js
|
|
18784
|
+
var require_has_flag = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
18785
|
+
module.exports = (flag, argv = process.argv) => {
|
|
18786
|
+
const prefix = flag.startsWith("-") ? "" : flag.length === 1 ? "-" : "--";
|
|
18787
|
+
const position = argv.indexOf(prefix + flag);
|
|
18788
|
+
const terminatorPosition = argv.indexOf("--");
|
|
18789
|
+
return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);
|
|
18790
|
+
};
|
|
18791
|
+
}));
|
|
18792
|
+
|
|
18793
|
+
//#endregion
|
|
18794
|
+
//#region node_modules/supports-color/index.js
|
|
18795
|
+
var require_supports_color = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
18796
|
+
const os$1 = __require("os");
|
|
18797
|
+
const tty$1 = __require("tty");
|
|
18798
|
+
const hasFlag = require_has_flag();
|
|
18799
|
+
const { env } = process;
|
|
18800
|
+
let forceColor;
|
|
18801
|
+
if (hasFlag("no-color") || hasFlag("no-colors") || hasFlag("color=false") || hasFlag("color=never")) forceColor = 0;
|
|
18802
|
+
else if (hasFlag("color") || hasFlag("colors") || hasFlag("color=true") || hasFlag("color=always")) forceColor = 1;
|
|
18803
|
+
if ("FORCE_COLOR" in env) if (env.FORCE_COLOR === "true") forceColor = 1;
|
|
18804
|
+
else if (env.FORCE_COLOR === "false") forceColor = 0;
|
|
18805
|
+
else forceColor = env.FORCE_COLOR.length === 0 ? 1 : Math.min(parseInt(env.FORCE_COLOR, 10), 3);
|
|
18806
|
+
function translateLevel(level) {
|
|
18807
|
+
if (level === 0) return false;
|
|
18808
|
+
return {
|
|
18809
|
+
level,
|
|
18810
|
+
hasBasic: true,
|
|
18811
|
+
has256: level >= 2,
|
|
18812
|
+
has16m: level >= 3
|
|
18813
|
+
};
|
|
18814
|
+
}
|
|
18815
|
+
function supportsColor(haveStream, streamIsTTY) {
|
|
18816
|
+
if (forceColor === 0) return 0;
|
|
18817
|
+
if (hasFlag("color=16m") || hasFlag("color=full") || hasFlag("color=truecolor")) return 3;
|
|
18818
|
+
if (hasFlag("color=256")) return 2;
|
|
18819
|
+
if (haveStream && !streamIsTTY && forceColor === void 0) return 0;
|
|
18820
|
+
const min = forceColor || 0;
|
|
18821
|
+
if (env.TERM === "dumb") return min;
|
|
18822
|
+
if (process.platform === "win32") {
|
|
18823
|
+
const osRelease = os$1.release().split(".");
|
|
18824
|
+
if (Number(osRelease[0]) >= 10 && Number(osRelease[2]) >= 10586) return Number(osRelease[2]) >= 14931 ? 3 : 2;
|
|
18825
|
+
return 1;
|
|
18826
|
+
}
|
|
18827
|
+
if ("CI" in env) {
|
|
18828
|
+
if ([
|
|
18829
|
+
"TRAVIS",
|
|
18830
|
+
"CIRCLECI",
|
|
18831
|
+
"APPVEYOR",
|
|
18832
|
+
"GITLAB_CI",
|
|
18833
|
+
"GITHUB_ACTIONS",
|
|
18834
|
+
"BUILDKITE"
|
|
18835
|
+
].some((sign) => sign in env) || env.CI_NAME === "codeship") return 1;
|
|
18836
|
+
return min;
|
|
18837
|
+
}
|
|
18838
|
+
if ("TEAMCITY_VERSION" in env) return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;
|
|
18839
|
+
if (env.COLORTERM === "truecolor") return 3;
|
|
18840
|
+
if ("TERM_PROGRAM" in env) {
|
|
18841
|
+
const version$2 = parseInt((env.TERM_PROGRAM_VERSION || "").split(".")[0], 10);
|
|
18842
|
+
switch (env.TERM_PROGRAM) {
|
|
18843
|
+
case "iTerm.app": return version$2 >= 3 ? 3 : 2;
|
|
18844
|
+
case "Apple_Terminal": return 2;
|
|
18845
|
+
}
|
|
18846
|
+
}
|
|
18847
|
+
if (/-256(color)?$/i.test(env.TERM)) return 2;
|
|
18848
|
+
if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) return 1;
|
|
18849
|
+
if ("COLORTERM" in env) return 1;
|
|
18850
|
+
return min;
|
|
18851
|
+
}
|
|
18852
|
+
function getSupportLevel(stream) {
|
|
18853
|
+
return translateLevel(supportsColor(stream, stream && stream.isTTY));
|
|
18854
|
+
}
|
|
18855
|
+
module.exports = {
|
|
18856
|
+
supportsColor: getSupportLevel,
|
|
18857
|
+
stdout: translateLevel(supportsColor(true, tty$1.isatty(1))),
|
|
18858
|
+
stderr: translateLevel(supportsColor(true, tty$1.isatty(2)))
|
|
18859
|
+
};
|
|
18860
|
+
}));
|
|
18861
|
+
|
|
18862
|
+
//#endregion
|
|
18863
|
+
//#region node_modules/supports-hyperlinks/index.js
|
|
18864
|
+
var require_supports_hyperlinks = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
18865
|
+
const supportsColor = require_supports_color();
|
|
18866
|
+
const hasFlag = require_has_flag();
|
|
18867
|
+
function parseVersion(versionString) {
|
|
18868
|
+
if (/^\d{3,4}$/.test(versionString)) {
|
|
18869
|
+
const m$1 = /(\d{1,2})(\d{2})/.exec(versionString);
|
|
18870
|
+
return {
|
|
18871
|
+
major: 0,
|
|
18872
|
+
minor: parseInt(m$1[1], 10),
|
|
18873
|
+
patch: parseInt(m$1[2], 10)
|
|
18874
|
+
};
|
|
18875
|
+
}
|
|
18876
|
+
const versions = (versionString || "").split(".").map((n) => parseInt(n, 10));
|
|
18877
|
+
return {
|
|
18878
|
+
major: versions[0],
|
|
18879
|
+
minor: versions[1],
|
|
18880
|
+
patch: versions[2]
|
|
18881
|
+
};
|
|
18882
|
+
}
|
|
18883
|
+
function supportsHyperlink(stream) {
|
|
18884
|
+
const { env: env$1 } = process;
|
|
18885
|
+
if ("FORCE_HYPERLINK" in env$1) return !(env$1.FORCE_HYPERLINK.length > 0 && parseInt(env$1.FORCE_HYPERLINK, 10) === 0);
|
|
18886
|
+
if (hasFlag("no-hyperlink") || hasFlag("no-hyperlinks") || hasFlag("hyperlink=false") || hasFlag("hyperlink=never")) return false;
|
|
18887
|
+
if (hasFlag("hyperlink=true") || hasFlag("hyperlink=always")) return true;
|
|
18888
|
+
if ("NETLIFY" in env$1) return true;
|
|
18889
|
+
if (!supportsColor.supportsColor(stream)) return false;
|
|
18890
|
+
if (stream && !stream.isTTY) return false;
|
|
18891
|
+
if (process.platform === "win32") return false;
|
|
18892
|
+
if ("CI" in env$1) return false;
|
|
18893
|
+
if ("TEAMCITY_VERSION" in env$1) return false;
|
|
18894
|
+
if ("TERM_PROGRAM" in env$1) {
|
|
18895
|
+
const version$2 = parseVersion(env$1.TERM_PROGRAM_VERSION);
|
|
18896
|
+
switch (env$1.TERM_PROGRAM) {
|
|
18897
|
+
case "iTerm.app":
|
|
18898
|
+
if (version$2.major === 3) return version$2.minor >= 1;
|
|
18899
|
+
return version$2.major > 3;
|
|
18900
|
+
case "WezTerm": return version$2.major >= 20200620;
|
|
18901
|
+
case "vscode": return version$2.major > 1 || version$2.major === 1 && version$2.minor >= 72;
|
|
18902
|
+
}
|
|
18903
|
+
}
|
|
18904
|
+
if ("VTE_VERSION" in env$1) {
|
|
18905
|
+
if (env$1.VTE_VERSION === "0.50.0") return false;
|
|
18906
|
+
const version$2 = parseVersion(env$1.VTE_VERSION);
|
|
18907
|
+
return version$2.major > 0 || version$2.minor >= 50;
|
|
18908
|
+
}
|
|
18909
|
+
return false;
|
|
18910
|
+
}
|
|
18911
|
+
module.exports = {
|
|
18912
|
+
supportsHyperlink,
|
|
18913
|
+
stdout: supportsHyperlink(process.stdout),
|
|
18914
|
+
stderr: supportsHyperlink(process.stderr)
|
|
18915
|
+
};
|
|
18916
|
+
}));
|
|
18917
|
+
|
|
18918
|
+
//#endregion
|
|
18919
|
+
//#region node_modules/terminal-link/index.js
|
|
18920
|
+
var import_supports_hyperlinks = /* @__PURE__ */ __toESM(require_supports_hyperlinks(), 1);
|
|
18921
|
+
function terminalLink(text, url$1, { target = "stdout", ...options } = {}) {
|
|
18922
|
+
if (!import_supports_hyperlinks.default[target]) {
|
|
18923
|
+
if (options.fallback === false) return text;
|
|
18924
|
+
return typeof options.fallback === "function" ? options.fallback(text, url$1) : `${text} (\u200B${url$1}\u200B)`;
|
|
18925
|
+
}
|
|
18926
|
+
return ansi_escapes_default.link(text, url$1);
|
|
18927
|
+
}
|
|
18928
|
+
terminalLink.isSupported = import_supports_hyperlinks.default.stdout;
|
|
18929
|
+
terminalLink.stderr = (text, url$1, options = {}) => terminalLink(text, url$1, {
|
|
18930
|
+
target: "stderr",
|
|
18931
|
+
...options
|
|
18932
|
+
});
|
|
18933
|
+
terminalLink.stderr.isSupported = import_supports_hyperlinks.default.stderr;
|
|
18934
|
+
|
|
18935
|
+
//#endregion
|
|
18936
|
+
//#region src/cli/utils/terminalLink.ts
|
|
18937
|
+
/**
|
|
18938
|
+
* Creates a clickable terminal link if supported, otherwise falls back to
|
|
18939
|
+
* a formatted link with chalk underline.
|
|
18940
|
+
*
|
|
18941
|
+
* @param text - The text to display
|
|
18942
|
+
* @param url - The URL to link to
|
|
18943
|
+
* @returns A terminal link if supported, otherwise chalk-formatted text
|
|
18944
|
+
*/
|
|
18945
|
+
function createLink(text, url$1) {
|
|
18946
|
+
return terminalLink(text, url$1, { fallback: (text$1, url$2) => {
|
|
18947
|
+
return `${source_default.underline.blue(url$2)}`;
|
|
18948
|
+
} });
|
|
18949
|
+
}
|
|
18950
|
+
|
|
18763
18951
|
//#endregion
|
|
18764
18952
|
//#region src/cli/commands/auth/login.ts
|
|
18765
18953
|
async function generateAndDisplayDeviceCode() {
|
|
@@ -18769,7 +18957,7 @@ async function generateAndDisplayDeviceCode() {
|
|
|
18769
18957
|
successMessage: "Device code generated",
|
|
18770
18958
|
errorMessage: "Failed to generate device code"
|
|
18771
18959
|
});
|
|
18772
|
-
M.info(`Verification code: ${source_default.bold(deviceCodeResponse.userCode)}\nPlease confirm this code at: ${deviceCodeResponse.verificationUri}`);
|
|
18960
|
+
M.info(`Verification code: ${source_default.bold(deviceCodeResponse.userCode)}\nPlease confirm this code at: ${createLink(deviceCodeResponse.verificationUri, deviceCodeResponse.verificationUri)}`);
|
|
18773
18961
|
return deviceCodeResponse;
|
|
18774
18962
|
}
|
|
18775
18963
|
async function waitForAuthentication(deviceCode, expiresIn, interval) {
|
|
@@ -24358,10 +24546,7 @@ var require_lodash = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
24358
24546
|
//#endregion
|
|
24359
24547
|
//#region src/cli/commands/project/create.ts
|
|
24360
24548
|
var import_lodash = /* @__PURE__ */ __toESM(require_lodash(), 1);
|
|
24361
|
-
const orange = source_default.hex("#E86B3C");
|
|
24362
|
-
const cyan = source_default.hex("#00D4FF");
|
|
24363
24549
|
async function create() {
|
|
24364
|
-
Ie("Let's create something amazing!");
|
|
24365
24550
|
const templateOptions = (await listTemplates()).map((t) => ({
|
|
24366
24551
|
value: t,
|
|
24367
24552
|
label: t.name,
|
|
@@ -24369,18 +24554,18 @@ async function create() {
|
|
|
24369
24554
|
}));
|
|
24370
24555
|
const { template, name: name$1, description, projectPath } = await Ce({
|
|
24371
24556
|
template: () => ve({
|
|
24372
|
-
message: "
|
|
24557
|
+
message: "Select a project template",
|
|
24373
24558
|
options: templateOptions
|
|
24374
24559
|
}),
|
|
24375
24560
|
name: () => he({
|
|
24376
24561
|
message: "What is the name of your project?",
|
|
24377
|
-
placeholder: "my-app",
|
|
24562
|
+
placeholder: "my-app-backend",
|
|
24378
24563
|
validate: (value) => {
|
|
24379
|
-
if (!value || value.trim().length === 0) return "
|
|
24564
|
+
if (!value || value.trim().length === 0) return "Project name is required";
|
|
24380
24565
|
}
|
|
24381
24566
|
}),
|
|
24382
24567
|
description: () => he({
|
|
24383
|
-
message: "
|
|
24568
|
+
message: "Project description (optional)",
|
|
24384
24569
|
placeholder: "A brief description of your project"
|
|
24385
24570
|
}),
|
|
24386
24571
|
projectPath: async ({ results }) => {
|
|
@@ -24393,7 +24578,7 @@ async function create() {
|
|
|
24393
24578
|
}
|
|
24394
24579
|
}, { onCancel: onPromptCancel });
|
|
24395
24580
|
const resolvedPath = resolve(projectPath);
|
|
24396
|
-
const { projectId } = await runTask("
|
|
24581
|
+
const { projectId } = await runTask("Creating project...", async () => {
|
|
24397
24582
|
return await createProjectFiles({
|
|
24398
24583
|
name: name$1.trim(),
|
|
24399
24584
|
description: description ? description.trim() : void 0,
|
|
@@ -24401,13 +24586,12 @@ async function create() {
|
|
|
24401
24586
|
template
|
|
24402
24587
|
});
|
|
24403
24588
|
}, {
|
|
24404
|
-
successMessage:
|
|
24589
|
+
successMessage: "Project created successfully",
|
|
24405
24590
|
errorMessage: "Failed to create project"
|
|
24406
24591
|
});
|
|
24592
|
+
M.success(`Project ${source_default.bold(name$1)} has been initialized!`);
|
|
24407
24593
|
const dashboardUrl = `${getBase44ApiUrl()}/apps/${projectId}/editor/preview`;
|
|
24408
|
-
M.
|
|
24409
|
-
M.message(`${source_default.dim("Dashboard")}: ${cyan(dashboardUrl)}`);
|
|
24410
|
-
Se("All set and ready!");
|
|
24594
|
+
M.success(`Dashboard link:\n${createLink(dashboardUrl, dashboardUrl)}`);
|
|
24411
24595
|
}
|
|
24412
24596
|
const createCommand = new Command("create").description("Create a new Base44 project").action(async () => {
|
|
24413
24597
|
await runCommand(create, {
|
|
@@ -24433,7 +24617,7 @@ async function deployAction() {
|
|
|
24433
24617
|
successMessage: "Site deployed successfully",
|
|
24434
24618
|
errorMessage: "Deployment failed"
|
|
24435
24619
|
});
|
|
24436
|
-
M.success(`Site deployed to: ${result.app_url}`);
|
|
24620
|
+
M.success(`Site deployed to: ${createLink(result.app_url, result.app_url)}`);
|
|
24437
24621
|
}
|
|
24438
24622
|
const siteDeployCommand = new Command("site").description("Manage site deployments").addCommand(new Command("deploy").description("Deploy built site files to Base44 hosting").action(async () => {
|
|
24439
24623
|
await runCommand(deployAction, { requireAuth: true });
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@base44-preview/cli",
|
|
3
|
-
"version": "0.0.4-pr.
|
|
3
|
+
"version": "0.0.4-pr.56.1667015",
|
|
4
4
|
"description": "Base44 CLI - Unified interface for managing Base44 applications",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/cli/index.js",
|
|
@@ -54,6 +54,7 @@
|
|
|
54
54
|
"lodash.kebabcase": "^4.1.1",
|
|
55
55
|
"p-wait-for": "^6.0.0",
|
|
56
56
|
"tar": "^7.4.3",
|
|
57
|
+
"terminal-link": "^3.0.0",
|
|
57
58
|
"tsdown": "^0.12.4",
|
|
58
59
|
"tsx": "^4.19.2",
|
|
59
60
|
"typescript": "^5.7.2",
|