@modern-js/bff-core 2.69.5 → 3.0.0-alpha.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/dist/cjs/api.js +82 -78
- package/dist/cjs/client/generateClient.js +90 -76
- package/dist/cjs/client/index.js +55 -19
- package/dist/cjs/client/result.js +51 -42
- package/dist/cjs/compatible.js +17 -15
- package/dist/cjs/errors/http.js +43 -34
- package/dist/cjs/index.js +169 -54
- package/dist/cjs/operators/http.js +213 -212
- package/dist/cjs/router/constants.js +63 -57
- package/dist/cjs/router/index.js +271 -291
- package/dist/cjs/router/types.js +17 -15
- package/dist/cjs/router/utils.js +90 -92
- package/dist/cjs/types.js +84 -71
- package/dist/cjs/utils/alias.js +100 -103
- package/dist/cjs/utils/debug.js +34 -26
- package/dist/cjs/utils/index.js +98 -34
- package/dist/cjs/utils/meta.js +45 -38
- package/dist/cjs/utils/storage.js +58 -68
- package/dist/cjs/utils/validate.js +73 -72
- package/dist/esm/api.mjs +44 -0
- package/dist/esm/client/generateClient.mjs +60 -0
- package/dist/esm/client/result.mjs +19 -0
- package/dist/esm/compatible.mjs +0 -0
- package/dist/esm/errors/http.mjs +13 -0
- package/dist/esm/index.mjs +8 -0
- package/dist/esm/operators/http.mjs +135 -0
- package/dist/esm/router/constants.mjs +19 -0
- package/dist/esm/router/index.mjs +186 -0
- package/dist/esm/router/types.mjs +0 -0
- package/dist/esm/router/utils.mjs +42 -0
- package/dist/esm/types.mjs +39 -0
- package/dist/esm/utils/alias.mjs +57 -0
- package/dist/esm/utils/debug.mjs +3 -0
- package/dist/esm/utils/{index.js → index.mjs} +2 -4
- package/dist/esm/utils/meta.mjs +5 -0
- package/dist/esm/utils/storage.mjs +30 -0
- package/dist/esm/utils/validate.mjs +32 -0
- package/dist/esm-node/api.mjs +44 -0
- package/dist/esm-node/client/generateClient.mjs +60 -0
- package/dist/esm-node/client/index.mjs +1 -0
- package/dist/esm-node/client/result.mjs +19 -0
- package/dist/esm-node/errors/http.mjs +13 -0
- package/dist/esm-node/index.mjs +8 -0
- package/dist/esm-node/operators/http.mjs +135 -0
- package/dist/esm-node/router/constants.mjs +19 -0
- package/dist/esm-node/router/index.mjs +186 -0
- package/dist/esm-node/router/utils.mjs +42 -0
- package/dist/esm-node/types.mjs +39 -0
- package/dist/esm-node/utils/alias.mjs +57 -0
- package/dist/esm-node/utils/debug.mjs +3 -0
- package/dist/esm-node/utils/index.mjs +6 -0
- package/dist/esm-node/utils/meta.mjs +5 -0
- package/dist/esm-node/utils/storage.mjs +30 -0
- package/dist/esm-node/utils/validate.mjs +32 -0
- package/dist/types/client/generateClient.d.ts +1 -1
- package/dist/types/router/constants.d.ts +0 -10
- package/dist/types/router/index.d.ts +0 -5
- package/package.json +18 -18
- package/rslib.config.mts +4 -0
- package/dist/esm/api.js +0 -50
- package/dist/esm/client/generateClient.js +0 -60
- package/dist/esm/client/result.js +0 -22
- package/dist/esm/errors/http.js +0 -16
- package/dist/esm/index.js +0 -19
- package/dist/esm/operators/http.js +0 -178
- package/dist/esm/router/constants.js +0 -32
- package/dist/esm/router/index.js +0 -261
- package/dist/esm/router/utils.js +0 -62
- package/dist/esm/types.js +0 -46
- package/dist/esm/utils/alias.js +0 -75
- package/dist/esm/utils/debug.js +0 -5
- package/dist/esm/utils/meta.js +0 -14
- package/dist/esm/utils/storage.js +0 -40
- package/dist/esm/utils/validate.js +0 -45
- /package/dist/esm/client/{index.js → index.mjs} +0 -0
- /package/dist/{esm/compatible.js → esm-node/compatible.mjs} +0 -0
- /package/dist/{esm/router/types.js → esm-node/router/types.mjs} +0 -0
package/dist/cjs/router/index.js
CHANGED
|
@@ -1,298 +1,278 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
27
|
-
mod
|
|
28
|
-
));
|
|
29
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
30
|
-
var router_exports = {};
|
|
31
|
-
__export(router_exports, {
|
|
32
|
-
ApiRouter: () => ApiRouter
|
|
33
|
-
});
|
|
34
|
-
module.exports = __toCommonJS(router_exports);
|
|
35
|
-
var import_path = __toESM(require("path"));
|
|
36
|
-
var import_utils = require("@modern-js/utils");
|
|
37
|
-
var import_reflect_metadata = require("reflect-metadata");
|
|
38
|
-
var import_types = require("../types");
|
|
39
|
-
var import_utils2 = require("../utils");
|
|
40
|
-
var import_constants = require("./constants");
|
|
41
|
-
var import_utils3 = require("./utils");
|
|
42
|
-
__reExport(router_exports, require("./types"), module.exports);
|
|
43
|
-
__reExport(router_exports, require("./constants"), module.exports);
|
|
44
|
-
class ApiRouter {
|
|
45
|
-
isExistLambda() {
|
|
46
|
-
return this.existLambdaDir;
|
|
47
|
-
}
|
|
48
|
-
getApiMode() {
|
|
49
|
-
return this.apiMode;
|
|
50
|
-
}
|
|
51
|
-
getLambdaDir() {
|
|
52
|
-
return this.lambdaDir;
|
|
53
|
-
}
|
|
54
|
-
isApiFile(filename) {
|
|
55
|
-
if (this.apiFiles.includes(filename)) {
|
|
56
|
-
return true;
|
|
57
|
-
}
|
|
58
|
-
return false;
|
|
59
|
-
}
|
|
60
|
-
async getSingleModuleHandlers(filename) {
|
|
61
|
-
const moduleInfo = await this.getModuleInfo(filename);
|
|
62
|
-
if (moduleInfo) {
|
|
63
|
-
return this.getModuleHandlerInfos(moduleInfo);
|
|
2
|
+
var __webpack_modules__ = {
|
|
3
|
+
"../types" (module) {
|
|
4
|
+
module.exports = require("../types.js");
|
|
5
|
+
},
|
|
6
|
+
"../utils" (module) {
|
|
7
|
+
module.exports = require("../utils/index.js");
|
|
8
|
+
},
|
|
9
|
+
"./constants" (module) {
|
|
10
|
+
module.exports = require("./constants.js");
|
|
11
|
+
},
|
|
12
|
+
"./types" (module) {
|
|
13
|
+
module.exports = require("./types.js");
|
|
14
|
+
},
|
|
15
|
+
"./utils?198b" (module) {
|
|
16
|
+
module.exports = require("./utils.js");
|
|
17
|
+
},
|
|
18
|
+
"@modern-js/utils" (module) {
|
|
19
|
+
module.exports = require("@modern-js/utils");
|
|
20
|
+
},
|
|
21
|
+
path (module) {
|
|
22
|
+
module.exports = require("path");
|
|
23
|
+
},
|
|
24
|
+
"reflect-metadata" (module) {
|
|
25
|
+
module.exports = require("reflect-metadata");
|
|
64
26
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
handler,
|
|
73
|
-
name: originFuncName,
|
|
74
|
-
httpMethod,
|
|
75
|
-
routeName,
|
|
76
|
-
filename,
|
|
77
|
-
routePath: this.getRoutePath(this.prefix, routeName)
|
|
27
|
+
};
|
|
28
|
+
var __webpack_module_cache__ = {};
|
|
29
|
+
function __webpack_require__(moduleId) {
|
|
30
|
+
var cachedModule = __webpack_module_cache__[moduleId];
|
|
31
|
+
if (void 0 !== cachedModule) return cachedModule.exports;
|
|
32
|
+
var module = __webpack_module_cache__[moduleId] = {
|
|
33
|
+
exports: {}
|
|
78
34
|
};
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
// TODO: 性能提升,开发环境,判断下 lambda 目录修改时间
|
|
88
|
-
getSafeRoutePath(filename, handler) {
|
|
89
|
-
this.loadApiFiles();
|
|
90
|
-
this.validateValidApifile(filename);
|
|
91
|
-
return this.getRouteName(filename, handler);
|
|
92
|
-
}
|
|
93
|
-
getRouteName(filename, handler) {
|
|
94
|
-
if (handler) {
|
|
95
|
-
const trigger = Reflect.getMetadata(import_types.OperatorType.Trigger, handler);
|
|
96
|
-
if (trigger && trigger.type === import_types.TriggerType.Http) {
|
|
97
|
-
if (!trigger.path) {
|
|
98
|
-
throw new Error(`The http trigger ${trigger.name} needs to specify a path`);
|
|
99
|
-
}
|
|
100
|
-
return trigger.path;
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
let routePath = (0, import_utils3.getPathFromFilename)(this.lambdaDir, filename);
|
|
104
|
-
if (this.httpMethodDecider === "inputParams") {
|
|
105
|
-
if (routePath.endsWith("/")) {
|
|
106
|
-
routePath += `${handler === null || handler === void 0 ? void 0 : handler.name}`;
|
|
107
|
-
} else {
|
|
108
|
-
routePath += `/${handler === null || handler === void 0 ? void 0 : handler.name}`;
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
return routePath;
|
|
112
|
-
}
|
|
113
|
-
getHttpMethod(originHandlerName, handler) {
|
|
114
|
-
if (handler) {
|
|
115
|
-
const trigger = Reflect.getMetadata(import_types.OperatorType.Trigger, handler);
|
|
116
|
-
if (trigger && import_types.httpMethods.includes(trigger.method)) {
|
|
117
|
-
return trigger.method;
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
if (this.httpMethodDecider === "functionName") {
|
|
121
|
-
const upperName = originHandlerName.toUpperCase();
|
|
122
|
-
switch (upperName) {
|
|
123
|
-
case "GET":
|
|
124
|
-
return import_types.HttpMethod.Get;
|
|
125
|
-
case "POST":
|
|
126
|
-
return import_types.HttpMethod.Post;
|
|
127
|
-
case "PUT":
|
|
128
|
-
return import_types.HttpMethod.Put;
|
|
129
|
-
case "DELETE":
|
|
130
|
-
case "DEL":
|
|
131
|
-
return import_types.HttpMethod.Delete;
|
|
132
|
-
case "CONNECT":
|
|
133
|
-
return import_types.HttpMethod.Connect;
|
|
134
|
-
case "TRACE":
|
|
135
|
-
return import_types.HttpMethod.Trace;
|
|
136
|
-
case "PATCH":
|
|
137
|
-
return import_types.HttpMethod.Patch;
|
|
138
|
-
case "OPTIONS":
|
|
139
|
-
return import_types.HttpMethod.Options;
|
|
140
|
-
case "DEFAULT": {
|
|
141
|
-
return import_types.HttpMethod.Get;
|
|
142
|
-
}
|
|
143
|
-
default:
|
|
144
|
-
if (process.env.NODE_ENV !== "test") {
|
|
145
|
-
import_utils.logger.warn(`Only api handlers are allowd to be exported, please remove the function ${originHandlerName} from exports`);
|
|
146
|
-
}
|
|
147
|
-
return null;
|
|
148
|
-
}
|
|
149
|
-
} else {
|
|
150
|
-
if (!handler) {
|
|
151
|
-
return null;
|
|
152
|
-
}
|
|
153
|
-
if (typeof handler === "function" && handler.length > 0) {
|
|
154
|
-
return import_types.HttpMethod.Post;
|
|
155
|
-
}
|
|
156
|
-
return import_types.HttpMethod.Get;
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
getAction(handler) {
|
|
160
|
-
if (handler) {
|
|
161
|
-
const trigger = Reflect.getMetadata(import_types.OperatorType.Trigger, handler);
|
|
162
|
-
if (trigger === null || trigger === void 0 ? void 0 : trigger.action) {
|
|
163
|
-
return trigger.action;
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
loadApiFiles() {
|
|
168
|
-
if (!this.existLambdaDir) {
|
|
169
|
-
return [];
|
|
170
|
-
}
|
|
171
|
-
const apiFiles = this.apiFiles = (0, import_utils3.getFiles)(this.lambdaDir, import_constants.API_FILE_RULES);
|
|
172
|
-
return apiFiles;
|
|
173
|
-
}
|
|
174
|
-
getApiFiles() {
|
|
175
|
-
if (!this.existLambdaDir) {
|
|
176
|
-
return [];
|
|
177
|
-
}
|
|
178
|
-
if (this.apiFiles.length > 0) {
|
|
179
|
-
return this.apiFiles;
|
|
180
|
-
}
|
|
181
|
-
return this.loadApiFiles();
|
|
182
|
-
}
|
|
183
|
-
async getApiHandlers() {
|
|
184
|
-
const filenames = this.getApiFiles();
|
|
185
|
-
const moduleInfos = await this.getModuleInfos(filenames);
|
|
186
|
-
const apiHandlers = this.getHandlerInfos(moduleInfos);
|
|
187
|
-
(0, import_utils2.debug)("apiHandlers", apiHandlers.length, apiHandlers);
|
|
188
|
-
return apiHandlers;
|
|
189
|
-
}
|
|
190
|
-
/**
|
|
191
|
-
* 如果用户未传入或传入空串,默认为 /api
|
|
192
|
-
* 如果传入 /,则 prefix 为 /
|
|
193
|
-
*/
|
|
194
|
-
initPrefix(prefix) {
|
|
195
|
-
if (prefix === "/") {
|
|
196
|
-
return "";
|
|
197
|
-
}
|
|
198
|
-
return prefix || "/api";
|
|
199
|
-
}
|
|
200
|
-
validateAbsolute(filename, paramsName) {
|
|
201
|
-
if (typeof filename === "string" && !import_path.default.isAbsolute(filename)) {
|
|
202
|
-
throw new Error(`The ${paramsName} ${filename} is not a abolute path`);
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
async getModuleInfos(filenames) {
|
|
206
|
-
return Promise.all(filenames.map((filename) => this.getModuleInfo(filename)).filter((moduleInfo) => Boolean(moduleInfo)));
|
|
207
|
-
}
|
|
208
|
-
async getModuleInfo(filename) {
|
|
209
|
-
try {
|
|
210
|
-
const module2 = await (0, import_utils3.requireHandlerModule)(filename);
|
|
211
|
-
return {
|
|
212
|
-
filename,
|
|
213
|
-
module: module2
|
|
214
|
-
};
|
|
215
|
-
} catch (err) {
|
|
216
|
-
if (process.env.NODE_ENV === "production") {
|
|
217
|
-
throw err;
|
|
218
|
-
} else {
|
|
219
|
-
console.error(err);
|
|
220
|
-
return null;
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
getHandlerInfos(moduleInfos) {
|
|
225
|
-
let apiHandlers = [];
|
|
226
|
-
moduleInfos.forEach((moduleInfo) => {
|
|
227
|
-
const handlerInfos = this.getModuleHandlerInfos(moduleInfo);
|
|
228
|
-
if (handlerInfos) {
|
|
229
|
-
apiHandlers = apiHandlers.concat(handlerInfos);
|
|
230
|
-
}
|
|
231
|
-
});
|
|
232
|
-
const sortedHandlers = (0, import_utils3.sortRoutes)(apiHandlers);
|
|
233
|
-
return sortedHandlers;
|
|
234
|
-
}
|
|
235
|
-
getModuleHandlerInfos(moduleInfo) {
|
|
236
|
-
const { module: module2, filename } = moduleInfo;
|
|
237
|
-
const { httpMethodDecider } = this;
|
|
238
|
-
return Object.entries(module2).filter(([, handler]) => typeof handler === "function").map(([key]) => {
|
|
239
|
-
const handler = module2[key];
|
|
240
|
-
if (httpMethodDecider === "inputParams") {
|
|
241
|
-
Object.assign(handler, {
|
|
242
|
-
[import_utils2.INPUT_PARAMS_DECIDER]: true
|
|
35
|
+
__webpack_modules__[moduleId](module, module.exports, __webpack_require__);
|
|
36
|
+
return module.exports;
|
|
37
|
+
}
|
|
38
|
+
(()=>{
|
|
39
|
+
__webpack_require__.n = (module)=>{
|
|
40
|
+
var getter = module && module.__esModule ? ()=>module['default'] : ()=>module;
|
|
41
|
+
__webpack_require__.d(getter, {
|
|
42
|
+
a: getter
|
|
243
43
|
});
|
|
244
|
-
|
|
245
|
-
const handlerInfo = this.getHandlerInfo(filename, key, handler);
|
|
246
|
-
return handlerInfo;
|
|
247
|
-
}).filter((handlerInfo) => Boolean(handlerInfo));
|
|
248
|
-
}
|
|
249
|
-
validateValidApifile(filename) {
|
|
250
|
-
if (!this.apiFiles.includes(filename)) {
|
|
251
|
-
throw new Error(`The ${filename} is not a valid api file.`);
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
getRoutePath(prefix, routeName) {
|
|
255
|
-
const finalRouteName = routeName === "/" ? "" : routeName;
|
|
256
|
-
if (prefix === "" && finalRouteName === "") {
|
|
257
|
-
return "/";
|
|
258
|
-
}
|
|
259
|
-
return `${prefix}${finalRouteName}`;
|
|
260
|
-
}
|
|
261
|
-
constructor({ appDir, apiDir, lambdaDir, prefix, isBuild, httpMethodDecider = "functionName" }) {
|
|
262
|
-
this.apiFiles = [];
|
|
263
|
-
this.getExactApiMode = (apiDir2, lambdaDir2) => {
|
|
264
|
-
const exist = this.createExistChecker(apiDir2);
|
|
265
|
-
const existLambdaDir = lambdaDir2 && import_utils.fs.pathExistsSync(lambdaDir2) || exist(import_constants.FRAMEWORK_MODE_LAMBDA_DIR);
|
|
266
|
-
const existAppDir = exist(import_constants.FRAMEWORK_MODE_APP_DIR);
|
|
267
|
-
const existAppFile = exist("app.ts") || exist("app.js");
|
|
268
|
-
if (existLambdaDir || existAppDir || existAppFile) {
|
|
269
|
-
return import_constants.APIMode.FARMEWORK;
|
|
270
|
-
}
|
|
271
|
-
return import_constants.APIMode.FUNCTION;
|
|
44
|
+
return getter;
|
|
272
45
|
};
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
46
|
+
})();
|
|
47
|
+
(()=>{
|
|
48
|
+
__webpack_require__.d = (exports1, definition)=>{
|
|
49
|
+
for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
50
|
+
enumerable: true,
|
|
51
|
+
get: definition[key]
|
|
52
|
+
});
|
|
279
53
|
};
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
54
|
+
})();
|
|
55
|
+
(()=>{
|
|
56
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
57
|
+
})();
|
|
58
|
+
(()=>{
|
|
59
|
+
__webpack_require__.r = (exports1)=>{
|
|
60
|
+
if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
61
|
+
value: 'Module'
|
|
62
|
+
});
|
|
63
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
64
|
+
value: true
|
|
65
|
+
});
|
|
66
|
+
};
|
|
67
|
+
})();
|
|
68
|
+
var __webpack_exports__ = {};
|
|
69
|
+
(()=>{
|
|
70
|
+
__webpack_require__.r(__webpack_exports__);
|
|
71
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
72
|
+
ApiRouter: ()=>ApiRouter
|
|
73
|
+
});
|
|
74
|
+
var path__rspack_import_0 = __webpack_require__("path");
|
|
75
|
+
var path__rspack_import_0_default = /*#__PURE__*/ __webpack_require__.n(path__rspack_import_0);
|
|
76
|
+
var _modern_js_utils__rspack_import_1 = __webpack_require__("@modern-js/utils");
|
|
77
|
+
__webpack_require__("reflect-metadata");
|
|
78
|
+
var _types__rspack_import_3 = __webpack_require__("../types");
|
|
79
|
+
var _utils__rspack_import_4 = __webpack_require__("../utils");
|
|
80
|
+
var _constants__rspack_import_5 = __webpack_require__("./constants");
|
|
81
|
+
var _utils__rspack_import_6 = __webpack_require__("./utils?198b");
|
|
82
|
+
var _types__rspack_import_7 = __webpack_require__("./types");
|
|
83
|
+
var __rspack_reexport = {};
|
|
84
|
+
for(const __rspack_import_key in _types__rspack_import_7)if ([
|
|
85
|
+
"ApiRouter",
|
|
86
|
+
"default"
|
|
87
|
+
].indexOf(__rspack_import_key) < 0) __rspack_reexport[__rspack_import_key] = ()=>_types__rspack_import_7[__rspack_import_key];
|
|
88
|
+
__webpack_require__.d(__webpack_exports__, __rspack_reexport);
|
|
89
|
+
var __rspack_reexport = {};
|
|
90
|
+
for(const __rspack_import_key in _constants__rspack_import_5)if ([
|
|
91
|
+
"ApiRouter",
|
|
92
|
+
"default"
|
|
93
|
+
].indexOf(__rspack_import_key) < 0) __rspack_reexport[__rspack_import_key] = ()=>_constants__rspack_import_5[__rspack_import_key];
|
|
94
|
+
__webpack_require__.d(__webpack_exports__, __rspack_reexport);
|
|
95
|
+
class ApiRouter {
|
|
96
|
+
isExistLambda() {
|
|
97
|
+
return this.existLambdaDir;
|
|
98
|
+
}
|
|
99
|
+
getLambdaDir() {
|
|
100
|
+
return this.lambdaDir;
|
|
101
|
+
}
|
|
102
|
+
isApiFile(filename) {
|
|
103
|
+
if (this.apiFiles.includes(filename)) return true;
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
async getSingleModuleHandlers(filename) {
|
|
107
|
+
const moduleInfo = await this.getModuleInfo(filename);
|
|
108
|
+
if (moduleInfo) return this.getModuleHandlerInfos(moduleInfo);
|
|
109
|
+
return null;
|
|
110
|
+
}
|
|
111
|
+
getHandlerInfo(filename, originFuncName, handler) {
|
|
112
|
+
const httpMethod = this.getHttpMethod(originFuncName, handler);
|
|
113
|
+
const routeName = this.getRouteName(filename, handler);
|
|
114
|
+
const action = this.getAction(handler);
|
|
115
|
+
const responseObj = {
|
|
116
|
+
handler,
|
|
117
|
+
name: originFuncName,
|
|
118
|
+
httpMethod,
|
|
119
|
+
routeName,
|
|
120
|
+
filename,
|
|
121
|
+
routePath: this.getRoutePath(this.prefix, routeName)
|
|
122
|
+
};
|
|
123
|
+
if (action) responseObj.action = action;
|
|
124
|
+
if (httpMethod && routeName) return responseObj;
|
|
125
|
+
return null;
|
|
126
|
+
}
|
|
127
|
+
getSafeRoutePath(filename, handler) {
|
|
128
|
+
this.loadApiFiles();
|
|
129
|
+
this.validateValidApifile(filename);
|
|
130
|
+
return this.getRouteName(filename, handler);
|
|
131
|
+
}
|
|
132
|
+
getRouteName(filename, handler) {
|
|
133
|
+
if (handler) {
|
|
134
|
+
const trigger = Reflect.getMetadata(_types__rspack_import_3.OperatorType.Trigger, handler);
|
|
135
|
+
if (trigger && trigger.type === _types__rspack_import_3.TriggerType.Http) {
|
|
136
|
+
if (!trigger.path) throw new Error(`The http trigger ${trigger.name} needs to specify a path`);
|
|
137
|
+
return trigger.path;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
let routePath = (0, _utils__rspack_import_6.getPathFromFilename)(this.lambdaDir, filename);
|
|
141
|
+
if ('inputParams' === this.httpMethodDecider) if (routePath.endsWith('/')) routePath += `${handler?.name}`;
|
|
142
|
+
else routePath += `/${handler?.name}`;
|
|
143
|
+
return routePath;
|
|
144
|
+
}
|
|
145
|
+
getHttpMethod(originHandlerName, handler) {
|
|
146
|
+
if (handler) {
|
|
147
|
+
const trigger = Reflect.getMetadata(_types__rspack_import_3.OperatorType.Trigger, handler);
|
|
148
|
+
if (trigger && _types__rspack_import_3.httpMethods.includes(trigger.method)) return trigger.method;
|
|
149
|
+
}
|
|
150
|
+
if ('functionName' === this.httpMethodDecider) {
|
|
151
|
+
const upperName = originHandlerName.toUpperCase();
|
|
152
|
+
switch(upperName){
|
|
153
|
+
case 'GET':
|
|
154
|
+
return _types__rspack_import_3.HttpMethod.Get;
|
|
155
|
+
case 'POST':
|
|
156
|
+
return _types__rspack_import_3.HttpMethod.Post;
|
|
157
|
+
case 'PUT':
|
|
158
|
+
return _types__rspack_import_3.HttpMethod.Put;
|
|
159
|
+
case 'DELETE':
|
|
160
|
+
case 'DEL':
|
|
161
|
+
return _types__rspack_import_3.HttpMethod.Delete;
|
|
162
|
+
case 'CONNECT':
|
|
163
|
+
return _types__rspack_import_3.HttpMethod.Connect;
|
|
164
|
+
case 'TRACE':
|
|
165
|
+
return _types__rspack_import_3.HttpMethod.Trace;
|
|
166
|
+
case 'PATCH':
|
|
167
|
+
return _types__rspack_import_3.HttpMethod.Patch;
|
|
168
|
+
case 'OPTIONS':
|
|
169
|
+
return _types__rspack_import_3.HttpMethod.Options;
|
|
170
|
+
case 'DEFAULT':
|
|
171
|
+
return _types__rspack_import_3.HttpMethod.Get;
|
|
172
|
+
default:
|
|
173
|
+
if ('test' !== process.env.NODE_ENV) _modern_js_utils__rspack_import_1.logger.warn(`Only api handlers are allowd to be exported, please remove the function ${originHandlerName} from exports`);
|
|
174
|
+
return null;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
if (!handler) return null;
|
|
178
|
+
if ('function' == typeof handler && handler.length > 0) return _types__rspack_import_3.HttpMethod.Post;
|
|
179
|
+
return _types__rspack_import_3.HttpMethod.Get;
|
|
180
|
+
}
|
|
181
|
+
getAction(handler) {
|
|
182
|
+
if (handler) {
|
|
183
|
+
const trigger = Reflect.getMetadata(_types__rspack_import_3.OperatorType.Trigger, handler);
|
|
184
|
+
if (trigger?.action) return trigger.action;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
loadApiFiles() {
|
|
188
|
+
if (!this.existLambdaDir) return [];
|
|
189
|
+
const apiFiles = this.apiFiles = (0, _utils__rspack_import_6.getFiles)(this.lambdaDir, _constants__rspack_import_5.API_FILE_RULES);
|
|
190
|
+
return apiFiles;
|
|
191
|
+
}
|
|
192
|
+
getApiFiles() {
|
|
193
|
+
if (!this.existLambdaDir) return [];
|
|
194
|
+
if (this.apiFiles.length > 0) return this.apiFiles;
|
|
195
|
+
return this.loadApiFiles();
|
|
196
|
+
}
|
|
197
|
+
async getApiHandlers() {
|
|
198
|
+
const filenames = this.getApiFiles();
|
|
199
|
+
const moduleInfos = await this.getModuleInfos(filenames);
|
|
200
|
+
const apiHandlers = this.getHandlerInfos(moduleInfos);
|
|
201
|
+
(0, _utils__rspack_import_4.debug)('apiHandlers', apiHandlers.length, apiHandlers);
|
|
202
|
+
return apiHandlers;
|
|
203
|
+
}
|
|
204
|
+
initPrefix(prefix) {
|
|
205
|
+
if ('/' === prefix) return '';
|
|
206
|
+
return prefix || '/api';
|
|
207
|
+
}
|
|
208
|
+
validateAbsolute(filename, paramsName) {
|
|
209
|
+
if ('string' == typeof filename && !path__rspack_import_0_default().isAbsolute(filename)) throw new Error(`The ${paramsName} ${filename} is not a abolute path`);
|
|
210
|
+
}
|
|
211
|
+
async getModuleInfos(filenames) {
|
|
212
|
+
return Promise.all(filenames.map((filename)=>this.getModuleInfo(filename)).filter((moduleInfo)=>Boolean(moduleInfo)));
|
|
213
|
+
}
|
|
214
|
+
async getModuleInfo(filename) {
|
|
215
|
+
try {
|
|
216
|
+
const module = await (0, _utils__rspack_import_6.requireHandlerModule)(filename);
|
|
217
|
+
return {
|
|
218
|
+
filename,
|
|
219
|
+
module
|
|
220
|
+
};
|
|
221
|
+
} catch (err) {
|
|
222
|
+
if ('production' === process.env.NODE_ENV) throw err;
|
|
223
|
+
console.error(err);
|
|
224
|
+
return null;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
getHandlerInfos(moduleInfos) {
|
|
228
|
+
let apiHandlers = [];
|
|
229
|
+
moduleInfos.forEach((moduleInfo)=>{
|
|
230
|
+
const handlerInfos = this.getModuleHandlerInfos(moduleInfo);
|
|
231
|
+
if (handlerInfos) apiHandlers = apiHandlers.concat(handlerInfos);
|
|
232
|
+
});
|
|
233
|
+
const sortedHandlers = (0, _utils__rspack_import_6.sortRoutes)(apiHandlers);
|
|
234
|
+
return sortedHandlers;
|
|
235
|
+
}
|
|
236
|
+
getModuleHandlerInfos(moduleInfo) {
|
|
237
|
+
const { module, filename } = moduleInfo;
|
|
238
|
+
const { httpMethodDecider } = this;
|
|
239
|
+
return Object.entries(module).filter(([, handler])=>'function' == typeof handler).map(([key])=>{
|
|
240
|
+
const handler = module[key];
|
|
241
|
+
if ('inputParams' === httpMethodDecider) Object.assign(handler, {
|
|
242
|
+
[_utils__rspack_import_4.INPUT_PARAMS_DECIDER]: true
|
|
243
|
+
});
|
|
244
|
+
const handlerInfo = this.getHandlerInfo(filename, key, handler);
|
|
245
|
+
return handlerInfo;
|
|
246
|
+
}).filter((handlerInfo)=>Boolean(handlerInfo));
|
|
247
|
+
}
|
|
248
|
+
validateValidApifile(filename) {
|
|
249
|
+
if (!this.apiFiles.includes(filename)) throw new Error(`The ${filename} is not a valid api file.`);
|
|
250
|
+
}
|
|
251
|
+
getRoutePath(prefix, routeName) {
|
|
252
|
+
const finalRouteName = '/' === routeName ? '' : routeName;
|
|
253
|
+
if ('' === prefix && '' === finalRouteName) return '/';
|
|
254
|
+
return `${prefix}${finalRouteName}`;
|
|
255
|
+
}
|
|
256
|
+
constructor({ appDir, apiDir, lambdaDir, prefix, isBuild, httpMethodDecider = 'functionName' }){
|
|
257
|
+
this.apiFiles = [];
|
|
258
|
+
this.getExactLambdaDir = (apiDir, originLambdaDir)=>originLambdaDir || path__rspack_import_0_default().join(apiDir, _constants__rspack_import_5.FRAMEWORK_MODE_LAMBDA_DIR);
|
|
259
|
+
this.validateAbsolute(apiDir, 'apiDir');
|
|
260
|
+
this.validateAbsolute(lambdaDir, 'lambdaDir');
|
|
261
|
+
this.prefix = this.initPrefix(prefix);
|
|
262
|
+
this.appDir = appDir;
|
|
263
|
+
this.apiDir = apiDir;
|
|
264
|
+
this.httpMethodDecider = httpMethodDecider;
|
|
265
|
+
this.isBuild = isBuild;
|
|
266
|
+
this.lambdaDir = this.getExactLambdaDir(this.apiDir, lambdaDir);
|
|
267
|
+
this.existLambdaDir = _modern_js_utils__rspack_import_1.fs.existsSync(this.lambdaDir);
|
|
268
|
+
(0, _utils__rspack_import_4.debug)("apiDir:", this.apiDir, "lambdaDir:", this.lambdaDir);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
})();
|
|
272
|
+
exports.ApiRouter = __webpack_exports__.ApiRouter;
|
|
273
|
+
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
274
|
+
"ApiRouter"
|
|
275
|
+
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
276
|
+
Object.defineProperty(exports, '__esModule', {
|
|
277
|
+
value: true
|
|
298
278
|
});
|
package/dist/cjs/router/types.js
CHANGED
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
var
|
|
16
|
-
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.r = (exports1)=>{
|
|
5
|
+
if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
6
|
+
value: 'Module'
|
|
7
|
+
});
|
|
8
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
9
|
+
value: true
|
|
10
|
+
});
|
|
11
|
+
};
|
|
12
|
+
})();
|
|
13
|
+
var __webpack_exports__ = {};
|
|
14
|
+
__webpack_require__.r(__webpack_exports__);
|
|
15
|
+
for(var __rspack_i in __webpack_exports__)exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
16
|
+
Object.defineProperty(exports, '__esModule', {
|
|
17
|
+
value: true
|
|
18
|
+
});
|