@ubean/cli 0.1.13 → 0.2.0

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
@@ -1,7 +1,7 @@
1
- import { E as createFsOps, S as renderTemplate, a as scaffold, c as scaffoldStarterTemplate, i as recoverScaffold, l as scaffoldUnifyTemplate, n as listScaffoldableFiles, o as scaffoldBlogTemplate, r as pageCommand, s as scaffoldMinimalTemplate, t as deleteScaffold } from "./page-VyP_7yLT.js";
1
+ import { E as createFsOps, S as renderTemplate, a as scaffold, c as scaffoldStarterTemplate, i as recoverScaffold, l as scaffoldUnifyTemplate, n as listScaffoldableFiles, o as scaffoldBlogTemplate, r as pageCommand, s as scaffoldMinimalTemplate, t as deleteScaffold } from "./page-D-LZUcPP.js";
2
2
  import { existsSync, mkdirSync, readFileSync } from "node:fs";
3
3
  import { extname, normalize } from "node:path";
4
- import { consola } from "consola";
4
+ import { getLogger } from "@ubean/logger";
5
5
  import { defineCommand, runMain } from "citty";
6
6
  import { readFile, rm, stat } from "node:fs/promises";
7
7
  import { pathToFileURL } from "node:url";
@@ -10,7 +10,7 @@ import { generateOpenApiTypesFromServer, generateTypes } from "@ubean/codegen";
10
10
  import { loadUbeanConfig, resolvePrerenderConfig, resolveSsrConfig } from "@ubean/config";
11
11
  import { prerender } from "@ubean/prerender";
12
12
  import { NODE_REQUIREMENTS, createCapabilitySet, diagnoseCapabilities, registerBuiltinPresets, resolvePresetByName } from "@ubean/preset";
13
- import { scanProject } from "@ubean/routing";
13
+ import { scanProject } from "@ubean/scan";
14
14
  import { basename, join as join$1, resolve as resolve$1 } from "pathe";
15
15
  import { createUbeanApp } from "@ubean/app";
16
16
  import { createDevRunner, createDevWatcher, logDiagnostics } from "@ubean/dev-server";
@@ -18,9 +18,9 @@ import { bold, cyan, dim, green } from "kolorist";
18
18
  import { execSync, spawn } from "node:child_process";
19
19
  import { BUILTIN_MODULES, isBuiltinDisabled } from "@ubean/modules";
20
20
  import { createServer } from "node:http";
21
- import { findAvailablePort, waitForPort } from "@ubean/utils";
21
+ import { findAvailablePort, waitForPort } from "@ubean/shared/node";
22
22
  //#region src/config.ts
23
- const logger$8 = consola.withTag("ubean-cli");
23
+ const logger$8 = getLogger("cli");
24
24
  const CONFIG_TEMPLATE = `import { defineConfig } from 'ubean';
25
25
 
26
26
  export default defineConfig({
@@ -99,7 +99,8 @@ const configCommand = {
99
99
  }
100
100
  },
101
101
  async run({ args }) {
102
- const fs = createFsOps(process.cwd());
102
+ const cwd = process.cwd();
103
+ const fs = createFsOps(cwd);
103
104
  const preset = args.preset;
104
105
  const existing = await findConfigFile(fs);
105
106
  if (existing && !args.force) {
@@ -108,12 +109,12 @@ const configCommand = {
108
109
  }
109
110
  const content = renderTemplate(CONFIG_TEMPLATE, { variables: { preset } });
110
111
  if (args.dry) {
111
- logger$8.success("[dry-run] Would create ubean.config.ts");
112
- logger$8.log(`\n${content}`);
112
+ logger$8.info("[dry-run] Would create ubean.config.ts");
113
+ logger$8.info(`\n${content}`);
113
114
  return;
114
115
  }
115
116
  await fs.writeFile("ubean.config.ts", content);
116
- logger$8.success("Created ubean.config.ts");
117
+ logger$8.info("Created ubean.config.ts");
117
118
  }
118
119
  },
119
120
  show: {
@@ -122,16 +123,17 @@ const configCommand = {
122
123
  description: "Show current configuration file location and content"
123
124
  },
124
125
  async run() {
125
- const fs = createFsOps(process.cwd());
126
+ const cwd = process.cwd();
127
+ const fs = createFsOps(cwd);
126
128
  const configFile = await findConfigFile(fs);
127
129
  if (!configFile) {
128
130
  logger$8.warn("No ubean config file found. Run `ubean config init` to create one.");
129
131
  return;
130
132
  }
131
133
  logger$8.info(`Config file: ${configFile}`);
132
- logger$8.log("");
134
+ logger$8.info("");
133
135
  const content = await fs.readFile(configFile);
134
- logger$8.log(content);
136
+ logger$8.info(content);
135
137
  }
136
138
  },
137
139
  example: {
@@ -140,7 +142,7 @@ const configCommand = {
140
142
  description: "Show a full example configuration with all options"
141
143
  },
142
144
  async run() {
143
- logger$8.log(CONFIG_EXAMPLE_FULL);
145
+ logger$8.info(CONFIG_EXAMPLE_FULL);
144
146
  }
145
147
  },
146
148
  path: {
@@ -149,20 +151,21 @@ const configCommand = {
149
151
  description: "Print resolved config file path"
150
152
  },
151
153
  async run() {
152
- const fs = createFsOps(process.cwd());
154
+ const cwd = process.cwd();
155
+ const fs = createFsOps(cwd);
153
156
  const configFile = await findConfigFile(fs);
154
157
  if (!configFile) {
155
158
  logger$8.error("No config file found");
156
159
  process.exit(1);
157
160
  }
158
- logger$8.log(fs.resolve(configFile));
161
+ logger$8.info(fs.resolve(configFile));
159
162
  }
160
163
  }
161
164
  }
162
165
  };
163
166
  //#endregion
164
167
  //#region src/build.ts
165
- const logger$7 = consola.withTag("ubean-cli");
168
+ const logger$7 = getLogger("cli");
166
169
  /**
167
170
  * Creates a fetcher that invokes the built SSR entry to render real HTML.
168
171
  * Inspired by void's Node prerender runner: import the built `entry.mjs`,
@@ -174,7 +177,8 @@ const logger$7 = consola.withTag("ubean-cli");
174
177
  */
175
178
  async function createSsrFetcher(cwd, manifest) {
176
179
  try {
177
- const mod = await import(pathToFileURL(resolve$1(cwd, manifest.serverDir, "entry.mjs")).href);
180
+ const entryPath = resolve$1(cwd, manifest.serverDir, "entry.mjs");
181
+ const mod = await import(pathToFileURL(entryPath).href);
178
182
  const createFetchHandler = mod.default ?? mod.createFetchHandler;
179
183
  if (typeof createFetchHandler !== "function") {
180
184
  logger$7.warn("SSR entry does not export createFetchHandler; falling back to placeholder prerender.");
@@ -243,7 +247,7 @@ const buildCommand = {
243
247
  },
244
248
  async run({ args }) {
245
249
  const cwd = resolve$1(args.cwd || process.cwd());
246
- logger$7.start("Building ubean application...");
250
+ logger$7.info("Building ubean application...");
247
251
  try {
248
252
  registerBuiltinPresets();
249
253
  const config = await loadUbeanConfig(cwd);
@@ -257,7 +261,8 @@ const buildCommand = {
257
261
  if (args.prerender === true) {
258
262
  if (!config.prerender.enabled) config.prerender = resolvePrerenderConfig({ all: true });
259
263
  } else if (args.prerender === false) config.prerender = resolvePrerenderConfig();
260
- const preset = resolvePresetByName(args.preset || config.build.preset);
264
+ const presetName = args.preset || config.build.preset;
265
+ const preset = resolvePresetByName(presetName);
261
266
  logger$7.info(`Using preset: ${preset.name}`);
262
267
  logger$7.info(`App mode: ${config.mode}${config.mode === "fullstack" ? ` (ssr=${config.ssr.enabled})` : ""}`);
263
268
  logger$7.info("Scanning project...");
@@ -295,7 +300,8 @@ const buildCommand = {
295
300
  minify: args.minify,
296
301
  sourcemap: args.sourcemap
297
302
  });
298
- if (config.prerender.enabled) {
303
+ const hasPrerenderRules = Object.values(config.routeRules || {}).some((r) => r?.prerender === true);
304
+ if (config.prerender.enabled || hasPrerenderRules) {
299
305
  logger$7.info("Prerendering static pages...");
300
306
  const fetcher = await createSsrFetcher(cwd, manifest);
301
307
  await prerender({
@@ -303,10 +309,11 @@ const buildCommand = {
303
309
  outputDir: config.build.outputDir,
304
310
  pages: result.pages,
305
311
  prerender: config.prerender,
312
+ routeRules: config.routeRules,
306
313
  fetcher
307
314
  });
308
315
  }
309
- if (config.mode === "ssg") {
316
+ if (config.mode === "ssg" && !process.env.UBEAN_KEEP_SSR) {
310
317
  const serverDir = join$1(cwd, config.build.outputDir, "server");
311
318
  if (existsSync(serverDir)) {
312
319
  logger$7.info("Cleaning temporary SSR bundle (SSG mode)...");
@@ -323,7 +330,7 @@ const buildCommand = {
323
330
  config,
324
331
  manifest
325
332
  });
326
- logger$7.success(`Build complete for preset "${resolvedPreset.name}"!`);
333
+ logger$7.info(`Build complete for preset "${resolvedPreset.name}"!`);
327
334
  logger$7.info(` Output directory: ${resolve$1(cwd, config.build.outputDir)}`);
328
335
  if (manifest.entry) logger$7.info(` Server entry: ${manifest.entry}`);
329
336
  logger$7.info(` Client assets: ${manifest.assets.length} files`);
@@ -336,7 +343,7 @@ const buildCommand = {
336
343
  };
337
344
  //#endregion
338
345
  //#region src/dev.ts
339
- const logger$6 = consola.withTag("ubean-cli");
346
+ const logger$6 = getLogger("cli");
340
347
  /**
341
348
  * Best-effort loader for the optional `@ubean/devtools` peer dependency.
342
349
  *
@@ -387,7 +394,7 @@ const devCommand = {
387
394
  },
388
395
  async run({ args }) {
389
396
  const cwd = resolve$1(args.cwd || process.cwd());
390
- logger$6.start("Starting ubean dev server...");
397
+ logger$6.info("Starting ubean dev server...");
391
398
  registerBuiltinPresets();
392
399
  const config = await loadUbeanConfig(cwd);
393
400
  const port = Number(args.port) || config.dev.port;
@@ -457,9 +464,9 @@ const devCommand = {
457
464
  ];
458
465
  if (config.devtools.enabled) lines.push(` → ${label("DevTools:")} ${cyan(`${url}${config.devtools.route}`)}`);
459
466
  lines.push(` → ${dim("Press Ctrl+C to stop")}`);
460
- logger$6.box(lines.join("\n"));
467
+ logger$6.info(lines.join("\n"));
461
468
  generateOpenApiTypesFromServer(url, { outDir: resolve$1(cwd, ".ubean") }).then((filePath) => {
462
- logger$6.success(`OpenAPI types generated: ${filePath}`);
469
+ logger$6.info(`OpenAPI types generated: ${filePath}`);
463
470
  }).catch((err) => {
464
471
  logger$6.warn(`Failed to generate OpenAPI types: ${err instanceof Error ? err.message : String(err)}`);
465
472
  });
@@ -468,7 +475,7 @@ const devCommand = {
468
475
  logger$6.info("Reloading...");
469
476
  },
470
477
  onAfterReload() {
471
- logger$6.success("Reloaded");
478
+ logger$6.info("Reloaded");
472
479
  }
473
480
  });
474
481
  try {
@@ -548,10 +555,11 @@ async function buildApp(cwd, config) {
548
555
  },
549
556
  i18nConfig: config.i18n,
550
557
  ssrExclude: config.ssr.exclude,
558
+ streaming: config.ssr.streaming,
551
559
  notFoundPage: result.notFoundPage
552
560
  });
553
561
  app.hooks.hook("request:start", (c) => {
554
- logger$6.log(`${c.req.method} ${c.req.path}`);
562
+ logger$6.info(`${c.req.method} ${c.req.path}`);
555
563
  });
556
564
  return {
557
565
  app,
@@ -561,7 +569,7 @@ async function buildApp(cwd, config) {
561
569
  }
562
570
  //#endregion
563
571
  //#region src/devtools.ts
564
- const logger$5 = consola.withTag("ubean-cli");
572
+ const logger$5 = getLogger("cli");
565
573
  const devtoolsCommand = {
566
574
  meta: {
567
575
  name: "devtools",
@@ -575,27 +583,27 @@ const devtoolsCommand = {
575
583
  },
576
584
  async run() {
577
585
  logger$5.info("DevTools Information");
578
- logger$5.log("");
579
- logger$5.log(" DevTools is built into ubean and available in dev mode.");
580
- logger$5.log("");
581
- logger$5.log(" Access:");
582
- logger$5.log(" - Start dev server: pnpm dev");
583
- logger$5.log(" - Open DevTools: Press Shift+Alt+D in the browser, or visit /__ubean/devtools/");
584
- logger$5.log("");
585
- logger$5.log(" Configuration (ubean.config.ts):");
586
- logger$5.log(" devtools: {");
587
- logger$5.log(" enabled: true, // Enable/disable DevTools (dev only)");
588
- logger$5.log(" }");
589
- logger$5.log("");
590
- logger$5.log(" Features:");
591
- logger$5.log(" - Routes: View all registered routes and their handlers");
592
- logger$5.log(" - Pages: Inspect page components and layouts");
593
- logger$5.log(" - APIs: Browse API routes with OpenAPI integration");
594
- logger$5.log(" - Middleware: View registered middleware");
595
- logger$5.log(" - Crons: See scheduled tasks and their status");
596
- logger$5.log(" - Config: View resolved configuration");
597
- logger$5.log(" - Plugins: Browse installed plugins and their tabs");
598
- logger$5.log(" - CRUD: Create/delete pages, APIs, layouts, middleware, crons");
586
+ logger$5.info("");
587
+ logger$5.info(" DevTools is built into ubean and available in dev mode.");
588
+ logger$5.info("");
589
+ logger$5.info(" Access:");
590
+ logger$5.info(" - Start dev server: pnpm dev");
591
+ logger$5.info(" - Open DevTools: Press Shift+Alt+D in the browser, or visit /__ubean/devtools/");
592
+ logger$5.info("");
593
+ logger$5.info(" Configuration (ubean.config.ts):");
594
+ logger$5.info(" devtools: {");
595
+ logger$5.info(" enabled: true, // Enable/disable DevTools (dev only)");
596
+ logger$5.info(" }");
597
+ logger$5.info("");
598
+ logger$5.info(" Features:");
599
+ logger$5.info(" - Routes: View all registered routes and their handlers");
600
+ logger$5.info(" - Pages: Inspect page components and layouts");
601
+ logger$5.info(" - APIs: Browse API routes with OpenAPI integration");
602
+ logger$5.info(" - Middleware: View registered middleware");
603
+ logger$5.info(" - Crons: See scheduled tasks and their status");
604
+ logger$5.info(" - Config: View resolved configuration");
605
+ logger$5.info(" - Plugins: Browse installed plugins and their tabs");
606
+ logger$5.info(" - CRUD: Create/delete pages, APIs, layouts, middleware, crons");
599
607
  }
600
608
  },
601
609
  path: {
@@ -610,14 +618,14 @@ const devtoolsCommand = {
610
618
  } },
611
619
  async run({ args }) {
612
620
  const port = args.port;
613
- logger$5.log(`http://localhost:${port}/__ubean/devtools/`);
621
+ logger$5.info(`http://localhost:${port}/__ubean/devtools/`);
614
622
  }
615
623
  }
616
624
  }
617
625
  };
618
626
  //#endregion
619
627
  //#region src/env.ts
620
- const logger$4 = consola.withTag("ubean-cli");
628
+ const logger$4 = getLogger("cli");
621
629
  function parseEnvContent(content) {
622
630
  const vars = [];
623
631
  const lines = content.split("\n");
@@ -697,7 +705,8 @@ const envCommand = {
697
705
  }
698
706
  },
699
707
  async run({ args }) {
700
- const fs = createFsOps(process.cwd());
708
+ const cwd = process.cwd();
709
+ const fs = createFsOps(cwd);
701
710
  const file = args.file;
702
711
  let key = args.key;
703
712
  const value = args.value;
@@ -716,8 +725,8 @@ const envCommand = {
716
725
  public: key.startsWith("UBEAN_PUBLIC_") || key.startsWith("VITE_")
717
726
  });
718
727
  await writeEnvFile(fs, file, vars, args.dry);
719
- if (args.dry) logger$4.success(`[dry-run] Would ${existing ? "update" : "add"} ${key}=${value} in ${file}`);
720
- else logger$4.success(`${existing ? "Updated" : "Added"} ${key} in ${file}`);
728
+ if (args.dry) logger$4.info(`[dry-run] Would ${existing ? "update" : "add"} ${key}=${value} in ${file}`);
729
+ else logger$4.info(`${existing ? "Updated" : "Added"} ${key} in ${file}`);
721
730
  if (key.startsWith("UBEAN_PUBLIC_") || key.startsWith("VITE_") || key.startsWith("PUBLIC_")) logger$4.info(` Note: ${key} is exposed to client-side code`);
722
731
  }
723
732
  },
@@ -743,7 +752,8 @@ const envCommand = {
743
752
  }
744
753
  },
745
754
  async run({ args }) {
746
- const fs = createFsOps(process.cwd());
755
+ const cwd = process.cwd();
756
+ const fs = createFsOps(cwd);
747
757
  const file = args.file;
748
758
  const key = args.key;
749
759
  const vars = await readEnvFile(fs, file);
@@ -753,10 +763,10 @@ const envCommand = {
753
763
  return;
754
764
  }
755
765
  vars.splice(index, 1);
756
- if (args.dry) logger$4.success(`[dry-run] Would remove ${key} from ${file}`);
766
+ if (args.dry) logger$4.info(`[dry-run] Would remove ${key} from ${file}`);
757
767
  else {
758
768
  await writeEnvFile(fs, file, vars);
759
- logger$4.success(`Removed ${key} from ${file}`);
769
+ logger$4.info(`Removed ${key} from ${file}`);
760
770
  }
761
771
  }
762
772
  },
@@ -778,7 +788,8 @@ const envCommand = {
778
788
  }
779
789
  },
780
790
  async run({ args }) {
781
- const fs = createFsOps(process.cwd());
791
+ const cwd = process.cwd();
792
+ const fs = createFsOps(cwd);
782
793
  const file = args.file;
783
794
  if (!await fs.exists(file)) {
784
795
  logger$4.info(`${file} does not exist`);
@@ -793,7 +804,7 @@ const envCommand = {
793
804
  logger$4.info(`Variables in ${file} (${filtered.length}):`);
794
805
  for (const v of filtered) {
795
806
  const suffix = v.public ? " [public]" : "";
796
- logger$4.log(` ${v.key}=${v.value}${suffix}`);
807
+ logger$4.info(` ${v.key}=${v.value}${suffix}`);
797
808
  }
798
809
  const publicCount = vars.filter((v) => v.public).length;
799
810
  const privateCount = vars.length - publicCount;
@@ -819,7 +830,8 @@ const envCommand = {
819
830
  }
820
831
  },
821
832
  async run({ args }) {
822
- const fs = createFsOps(process.cwd());
833
+ const cwd = process.cwd();
834
+ const fs = createFsOps(cwd);
823
835
  for (const [file, content] of [[".env", `# ubean environment variables
824
836
  # Server-only variables (never exposed to client)
825
837
  DATABASE_URL=
@@ -836,10 +848,10 @@ SESSION_SECRET=your-session-secret
836
848
  logger$4.warn(`Skipping ${file} (already exists, use --force to overwrite)`);
837
849
  continue;
838
850
  }
839
- if (args.dry) logger$4.success(`[dry-run] Would create ${file}`);
851
+ if (args.dry) logger$4.info(`[dry-run] Would create ${file}`);
840
852
  else {
841
853
  await fs.writeFile(file, content);
842
- logger$4.success(`Created ${file}`);
854
+ logger$4.info(`Created ${file}`);
843
855
  }
844
856
  }
845
857
  logger$4.info("\nTip: Add .env to .gitignore (but commit .env.example)");
@@ -849,7 +861,7 @@ SESSION_SECRET=your-session-secret
849
861
  };
850
862
  //#endregion
851
863
  //#region src/init.ts
852
- const logger$3 = consola.withTag("ubean-cli");
864
+ const logger$3 = getLogger("cli");
853
865
  const TEMPLATES = [
854
866
  {
855
867
  value: "unify",
@@ -972,9 +984,7 @@ async function scaffoldProject(options) {
972
984
  case "blog":
973
985
  await scaffoldBlogTemplate(fs, templateOptions);
974
986
  break;
975
- default:
976
- await scaffoldStarterTemplate(fs, templateOptions);
977
- break;
987
+ default: await scaffoldStarterTemplate(fs, templateOptions);
978
988
  }
979
989
  if (options.git) try {
980
990
  const { execSync } = await import("node:child_process");
@@ -1072,7 +1082,7 @@ const initCommand = {
1072
1082
  };
1073
1083
  //#endregion
1074
1084
  //#region src/prepare.ts
1075
- const logger$2 = consola.withTag("ubean-cli");
1085
+ const logger$2 = getLogger("cli");
1076
1086
  async function ensureBuildDir(cwd, buildDir) {
1077
1087
  const fullPath = join$1(cwd, buildDir);
1078
1088
  if (!existsSync(fullPath)) mkdirSync(fullPath, { recursive: true });
@@ -1080,6 +1090,8 @@ async function ensureBuildDir(cwd, buildDir) {
1080
1090
  /**
1081
1091
  * Detects the package manager used in the project by inspecting lockfiles.
1082
1092
  * Priority: pnpm > yarn > bun > npm (npm as default fallback).
1093
+ *
1094
+ * 导出供单测复用(OPT-04 4c)。
1083
1095
  */
1084
1096
  function detectPackageManager(cwd) {
1085
1097
  if (existsSync(join$1(cwd, "pnpm-lock.yaml"))) return "pnpm";
@@ -1090,8 +1102,10 @@ function detectPackageManager(cwd) {
1090
1102
  /**
1091
1103
  * Builds the install command args for a given package manager and package list.
1092
1104
  * Examples:
1093
- * pnpm → ['add', '@ubean/ui@^0.1.3']
1094
- * npm → ['install', '@ubean/ui@^0.1.3']
1105
+ * pnpm → ['add', '@ubean/integrations@^0.1.3']
1106
+ * npm → ['install', '@ubean/integrations@^0.1.3']
1107
+ *
1108
+ * 导出供单测复用(OPT-04 4c)。
1095
1109
  */
1096
1110
  function buildInstallCommand(pm, packages) {
1097
1111
  switch (pm) {
@@ -1115,8 +1129,10 @@ function buildInstallCommand(pm, packages) {
1115
1129
  }
1116
1130
  /**
1117
1131
  * Extracts the bare package name from a module path.
1118
- * '@ubean/ui/vite' → '@ubean/ui'
1119
- * '@ubean/electron/vite' → '@ubean/electron'
1132
+ * '@ubean/integrations/pwa' → '@ubean/integrations'
1133
+ * '@ubean/icon/vite' → '@ubean/icon'
1134
+ *
1135
+ * 导出供单测复用(OPT-04 4c)。
1120
1136
  */
1121
1137
  function extractPackageName(modulePath) {
1122
1138
  if (modulePath.startsWith("@")) return modulePath.split("/").slice(0, 2).join("/");
@@ -1126,6 +1142,8 @@ function extractPackageName(modulePath) {
1126
1142
  * Reads the `ubean` package version from the project's package.json so we can
1127
1143
  * install matching versions of `@ubean/*` extension packages.
1128
1144
  * Returns `null` if ubean isn't declared or version can't be parsed.
1145
+ *
1146
+ * 导出供单测复用(OPT-04 4c)。
1129
1147
  */
1130
1148
  function getUbeanVersion(cwd) {
1131
1149
  try {
@@ -1197,7 +1215,7 @@ async function ensureBuiltinModules(cwd, config, autoInstall) {
1197
1215
  stdio: "inherit",
1198
1216
  env: { ...process.env }
1199
1217
  });
1200
- logger$2.success(`Installed: ${packagesToInstall.join(", ")}`);
1218
+ logger$2.info(`Installed: ${packagesToInstall.join(", ")}`);
1201
1219
  } catch (err) {
1202
1220
  logger$2.error(`Failed to auto-install packages: ${err instanceof Error ? err.message : String(err)}`);
1203
1221
  for (const m of missing) {
@@ -1225,7 +1243,7 @@ const prepareCommand = {
1225
1243
  },
1226
1244
  async run({ args }) {
1227
1245
  const cwd = resolve$1(args.cwd || process.cwd());
1228
- logger$2.start(`Preparing ubean project at ${cwd}...`);
1246
+ logger$2.info(`Preparing ubean project at ${cwd}...`);
1229
1247
  const config = await loadUbeanConfig(cwd);
1230
1248
  await ensureBuiltinModules(cwd, config, args.install !== false);
1231
1249
  const typesDir = ".ubean";
@@ -1249,8 +1267,8 @@ const prepareCommand = {
1249
1267
  composablesDirs: config.imports.dirs,
1250
1268
  componentsDirs: config.components.dirs
1251
1269
  });
1252
- for (const file of codegenResult.generated) logger$2.success(`Generated ${file.replace(`${cwd}/`, "")}`);
1253
- logger$2.success("Prepare complete!");
1270
+ for (const file of codegenResult.generated) logger$2.info(`Generated ${file.replace(`${cwd}/`, "")}`);
1271
+ logger$2.info("Prepare complete!");
1254
1272
  }
1255
1273
  };
1256
1274
  //#endregion
@@ -1346,7 +1364,7 @@ function startStaticServer(opts) {
1346
1364
  }
1347
1365
  }).listen(port, host);
1348
1366
  }
1349
- const logger$1 = consola.withTag("ubean-cli");
1367
+ const logger$1 = getLogger("cli");
1350
1368
  const previewCommand = {
1351
1369
  meta: {
1352
1370
  name: "preview",
@@ -1374,7 +1392,7 @@ const previewCommand = {
1374
1392
  },
1375
1393
  async run({ args }) {
1376
1394
  const cwd = resolve$1(args.cwd || process.cwd());
1377
- logger$1.start("Starting ubean preview server...");
1395
+ logger$1.info("Starting ubean preview server...");
1378
1396
  registerBuiltinPresets();
1379
1397
  const config = await loadUbeanConfig(cwd);
1380
1398
  const preset = resolvePresetByName(config.build.preset);
@@ -1399,7 +1417,7 @@ const previewCommand = {
1399
1417
  const label = (text) => dim(text);
1400
1418
  const printBanner = (port, modeLabel) => {
1401
1419
  const bannerUrl = `http://${host}:${port}`;
1402
- logger$1.box(`${green(bold("🚀 ubean preview server ready"))}\n\n → ${label("Local:")} ${cyan(bannerUrl)}\n → ${label("Mode:")} ${dim(modeLabel)}\n → ${label("Preset:")} ${cyan(preset.name)}\n → ${dim("Press Ctrl+C to stop")}`);
1420
+ logger$1.info(`${green(bold("🚀 ubean preview server ready"))}\n\n → ${label("Local:")} ${cyan(bannerUrl)}\n → ${label("Mode:")} ${dim(modeLabel)}\n → ${label("Preset:")} ${cyan(preset.name)}\n → ${dim("Press Ctrl+C to stop")}`);
1403
1421
  };
1404
1422
  if (mode === "spa" || mode === "ssg") {
1405
1423
  const staticRoot = join$1(cwd, outputDir, "public");
@@ -1507,7 +1525,7 @@ function spawnPreviewServer(opts) {
1507
1525
  }
1508
1526
  //#endregion
1509
1527
  //#region src/scaffold-commands.ts
1510
- const logger = consola.withTag("ubean-cli");
1528
+ const logger = getLogger("cli");
1511
1529
  const COMMAND_META = {
1512
1530
  api: {
1513
1531
  name: "api",
@@ -1590,7 +1608,7 @@ function createScaffoldCommand(type) {
1590
1608
  force: args.force,
1591
1609
  dry: args.dry
1592
1610
  });
1593
- for (const file of result.created) logger.success(`${args.dry ? "[dry-run] Would create" : "Created"} ${file}`);
1611
+ for (const file of result.created) logger.info(`${args.dry ? "[dry-run] Would create" : "Created"} ${file}`);
1594
1612
  for (const file of result.skipped) logger.warn(`Skipped ${file} (already exists, use --force to overwrite)`);
1595
1613
  for (const err of result.errors) logger.error(err);
1596
1614
  }
@@ -1625,7 +1643,7 @@ function createScaffoldCommand(type) {
1625
1643
  force: args.force,
1626
1644
  dry: args.dry
1627
1645
  });
1628
- for (const file of result.deleted) logger.success(`${args.dry ? "[dry-run] Would delete" : args.force ? "Deleted" : "Deleted (backup created)"} ${file}`);
1646
+ for (const file of result.deleted) logger.info(`${args.dry ? "[dry-run] Would delete" : args.force ? "Deleted" : "Deleted (backup created)"} ${file}`);
1629
1647
  for (const err of result.errors) logger.error(err);
1630
1648
  }
1631
1649
  },
@@ -1652,7 +1670,7 @@ function createScaffoldCommand(type) {
1652
1670
  path: args.path,
1653
1671
  dry: args.dry
1654
1672
  });
1655
- for (const file of result.restored) logger.success(`${args.dry ? "[dry-run] Backup exists for" : "Recovered"} ${file}`);
1673
+ for (const file of result.restored) logger.info(`${args.dry ? "[dry-run] Backup exists for" : "Recovered"} ${file}`);
1656
1674
  for (const err of result.errors) logger.error(err);
1657
1675
  }
1658
1676
  },
@@ -1668,12 +1686,17 @@ function createScaffoldCommand(type) {
1668
1686
  return;
1669
1687
  }
1670
1688
  logger.info(`Found ${files.length} ${type}(s):`);
1671
- for (const file of files) logger.log(` ${file}`);
1689
+ for (const file of files) logger.info(` ${file}`);
1672
1690
  }
1673
1691
  }
1674
1692
  }
1675
1693
  };
1676
1694
  }
1695
+ const apiCommand = createScaffoldCommand("api");
1696
+ const layoutCommand = createScaffoldCommand("layout");
1697
+ const middlewareCommand = createScaffoldCommand("middleware");
1698
+ const cronCommand = createScaffoldCommand("cron");
1699
+ const pluginCommand = createScaffoldCommand("plugin");
1677
1700
  //#endregion
1678
1701
  //#region src/cli.ts
1679
1702
  /**
@@ -1684,7 +1707,7 @@ function createScaffoldCommand(type) {
1684
1707
  *
1685
1708
  * 库代码请从 `@ubean/cli`(主入口)导入 scaffold / fs-ops / templates。
1686
1709
  */
1687
- runMain(defineCommand({
1710
+ const main = defineCommand({
1688
1711
  meta: {
1689
1712
  name: "ubean",
1690
1713
  version: "0.0.1",
@@ -1700,12 +1723,13 @@ runMain(defineCommand({
1700
1723
  env: envCommand,
1701
1724
  config: configCommand,
1702
1725
  devtools: devtoolsCommand,
1703
- api: createScaffoldCommand("api"),
1704
- layout: createScaffoldCommand("layout"),
1705
- middleware: createScaffoldCommand("middleware"),
1706
- cron: createScaffoldCommand("cron"),
1707
- plugin: createScaffoldCommand("plugin")
1726
+ api: apiCommand,
1727
+ layout: layoutCommand,
1728
+ middleware: middlewareCommand,
1729
+ cron: cronCommand,
1730
+ plugin: pluginCommand
1708
1731
  }
1709
- }));
1732
+ });
1733
+ runMain(main);
1710
1734
  //#endregion
1711
1735
  export {};
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import { C as toCamelCase, E as createFsOps, S as renderTemplate, T as toPascalCase, _ as renderCronTemplate, a as scaffold, b as renderPageTemplate, d as CRON_TEMPLATE, f as LAYOUT_TEMPLATE, g as renderApiTemplate, h as PLUGIN_TEMPLATE, i as recoverScaffold, m as PAGE_TEMPLATE, n as listScaffoldableFiles, p as MIDDLEWARE_TEMPLATE, t as deleteScaffold, u as API_TEMPLATE, v as renderLayoutTemplate, w as toKebabCase, x as renderPluginTemplate, y as renderMiddlewareTemplate } from "./page-VyP_7yLT.js";
1
+ import { C as toCamelCase, E as createFsOps, S as renderTemplate, T as toPascalCase, _ as renderCronTemplate, a as scaffold, b as renderPageTemplate, d as CRON_TEMPLATE, f as LAYOUT_TEMPLATE, g as renderApiTemplate, h as PLUGIN_TEMPLATE, i as recoverScaffold, m as PAGE_TEMPLATE, n as listScaffoldableFiles, p as MIDDLEWARE_TEMPLATE, t as deleteScaffold, u as API_TEMPLATE, v as renderLayoutTemplate, w as toKebabCase, x as renderPluginTemplate, y as renderMiddlewareTemplate } from "./page-D-LZUcPP.js";
2
2
  export { API_TEMPLATE, CRON_TEMPLATE, LAYOUT_TEMPLATE, MIDDLEWARE_TEMPLATE, PAGE_TEMPLATE, PLUGIN_TEMPLATE, createFsOps, deleteScaffold, listScaffoldableFiles, recoverScaffold, renderApiTemplate, renderCronTemplate, renderLayoutTemplate, renderMiddlewareTemplate, renderPageTemplate, renderPluginTemplate, renderTemplate, scaffold, toCamelCase, toKebabCase, toPascalCase };
@@ -1,6 +1,6 @@
1
1
  import { existsSync, promises } from "node:fs";
2
2
  import { dirname, extname, join, relative, resolve } from "node:path";
3
- import { consola } from "consola";
3
+ import { getLogger } from "@ubean/logger";
4
4
  //#region src/shared/fs-ops.ts
5
5
  function resolvePath(cwd, ...paths) {
6
6
  return resolve(cwd, ...paths);
@@ -557,7 +557,7 @@ const ABOUT_PAGE = `<script setup lang="ts"><\/script>
557
557
  `;
558
558
  const ABOUT_REUSE = `import { definePage } from 'ubean';
559
559
 
560
- export default definePage({
560
+ definePage({
561
561
  reuse: 'About'
562
562
  });
563
563
  `;
@@ -993,25 +993,69 @@ const ZH_LOCALE = `{
993
993
  const FAVICON_SVG = `<svg width="100%" height="100%" version="1.1" viewBox="0 0 1000 1000" xmlns="http://www.w3.org/2000/svg"
994
994
  xmlns:xlink="http://www.w3.org/1999/xlink">
995
995
  <g>
996
- <path d="M 200,866 C 100,866 50,779.4 100,692.8 L 200,519.6 C 220,485 240,490 265,499.6 S 360,542.68 360,542.68 C 480.5,601 498,642.5 500,720 C 498,811 462,856 420,866" fill="url(#LinearGradient)" fill-rule="nonzero" opacity="1" stroke="none" />
997
- <path d="M 420,866 C 455,861 478,846 500,827 C 614,696 615,597 500,517 C 394,444 333,374 380,207.82 L 260,415.67 C 240.22,450 254.37,465.1 275.28,481.79 S 360,542.68 360,542.68 C 480.5,601 498,642.5 500,720 C 498,811 462,856 420,866" fill="url(#LinearGradient_2)" fill-rule="nonzero" opacity="1" stroke="none" />
998
- <path d="M 500,517 C 394,444 333,374 380,207.82 L 400,173.2 C 367,295 421,350 603,428 C 572,440 524,474 500,517" fill="url(#LinearGradient_3)" fill-rule="nonzero" opacity="1" stroke="none" />
999
- <path d="M 500,827 L 660,660 C 738,589 710,482 603,428 C 572,440 524,474 500,517 C 615,597 614,696 500,827" fill="url(#LinearGradient_4)" fill-rule="nonzero" opacity="1" stroke="none" />
1000
- <path d="M 400,173.2 C 367,295 421,350 603,428 C 690,389, 750,445 788,500 L 600,173.2 C 550,86.6 450,86.6 400,173.2" fill="url(#LinearGradient_5)" fill-rule="nonzero" opacity="1" stroke="none" />
1001
- <path d="M 500,827 L 660,660 C 738,589 710,482 603,428 C 690,389, 750,445 788,500 C 816,554 797,606 750,640 L 500,827" fill="url(#LinearGradient_6)" fill-rule="nonzero" opacity="1" stroke="none" />
1002
- <path d="M 788,500 C 816,554 797,606 750,640 L 500,827 C 497,851 513,862 540,866 L 800,866 C 900,866 950,779.4 900,692.8 L 788,500" fill="url(#LinearGradient_7)" fill-rule="nonzero" opacity="1" stroke="none" />
1003
- <g transform="translate(140, 650) scale(0.18)">
1004
- <path d="M539.04,146.5c-77.37,32.74-126.47,114.53-123.22,198,.61,150.92,169.47,210.6,214.99,341.13,39.71,96.62-16.62,230.68-122.31,253.16-374.89-83.15-390.44-785.49,30.54-792.29ZM564.61,948.5c68.1-32.18,118.51-95.45,132.49-169.97,41.81-214.6-158.22-254.7-215.15-413.02-31.14-86.21,21.33-198.66,114.56-214.57,129.21,21.58,214.93,148.7,230.96,272.19,7.94,38.53,21.57,75.37,34.41,112.43,75.75,198.26-76.06,438.99-297.26,412.94Z" fill="#ffffff" fill-rule="evenodd"/>
996
+ <path
997
+ d="M 200,866 C 100,866 50,779.4 100,692.8 L 200,519.6 C 220,485 240,490 265,499.6 S 360,542.68 360,542.68 C 480.5,601 498,642.5 500,720 C 498,811 462,856 420,866"
998
+ fill="url(#LinearGradient)" fill-rule="nonzero" opacity="1" stroke="none" />
999
+ <path
1000
+ d="M 420,866 C 455,861 478,846 500,827 C 614,696 615,597 500,517 C 394,444 333,374 380,207.82 L 260,415.67 C 240.22,450 254.37,465.1 275.28,481.79 S 360,542.68 360,542.68 C 480.5,601 498,642.5 500,720 C 498,811 462,856 420,866"
1001
+ fill="url(#LinearGradient_2)" fill-rule="nonzero" opacity="1" stroke="none" />
1002
+ <path d="M 500,517 C 394,444 333,374 380,207.82 L 400,173.2 C 367,295 421,350 603,428 C 572,440 524,474 500,517"
1003
+ fill="url(#LinearGradient_3)" fill-rule="nonzero" opacity="1" stroke="none" />
1004
+ <path d="M 500,827 L 660,660 C 738,589 710,482 603,428 C 572,440 524,474 500,517 C 615,597 614,696 500,827"
1005
+ fill="url(#LinearGradient_4)" fill-rule="nonzero" opacity="1" stroke="none" />
1006
+ <path d="M 400,173.2 C 367,295 421,350 603,428 C 690,389, 750,445 788,500 L 600,173.2 C 550,86.6 450,86.6 400,173.2"
1007
+ fill="url(#LinearGradient_5)" fill-rule="nonzero" opacity="1" stroke="none" />
1008
+ <path
1009
+ d="M 500,827 L 660,660 C 738,589 710,482 603,428 C 690,389, 750,445 788,500 C 816,554 797,606 750,640 L 500,827"
1010
+ fill="url(#LinearGradient_6)" fill-rule="nonzero" opacity="1" stroke="none" />
1011
+ <path
1012
+ d="M 788,500 C 816,554 797,606 750,640 L 500,827 C 497,851 513,862 540,866 L 800,866 C 900,866 950,779.4 900,692.8 L 788,500"
1013
+ fill="url(#LinearGradient_7)" fill-rule="nonzero" opacity="1" stroke="none" />
1014
+
1015
+ <!--左下角图案-->
1016
+ <g transform="translate(130, 675) scale(7)">
1017
+ <g viewBox="0 0 24 24">
1018
+ <path fill="#ffffff" d="M4.528 5.118a1 1 0 0 1 1.027.05l5.554 3.703A2 2 0 0 1 12 10.535V21a1 1 0 0 1-1.555.832l-5.554-3.703A2 2 0 0 1 4 16.465V6a1 1 0 0 1 .528-.882m4-2a1 1 0 0 1 1.027.05l5.554 3.703A2 2 0 0 1 16 8.535V19a1 1 0 0 1-1.555.832l-.945-.63v-8.667a3.5 3.5 0 0 0-1.559-2.912L8 4.995V4a1 1 0 0 1 .528-.882m4-2a1 1 0 0 1 1.027.05l5.554 3.703A2 2 0 0 1 20 6.535V17a1 1 0 0 1-1.555.832l-.945-.63V8.534a3.5 3.5 0 0 0-1.559-2.912L12 2.995V2a1 1 0 0 1 .528-.882" />
1019
+
1005
1020
  </g>
1006
1021
  </g>
1022
+ </g>
1007
1023
  <defs>
1008
- <linearGradient gradientTransform="matrix(104.391 -73.3432 73.3432 104.391 277.441 710.122)" gradientUnits="userSpaceOnUse" id="LinearGradient" x1="0" x2="1" y1="0" y2="0"><stop offset="0" stop-color="#373ebf" /><stop offset="1" stop-color="#5058e6" /></linearGradient>
1009
- <linearGradient gradientTransform="matrix(-173.747 557.324 -557.324 -173.747 508.829 258.172)" gradientUnits="userSpaceOnUse" id="LinearGradient_2" x1="0" x2="1" y1="0" y2="0"><stop offset="0" stop-color="#c2d6ff" /><stop offset="1" stop-color="#646cff" /></linearGradient>
1010
- <linearGradient gradientTransform="matrix(157.951 295.666 -295.666 157.951 382.944 193.642)" gradientUnits="userSpaceOnUse" id="LinearGradient_3" x1="0" x2="1" y1="0" y2="0"><stop offset="0" stop-color="#5058e6" /><stop offset="1" stop-color="#373ebf" /></linearGradient>
1011
- <linearGradient gradientTransform="matrix(-44.3023 219.578 -219.578 -44.3023 619.69 469.652)" gradientUnits="userSpaceOnUse" id="LinearGradient_4" x1="0" x2="1" y1="0" y2="0"><stop offset="0" stop-color="#91a7ff" /><stop offset="1" stop-color="#5058e6" /></linearGradient>
1012
- <linearGradient gradientTransform="matrix(125.52 334.256 -334.256 125.52 539.723 235.139)" gradientUnits="userSpaceOnUse" id="LinearGradient_5" x1="0" x2="1" y1="0" y2="0"><stop offset="0" stop-color="#646cff" /><stop offset="1" stop-color="#c2d6ff" /></linearGradient>
1013
- <linearGradient gradientTransform="matrix(-241.23 357.206 -357.206 -241.23 754.054 449.312)" gradientUnits="userSpaceOnUse" id="LinearGradient_6" x1="0" x2="1" y1="0" y2="0"><stop offset="0" stop-color="#c2d6ff" /><stop offset="1" stop-color="#646cff" /></linearGradient>
1014
- <linearGradient gradientTransform="matrix(125.978 210.065 -210.065 125.978 596.433 613.665)" gradientUnits="userSpaceOnUse" id="LinearGradient_7" x1="0" x2="1" y1="0" y2="0"><stop offset="0" stop-color="#373ebf" /><stop offset="1" stop-color="#5058e6" /></linearGradient>
1024
+ <linearGradient gradientTransform="matrix(104.391 -73.3432 73.3432 104.391 277.441 710.122)"
1025
+ gradientUnits="userSpaceOnUse" id="LinearGradient" x1="0" x2="1" y1="0" y2="0">
1026
+ <stop offset="0" stop-color="#30a772" />
1027
+ <stop offset="1" stop-color="#30e191" />
1028
+ </linearGradient>
1029
+ <linearGradient gradientTransform="matrix(-173.747 557.324 -557.324 -173.747 508.829 258.172)"
1030
+ gradientUnits="userSpaceOnUse" id="LinearGradient_2" x1="0" x2="1" y1="0" y2="0">
1031
+ <stop offset="0" stop-color="#98f6cc" />
1032
+ <stop offset="1" stop-color="#4aefa5" />
1033
+ </linearGradient>
1034
+ <linearGradient gradientTransform="matrix(157.951 295.666 -295.666 157.951 382.944 193.642)"
1035
+ gradientUnits="userSpaceOnUse" id="LinearGradient_3" x1="0" x2="1" y1="0" y2="0">
1036
+ <stop offset="0" stop-color="#30e191" />
1037
+ <stop offset="1" stop-color="#30a772" />
1038
+ </linearGradient>
1039
+ <linearGradient gradientTransform="matrix(-44.3023 219.578 -219.578 -44.3023 619.69 469.652)"
1040
+ gradientUnits="userSpaceOnUse" id="LinearGradient_4" x1="0" x2="1" y1="0" y2="0">
1041
+ <stop offset="0" stop-color="#6ff3b7" />
1042
+ <stop offset="1" stop-color="#30e191" />
1043
+ </linearGradient>
1044
+ <linearGradient gradientTransform="matrix(125.52 334.256 -334.256 125.52 539.723 235.139)"
1045
+ gradientUnits="userSpaceOnUse" id="LinearGradient_5" x1="0" x2="1" y1="0" y2="0">
1046
+ <stop offset="0" stop-color="#4aefa5" />
1047
+ <stop offset="1" stop-color="#98f6cc" />
1048
+ </linearGradient>
1049
+ <linearGradient gradientTransform="matrix(-241.23 357.206 -357.206 -241.23 754.054 449.312)"
1050
+ gradientUnits="userSpaceOnUse" id="LinearGradient_6" x1="0" x2="1" y1="0" y2="0">
1051
+ <stop offset="0" stop-color="#98f6cc" />
1052
+ <stop offset="1" stop-color="#4aefa5" />
1053
+ </linearGradient>
1054
+ <linearGradient gradientTransform="matrix(125.978 210.065 -210.065 125.978 596.433 613.665)"
1055
+ gradientUnits="userSpaceOnUse" id="LinearGradient_7" x1="0" x2="1" y1="0" y2="0">
1056
+ <stop offset="0" stop-color="#30a772" />
1057
+ <stop offset="1" stop-color="#30e191" />
1058
+ </linearGradient>
1015
1059
  </defs>
1016
1060
  </svg>
1017
1061
  `;
@@ -1255,7 +1299,7 @@ async function scaffoldBlogTemplate(fs, options) {
1255
1299
  }
1256
1300
  //#endregion
1257
1301
  //#region src/page.ts
1258
- const logger = consola.withTag("ubean-cli");
1302
+ const logger = getLogger("cli");
1259
1303
  function getSrcDir(cwd) {
1260
1304
  return join(cwd, "src");
1261
1305
  }
@@ -1326,7 +1370,7 @@ function getTemplateContent(type, name, path, method, schedule) {
1326
1370
  });
1327
1371
  case "reuse": return `import { definePage } from 'ubean';
1328
1372
 
1329
- export default definePage({
1373
+ definePage({
1330
1374
  name: '${name}'
1331
1375
  });
1332
1376
  `;
@@ -1532,7 +1576,7 @@ const pageCommand = {
1532
1576
  force: args.force,
1533
1577
  dry: args.dry
1534
1578
  });
1535
- for (const file of result.created) logger.success(`${args.dry ? "[dry-run] Would create" : "Created"} ${file}`);
1579
+ for (const file of result.created) logger.info(`${args.dry ? "[dry-run] Would create" : "Created"} ${file}`);
1536
1580
  for (const file of result.skipped) logger.warn(`Skipped ${file} (already exists, use --force to overwrite)`);
1537
1581
  for (const err of result.errors) logger.error(err);
1538
1582
  }
@@ -1567,7 +1611,7 @@ const pageCommand = {
1567
1611
  force: args.force,
1568
1612
  dry: args.dry
1569
1613
  });
1570
- for (const file of result.created) logger.success(`${args.dry ? "[dry-run] Would create" : "Created"} ${file}`);
1614
+ for (const file of result.created) logger.info(`${args.dry ? "[dry-run] Would create" : "Created"} ${file}`);
1571
1615
  for (const file of result.skipped) logger.warn(`Skipped ${file} (already exists, use --force to overwrite)`);
1572
1616
  for (const err of result.errors) logger.error(err);
1573
1617
  }
@@ -1612,7 +1656,7 @@ const pageCommand = {
1612
1656
  force: args.force,
1613
1657
  dry: args.dry
1614
1658
  });
1615
- for (const file of result.deleted) logger.success(`${args.dry ? "[dry-run] Would delete" : args.force ? "Deleted" : "Deleted (backup created)"} ${file}`);
1659
+ for (const file of result.deleted) logger.info(`${args.dry ? "[dry-run] Would delete" : args.force ? "Deleted" : "Deleted (backup created)"} ${file}`);
1616
1660
  for (const err of result.errors) logger.error(err);
1617
1661
  }
1618
1662
  },
@@ -1649,7 +1693,7 @@ const pageCommand = {
1649
1693
  path: args.path,
1650
1694
  dry: args.dry
1651
1695
  });
1652
- for (const file of result.restored) logger.success(`${args.dry ? "[dry-run] Backup exists for" : "Recovered"} ${file}`);
1696
+ for (const file of result.restored) logger.info(`${args.dry ? "[dry-run] Backup exists for" : "Recovered"} ${file}`);
1653
1697
  for (const err of result.errors) logger.error(err);
1654
1698
  }
1655
1699
  },
@@ -1671,7 +1715,7 @@ const pageCommand = {
1671
1715
  return;
1672
1716
  }
1673
1717
  logger.info(`Found ${files.length} ${type}(s):`);
1674
- for (const file of files) logger.log(` ${file}`);
1718
+ for (const file of files) logger.info(` ${file}`);
1675
1719
  }
1676
1720
  }
1677
1721
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ubean/cli",
3
- "version": "0.1.13",
3
+ "version": "0.2.0",
4
4
  "description": "CLI for ubean (ubean-next binary: dev, build, prepare, init, preview, page, env, config, devtools, api/layout/middleware/cron/plugin scaffolds)",
5
5
  "bin": {
6
6
  "ubean-next": "./bin/ubean-next.mjs"
@@ -25,27 +25,27 @@
25
25
  },
26
26
  "dependencies": {
27
27
  "citty": "^0.2.2",
28
- "consola": "^3.4.2",
29
28
  "kolorist": "^1.8.0",
30
29
  "pathe": "^2.0.3",
31
- "@ubean/app": "0.1.13",
32
- "@ubean/build": "0.1.13",
33
- "@ubean/codegen": "0.1.13",
34
- "@ubean/dev-server": "0.1.13",
35
- "@ubean/config": "0.1.13",
36
- "@ubean/modules": "0.1.13",
37
- "@ubean/prerender": "0.1.13",
38
- "@ubean/preset": "0.1.13",
39
- "@ubean/routing": "0.1.13",
40
- "@ubean/utils": "0.1.13"
30
+ "@ubean/app": "0.2.0",
31
+ "@ubean/build": "0.2.0",
32
+ "@ubean/codegen": "0.2.0",
33
+ "@ubean/config": "0.2.0",
34
+ "@ubean/modules": "0.2.0",
35
+ "@ubean/logger": "0.2.0",
36
+ "@ubean/prerender": "0.2.0",
37
+ "@ubean/preset": "0.2.0",
38
+ "@ubean/dev-server": "0.2.0",
39
+ "@ubean/scan": "0.2.0",
40
+ "@ubean/shared": "0.2.0"
41
41
  },
42
42
  "devDependencies": {
43
- "@types/node": "^26.1.2",
43
+ "@types/node": "^26.2.0",
44
44
  "typescript": "7.0.2",
45
- "vite-plus": "0.2.6"
45
+ "vite-plus": "0.2.9"
46
46
  },
47
47
  "peerDependencies": {
48
- "@ubean/devtools": "0.1.13"
48
+ "@ubean/devtools": "0.2.0"
49
49
  },
50
50
  "peerDependenciesMeta": {
51
51
  "@ubean/devtools": {