@ubean/build 0.6.4 → 0.6.5

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.
@@ -21,7 +21,12 @@ export interface BuildOptions {
21
21
  config: ResolvedConfig;
22
22
  preset: Preset;
23
23
  scanResult: ScanResult;
24
+ /**
25
+ * 缺省时回落到 `config.build.minify`,再回落到 `true`。
26
+ * CLI `--minify` 优先级最高,由 `packages/cli/src/build.ts` 传入。
27
+ */
24
28
  minify?: boolean;
29
+ /** 缺省时回落到 `config.build.sourcemap`,再回落到 `false`。 */
25
30
  sourcemap?: boolean;
26
31
  /** Inlined content collections for production SSR (`queryCollection`). */
27
32
  contentSnapshot?: Record<string, unknown[]>;
@@ -1 +1 @@
1
- export { T as buildWithEnvironments, v as createIslandsSsrStubPlugin, y as generateCloudflareWorkerEntry, b as generateNodeServerEntry, x as generateStandardHandlerEntry, S as generateVirtualModulesToDisk, C as getPresetBuildConfig, w as serializePagesForEntry } from "./vite-DR0qiIma.js";
1
+ export { T as buildWithEnvironments, v as createIslandsSsrStubPlugin, y as generateCloudflareWorkerEntry, b as generateNodeServerEntry, x as generateStandardHandlerEntry, S as generateVirtualModulesToDisk, C as getPresetBuildConfig, w as serializePagesForEntry } from "./vite-CmtXmVIm.js";
@@ -1,10 +1,10 @@
1
1
  import { a as ssrSingletonProdOptimizeExclude, m as createVirtualRegistry, o as ssrSingletonProdSsr, y as __exportAll } from "./ssr-singleton-Bbds29jS.js";
2
2
  import { a as createRoutingVirtualModule, i as createPagesVirtualModule, n as createLocalesVirtualModule, r as createMetaVirtualModule, s as transformMacros, t as createAppVirtualModule } from "./virtual-modules-BK0L1Op-.js";
3
3
  import { a as generateOpenApiTypes, i as generateTypes } from "./codegen-BL0s5Pyq.js";
4
- import { _ as toWebRequest, a as createVueAppEntryVirtualModule, b as getDevScanCoordinator, g as sendWebResponse, i as createServerEntryVirtualModule, n as ubeanVite, o as createVuePagesVirtualModule, r as createClientEntryVirtualModule, u as ensureDevApp } from "./vue-MyIMqUw0.js";
4
+ import { _ as toWebRequest, a as createVueAppEntryVirtualModule, b as getDevScanCoordinator, g as sendWebResponse, i as createServerEntryVirtualModule, n as ubeanVite, o as createVuePagesVirtualModule, r as createClientEntryVirtualModule, u as ensureDevApp } from "./vue-15_4jzH7.js";
5
5
  import { createStaticSsgRenderer } from "./static-render.js";
6
6
  import { prerender, resolvePrerenderStaticDir } from "./prerender.js";
7
- import { dirname, join, relative, resolve } from "pathe";
7
+ import { dirname, isAbsolute, join, relative, resolve } from "pathe";
8
8
  import * as nodeFs from "node:fs";
9
9
  import { existsSync, readFileSync, readdirSync, realpathSync, statSync } from "node:fs";
10
10
  import { checkProjectDependenciesOnce, loadUbeanConfig, resolveModules, resolvePrerenderConfig, tryGetConfig } from "@ubean/config";
@@ -1218,7 +1218,7 @@ function readClientManifest(publicDir) {
1218
1218
  }
1219
1219
  /** 由 options 派生上下文(不做任何 IO)。 */
1220
1220
  function createBuildContext(options) {
1221
- const { cwd, config, preset, scanResult, minify = true, sourcemap = false, contentSnapshot } = options;
1221
+ const { cwd, config, preset, scanResult, minify = config.build.minify, sourcemap = config.build.sourcemap, contentSnapshot } = options;
1222
1222
  const mode = config.mode;
1223
1223
  return {
1224
1224
  cwd,
@@ -1301,7 +1301,7 @@ async function runEnvBuilds(builder, prepared) {
1301
1301
  await builder.build(builder.environments.ubean);
1302
1302
  }
1303
1303
  if (hasPages) {
1304
- const publicDir = join(cwd, "public");
1304
+ const publicDir = isAbsolute(prepared.config.dir.public) ? prepared.config.dir.public : join(cwd, prepared.config.dir.public);
1305
1305
  if (existsSync(publicDir)) {
1306
1306
  logger$2.info("Copying public assets...");
1307
1307
  await cp(publicDir, outDirs.public, { recursive: true });
@@ -2490,8 +2490,8 @@ async function buildEnvironmentsForConfig(config) {
2490
2490
  return createBuildEnvironments({
2491
2491
  outDirs,
2492
2492
  clientInput: existsSync(clientEntryPath) ? clientEntryPath : join(outDirs.virtual, "client-entry.mjs"),
2493
- minify: true,
2494
- sourcemap: false,
2493
+ minify: config.build.minify,
2494
+ sourcemap: config.build.sourcemap,
2495
2495
  presetBuildConfig: getPresetBuildConfig(resolvePresetByName(config.build.preset)),
2496
2496
  ssrNoExternal: ssrSingletonProdSsr().noExternal
2497
2497
  });
@@ -2700,6 +2700,7 @@ function ubeanPlugin(options) {
2700
2700
  });
2701
2701
  const announceMissingOpenApiTypes = async () => {
2702
2702
  if (!ubeanConfig) return;
2703
+ if (ubeanConfig.mode === "ssg" || ubeanConfig.mode === "spa") return;
2703
2704
  const filePath = join(ubeanConfig.rootDir, ".ubean", "openapi.d.ts");
2704
2705
  try {
2705
2706
  const app = await ensureDevApp(server);
package/dist/vite.js CHANGED
@@ -1,4 +1,4 @@
1
1
  import { m as createVirtualRegistry } from "./ssr-singleton-Bbds29jS.js";
2
- import { A as toVueRouterPagePath, C as bootstrapDevApp, D as resolveLocaleVueParam, E as resolveDevSecurityHeaders, O as enhanceDevApp, S as peekDevScanCoordinator, T as createDevAppReady, _ as toWebRequest, b as getDevScanCoordinator, c as collectDevCssLinks, d as getDevApp, f as injectStylesheetLinks, g as sendWebResponse, h as ubeanDevRequestPlugin, k as buildDevSsrRoutes, l as createUbeanRequestHandlers, m as isViteResourceRequest, p as isFrameworkHtmlPage, s as DEVTOOLS_PASS_THROUGH_PREFIXES, u as ensureDevApp, v as DEV_SCAN_DIRS, w as createDevApp, x as onDevScan, y as createDevScanCoordinator } from "./vue-MyIMqUw0.js";
3
- import { D as createCloudflarePreviewRunner, E as MINIFLARE_INSTALL_HINT, O as defaultLoadMiniflare, _ as ubeanPreviewPlugin, a as createEnvRunnerTransport, c as getDevWorkerEntrySource, d as attachPreviewMiddleware, f as createPreviewMiddleware, g as sendPreviewStatus, h as sendPreviewFile, i as bridgeEnvRunnerInvokes, k as readCompatibilityDate, l as invalidateDevWorkerModules, m as resolvePreviewFile, n as UBEAN_DEV_ENV_NAME, o as createUbeanDevEnvironmentFactory, p as previewMimeType, r as UbeanDevEnvironment, s as DEV_WORKER_FILE, t as ubeanPlugin, u as writeDevWorkerEntry } from "./vite-DR0qiIma.js";
2
+ import { A as toVueRouterPagePath, C as bootstrapDevApp, D as resolveLocaleVueParam, E as resolveDevSecurityHeaders, O as enhanceDevApp, S as peekDevScanCoordinator, T as createDevAppReady, _ as toWebRequest, b as getDevScanCoordinator, c as collectDevCssLinks, d as getDevApp, f as injectStylesheetLinks, g as sendWebResponse, h as ubeanDevRequestPlugin, k as buildDevSsrRoutes, l as createUbeanRequestHandlers, m as isViteResourceRequest, p as isFrameworkHtmlPage, s as DEVTOOLS_PASS_THROUGH_PREFIXES, u as ensureDevApp, v as DEV_SCAN_DIRS, w as createDevApp, x as onDevScan, y as createDevScanCoordinator } from "./vue-15_4jzH7.js";
3
+ import { D as createCloudflarePreviewRunner, E as MINIFLARE_INSTALL_HINT, O as defaultLoadMiniflare, _ as ubeanPreviewPlugin, a as createEnvRunnerTransport, c as getDevWorkerEntrySource, d as attachPreviewMiddleware, f as createPreviewMiddleware, g as sendPreviewStatus, h as sendPreviewFile, i as bridgeEnvRunnerInvokes, k as readCompatibilityDate, l as invalidateDevWorkerModules, m as resolvePreviewFile, n as UBEAN_DEV_ENV_NAME, o as createUbeanDevEnvironmentFactory, p as previewMimeType, r as UbeanDevEnvironment, s as DEV_WORKER_FILE, t as ubeanPlugin, u as writeDevWorkerEntry } from "./vite-CmtXmVIm.js";
4
4
  export { DEVTOOLS_PASS_THROUGH_PREFIXES, DEV_SCAN_DIRS, DEV_WORKER_FILE, MINIFLARE_INSTALL_HINT, UBEAN_DEV_ENV_NAME, UbeanDevEnvironment, attachPreviewMiddleware, bootstrapDevApp, bridgeEnvRunnerInvokes, buildDevSsrRoutes, collectDevCssLinks, createCloudflarePreviewRunner, createDevApp, createDevAppReady, createDevScanCoordinator, createEnvRunnerTransport, createPreviewMiddleware, createUbeanDevEnvironmentFactory, createUbeanRequestHandlers, createVirtualRegistry, defaultLoadMiniflare, enhanceDevApp, ensureDevApp, getDevApp, getDevScanCoordinator, getDevWorkerEntrySource, injectStylesheetLinks, invalidateDevWorkerModules, isFrameworkHtmlPage, isViteResourceRequest, onDevScan, peekDevScanCoordinator, previewMimeType, readCompatibilityDate, resolveDevSecurityHeaders, resolveLocaleVueParam, resolvePreviewFile, sendPreviewFile, sendPreviewStatus, sendWebResponse, toVueRouterPagePath, toWebRequest, ubeanDevRequestPlugin, ubeanPlugin, ubeanPreviewPlugin, writeDevWorkerEntry };
@@ -1009,6 +1009,22 @@ function renderErrorPage(error) {
1009
1009
  function createUbeanRequestHandlers(server, options) {
1010
1010
  const { skipHtmlTransform, onError } = options;
1011
1011
  const handler = options.handler ?? createLazyBootstrapHandler(server, options.bootstrap);
1012
+ /**
1013
+ * `vite.config.ts` 的 `server.headers` 合并到 ubean 自己渲染的响应上。
1014
+ *
1015
+ * Vite 只把它应用到自己的中间件(`servePublicMiddleware` / `transformMiddleware`),而 ubean 的
1016
+ * 页面走 `respond()` 直接输出 —— 不合并的话「给所有响应加 header」在应用页面上静默失效。
1017
+ * 通过 `res.setHeader` 写的值优先(框架/Hono 显式设置的不该被配置文件盖掉)。
1018
+ */
1019
+ function applyConfiguredHeaders(res) {
1020
+ const headers = server.config.server.headers;
1021
+ if (!headers) return;
1022
+ for (const [key, value] of Object.entries(headers)) {
1023
+ if (value === void 0) continue;
1024
+ if (res.hasHeader(key)) continue;
1025
+ res.setHeader(key, value);
1026
+ }
1027
+ }
1012
1028
  async function respond(req, res) {
1013
1029
  const url = req.url || "/";
1014
1030
  const webReq = await toWebRequest(req, "localhost", req.socket?.encrypted ? "https" : "http");
@@ -1025,9 +1041,11 @@ function createUbeanRequestHandlers(server, options) {
1025
1041
  webRes.headers.forEach((value, key) => {
1026
1042
  res.setHeader(key, value);
1027
1043
  });
1044
+ applyConfiguredHeaders(res);
1028
1045
  res.end(transformed);
1029
1046
  return;
1030
1047
  }
1048
+ applyConfiguredHeaders(res);
1031
1049
  await sendWebResponse(res, webRes);
1032
1050
  }
1033
1051
  /** 统一错误处理:SSR 栈映射回源码,响应头已发出时只能断开。 */
@@ -1050,8 +1068,27 @@ function createUbeanRequestHandlers(server, options) {
1050
1068
  const pathname = url.split("?")[0].split("#")[0];
1051
1069
  return passThrough.some((prefix) => pathname.startsWith(prefix));
1052
1070
  };
1071
+ /**
1072
+ * 命中 `vite.config.ts` 的 `server.proxy` 键?命中则让给 Vite。
1073
+ *
1074
+ * `proxyMiddleware` 在上游是 **`configureServer` 钩子之后**才 `use()` 的(本插件的 `pre` 走
1075
+ * 钩子体内),因此无扩展名的代理路径会被 `pre` 先吃掉 —— `isViteResourceRequest` 不认识
1076
+ * proxy 键,`/probe-proxy` 这种路径最终返回 ubean 的 404 而不是被代理。`/api/**` 这类路径
1077
+ * 明明写了 `server.proxy` 也一样,因为保留命名空间判据先命中。
1078
+ *
1079
+ * 前置让给 Vite 与 `routeRules.proxy` 不冲突:Vite 只代理配置里显式写了的键,没写就照旧归 ubean。
1080
+ */
1081
+ const proxyKeys = Object.keys(server.config.server.proxy ?? {});
1082
+ const isProxyPath = (url) => {
1083
+ if (proxyKeys.length === 0) return false;
1084
+ const pathname = url.split("?")[0].split("#")[0];
1085
+ return proxyKeys.some((key) => {
1086
+ const pattern = key.startsWith("^") ? new RegExp(key) : null;
1087
+ return pattern ? pattern.test(pathname) : pathname.startsWith(key);
1088
+ });
1089
+ };
1053
1090
  const pre = (req, res, next) => {
1054
- if (isPassThrough(req.url || "/") || isViteResourceRequest(req.url || "/", req.headers)) {
1091
+ if (isPassThrough(req.url || "/") || isProxyPath(req.url || "/") || isViteResourceRequest(req.url || "/", req.headers)) {
1055
1092
  next();
1056
1093
  return;
1057
1094
  }
package/dist/vue.js CHANGED
@@ -1 +1 @@
1
- export { t as VUE_PLUGIN_INCLUDE, r as createClientEntryVirtualModule, i as createServerEntryVirtualModule, a as createVueAppEntryVirtualModule, o as createVuePagesVirtualModule, n as default, n as ubeanVite } from "./vue-MyIMqUw0.js";
1
+ export { t as VUE_PLUGIN_INCLUDE, r as createClientEntryVirtualModule, i as createServerEntryVirtualModule, a as createVueAppEntryVirtualModule, o as createVuePagesVirtualModule, n as default, n as ubeanVite } from "./vue-15_4jzH7.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ubean/build",
3
- "version": "0.6.4",
3
+ "version": "0.6.5",
4
4
  "description": "Vite plugins, production build, SSG prerender, type codegen, and Server Actions plugin for ubean",
5
5
  "files": [
6
6
  "dist"
@@ -49,19 +49,19 @@
49
49
  },
50
50
  "dependencies": {
51
51
  "@intlify/unplugin-vue-i18n": "11.2.6",
52
- "@ubean/app": "0.6.4",
53
- "@ubean/client": "0.6.4",
54
- "@ubean/config": "0.6.4",
55
- "@ubean/i18n": "0.6.4",
56
- "@ubean/islands": "0.6.4",
57
- "@ubean/markdown": "0.6.4",
58
- "@ubean/pages": "0.6.4",
59
- "@ubean/preset": "0.6.4",
60
- "@ubean/routes": "0.6.4",
61
- "@ubean/scan": "0.6.4",
62
- "@ubean/server": "0.6.4",
63
- "@ubean/shared": "0.6.4",
64
- "@ubean/vue": "0.6.4",
52
+ "@ubean/app": "0.6.5",
53
+ "@ubean/client": "0.6.5",
54
+ "@ubean/config": "0.6.5",
55
+ "@ubean/i18n": "0.6.5",
56
+ "@ubean/islands": "0.6.5",
57
+ "@ubean/markdown": "0.6.5",
58
+ "@ubean/pages": "0.6.5",
59
+ "@ubean/preset": "0.6.5",
60
+ "@ubean/routes": "0.6.5",
61
+ "@ubean/scan": "0.6.5",
62
+ "@ubean/server": "0.6.5",
63
+ "@ubean/shared": "0.6.5",
64
+ "@ubean/vue": "0.6.5",
65
65
  "@vitejs/plugin-vue": "^6.0.10",
66
66
  "openapi-typescript": "^7.13.0",
67
67
  "pathe": "^2.0.3",
@@ -70,7 +70,7 @@
70
70
  "unplugin-auto-import": "21.1.0",
71
71
  "unplugin-vue-components": "^32.1.0",
72
72
  "unplugin-vue-markdown": "^32.1.1",
73
- "vue-i18n": "11.4.14"
73
+ "vue-i18n": "11.4.15"
74
74
  },
75
75
  "devDependencies": {
76
76
  "@types/node": "^26.6.5",