@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 +5 -5
- package/dist/index.js +1 -1
- package/dist/{page-C2Bde9EG.js → page-DsRdPxwe.js} +36 -26
- package/package.json +15 -18
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-
|
|
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 "
|
|
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
|
|
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-
|
|
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,
|
|
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
|
|
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
|
|
1385
|
-
case "api": return join
|
|
1386
|
-
case "layout": return join
|
|
1387
|
-
case "middleware": return join
|
|
1388
|
-
case "cron": return join
|
|
1389
|
-
case "plugin": return join
|
|
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
|
|
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
|
|
1408
|
+
if (normalizedPath.endsWith(".vue")) return join(baseDir, normalizedPath);
|
|
1403
1409
|
const ext = ".vue";
|
|
1404
|
-
if (normalizedPath.endsWith("/") || normalizedPath === "") return join
|
|
1405
|
-
return join
|
|
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
|
|
1408
|
-
if (normalizedPath.endsWith(".ts")) return join
|
|
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
|
|
1411
|
-
return join
|
|
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
|
|
1419
|
+
if (normalizedPath.endsWith(".ts") || normalizedPath.endsWith(".js")) return join(baseDir, normalizedPath);
|
|
1414
1420
|
const ext = ".ts";
|
|
1415
|
-
if (normalizedPath.endsWith("/") || normalizedPath === "") return join
|
|
1416
|
-
if ((type === "api" || type === "middleware" || type === "cron" || type === "plugin") && !normalizedPath.includes(".")) return join
|
|
1417
|
-
return join
|
|
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
|
|
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
|
|
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
|
|
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
|
|
1576
|
-
|
|
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.
|
|
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/
|
|
28
|
-
"@ubean/
|
|
29
|
-
"@ubean/
|
|
30
|
-
"@ubean/
|
|
31
|
-
"@ubean/
|
|
32
|
-
"@ubean/
|
|
33
|
-
"@ubean/
|
|
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.
|
|
42
|
-
"
|
|
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.
|
|
46
|
-
"vite-plus": "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.
|
|
50
|
-
"@ubean/devtools": "0.6.
|
|
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.
|
|
49
|
+
"vite": "npm:@voidzero-dev/vite-plus-core@1.1.0"
|
|
53
50
|
},
|
|
54
51
|
"peerDependenciesMeta": {
|
|
55
52
|
"@ubean/content": {
|