@lsby/net-core 0.10.1 → 0.10.3

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.
@@ -31,6 +31,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
31
31
  var index_exports = {};
32
32
  __export(index_exports, {
33
33
  EXPORT_TYPE: () => EXPORT_TYPE,
34
+ Express\u517C\u5BB9\u63A5\u53E3\u5C01\u88C5: () => Express\u517C\u5BB9\u63A5\u53E3\u5C01\u88C5,
34
35
  GET\u53C2\u6570\u89E3\u6790\u63D2\u4EF6: () => GET\u53C2\u6570\u89E3\u6790\u63D2\u4EF6,
35
36
  JSON\u89E3\u6790\u63D2\u4EF6: () => JSON\u89E3\u6790\u63D2\u4EF6,
36
37
  WebSocket\u63D2\u4EF6: () => WebSocket\u63D2\u4EF6,
@@ -46,6 +47,7 @@ __export(index_exports, {
46
47
  \u63A5\u53E3\u903B\u8F91: () => \u63A5\u53E3\u903B\u8F91,
47
48
  \u63A5\u53E3\u903B\u8F91Base: () => \u63A5\u53E3\u903B\u8F91Base,
48
49
  \u63D2\u4EF6: () => \u63D2\u4EF6,
50
+ \u6587\u4EF6\u4E0B\u8F7D\u63A5\u53E3\u5C01\u88C5: () => \u6587\u4EF6\u4E0B\u8F7D\u63A5\u53E3\u5C01\u88C5,
49
51
  \u666E\u901A\u5BF9\u8C61\u6DF1\u5408\u5E76: () => \u666E\u901A\u5BF9\u8C61\u6DF1\u5408\u5E76,
50
52
  \u670D\u52A1\u5668: () => \u670D\u52A1\u5668,
51
53
  \u6784\u9020\u5143\u7EC4: () => \u6784\u9020\u5143\u7EC4,
@@ -732,9 +734,96 @@ var \u5E38\u7528\u76F4\u63A5\u5F62\u5F0F\u63A5\u53E3\u5C01\u88C5 = class extends
732
734
  super(\u8BF7\u6C42\u8DEF\u5F84, \u8BF7\u6C42\u65B9\u6CD5, \u63A5\u53E3\u903B\u8F912, \u63A5\u53E3\u9519\u8BEF\u8F93\u51FA\u5F62\u5F0F, \u63A5\u53E3\u6B63\u786E\u8F93\u51FA\u5F62\u5F0F, \u63A5\u53E3\u8F6C\u6362\u5668, new \u5E38\u7528\u8FD4\u56DE\u5668());
733
735
  }
734
736
  };
737
+
738
+ // src/wrapper/express-compatible-wrapper.ts
739
+ var import_ts_fp_data2 = require("@lsby/ts-fp-data");
740
+ var import_zod9 = require("zod");
741
+ var Express\u517C\u5BB9\u63A5\u53E3\u5C01\u88C5 = class extends \u63A5\u53E3 {
742
+ constructor(\u8BF7\u6C42\u8DEF\u5F84, \u8BF7\u6C42\u65B9\u6CD5, \u5904\u7406\u51FD\u6570) {
743
+ let \u903B\u8F91 = \u63A5\u53E3\u903B\u8F91Base.\u6784\u9020([], async () => {
744
+ return new import_ts_fp_data2.Right({});
745
+ });
746
+ let \u8F6C\u6362\u5668 = new Express\u517C\u5BB9\u7ED3\u679C\u8F6C\u6362\u5668();
747
+ let \u8FD4\u56DE\u5668 = new Express\u517C\u5BB9\u8FD4\u56DE\u5668(\u5904\u7406\u51FD\u6570);
748
+ super(
749
+ \u8BF7\u6C42\u8DEF\u5F84,
750
+ \u8BF7\u6C42\u65B9\u6CD5,
751
+ \u903B\u8F91,
752
+ import_zod9.z.any(),
753
+ // 错误形式不做限制
754
+ import_zod9.z.any(),
755
+ // 正确形式不做限制
756
+ \u8F6C\u6362\u5668,
757
+ \u8FD4\u56DE\u5668
758
+ );
759
+ }
760
+ };
761
+ var Express\u517C\u5BB9\u7ED3\u679C\u8F6C\u6362\u5668 = class extends \u63A5\u53E3\u7ED3\u679C\u8F6C\u6362\u5668 {
762
+ \u5B9E\u73B0(\u6570\u636E) {
763
+ return \u6570\u636E;
764
+ }
765
+ };
766
+ var Express\u517C\u5BB9\u8FD4\u56DE\u5668 = class extends \u63A5\u53E3\u7ED3\u679C\u8FD4\u56DE\u5668 {
767
+ constructor(\u5904\u7406\u51FD\u6570) {
768
+ super();
769
+ this.\u5904\u7406\u51FD\u6570 = \u5904\u7406\u51FD\u6570;
770
+ }
771
+ \u8FD4\u56DE(req, res, _\u7ED3\u679C) {
772
+ return this.\u5904\u7406\u51FD\u6570(req, res);
773
+ }
774
+ };
775
+
776
+ // src/wrapper/file-download-wrapper.ts
777
+ var import_node_fs = require("fs");
778
+ var import_zod10 = require("zod");
779
+ var \u6587\u4EF6\u4E0B\u8F7D\u63A5\u53E3\u5C01\u88C5 = class extends \u63A5\u53E3 {
780
+ constructor(\u8BF7\u6C42\u8DEF\u5F84, \u8BF7\u6C42\u65B9\u6CD5, \u63A5\u53E3\u903B\u8F912, \u903B\u8F91\u9519\u8BEF\u7C7B\u578BZod, \u6587\u4EF6\u540D, MIME\u7C7B\u578B) {
781
+ let \u63A5\u53E3\u9519\u8BEF\u8F93\u51FA\u5F62\u5F0F = import_zod10.z.object({ status: import_zod10.z.literal("fail"), data: \u903B\u8F91\u9519\u8BEF\u7C7B\u578BZod });
782
+ let \u63A5\u53E3\u8F6C\u6362\u5668 = new \u76F4\u63A5\u5F62\u5F0F\u8F6C\u6362\u5668();
783
+ let \u8FD4\u56DE\u5668 = new \u6587\u4EF6\u4E0B\u8F7D\u8FD4\u56DE\u5668(\u6587\u4EF6\u540D, MIME\u7C7B\u578B);
784
+ super(
785
+ \u8BF7\u6C42\u8DEF\u5F84,
786
+ \u8BF7\u6C42\u65B9\u6CD5,
787
+ \u63A5\u53E3\u903B\u8F912,
788
+ \u63A5\u53E3\u9519\u8BEF\u8F93\u51FA\u5F62\u5F0F,
789
+ import_zod10.z.any(),
790
+ // 正确形式任意
791
+ \u63A5\u53E3\u8F6C\u6362\u5668,
792
+ \u8FD4\u56DE\u5668
793
+ );
794
+ }
795
+ };
796
+ var \u6587\u4EF6\u4E0B\u8F7D\u8FD4\u56DE\u5668 = class extends \u63A5\u53E3\u7ED3\u679C\u8FD4\u56DE\u5668 {
797
+ constructor(\u6587\u4EF6\u540D, MIME\u7C7B\u578B) {
798
+ super();
799
+ this.\u6587\u4EF6\u540D = \u6587\u4EF6\u540D;
800
+ this.MIME\u7C7B\u578B = MIME\u7C7B\u578B;
801
+ }
802
+ async \u8FD4\u56DE(req, res, \u7ED3\u679C) {
803
+ if (this.MIME\u7C7B\u578B !== void 0) {
804
+ res.setHeader("Content-Type", this.MIME\u7C7B\u578B);
805
+ }
806
+ if (this.\u6587\u4EF6\u540D !== void 0) {
807
+ let encodedFilename = encodeURIComponent(this.\u6587\u4EF6\u540D);
808
+ res.setHeader("Content-Disposition", `attachment; filename*=UTF-8''${encodedFilename}`);
809
+ }
810
+ if (Buffer.isBuffer(\u7ED3\u679C)) {
811
+ res.setHeader("Content-Length", \u7ED3\u679C.length);
812
+ res.send(\u7ED3\u679C);
813
+ } else if (typeof \u7ED3\u679C === "string") {
814
+ let \u6D41 = (0, import_node_fs.createReadStream)(\u7ED3\u679C);
815
+ \u6D41.pipe(res);
816
+ } else if (typeof \u7ED3\u679C.pipe === "function") {
817
+ \u7ED3\u679C.pipe(res);
818
+ } else {
819
+ res.status(400).send("Invalid file data");
820
+ }
821
+ }
822
+ };
735
823
  // Annotate the CommonJS export names for ESM import in node:
736
824
  0 && (module.exports = {
737
825
  EXPORT_TYPE,
826
+ Express\u517C\u5BB9\u63A5\u53E3\u5C01\u88C5,
738
827
  GET\u53C2\u6570\u89E3\u6790\u63D2\u4EF6,
739
828
  JSON\u89E3\u6790\u63D2\u4EF6,
740
829
  WebSocket\u63D2\u4EF6,
@@ -750,6 +839,7 @@ var \u5E38\u7528\u76F4\u63A5\u5F62\u5F0F\u63A5\u53E3\u5C01\u88C5 = class extends
750
839
  \u63A5\u53E3\u903B\u8F91,
751
840
  \u63A5\u53E3\u903B\u8F91Base,
752
841
  \u63D2\u4EF6,
842
+ \u6587\u4EF6\u4E0B\u8F7D\u63A5\u53E3\u5C01\u88C5,
753
843
  \u666E\u901A\u5BF9\u8C61\u6DF1\u5408\u5E76,
754
844
  \u670D\u52A1\u5668,
755
845
  \u6784\u9020\u5143\u7EC4,
@@ -13,9 +13,12 @@ export { GetNetCoreExportTypeDefine, GetNetCoreExportTypeName, NetCoreExportType
13
13
  export { 常用形式接口封装 } from './wrapper/common-wrapper.cjs';
14
14
  export { 常用形式并自定义返回器接口封装 } from './wrapper/common-wrapper-return.cjs';
15
15
  export { 常用直接形式接口封装 } from './wrapper/deferred-result-wrapper.cjs';
16
+ export { Express兼容接口封装 } from './wrapper/express-compatible-wrapper.cjs';
17
+ export { 文件下载接口封装, 文件数据类型 } from './wrapper/file-download-wrapper.cjs';
16
18
  import 'zod';
17
19
  import '@lsby/ts-fp-data';
18
20
  import 'express';
19
21
  import './help/interior.cjs';
20
22
  import '@lsby/ts-log';
21
23
  import 'node:http';
24
+ import 'node:fs';
@@ -0,0 +1,228 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/wrapper/express-compatible-wrapper.ts
21
+ var express_compatible_wrapper_exports = {};
22
+ __export(express_compatible_wrapper_exports, {
23
+ Express\u517C\u5BB9\u63A5\u53E3\u5C01\u88C5: () => Express\u517C\u5BB9\u63A5\u53E3\u5C01\u88C5
24
+ });
25
+ module.exports = __toCommonJS(express_compatible_wrapper_exports);
26
+ var import_ts_fp_data2 = require("@lsby/ts-fp-data");
27
+ var import_zod = require("zod");
28
+
29
+ // src/interface/interface-base.ts
30
+ var \u63A5\u53E3 = class {
31
+ constructor(\u8BF7\u6C42\u8DEF\u5F84, \u8BF7\u6C42\u65B9\u6CD5, \u63A5\u53E3\u903B\u8F91, \u63A5\u53E3\u9519\u8BEF\u5F62\u5F0FZod, \u63A5\u53E3\u6B63\u786E\u5F62\u5F0FZod, \u7ED3\u679C\u8F6C\u6362\u5668, \u7ED3\u679C\u8FD4\u56DE\u5668) {
32
+ this.\u8BF7\u6C42\u8DEF\u5F84 = \u8BF7\u6C42\u8DEF\u5F84;
33
+ this.\u8BF7\u6C42\u65B9\u6CD5 = \u8BF7\u6C42\u65B9\u6CD5;
34
+ this.\u63A5\u53E3\u903B\u8F91 = \u63A5\u53E3\u903B\u8F91;
35
+ this.\u63A5\u53E3\u9519\u8BEF\u5F62\u5F0FZod = \u63A5\u53E3\u9519\u8BEF\u5F62\u5F0FZod;
36
+ this.\u63A5\u53E3\u6B63\u786E\u5F62\u5F0FZod = \u63A5\u53E3\u6B63\u786E\u5F62\u5F0FZod;
37
+ this.\u7ED3\u679C\u8F6C\u6362\u5668 = \u7ED3\u679C\u8F6C\u6362\u5668;
38
+ this.\u7ED3\u679C\u8FD4\u56DE\u5668 = \u7ED3\u679C\u8FD4\u56DE\u5668;
39
+ }
40
+ \u83B7\u5F97\u8DEF\u5F84() {
41
+ return this.\u8BF7\u6C42\u8DEF\u5F84;
42
+ }
43
+ \u83B7\u5F97\u65B9\u6CD5() {
44
+ return this.\u8BF7\u6C42\u65B9\u6CD5;
45
+ }
46
+ \u83B7\u5F97\u903B\u8F91() {
47
+ return this.\u63A5\u53E3\u903B\u8F91;
48
+ }
49
+ \u83B7\u5F97\u63A5\u53E3\u9519\u8BEF\u5F62\u5F0FZod() {
50
+ return this.\u63A5\u53E3\u9519\u8BEF\u5F62\u5F0FZod;
51
+ }
52
+ \u83B7\u5F97\u63A5\u53E3\u6B63\u786E\u5F62\u5F0FZod() {
53
+ return this.\u63A5\u53E3\u6B63\u786E\u5F62\u5F0FZod;
54
+ }
55
+ \u83B7\u5F97\u7ED3\u679C\u8F6C\u6362\u5668() {
56
+ return this.\u7ED3\u679C\u8F6C\u6362\u5668;
57
+ }
58
+ \u83B7\u5F97\u7ED3\u679C\u8FD4\u56DE\u5668() {
59
+ return this.\u7ED3\u679C\u8FD4\u56DE\u5668;
60
+ }
61
+ };
62
+
63
+ // src/interface/interface-logic.ts
64
+ var import_ts_fp_data = require("@lsby/ts-fp-data");
65
+
66
+ // src/help/help.ts
67
+ function \u666E\u901A\u5BF9\u8C61\u6DF1\u5408\u5E76(target, source) {
68
+ if (typeof source !== "object" || source === null || Object.getPrototypeOf(source) !== Object.prototype) {
69
+ return source;
70
+ }
71
+ if (typeof target !== "object" || target === null || Object.getPrototypeOf(target) !== Object.prototype) {
72
+ return source;
73
+ }
74
+ let result = { ...target };
75
+ for (let key in source) {
76
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
77
+ if (typeof source[key] === "object" && source[key] !== null && Object.getPrototypeOf(source[key]) === Object.prototype && typeof target[key] === "object" && target[key] !== null && Object.getPrototypeOf(target[key]) === Object.prototype) {
78
+ result[key] = \u666E\u901A\u5BF9\u8C61\u6DF1\u5408\u5E76(target[key], source[key]);
79
+ } else {
80
+ result[key] = source[key];
81
+ }
82
+ }
83
+ }
84
+ return result;
85
+ }
86
+
87
+ // src/interface/interface-logic.ts
88
+ var \u63A5\u53E3\u903B\u8F91Base = class _\u63A5\u53E3\u903B\u8F91Base {
89
+ constructor(\u4E0A\u6E38\u63A5\u53E3, \u6700\u540E\u63A5\u53E3) {
90
+ this.\u4E0A\u6E38\u63A5\u53E3 = \u4E0A\u6E38\u63A5\u53E3;
91
+ this.\u6700\u540E\u63A5\u53E3 = \u6700\u540E\u63A5\u53E3;
92
+ }
93
+ static \u7A7A\u903B\u8F91() {
94
+ return _\u63A5\u53E3\u903B\u8F91Base.\u6784\u9020([], async () => new import_ts_fp_data.Right({}));
95
+ }
96
+ static \u5B8C\u6574\u6784\u9020(\u63D2\u4EF6\u4EEC, \u5B9E\u73B0, \u6E05\u7406\u51FD\u6570, \u4E0A\u6E38\u63A5\u53E3\u903B\u8F91, \u6700\u540E\u63A5\u53E3\u903B\u8F91) {
97
+ let c = new class extends _\u63A5\u53E3\u903B\u8F91Base {
98
+ \u83B7\u5F97\u6E05\u7406\u51FD\u6570() {
99
+ return \u6E05\u7406\u51FD\u6570;
100
+ }
101
+ \u83B7\u5F97\u63D2\u4EF6\u4EEC() {
102
+ return \u63D2\u4EF6\u4EEC;
103
+ }
104
+ \u5B9E\u73B0(\u53C2\u6570, \u903B\u8F91\u9644\u52A0\u53C2\u6570, \u8BF7\u6C42\u9644\u52A0\u53C2\u6570) {
105
+ return \u5B9E\u73B0(\u53C2\u6570, \u903B\u8F91\u9644\u52A0\u53C2\u6570, \u8BF7\u6C42\u9644\u52A0\u53C2\u6570);
106
+ }
107
+ }(\u4E0A\u6E38\u63A5\u53E3\u903B\u8F91, \u6700\u540E\u63A5\u53E3\u903B\u8F91);
108
+ return c;
109
+ }
110
+ static \u6784\u9020(\u63D2\u4EF6\u4EEC, \u5B9E\u73B0, \u6E05\u7406\u51FD\u6570) {
111
+ return this.\u5B8C\u6574\u6784\u9020(\u63D2\u4EF6\u4EEC, \u5B9E\u73B0, \u6E05\u7406\u51FD\u6570, null, null);
112
+ }
113
+ async \u8BA1\u7B97\u63D2\u4EF6\u7ED3\u679C(req, res, \u8BF7\u6C42\u9644\u52A0\u53C2\u6570) {
114
+ let \u63D2\u4EF6\u4EEC = this.\u83B7\u5F97\u63D2\u4EF6\u4EEC();
115
+ let \u6240\u6709\u63D2\u4EF6\u7ED3\u679C = [];
116
+ for (let \u63D2\u4EF6 of \u63D2\u4EF6\u4EEC) {
117
+ let \u63D2\u4EF6\u8FD4\u56DE = await \u63D2\u4EF6.\u8FD0\u884C(req, res, \u8BF7\u6C42\u9644\u52A0\u53C2\u6570);
118
+ \u6240\u6709\u63D2\u4EF6\u7ED3\u679C.push(\u63D2\u4EF6\u8FD4\u56DE);
119
+ }
120
+ let \u5408\u5E76\u7ED3\u679C = \u6240\u6709\u63D2\u4EF6\u7ED3\u679C.reduce((s, a) => \u666E\u901A\u5BF9\u8C61\u6DF1\u5408\u5E76(s, a), {});
121
+ return \u5408\u5E76\u7ED3\u679C;
122
+ }
123
+ async \u901A\u8FC7\u63D2\u4EF6\u7ED3\u679C\u8FD0\u884C(\u5408\u5E76\u63D2\u4EF6\u7ED3\u679C, \u4F20\u5165\u7684\u903B\u8F91\u9644\u52A0\u53C2\u6570, \u4F20\u5165\u7684\u8BF7\u6C42\u9644\u52A0\u53C2\u6570) {
124
+ let \u6E05\u7406\u51FD\u6570 = this.\u83B7\u5F97\u6E05\u7406\u51FD\u6570?.();
125
+ let \u6700\u7EC8\u7ED3\u679C = void 0;
126
+ try {
127
+ let \u5B9E\u73B0\u7ED3\u679C = await this.\u5B9E\u73B0(\u5408\u5E76\u63D2\u4EF6\u7ED3\u679C, \u4F20\u5165\u7684\u903B\u8F91\u9644\u52A0\u53C2\u6570, \u4F20\u5165\u7684\u8BF7\u6C42\u9644\u52A0\u53C2\u6570);
128
+ \u6700\u7EC8\u7ED3\u679C = \u5B9E\u73B0\u7ED3\u679C.map((a) => \u666E\u901A\u5BF9\u8C61\u6DF1\u5408\u5E76(\u4F20\u5165\u7684\u903B\u8F91\u9644\u52A0\u53C2\u6570, a));
129
+ return \u6700\u7EC8\u7ED3\u679C;
130
+ } finally {
131
+ if (\u6E05\u7406\u51FD\u6570 !== void 0) {
132
+ let \u4E0A\u5C42\u6DF7\u5408\u7ED3\u679C = \u6700\u7EC8\u7ED3\u679C !== void 0 && \u6700\u7EC8\u7ED3\u679C.isRight() === true ? \u6700\u7EC8\u7ED3\u679C.assertRight().getRight() : \u4F20\u5165\u7684\u903B\u8F91\u9644\u52A0\u53C2\u6570;
133
+ await \u6E05\u7406\u51FD\u6570(\u5408\u5E76\u63D2\u4EF6\u7ED3\u679C, \u4E0A\u5C42\u6DF7\u5408\u7ED3\u679C, \u4F20\u5165\u7684\u8BF7\u6C42\u9644\u52A0\u53C2\u6570);
134
+ }
135
+ }
136
+ }
137
+ async \u8FD0\u884C(req, res, \u4F20\u5165\u7684\u903B\u8F91\u9644\u52A0\u53C2\u6570, \u4F20\u5165\u7684\u63D2\u4EF6\u9644\u52A0\u53C2\u6570) {
138
+ let \u5408\u5E76\u63D2\u4EF6\u7ED3\u679C = await this.\u8BA1\u7B97\u63D2\u4EF6\u7ED3\u679C(req, res, \u4F20\u5165\u7684\u63D2\u4EF6\u9644\u52A0\u53C2\u6570);
139
+ return this.\u901A\u8FC7\u63D2\u4EF6\u7ED3\u679C\u8FD0\u884C(\u5408\u5E76\u63D2\u4EF6\u7ED3\u679C, \u4F20\u5165\u7684\u903B\u8F91\u9644\u52A0\u53C2\u6570, \u4F20\u5165\u7684\u63D2\u4EF6\u9644\u52A0\u53C2\u6570);
140
+ }
141
+ \u6DF7\u5408(\u8F93\u5165) {
142
+ let \u4E0A\u6E05\u7406 = this.\u83B7\u5F97\u6E05\u7406\u51FD\u6570?.();
143
+ let \u4E0B\u6E05\u7406 = \u8F93\u5165.\u83B7\u5F97\u6E05\u7406\u51FD\u6570?.();
144
+ let \u5408\u5E76\u6E05\u7406 = void 0;
145
+ if (\u4E0A\u6E05\u7406 !== void 0 && \u4E0B\u6E05\u7406 !== void 0) {
146
+ \u5408\u5E76\u6E05\u7406 = async (\u53C2\u6570, \u903B\u8F91\u9644\u52A0\u53C2\u6570, \u8BF7\u6C42\u9644\u52A0\u53C2\u6570) => {
147
+ await \u4E0A\u6E05\u7406(\u53C2\u6570, \u903B\u8F91\u9644\u52A0\u53C2\u6570, \u8BF7\u6C42\u9644\u52A0\u53C2\u6570);
148
+ await \u4E0B\u6E05\u7406(\u53C2\u6570, \u903B\u8F91\u9644\u52A0\u53C2\u6570, \u8BF7\u6C42\u9644\u52A0\u53C2\u6570);
149
+ };
150
+ } else if (\u4E0A\u6E05\u7406 !== void 0) {
151
+ \u5408\u5E76\u6E05\u7406 = async (\u53C2\u6570, \u903B\u8F91\u9644\u52A0\u53C2\u6570, \u8BF7\u6C42\u9644\u52A0\u53C2\u6570) => {
152
+ await \u4E0A\u6E05\u7406(\u53C2\u6570, \u903B\u8F91\u9644\u52A0\u53C2\u6570, \u8BF7\u6C42\u9644\u52A0\u53C2\u6570);
153
+ };
154
+ } else if (\u4E0B\u6E05\u7406 !== void 0) {
155
+ \u5408\u5E76\u6E05\u7406 = async (\u53C2\u6570, \u903B\u8F91\u9644\u52A0\u53C2\u6570, \u8BF7\u6C42\u9644\u52A0\u53C2\u6570) => {
156
+ await \u4E0B\u6E05\u7406(\u53C2\u6570, \u903B\u8F91\u9644\u52A0\u53C2\u6570, \u8BF7\u6C42\u9644\u52A0\u53C2\u6570);
157
+ };
158
+ }
159
+ return _\u63A5\u53E3\u903B\u8F91Base.\u5B8C\u6574\u6784\u9020(
160
+ [...this.\u83B7\u5F97\u63D2\u4EF6\u4EEC(), ...\u8F93\u5165.\u83B7\u5F97\u63D2\u4EF6\u4EEC()],
161
+ async (\u53C2\u6570, \u903B\u8F91\u9644\u52A0\u53C2\u6570, \u8BF7\u6C42\u9644\u52A0\u53C2\u6570) => {
162
+ let \u4E0A\u5C42\u8C03\u7528\u7ED3\u679C = await this.\u5B9E\u73B0(\u53C2\u6570, \u903B\u8F91\u9644\u52A0\u53C2\u6570, \u8BF7\u6C42\u9644\u52A0\u53C2\u6570);
163
+ if (\u4E0A\u5C42\u8C03\u7528\u7ED3\u679C.isLeft()) return \u4E0A\u5C42\u8C03\u7528\u7ED3\u679C;
164
+ let \u4F20\u7ED9\u4E0B\u4E00\u5C42\u7684 = \u666E\u901A\u5BF9\u8C61\u6DF1\u5408\u5E76(\u903B\u8F91\u9644\u52A0\u53C2\u6570, \u4E0A\u5C42\u8C03\u7528\u7ED3\u679C.assertRight().getRight());
165
+ let \u4E0B\u5C42\u8C03\u7528\u7ED3\u679C = await \u8F93\u5165.\u5B9E\u73B0(\u53C2\u6570, \u4F20\u7ED9\u4E0B\u4E00\u5C42\u7684, \u8BF7\u6C42\u9644\u52A0\u53C2\u6570);
166
+ let \u6700\u7EC8\u8FD4\u56DE\u7ED3\u679C = \u4E0B\u5C42\u8C03\u7528\u7ED3\u679C.map((a) => \u666E\u901A\u5BF9\u8C61\u6DF1\u5408\u5E76(\u4F20\u7ED9\u4E0B\u4E00\u5C42\u7684, a));
167
+ return \u6700\u7EC8\u8FD4\u56DE\u7ED3\u679C;
168
+ },
169
+ \u5408\u5E76\u6E05\u7406,
170
+ this,
171
+ \u8F93\u5165
172
+ );
173
+ }
174
+ \u83B7\u5F97\u4E0A\u6E38\u63A5\u53E3() {
175
+ return this.\u4E0A\u6E38\u63A5\u53E3;
176
+ }
177
+ \u83B7\u5F97\u6700\u540E\u63A5\u53E3() {
178
+ return this.\u6700\u540E\u63A5\u53E3;
179
+ }
180
+ };
181
+
182
+ // src/interface/interface-result.ts
183
+ var \u63A5\u53E3\u7ED3\u679C\u8F6C\u6362\u5668 = class {
184
+ };
185
+
186
+ // src/interface/interface-retuen.ts
187
+ var \u63A5\u53E3\u7ED3\u679C\u8FD4\u56DE\u5668 = class {
188
+ };
189
+
190
+ // src/wrapper/express-compatible-wrapper.ts
191
+ var Express\u517C\u5BB9\u63A5\u53E3\u5C01\u88C5 = class extends \u63A5\u53E3 {
192
+ constructor(\u8BF7\u6C42\u8DEF\u5F84, \u8BF7\u6C42\u65B9\u6CD5, \u5904\u7406\u51FD\u6570) {
193
+ let \u903B\u8F91 = \u63A5\u53E3\u903B\u8F91Base.\u6784\u9020([], async () => {
194
+ return new import_ts_fp_data2.Right({});
195
+ });
196
+ let \u8F6C\u6362\u5668 = new Express\u517C\u5BB9\u7ED3\u679C\u8F6C\u6362\u5668();
197
+ let \u8FD4\u56DE\u5668 = new Express\u517C\u5BB9\u8FD4\u56DE\u5668(\u5904\u7406\u51FD\u6570);
198
+ super(
199
+ \u8BF7\u6C42\u8DEF\u5F84,
200
+ \u8BF7\u6C42\u65B9\u6CD5,
201
+ \u903B\u8F91,
202
+ import_zod.z.any(),
203
+ // 错误形式不做限制
204
+ import_zod.z.any(),
205
+ // 正确形式不做限制
206
+ \u8F6C\u6362\u5668,
207
+ \u8FD4\u56DE\u5668
208
+ );
209
+ }
210
+ };
211
+ var Express\u517C\u5BB9\u7ED3\u679C\u8F6C\u6362\u5668 = class extends \u63A5\u53E3\u7ED3\u679C\u8F6C\u6362\u5668 {
212
+ \u5B9E\u73B0(\u6570\u636E) {
213
+ return \u6570\u636E;
214
+ }
215
+ };
216
+ var Express\u517C\u5BB9\u8FD4\u56DE\u5668 = class extends \u63A5\u53E3\u7ED3\u679C\u8FD4\u56DE\u5668 {
217
+ constructor(\u5904\u7406\u51FD\u6570) {
218
+ super();
219
+ this.\u5904\u7406\u51FD\u6570 = \u5904\u7406\u51FD\u6570;
220
+ }
221
+ \u8FD4\u56DE(req, res, _\u7ED3\u679C) {
222
+ return this.\u5904\u7406\u51FD\u6570(req, res);
223
+ }
224
+ };
225
+ // Annotate the CommonJS export names for ESM import in node:
226
+ 0 && (module.exports = {
227
+ Express\u517C\u5BB9\u63A5\u53E3\u5C01\u88C5
228
+ });
@@ -0,0 +1,55 @@
1
+ import { Request, Response } from 'express';
2
+ import { z } from 'zod';
3
+ import { b as __, 接 as ______, a as ______$1, l as ____Base, 空 as ___, w as _______ } from '../interface-base-CyfrfgWu.cjs';
4
+ import { 接口结果返回器 as _______$1 } from '../interface/interface-retuen.cjs';
5
+ import '@lsby/ts-fp-data';
6
+ import '../help/interior.cjs';
7
+ import '@lsby/ts-log';
8
+ import 'node:http';
9
+
10
+ /**
11
+ * Express 兼容接口封装
12
+ *
13
+ * 为熟悉 Express 的用户提供快速迁移方案
14
+ *
15
+ * 特点:
16
+ * - 接收 Express 风格的处理函数 (req, res) => Promise<void>
17
+ * - 输入输出类型均为 any,不支持类型推断
18
+ * - 不支持插件系统和复用
19
+ * - 最大化简化,最小化学习曲线
20
+ *
21
+ * 示例:
22
+ * ```ts
23
+ * const api = new Express兼容接口封装(
24
+ * '/api/user',
25
+ * 'post',
26
+ * async (req, res) => {
27
+ * const data = req.body
28
+ * res.send({ success: true, data })
29
+ * }
30
+ * )
31
+ * ```
32
+ */
33
+ declare class Express兼容接口封装 extends __<______, ______$1, ____Base<[], ___, string, {}, null, null>, z.ZodType<any>, z.ZodType<any>, Express兼容结果转换器, Express兼容返回器> {
34
+ constructor(请求路径: ______, 请求方法: ______$1, 处理函数: (req: Request, res: Response) => Promise<void>);
35
+ }
36
+ /**
37
+ * Express 兼容结果转换器
38
+ *
39
+ * 直接通过,不做任何转换
40
+ */
41
+ declare class Express兼容结果转换器 extends _______<string, {}, any, any> {
42
+ 实现(数据: any): any;
43
+ }
44
+ /**
45
+ * Express 兼容返回器
46
+ *
47
+ * 直接执行用户提供的处理函数
48
+ */
49
+ declare class Express兼容返回器 extends _______$1<any> {
50
+ private 处理函数;
51
+ constructor(处理函数: (req: Request, res: Response) => Promise<void>);
52
+ 返回(req: Request, res: Response, _结果: any): Promise<void>;
53
+ }
54
+
55
+ export { Express兼容接口封装 };
@@ -0,0 +1,134 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/wrapper/file-download-wrapper.ts
21
+ var file_download_wrapper_exports = {};
22
+ __export(file_download_wrapper_exports, {
23
+ \u6587\u4EF6\u4E0B\u8F7D\u63A5\u53E3\u5C01\u88C5: () => \u6587\u4EF6\u4E0B\u8F7D\u63A5\u53E3\u5C01\u88C5
24
+ });
25
+ module.exports = __toCommonJS(file_download_wrapper_exports);
26
+ var import_node_fs = require("fs");
27
+ var import_zod = require("zod");
28
+
29
+ // src/interface/interface-base.ts
30
+ var \u63A5\u53E3 = class {
31
+ constructor(\u8BF7\u6C42\u8DEF\u5F84, \u8BF7\u6C42\u65B9\u6CD5, \u63A5\u53E3\u903B\u8F91, \u63A5\u53E3\u9519\u8BEF\u5F62\u5F0FZod, \u63A5\u53E3\u6B63\u786E\u5F62\u5F0FZod, \u7ED3\u679C\u8F6C\u6362\u5668, \u7ED3\u679C\u8FD4\u56DE\u5668) {
32
+ this.\u8BF7\u6C42\u8DEF\u5F84 = \u8BF7\u6C42\u8DEF\u5F84;
33
+ this.\u8BF7\u6C42\u65B9\u6CD5 = \u8BF7\u6C42\u65B9\u6CD5;
34
+ this.\u63A5\u53E3\u903B\u8F91 = \u63A5\u53E3\u903B\u8F91;
35
+ this.\u63A5\u53E3\u9519\u8BEF\u5F62\u5F0FZod = \u63A5\u53E3\u9519\u8BEF\u5F62\u5F0FZod;
36
+ this.\u63A5\u53E3\u6B63\u786E\u5F62\u5F0FZod = \u63A5\u53E3\u6B63\u786E\u5F62\u5F0FZod;
37
+ this.\u7ED3\u679C\u8F6C\u6362\u5668 = \u7ED3\u679C\u8F6C\u6362\u5668;
38
+ this.\u7ED3\u679C\u8FD4\u56DE\u5668 = \u7ED3\u679C\u8FD4\u56DE\u5668;
39
+ }
40
+ \u83B7\u5F97\u8DEF\u5F84() {
41
+ return this.\u8BF7\u6C42\u8DEF\u5F84;
42
+ }
43
+ \u83B7\u5F97\u65B9\u6CD5() {
44
+ return this.\u8BF7\u6C42\u65B9\u6CD5;
45
+ }
46
+ \u83B7\u5F97\u903B\u8F91() {
47
+ return this.\u63A5\u53E3\u903B\u8F91;
48
+ }
49
+ \u83B7\u5F97\u63A5\u53E3\u9519\u8BEF\u5F62\u5F0FZod() {
50
+ return this.\u63A5\u53E3\u9519\u8BEF\u5F62\u5F0FZod;
51
+ }
52
+ \u83B7\u5F97\u63A5\u53E3\u6B63\u786E\u5F62\u5F0FZod() {
53
+ return this.\u63A5\u53E3\u6B63\u786E\u5F62\u5F0FZod;
54
+ }
55
+ \u83B7\u5F97\u7ED3\u679C\u8F6C\u6362\u5668() {
56
+ return this.\u7ED3\u679C\u8F6C\u6362\u5668;
57
+ }
58
+ \u83B7\u5F97\u7ED3\u679C\u8FD4\u56DE\u5668() {
59
+ return this.\u7ED3\u679C\u8FD4\u56DE\u5668;
60
+ }
61
+ };
62
+
63
+ // src/interface/interface-result.ts
64
+ var \u63A5\u53E3\u7ED3\u679C\u8F6C\u6362\u5668 = class {
65
+ };
66
+ var \u76F4\u63A5\u5F62\u5F0F\u8F6C\u6362\u5668 = class extends \u63A5\u53E3\u7ED3\u679C\u8F6C\u6362\u5668 {
67
+ \u5B9E\u73B0(\u6570\u636E) {
68
+ switch (\u6570\u636E.getTag()) {
69
+ case "Left": {
70
+ return { status: "fail", data: \u6570\u636E.assertLeft().getLeft() };
71
+ }
72
+ case "Right": {
73
+ return \u6570\u636E.assertRight().getRight().data;
74
+ }
75
+ default: {
76
+ throw new Error("\u610F\u5916\u7684\u6570\u636E\u6807\u8BB0");
77
+ }
78
+ }
79
+ }
80
+ };
81
+
82
+ // src/interface/interface-retuen.ts
83
+ var \u63A5\u53E3\u7ED3\u679C\u8FD4\u56DE\u5668 = class {
84
+ };
85
+
86
+ // src/wrapper/file-download-wrapper.ts
87
+ var \u6587\u4EF6\u4E0B\u8F7D\u63A5\u53E3\u5C01\u88C5 = class extends \u63A5\u53E3 {
88
+ constructor(\u8BF7\u6C42\u8DEF\u5F84, \u8BF7\u6C42\u65B9\u6CD5, \u63A5\u53E3\u903B\u8F91, \u903B\u8F91\u9519\u8BEF\u7C7B\u578BZod, \u6587\u4EF6\u540D, MIME\u7C7B\u578B) {
89
+ let \u63A5\u53E3\u9519\u8BEF\u8F93\u51FA\u5F62\u5F0F = import_zod.z.object({ status: import_zod.z.literal("fail"), data: \u903B\u8F91\u9519\u8BEF\u7C7B\u578BZod });
90
+ let \u63A5\u53E3\u8F6C\u6362\u5668 = new \u76F4\u63A5\u5F62\u5F0F\u8F6C\u6362\u5668();
91
+ let \u8FD4\u56DE\u5668 = new \u6587\u4EF6\u4E0B\u8F7D\u8FD4\u56DE\u5668(\u6587\u4EF6\u540D, MIME\u7C7B\u578B);
92
+ super(
93
+ \u8BF7\u6C42\u8DEF\u5F84,
94
+ \u8BF7\u6C42\u65B9\u6CD5,
95
+ \u63A5\u53E3\u903B\u8F91,
96
+ \u63A5\u53E3\u9519\u8BEF\u8F93\u51FA\u5F62\u5F0F,
97
+ import_zod.z.any(),
98
+ // 正确形式任意
99
+ \u63A5\u53E3\u8F6C\u6362\u5668,
100
+ \u8FD4\u56DE\u5668
101
+ );
102
+ }
103
+ };
104
+ var \u6587\u4EF6\u4E0B\u8F7D\u8FD4\u56DE\u5668 = class extends \u63A5\u53E3\u7ED3\u679C\u8FD4\u56DE\u5668 {
105
+ constructor(\u6587\u4EF6\u540D, MIME\u7C7B\u578B) {
106
+ super();
107
+ this.\u6587\u4EF6\u540D = \u6587\u4EF6\u540D;
108
+ this.MIME\u7C7B\u578B = MIME\u7C7B\u578B;
109
+ }
110
+ async \u8FD4\u56DE(req, res, \u7ED3\u679C) {
111
+ if (this.MIME\u7C7B\u578B !== void 0) {
112
+ res.setHeader("Content-Type", this.MIME\u7C7B\u578B);
113
+ }
114
+ if (this.\u6587\u4EF6\u540D !== void 0) {
115
+ let encodedFilename = encodeURIComponent(this.\u6587\u4EF6\u540D);
116
+ res.setHeader("Content-Disposition", `attachment; filename*=UTF-8''${encodedFilename}`);
117
+ }
118
+ if (Buffer.isBuffer(\u7ED3\u679C)) {
119
+ res.setHeader("Content-Length", \u7ED3\u679C.length);
120
+ res.send(\u7ED3\u679C);
121
+ } else if (typeof \u7ED3\u679C === "string") {
122
+ let \u6D41 = (0, import_node_fs.createReadStream)(\u7ED3\u679C);
123
+ \u6D41.pipe(res);
124
+ } else if (typeof \u7ED3\u679C.pipe === "function") {
125
+ \u7ED3\u679C.pipe(res);
126
+ } else {
127
+ res.status(400).send("Invalid file data");
128
+ }
129
+ }
130
+ };
131
+ // Annotate the CommonJS export names for ESM import in node:
132
+ 0 && (module.exports = {
133
+ \u6587\u4EF6\u4E0B\u8F7D\u63A5\u53E3\u5C01\u88C5
134
+ });
@@ -0,0 +1,80 @@
1
+ import { Request, Response } from 'express';
2
+ import { ReadStream } from 'node:fs';
3
+ import { z } from 'zod';
4
+ import { 接 as ______, a as ______$1, l as ____Base, 空 as ___, b as __, 直 as _______, q as __________, r as __________$1 } from '../interface-base-CyfrfgWu.cjs';
5
+ import { 接口结果返回器 as _______$1 } from '../interface/interface-retuen.cjs';
6
+ import '@lsby/ts-fp-data';
7
+ import '../help/interior.cjs';
8
+ import '@lsby/ts-log';
9
+ import 'node:http';
10
+
11
+ type 文件数据类型 = {
12
+ data: Buffer | ReadStream | string;
13
+ filename?: string;
14
+ mimeType?: string;
15
+ };
16
+ /**
17
+ * 文件下载接口封装
18
+ *
19
+ * 用于提供文件下载能力,支持:
20
+ * - Buffer 直接发送
21
+ * - 文件路径(自动创建流)
22
+ * - 流对象直接传送
23
+ *
24
+ * 使用方式:
25
+ * - 接口逻辑返回 Either<错误, { data: 文件数据 }>
26
+ * - 文件数据可以是 Buffer、文件路径字符串、或 ReadStream
27
+ * - 错误返回标准错误格式
28
+ *
29
+ * 示例:
30
+ * ```ts
31
+ * const 逻辑 = 接口逻辑Base.构造(
32
+ * [GET参数解析插件],
33
+ * async ({ query }) => {
34
+ * const buffer = await fs.readFile(query.filepath)
35
+ * return new Right({
36
+ * data: buffer,
37
+ * filename: 'export.xlsx',
38
+ * mimeType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
39
+ * })
40
+ * }
41
+ * )
42
+ *
43
+ * const api = new 文件下载接口封装(
44
+ * '/api/download',
45
+ * 'get',
46
+ * 逻辑,
47
+ * z.object({ filepath: z.string() }), // 错误类型
48
+ * z.object({ data: z.any() }) // 正确类型必须包含 data 字段
49
+ * )
50
+ * ```
51
+ */
52
+ declare class 文件下载接口封装<路径类型 extends ______, 方法类型 extends ______$1, 逻辑类型 extends ____Base<any, ___, z.infer<接口错误形式Zod>, {
53
+ data: 任意文件数据;
54
+ }, any, any>, 接口错误形式Zod extends z.ZodTypeAny, 任意文件数据 = Buffer | ReadStream | string> extends __<路径类型, 方法类型, 逻辑类型, z.ZodObject<{
55
+ status: z.ZodLiteral<'fail'>;
56
+ data: 接口错误形式Zod;
57
+ }>, z.ZodType<any>, _______<任意文件数据, __________<逻辑类型>, __________$1<逻辑类型>>, 文件下载返回器> {
58
+ constructor(请求路径: 路径类型, 请求方法: 方法类型, 接口逻辑: 逻辑类型, 逻辑错误类型Zod: 接口错误形式Zod, 文件名?: string, MIME类型?: string);
59
+ }
60
+ /**
61
+ * 文件下载返回器
62
+ *
63
+ * 处理文件的发送,支持:
64
+ * 1. Buffer - 直接设置 Content-Length 后发送
65
+ * 2. ReadStream - 自动 pipe 到响应
66
+ * 3. 文件路径字符串 - 创建读流后发送
67
+ *
68
+ * 自动设置的响应头:
69
+ * - Content-Disposition: 用于设置下载文件名
70
+ * - Content-Type: 根据 MIME 类型设置
71
+ * - Content-Length: 对于 Buffer 自动计算
72
+ */
73
+ declare class 文件下载返回器 extends _______$1<Buffer | ReadStream | string> {
74
+ private 文件名?;
75
+ private MIME类型?;
76
+ constructor(文件名?: string | undefined, MIME类型?: string | undefined);
77
+ 返回(req: Request, res: Response, 结果: Buffer | ReadStream | string): Promise<void>;
78
+ }
79
+
80
+ export { 文件下载接口封装, type 文件数据类型 };
@@ -0,0 +1,54 @@
1
+ import {
2
+ 接口结果返回器
3
+ } from "./chunk-XBAKTT6S.js";
4
+ import {
5
+ 接口
6
+ } from "./chunk-MDUWXEQ7.js";
7
+ import {
8
+ 接口逻辑Base
9
+ } from "./chunk-E23EZWBE.js";
10
+ import {
11
+ 接口结果转换器
12
+ } from "./chunk-DNJQGD5M.js";
13
+
14
+ // src/wrapper/express-compatible-wrapper.ts
15
+ import { Right } from "@lsby/ts-fp-data";
16
+ import { z } from "zod";
17
+ var Express\u517C\u5BB9\u63A5\u53E3\u5C01\u88C5 = class extends \u63A5\u53E3 {
18
+ constructor(\u8BF7\u6C42\u8DEF\u5F84, \u8BF7\u6C42\u65B9\u6CD5, \u5904\u7406\u51FD\u6570) {
19
+ let \u903B\u8F91 = \u63A5\u53E3\u903B\u8F91Base.\u6784\u9020([], async () => {
20
+ return new Right({});
21
+ });
22
+ let \u8F6C\u6362\u5668 = new Express\u517C\u5BB9\u7ED3\u679C\u8F6C\u6362\u5668();
23
+ let \u8FD4\u56DE\u5668 = new Express\u517C\u5BB9\u8FD4\u56DE\u5668(\u5904\u7406\u51FD\u6570);
24
+ super(
25
+ \u8BF7\u6C42\u8DEF\u5F84,
26
+ \u8BF7\u6C42\u65B9\u6CD5,
27
+ \u903B\u8F91,
28
+ z.any(),
29
+ // 错误形式不做限制
30
+ z.any(),
31
+ // 正确形式不做限制
32
+ \u8F6C\u6362\u5668,
33
+ \u8FD4\u56DE\u5668
34
+ );
35
+ }
36
+ };
37
+ var Express\u517C\u5BB9\u7ED3\u679C\u8F6C\u6362\u5668 = class extends \u63A5\u53E3\u7ED3\u679C\u8F6C\u6362\u5668 {
38
+ \u5B9E\u73B0(\u6570\u636E) {
39
+ return \u6570\u636E;
40
+ }
41
+ };
42
+ var Express\u517C\u5BB9\u8FD4\u56DE\u5668 = class extends \u63A5\u53E3\u7ED3\u679C\u8FD4\u56DE\u5668 {
43
+ constructor(\u5904\u7406\u51FD\u6570) {
44
+ super();
45
+ this.\u5904\u7406\u51FD\u6570 = \u5904\u7406\u51FD\u6570;
46
+ }
47
+ \u8FD4\u56DE(req, res, _\u7ED3\u679C) {
48
+ return this.\u5904\u7406\u51FD\u6570(req, res);
49
+ }
50
+ };
51
+
52
+ export {
53
+ Express兼容接口封装
54
+ };
@@ -0,0 +1,61 @@
1
+ import {
2
+ 接口结果返回器
3
+ } from "./chunk-XBAKTT6S.js";
4
+ import {
5
+ 接口
6
+ } from "./chunk-MDUWXEQ7.js";
7
+ import {
8
+ 直接形式转换器
9
+ } from "./chunk-DNJQGD5M.js";
10
+
11
+ // src/wrapper/file-download-wrapper.ts
12
+ import { createReadStream } from "fs";
13
+ import { z } from "zod";
14
+ var \u6587\u4EF6\u4E0B\u8F7D\u63A5\u53E3\u5C01\u88C5 = class extends \u63A5\u53E3 {
15
+ constructor(\u8BF7\u6C42\u8DEF\u5F84, \u8BF7\u6C42\u65B9\u6CD5, \u63A5\u53E3\u903B\u8F91, \u903B\u8F91\u9519\u8BEF\u7C7B\u578BZod, \u6587\u4EF6\u540D, MIME\u7C7B\u578B) {
16
+ let \u63A5\u53E3\u9519\u8BEF\u8F93\u51FA\u5F62\u5F0F = z.object({ status: z.literal("fail"), data: \u903B\u8F91\u9519\u8BEF\u7C7B\u578BZod });
17
+ let \u63A5\u53E3\u8F6C\u6362\u5668 = new \u76F4\u63A5\u5F62\u5F0F\u8F6C\u6362\u5668();
18
+ let \u8FD4\u56DE\u5668 = new \u6587\u4EF6\u4E0B\u8F7D\u8FD4\u56DE\u5668(\u6587\u4EF6\u540D, MIME\u7C7B\u578B);
19
+ super(
20
+ \u8BF7\u6C42\u8DEF\u5F84,
21
+ \u8BF7\u6C42\u65B9\u6CD5,
22
+ \u63A5\u53E3\u903B\u8F91,
23
+ \u63A5\u53E3\u9519\u8BEF\u8F93\u51FA\u5F62\u5F0F,
24
+ z.any(),
25
+ // 正确形式任意
26
+ \u63A5\u53E3\u8F6C\u6362\u5668,
27
+ \u8FD4\u56DE\u5668
28
+ );
29
+ }
30
+ };
31
+ var \u6587\u4EF6\u4E0B\u8F7D\u8FD4\u56DE\u5668 = class extends \u63A5\u53E3\u7ED3\u679C\u8FD4\u56DE\u5668 {
32
+ constructor(\u6587\u4EF6\u540D, MIME\u7C7B\u578B) {
33
+ super();
34
+ this.\u6587\u4EF6\u540D = \u6587\u4EF6\u540D;
35
+ this.MIME\u7C7B\u578B = MIME\u7C7B\u578B;
36
+ }
37
+ async \u8FD4\u56DE(req, res, \u7ED3\u679C) {
38
+ if (this.MIME\u7C7B\u578B !== void 0) {
39
+ res.setHeader("Content-Type", this.MIME\u7C7B\u578B);
40
+ }
41
+ if (this.\u6587\u4EF6\u540D !== void 0) {
42
+ let encodedFilename = encodeURIComponent(this.\u6587\u4EF6\u540D);
43
+ res.setHeader("Content-Disposition", `attachment; filename*=UTF-8''${encodedFilename}`);
44
+ }
45
+ if (Buffer.isBuffer(\u7ED3\u679C)) {
46
+ res.setHeader("Content-Length", \u7ED3\u679C.length);
47
+ res.send(\u7ED3\u679C);
48
+ } else if (typeof \u7ED3\u679C === "string") {
49
+ let \u6D41 = createReadStream(\u7ED3\u679C);
50
+ \u6D41.pipe(res);
51
+ } else if (typeof \u7ED3\u679C.pipe === "function") {
52
+ \u7ED3\u679C.pipe(res);
53
+ } else {
54
+ res.status(400).send("Invalid file data");
55
+ }
56
+ }
57
+ };
58
+
59
+ export {
60
+ 文件下载接口封装
61
+ };
@@ -13,9 +13,12 @@ export { GetNetCoreExportTypeDefine, GetNetCoreExportTypeName, NetCoreExportType
13
13
  export { 常用形式接口封装 } from './wrapper/common-wrapper.js';
14
14
  export { 常用形式并自定义返回器接口封装 } from './wrapper/common-wrapper-return.js';
15
15
  export { 常用直接形式接口封装 } from './wrapper/deferred-result-wrapper.js';
16
+ export { Express兼容接口封装 } from './wrapper/express-compatible-wrapper.js';
17
+ export { 文件下载接口封装, 文件数据类型 } from './wrapper/file-download-wrapper.js';
16
18
  import 'zod';
17
19
  import '@lsby/ts-fp-data';
18
20
  import 'express';
19
21
  import './help/interior.js';
20
22
  import '@lsby/ts-log';
21
23
  import 'node:http';
24
+ import 'node:fs';
package/dist/esm/index.js CHANGED
@@ -1,3 +1,6 @@
1
+ import {
2
+ WebSocket插件
3
+ } from "./chunk-C5FED6EO.js";
1
4
  import {
2
5
  自定义数据插件
3
6
  } from "./chunk-VMCAX3QH.js";
@@ -13,12 +16,15 @@ import {
13
16
  import {
14
17
  表单解析插件
15
18
  } from "./chunk-3XRAG6DM.js";
16
- import {
17
- WebSocket插件
18
- } from "./chunk-C5FED6EO.js";
19
19
  import {
20
20
  常用直接形式接口封装
21
21
  } from "./chunk-NB2QNDI2.js";
22
+ import {
23
+ Express兼容接口封装
24
+ } from "./chunk-NCYHKHIH.js";
25
+ import {
26
+ 文件下载接口封装
27
+ } from "./chunk-XSYZ5A6R.js";
22
28
  import {
23
29
  接口测试
24
30
  } from "./chunk-N7TPWCQ5.js";
@@ -64,6 +70,7 @@ import {
64
70
  } from "./chunk-DNJQGD5M.js";
65
71
  export {
66
72
  EXPORT_TYPE,
73
+ Express\u517C\u5BB9\u63A5\u53E3\u5C01\u88C5,
67
74
  GET\u53C2\u6570\u89E3\u6790\u63D2\u4EF6,
68
75
  JSON\u89E3\u6790\u63D2\u4EF6,
69
76
  WebSocket\u63D2\u4EF6,
@@ -79,6 +86,7 @@ export {
79
86
  \u63A5\u53E3\u903B\u8F91,
80
87
  \u63A5\u53E3\u903B\u8F91Base,
81
88
  \u63D2\u4EF6,
89
+ \u6587\u4EF6\u4E0B\u8F7D\u63A5\u53E3\u5C01\u88C5,
82
90
  \u666E\u901A\u5BF9\u8C61\u6DF1\u5408\u5E76,
83
91
  \u670D\u52A1\u5668,
84
92
  \u6784\u9020\u5143\u7EC4,
@@ -0,0 +1,55 @@
1
+ import { Request, Response } from 'express';
2
+ import { z } from 'zod';
3
+ import { b as __, 接 as ______, a as ______$1, l as ____Base, 空 as ___, w as _______ } from '../interface-base-C1ZNSMJz.js';
4
+ import { 接口结果返回器 as _______$1 } from '../interface/interface-retuen.js';
5
+ import '@lsby/ts-fp-data';
6
+ import '../help/interior.js';
7
+ import '@lsby/ts-log';
8
+ import 'node:http';
9
+
10
+ /**
11
+ * Express 兼容接口封装
12
+ *
13
+ * 为熟悉 Express 的用户提供快速迁移方案
14
+ *
15
+ * 特点:
16
+ * - 接收 Express 风格的处理函数 (req, res) => Promise<void>
17
+ * - 输入输出类型均为 any,不支持类型推断
18
+ * - 不支持插件系统和复用
19
+ * - 最大化简化,最小化学习曲线
20
+ *
21
+ * 示例:
22
+ * ```ts
23
+ * const api = new Express兼容接口封装(
24
+ * '/api/user',
25
+ * 'post',
26
+ * async (req, res) => {
27
+ * const data = req.body
28
+ * res.send({ success: true, data })
29
+ * }
30
+ * )
31
+ * ```
32
+ */
33
+ declare class Express兼容接口封装 extends __<______, ______$1, ____Base<[], ___, string, {}, null, null>, z.ZodType<any>, z.ZodType<any>, Express兼容结果转换器, Express兼容返回器> {
34
+ constructor(请求路径: ______, 请求方法: ______$1, 处理函数: (req: Request, res: Response) => Promise<void>);
35
+ }
36
+ /**
37
+ * Express 兼容结果转换器
38
+ *
39
+ * 直接通过,不做任何转换
40
+ */
41
+ declare class Express兼容结果转换器 extends _______<string, {}, any, any> {
42
+ 实现(数据: any): any;
43
+ }
44
+ /**
45
+ * Express 兼容返回器
46
+ *
47
+ * 直接执行用户提供的处理函数
48
+ */
49
+ declare class Express兼容返回器 extends _______$1<any> {
50
+ private 处理函数;
51
+ constructor(处理函数: (req: Request, res: Response) => Promise<void>);
52
+ 返回(req: Request, res: Response, _结果: any): Promise<void>;
53
+ }
54
+
55
+ export { Express兼容接口封装 };
@@ -0,0 +1,11 @@
1
+ import {
2
+ Express兼容接口封装
3
+ } from "../chunk-NCYHKHIH.js";
4
+ import "../chunk-XBAKTT6S.js";
5
+ import "../chunk-MDUWXEQ7.js";
6
+ import "../chunk-E23EZWBE.js";
7
+ import "../chunk-7LQRWJ3X.js";
8
+ import "../chunk-DNJQGD5M.js";
9
+ export {
10
+ Express\u517C\u5BB9\u63A5\u53E3\u5C01\u88C5
11
+ };
@@ -0,0 +1,80 @@
1
+ import { Request, Response } from 'express';
2
+ import { ReadStream } from 'node:fs';
3
+ import { z } from 'zod';
4
+ import { 接 as ______, a as ______$1, l as ____Base, 空 as ___, b as __, 直 as _______, q as __________, r as __________$1 } from '../interface-base-C1ZNSMJz.js';
5
+ import { 接口结果返回器 as _______$1 } from '../interface/interface-retuen.js';
6
+ import '@lsby/ts-fp-data';
7
+ import '../help/interior.js';
8
+ import '@lsby/ts-log';
9
+ import 'node:http';
10
+
11
+ type 文件数据类型 = {
12
+ data: Buffer | ReadStream | string;
13
+ filename?: string;
14
+ mimeType?: string;
15
+ };
16
+ /**
17
+ * 文件下载接口封装
18
+ *
19
+ * 用于提供文件下载能力,支持:
20
+ * - Buffer 直接发送
21
+ * - 文件路径(自动创建流)
22
+ * - 流对象直接传送
23
+ *
24
+ * 使用方式:
25
+ * - 接口逻辑返回 Either<错误, { data: 文件数据 }>
26
+ * - 文件数据可以是 Buffer、文件路径字符串、或 ReadStream
27
+ * - 错误返回标准错误格式
28
+ *
29
+ * 示例:
30
+ * ```ts
31
+ * const 逻辑 = 接口逻辑Base.构造(
32
+ * [GET参数解析插件],
33
+ * async ({ query }) => {
34
+ * const buffer = await fs.readFile(query.filepath)
35
+ * return new Right({
36
+ * data: buffer,
37
+ * filename: 'export.xlsx',
38
+ * mimeType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
39
+ * })
40
+ * }
41
+ * )
42
+ *
43
+ * const api = new 文件下载接口封装(
44
+ * '/api/download',
45
+ * 'get',
46
+ * 逻辑,
47
+ * z.object({ filepath: z.string() }), // 错误类型
48
+ * z.object({ data: z.any() }) // 正确类型必须包含 data 字段
49
+ * )
50
+ * ```
51
+ */
52
+ declare class 文件下载接口封装<路径类型 extends ______, 方法类型 extends ______$1, 逻辑类型 extends ____Base<any, ___, z.infer<接口错误形式Zod>, {
53
+ data: 任意文件数据;
54
+ }, any, any>, 接口错误形式Zod extends z.ZodTypeAny, 任意文件数据 = Buffer | ReadStream | string> extends __<路径类型, 方法类型, 逻辑类型, z.ZodObject<{
55
+ status: z.ZodLiteral<'fail'>;
56
+ data: 接口错误形式Zod;
57
+ }>, z.ZodType<any>, _______<任意文件数据, __________<逻辑类型>, __________$1<逻辑类型>>, 文件下载返回器> {
58
+ constructor(请求路径: 路径类型, 请求方法: 方法类型, 接口逻辑: 逻辑类型, 逻辑错误类型Zod: 接口错误形式Zod, 文件名?: string, MIME类型?: string);
59
+ }
60
+ /**
61
+ * 文件下载返回器
62
+ *
63
+ * 处理文件的发送,支持:
64
+ * 1. Buffer - 直接设置 Content-Length 后发送
65
+ * 2. ReadStream - 自动 pipe 到响应
66
+ * 3. 文件路径字符串 - 创建读流后发送
67
+ *
68
+ * 自动设置的响应头:
69
+ * - Content-Disposition: 用于设置下载文件名
70
+ * - Content-Type: 根据 MIME 类型设置
71
+ * - Content-Length: 对于 Buffer 自动计算
72
+ */
73
+ declare class 文件下载返回器 extends _______$1<Buffer | ReadStream | string> {
74
+ private 文件名?;
75
+ private MIME类型?;
76
+ constructor(文件名?: string | undefined, MIME类型?: string | undefined);
77
+ 返回(req: Request, res: Response, 结果: Buffer | ReadStream | string): Promise<void>;
78
+ }
79
+
80
+ export { 文件下载接口封装, type 文件数据类型 };
@@ -0,0 +1,9 @@
1
+ import {
2
+ 文件下载接口封装
3
+ } from "../chunk-XSYZ5A6R.js";
4
+ import "../chunk-XBAKTT6S.js";
5
+ import "../chunk-MDUWXEQ7.js";
6
+ import "../chunk-DNJQGD5M.js";
7
+ export {
8
+ \u6587\u4EF6\u4E0B\u8F7D\u63A5\u53E3\u5C01\u88C5
9
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lsby/net-core",
3
- "version": "0.10.1",
3
+ "version": "0.10.3",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  "require": "./dist/cjs/index.cjs",