@chuckcchen/vite-plugin 0.0.3 → 0.0.4

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/core.js CHANGED
@@ -1,101 +1,111 @@
1
1
  /**
2
- * EdgeOne Vite Plugin Adapter - 核心插件模块
2
+ * EdgeOne Vite Plugin Adapter - Core Plugin Module
3
3
  *
4
- * 本模块是整个适配器系统的核心,负责:
5
- * - 构建产物检测:自动识别客户端和服务端的构建输出
6
- * - 静态资源复制:将客户端构建产物复制到部署目录
7
- * - 服务端代码打包:将服务端代码打包成单文件
8
- * - 路由配置生成:根据框架特性生成路由信息
9
- * - Meta.json 生成:生成 EdgeOne 部署所需的配置文件
4
+ * This module is the core of the adapter system, responsible for:
5
+ * - Build artifacts detection: Auto-detect client and server build outputs
6
+ * - Static assets copying: Copy client build artifacts to deployment directory
7
+ * - Server code bundling: Bundle server code into a single file
8
+ * - Route config generation: Generate route info based on framework features
9
+ * - Meta.json generation: Generate configuration file for EdgeOne deployment
10
10
  */
11
11
  import path from "path";
12
12
  import { createLogger, pathExists, copyDirectory, ensureDirectory, writeFile, } from "./utils.js";
13
13
  import { bundleServerCode, createServerWrapper, cleanupWrapper, } from "./bundler.js";
14
14
  import fs from "fs/promises";
15
15
  /**
16
- * 创建 EdgeOne 核心适配器插件
16
+ * Create EdgeOne core adapter plugin
17
17
  *
18
- * 这是创建适配器的主要入口函数,返回一个 Vite 插件实例。
19
- * 该插件会在 Vite 构建完成后执行,处理构建产物并生成部署配置。
18
+ * This is the main entry function for creating adapters, returns a Vite plugin instance.
19
+ * The plugin executes after Vite build completes, processing build artifacts and generating deployment config.
20
20
  *
21
- * @param options - 适配器配置选项
22
- * @returns Vite 插件实例
21
+ * @param options - Adapter configuration options
22
+ * @returns Vite plugin instance
23
23
  *
24
24
  * @example
25
- * // 基本用法
25
+ * // Basic usage
26
26
  * createCoreAdapter({ verbose: true })
27
27
  *
28
28
  * @example
29
- * // 使用框架适配器
29
+ * // Using framework adapter
30
30
  * createCoreAdapter({
31
31
  * adapter: myFrameworkAdapter,
32
32
  * outputDir: '.edgeone'
33
33
  * })
34
34
  */
35
35
  export function createCoreAdapter(options = {}) {
36
- // 解构配置选项,设置默认值
37
- const { verbose = false, // 是否启用详细日志
38
- outputDir = ".edgeone", // 输出目录
39
- cleanOutput = true, // 是否在构建前清理输出目录
40
- adapter, // 框架适配器实例
41
- hooks = {}, // 自定义钩子函数
42
- ssr: ssrOption, // SSR 模式配置
36
+ // Destructure config options with defaults
37
+ const { verbose = false, // Enable verbose logging
38
+ outputDir = ".edgeone", // Output directory
39
+ cleanOutput = true, // Clean output directory before build
40
+ adapter, // Framework adapter instance
41
+ hooks = {}, // Custom hook functions
42
+ ssr: ssrOption, // SSR mode configuration
43
43
  } = options;
44
- // 创建日志记录器
44
+ // Create logger instance
45
45
  const logger = createLogger(verbose);
46
- // 插件状态变量
47
- let projectRoot; // 项目根目录
48
- let viteConfig; // Vite 解析后的配置
49
- let isSSR = false; // 是否为 SSR 模式
50
- let isBuildingForSSR = false; // 当前是否正在构建 SSR
46
+ // Plugin state variables
47
+ let projectRoot; // Project root directory
48
+ let viteConfig; // Vite resolved config
49
+ let isSSR = false; // Whether in SSR mode
50
+ // Track whether we've already processed (to avoid duplicate processing)
51
+ let hasProcessed = false;
51
52
  return {
52
- // 插件名称,用于调试和日志
53
+ // Plugin name for debugging and logging
53
54
  name: "vite-plugin-edgeone-adapter",
54
- // 仅在构建时应用此插件
55
+ // Only apply this plugin during build
55
56
  apply: "build",
56
- // 在其他插件之后执行(post 阶段)
57
+ // Execute after other plugins (post phase)
57
58
  enforce: "post",
58
59
  /**
59
- * Vite 配置解析完成后的钩子
60
- * 在这里获取项目配置并检测 SSR 模式
60
+ * Hook called after Vite config is resolved
61
+ * Captures project config and detects SSR mode here
61
62
  */
62
63
  configResolved(config) {
63
64
  projectRoot = config.root;
64
65
  viteConfig = config;
65
- // 检测当前构建是否为 SSR 构建
66
- // Vite SSR 模式下会设置 build.ssr
67
- isBuildingForSSR =
68
- config.build.ssr !== false && config.build.ssr !== undefined;
69
- // 确定最终的 SSR 状态
70
- // 优先使用显式配置,否则从 Vite 配置自动检测
66
+ // Determine final SSR state
67
+ // Prefer explicit config, otherwise auto-detect from Vite config
71
68
  if (ssrOption !== undefined) {
72
69
  isSSR = ssrOption;
73
70
  }
74
71
  else {
75
- isSSR = isBuildingForSSR;
72
+ // Auto-detect SSR mode from Vite config
73
+ const traditionalSSR = config.build.ssr !== false && config.build.ssr !== undefined;
74
+ isSSR = traditionalSSR;
76
75
  }
77
- // 输出调试信息
78
- logger.verbose("项目根目录:", projectRoot);
79
- logger.verbose("构建类型:", isBuildingForSSR ? "SSR" : "客户端");
80
- logger.verbose("SSR 模式:", isSSR);
76
+ // Output debug info
77
+ logger.verbose("Project root:", projectRoot);
78
+ logger.verbose("SSR mode:", isSSR);
81
79
  },
82
80
  /**
83
- * 构建产物写入完成后的钩子
84
- * 这是适配器的主要处理逻辑所在
81
+ * Hook called after build artifacts are written
82
+ * This is where the main adapter processing logic resides
85
83
  */
86
- async writeBundle() {
87
- // 如果是 SSR 模式但当前正在构建客户端,则跳过
88
- // 等待 SSR 构建完成后再处理
89
- // 这是因为 Vite SSR 构建会先构建客户端,再构建服务端
84
+ async writeBundle(options, _bundle) {
85
+ // Get the actual output directory from writeBundle options
86
+ // This is more reliable than viteConfig.build.outDir in Vite 7 environment mode
87
+ const actualOutDir = options.dir || viteConfig.build.outDir;
88
+ // Detect if current build is SSR build based on output directory
89
+ const isBuildingForSSR = detectSSRBuildFromOutDir(actualOutDir);
90
+ logger.verbose("Build type:", isBuildingForSSR ? "SSR" : "Client");
91
+ logger.verbose("Build outDir:", actualOutDir);
92
+ // If in SSR mode but currently building client, skip
93
+ // Wait for SSR build to complete before processing
90
94
  if (isSSR && !isBuildingForSSR) {
91
- logger.verbose("跳过处理(等待 SSR 构建完成)");
95
+ logger.verbose("Skipping processing (waiting for SSR build to complete)");
92
96
  return;
93
97
  }
94
- // 短暂延迟,确保所有文件都已写入磁盘
98
+ // Prevent duplicate processing
99
+ if (hasProcessed) {
100
+ logger.verbose("Skipping processing (already processed)");
101
+ return;
102
+ }
103
+ hasProcessed = true;
104
+ // Brief delay to ensure all files are written to disk
95
105
  await new Promise((resolve) => setTimeout(resolve, 100));
96
106
  try {
97
- // 创建构建上下文对象
98
- // 该对象会传递给所有钩子函数和适配器方法
107
+ // Create build context object
108
+ // This object is passed to all hooks and adapter methods
99
109
  const context = {
100
110
  projectRoot,
101
111
  outputDir,
@@ -103,74 +113,93 @@ export function createCoreAdapter(options = {}) {
103
113
  viteConfig,
104
114
  logger,
105
115
  };
106
- // 调用构建前钩子
116
+ // Call beforeBuild hook
107
117
  if (hooks.beforeBuild) {
108
118
  await hooks.beforeBuild(context);
109
119
  }
110
- // 检测构建产物
120
+ // Detect build artifacts
111
121
  let artifacts;
112
122
  if (adapter) {
113
- // 使用框架适配器检测
123
+ // Use framework adapter for detection
114
124
  const shouldUse = await adapter.detect(context);
115
125
  if (!shouldUse) {
116
- logger.warn(`适配器 ${adapter.name} 检测失败,使用默认配置`);
126
+ logger.warn(`Adapter ${adapter.name} detection failed, using default config`);
117
127
  }
118
128
  artifacts = await adapter.getBuildArtifacts(context);
119
129
  }
120
130
  else {
121
- // 使用默认检测逻辑
131
+ // Use default detection logic
122
132
  artifacts = await detectBuildArtifacts(context);
123
133
  }
124
- // 调用构建后钩子
134
+ // Call afterBuild hook
125
135
  if (hooks.afterBuild) {
126
136
  await hooks.afterBuild(context, artifacts);
127
137
  }
128
- // 清理输出目录
138
+ // Clean output directory
129
139
  if (cleanOutput) {
130
140
  await cleanOutputDir(context);
131
141
  }
132
- // 复制静态资源
142
+ // Copy static assets
133
143
  if (artifacts.clientDir) {
134
144
  await copyStaticAssets(context, artifacts.clientDir);
135
145
  }
136
- // 打包服务端代码(仅 SSR 模式)
146
+ // Bundle server code (SSR mode only)
137
147
  if (isSSR && artifacts.serverEntry) {
138
148
  await bundleServer(context, artifacts, adapter);
139
149
  }
140
- // 生成 meta.json 配置文件
150
+ // Generate meta.json config file
141
151
  await generateMetaJson(context, adapter);
142
- logger.verbose("EdgeOne 适配器处理完成");
152
+ logger.verbose("EdgeOne adapter processing complete");
143
153
  }
144
154
  catch (error) {
145
- logger.error("EdgeOne 适配器处理失败:", error);
155
+ logger.error("EdgeOne adapter processing failed:", error);
146
156
  throw error;
147
157
  }
148
158
  },
149
159
  };
150
160
  }
151
161
  /**
152
- * 使用默认路径检测构建产物
162
+ * Detect if current build is SSR build based on output directory
163
+ *
164
+ * @param outDir - Output directory path
165
+ * @returns Whether this is an SSR build
166
+ */
167
+ function detectSSRBuildFromOutDir(outDir) {
168
+ if (!outDir)
169
+ return false;
170
+ // Normalize path separators
171
+ const normalizedOutDir = outDir.replace(/\\/g, "/");
172
+ // Check if output directory indicates server/SSR build
173
+ return (normalizedOutDir.endsWith("/server") ||
174
+ normalizedOutDir === "dist/server" ||
175
+ normalizedOutDir === "server" ||
176
+ normalizedOutDir.includes("/server/") ||
177
+ normalizedOutDir.endsWith("/ssr") ||
178
+ normalizedOutDir === "ssr");
179
+ }
180
+ /**
181
+ * Detect build artifacts using default paths
153
182
  *
154
- * 当没有提供框架适配器时,使用此函数自动检测常见的构建输出路径。
155
- * 支持检测 distbuild 等常见目录结构。
183
+ * When no framework adapter is provided, use this function to auto-detect
184
+ * common build output paths. Supports detection of dist, build, etc.
156
185
  *
157
- * @param context - 构建上下文
158
- * @returns 检测到的构建产物信息
186
+ * @param context - Build context
187
+ * @returns Detected build artifacts info
159
188
  */
160
189
  async function detectBuildArtifacts(context) {
161
190
  const { projectRoot, logger } = context;
162
- // 常见的客户端构建输出路径(按优先级排序)
191
+ // Common client build output paths (sorted by priority)
163
192
  const clientPaths = [
164
- path.join(projectRoot, "dist"), // Vite 默认
165
- path.join(projectRoot, "build/client"), // React Router 等框架
166
- path.join(projectRoot, "build"), // Create React App
193
+ path.join(projectRoot, "dist"), // Vite default
194
+ path.join(projectRoot, "build/client"), // React Router and other frameworks
195
+ path.join(projectRoot, "build"), // Create React App, etc.
167
196
  ];
168
- // 常见的服务端构建输出路径
197
+ // Common server build output paths
169
198
  const serverPaths = [
170
199
  path.join(projectRoot, "dist/server"),
171
200
  path.join(projectRoot, "build/server"),
172
201
  ];
173
- // 常见的服务端入口文件路径
202
+ // Common server entry file paths
174
203
  const serverEntryPaths = [
175
204
  path.join(projectRoot, "dist/server/index.js"),
176
205
  path.join(projectRoot, "build/server/index.js"),
@@ -178,27 +207,27 @@ async function detectBuildArtifacts(context) {
178
207
  let clientDir = null;
179
208
  let serverDir = null;
180
209
  let serverEntry = null;
181
- // 查找客户端构建目录
210
+ // Find client build directory
182
211
  for (const p of clientPaths) {
183
212
  if (await pathExists(p)) {
184
213
  clientDir = p;
185
- logger.verbose(`找到客户端构建目录: ${p}`);
214
+ logger.verbose(`Found client build directory: ${p}`);
186
215
  break;
187
216
  }
188
217
  }
189
- // 查找服务端构建目录
218
+ // Find server build directory
190
219
  for (const p of serverPaths) {
191
220
  if (await pathExists(p)) {
192
221
  serverDir = p;
193
- logger.verbose(`找到服务端构建目录: ${p}`);
222
+ logger.verbose(`Found server build directory: ${p}`);
194
223
  break;
195
224
  }
196
225
  }
197
- // 查找服务端入口文件
226
+ // Find server entry file
198
227
  for (const p of serverEntryPaths) {
199
228
  if (await pathExists(p)) {
200
229
  serverEntry = p;
201
- logger.verbose(`找到服务端入口文件: ${p}`);
230
+ logger.verbose(`Found server entry file: ${p}`);
202
231
  break;
203
232
  }
204
233
  }
@@ -206,179 +235,179 @@ async function detectBuildArtifacts(context) {
206
235
  clientDir,
207
236
  serverDir,
208
237
  serverEntry,
209
- assetsDir: clientDir, // 静态资源目录通常与客户端目录相同
238
+ assetsDir: clientDir, // Assets directory is usually same as client directory
210
239
  };
211
240
  }
212
241
  /**
213
- * 清理输出目录
242
+ * Clean output directory
214
243
  *
215
- * 在每次构建前清理之前的输出,确保输出目录是干净的。
216
- * 只清理特定的子目录,不会删除整个输出目录。
244
+ * Clean previous output before each build to ensure clean output directory.
245
+ * Only cleans specific subdirectories, not the entire output directory.
217
246
  *
218
- * @param context - 构建上下文
247
+ * @param context - Build context
219
248
  */
220
249
  async function cleanOutputDir(context) {
221
250
  const { projectRoot, outputDir, logger } = context;
222
251
  const outputPath = path.join(projectRoot, outputDir);
223
- // 需要清理的路径列表
252
+ // Paths to clean
224
253
  const pathsToClean = [
225
- path.join(outputPath, "assets"), // 静态资源目录
226
- path.join(outputPath, "server-handler"), // 服务端处理器目录
227
- path.join(outputPath, "meta.json"), // 元数据配置文件
254
+ path.join(outputPath, "assets"), // Static assets directory
255
+ path.join(outputPath, "server-handler"), // Server handler directory
256
+ path.join(outputPath, "meta.json"), // Metadata config file
228
257
  ];
229
- // 逐个删除
258
+ // Delete each path
230
259
  for (const p of pathsToClean) {
231
260
  try {
232
261
  await fs.rm(p, { recursive: true, force: true });
233
262
  }
234
263
  catch {
235
- // 忽略删除错误(如路径不存在)
264
+ // Ignore delete errors (e.g. path doesn't exist)
236
265
  }
237
266
  }
238
- // 确保输出目录存在
267
+ // Ensure output directory exists
239
268
  await ensureDirectory(outputPath);
240
- logger.verbose("已清理输出目录");
269
+ logger.verbose("Output directory cleaned");
241
270
  }
242
271
  /**
243
- * 复制静态资源到输出目录
272
+ * Copy static assets to output directory
244
273
  *
245
- * 将客户端构建产物(HTMLCSSJS、图片等)复制到部署目录。
246
- * 这些资源将由 EdgeOne CDN 直接提供服务。
274
+ * Copy client build artifacts (HTML, CSS, JS, images, etc.) to deployment directory.
275
+ * These assets will be served directly by EdgeOne CDN.
247
276
  *
248
- * @param context - 构建上下文
249
- * @param clientDir - 客户端构建目录路径
277
+ * @param context - Build context
278
+ * @param clientDir - Client build directory path
250
279
  */
251
280
  async function copyStaticAssets(context, clientDir) {
252
281
  const { projectRoot, outputDir, logger } = context;
253
- // 目标路径:.edgeone/assets
282
+ // Target path: .edgeone/assets
254
283
  const targetPath = path.join(projectRoot, outputDir, "assets");
255
284
  await copyDirectory(clientDir, targetPath);
256
- logger.verbose(`已复制静态资源到 ${outputDir}/assets`);
285
+ logger.verbose(`Static assets copied to ${outputDir}/assets`);
257
286
  }
258
287
  /**
259
- * 打包服务端代码
288
+ * Bundle server code
260
289
  *
261
- * 将框架的服务端构建产物打包成单个 JavaScript 文件,
262
- * 以便在 EdgeOne 边缘函数环境中运行。
290
+ * Bundle framework's server build artifacts into a single JavaScript file
291
+ * for running in EdgeOne edge function environment.
263
292
  *
264
- * 处理流程:
265
- * 1. 创建服务端包装器(处理请求转换)
266
- * 2. 使用 esbuild 打包
267
- * 3. 清理临时文件
293
+ * Processing flow:
294
+ * 1. Create server wrapper (handles request conversion)
295
+ * 2. Bundle with esbuild
296
+ * 3. Cleanup temporary files
268
297
  *
269
- * @param context - 构建上下文
270
- * @param artifacts - 构建产物信息
271
- * @param adapter - 框架适配器(可选)
298
+ * @param context - Build context
299
+ * @param artifacts - Build artifacts info
300
+ * @param adapter - Framework adapter (optional)
272
301
  */
273
302
  async function bundleServer(context, artifacts, adapter) {
274
303
  const { projectRoot, outputDir, logger } = context;
275
- // 检查服务端入口是否存在
304
+ // Check if server entry exists
276
305
  if (!artifacts.serverEntry) {
277
- logger.warn("未找到服务端入口文件,跳过服务端打包");
306
+ logger.warn("Server entry file not found, skipping server bundling");
278
307
  return;
279
308
  }
280
- // 输出路径配置
309
+ // Output path configuration
281
310
  const outputPath = path.join(projectRoot, outputDir, "server-handler");
282
311
  const outputFile = path.join(outputPath, "handler.js");
283
- // 获取适配器钩子
312
+ // Get adapter hooks
284
313
  const adapterHooks = adapter?.hooks || {};
285
- // 包装器配置
314
+ // Wrapper configuration
286
315
  const wrapperConfig = {
287
316
  serverEntryPath: artifacts.serverEntry,
288
317
  };
289
- // 创建服务端包装器
318
+ // Create server wrapper
290
319
  let wrapperPath;
291
320
  if (adapterHooks.generateServerWrapper) {
292
- // 使用适配器提供的自定义包装器生成逻辑
321
+ // Use adapter's custom wrapper generation logic
293
322
  const wrapperContent = await adapterHooks.generateServerWrapper(context, wrapperConfig);
294
323
  wrapperPath = path.join(projectRoot, "server-wrapper.temp.js");
295
324
  await writeFile(wrapperPath, wrapperContent);
296
325
  }
297
326
  else {
298
- // 使用默认包装器
327
+ // Use default wrapper
299
328
  wrapperPath = await createServerWrapper(context, wrapperConfig);
300
329
  }
301
- // 准备打包配置
330
+ // Prepare bundle configuration
302
331
  let bundleConfig = {
303
332
  entryPoints: [wrapperPath],
304
333
  outfile: outputFile,
305
334
  };
306
- // 调用打包前钩子,允许修改配置
335
+ // Call beforeBundle hook, allows config modification
307
336
  if (context.viteConfig && adapterHooks.beforeBundle) {
308
337
  bundleConfig = await adapterHooks.beforeBundle(context, bundleConfig);
309
338
  }
310
- // 执行打包
339
+ // Execute bundling
311
340
  await bundleServerCode(context, bundleConfig);
312
- // 清理临时包装器文件
341
+ // Cleanup temporary wrapper file
313
342
  await cleanupWrapper(wrapperPath);
314
- // 调用打包后钩子
343
+ // Call afterBundle hook
315
344
  if (adapterHooks.afterBundle) {
316
345
  await adapterHooks.afterBundle(context, outputFile);
317
346
  }
318
- logger.verbose(`服务端代码已打包到 ${outputDir}/server-handler/handler.js`);
347
+ logger.verbose(`Server code bundled to ${outputDir}/server-handler/handler.js`);
319
348
  }
320
349
  /**
321
- * 生成 meta.json 配置文件
350
+ * Generate meta.json configuration file
322
351
  *
323
- * meta.json EdgeOne 部署的核心配置文件,包含:
324
- * - 路由信息:告诉 EdgeOne 哪些路径需要 SSR,哪些是静态资源
325
- * - HTTP 配置:响应头、重定向、重写、缓存规则
326
- * - 404 处理配置
352
+ * meta.json is the core configuration file for EdgeOne deployment, containing:
353
+ * - Route info: Tells EdgeOne which paths need SSR, which are static assets
354
+ * - HTTP config: Response headers, redirects, rewrites, cache rules
355
+ * - 404 handling configuration
327
356
  *
328
- * @param context - 构建上下文
329
- * @param adapter - 框架适配器(可选)
357
+ * @param context - Build context
358
+ * @param adapter - Framework adapter (optional)
330
359
  */
331
360
  async function generateMetaJson(context, adapter) {
332
361
  const { projectRoot, outputDir, isSSR, logger } = context;
333
- // 生成路由信息
362
+ // Generate route info
334
363
  let routes = [];
335
364
  const adapterHooks = adapter?.hooks || {};
336
365
  if (adapterHooks.generateRoutes) {
337
- // 使用适配器提供的路由生成逻辑
366
+ // Use adapter's route generation logic
338
367
  routes = await adapterHooks.generateRoutes(context);
339
368
  }
340
369
  else {
341
- // 默认:单个根路由
370
+ // Default: single root route
342
371
  routes = [
343
372
  {
344
373
  path: "/",
345
- isStatic: !isSSR, // SSR 模式下不是静态路由
374
+ isStatic: !isSSR, // Not static route in SSR mode
346
375
  srcRoute: "/",
347
376
  },
348
377
  ];
349
378
  }
350
- // 生成元数据配置
379
+ // Generate metadata config
351
380
  let metaConfig;
352
381
  if (adapterHooks.generateMeta) {
353
- // 使用适配器提供的元数据生成逻辑
382
+ // Use adapter's metadata generation logic
354
383
  metaConfig = await adapterHooks.generateMeta(context, routes);
355
384
  }
356
385
  else {
357
- // 使用默认配置
386
+ // Use default config
358
387
  metaConfig = {
359
388
  conf: {
360
- headers: [], // HTTP 响应头规则
361
- redirects: [], // 重定向规则
362
- rewrites: [], // URL 重写规则
363
- caches: [], // 缓存规则
364
- has404: false, // 是否有自定义 404 页面
365
- ssr404: isSSR, // 404 是否使用 SSR
389
+ headers: [], // HTTP response header rules
390
+ redirects: [], // Redirect rules
391
+ rewrites: [], // URL rewrite rules
392
+ caches: [], // Cache rules
393
+ has404: false, // Whether custom 404 page exists
394
+ ssr404: isSSR, // Whether 404 uses SSR
366
395
  },
367
396
  has404: false,
368
397
  frameworkRoutes: routes,
369
398
  };
370
399
  }
371
- // 将配置转换为 JSON 字符串
400
+ // Convert config to JSON string
372
401
  const metaContent = JSON.stringify(metaConfig, null, 2);
373
- // SSR 模式下,在 server-handler 目录也写入一份
402
+ // In SSR mode, also write a copy in server-handler directory
374
403
  if (isSSR) {
375
404
  const serverMetaPath = path.join(projectRoot, outputDir, "server-handler", "meta.json");
376
405
  await writeFile(serverMetaPath, metaContent);
377
406
  }
378
- // 在输出根目录写入 meta.json
407
+ // Write meta.json in output root directory
379
408
  const rootMetaPath = path.join(projectRoot, outputDir, "meta.json");
380
409
  await writeFile(rootMetaPath, metaContent);
381
- logger.verbose(`meta.json 已生成,包含 ${routes.length} 个路由`);
410
+ logger.verbose(`meta.json generated with ${routes.length} routes`);
382
411
  }
383
412
  export default createCoreAdapter;
384
413
  //# sourceMappingURL=core.js.map
package/dist/core.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"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"}