@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.
Files changed (2) hide show
  1. package/dist/cli/index.js +295 -111
  2. 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$1 = (ms, signal) => new Promise((resolve$1, reject) => {
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$1(interval, combinedSignal);
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$1(interval, combinedSignal);
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$3 = __require("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$3.homedir(), envPath.slice(1)) : envPath;
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$2 = __require("os");
9715
+ const os$3 = __require("os");
9716
9716
  const path$10 = __require("path");
9717
- const IS_WINDOWS_PLATFORM = os$2.platform() === "win32";
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$1 = __require("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$1.cpus().length, 1);
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$1 = source_default.hex("#E86B3C");
18640
- const BANNER_LINES = [
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) await printBanner();
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: "Pick a template",
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 "Every project deserves a name";
24564
+ if (!value || value.trim().length === 0) return "Project name is required";
24380
24565
  }
24381
24566
  }),
24382
24567
  description: () => he({
24383
- message: "Description (optional)",
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("Setting up your project...", async () => {
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: source_default.bold("Project created successfully!"),
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.message(`${source_default.dim("Project")}: ${orange(name$1.trim())}`);
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.53.87c3b5f",
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",