@eggjs/tegg-controller-plugin 3.62.0 → 4.0.0-beta.10
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/README.md +15 -126
- package/dist/app/middleware/tegg_root_proto.d.ts +3 -0
- package/dist/app/middleware/tegg_root_proto.js +8 -0
- package/dist/app.d.ts +23 -0
- package/dist/app.js +76 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +2 -0
- package/{lib → dist/lib}/AppLoadUnitControllerHook.d.ts +4 -4
- package/dist/lib/AppLoadUnitControllerHook.js +29 -0
- package/{lib → dist/lib}/ControllerLoadUnit.d.ts +2 -2
- package/dist/lib/ControllerLoadUnit.js +72 -0
- package/{lib → dist/lib}/ControllerLoadUnitHandler.d.ts +4 -4
- package/dist/lib/ControllerLoadUnitHandler.js +29 -0
- package/{lib → dist/lib}/ControllerLoadUnitInstance.d.ts +3 -3
- package/dist/lib/ControllerLoadUnitInstance.js +36 -0
- package/{lib → dist/lib}/ControllerMetadataManager.d.ts +1 -1
- package/dist/lib/ControllerMetadataManager.js +27 -0
- package/{lib → dist/lib}/ControllerRegister.d.ts +2 -2
- package/dist/lib/ControllerRegister.js +3 -0
- package/{lib → dist/lib}/ControllerRegisterFactory.d.ts +4 -4
- package/dist/lib/ControllerRegisterFactory.js +22 -0
- package/dist/lib/EggControllerLoader.d.ts +7 -0
- package/dist/lib/EggControllerLoader.js +31 -0
- package/{lib → dist/lib}/EggControllerPrototypeHook.d.ts +2 -2
- package/dist/lib/EggControllerPrototypeHook.js +11 -0
- package/{lib → dist/lib}/RootProtoManager.d.ts +2 -2
- package/dist/lib/RootProtoManager.js +34 -0
- package/dist/lib/errors.js +12 -0
- package/dist/lib/impl/http/Acl.d.ts +2 -0
- package/dist/lib/impl/http/Acl.js +33 -0
- package/{lib → dist/lib}/impl/http/HTTPControllerRegister.d.ts +4 -4
- package/dist/lib/impl/http/HTTPControllerRegister.js +64 -0
- package/{lib → dist/lib}/impl/http/HTTPMethodRegister.d.ts +2 -2
- package/dist/lib/impl/http/HTTPMethodRegister.js +165 -0
- package/dist/lib/impl/http/Req.js +13 -0
- package/dist/types.d.ts +2 -0
- package/dist/types.js +3 -0
- package/package.json +60 -50
- package/app/middleware/mcp_body_middleware.d.ts +0 -3
- package/app/middleware/mcp_body_middleware.js +0 -48
- package/app/middleware/tegg_root_proto.d.ts +0 -3
- package/app/middleware/tegg_root_proto.js +0 -11
- package/app.d.ts +0 -15
- package/app.js +0 -143
- package/config/config.default.d.ts +0 -11
- package/config/config.default.js +0 -16
- package/lib/AppLoadUnitControllerHook.js +0 -28
- package/lib/ControllerLoadUnit.js +0 -71
- package/lib/ControllerLoadUnitHandler.js +0 -31
- package/lib/ControllerLoadUnitInstance.js +0 -34
- package/lib/ControllerMetadataManager.js +0 -30
- package/lib/ControllerRegister.js +0 -3
- package/lib/ControllerRegisterFactory.js +0 -21
- package/lib/EggControllerLoader.d.ts +0 -6
- package/lib/EggControllerLoader.js +0 -37
- package/lib/EggControllerPrototypeHook.js +0 -14
- package/lib/RootProtoManager.js +0 -38
- package/lib/errors.js +0 -16
- package/lib/impl/http/Acl.d.ts +0 -2
- package/lib/impl/http/Acl.js +0 -34
- package/lib/impl/http/HTTPControllerRegister.js +0 -62
- package/lib/impl/http/HTTPMethodRegister.js +0 -173
- package/lib/impl/http/Req.js +0 -17
- package/lib/impl/mcp/MCPConfig.d.ts +0 -32
- package/lib/impl/mcp/MCPConfig.js +0 -107
- package/lib/impl/mcp/MCPControllerRegister.d.ts +0 -67
- package/lib/impl/mcp/MCPControllerRegister.js +0 -541
- package/lib/impl/mcp/MCPServerHelper.d.ts +0 -17
- package/lib/impl/mcp/MCPServerHelper.js +0 -122
- package/typings/index.d.ts +0 -17
- /package/{lib → dist/lib}/errors.d.ts +0 -0
- /package/{lib → dist/lib}/impl/http/Req.d.ts +0 -0
package/README.md
CHANGED
|
@@ -1,16 +1,28 @@
|
|
|
1
1
|
# @eggjs/tegg-controller-plugin
|
|
2
2
|
|
|
3
|
+
[![NPM version][npm-image]][npm-url]
|
|
4
|
+
[![Known Vulnerabilities][snyk-image]][snyk-url]
|
|
5
|
+
[![npm download][download-image]][download-url]
|
|
6
|
+
[](https://nodejs.org/en/download/)
|
|
7
|
+
|
|
8
|
+
[npm-image]: https://img.shields.io/npm/v/@eggjs/tegg-controller-plugin.svg?style=flat-square
|
|
9
|
+
[npm-url]: https://npmjs.org/package/@eggjs/tegg-controller-plugin
|
|
10
|
+
[snyk-image]: https://snyk.io/test/npm/@eggjs/tegg-controller-plugin/badge.svg?style=flat-square
|
|
11
|
+
[snyk-url]: https://snyk.io/test/npm/@eggjs/tegg-controller-plugin
|
|
12
|
+
[download-image]: https://img.shields.io/npm/dm/@eggjs/tegg-controller-plugin.svg?style=flat-square
|
|
13
|
+
[download-url]: https://npmjs.org/package/@eggjs/tegg-controller-plugin
|
|
14
|
+
|
|
3
15
|
使用注解的方式来开发 egg 中的 Controller
|
|
4
16
|
|
|
5
17
|
## Install
|
|
6
18
|
|
|
7
19
|
```shell
|
|
8
20
|
# tegg 注解
|
|
9
|
-
npm i --save @eggjs/tegg
|
|
21
|
+
npm i --save @eggjs/tegg@beta
|
|
10
22
|
# tegg 插件
|
|
11
|
-
npm i --save @eggjs/tegg-plugin
|
|
23
|
+
npm i --save @eggjs/tegg-plugin@beta
|
|
12
24
|
# tegg controller 插件
|
|
13
|
-
npm i --save @eggjs/tegg-controller-plugin
|
|
25
|
+
npm i --save @eggjs/tegg-controller-plugin@beta
|
|
14
26
|
```
|
|
15
27
|
|
|
16
28
|
## Prepare
|
|
@@ -211,126 +223,3 @@ export class FooController {
|
|
|
211
223
|
}
|
|
212
224
|
}
|
|
213
225
|
```
|
|
214
|
-
|
|
215
|
-
### MCP 注解
|
|
216
|
-
|
|
217
|
-
#### MCPController/MCPPrompt/MCPTool/MCPResource
|
|
218
|
-
|
|
219
|
-
`@MCPController` 注解用来声明当前类是一个 MCP controller。
|
|
220
|
-
通过使用装饰器 `@MCPPrompt` `@MCPTool` `@MCPResource` 来声明对应的 MCP 类型。
|
|
221
|
-
使用 `@ToolArgsSchema` `@PromptArgsSchema` `@Extra` 来 schema 和 extra。
|
|
222
|
-
|
|
223
|
-
```ts
|
|
224
|
-
import {
|
|
225
|
-
MCPController,
|
|
226
|
-
PromptArgs,
|
|
227
|
-
ToolArgs,
|
|
228
|
-
MCPPromptResponse,
|
|
229
|
-
MCPToolResponse,
|
|
230
|
-
MCPResourceResponse,
|
|
231
|
-
MCPPrompt,
|
|
232
|
-
MCPTool,
|
|
233
|
-
MCPResource,
|
|
234
|
-
PromptArgsSchema,
|
|
235
|
-
Logger,
|
|
236
|
-
Inject,
|
|
237
|
-
ToolArgsSchema,
|
|
238
|
-
} from '@eggjs/tegg';
|
|
239
|
-
import z from 'zod';
|
|
240
|
-
|
|
241
|
-
export const PromptType = {
|
|
242
|
-
name: z.string(),
|
|
243
|
-
};
|
|
244
|
-
|
|
245
|
-
export const ToolType = {
|
|
246
|
-
name: z.string({
|
|
247
|
-
description: 'npm package name',
|
|
248
|
-
}),
|
|
249
|
-
};
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
@MCPController()
|
|
253
|
-
export class McpController {
|
|
254
|
-
|
|
255
|
-
@Inject()
|
|
256
|
-
logger: Logger;
|
|
257
|
-
|
|
258
|
-
@MCPPrompt()
|
|
259
|
-
async foo(@PromptArgsSchema(PromptType) args: PromptArgs<typeof PromptType>): Promise<MCPPromptResponse> {
|
|
260
|
-
this.logger.info('hello world');
|
|
261
|
-
return {
|
|
262
|
-
messages: [
|
|
263
|
-
{
|
|
264
|
-
role: 'user',
|
|
265
|
-
content: {
|
|
266
|
-
type: 'text',
|
|
267
|
-
text: `Generate a concise but descriptive commit message for these changes:\n\n${args.name}`,
|
|
268
|
-
},
|
|
269
|
-
},
|
|
270
|
-
],
|
|
271
|
-
};
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
@MCPTool()
|
|
275
|
-
async bar(@ToolArgsSchema(ToolType) args: ToolArgs<typeof ToolType>): Promise<MCPToolResponse> {
|
|
276
|
-
return {
|
|
277
|
-
content: [
|
|
278
|
-
{
|
|
279
|
-
type: 'text',
|
|
280
|
-
text: `npm package: ${args.name} not found`,
|
|
281
|
-
},
|
|
282
|
-
],
|
|
283
|
-
};
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
@MCPResource({
|
|
288
|
-
template: [
|
|
289
|
-
'mcp://npm/{name}{?version}',
|
|
290
|
-
{
|
|
291
|
-
list: () => {
|
|
292
|
-
return {
|
|
293
|
-
resources: [
|
|
294
|
-
{ name: 'egg', uri: 'mcp://npm/egg?version=4.10.0' },
|
|
295
|
-
{ name: 'mcp', uri: 'mcp://npm/mcp?version=0.10.0' },
|
|
296
|
-
],
|
|
297
|
-
};
|
|
298
|
-
},
|
|
299
|
-
},
|
|
300
|
-
],
|
|
301
|
-
})
|
|
302
|
-
async car(uri: URL): Promise<MCPResourceResponse> {
|
|
303
|
-
return {
|
|
304
|
-
contents: [{
|
|
305
|
-
uri: uri.toString(),
|
|
306
|
-
text: 'MOCK TEXT',
|
|
307
|
-
}],
|
|
308
|
-
};
|
|
309
|
-
}
|
|
310
|
-
}
|
|
311
|
-
|
|
312
|
-
```
|
|
313
|
-
|
|
314
|
-
#### MCP 地址
|
|
315
|
-
MCP controller 完整的实现了 SSE / streamable HTTP / streamable stateless HTTP 三种模式,默认情况下,他们的路径分别是 `/mcp/init` `/mcp/stream` `/mcp/stateless/stream`, 你可以根据你所需要的场景,灵活使用对应的接口。
|
|
316
|
-
|
|
317
|
-
``` ts
|
|
318
|
-
// config.{env}.ts
|
|
319
|
-
import { randomUUID } from 'node:crypto';
|
|
320
|
-
|
|
321
|
-
export default () => {
|
|
322
|
-
|
|
323
|
-
const config = {
|
|
324
|
-
mcp: {
|
|
325
|
-
sseInitPath: '/mcp/init', // SSE path
|
|
326
|
-
sseMessagePath: '/mcp/message', // SSE message path
|
|
327
|
-
streamPath: '/mcp/stream', // streamable path
|
|
328
|
-
statelessStreamPath: '/mcp/stateless/stream', // stateless streamable path
|
|
329
|
-
sessionIdGenerator: randomUUID,
|
|
330
|
-
},
|
|
331
|
-
};
|
|
332
|
-
|
|
333
|
-
return config;
|
|
334
|
-
};
|
|
335
|
-
|
|
336
|
-
```
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ROOT_PROTO } from '@eggjs/egg-module-common';
|
|
2
|
+
export default () => {
|
|
3
|
+
return async function teggRootProto(ctx, next) {
|
|
4
|
+
ctx[ROOT_PROTO] = ctx.app.rootProtoManager.getRootProto(ctx);
|
|
5
|
+
return next();
|
|
6
|
+
};
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVnZ19yb290X3Byb3RvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcC9taWRkbGV3YXJlL3RlZ2dfcm9vdF9wcm90by50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFdEQsZUFBZSxHQUFtQixFQUFFO0lBQ2xDLE9BQU8sS0FBSyxVQUFVLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSTtRQUMzQyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDN0QsT0FBTyxJQUFJLEVBQUUsQ0FBQztJQUNoQixDQUFDLENBQUM7QUFDSixDQUFDLENBQUEifQ==
|
package/dist/app.d.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { Application, ILifecycleBoot } from 'egg';
|
|
2
|
+
import { ControllerMetaBuilderFactory } from '@eggjs/tegg';
|
|
3
|
+
import { ControllerRegisterFactory } from './lib/ControllerRegisterFactory.ts';
|
|
4
|
+
import { RootProtoManager } from './lib/RootProtoManager.ts';
|
|
5
|
+
export default class ControllerAppBootHook implements ILifecycleBoot {
|
|
6
|
+
private readonly app;
|
|
7
|
+
private readonly loadUnitHook;
|
|
8
|
+
private readonly controllerRegisterFactory;
|
|
9
|
+
private controllerLoadUnitHandler;
|
|
10
|
+
private readonly controllerPrototypeHook;
|
|
11
|
+
constructor(app: Application);
|
|
12
|
+
configWillLoad(): void;
|
|
13
|
+
prepareMiddleware(middlewareNames: string[]): string[];
|
|
14
|
+
didLoad(): Promise<void>;
|
|
15
|
+
beforeClose(): Promise<void>;
|
|
16
|
+
}
|
|
17
|
+
declare module 'egg' {
|
|
18
|
+
interface Application {
|
|
19
|
+
rootProtoManager: RootProtoManager;
|
|
20
|
+
controllerRegisterFactory: ControllerRegisterFactory;
|
|
21
|
+
controllerMetaBuilderFactory: typeof ControllerMetaBuilderFactory;
|
|
22
|
+
}
|
|
23
|
+
}
|
package/dist/app.js
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import {} from '@eggjs/tegg-metadata';
|
|
2
|
+
import { ControllerMetaBuilderFactory, ControllerType } from '@eggjs/tegg';
|
|
3
|
+
import { ModuleLoadUnitInstance } from '@eggjs/tegg-runtime';
|
|
4
|
+
import { CONTROLLER_LOAD_UNIT, ControllerLoadUnit } from "./lib/ControllerLoadUnit.js";
|
|
5
|
+
import { AppLoadUnitControllerHook } from "./lib/AppLoadUnitControllerHook.js";
|
|
6
|
+
import { HTTPControllerRegister } from "./lib/impl/http/HTTPControllerRegister.js";
|
|
7
|
+
import { ControllerRegisterFactory } from "./lib/ControllerRegisterFactory.js";
|
|
8
|
+
import { ControllerLoadUnitHandler } from "./lib/ControllerLoadUnitHandler.js";
|
|
9
|
+
import { ControllerMetadataManager } from "./lib/ControllerMetadataManager.js";
|
|
10
|
+
import { EggControllerPrototypeHook } from "./lib/EggControllerPrototypeHook.js";
|
|
11
|
+
import { RootProtoManager } from "./lib/RootProtoManager.js";
|
|
12
|
+
import { EggControllerLoader } from "./lib/EggControllerLoader.js";
|
|
13
|
+
// Load Controller process
|
|
14
|
+
// 1. await add load unit is ready, controller may depend other load unit
|
|
15
|
+
// 2. load ${app_base_dir}app/controller file
|
|
16
|
+
// 3. ControllerRegister register controller implement
|
|
17
|
+
export default class ControllerAppBootHook {
|
|
18
|
+
app;
|
|
19
|
+
loadUnitHook;
|
|
20
|
+
controllerRegisterFactory;
|
|
21
|
+
controllerLoadUnitHandler;
|
|
22
|
+
controllerPrototypeHook;
|
|
23
|
+
constructor(app) {
|
|
24
|
+
this.app = app;
|
|
25
|
+
this.controllerRegisterFactory = new ControllerRegisterFactory(this.app);
|
|
26
|
+
this.app.rootProtoManager = new RootProtoManager();
|
|
27
|
+
this.app.controllerRegisterFactory = this.controllerRegisterFactory;
|
|
28
|
+
this.app.controllerMetaBuilderFactory = ControllerMetaBuilderFactory;
|
|
29
|
+
this.loadUnitHook = new AppLoadUnitControllerHook(this.controllerRegisterFactory, this.app.rootProtoManager);
|
|
30
|
+
this.controllerPrototypeHook = new EggControllerPrototypeHook();
|
|
31
|
+
}
|
|
32
|
+
configWillLoad() {
|
|
33
|
+
this.app.loadUnitLifecycleUtil.registerLifecycle(this.loadUnitHook);
|
|
34
|
+
this.app.eggPrototypeLifecycleUtil.registerLifecycle(this.controllerPrototypeHook);
|
|
35
|
+
this.app.loaderFactory.registerLoader(CONTROLLER_LOAD_UNIT, unitPath => {
|
|
36
|
+
return new EggControllerLoader(unitPath);
|
|
37
|
+
});
|
|
38
|
+
this.controllerRegisterFactory.registerControllerRegister(ControllerType.HTTP, HTTPControllerRegister.create);
|
|
39
|
+
this.app.loadUnitFactory.registerLoadUnitCreator(CONTROLLER_LOAD_UNIT, (ctx) => {
|
|
40
|
+
return new ControllerLoadUnit(`tegg-app-controller:${ctx.unitPath}`, ctx.unitPath, ctx.loader, this.app.eggPrototypeFactory, this.app.eggPrototypeCreatorFactory);
|
|
41
|
+
});
|
|
42
|
+
this.app.loadUnitInstanceFactory.registerLoadUnitInstanceClass(CONTROLLER_LOAD_UNIT, (ctx) => {
|
|
43
|
+
return new ModuleLoadUnitInstance(ctx.loadUnit);
|
|
44
|
+
});
|
|
45
|
+
// init http root proto middleware
|
|
46
|
+
this.prepareMiddleware(this.app.config.coreMiddleware);
|
|
47
|
+
}
|
|
48
|
+
prepareMiddleware(middlewareNames) {
|
|
49
|
+
if (!middlewareNames.includes('teggCtxLifecycleMiddleware')) {
|
|
50
|
+
middlewareNames.unshift('teggCtxLifecycleMiddleware');
|
|
51
|
+
}
|
|
52
|
+
const index = middlewareNames.indexOf('teggCtxLifecycleMiddleware');
|
|
53
|
+
middlewareNames.splice(index, 0, 'teggRootProto');
|
|
54
|
+
return middlewareNames;
|
|
55
|
+
}
|
|
56
|
+
async didLoad() {
|
|
57
|
+
await this.app.moduleHandler.ready();
|
|
58
|
+
this.controllerLoadUnitHandler = new ControllerLoadUnitHandler(this.app);
|
|
59
|
+
await this.controllerLoadUnitHandler.ready();
|
|
60
|
+
// The real register HTTP controller/method.
|
|
61
|
+
// HTTP method should sort by priority
|
|
62
|
+
// The HTTPControllerRegister will collect all the methods
|
|
63
|
+
// and register methods after collect is done.
|
|
64
|
+
HTTPControllerRegister.instance?.doRegister(this.app.rootProtoManager);
|
|
65
|
+
}
|
|
66
|
+
async beforeClose() {
|
|
67
|
+
if (this.controllerLoadUnitHandler) {
|
|
68
|
+
await this.controllerLoadUnitHandler.destroy();
|
|
69
|
+
}
|
|
70
|
+
this.app.loadUnitLifecycleUtil.deleteLifecycle(this.loadUnitHook);
|
|
71
|
+
this.app.eggPrototypeLifecycleUtil.deleteLifecycle(this.controllerPrototypeHook);
|
|
72
|
+
ControllerMetadataManager.instance.clear();
|
|
73
|
+
HTTPControllerRegister.clean();
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2FwcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQWlDLE1BQU0sc0JBQXNCLENBQUM7QUFDckUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMzRSxPQUFPLEVBQXlDLHNCQUFzQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFcEcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDdkYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDL0UsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDbkYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDL0UsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDL0UsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDL0UsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDakYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFbkUsMEJBQTBCO0FBQzFCLHlFQUF5RTtBQUN6RSw2Q0FBNkM7QUFDN0Msc0RBQXNEO0FBRXRELE1BQU0sQ0FBQyxPQUFPLE9BQU8scUJBQXFCO0lBQ3ZCLEdBQUcsQ0FBYztJQUNqQixZQUFZLENBQTRCO0lBQ3hDLHlCQUF5QixDQUE0QjtJQUM5RCx5QkFBeUIsQ0FBNEI7SUFDNUMsdUJBQXVCLENBQTZCO0lBRXJFLFlBQVksR0FBZ0I7UUFDMUIsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDZixJQUFJLENBQUMseUJBQXlCLEdBQUcs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
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import './types.ts';
|
package/dist/index.js
ADDED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { LoadUnit, LoadUnitLifecycleContext } from '@eggjs/tegg-metadata';
|
|
2
|
-
import { LifecycleHook } from '@eggjs/tegg';
|
|
3
|
-
import { ControllerRegisterFactory } from './ControllerRegisterFactory';
|
|
4
|
-
import { RootProtoManager } from './RootProtoManager';
|
|
1
|
+
import { type LoadUnit, type LoadUnitLifecycleContext } from '@eggjs/tegg-metadata';
|
|
2
|
+
import { type LifecycleHook } from '@eggjs/tegg';
|
|
3
|
+
import { ControllerRegisterFactory } from './ControllerRegisterFactory.ts';
|
|
4
|
+
import { RootProtoManager } from './RootProtoManager.ts';
|
|
5
5
|
export declare class AppLoadUnitControllerHook implements LifecycleHook<LoadUnitLifecycleContext, LoadUnit> {
|
|
6
6
|
private readonly controllerRegisterFactory;
|
|
7
7
|
private readonly rootProtoManager;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import {} from '@eggjs/tegg-metadata';
|
|
2
|
+
import { CONTROLLER_META_DATA } from '@eggjs/tegg';
|
|
3
|
+
import { ControllerRegisterFactory } from "./ControllerRegisterFactory.js";
|
|
4
|
+
import { ControllerMetadataManager } from "./ControllerMetadataManager.js";
|
|
5
|
+
import { RootProtoManager } from "./RootProtoManager.js";
|
|
6
|
+
export class AppLoadUnitControllerHook {
|
|
7
|
+
controllerRegisterFactory;
|
|
8
|
+
rootProtoManager;
|
|
9
|
+
constructor(controllerRegisterFactory, rootProtoManager) {
|
|
10
|
+
this.controllerRegisterFactory = controllerRegisterFactory;
|
|
11
|
+
this.rootProtoManager = rootProtoManager;
|
|
12
|
+
}
|
|
13
|
+
async postCreate(_, obj) {
|
|
14
|
+
const iterator = obj.iterateEggPrototype();
|
|
15
|
+
for (const proto of iterator) {
|
|
16
|
+
const metadata = proto.getMetaData(CONTROLLER_META_DATA);
|
|
17
|
+
if (!metadata) {
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
const register = this.controllerRegisterFactory.getControllerRegister(proto, metadata);
|
|
21
|
+
if (!register) {
|
|
22
|
+
throw new Error(`not find controller implement for ${String(proto.name)} which type is ${metadata.type}`);
|
|
23
|
+
}
|
|
24
|
+
ControllerMetadataManager.instance.addController(metadata);
|
|
25
|
+
await register.register(this.rootProtoManager, obj);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXBwTG9hZFVuaXRDb250cm9sbGVySG9vay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvQXBwTG9hZFVuaXRDb250cm9sbGVySG9vay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWdELE1BQU0sc0JBQXNCLENBQUM7QUFDcEYsT0FBTyxFQUFFLG9CQUFvQixFQUErQyxNQUFNLGFBQWEsQ0FBQztBQUVoRyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV6RCxNQUFNLE9BQU8seUJBQXlCO0lBQ25CLHlCQUF5QixDQUE0QjtJQUNyRCxnQkFBZ0IsQ0FBbUI7SUFFcEQsWUFBWSx5QkFBb0QsRUFBRSxnQkFBa0M7UUFDbEcsSUFBSSxDQUFDLHlCQUF5QixHQUFHLHlCQUF5QixDQUFDO1FBQzNELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztJQUMzQyxDQUFDO0lBRUQsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUEyQixFQUFFLEdBQWE7UUFDekQsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDM0MsS0FBSyxNQUFNLEtBQUssSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUM3QixNQUFNLFFBQVEsR0FBbUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQ3pGLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDZCxTQUFTO1lBQ1gsQ0FBQztZQUNELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDdkYsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNkLE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGtCQUFrQixRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUM1RyxDQUFDO1lBQ0QseUJBQXlCLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMzRCxNQUFNLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3RELENBQUM7SUFDSCxDQUFDO0NBQ0YifQ==
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { EggPrototype, EggPrototypeFactory, Loader, LoadUnit, EggPrototypeCreatorFactory } from '@eggjs/tegg-metadata';
|
|
2
|
-
import { QualifierInfo, Id } from '@eggjs/tegg';
|
|
1
|
+
import { type EggPrototype, EggPrototypeFactory, type Loader, type LoadUnit, type EggPrototypeCreatorFactory } from '@eggjs/tegg-metadata';
|
|
2
|
+
import { type QualifierInfo, type Id } from '@eggjs/tegg';
|
|
3
3
|
export declare const CONTROLLER_LOAD_UNIT = "app#controller";
|
|
4
4
|
export declare class ControllerLoadUnit implements LoadUnit {
|
|
5
5
|
private readonly loader;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { EggPrototypeFactory, } from '@eggjs/tegg-metadata';
|
|
2
|
+
import { IdenticalUtil, } from '@eggjs/tegg';
|
|
3
|
+
import { MapUtil } from '@eggjs/tegg-common-util';
|
|
4
|
+
export const CONTROLLER_LOAD_UNIT = 'app#controller';
|
|
5
|
+
// ControllerLoadUnit is responsible for manage controller proto
|
|
6
|
+
export class ControllerLoadUnit {
|
|
7
|
+
loader;
|
|
8
|
+
id;
|
|
9
|
+
name;
|
|
10
|
+
type = CONTROLLER_LOAD_UNIT;
|
|
11
|
+
unitPath;
|
|
12
|
+
eggPrototypeFactory;
|
|
13
|
+
eggPrototypeCreatorFactory;
|
|
14
|
+
protoMap = new Map();
|
|
15
|
+
constructor(name, unitPath, loader, eggPrototypeFactory, eggPrototypeCreatorFactory) {
|
|
16
|
+
this.id = IdenticalUtil.createLoadUnitId(name);
|
|
17
|
+
this.name = name;
|
|
18
|
+
this.unitPath = unitPath;
|
|
19
|
+
this.loader = loader;
|
|
20
|
+
this.eggPrototypeFactory = eggPrototypeFactory;
|
|
21
|
+
this.eggPrototypeCreatorFactory = eggPrototypeCreatorFactory;
|
|
22
|
+
}
|
|
23
|
+
async init() {
|
|
24
|
+
const clazzList = await this.loader.load();
|
|
25
|
+
for (const clazz of clazzList) {
|
|
26
|
+
const protos = await this.eggPrototypeCreatorFactory.createProto(clazz, this);
|
|
27
|
+
for (const proto of protos) {
|
|
28
|
+
this.eggPrototypeFactory.registerPrototype(proto, this);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
containPrototype(proto) {
|
|
33
|
+
return !!(this.protoMap.get(proto.name)?.find(t => t === proto));
|
|
34
|
+
}
|
|
35
|
+
getEggPrototype(name, qualifiers) {
|
|
36
|
+
const protos = this.protoMap.get(name);
|
|
37
|
+
return protos?.filter(proto => proto.verifyQualifiers(qualifiers)) || [];
|
|
38
|
+
}
|
|
39
|
+
registerEggPrototype(proto) {
|
|
40
|
+
const protoList = MapUtil.getOrStore(this.protoMap, proto.name, []);
|
|
41
|
+
protoList.push(proto);
|
|
42
|
+
}
|
|
43
|
+
deletePrototype(proto) {
|
|
44
|
+
const protos = this.protoMap.get(proto.name);
|
|
45
|
+
if (protos) {
|
|
46
|
+
const index = protos.indexOf(proto);
|
|
47
|
+
if (index !== -1) {
|
|
48
|
+
protos.splice(index, 1);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
async destroy() {
|
|
53
|
+
for (const namedProtos of this.protoMap.values()) {
|
|
54
|
+
// Delete prototype will delete item
|
|
55
|
+
// array iterator is not safe
|
|
56
|
+
const protos = namedProtos.slice();
|
|
57
|
+
for (const proto of protos) {
|
|
58
|
+
EggPrototypeFactory.instance.deletePrototype(proto, this);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
this.protoMap.clear();
|
|
62
|
+
}
|
|
63
|
+
iterateEggPrototype() {
|
|
64
|
+
const protos = Array.from(this.protoMap.values())
|
|
65
|
+
.reduce((p, c) => {
|
|
66
|
+
p = p.concat(c);
|
|
67
|
+
return p;
|
|
68
|
+
}, []);
|
|
69
|
+
return protos.values();
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udHJvbGxlckxvYWRVbml0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9Db250cm9sbGVyTG9hZFVuaXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLG1CQUFtQixHQUlwQixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFJTCxhQUFhLEdBQ2QsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRWxELE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLGdCQUFnQixDQUFDO0FBRXJELGdFQUFnRTtBQUNoRSxNQUFNLE9BQU8sa0JBQWtCO0lBQ1osTUFBTSxDQUFTO0lBQ2hDLEVBQUUsQ0FBSztJQUNFLElBQUksQ0FBUztJQUNiLElBQUksR0FBRyxvQkFBb0IsQ0FBQztJQUM1QixRQUFRLENBQVM7SUFDbEIsbUJBQW1CLENBQXNCO0lBQ3pDLDBCQUEwQixDQUFvQztJQUM5RCxRQUFRLEdBQTBDLElBQUksR0FBRyxFQUFFLENBQUM7SUFFcEUsWUFDRSxJQUFZLEVBQ1osUUFBZ0IsRUFDaEIsTUFBYyxFQUNkLG1CQUF3QyxFQUN4QywwQkFBNkQ7UUFFN0QsSUFBSSxDQUFDLEVBQUUsR0FBRyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLG1CQUFtQixDQUFDO1FBQy9DLElBQUksQ0FBQywwQkFBMEIsR0FBRywwQkFBMEIsQ0FBQztJQUMvRCxDQUFDO0lBRUQsS0FBSyxDQUFDLElBQUk7UUFDUixNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsSUFB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
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import Base from 'sdk-base';
|
|
2
|
-
import { Application } from 'egg';
|
|
3
|
-
import { LoadUnit } from '@eggjs/tegg-metadata';
|
|
4
|
-
import { LoadUnitInstance } from '@eggjs/tegg-runtime';
|
|
1
|
+
import { Base } from 'sdk-base';
|
|
2
|
+
import type { Application } from 'egg';
|
|
3
|
+
import { type LoadUnit } from '@eggjs/tegg-metadata';
|
|
4
|
+
import { type LoadUnitInstance } from '@eggjs/tegg-runtime';
|
|
5
5
|
export declare class ControllerLoadUnitHandler extends Base {
|
|
6
6
|
private readonly app;
|
|
7
7
|
controllerLoadUnit: LoadUnit;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { Base } from 'sdk-base';
|
|
3
|
+
import { EggLoadUnitType } from '@eggjs/tegg-metadata';
|
|
4
|
+
import {} from '@eggjs/tegg-runtime';
|
|
5
|
+
import { CONTROLLER_LOAD_UNIT } from "./ControllerLoadUnit.js";
|
|
6
|
+
export class ControllerLoadUnitHandler extends Base {
|
|
7
|
+
app;
|
|
8
|
+
controllerLoadUnit;
|
|
9
|
+
controllerLoadUnitInstance;
|
|
10
|
+
constructor(app) {
|
|
11
|
+
super({ initMethod: '_init' });
|
|
12
|
+
this.app = app;
|
|
13
|
+
}
|
|
14
|
+
async _init() {
|
|
15
|
+
const controllerDir = path.join(this.app.config.baseDir, 'app/controller');
|
|
16
|
+
const loader = this.app.loaderFactory.createLoader(controllerDir, CONTROLLER_LOAD_UNIT);
|
|
17
|
+
this.controllerLoadUnit = await this.app.loadUnitFactory.createLoadUnit(controllerDir, CONTROLLER_LOAD_UNIT, loader);
|
|
18
|
+
this.controllerLoadUnitInstance = await this.app.loadUnitInstanceFactory.createLoadUnitInstance(this.controllerLoadUnit);
|
|
19
|
+
}
|
|
20
|
+
async destroy() {
|
|
21
|
+
if (this.controllerLoadUnit) {
|
|
22
|
+
await this.app.loadUnitFactory.destroyLoadUnit(this.controllerLoadUnit);
|
|
23
|
+
}
|
|
24
|
+
if (this.controllerLoadUnitInstance) {
|
|
25
|
+
await this.app.loadUnitInstanceFactory.destroyLoadUnitInstance(this.controllerLoadUnitInstance);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udHJvbGxlckxvYWRVbml0SGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvQ29udHJvbGxlckxvYWRVbml0SGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLElBQUksTUFBTSxXQUFXLENBQUM7QUFFN0IsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUVoQyxPQUFPLEVBQUUsZUFBZSxFQUFpQixNQUFNLHNCQUFzQixDQUFDO0FBQ3RFLE9BQU8sRUFBeUIsTUFBTSxxQkFBcUIsQ0FBQztBQUU1RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUUvRCxNQUFNLE9BQU8seUJBQTBCLFNBQVEsSUFBSTtJQUNoQyxHQUFHLENBQWM7SUFDbEMsa0JBQWtCLENBQVc7SUFDN0IsMEJBQTBCLENBQW1CO0lBRTdDLFlBQVksR0FBZ0I7UUFDMUIsS0FBSyxDQUFDLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDakIsQ0FBQztJQUVELEtBQUssQ0FBQyxLQUFLO1FBQ1QsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUMzRSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLG9CQUF1QyxDQUFDLENBQUM7UUFDM0csSUFBSSxDQUFDLGtCQUFrQixHQUFHLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNySCxJQUFJLENBQUMsMEJBQTBCLEdBQUcsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLHVCQUF1QixDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQzNILENBQUM7SUFFRCxLQUFLLENBQUMsT0FBTztRQUNYLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDNUIsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDMUUsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7WUFDcEMsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLHVCQUF1QixDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQ2xHLENBQUM7SUFDSCxDQUFDO0NBQ0YifQ==
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { EggPrototype, LoadUnit } from '@eggjs/tegg-metadata';
|
|
2
|
-
import { EggObjectName } from '@eggjs/tegg';
|
|
3
|
-
import { EggObject, LoadUnitInstance, LoadUnitInstanceLifecycleContext, LoadUnitInstanceLifecycleUtil } from '@eggjs/tegg-runtime';
|
|
1
|
+
import { type EggPrototype, type LoadUnit } from '@eggjs/tegg-metadata';
|
|
2
|
+
import { type EggObjectName } from '@eggjs/tegg';
|
|
3
|
+
import { type EggObject, type LoadUnitInstance, type LoadUnitInstanceLifecycleContext, LoadUnitInstanceLifecycleUtil } from '@eggjs/tegg-runtime';
|
|
4
4
|
export declare class ControllerLoadUnitInstance implements LoadUnitInstance {
|
|
5
5
|
readonly loadUnit: LoadUnit;
|
|
6
6
|
readonly id: string;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import {} from '@eggjs/tegg-metadata';
|
|
2
|
+
import { IdenticalUtil } from '@eggjs/tegg';
|
|
3
|
+
import { LoadUnitInstanceLifecycleUtil, } from '@eggjs/tegg-runtime';
|
|
4
|
+
export class ControllerLoadUnitInstance {
|
|
5
|
+
loadUnit;
|
|
6
|
+
id;
|
|
7
|
+
name;
|
|
8
|
+
protoToCreateMap = new Map();
|
|
9
|
+
loadUnitInstanceLifecycleUtil;
|
|
10
|
+
constructor(loadUnit, loadUnitInstanceLifecycleUtil) {
|
|
11
|
+
this.loadUnit = loadUnit;
|
|
12
|
+
this.name = loadUnit.name;
|
|
13
|
+
this.id = IdenticalUtil.createLoadUnitInstanceId(loadUnit.id);
|
|
14
|
+
this.loadUnitInstanceLifecycleUtil = loadUnitInstanceLifecycleUtil;
|
|
15
|
+
}
|
|
16
|
+
iterateProtoToCreate() {
|
|
17
|
+
return this.protoToCreateMap.entries();
|
|
18
|
+
}
|
|
19
|
+
addProtoToCreate() {
|
|
20
|
+
throw new Error('controller load unit not allow have singleton proto');
|
|
21
|
+
}
|
|
22
|
+
deleteProtoToCreate() {
|
|
23
|
+
throw new Error('controller load unit not allow have singleton proto');
|
|
24
|
+
}
|
|
25
|
+
async init(ctx) {
|
|
26
|
+
await this.loadUnitInstanceLifecycleUtil.objectPreCreate(ctx, this);
|
|
27
|
+
await this.loadUnitInstanceLifecycleUtil.objectPostCreate(ctx, this);
|
|
28
|
+
}
|
|
29
|
+
async getOrCreateEggObject() {
|
|
30
|
+
throw new Error('controller load unit not allow have singleton proto');
|
|
31
|
+
}
|
|
32
|
+
getEggObject() {
|
|
33
|
+
throw new Error('controller load unit not allow have singleton proto');
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udHJvbGxlckxvYWRVbml0SW5zdGFuY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL0NvbnRyb2xsZXJMb2FkVW5pdEluc3RhbmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBb0MsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RSxPQUFPLEVBQTZDLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN2RixPQUFPLEVBR2tDLDZCQUE2QixHQUNyRSxNQUFNLHFCQUFxQixDQUFDO0FBRTdCLE1BQU0sT0FBTywwQkFBMEI7SUFDNUIsUUFBUSxDQUFXO0lBQ25CLEVBQUUsQ0FBUztJQUNYLElBQUksQ0FBUztJQUNkLGdCQUFnQixHQUF3QyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ2xFLDZCQUE2QixDQUF1QztJQUU1RSxZQUFZLFFBQWtCLEVBQUUsNkJBQW1FO1FBQ2pHLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztRQUMxQixJQUFJLENBQUMsRUFBRSxHQUFHLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLDZCQUE2QixHQUFHLDZCQUE2QixDQUFDO0lBQ3JFLENBQUM7SUFFRCxvQkFBb0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVELGdCQUFnQjtRQUNkLE1BQU0sSUFBSSxLQUFLLENBQUMscURBQXFELENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRUQsbUJBQW1CO1FBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMscURBQXFELENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRUQsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFxQztRQUM5QyxNQUFNLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sSUFBSSxDQUFDLDZCQUE2QixDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQsS0FBSyxDQUFDLG9CQUFvQjtRQUN4QixNQUFNLElBQUksS0FBSyxDQUFDLHFEQUFxRCxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVELFlBQVk7UUFDVixNQUFNLElBQUksS0FBSyxDQUFDLHFEQUFxRCxDQUFDLENBQUM7SUFDekUsQ0FBQztDQUNGIn0=
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import {} from '@eggjs/tegg';
|
|
2
|
+
import { MapUtil } from '@eggjs/tegg-common-util';
|
|
3
|
+
export class ControllerMetadataManager {
|
|
4
|
+
controllers = new Map();
|
|
5
|
+
static instance = new ControllerMetadataManager();
|
|
6
|
+
constructor() {
|
|
7
|
+
this.controllers = new Map();
|
|
8
|
+
}
|
|
9
|
+
addController(metadata) {
|
|
10
|
+
const typeControllers = MapUtil.getOrStore(this.controllers, metadata.type, []);
|
|
11
|
+
// 1.check controller name
|
|
12
|
+
// 2.check proto name
|
|
13
|
+
const sameNameControllers = typeControllers.filter(c => c.controllerName === metadata.controllerName);
|
|
14
|
+
if (sameNameControllers.length) {
|
|
15
|
+
throw new Error(`duplicate controller name ${metadata.controllerName}`);
|
|
16
|
+
}
|
|
17
|
+
const sameProtoControllers = typeControllers.filter(c => c.protoName === metadata.protoName);
|
|
18
|
+
if (sameProtoControllers.length) {
|
|
19
|
+
throw new Error(`duplicate proto name ${String(metadata.protoName)}`);
|
|
20
|
+
}
|
|
21
|
+
typeControllers.push(metadata);
|
|
22
|
+
}
|
|
23
|
+
clear() {
|
|
24
|
+
this.controllers.clear();
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udHJvbGxlck1ldGFkYXRhTWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvQ29udHJvbGxlck1ldGFkYXRhTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9ELE1BQU0sYUFBYSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVsRCxNQUFNLE9BQU8seUJBQXlCO0lBQ25CLFdBQVcsR0FBRyxJQUFJLEdBQUcsRUFBNEMsQ0FBQztJQUVuRixNQUFNLENBQUMsUUFBUSxHQUFHLElBQUkseUJBQXlCLEVBQUUsQ0FBQztJQUVsRDtRQUNFLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsYUFBYSxDQUFDLFFBQTRCO1FBQ3hDLE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2hGLDBCQUEwQjtRQUMxQixxQkFBcUI7UUFDckIsTUFBTSxtQkFBbUIsR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGNBQWMsS0FBSyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDdEcsSUFBSSxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMvQixNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixRQUFRLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztRQUMxRSxDQUFDO1FBQ0QsTUFBTSxvQkFBb0IsR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsS0FBSyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0YsSUFBSSxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQyxNQUFNLElBQUksS0FBSyxDQUFDLHdCQUF3QixNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4RSxDQUFDO1FBQ0QsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsS0FBSztRQUNILElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDM0IsQ0FBQyJ9
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { LoadUnit } from '@eggjs/tegg-metadata';
|
|
2
|
-
import { RootProtoManager } from './RootProtoManager';
|
|
1
|
+
import { type LoadUnit } from '@eggjs/tegg-metadata';
|
|
2
|
+
import { RootProtoManager } from './RootProtoManager.ts';
|
|
3
3
|
export interface ControllerRegister {
|
|
4
4
|
register(rootProtoManager: RootProtoManager, loadUnit?: LoadUnit): Promise<void>;
|
|
5
5
|
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import {} from '@eggjs/tegg-metadata';
|
|
2
|
+
import { RootProtoManager } from "./RootProtoManager.js";
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udHJvbGxlclJlZ2lzdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9Db250cm9sbGVyUmVnaXN0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixNQUFNLHNCQUFzQixDQUFDO0FBRXJELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDIn0=
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Application } from 'egg';
|
|
2
|
-
import { ControllerMetadata, ControllerTypeLike } from '@eggjs/tegg';
|
|
3
|
-
import { EggPrototype } from '@eggjs/tegg-metadata';
|
|
4
|
-
import { ControllerRegister } from './ControllerRegister';
|
|
1
|
+
import type { Application } from 'egg';
|
|
2
|
+
import { type ControllerMetadata, type ControllerTypeLike } from '@eggjs/tegg';
|
|
3
|
+
import { type EggPrototype } from '@eggjs/tegg-metadata';
|
|
4
|
+
import { type ControllerRegister } from './ControllerRegister.ts';
|
|
5
5
|
export type RegisterCreator = (proto: EggPrototype, controllerMeta: ControllerMetadata, app: Application) => ControllerRegister;
|
|
6
6
|
export declare class ControllerRegisterFactory {
|
|
7
7
|
private readonly app;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import {} from '@eggjs/tegg';
|
|
2
|
+
import {} from '@eggjs/tegg-metadata';
|
|
3
|
+
import {} from "./ControllerRegister.js";
|
|
4
|
+
export class ControllerRegisterFactory {
|
|
5
|
+
app;
|
|
6
|
+
registerCreatorMap;
|
|
7
|
+
constructor(app) {
|
|
8
|
+
this.app = app;
|
|
9
|
+
this.registerCreatorMap = new Map();
|
|
10
|
+
}
|
|
11
|
+
registerControllerRegister(type, creator) {
|
|
12
|
+
this.registerCreatorMap.set(type, creator);
|
|
13
|
+
}
|
|
14
|
+
getControllerRegister(proto, metadata) {
|
|
15
|
+
const creator = this.registerCreatorMap.get(metadata.type);
|
|
16
|
+
if (!creator) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
return creator(proto, metadata, this.app);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udHJvbGxlclJlZ2lzdGVyRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvQ29udHJvbGxlclJlZ2lzdGVyRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQW9ELE1BQU0sYUFBYSxDQUFDO0FBQy9FLE9BQU8sRUFBcUIsTUFBTSxzQkFBc0IsQ0FBQztBQUV6RCxPQUFPLEVBQTJCLE1BQU0seUJBQXlCLENBQUM7QUFJbEUsTUFBTSxPQUFPLHlCQUF5QjtJQUNuQixHQUFHLENBQWM7SUFDMUIsa0JBQWtCLENBQTJDO0lBRXJFLFlBQVksR0FBZ0I7UUFDMUIsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDZixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQsMEJBQTBCLENBQUMsSUFBd0IsRUFBRSxPQUF3QjtRQUMzRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQscUJBQXFCLENBQUMsS0FBbUIsRUFBRSxRQUE0QjtRQUNyRSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDYixPQUFPO1FBQ1QsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzVDLENBQUM7Q0FDRiJ9
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { EggProtoImplClass } from '@eggjs/tegg';
|
|
2
|
+
import type { Loader } from '@eggjs/tegg-types';
|
|
3
|
+
export declare class EggControllerLoader implements Loader {
|
|
4
|
+
private readonly controllerDir;
|
|
5
|
+
constructor(controllerDir: string);
|
|
6
|
+
load(): Promise<EggProtoImplClass[]>;
|
|
7
|
+
}
|