@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.
- package/dist/bin/gen-list/bin.cjs +1 -2
- package/dist/bin/gen-list/index.cjs +1 -2
- package/dist/bin/gen-test/bin.cjs +1 -2
- package/dist/bin/gen-test/index.cjs +1 -2
- package/dist/bin/gen-type/bin.cjs +1 -2
- package/dist/bin/gen-type/index.cjs +1 -2
- package/dist/cjs/bin/gen-list/bin.cjs +1 -2
- package/dist/cjs/bin/gen-list/index.cjs +1 -2
- package/dist/cjs/bin/gen-test/bin.cjs +1 -2
- package/dist/cjs/bin/gen-test/index.cjs +1 -2
- package/dist/cjs/bin/gen-type/bin.cjs +1 -2
- package/dist/cjs/bin/gen-type/index.cjs +1 -2
- package/dist/cjs/extend/api-json-base.cjs +206 -0
- package/dist/cjs/extend/api-json-base.d.cts +15 -0
- package/dist/cjs/extend/api-json-wrap.cjs +257 -0
- package/dist/cjs/extend/{wrap-json.d.cts → api-json-wrap.d.cts} +14 -15
- package/dist/cjs/index.cjs +170 -37
- package/dist/cjs/index.d.cts +6 -4
- package/dist/cjs/interface/action/action.cjs +142 -0
- package/dist/cjs/interface/action/action.d.cts +90 -0
- package/dist/cjs/interface/inst/interface-abstract.cjs +123 -1
- package/dist/cjs/interface/inst/interface-abstract.d.cts +12 -11
- package/dist/cjs/interface/inst/interface.cjs +133 -5
- package/dist/cjs/interface/inst/interface.d.cts +9 -5
- package/dist/cjs/interface/type/interface-type-abstract.d.cts +6 -1
- package/dist/cjs/plugin/urlencoded.cjs +1 -2
- package/dist/cjs/server/server.cjs +1 -2
- package/dist/cjs/server/server.d.cts +2 -1
- package/dist/esm/bin/gen-list/bin.js +1 -1
- package/dist/esm/bin/gen-list/index.js +1 -1
- package/dist/esm/bin/gen-test/bin.js +1 -1
- package/dist/esm/bin/gen-test/index.js +1 -1
- package/dist/esm/bin/gen-type/bin.js +1 -1
- package/dist/esm/bin/gen-type/index.js +1 -1
- package/dist/esm/{chunk-N7VWAPFU.js → chunk-6NX5P6CE.js} +1 -2
- package/dist/esm/{chunk-YYOST4AX.js → chunk-FLDJE3PK.js} +1 -2
- package/dist/esm/{chunk-DQX4L6GK.js → chunk-GAVKGLRL.js} +1 -2
- package/dist/esm/chunk-HOO4TK2L.js +118 -0
- package/dist/esm/chunk-I5QXSZQU.js +21 -0
- package/dist/esm/chunk-ILSTOG4G.js +30 -0
- package/dist/esm/{chunk-X3JVDZYX.js → chunk-JIW3U7SL.js} +14 -19
- package/dist/esm/{chunk-CSZNLNB5.js → chunk-NCSYD5GL.js} +1 -2
- package/dist/esm/chunk-PA2HBZKY.js +16 -0
- package/dist/esm/{chunk-5UUMGDDD.js → chunk-TMFRIHV5.js} +1 -2
- package/dist/esm/extend/api-json-base.d.ts +15 -0
- package/dist/esm/extend/api-json-base.js +10 -0
- package/dist/esm/extend/{wrap-json.d.ts → api-json-wrap.d.ts} +14 -15
- package/dist/esm/extend/api-json-wrap.js +16 -0
- package/dist/esm/index.d.ts +6 -4
- package/dist/esm/index.js +19 -16
- package/dist/esm/interface/action/action.d.ts +90 -0
- package/dist/esm/interface/action/action.js +6 -0
- package/dist/esm/interface/inst/interface-abstract.d.ts +12 -11
- package/dist/esm/interface/inst/interface-abstract.js +2 -1
- package/dist/esm/interface/inst/interface.d.ts +9 -5
- package/dist/esm/interface/inst/interface.js +3 -2
- package/dist/esm/interface/type/interface-type-abstract.d.ts +6 -1
- package/dist/esm/plugin/urlencoded.js +1 -1
- package/dist/esm/server/server.d.ts +2 -1
- package/dist/esm/server/server.js +1 -1
- package/package.json +55 -55
- package/dist/cjs/extend/wrap-json.cjs +0 -128
- package/dist/esm/chunk-N2AO545F.js +0 -7
- package/dist/esm/chunk-TFOAFRUL.js +0 -22
- 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
|
-
|
|
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 {
|
|
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 {
|
|
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
|
|
9
|
-
type
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
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
|
-
|
|
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 '
|
|
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
|
-
|
|
13
|
-
|
|
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 服务器 {
|
|
@@ -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
|
+
};
|