@midwayjs/core 3.0.0-beta.7 → 3.0.1

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 (55) hide show
  1. package/README.md +1 -1
  2. package/dist/baseFramework.d.ts +2 -1
  3. package/dist/baseFramework.js +13 -10
  4. package/dist/common/applicationManager.d.ts +11 -0
  5. package/dist/common/applicationManager.js +70 -0
  6. package/dist/common/dataListener.d.ts +11 -0
  7. package/dist/common/dataListener.js +43 -0
  8. package/dist/common/fileDetector.js +1 -1
  9. package/dist/common/middlewareManager.d.ts +62 -5
  10. package/dist/common/middlewareManager.js +141 -6
  11. package/dist/common/webGenerator.d.ts +3 -14
  12. package/dist/common/webGenerator.js +23 -31
  13. package/dist/common/webRouterCollector.js +7 -3
  14. package/dist/context/container.js +28 -13
  15. package/dist/context/managedResolverFactory.js +12 -5
  16. package/dist/context/requestContainer.js +2 -0
  17. package/dist/definitions/functionDefinition.d.ts +1 -0
  18. package/dist/definitions/functionDefinition.js +1 -0
  19. package/dist/definitions/objectCreator.js +9 -8
  20. package/dist/definitions/objectDefinition.d.ts +1 -0
  21. package/dist/definitions/objectDefinition.js +1 -0
  22. package/dist/error/base.d.ts +22 -3
  23. package/dist/error/base.js +34 -5
  24. package/dist/error/framework.d.ts +27 -2
  25. package/dist/error/framework.js +51 -14
  26. package/dist/error/http.d.ts +146 -41
  27. package/dist/error/http.js +164 -31
  28. package/dist/error/index.d.ts +1 -1
  29. package/dist/error/index.js +4 -1
  30. package/dist/functional/configuration.d.ts +2 -0
  31. package/dist/functional/configuration.js +10 -0
  32. package/dist/index.d.ts +4 -1
  33. package/dist/index.js +7 -1
  34. package/dist/interface.d.ts +51 -29
  35. package/dist/service/aspectService.js +1 -1
  36. package/dist/service/configService.d.ts +3 -1
  37. package/dist/service/configService.js +23 -17
  38. package/dist/service/decoratorService.js +25 -13
  39. package/dist/service/environmentService.d.ts +1 -1
  40. package/dist/service/frameworkService.d.ts +3 -2
  41. package/dist/service/frameworkService.js +17 -12
  42. package/dist/service/lifeCycleService.js +5 -5
  43. package/dist/service/loggerService.d.ts +1 -1
  44. package/dist/service/middlewareService.d.ts +3 -4
  45. package/dist/service/middlewareService.js +12 -25
  46. package/dist/setup.js +13 -5
  47. package/dist/util/extend.d.ts +2 -0
  48. package/dist/util/extend.js +55 -0
  49. package/dist/util/index.d.ts +8 -0
  50. package/dist/util/index.js +38 -1
  51. package/dist/util/webRouterParam.js +24 -4
  52. package/package.json +10 -12
  53. package/CHANGELOG.md +0 -2186
  54. package/dist/error/code.d.ts +0 -60
  55. package/dist/error/code.js +0 -65
package/README.md CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  this is a sub package for midway.
7
7
 
8
- Document: [https://midwayjs.org/midway](https://midwayjs.org/midway)
8
+ Document: [https://midwayjs.org](https://midwayjs.org)
9
9
 
10
10
  ## License
11
11
 
@@ -72,7 +72,7 @@ export declare abstract class BaseFramework<APP extends IMidwayApplication<CTX>,
72
72
  * @deprecated
73
73
  */
74
74
  protected afterContainerReady(options: Partial<IMidwayBootstrapOptions>): Promise<void>;
75
- getMiddleware<R, N>(lastMiddleware?: CommonMiddleware<CTX, R, N>): Promise<MiddlewareRespond<CTX, R, N>>;
75
+ applyMiddleware<R, N>(lastMiddleware?: CommonMiddleware<CTX, R, N>): Promise<MiddlewareRespond<CTX, R, N>>;
76
76
  getLogger(name?: string): ILogger;
77
77
  getCoreLogger(): ILogger;
78
78
  createLogger(name: string, option?: LoggerOptions): ILogger;
@@ -80,6 +80,7 @@ export declare abstract class BaseFramework<APP extends IMidwayApplication<CTX>,
80
80
  getFrameworkName(): string;
81
81
  getDefaultContextLoggerClass(): any;
82
82
  useMiddleware(Middleware: CommonMiddlewareUnion<CTX, ResOrNext, Next>): void;
83
+ getMiddleware(): ContextMiddlewareManager<CTX, ResOrNext, Next>;
83
84
  useFilter(Filter: CommonFilterUnion<CTX, ResOrNext, Next>): void;
84
85
  protected createMiddlewareManager(): ContextMiddlewareManager<CTX, ResOrNext, Next>;
85
86
  protected createFilterManager(): FilterManager<CTX, ResOrNext, Next>;
@@ -21,6 +21,8 @@ const loggerService_1 = require("./service/loggerService");
21
21
  const middlewareManager_1 = require("./common/middlewareManager");
22
22
  const middlewareService_1 = require("./service/middlewareService");
23
23
  const filterManager_1 = require("./common/filterManager");
24
+ const util = require("util");
25
+ const debug = util.debuglog('midway:debug');
24
26
  class BaseFramework {
25
27
  constructor(applicationContext) {
26
28
  this.applicationContext = applicationContext;
@@ -173,13 +175,13 @@ class BaseFramework {
173
175
  return this.getApplicationContext().getAttr(key);
174
176
  },
175
177
  useMiddleware: (middleware) => {
176
- this.middlewareManager.insertLast(middleware);
178
+ return this.useMiddleware(middleware);
177
179
  },
178
180
  getMiddleware: () => {
179
- return this.middlewareManager;
181
+ return this.getMiddleware();
180
182
  },
181
183
  useFilter: (Filter) => {
182
- this.filterManager.useFilter(Filter);
184
+ return this.useFilter(Filter);
183
185
  },
184
186
  };
185
187
  for (const method of whiteList) {
@@ -204,7 +206,7 @@ class BaseFramework {
204
206
  * @deprecated
205
207
  */
206
208
  async afterContainerReady(options) { }
207
- async getMiddleware(lastMiddleware) {
209
+ async applyMiddleware(lastMiddleware) {
208
210
  if (!this.composeMiddleware) {
209
211
  this.middlewareManager.insertFirst((async (ctx, next) => {
210
212
  let returnResult = undefined;
@@ -220,14 +222,12 @@ class BaseFramework {
220
222
  }
221
223
  return returnResult.result;
222
224
  }));
223
- this.composeMiddleware = await this.middlewareService.compose(this.middlewareManager);
225
+ debug(`[core]: Compose middleware = [${this.middlewareManager.getNames()}]`);
226
+ this.composeMiddleware = await this.middlewareService.compose(this.middlewareManager, this.app);
224
227
  await this.filterManager.init(this.applicationContext);
225
228
  }
226
229
  if (lastMiddleware) {
227
- return await this.middlewareService.compose([
228
- this.composeMiddleware,
229
- lastMiddleware,
230
- ]);
230
+ return await this.middlewareService.compose([this.composeMiddleware, lastMiddleware], this.app);
231
231
  }
232
232
  else {
233
233
  return this.composeMiddleware;
@@ -255,8 +255,11 @@ class BaseFramework {
255
255
  useMiddleware(Middleware) {
256
256
  this.middlewareManager.insertLast(Middleware);
257
257
  }
258
+ getMiddleware() {
259
+ return this.middlewareManager;
260
+ }
258
261
  useFilter(Filter) {
259
- this.filterManager.useFilter(Filter);
262
+ return this.filterManager.useFilter(Filter);
260
263
  }
261
264
  createMiddlewareManager() {
262
265
  return new middlewareManager_1.ContextMiddlewareManager();
@@ -0,0 +1,11 @@
1
+ import { IMidwayApplication, IMidwayFramework } from '../interface';
2
+ import { FrameworkType } from '@midwayjs/decorator';
3
+ export declare class MidwayApplicationManager {
4
+ private globalFrameworkMap;
5
+ private globalFrameworkTypeMap;
6
+ addFramework(namespace: any, framework: IMidwayFramework<any, any, any>): void;
7
+ getFramework(namespaceOrFrameworkType: string | FrameworkType): IMidwayFramework<any, any, any, unknown, unknown>;
8
+ getApplication(namespaceOrFrameworkType: string | FrameworkType): IMidwayApplication;
9
+ getApplications(namespaces?: Array<string | FrameworkType>): IMidwayApplication[];
10
+ }
11
+ //# sourceMappingURL=applicationManager.d.ts.map
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.MidwayApplicationManager = void 0;
10
+ const decorator_1 = require("@midwayjs/decorator");
11
+ let MidwayApplicationManager = class MidwayApplicationManager {
12
+ constructor() {
13
+ this.globalFrameworkMap = new Map();
14
+ this.globalFrameworkTypeMap = new WeakMap();
15
+ }
16
+ addFramework(namespace, framework) {
17
+ this.globalFrameworkMap.set(namespace, framework);
18
+ this.globalFrameworkTypeMap.set(framework.getFrameworkType(), framework);
19
+ }
20
+ getFramework(namespaceOrFrameworkType) {
21
+ if (typeof namespaceOrFrameworkType === 'string') {
22
+ if (this.globalFrameworkMap.has(namespaceOrFrameworkType)) {
23
+ return this.globalFrameworkMap.get(namespaceOrFrameworkType);
24
+ }
25
+ }
26
+ else {
27
+ if (this.globalFrameworkTypeMap.has(namespaceOrFrameworkType)) {
28
+ return this.globalFrameworkTypeMap.get(namespaceOrFrameworkType);
29
+ }
30
+ }
31
+ }
32
+ getApplication(namespaceOrFrameworkType) {
33
+ if (typeof namespaceOrFrameworkType === 'string') {
34
+ if (this.globalFrameworkMap.has(namespaceOrFrameworkType)) {
35
+ return this.globalFrameworkMap
36
+ .get(namespaceOrFrameworkType)
37
+ .getApplication();
38
+ }
39
+ }
40
+ else {
41
+ if (this.globalFrameworkTypeMap.has(namespaceOrFrameworkType)) {
42
+ return this.globalFrameworkTypeMap
43
+ .get(namespaceOrFrameworkType)
44
+ .getApplication();
45
+ }
46
+ }
47
+ }
48
+ getApplications(namespaces) {
49
+ if (!namespaces) {
50
+ return Array.from(this.globalFrameworkMap.values()).map(framework => {
51
+ return framework.getApplication();
52
+ });
53
+ }
54
+ else {
55
+ return namespaces
56
+ .map(namespace => {
57
+ return this.getApplication(namespace);
58
+ })
59
+ .filter(app => {
60
+ return !!app;
61
+ });
62
+ }
63
+ }
64
+ };
65
+ MidwayApplicationManager = __decorate([
66
+ (0, decorator_1.Provide)(),
67
+ (0, decorator_1.Scope)(decorator_1.ScopeEnum.Singleton)
68
+ ], MidwayApplicationManager);
69
+ exports.MidwayApplicationManager = MidwayApplicationManager;
70
+ //# sourceMappingURL=applicationManager.js.map
@@ -0,0 +1,11 @@
1
+ export declare abstract class DataListener<T> {
2
+ private innerData;
3
+ protected init(): Promise<void>;
4
+ abstract initData(): T;
5
+ abstract onData(callback: (data: T) => void): any;
6
+ protected setData(data: T): void;
7
+ getData(): T;
8
+ stop(): Promise<void>;
9
+ protected destroyListener(): Promise<void>;
10
+ }
11
+ //# sourceMappingURL=dataListener.d.ts.map
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.DataListener = void 0;
13
+ const decorator_1 = require("@midwayjs/decorator");
14
+ class DataListener {
15
+ async init() {
16
+ this.innerData = await this.initData();
17
+ await this.onData(this.setData.bind(this));
18
+ }
19
+ setData(data) {
20
+ this.innerData = data;
21
+ }
22
+ getData() {
23
+ return this.innerData;
24
+ }
25
+ async stop() {
26
+ await this.destroyListener();
27
+ }
28
+ async destroyListener() { }
29
+ }
30
+ __decorate([
31
+ (0, decorator_1.Init)(),
32
+ __metadata("design:type", Function),
33
+ __metadata("design:paramtypes", []),
34
+ __metadata("design:returntype", Promise)
35
+ ], DataListener.prototype, "init", null);
36
+ __decorate([
37
+ (0, decorator_1.Destroy)(),
38
+ __metadata("design:type", Function),
39
+ __metadata("design:paramtypes", []),
40
+ __metadata("design:returntype", Promise)
41
+ ], DataListener.prototype, "stop", null);
42
+ exports.DataListener = DataListener;
43
+ //# sourceMappingURL=dataListener.js.map
@@ -47,7 +47,7 @@ class DirectoryFileDetector extends AbstractFileDetector {
47
47
  continue;
48
48
  }
49
49
  }
50
- else if ((0, decorator_1.isRegExp)(resolveFilter.pattern)) {
50
+ else if (decorator_1.Types.isRegExp(resolveFilter.pattern)) {
51
51
  if (resolveFilter.pattern.test(file)) {
52
52
  const exports = resolveFilter.ignoreRequire
53
53
  ? undefined
@@ -1,11 +1,68 @@
1
1
  import { CommonMiddleware, CommonMiddlewareUnion, IMidwayContext } from '../interface';
2
2
  export declare class ContextMiddlewareManager<CTX extends IMidwayContext, R, N> extends Array<CommonMiddleware<CTX, R, N>> {
3
+ /**
4
+ * insert a middleware or middleware array to first
5
+ * @param middleware
6
+ */
3
7
  insertFirst(middleware: CommonMiddlewareUnion<CTX, R, N>): void;
4
- insertBefore(middleware: CommonMiddlewareUnion<CTX, R, N>, idxOrBeforeMiddleware: number): any;
5
- insertBefore(middleware: CommonMiddlewareUnion<CTX, R, N>, idxOrBeforeMiddleware: CommonMiddlewareUnion<CTX, R, N>): any;
6
- insertAfter(middleware: CommonMiddlewareUnion<CTX, R, N>, idxOrAfterMiddleware: number): any;
7
- insertAfter(middleware: CommonMiddlewareUnion<CTX, R, N>, idxOrAfterMiddleware: CommonMiddlewareUnion<CTX, R, N>): any;
8
+ /**
9
+ * insert a middleware or middleware array to last
10
+ * @param middleware
11
+ */
8
12
  insertLast(middleware: CommonMiddlewareUnion<CTX, R, N>): void;
9
- private findItemIndex;
13
+ /**
14
+ * insert a middleware or middleware array to after another middleware
15
+ * @param middleware
16
+ * @param idxOrBeforeMiddleware
17
+ */
18
+ insertBefore(middleware: CommonMiddlewareUnion<CTX, R, N>, idxOrBeforeMiddleware: CommonMiddleware<CTX, R, N> | string | number): void;
19
+ /**
20
+ * insert a middleware or middleware array to after another middleware
21
+ * @param middleware
22
+ * @param idxOrAfterMiddleware
23
+ */
24
+ insertAfter(middleware: CommonMiddlewareUnion<CTX, R, N>, idxOrAfterMiddleware: CommonMiddleware<CTX, R, N> | string | number): void;
25
+ /**
26
+ * move a middleware after another middleware
27
+ * @param middlewareOrName
28
+ * @param afterMiddleware
29
+ */
30
+ findAndInsertAfter(middlewareOrName: CommonMiddleware<CTX, R, N> | string, afterMiddleware: CommonMiddleware<CTX, R, N> | string | number): void;
31
+ /**
32
+ * move a middleware before another middleware
33
+ * @param middlewareOrName
34
+ * @param beforeMiddleware
35
+ */
36
+ findAndInsertBefore(middlewareOrName: CommonMiddleware<CTX, R, N> | string, beforeMiddleware: CommonMiddleware<CTX, R, N> | string | number): void;
37
+ /**
38
+ * find middleware and move to first
39
+ * @param middlewareOrName
40
+ */
41
+ findAndInsertFirst(middlewareOrName: CommonMiddleware<CTX, R, N> | string): void;
42
+ /**
43
+ * find middleware and move to last
44
+ * @param middlewareOrName
45
+ */
46
+ findAndInsertLast(middlewareOrName: CommonMiddleware<CTX, R, N> | string): void;
47
+ /**
48
+ * find a middleware and return index
49
+ * @param middlewareOrName
50
+ */
51
+ findItemIndex(middlewareOrName: CommonMiddleware<CTX, R, N> | string | number): number;
52
+ findItem(middlewareOrName: CommonMiddleware<CTX, R, N> | string | number): CommonMiddleware<CTX, R, N>;
53
+ /**
54
+ * get name from middleware
55
+ * @param middleware
56
+ */
57
+ getMiddlewareName(middleware: CommonMiddleware<CTX, R, N>): string;
58
+ /**
59
+ * remove a middleware
60
+ * @param middlewareOrNameOrIdx
61
+ */
62
+ remove(middlewareOrNameOrIdx: CommonMiddleware<CTX, R, N> | string | number): CommonMiddleware<CTX, R, N>;
63
+ /**
64
+ * get middleware name list
65
+ */
66
+ getNames(): string[];
10
67
  }
11
68
  //# sourceMappingURL=middlewareManager.d.ts.map
@@ -2,6 +2,10 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ContextMiddlewareManager = void 0;
4
4
  class ContextMiddlewareManager extends Array {
5
+ /**
6
+ * insert a middleware or middleware array to first
7
+ * @param middleware
8
+ */
5
9
  insertFirst(middleware) {
6
10
  if (Array.isArray(middleware)) {
7
11
  this.unshift(...middleware);
@@ -10,6 +14,23 @@ class ContextMiddlewareManager extends Array {
10
14
  this.unshift(middleware);
11
15
  }
12
16
  }
17
+ /**
18
+ * insert a middleware or middleware array to last
19
+ * @param middleware
20
+ */
21
+ insertLast(middleware) {
22
+ if (Array.isArray(middleware)) {
23
+ this.push(...middleware);
24
+ }
25
+ else {
26
+ this.push(middleware);
27
+ }
28
+ }
29
+ /**
30
+ * insert a middleware or middleware array to after another middleware
31
+ * @param middleware
32
+ * @param idxOrBeforeMiddleware
33
+ */
13
34
  insertBefore(middleware, idxOrBeforeMiddleware) {
14
35
  if (typeof idxOrBeforeMiddleware !== 'number') {
15
36
  idxOrBeforeMiddleware = this.findItemIndex(idxOrBeforeMiddleware);
@@ -21,6 +42,11 @@ class ContextMiddlewareManager extends Array {
21
42
  this.splice(idxOrBeforeMiddleware, 0, middleware);
22
43
  }
23
44
  }
45
+ /**
46
+ * insert a middleware or middleware array to after another middleware
47
+ * @param middleware
48
+ * @param idxOrAfterMiddleware
49
+ */
24
50
  insertAfter(middleware, idxOrAfterMiddleware) {
25
51
  if (typeof idxOrAfterMiddleware !== 'number') {
26
52
  idxOrAfterMiddleware = this.findItemIndex(idxOrAfterMiddleware);
@@ -32,16 +58,125 @@ class ContextMiddlewareManager extends Array {
32
58
  this.splice(idxOrAfterMiddleware + 1, 0, middleware);
33
59
  }
34
60
  }
35
- insertLast(middleware) {
36
- if (Array.isArray(middleware)) {
37
- this.push(...middleware);
61
+ /**
62
+ * move a middleware after another middleware
63
+ * @param middlewareOrName
64
+ * @param afterMiddleware
65
+ */
66
+ findAndInsertAfter(middlewareOrName, afterMiddleware) {
67
+ middlewareOrName = this.findItem(middlewareOrName);
68
+ afterMiddleware = this.findItem(afterMiddleware);
69
+ if (!middlewareOrName ||
70
+ !afterMiddleware ||
71
+ middlewareOrName === afterMiddleware) {
72
+ return;
73
+ }
74
+ if (afterMiddleware) {
75
+ const mw = this.remove(middlewareOrName);
76
+ if (mw) {
77
+ this.insertAfter(mw, afterMiddleware);
78
+ }
79
+ }
80
+ }
81
+ /**
82
+ * move a middleware before another middleware
83
+ * @param middlewareOrName
84
+ * @param beforeMiddleware
85
+ */
86
+ findAndInsertBefore(middlewareOrName, beforeMiddleware) {
87
+ middlewareOrName = this.findItem(middlewareOrName);
88
+ beforeMiddleware = this.findItem(beforeMiddleware);
89
+ if (!middlewareOrName ||
90
+ !beforeMiddleware ||
91
+ middlewareOrName === beforeMiddleware) {
92
+ return;
93
+ }
94
+ if (beforeMiddleware) {
95
+ const mw = this.remove(middlewareOrName);
96
+ if (mw) {
97
+ this.insertBefore(mw, beforeMiddleware);
98
+ }
99
+ }
100
+ }
101
+ /**
102
+ * find middleware and move to first
103
+ * @param middlewareOrName
104
+ */
105
+ findAndInsertFirst(middlewareOrName) {
106
+ const mw = this.remove(middlewareOrName);
107
+ if (mw) {
108
+ this.insertFirst(mw);
109
+ }
110
+ }
111
+ /**
112
+ * find middleware and move to last
113
+ * @param middlewareOrName
114
+ */
115
+ findAndInsertLast(middlewareOrName) {
116
+ const mw = this.remove(middlewareOrName);
117
+ if (mw) {
118
+ this.insertLast(mw);
119
+ }
120
+ }
121
+ /**
122
+ * find a middleware and return index
123
+ * @param middlewareOrName
124
+ */
125
+ findItemIndex(middlewareOrName) {
126
+ if (typeof middlewareOrName === 'number') {
127
+ return middlewareOrName;
128
+ }
129
+ else if (typeof middlewareOrName === 'string') {
130
+ return this.findIndex(item => this.getMiddlewareName(item) === middlewareOrName);
38
131
  }
39
132
  else {
40
- this.push(middleware);
133
+ return this.findIndex(item => item === middlewareOrName);
134
+ }
135
+ }
136
+ findItem(middlewareOrName) {
137
+ if (typeof middlewareOrName === 'number') {
138
+ if (middlewareOrName >= 0 && middlewareOrName <= this.length - 1) {
139
+ return this[middlewareOrName];
140
+ }
141
+ }
142
+ else if (typeof middlewareOrName === 'string') {
143
+ return this.find(item => this.getMiddlewareName(item) === middlewareOrName);
144
+ }
145
+ else {
146
+ return middlewareOrName;
147
+ }
148
+ }
149
+ /**
150
+ * get name from middleware
151
+ * @param middleware
152
+ */
153
+ getMiddlewareName(middleware) {
154
+ var _a, _b;
155
+ return ((_b = (_a = (middleware.getName && middleware.getName())) !== null && _a !== void 0 ? _a : middleware._name) !== null && _b !== void 0 ? _b : middleware.name);
156
+ }
157
+ /**
158
+ * remove a middleware
159
+ * @param middlewareOrNameOrIdx
160
+ */
161
+ remove(middlewareOrNameOrIdx) {
162
+ if (typeof middlewareOrNameOrIdx === 'number' &&
163
+ middlewareOrNameOrIdx !== -1) {
164
+ return this.splice(middlewareOrNameOrIdx, 1)[0];
165
+ }
166
+ else {
167
+ const idx = this.findItemIndex(middlewareOrNameOrIdx);
168
+ if (idx !== -1) {
169
+ return this.splice(idx, 1)[0];
170
+ }
41
171
  }
42
172
  }
43
- findItemIndex(middleware) {
44
- return this.findIndex(item => item === middleware);
173
+ /**
174
+ * get middleware name list
175
+ */
176
+ getNames() {
177
+ return this.map(item => {
178
+ return this.getMiddlewareName(item);
179
+ });
45
180
  }
46
181
  }
47
182
  exports.ContextMiddlewareManager = ContextMiddlewareManager;
@@ -1,19 +1,9 @@
1
- /**
2
- * wrap controller string to middleware function
3
- * @param controllerMapping like FooController.index
4
- * @param routeArgsInfo
5
- * @param routerResponseData
6
- */
7
- import { MidwayFrameworkType } from '@midwayjs/decorator';
8
- import { IMidwayContainer, RouterInfo } from '../index';
9
- import { ILogger } from '@midwayjs/logger';
1
+ import { RouterInfo, IMidwayApplication } from '../index';
10
2
  export declare abstract class WebControllerGenerator<Router extends {
11
3
  use: (...args: any[]) => void;
12
4
  }> {
13
- readonly applicationContext: IMidwayContainer;
14
- readonly frameworkType: MidwayFrameworkType;
15
- readonly logger?: ILogger;
16
- protected constructor(applicationContext: IMidwayContainer, frameworkType: MidwayFrameworkType, logger?: ILogger);
5
+ readonly app: IMidwayApplication;
6
+ protected constructor(app: IMidwayApplication);
17
7
  /**
18
8
  * wrap controller string to middleware function
19
9
  * @param routeInfo
@@ -22,6 +12,5 @@ export declare abstract class WebControllerGenerator<Router extends {
22
12
  loadMidwayController(globalPrefix: string, routerHandler?: (newRouter: Router) => void): Promise<void>;
23
13
  abstract createRouter(routerOptions: any): Router;
24
14
  abstract generateController(routeInfo: RouterInfo): any;
25
- protected handlerWebMiddleware(middlewares: any[], handlerCallback: (middlewareImpl: any) => void): Promise<void>;
26
15
  }
27
16
  //# sourceMappingURL=webGenerator.d.ts.map
@@ -9,11 +9,11 @@ exports.WebControllerGenerator = void 0;
9
9
  */
10
10
  const decorator_1 = require("@midwayjs/decorator");
11
11
  const index_1 = require("../index");
12
+ const util = require("util");
13
+ const debug = util.debuglog('midway:debug');
12
14
  class WebControllerGenerator {
13
- constructor(applicationContext, frameworkType, logger) {
14
- this.applicationContext = applicationContext;
15
- this.frameworkType = frameworkType;
16
- this.logger = logger;
15
+ constructor(app) {
16
+ this.app = app;
17
17
  }
18
18
  /**
19
19
  * wrap controller string to middleware function
@@ -63,29 +63,36 @@ class WebControllerGenerator {
63
63
  });
64
64
  const routerTable = await collector.getRouterTable();
65
65
  const routerList = await collector.getRoutePriorityList();
66
+ const applicationContext = this.app.getApplicationContext();
67
+ const logger = this.app.getCoreLogger();
68
+ const middlewareService = applicationContext.get(index_1.MidwayMiddlewareService);
66
69
  for (const routerInfo of routerList) {
67
70
  // bind controller first
68
- this.applicationContext.bindClass(routerInfo.routerModule);
69
- (_a = this.logger) === null || _a === void 0 ? void 0 : _a.debug(`Load Controller "${routerInfo.controllerId}", prefix=${routerInfo.prefix}`);
71
+ applicationContext.bindClass(routerInfo.routerModule);
72
+ logger.debug(`Load Controller "${routerInfo.controllerId}", prefix=${routerInfo.prefix}`);
73
+ debug(`[core]: Load Controller "${routerInfo.controllerId}", prefix=${routerInfo.prefix}`);
70
74
  // new router
71
75
  const newRouter = this.createRouter({
72
76
  prefix: routerInfo.prefix,
73
77
  ...routerInfo.routerOptions,
74
78
  });
75
79
  // add router middleware
76
- await this.handlerWebMiddleware(routerInfo.middleware, middlewareImpl => {
77
- newRouter.use(middlewareImpl);
78
- });
80
+ routerInfo.middleware = (_a = routerInfo.middleware) !== null && _a !== void 0 ? _a : [];
81
+ if (routerInfo.middleware.length) {
82
+ const routerMiddlewareFn = await middlewareService.compose(routerInfo.middleware, this.app);
83
+ newRouter.use(routerMiddlewareFn);
84
+ }
79
85
  // add route
80
86
  const routes = routerTable.get(routerInfo.prefix);
81
87
  for (const routeInfo of routes) {
82
88
  // get middleware
83
- const middlewares2 = routeInfo.middleware;
84
89
  const methodMiddlewares = [];
85
- await this.handlerWebMiddleware(middlewares2, middlewareImpl => {
86
- methodMiddlewares.push(middlewareImpl);
87
- });
88
- if (this.frameworkType === decorator_1.MidwayFrameworkType.WEB_KOA) {
90
+ routeInfo.middleware = (_b = routeInfo.middleware) !== null && _b !== void 0 ? _b : [];
91
+ if (routeInfo.middleware.length) {
92
+ const routeMiddlewareFn = await middlewareService.compose(routeInfo.middleware, this.app);
93
+ methodMiddlewares.push(routeMiddlewareFn);
94
+ }
95
+ if (this.app.getFrameworkType() === decorator_1.MidwayFrameworkType.WEB_KOA) {
89
96
  if (typeof routeInfo.url === 'string' && /\*$/.test(routeInfo.url)) {
90
97
  routeInfo.url = routeInfo.url.replace('*', '(.*)');
91
98
  }
@@ -96,7 +103,8 @@ class WebControllerGenerator {
96
103
  ...methodMiddlewares,
97
104
  this.generateController(routeInfo),
98
105
  ];
99
- (_b = this.logger) === null || _b === void 0 ? void 0 : _b.debug(`Load Router "${routeInfo.requestMethod.toUpperCase()} ${routeInfo.url}"`);
106
+ logger.debug(`Load Router "${routeInfo.requestMethod.toUpperCase()} ${routeInfo.url}"`);
107
+ debug(`[core]: Load Router "${routeInfo.requestMethod.toUpperCase()} ${routeInfo.url}"`);
100
108
  // apply controller from request context
101
109
  // eslint-disable-next-line prefer-spread
102
110
  newRouter[routeInfo.requestMethod].apply(newRouter, routerArgs);
@@ -104,22 +112,6 @@ class WebControllerGenerator {
104
112
  routerHandler && routerHandler(newRouter);
105
113
  }
106
114
  }
107
- async handlerWebMiddleware(middlewares, handlerCallback) {
108
- if (middlewares && middlewares.length) {
109
- for (const middleware of middlewares) {
110
- if (typeof middleware === 'function') {
111
- // web function middleware
112
- handlerCallback(middleware);
113
- }
114
- else {
115
- const middlewareImpl = await this.applicationContext.getAsync(middleware);
116
- if (middlewareImpl && typeof middlewareImpl.resolve === 'function') {
117
- handlerCallback(middlewareImpl.resolve());
118
- }
119
- }
120
- }
121
- }
122
- }
123
115
  }
124
116
  exports.WebControllerGenerator = WebControllerGenerator;
125
117
  //# sourceMappingURL=webGenerator.js.map
@@ -6,6 +6,7 @@ const util_1 = require("../util");
6
6
  const container_1 = require("../context/container");
7
7
  const fileDetector_1 = require("./fileDetector");
8
8
  const util = require("util");
9
+ const error_1 = require("../error");
9
10
  const debug = util.debuglog('midway:debug');
10
11
  class WebRouterCollector {
11
12
  constructor(baseDir = '', options = {}) {
@@ -57,7 +58,7 @@ class WebRouterCollector {
57
58
  collectRoute(module, functionMeta = false) {
58
59
  var _a;
59
60
  const controllerId = (0, decorator_1.getProviderName)(module);
60
- debug(`[core:webCollector]: Found Controller ${controllerId}.`);
61
+ debug(`[core]: Found Controller ${controllerId}.`);
61
62
  const id = (0, decorator_1.getProviderUUId)(module);
62
63
  const controllerOption = (0, decorator_1.getClassMetadata)(decorator_1.CONTROLLER_KEY, module);
63
64
  let priority;
@@ -70,6 +71,9 @@ class WebRouterCollector {
70
71
  if (controllerIgnoreGlobalPrefix) {
71
72
  prefix = ignorePrefix;
72
73
  }
74
+ if (/\*/.test(prefix)) {
75
+ throw new error_1.MidwayCommonError(`Router prefix ${prefix} can't set string with *`);
76
+ }
73
77
  // set prefix
74
78
  if (!this.routes.has(prefix)) {
75
79
  this.routes.set(prefix, []);
@@ -228,7 +232,7 @@ class WebRouterCollector {
228
232
  return urlMatchList
229
233
  .map(item => {
230
234
  const urlString = item.url.toString();
231
- const weightArr = (0, decorator_1.isRegExp)(item.url)
235
+ const weightArr = decorator_1.Types.isRegExp(item.url)
232
236
  ? urlString.split('\\/')
233
237
  : urlString.split('/');
234
238
  let weight = 0;
@@ -315,7 +319,7 @@ class WebRouterCollector {
315
319
  item.requestMethod === routerInfo.requestMethod);
316
320
  });
317
321
  if (matched && matched.length) {
318
- throw new Error(`Duplicate router "${routerInfo.requestMethod} ${routerInfo.url}" at "${matched[0].handlerName}" and "${routerInfo.handlerName}"`);
322
+ throw new error_1.MidwayDuplicateRouteError(`${routerInfo.requestMethod} ${routerInfo.url}`, `${matched[0].handlerName}`, `${routerInfo.handlerName}`);
319
323
  }
320
324
  prefixList.push(routerInfo);
321
325
  }