@lark-apaas/devtool-kits 1.2.17-alpha.20 → 1.2.17-alpha.21

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/README.md CHANGED
@@ -92,6 +92,17 @@ import {
92
92
  } from '@apaas/fullstack-toolkits';
93
93
  ```
94
94
 
95
+ ### 兼容工具函数 (Compat)
96
+ ```typescript
97
+ import {
98
+ sendJson, // 发送 JSON 响应(兼容 Express/Connect)
99
+ sendError, // 发送错误响应
100
+ sendSuccess, // 发送成功响应
101
+ getQuery, // 获取所有查询参数
102
+ getQueryParam, // 获取单个查询参数
103
+ } from '@apaas/fullstack-toolkits';
104
+ ```
105
+
95
106
  ### 类型定义 (Types)
96
107
  ```typescript
97
108
  import type {
@@ -171,6 +182,38 @@ export default {
171
182
  - 全局中间件应放在路由中间件之前
172
183
  - 路由中间件仅处理匹配其挂载路径的请求
173
184
 
185
+ ### Vite/Connect 兼容性
186
+
187
+ 本工具包原生支持 Vite 开发服务器。`registerMiddlewares` 会自动检测 Vite/Connect 环境,并添加必要的 Express API 兼容层:
188
+
189
+ - `res.status()` - 设置响应状态码
190
+ - `res.json()` - 发送 JSON 响应
191
+ - `res.send()` - 发送响应
192
+ - `req.query` - 解析后的查询参数
193
+
194
+ 这意味着您可以直接在 Vite 中使用本工具包,无需额外配置。
195
+
196
+ **兼容工具函数(可选):**
197
+
198
+ 如果您正在编写自定义中间件并希望同时支持 Express 和 Vite,可以使用导出的兼容工具函数:
199
+
200
+ ```typescript
201
+ import { sendJson, sendError, sendSuccess, getQuery, getQueryParam } from '@lark-apaas/devtool-kits';
202
+
203
+ // 发送 JSON 响应(自动检测 Express/Connect)
204
+ sendJson(res, { data: 'value' }, 200);
205
+
206
+ // 发送错误响应
207
+ sendError(res, 'Not found', error, 404);
208
+
209
+ // 发送成功响应
210
+ sendSuccess(res, { id: 123 });
211
+
212
+ // 获取查询参数(自动解析 URL 或使用 req.query)
213
+ const query = getQuery(req);
214
+ const page = getQueryParam(req, 'page');
215
+ ```
216
+
174
217
  ## 中间件详细说明
175
218
  ### Dev Logs 中间件
176
219
 
package/dist/index.cjs CHANGED
@@ -35,11 +35,16 @@ __export(index_exports, {
35
35
  createCollectLogsMiddleware: () => createCollectLogsMiddleware,
36
36
  createDevLogsMiddleware: () => createDevLogsMiddleware,
37
37
  createOpenapiMiddleware: () => createOpenapiMiddleware,
38
+ getQuery: () => getQuery,
39
+ getQueryParam: () => getQueryParam,
38
40
  handleDevProxyError: () => handleDevProxyError,
39
41
  normalizeBasePath: () => normalizeBasePath,
40
42
  parseAndGenerateNestResourceTemplate: () => parseAndGenerateNestResourceTemplate,
41
43
  postprocessDrizzleSchema: () => postprocessDrizzleSchema,
42
- registerMiddlewares: () => registerMiddlewares
44
+ registerMiddlewares: () => registerMiddlewares,
45
+ sendError: () => sendError,
46
+ sendJson: () => sendJson,
47
+ sendSuccess: () => sendSuccess
43
48
  });
44
49
  module.exports = __toCommonJS(index_exports);
45
50
 
@@ -3603,6 +3608,64 @@ function createCollectLogsMiddleware(options = {}) {
3603
3608
  }
3604
3609
  __name(createCollectLogsMiddleware, "createCollectLogsMiddleware");
3605
3610
 
3611
+ // src/middlewares/compat.ts
3612
+ function sendJson(res, data, statusCode = 200) {
3613
+ const statusFn = res.status;
3614
+ const jsonFn = res.json;
3615
+ if (typeof statusFn === "function" && typeof jsonFn === "function") {
3616
+ statusFn.call(res, statusCode);
3617
+ jsonFn.call(res, data);
3618
+ } else {
3619
+ res.statusCode = statusCode;
3620
+ res.setHeader("Content-Type", "application/json");
3621
+ res.end(JSON.stringify(data));
3622
+ }
3623
+ }
3624
+ __name(sendJson, "sendJson");
3625
+ function sendError(res, message, error, statusCode = 500) {
3626
+ const errorData = {
3627
+ message,
3628
+ ...error ? {
3629
+ error: serializeError3(error)
3630
+ } : {}
3631
+ };
3632
+ sendJson(res, errorData, statusCode);
3633
+ }
3634
+ __name(sendError, "sendError");
3635
+ function sendSuccess(res, data) {
3636
+ sendJson(res, {
3637
+ success: true,
3638
+ ...data
3639
+ }, 200);
3640
+ }
3641
+ __name(sendSuccess, "sendSuccess");
3642
+ function getQuery(req) {
3643
+ if (req.query) {
3644
+ return req.query;
3645
+ }
3646
+ const url = new URL(req.url || "", `http://${req.headers.host}`);
3647
+ return Object.fromEntries(url.searchParams.entries());
3648
+ }
3649
+ __name(getQuery, "getQuery");
3650
+ function getQueryParam(req, key) {
3651
+ const query = getQuery(req);
3652
+ return query[key];
3653
+ }
3654
+ __name(getQueryParam, "getQueryParam");
3655
+ function serializeError3(error) {
3656
+ if (error instanceof Error) {
3657
+ return {
3658
+ name: error.name,
3659
+ message: error.message,
3660
+ stack: error.stack
3661
+ };
3662
+ }
3663
+ return {
3664
+ message: String(error)
3665
+ };
3666
+ }
3667
+ __name(serializeError3, "serializeError");
3668
+
3606
3669
  // src/middlewares/api-routes/router.ts
3607
3670
  var import_express4 = __toESM(require("express"), 1);
3608
3671
  function extractModuleFromPath2(path7) {
@@ -3745,6 +3808,41 @@ function createApiRoutesMiddleware() {
3745
3808
  __name(createApiRoutesMiddleware, "createApiRoutesMiddleware");
3746
3809
 
3747
3810
  // src/middlewares/index.ts
3811
+ function enhanceForCompat(req, res) {
3812
+ if (!res.status) {
3813
+ res.status = function(code) {
3814
+ res.statusCode = code;
3815
+ return res;
3816
+ };
3817
+ }
3818
+ if (!res.json) {
3819
+ res.json = function(data) {
3820
+ res.setHeader("Content-Type", "application/json");
3821
+ res.end(JSON.stringify(data));
3822
+ return res;
3823
+ };
3824
+ }
3825
+ if (!res.send) {
3826
+ res.send = function(data) {
3827
+ if (typeof data === "object" && data !== null) {
3828
+ res.setHeader("Content-Type", "application/json");
3829
+ res.end(JSON.stringify(data));
3830
+ } else {
3831
+ res.end(String(data));
3832
+ }
3833
+ return res;
3834
+ };
3835
+ }
3836
+ if (!req.query) {
3837
+ const url = new URL(req.url || "", `http://${req.headers.host || "localhost"}`);
3838
+ req.query = Object.fromEntries(url.searchParams.entries());
3839
+ }
3840
+ }
3841
+ __name(enhanceForCompat, "enhanceForCompat");
3842
+ function isConnectServer(server) {
3843
+ return typeof server === "function" && !("set" in server) && !("engine" in server);
3844
+ }
3845
+ __name(isConnectServer, "isConnectServer");
3748
3846
  function isRouteMiddleware(middleware) {
3749
3847
  return "createRouter" in middleware && middleware.createRouter !== void 0;
3750
3848
  }
@@ -3797,6 +3895,13 @@ async function registerMiddlewares(server, middlewares, options) {
3797
3895
  rootDir: process.cwd(),
3798
3896
  ...options
3799
3897
  };
3898
+ if (isConnectServer(server)) {
3899
+ server.use((req, res, next) => {
3900
+ enhanceForCompat(req, res);
3901
+ next();
3902
+ });
3903
+ console.log("[Middleware] Registered Express compatibility layer for Connect/Vite");
3904
+ }
3800
3905
  const allMiddlewares = [
3801
3906
  ...middlewares
3802
3907
  ];
@@ -3829,10 +3934,15 @@ __name(registerMiddlewares, "registerMiddlewares");
3829
3934
  createCollectLogsMiddleware,
3830
3935
  createDevLogsMiddleware,
3831
3936
  createOpenapiMiddleware,
3937
+ getQuery,
3938
+ getQueryParam,
3832
3939
  handleDevProxyError,
3833
3940
  normalizeBasePath,
3834
3941
  parseAndGenerateNestResourceTemplate,
3835
3942
  postprocessDrizzleSchema,
3836
- registerMiddlewares
3943
+ registerMiddlewares,
3944
+ sendError,
3945
+ sendJson,
3946
+ sendSuccess
3837
3947
  });
3838
3948
  //# sourceMappingURL=index.cjs.map