weapp-vite 7.4.0 → 7.6.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.
Files changed (126) hide show
  1. package/README.md +59 -3
  2. package/THIRD_PARTY_NOTICES.md +60 -0
  3. package/bin/bootstrap.js +14 -1
  4. package/dist/action-B3YZMA-h.mjs +255 -0
  5. package/dist/action-BELcDNNv.mjs +139 -0
  6. package/dist/action-BOk3vGI7.mjs +1110 -0
  7. package/dist/action-DlC6JYpt.mjs +95 -0
  8. package/dist/action-zEDY7oh_.mjs +247 -0
  9. package/dist/adapters-CcHrsYaj.mjs +1 -0
  10. package/dist/analyze-DN79YOAH.mjs +184 -0
  11. package/dist/artifacts-BOyC9Fy-.mjs +106 -0
  12. package/dist/assets-C5_YYXNk.mjs +637 -0
  13. package/dist/auto-import-components/resolvers.mjs +1 -2
  14. package/dist/auto-import-presets/wevu-router.mjs +1 -2
  15. package/dist/auto-import-presets/wevu.mjs +1 -2
  16. package/dist/auto-routes.mjs +2 -1
  17. package/dist/budget-CTLOHwgI.d.mts +177 -0
  18. package/dist/budget-EOeEycc_.mjs +65 -0
  19. package/dist/builtProject-C29udgXY.mjs +541 -0
  20. package/dist/chunkStrategy-DY_LZIIe.mjs +1448 -0
  21. package/dist/classifier-DBJY__kg.mjs +88 -0
  22. package/dist/cli-acceptance.d.mts +1 -0
  23. package/dist/cli-acceptance.mjs +21 -0
  24. package/dist/cli.mjs +519 -5049
  25. package/dist/compatibility.mjs +1 -2
  26. package/dist/{config-Dbvj5yK7.d.mts → config-Bf6DWhyb.d.mts} +220 -76
  27. package/dist/config.d.mts +3 -3
  28. package/dist/config.mjs +1 -1
  29. package/dist/{constants-WOsG3Eqd.mjs → constants-DEZdcsMn.mjs} +1 -1
  30. package/dist/{createContext-UOEgeYnA.mjs → createCompilerContextInstance-aYwi8wQt.mjs} +36862 -32020
  31. package/dist/createContext-tApLtII-.mjs +15 -0
  32. package/dist/dashboard/analyze.d.mts +48 -0
  33. package/dist/dashboard/analyze.mjs +3 -0
  34. package/dist/dashboard/vite.d.mts +1 -1
  35. package/dist/dashboard.d.mts +3 -2
  36. package/dist/dashboard.mjs +1748 -1
  37. package/dist/dashboardTransport-C_Y6jMp-.mjs +16 -0
  38. package/dist/dashboardViteBridge-DCGR43aM.mjs +302 -0
  39. package/dist/dev-C2fgr_Xd.mjs +67 -0
  40. package/dist/devProvider-D-hTfsEO.mjs +3027 -0
  41. package/dist/docs/README.md +59 -3
  42. package/dist/docs/ai-workflows.md +4 -0
  43. package/dist/docs/doctor.md +38 -0
  44. package/dist/docs/getting-started.md +3 -1
  45. package/dist/docs/index.md +3 -1
  46. package/dist/docs/mcp.md +104 -1
  47. package/dist/docs/testing.md +29 -2
  48. package/dist/docs/troubleshooting.md +16 -0
  49. package/dist/docs/uni-app-component-libraries.md +8 -7
  50. package/dist/docs/upload.md +40 -3
  51. package/dist/docs/vite-plugin.md +171 -0
  52. package/dist/docs/vue-sfc.md +42 -0
  53. package/dist/docs/weapp-config.md +54 -0
  54. package/dist/docs/wevu-authoring.md +10 -0
  55. package/dist/doctor-worker.d.mts +1 -0
  56. package/dist/doctor-worker.mjs +60 -0
  57. package/dist/doctor.d.mts +144 -0
  58. package/dist/doctor.mjs +850 -0
  59. package/dist/engine-C66J0HLz.mjs +54 -0
  60. package/dist/eslint.mjs +1 -2
  61. package/dist/{file-giE9UMZa.mjs → file-CcIOmqhC.mjs} +58 -24
  62. package/dist/file-DtcteQ4G.mjs +1 -0
  63. package/dist/files-BqxFIPRp.mjs +45 -0
  64. package/dist/forwardConsole-B0Reo8Lf.mjs +511 -0
  65. package/dist/getInstance-BAIaU2y9.mjs +1 -0
  66. package/dist/getInstance-Dt9IQDKr.mjs +28 -0
  67. package/dist/history-BIiRCzbq.mjs +784 -0
  68. package/dist/i18n.d.mts +1 -1
  69. package/dist/index-D5rgBzYZ.d.mts +740 -0
  70. package/dist/index.d.mts +12 -10
  71. package/dist/index.mjs +3 -2
  72. package/dist/json.d.mts +1 -1
  73. package/dist/json.mjs +1 -2
  74. package/dist/lib-DjccSI1B.mjs +143 -0
  75. package/dist/lifecycle-C36WSbQS.mjs +413 -0
  76. package/dist/loadConfig-BWIsDXR4.mjs +59 -0
  77. package/dist/loadConfig-D-BpBgsk.mjs +1 -0
  78. package/dist/logBuildAppFinish-ChjwATMv.mjs +57 -0
  79. package/dist/logger-DGn5iEVN.mjs +1 -0
  80. package/dist/mcp-CYgX9HpO.mjs +86 -0
  81. package/dist/{mcp-BG6TliEg.mjs → mcp-Cj8Maqo6.mjs} +16 -7
  82. package/dist/mcp.d.mts +6 -3
  83. package/dist/mcp.mjs +1 -2
  84. package/dist/mcpClient-DVLvFLZv.mjs +287 -0
  85. package/dist/metadata-hwF7QRcS.mjs +59 -0
  86. package/dist/nodeEnv-BmH8UZPR.mjs +7 -0
  87. package/dist/openIde-CroqOgk5.mjs +648 -0
  88. package/dist/options-jqFwfD1G.mjs +34 -0
  89. package/dist/package-Cmakyy3J.mjs +4 -0
  90. package/dist/path-CYYIQGS7.mjs +44 -0
  91. package/dist/{platform-DTWs5QRi.mjs → platform-CnkySBKz.mjs} +1 -1
  92. package/dist/processCleanup-BQn2kTcK.mjs +19 -0
  93. package/dist/protocol-Cg6Jdlvb.mjs +141 -0
  94. package/dist/reader-sh_POQ9-.mjs +93 -0
  95. package/dist/realpathScope-Tf9mz-fh.mjs +23 -0
  96. package/dist/report-hyonPGbZ.mjs +107 -0
  97. package/dist/resolvedId-CiDl7SC1.mjs +60 -0
  98. package/dist/{resolvers-icNxkpcy.mjs → resolvers-Dod-euqX.mjs} +4 -1
  99. package/dist/resolvers.mjs +1 -2
  100. package/dist/runtime-CLUhQsdA.mjs +43 -0
  101. package/dist/{runtime-Ee2HY6gR.d.mts → runtime-DpVf714f.d.mts} +1 -1
  102. package/dist/runtime.d.mts +1 -1
  103. package/dist/runtime.mjs +1 -2
  104. package/dist/schematics-kO26eQRT.mjs +91 -0
  105. package/dist/session-D3zsdzIy.mjs +452 -0
  106. package/dist/test.d.mts +1 -0
  107. package/dist/test.mjs +204 -45
  108. package/dist/{types-CgZn5X6j.d.mts → types-D-kfuyVa.d.mts} +1 -2
  109. package/dist/types-D0FFexRF.d.mts +39 -0
  110. package/dist/types.d.mts +3 -3
  111. package/dist/{upload-D0RcEWrq.mjs → upload-DozK8UdN.mjs} +278 -15
  112. package/dist/upload-worker.mjs +136 -3
  113. package/dist/utils-Dy51PYAC.mjs +1034 -0
  114. package/dist/vite.d.mts +9 -0
  115. package/dist/vite.mjs +309 -0
  116. package/dist/volar.d.mts +2 -2
  117. package/dist/web-apis.mjs +1 -2
  118. package/dist/wxs-BT8btflA.mjs +112 -0
  119. package/dist/wxs-Z4VQDeJ_.mjs +1 -0
  120. package/package.json +80 -48
  121. package/dist/adapters-BwnMMIZR.mjs +0 -2
  122. package/dist/dashboard-BzaVesmQ.mjs +0 -558
  123. package/dist/file-D19nbDoN.mjs +0 -2
  124. package/dist/getInstance-CYF1vl5l.mjs +0 -2
  125. package/dist/index-DbqVupg0.d.mts +0 -246
  126. package/dist/logger-mt4mSTqV.mjs +0 -2
@@ -0,0 +1,16 @@
1
+ import { createRequire } from "node:module";
2
+ import { pathToFileURL } from "node:url";
3
+ //#region src/cli/analyze/dashboardTransport/index.ts
4
+ /** 从已选 Dashboard 的安装位置解析传输依赖,兼容嵌套安装和包管理器的虚拟目录。 */
5
+ async function loadDashboardTransportModule(packageJsonPath, specifier) {
6
+ const require = createRequire(packageJsonPath);
7
+ let resolved;
8
+ try {
9
+ resolved = require.resolve(specifier);
10
+ } catch (error) {
11
+ throw new Error(`[weapp-vite ui] 已安装的 Dashboard 无法解析传输依赖 ${specifier},请重新安装或更新 @weapp-vite/dashboard。`, { cause: error });
12
+ }
13
+ return import(pathToFileURL(resolved).href);
14
+ }
15
+ //#endregion
16
+ export { loadDashboardTransportModule as t };
@@ -0,0 +1,302 @@
1
+ import { t as loadDashboardTransportModule } from "./dashboardTransport-C_Y6jMp-.mjs";
2
+ import process from "node:process";
3
+ import path from "pathe";
4
+ import { defineRpcFunction } from "devframe";
5
+ import { Server } from "node:http";
6
+ import { DEVFRAME_CONNECTION_META_FILENAME, DEVFRAME_SSE_ROUTE, DEVFRAME_WS_ROUTE } from "devframe/constants";
7
+ import { toNodeHandler } from "@modelcontextprotocol/node";
8
+ import { registerDevframeInstance } from "devframe/internal";
9
+ import { isLoopbackAddress, validateOriginCandidate } from "devframe/utils/origin";
10
+ //#region src/cli/analyze/dashboardMcp.ts
11
+ const MCP_ROUTE = "__mcp";
12
+ /** MCP 只公开 Dashboard 的 Agent RPC,不继承宿主工具、浏览器 OTP 或共享状态。 */
13
+ async function createDashboardMcp(instance, httpServer, options) {
14
+ const { createMcpFetchHandler } = await loadDashboardTransportModule(options.packageJsonPath, "@devframes/agentic/mcp");
15
+ const context = await instance.context;
16
+ const prefix = `${options.id}:`;
17
+ const getTool = (id) => {
18
+ const tool = context.agent.getTool(id);
19
+ return tool?.kind === "rpc" && tool.id.startsWith(prefix) ? tool : void 0;
20
+ };
21
+ const agent = Object.create(context.agent);
22
+ agent.list = () => ({
23
+ tools: context.agent.list().tools.filter((tool) => tool.kind === "rpc" && tool.id.startsWith(prefix)),
24
+ resources: []
25
+ });
26
+ agent.getTool = getTool;
27
+ agent.invoke = (id, args) => {
28
+ const tool = getTool(id);
29
+ if (!tool) throw new Error("Dashboard MCP tool is not available.");
30
+ return context.agent.invoke(tool.id, args);
31
+ };
32
+ agent.read = () => {
33
+ throw new Error("Dashboard MCP resources are not available.");
34
+ };
35
+ const handler = createMcpFetchHandler({
36
+ ...context,
37
+ agent
38
+ }, {
39
+ serverName: `${options.id} (devframe)`,
40
+ serverVersion: options.version ?? "0.0.0",
41
+ exposeSharedState: false,
42
+ allowedOrigins: []
43
+ });
44
+ const base = options.base ?? instance.base;
45
+ const route = `${base}${MCP_ROUTE}`;
46
+ let registration;
47
+ let closing;
48
+ let closed = false;
49
+ const nodeHandler = toNodeHandler({ async fetch(request) {
50
+ const origin = request.headers.get("origin");
51
+ if (!origin || validateOriginCandidate(origin, []) !== origin) return new Response("Forbidden", { status: 403 });
52
+ return handler.fetch(request);
53
+ } });
54
+ return {
55
+ route,
56
+ async nodeMiddleware(request, response) {
57
+ const remoteAddress = request.socket.remoteAddress;
58
+ if (!remoteAddress || !isLoopbackAddress(remoteAddress)) {
59
+ response.writeHead(403);
60
+ response.end("Forbidden");
61
+ return;
62
+ }
63
+ await nodeHandler(request, response);
64
+ },
65
+ discoveryMiddleware: toNodeHandler({ async fetch() {
66
+ return Response.json({
67
+ ...instance.connectionMeta(),
68
+ mcp: { path: MCP_ROUTE }
69
+ });
70
+ } }),
71
+ register() {
72
+ if (closed || registration || !httpServer.listening) return;
73
+ const address = httpServer.address();
74
+ if (!address || typeof address === "string") return;
75
+ const hostname = address.address === "::" || address.address === "0.0.0.0" ? "localhost" : address.address.includes(":") ? `[${address.address}]` : address.address;
76
+ registration = registerDevframeInstance({
77
+ pid: process.pid,
78
+ port: address.port,
79
+ origin: `http://${hostname}:${address.port}`,
80
+ basePath: base,
81
+ id: options.id,
82
+ name: options.name,
83
+ rootDir: path.resolve(options.projectRoot),
84
+ mcp: { path: route },
85
+ startedAt: Date.now()
86
+ });
87
+ },
88
+ close() {
89
+ if (!closing) {
90
+ closed = true;
91
+ closing = Promise.resolve().then(async () => {
92
+ const errors = [];
93
+ for (const release of [() => registration?.unregister(), () => handler.dispose()]) try {
94
+ await release();
95
+ } catch (error) {
96
+ errors.push(error);
97
+ }
98
+ if (errors.length) throw errors.length === 1 ? errors[0] : new AggregateError(errors, "Dashboard MCP cleanup failed");
99
+ });
100
+ }
101
+ return closing;
102
+ }
103
+ };
104
+ }
105
+ //#endregion
106
+ //#region src/cli/analyze/dashboardPolicy.ts
107
+ const rejectDashboardSharedStateSet = defineRpcFunction({
108
+ name: "devframe:rpc:server-state:set",
109
+ type: "action",
110
+ handler: () => {
111
+ throw new Error("Dashboard Devframe shared state 只允许服务端修改。");
112
+ }
113
+ });
114
+ const rejectDashboardSharedStatePatch = defineRpcFunction({
115
+ name: "devframe:rpc:server-state:patch",
116
+ type: "action",
117
+ handler: () => {
118
+ throw new Error("Dashboard Devframe shared state 只允许服务端修改。");
119
+ }
120
+ });
121
+ /** 独立宿主在开放 RPC 前禁止全局共享状态写入,不影响嵌入宿主的策略。 */
122
+ function withStandaloneDashboardPolicy(definition) {
123
+ return {
124
+ ...definition,
125
+ async setup(ctx, info) {
126
+ ctx.rpc.register(rejectDashboardSharedStateSet, true);
127
+ ctx.rpc.register(rejectDashboardSharedStatePatch, true);
128
+ await definition.setup?.(ctx, info);
129
+ }
130
+ };
131
+ }
132
+ //#endregion
133
+ //#region src/cli/analyze/dashboardViteBridge.ts
134
+ const ANALYZE_DASHBOARD_DEVFRAME_BASE = "/__weapp-vite/";
135
+ const ANALYZE_DASHBOARD_HUB_BASE = "/__devframes/";
136
+ const transportPaths = /* @__PURE__ */ new Set([
137
+ `${ANALYZE_DASHBOARD_DEVFRAME_BASE}${DEVFRAME_CONNECTION_META_FILENAME}`,
138
+ `${ANALYZE_DASHBOARD_DEVFRAME_BASE}${DEVFRAME_SSE_ROUTE}`,
139
+ `${ANALYZE_DASHBOARD_DEVFRAME_BASE}${DEVFRAME_WS_ROUTE}`
140
+ ]);
141
+ function createAnalyzeDashboardViteBridge(controller, options) {
142
+ const hosts = /* @__PURE__ */ new WeakMap();
143
+ const ownedHosts = /* @__PURE__ */ new Set();
144
+ let activeHost;
145
+ let closing;
146
+ let stopped = false;
147
+ return {
148
+ name: "weapp-vite:dashboard-devframe",
149
+ apply: "serve",
150
+ configureServer(server) {
151
+ if (stopped) throw new Error("Dashboard bridge is already closed.");
152
+ const httpServer = server.httpServer instanceof Server ? server.httpServer : void 0;
153
+ let instance;
154
+ let mcp;
155
+ let starting;
156
+ let acquiring;
157
+ let hostClosing;
158
+ let closed = false;
159
+ const onListening = () => mcp?.register();
160
+ const host = {
161
+ start() {
162
+ if (closed) throw new Error("Dashboard host is already closed.");
163
+ starting ??= (async () => {
164
+ try {
165
+ acquiring = Promise.resolve().then(async () => {
166
+ if (closed) return;
167
+ if (!httpServer) throw new Error("Dashboard requires the Dashboard Vite HTTP server.");
168
+ if (options.uiHost === "hub") {
169
+ const [{ initHub }, { createUi }] = await Promise.all([loadDashboardTransportModule(options.packageJsonPath, "@devframes/hub/initiate"), loadDashboardTransportModule(options.packageJsonPath, "@devframes/hub-ui")]);
170
+ if (closed) return;
171
+ instance = initHub({
172
+ base: ANALYZE_DASHBOARD_HUB_BASE,
173
+ name: "weapp-vite DevTools",
174
+ cwd: options.projectRoot ?? process.cwd(),
175
+ server: httpServer,
176
+ allowedOrigins: [],
177
+ auth: true,
178
+ mcp: false,
179
+ register: false,
180
+ ui: createUi({ branding: {
181
+ productName: "weapp-vite DevTools",
182
+ logo: controller.definition.icon
183
+ } }),
184
+ configure: (ctx) => ctx.install({
185
+ ...controller.definition,
186
+ basePath: ANALYZE_DASHBOARD_DEVFRAME_BASE
187
+ })
188
+ });
189
+ await instance.ready;
190
+ } else {
191
+ const { initDevframe } = await loadDashboardTransportModule(options.packageJsonPath, "devframe/initiate");
192
+ if (closed) return;
193
+ instance = initDevframe(withStandaloneDashboardPolicy(controller.definition), {
194
+ base: ANALYZE_DASHBOARD_DEVFRAME_BASE,
195
+ distDir: false,
196
+ server: httpServer,
197
+ allowedOrigins: [],
198
+ auth: true,
199
+ mcp: false,
200
+ register: false
201
+ });
202
+ await instance.ready;
203
+ }
204
+ if (!closed) mcp = await createDashboardMcp(instance, httpServer, {
205
+ packageJsonPath: options.packageJsonPath,
206
+ projectRoot: options.projectRoot ?? process.cwd(),
207
+ id: controller.definition.id,
208
+ name: controller.definition.name,
209
+ version: controller.definition.version,
210
+ base: ANALYZE_DASHBOARD_DEVFRAME_BASE
211
+ });
212
+ });
213
+ await acquiring;
214
+ if (closed) throw new Error("Dashboard host initialization was cancelled by shutdown.");
215
+ activeHost = host;
216
+ httpServer?.once("listening", onListening);
217
+ httpServer?.once("close", host.onClose);
218
+ httpServer?.once("error", host.onClose);
219
+ onListening();
220
+ } catch (error) {
221
+ await host.close().catch(() => {});
222
+ if (!activeHost) controller.dispose();
223
+ throw error;
224
+ }
225
+ })();
226
+ return starting;
227
+ },
228
+ close() {
229
+ if (!hostClosing) {
230
+ closed = true;
231
+ if (activeHost === host) activeHost = void 0;
232
+ httpServer?.off("listening", onListening);
233
+ httpServer?.off("close", host.onClose);
234
+ httpServer?.off("error", host.onClose);
235
+ hostClosing = Promise.resolve().then(async () => {
236
+ await acquiring?.catch(() => {});
237
+ const errors = [];
238
+ for (const release of [() => mcp?.close(), () => instance?.close()]) try {
239
+ await release();
240
+ } catch (error) {
241
+ errors.push(error);
242
+ }
243
+ if (errors.length) throw errors.length === 1 ? errors[0] : new AggregateError(errors, "Dashboard host cleanup failed");
244
+ ownedHosts.delete(host);
245
+ });
246
+ }
247
+ return hostClosing;
248
+ },
249
+ onClose() {
250
+ host.close().catch((error) => server.config.logger.error(String(error)));
251
+ }
252
+ };
253
+ hosts.set(server.config, host);
254
+ ownedHosts.add(host);
255
+ server.middlewares.use((request, response, next) => {
256
+ if (closed || !instance) {
257
+ next();
258
+ return;
259
+ }
260
+ const url = request.url ?? "/";
261
+ const queryIndex = url.indexOf("?");
262
+ const pathname = queryIndex < 0 ? url : url.slice(0, queryIndex);
263
+ if (mcp && pathname === mcp.route) {
264
+ mcp.nodeMiddleware(request, response).catch(next);
265
+ return;
266
+ }
267
+ if (mcp && pathname === `/__weapp-vite/${DEVFRAME_CONNECTION_META_FILENAME}`) {
268
+ mcp.discoveryMiddleware(request, response).catch(next);
269
+ return;
270
+ }
271
+ if (options.uiHost === "hub") {
272
+ if (pathname === "/__devframes/".slice(0, -1) || pathname.startsWith("/__devframes/")) instance.nodeMiddleware(request, response, next);
273
+ else next();
274
+ return;
275
+ }
276
+ if (transportPaths.has(pathname)) instance.nodeMiddleware(request, response, next);
277
+ else next();
278
+ });
279
+ },
280
+ async buildStart() {
281
+ await hosts.get(this.environment.getTopLevelConfig())?.start();
282
+ },
283
+ async closeBundle() {
284
+ await hosts.get(this.environment.getTopLevelConfig())?.close();
285
+ },
286
+ closeServer({ reason }) {
287
+ if (reason === "close" && !activeHost) controller.dispose();
288
+ },
289
+ close() {
290
+ if (!closing) {
291
+ stopped = true;
292
+ closing = Promise.allSettled([...ownedHosts].map((host) => host.close())).then((results) => {
293
+ const errors = results.flatMap((result) => result.status === "rejected" ? [result.reason] : []);
294
+ if (errors.length) throw errors.length === 1 ? errors[0] : new AggregateError(errors, "Dashboard bridge cleanup failed");
295
+ });
296
+ }
297
+ return closing;
298
+ }
299
+ };
300
+ }
301
+ //#endregion
302
+ export { ANALYZE_DASHBOARD_DEVFRAME_BASE, ANALYZE_DASHBOARD_HUB_BASE, createAnalyzeDashboardViteBridge };
@@ -0,0 +1,67 @@
1
+ import { E as createViteWatchIgnored, m as notifyDevModuleGraphHost, t as createDevModuleGraphPlugin } from "./devProvider-D-hTfsEO.mjs";
2
+ import { WEAPP_VITE_STATEFUL_HMR_BRIDGE_KEY } from "@weapp-core/constants";
3
+ //#region src/vite/dev.ts
4
+ /** 宿主仅提供依赖图和服务生命周期;小程序快照沿用原生构建落盘。 */
5
+ function prepareDevHostConfig(session, merged, user) {
6
+ const ctx = session.context;
7
+ if (session.statefulController) {
8
+ const { plugins: _plugins, configFile: _configFile, ...normalized } = merged;
9
+ return {
10
+ plugins: [...session.statefulController.plugins, ...merged.plugins ?? []],
11
+ config: {
12
+ ...normalized,
13
+ logLevel: user.logLevel,
14
+ customLogger: user.customLogger,
15
+ appType: "custom",
16
+ define: {
17
+ ...merged.define,
18
+ App: `globalThis[${JSON.stringify(WEAPP_VITE_STATEFUL_HMR_BRIDGE_KEY)}].App`,
19
+ Page: `globalThis[${JSON.stringify(WEAPP_VITE_STATEFUL_HMR_BRIDGE_KEY)}].Page`
20
+ },
21
+ optimizeDeps: {
22
+ noDiscovery: true,
23
+ include: [],
24
+ entries: []
25
+ },
26
+ experimental: {
27
+ ...merged.experimental,
28
+ bundledDev: true
29
+ },
30
+ server: {
31
+ ...merged.server,
32
+ ...user.server,
33
+ hmr: user.server?.hmr,
34
+ watch: {
35
+ ...user.server?.watch,
36
+ ignored: createViteWatchIgnored(ctx.configService.cwd, ctx.configService.outDir, user.server?.watch?.ignored)
37
+ }
38
+ },
39
+ build: {
40
+ ...merged.build,
41
+ watch: void 0,
42
+ write: false
43
+ }
44
+ }
45
+ };
46
+ }
47
+ return {
48
+ plugins: [createDevModuleGraphPlugin(ctx, merged, (change) => notifyDevModuleGraphHost(ctx, change))],
49
+ config: {
50
+ appType: "custom",
51
+ resolve: merged.resolve,
52
+ define: merged.define,
53
+ experimental: {
54
+ ...merged.experimental,
55
+ bundledDev: false
56
+ },
57
+ optimizeDeps: {
58
+ noDiscovery: true,
59
+ include: [],
60
+ entries: []
61
+ },
62
+ server: { watch: { ignored: createViteWatchIgnored(ctx.configService.cwd, ctx.configService.outDir, user.server?.watch?.ignored) } }
63
+ }
64
+ };
65
+ }
66
+ //#endregion
67
+ export { prepareDevHostConfig };