betterstart-cli 0.0.54 → 0.0.56

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.js CHANGED
@@ -22232,20 +22232,14 @@ async function promptPresets(cwd, options = {}) {
22232
22232
 
22233
22233
  // adapters/next/init/prompts/project.ts
22234
22234
  import * as p13 from "@clack/prompts";
22235
- import pc2 from "picocolors";
22236
22235
  async function promptProject(defaultName) {
22237
22236
  const projectName = await p13.text({
22238
- message: [
22239
- "What is your project name?",
22240
- `${pc2.cyan("\u2502")} ${pc2.dim("If you don't want a directory created with the project name, just press `")}${pc2.bold(
22241
- pc2.cyan(".")
22242
- )}${pc2.dim("` and hit enter.")}`,
22243
- pc2.cyan("\u2502")
22244
- ].join("\n"),
22245
- placeholder: defaultName ?? "my-app",
22246
- defaultValue: defaultName ?? "my-app",
22237
+ message: "Enter the project name",
22238
+ placeholder: defaultName ?? "(Leave blank to skip directory creation)",
22239
+ defaultValue: defaultName ?? ".",
22240
+ initialValue: defaultName ?? ".",
22247
22241
  validate: (value) => {
22248
- if (!value?.trim()) return "Project name is required";
22242
+ if (!value?.trim()) return void 0;
22249
22243
  if (value.trim() === ".") return void 0;
22250
22244
  if (!/^[a-z0-9_-]+$/i.test(value.trim())) {
22251
22245
  return "Project name can only contain letters, numbers, hyphens, and underscores";
@@ -22257,7 +22251,7 @@ async function promptProject(defaultName) {
22257
22251
  p13.cancel("Setup cancelled.");
22258
22252
  process.exit(0);
22259
22253
  }
22260
- return { projectName: projectName.trim() };
22254
+ return { projectName: projectName.trim() || "." };
22261
22255
  }
22262
22256
 
22263
22257
  // adapters/next/init/scaffolders/api-routes.ts
@@ -24101,11 +24095,11 @@ function scaffoldTsconfig(cwd, config) {
24101
24095
 
24102
24096
  // adapters/next/init/vercel/flow.ts
24103
24097
  import * as p17 from "@clack/prompts";
24104
- import pc6 from "picocolors";
24098
+ import pc5 from "picocolors";
24105
24099
 
24106
24100
  // adapters/next/init/vercel/auth.ts
24107
24101
  import * as p14 from "@clack/prompts";
24108
- import pc3 from "picocolors";
24102
+ import pc2 from "picocolors";
24109
24103
 
24110
24104
  // adapters/next/init/vercel/runner.ts
24111
24105
  import { spawn as spawn3 } from "child_process";
@@ -24330,7 +24324,7 @@ async function ensureVercelAuth(runner, cwd, options) {
24330
24324
  return { authed: false, reason: "login-failed" };
24331
24325
  }
24332
24326
  checkSpinner.clear();
24333
- const signInMessage = `Sign in to Vercel to continue ${pc3.dim("(or press Ctrl-C to enter a connection string manually)")}`;
24327
+ const signInMessage = `Sign in to Vercel to continue ${pc2.dim("(or press Ctrl-C to enter a connection string manually)")}`;
24334
24328
  const signInRows = clackLogRows(signInMessage);
24335
24329
  p14.log.info(signInMessage);
24336
24330
  let streamedRows = 0;
@@ -24360,12 +24354,12 @@ async function ensureVercelAuth(runner, cwd, options) {
24360
24354
  return { authed: false, reason: "login-failed" };
24361
24355
  }
24362
24356
  function signedInMessage(username) {
24363
- return username ? `Signed in to Vercel as ${pc3.cyan(username)}` : "Signed in to Vercel";
24357
+ return username ? `Signed in to Vercel as ${pc2.cyan(username)}` : "Signed in to Vercel";
24364
24358
  }
24365
24359
 
24366
24360
  // adapters/next/init/vercel/blob.ts
24367
24361
  import * as p15 from "@clack/prompts";
24368
- import pc4 from "picocolors";
24362
+ import pc3 from "picocolors";
24369
24363
 
24370
24364
  // adapters/next/init/vercel/env-pull.ts
24371
24365
  import fs34 from "fs";
@@ -24568,7 +24562,7 @@ async function provisionBlobStoreInteractive(runner, cwd, options) {
24568
24562
  terminalFallbackRan = true;
24569
24563
  quietSpinner.clear();
24570
24564
  p15.log.info(
24571
- `Create your Blob store in the Vercel prompts below ${pc4.dim(
24565
+ `Create your Blob store in the Vercel prompts below ${pc3.dim(
24572
24566
  "(connect it to all environments)."
24573
24567
  )}`
24574
24568
  );
@@ -24865,7 +24859,7 @@ function guardEnvLocal(cwd) {
24865
24859
 
24866
24860
  // adapters/next/init/vercel/neon.ts
24867
24861
  import * as p16 from "@clack/prompts";
24868
- import pc5 from "picocolors";
24862
+ import pc4 from "picocolors";
24869
24863
  var PROVISION_TIMEOUT_MS2 = 18e4;
24870
24864
  var INTERACTIVE_PROVISION_TIMEOUT_MS2 = 6e5;
24871
24865
  async function provisionNeonInteractive(runner, cwd, options) {
@@ -24883,7 +24877,7 @@ async function provisionNeonInteractive(runner, cwd, options) {
24883
24877
  }
24884
24878
  quietSpinner.clear();
24885
24879
  p16.log.info(
24886
- `Create your Neon database in the Vercel prompts below ${pc5.dim(
24880
+ `Create your Neon database in the Vercel prompts below ${pc4.dim(
24887
24881
  "(the Free plan is recommended)."
24888
24882
  )}`
24889
24883
  );
@@ -24963,7 +24957,7 @@ async function runVercelNeonFlow(options) {
24963
24957
  const neon = await provisionNeonForMode(runner, options);
24964
24958
  if (neon.failure) {
24965
24959
  p17.log.warn(neonFailureMessage(neon.failure));
24966
- if (neon.detail) p17.log.message(pc6.dim(neon.detail));
24960
+ if (neon.detail) p17.log.message(pc5.dim(neon.detail));
24967
24961
  return { ok: false };
24968
24962
  }
24969
24963
  const databaseUrl = await pullNeonDatabaseUrl(runner, options.cwd, env);
@@ -25001,7 +24995,7 @@ async function runVercelBlobFlow(options) {
25001
24995
  const blob = await provisionBlobForMode(runner, options);
25002
24996
  if (blob.failure || !blob.token) {
25003
24997
  p17.log.warn(blobFailureMessage(blob.failure));
25004
- if (blob.detail) p17.log.message(pc6.dim(blob.detail));
24998
+ if (blob.detail) p17.log.message(pc5.dim(blob.detail));
25005
24999
  return { ok: false };
25006
25000
  }
25007
25001
  return {
@@ -25039,7 +25033,7 @@ async function runVercelDeployFlow(options) {
25039
25033
  envSpinner.clear();
25040
25034
  for (const key of sync.failed) {
25041
25035
  p17.log.warn(
25042
- `Could not set ${pc6.cyan(key)} on Vercel \u2014 add it in the project's environment settings.`
25036
+ `Could not set ${pc5.cyan(key)} on Vercel \u2014 add it in the project's environment settings.`
25043
25037
  );
25044
25038
  }
25045
25039
  ensureVercelJsonFramework(options.cwd);
@@ -25054,7 +25048,7 @@ async function runVercelDeployFlow(options) {
25054
25048
  }
25055
25049
  for (const dep of packageGuard.localSpecDeps) {
25056
25050
  p17.log.warn(
25057
- `Dependency ${pc6.cyan(dep)} uses a local spec that cannot install on Vercel \u2014 the remote build may fail.`
25051
+ `Dependency ${pc5.cyan(dep)} uses a local spec that cannot install on Vercel \u2014 the remote build may fail.`
25058
25052
  );
25059
25053
  }
25060
25054
  const deploySpinner = spinner2();
@@ -25069,13 +25063,13 @@ async function runVercelDeployFlow(options) {
25069
25063
  packageGuard.restore();
25070
25064
  }
25071
25065
  if (deploy.failure) {
25072
- deploySpinner.stop(`${pc6.yellow("\u25B2")} ${deployFailureMessage(deploy.failure)}`);
25073
- if (deploy.detail) p17.log.message(pc6.dim(deploy.detail));
25066
+ deploySpinner.stop(`${pc5.yellow("\u25B2")} ${deployFailureMessage(deploy.failure)}`);
25067
+ if (deploy.detail) p17.log.message(pc5.dim(deploy.detail));
25074
25068
  printManualDeployHint();
25075
25069
  return { ok: false };
25076
25070
  }
25077
25071
  const url = deploy.url;
25078
- deploySpinner.stop(url ? `Deployed ${pc6.cyan(url)}` : "Deployed to Vercel");
25072
+ deploySpinner.stop(url ? `Deployed ${pc5.cyan(url)}` : "Deployed to Vercel");
25079
25073
  return { ok: true, url, syncedEnvKeys: sync.synced };
25080
25074
  } catch (error) {
25081
25075
  p17.log.warn(`Vercel deploy failed: ${error instanceof Error ? error.message : String(error)}`);
@@ -25086,12 +25080,12 @@ async function runVercelDeployFlow(options) {
25086
25080
  }
25087
25081
  }
25088
25082
  function printManualDeployHint() {
25089
- p17.log.info(`You can deploy manually: ${pc6.cyan("vercel deploy --prod")}`);
25083
+ p17.log.info(`You can deploy manually: ${pc5.cyan("vercel deploy --prod")}`);
25090
25084
  }
25091
25085
  async function ensureLinkedProject(runner, cwd, projectName, env, scope) {
25092
25086
  if (readLinkedProjectId(cwd)) return;
25093
25087
  const projectSpinner = spinner2();
25094
- projectSpinner.start(`Creating a Vercel project ${pc6.cyan(projectName)}`);
25088
+ projectSpinner.start(`Creating a Vercel project ${pc5.cyan(projectName)}`);
25095
25089
  const project2 = await createVercelProject(runner, cwd, projectName, { env, scope });
25096
25090
  projectSpinner.clear();
25097
25091
  if (!project2.linked || !project2.projectId) {
@@ -25103,7 +25097,7 @@ async function pullNeonDatabaseUrl(runner, cwd, env) {
25103
25097
  neonSpinner.start("Retrieving DATABASE_URL from Vercel");
25104
25098
  const databaseUrl = await pullVercelEnvValue(runner, cwd, readDbUrlFromDotenv, env);
25105
25099
  if (!databaseUrl) {
25106
- neonSpinner.stop(`${pc6.yellow("\u25B2")} No DATABASE_URL came back from Vercel`);
25100
+ neonSpinner.stop(`${pc5.yellow("\u25B2")} No DATABASE_URL came back from Vercel`);
25107
25101
  return void 0;
25108
25102
  }
25109
25103
  neonSpinner.clear();
@@ -25163,7 +25157,7 @@ function neonFailureMessage(reason) {
25163
25157
  }
25164
25158
 
25165
25159
  // adapters/next/commands/init.ts
25166
- import pc7 from "picocolors";
25160
+ import pc6 from "picocolors";
25167
25161
 
25168
25162
  // adapters/next/commands/seed.ts
25169
25163
  import fs38 from "fs";
@@ -25600,22 +25594,22 @@ async function runInitCommand(name, options) {
25600
25594
  if (forceMode) {
25601
25595
  const nuked = removeExistingAdminPaths(cwd, await resolveForceInitNamespaces(cwd, namespace));
25602
25596
  if (nuked > 0) {
25603
- p18.log.warn(`${pc7.yellow("Force mode:")} removed ${nuked} existing admin paths`);
25597
+ p18.log.warn(`${pc6.yellow("Force mode:")} removed ${nuked} existing admin paths`);
25604
25598
  }
25605
25599
  project2 = detectProject(cwd, namespace);
25606
25600
  } else if (project2.conflicts.length > 0) {
25607
- const conflictLines = project2.conflicts.map((c) => `${pc7.yellow("\u25B2")} ${c}`);
25601
+ const conflictLines = project2.conflicts.map((c) => `${pc6.yellow("\u25B2")} ${c}`);
25608
25602
  conflictLines.push(
25609
25603
  "",
25610
- pc7.dim(`Use ${pc7.bold("--force")} to remove existing admin files before scaffolding.`)
25604
+ pc6.dim(`Use ${pc6.bold("--force")} to remove existing admin files before scaffolding.`)
25611
25605
  );
25612
- p18.note(conflictLines.join("\n"), pc7.yellow("Conflicts"));
25606
+ p18.note(conflictLines.join("\n"), pc6.yellow("Conflicts"));
25613
25607
  if (!options.yes) {
25614
25608
  const proceed = await p18.confirm({
25615
25609
  message: [
25616
- `Continue with ${pc7.bold(pc7.cyan("--force"))}?`,
25617
- `${pc7.cyan("\u2502")} ${pc7.dim("This will force overwrite the existing admin code.")}`,
25618
- pc7.cyan("\u2502")
25610
+ `Continue with ${pc6.bold(pc6.cyan("--force"))}?`,
25611
+ `${pc6.cyan("\u2502")} ${pc6.dim("This will force overwrite the existing admin code.")}`,
25612
+ pc6.cyan("\u2502")
25619
25613
  ].join("\n"),
25620
25614
  initialValue: true
25621
25615
  });
@@ -25629,13 +25623,12 @@ async function runInitCommand(name, options) {
25629
25623
  await resolveForceInitNamespaces(cwd, namespace)
25630
25624
  );
25631
25625
  if (nuked > 0) {
25632
- p18.log.warn(`${pc7.yellow("Force mode:")} removed ${nuked} existing admin paths`);
25626
+ p18.log.warn(`${pc6.yellow("Force mode:")} removed ${nuked} existing admin paths`);
25633
25627
  }
25634
25628
  project2 = detectProject(cwd, namespace);
25635
25629
  }
25636
25630
  }
25637
25631
  } else {
25638
- p18.log.info("No Next.js app found \u2014 Running the fresh project mode...");
25639
25632
  let projectPrompt;
25640
25633
  try {
25641
25634
  projectPrompt = options.yes ? resolveNonInteractiveProject(name) : await promptProject(name);
@@ -25692,8 +25685,8 @@ async function runInitCommand(name, options) {
25692
25685
  p18.log.error(createNextAppResult.error);
25693
25686
  p18.log.info(
25694
25687
  `You can create the project manually:
25695
- ${pc7.cyan(`npx create-next-app@latest ${projectPrompt.projectName} --typescript --tailwind --app`)}
25696
- Then run ${pc7.cyan("betterstart init")} inside it.`
25688
+ ${pc6.cyan(`npx create-next-app@latest ${projectPrompt.projectName} --typescript --tailwind --app`)}
25689
+ Then run ${pc6.cyan("betterstart init")} inside it.`
25697
25690
  );
25698
25691
  process.exit(1);
25699
25692
  }
@@ -25710,13 +25703,13 @@ async function runInitCommand(name, options) {
25710
25703
  const manualCmd = `npx create-next-app@latest ${projectPrompt.projectName} --typescript --tailwind --app`;
25711
25704
  p18.log.info(
25712
25705
  `Create the project manually:
25713
- ${pc7.cyan(manualCmd)}
25714
- Then run ${pc7.cyan("betterstart init")} inside it.`
25706
+ ${pc6.cyan(manualCmd)}
25707
+ Then run ${pc6.cyan("betterstart init")} inside it.`
25715
25708
  );
25716
25709
  process.exit(1);
25717
25710
  }
25718
25711
  const installedNextVersion = detectInstalledNextVersion(cwd);
25719
- const nextVersionSuffix = installedNextVersion ? `${pc7.cyan(`v${installedNextVersion}`)}` : "";
25712
+ const nextVersionSuffix = installedNextVersion ? `${pc6.cyan(`v${installedNextVersion}`)}` : "";
25720
25713
  createNextAppSpinner.stop(`Created a Next.js ${nextVersionSuffix} app in ${displayName}`);
25721
25714
  project2 = detectProject(cwd, namespace);
25722
25715
  isFreshProject = true;
@@ -25728,7 +25721,7 @@ async function runInitCommand(name, options) {
25728
25721
  if (options.databaseUrl) {
25729
25722
  if (!isValidDbUrl(options.databaseUrl)) {
25730
25723
  p18.log.error(
25731
- `Invalid database URL. Must start with ${pc7.cyan("postgres://")} or ${pc7.cyan("postgresql://")}`
25724
+ `Invalid database URL. Must start with ${pc6.cyan("postgres://")} or ${pc6.cyan("postgresql://")}`
25732
25725
  );
25733
25726
  process.exit(1);
25734
25727
  }
@@ -25751,11 +25744,11 @@ async function runInitCommand(name, options) {
25751
25744
  const resourceUrl = flow.dashboardUrl ?? flow.resourceUrl;
25752
25745
  if (resourceUrl) {
25753
25746
  p18.log.info(
25754
- `Open ${pc7.cyan(resourceUrl)} to copy DATABASE_URL, then rerun ${pc7.cyan("betterstart init --database-url <url> --yes")}.`
25747
+ `Open ${pc6.cyan(resourceUrl)} to copy DATABASE_URL, then rerun ${pc6.cyan("betterstart init --database-url <url> --yes")}.`
25755
25748
  );
25756
25749
  } else {
25757
25750
  p18.log.info(
25758
- `Rerun ${pc7.cyan("betterstart init --database-url <url> --yes")} with a Postgres connection string.`
25751
+ `Rerun ${pc6.cyan("betterstart init --database-url <url> --yes")} with a Postgres connection string.`
25759
25752
  );
25760
25753
  }
25761
25754
  } else {
@@ -25764,7 +25757,7 @@ async function runInitCommand(name, options) {
25764
25757
  }
25765
25758
  } else if (existingDbUrl) {
25766
25759
  const masked = maskDbUrl(existingDbUrl);
25767
- p18.log.info(`Using the existing DATABASE_URL from .env.local ${pc7.dim(`(${masked})`)}`);
25760
+ p18.log.info(`Using the existing DATABASE_URL from .env.local ${pc6.dim(`(${masked})`)}`);
25768
25761
  databaseUrl = existingDbUrl;
25769
25762
  } else {
25770
25763
  const servicesResult = await promptServices({ allowVercel: options.vercel !== false });
@@ -25956,8 +25949,8 @@ async function runInitCommand(name, options) {
25956
25949
  p18.log.warning(depsResult.error ?? "Unknown error");
25957
25950
  p18.log.info(
25958
25951
  `You can install them manually:
25959
- ${pc7.cyan(`${pm} add ${depsResult.dependencies.join(" ")}`)}
25960
- ${pc7.cyan(`${pm} add -D ${depsResult.devDeps.join(" ")}`)}`
25952
+ ${pc6.cyan(`${pm} add ${depsResult.dependencies.join(" ")}`)}
25953
+ ${pc6.cyan(`${pm} add -D ${depsResult.devDeps.join(" ")}`)}`
25961
25954
  );
25962
25955
  }
25963
25956
  if (depsInstalled) {
@@ -26025,7 +26018,7 @@ async function runInitCommand(name, options) {
26025
26018
  }
26026
26019
  let dbPushed = false;
26027
26020
  if (depsResult.success && options.skipMigration && hasDbUrl(cwd)) {
26028
- p18.log.info(`Skipping database schema push ${pc7.dim("(--skip-migration)")}`);
26021
+ p18.log.info(`Skipping database schema push ${pc6.dim("(--skip-migration)")}`);
26029
26022
  } else if (depsResult.success && hasDbUrl(cwd)) {
26030
26023
  let driverReady = hasDrizzleKitPostgresDriverDependency(cwd);
26031
26024
  if (!driverReady) {
@@ -26042,11 +26035,11 @@ async function runInitCommand(name, options) {
26042
26035
  s.stop("Database push failed");
26043
26036
  p18.log.warning(driverResult.error ?? `Failed to install ${DRIZZLE_KIT_POSTGRES_DRIVER_DEP}`);
26044
26037
  p18.log.info(
26045
- `Install ${DRIZZLE_KIT_POSTGRES_DRIVER_DEP} manually, then run: ${pc7.cyan(drizzlePushCommand(pm))}`
26038
+ `Install ${DRIZZLE_KIT_POSTGRES_DRIVER_DEP} manually, then run: ${pc6.cyan(drizzlePushCommand(pm))}`
26046
26039
  );
26047
26040
  } else {
26048
26041
  driverReady = hasDrizzleKitPostgresDriverDependency(cwd);
26049
- s.stop(`${pc7.green("\u2713")} Drizzle Kit Postgres driver dependency installed`);
26042
+ s.stop(`${pc6.green("\u2713")} Drizzle Kit Postgres driver dependency installed`);
26050
26043
  }
26051
26044
  }
26052
26045
  if (driverReady) {
@@ -26088,7 +26081,7 @@ async function runInitCommand(name, options) {
26088
26081
  p18.log.error("Database was not reachable. Aborting setup.");
26089
26082
  process.exit(1);
26090
26083
  }
26091
- p18.log.info(`You can run it manually: ${pc7.cyan(drizzlePushCommand(pm))}`);
26084
+ p18.log.info(`You can run it manually: ${pc6.cyan(drizzlePushCommand(pm))}`);
26092
26085
  }
26093
26086
  }
26094
26087
  }
@@ -26098,7 +26091,7 @@ async function runInitCommand(name, options) {
26098
26091
  let adminAccountReady = false;
26099
26092
  if (dbPushed && options.skipAdminCreation) {
26100
26093
  p18.log.info(
26101
- `Skipping admin user creation ${pc7.dim(`(use ${betterstartExecCommand(pm, "seed")} later)`)}`
26094
+ `Skipping admin user creation ${pc6.dim(`(use ${betterstartExecCommand(pm, "seed")} later)`)}`
26102
26095
  );
26103
26096
  }
26104
26097
  if (dbPushed && !options.yes && !options.skipAdminCreation) {
@@ -26109,7 +26102,7 @@ async function runInitCommand(name, options) {
26109
26102
  const adminCheck = await checkExistingAdmin(cwd, adminDir, authBasePath);
26110
26103
  s.clear();
26111
26104
  if (adminCheck.error) {
26112
- p18.log.warning(`Could not verify existing admin account ${pc7.dim(`(${adminCheck.error})`)}`);
26105
+ p18.log.warning(`Could not verify existing admin account ${pc6.dim(`(${adminCheck.error})`)}`);
26113
26106
  if (isDatabaseReachabilityError(adminCheck.error)) {
26114
26107
  p18.log.error("Database was not reachable. Aborting setup.");
26115
26108
  process.exit(1);
@@ -26136,7 +26129,7 @@ async function runInitCommand(name, options) {
26136
26129
  }
26137
26130
  if (adminAction === "skip") {
26138
26131
  adminAccountReady = true;
26139
- p18.log.info(`Keeping existing admin account ${pc7.dim(`(${existingAdminLabel})`)}`);
26132
+ p18.log.info(`Keeping existing admin account ${pc6.dim(`(${existingAdminLabel})`)}`);
26140
26133
  } else {
26141
26134
  replaceExistingAdmin = true;
26142
26135
  }
@@ -26178,7 +26171,7 @@ async function runInitCommand(name, options) {
26178
26171
  seedOverwriteMode
26179
26172
  );
26180
26173
  if (seedResult.existingUser) {
26181
- s.stop(`${pc7.yellow("\u25B2")} An account already exists for ${credentials.email}`);
26174
+ s.stop(`${pc6.yellow("\u25B2")} An account already exists for ${credentials.email}`);
26182
26175
  const replace = await p18.confirm({
26183
26176
  message: "Replace the existing account with this email?",
26184
26177
  initialValue: false
@@ -26198,17 +26191,17 @@ async function runInitCommand(name, options) {
26198
26191
  }
26199
26192
  if (seedResult.success) {
26200
26193
  s.stop(
26201
- seedOverwriteMode === "admin" ? `${pc7.green("\u2713")} Admin user replaced` : `${pc7.green("\u2713")} Admin user created`
26194
+ seedOverwriteMode === "admin" ? `${pc6.green("\u2713")} Admin user replaced` : `${pc6.green("\u2713")} Admin user created`
26202
26195
  );
26203
26196
  seedSuccess = true;
26204
26197
  adminAccountReady = true;
26205
26198
  } else if (seedResult.error) {
26206
- s.stop(`${pc7.red("\u2717")} Failed to create admin user`);
26199
+ s.stop(`${pc6.red("\u2717")} Failed to create admin user`);
26207
26200
  p18.note(
26208
- `${pc7.red(seedResult.error)}
26201
+ `${pc6.red(seedResult.error)}
26209
26202
 
26210
- Run manually: ${pc7.cyan(betterstartExecCommand(pm, "seed"))}`,
26211
- pc7.red("Seed failed")
26203
+ Run manually: ${pc6.cyan(betterstartExecCommand(pm, "seed"))}`,
26204
+ pc6.red("Seed failed")
26212
26205
  );
26213
26206
  if (isDatabaseReachabilityError(seedResult.error)) {
26214
26207
  p18.log.error("Database was not reachable. Aborting setup.");
@@ -26638,10 +26631,10 @@ function stripAnsi2(value) {
26638
26631
  return value.replace(ANSI_ESCAPE_PATTERN2, "");
26639
26632
  }
26640
26633
  function printAdminReadyNote(state) {
26641
- const lines = [`Admin: ${pc7.cyan(state.adminLoginUrl)}`];
26634
+ const lines = [`Admin: ${pc6.cyan(state.adminLoginUrl)}`];
26642
26635
  if (state.adminEmail && state.adminPassword) {
26643
- lines.unshift(`Password: ${pc7.cyan(state.adminPassword)}`);
26644
- lines.unshift(`Admin user: ${pc7.cyan(state.adminEmail)}`);
26636
+ lines.unshift(`Password: ${pc6.cyan(state.adminPassword)}`);
26637
+ lines.unshift(`Admin user: ${pc6.cyan(state.adminEmail)}`);
26645
26638
  }
26646
26639
  p18.note(lines.join("\n"), "Admin ready");
26647
26640
  }
@@ -27011,7 +27004,7 @@ async function runRemoveSchemaCommand(schemaName, options) {
27011
27004
  import fs42 from "fs";
27012
27005
  import path55 from "path";
27013
27006
  import * as p22 from "@clack/prompts";
27014
- import pc8 from "picocolors";
27007
+ import pc7 from "picocolors";
27015
27008
 
27016
27009
  // adapters/next/commands/uninstall-cleaners.ts
27017
27010
  import fs41 from "fs";
@@ -27297,7 +27290,7 @@ function buildUninstallPlan(cwd, namespaceValue) {
27297
27290
  }
27298
27291
  async function runUninstallCommand(options) {
27299
27292
  const cwd = options.cwd ? path55.resolve(options.cwd) : process.cwd();
27300
- p22.intro(pc8.bgRed(pc8.white(" BetterStart Uninstall ")));
27293
+ p22.intro(pc7.bgRed(pc7.white(" BetterStart Uninstall ")));
27301
27294
  let namespace = DEFAULT_ADMIN_NAMESPACE;
27302
27295
  try {
27303
27296
  const config = await resolveConfig(cwd);
@@ -27306,14 +27299,14 @@ async function runUninstallCommand(options) {
27306
27299
  }
27307
27300
  const steps = buildUninstallPlan(cwd, namespace);
27308
27301
  if (steps.length === 0) {
27309
- p22.log.success(`${pc8.green("\u2713")} Nothing to remove \u2014 project is already clean.`);
27302
+ p22.log.success(`${pc7.green("\u2713")} Nothing to remove \u2014 project is already clean.`);
27310
27303
  p22.outro("Done");
27311
27304
  return;
27312
27305
  }
27313
27306
  const planLines = steps.map((step) => {
27314
27307
  const names = step.items.join(" ");
27315
- const countLabel = pc8.dim(`${step.count} ${step.unit}`);
27316
- return `${pc8.red("\xD7")} ${names} ${countLabel}`;
27308
+ const countLabel = pc7.dim(`${step.count} ${step.unit}`);
27309
+ return `${pc7.red("\xD7")} ${names} ${countLabel}`;
27317
27310
  });
27318
27311
  p22.note(planLines.join("\n"), "Uninstall plan");
27319
27312
  if (!options.force) {
@@ -27334,7 +27327,7 @@ async function runUninstallCommand(options) {
27334
27327
  }
27335
27328
  const parts = steps.map((step) => `${step.count} ${step.unit}`);
27336
27329
  s.stop(`Removed ${parts.join(", ")}`);
27337
- p22.note(pc8.dim("Database tables were NOT dropped \u2014 drop them manually if needed."), "Next steps");
27330
+ p22.note(pc7.dim("Database tables were NOT dropped \u2014 drop them manually if needed."), "Next steps");
27338
27331
  p22.outro("Uninstall complete");
27339
27332
  }
27340
27333