@ubean/build 0.7.5 → 0.7.6

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.
@@ -1 +1 @@
1
- export { d as BUILTIN_PRESETS, t as CODEGEN_CONTRACT_VERSION, n as CODEGEN_FILES, r as CODEGEN_NON_CONTRACT_FILES, p as HONO_OPENAPI_PRESET, m as UBEAN_CLIENT_PRESET, h as UBEAN_SERVER_PRESET, g as VUE_I18N_PRESET, _ as VUE_MACROS_PRESET, v as VUE_PRESET, y as VUE_ROUTER_PRESET, b as generateAutoImports, l as generateI18nTypes, x as generateImportsTransform, a as generateOpenApiTypes, o as generateOpenApiTypesFromServer, s as generatePageTypes, c as generateRouteTypes, i as generateTypes, S as getAutoImportPresets, C as getBuiltinComposables, w as getUbeanAutoImportConfig, T as getUbeanComponentsConfig, u as messagesToTsType, E as resolveAutoImportsConfig, D as resolveComponentsConfig, O as toArray } from "../codegen-D9q6Yu0z.js";
1
+ export { d as BUILTIN_PRESETS, t as CODEGEN_CONTRACT_VERSION, n as CODEGEN_FILES, r as CODEGEN_NON_CONTRACT_FILES, p as HONO_OPENAPI_PRESET, m as UBEAN_CLIENT_PRESET, h as UBEAN_SERVER_PRESET, g as VUE_I18N_PRESET, _ as VUE_MACROS_PRESET, v as VUE_PRESET, y as VUE_ROUTER_PRESET, b as generateAutoImports, l as generateI18nTypes, x as generateImportsTransform, a as generateOpenApiTypes, o as generateOpenApiTypesFromServer, s as generatePageTypes, c as generateRouteTypes, i as generateTypes, S as getAutoImportPresets, C as getBuiltinComposables, w as getUbeanAutoImportConfig, T as getUbeanComponentsConfig, u as messagesToTsType, E as resolveAutoImportsConfig, D as resolveComponentsConfig, O as toArray } from "../codegen-BfisMsKI.js";
@@ -1,6 +1,6 @@
1
1
  import { r as resolveEnvModules } from "./types-BvLO9ngd.js";
2
2
  import { isAbsolute, join, normalize, relative } from "pathe";
3
- import { mkdir, readFile, writeFile } from "node:fs/promises";
3
+ import { mkdir, readFile, rename, rm, writeFile } from "node:fs/promises";
4
4
  import { glob } from "tinyglobby";
5
5
  import { createUnimport, toTypeDeclarationFile } from "unimport";
6
6
  import openapiTS, { astToString } from "openapi-typescript";
@@ -961,7 +961,14 @@ async function generateOpenApiTypes(schema, options) {
961
961
  ""
962
962
  ].join("\n") + typesContent}\n`;
963
963
  const filePath = join(outDir, fileName);
964
- await writeFile(filePath, content, "utf-8");
964
+ const tmpPath = `${filePath}.tmp`;
965
+ await writeFile(tmpPath, content, "utf-8");
966
+ try {
967
+ await rename(tmpPath, filePath);
968
+ } catch (error) {
969
+ await rm(tmpPath, { force: true });
970
+ throw error;
971
+ }
965
972
  return filePath;
966
973
  }
967
974
  /**
@@ -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-DQ6nL0Kv.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-WHW8EgP7.js";
@@ -1,7 +1,7 @@
1
1
  import { a as ssrSingletonProdOptimizeExclude, g as createVirtualRegistry, o as ssrSingletonProdSsr, x as __exportAll } from "./ssr-singleton-CD6tSMIE.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-Cy1CnBzY.js";
3
- import { a as generateOpenApiTypes, i as generateTypes } from "./codegen-D9q6Yu0z.js";
4
- import { _ as sendWebResponse, a as createServerEntryVirtualModule, d as ensureDevApp, i as createClientEntryVirtualModule, n as ubeanVite, o as createVueAppEntryVirtualModule, r as composeHeadScripts, s as createVuePagesVirtualModule, v as toWebRequest, x as getDevScanCoordinator } from "./vue-BSQATqn6.js";
3
+ import { a as generateOpenApiTypes, i as generateTypes } from "./codegen-BfisMsKI.js";
4
+ import { _ as sendWebResponse, a as createServerEntryVirtualModule, d as ensureDevApp, i as createClientEntryVirtualModule, n as ubeanVite, o as createVueAppEntryVirtualModule, r as composeHeadScripts, s as createVuePagesVirtualModule, v as toWebRequest, x as getDevScanCoordinator } from "./vue-XlDiKaVE.js";
5
5
  import { createStaticSsgRenderer } from "./static-render.js";
6
6
  import { prerender, resolvePrerenderStaticDir } from "./prerender.js";
7
7
  import { resolvePageKind } from "@ubean/vue";
@@ -1544,7 +1544,7 @@ async function generateVirtualModulesToDisk(cwd, config, scanResult, virtualDir,
1544
1544
  })), cwd));
1545
1545
  registry.register(createMetaVirtualModule());
1546
1546
  registry.register(createVuePagesVirtualModule(scanResult.pages, scanResult.layouts, scanResult.notFoundPage, scanResult.loadingPage, scanResult.errorPage, localeVueParamFromI18n(config.i18n)));
1547
- registry.register(createVueAppEntryVirtualModule(scanResult.appEntry));
1547
+ registry.register(createVueAppEntryVirtualModule(scanResult.appEntry, { pinia: config.pinia }));
1548
1548
  registry.register(createClientEntryVirtualModule());
1549
1549
  }
1550
1550
  registry.register(createAppVirtualModule(scanResult.apiRoutes, scanResult.middlewares, hasPages ? scanResult.pages : [], viteSrcPrefix || "/", pagesExts));
package/dist/vite.js CHANGED
@@ -1,4 +1,4 @@
1
1
  import { g as createVirtualRegistry } from "./ssr-singleton-CD6tSMIE.js";
2
- import { A as buildDevSsrRoutes, C as peekDevScanCoordinator, D as resolveDevSecurityHeaders, E as createDevAppReady, O as resolveLocaleVueParam, S as onDevScan, T as createDevApp, _ as sendWebResponse, b as createDevScanCoordinator, c as DEVTOOLS_PASS_THROUGH_PREFIXES, d as ensureDevApp, f as getDevApp, g as ubeanDevRequestPlugin, h as isViteResourceRequest, j as toVueRouterPagePath, k as enhanceDevApp, l as collectDevCssLinks, m as isFrameworkHtmlPage, p as injectStylesheetLinks, u as createUbeanRequestHandlers, v as toWebRequest, w as bootstrapDevApp, x as getDevScanCoordinator, y as DEV_SCAN_DIRS } from "./vue-BSQATqn6.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-DQ6nL0Kv.js";
2
+ import { A as buildDevSsrRoutes, C as peekDevScanCoordinator, D as resolveDevSecurityHeaders, E as createDevAppReady, O as resolveLocaleVueParam, S as onDevScan, T as createDevApp, _ as sendWebResponse, b as createDevScanCoordinator, c as DEVTOOLS_PASS_THROUGH_PREFIXES, d as ensureDevApp, f as getDevApp, g as ubeanDevRequestPlugin, h as isViteResourceRequest, j as toVueRouterPagePath, k as enhanceDevApp, l as collectDevCssLinks, m as isFrameworkHtmlPage, p as injectStylesheetLinks, u as createUbeanRequestHandlers, v as toWebRequest, w as bootstrapDevApp, x as getDevScanCoordinator, y as DEV_SCAN_DIRS } from "./vue-XlDiKaVE.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-WHW8EgP7.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 };
@@ -1,5 +1,5 @@
1
1
  import { _ as defineVirtualModule, c as getComponentResolvers, g as createVirtualRegistry, i as ssrSingletonDevPolicy, l as getCssImports, u as getHeadScripts } from "./ssr-singleton-CD6tSMIE.js";
2
- import { D as resolveComponentsConfig, E as resolveAutoImportsConfig, O as toArray, S as getAutoImportPresets, f as COMPONENT_HALF_GLOBS } from "./codegen-D9q6Yu0z.js";
2
+ import { D as resolveComponentsConfig, E as resolveAutoImportsConfig, O as toArray, S as getAutoImportPresets, f as COMPONENT_HALF_GLOBS } from "./codegen-BfisMsKI.js";
3
3
  import { createRequire } from "node:module";
4
4
  import { generatePagesModuleSource } from "@ubean/vue/vite";
5
5
  import { NOT_FOUND_ROUTE_PATH, resolvePageKind, sortPagesForRouting } from "@ubean/vue";
@@ -1168,19 +1168,40 @@ const EMPTY_APP_ENTRY = {
1168
1168
  server: { exists: false },
1169
1169
  client: { exists: false }
1170
1170
  };
1171
- function createVueAppEntryVirtualModule(appEntry = EMPTY_APP_ENTRY) {
1171
+ /**
1172
+ * 配置里的 `pinia` 是否要求自动注册。
1173
+ *
1174
+ * `pinia: true` 与 `pinia: { ... }` 都算开启;只有显式 `false`、`enabled: false`
1175
+ * 或 `disabled: true` 才关掉(`disabled` 是内建模块的通用关闭键)。
1176
+ */
1177
+ function isPiniaAutoRegisterEnabled(pinia) {
1178
+ if (pinia === true) return true;
1179
+ if (!pinia || typeof pinia !== "object") return false;
1180
+ return pinia.enabled !== false && pinia.disabled !== true;
1181
+ }
1182
+ function createVueAppEntryVirtualModule(appEntry = EMPTY_APP_ENTRY, options = {}) {
1172
1183
  return defineVirtualModule("virtual:ubean-app", () => {
1173
1184
  const hasSharedApp = appEntry.shared.exists;
1174
1185
  const hasServerApp = appEntry.server.exists;
1175
1186
  const hasClientApp = appEntry.client.exists;
1176
1187
  const hasRootApp = appEntry.root?.exists;
1188
+ const sharedImport = hasSharedApp ? `import _sharedApp from ${JSON.stringify(appEntry.shared.fullPath)};` : "const _sharedApp = null;";
1189
+ const serverImport = hasServerApp ? `import _serverApp from ${JSON.stringify(appEntry.server.fullPath)};` : "const _serverApp = null;";
1190
+ const clientImport = hasClientApp ? `import _clientApp from ${JSON.stringify(appEntry.client.fullPath)};` : "const _clientApp = null;";
1191
+ const rootAppImport = hasRootApp ? `import _rootApp from ${JSON.stringify(appEntry.root.fullPath)};` : "const _rootApp = null;";
1192
+ const pinia = isPiniaAutoRegisterEnabled(options.pinia);
1193
+ const piniaImport = pinia ? `import { createPinia } from 'pinia';\nimport { serializePiniaState, hydratePiniaState } from '@ubean/integrations/pinia/runtime';` : "";
1194
+ const piniaStateDefaults = pinia ? ` base.serializeState = serializePiniaState;\n base.hydrateState = hydratePiniaState;` : "";
1195
+ const piniaHelper = pinia ? `function _withPinia(config) {\n const setups = config.pinia && config.pinia.setup ? [config.pinia.setup] : [];\n config.plugins = [...(config.plugins || []), { plugin: { install(app) {\n const existing = app.config.globalProperties.$pinia;\n const instance = existing || createPinia();\n for (const setup of setups) setup(instance);\n if (!existing) app.use(instance);\n } } }];\n return config;\n}\n\n` : "";
1196
+ const piniaWrap = (config) => pinia ? `_withPinia(${config})` : config;
1177
1197
  return `${`
1178
1198
  // Auto-generated by ubean - do not edit
1179
1199
  /* eslint-disable */
1180
- ${hasSharedApp ? `import _sharedApp from ${JSON.stringify(appEntry.shared.fullPath)};` : "const _sharedApp = null;"}
1181
- ${hasServerApp ? `import _serverApp from ${JSON.stringify(appEntry.server.fullPath)};` : "const _serverApp = null;"}
1182
- ${hasClientApp ? `import _clientApp from ${JSON.stringify(appEntry.client.fullPath)};` : "const _clientApp = null;"}
1183
- ${hasRootApp ? `import _rootApp from ${JSON.stringify(appEntry.root.fullPath)};` : "const _rootApp = null;"}
1200
+ ${sharedImport}
1201
+ ${serverImport}
1202
+ ${clientImport}
1203
+ ${rootAppImport}
1204
+ ${piniaImport}
1184
1205
 
1185
1206
  import {
1186
1207
  createUbeanClientApp,
@@ -1284,6 +1305,17 @@ function _mergeAppConfig(base, ...configs) {
1284
1305
  if (cfg.viewTransitions !== undefined) result.viewTransitions = cfg.viewTransitions;
1285
1306
  if (cfg.serializeState) result.serializeState = cfg.serializeState;
1286
1307
  if (cfg.hydrateState) result.hydrateState = cfg.hydrateState;
1308
+ if (cfg.pinia) {
1309
+ const prev = result.pinia;
1310
+ // setup 累加:多个配置的插件注册都执行(shared 先,client/server 后)。
1311
+ result.pinia = {
1312
+ setup: cfg.pinia.setup
1313
+ ? prev && prev.setup
1314
+ ? (pinia) => { prev.setup(pinia); cfg.pinia.setup(pinia); }
1315
+ : cfg.pinia.setup
1316
+ : prev && prev.setup
1317
+ };
1318
+ }
1287
1319
  }
1288
1320
  // router.setup:累加语义 — shared 和 client/server 各自定义的 setup 都会执行
1289
1321
  // (顺序:shared 先,client/server 后)。这样 shared 可放通用守卫(如埋点),
@@ -1306,15 +1338,16 @@ function _mergeAppConfig(base, ...configs) {
1306
1338
  return result;
1307
1339
  }
1308
1340
 
1309
- export function resolveAppConfig(mode) {
1341
+ ${piniaHelper}export function resolveAppConfig(mode) {
1310
1342
  const base = createDefaultAppConfig();
1343
+ ${piniaStateDefaults}
1311
1344
  // src/app.vue / src/App.vue 自动检测(小写优先)作为默认 appRoot;
1312
1345
  // 显式 defineApp({ appRoot }) 在下方 merge 时按"后者覆盖"盖过它。
1313
1346
  // 注入 base 而非在消费点 || _rootApp,保证走 resolveAppConfig('server')
1314
1347
  // 的 dev/prod SSR(经 @ubean/client/ssr 的 createVueRenderer)与客户端
1315
1348
  // resolveAppConfig('client') 读到一致的 appRoot → 水合结构不 mismatch。
1316
1349
  if (_rootApp) base.appRoot = _rootApp;
1317
- if (!_sharedApp && !_serverApp && !_clientApp) return base;
1350
+ if (!_sharedApp && !_serverApp && !_clientApp) return ${piniaWrap("base")};
1318
1351
 
1319
1352
  const sharedCfg = typeof _sharedApp === 'function' ? _sharedApp() : _sharedApp;
1320
1353
  const serverCfg = mode === 'server' && _serverApp ? (typeof _serverApp === 'function' ? _serverApp() : _serverApp) : null;
@@ -1327,7 +1360,7 @@ export function resolveAppConfig(mode) {
1327
1360
  if (mode === 'client' && clientCfg?.onClientReady) merged.onClientReady = clientCfg.onClientReady;
1328
1361
  else if (mode === 'server' && serverCfg?.onAppCreated) merged.onAppCreated = serverCfg.onAppCreated;
1329
1362
 
1330
- return merged;
1363
+ return ${piniaWrap("merged")};
1331
1364
  }
1332
1365
 
1333
1366
  /**
@@ -1669,7 +1702,7 @@ function ubeanVite(options) {
1669
1702
  */
1670
1703
  function applyScan(result) {
1671
1704
  virtualRegistry.register(createVuePagesVirtualModule(result.pages, result.layouts, result.notFoundPage, result.loadingPage, result.errorPage, localeVueParamFromConfig(ubeanConfig)));
1672
- virtualRegistry.register(createVueAppEntryVirtualModule(result.appEntry));
1705
+ virtualRegistry.register(createVueAppEntryVirtualModule(result.appEntry, { pinia: ubeanConfig.pinia }));
1673
1706
  virtualRegistry.register(createServerEntryVirtualModule(result.serverEntry));
1674
1707
  virtualRegistry.register(createClientEntryVirtualModule());
1675
1708
  }
package/dist/vue.d.ts CHANGED
@@ -32,7 +32,14 @@ export declare function ubeanVite(options: UbeanViteOptions): Plugin[];
32
32
  * 使 `createMatcherGuard()` 与 SPA head guard 在框架模式下同样可用)。
33
33
  */
34
34
  export declare function createVuePagesVirtualModule(pages: ScannedPageRoute[], layouts: ScannedLayout[], notFoundPage?: ScannedPageRoute, loadingPage?: ScannedPageRoute, errorPage?: ScannedPageRoute, localeVueParam?: string): VirtualModule;
35
- export declare function createVueAppEntryVirtualModule(appEntry?: ScannedAppEntry): VirtualModule;
35
+ interface VueAppEntryModuleOptions {
36
+ /** `ubean.config.ts` 的 `pinia` 字段原值 */
37
+ pinia?: boolean | {
38
+ enabled?: boolean;
39
+ disabled?: boolean;
40
+ };
41
+ }
42
+ export declare function createVueAppEntryVirtualModule(appEntry?: ScannedAppEntry, options?: VueAppEntryModuleOptions): VirtualModule;
36
43
  /**
37
44
  * 合并首帧 `<head>` 脚本的两个来源,去重后返回。
38
45
  *
package/dist/vue.js CHANGED
@@ -1 +1 @@
1
- export { t as VUE_PLUGIN_INCLUDE, r as composeHeadScripts, i as createClientEntryVirtualModule, a as createServerEntryVirtualModule, o as createVueAppEntryVirtualModule, s as createVuePagesVirtualModule, n as default, n as ubeanVite } from "./vue-BSQATqn6.js";
1
+ export { t as VUE_PLUGIN_INCLUDE, r as composeHeadScripts, i as createClientEntryVirtualModule, a as createServerEntryVirtualModule, o as createVueAppEntryVirtualModule, s as createVuePagesVirtualModule, n as default, n as ubeanVite } from "./vue-XlDiKaVE.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ubean/build",
3
- "version": "0.7.5",
3
+ "version": "0.7.6",
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.7",
52
- "@ubean/app": "0.7.5",
53
- "@ubean/client": "0.7.5",
54
- "@ubean/config": "0.7.5",
55
- "@ubean/i18n": "0.7.5",
56
- "@ubean/islands": "0.7.5",
57
- "@ubean/markdown": "0.7.5",
58
- "@ubean/pages": "0.7.5",
59
- "@ubean/preset": "0.7.5",
60
- "@ubean/routes": "0.7.5",
61
- "@ubean/scan": "0.7.5",
62
- "@ubean/server": "0.7.5",
63
- "@ubean/shared": "0.7.5",
64
- "@ubean/vue": "0.7.5",
52
+ "@ubean/app": "0.7.6",
53
+ "@ubean/client": "0.7.6",
54
+ "@ubean/config": "0.7.6",
55
+ "@ubean/i18n": "0.7.6",
56
+ "@ubean/islands": "0.7.6",
57
+ "@ubean/markdown": "0.7.6",
58
+ "@ubean/pages": "0.7.6",
59
+ "@ubean/preset": "0.7.6",
60
+ "@ubean/routes": "0.7.6",
61
+ "@ubean/scan": "0.7.6",
62
+ "@ubean/server": "0.7.6",
63
+ "@ubean/shared": "0.7.6",
64
+ "@ubean/vue": "0.7.6",
65
65
  "@vitejs/plugin-vue": "^6.0.10",
66
66
  "@vitejs/plugin-vue-jsx": "^5.1.6",
67
67
  "openapi-typescript": "^7.13.0",