weapp-vite 7.3.0 → 7.4.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.
@@ -0,0 +1,403 @@
1
+ import { m as resolveMiniPlatform } from "./platform-DTWs5QRi.mjs";
2
+ import { r as logger_default } from "./logger-mt4mSTqV.mjs";
3
+ import { createRequire } from "node:module";
4
+ import { pathToFileURL } from "node:url";
5
+ import path from "node:path";
6
+ import process from "node:process";
7
+ import { mkdir, readFile, stat } from "node:fs/promises";
8
+ import { getPackageInfo } from "local-pkg";
9
+ import { execFile } from "node:child_process";
10
+ //#region src/cli/upload/tools.ts
11
+ function requireUploadEnv(context, name) {
12
+ const value = context.env[name]?.trim();
13
+ if (!value) throw new Error(`上传缺少环境变量 ${name}。请通过环境变量或项目 .env 文件配置凭据。`);
14
+ return value;
15
+ }
16
+ function requireUploadAppId(context) {
17
+ const appid = context.appid?.trim();
18
+ if (!appid || appid === "touristappid") throw new Error("上传需要目标平台的真实 AppID,请检查项目配置。");
19
+ return appid;
20
+ }
21
+ function redactUploadSecrets(message, secrets) {
22
+ for (const secret of [...new Set(secrets)].filter(Boolean).sort((a, b) => b.length - a.length)) message = message.split(secret).join("[REDACTED]");
23
+ return message.replace(/\b([a-z][a-z\d+.-]*:\/\/)[^\s/]+@/gi, "$1[REDACTED]@");
24
+ }
25
+ async function loadUploadPackage(specifier, cwd) {
26
+ let resolved;
27
+ try {
28
+ resolved = createRequire(path.join(cwd, "package.json")).resolve(specifier);
29
+ } catch {
30
+ const packageName = specifier.startsWith("@") ? specifier.split("/").slice(0, 2).join("/") : specifier.split("/")[0];
31
+ throw new Error(`无法解析上传工具 ${specifier},请在项目中安装:pnpm add -D ${packageName}`);
32
+ }
33
+ const loaded = await import(pathToFileURL(resolved).href);
34
+ return loaded.default ?? loaded;
35
+ }
36
+ /** 使用 Node 直接执行包入口,避免 Windows 的 .cmd 解析与 shell 引号差异。 */
37
+ async function runUploadCli(context, packageName, binName, args, secrets, captureOutput = false) {
38
+ const info = await getPackageInfo(packageName, { paths: [context.cwd] });
39
+ const bins = info?.packageJson.bin;
40
+ const bin = typeof bins === "string" ? bins : bins && typeof bins === "object" ? bins[binName] : void 0;
41
+ if (!info || typeof bin !== "string") throw new Error(`无法解析上传工具 ${binName},请在项目中安装:pnpm add -D ${packageName}`);
42
+ return new Promise((resolve, reject) => {
43
+ const child = execFile(process.execPath, [path.resolve(info.rootPath, bin), ...args], {
44
+ cwd: context.cwd,
45
+ env: context.env,
46
+ maxBuffer: 4194304,
47
+ encoding: "utf8",
48
+ windowsHide: true
49
+ }, (error, stdout, stderr) => {
50
+ const safeOutput = redactUploadSecrets(`${stdout}\n${stderr}`, secrets).trim();
51
+ if (error) {
52
+ reject(/* @__PURE__ */ new Error(`${packageName} 执行失败(${error.signal ?? error.code ?? "unknown"})${safeOutput ? `\n${safeOutput}` : ""}`));
53
+ return;
54
+ }
55
+ if (safeOutput && !captureOutput) logger_default.info(safeOutput);
56
+ resolve(stdout);
57
+ });
58
+ function cancel() {
59
+ child.kill("SIGKILL");
60
+ }
61
+ process.once("exit", cancel);
62
+ child.once("close", () => process.off("exit", cancel));
63
+ child.stdin?.end();
64
+ });
65
+ }
66
+ //#endregion
67
+ //#region src/cli/upload/providers/alipay.ts
68
+ /** 校验支付宝身份密钥及上传版本,只在执行阶段加载并调用官方 SDK。 */
69
+ async function prepareAlipayUpload(context, action = "upload") {
70
+ const appId = requireUploadAppId({
71
+ ...context,
72
+ appid: context.env.ALIPAY_APP_ID?.trim() || context.appid
73
+ });
74
+ const identityKeyPath = path.resolve(context.cwd, requireUploadEnv(context, "ALIPAY_IDENTITY_KEY_PATH"));
75
+ if (action === "upload") {
76
+ if (!/^(?:0|[1-9]\d*)\.(?:0|[1-9]\d*)\.(?:0|[1-9]\d*)$/.test(context.version) || context.version.split(".").some((part) => Number(part) > 2147483647)) throw new Error("支付宝上传版本必须为 x.y.z 格式,各段不能有前导零且不能超过 2147483647。");
77
+ if (context.desc.length >= 200) throw new Error("支付宝上传描述必须少于 200 个字符。");
78
+ }
79
+ let identityKey;
80
+ try {
81
+ if (!(await stat(identityKeyPath)).isFile()) throw new Error("not a file");
82
+ identityKey = await readFile(identityKeyPath, "utf8");
83
+ } catch {
84
+ throw new Error("无法读取 ALIPAY_IDENTITY_KEY_PATH 指定的身份密钥文件;相对路径以项目根目录为基准。");
85
+ }
86
+ const secrets = [identityKey];
87
+ let identity;
88
+ try {
89
+ identity = JSON.parse(identityKey, (_key, value) => {
90
+ if (typeof value === "string" && value) secrets.push(value);
91
+ return value;
92
+ });
93
+ } catch {
94
+ throw new Error("ALIPAY_IDENTITY_KEY_PATH 必须指向从支付宝开放平台获取的 JSON 身份密钥文件。");
95
+ }
96
+ const alipay = identity && typeof identity === "object" && "alipay" in identity ? identity.alipay : void 0;
97
+ if (!alipay || typeof alipay !== "object" || !("authentication" in alipay) || !alipay.authentication) throw new Error("支付宝身份密钥文件缺少 alipay.authentication。请从开放平台重新获取身份密钥。");
98
+ return {
99
+ secrets,
100
+ async run() {
101
+ const sdk = await loadUploadPackage("minidev", context.cwd);
102
+ if (action === "preview") {
103
+ const result = await sdk.minidev.preview({
104
+ appId,
105
+ project: context.projectPath,
106
+ identityKeyPath,
107
+ clientType: "alipay"
108
+ });
109
+ const qrCodeUrl = typeof result?.qrcodeUrl === "string" ? result.qrcodeUrl.trim() : "";
110
+ if (!qrCodeUrl) throw new Error("支付宝预览未返回二维码地址。");
111
+ return { qrCodeUrl };
112
+ }
113
+ return sdk.minidev.upload({
114
+ appId,
115
+ project: context.projectPath,
116
+ identityKeyPath,
117
+ clientType: "alipay",
118
+ version: context.version,
119
+ versionDescription: context.desc,
120
+ experience: false
121
+ });
122
+ }
123
+ };
124
+ }
125
+ //#endregion
126
+ //#region src/cli/upload/providers/douyin.ts
127
+ /** 校验抖音项目与 Token 对应的 AppID,仅在执行阶段调用官方上传或预览 SDK。 */
128
+ async function prepareDouyinUpload(context, action = "upload") {
129
+ const token = requireUploadEnv(context, "TT_UPLOAD_TOKEN");
130
+ const appid = context.env.TT_APP_ID?.trim() || requireUploadAppId(context);
131
+ if (action === "upload" && !/^\d+\.\d+\.\d+$/.test(context.version)) throw new Error("抖音上传版本号必须为 x.y.z 格式。");
132
+ if (action === "upload" && !context.desc.trim()) throw new Error("抖音上传需要非空版本描述。");
133
+ if (JSON.parse(await readFile(path.join(context.projectPath, "project.config.json"), "utf8"))?.appid !== appid) throw new Error("抖音 project.config.json 的 appid 必须与 TT_APP_ID 或项目配置的 AppID 一致,禁止向其他小程序上传。");
134
+ return {
135
+ secrets: [token],
136
+ async run() {
137
+ const sdk = await loadUploadPackage("tt-ide-cli", context.cwd);
138
+ sdk.setAppConfig({
139
+ appid,
140
+ config: { token }
141
+ });
142
+ if (action === "preview") {
143
+ const result = await sdk.preview({
144
+ project: { path: context.projectPath },
145
+ page: {
146
+ path: "",
147
+ query: "",
148
+ scene: "",
149
+ launchFrom: "",
150
+ location: ""
151
+ },
152
+ qrcode: { format: null },
153
+ cache: true,
154
+ copyToClipboard: false
155
+ });
156
+ if (typeof result?.shortUrl !== "string" || !result.shortUrl.trim()) throw new Error("抖音预览未返回有效的预览链接。");
157
+ return { previewUrl: result.shortUrl.trim() };
158
+ }
159
+ return sdk.upload({
160
+ project: { path: context.projectPath },
161
+ version: context.version,
162
+ changeLog: context.desc,
163
+ qrcode: { format: null },
164
+ copyToClipboard: false
165
+ });
166
+ }
167
+ };
168
+ }
169
+ //#endregion
170
+ //#region src/cli/upload/providers/jd.ts
171
+ /** 京东 SDK 不解析 IDE 配置,需要将项目根目录转换为 app.json 所在目录。 */
172
+ async function prepareJdUpload(context, action = "upload") {
173
+ const privateKey = requireUploadEnv(context, "JD_PRIVATE_KEY");
174
+ let projectPath = context.projectPath;
175
+ const configText = await readFile(path.join(projectPath, "project.config.json"), "utf8").catch((error) => {
176
+ if (error.code === "ENOENT") return;
177
+ throw error;
178
+ });
179
+ if (configText !== void 0) {
180
+ let config;
181
+ try {
182
+ config = JSON.parse(configText);
183
+ } catch {
184
+ throw new Error("京东项目的 project.config.json 不是有效的 JSON。");
185
+ }
186
+ if (!config || typeof config !== "object" || Array.isArray(config)) throw new Error("京东项目的 project.config.json 必须是 JSON 对象。");
187
+ if ("miniprogramRoot" in config) {
188
+ if (typeof config.miniprogramRoot !== "string") throw new TypeError("京东项目配置的 miniprogramRoot 必须是字符串。");
189
+ projectPath = path.resolve(projectPath, config.miniprogramRoot);
190
+ }
191
+ }
192
+ try {
193
+ if (!(await stat(path.join(projectPath, "app.json"))).isFile()) throw new Error("not a file");
194
+ } catch {
195
+ throw new Error(`京东${action === "preview" ? "预览" : "上传"}目录缺少 app.json,请先构建并检查 project.config.json 的 miniprogramRoot。`);
196
+ }
197
+ return {
198
+ secrets: [privateKey],
199
+ async run() {
200
+ const ci = await loadUploadPackage("jd-miniprogram-ci", context.cwd);
201
+ if (action === "preview") {
202
+ const result = await ci.preview({
203
+ privateKey,
204
+ projectPath,
205
+ qrcodeFormat: "image",
206
+ ignores: ["node_modules/**/*"]
207
+ });
208
+ const qrCodeUrl = typeof result?.imgUrl === "string" ? result.imgUrl.trim() : "";
209
+ if (!qrCodeUrl) throw new Error("京东预览未返回二维码地址。");
210
+ return { qrCodeUrl };
211
+ }
212
+ return ci.upload({
213
+ privateKey,
214
+ projectPath,
215
+ uv: context.version,
216
+ desc: context.desc,
217
+ ignores: ["node_modules/**/*"]
218
+ });
219
+ }
220
+ };
221
+ }
222
+ //#endregion
223
+ //#region src/cli/upload/providers/swan.ts
224
+ /** 使用官方百度 CLI 上传或预览普通小程序,JSON 模式会在认证失败时拒绝交互登录。 */
225
+ async function prepareSwanUpload(context, action = "upload") {
226
+ const token = requireUploadEnv(context, "SWAN_UPLOAD_TOKEN");
227
+ const minSwanVersion = requireUploadEnv(context, "SWAN_MIN_VERSION");
228
+ const appid = requireUploadAppId(context);
229
+ if (action === "upload" && !/^\d+(?:\.\d+){1,3}$/.test(context.version)) throw new Error("百度上传版本号必须由 2 至 4 段数字组成,例如 1.0.0。");
230
+ const projectConfig = JSON.parse(await readFile(path.join(context.projectPath, "project.swan.json"), "utf8"));
231
+ if (projectConfig?.appid !== appid) throw new Error("百度 project.swan.json 的 appid 必须与项目配置的 AppID 一致,禁止向其他小程序上传。");
232
+ if (projectConfig.developType && projectConfig.developType !== "normal") throw new Error("百度统一上传仅支持普通小程序,不执行插件、动态库或扩展的发布。");
233
+ const secrets = [token];
234
+ return {
235
+ secrets,
236
+ async run() {
237
+ if (action === "preview") {
238
+ const output = await runUploadCli({
239
+ ...context,
240
+ env: {
241
+ ...context.env,
242
+ IS_NODE_JS: "true"
243
+ }
244
+ }, "swan-toolkit", "swan", [
245
+ "preview",
246
+ "--project-path",
247
+ context.projectPath,
248
+ "--token",
249
+ token,
250
+ "--min-swan-version",
251
+ minSwanVersion,
252
+ "--json"
253
+ ], secrets, true);
254
+ let result;
255
+ try {
256
+ const marker = /^NODE_JS_ENV_RESULT:/m.exec(output);
257
+ if (!marker) throw new Error("缺少官方 JSON 结果标记。");
258
+ result = JSON.parse(output.slice(marker.index + marker[0].length));
259
+ } catch {
260
+ throw new Error("百度预览未返回有效的 JSON 结果。");
261
+ }
262
+ const list = result?.list;
263
+ const previewUrl = Array.isArray(list) ? list[list.length - 1]?.url : void 0;
264
+ if (typeof previewUrl !== "string" || !previewUrl.trim()) throw new Error("百度预览未返回有效的预览链接。");
265
+ return { previewUrl: previewUrl.trim() };
266
+ }
267
+ return runUploadCli(context, "swan-toolkit", "swan", [
268
+ "upload",
269
+ "--project-path",
270
+ context.projectPath,
271
+ "--token",
272
+ token,
273
+ "--release-version",
274
+ context.version,
275
+ "--min-swan-version",
276
+ minSwanVersion,
277
+ "--desc",
278
+ context.desc,
279
+ "--json"
280
+ ], secrets);
281
+ }
282
+ };
283
+ }
284
+ //#endregion
285
+ //#region src/cli/upload/providers/wechat.ts
286
+ /** 校验微信凭据,SDK 自行读取 IDE 项目中的 miniprogramRoot。 */
287
+ async function prepareWechatUpload(context, action = "upload") {
288
+ const appid = requireUploadAppId({
289
+ ...context,
290
+ appid: context.env.WEAPP_CI_APPID?.trim() || context.appid
291
+ });
292
+ const keyPath = path.resolve(context.cwd, requireUploadEnv(context, "WEAPP_CI_PRIVATE_KEY_PATH"));
293
+ const robotValue = context.env.WEAPP_CI_ROBOT?.trim();
294
+ if (robotValue !== void 0 && !/^0*(?:[1-9]|[12]\d|30)$/.test(robotValue)) throw new Error("WEAPP_CI_ROBOT 必须是 1 到 30 之间的整数。");
295
+ const robot = robotValue === void 0 ? void 0 : Number(robotValue);
296
+ let privateKey;
297
+ try {
298
+ if (!(await stat(keyPath)).isFile()) throw new Error("not a file");
299
+ privateKey = await readFile(keyPath, "utf8");
300
+ } catch {
301
+ throw new Error("无法读取 WEAPP_CI_PRIVATE_KEY_PATH 指定的私钥文件;相对路径以项目根目录为基准。");
302
+ }
303
+ if (!privateKey.trim()) throw new Error("WEAPP_CI_PRIVATE_KEY_PATH 指定的私钥文件不能为空。");
304
+ return {
305
+ secrets: [privateKey, privateKey.trim()],
306
+ async run() {
307
+ const ci = await loadUploadPackage("miniprogram-ci", context.cwd);
308
+ const project = new ci.Project({
309
+ appid,
310
+ type: "miniProgram",
311
+ projectPath: context.projectPath,
312
+ privateKey,
313
+ ignores: ["node_modules/**/*"]
314
+ });
315
+ if (action === "preview") {
316
+ const qrCodePath = context.qrCodePath;
317
+ if (!qrCodePath) throw new Error("微信预览缺少二维码输出路径。");
318
+ await mkdir(path.dirname(qrCodePath), { recursive: true });
319
+ await ci.preview({
320
+ project,
321
+ desc: context.desc,
322
+ robot,
323
+ setting: { useProjectConfig: true },
324
+ qrcodeFormat: "image",
325
+ qrcodeOutputDest: qrCodePath
326
+ });
327
+ const qrCodeFile = await stat(qrCodePath).catch(() => void 0);
328
+ if (!qrCodeFile?.isFile() || qrCodeFile.size === 0) throw new Error("微信预览未生成有效的二维码文件。");
329
+ return { qrCodeFile: qrCodePath };
330
+ }
331
+ return ci.upload({
332
+ project,
333
+ version: context.version,
334
+ desc: context.desc,
335
+ robot,
336
+ setting: { useProjectConfig: true }
337
+ });
338
+ }
339
+ };
340
+ }
341
+ //#endregion
342
+ //#region src/cli/upload/providers/xhs.ts
343
+ /** 使用独立的官方 CI 实例上传或预览小红书项目,禁止回退到扫码登录。 */
344
+ async function prepareXhsUpload(context, action = "upload") {
345
+ const token = requireUploadEnv(context, "XHS_UPLOAD_TOKEN");
346
+ const appid = context.env.XHS_APP_ID?.trim() || requireUploadAppId(context);
347
+ if (action === "upload" && (!context.version.trim() || !context.desc.trim())) throw new Error("小红书上传需要非空版本号和版本描述。");
348
+ if (JSON.parse(await readFile(path.join(context.projectPath, "project.config.json"), "utf8"))?.appid !== appid) throw new Error("小红书 project.config.json 的 appid 必须与 XHS_APP_ID 或项目配置的 AppID 一致,禁止向其他小程序上传。");
349
+ return {
350
+ secrets: [token],
351
+ async run() {
352
+ const { CI } = await loadUploadPackage("xhs-mp-cli/dist/ci.js", context.cwd);
353
+ const sdk = new CI();
354
+ sdk.core.login = async () => {
355
+ throw new Error("小红书上传与预览仅支持 Token 认证,禁止扫码登录,请检查 XHS_UPLOAD_TOKEN 和项目 AppID。");
356
+ };
357
+ sdk.setAppConfig({
358
+ appId: appid,
359
+ config: { token }
360
+ });
361
+ if (action === "preview") {
362
+ const result = await sdk.preview({
363
+ project: { projectPath: context.projectPath },
364
+ verbose: false
365
+ });
366
+ if (typeof result?.qrcodeUrl !== "string" || !result.qrcodeUrl.trim()) throw new Error("小红书预览未返回有效的预览链接。");
367
+ return { previewUrl: result.qrcodeUrl.trim() };
368
+ }
369
+ return sdk.upload({
370
+ project: { projectPath: context.projectPath },
371
+ version: context.version,
372
+ desc: context.desc,
373
+ verbose: false
374
+ });
375
+ }
376
+ };
377
+ }
378
+ //#endregion
379
+ //#region src/cli/upload/index.ts
380
+ const providers = {
381
+ weapp: prepareWechatUpload,
382
+ alipay: prepareAlipayUpload,
383
+ tt: prepareDouyinUpload,
384
+ xhs: prepareXhsUpload,
385
+ jd: prepareJdUpload,
386
+ swan: prepareSwanUpload
387
+ };
388
+ function resolveUploadPlatforms(value) {
389
+ if (value === void 0) return [void 0];
390
+ if (value === "all") return Object.keys(providers);
391
+ const platforms = value.split(",").map((name) => {
392
+ const platform = resolveMiniPlatform(name);
393
+ if (!platform || !Object.hasOwn(providers, platform)) throw new Error(`不支持上传或预览平台 "${name}",可选:${Object.keys(providers).join(", ")} 或 all。`);
394
+ return platform;
395
+ });
396
+ return [...new Set(platforms)];
397
+ }
398
+ function prepareUpload(platform, context, action = "upload") {
399
+ if (!Object.hasOwn(providers, platform)) throw new Error(`不支持上传或预览平台 "${platform}"。`);
400
+ return providers[platform](context, action);
401
+ }
402
+ //#endregion
403
+ export { resolveUploadPlatforms as n, redactUploadSecrets as r, prepareUpload as t };
@@ -0,0 +1 @@
1
+ export {}
@@ -0,0 +1,28 @@
1
+ import { t as prepareUpload } from "./upload-D0RcEWrq.mjs";
2
+ import process from "node:process";
3
+ //#region src/cli/upload/worker.ts
4
+ process.once("disconnect", () => process.exit(1));
5
+ process.once("SIGINT", () => process.exit(1));
6
+ process.once("SIGTERM", () => process.exit(1));
7
+ try {
8
+ let input = "";
9
+ for await (const chunk of process.stdin) input += String(chunk);
10
+ const { platform, context, action } = JSON.parse(input);
11
+ if (action !== "upload" && action !== "preview") throw new Error("不支持的上传或预览操作。");
12
+ const result = await (await prepareUpload(platform, context, action)).run();
13
+ const finish = () => process.stderr.write("", () => process.stdout.write("", () => process.exit(0)));
14
+ if (process.send) process.send({
15
+ type: "completed",
16
+ action,
17
+ result: action === "preview" ? result : void 0
18
+ }, (error) => {
19
+ if (error) process.exit(1);
20
+ finish();
21
+ });
22
+ else finish();
23
+ } catch (error) {
24
+ const message = error instanceof Error ? error.message : String(error);
25
+ process.stderr.write(`${message}\n`, () => process.exit(1));
26
+ }
27
+ //#endregion
28
+ export {};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "weapp-vite",
3
3
  "type": "module",
4
- "version": "7.3.0",
4
+ "version": "7.4.0",
5
5
  "description": "weapp-vite 一个现代化的小程序打包工具",
6
6
  "author": "ice breaker <1324318532@qq.com>",
7
7
  "license": "MIT",
@@ -36,6 +36,14 @@
36
36
  "types": "./dist/config.d.mts",
37
37
  "import": "./dist/config.mjs"
38
38
  },
39
+ "./dashboard": {
40
+ "types": "./dist/dashboard.d.mts",
41
+ "import": "./dist/dashboard.mjs"
42
+ },
43
+ "./dashboard/vite": {
44
+ "types": "./dist/dashboard/vite.d.mts",
45
+ "import": "./dist/dashboard/vite.mjs"
46
+ },
39
47
  "./json": {
40
48
  "types": "./dist/json.d.mts",
41
49
  "import": "./dist/json.mjs"
@@ -128,6 +136,14 @@
128
136
  "access": "public",
129
137
  "registry": "https://registry.npmjs.org"
130
138
  },
139
+ "peerDependencies": {
140
+ "@vitejs/devtools-kit": "^0.7.6"
141
+ },
142
+ "peerDependenciesMeta": {
143
+ "@vitejs/devtools-kit": {
144
+ "optional": true
145
+ }
146
+ },
131
147
  "dependencies": {
132
148
  "@babel/preset-env": "^8.0.6",
133
149
  "@babel/preset-typescript": "^8.0.1",
@@ -135,24 +151,28 @@
135
151
  "@vercel/detect-agent": "^1.2.5",
136
152
  "@volar/typescript": "^2.4.28",
137
153
  "@vue/language-core": "^3.3.11",
138
- "@weapp-core/constants": "0.2.7",
139
- "@weapp-core/init": "6.0.23",
140
- "@weapp-core/logger": "3.1.7",
141
- "@weapp-core/schematics": "6.2.7",
142
- "@weapp-core/shared": "3.2.6",
143
- "@weapp-vite/ast": "7.3.0",
144
- "@weapp-vite/eslint": "0.2.8",
145
- "@weapp-vite/i18n": "0.2.7",
146
- "@weapp-vite/mcp": "1.5.7",
147
- "@weapp-vite/miniprogram-automator": "1.2.22",
148
- "@weapp-vite/volar": "2.1.11",
149
- "@weapp-vite/web": "1.5.6",
150
- "@wevu/api": "0.3.6",
151
- "@wevu/web-apis": "1.3.3",
154
+ "@weapp-core/constants": "0.3.0",
155
+ "@weapp-core/init": "6.0.24",
156
+ "@weapp-core/logger": "3.1.8",
157
+ "@weapp-core/schematics": "6.2.8",
158
+ "@weapp-core/shared": "3.2.7",
159
+ "@weapp-tailwindcss/engine": "0.1.3",
160
+ "@weapp-vite/ast": "7.4.0",
161
+ "@weapp-vite/eslint": "0.2.9",
162
+ "@weapp-vite/hmr": "0.2.0",
163
+ "@weapp-vite/i18n": "0.2.8",
164
+ "@weapp-vite/mcp": "1.5.8",
165
+ "@weapp-vite/miniprogram-automator": "1.2.23",
166
+ "@weapp-vite/tailwindcss": "0.2.0",
167
+ "@weapp-vite/volar": "2.1.12",
168
+ "@weapp-vite/web": "1.6.0",
169
+ "@wevu/api": "0.3.7",
170
+ "@wevu/web-apis": "1.3.4",
152
171
  "cac": "^7.0.0",
153
172
  "chokidar": "^5.0.0",
154
173
  "comment-json": "^5.0.0",
155
- "devframe": "1.0.0",
174
+ "devframe": "1.1.0",
175
+ "dotenv-expand": "^12.0.3",
156
176
  "fdir": "^6.5.0",
157
177
  "htmlparser2": "^12.0.0",
158
178
  "local-pkg": "^1.2.1",
@@ -167,24 +187,26 @@
167
187
  "postcss": "^8.5.28",
168
188
  "postcss-selector-parser": "^7.1.6",
169
189
  "postcss-value-parser": "4.2.0",
170
- "rolldown": "1.2.10",
190
+ "rolldown": "1.2.11",
171
191
  "rolldown-plugin-dts": "0.28.6",
172
- "rolldown-require": "2.0.33",
192
+ "rolldown-require": "2.0.34",
173
193
  "semver": "^7.8.5",
194
+ "tinyexec": "^1.3.1",
174
195
  "typescript": "^6.0.3",
175
- "vite": "8.3.0",
176
- "vite-plugin-performance": "2.0.6",
196
+ "vite": "8.3.1",
197
+ "vite-plugin-performance": "2.0.7",
177
198
  "vite-tsconfig-paths": "^6.1.1",
178
199
  "vue": "^3.5.43",
179
200
  "vue-tsc": "^3.3.11",
180
- "weapp-ide-cli": "6.1.8",
181
- "weapp-tailwindcss": "^5.5.8",
182
- "wevu": "7.3.0"
201
+ "weapp-ide-cli": "6.1.9",
202
+ "weapp-tailwindcss": "^5.5.11",
203
+ "wevu": "7.4.0"
183
204
  },
184
205
  "optionalDependencies": {
185
206
  "@swc/core": "^1.16.2"
186
207
  },
187
208
  "devDependencies": {
209
+ "@vitejs/devtools-kit": "0.7.6",
188
210
  "oxc-parser": "^0.151.0",
189
211
  "oxc-walker": "^1.1.1",
190
212
  "tailwindcss": "^4.3.3",
@@ -203,7 +225,7 @@
203
225
  "benchmark:auto-import:ci": "node --import tsx scripts/benchmark-auto-import-ci.ts",
204
226
  "test:dev": "vitest",
205
227
  "test": "vitest run",
206
- "test:types": "cd test-d/auto-import-presets && tsd --files \"**/*.test-d.ts\" && cd ../auto-routes-define-app-json && tsd --files \"**/*.test-d.ts\" && cd ../config-define-config && tsd --files \"**/*.test-d.ts\" && cd ../config-public-types && tsd --files \"**/*.test-d.ts\" && cd ../i18n-public-types && tsd --files \"**/*.test-d.ts\" && cd ../internal-src-types && tsd --files \"**/*.test-d.ts\" && cd ../resolvers-public-types && tsd --files \"**/*.test-d.ts\" && cd ../runtime-public-types && tsd --files \"**/*.test-d.ts\" && cd ../test-artifact-public-types && tsd --files \"**/*.test-d.ts\"",
228
+ "test:types": "cd test-d/auto-import-presets && tsd --files \"**/*.test-d.ts\" && cd ../auto-routes-define-app-json && tsd --files \"**/*.test-d.ts\" && cd ../config-define-config && tsd --files \"**/*.test-d.ts\" && cd ../config-public-types && tsd --files \"**/*.test-d.ts\" && cd ../upload-config && tsd --files \"**/*.test-d.ts\" && cd ../i18n-public-types && tsd --files \"**/*.test-d.ts\" && cd ../internal-src-types && tsd --files \"**/*.test-d.ts\" && cd ../resolvers-public-types && tsd --files \"**/*.test-d.ts\" && cd ../runtime-public-types && tsd --files \"**/*.test-d.ts\" && cd ../test-artifact-public-types && tsd --files \"**/*.test-d.ts\" && cd ../dashboard-public-types && tsd --files \"**/*.test-d.ts\"",
207
229
  "lint:src": "eslint src --ext .ts",
208
230
  "typecheck": "tsc -p tsconfig.json --noEmit",
209
231
  "sync": "cnpm sync weapp-vite"
@@ -1,2 +0,0 @@
1
- import { t as extractConfigFromVue } from "./file-CKB0Tn8Z.mjs";
2
- export { extractConfigFromVue };
@@ -1,2 +0,0 @@
1
- import { n as getCompilerContext } from "./createContext-cqr9Y4EV.mjs";
2
- export { getCompilerContext };