@base44-preview/cli 0.1.17-pr.638.76ba6a7 → 0.1.18-pr.635.6429d1d

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 CHANGED
@@ -119090,7 +119090,7 @@ import path52 from "path";
119090
119090
  import * as path42 from "path";
119091
119091
  import * as fs26 from "fs/promises";
119092
119092
  import * as path22 from "path";
119093
- import process22 from "process";
119093
+ import process23 from "process";
119094
119094
  import * as path32 from "path";
119095
119095
  import process32 from "process";
119096
119096
  import path92 from "path";
@@ -119622,7 +119622,7 @@ function partition2(array2, predicate) {
119622
119622
  return result;
119623
119623
  }
119624
119624
  async function findInDirectory(nameOrNames, { typeCheck, cwd, allowSymlinks = true, filter: filter2 }) {
119625
- const directory = toAbsolutePath(cwd) ?? process22.cwd();
119625
+ const directory = toAbsolutePath(cwd) ?? process23.cwd();
119626
119626
  const names = Array.isArray(nameOrNames) ? nameOrNames : [nameOrNames];
119627
119627
  for (const name of names) {
119628
119628
  const fileOrDirectory = path22.join(directory, name);
@@ -146002,10 +146002,10 @@ __export(exports_supports_color, {
146002
146002
  createSupportsColor: () => createSupportsColor2,
146003
146003
  default: () => supports_color_default2
146004
146004
  });
146005
- import process21 from "node:process";
146005
+ import process24 from "node:process";
146006
146006
  import os9 from "node:os";
146007
146007
  import tty4 from "node:tty";
146008
- function hasFlag2(flag, argv = globalThis.Deno ? globalThis.Deno.args : process21.argv) {
146008
+ function hasFlag2(flag, argv = globalThis.Deno ? globalThis.Deno.args : process24.argv) {
146009
146009
  const prefix = flag.startsWith("-") ? "" : flag.length === 1 ? "-" : "--";
146010
146010
  const position = argv.indexOf(prefix + flag);
146011
146011
  const terminatorPosition = argv.indexOf("--");
@@ -146068,7 +146068,7 @@ function _supportsColor2(haveStream, { streamIsTTY, sniffFlags = true } = {}) {
146068
146068
  if (env3.TERM === "dumb") {
146069
146069
  return min;
146070
146070
  }
146071
- if (process21.platform === "win32") {
146071
+ if (process24.platform === "win32") {
146072
146072
  const osRelease = os9.release().split(".");
146073
146073
  if (Number(osRelease[0]) >= 10 && Number(osRelease[2]) >= 10586) {
146074
146074
  return Number(osRelease[2]) >= 14931 ? 3 : 2;
@@ -146130,7 +146130,7 @@ function createSupportsColor2(stream, options = {}) {
146130
146130
  }
146131
146131
  var env3, flagForceColor2, supportsColor2, supports_color_default2;
146132
146132
  var init_supports_color = __esm(() => {
146133
- ({ env: env3 } = process21);
146133
+ ({ env: env3 } = process24);
146134
146134
  if (hasFlag2("no-color") || hasFlag2("no-colors") || hasFlag2("color=false") || hasFlag2("color=never")) {
146135
146135
  flagForceColor2 = 0;
146136
146136
  } else if (hasFlag2("color") || hasFlag2("colors") || hasFlag2("color=true") || hasFlag2("color=always")) {
@@ -239251,7 +239251,7 @@ import { join as join13 } from "node:path";
239251
239251
  // package.json
239252
239252
  var package_default = {
239253
239253
  name: "base44",
239254
- version: "0.1.17",
239254
+ version: "0.1.18",
239255
239255
  description: "Base44 CLI - Unified interface for managing Base44 applications",
239256
239256
  type: "module",
239257
239257
  bin: {
@@ -249608,7 +249608,7 @@ async function buildAction(ctx) {
249608
249608
  };
249609
249609
  }
249610
249610
  function getBuildCommand() {
249611
- return new Base44Command("build").description("Build the site with the Base44 app id injected").action(buildAction);
249611
+ return new Base44Command("build", { requireAuth: false }).description("Build the site with the Base44 app id injected").action(buildAction);
249612
249612
  }
249613
249613
 
249614
249614
  // src/cli/commands/project/create.ts
@@ -251084,6 +251084,229 @@ function parseConcurrency(value) {
251084
251084
  return parsed;
251085
251085
  }
251086
251086
 
251087
+ // src/cli/dev/createDevLogger.ts
251088
+ var colorByType = {
251089
+ error: theme.styles.error,
251090
+ warn: theme.styles.warn,
251091
+ log: (input) => input
251092
+ };
251093
+ var stringify = (item) => {
251094
+ if (typeof item === "string") {
251095
+ return item;
251096
+ }
251097
+ if (item instanceof Error) {
251098
+ return item.toString();
251099
+ }
251100
+ try {
251101
+ return JSON.stringify(item, null, 2) ?? String(item);
251102
+ } catch {
251103
+ return String(item);
251104
+ }
251105
+ };
251106
+ function createDevLogger(label, labelColor = theme.styles.dim) {
251107
+ const prefix = label ? `${labelColor(`[${label}]`)} ` : "";
251108
+ const print = (type, ...args) => {
251109
+ const colorize = colorByType[type];
251110
+ console[type](prefix + args.map((item) => colorize(stringify(item))).join(" "));
251111
+ };
251112
+ return {
251113
+ log: (...args) => print("log", ...args),
251114
+ error: (msg, err) => {
251115
+ print("error", msg);
251116
+ if (err) {
251117
+ print("error", err);
251118
+ }
251119
+ },
251120
+ warn: (...args) => print("warn", ...args)
251121
+ };
251122
+ }
251123
+
251124
+ // src/cli/dev/dev-server/serve-runner.ts
251125
+ import { spawn as spawn2 } from "node:child_process";
251126
+ import process21 from "node:process";
251127
+
251128
+ class ServeRunner {
251129
+ command;
251130
+ cwd;
251131
+ env;
251132
+ logger;
251133
+ child;
251134
+ stopping = false;
251135
+ stopPromise;
251136
+ exitListeners = [];
251137
+ constructor(options) {
251138
+ this.command = options.command;
251139
+ this.cwd = options.cwd;
251140
+ this.env = options.env;
251141
+ this.logger = options.logger;
251142
+ }
251143
+ start() {
251144
+ if (this.child) {
251145
+ return;
251146
+ }
251147
+ const stdin = process21.platform === "win32" ? "ignore" : "inherit";
251148
+ const child = spawn2(this.command, {
251149
+ cwd: this.cwd,
251150
+ shell: true,
251151
+ detached: process21.platform !== "win32",
251152
+ env: { ...process21.env, ...this.env },
251153
+ stdio: [stdin, "pipe", "pipe"],
251154
+ windowsHide: true
251155
+ });
251156
+ this.child = child;
251157
+ this.setupHandlers(child);
251158
+ }
251159
+ onExit(listener) {
251160
+ this.exitListeners.push(listener);
251161
+ }
251162
+ async stop() {
251163
+ if (this.stopPromise) {
251164
+ return this.stopPromise;
251165
+ }
251166
+ this.stopPromise = this.stopChild();
251167
+ return this.stopPromise;
251168
+ }
251169
+ async stopChild() {
251170
+ const child = this.child;
251171
+ if (!child || child.exitCode !== null) {
251172
+ return;
251173
+ }
251174
+ this.stopping = true;
251175
+ const exited = new Promise((resolve) => child.once("exit", () => resolve()));
251176
+ if (process21.platform === "win32" && child.pid) {
251177
+ const taskkill = spawn2("taskkill", ["/pid", String(child.pid), "/T", "/F"], {
251178
+ stdio: "ignore",
251179
+ windowsHide: true
251180
+ });
251181
+ await new Promise((resolve) => {
251182
+ taskkill.once("exit", () => resolve());
251183
+ taskkill.once("error", () => resolve());
251184
+ });
251185
+ } else if (child.pid) {
251186
+ try {
251187
+ process21.kill(-child.pid, "SIGTERM");
251188
+ } catch {
251189
+ child.kill();
251190
+ }
251191
+ }
251192
+ await exited;
251193
+ }
251194
+ setupHandlers(child) {
251195
+ child.stdout?.on("data", (data) => this.emitLines(data, "log"));
251196
+ child.stderr?.on("data", (data) => this.emitLines(data, "error"));
251197
+ child.on("error", (error) => {
251198
+ this.logger.error("Frontend dev server failed to start:", error);
251199
+ this.notifyExit(null);
251200
+ });
251201
+ child.on("exit", (code) => {
251202
+ if (this.stopping) {
251203
+ return;
251204
+ }
251205
+ this.logger.error(`Frontend dev server exited with code ${code}`);
251206
+ this.notifyExit(code);
251207
+ });
251208
+ }
251209
+ notifyExit(code) {
251210
+ for (const listener of this.exitListeners) {
251211
+ listener(code);
251212
+ }
251213
+ }
251214
+ emitLines(data, type) {
251215
+ const lines = data.toString().trimEnd().split(`
251216
+ `);
251217
+ for (const line of lines) {
251218
+ if (type === "error") {
251219
+ this.logger.error(line);
251220
+ } else {
251221
+ this.logger.log(line);
251222
+ }
251223
+ }
251224
+ }
251225
+ }
251226
+
251227
+ // src/cli/dev/serve-command-runner.ts
251228
+ function createServeCommandRunner({
251229
+ serveCommand,
251230
+ projectRoot,
251231
+ appId,
251232
+ appBaseUrl
251233
+ }) {
251234
+ return new ServeRunner({
251235
+ command: serveCommand,
251236
+ cwd: projectRoot,
251237
+ env: {
251238
+ VITE_BASE44_APP_ID: appId,
251239
+ ...appBaseUrl ? { VITE_BASE44_APP_BASE_URL: appBaseUrl } : {}
251240
+ },
251241
+ logger: createDevLogger("frontend", theme.colors.base44Orange)
251242
+ });
251243
+ }
251244
+
251245
+ // src/cli/dev/stop-runner-on-signals.ts
251246
+ import process22 from "node:process";
251247
+ function stopRunnerOnProcessSignals(runner) {
251248
+ const stop = () => void runner.stop();
251249
+ process22.on("SIGINT", stop);
251250
+ process22.on("SIGTERM", stop);
251251
+ }
251252
+
251253
+ // src/cli/commands/site/dev.ts
251254
+ var DEFAULT_SERVE_COMMAND = "npm run dev";
251255
+ async function siteDevAction(ctx) {
251256
+ const { app } = ctx;
251257
+ if (!app?.projectRoot) {
251258
+ throw new ConfigInvalidError("base44 site dev requires a linked local project. Run it from a project with base44/.app.jsonc.");
251259
+ }
251260
+ const { project } = await readProjectConfig(app.projectRoot);
251261
+ const site = project.site;
251262
+ if (!site) {
251263
+ throw new InvalidInputError(`This project has no 'site' block in base44/config.jsonc, so there is no frontend to serve. Add one naming its serveCommand; site dev falls back to "npm run dev".`);
251264
+ }
251265
+ const command = site.serveCommand ?? DEFAULT_SERVE_COMMAND;
251266
+ const runner = createServeCommandRunner({
251267
+ serveCommand: command,
251268
+ projectRoot: project.root,
251269
+ appId: app.id
251270
+ });
251271
+ stopRunnerOnProcessSignals(runner);
251272
+ runner.onExit((code) => process.exit(code ?? 1));
251273
+ runner.start();
251274
+ return { outroMessage: `Frontend dev server running '${command}'` };
251275
+ }
251276
+ function getSiteDevCommand() {
251277
+ return new Base44Command("dev", { requireAuth: false }).description("Run the site's dev server, with no local backend").action(siteDevAction);
251278
+ }
251279
+
251280
+ // src/cli/commands/site/install.ts
251281
+ async function installAction({
251282
+ runTask
251283
+ }) {
251284
+ const { project } = await readProjectConfig();
251285
+ const installCommand = project.site?.installCommand;
251286
+ if (!installCommand) {
251287
+ throw new ConfigNotFoundError("No site install command found.", {
251288
+ hints: [
251289
+ {
251290
+ message: `Add a 'site' block to your config.jsonc (e.g., "site": { "installCommand": "npm ci" }). Inside one, installCommand defaults to "npm install".`
251291
+ }
251292
+ ]
251293
+ });
251294
+ }
251295
+ await runTask("Installing site dependencies...", () => execa({ cwd: project.root, shell: true })`${installCommand}`, {
251296
+ successMessage: "Dependencies installed",
251297
+ errorMessage: "Install failed"
251298
+ });
251299
+ return {
251300
+ outroMessage: `Installed with ${theme.styles.bold(installCommand)}`
251301
+ };
251302
+ }
251303
+ function getSiteInstallCommand() {
251304
+ return new Base44Command("install", {
251305
+ requireAuth: false,
251306
+ requireAppContext: false
251307
+ }).description("Install the site's dependencies with its configured command").action(installAction);
251308
+ }
251309
+
251087
251310
  // src/cli/commands/site/open.ts
251088
251311
  async function openAction({
251089
251312
  isNonInteractive
@@ -251100,7 +251323,7 @@ function getSiteOpenCommand() {
251100
251323
 
251101
251324
  // src/cli/commands/site/index.ts
251102
251325
  function getSiteCommand() {
251103
- return new Command2("site").description("Manage app site (frontend app)").addCommand(getSiteDeployCommand()).addCommand(getSiteOpenCommand());
251326
+ return new Command2("site").description("Manage app site (frontend app)").addCommand(getSiteDeployCommand()).addCommand(getSiteDevCommand()).addCommand(getSiteInstallCommand()).addCommand(getSiteOpenCommand());
251104
251327
  }
251105
251328
 
251106
251329
  // src/core/types/generator.ts
@@ -251620,43 +251843,6 @@ function getWorkspaceCommand() {
251620
251843
  return new Command2("workspace").description("List workspaces, inspect one, and move apps between them").addCommand(getWorkspaceListCommand()).addCommand(getWorkspaceGetCommand()).addCommand(getWorkspaceMoveCommand());
251621
251844
  }
251622
251845
 
251623
- // src/cli/dev/createDevLogger.ts
251624
- var colorByType = {
251625
- error: theme.styles.error,
251626
- warn: theme.styles.warn,
251627
- log: (input) => input
251628
- };
251629
- var stringify = (item) => {
251630
- if (typeof item === "string") {
251631
- return item;
251632
- }
251633
- if (item instanceof Error) {
251634
- return item.toString();
251635
- }
251636
- try {
251637
- return JSON.stringify(item, null, 2) ?? String(item);
251638
- } catch {
251639
- return String(item);
251640
- }
251641
- };
251642
- function createDevLogger(label, labelColor = theme.styles.dim) {
251643
- const prefix = label ? `${labelColor(`[${label}]`)} ` : "";
251644
- const print = (type, ...args) => {
251645
- const colorize = colorByType[type];
251646
- console[type](prefix + args.map((item) => colorize(stringify(item))).join(" "));
251647
- };
251648
- return {
251649
- log: (...args) => print("log", ...args),
251650
- error: (msg, err) => {
251651
- print("error", msg);
251652
- if (err) {
251653
- print("error", err);
251654
- }
251655
- },
251656
- warn: (...args) => print("warn", ...args)
251657
- };
251658
- }
251659
-
251660
251846
  // src/cli/dev/dev-server/main.ts
251661
251847
  var import_cors = __toESM(require_lib4(), 1);
251662
251848
  var import_express6 = __toESM(require_express(), 1);
@@ -251789,7 +251975,7 @@ var $dir = async (options) => dirWithOptions(options);
251789
251975
  var $tmpName = promisify11(tmp.tmpName);
251790
251976
 
251791
251977
  // src/cli/dev/dev-server/function-manager.ts
251792
- import { spawn as spawn2 } from "node:child_process";
251978
+ import { spawn as spawn3 } from "node:child_process";
251793
251979
  import { dirname as dirname23, join as join31 } from "node:path";
251794
251980
  import { pathToFileURL } from "node:url";
251795
251981
 
@@ -251887,7 +252073,7 @@ class FunctionManager extends BaseFunctionManager {
251887
252073
  async stopFunction(_name, { process: proc }) {
251888
252074
  const exited = new Promise((r) => proc.once("exit", () => r()));
251889
252075
  if (process.platform === "win32" && proc.pid) {
251890
- spawn2("taskkill", ["/pid", String(proc.pid), "/T", "/F"]);
252076
+ spawn3("taskkill", ["/pid", String(proc.pid), "/T", "/F"]);
251891
252077
  } else {
251892
252078
  proc.kill();
251893
252079
  }
@@ -251896,7 +252082,7 @@ class FunctionManager extends BaseFunctionManager {
251896
252082
  spawnFunction(func, port) {
251897
252083
  this.logger.log(`Spawning function "${func.name}" on port ${port}`);
251898
252084
  const importMapPath = join31(dirname23(this.wrapperPath), "import-map.json");
251899
- const process2 = spawn2("deno", ["run", "--allow-all", "--import-map", importMapPath, this.wrapperPath], {
252085
+ const process2 = spawn3("deno", ["run", "--allow-all", "--import-map", importMapPath, this.wrapperPath], {
251900
252086
  env: {
251901
252087
  ...globalThis.process.env,
251902
252088
  FUNCTION_PATH: pathToFileURL(func.entryPath).href,
@@ -255426,127 +255612,6 @@ async function createDevServer(options) {
255426
255612
  return { port, server, shutdown };
255427
255613
  }
255428
255614
 
255429
- // src/cli/dev/dev-server/serve-runner.ts
255430
- import { spawn as spawn3 } from "node:child_process";
255431
- import process23 from "node:process";
255432
-
255433
- class ServeRunner {
255434
- command;
255435
- cwd;
255436
- env;
255437
- logger;
255438
- child;
255439
- stopping = false;
255440
- stopPromise;
255441
- exitListeners = [];
255442
- constructor(options) {
255443
- this.command = options.command;
255444
- this.cwd = options.cwd;
255445
- this.env = options.env;
255446
- this.logger = options.logger;
255447
- }
255448
- start() {
255449
- if (this.child) {
255450
- return;
255451
- }
255452
- const stdin = process23.platform === "win32" ? "ignore" : "inherit";
255453
- const child = spawn3(this.command, {
255454
- cwd: this.cwd,
255455
- shell: true,
255456
- detached: process23.platform !== "win32",
255457
- env: { ...process23.env, ...this.env },
255458
- stdio: [stdin, "pipe", "pipe"],
255459
- windowsHide: true
255460
- });
255461
- this.child = child;
255462
- this.setupHandlers(child);
255463
- }
255464
- onExit(listener) {
255465
- this.exitListeners.push(listener);
255466
- }
255467
- async stop() {
255468
- if (this.stopPromise) {
255469
- return this.stopPromise;
255470
- }
255471
- this.stopPromise = this.stopChild();
255472
- return this.stopPromise;
255473
- }
255474
- async stopChild() {
255475
- const child = this.child;
255476
- if (!child || child.exitCode !== null) {
255477
- return;
255478
- }
255479
- this.stopping = true;
255480
- const exited = new Promise((resolve) => child.once("exit", () => resolve()));
255481
- if (process23.platform === "win32" && child.pid) {
255482
- const taskkill = spawn3("taskkill", ["/pid", String(child.pid), "/T", "/F"], {
255483
- stdio: "ignore",
255484
- windowsHide: true
255485
- });
255486
- await new Promise((resolve) => {
255487
- taskkill.once("exit", () => resolve());
255488
- taskkill.once("error", () => resolve());
255489
- });
255490
- } else if (child.pid) {
255491
- try {
255492
- process23.kill(-child.pid, "SIGTERM");
255493
- } catch {
255494
- child.kill();
255495
- }
255496
- }
255497
- await exited;
255498
- }
255499
- setupHandlers(child) {
255500
- child.stdout?.on("data", (data) => this.emitLines(data, "log"));
255501
- child.stderr?.on("data", (data) => this.emitLines(data, "error"));
255502
- child.on("error", (error) => {
255503
- this.logger.error("Frontend dev server failed to start:", error);
255504
- this.notifyExit(null);
255505
- });
255506
- child.on("exit", (code) => {
255507
- if (this.stopping) {
255508
- return;
255509
- }
255510
- this.logger.error(`Frontend dev server exited with code ${code}`);
255511
- this.notifyExit(code);
255512
- });
255513
- }
255514
- notifyExit(code) {
255515
- for (const listener of this.exitListeners) {
255516
- listener(code);
255517
- }
255518
- }
255519
- emitLines(data, type) {
255520
- const lines = data.toString().trimEnd().split(`
255521
- `);
255522
- for (const line of lines) {
255523
- if (type === "error") {
255524
- this.logger.error(line);
255525
- } else {
255526
- this.logger.log(line);
255527
- }
255528
- }
255529
- }
255530
- }
255531
-
255532
- // src/cli/dev/serve-command-runner.ts
255533
- function createServeCommandRunner({
255534
- serveCommand,
255535
- projectRoot,
255536
- appId,
255537
- appBaseUrl
255538
- }) {
255539
- return new ServeRunner({
255540
- command: serveCommand,
255541
- cwd: projectRoot,
255542
- env: {
255543
- VITE_BASE44_APP_ID: appId,
255544
- VITE_BASE44_APP_BASE_URL: appBaseUrl
255545
- },
255546
- logger: createDevLogger("frontend", theme.colors.base44Orange)
255547
- });
255548
- }
255549
-
255550
255615
  // src/cli/commands/dev.ts
255551
255616
  function localServerUrl(port) {
255552
255617
  return `http://localhost:${port}`;
@@ -255572,11 +255637,6 @@ async function resolveConfiguredSite(app) {
255572
255637
  const serveCommand = project.site?.serveCommand;
255573
255638
  return serveCommand ? { serveCommand, projectRoot: project.root } : undefined;
255574
255639
  }
255575
- function stopRunnerOnProcessSignals(runner) {
255576
- const stop = () => void runner.stop();
255577
- process.on("SIGINT", stop);
255578
- process.on("SIGTERM", stop);
255579
- }
255580
255640
  function startServeCommand(runner, backend) {
255581
255641
  stopRunnerOnProcessSignals(runner);
255582
255642
  runner.onExit(() => {
@@ -259961,4 +260021,4 @@ export {
259961
260021
  runCLI
259962
260022
  };
259963
260023
 
259964
- //# debugId=815732FBC7D9653064756E2164756E21
260024
+ //# debugId=EEFD3770ED50B51764756E2164756E21