@lark-apaas/devtool-kits 1.0.5-alpha.2 → 1.0.5-alpha.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/index.d.cts CHANGED
@@ -30,6 +30,8 @@ interface ProxyErrorOptions {
30
30
  retryInterval?: number;
31
31
  /** 目标服务器地址,用于检查服务是否恢复,格式:http://localhost:3000 */
32
32
  target?: string;
33
+ /** 客户端基础路径,默认 '/' */
34
+ clientBasePath?: string;
33
35
  }
34
36
  /**
35
37
  * HTTP Proxy 错误处理器
@@ -197,6 +199,37 @@ interface DevLogsMiddlewareOptions {
197
199
  */
198
200
  declare function createCollectLogsMiddleware(options?: DevLogsMiddlewareOptions): RouteMiddleware;
199
201
 
202
+ interface HealthCheckMiddlewareOptions {
203
+ /** 目标服务端口,默认 3000 */
204
+ targetPort?: number;
205
+ /** 目标服务主机,默认 localhost */
206
+ targetHost?: string;
207
+ /** 健康检查超时时间(毫秒),默认 2000ms */
208
+ timeout?: number;
209
+ }
210
+ /**
211
+ * Creates health check middleware for checking service availability
212
+ * Supports both rspack/webpack and Vite dev servers
213
+ *
214
+ * @example
215
+ * ```typescript
216
+ * // In rspack/webpack setupMiddlewares
217
+ * registerMiddlewares(devServer.app, [
218
+ * createHealthCheckMiddleware({ targetPort: 3000 })
219
+ * ]);
220
+ *
221
+ * // Check health at: GET /dev/health
222
+ * // Response:
223
+ * // {
224
+ * // "status": "healthy",
225
+ * // "service": "localhost:3000",
226
+ * // "responseTime": 15,
227
+ * // "timestamp": "2025-01-10T12:00:00.000Z"
228
+ * // }
229
+ * ```
230
+ */
231
+ declare function createHealthCheckMiddleware(options?: HealthCheckMiddlewareOptions): RouteMiddleware;
232
+
200
233
  /**
201
234
  * Register middlewares for Express-compatible servers or Vite
202
235
  * @param server - Express app or Vite middleware instance
@@ -236,4 +269,4 @@ declare function createCollectLogsMiddleware(options?: DevLogsMiddlewareOptions)
236
269
  */
237
270
  declare function registerMiddlewares(server: ExpressApp | ViteMiddleware, middlewares: Middleware[], options?: Partial<MiddlewareContext>): Promise<void>;
238
271
 
239
- export { type GlobalMiddleware, type Middleware, type MiddlewareContext, type RouteInfo, type RouteMiddleware, createCollectLogsMiddleware, createDevLogsMiddleware, createOpenapiMiddleware, handleDevProxyError, normalizeBasePath, postprocessDrizzleSchema, registerMiddlewares };
272
+ export { type GlobalMiddleware, type Middleware, type MiddlewareContext, type RouteInfo, type RouteMiddleware, createCollectLogsMiddleware, createDevLogsMiddleware, createHealthCheckMiddleware, createOpenapiMiddleware, handleDevProxyError, normalizeBasePath, postprocessDrizzleSchema, registerMiddlewares };
package/dist/index.d.ts CHANGED
@@ -30,6 +30,8 @@ interface ProxyErrorOptions {
30
30
  retryInterval?: number;
31
31
  /** 目标服务器地址,用于检查服务是否恢复,格式:http://localhost:3000 */
32
32
  target?: string;
33
+ /** 客户端基础路径,默认 '/' */
34
+ clientBasePath?: string;
33
35
  }
34
36
  /**
35
37
  * HTTP Proxy 错误处理器
@@ -197,6 +199,37 @@ interface DevLogsMiddlewareOptions {
197
199
  */
198
200
  declare function createCollectLogsMiddleware(options?: DevLogsMiddlewareOptions): RouteMiddleware;
199
201
 
202
+ interface HealthCheckMiddlewareOptions {
203
+ /** 目标服务端口,默认 3000 */
204
+ targetPort?: number;
205
+ /** 目标服务主机,默认 localhost */
206
+ targetHost?: string;
207
+ /** 健康检查超时时间(毫秒),默认 2000ms */
208
+ timeout?: number;
209
+ }
210
+ /**
211
+ * Creates health check middleware for checking service availability
212
+ * Supports both rspack/webpack and Vite dev servers
213
+ *
214
+ * @example
215
+ * ```typescript
216
+ * // In rspack/webpack setupMiddlewares
217
+ * registerMiddlewares(devServer.app, [
218
+ * createHealthCheckMiddleware({ targetPort: 3000 })
219
+ * ]);
220
+ *
221
+ * // Check health at: GET /dev/health
222
+ * // Response:
223
+ * // {
224
+ * // "status": "healthy",
225
+ * // "service": "localhost:3000",
226
+ * // "responseTime": 15,
227
+ * // "timestamp": "2025-01-10T12:00:00.000Z"
228
+ * // }
229
+ * ```
230
+ */
231
+ declare function createHealthCheckMiddleware(options?: HealthCheckMiddlewareOptions): RouteMiddleware;
232
+
200
233
  /**
201
234
  * Register middlewares for Express-compatible servers or Vite
202
235
  * @param server - Express app or Vite middleware instance
@@ -236,4 +269,4 @@ declare function createCollectLogsMiddleware(options?: DevLogsMiddlewareOptions)
236
269
  */
237
270
  declare function registerMiddlewares(server: ExpressApp | ViteMiddleware, middlewares: Middleware[], options?: Partial<MiddlewareContext>): Promise<void>;
238
271
 
239
- export { type GlobalMiddleware, type Middleware, type MiddlewareContext, type RouteInfo, type RouteMiddleware, createCollectLogsMiddleware, createDevLogsMiddleware, createOpenapiMiddleware, handleDevProxyError, normalizeBasePath, postprocessDrizzleSchema, registerMiddlewares };
272
+ export { type GlobalMiddleware, type Middleware, type MiddlewareContext, type RouteInfo, type RouteMiddleware, createCollectLogsMiddleware, createDevLogsMiddleware, createHealthCheckMiddleware, createOpenapiMiddleware, handleDevProxyError, normalizeBasePath, postprocessDrizzleSchema, registerMiddlewares };
package/dist/index.js CHANGED
@@ -22320,10 +22320,10 @@ var require_layer = __commonJS({
22320
22320
  var require_methods = __commonJS({
22321
22321
  "../../../node_modules/methods/index.js"(exports, module) {
22322
22322
  "use strict";
22323
- var http = __require("http");
22323
+ var http3 = __require("http");
22324
22324
  module.exports = getCurrentNodeMethods() || getBasicNodeMethods();
22325
22325
  function getCurrentNodeMethods() {
22326
- return http.METHODS && http.METHODS.map(/* @__PURE__ */ __name(function lowerCaseMethod(method) {
22326
+ return http3.METHODS && http3.METHODS.map(/* @__PURE__ */ __name(function lowerCaseMethod(method) {
22327
22327
  return method.toLowerCase();
22328
22328
  }, "lowerCaseMethod"));
22329
22329
  }
@@ -25995,13 +25995,13 @@ var require_application = __commonJS({
25995
25995
  "../../../node_modules/express/lib/application.js"(exports, module) {
25996
25996
  "use strict";
25997
25997
  var finalhandler = require_finalhandler();
25998
- var Router = require_router();
25998
+ var Router2 = require_router();
25999
25999
  var methods = require_methods();
26000
26000
  var middleware = require_init();
26001
26001
  var query = require_query();
26002
26002
  var debug = require_src3()("express:application");
26003
26003
  var View = require_view();
26004
- var http = __require("http");
26004
+ var http3 = __require("http");
26005
26005
  var compileETag = require_utils2().compileETag;
26006
26006
  var compileQueryParser = require_utils2().compileQueryParser;
26007
26007
  var compileTrust = require_utils2().compileTrust;
@@ -26060,7 +26060,7 @@ var require_application = __commonJS({
26060
26060
  }, "defaultConfiguration");
26061
26061
  app.lazyrouter = /* @__PURE__ */ __name(function lazyrouter() {
26062
26062
  if (!this._router) {
26063
- this._router = new Router({
26063
+ this._router = new Router2({
26064
26064
  caseSensitive: this.enabled("case sensitive routing"),
26065
26065
  strict: this.enabled("strict routing")
26066
26066
  });
@@ -26250,7 +26250,7 @@ var require_application = __commonJS({
26250
26250
  tryRender(view, renderOptions, done);
26251
26251
  }, "render");
26252
26252
  app.listen = /* @__PURE__ */ __name(function listen() {
26253
- var server = http.createServer(this);
26253
+ var server = http3.createServer(this);
26254
26254
  return server.listen.apply(server, arguments);
26255
26255
  }, "listen");
26256
26256
  function logerror(err) {
@@ -26913,12 +26913,12 @@ var require_request = __commonJS({
26913
26913
  var deprecate = require_depd()("express");
26914
26914
  var isIP = __require("net").isIP;
26915
26915
  var typeis = require_type_is();
26916
- var http = __require("http");
26916
+ var http3 = __require("http");
26917
26917
  var fresh = require_fresh();
26918
26918
  var parseRange = require_range_parser();
26919
26919
  var parse = require_parseurl();
26920
26920
  var proxyaddr = require_proxy_addr();
26921
- var req = Object.create(http.IncomingMessage.prototype);
26921
+ var req = Object.create(http3.IncomingMessage.prototype);
26922
26922
  module.exports = req;
26923
26923
  req.get = req.header = /* @__PURE__ */ __name(function header(name) {
26924
26924
  if (!name) {
@@ -27344,7 +27344,7 @@ var require_response = __commonJS({
27344
27344
  var deprecate = require_depd()("express");
27345
27345
  var encodeUrl = require_encodeurl();
27346
27346
  var escapeHtml = require_escape_html();
27347
- var http = __require("http");
27347
+ var http3 = __require("http");
27348
27348
  var isAbsolute3 = require_utils2().isAbsolute;
27349
27349
  var onFinished = require_on_finished();
27350
27350
  var path6 = __require("path");
@@ -27360,7 +27360,7 @@ var require_response = __commonJS({
27360
27360
  var mime = send.mime;
27361
27361
  var resolve = path6.resolve;
27362
27362
  var vary = require_vary();
27363
- var res = Object.create(http.ServerResponse.prototype);
27363
+ var res = Object.create(http3.ServerResponse.prototype);
27364
27364
  module.exports = res;
27365
27365
  var charsetRegExp = /;\s*charset\s*=/;
27366
27366
  res.status = /* @__PURE__ */ __name(function status(code) {
@@ -28009,7 +28009,7 @@ var require_express = __commonJS({
28009
28009
  var mixin = require_merge_descriptors();
28010
28010
  var proto = require_application();
28011
28011
  var Route = require_route();
28012
- var Router = require_router();
28012
+ var Router2 = require_router();
28013
28013
  var req = require_request();
28014
28014
  var res = require_response();
28015
28015
  exports = module.exports = createApplication;
@@ -28043,7 +28043,7 @@ var require_express = __commonJS({
28043
28043
  exports.request = req;
28044
28044
  exports.response = res;
28045
28045
  exports.Route = Route;
28046
- exports.Router = Router;
28046
+ exports.Router = Router2;
28047
28047
  exports.json = bodyParser.json;
28048
28048
  exports.query = require_query();
28049
28049
  exports.raw = bodyParser.raw;
@@ -28394,7 +28394,8 @@ import fs2 from "fs";
28394
28394
  import path2 from "path";
28395
28395
  import { createReadStream } from "fs";
28396
28396
  import { createInterface } from "readline";
28397
- import { connect } from "net";
28397
+ import http from "http";
28398
+ import https from "https";
28398
28399
  var errorHtmlTemplate = null;
28399
28400
  function isConnectionError(err) {
28400
28401
  const code = err.code;
@@ -28408,30 +28409,40 @@ function isConnectionError(err) {
28408
28409
  return connectionErrorCodes.includes(code || "");
28409
28410
  }
28410
28411
  __name(isConnectionError, "isConnectionError");
28411
- function checkServiceAvailable(host, port, timeout = 1e3) {
28412
+ function checkServiceAvailable(targetUrl, timeout = 1e3) {
28412
28413
  return new Promise((resolve) => {
28413
- const socket = connect(port, host);
28414
- const timer = setTimeout(() => {
28415
- socket.destroy();
28416
- resolve(false);
28417
- }, timeout);
28418
- socket.on("connect", () => {
28419
- clearTimeout(timer);
28420
- socket.destroy();
28421
- resolve(true);
28422
- });
28423
- socket.on("error", () => {
28424
- clearTimeout(timer);
28425
- socket.destroy();
28414
+ try {
28415
+ const url = new URL(targetUrl);
28416
+ const isHttps = url.protocol === "https:";
28417
+ const httpModule = isHttps ? https : http;
28418
+ const req = httpModule.request({
28419
+ hostname: url.hostname,
28420
+ port: url.port || (isHttps ? 443 : 80),
28421
+ path: "/",
28422
+ method: "HEAD",
28423
+ timeout
28424
+ }, (res) => {
28425
+ const available = res.statusCode !== 502 && !res.headers["x-proxy-error-page"];
28426
+ resolve(available);
28427
+ });
28428
+ req.on("timeout", () => {
28429
+ req.destroy();
28430
+ resolve(false);
28431
+ });
28432
+ req.on("error", () => {
28433
+ resolve(false);
28434
+ });
28435
+ req.end();
28436
+ } catch (e) {
28426
28437
  resolve(false);
28427
- });
28438
+ }
28428
28439
  });
28429
28440
  }
28430
28441
  __name(checkServiceAvailable, "checkServiceAvailable");
28431
- async function waitForServiceRecovery(host, port, timeout, interval) {
28442
+ async function waitForServiceRecovery(targetUrl, timeout, interval) {
28432
28443
  const startTime = Date.now();
28433
28444
  while (Date.now() - startTime < timeout) {
28434
- const isAvailable = await checkServiceAvailable(host, port);
28445
+ const isAvailable = await checkServiceAvailable(targetUrl, 2e3);
28435
28446
  if (isAvailable) {
28436
28447
  return true;
28437
28448
  }
@@ -28522,7 +28533,7 @@ async function readRecentErrorLogs(logDir, maxLogs, fileName) {
28522
28533
  };
28523
28534
  }
28524
28535
  __name(readRecentErrorLogs, "readRecentErrorLogs");
28525
- function injectErrorData(template, errorLogs) {
28536
+ function injectErrorData(template, errorLogs, clientBasePath) {
28526
28537
  let logsText = "";
28527
28538
  if (errorLogs.length > 0) {
28528
28539
  logsText = errorLogs.join("\n");
@@ -28530,11 +28541,12 @@ function injectErrorData(template, errorLogs) {
28530
28541
  logsText = "\u672A\u627E\u5230\u76F8\u5173\u9519\u8BEF\u65E5\u5FD7";
28531
28542
  }
28532
28543
  return template.replace("{{.errorData.message}}", `\u670D\u52A1\u542F\u52A8\u5F02\u5E38\uFF0C\u8BF7\u6839\u636E\u65E5\u5FD7\u4FEE\u590D\u76F8\u5173\u95EE\u9898
28533
- ${JSON.stringify(logsText)}`);
28544
+ ${JSON.stringify(logsText)}`).replace("{{.clientBasePath}}", clientBasePath);
28534
28545
  }
28535
28546
  __name(injectErrorData, "injectErrorData");
28536
28547
  function handleDevProxyError(err, req, res, options) {
28537
- const { logDir = path2.join(process.cwd(), "logs"), maxErrorLogs = 100, logFileName = "server.log", retryTimeout = 5e3, retryInterval = 500, target } = options || {};
28548
+ const { logDir = path2.join(process.cwd(), "logs"), maxErrorLogs = 100, logFileName = "server.log", retryTimeout = 5e3, retryInterval = 500, target, clientBasePath = process.env.CLIENT_BASE_PATH || "/" } = options || {};
28549
+ const clientBasePathWithoutSlash = normalizeBasePath(clientBasePath);
28538
28550
  console.error("[Proxy Error]:", err.message);
28539
28551
  if (res.headersSent) {
28540
28552
  console.error("[Proxy Error]: Headers already sent, cannot send error page");
@@ -28546,32 +28558,32 @@ function handleDevProxyError(err, req, res, options) {
28546
28558
  const { logs: errorLogs, hasCompileError } = await readRecentErrorLogs(logDir, maxErrorLogs, logFileName);
28547
28559
  if (isConnError && !hasCompileError && target) {
28548
28560
  console.log("[Proxy Error]: Connection error without compile errors, possibly server restarting...");
28549
- let targetUrl = null;
28550
28561
  try {
28551
- targetUrl = new URL(target);
28562
+ new URL(target);
28552
28563
  } catch (e) {
28553
28564
  console.error("[Proxy Error]: Invalid target URL:", target);
28565
+ console.log("[Proxy Error]: Showing error page due to invalid target");
28554
28566
  }
28555
- if (targetUrl) {
28556
- const host = targetUrl.hostname;
28557
- const port = targetUrl.port ? parseInt(targetUrl.port) : targetUrl.protocol === "https:" ? 443 : 80;
28558
- console.log(`[Proxy Error]: Waiting for service recovery at ${host}:${port} (timeout: ${retryTimeout}ms)...`);
28559
- const recovered = await waitForServiceRecovery(host, port, retryTimeout, retryInterval);
28560
- if (recovered) {
28561
- console.log("[Proxy Error]: Service recovered, sending redirect");
28562
- sendSimpleRedirect(req, res);
28563
- return;
28564
- }
28565
- console.log("[Proxy Error]: Service did not recover within timeout, showing error page");
28567
+ console.log(`[Proxy Error]: Waiting for service recovery at ${target} (timeout: ${retryTimeout}ms)...`);
28568
+ const recovered = await waitForServiceRecovery(target, retryTimeout, retryInterval);
28569
+ if (recovered) {
28570
+ console.log("[Proxy Error]: Service recovered within timeout, sending 302 redirect");
28571
+ sendSimpleRedirect(req, res);
28572
+ return;
28566
28573
  }
28567
- console.log("[Proxy Error]: Falling back to scenario 2 (detailed error page with probe)");
28574
+ console.log("[Proxy Error]: Service did not recover within timeout, showing error page with probe");
28575
+ }
28576
+ if (isConnError && !hasCompileError) {
28577
+ console.log("[Proxy Error]: Showing error page with auto-refresh probe");
28578
+ } else {
28579
+ console.log("[Proxy Error]: Compile error or non-connection error, showing error page");
28568
28580
  }
28569
- console.log("[Proxy Error]: Compile error or non-connection error, showing error page");
28570
28581
  const template = getErrorHtmlTemplate();
28571
- const html = injectErrorData(template, errorLogs);
28582
+ const html = injectErrorData(template, errorLogs, clientBasePathWithoutSlash);
28572
28583
  res.writeHead(502, {
28573
28584
  "Content-Type": "text/html; charset=utf-8",
28574
- "Cache-Control": "no-cache, no-store, must-revalidate"
28585
+ "Cache-Control": "no-cache, no-store, must-revalidate",
28586
+ "X-Proxy-Error-Page": "true"
28575
28587
  });
28576
28588
  res.end(html);
28577
28589
  } catch (error) {
@@ -28601,8 +28613,99 @@ __name(sendSimpleRedirect, "sendSimpleRedirect");
28601
28613
  // src/middlewares/index.ts
28602
28614
  import path5 from "path";
28603
28615
 
28604
- // src/middlewares/openapi/router.ts
28616
+ // src/middlewares/health-check/router.ts
28605
28617
  var import_express = __toESM(require_express2(), 1);
28618
+ import http2 from "http";
28619
+ function checkServiceHealth(host, port, timeout) {
28620
+ return new Promise((resolve) => {
28621
+ const startTime = Date.now();
28622
+ const req = http2.request({
28623
+ hostname: host,
28624
+ port,
28625
+ path: "/",
28626
+ method: "HEAD",
28627
+ timeout
28628
+ }, (_res) => {
28629
+ const responseTime = Date.now() - startTime;
28630
+ resolve({
28631
+ available: true,
28632
+ responseTime
28633
+ });
28634
+ });
28635
+ req.on("timeout", () => {
28636
+ req.destroy();
28637
+ resolve({
28638
+ available: false,
28639
+ error: "Request timeout"
28640
+ });
28641
+ });
28642
+ req.on("error", (err) => {
28643
+ resolve({
28644
+ available: false,
28645
+ error: err.message
28646
+ });
28647
+ });
28648
+ req.end();
28649
+ });
28650
+ }
28651
+ __name(checkServiceHealth, "checkServiceHealth");
28652
+ function createHealthCheckRouter(options = {}) {
28653
+ const { targetPort = Number(process.env.SERVER_PORT) || 3e3, targetHost = "localhost", timeout = 2e3 } = options;
28654
+ const router = (0, import_express.Router)();
28655
+ router.get("/", async (_req, res) => {
28656
+ try {
28657
+ const result = await checkServiceHealth(targetHost, targetPort, timeout);
28658
+ if (result.available) {
28659
+ res.status(200).json({
28660
+ status: "healthy",
28661
+ service: `${targetHost}:${targetPort}`,
28662
+ responseTime: result.responseTime,
28663
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
28664
+ });
28665
+ } else {
28666
+ res.status(503).json({
28667
+ status: "unhealthy",
28668
+ service: `${targetHost}:${targetPort}`,
28669
+ error: result.error,
28670
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
28671
+ });
28672
+ }
28673
+ } catch (error) {
28674
+ res.status(500).json({
28675
+ status: "error",
28676
+ service: `${targetHost}:${targetPort}`,
28677
+ error: error instanceof Error ? error.message : "Unknown error",
28678
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
28679
+ });
28680
+ }
28681
+ });
28682
+ return router;
28683
+ }
28684
+ __name(createHealthCheckRouter, "createHealthCheckRouter");
28685
+
28686
+ // src/middlewares/health-check/index.ts
28687
+ var HEALTH_CHECK_ROUTES = [
28688
+ {
28689
+ method: "GET",
28690
+ path: "/",
28691
+ description: "Check if target service is healthy and available"
28692
+ }
28693
+ ];
28694
+ function createHealthCheckMiddleware(options = {}) {
28695
+ return {
28696
+ name: "health-check",
28697
+ mountPath: "/dev/health",
28698
+ routes: HEALTH_CHECK_ROUTES,
28699
+ enabled: /* @__PURE__ */ __name((context) => context.isDev, "enabled"),
28700
+ createRouter: /* @__PURE__ */ __name((_context) => {
28701
+ return createHealthCheckRouter(options);
28702
+ }, "createRouter")
28703
+ };
28704
+ }
28705
+ __name(createHealthCheckMiddleware, "createHealthCheckMiddleware");
28706
+
28707
+ // src/middlewares/openapi/router.ts
28708
+ var import_express2 = __toESM(require_express2(), 1);
28606
28709
 
28607
28710
  // src/middlewares/openapi/controller.ts
28608
28711
  import fs5 from "fs/promises";
@@ -28849,7 +28952,7 @@ __name(createOpenapiHandler, "createOpenapiHandler");
28849
28952
  // src/middlewares/openapi/router.ts
28850
28953
  function createOpenapiRouter(options, context) {
28851
28954
  const { openapiFilePath, enableEnhancement, serverDir } = options;
28852
- const router = import_express.default.Router();
28955
+ const router = import_express2.default.Router();
28853
28956
  const handler = createOpenapiHandler(openapiFilePath, enableEnhancement, serverDir);
28854
28957
  router.get("/openapi.json", (req, res) => handler(req, res, context));
28855
28958
  return router;
@@ -28883,7 +28986,7 @@ function createOpenapiMiddleware(options) {
28883
28986
  __name(createOpenapiMiddleware, "createOpenapiMiddleware");
28884
28987
 
28885
28988
  // src/middlewares/dev-logs/router.ts
28886
- var import_express2 = __toESM(require_express2(), 1);
28989
+ var import_express3 = __toESM(require_express2(), 1);
28887
28990
 
28888
28991
  // src/middlewares/dev-logs/utils.ts
28889
28992
  import { promises as fs6 } from "fs";
@@ -29328,7 +29431,7 @@ __name(createGetLogFileHandler, "createGetLogFileHandler");
29328
29431
  // src/middlewares/dev-logs/router.ts
29329
29432
  function createDevLogRouter(options = {}) {
29330
29433
  const logDir = resolveLogDir(options.logDir);
29331
- const router = import_express2.default.Router();
29434
+ const router = import_express3.default.Router();
29332
29435
  router.get("/app/trace/:traceId", createGetTraceEntriesHandler(logDir));
29333
29436
  router.get("/trace/recent", createGetRecentTracesHandler(logDir));
29334
29437
  router.get("/files/:fileName", createGetLogFileHandler(logDir));
@@ -29371,7 +29474,7 @@ function createDevLogsMiddleware(options = {}) {
29371
29474
  __name(createDevLogsMiddleware, "createDevLogsMiddleware");
29372
29475
 
29373
29476
  // src/middlewares/collect-logs/router.ts
29374
- var import_express3 = __toESM(require_express2(), 1);
29477
+ var import_express4 = __toESM(require_express2(), 1);
29375
29478
 
29376
29479
  // src/middlewares/collect-logs/controller.ts
29377
29480
  import { join as join4 } from "path";
@@ -29470,9 +29573,9 @@ __name(handleError2, "handleError");
29470
29573
  // src/middlewares/collect-logs/router.ts
29471
29574
  function createDevLogRouter2(options = {}) {
29472
29575
  const logDir = resolveLogDir2(options.logDir);
29473
- const router = import_express3.default.Router();
29474
- router.post("/collect", import_express3.default.json(), collectLogsHandler(logDir, options.fileName || "client.log"));
29475
- router.post("/collect-batch", import_express3.default.json(), collectLogsBatchHandler(logDir, options.fileName || "client.log"));
29576
+ const router = import_express4.default.Router();
29577
+ router.post("/collect", import_express4.default.json(), collectLogsHandler(logDir, options.fileName || "client.log"));
29578
+ router.post("/collect-batch", import_express4.default.json(), collectLogsBatchHandler(logDir, options.fileName || "client.log"));
29476
29579
  return router;
29477
29580
  }
29478
29581
  __name(createDevLogRouter2, "createDevLogRouter");
@@ -29555,7 +29658,15 @@ async function registerMiddlewares(server, middlewares, options) {
29555
29658
  rootDir: process.cwd(),
29556
29659
  ...options
29557
29660
  };
29558
- for (const middleware of middlewares) {
29661
+ const defaultMiddlewares = [];
29662
+ if (context.isDev) {
29663
+ defaultMiddlewares.push(createHealthCheckMiddleware());
29664
+ }
29665
+ const allMiddlewares = [
29666
+ ...defaultMiddlewares,
29667
+ ...middlewares
29668
+ ];
29669
+ for (const middleware of allMiddlewares) {
29559
29670
  if (middleware.enabled && !middleware.enabled(context)) {
29560
29671
  continue;
29561
29672
  }
@@ -29581,6 +29692,7 @@ __name(registerMiddlewares, "registerMiddlewares");
29581
29692
  export {
29582
29693
  createCollectLogsMiddleware,
29583
29694
  createDevLogsMiddleware,
29695
+ createHealthCheckMiddleware,
29584
29696
  createOpenapiMiddleware,
29585
29697
  handleDevProxyError,
29586
29698
  normalizeBasePath,