@ubean/cli 0.6.0-beta.5 → 0.6.1-beta.2

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,4 +1,4 @@
1
- import { A as readViteManifest, D as compareBundleBaseline, E as createFsOps, M as writeBundleBaseline, O as findClientManifest, S as renderTemplate, a as scaffold, c as scaffoldStarterTemplate, i as recoverScaffold, j as summarizeBundle, k as formatKilobytes, l as scaffoldUnifyTemplate, n as listScaffoldableFiles, o as scaffoldBlogTemplate, r as pageCommand, s as scaffoldMinimalTemplate, t as deleteScaffold } from "./page-C2Bde9EG.js";
1
+ import { A as readViteManifest, D as compareBundleBaseline, E as createFsOps, M as writeBundleBaseline, O as findClientManifest, S as renderTemplate, a as scaffold, c as scaffoldStarterTemplate, i as recoverScaffold, j as summarizeBundle, k as formatKilobytes, l as scaffoldUnifyTemplate, n as listScaffoldableFiles, o as scaffoldBlogTemplate, r as pageCommand, s as scaffoldMinimalTemplate, t as deleteScaffold } from "./page-DsRdPxwe.js";
2
2
  import { existsSync, mkdirSync, readFileSync } from "node:fs";
3
3
  import { basename, join, relative, resolve } from "pathe";
4
4
  import { getLogger, setDebugLogging, setMinLevel } from "@ubean/shared/logger";
@@ -10,13 +10,13 @@ import { buildWithEnvironments } from "@ubean/build/production";
10
10
  import { NODE_REQUIREMENTS, diagnoseCapabilities, registerBuiltinPresets, resolvePresetByName } from "@ubean/preset";
11
11
  import { scanProject } from "@ubean/scan";
12
12
  import { bold, cyan, dim, green } from "kolorist";
13
- import { createServer } from "node:http";
13
+ import { createServer, preview } from "vite";
14
14
  import { DEVTOOLS_PASS_THROUGH_PREFIXES, createCloudflarePreviewRunner, createVirtualRegistry, getDevApp, onDevScan, peekDevScanCoordinator, previewMimeType, resolvePreviewFile, ubeanDevRequestPlugin, ubeanPlugin, ubeanPreviewPlugin } from "@ubean/build/vite";
15
- import { createServer as createServer$1, preview } from "vite";
16
15
  import { ubeanVite } from "@ubean/build/vue";
17
16
  import { ubeanIslandsPlugin } from "@ubean/islands/vite";
18
17
  import { findAvailablePort, findUserViteConfig, getLanAddresses, isLoopbackHost, isWildcardHost } from "@ubean/shared/node";
19
18
  import { execSync } from "node:child_process";
19
+ import { createServer as createServer$1 } from "node:http";
20
20
  //#region src/config.ts
21
21
  const logger$11 = getLogger("cli");
22
22
  const CONFIG_TEMPLATE = `import { defineConfig } from 'ubean';
@@ -523,7 +523,7 @@ async function createDevViteServer(options) {
523
523
  config,
524
524
  builtinPlugins
525
525
  });
526
- viteServer = await createServer$1({
526
+ viteServer = await createServer({
527
527
  root: cwd,
528
528
  configFile: userViteConfig ?? false,
529
529
  customLogger: createGatedViteLogger({ lifecycle: config.logging.lifecycle }),
@@ -1549,7 +1549,7 @@ const prepareCommand = {
1549
1549
  */
1550
1550
  function startStaticServer(opts) {
1551
1551
  const { root, port, host, mode } = opts;
1552
- return createServer(async (req, res) => {
1552
+ return createServer$1(async (req, res) => {
1553
1553
  try {
1554
1554
  const url = new URL(req.url || "/", `http://${host}`);
1555
1555
  const pathname = decodeURIComponent(url.pathname);
package/dist/index.js CHANGED
@@ -1,3 +1,3 @@
1
1
  import { n as getScaffoldManifest, t as SCAFFOLD_CONTRACT_VERSION } from "./scaffold-manifest-TrH6OCX8.js";
2
- import { A as readViteManifest, C as toCamelCase, D as compareBundleBaseline, E as createFsOps, M as writeBundleBaseline, O as findClientManifest, 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, j as summarizeBundle, 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-C2Bde9EG.js";
2
+ import { A as readViteManifest, C as toCamelCase, D as compareBundleBaseline, E as createFsOps, M as writeBundleBaseline, O as findClientManifest, 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, j as summarizeBundle, 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-DsRdPxwe.js";
3
3
  export { API_TEMPLATE, CRON_TEMPLATE, LAYOUT_TEMPLATE, MIDDLEWARE_TEMPLATE, PAGE_TEMPLATE, PLUGIN_TEMPLATE, SCAFFOLD_CONTRACT_VERSION, compareBundleBaseline, createFsOps, deleteScaffold, findClientManifest, getScaffoldManifest, listScaffoldableFiles, readViteManifest, recoverScaffold, renderApiTemplate, renderCronTemplate, renderLayoutTemplate, renderMiddlewareTemplate, renderPageTemplate, renderPluginTemplate, renderTemplate, scaffold, summarizeBundle, toCamelCase, toKebabCase, toPascalCase, writeBundleBaseline };
@@ -1,7 +1,7 @@
1
1
  import { existsSync, mkdirSync, promises, readFileSync, statSync, writeFileSync } from "node:fs";
2
2
  import { brotliCompressSync, gzipSync } from "node:zlib";
3
- import { dirname, join, resolve } from "pathe";
4
- import { dirname as dirname$1, extname, join as join$1, relative as relative$1, resolve as resolve$1 } from "node:path";
3
+ import { dirname, extname, isAbsolute, join, normalize, relative, resolve } from "pathe";
4
+ import { dirname as dirname$1, join as join$1, relative as relative$1, resolve as resolve$1 } from "node:path";
5
5
  import { getLogger } from "@ubean/shared/logger";
6
6
  //#region src/analyze-lib.ts
7
7
  const CHUNK_VIOLATION_DISPLAY_LIMIT = 5;
@@ -399,6 +399,7 @@ const PACKAGE_JSON = `{
399
399
  "@soybeanjs/cli": "^1.8.1",
400
400
  "@soybeanjs/eslint-config-vue": "^0.1.1",
401
401
  "@soybeanjs/oxc-config": "^0.2.3",
402
+ "@valibot/to-json-schema": "^1.8.0",
402
403
  "eslint": "^10.8.0",
403
404
  "typescript": "^6.0.3",
404
405
  "vite-plus": "^0.2.6",
@@ -434,6 +435,11 @@ const TSCONFIG = `{
434
435
  "forceConsistentCasingInFileNames": true,
435
436
  "isolatedModules": true
436
437
  },
438
+ // .ubean/**/* 必须显式纳入:编译器默认的 include 是 **/*,但**排除**点开头目录,
439
+ // 于是 typed-router.d.ts / openapi.d.ts / auto-imports.d.ts 全部对 typecheck 不可见
440
+ // (实测:漏掉这一行时 import type { paths } from '../../.ubean/openapi' 报 TS2307,
441
+ // 且 RouteRecordInfo 的模块增强也不生效)。
442
+ "include": ["src/**/*", ".ubean/**/*"],
437
443
  "exclude": ["node_modules", "dist"]
438
444
  }
439
445
  `;
@@ -1375,46 +1381,46 @@ async function scaffoldBlogTemplate(fs, options) {
1375
1381
  //#region src/page.ts
1376
1382
  const logger = getLogger("cli");
1377
1383
  function getSrcDir(cwd) {
1378
- return join$1(cwd, "src");
1384
+ return join(cwd, "src");
1379
1385
  }
1380
1386
  function getDirForType(cwd, type) {
1381
1387
  const srcDir = getSrcDir(cwd);
1382
1388
  switch (type) {
1383
1389
  case "page":
1384
- case "reuse": return join$1(srcDir, "pages");
1385
- case "api": return join$1(srcDir, "routes");
1386
- case "layout": return join$1(srcDir, "layouts");
1387
- case "middleware": return join$1(srcDir, "middleware");
1388
- case "cron": return join$1(srcDir, "server", "crons");
1389
- case "plugin": return join$1(srcDir, "plugins");
1390
+ case "reuse": return join(srcDir, "pages");
1391
+ case "api": return join(srcDir, "routes");
1392
+ case "layout": return join(srcDir, "layouts");
1393
+ case "middleware": return join(srcDir, "middleware");
1394
+ case "cron": return join(srcDir, "server", "crons");
1395
+ case "plugin": return join(srcDir, "plugins");
1390
1396
  default: return srcDir;
1391
1397
  }
1392
1398
  }
1393
1399
  /** Resolve a baseDir that may be relative or absolute into an absolute path. */
1394
1400
  function resolveBaseDir(cwd, baseDir) {
1395
- return baseDir.startsWith("/") ? baseDir : join$1(cwd, baseDir);
1401
+ return isAbsolute(baseDir) ? baseDir : join(cwd, baseDir);
1396
1402
  }
1397
1403
  function resolveTargetPath(baseDir, path, type) {
1398
1404
  let normalizedPath = path.startsWith("/") ? path.slice(1) : path;
1399
1405
  if (normalizedPath === "" || normalizedPath === "/") normalizedPath = type === "page" || type === "reuse" ? "index" : "index";
1400
1406
  if (type === "page" || type === "layout" || type === "reuse") {
1401
1407
  if (type === "page" || type === "layout") {
1402
- if (normalizedPath.endsWith(".vue")) return join$1(baseDir, normalizedPath);
1408
+ if (normalizedPath.endsWith(".vue")) return join(baseDir, normalizedPath);
1403
1409
  const ext = ".vue";
1404
- if (normalizedPath.endsWith("/") || normalizedPath === "") return join$1(baseDir, normalizedPath, `index${ext}`);
1405
- return join$1(baseDir, `${normalizedPath}${ext}`);
1410
+ if (normalizedPath.endsWith("/") || normalizedPath === "") return join(baseDir, normalizedPath, `index${ext}`);
1411
+ return join(baseDir, `${normalizedPath}${ext}`);
1406
1412
  }
1407
- if (normalizedPath.endsWith(".reuse.ts")) return join$1(baseDir, normalizedPath);
1408
- if (normalizedPath.endsWith(".ts")) return join$1(baseDir, normalizedPath.replace(/\.ts$/, ".reuse.ts"));
1413
+ if (normalizedPath.endsWith(".reuse.ts")) return join(baseDir, normalizedPath);
1414
+ if (normalizedPath.endsWith(".ts")) return join(baseDir, normalizedPath.replace(/\.ts$/, ".reuse.ts"));
1409
1415
  const ext = ".reuse.ts";
1410
- if (normalizedPath.endsWith("/") || normalizedPath === "") return join$1(baseDir, normalizedPath, `index${ext}`);
1411
- return join$1(baseDir, `${normalizedPath}${ext}`);
1416
+ if (normalizedPath.endsWith("/") || normalizedPath === "") return join(baseDir, normalizedPath, `index${ext}`);
1417
+ return join(baseDir, `${normalizedPath}${ext}`);
1412
1418
  }
1413
- if (normalizedPath.endsWith(".ts") || normalizedPath.endsWith(".js")) return join$1(baseDir, normalizedPath);
1419
+ if (normalizedPath.endsWith(".ts") || normalizedPath.endsWith(".js")) return join(baseDir, normalizedPath);
1414
1420
  const ext = ".ts";
1415
- if (normalizedPath.endsWith("/") || normalizedPath === "") return join$1(baseDir, normalizedPath, `index${ext}`);
1416
- if ((type === "api" || type === "middleware" || type === "cron" || type === "plugin") && !normalizedPath.includes(".")) return join$1(baseDir, `${normalizedPath}${ext}`);
1417
- return join$1(baseDir, normalizedPath);
1421
+ if (normalizedPath.endsWith("/") || normalizedPath === "") return join(baseDir, normalizedPath, `index${ext}`);
1422
+ if ((type === "api" || type === "middleware" || type === "cron" || type === "plugin") && !normalizedPath.includes(".")) return join(baseDir, `${normalizedPath}${ext}`);
1423
+ return join(baseDir, normalizedPath);
1418
1424
  }
1419
1425
  function sanitizeNameSegment(seg) {
1420
1426
  return seg.replace(/^\[\.\.\.(.+)\]$/, "All$1").replace(/^\[\[(.+)\]\]$/, "$1Optional").replace(/^\[(.+)\]$/, "$1").replace(/[^a-zA-Z0-9$_]/g, "");
@@ -1490,7 +1496,8 @@ async function scaffold(options) {
1490
1496
  errors: []
1491
1497
  };
1492
1498
  try {
1493
- const relativePath = resolveTargetPath(options.baseDir ? resolveBaseDir(cwd, options.baseDir) : getDirForType(cwd, options.type), options.path, options.type).replace(`${cwd}/`, "");
1499
+ const targetPath = resolveTargetPath(options.baseDir ? resolveBaseDir(cwd, options.baseDir) : getDirForType(cwd, options.type), options.path, options.type);
1500
+ const relativePath = relative(cwd, targetPath);
1494
1501
  if (await fs.exists(relativePath)) {
1495
1502
  if (!options.force) {
1496
1503
  result.skipped.push(relativePath);
@@ -1522,7 +1529,8 @@ async function deleteScaffold(options) {
1522
1529
  errors: []
1523
1530
  };
1524
1531
  try {
1525
- const relativePath = resolveTargetPath(options.baseDir ? resolveBaseDir(cwd, options.baseDir) : getDirForType(cwd, options.type), options.path, options.type).replace(`${cwd}/`, "");
1532
+ const targetPath = resolveTargetPath(options.baseDir ? resolveBaseDir(cwd, options.baseDir) : getDirForType(cwd, options.type), options.path, options.type);
1533
+ const relativePath = relative(cwd, targetPath);
1526
1534
  if (!await fs.exists(relativePath)) {
1527
1535
  result.errors.push(`${relativePath} does not exist`);
1528
1536
  return result;
@@ -1554,7 +1562,8 @@ async function recoverScaffold(options) {
1554
1562
  errors: []
1555
1563
  };
1556
1564
  try {
1557
- const relativePath = resolveTargetPath(options.baseDir ? resolveBaseDir(cwd, options.baseDir) : getDirForType(cwd, options.type), options.path, options.type).replace(`${cwd}/`, "");
1565
+ const targetPath = resolveTargetPath(options.baseDir ? resolveBaseDir(cwd, options.baseDir) : getDirForType(cwd, options.type), options.path, options.type);
1566
+ const relativePath = relative(cwd, targetPath);
1558
1567
  if (options.dry) {
1559
1568
  const backupPath = `${relativePath}.bak`;
1560
1569
  if (await fs.exists(backupPath)) result.restored.push(relativePath);
@@ -1572,8 +1581,9 @@ async function recoverScaffold(options) {
1572
1581
  }
1573
1582
  async function listScaffoldableFiles(cwd, type, baseDir) {
1574
1583
  const fs = createFsOps(cwd);
1575
- const relativeBase = (baseDir ? resolveBaseDir(cwd, baseDir) : getDirForType(cwd, type)).replace(`${cwd}/`, "");
1576
- return (await fs.listFiles(relativeBase)).map((f) => f.replace(`${cwd}/`, ""));
1584
+ const absBaseDir = baseDir ? resolveBaseDir(cwd, baseDir) : getDirForType(cwd, type);
1585
+ const relativeBase = relative(cwd, absBaseDir);
1586
+ return (await fs.listFiles(relativeBase)).map((f) => normalize(f));
1577
1587
  }
1578
1588
  const scaffoldTypes = [
1579
1589
  "page",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ubean/cli",
3
- "version": "0.6.0-beta.5",
3
+ "version": "0.6.1-beta.2",
4
4
  "description": "CLI for ubean (ubean-next binary: dev, build, prepare, init, preview, page, env, config, devtools, api/layout/middleware/cron/plugin scaffolds) plus the Vite dev server runner",
5
5
  "bin": {
6
6
  "ubean-next": "./bin/ubean-next.mjs"
@@ -24,32 +24,29 @@
24
24
  }
25
25
  },
26
26
  "dependencies": {
27
- "@ubean/app": "0.6.0-beta.5",
28
- "@ubean/build": "0.6.0-beta.5",
29
- "@ubean/client": "0.6.0-beta.5",
30
- "@ubean/config": "0.6.0-beta.5",
31
- "@ubean/i18n": "0.6.0-beta.5",
32
- "@ubean/islands": "0.6.0-beta.5",
33
- "@ubean/preset": "0.6.0-beta.5",
34
- "@ubean/scan": "0.6.0-beta.5",
35
- "@ubean/shared": "0.6.0-beta.5",
27
+ "@ubean/build": "0.6.1-beta.2",
28
+ "@ubean/config": "0.6.1-beta.2",
29
+ "@ubean/i18n": "0.6.1-beta.2",
30
+ "@ubean/islands": "0.6.1-beta.2",
31
+ "@ubean/preset": "0.6.1-beta.2",
32
+ "@ubean/scan": "0.6.1-beta.2",
33
+ "@ubean/shared": "0.6.1-beta.2",
36
34
  "citty": "^0.2.2",
37
35
  "kolorist": "^1.8.0",
38
36
  "pathe": "^2.0.3"
39
37
  },
40
38
  "devDependencies": {
41
- "@types/node": "^26.6.3",
42
- "@vitejs/plugin-vue": "^6.0.9",
43
- "env-runner": "0.3.0",
39
+ "@types/node": "^26.6.4",
40
+ "env-runner": "0.3.3",
44
41
  "typescript": "npm:typescript-native-bridge@latest",
45
- "vite": "npm:@voidzero-dev/vite-plus-core@1.0.0-rc.1",
46
- "vite-plus": "1.0.0-rc.1"
42
+ "vite": "npm:@voidzero-dev/vite-plus-core@1.1.0",
43
+ "vite-plus": "1.1.0"
47
44
  },
48
45
  "peerDependencies": {
49
- "@ubean/content": "0.6.0-beta.5",
50
- "@ubean/devtools": "0.6.0-beta.5",
46
+ "@ubean/content": "0.6.1-beta.2",
47
+ "@ubean/devtools": "0.6.1-beta.2",
51
48
  "@vitejs/plugin-vue": "^6.0.8",
52
- "vite": "npm:@voidzero-dev/vite-plus-core@1.0.0-rc.1"
49
+ "vite": "npm:@voidzero-dev/vite-plus-core@1.1.0"
53
50
  },
54
51
  "peerDependenciesMeta": {
55
52
  "@ubean/content": {