@modern-js/bff-core 1.22.2-beta.0 → 1.22.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/CHANGELOG.md +26 -130
  2. package/dist/js/modern/api.js +34 -49
  3. package/dist/js/modern/client/generate-client.js +34 -52
  4. package/dist/js/modern/client/index.js +1 -1
  5. package/dist/js/modern/client/result.js +8 -10
  6. package/dist/js/modern/errors/http.js +14 -8
  7. package/dist/js/modern/index.js +3 -19
  8. package/dist/js/modern/operators/http.js +116 -139
  9. package/dist/js/modern/router/constants.js +13 -31
  10. package/dist/js/modern/router/index.js +131 -68
  11. package/dist/js/modern/router/types.js +1 -0
  12. package/dist/js/modern/router/utils.js +54 -36
  13. package/dist/js/modern/types.js +47 -45
  14. package/dist/js/modern/utils/alias.js +50 -35
  15. package/dist/js/modern/utils/debug.js +2 -5
  16. package/dist/js/modern/utils/index.js +2 -5
  17. package/dist/js/modern/utils/meta.js +4 -8
  18. package/dist/js/modern/utils/storage.js +14 -8
  19. package/dist/js/modern/utils/validate.js +29 -23
  20. package/dist/js/node/api.js +46 -78
  21. package/dist/js/node/client/generate-client.js +55 -85
  22. package/dist/js/node/client/index.js +18 -17
  23. package/dist/js/node/client/result.js +18 -32
  24. package/dist/js/node/errors/http.js +22 -28
  25. package/dist/js/node/index.js +122 -45
  26. package/dist/js/node/operators/http.js +169 -184
  27. package/dist/js/node/router/constants.js +28 -60
  28. package/dist/js/node/router/index.js +201 -112
  29. package/dist/js/node/router/types.js +5 -15
  30. package/dist/js/node/router/utils.js +78 -71
  31. package/dist/js/node/types.js +57 -71
  32. package/dist/js/node/utils/alias.js +73 -65
  33. package/dist/js/node/utils/debug.js +10 -27
  34. package/dist/js/node/utils/index.js +68 -28
  35. package/dist/js/node/utils/meta.js +12 -30
  36. package/dist/js/node/utils/storage.js +24 -36
  37. package/dist/js/node/utils/validate.js +44 -50
  38. package/package.json +40 -12
@@ -1,102 +1,147 @@
1
- var __create = Object.create;
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __getProtoOf = Object.getPrototypeOf;
6
- var __hasOwnProp = Object.prototype.hasOwnProperty;
7
- var __export = (target, all) => {
8
- for (var name in all)
9
- __defProp(target, name, { get: all[name], enumerable: true });
10
- };
11
- var __copyProps = (to, from, except, desc) => {
12
- if (from && typeof from === "object" || typeof from === "function") {
13
- for (let key of __getOwnPropNames(from))
14
- if (!__hasOwnProp.call(to, key) && key !== except)
15
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
- }
17
- return to;
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var _exportNames = {
7
+ ApiRouter: true
18
8
  };
19
- var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
20
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
- mod
23
- ));
24
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
25
- var router_exports = {};
26
- __export(router_exports, {
27
- ApiRouter: () => ApiRouter
9
+ exports.ApiRouter = void 0;
10
+
11
+ var _path = _interopRequireDefault(require("path"));
12
+
13
+ var _utils = require("@modern-js/utils");
14
+
15
+ require("reflect-metadata");
16
+
17
+ var _types = require("../types");
18
+
19
+ var _utils2 = require("../utils");
20
+
21
+ var _constants = require("./constants");
22
+
23
+ Object.keys(_constants).forEach(function (key) {
24
+ if (key === "default" || key === "__esModule") return;
25
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
26
+ if (key in exports && exports[key] === _constants[key]) return;
27
+ Object.defineProperty(exports, key, {
28
+ enumerable: true,
29
+ get: function () {
30
+ return _constants[key];
31
+ }
32
+ });
28
33
  });
29
- module.exports = __toCommonJS(router_exports);
30
- var import_path = __toESM(require("path"));
31
- var import_utils = require("@modern-js/utils");
32
- var import_reflect_metadata = require("reflect-metadata");
33
- var import_types = require("../types");
34
- var import_utils2 = require("../utils");
35
- var import_constants = require("./constants");
36
- var import_utils3 = require("./utils");
37
- __reExport(router_exports, require("./types"), module.exports);
38
- __reExport(router_exports, require("./constants"), module.exports);
34
+
35
+ var _utils3 = require("./utils");
36
+
37
+ var _types2 = require("./types");
38
+
39
+ Object.keys(_types2).forEach(function (key) {
40
+ if (key === "default" || key === "__esModule") return;
41
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
42
+ if (key in exports && exports[key] === _types2[key]) return;
43
+ Object.defineProperty(exports, key, {
44
+ enumerable: true,
45
+ get: function () {
46
+ return _types2[key];
47
+ }
48
+ });
49
+ });
50
+
51
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
52
+
53
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
54
+
39
55
  class ApiRouter {
56
+ // lambdaDir is the dir which equal to the apiDir in function mode, and equal to the api/lambda dir in framework mode
40
57
  constructor({
41
- apiDir,
42
- lambdaDir,
58
+ apiDir: _apiDir,
59
+ lambdaDir: _lambdaDir,
43
60
  prefix
44
61
  }) {
45
- this.apiFiles = [];
46
- this.getExactApiMode = (apiDir) => {
62
+ _defineProperty(this, "apiMode", void 0);
63
+
64
+ _defineProperty(this, "apiDir", void 0);
65
+
66
+ _defineProperty(this, "existLambdaDir", void 0);
67
+
68
+ _defineProperty(this, "lambdaDir", void 0);
69
+
70
+ _defineProperty(this, "prefix", void 0);
71
+
72
+ _defineProperty(this, "apiFiles", []);
73
+
74
+ _defineProperty(this, "getExactApiMode", apiDir => {
47
75
  const exist = this.createExistChecker(apiDir);
48
- const existLambdaDir = exist(import_constants.FRAMEWORK_MODE_LAMBDA_DIR);
49
- const existAppDir = exist(import_constants.FRAMEWORK_MODE_APP_DIR);
50
- const existAppFile = exist("app.ts") || exist("app.js");
76
+ const existLambdaDir = exist(_constants.FRAMEWORK_MODE_LAMBDA_DIR);
77
+ const existAppDir = exist(_constants.FRAMEWORK_MODE_APP_DIR);
78
+ const existAppFile = exist('app.ts') || exist('app.js');
79
+
51
80
  if (existLambdaDir || existAppDir || existAppFile) {
52
- return import_constants.APIMode.FARMEWORK;
81
+ return _constants.APIMode.FARMEWORK;
53
82
  }
54
- return import_constants.APIMode.FUNCTION;
55
- };
56
- this.createExistChecker = (base) => (target) => import_utils.fs.pathExistsSync(import_path.default.resolve(base, target));
57
- this.getExactLambdaDir = (apiDir) => {
83
+
84
+ return _constants.APIMode.FUNCTION;
85
+ });
86
+
87
+ _defineProperty(this, "createExistChecker", base => target => _utils.fs.pathExistsSync(_path.default.resolve(base, target)));
88
+
89
+ _defineProperty(this, "getExactLambdaDir", apiDir => {
58
90
  if (this.lambdaDir) {
59
91
  return this.lambdaDir;
60
92
  }
61
- const lambdaDir = this.apiMode === import_constants.APIMode.FARMEWORK ? import_path.default.join(apiDir, import_constants.FRAMEWORK_MODE_LAMBDA_DIR) : apiDir;
93
+
94
+ const lambdaDir = this.apiMode === _constants.APIMode.FARMEWORK ? _path.default.join(apiDir, _constants.FRAMEWORK_MODE_LAMBDA_DIR) : apiDir;
62
95
  return lambdaDir;
63
- };
64
- this.validateAbsolute(apiDir, "apiDir");
65
- this.validateAbsolute(lambdaDir, "lambdaDir");
96
+ });
97
+
98
+ this.validateAbsolute(_apiDir, 'apiDir');
99
+ this.validateAbsolute(_lambdaDir, 'lambdaDir');
66
100
  this.prefix = this.initPrefix(prefix);
67
- this.apiDir = apiDir;
68
- this.apiMode = this.getExactApiMode(apiDir);
69
- this.lambdaDir = lambdaDir || this.getExactLambdaDir(this.apiDir);
70
- this.existLambdaDir = import_utils.fs.existsSync(this.lambdaDir);
101
+ this.apiDir = _apiDir;
102
+ this.apiMode = this.getExactApiMode(_apiDir);
103
+ this.lambdaDir = _lambdaDir || this.getExactLambdaDir(this.apiDir);
104
+ this.existLambdaDir = _utils.fs.existsSync(this.lambdaDir);
71
105
  }
106
+
72
107
  isExistLambda() {
73
108
  return this.existLambdaDir;
74
109
  }
110
+
75
111
  getApiMode() {
76
112
  return this.apiMode;
77
113
  }
114
+
78
115
  getLambdaDir() {
79
116
  return this.lambdaDir;
80
117
  }
118
+
81
119
  isApiFile(filename) {
82
120
  if (this.existLambdaDir) {
83
121
  return false;
84
122
  }
123
+
85
124
  if (!this.apiFiles.includes(filename)) {
86
125
  return false;
87
126
  }
127
+
88
128
  return true;
89
129
  }
130
+
90
131
  getSingleModuleHandlers(filename) {
91
132
  const moduleInfo = this.getModuleInfo(filename);
133
+
92
134
  if (moduleInfo) {
93
135
  return this.getModuleHandlerInfos(moduleInfo);
94
136
  }
137
+
95
138
  return null;
96
139
  }
140
+
97
141
  getHandlerInfo(filename, originFuncName, handler) {
98
142
  const httpMethod = this.getHttpMethod(originFuncName, handler);
99
143
  const routeName = this.getRouteName(filename, handler);
144
+
100
145
  if (httpMethod && routeName) {
101
146
  return {
102
147
  handler,
@@ -107,110 +152,145 @@ class ApiRouter {
107
152
  routePath: this.getRoutePath(this.prefix, routeName)
108
153
  };
109
154
  }
155
+
110
156
  return null;
111
- }
157
+ } // TODO: 性能提升,开发环境,判断下 lambda 目录修改时间
158
+
159
+
112
160
  getSafeRoutePath(filename, handler) {
113
161
  this.loadApiFiles();
114
162
  this.validateValidApifile(filename);
115
163
  return this.getRouteName(filename, handler);
116
164
  }
165
+
117
166
  getRouteName(filename, handler) {
118
167
  if (handler) {
119
- const trigger = Reflect.getMetadata(import_types.OperatorType.Trigger, handler);
120
- if (trigger && trigger.type === import_types.TriggerType.Http) {
168
+ const trigger = Reflect.getMetadata(_types.OperatorType.Trigger, handler);
169
+
170
+ if (trigger && trigger.type === _types.TriggerType.Http) {
121
171
  if (!trigger.path) {
122
- throw new Error(
123
- `The http trigger ${trigger.name} needs to specify a path`
124
- );
172
+ throw new Error(`The http trigger ${trigger.name} needs to specify a path`);
125
173
  }
174
+
126
175
  return trigger.path;
127
176
  }
128
177
  }
129
- const routePath = (0, import_utils3.getPathFromFilename)(this.lambdaDir, filename);
178
+
179
+ const routePath = (0, _utils3.getPathFromFilename)(this.lambdaDir, filename);
130
180
  return routePath;
131
181
  }
182
+
132
183
  getHttpMethod(originHandlerName, handler) {
133
184
  if (handler) {
134
- const trigger = Reflect.getMetadata(import_types.OperatorType.Trigger, handler);
135
- if (trigger && import_types.httpMethods.includes(trigger.method)) {
185
+ const trigger = Reflect.getMetadata(_types.OperatorType.Trigger, handler);
186
+
187
+ if (trigger && _types.httpMethods.includes(trigger.method)) {
136
188
  return trigger.method;
137
189
  }
138
190
  }
191
+
139
192
  const upperName = originHandlerName.toUpperCase();
193
+
140
194
  switch (upperName) {
141
- case "GET":
142
- return import_types.HttpMethod.Get;
143
- case "POST":
144
- return import_types.HttpMethod.Post;
145
- case "PUT":
146
- return import_types.HttpMethod.Put;
147
- case "DELETE":
148
- case "DEL":
149
- return import_types.HttpMethod.Delete;
150
- case "CONNECT":
151
- return import_types.HttpMethod.Connect;
152
- case "TRACE":
153
- return import_types.HttpMethod.Trace;
154
- case "PATCH":
155
- return import_types.HttpMethod.Patch;
156
- case "OPTION":
157
- return import_types.HttpMethod.Option;
158
- case "DEFAULT": {
159
- return import_types.HttpMethod.Get;
160
- }
195
+ case 'GET':
196
+ return _types.HttpMethod.Get;
197
+
198
+ case 'POST':
199
+ return _types.HttpMethod.Post;
200
+
201
+ case 'PUT':
202
+ return _types.HttpMethod.Put;
203
+
204
+ case 'DELETE':
205
+ case 'DEL':
206
+ return _types.HttpMethod.Delete;
207
+
208
+ case 'CONNECT':
209
+ return _types.HttpMethod.Connect;
210
+
211
+ case 'TRACE':
212
+ return _types.HttpMethod.Trace;
213
+
214
+ case 'PATCH':
215
+ return _types.HttpMethod.Patch;
216
+
217
+ case 'OPTION':
218
+ return _types.HttpMethod.Option;
219
+
220
+ case 'DEFAULT':
221
+ {
222
+ return _types.HttpMethod.Get;
223
+ }
224
+
161
225
  default:
162
- import_utils.logger.warn(
163
- `Only api handlers are allowd to be exported, please remove the function ${originHandlerName} from exports`
164
- );
226
+ _utils.logger.warn(`Only api handlers are allowd to be exported, please remove the function ${originHandlerName} from exports`);
227
+
165
228
  return null;
166
229
  }
167
230
  }
231
+
168
232
  loadApiFiles() {
169
233
  if (!this.existLambdaDir) {
170
234
  return [];
171
- }
172
- const apiFiles = this.apiFiles = (0, import_utils3.getFiles)(this.lambdaDir, import_constants.API_FILE_RULES);
235
+ } // eslint-disable-next-line no-multi-assign
236
+
237
+
238
+ const apiFiles = this.apiFiles = (0, _utils3.getFiles)(this.lambdaDir, _constants.API_FILE_RULES);
173
239
  return apiFiles;
174
240
  }
241
+
175
242
  getApiFiles() {
176
243
  if (!this.existLambdaDir) {
177
244
  return [];
178
245
  }
246
+
179
247
  if (this.apiFiles.length > 0) {
180
248
  return this.apiFiles;
181
249
  }
250
+
182
251
  return this.loadApiFiles();
183
252
  }
253
+
184
254
  getApiHandlers() {
185
255
  const filenames = this.getApiFiles();
186
256
  const moduleInfos = this.getModuleInfos(filenames);
187
257
  const apiHandlers = this.getHandlerInfos(moduleInfos);
188
- (0, import_utils2.debug)("apiHandlers", apiHandlers.length, apiHandlers);
258
+ (0, _utils2.debug)('apiHandlers', apiHandlers.length, apiHandlers);
189
259
  return apiHandlers;
190
260
  }
261
+ /**
262
+ * 如果用户未传入或传入空串,默认为 /api
263
+ * 如果传入 /,则 prefix 为 /
264
+ */
265
+
266
+
191
267
  initPrefix(prefix) {
192
- if (prefix === "/") {
193
- return "";
268
+ if (prefix === '/') {
269
+ return '';
194
270
  }
195
- return prefix || "/api";
271
+
272
+ return prefix || '/api';
196
273
  }
274
+
197
275
  validateAbsolute(filename, paramsName) {
198
- if (typeof filename === "string" && !import_path.default.isAbsolute(filename)) {
276
+ if (typeof filename === 'string' && !_path.default.isAbsolute(filename)) {
199
277
  throw new Error(`The ${paramsName} ${filename} is not a abolute path`);
200
278
  }
201
279
  }
280
+
202
281
  getModuleInfos(filenames) {
203
- return filenames.map((filename) => this.getModuleInfo(filename)).filter((moduleInfo) => Boolean(moduleInfo));
282
+ return filenames.map(filename => this.getModuleInfo(filename)).filter(moduleInfo => Boolean(moduleInfo));
204
283
  }
284
+
205
285
  getModuleInfo(filename) {
206
286
  try {
207
- const module2 = (0, import_utils3.requireHandlerModule)(filename);
287
+ const module = (0, _utils3.requireHandlerModule)(filename);
208
288
  return {
209
289
  filename,
210
- module: module2
290
+ module
211
291
  };
212
292
  } catch (err) {
213
- if (process.env.NODE_ENV === "production") {
293
+ if (process.env.NODE_ENV === 'production') {
214
294
  throw err;
215
295
  } else {
216
296
  console.error(err);
@@ -218,39 +298,48 @@ class ApiRouter {
218
298
  }
219
299
  }
220
300
  }
301
+
221
302
  getHandlerInfos(moduleInfos) {
222
303
  let apiHandlers = [];
223
- moduleInfos.forEach((moduleInfo) => {
304
+ moduleInfos.forEach(moduleInfo => {
224
305
  const handlerInfos = this.getModuleHandlerInfos(moduleInfo);
306
+
225
307
  if (handlerInfos) {
226
308
  apiHandlers = apiHandlers.concat(handlerInfos);
227
309
  }
228
310
  });
229
- const sortedHandlers = (0, import_utils3.sortRoutes)(apiHandlers);
311
+ const sortedHandlers = (0, _utils3.sortRoutes)(apiHandlers);
230
312
  return sortedHandlers;
231
313
  }
314
+
232
315
  getModuleHandlerInfos(moduleInfo) {
233
- const { module: module2, filename } = moduleInfo;
234
- return Object.entries(module2).filter(([, handler]) => typeof handler === "function").map(([key]) => {
235
- const handler = module2[key];
316
+ const {
317
+ module,
318
+ filename
319
+ } = moduleInfo;
320
+ return Object.entries(module).filter(([, handler]) => typeof handler === 'function').map(([key]) => {
321
+ const handler = module[key];
236
322
  const handlerInfo = this.getHandlerInfo(filename, key, handler);
237
323
  return handlerInfo;
238
- }).filter((handlerInfo) => Boolean(handlerInfo));
324
+ }).filter(handlerInfo => Boolean(handlerInfo));
239
325
  }
326
+
240
327
  validateValidApifile(filename) {
241
328
  if (!this.apiFiles.includes(filename)) {
242
329
  throw new Error(`The ${filename} is not a valid api file.`);
243
330
  }
244
331
  }
332
+
245
333
  getRoutePath(prefix, routeName) {
246
- const finalRouteName = routeName === "/" ? "" : routeName;
247
- if (prefix === "" && finalRouteName === "") {
248
- return "/";
334
+ const finalRouteName = routeName === '/' ? '' : routeName;
335
+
336
+ if (prefix === '' && finalRouteName === '') {
337
+ return '/';
249
338
  }
339
+
250
340
  return `${prefix}${finalRouteName}`;
251
341
  }
342
+
252
343
  }
253
- // Annotate the CommonJS export names for ESM import in node:
254
- 0 && (module.exports = {
255
- ApiRouter
256
- });
344
+
345
+ exports.ApiRouter = ApiRouter;
@@ -1,15 +1,5 @@
1
- var __defProp = Object.defineProperty;
2
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
- var __getOwnPropNames = Object.getOwnPropertyNames;
4
- var __hasOwnProp = Object.prototype.hasOwnProperty;
5
- var __copyProps = (to, from, except, desc) => {
6
- if (from && typeof from === "object" || typeof from === "function") {
7
- for (let key of __getOwnPropNames(from))
8
- if (!__hasOwnProp.call(to, key) && key !== except)
9
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
10
- }
11
- return to;
12
- };
13
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
14
- var types_exports = {};
15
- module.exports = __toCommonJS(types_exports);
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
@@ -1,116 +1,123 @@
1
- var __create = Object.create;
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __getProtoOf = Object.getPrototypeOf;
6
- var __hasOwnProp = Object.prototype.hasOwnProperty;
7
- var __export = (target, all) => {
8
- for (var name in all)
9
- __defProp(target, name, { get: all[name], enumerable: true });
10
- };
11
- var __copyProps = (to, from, except, desc) => {
12
- if (from && typeof from === "object" || typeof from === "function") {
13
- for (let key of __getOwnPropNames(from))
14
- if (!__hasOwnProp.call(to, key) && key !== except)
15
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
- }
17
- return to;
18
- };
19
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
21
- mod
22
- ));
23
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
24
- var utils_exports = {};
25
- __export(utils_exports, {
26
- getFiles: () => getFiles,
27
- getPathFromFilename: () => getPathFromFilename,
28
- isHandler: () => isHandler,
29
- requireHandlerModule: () => requireHandlerModule,
30
- sortRoutes: () => sortRoutes
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
31
5
  });
32
- module.exports = __toCommonJS(utils_exports);
33
- var import_path = __toESM(require("path"));
34
- var import_utils = require("@modern-js/utils");
35
- var import_constants = require("./constants");
36
- const getFiles = (lambdaDir, rules) => import_utils.globby.sync(rules, {
6
+ exports.sortRoutes = exports.requireHandlerModule = exports.isHandler = exports.getPathFromFilename = exports.getFiles = void 0;
7
+
8
+ var _path = _interopRequireDefault(require("path"));
9
+
10
+ var _utils = require("@modern-js/utils");
11
+
12
+ var _constants = require("./constants");
13
+
14
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
+
16
+ const getFiles = (lambdaDir, rules) => _utils.globby.sync(rules, {
37
17
  cwd: lambdaDir,
38
18
  gitignore: true
39
- }).map((file) => import_path.default.resolve(lambdaDir, file));
19
+ }).map(file => _path.default.resolve(lambdaDir, file));
20
+
21
+ exports.getFiles = getFiles;
22
+
40
23
  const getPathFromFilename = (baseDir, filename) => {
41
24
  const relativeName = filename.substring(baseDir.length);
42
- const relativePath = relativeName.split(".").slice(0, -1).join(".");
43
- const nameSplit = relativePath.split(import_path.default.sep).map((item) => {
25
+ const relativePath = relativeName.split('.').slice(0, -1).join('.');
26
+ const nameSplit = relativePath.split(_path.default.sep).map(item => {
44
27
  if (item.length > 2) {
45
- if (item.startsWith("[") && item.endsWith("]")) {
28
+ if (item.startsWith('[') && item.endsWith(']')) {
46
29
  return `:${item.substring(1, item.length - 1)}`;
47
30
  }
48
31
  }
32
+
49
33
  return item;
50
34
  });
51
- const name = nameSplit.join("/");
52
- const finalName = name.endsWith(import_constants.INDEX_SUFFIX) ? name.substring(0, name.length - import_constants.INDEX_SUFFIX.length) : name;
35
+ const name = nameSplit.join('/');
36
+ const finalName = name.endsWith(_constants.INDEX_SUFFIX) ? name.substring(0, name.length - _constants.INDEX_SUFFIX.length) : name;
53
37
  return clearRouteName(finalName);
54
38
  };
55
- const clearRouteName = (routeName) => {
39
+
40
+ exports.getPathFromFilename = getPathFromFilename;
41
+
42
+ const clearRouteName = routeName => {
56
43
  let finalRouteName = routeName.trim();
57
- if (!finalRouteName.startsWith("/")) {
44
+
45
+ if (!finalRouteName.startsWith('/')) {
58
46
  finalRouteName = `/${finalRouteName}`;
59
47
  }
60
- if (finalRouteName.length > 1 && finalRouteName.endsWith("/")) {
48
+
49
+ if (finalRouteName.length > 1 && finalRouteName.endsWith('/')) {
61
50
  finalRouteName = finalRouteName.substring(0, finalRouteName.length - 1);
62
51
  }
52
+
63
53
  return finalRouteName;
64
54
  };
65
- const isHandler = (input) => input && typeof input === "function";
66
- const enableRegister = (requireFn) => {
55
+
56
+ const isHandler = input => input && typeof input === 'function';
57
+
58
+ exports.isHandler = isHandler;
59
+
60
+ const enableRegister = requireFn => {
61
+ // esbuild-register 做 unRegister 时,不会删除 register 添加的 require.extensions,导致第二次调用时 require.extensions['.ts'] 是 nodejs 默认 loader
62
+ // 所以这里根据第一次调用时,require.extensions 有没有,来判断是否需要使用 esbuild-register
67
63
  let existTsLoader = false;
68
64
  let firstCall = true;
69
- return (modulePath) => {
65
+ return modulePath => {
70
66
  if (firstCall) {
71
- existTsLoader = Boolean(require.extensions[".ts"]);
67
+ // eslint-disable-next-line node/no-deprecated-api
68
+ existTsLoader = Boolean(require.extensions['.ts']);
72
69
  firstCall = false;
73
70
  }
71
+
74
72
  if (!existTsLoader) {
75
73
  const {
76
74
  register
77
- } = require("esbuild-register/dist/node");
78
- const { unregister } = register({
79
- extensions: [".ts"]
75
+ } = require('esbuild-register/dist/node');
76
+
77
+ const {
78
+ unregister
79
+ } = register({
80
+ extensions: ['.ts']
80
81
  });
81
- const requiredModule2 = requireFn(modulePath);
82
+ const requiredModule = requireFn(modulePath);
82
83
  unregister();
83
- return requiredModule2;
84
+ return requiredModule;
84
85
  }
86
+
85
87
  const requiredModule = requireFn(modulePath);
86
88
  return requiredModule;
87
89
  };
88
90
  };
89
- const isFunction = (input) => input && {}.toString.call(input) === "[object Function]";
90
- const requireHandlerModule = enableRegister((modulePath) => {
91
- const originRequire = process.env.NODE_ENV === "test" ? jest.requireActual : require;
92
- const module2 = originRequire(modulePath);
93
- if (isFunction(module2)) {
94
- return { default: module2 };
91
+
92
+ const isFunction = input => input && {}.toString.call(input) === '[object Function]';
93
+
94
+ const requireHandlerModule = enableRegister(modulePath => {
95
+ // 测试环境不走缓存,因为缓存的 h andler 文件,会被 mockAPI 函数进行 mock,升级 jest28,setupFilesAfterEnv 能做异步操作的话,可解此问题
96
+ const originRequire = process.env.NODE_ENV === 'test' ? jest.requireActual : require;
97
+ const module = originRequire(modulePath);
98
+
99
+ if (isFunction(module)) {
100
+ return {
101
+ default: module
102
+ };
95
103
  }
96
- return module2;
104
+
105
+ return module;
97
106
  });
98
- const routeValue = (routePath) => {
99
- if (routePath.includes(":")) {
107
+ exports.requireHandlerModule = requireHandlerModule;
108
+
109
+ const routeValue = routePath => {
110
+ if (routePath.includes(':')) {
100
111
  return 11;
101
112
  }
113
+
102
114
  return 1;
103
115
  };
104
- const sortRoutes = (apiHandlers) => {
116
+
117
+ const sortRoutes = apiHandlers => {
105
118
  return apiHandlers.sort((handlerA, handlerB) => {
106
119
  return routeValue(handlerA.routeName) - routeValue(handlerB.routeName);
107
120
  });
108
121
  };
109
- // Annotate the CommonJS export names for ESM import in node:
110
- 0 && (module.exports = {
111
- getFiles,
112
- getPathFromFilename,
113
- isHandler,
114
- requireHandlerModule,
115
- sortRoutes
116
- });
122
+
123
+ exports.sortRoutes = sortRoutes;