@lsby/net-core 0.3.12 → 0.3.13

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 (65) hide show
  1. package/dist/bin/gen-list/bin.cjs +1 -2
  2. package/dist/bin/gen-list/index.cjs +1 -2
  3. package/dist/bin/gen-test/bin.cjs +1 -2
  4. package/dist/bin/gen-test/index.cjs +1 -2
  5. package/dist/bin/gen-type/bin.cjs +1 -2
  6. package/dist/bin/gen-type/index.cjs +1 -2
  7. package/dist/cjs/bin/gen-list/bin.cjs +1 -2
  8. package/dist/cjs/bin/gen-list/index.cjs +1 -2
  9. package/dist/cjs/bin/gen-test/bin.cjs +1 -2
  10. package/dist/cjs/bin/gen-test/index.cjs +1 -2
  11. package/dist/cjs/bin/gen-type/bin.cjs +1 -2
  12. package/dist/cjs/bin/gen-type/index.cjs +1 -2
  13. package/dist/cjs/extend/api-json-base.cjs +206 -0
  14. package/dist/cjs/extend/api-json-base.d.cts +15 -0
  15. package/dist/cjs/extend/api-json-wrap.cjs +257 -0
  16. package/dist/cjs/extend/{wrap-json.d.cts → api-json-wrap.d.cts} +14 -15
  17. package/dist/cjs/index.cjs +170 -37
  18. package/dist/cjs/index.d.cts +6 -4
  19. package/dist/cjs/interface/action/action.cjs +142 -0
  20. package/dist/cjs/interface/action/action.d.cts +90 -0
  21. package/dist/cjs/interface/inst/interface-abstract.cjs +123 -1
  22. package/dist/cjs/interface/inst/interface-abstract.d.cts +12 -11
  23. package/dist/cjs/interface/inst/interface.cjs +133 -5
  24. package/dist/cjs/interface/inst/interface.d.cts +9 -5
  25. package/dist/cjs/interface/type/interface-type-abstract.d.cts +6 -1
  26. package/dist/cjs/plugin/urlencoded.cjs +1 -2
  27. package/dist/cjs/server/server.cjs +1 -2
  28. package/dist/cjs/server/server.d.cts +2 -1
  29. package/dist/esm/bin/gen-list/bin.js +1 -1
  30. package/dist/esm/bin/gen-list/index.js +1 -1
  31. package/dist/esm/bin/gen-test/bin.js +1 -1
  32. package/dist/esm/bin/gen-test/index.js +1 -1
  33. package/dist/esm/bin/gen-type/bin.js +1 -1
  34. package/dist/esm/bin/gen-type/index.js +1 -1
  35. package/dist/esm/{chunk-N7VWAPFU.js → chunk-6NX5P6CE.js} +1 -2
  36. package/dist/esm/{chunk-YYOST4AX.js → chunk-FLDJE3PK.js} +1 -2
  37. package/dist/esm/{chunk-DQX4L6GK.js → chunk-GAVKGLRL.js} +1 -2
  38. package/dist/esm/chunk-HOO4TK2L.js +118 -0
  39. package/dist/esm/chunk-I5QXSZQU.js +21 -0
  40. package/dist/esm/chunk-ILSTOG4G.js +30 -0
  41. package/dist/esm/{chunk-X3JVDZYX.js → chunk-JIW3U7SL.js} +14 -19
  42. package/dist/esm/{chunk-CSZNLNB5.js → chunk-NCSYD5GL.js} +1 -2
  43. package/dist/esm/chunk-PA2HBZKY.js +16 -0
  44. package/dist/esm/{chunk-5UUMGDDD.js → chunk-TMFRIHV5.js} +1 -2
  45. package/dist/esm/extend/api-json-base.d.ts +15 -0
  46. package/dist/esm/extend/api-json-base.js +10 -0
  47. package/dist/esm/extend/{wrap-json.d.ts → api-json-wrap.d.ts} +14 -15
  48. package/dist/esm/extend/api-json-wrap.js +16 -0
  49. package/dist/esm/index.d.ts +6 -4
  50. package/dist/esm/index.js +19 -16
  51. package/dist/esm/interface/action/action.d.ts +90 -0
  52. package/dist/esm/interface/action/action.js +6 -0
  53. package/dist/esm/interface/inst/interface-abstract.d.ts +12 -11
  54. package/dist/esm/interface/inst/interface-abstract.js +2 -1
  55. package/dist/esm/interface/inst/interface.d.ts +9 -5
  56. package/dist/esm/interface/inst/interface.js +3 -2
  57. package/dist/esm/interface/type/interface-type-abstract.d.ts +6 -1
  58. package/dist/esm/plugin/urlencoded.js +1 -1
  59. package/dist/esm/server/server.d.ts +2 -1
  60. package/dist/esm/server/server.js +1 -1
  61. package/package.json +55 -55
  62. package/dist/cjs/extend/wrap-json.cjs +0 -128
  63. package/dist/esm/chunk-N2AO545F.js +0 -7
  64. package/dist/esm/chunk-TFOAFRUL.js +0 -22
  65. package/dist/esm/extend/wrap-json.js +0 -15
@@ -23,7 +23,129 @@ __export(interface_abstract_exports, {
23
23
  API\u63A5\u53E3\u57FA\u7C7B: () => API\u63A5\u53E3\u57FA\u7C7B
24
24
  });
25
25
  module.exports = __toCommonJS(interface_abstract_exports);
26
- var API\u63A5\u53E3\u57FA\u7C7B = class {
26
+
27
+ // src/interface/action/action.ts
28
+ var import_ts_fp_data = require("@lsby/ts-fp-data");
29
+ var \u4E1A\u52A1\u884C\u4E3A = class _\u4E1A\u52A1\u884C\u4E3A {
30
+ // ================================= 静态 =================================
31
+ static \u901A\u8FC7\u5B9E\u73B0\u6784\u9020(\u5B9E\u73B0, \u4E1A\u52A1\u884C\u4E3A\u540D\u79F0) {
32
+ return new class extends _\u4E1A\u52A1\u884C\u4E3A {
33
+ async \u4E1A\u52A1\u884C\u4E3A\u5B9E\u73B0(\u53C2\u6570) {
34
+ return \u5B9E\u73B0(\u53C2\u6570);
35
+ }
36
+ }(\u4E1A\u52A1\u884C\u4E3A\u540D\u79F0);
37
+ }
38
+ static \u6D41\u5F0F\u7EC4\u5408(a, b) {
39
+ return a.\u6D41\u5F0F\u7EC4\u5408(b);
40
+ }
41
+ static \u6DF7\u5408\u7EC4\u5408(a, b) {
42
+ return a.\u6DF7\u5408\u7EC4\u5408(b);
43
+ }
44
+ /**
45
+ * 对多个项混合组合
46
+ */
47
+ static \u6DF7\u5408\u7EC4\u5408\u591A\u9879(arr) {
48
+ return arr.reduce((s, a) => s.\u6DF7\u5408\u7EC4\u5408(a));
49
+ }
50
+ /**
51
+ * 同时运行多个模型, 并提供一个函数处理它们的结果
52
+ * 如果其中任何一个模型发生错误, 则最终模型输出第一个错误
53
+ * 处理函数的类型是: 所有模型的结果合并 => 泛型A
54
+ * 新模型的类型是:
55
+ * - 参数: 所有模型的参数合并
56
+ * - 错误: 所有模型的错误合并
57
+ * - 返回值: 泛型A
58
+ */
59
+ static \u5E76\u884C\u7EC4\u5408(arr, f) {
60
+ return _\u4E1A\u52A1\u884C\u4E3A.\u901A\u8FC7\u5B9E\u73B0\u6784\u9020(
61
+ async (\u53C2\u6570) => {
62
+ var \u6240\u6709\u7ED3\u679C = await Promise.all(arr.map((a) => a.\u8FD0\u884C\u4E1A\u52A1\u884C\u4E3A(\u53C2\u6570)));
63
+ var \u9519\u8BEF = \u6240\u6709\u7ED3\u679C.filter((a) => a.isLeft())[0];
64
+ if (\u9519\u8BEF) return \u9519\u8BEF;
65
+ var \u6B63\u786E\u7ED3\u679C\u5408\u5E76 = \u6240\u6709\u7ED3\u679C.map((a) => a.assertRight().getRight()).reduce((s, a) => Object.assign(s, a), {});
66
+ return new import_ts_fp_data.Right(await f(\u6B63\u786E\u7ED3\u679C\u5408\u5E76));
67
+ },
68
+ `\u5E76\u884C\u7EC4\u5408(${arr.map((a) => a.\u4E1A\u52A1\u884C\u4E3A\u540D\u79F0).join(", ")})`
69
+ );
70
+ }
71
+ // ================================= 私有 =================================
72
+ \u4E1A\u52A1\u884C\u4E3A\u540D\u79F0;
73
+ constructor(\u4E1A\u52A1\u884C\u4E3A\u540D\u79F0) {
74
+ if (!\u4E1A\u52A1\u884C\u4E3A\u540D\u79F0) this.\u4E1A\u52A1\u884C\u4E3A\u540D\u79F0 = this.constructor.name || "<\u533F\u540D>";
75
+ else this.\u4E1A\u52A1\u884C\u4E3A\u540D\u79F0 = \u4E1A\u52A1\u884C\u4E3A\u540D\u79F0;
76
+ }
77
+ // ================================= 设置 =================================
78
+ \u8BBE\u7F6E\u4E1A\u52A1\u884C\u4E3A\u540D\u79F0(\u4E1A\u52A1\u884C\u4E3A\u540D\u79F0) {
79
+ this.\u4E1A\u52A1\u884C\u4E3A\u540D\u79F0 = \u4E1A\u52A1\u884C\u4E3A\u540D\u79F0;
80
+ return this;
81
+ }
82
+ \u8BBE\u7F6E\u53C2\u6570(\u8BBE\u7F6E\u53C2\u6570) {
83
+ return _\u4E1A\u52A1\u884C\u4E3A.\u901A\u8FC7\u5B9E\u73B0\u6784\u9020(async (\u53C2\u6570) => {
84
+ return await this.\u8FD0\u884C\u4E1A\u52A1\u884C\u4E3A({ ...\u8BBE\u7F6E\u53C2\u6570, ...\u53C2\u6570 });
85
+ }, this.\u4E1A\u52A1\u884C\u4E3A\u540D\u79F0);
86
+ }
87
+ // ================================= 运行 =================================
88
+ async \u8FD0\u884C\u4E1A\u52A1\u884C\u4E3A(\u53C2\u6570) {
89
+ try {
90
+ return await this.\u4E1A\u52A1\u884C\u4E3A\u5B9E\u73B0(\u53C2\u6570);
91
+ } catch (e) {
92
+ throw e;
93
+ }
94
+ }
95
+ // ================================= 组合 =================================
96
+ /**
97
+ * 将两个模型串接, 得到一个新模型, 新模型的类型是:
98
+ * - 参数: a模型的参数
99
+ * - 错误: a模型的错误+b模型的错误
100
+ * - 返回值: b模型的返回值
101
+ */
102
+ \u6D41\u5F0F\u7EC4\u5408(b) {
103
+ return _\u4E1A\u52A1\u884C\u4E3A.\u901A\u8FC7\u5B9E\u73B0\u6784\u9020(async (\u53C2\u6570) => {
104
+ const \u6211\u7684\u7ED3\u679C = await this.\u8FD0\u884C\u4E1A\u52A1\u884C\u4E3A(\u53C2\u6570);
105
+ if (\u6211\u7684\u7ED3\u679C.isLeft()) return new import_ts_fp_data.Left(\u6211\u7684\u7ED3\u679C.assertLeft().getLeft());
106
+ return b.\u8FD0\u884C\u4E1A\u52A1\u884C\u4E3A(\u6211\u7684\u7ED3\u679C.assertRight().getRight());
107
+ }, `\u6D41\u5F0F\u7EC4\u5408(${this.\u4E1A\u52A1\u884C\u4E3A\u540D\u79F0}, ${b.\u4E1A\u52A1\u884C\u4E3A\u540D\u79F0})`);
108
+ }
109
+ /**
110
+ * 将两个模型串接, 得到一个新的模型
111
+ * 相比流式组合, 本函数不要求串联位置参数匹配, 缺少的参数将在调用时补全
112
+ * 新模型的类型是:
113
+ * - 参数: a模型的参数+(b模型的参数-a模型的返回值)
114
+ * - 错误: a模型的错误+b模型的错误
115
+ * - 返回值: a模型的返回值+b模型的返回值
116
+ */
117
+ \u6DF7\u5408\u7EC4\u5408(b) {
118
+ return _\u4E1A\u52A1\u884C\u4E3A.\u901A\u8FC7\u5B9E\u73B0\u6784\u9020(async (\u53C2\u6570) => {
119
+ const \u6211\u7684\u7ED3\u679C = await this.\u8FD0\u884C\u4E1A\u52A1\u884C\u4E3A(\u53C2\u6570);
120
+ if (\u6211\u7684\u7ED3\u679C.isLeft()) return new import_ts_fp_data.Left(\u6211\u7684\u7ED3\u679C.assertLeft().getLeft());
121
+ var \u5BF9\u65B9\u7ED3\u679C = await b.\u8FD0\u884C\u4E1A\u52A1\u884C\u4E3A({ ...\u53C2\u6570, ...\u6211\u7684\u7ED3\u679C.assertRight().getRight() });
122
+ return \u5BF9\u65B9\u7ED3\u679C.map((a) => Object.assign(a, \u6211\u7684\u7ED3\u679C.assertRight().getRight()));
123
+ }, `\u6DF7\u5408\u7EC4\u5408(${this.\u4E1A\u52A1\u884C\u4E3A\u540D\u79F0}, ${b.\u4E1A\u52A1\u884C\u4E3A\u540D\u79F0})`);
124
+ }
125
+ // ================================= 映射 =================================
126
+ \u6620\u5C04\u7ED3\u679C(f) {
127
+ return _\u4E1A\u52A1\u884C\u4E3A.\u901A\u8FC7\u5B9E\u73B0\u6784\u9020(async (\u53C2\u6570) => {
128
+ const \u6211\u7684\u7ED3\u679C = await this.\u8FD0\u884C\u4E1A\u52A1\u884C\u4E3A(\u53C2\u6570);
129
+ if (\u6211\u7684\u7ED3\u679C.isLeft()) return new import_ts_fp_data.Left(\u6211\u7684\u7ED3\u679C.assertLeft().getLeft());
130
+ return import_ts_fp_data.Either.pure(f(\u6211\u7684\u7ED3\u679C.assertRight().getRight()));
131
+ }, this.\u4E1A\u52A1\u884C\u4E3A\u540D\u79F0);
132
+ }
133
+ \u6620\u5C04\u9519\u8BEF(f) {
134
+ return _\u4E1A\u52A1\u884C\u4E3A.\u901A\u8FC7\u5B9E\u73B0\u6784\u9020(async (\u53C2\u6570) => {
135
+ const \u6211\u7684\u7ED3\u679C = await this.\u8FD0\u884C\u4E1A\u52A1\u884C\u4E3A(\u53C2\u6570);
136
+ if (\u6211\u7684\u7ED3\u679C.isLeft()) return new import_ts_fp_data.Left(f(\u6211\u7684\u7ED3\u679C.assertLeft().getLeft()));
137
+ return import_ts_fp_data.Either.pure(\u6211\u7684\u7ED3\u679C.assertRight().getRight());
138
+ }, this.\u4E1A\u52A1\u884C\u4E3A\u540D\u79F0);
139
+ }
140
+ };
141
+
142
+ // src/interface/inst/interface-abstract.ts
143
+ var API\u63A5\u53E3\u57FA\u7C7B = class extends \u4E1A\u52A1\u884C\u4E3A {
144
+ async API\u5B9E\u73B0(\u53C2\u6570) {
145
+ var c = await this.\u4E1A\u52A1\u884C\u4E3A\u5B9E\u73B0(\u53C2\u6570);
146
+ if (c.isLeft()) return this.\u5305\u88C5\u9519\u8BEF\u7ED3\u679C(c.assertLeft().getLeft());
147
+ return this.\u5305\u88C5\u6B63\u786E\u7ED3\u679C(c.assertRight().getRight());
148
+ }
27
149
  };
28
150
  // Annotate the CommonJS export names for ESM import in node:
29
151
  0 && (module.exports = {
@@ -1,19 +1,20 @@
1
1
  import { z } from 'zod';
2
- import { 正确结果 as ____, 错误结果 as ____$1 } from '../../result/result.cjs';
2
+ import { Either } from '@lsby/ts-fp-data';
3
+ import { 正确结果 as ____$1, 错误结果 as ____$2 } from '../../result/result.cjs';
4
+ import { 业务行为 as ____ } from '../action/action.cjs';
3
5
  import { 合并插件结果 as ______ } from '../plug.cjs';
4
- import { 任意接口类型 as ______$1, 接口类型抽象类 as _______ } from '../type/interface-type-abstract.cjs';
6
+ import { 接口类型插件们 as _______, 接口类型错误结果 as ________, 接口类型正确结果 as ________$1, 任意接口类型 as ______$1 } from '../type/interface-type-abstract.cjs';
5
7
  import 'express';
6
- import '@lsby/ts-fp-data';
7
8
 
8
- type F3<A> = A extends _______<infer _A1, infer _A2, infer A3, infer _A4, infer _A5> ? A3 : never;
9
- type F4<A> = A extends _______<infer _A1, infer _A2, infer _A3, infer A4, infer _A5> ? A4 : never;
10
- type F5<A> = A extends _______<infer _A1, infer _A2, infer _A3, infer _A4, infer A5> ? A5 : never;
11
- type 计算实现参数<接口类型定义> = ______<F3<接口类型定义>>;
12
- type 计算实现结果<接口类型定义> = Promise<____<z.infer<F4<接口类型定义>>> | ____$1<z.infer<F5<接口类型定义>>>>;
13
- declare abstract class API接口基类<接口类型描述 extends ______$1> {
9
+ type 计算实现参数<接口类型描述> = ______<_______<接口类型描述>>;
10
+ type 计算实现返回<接口类型描述> = Promise<Either<z.infer<________<接口类型描述>>, z.infer<________$1<接口类型描述>>>>;
11
+ declare abstract class API接口基类<接口类型描述 extends ______$1> extends ____<计算实现参数<接口类型描述>, z.infer<________<接口类型描述>>, z.infer<________$1<接口类型描述>>> {
12
+ protected abstract 业务行为实现(参数: 计算实现参数<接口类型描述>): 计算实现返回<接口类型描述>;
13
+ protected abstract 包装正确结果(数据: z.infer<________$1<接口类型描述>>): ____$1<z.infer<________$1<接口类型描述>>>;
14
+ protected abstract 包装错误结果(数据: z.infer<________<接口类型描述>>): ____$2<z.infer<________<接口类型描述>>>;
14
15
  abstract 获得API类型(): 接口类型描述;
15
- abstract API实现(ctx: ______<F3<接口类型描述>>): Promise<____<z.infer<F4<接口类型描述>>> | ____$1<z.infer<F5<接口类型描述>>>>;
16
+ API实现(参数: 计算实现参数<接口类型描述>): Promise<____$1<z.infer<________$1<接口类型描述>>> | ____$2<z.infer<________<接口类型描述>>>>;
16
17
  }
17
18
  type 任意接口 = API接口基类<any>;
18
19
 
19
- export { API接口基类, type 任意接口, type 计算实现参数, type 计算实现结果 };
20
+ export { API接口基类, type 任意接口, type 计算实现参数, type 计算实现返回 };
@@ -24,23 +24,151 @@ __export(interface_exports, {
24
24
  });
25
25
  module.exports = __toCommonJS(interface_exports);
26
26
 
27
+ // src/interface/action/action.ts
28
+ var import_ts_fp_data = require("@lsby/ts-fp-data");
29
+ var \u4E1A\u52A1\u884C\u4E3A = class _\u4E1A\u52A1\u884C\u4E3A {
30
+ // ================================= 静态 =================================
31
+ static \u901A\u8FC7\u5B9E\u73B0\u6784\u9020(\u5B9E\u73B0, \u4E1A\u52A1\u884C\u4E3A\u540D\u79F0) {
32
+ return new class extends _\u4E1A\u52A1\u884C\u4E3A {
33
+ async \u4E1A\u52A1\u884C\u4E3A\u5B9E\u73B0(\u53C2\u6570) {
34
+ return \u5B9E\u73B0(\u53C2\u6570);
35
+ }
36
+ }(\u4E1A\u52A1\u884C\u4E3A\u540D\u79F0);
37
+ }
38
+ static \u6D41\u5F0F\u7EC4\u5408(a, b) {
39
+ return a.\u6D41\u5F0F\u7EC4\u5408(b);
40
+ }
41
+ static \u6DF7\u5408\u7EC4\u5408(a, b) {
42
+ return a.\u6DF7\u5408\u7EC4\u5408(b);
43
+ }
44
+ /**
45
+ * 对多个项混合组合
46
+ */
47
+ static \u6DF7\u5408\u7EC4\u5408\u591A\u9879(arr) {
48
+ return arr.reduce((s, a) => s.\u6DF7\u5408\u7EC4\u5408(a));
49
+ }
50
+ /**
51
+ * 同时运行多个模型, 并提供一个函数处理它们的结果
52
+ * 如果其中任何一个模型发生错误, 则最终模型输出第一个错误
53
+ * 处理函数的类型是: 所有模型的结果合并 => 泛型A
54
+ * 新模型的类型是:
55
+ * - 参数: 所有模型的参数合并
56
+ * - 错误: 所有模型的错误合并
57
+ * - 返回值: 泛型A
58
+ */
59
+ static \u5E76\u884C\u7EC4\u5408(arr, f) {
60
+ return _\u4E1A\u52A1\u884C\u4E3A.\u901A\u8FC7\u5B9E\u73B0\u6784\u9020(
61
+ async (\u53C2\u6570) => {
62
+ var \u6240\u6709\u7ED3\u679C = await Promise.all(arr.map((a) => a.\u8FD0\u884C\u4E1A\u52A1\u884C\u4E3A(\u53C2\u6570)));
63
+ var \u9519\u8BEF = \u6240\u6709\u7ED3\u679C.filter((a) => a.isLeft())[0];
64
+ if (\u9519\u8BEF) return \u9519\u8BEF;
65
+ var \u6B63\u786E\u7ED3\u679C\u5408\u5E76 = \u6240\u6709\u7ED3\u679C.map((a) => a.assertRight().getRight()).reduce((s, a) => Object.assign(s, a), {});
66
+ return new import_ts_fp_data.Right(await f(\u6B63\u786E\u7ED3\u679C\u5408\u5E76));
67
+ },
68
+ `\u5E76\u884C\u7EC4\u5408(${arr.map((a) => a.\u4E1A\u52A1\u884C\u4E3A\u540D\u79F0).join(", ")})`
69
+ );
70
+ }
71
+ // ================================= 私有 =================================
72
+ \u4E1A\u52A1\u884C\u4E3A\u540D\u79F0;
73
+ constructor(\u4E1A\u52A1\u884C\u4E3A\u540D\u79F0) {
74
+ if (!\u4E1A\u52A1\u884C\u4E3A\u540D\u79F0) this.\u4E1A\u52A1\u884C\u4E3A\u540D\u79F0 = this.constructor.name || "<\u533F\u540D>";
75
+ else this.\u4E1A\u52A1\u884C\u4E3A\u540D\u79F0 = \u4E1A\u52A1\u884C\u4E3A\u540D\u79F0;
76
+ }
77
+ // ================================= 设置 =================================
78
+ \u8BBE\u7F6E\u4E1A\u52A1\u884C\u4E3A\u540D\u79F0(\u4E1A\u52A1\u884C\u4E3A\u540D\u79F0) {
79
+ this.\u4E1A\u52A1\u884C\u4E3A\u540D\u79F0 = \u4E1A\u52A1\u884C\u4E3A\u540D\u79F0;
80
+ return this;
81
+ }
82
+ \u8BBE\u7F6E\u53C2\u6570(\u8BBE\u7F6E\u53C2\u6570) {
83
+ return _\u4E1A\u52A1\u884C\u4E3A.\u901A\u8FC7\u5B9E\u73B0\u6784\u9020(async (\u53C2\u6570) => {
84
+ return await this.\u8FD0\u884C\u4E1A\u52A1\u884C\u4E3A({ ...\u8BBE\u7F6E\u53C2\u6570, ...\u53C2\u6570 });
85
+ }, this.\u4E1A\u52A1\u884C\u4E3A\u540D\u79F0);
86
+ }
87
+ // ================================= 运行 =================================
88
+ async \u8FD0\u884C\u4E1A\u52A1\u884C\u4E3A(\u53C2\u6570) {
89
+ try {
90
+ return await this.\u4E1A\u52A1\u884C\u4E3A\u5B9E\u73B0(\u53C2\u6570);
91
+ } catch (e) {
92
+ throw e;
93
+ }
94
+ }
95
+ // ================================= 组合 =================================
96
+ /**
97
+ * 将两个模型串接, 得到一个新模型, 新模型的类型是:
98
+ * - 参数: a模型的参数
99
+ * - 错误: a模型的错误+b模型的错误
100
+ * - 返回值: b模型的返回值
101
+ */
102
+ \u6D41\u5F0F\u7EC4\u5408(b) {
103
+ return _\u4E1A\u52A1\u884C\u4E3A.\u901A\u8FC7\u5B9E\u73B0\u6784\u9020(async (\u53C2\u6570) => {
104
+ const \u6211\u7684\u7ED3\u679C = await this.\u8FD0\u884C\u4E1A\u52A1\u884C\u4E3A(\u53C2\u6570);
105
+ if (\u6211\u7684\u7ED3\u679C.isLeft()) return new import_ts_fp_data.Left(\u6211\u7684\u7ED3\u679C.assertLeft().getLeft());
106
+ return b.\u8FD0\u884C\u4E1A\u52A1\u884C\u4E3A(\u6211\u7684\u7ED3\u679C.assertRight().getRight());
107
+ }, `\u6D41\u5F0F\u7EC4\u5408(${this.\u4E1A\u52A1\u884C\u4E3A\u540D\u79F0}, ${b.\u4E1A\u52A1\u884C\u4E3A\u540D\u79F0})`);
108
+ }
109
+ /**
110
+ * 将两个模型串接, 得到一个新的模型
111
+ * 相比流式组合, 本函数不要求串联位置参数匹配, 缺少的参数将在调用时补全
112
+ * 新模型的类型是:
113
+ * - 参数: a模型的参数+(b模型的参数-a模型的返回值)
114
+ * - 错误: a模型的错误+b模型的错误
115
+ * - 返回值: a模型的返回值+b模型的返回值
116
+ */
117
+ \u6DF7\u5408\u7EC4\u5408(b) {
118
+ return _\u4E1A\u52A1\u884C\u4E3A.\u901A\u8FC7\u5B9E\u73B0\u6784\u9020(async (\u53C2\u6570) => {
119
+ const \u6211\u7684\u7ED3\u679C = await this.\u8FD0\u884C\u4E1A\u52A1\u884C\u4E3A(\u53C2\u6570);
120
+ if (\u6211\u7684\u7ED3\u679C.isLeft()) return new import_ts_fp_data.Left(\u6211\u7684\u7ED3\u679C.assertLeft().getLeft());
121
+ var \u5BF9\u65B9\u7ED3\u679C = await b.\u8FD0\u884C\u4E1A\u52A1\u884C\u4E3A({ ...\u53C2\u6570, ...\u6211\u7684\u7ED3\u679C.assertRight().getRight() });
122
+ return \u5BF9\u65B9\u7ED3\u679C.map((a) => Object.assign(a, \u6211\u7684\u7ED3\u679C.assertRight().getRight()));
123
+ }, `\u6DF7\u5408\u7EC4\u5408(${this.\u4E1A\u52A1\u884C\u4E3A\u540D\u79F0}, ${b.\u4E1A\u52A1\u884C\u4E3A\u540D\u79F0})`);
124
+ }
125
+ // ================================= 映射 =================================
126
+ \u6620\u5C04\u7ED3\u679C(f) {
127
+ return _\u4E1A\u52A1\u884C\u4E3A.\u901A\u8FC7\u5B9E\u73B0\u6784\u9020(async (\u53C2\u6570) => {
128
+ const \u6211\u7684\u7ED3\u679C = await this.\u8FD0\u884C\u4E1A\u52A1\u884C\u4E3A(\u53C2\u6570);
129
+ if (\u6211\u7684\u7ED3\u679C.isLeft()) return new import_ts_fp_data.Left(\u6211\u7684\u7ED3\u679C.assertLeft().getLeft());
130
+ return import_ts_fp_data.Either.pure(f(\u6211\u7684\u7ED3\u679C.assertRight().getRight()));
131
+ }, this.\u4E1A\u52A1\u884C\u4E3A\u540D\u79F0);
132
+ }
133
+ \u6620\u5C04\u9519\u8BEF(f) {
134
+ return _\u4E1A\u52A1\u884C\u4E3A.\u901A\u8FC7\u5B9E\u73B0\u6784\u9020(async (\u53C2\u6570) => {
135
+ const \u6211\u7684\u7ED3\u679C = await this.\u8FD0\u884C\u4E1A\u52A1\u884C\u4E3A(\u53C2\u6570);
136
+ if (\u6211\u7684\u7ED3\u679C.isLeft()) return new import_ts_fp_data.Left(f(\u6211\u7684\u7ED3\u679C.assertLeft().getLeft()));
137
+ return import_ts_fp_data.Either.pure(\u6211\u7684\u7ED3\u679C.assertRight().getRight());
138
+ }, this.\u4E1A\u52A1\u884C\u4E3A\u540D\u79F0);
139
+ }
140
+ };
141
+
27
142
  // src/interface/inst/interface-abstract.ts
28
- var API\u63A5\u53E3\u57FA\u7C7B = class {
143
+ var API\u63A5\u53E3\u57FA\u7C7B = class extends \u4E1A\u52A1\u884C\u4E3A {
144
+ async API\u5B9E\u73B0(\u53C2\u6570) {
145
+ var c = await this.\u4E1A\u52A1\u884C\u4E3A\u5B9E\u73B0(\u53C2\u6570);
146
+ if (c.isLeft()) return this.\u5305\u88C5\u9519\u8BEF\u7ED3\u679C(c.assertLeft().getLeft());
147
+ return this.\u5305\u88C5\u6B63\u786E\u7ED3\u679C(c.assertRight().getRight());
148
+ }
29
149
  };
30
150
 
31
151
  // src/interface/inst/interface.ts
32
152
  var \u63A5\u53E3 = class extends API\u63A5\u53E3\u57FA\u7C7B {
33
- constructor(\u63A5\u53E3\u7C7B\u578B, \u5B9E\u73B0) {
153
+ constructor(\u63A5\u53E3\u7C7B\u578B, \u6B63\u786E\u7ED3\u679C\u5305\u88C5\u5668, \u9519\u8BEF\u7ED3\u679C\u5305\u88C5\u5668, \u5B9E\u73B0) {
34
154
  super();
35
155
  this.\u63A5\u53E3\u7C7B\u578B = \u63A5\u53E3\u7C7B\u578B;
156
+ this.\u6B63\u786E\u7ED3\u679C\u5305\u88C5\u5668 = \u6B63\u786E\u7ED3\u679C\u5305\u88C5\u5668;
157
+ this.\u9519\u8BEF\u7ED3\u679C\u5305\u88C5\u5668 = \u9519\u8BEF\u7ED3\u679C\u5305\u88C5\u5668;
36
158
  this.\u5B9E\u73B0 = \u5B9E\u73B0;
37
159
  }
160
+ \u5305\u88C5\u6B63\u786E\u7ED3\u679C(a) {
161
+ return this.\u6B63\u786E\u7ED3\u679C\u5305\u88C5\u5668(a);
162
+ }
163
+ \u5305\u88C5\u9519\u8BEF\u7ED3\u679C(a) {
164
+ return this.\u9519\u8BEF\u7ED3\u679C\u5305\u88C5\u5668(a);
165
+ }
166
+ \u4E1A\u52A1\u884C\u4E3A\u5B9E\u73B0(\u53C2\u6570) {
167
+ return this.\u5B9E\u73B0(\u53C2\u6570);
168
+ }
38
169
  \u83B7\u5F97API\u7C7B\u578B() {
39
170
  return this.\u63A5\u53E3\u7C7B\u578B;
40
171
  }
41
- API\u5B9E\u73B0(ctx) {
42
- return this.\u5B9E\u73B0(ctx);
43
- }
44
172
  };
45
173
  // Annotate the CommonJS export names for ESM import in node:
46
174
  0 && (module.exports = {
@@ -1,18 +1,22 @@
1
1
  import { z } from 'zod';
2
+ import { Either } from '@lsby/ts-fp-data';
2
3
  import { 正确结果 as ____, 错误结果 as ____$1 } from '../../result/result.cjs';
3
4
  import { 插件项类型 as _____, 合并插件结果 as ______ } from '../plug.cjs';
4
- import { 接口类型抽象类 as _______ } from '../type/interface-type-abstract.cjs';
5
+ import { 接口类型抽象类 as _______, 接口类型错误结果 as ________, 接口类型正确结果 as ________$1 } from '../type/interface-type-abstract.cjs';
5
6
  import { API接口基类 as API____ } from './interface-abstract.cjs';
6
7
  import 'express';
7
- import '@lsby/ts-fp-data';
8
+ import '../action/action.cjs';
8
9
 
9
10
  declare class 接口<路径 extends string, 方法 extends 'get' | 'post', 插件们 extends Array<_____>, 正确返回类型 extends z.ZodTypeAny, 错误返回类型 extends z.ZodTypeAny> extends API____<_______<路径, 方法, 插件们, 正确返回类型, 错误返回类型>> {
10
11
  private 接口类型;
12
+ private 正确结果包装器;
13
+ private 错误结果包装器;
11
14
  private 实现;
12
- protected readonly __类型保持符号?: [路径, 方法, 插件们, 正确返回类型, 错误返回类型];
13
- constructor(接口类型: _______<路径, 方法, 插件们, 正确返回类型, 错误返回类型>, 实现: (插件结果: ______<插件们>) => Promise<____<z.infer<正确返回类型>> | ____$1<z.infer<错误返回类型>>>);
15
+ constructor(接口类型: _______<路径, 方法, 插件们, 正确返回类型, 错误返回类型>, 正确结果包装器: (a: z.infer<________<_______<路径, 方法, 插件们, 正确返回类型, 错误返回类型>>>) => ____<z.infer<________$1<_______<路径, 方法, 插件们, 正确返回类型, 错误返回类型>>>>, 错误结果包装器: (a: z.infer<________$1<_______<路径, 方法, 插件们, 正确返回类型, 错误返回类型>>>) => ____$1<z.infer<________<_______<路径, 方法, 插件们, 正确返回类型, 错误返回类型>>>>, 实现: (插件结果: ______<插件们>) => Promise<Either<z.infer<错误返回类型>, z.infer<正确返回类型>>>);
16
+ protected 包装正确结果(a: z.infer<错误返回类型>): ____<z.infer<正确返回类型>>;
17
+ protected 包装错误结果(a: z.infer<正确返回类型>): ____$1<z.infer<错误返回类型>>;
18
+ protected 业务行为实现(参数: ______<插件们>): Promise<Either<z.infer<错误返回类型>, z.infer<正确返回类型>>>;
14
19
  获得API类型(): _______<路径, 方法, 插件们, 正确返回类型, 错误返回类型>;
15
- API实现(ctx: ______<插件们>): Promise<____<z.TypeOf<正确返回类型>> | ____$1<z.TypeOf<错误返回类型>>>;
16
20
  }
17
21
 
18
22
  export { 接口 };
@@ -3,6 +3,11 @@ import { 插件项类型 as _____ } from '../plug.cjs';
3
3
  import 'express';
4
4
  import '@lsby/ts-fp-data';
5
5
 
6
+ type 接口类型路径<A> = A extends 接口类型抽象类<infer A1, infer _A2, infer _A3, infer _A4, infer _A5> ? A1 : never;
7
+ type 接口类型方法<A> = A extends 接口类型抽象类<infer _A1, infer A2, infer _A3, infer _A4, infer _A5> ? A2 : never;
8
+ type 接口类型插件们<A> = A extends 接口类型抽象类<infer _A1, infer _A2, infer A3, infer _A4, infer _A5> ? A3 : never;
9
+ type 接口类型正确结果<A> = A extends 接口类型抽象类<infer _A1, infer _A2, infer _A3, infer A4, infer _A5> ? A4 : never;
10
+ type 接口类型错误结果<A> = A extends 接口类型抽象类<infer _A1, infer _A2, infer _A3, infer _A4, infer A5> ? A5 : never;
6
11
  declare abstract class 接口类型抽象类<路径 extends string, 方法 extends 'get' | 'post', 插件们 extends Array<_____>, 正确结果类型 extends z.ZodTypeAny, 错误结果类型 extends z.ZodTypeAny> {
7
12
  abstract 获得路径(): 路径;
8
13
  abstract 获得方法(): 方法;
@@ -13,4 +18,4 @@ declare abstract class 接口类型抽象类<路径 extends string, 方法 exten
13
18
  type 任意接口类型 = 接口类型抽象类<any, any, any, any, any>;
14
19
  type 获得接口插件们<接口类型描述> = 接口类型描述 extends 接口类型抽象类<any, any, infer 插件, any, any> ? 插件 : never;
15
20
 
16
- export { type 任意接口类型, 接口类型抽象类, type 获得接口插件们 };
21
+ export { type 任意接口类型, 接口类型抽象类, type 接口类型插件们, type 接口类型方法, type 接口类型正确结果, type 接口类型路径, type 接口类型错误结果, type 获得接口插件们 };
@@ -60,8 +60,7 @@ var \u8868\u5355\u89E3\u6790\u63D2\u4EF6 = class extends \u63D2\u4EF6 {
60
60
  })
61
61
  );
62
62
  const parseResult = t.safeParse({ body: req.body });
63
- if (!parseResult.success)
64
- throw new Error((0, import_node_util.format)("parse url encoded body failed: %O", parseResult.error));
63
+ if (!parseResult.success) throw new Error((0, import_node_util.format)("parse url encoded body failed: %O", parseResult.error));
65
64
  return { body: parseResult.data.body };
66
65
  });
67
66
  }
@@ -105,8 +105,7 @@ var \u670D\u52A1\u5668 = class {
105
105
  await new Promise((res, _rej) => {
106
106
  server = app.listen(this.\u7AEF\u53E3, () => res());
107
107
  });
108
- if (server == null)
109
- throw new Error("\u542F\u52A8\u670D\u52A1\u5668\u5931\u8D25");
108
+ if (server == null) throw new Error("\u542F\u52A8\u670D\u52A1\u5668\u5931\u8D25");
110
109
  return {
111
110
  ip: Object.values((0, import_node_os.networkInterfaces)()).flat().flatMap((address) => address !== void 0 ? [address] : []).map((wrappedAddress) => wrappedAddress.address).map((address) => `http://${address}:${this.\u7AEF\u53E3}`),
112
111
  server
@@ -1,10 +1,11 @@
1
1
  import * as http from 'node:http';
2
2
  import { 任意接口 as ____ } from '../interface/inst/interface-abstract.cjs';
3
3
  import 'zod';
4
+ import '@lsby/ts-fp-data';
4
5
  import '../result/result.cjs';
5
6
  import 'express';
7
+ import '../interface/action/action.cjs';
6
8
  import '../interface/plug.cjs';
7
- import '@lsby/ts-fp-data';
8
9
  import '../interface/type/interface-type-abstract.cjs';
9
10
 
10
11
  declare class 服务器 {
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  main
4
- } from "../../chunk-YYOST4AX.js";
4
+ } from "../../chunk-FLDJE3PK.js";
5
5
 
6
6
  // src/bin/gen-list/bin.ts
7
7
  import path from "node:path";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  main
3
- } from "../../chunk-YYOST4AX.js";
3
+ } from "../../chunk-FLDJE3PK.js";
4
4
  export {
5
5
  main
6
6
  };
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  main
4
- } from "../../chunk-CSZNLNB5.js";
4
+ } from "../../chunk-NCSYD5GL.js";
5
5
 
6
6
  // src/bin/gen-test/bin.ts
7
7
  import path from "node:path";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  main
3
- } from "../../chunk-CSZNLNB5.js";
3
+ } from "../../chunk-NCSYD5GL.js";
4
4
  export {
5
5
  main
6
6
  };
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  main
4
- } from "../../chunk-DQX4L6GK.js";
4
+ } from "../../chunk-GAVKGLRL.js";
5
5
  import "../../chunk-FLIKJZGI.js";
6
6
 
7
7
  // src/bin/gen-type/bin.ts
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  main
3
- } from "../../chunk-DQX4L6GK.js";
3
+ } from "../../chunk-GAVKGLRL.js";
4
4
  import "../../chunk-FLIKJZGI.js";
5
5
  export {
6
6
  main
@@ -64,8 +64,7 @@ var \u670D\u52A1\u5668 = class {
64
64
  await new Promise((res, _rej) => {
65
65
  server = app.listen(this.\u7AEF\u53E3, () => res());
66
66
  });
67
- if (server == null)
68
- throw new Error("\u542F\u52A8\u670D\u52A1\u5668\u5931\u8D25");
67
+ if (server == null) throw new Error("\u542F\u52A8\u670D\u52A1\u5668\u5931\u8D25");
69
68
  return {
70
69
  ip: Object.values(networkInterfaces()).flat().flatMap((address) => address !== void 0 ? [address] : []).map((wrappedAddress) => wrappedAddress.address).map((address) => `http://${address}:${this.\u7AEF\u53E3}`),
71
70
  server
@@ -33,8 +33,7 @@ async function main(tsconfigPath, interfaceFolderPath, outFilePath) {
33
33
  const \u4EE3\u7801\u533A = [];
34
34
  for (var i = 0; i < \u63A5\u53E3\u5B9E\u73B0\u6587\u4EF6\u4EEC.length; i++) {
35
35
  var \u63A5\u53E3\u5B9E\u73B0\u6587\u4EF6 = \u63A5\u53E3\u5B9E\u73B0\u6587\u4EF6\u4EEC[i];
36
- if (\u63A5\u53E3\u5B9E\u73B0\u6587\u4EF6 == null)
37
- throw new Error("\u975E\u9884\u671F\u7684\u6570\u7EC4\u8D8A\u754C");
36
+ if (\u63A5\u53E3\u5B9E\u73B0\u6587\u4EF6 == null) throw new Error("\u975E\u9884\u671F\u7684\u6570\u7EC4\u8D8A\u754C");
38
37
  const filenameRelativeToApiFolder = path.relative(interfaceFolderPath, \u63A5\u53E3\u5B9E\u73B0\u6587\u4EF6.fileName).replaceAll("\\", "/");
39
38
  const importName = filenameRelativeToApiFolder.replaceAll("/", "_").replaceAll(".ts", "").replaceAll("./", "").replaceAll("-", "_");
40
39
  const filenameRelativeToProjectRoot = path.relative(\u9879\u76EE\u6839\u8DEF\u5F84, \u63A5\u53E3\u5B9E\u73B0\u6587\u4EF6.fileName).replaceAll("\\", "/").replaceAll(".ts", "");
@@ -58,8 +58,7 @@ async function main(tsconfigPath, apiFolderPath, outputPath) {
58
58
  const result = [];
59
59
  for (var index = 0; index < apiSourceFiles.length; index++) {
60
60
  var apiSourceFile = apiSourceFiles[index];
61
- if (apiSourceFile == null)
62
- throw new Error("\u975E\u9884\u671F\u7684\u6570\u7EC4\u8D8A\u754C");
61
+ if (apiSourceFile == null) throw new Error("\u975E\u9884\u671F\u7684\u6570\u7EC4\u8D8A\u754C");
63
62
  await log.info(`\u5904\u7406\uFF08${index + 1} / ${apiSourceFiles.length}\uFF09\uFF1A${apiSourceFile.fileName}`);
64
63
  const apiCalcSourceFile = apiTypeCalcFiles[index]?.sourceFile;
65
64
  if (apiCalcSourceFile === void 0) {
@@ -0,0 +1,118 @@
1
+ // src/interface/action/action.ts
2
+ import { Either, Left, Right } from "@lsby/ts-fp-data";
3
+ var \u4E1A\u52A1\u884C\u4E3A = class _\u4E1A\u52A1\u884C\u4E3A {
4
+ // ================================= 静态 =================================
5
+ static \u901A\u8FC7\u5B9E\u73B0\u6784\u9020(\u5B9E\u73B0, \u4E1A\u52A1\u884C\u4E3A\u540D\u79F0) {
6
+ return new class extends _\u4E1A\u52A1\u884C\u4E3A {
7
+ async \u4E1A\u52A1\u884C\u4E3A\u5B9E\u73B0(\u53C2\u6570) {
8
+ return \u5B9E\u73B0(\u53C2\u6570);
9
+ }
10
+ }(\u4E1A\u52A1\u884C\u4E3A\u540D\u79F0);
11
+ }
12
+ static \u6D41\u5F0F\u7EC4\u5408(a, b) {
13
+ return a.\u6D41\u5F0F\u7EC4\u5408(b);
14
+ }
15
+ static \u6DF7\u5408\u7EC4\u5408(a, b) {
16
+ return a.\u6DF7\u5408\u7EC4\u5408(b);
17
+ }
18
+ /**
19
+ * 对多个项混合组合
20
+ */
21
+ static \u6DF7\u5408\u7EC4\u5408\u591A\u9879(arr) {
22
+ return arr.reduce((s, a) => s.\u6DF7\u5408\u7EC4\u5408(a));
23
+ }
24
+ /**
25
+ * 同时运行多个模型, 并提供一个函数处理它们的结果
26
+ * 如果其中任何一个模型发生错误, 则最终模型输出第一个错误
27
+ * 处理函数的类型是: 所有模型的结果合并 => 泛型A
28
+ * 新模型的类型是:
29
+ * - 参数: 所有模型的参数合并
30
+ * - 错误: 所有模型的错误合并
31
+ * - 返回值: 泛型A
32
+ */
33
+ static \u5E76\u884C\u7EC4\u5408(arr, f) {
34
+ return _\u4E1A\u52A1\u884C\u4E3A.\u901A\u8FC7\u5B9E\u73B0\u6784\u9020(
35
+ async (\u53C2\u6570) => {
36
+ var \u6240\u6709\u7ED3\u679C = await Promise.all(arr.map((a) => a.\u8FD0\u884C\u4E1A\u52A1\u884C\u4E3A(\u53C2\u6570)));
37
+ var \u9519\u8BEF = \u6240\u6709\u7ED3\u679C.filter((a) => a.isLeft())[0];
38
+ if (\u9519\u8BEF) return \u9519\u8BEF;
39
+ var \u6B63\u786E\u7ED3\u679C\u5408\u5E76 = \u6240\u6709\u7ED3\u679C.map((a) => a.assertRight().getRight()).reduce((s, a) => Object.assign(s, a), {});
40
+ return new Right(await f(\u6B63\u786E\u7ED3\u679C\u5408\u5E76));
41
+ },
42
+ `\u5E76\u884C\u7EC4\u5408(${arr.map((a) => a.\u4E1A\u52A1\u884C\u4E3A\u540D\u79F0).join(", ")})`
43
+ );
44
+ }
45
+ // ================================= 私有 =================================
46
+ \u4E1A\u52A1\u884C\u4E3A\u540D\u79F0;
47
+ constructor(\u4E1A\u52A1\u884C\u4E3A\u540D\u79F0) {
48
+ if (!\u4E1A\u52A1\u884C\u4E3A\u540D\u79F0) this.\u4E1A\u52A1\u884C\u4E3A\u540D\u79F0 = this.constructor.name || "<\u533F\u540D>";
49
+ else this.\u4E1A\u52A1\u884C\u4E3A\u540D\u79F0 = \u4E1A\u52A1\u884C\u4E3A\u540D\u79F0;
50
+ }
51
+ // ================================= 设置 =================================
52
+ \u8BBE\u7F6E\u4E1A\u52A1\u884C\u4E3A\u540D\u79F0(\u4E1A\u52A1\u884C\u4E3A\u540D\u79F0) {
53
+ this.\u4E1A\u52A1\u884C\u4E3A\u540D\u79F0 = \u4E1A\u52A1\u884C\u4E3A\u540D\u79F0;
54
+ return this;
55
+ }
56
+ \u8BBE\u7F6E\u53C2\u6570(\u8BBE\u7F6E\u53C2\u6570) {
57
+ return _\u4E1A\u52A1\u884C\u4E3A.\u901A\u8FC7\u5B9E\u73B0\u6784\u9020(async (\u53C2\u6570) => {
58
+ return await this.\u8FD0\u884C\u4E1A\u52A1\u884C\u4E3A({ ...\u8BBE\u7F6E\u53C2\u6570, ...\u53C2\u6570 });
59
+ }, this.\u4E1A\u52A1\u884C\u4E3A\u540D\u79F0);
60
+ }
61
+ // ================================= 运行 =================================
62
+ async \u8FD0\u884C\u4E1A\u52A1\u884C\u4E3A(\u53C2\u6570) {
63
+ try {
64
+ return await this.\u4E1A\u52A1\u884C\u4E3A\u5B9E\u73B0(\u53C2\u6570);
65
+ } catch (e) {
66
+ throw e;
67
+ }
68
+ }
69
+ // ================================= 组合 =================================
70
+ /**
71
+ * 将两个模型串接, 得到一个新模型, 新模型的类型是:
72
+ * - 参数: a模型的参数
73
+ * - 错误: a模型的错误+b模型的错误
74
+ * - 返回值: b模型的返回值
75
+ */
76
+ \u6D41\u5F0F\u7EC4\u5408(b) {
77
+ return _\u4E1A\u52A1\u884C\u4E3A.\u901A\u8FC7\u5B9E\u73B0\u6784\u9020(async (\u53C2\u6570) => {
78
+ const \u6211\u7684\u7ED3\u679C = await this.\u8FD0\u884C\u4E1A\u52A1\u884C\u4E3A(\u53C2\u6570);
79
+ if (\u6211\u7684\u7ED3\u679C.isLeft()) return new Left(\u6211\u7684\u7ED3\u679C.assertLeft().getLeft());
80
+ return b.\u8FD0\u884C\u4E1A\u52A1\u884C\u4E3A(\u6211\u7684\u7ED3\u679C.assertRight().getRight());
81
+ }, `\u6D41\u5F0F\u7EC4\u5408(${this.\u4E1A\u52A1\u884C\u4E3A\u540D\u79F0}, ${b.\u4E1A\u52A1\u884C\u4E3A\u540D\u79F0})`);
82
+ }
83
+ /**
84
+ * 将两个模型串接, 得到一个新的模型
85
+ * 相比流式组合, 本函数不要求串联位置参数匹配, 缺少的参数将在调用时补全
86
+ * 新模型的类型是:
87
+ * - 参数: a模型的参数+(b模型的参数-a模型的返回值)
88
+ * - 错误: a模型的错误+b模型的错误
89
+ * - 返回值: a模型的返回值+b模型的返回值
90
+ */
91
+ \u6DF7\u5408\u7EC4\u5408(b) {
92
+ return _\u4E1A\u52A1\u884C\u4E3A.\u901A\u8FC7\u5B9E\u73B0\u6784\u9020(async (\u53C2\u6570) => {
93
+ const \u6211\u7684\u7ED3\u679C = await this.\u8FD0\u884C\u4E1A\u52A1\u884C\u4E3A(\u53C2\u6570);
94
+ if (\u6211\u7684\u7ED3\u679C.isLeft()) return new Left(\u6211\u7684\u7ED3\u679C.assertLeft().getLeft());
95
+ var \u5BF9\u65B9\u7ED3\u679C = await b.\u8FD0\u884C\u4E1A\u52A1\u884C\u4E3A({ ...\u53C2\u6570, ...\u6211\u7684\u7ED3\u679C.assertRight().getRight() });
96
+ return \u5BF9\u65B9\u7ED3\u679C.map((a) => Object.assign(a, \u6211\u7684\u7ED3\u679C.assertRight().getRight()));
97
+ }, `\u6DF7\u5408\u7EC4\u5408(${this.\u4E1A\u52A1\u884C\u4E3A\u540D\u79F0}, ${b.\u4E1A\u52A1\u884C\u4E3A\u540D\u79F0})`);
98
+ }
99
+ // ================================= 映射 =================================
100
+ \u6620\u5C04\u7ED3\u679C(f) {
101
+ return _\u4E1A\u52A1\u884C\u4E3A.\u901A\u8FC7\u5B9E\u73B0\u6784\u9020(async (\u53C2\u6570) => {
102
+ const \u6211\u7684\u7ED3\u679C = await this.\u8FD0\u884C\u4E1A\u52A1\u884C\u4E3A(\u53C2\u6570);
103
+ if (\u6211\u7684\u7ED3\u679C.isLeft()) return new Left(\u6211\u7684\u7ED3\u679C.assertLeft().getLeft());
104
+ return Either.pure(f(\u6211\u7684\u7ED3\u679C.assertRight().getRight()));
105
+ }, this.\u4E1A\u52A1\u884C\u4E3A\u540D\u79F0);
106
+ }
107
+ \u6620\u5C04\u9519\u8BEF(f) {
108
+ return _\u4E1A\u52A1\u884C\u4E3A.\u901A\u8FC7\u5B9E\u73B0\u6784\u9020(async (\u53C2\u6570) => {
109
+ const \u6211\u7684\u7ED3\u679C = await this.\u8FD0\u884C\u4E1A\u52A1\u884C\u4E3A(\u53C2\u6570);
110
+ if (\u6211\u7684\u7ED3\u679C.isLeft()) return new Left(f(\u6211\u7684\u7ED3\u679C.assertLeft().getLeft()));
111
+ return Either.pure(\u6211\u7684\u7ED3\u679C.assertRight().getRight());
112
+ }, this.\u4E1A\u52A1\u884C\u4E3A\u540D\u79F0);
113
+ }
114
+ };
115
+
116
+ export {
117
+ 业务行为
118
+ };
@@ -0,0 +1,21 @@
1
+ import {
2
+ API接口基类
3
+ } from "./chunk-PA2HBZKY.js";
4
+ import {
5
+ 正确JSON结果,
6
+ 错误JSON结果
7
+ } from "./chunk-IPDMEQ3O.js";
8
+
9
+ // src/extend/api-json-base.ts
10
+ var JSON\u63A5\u53E3\u57FA\u7C7B = class extends API\u63A5\u53E3\u57FA\u7C7B {
11
+ \u5305\u88C5\u6B63\u786E\u7ED3\u679C(\u6570\u636E) {
12
+ return new \u6B63\u786EJSON\u7ED3\u679C(\u6570\u636E);
13
+ }
14
+ \u5305\u88C5\u9519\u8BEF\u7ED3\u679C(\u6570\u636E) {
15
+ return new \u9519\u8BEFJSON\u7ED3\u679C(\u6570\u636E);
16
+ }
17
+ };
18
+
19
+ export {
20
+ JSON接口基类
21
+ };