@lsby/net-core 0.3.41 → 0.3.42

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 (32) hide show
  1. package/dist/cjs/index.cjs +30 -12
  2. package/dist/cjs/index.d.cts +1 -1
  3. package/dist/cjs/plugin/extend/chinese-path.cjs +2 -2
  4. package/dist/cjs/plugin/extend/custom-data.cjs +2 -2
  5. package/dist/cjs/plugin/extend/json.cjs +4 -4
  6. package/dist/cjs/plugin/extend/urlencoded.cjs +41 -4
  7. package/dist/cjs/plugin/extend/urlencoded.d.cts +1 -0
  8. package/dist/cjs/plugin/extend/web-socket.cjs +19 -6
  9. package/dist/cjs/plugin/extend/web-socket.d.cts +1 -0
  10. package/dist/cjs/plugin/plug.cjs +2 -2
  11. package/dist/cjs/plugin/plug.d.cts +6 -3
  12. package/dist/cjs/server/server.cjs +3 -2
  13. package/dist/esm/{chunk-N4NY37XI.js → chunk-43GZE5YL.js} +2 -2
  14. package/dist/esm/{chunk-3PONWJ35.js → chunk-47T4ZLNQ.js} +1 -1
  15. package/dist/esm/{chunk-2MN4G2DG.js → chunk-FDDCLNUD.js} +1 -1
  16. package/dist/esm/{chunk-MUTTFLKG.js → chunk-GAC4ETIB.js} +18 -5
  17. package/dist/esm/{chunk-OOCVEPVP.js → chunk-M52TXG2M.js} +10 -3
  18. package/dist/esm/{chunk-VBFA32JO.js → chunk-M7QXZWBP.js} +3 -3
  19. package/dist/esm/{chunk-47GMSX5W.js → chunk-R3PAE6XG.js} +3 -2
  20. package/dist/esm/index.d.ts +1 -1
  21. package/dist/esm/index.js +9 -9
  22. package/dist/esm/plugin/extend/chinese-path.js +2 -2
  23. package/dist/esm/plugin/extend/custom-data.js +2 -2
  24. package/dist/esm/plugin/extend/json.js +2 -2
  25. package/dist/esm/plugin/extend/urlencoded.d.ts +1 -0
  26. package/dist/esm/plugin/extend/urlencoded.js +4 -2
  27. package/dist/esm/plugin/extend/web-socket.d.ts +1 -0
  28. package/dist/esm/plugin/extend/web-socket.js +2 -2
  29. package/dist/esm/plugin/plug.d.ts +6 -3
  30. package/dist/esm/plugin/plug.js +1 -1
  31. package/dist/esm/server/server.js +1 -1
  32. package/package.json +1 -1
@@ -396,8 +396,8 @@ var \u63D2\u4EF6 = class {
396
396
  \u83B7\u5F97\u7C7B\u578B() {
397
397
  return this.\u7C7B\u578B;
398
398
  }
399
- \u83B7\u5F97\u5B9E\u73B0() {
400
- return this.\u5B9E\u73B0;
399
+ \u8FD0\u884C(req, res, \u9644\u52A0\u53C2\u6570) {
400
+ return this.\u5B9E\u73B0(req, res, \u9644\u52A0\u53C2\u6570);
401
401
  }
402
402
  };
403
403
 
@@ -427,8 +427,8 @@ var import_express = __toESM(require("express"), 1);
427
427
  var JSON\u89E3\u6790\u63D2\u4EF6 = class extends \u63D2\u4EF6 {
428
428
  log = Global.getItem("log");
429
429
  constructor(t, opt) {
430
- super(t, async (req, res) => {
431
- let log = (await this.log).extend("JSON\u89E3\u6790\u63D2\u4EF6");
430
+ super(t, async (req, res, \u9644\u52A0\u53C2\u6570) => {
431
+ let log = (await this.log).extend(\u9644\u52A0\u53C2\u6570.\u8BF7\u6C42id).extend("JSON\u89E3\u6790\u63D2\u4EF6");
432
432
  await new Promise(
433
433
  (pRes, _rej) => import_express.default.json(opt)(req, res, () => {
434
434
  pRes(null);
@@ -450,16 +450,20 @@ var JSON\u89E3\u6790\u63D2\u4EF6 = class extends \u63D2\u4EF6 {
450
450
  var import_node_util2 = require("util");
451
451
  var import_express2 = __toESM(require("express"), 1);
452
452
  var \u8868\u5355\u89E3\u6790\u63D2\u4EF6 = class extends \u63D2\u4EF6 {
453
+ log = Global.getItem("log");
453
454
  constructor(t, opt) {
454
- super(t, async (req, res) => {
455
+ super(t, async (req, res, \u9644\u52A0\u53C2\u6570) => {
456
+ let log = (await this.log).extend(\u9644\u52A0\u53C2\u6570.\u8BF7\u6C42id).extend("JSON\u89E3\u6790\u63D2\u4EF6");
455
457
  await new Promise(
456
458
  (pRes, _rej) => import_express2.default.urlencoded({ extended: true, ...opt })(req, res, () => {
457
459
  pRes(null);
458
460
  })
459
461
  );
460
462
  let parseResult = t.safeParse(req.body);
461
- if (!parseResult.success)
463
+ if (!parseResult.success) {
464
+ await log.err("\u89E3\u6790url\u7F16\u7801\u6B63\u6587\u5931\u8D25: %O", parseResult.error);
462
465
  throw new Error((0, import_node_util2.format)("\u89E3\u6790url\u7F16\u7801\u6B63\u6587\u5931\u8D25: %O", parseResult.error));
466
+ }
463
467
  return parseResult.data;
464
468
  });
465
469
  }
@@ -468,6 +472,7 @@ var \u8868\u5355\u89E3\u6790\u63D2\u4EF6 = class extends \u63D2\u4EF6 {
468
472
  // src/plugin/extend/web-socket.ts
469
473
  var import_zod3 = require("zod");
470
474
  var WebSocket\u63D2\u4EF6 = class extends \u63D2\u4EF6 {
475
+ log = Global.getItem("log");
471
476
  constructor(\u4FE1\u606F\u63CF\u8FF0) {
472
477
  super(
473
478
  import_zod3.z.object({
@@ -476,27 +481,39 @@ var WebSocket\u63D2\u4EF6 = class extends \u63D2\u4EF6 {
476
481
  \u5173\u95EDws\u8FDE\u63A5: import_zod3.z.function(import_zod3.z.tuple([]), import_zod3.z.promise(import_zod3.z.void()))
477
482
  }).or(import_zod3.z.undefined())
478
483
  }),
479
- async (req, _res) => {
484
+ async (req, _res, \u9644\u52A0\u53C2\u6570) => {
485
+ let log = (await this.log).extend(\u9644\u52A0\u53C2\u6570.\u8BF7\u6C42id).extend("ws\u63D2\u4EF6");
480
486
  let wsId = req.headers["ws-client-id"];
481
487
  let WebSocket\u7BA1\u7406\u80052 = await Global.getItem("WebSocket\u7BA1\u7406\u8005");
482
488
  let ws\u53E5\u67C4 = null;
483
- if (typeof wsId == "string")
489
+ await log.debug("\u68C0\u67E5 ws-client-id \u5934\u4FE1\u606F", { wsId });
490
+ if (typeof wsId == "string") {
491
+ await log.debug("\u5C1D\u8BD5\u83B7\u53D6 WebSocket \u53E5\u67C4", { wsId });
484
492
  ws\u53E5\u67C4 = await WebSocket\u7BA1\u7406\u80052.\u83B7\u5F97\u53E5\u67C4(wsId);
485
- if (!ws\u53E5\u67C4)
493
+ }
494
+ if (!ws\u53E5\u67C4) {
495
+ await log.err("\u672A\u80FD\u83B7\u53D6\u5230\u6709\u6548\u7684 WebSocket \u53E5\u67C4");
486
496
  return { ws\u64CD\u4F5C: void 0 };
497
+ }
487
498
  let \u5B58\u5728\u7684ws\u53E5\u67C4 = ws\u53E5\u67C4;
499
+ await log.debug("WebSocket \u53E5\u67C4\u5DF2\u51C6\u5907\u597D", { wsId });
488
500
  return {
489
501
  ws\u64CD\u4F5C: {
490
502
  async \u53D1\u9001ws\u4FE1\u606F(\u4FE1\u606F) {
503
+ await log.debug("\u53D1\u9001 WebSocket \u4FE1\u606F", { \u4FE1\u606F });
491
504
  return new Promise((res, rej) => {
492
505
  \u5B58\u5728\u7684ws\u53E5\u67C4.send(JSON.stringify(\u4FE1\u606F), (err) => {
493
- if (err)
506
+ if (err) {
507
+ log.err("\u53D1\u9001 WebSocket \u4FE1\u606F\u5931\u8D25", { \u9519\u8BEF: err }).catch(console.error);
494
508
  return rej(err);
509
+ }
510
+ log.info("WebSocket \u4FE1\u606F\u53D1\u9001\u6210\u529F", { \u4FE1\u606F }).catch(console.error);
495
511
  return res();
496
512
  });
497
513
  });
498
514
  },
499
515
  async \u5173\u95EDws\u8FDE\u63A5() {
516
+ await log.debug("\u5173\u95ED WebSocket \u8FDE\u63A5");
500
517
  \u5B58\u5728\u7684ws\u53E5\u67C4.close();
501
518
  }
502
519
  }
@@ -521,7 +538,8 @@ var \u670D\u52A1\u5668 = class {
521
538
  async run() {
522
539
  let app = (0, import_express3.default)();
523
540
  app.use(async (req, res) => {
524
- let log = (await this.log).extend("\u8BF7\u6C42").extend((0, import_short_uuid.default)().new());
541
+ let \u8BF7\u6C42id = (0, import_short_uuid.default)().new();
542
+ let log = (await this.log).extend("\u8BF7\u6C42").extend(\u8BF7\u6C42id);
525
543
  try {
526
544
  let \u8BF7\u6C42\u8DEF\u5F84 = req.path;
527
545
  let \u8BF7\u6C42\u65B9\u6CD5 = req.method.toLowerCase();
@@ -536,7 +554,7 @@ var \u670D\u52A1\u5668 = class {
536
554
  let \u63A5\u53E3\u7C7B\u578B2 = \u76EE\u6807\u63A5\u53E3.\u83B7\u5F97\u63A5\u53E3\u7C7B\u578B();
537
555
  let \u63A5\u53E3\u63D2\u4EF6 = \u63A5\u53E3\u7C7B\u578B2.\u83B7\u5F97\u63D2\u4EF6\u4EEC();
538
556
  await log.debug("\u627E\u5230 %o \u4E2A \u63D2\u4EF6, \u51C6\u5907\u6267\u884C...", \u63A5\u53E3\u63D2\u4EF6.length);
539
- let \u63D2\u4EF6\u7ED3\u679C = (await Promise.all(\u63A5\u53E3\u63D2\u4EF6.map(async (\u63D2\u4EF62) => await (await \u63D2\u4EF62.run()).\u83B7\u5F97\u5B9E\u73B0()(req, res)))).reduce((s, a) => Object.assign(s, a), {});
557
+ let \u63D2\u4EF6\u7ED3\u679C = (await Promise.all(\u63A5\u53E3\u63D2\u4EF6.map(async (\u63D2\u4EF62) => await (await \u63D2\u4EF62.run()).\u8FD0\u884C(req, res, { \u8BF7\u6C42id })))).reduce((s, a) => Object.assign(s, a), {});
540
558
  await log.debug("\u63D2\u4EF6 \u6267\u884C\u5B8C\u6BD5");
541
559
  await log.debug("\u51C6\u5907\u6267\u884C\u63A5\u53E3\u903B\u8F91...");
542
560
  let \u63A5\u53E3\u7ED3\u679C = await \u76EE\u6807\u63A5\u53E3.\u63A5\u53E3\u5B9E\u73B0(\u63D2\u4EF6\u7ED3\u679C);
@@ -9,7 +9,7 @@ export { 自定义数据插件 } from './plugin/extend/custom-data.cjs';
9
9
  export { JSON解析插件, 从接口类型获得JSON参数, 任意JSON解析插件, 任意JSON解析插件项, 合并JSON插件结果 } from './plugin/extend/json.cjs';
10
10
  export { 表单解析插件 } from './plugin/extend/urlencoded.cjs';
11
11
  export { WebSocket插件, 任意WS插件, 任意WS插件项, 取WS插件泛型, 取第一个WS插件结果 } from './plugin/extend/web-socket.cjs';
12
- export { 任意插件, 包装插件项, 取Task插件内部类型, 取Task插件类型, 取插件内部ts类型, 合并插件结果, 插件, 插件项类型 } from './plugin/plug.cjs';
12
+ export { 任意插件, 包装插件项, 取Task插件内部类型, 取Task插件类型, 取插件内部ts类型, 合并插件结果, 插件, 插件项类型, 附加参数类型 } from './plugin/plug.cjs';
13
13
  export { 正确JSON结果, 正确结果, 正确自定义结果, 结果, 错误JSON结果, 错误结果 } from './result/result.cjs';
14
14
  export { 服务器 } from './server/server.cjs';
15
15
  import '@lsby/ts-fp-data';
@@ -35,8 +35,8 @@ var \u63D2\u4EF6 = class {
35
35
  \u83B7\u5F97\u7C7B\u578B() {
36
36
  return this.\u7C7B\u578B;
37
37
  }
38
- \u83B7\u5F97\u5B9E\u73B0() {
39
- return this.\u5B9E\u73B0;
38
+ \u8FD0\u884C(req, res, \u9644\u52A0\u53C2\u6570) {
39
+ return this.\u5B9E\u73B0(req, res, \u9644\u52A0\u53C2\u6570);
40
40
  }
41
41
  };
42
42
 
@@ -33,8 +33,8 @@ var \u63D2\u4EF6 = class {
33
33
  \u83B7\u5F97\u7C7B\u578B() {
34
34
  return this.\u7C7B\u578B;
35
35
  }
36
- \u83B7\u5F97\u5B9E\u73B0() {
37
- return this.\u5B9E\u73B0;
36
+ \u8FD0\u884C(req, res, \u9644\u52A0\u53C2\u6570) {
37
+ return this.\u5B9E\u73B0(req, res, \u9644\u52A0\u53C2\u6570);
38
38
  }
39
39
  };
40
40
 
@@ -101,8 +101,8 @@ var \u63D2\u4EF6 = class {
101
101
  \u83B7\u5F97\u7C7B\u578B() {
102
102
  return this.\u7C7B\u578B;
103
103
  }
104
- \u83B7\u5F97\u5B9E\u73B0() {
105
- return this.\u5B9E\u73B0;
104
+ \u8FD0\u884C(req, res, \u9644\u52A0\u53C2\u6570) {
105
+ return this.\u5B9E\u73B0(req, res, \u9644\u52A0\u53C2\u6570);
106
106
  }
107
107
  };
108
108
 
@@ -110,8 +110,8 @@ var \u63D2\u4EF6 = class {
110
110
  var JSON\u89E3\u6790\u63D2\u4EF6 = class extends \u63D2\u4EF6 {
111
111
  log = Global.getItem("log");
112
112
  constructor(t, opt) {
113
- super(t, async (req, res) => {
114
- let log = (await this.log).extend("JSON\u89E3\u6790\u63D2\u4EF6");
113
+ super(t, async (req, res, \u9644\u52A0\u53C2\u6570) => {
114
+ let log = (await this.log).extend(\u9644\u52A0\u53C2\u6570.\u8BF7\u6C42id).extend("JSON\u89E3\u6790\u63D2\u4EF6");
115
115
  await new Promise(
116
116
  (pRes, _rej) => import_express.default.json(opt)(req, res, () => {
117
117
  pRes(null);
@@ -36,6 +36,39 @@ module.exports = __toCommonJS(urlencoded_exports);
36
36
  var import_node_util = require("util");
37
37
  var import_express = __toESM(require("express"), 1);
38
38
 
39
+ // src/global/global.ts
40
+ var import_ts_global = require("@lsby/ts-global");
41
+ var import_ts_log = require("@lsby/ts-log");
42
+
43
+ // src/global/ws.ts
44
+ var WebSocket\u7BA1\u7406\u8005 = class {
45
+ constructor(\u8FDE\u63A5\u8868) {
46
+ this.\u8FDE\u63A5\u8868 = \u8FDE\u63A5\u8868;
47
+ }
48
+ async \u589E\u52A0\u8FDE\u63A5(\u8BF7\u6C42id, ws\u53E5\u67C4) {
49
+ this.\u8FDE\u63A5\u8868[\u8BF7\u6C42id] = ws\u53E5\u67C4;
50
+ }
51
+ async \u67E5\u8BE2\u8FDE\u63A5\u5B58\u5728(\u8BF7\u6C42id) {
52
+ return this.\u8FDE\u63A5\u8868[\u8BF7\u6C42id] == null ? false : true;
53
+ }
54
+ async \u83B7\u5F97\u53E5\u67C4(\u8BF7\u6C42id) {
55
+ return this.\u8FDE\u63A5\u8868[\u8BF7\u6C42id] || null;
56
+ }
57
+ async \u5220\u9664\u8FDE\u63A5(id) {
58
+ delete this.\u8FDE\u63A5\u8868[id];
59
+ }
60
+ };
61
+
62
+ // src/global/global.ts
63
+ var Global = new import_ts_global.GlobalService([
64
+ new import_ts_global.GlobalAsyncItem("log", async () => {
65
+ return new import_ts_log.Log("@lsby:net-core");
66
+ }),
67
+ new import_ts_global.GlobalAsyncItem("WebSocket\u7BA1\u7406\u8005", async () => {
68
+ return new WebSocket\u7BA1\u7406\u8005({});
69
+ })
70
+ ]);
71
+
39
72
  // src/plugin/plug.ts
40
73
  var \u63D2\u4EF6 = class {
41
74
  constructor(\u7C7B\u578B, \u5B9E\u73B0) {
@@ -45,23 +78,27 @@ var \u63D2\u4EF6 = class {
45
78
  \u83B7\u5F97\u7C7B\u578B() {
46
79
  return this.\u7C7B\u578B;
47
80
  }
48
- \u83B7\u5F97\u5B9E\u73B0() {
49
- return this.\u5B9E\u73B0;
81
+ \u8FD0\u884C(req, res, \u9644\u52A0\u53C2\u6570) {
82
+ return this.\u5B9E\u73B0(req, res, \u9644\u52A0\u53C2\u6570);
50
83
  }
51
84
  };
52
85
 
53
86
  // src/plugin/extend/urlencoded.ts
54
87
  var \u8868\u5355\u89E3\u6790\u63D2\u4EF6 = class extends \u63D2\u4EF6 {
88
+ log = Global.getItem("log");
55
89
  constructor(t, opt) {
56
- super(t, async (req, res) => {
90
+ super(t, async (req, res, \u9644\u52A0\u53C2\u6570) => {
91
+ let log = (await this.log).extend(\u9644\u52A0\u53C2\u6570.\u8BF7\u6C42id).extend("JSON\u89E3\u6790\u63D2\u4EF6");
57
92
  await new Promise(
58
93
  (pRes, _rej) => import_express.default.urlencoded({ extended: true, ...opt })(req, res, () => {
59
94
  pRes(null);
60
95
  })
61
96
  );
62
97
  let parseResult = t.safeParse(req.body);
63
- if (!parseResult.success)
98
+ if (!parseResult.success) {
99
+ await log.err("\u89E3\u6790url\u7F16\u7801\u6B63\u6587\u5931\u8D25: %O", parseResult.error);
64
100
  throw new Error((0, import_node_util.format)("\u89E3\u6790url\u7F16\u7801\u6B63\u6587\u5931\u8D25: %O", parseResult.error));
101
+ }
65
102
  return parseResult.data;
66
103
  });
67
104
  }
@@ -4,6 +4,7 @@ import { 插件 as __ } from '../plug.cjs';
4
4
  import '@lsby/ts-fp-data';
5
5
 
6
6
  declare class 表单解析插件<Result extends z.AnyZodObject> extends __<Result> {
7
+ private log;
7
8
  constructor(t: Result, opt: Parameters<typeof express.urlencoded>[0]);
8
9
  }
9
10
 
@@ -67,13 +67,14 @@ var \u63D2\u4EF6 = class {
67
67
  \u83B7\u5F97\u7C7B\u578B() {
68
68
  return this.\u7C7B\u578B;
69
69
  }
70
- \u83B7\u5F97\u5B9E\u73B0() {
71
- return this.\u5B9E\u73B0;
70
+ \u8FD0\u884C(req, res, \u9644\u52A0\u53C2\u6570) {
71
+ return this.\u5B9E\u73B0(req, res, \u9644\u52A0\u53C2\u6570);
72
72
  }
73
73
  };
74
74
 
75
75
  // src/plugin/extend/web-socket.ts
76
76
  var WebSocket\u63D2\u4EF6 = class extends \u63D2\u4EF6 {
77
+ log = Global.getItem("log");
77
78
  constructor(\u4FE1\u606F\u63CF\u8FF0) {
78
79
  super(
79
80
  import_zod.z.object({
@@ -82,27 +83,39 @@ var WebSocket\u63D2\u4EF6 = class extends \u63D2\u4EF6 {
82
83
  \u5173\u95EDws\u8FDE\u63A5: import_zod.z.function(import_zod.z.tuple([]), import_zod.z.promise(import_zod.z.void()))
83
84
  }).or(import_zod.z.undefined())
84
85
  }),
85
- async (req, _res) => {
86
+ async (req, _res, \u9644\u52A0\u53C2\u6570) => {
87
+ let log = (await this.log).extend(\u9644\u52A0\u53C2\u6570.\u8BF7\u6C42id).extend("ws\u63D2\u4EF6");
86
88
  let wsId = req.headers["ws-client-id"];
87
89
  let WebSocket\u7BA1\u7406\u80052 = await Global.getItem("WebSocket\u7BA1\u7406\u8005");
88
90
  let ws\u53E5\u67C4 = null;
89
- if (typeof wsId == "string")
91
+ await log.debug("\u68C0\u67E5 ws-client-id \u5934\u4FE1\u606F", { wsId });
92
+ if (typeof wsId == "string") {
93
+ await log.debug("\u5C1D\u8BD5\u83B7\u53D6 WebSocket \u53E5\u67C4", { wsId });
90
94
  ws\u53E5\u67C4 = await WebSocket\u7BA1\u7406\u80052.\u83B7\u5F97\u53E5\u67C4(wsId);
91
- if (!ws\u53E5\u67C4)
95
+ }
96
+ if (!ws\u53E5\u67C4) {
97
+ await log.err("\u672A\u80FD\u83B7\u53D6\u5230\u6709\u6548\u7684 WebSocket \u53E5\u67C4");
92
98
  return { ws\u64CD\u4F5C: void 0 };
99
+ }
93
100
  let \u5B58\u5728\u7684ws\u53E5\u67C4 = ws\u53E5\u67C4;
101
+ await log.debug("WebSocket \u53E5\u67C4\u5DF2\u51C6\u5907\u597D", { wsId });
94
102
  return {
95
103
  ws\u64CD\u4F5C: {
96
104
  async \u53D1\u9001ws\u4FE1\u606F(\u4FE1\u606F) {
105
+ await log.debug("\u53D1\u9001 WebSocket \u4FE1\u606F", { \u4FE1\u606F });
97
106
  return new Promise((res, rej) => {
98
107
  \u5B58\u5728\u7684ws\u53E5\u67C4.send(JSON.stringify(\u4FE1\u606F), (err) => {
99
- if (err)
108
+ if (err) {
109
+ log.err("\u53D1\u9001 WebSocket \u4FE1\u606F\u5931\u8D25", { \u9519\u8BEF: err }).catch(console.error);
100
110
  return rej(err);
111
+ }
112
+ log.info("WebSocket \u4FE1\u606F\u53D1\u9001\u6210\u529F", { \u4FE1\u606F }).catch(console.error);
101
113
  return res();
102
114
  });
103
115
  });
104
116
  },
105
117
  async \u5173\u95EDws\u8FDE\u63A5() {
118
+ await log.debug("\u5173\u95ED WebSocket \u8FDE\u63A5");
106
119
  \u5B58\u5728\u7684ws\u53E5\u67C4.close();
107
120
  }
108
121
  }
@@ -12,6 +12,7 @@ declare class WebSocket插件<信息 extends z.AnyZodObject> extends __<z.ZodObj
12
12
  z.ZodUndefined
13
13
  ]>;
14
14
  }>> {
15
+ private log;
15
16
  constructor(信息描述: 信息);
16
17
  }
17
18
  type 任意WS插件 = WebSocket插件<any>;
@@ -31,8 +31,8 @@ var \u63D2\u4EF6 = class {
31
31
  \u83B7\u5F97\u7C7B\u578B() {
32
32
  return this.\u7C7B\u578B;
33
33
  }
34
- \u83B7\u5F97\u5B9E\u73B0() {
35
- return this.\u5B9E\u73B0;
34
+ \u8FD0\u884C(req, res, \u9644\u52A0\u53C2\u6570) {
35
+ return this.\u5B9E\u73B0(req, res, \u9644\u52A0\u53C2\u6570);
36
36
  }
37
37
  };
38
38
  // Annotate the CommonJS export names for ESM import in node:
@@ -2,13 +2,16 @@ import { Request, Response } from 'express';
2
2
  import { z } from 'zod';
3
3
  import { Task } from '@lsby/ts-fp-data';
4
4
 
5
+ type 附加参数类型 = {
6
+ 请求id: string;
7
+ };
5
8
  declare class 插件<Obj extends z.AnyZodObject> {
6
9
  private 类型;
7
10
  private 实现;
8
11
  protected readonly __类型保持符号?: Obj;
9
- constructor(类型: Obj, 实现: (req: Request, res: Response) => Promise<z.infer<Obj>>);
12
+ constructor(类型: Obj, 实现: (req: Request, res: Response, 附加参数: 附加参数类型) => Promise<z.infer<Obj>>);
10
13
  获得类型(): Obj;
11
- 获得实现(): (req: Request, res: Response) => Promise<z.infer<Obj>>;
14
+ 运行(req: Request, res: Response, 附加参数: 附加参数类型): Promise<z.infer<Obj>>;
12
15
  }
13
16
  type 任意插件 = 插件<any>;
14
17
  type 包装插件项<A> = Task<A>;
@@ -18,4 +21,4 @@ type 取Task插件类型<A> = A extends Task<infer x> ? x : never;
18
21
  type 取插件内部ts类型<A> = A extends 插件<infer x> ? z.infer<x> : never;
19
22
  type 合并插件结果<Arr extends Array<插件项类型>> = Arr extends [] ? {} : Arr extends [infer x, ...infer xs] ? x extends infer 插件项 ? xs extends Array<插件项类型> ? z.infer<取Task插件内部类型<插件项>> & 合并插件结果<xs> : {} : {} : {};
20
23
 
21
- export { type 任意插件, type 包装插件项, type 取Task插件内部类型, type 取Task插件类型, type 取插件内部ts类型, type 合并插件结果, 插件, type 插件项类型 };
24
+ export { type 任意插件, type 包装插件项, type 取Task插件内部类型, type 取Task插件类型, type 取插件内部ts类型, type 合并插件结果, 插件, type 插件项类型, type 附加参数类型 };
@@ -82,7 +82,8 @@ var \u670D\u52A1\u5668 = class {
82
82
  async run() {
83
83
  let app = (0, import_express.default)();
84
84
  app.use(async (req, res) => {
85
- let log = (await this.log).extend("\u8BF7\u6C42").extend((0, import_short_uuid.default)().new());
85
+ let \u8BF7\u6C42id = (0, import_short_uuid.default)().new();
86
+ let log = (await this.log).extend("\u8BF7\u6C42").extend(\u8BF7\u6C42id);
86
87
  try {
87
88
  let \u8BF7\u6C42\u8DEF\u5F84 = req.path;
88
89
  let \u8BF7\u6C42\u65B9\u6CD5 = req.method.toLowerCase();
@@ -97,7 +98,7 @@ var \u670D\u52A1\u5668 = class {
97
98
  let \u63A5\u53E3\u7C7B\u578B = \u76EE\u6807\u63A5\u53E3.\u83B7\u5F97\u63A5\u53E3\u7C7B\u578B();
98
99
  let \u63A5\u53E3\u63D2\u4EF6 = \u63A5\u53E3\u7C7B\u578B.\u83B7\u5F97\u63D2\u4EF6\u4EEC();
99
100
  await log.debug("\u627E\u5230 %o \u4E2A \u63D2\u4EF6, \u51C6\u5907\u6267\u884C...", \u63A5\u53E3\u63D2\u4EF6.length);
100
- let \u63D2\u4EF6\u7ED3\u679C = (await Promise.all(\u63A5\u53E3\u63D2\u4EF6.map(async (\u63D2\u4EF6) => await (await \u63D2\u4EF6.run()).\u83B7\u5F97\u5B9E\u73B0()(req, res)))).reduce((s, a) => Object.assign(s, a), {});
101
+ let \u63D2\u4EF6\u7ED3\u679C = (await Promise.all(\u63A5\u53E3\u63D2\u4EF6.map(async (\u63D2\u4EF6) => await (await \u63D2\u4EF6.run()).\u8FD0\u884C(req, res, { \u8BF7\u6C42id })))).reduce((s, a) => Object.assign(s, a), {});
101
102
  await log.debug("\u63D2\u4EF6 \u6267\u884C\u5B8C\u6BD5");
102
103
  await log.debug("\u51C6\u5907\u6267\u884C\u63A5\u53E3\u903B\u8F91...");
103
104
  let \u63A5\u53E3\u7ED3\u679C = await \u76EE\u6807\u63A5\u53E3.\u63A5\u53E3\u5B9E\u73B0(\u63D2\u4EF6\u7ED3\u679C);
@@ -7,8 +7,8 @@ var \u63D2\u4EF6 = class {
7
7
  \u83B7\u5F97\u7C7B\u578B() {
8
8
  return this.\u7C7B\u578B;
9
9
  }
10
- \u83B7\u5F97\u5B9E\u73B0() {
11
- return this.\u5B9E\u73B0;
10
+ \u8FD0\u884C(req, res, \u9644\u52A0\u53C2\u6570) {
11
+ return this.\u5B9E\u73B0(req, res, \u9644\u52A0\u53C2\u6570);
12
12
  }
13
13
  };
14
14
 
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  插件
3
- } from "./chunk-N4NY37XI.js";
3
+ } from "./chunk-43GZE5YL.js";
4
4
 
5
5
  // src/plugin/extend/chinese-path.ts
6
6
  import { URL } from "node:url";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  插件
3
- } from "./chunk-N4NY37XI.js";
3
+ } from "./chunk-43GZE5YL.js";
4
4
 
5
5
  // src/plugin/extend/custom-data.ts
6
6
  var \u81EA\u5B9A\u4E49\u6570\u636E\u63D2\u4EF6 = class extends \u63D2\u4EF6 {
@@ -3,11 +3,12 @@ import {
3
3
  } from "./chunk-BC6IISWS.js";
4
4
  import {
5
5
  插件
6
- } from "./chunk-N4NY37XI.js";
6
+ } from "./chunk-43GZE5YL.js";
7
7
 
8
8
  // src/plugin/extend/web-socket.ts
9
9
  import { z } from "zod";
10
10
  var WebSocket\u63D2\u4EF6 = class extends \u63D2\u4EF6 {
11
+ log = Global.getItem("log");
11
12
  constructor(\u4FE1\u606F\u63CF\u8FF0) {
12
13
  super(
13
14
  z.object({
@@ -16,27 +17,39 @@ var WebSocket\u63D2\u4EF6 = class extends \u63D2\u4EF6 {
16
17
  \u5173\u95EDws\u8FDE\u63A5: z.function(z.tuple([]), z.promise(z.void()))
17
18
  }).or(z.undefined())
18
19
  }),
19
- async (req, _res) => {
20
+ async (req, _res, \u9644\u52A0\u53C2\u6570) => {
21
+ let log = (await this.log).extend(\u9644\u52A0\u53C2\u6570.\u8BF7\u6C42id).extend("ws\u63D2\u4EF6");
20
22
  let wsId = req.headers["ws-client-id"];
21
23
  let WebSocket\u7BA1\u7406\u8005 = await Global.getItem("WebSocket\u7BA1\u7406\u8005");
22
24
  let ws\u53E5\u67C4 = null;
23
- if (typeof wsId == "string")
25
+ await log.debug("\u68C0\u67E5 ws-client-id \u5934\u4FE1\u606F", { wsId });
26
+ if (typeof wsId == "string") {
27
+ await log.debug("\u5C1D\u8BD5\u83B7\u53D6 WebSocket \u53E5\u67C4", { wsId });
24
28
  ws\u53E5\u67C4 = await WebSocket\u7BA1\u7406\u8005.\u83B7\u5F97\u53E5\u67C4(wsId);
25
- if (!ws\u53E5\u67C4)
29
+ }
30
+ if (!ws\u53E5\u67C4) {
31
+ await log.err("\u672A\u80FD\u83B7\u53D6\u5230\u6709\u6548\u7684 WebSocket \u53E5\u67C4");
26
32
  return { ws\u64CD\u4F5C: void 0 };
33
+ }
27
34
  let \u5B58\u5728\u7684ws\u53E5\u67C4 = ws\u53E5\u67C4;
35
+ await log.debug("WebSocket \u53E5\u67C4\u5DF2\u51C6\u5907\u597D", { wsId });
28
36
  return {
29
37
  ws\u64CD\u4F5C: {
30
38
  async \u53D1\u9001ws\u4FE1\u606F(\u4FE1\u606F) {
39
+ await log.debug("\u53D1\u9001 WebSocket \u4FE1\u606F", { \u4FE1\u606F });
31
40
  return new Promise((res, rej) => {
32
41
  \u5B58\u5728\u7684ws\u53E5\u67C4.send(JSON.stringify(\u4FE1\u606F), (err) => {
33
- if (err)
42
+ if (err) {
43
+ log.err("\u53D1\u9001 WebSocket \u4FE1\u606F\u5931\u8D25", { \u9519\u8BEF: err }).catch(console.error);
34
44
  return rej(err);
45
+ }
46
+ log.info("WebSocket \u4FE1\u606F\u53D1\u9001\u6210\u529F", { \u4FE1\u606F }).catch(console.error);
35
47
  return res();
36
48
  });
37
49
  });
38
50
  },
39
51
  async \u5173\u95EDws\u8FDE\u63A5() {
52
+ await log.debug("\u5173\u95ED WebSocket \u8FDE\u63A5");
40
53
  \u5B58\u5728\u7684ws\u53E5\u67C4.close();
41
54
  }
42
55
  }
@@ -1,21 +1,28 @@
1
+ import {
2
+ Global
3
+ } from "./chunk-BC6IISWS.js";
1
4
  import {
2
5
  插件
3
- } from "./chunk-N4NY37XI.js";
6
+ } from "./chunk-43GZE5YL.js";
4
7
 
5
8
  // src/plugin/extend/urlencoded.ts
6
9
  import { format } from "node:util";
7
10
  import express from "express";
8
11
  var \u8868\u5355\u89E3\u6790\u63D2\u4EF6 = class extends \u63D2\u4EF6 {
12
+ log = Global.getItem("log");
9
13
  constructor(t, opt) {
10
- super(t, async (req, res) => {
14
+ super(t, async (req, res, \u9644\u52A0\u53C2\u6570) => {
15
+ let log = (await this.log).extend(\u9644\u52A0\u53C2\u6570.\u8BF7\u6C42id).extend("JSON\u89E3\u6790\u63D2\u4EF6");
11
16
  await new Promise(
12
17
  (pRes, _rej) => express.urlencoded({ extended: true, ...opt })(req, res, () => {
13
18
  pRes(null);
14
19
  })
15
20
  );
16
21
  let parseResult = t.safeParse(req.body);
17
- if (!parseResult.success)
22
+ if (!parseResult.success) {
23
+ await log.err("\u89E3\u6790url\u7F16\u7801\u6B63\u6587\u5931\u8D25: %O", parseResult.error);
18
24
  throw new Error(format("\u89E3\u6790url\u7F16\u7801\u6B63\u6587\u5931\u8D25: %O", parseResult.error));
25
+ }
19
26
  return parseResult.data;
20
27
  });
21
28
  }
@@ -6,7 +6,7 @@ import {
6
6
  } from "./chunk-BC6IISWS.js";
7
7
  import {
8
8
  插件
9
- } from "./chunk-N4NY37XI.js";
9
+ } from "./chunk-43GZE5YL.js";
10
10
 
11
11
  // src/plugin/extend/json.ts
12
12
  import { format } from "node:util";
@@ -14,8 +14,8 @@ import express from "express";
14
14
  var JSON\u89E3\u6790\u63D2\u4EF6 = class extends \u63D2\u4EF6 {
15
15
  log = Global.getItem("log");
16
16
  constructor(t, opt) {
17
- super(t, async (req, res) => {
18
- let log = (await this.log).extend("JSON\u89E3\u6790\u63D2\u4EF6");
17
+ super(t, async (req, res, \u9644\u52A0\u53C2\u6570) => {
18
+ let log = (await this.log).extend(\u9644\u52A0\u53C2\u6570.\u8BF7\u6C42id).extend("JSON\u89E3\u6790\u63D2\u4EF6");
19
19
  await new Promise(
20
20
  (pRes, _rej) => express.json(opt)(req, res, () => {
21
21
  pRes(null);
@@ -17,7 +17,8 @@ var \u670D\u52A1\u5668 = class {
17
17
  async run() {
18
18
  let app = express();
19
19
  app.use(async (req, res) => {
20
- let log = (await this.log).extend("\u8BF7\u6C42").extend(short().new());
20
+ let \u8BF7\u6C42id = short().new();
21
+ let log = (await this.log).extend("\u8BF7\u6C42").extend(\u8BF7\u6C42id);
21
22
  try {
22
23
  let \u8BF7\u6C42\u8DEF\u5F84 = req.path;
23
24
  let \u8BF7\u6C42\u65B9\u6CD5 = req.method.toLowerCase();
@@ -32,7 +33,7 @@ var \u670D\u52A1\u5668 = class {
32
33
  let \u63A5\u53E3\u7C7B\u578B = \u76EE\u6807\u63A5\u53E3.\u83B7\u5F97\u63A5\u53E3\u7C7B\u578B();
33
34
  let \u63A5\u53E3\u63D2\u4EF6 = \u63A5\u53E3\u7C7B\u578B.\u83B7\u5F97\u63D2\u4EF6\u4EEC();
34
35
  await log.debug("\u627E\u5230 %o \u4E2A \u63D2\u4EF6, \u51C6\u5907\u6267\u884C...", \u63A5\u53E3\u63D2\u4EF6.length);
35
- let \u63D2\u4EF6\u7ED3\u679C = (await Promise.all(\u63A5\u53E3\u63D2\u4EF6.map(async (\u63D2\u4EF6) => await (await \u63D2\u4EF6.run()).\u83B7\u5F97\u5B9E\u73B0()(req, res)))).reduce((s, a) => Object.assign(s, a), {});
36
+ let \u63D2\u4EF6\u7ED3\u679C = (await Promise.all(\u63A5\u53E3\u63D2\u4EF6.map(async (\u63D2\u4EF6) => await (await \u63D2\u4EF6.run()).\u8FD0\u884C(req, res, { \u8BF7\u6C42id })))).reduce((s, a) => Object.assign(s, a), {});
36
37
  await log.debug("\u63D2\u4EF6 \u6267\u884C\u5B8C\u6BD5");
37
38
  await log.debug("\u51C6\u5907\u6267\u884C\u63A5\u53E3\u903B\u8F91...");
38
39
  let \u63A5\u53E3\u7ED3\u679C = await \u76EE\u6807\u63A5\u53E3.\u63A5\u53E3\u5B9E\u73B0(\u63D2\u4EF6\u7ED3\u679C);
@@ -9,7 +9,7 @@ export { 自定义数据插件 } from './plugin/extend/custom-data.js';
9
9
  export { JSON解析插件, 从接口类型获得JSON参数, 任意JSON解析插件, 任意JSON解析插件项, 合并JSON插件结果 } from './plugin/extend/json.js';
10
10
  export { 表单解析插件 } from './plugin/extend/urlencoded.js';
11
11
  export { WebSocket插件, 任意WS插件, 任意WS插件项, 取WS插件泛型, 取第一个WS插件结果 } from './plugin/extend/web-socket.js';
12
- export { 任意插件, 包装插件项, 取Task插件内部类型, 取Task插件类型, 取插件内部ts类型, 合并插件结果, 插件, 插件项类型 } from './plugin/plug.js';
12
+ export { 任意插件, 包装插件项, 取Task插件内部类型, 取Task插件类型, 取插件内部ts类型, 合并插件结果, 插件, 插件项类型, 附加参数类型 } from './plugin/plug.js';
13
13
  export { 正确JSON结果, 正确结果, 正确自定义结果, 结果, 错误JSON结果, 错误结果 } from './result/result.js';
14
14
  export { 服务器 } from './server/server.js';
15
15
  import '@lsby/ts-fp-data';
package/dist/esm/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  WebSocket插件
3
- } from "./chunk-MUTTFLKG.js";
3
+ } from "./chunk-GAC4ETIB.js";
4
4
  import {
5
5
  JSON接口
6
6
  } from "./chunk-PVCULVI3.js";
@@ -10,19 +10,16 @@ import {
10
10
  } from "./chunk-BVLGIDYF.js";
11
11
  import {
12
12
  中文路径支持插件
13
- } from "./chunk-3PONWJ35.js";
13
+ } from "./chunk-47T4ZLNQ.js";
14
14
  import {
15
15
  自定义数据插件
16
- } from "./chunk-2MN4G2DG.js";
16
+ } from "./chunk-FDDCLNUD.js";
17
17
  import {
18
18
  JSON解析插件
19
- } from "./chunk-VBFA32JO.js";
19
+ } from "./chunk-M7QXZWBP.js";
20
20
  import {
21
21
  表单解析插件
22
- } from "./chunk-OOCVEPVP.js";
23
- import {
24
- 服务器
25
- } from "./chunk-47GMSX5W.js";
22
+ } from "./chunk-M52TXG2M.js";
26
23
  import {
27
24
  正确JSON结果,
28
25
  正确结果,
@@ -31,6 +28,9 @@ import {
31
28
  错误JSON结果,
32
29
  错误结果
33
30
  } from "./chunk-F6MKRRVF.js";
31
+ import {
32
+ 服务器
33
+ } from "./chunk-R3PAE6XG.js";
34
34
  import "./chunk-PVE5VI5K.js";
35
35
  import {
36
36
  业务行为
@@ -48,7 +48,7 @@ import {
48
48
  } from "./chunk-SF5Z34AP.js";
49
49
  import {
50
50
  插件
51
- } from "./chunk-N4NY37XI.js";
51
+ } from "./chunk-43GZE5YL.js";
52
52
  export {
53
53
  JSON\u63A5\u53E3,
54
54
  JSON\u72B6\u6001\u63A5\u53E3,
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  中文路径支持插件
3
- } from "../../chunk-3PONWJ35.js";
4
- import "../../chunk-N4NY37XI.js";
3
+ } from "../../chunk-47T4ZLNQ.js";
4
+ import "../../chunk-43GZE5YL.js";
5
5
  export {
6
6
  \u4E2D\u6587\u8DEF\u5F84\u652F\u6301\u63D2\u4EF6
7
7
  };
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  自定义数据插件
3
- } from "../../chunk-2MN4G2DG.js";
4
- import "../../chunk-N4NY37XI.js";
3
+ } from "../../chunk-FDDCLNUD.js";
4
+ import "../../chunk-43GZE5YL.js";
5
5
  export {
6
6
  \u81EA\u5B9A\u4E49\u6570\u636E\u63D2\u4EF6
7
7
  };
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  JSON解析插件
3
- } from "../../chunk-VBFA32JO.js";
3
+ } from "../../chunk-M7QXZWBP.js";
4
4
  import "../../chunk-PVE5VI5K.js";
5
5
  import "../../chunk-BC6IISWS.js";
6
6
  import "../../chunk-EAVNASDB.js";
7
- import "../../chunk-N4NY37XI.js";
7
+ import "../../chunk-43GZE5YL.js";
8
8
  export {
9
9
  JSON\u89E3\u6790\u63D2\u4EF6
10
10
  };
@@ -4,6 +4,7 @@ import { 插件 as __ } from '../plug.js';
4
4
  import '@lsby/ts-fp-data';
5
5
 
6
6
  declare class 表单解析插件<Result extends z.AnyZodObject> extends __<Result> {
7
+ private log;
7
8
  constructor(t: Result, opt: Parameters<typeof express.urlencoded>[0]);
8
9
  }
9
10
 
@@ -1,7 +1,9 @@
1
1
  import {
2
2
  表单解析插件
3
- } from "../../chunk-OOCVEPVP.js";
4
- import "../../chunk-N4NY37XI.js";
3
+ } from "../../chunk-M52TXG2M.js";
4
+ import "../../chunk-BC6IISWS.js";
5
+ import "../../chunk-EAVNASDB.js";
6
+ import "../../chunk-43GZE5YL.js";
5
7
  export {
6
8
  \u8868\u5355\u89E3\u6790\u63D2\u4EF6
7
9
  };
@@ -12,6 +12,7 @@ declare class WebSocket插件<信息 extends z.AnyZodObject> extends __<z.ZodObj
12
12
  z.ZodUndefined
13
13
  ]>;
14
14
  }>> {
15
+ private log;
15
16
  constructor(信息描述: 信息);
16
17
  }
17
18
  type 任意WS插件 = WebSocket插件<any>;
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  WebSocket插件
3
- } from "../../chunk-MUTTFLKG.js";
3
+ } from "../../chunk-GAC4ETIB.js";
4
4
  import "../../chunk-BC6IISWS.js";
5
5
  import "../../chunk-EAVNASDB.js";
6
- import "../../chunk-N4NY37XI.js";
6
+ import "../../chunk-43GZE5YL.js";
7
7
  export {
8
8
  WebSocket\u63D2\u4EF6
9
9
  };
@@ -2,13 +2,16 @@ import { Request, Response } from 'express';
2
2
  import { z } from 'zod';
3
3
  import { Task } from '@lsby/ts-fp-data';
4
4
 
5
+ type 附加参数类型 = {
6
+ 请求id: string;
7
+ };
5
8
  declare class 插件<Obj extends z.AnyZodObject> {
6
9
  private 类型;
7
10
  private 实现;
8
11
  protected readonly __类型保持符号?: Obj;
9
- constructor(类型: Obj, 实现: (req: Request, res: Response) => Promise<z.infer<Obj>>);
12
+ constructor(类型: Obj, 实现: (req: Request, res: Response, 附加参数: 附加参数类型) => Promise<z.infer<Obj>>);
10
13
  获得类型(): Obj;
11
- 获得实现(): (req: Request, res: Response) => Promise<z.infer<Obj>>;
14
+ 运行(req: Request, res: Response, 附加参数: 附加参数类型): Promise<z.infer<Obj>>;
12
15
  }
13
16
  type 任意插件 = 插件<any>;
14
17
  type 包装插件项<A> = Task<A>;
@@ -18,4 +21,4 @@ type 取Task插件类型<A> = A extends Task<infer x> ? x : never;
18
21
  type 取插件内部ts类型<A> = A extends 插件<infer x> ? z.infer<x> : never;
19
22
  type 合并插件结果<Arr extends Array<插件项类型>> = Arr extends [] ? {} : Arr extends [infer x, ...infer xs] ? x extends infer 插件项 ? xs extends Array<插件项类型> ? z.infer<取Task插件内部类型<插件项>> & 合并插件结果<xs> : {} : {} : {};
20
23
 
21
- export { type 任意插件, type 包装插件项, type 取Task插件内部类型, type 取Task插件类型, type 取插件内部ts类型, type 合并插件结果, 插件, type 插件项类型 };
24
+ export { type 任意插件, type 包装插件项, type 取Task插件内部类型, type 取Task插件类型, type 取插件内部ts类型, type 合并插件结果, 插件, type 插件项类型, type 附加参数类型 };
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  插件
3
- } from "../chunk-N4NY37XI.js";
3
+ } from "../chunk-43GZE5YL.js";
4
4
  export {
5
5
  \u63D2\u4EF6
6
6
  };
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  服务器
3
- } from "../chunk-47GMSX5W.js";
3
+ } from "../chunk-R3PAE6XG.js";
4
4
  import "../chunk-BC6IISWS.js";
5
5
  import "../chunk-EAVNASDB.js";
6
6
  export {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lsby/net-core",
3
- "version": "0.3.41",
3
+ "version": "0.3.42",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  "require": "./dist/cjs/index.cjs",