@modern-js/bff-core 2.4.0 → 2.5.0
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/CHANGELOG.md +17 -0
- package/dist/{js/node → cjs}/api.js +17 -39
- package/dist/{js/node → cjs}/client/generate-client.js +3 -23
- package/dist/{js/node → cjs}/client/index.js +0 -0
- package/dist/{js/node → cjs}/client/result.js +0 -0
- package/dist/{js/node → cjs}/errors/http.js +0 -0
- package/dist/{js/node → cjs}/index.js +0 -0
- package/dist/{js/node → cjs}/operators/http.js +39 -80
- package/dist/{js/node → cjs}/router/constants.js +0 -0
- package/dist/{js/node → cjs}/router/index.js +0 -0
- package/dist/{js/node → cjs}/router/types.js +0 -0
- package/dist/{js/node → cjs}/router/utils.js +0 -0
- package/dist/{js/node → cjs}/types.js +0 -0
- package/dist/{js/node → cjs}/utils/alias.js +0 -0
- package/dist/{js/node → cjs}/utils/debug.js +0 -0
- package/dist/{js/node → cjs}/utils/index.js +0 -0
- package/dist/{js/node → cjs}/utils/meta.js +0 -0
- package/dist/{js/node → cjs}/utils/storage.js +0 -0
- package/dist/{js/node → cjs}/utils/validate.js +0 -0
- package/dist/esm/api.js +47 -0
- package/dist/{js/modern → esm}/client/generate-client.js +3 -23
- package/dist/{js/modern → esm}/client/index.js +0 -0
- package/dist/{js/modern → esm}/client/result.js +0 -0
- package/dist/{js/modern → esm}/errors/http.js +0 -0
- package/dist/{js/modern → esm}/index.js +0 -0
- package/dist/esm/operators/http.js +167 -0
- package/dist/{js/modern → esm}/router/constants.js +0 -0
- package/dist/{js/modern → esm}/router/index.js +0 -0
- package/dist/{js/modern → esm}/router/types.js +0 -0
- package/dist/{js/modern → esm}/router/utils.js +0 -0
- package/dist/{js/modern → esm}/types.js +0 -0
- package/dist/{js/modern → esm}/utils/alias.js +0 -0
- package/dist/{js/modern → esm}/utils/debug.js +0 -0
- package/dist/{js/modern → esm}/utils/index.js +0 -0
- package/dist/{js/modern → esm}/utils/meta.js +0 -0
- package/dist/{js/modern → esm}/utils/storage.js +0 -0
- package/dist/{js/modern → esm}/utils/validate.js +0 -0
- package/package.json +8 -9
- package/dist/js/modern/api.js +0 -69
- package/dist/js/modern/operators/http.js +0 -210
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
# @modern-js/bff-core
|
|
2
2
|
|
|
3
|
+
## 2.5.0
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 89ca6cc: refactor: merge build-config into scripts/build
|
|
8
|
+
|
|
9
|
+
refactor: 把 build-config 合并进 scripts/build
|
|
10
|
+
|
|
11
|
+
- 30614fa: chore: modify package.json entry fields and build config
|
|
12
|
+
chore: 更改 package.json entry 字段以及构建配置
|
|
13
|
+
- Updated dependencies [89ca6cc]
|
|
14
|
+
- Updated dependencies [30614fa]
|
|
15
|
+
- Updated dependencies [1b0ce87]
|
|
16
|
+
- Updated dependencies [11c053b]
|
|
17
|
+
- @modern-js/bff-runtime@2.5.0
|
|
18
|
+
- @modern-js/utils@2.5.0
|
|
19
|
+
|
|
3
20
|
## 2.4.0
|
|
4
21
|
|
|
5
22
|
### Patch Changes
|
|
@@ -21,26 +21,6 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
21
21
|
mod
|
|
22
22
|
));
|
|
23
23
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
24
|
-
var __async = (__this, __arguments, generator) => {
|
|
25
|
-
return new Promise((resolve, reject) => {
|
|
26
|
-
var fulfilled = (value) => {
|
|
27
|
-
try {
|
|
28
|
-
step(generator.next(value));
|
|
29
|
-
} catch (e) {
|
|
30
|
-
reject(e);
|
|
31
|
-
}
|
|
32
|
-
};
|
|
33
|
-
var rejected = (value) => {
|
|
34
|
-
try {
|
|
35
|
-
step(generator.throw(value));
|
|
36
|
-
} catch (e) {
|
|
37
|
-
reject(e);
|
|
38
|
-
}
|
|
39
|
-
};
|
|
40
|
-
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
41
|
-
step((generator = generator.apply(__this, __arguments)).next());
|
|
42
|
-
});
|
|
43
|
-
};
|
|
44
24
|
var api_exports = {};
|
|
45
25
|
__export(api_exports, {
|
|
46
26
|
Api: () => Api
|
|
@@ -68,26 +48,24 @@ function Api(...args) {
|
|
|
68
48
|
}
|
|
69
49
|
const validateHandlers = operators.filter((operator) => operator.validate).map((operator) => operator.validate);
|
|
70
50
|
const pipeHandlers = operators.filter((operator) => operator.execute).map((operator) => operator.execute);
|
|
71
|
-
function runner(inputs) {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
return next();
|
|
87
|
-
}));
|
|
88
|
-
yield (0, import_koa_compose.default)(stack)(executeHelper);
|
|
89
|
-
return executeHelper.result;
|
|
51
|
+
async function runner(inputs) {
|
|
52
|
+
const executeHelper = {
|
|
53
|
+
result: null,
|
|
54
|
+
get inputs() {
|
|
55
|
+
return inputs;
|
|
56
|
+
},
|
|
57
|
+
set inputs(val) {
|
|
58
|
+
inputs = val;
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
const stack = [...validateHandlers, ...pipeHandlers];
|
|
62
|
+
stack.push(async (helper, next) => {
|
|
63
|
+
const res = await handler(helper.inputs);
|
|
64
|
+
helper.result = res;
|
|
65
|
+
return next();
|
|
90
66
|
});
|
|
67
|
+
await (0, import_koa_compose.default)(stack)(executeHelper);
|
|
68
|
+
return executeHelper.result;
|
|
91
69
|
}
|
|
92
70
|
runner[import_utils.HANDLER_WITH_META] = true;
|
|
93
71
|
return runner;
|
|
@@ -21,26 +21,6 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
21
21
|
mod
|
|
22
22
|
));
|
|
23
23
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
24
|
-
var __async = (__this, __arguments, generator) => {
|
|
25
|
-
return new Promise((resolve, reject) => {
|
|
26
|
-
var fulfilled = (value) => {
|
|
27
|
-
try {
|
|
28
|
-
step(generator.next(value));
|
|
29
|
-
} catch (e) {
|
|
30
|
-
reject(e);
|
|
31
|
-
}
|
|
32
|
-
};
|
|
33
|
-
var rejected = (value) => {
|
|
34
|
-
try {
|
|
35
|
-
step(generator.throw(value));
|
|
36
|
-
} catch (e) {
|
|
37
|
-
reject(e);
|
|
38
|
-
}
|
|
39
|
-
};
|
|
40
|
-
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
41
|
-
step((generator = generator.apply(__this, __arguments)).next());
|
|
42
|
-
});
|
|
43
|
-
};
|
|
44
24
|
var generate_client_exports = {};
|
|
45
25
|
__export(generate_client_exports, {
|
|
46
26
|
DEFAULT_CLIENT_REQUEST_CREATOR: () => DEFAULT_CLIENT_REQUEST_CREATOR,
|
|
@@ -51,7 +31,7 @@ var path = __toESM(require("path"));
|
|
|
51
31
|
var import_router = require("../router");
|
|
52
32
|
var import_result = require("./result");
|
|
53
33
|
const DEFAULT_CLIENT_REQUEST_CREATOR = "@modern-js/create-request";
|
|
54
|
-
const generateClient =
|
|
34
|
+
const generateClient = async ({
|
|
55
35
|
resourcePath,
|
|
56
36
|
apiDir,
|
|
57
37
|
prefix,
|
|
@@ -60,7 +40,7 @@ const generateClient = (_0) => __async(void 0, [_0], function* ({
|
|
|
60
40
|
requestCreator,
|
|
61
41
|
fetcher,
|
|
62
42
|
requireResolve = require.resolve
|
|
63
|
-
}) {
|
|
43
|
+
}) => {
|
|
64
44
|
if (!requestCreator) {
|
|
65
45
|
requestCreator = requireResolve(
|
|
66
46
|
`${DEFAULT_CLIENT_REQUEST_CREATOR}${target ? `/${target}` : ""}`
|
|
@@ -101,7 +81,7 @@ ${fetcher ? `import { fetch } from '${fetcher}';
|
|
|
101
81
|
` : ""}`;
|
|
102
82
|
return (0, import_result.Ok)(`${importCode}
|
|
103
83
|
${handlersCode}`);
|
|
104
|
-
}
|
|
84
|
+
};
|
|
105
85
|
// Annotate the CommonJS export names for ESM import in node:
|
|
106
86
|
0 && (module.exports = {
|
|
107
87
|
DEFAULT_CLIENT_REQUEST_CREATOR,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -1,24 +1,7 @@
|
|
|
1
1
|
var __defProp = Object.defineProperty;
|
|
2
|
-
var __defProps = Object.defineProperties;
|
|
3
2
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
5
3
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
7
4
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
-
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
9
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
10
|
-
var __spreadValues = (a, b) => {
|
|
11
|
-
for (var prop in b || (b = {}))
|
|
12
|
-
if (__hasOwnProp.call(b, prop))
|
|
13
|
-
__defNormalProp(a, prop, b[prop]);
|
|
14
|
-
if (__getOwnPropSymbols)
|
|
15
|
-
for (var prop of __getOwnPropSymbols(b)) {
|
|
16
|
-
if (__propIsEnum.call(b, prop))
|
|
17
|
-
__defNormalProp(a, prop, b[prop]);
|
|
18
|
-
}
|
|
19
|
-
return a;
|
|
20
|
-
};
|
|
21
|
-
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
22
5
|
var __export = (target, all) => {
|
|
23
6
|
for (var name in all)
|
|
24
7
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -32,26 +15,6 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
32
15
|
return to;
|
|
33
16
|
};
|
|
34
17
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
35
|
-
var __async = (__this, __arguments, generator) => {
|
|
36
|
-
return new Promise((resolve, reject) => {
|
|
37
|
-
var fulfilled = (value) => {
|
|
38
|
-
try {
|
|
39
|
-
step(generator.next(value));
|
|
40
|
-
} catch (e) {
|
|
41
|
-
reject(e);
|
|
42
|
-
}
|
|
43
|
-
};
|
|
44
|
-
var rejected = (value) => {
|
|
45
|
-
try {
|
|
46
|
-
step(generator.throw(value));
|
|
47
|
-
} catch (e) {
|
|
48
|
-
reject(e);
|
|
49
|
-
}
|
|
50
|
-
};
|
|
51
|
-
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
52
|
-
step((generator = generator.apply(__this, __arguments)).next());
|
|
53
|
-
});
|
|
54
|
-
};
|
|
55
18
|
var http_exports = {};
|
|
56
19
|
__export(http_exports, {
|
|
57
20
|
Connect: () => Connect,
|
|
@@ -75,9 +38,9 @@ __export(http_exports, {
|
|
|
75
38
|
module.exports = __toCommonJS(http_exports);
|
|
76
39
|
var import_types = require("../types");
|
|
77
40
|
var import_http = require("../errors/http");
|
|
78
|
-
const validateInput = (schema, input) =>
|
|
41
|
+
const validateInput = async (schema, input) => {
|
|
79
42
|
try {
|
|
80
|
-
return
|
|
43
|
+
return await schema.parseAsync(input);
|
|
81
44
|
} catch (error) {
|
|
82
45
|
const { z: zod } = require("zod");
|
|
83
46
|
if (error instanceof zod.ZodError) {
|
|
@@ -85,7 +48,7 @@ const validateInput = (schema, input) => __async(void 0, null, function* () {
|
|
|
85
48
|
}
|
|
86
49
|
throw error;
|
|
87
50
|
}
|
|
88
|
-
}
|
|
51
|
+
};
|
|
89
52
|
const createHttpOperator = (method) => {
|
|
90
53
|
return (urlPath) => {
|
|
91
54
|
return {
|
|
@@ -115,16 +78,15 @@ const Data = (schema) => {
|
|
|
115
78
|
metadata({ setMetadata }) {
|
|
116
79
|
setMetadata(import_types.HttpMetadata.Data, schema);
|
|
117
80
|
},
|
|
118
|
-
validate(helper, next) {
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
helper.inputs
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
});
|
|
81
|
+
async validate(helper, next) {
|
|
82
|
+
const {
|
|
83
|
+
inputs: { data }
|
|
84
|
+
} = helper;
|
|
85
|
+
helper.inputs = {
|
|
86
|
+
...helper.inputs,
|
|
87
|
+
data: await validateInput(schema, data)
|
|
88
|
+
};
|
|
89
|
+
return next();
|
|
128
90
|
}
|
|
129
91
|
};
|
|
130
92
|
};
|
|
@@ -134,16 +96,15 @@ const Query = (schema) => {
|
|
|
134
96
|
metadata({ setMetadata }) {
|
|
135
97
|
setMetadata(import_types.HttpMetadata.Query, schema);
|
|
136
98
|
},
|
|
137
|
-
validate(helper, next) {
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
helper.inputs
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
});
|
|
99
|
+
async validate(helper, next) {
|
|
100
|
+
const {
|
|
101
|
+
inputs: { query }
|
|
102
|
+
} = helper;
|
|
103
|
+
helper.inputs = {
|
|
104
|
+
...helper.inputs,
|
|
105
|
+
query: await validateInput(schema, query)
|
|
106
|
+
};
|
|
107
|
+
return next();
|
|
147
108
|
}
|
|
148
109
|
};
|
|
149
110
|
};
|
|
@@ -153,16 +114,15 @@ const Params = (schema) => {
|
|
|
153
114
|
metadata({ setMetadata }) {
|
|
154
115
|
setMetadata(import_types.HttpMetadata.Params, schema);
|
|
155
116
|
},
|
|
156
|
-
validate(helper, next) {
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
helper.inputs
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
});
|
|
117
|
+
async validate(helper, next) {
|
|
118
|
+
const {
|
|
119
|
+
inputs: { params }
|
|
120
|
+
} = helper;
|
|
121
|
+
helper.inputs = {
|
|
122
|
+
...helper.inputs,
|
|
123
|
+
params: await validateInput(schema, params)
|
|
124
|
+
};
|
|
125
|
+
return next();
|
|
166
126
|
}
|
|
167
127
|
};
|
|
168
128
|
};
|
|
@@ -172,16 +132,15 @@ const Headers = (schema) => {
|
|
|
172
132
|
metadata({ setMetadata }) {
|
|
173
133
|
setMetadata(import_types.HttpMetadata.Headers, schema);
|
|
174
134
|
},
|
|
175
|
-
validate(helper, next) {
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
helper.inputs
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
});
|
|
135
|
+
async validate(helper, next) {
|
|
136
|
+
const {
|
|
137
|
+
inputs: { headers }
|
|
138
|
+
} = helper;
|
|
139
|
+
helper.inputs = {
|
|
140
|
+
...helper.inputs,
|
|
141
|
+
headers: await validateInput(schema, headers)
|
|
142
|
+
};
|
|
143
|
+
return next();
|
|
185
144
|
}
|
|
186
145
|
};
|
|
187
146
|
};
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/dist/esm/api.js
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import "reflect-metadata";
|
|
2
|
+
import compose from "koa-compose";
|
|
3
|
+
import { validateFunction, HANDLER_WITH_META } from "./utils";
|
|
4
|
+
function Api(...args) {
|
|
5
|
+
const handler = args.pop();
|
|
6
|
+
validateFunction(handler, "Apihandler");
|
|
7
|
+
const operators = args;
|
|
8
|
+
const metadataHelper = {
|
|
9
|
+
getMetadata(key) {
|
|
10
|
+
return Reflect.getMetadata(key, runner);
|
|
11
|
+
},
|
|
12
|
+
setMetadata(key, value) {
|
|
13
|
+
return Reflect.defineMetadata(key, value, runner);
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
for (const operator of operators) {
|
|
17
|
+
if (operator.metadata) {
|
|
18
|
+
operator.metadata(metadataHelper);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
const validateHandlers = operators.filter((operator) => operator.validate).map((operator) => operator.validate);
|
|
22
|
+
const pipeHandlers = operators.filter((operator) => operator.execute).map((operator) => operator.execute);
|
|
23
|
+
async function runner(inputs) {
|
|
24
|
+
const executeHelper = {
|
|
25
|
+
result: null,
|
|
26
|
+
get inputs() {
|
|
27
|
+
return inputs;
|
|
28
|
+
},
|
|
29
|
+
set inputs(val) {
|
|
30
|
+
inputs = val;
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
const stack = [...validateHandlers, ...pipeHandlers];
|
|
34
|
+
stack.push(async (helper, next) => {
|
|
35
|
+
const res = await handler(helper.inputs);
|
|
36
|
+
helper.result = res;
|
|
37
|
+
return next();
|
|
38
|
+
});
|
|
39
|
+
await compose(stack)(executeHelper);
|
|
40
|
+
return executeHelper.result;
|
|
41
|
+
}
|
|
42
|
+
runner[HANDLER_WITH_META] = true;
|
|
43
|
+
return runner;
|
|
44
|
+
}
|
|
45
|
+
export {
|
|
46
|
+
Api
|
|
47
|
+
};
|
|
@@ -1,28 +1,8 @@
|
|
|
1
|
-
var __async = (__this, __arguments, generator) => {
|
|
2
|
-
return new Promise((resolve, reject) => {
|
|
3
|
-
var fulfilled = (value) => {
|
|
4
|
-
try {
|
|
5
|
-
step(generator.next(value));
|
|
6
|
-
} catch (e) {
|
|
7
|
-
reject(e);
|
|
8
|
-
}
|
|
9
|
-
};
|
|
10
|
-
var rejected = (value) => {
|
|
11
|
-
try {
|
|
12
|
-
step(generator.throw(value));
|
|
13
|
-
} catch (e) {
|
|
14
|
-
reject(e);
|
|
15
|
-
}
|
|
16
|
-
};
|
|
17
|
-
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
18
|
-
step((generator = generator.apply(__this, __arguments)).next());
|
|
19
|
-
});
|
|
20
|
-
};
|
|
21
1
|
import * as path from "path";
|
|
22
2
|
import { ApiRouter } from "../router";
|
|
23
3
|
import { Ok, Err } from "./result";
|
|
24
4
|
const DEFAULT_CLIENT_REQUEST_CREATOR = "@modern-js/create-request";
|
|
25
|
-
const generateClient =
|
|
5
|
+
const generateClient = async ({
|
|
26
6
|
resourcePath,
|
|
27
7
|
apiDir,
|
|
28
8
|
prefix,
|
|
@@ -31,7 +11,7 @@ const generateClient = (_0) => __async(void 0, [_0], function* ({
|
|
|
31
11
|
requestCreator,
|
|
32
12
|
fetcher,
|
|
33
13
|
requireResolve = require.resolve
|
|
34
|
-
}) {
|
|
14
|
+
}) => {
|
|
35
15
|
if (!requestCreator) {
|
|
36
16
|
requestCreator = requireResolve(
|
|
37
17
|
`${DEFAULT_CLIENT_REQUEST_CREATOR}${target ? `/${target}` : ""}`
|
|
@@ -72,7 +52,7 @@ ${fetcher ? `import { fetch } from '${fetcher}';
|
|
|
72
52
|
` : ""}`;
|
|
73
53
|
return Ok(`${importCode}
|
|
74
54
|
${handlersCode}`);
|
|
75
|
-
}
|
|
55
|
+
};
|
|
76
56
|
export {
|
|
77
57
|
DEFAULT_CLIENT_REQUEST_CREATOR,
|
|
78
58
|
generateClient
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import {
|
|
2
|
+
HttpMetadata,
|
|
3
|
+
OperatorType,
|
|
4
|
+
HttpMethod,
|
|
5
|
+
TriggerType,
|
|
6
|
+
ResponseMetaType
|
|
7
|
+
} from "../types";
|
|
8
|
+
import { ValidationError } from "../errors/http";
|
|
9
|
+
const validateInput = async (schema, input) => {
|
|
10
|
+
try {
|
|
11
|
+
return await schema.parseAsync(input);
|
|
12
|
+
} catch (error) {
|
|
13
|
+
const { z: zod } = require("zod");
|
|
14
|
+
if (error instanceof zod.ZodError) {
|
|
15
|
+
throw new ValidationError(400, error.message);
|
|
16
|
+
}
|
|
17
|
+
throw error;
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
const createHttpOperator = (method) => {
|
|
21
|
+
return (urlPath) => {
|
|
22
|
+
return {
|
|
23
|
+
name: method,
|
|
24
|
+
metadata({ setMetadata }) {
|
|
25
|
+
setMetadata(OperatorType.Trigger, {
|
|
26
|
+
type: TriggerType.Http,
|
|
27
|
+
path: urlPath,
|
|
28
|
+
method
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
const Get = createHttpOperator(HttpMethod.Get);
|
|
35
|
+
const Post = createHttpOperator(HttpMethod.Post);
|
|
36
|
+
const Put = createHttpOperator(HttpMethod.Put);
|
|
37
|
+
const Delete = createHttpOperator(HttpMethod.Delete);
|
|
38
|
+
const Connect = createHttpOperator(HttpMethod.Connect);
|
|
39
|
+
const Trace = createHttpOperator(HttpMethod.Trace);
|
|
40
|
+
const Patch = createHttpOperator(HttpMethod.Patch);
|
|
41
|
+
const Option = createHttpOperator(HttpMethod.Option);
|
|
42
|
+
const Head = createHttpOperator(HttpMethod.Head);
|
|
43
|
+
const Data = (schema) => {
|
|
44
|
+
return {
|
|
45
|
+
name: HttpMetadata.Data,
|
|
46
|
+
metadata({ setMetadata }) {
|
|
47
|
+
setMetadata(HttpMetadata.Data, schema);
|
|
48
|
+
},
|
|
49
|
+
async validate(helper, next) {
|
|
50
|
+
const {
|
|
51
|
+
inputs: { data }
|
|
52
|
+
} = helper;
|
|
53
|
+
helper.inputs = {
|
|
54
|
+
...helper.inputs,
|
|
55
|
+
data: await validateInput(schema, data)
|
|
56
|
+
};
|
|
57
|
+
return next();
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
};
|
|
61
|
+
const Query = (schema) => {
|
|
62
|
+
return {
|
|
63
|
+
name: HttpMetadata.Query,
|
|
64
|
+
metadata({ setMetadata }) {
|
|
65
|
+
setMetadata(HttpMetadata.Query, schema);
|
|
66
|
+
},
|
|
67
|
+
async validate(helper, next) {
|
|
68
|
+
const {
|
|
69
|
+
inputs: { query }
|
|
70
|
+
} = helper;
|
|
71
|
+
helper.inputs = {
|
|
72
|
+
...helper.inputs,
|
|
73
|
+
query: await validateInput(schema, query)
|
|
74
|
+
};
|
|
75
|
+
return next();
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
};
|
|
79
|
+
const Params = (schema) => {
|
|
80
|
+
return {
|
|
81
|
+
name: HttpMetadata.Params,
|
|
82
|
+
metadata({ setMetadata }) {
|
|
83
|
+
setMetadata(HttpMetadata.Params, schema);
|
|
84
|
+
},
|
|
85
|
+
async validate(helper, next) {
|
|
86
|
+
const {
|
|
87
|
+
inputs: { params }
|
|
88
|
+
} = helper;
|
|
89
|
+
helper.inputs = {
|
|
90
|
+
...helper.inputs,
|
|
91
|
+
params: await validateInput(schema, params)
|
|
92
|
+
};
|
|
93
|
+
return next();
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
};
|
|
97
|
+
const Headers = (schema) => {
|
|
98
|
+
return {
|
|
99
|
+
name: HttpMetadata.Headers,
|
|
100
|
+
metadata({ setMetadata }) {
|
|
101
|
+
setMetadata(HttpMetadata.Headers, schema);
|
|
102
|
+
},
|
|
103
|
+
async validate(helper, next) {
|
|
104
|
+
const {
|
|
105
|
+
inputs: { headers }
|
|
106
|
+
} = helper;
|
|
107
|
+
helper.inputs = {
|
|
108
|
+
...helper.inputs,
|
|
109
|
+
headers: await validateInput(schema, headers)
|
|
110
|
+
};
|
|
111
|
+
return next();
|
|
112
|
+
}
|
|
113
|
+
};
|
|
114
|
+
};
|
|
115
|
+
const setResponseMeta = (helper, type, value) => {
|
|
116
|
+
const responseMetaData = helper.getMetadata(HttpMetadata.Response) || [];
|
|
117
|
+
helper.setMetadata(HttpMetadata.Response, [
|
|
118
|
+
...responseMetaData,
|
|
119
|
+
{
|
|
120
|
+
type,
|
|
121
|
+
value
|
|
122
|
+
}
|
|
123
|
+
]);
|
|
124
|
+
};
|
|
125
|
+
const HttpCode = (statusCode) => {
|
|
126
|
+
return {
|
|
127
|
+
name: "HttpCode",
|
|
128
|
+
metadata(helper) {
|
|
129
|
+
setResponseMeta(helper, ResponseMetaType.StatusCode, statusCode);
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
};
|
|
133
|
+
const SetHeaders = (headers) => {
|
|
134
|
+
return {
|
|
135
|
+
name: "SetHeaders",
|
|
136
|
+
metadata(helper) {
|
|
137
|
+
setResponseMeta(helper, ResponseMetaType.Headers, headers);
|
|
138
|
+
}
|
|
139
|
+
};
|
|
140
|
+
};
|
|
141
|
+
const Redirect = (url) => {
|
|
142
|
+
return {
|
|
143
|
+
name: "Redirect",
|
|
144
|
+
metadata(helper) {
|
|
145
|
+
setResponseMeta(helper, ResponseMetaType.Redirect, url);
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
};
|
|
149
|
+
export {
|
|
150
|
+
Connect,
|
|
151
|
+
Data,
|
|
152
|
+
Delete,
|
|
153
|
+
Get,
|
|
154
|
+
Head,
|
|
155
|
+
Headers,
|
|
156
|
+
HttpCode,
|
|
157
|
+
Option,
|
|
158
|
+
Params,
|
|
159
|
+
Patch,
|
|
160
|
+
Post,
|
|
161
|
+
Put,
|
|
162
|
+
Query,
|
|
163
|
+
Redirect,
|
|
164
|
+
SetHeaders,
|
|
165
|
+
Trace,
|
|
166
|
+
createHttpOperator
|
|
167
|
+
};
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/package.json
CHANGED
|
@@ -11,17 +11,16 @@
|
|
|
11
11
|
"modern",
|
|
12
12
|
"modern.js"
|
|
13
13
|
],
|
|
14
|
-
"version": "2.
|
|
14
|
+
"version": "2.5.0",
|
|
15
15
|
"jsnext:source": "./src/index.ts",
|
|
16
16
|
"types": "./dist/types/index.d.ts",
|
|
17
|
-
"main": "./dist/
|
|
18
|
-
"module": "./dist/
|
|
19
|
-
"jsnext:modern": "./dist/js/modern/index.js",
|
|
17
|
+
"main": "./dist/cjs/index.js",
|
|
18
|
+
"module": "./dist/esm/index.js",
|
|
20
19
|
"exports": {
|
|
21
20
|
".": {
|
|
22
21
|
"jsnext:source": "./src/index.ts",
|
|
23
22
|
"types": "./dist/types/index.d.ts",
|
|
24
|
-
"default": "./dist/
|
|
23
|
+
"default": "./dist/cjs/index.js"
|
|
25
24
|
}
|
|
26
25
|
},
|
|
27
26
|
"dependencies": {
|
|
@@ -30,8 +29,8 @@
|
|
|
30
29
|
"esbuild-register": "^3.3.3",
|
|
31
30
|
"koa-compose": "^4.1.0",
|
|
32
31
|
"reflect-metadata": "^0.1.13",
|
|
33
|
-
"@modern-js/bff-runtime": "2.
|
|
34
|
-
"@modern-js/utils": "2.
|
|
32
|
+
"@modern-js/bff-runtime": "2.5.0",
|
|
33
|
+
"@modern-js/utils": "2.5.0"
|
|
35
34
|
},
|
|
36
35
|
"devDependencies": {
|
|
37
36
|
"@types/jest": "^27",
|
|
@@ -41,8 +40,8 @@
|
|
|
41
40
|
"type-fest": "2.15.0",
|
|
42
41
|
"typescript": "^4",
|
|
43
42
|
"zod": "^3.17.3",
|
|
44
|
-
"@scripts/
|
|
45
|
-
"@scripts/
|
|
43
|
+
"@scripts/build": "2.5.0",
|
|
44
|
+
"@scripts/jest-config": "2.5.0"
|
|
46
45
|
},
|
|
47
46
|
"peerDependencies": {
|
|
48
47
|
"zod": "^3.17.3"
|
package/dist/js/modern/api.js
DELETED
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
var __async = (__this, __arguments, generator) => {
|
|
2
|
-
return new Promise((resolve, reject) => {
|
|
3
|
-
var fulfilled = (value) => {
|
|
4
|
-
try {
|
|
5
|
-
step(generator.next(value));
|
|
6
|
-
} catch (e) {
|
|
7
|
-
reject(e);
|
|
8
|
-
}
|
|
9
|
-
};
|
|
10
|
-
var rejected = (value) => {
|
|
11
|
-
try {
|
|
12
|
-
step(generator.throw(value));
|
|
13
|
-
} catch (e) {
|
|
14
|
-
reject(e);
|
|
15
|
-
}
|
|
16
|
-
};
|
|
17
|
-
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
18
|
-
step((generator = generator.apply(__this, __arguments)).next());
|
|
19
|
-
});
|
|
20
|
-
};
|
|
21
|
-
import "reflect-metadata";
|
|
22
|
-
import compose from "koa-compose";
|
|
23
|
-
import { validateFunction, HANDLER_WITH_META } from "./utils";
|
|
24
|
-
function Api(...args) {
|
|
25
|
-
const handler = args.pop();
|
|
26
|
-
validateFunction(handler, "Apihandler");
|
|
27
|
-
const operators = args;
|
|
28
|
-
const metadataHelper = {
|
|
29
|
-
getMetadata(key) {
|
|
30
|
-
return Reflect.getMetadata(key, runner);
|
|
31
|
-
},
|
|
32
|
-
setMetadata(key, value) {
|
|
33
|
-
return Reflect.defineMetadata(key, value, runner);
|
|
34
|
-
}
|
|
35
|
-
};
|
|
36
|
-
for (const operator of operators) {
|
|
37
|
-
if (operator.metadata) {
|
|
38
|
-
operator.metadata(metadataHelper);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
const validateHandlers = operators.filter((operator) => operator.validate).map((operator) => operator.validate);
|
|
42
|
-
const pipeHandlers = operators.filter((operator) => operator.execute).map((operator) => operator.execute);
|
|
43
|
-
function runner(inputs) {
|
|
44
|
-
return __async(this, null, function* () {
|
|
45
|
-
const executeHelper = {
|
|
46
|
-
result: null,
|
|
47
|
-
get inputs() {
|
|
48
|
-
return inputs;
|
|
49
|
-
},
|
|
50
|
-
set inputs(val) {
|
|
51
|
-
inputs = val;
|
|
52
|
-
}
|
|
53
|
-
};
|
|
54
|
-
const stack = [...validateHandlers, ...pipeHandlers];
|
|
55
|
-
stack.push((helper, next) => __async(this, null, function* () {
|
|
56
|
-
const res = yield handler(helper.inputs);
|
|
57
|
-
helper.result = res;
|
|
58
|
-
return next();
|
|
59
|
-
}));
|
|
60
|
-
yield compose(stack)(executeHelper);
|
|
61
|
-
return executeHelper.result;
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
runner[HANDLER_WITH_META] = true;
|
|
65
|
-
return runner;
|
|
66
|
-
}
|
|
67
|
-
export {
|
|
68
|
-
Api
|
|
69
|
-
};
|
|
@@ -1,210 +0,0 @@
|
|
|
1
|
-
var __defProp = Object.defineProperty;
|
|
2
|
-
var __defProps = Object.defineProperties;
|
|
3
|
-
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
4
|
-
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
5
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
-
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
7
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
8
|
-
var __spreadValues = (a, b) => {
|
|
9
|
-
for (var prop in b || (b = {}))
|
|
10
|
-
if (__hasOwnProp.call(b, prop))
|
|
11
|
-
__defNormalProp(a, prop, b[prop]);
|
|
12
|
-
if (__getOwnPropSymbols)
|
|
13
|
-
for (var prop of __getOwnPropSymbols(b)) {
|
|
14
|
-
if (__propIsEnum.call(b, prop))
|
|
15
|
-
__defNormalProp(a, prop, b[prop]);
|
|
16
|
-
}
|
|
17
|
-
return a;
|
|
18
|
-
};
|
|
19
|
-
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
20
|
-
var __async = (__this, __arguments, generator) => {
|
|
21
|
-
return new Promise((resolve, reject) => {
|
|
22
|
-
var fulfilled = (value) => {
|
|
23
|
-
try {
|
|
24
|
-
step(generator.next(value));
|
|
25
|
-
} catch (e) {
|
|
26
|
-
reject(e);
|
|
27
|
-
}
|
|
28
|
-
};
|
|
29
|
-
var rejected = (value) => {
|
|
30
|
-
try {
|
|
31
|
-
step(generator.throw(value));
|
|
32
|
-
} catch (e) {
|
|
33
|
-
reject(e);
|
|
34
|
-
}
|
|
35
|
-
};
|
|
36
|
-
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
37
|
-
step((generator = generator.apply(__this, __arguments)).next());
|
|
38
|
-
});
|
|
39
|
-
};
|
|
40
|
-
import {
|
|
41
|
-
HttpMetadata,
|
|
42
|
-
OperatorType,
|
|
43
|
-
HttpMethod,
|
|
44
|
-
TriggerType,
|
|
45
|
-
ResponseMetaType
|
|
46
|
-
} from "../types";
|
|
47
|
-
import { ValidationError } from "../errors/http";
|
|
48
|
-
const validateInput = (schema, input) => __async(void 0, null, function* () {
|
|
49
|
-
try {
|
|
50
|
-
return yield schema.parseAsync(input);
|
|
51
|
-
} catch (error) {
|
|
52
|
-
const { z: zod } = require("zod");
|
|
53
|
-
if (error instanceof zod.ZodError) {
|
|
54
|
-
throw new ValidationError(400, error.message);
|
|
55
|
-
}
|
|
56
|
-
throw error;
|
|
57
|
-
}
|
|
58
|
-
});
|
|
59
|
-
const createHttpOperator = (method) => {
|
|
60
|
-
return (urlPath) => {
|
|
61
|
-
return {
|
|
62
|
-
name: method,
|
|
63
|
-
metadata({ setMetadata }) {
|
|
64
|
-
setMetadata(OperatorType.Trigger, {
|
|
65
|
-
type: TriggerType.Http,
|
|
66
|
-
path: urlPath,
|
|
67
|
-
method
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
};
|
|
71
|
-
};
|
|
72
|
-
};
|
|
73
|
-
const Get = createHttpOperator(HttpMethod.Get);
|
|
74
|
-
const Post = createHttpOperator(HttpMethod.Post);
|
|
75
|
-
const Put = createHttpOperator(HttpMethod.Put);
|
|
76
|
-
const Delete = createHttpOperator(HttpMethod.Delete);
|
|
77
|
-
const Connect = createHttpOperator(HttpMethod.Connect);
|
|
78
|
-
const Trace = createHttpOperator(HttpMethod.Trace);
|
|
79
|
-
const Patch = createHttpOperator(HttpMethod.Patch);
|
|
80
|
-
const Option = createHttpOperator(HttpMethod.Option);
|
|
81
|
-
const Head = createHttpOperator(HttpMethod.Head);
|
|
82
|
-
const Data = (schema) => {
|
|
83
|
-
return {
|
|
84
|
-
name: HttpMetadata.Data,
|
|
85
|
-
metadata({ setMetadata }) {
|
|
86
|
-
setMetadata(HttpMetadata.Data, schema);
|
|
87
|
-
},
|
|
88
|
-
validate(helper, next) {
|
|
89
|
-
return __async(this, null, function* () {
|
|
90
|
-
const {
|
|
91
|
-
inputs: { data }
|
|
92
|
-
} = helper;
|
|
93
|
-
helper.inputs = __spreadProps(__spreadValues({}, helper.inputs), {
|
|
94
|
-
data: yield validateInput(schema, data)
|
|
95
|
-
});
|
|
96
|
-
return next();
|
|
97
|
-
});
|
|
98
|
-
}
|
|
99
|
-
};
|
|
100
|
-
};
|
|
101
|
-
const Query = (schema) => {
|
|
102
|
-
return {
|
|
103
|
-
name: HttpMetadata.Query,
|
|
104
|
-
metadata({ setMetadata }) {
|
|
105
|
-
setMetadata(HttpMetadata.Query, schema);
|
|
106
|
-
},
|
|
107
|
-
validate(helper, next) {
|
|
108
|
-
return __async(this, null, function* () {
|
|
109
|
-
const {
|
|
110
|
-
inputs: { query }
|
|
111
|
-
} = helper;
|
|
112
|
-
helper.inputs = __spreadProps(__spreadValues({}, helper.inputs), {
|
|
113
|
-
query: yield validateInput(schema, query)
|
|
114
|
-
});
|
|
115
|
-
return next();
|
|
116
|
-
});
|
|
117
|
-
}
|
|
118
|
-
};
|
|
119
|
-
};
|
|
120
|
-
const Params = (schema) => {
|
|
121
|
-
return {
|
|
122
|
-
name: HttpMetadata.Params,
|
|
123
|
-
metadata({ setMetadata }) {
|
|
124
|
-
setMetadata(HttpMetadata.Params, schema);
|
|
125
|
-
},
|
|
126
|
-
validate(helper, next) {
|
|
127
|
-
return __async(this, null, function* () {
|
|
128
|
-
const {
|
|
129
|
-
inputs: { params }
|
|
130
|
-
} = helper;
|
|
131
|
-
helper.inputs = __spreadProps(__spreadValues({}, helper.inputs), {
|
|
132
|
-
params: yield validateInput(schema, params)
|
|
133
|
-
});
|
|
134
|
-
return next();
|
|
135
|
-
});
|
|
136
|
-
}
|
|
137
|
-
};
|
|
138
|
-
};
|
|
139
|
-
const Headers = (schema) => {
|
|
140
|
-
return {
|
|
141
|
-
name: HttpMetadata.Headers,
|
|
142
|
-
metadata({ setMetadata }) {
|
|
143
|
-
setMetadata(HttpMetadata.Headers, schema);
|
|
144
|
-
},
|
|
145
|
-
validate(helper, next) {
|
|
146
|
-
return __async(this, null, function* () {
|
|
147
|
-
const {
|
|
148
|
-
inputs: { headers }
|
|
149
|
-
} = helper;
|
|
150
|
-
helper.inputs = __spreadProps(__spreadValues({}, helper.inputs), {
|
|
151
|
-
headers: yield validateInput(schema, headers)
|
|
152
|
-
});
|
|
153
|
-
return next();
|
|
154
|
-
});
|
|
155
|
-
}
|
|
156
|
-
};
|
|
157
|
-
};
|
|
158
|
-
const setResponseMeta = (helper, type, value) => {
|
|
159
|
-
const responseMetaData = helper.getMetadata(HttpMetadata.Response) || [];
|
|
160
|
-
helper.setMetadata(HttpMetadata.Response, [
|
|
161
|
-
...responseMetaData,
|
|
162
|
-
{
|
|
163
|
-
type,
|
|
164
|
-
value
|
|
165
|
-
}
|
|
166
|
-
]);
|
|
167
|
-
};
|
|
168
|
-
const HttpCode = (statusCode) => {
|
|
169
|
-
return {
|
|
170
|
-
name: "HttpCode",
|
|
171
|
-
metadata(helper) {
|
|
172
|
-
setResponseMeta(helper, ResponseMetaType.StatusCode, statusCode);
|
|
173
|
-
}
|
|
174
|
-
};
|
|
175
|
-
};
|
|
176
|
-
const SetHeaders = (headers) => {
|
|
177
|
-
return {
|
|
178
|
-
name: "SetHeaders",
|
|
179
|
-
metadata(helper) {
|
|
180
|
-
setResponseMeta(helper, ResponseMetaType.Headers, headers);
|
|
181
|
-
}
|
|
182
|
-
};
|
|
183
|
-
};
|
|
184
|
-
const Redirect = (url) => {
|
|
185
|
-
return {
|
|
186
|
-
name: "Redirect",
|
|
187
|
-
metadata(helper) {
|
|
188
|
-
setResponseMeta(helper, ResponseMetaType.Redirect, url);
|
|
189
|
-
}
|
|
190
|
-
};
|
|
191
|
-
};
|
|
192
|
-
export {
|
|
193
|
-
Connect,
|
|
194
|
-
Data,
|
|
195
|
-
Delete,
|
|
196
|
-
Get,
|
|
197
|
-
Head,
|
|
198
|
-
Headers,
|
|
199
|
-
HttpCode,
|
|
200
|
-
Option,
|
|
201
|
-
Params,
|
|
202
|
-
Patch,
|
|
203
|
-
Post,
|
|
204
|
-
Put,
|
|
205
|
-
Query,
|
|
206
|
-
Redirect,
|
|
207
|
-
SetHeaders,
|
|
208
|
-
Trace,
|
|
209
|
-
createHttpOperator
|
|
210
|
-
};
|