Showing preview only (3,750K chars total). Download the full file or copy to clipboard to get everything.
Repository: eggjs/tegg
Branch: master
Commit: 0ece332df200
Files: 1679
Total size: 3.2 MB
Directory structure:
gitextract_ixpf0f65/
├── .eslintignore
├── .eslintrc
├── .github/
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug-report-cn.yml
│ │ ├── bug-report.yml
│ │ ├── feature-request-cn.yml
│ │ ├── feature-request.yml
│ │ ├── rfc-cn.yml
│ │ └── rfc.yml
│ ├── PULL_REQUEST_TEMPLATE.md
│ └── workflows/
│ ├── codeql-analysis.yml
│ ├── nodejs.yml
│ └── release.yml
├── .gitignore
├── .mocharc.yml
├── .nycrc.yml
├── CHANGELOG.md
├── CLAUDE.md
├── LICENSE
├── README.md
├── benchmark/
│ └── http/
│ ├── app/
│ │ ├── controller/
│ │ │ ├── FooTeggController.ts
│ │ │ └── template/
│ │ │ └── egg_controller_1.js
│ │ └── router.js
│ ├── config/
│ │ ├── config.default.js
│ │ └── plugin.js
│ ├── package.json
│ └── tsconfig.json
├── core/
│ ├── agent-runtime/
│ │ ├── CHANGELOG.md
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── AgentRuntime.ts
│ │ │ ├── AgentStoreUtils.ts
│ │ │ ├── HttpSSEWriter.ts
│ │ │ ├── MessageConverter.ts
│ │ │ ├── OSSAgentStore.ts
│ │ │ ├── OSSObjectStorageClient.ts
│ │ │ ├── RunBuilder.ts
│ │ │ └── SSEWriter.ts
│ │ ├── test/
│ │ │ ├── AgentRuntime.test.ts
│ │ │ ├── HttpSSEWriter.test.ts
│ │ │ ├── MessageConverter.test.ts
│ │ │ ├── OSSAgentStore.test.ts
│ │ │ ├── OSSObjectStorageClient.test.ts
│ │ │ ├── RunBuilder.test.ts
│ │ │ └── helpers.ts
│ │ ├── tsconfig.json
│ │ └── tsconfig.pub.json
│ ├── agent-tracing/
│ │ ├── CHANGELOG.md
│ │ ├── claude.ts
│ │ ├── index.ts
│ │ ├── langgraph.ts
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── AbstractLogServiceClient.ts
│ │ │ ├── AbstractOssClient.ts
│ │ │ ├── ClaudeAgentTracer.ts
│ │ │ ├── LangGraphTracer.ts
│ │ │ ├── TracingService.ts
│ │ │ └── types.ts
│ │ ├── test/
│ │ │ ├── ClaudeAgentTracer.test.ts
│ │ │ ├── Configure.test.ts
│ │ │ ├── LangGraphTracer.test.ts
│ │ │ ├── TestUtils.ts
│ │ │ └── TracingService.test.ts
│ │ ├── tsconfig.json
│ │ └── tsconfig.pub.json
│ ├── ajv-decorator/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── enum/
│ │ │ │ └── TransformEnum.ts
│ │ │ ├── error/
│ │ │ │ └── AjvInvalidParamError.ts
│ │ │ └── type/
│ │ │ └── Ajv.ts
│ │ ├── test/
│ │ │ └── TransformEnum.test.ts
│ │ ├── tsconfig.json
│ │ └── tsconfig.pub.json
│ ├── aop-decorator/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── AspectMetaBuilder.ts
│ │ │ ├── CrosscutAdviceFactory.ts
│ │ │ ├── decorator/
│ │ │ │ ├── Advice.ts
│ │ │ │ ├── Crosscut.ts
│ │ │ │ └── Pointcut.ts
│ │ │ ├── model/
│ │ │ │ ├── Aspect.ts
│ │ │ │ └── PointcutInfo.ts
│ │ │ └── util/
│ │ │ ├── AdviceInfoUtil.ts
│ │ │ ├── AspectInfoUtil.ts
│ │ │ ├── CrosscutInfoUtil.ts
│ │ │ └── PointcutAdviceInfoUtil.ts
│ │ ├── test/
│ │ │ ├── AspectMetaBuilder.test.ts
│ │ │ └── fixtures/
│ │ │ ├── CrosscutExample.ts
│ │ │ ├── InheritExample.ts
│ │ │ └── PointcutExample.ts
│ │ ├── tsconfig.json
│ │ └── tsconfig.pub.json
│ ├── aop-runtime/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── AspectExecutor.ts
│ │ │ ├── CrossCutGraphHook.ts
│ │ │ ├── EggObjectAopHook.ts
│ │ │ ├── EggPrototypeCrossCutHook.ts
│ │ │ ├── LoadUnitAopHook.ts
│ │ │ └── PointCutGraphHook.ts
│ │ ├── test/
│ │ │ ├── aop-runtime.test.ts
│ │ │ └── fixtures/
│ │ │ ├── modules/
│ │ │ │ ├── constructor_inject_aop/
│ │ │ │ │ ├── Hello.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── hello_cross_cut/
│ │ │ │ │ ├── CallTrace.ts
│ │ │ │ │ ├── HelloCrossCut.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── hello_point_cut/
│ │ │ │ │ ├── HelloPointCut.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── hello_succeed/
│ │ │ │ │ ├── Hello.ts
│ │ │ │ │ └── package.json
│ │ │ │ └── should_throw/
│ │ │ │ ├── Hello.ts
│ │ │ │ └── package.json
│ │ │ └── mutli/
│ │ │ ├── a/
│ │ │ │ ├── A.ts
│ │ │ │ └── package.json
│ │ │ ├── b/
│ │ │ │ ├── B.ts
│ │ │ │ └── package.json
│ │ │ ├── c/
│ │ │ │ ├── Base.ts
│ │ │ │ └── package.json
│ │ │ └── cross/
│ │ │ ├── Cross.ts
│ │ │ └── package.json
│ │ ├── tsconfig.json
│ │ └── tsconfig.pub.json
│ ├── background-task/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── src/
│ │ │ └── BackgroundTaskHelper.ts
│ │ ├── test/
│ │ │ └── BackgroundTaskHelper.test.ts
│ │ ├── tsconfig.json
│ │ └── tsconfig.pub.json
│ ├── common-util/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── FSUtil.ts
│ │ │ ├── Graph.ts
│ │ │ ├── MapUtil.ts
│ │ │ ├── ModuleConfig.ts
│ │ │ ├── ModuleConfigs.ts
│ │ │ ├── NameUtil.ts
│ │ │ ├── ObjectUtils.ts
│ │ │ ├── ProxyUtil.ts
│ │ │ ├── StackUtil.ts
│ │ │ ├── StreamUtil.ts
│ │ │ └── TimerUtil.ts
│ │ ├── test/
│ │ │ ├── MapUtil.test.ts
│ │ │ ├── ModuleConfig.test.ts
│ │ │ ├── NameUtil.test.ts
│ │ │ ├── ObjectUtil.test.ts
│ │ │ ├── ProtoGraph.test.ts
│ │ │ ├── TimerUtil.test.ts
│ │ │ └── fixtures/
│ │ │ ├── apps/
│ │ │ │ ├── app-with-module-json/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── module-a/
│ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ └── module-b/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── module.json
│ │ │ │ │ └── package.json
│ │ │ │ ├── app-with-module-pkg-json/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── module.json
│ │ │ │ │ ├── node_modules/
│ │ │ │ │ │ └── module-a/
│ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── package.json
│ │ │ │ ├── app-with-modules/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── module-a/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── package.json
│ │ │ │ ├── app-with-no-module-json/
│ │ │ │ │ ├── .sff/
│ │ │ │ │ │ ├── .other/
│ │ │ │ │ │ │ └── module-d/
│ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ └── module-c/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── module-a/
│ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ └── module-b/
│ │ │ │ │ │ ├── package.json
│ │ │ │ │ │ └── test/
│ │ │ │ │ │ └── fixtures/
│ │ │ │ │ │ └── module-e/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── node_modules/
│ │ │ │ │ │ ├── dep/
│ │ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ └── module-c/
│ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── package.json
│ │ │ │ ├── app-with-no-module-json-duplicated/
│ │ │ │ │ ├── .sff/
│ │ │ │ │ │ ├── .other/
│ │ │ │ │ │ │ └── module-d/
│ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ └── module-c/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── module-a/
│ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ └── module-b/
│ │ │ │ │ │ ├── package.json
│ │ │ │ │ │ └── test/
│ │ │ │ │ │ └── fixtures/
│ │ │ │ │ │ └── module-e/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── node_modules/
│ │ │ │ │ │ └── module-b/
│ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── package.json
│ │ │ │ └── app-with-symlink/
│ │ │ │ ├── app/
│ │ │ │ │ └── module-a/
│ │ │ │ │ └── package.json
│ │ │ │ └── package.json
│ │ │ ├── modules/
│ │ │ │ ├── dev-module-config/
│ │ │ │ │ ├── module.dev.yml
│ │ │ │ │ └── module.yml
│ │ │ │ └── foo-yaml/
│ │ │ │ └── module.yml
│ │ │ └── monorepo/
│ │ │ ├── foo/
│ │ │ │ └── .gitkeep
│ │ │ └── packages/
│ │ │ ├── a/
│ │ │ │ ├── node_modules/
│ │ │ │ │ └── c/
│ │ │ │ │ └── package.json
│ │ │ │ └── package.json
│ │ │ ├── b/
│ │ │ │ └── package.json
│ │ │ └── d/
│ │ │ ├── node_modules/
│ │ │ │ ├── e/
│ │ │ │ │ └── package.json
│ │ │ │ └── f/
│ │ │ │ └── package.json
│ │ │ └── package.json
│ │ ├── tsconfig.json
│ │ └── tsconfig.pub.json
│ ├── controller-decorator/
│ │ ├── CHANGELOG.md
│ │ ├── README.json
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── builder/
│ │ │ │ └── ControllerMetaBuilderFactory.ts
│ │ │ ├── decorator/
│ │ │ │ ├── Acl.ts
│ │ │ │ ├── Context.ts
│ │ │ │ ├── Middleware.ts
│ │ │ │ ├── agent/
│ │ │ │ │ ├── AgentController.ts
│ │ │ │ │ ├── AgentHandler.ts
│ │ │ │ │ └── index.ts
│ │ │ │ ├── http/
│ │ │ │ │ ├── HTTPController.ts
│ │ │ │ │ ├── HTTPMethod.ts
│ │ │ │ │ ├── HTTPParam.ts
│ │ │ │ │ └── Host.ts
│ │ │ │ └── mcp/
│ │ │ │ ├── Extra.ts
│ │ │ │ ├── MCPController.ts
│ │ │ │ ├── MCPPrompt.ts
│ │ │ │ ├── MCPResource.ts
│ │ │ │ └── MCPTool.ts
│ │ │ ├── impl/
│ │ │ │ ├── http/
│ │ │ │ │ ├── HTTPControllerMetaBuilder.ts
│ │ │ │ │ └── HTTPControllerMethodMetaBuilder.ts
│ │ │ │ └── mcp/
│ │ │ │ ├── MCPControllerMetaBuilder.ts
│ │ │ │ ├── MCPControllerPromptMetaBuilder.ts
│ │ │ │ ├── MCPControllerResourceMetaBuilder.ts
│ │ │ │ └── MCPControllerToolMetaBuilder.ts
│ │ │ ├── model/
│ │ │ │ ├── HTTPControllerMeta.ts
│ │ │ │ ├── HTTPCookies.ts
│ │ │ │ ├── HTTPMethodMeta.ts
│ │ │ │ ├── HTTPRequest.ts
│ │ │ │ ├── HTTPResponse.ts
│ │ │ │ ├── MCPControllerMeta.ts
│ │ │ │ ├── MCPPromptMeta.ts
│ │ │ │ ├── MCPResourceMeta.ts
│ │ │ │ ├── MCPToolMeta.ts
│ │ │ │ └── index.ts
│ │ │ └── util/
│ │ │ ├── AgentInfoUtil.ts
│ │ │ ├── ControllerInfoUtil.ts
│ │ │ ├── ControllerMetadataUtil.ts
│ │ │ ├── HTTPInfoUtil.ts
│ │ │ ├── HTTPPriorityUtil.ts
│ │ │ ├── MCPInfoUtil.ts
│ │ │ ├── MethodInfoUtil.ts
│ │ │ └── validator/
│ │ │ ├── ControllerValidator.ts
│ │ │ └── MethodValidator.ts
│ │ ├── test/
│ │ │ ├── Acl.test.ts
│ │ │ ├── AgentController.test.ts
│ │ │ ├── Context.test.ts
│ │ │ ├── MCPMeta.test.ts
│ │ │ ├── Middleware.test.ts
│ │ │ ├── decorators.test.ts
│ │ │ ├── fixtures/
│ │ │ │ ├── AclController.ts
│ │ │ │ ├── AgentFooController.ts
│ │ │ │ ├── AopMiddlewareController.ts
│ │ │ │ ├── ContextController.ts
│ │ │ │ ├── HTTPFooController.ts
│ │ │ │ ├── HTTPPriorityController.ts
│ │ │ │ ├── HostController.ts
│ │ │ │ ├── MCPController.ts
│ │ │ │ └── MiddlewareController.ts
│ │ │ ├── http/
│ │ │ │ ├── HTTPMeta.test.ts
│ │ │ │ └── Host.test.ts
│ │ │ └── util/
│ │ │ ├── ControllerMetadataUtil.test.ts
│ │ │ └── HTTPPriority.test.ts
│ │ ├── tsconfig.json
│ │ └── tsconfig.pub.json
│ ├── core-decorator/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── decorator/
│ │ │ │ ├── ConfigSource.ts
│ │ │ │ ├── ContextProto.ts
│ │ │ │ ├── EggQualifier.ts
│ │ │ │ ├── InitTypeQualifier.ts
│ │ │ │ ├── Inject.ts
│ │ │ │ ├── ModuleQualifier.ts
│ │ │ │ ├── MultiInstanceInfo.ts
│ │ │ │ ├── MultiInstanceProto.ts
│ │ │ │ ├── Prototype.ts
│ │ │ │ └── SingletonProto.ts
│ │ │ └── util/
│ │ │ ├── MetadataUtil.ts
│ │ │ ├── PrototypeUtil.ts
│ │ │ └── QualifierUtil.ts
│ │ ├── test/
│ │ │ ├── decorators.test.ts
│ │ │ ├── fixtures/
│ │ │ │ └── decators/
│ │ │ │ ├── CacheService.ts
│ │ │ │ ├── ChildService.ts
│ │ │ │ ├── ConstructorObject.ts
│ │ │ │ ├── ContextCache.ts
│ │ │ │ ├── FooLogger.ts
│ │ │ │ ├── ICache.ts
│ │ │ │ ├── OtherService.ts
│ │ │ │ ├── QualifierCacheService.ts
│ │ │ │ └── SingletonCache.ts
│ │ │ └── util/
│ │ │ └── MetadataUtil.test.ts
│ │ ├── tsconfig.json
│ │ └── tsconfig.pub.json
│ ├── dal-decorator/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── decorator/
│ │ │ │ ├── Column.ts
│ │ │ │ ├── Dao.ts
│ │ │ │ ├── DataSourceQualifier.ts
│ │ │ │ ├── Index.ts
│ │ │ │ └── Table.ts
│ │ │ ├── model/
│ │ │ │ ├── ColumnModel.ts
│ │ │ │ ├── IndexModel.ts
│ │ │ │ └── TableModel.ts
│ │ │ ├── type/
│ │ │ │ ├── MySql.ts
│ │ │ │ └── Spatial.ts
│ │ │ └── util/
│ │ │ ├── ColumnInfoUtil.ts
│ │ │ ├── DaoInfoUtil.ts
│ │ │ ├── IndexInfoUtil.ts
│ │ │ └── TableInfoUtil.ts
│ │ ├── test/
│ │ │ ├── fixtures/
│ │ │ │ └── modules/
│ │ │ │ └── dal/
│ │ │ │ ├── Foo.ts
│ │ │ │ └── package.json
│ │ │ └── index.test.ts
│ │ ├── tsconfig.json
│ │ └── tsconfig.pub.json
│ ├── dal-runtime/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── BaseSqlMap.ts
│ │ │ ├── CodeGenerator.ts
│ │ │ ├── DaoLoader.ts
│ │ │ ├── DataSource.ts
│ │ │ ├── DatabaseForker.ts
│ │ │ ├── MySqlDataSource.ts
│ │ │ ├── NunjucksConverter.ts
│ │ │ ├── NunjucksUtil.ts
│ │ │ ├── SqlGenerator.ts
│ │ │ ├── SqlMapLoader.ts
│ │ │ ├── SqlUtil.ts
│ │ │ ├── TableModelInstanceBuilder.ts
│ │ │ ├── TableSqlMap.ts
│ │ │ ├── TemplateUtil.ts
│ │ │ └── templates/
│ │ │ ├── base_dao.njk
│ │ │ ├── dao.njk
│ │ │ └── extension.njk
│ │ ├── test/
│ │ │ ├── CodeGenerator.test.ts
│ │ │ ├── DAO.test.ts
│ │ │ ├── DataSource.test.ts
│ │ │ ├── SqlGenerator.test.ts
│ │ │ ├── SqlUtil.test.ts
│ │ │ ├── TableSqlMap.test.ts
│ │ │ └── fixtures/
│ │ │ └── modules/
│ │ │ ├── dal/
│ │ │ │ ├── AutoUpdateTime.ts
│ │ │ │ ├── Foo.ts
│ │ │ │ ├── FooIndexName.ts
│ │ │ │ └── package.json
│ │ │ ├── generate_codes/
│ │ │ │ ├── Foo.ts
│ │ │ │ ├── MultiPrimaryKey.ts
│ │ │ │ └── package.json
│ │ │ ├── generate_codes_not_overwrite_dao/
│ │ │ │ ├── Foo.ts
│ │ │ │ └── package.json
│ │ │ └── generate_codes_to_src/
│ │ │ ├── package.json
│ │ │ └── src/
│ │ │ └── Foo.ts
│ │ ├── tsconfig.json
│ │ └── tsconfig.pub.json
│ ├── dynamic-inject/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── QualifierImplDecoratorUtil.ts
│ │ │ └── QualifierImplUtil.ts
│ │ ├── test/
│ │ │ ├── fixtures/
│ │ │ │ └── modules/
│ │ │ │ ├── base/
│ │ │ │ │ ├── AbstractContextHello.ts
│ │ │ │ │ ├── ContextHello.ts
│ │ │ │ │ └── FooType.ts
│ │ │ │ ├── wrong-enum-module/
│ │ │ │ │ ├── WrongEnumCase.ts
│ │ │ │ │ └── tsconfig.json
│ │ │ │ └── wrong-extends-module/
│ │ │ │ ├── WrongExtendsCase.ts
│ │ │ │ └── tsconfig.json
│ │ │ └── typing.test.ts
│ │ ├── tsconfig.json
│ │ └── tsconfig.pub.json
│ ├── dynamic-inject-runtime/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── EggObjectFactory.ts
│ │ │ ├── EggObjectFactoryObject.ts
│ │ │ └── EggObjectFactoryPrototype.ts
│ │ ├── test/
│ │ │ ├── fixtures/
│ │ │ │ └── modules/
│ │ │ │ └── dynamic-inject-module/
│ │ │ │ ├── AbstractContextHello.ts
│ │ │ │ ├── AbstractSingletonHello.ts
│ │ │ │ ├── FooType.ts
│ │ │ │ ├── HelloService.ts
│ │ │ │ ├── decorator/
│ │ │ │ │ ├── ContextHello.ts
│ │ │ │ │ └── SingletonHello.ts
│ │ │ │ ├── impl/
│ │ │ │ │ ├── BarContextHello.ts
│ │ │ │ │ ├── BarSingletonHello.ts
│ │ │ │ │ ├── FooContextHello.ts
│ │ │ │ │ └── FooSingletonHello.ts
│ │ │ │ └── package.json
│ │ │ └── index.test.ts
│ │ ├── tsconfig.json
│ │ └── tsconfig.pub.json
│ ├── eventbus-decorator/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── Event.ts
│ │ │ ├── EventBus.ts
│ │ │ ├── EventContext.ts
│ │ │ ├── EventInfoUtil.ts
│ │ │ └── type.d.ts
│ │ ├── test/
│ │ │ ├── Event.test.ts
│ │ │ └── fixtures/
│ │ │ ├── empty-handle.ts
│ │ │ ├── event-handle-with-context.ts
│ │ │ ├── multiple-events-handle.ts
│ │ │ ├── right-event-handle.ts
│ │ │ └── wrong-event-handle.ts
│ │ ├── tsconfig.json
│ │ └── tsconfig.pub.json
│ ├── eventbus-runtime/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── EventContextFactory.ts
│ │ │ ├── EventHandlerFactory.ts
│ │ │ └── SingletonEventBus.ts
│ │ ├── test/
│ │ │ ├── EventBus.test.ts
│ │ │ └── fixtures/
│ │ │ └── modules/
│ │ │ ├── event/
│ │ │ │ ├── HelloEvent.ts
│ │ │ │ ├── MultiEvent.ts
│ │ │ │ ├── MultiEventWithContext.ts
│ │ │ │ └── package.json
│ │ │ └── mock-module/
│ │ │ ├── MockLogger.ts
│ │ │ └── package.json
│ │ ├── tsconfig.json
│ │ └── tsconfig.pub.json
│ ├── langchain-decorator/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── builder/
│ │ │ │ ├── BoundModelMetaBuilder.ts
│ │ │ │ ├── GraphEdgeMetaBuilder.ts
│ │ │ │ ├── GraphMetaBuilder.ts
│ │ │ │ ├── GraphNodeMetaBuilder.ts
│ │ │ │ └── GraphToolMetaBuilder.ts
│ │ │ ├── decorator/
│ │ │ │ ├── BoundModel.ts
│ │ │ │ ├── Graph.ts
│ │ │ │ ├── GraphEdge.ts
│ │ │ │ ├── GraphNode.ts
│ │ │ │ └── GraphTool.ts
│ │ │ ├── model/
│ │ │ │ ├── BoundModelMetadata.ts
│ │ │ │ ├── GraphEdgeMetadata.ts
│ │ │ │ ├── GraphMetadata.ts
│ │ │ │ ├── GraphNodeMetadata.ts
│ │ │ │ └── GraphToolMetadata.ts
│ │ │ ├── qualifier/
│ │ │ │ ├── ChatCheckpointSaverQualifier.ts
│ │ │ │ └── ChatModelQualifier.ts
│ │ │ ├── type/
│ │ │ │ └── metadataKey.ts
│ │ │ └── util/
│ │ │ ├── BoundModelInfoUtil.ts
│ │ │ ├── GraphEdgeInfoUtil.ts
│ │ │ ├── GraphInfoUtil.ts
│ │ │ ├── GraphNodeInfoUtil.ts
│ │ │ ├── GraphToolInfoUtil.ts
│ │ │ └── index.ts
│ │ ├── test/
│ │ │ ├── fixtures/
│ │ │ │ └── modules/
│ │ │ │ ├── langchain/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── package.json
│ │ │ │ └── langgraph/
│ │ │ │ └── Graph.ts
│ │ │ ├── graph.test.ts
│ │ │ ├── index.test.ts
│ │ │ ├── package.json
│ │ │ └── tsconfig.json
│ │ ├── tsconfig.json
│ │ └── tsconfig.pub.json
│ ├── lifecycle/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── IdenticalObject.ts
│ │ │ ├── LifycycleUtil.ts
│ │ │ └── decorator/
│ │ │ └── index.ts
│ │ ├── test/
│ │ │ └── IdenticalObject.test.ts
│ │ ├── tsconfig.json
│ │ └── tsconfig.pub.json
│ ├── loader/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── LoaderFactory.ts
│ │ │ ├── LoaderUtil.ts
│ │ │ └── impl/
│ │ │ └── ModuleLoader.ts
│ │ ├── test/
│ │ │ ├── Loader.test.ts
│ │ │ └── fixtures/
│ │ │ └── modules/
│ │ │ ├── loader-failed/
│ │ │ │ ├── AppRepo.ts
│ │ │ │ └── package.json
│ │ │ ├── module-for-loader/
│ │ │ │ ├── AppRepo.ts
│ │ │ │ ├── SprintRepo.ts
│ │ │ │ ├── UserRepo.ts
│ │ │ │ └── package.json
│ │ │ ├── module-with-extra/
│ │ │ │ ├── .dist/
│ │ │ │ │ └── ThrowError.ts
│ │ │ │ ├── AppRepo.ts
│ │ │ │ ├── extra/
│ │ │ │ │ └── UserRepo.ts
│ │ │ │ └── package.json
│ │ │ └── module-with-test/
│ │ │ ├── .gitignore
│ │ │ ├── AppRepo.ts
│ │ │ ├── coverage/
│ │ │ │ └── fixtures/
│ │ │ │ └── UserRepo.ts
│ │ │ ├── package.json
│ │ │ └── test/
│ │ │ └── fixtures/
│ │ │ └── UserRepo.ts
│ │ ├── tsconfig.json
│ │ └── tsconfig.pub.json
│ ├── mcp-client/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── HeaderUtil.ts
│ │ │ ├── HttpMCPClient.ts
│ │ │ └── MCPClientQualifier.ts
│ │ ├── test/
│ │ │ ├── HttpMCPClient.test.ts
│ │ │ └── fixtures/
│ │ │ ├── sse-mcp-server/
│ │ │ │ └── http.ts
│ │ │ └── streamable-mcp-server/
│ │ │ └── http.ts
│ │ ├── tsconfig.json
│ │ ├── tsconfig.pub.json
│ │ └── typings/
│ │ └── index.d.ts
│ ├── metadata/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── errors.ts
│ │ │ ├── factory/
│ │ │ │ ├── EggPrototypeCreatorFactory.ts
│ │ │ │ ├── EggPrototypeFactory.ts
│ │ │ │ └── LoadUnitFactory.ts
│ │ │ ├── impl/
│ │ │ │ ├── EggPrototypeBuilder.ts
│ │ │ │ ├── EggPrototypeImpl.ts
│ │ │ │ ├── LoadUnitMultiInstanceProtoHook.ts
│ │ │ │ └── ModuleLoadUnit.ts
│ │ │ ├── model/
│ │ │ │ ├── AppGraph.ts
│ │ │ │ ├── EggPrototype.ts
│ │ │ │ ├── LoadUnit.ts
│ │ │ │ ├── ModuleDescriptor.ts
│ │ │ │ ├── ProtoDescriptor/
│ │ │ │ │ ├── AbstractProtoDescriptor.ts
│ │ │ │ │ └── ClassProtoDescriptor.ts
│ │ │ │ ├── ProtoDescriptorHelper.ts
│ │ │ │ └── graph/
│ │ │ │ ├── GlobalGraph.ts
│ │ │ │ ├── GlobalModuleNode.ts
│ │ │ │ ├── GlobalModuleNodeBuilder.ts
│ │ │ │ ├── ProtoNode.ts
│ │ │ │ └── ProtoSelector.ts
│ │ │ └── util/
│ │ │ └── ClassUtil.ts
│ │ ├── test/
│ │ │ ├── AppGraph.test.ts
│ │ │ ├── GlobalGraph.test.ts
│ │ │ ├── LoadUnit.test.ts
│ │ │ ├── ModuleGraph.test.ts
│ │ │ └── fixtures/
│ │ │ ├── LoaderUtil.ts
│ │ │ ├── TestLoader.ts
│ │ │ └── modules/
│ │ │ ├── app-graph-modules/
│ │ │ │ ├── root/
│ │ │ │ │ ├── Root.ts
│ │ │ │ │ ├── RootConstructor.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── unused/
│ │ │ │ │ ├── Unused.ts
│ │ │ │ │ └── package.json
│ │ │ │ └── used/
│ │ │ │ ├── Used.ts
│ │ │ │ └── package.json
│ │ │ ├── app-multi-inject-multi/
│ │ │ │ ├── app/
│ │ │ │ │ └── modules/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── App.ts
│ │ │ │ │ │ ├── module.yml
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── app2/
│ │ │ │ │ │ ├── App.ts
│ │ │ │ │ │ ├── module.yml
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── bar/
│ │ │ │ │ │ ├── BizManager.ts
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── foo/
│ │ │ │ │ ├── Secret.ts
│ │ │ │ │ └── package.json
│ │ │ │ └── package.json
│ │ │ ├── extends-constructor-module/
│ │ │ │ ├── Base.ts
│ │ │ │ └── package.json
│ │ │ ├── extends-module/
│ │ │ │ ├── Base.ts
│ │ │ │ └── package.json
│ │ │ ├── incompatible-proto-inject/
│ │ │ │ ├── package.json
│ │ │ │ └── test.ts
│ │ │ ├── invalid-multimodule/
│ │ │ │ ├── invalidService.ts
│ │ │ │ ├── invalidService2.ts
│ │ │ │ ├── package.json
│ │ │ │ └── test.ts
│ │ │ ├── invalidate-module/
│ │ │ │ ├── InvalidateService.ts
│ │ │ │ └── package.json
│ │ │ ├── load-unit/
│ │ │ │ ├── AppRepo.ts
│ │ │ │ ├── SprintRepo.ts
│ │ │ │ ├── UserRepo.ts
│ │ │ │ └── package.json
│ │ │ ├── multi-callback-instance-module/
│ │ │ │ ├── MultiInstance.ts
│ │ │ │ ├── module.yml
│ │ │ │ └── package.json
│ │ │ ├── multi-instance-module/
│ │ │ │ ├── MultiInstance.ts
│ │ │ │ └── package.json
│ │ │ ├── optional-inject-module/
│ │ │ │ ├── OptionalInjectService.ts
│ │ │ │ └── package.json
│ │ │ ├── recursive-load-unit/
│ │ │ │ ├── AppRepo.ts
│ │ │ │ ├── SprintRepo.ts
│ │ │ │ ├── UserRepo.ts
│ │ │ │ └── package.json
│ │ │ └── same-name-object/
│ │ │ ├── AppCache.ts
│ │ │ ├── ContextAppCache.ts
│ │ │ ├── CountService.ts
│ │ │ ├── SingletonAppCache.ts
│ │ │ └── package.json
│ │ ├── tsconfig.json
│ │ └── tsconfig.pub.json
│ ├── orm-decorator/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── builder/
│ │ │ │ ├── AttributeMetaBuilder.ts
│ │ │ │ ├── IndexMetaBuilder.ts
│ │ │ │ └── ModelMetaBuilder.ts
│ │ │ ├── decorator/
│ │ │ │ ├── Attribute.ts
│ │ │ │ ├── DataSource.ts
│ │ │ │ ├── Index.ts
│ │ │ │ └── Model.ts
│ │ │ ├── model/
│ │ │ │ ├── AttributeMeta.ts
│ │ │ │ ├── IndexMeta.ts
│ │ │ │ └── ModelMetadata.ts
│ │ │ └── util/
│ │ │ ├── ModelInfoUtil.ts
│ │ │ ├── ModelMetadataUtil.ts
│ │ │ └── NameUtil.ts
│ │ ├── test/
│ │ │ ├── builder/
│ │ │ │ ├── AttributeMetaBuilder.test.ts
│ │ │ │ ├── IndexMetaBuilder.test.ts
│ │ │ │ └── ModelMetaBuilder.test.ts
│ │ │ ├── decorator.test.ts
│ │ │ └── fixtures/
│ │ │ ├── AttributeModel.ts
│ │ │ ├── DefaultAttributeModel.ts
│ │ │ ├── DefaultIndexModel.ts
│ │ │ ├── Foo.ts
│ │ │ ├── IndexModel.ts
│ │ │ └── InvalidateIndexModel.ts
│ │ ├── tsconfig.json
│ │ └── tsconfig.pub.json
│ ├── runtime/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── factory/
│ │ │ │ ├── EggContainerFactory.ts
│ │ │ │ ├── EggObjectFactory.ts
│ │ │ │ └── LoadUnitInstanceFactory.ts
│ │ │ ├── impl/
│ │ │ │ ├── ContextInitiator.ts
│ │ │ │ ├── ContextObjectGraph.ts
│ │ │ │ ├── EggAlwaysNewObjectContainer.ts
│ │ │ │ ├── EggObjectImpl.ts
│ │ │ │ ├── EggObjectUtil.ts
│ │ │ │ └── ModuleLoadUnitInstance.ts
│ │ │ └── model/
│ │ │ ├── AbstractEggContext.ts
│ │ │ ├── ContextHandler.ts
│ │ │ ├── EggContext.ts
│ │ │ ├── EggObject.ts
│ │ │ └── LoadUnitInstance.ts
│ │ ├── test/
│ │ │ ├── EggObject.test.ts
│ │ │ ├── EggObjectUtil.test.ts
│ │ │ ├── LoadUnitInstance.test.ts
│ │ │ ├── QualifierLoadUnitInstance.test.ts
│ │ │ ├── fixtures/
│ │ │ │ ├── EggContextStorage.ts
│ │ │ │ ├── EggTestContext.ts
│ │ │ │ └── modules/
│ │ │ │ ├── extends-module/
│ │ │ │ │ ├── Base.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── init-type-qualifier-module/
│ │ │ │ │ ├── Cache.ts
│ │ │ │ │ ├── CacheService.ts
│ │ │ │ │ ├── ContextCache.ts
│ │ │ │ │ ├── SingletonCache.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── inject-constructor-context-to-singleton/
│ │ │ │ │ ├── object.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── inject-context-to-singleton/
│ │ │ │ │ ├── object.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── lifecycle-hook/
│ │ │ │ │ ├── object.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── module-for-load-unit-instance/
│ │ │ │ │ ├── AppCache.ts
│ │ │ │ │ ├── CountController.ts
│ │ │ │ │ ├── CountService.ts
│ │ │ │ │ ├── TempObj.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── multi-instance-module/
│ │ │ │ │ ├── MultiInstance.ts
│ │ │ │ │ ├── MultiInstanceConstructor.ts
│ │ │ │ │ └── package.json
│ │ │ │ └── multi-module/
│ │ │ │ ├── multi-module-common/
│ │ │ │ │ ├── model/
│ │ │ │ │ │ └── App.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── multi-module-repo/
│ │ │ │ │ ├── AppRepo.ts
│ │ │ │ │ ├── PersistenceService.ts
│ │ │ │ │ └── package.json
│ │ │ │ └── multi-module-service/
│ │ │ │ ├── AppService.ts
│ │ │ │ └── package.json
│ │ │ └── util.ts
│ │ ├── tsconfig.json
│ │ └── tsconfig.pub.json
│ ├── schedule-decorator/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── builder/
│ │ │ │ └── ScheduleMetaBuilder.ts
│ │ │ ├── decorator/
│ │ │ │ └── Schedule.ts
│ │ │ ├── model/
│ │ │ │ └── ScheduleMetadata.ts
│ │ │ └── util/
│ │ │ ├── ScheduleInfoUtil.ts
│ │ │ └── ScheduleMetadataUtil.ts
│ │ ├── tsconfig.json
│ │ └── tsconfig.pub.json
│ ├── standalone-decorator/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── decorator/
│ │ │ │ └── Runner.ts
│ │ │ ├── event/
│ │ │ │ └── EventHandler.ts
│ │ │ ├── typing.ts
│ │ │ └── util/
│ │ │ └── StandaloneUtil.ts
│ │ ├── tsconfig.json
│ │ └── tsconfig.pub.json
│ ├── tegg/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── agent.ts
│ │ ├── ajv.ts
│ │ ├── aop.ts
│ │ ├── dal.ts
│ │ ├── helper.ts
│ │ ├── index.ts
│ │ ├── orm.ts
│ │ ├── package.json
│ │ ├── schedule.ts
│ │ ├── standalone.ts
│ │ ├── test/
│ │ │ ├── helper.test.ts
│ │ │ └── index.test.ts
│ │ ├── transaction.ts
│ │ ├── tsconfig.json
│ │ ├── tsconfig.pub.json
│ │ └── zod.ts
│ ├── test-util/
│ │ ├── CHANGELOG.md
│ │ ├── CoreTestHelper.ts
│ │ ├── EggTestContext.ts
│ │ ├── LoaderUtil.ts
│ │ ├── StandaloneTestUtil.ts
│ │ ├── TestLoader.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── tsconfig.json
│ │ └── tsconfig.pub.json
│ ├── transaction-decorator/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── builder/
│ │ │ │ └── TransactionMetaBuilder.ts
│ │ │ ├── decorator/
│ │ │ │ └── Transactional.ts
│ │ │ └── util/
│ │ │ └── TransactionMetadataUtil.ts
│ │ ├── test/
│ │ │ ├── builder/
│ │ │ │ └── TransactionMetaBuilder.test.ts
│ │ │ └── fixtures/
│ │ │ └── transaction.ts
│ │ ├── tsconfig.json
│ │ └── tsconfig.pub.json
│ ├── types/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── agent-runtime/
│ │ │ ├── AgentMessage.ts
│ │ │ ├── AgentRuntime.ts
│ │ │ ├── AgentStore.ts
│ │ │ ├── ObjectStorageClient.ts
│ │ │ ├── errors.ts
│ │ │ └── index.ts
│ │ ├── aop/
│ │ │ ├── Advice.ts
│ │ │ ├── Aspect.ts
│ │ │ ├── Crosscut.ts
│ │ │ ├── Pointcut.ts
│ │ │ └── index.ts
│ │ ├── common/
│ │ │ ├── Graph.ts
│ │ │ ├── Logger.ts
│ │ │ ├── ModuleConfig.ts
│ │ │ ├── RuntimeConfig.ts
│ │ │ └── index.ts
│ │ ├── controller-decorator/
│ │ │ ├── HTTPController.ts
│ │ │ ├── HTTPMethod.ts
│ │ │ ├── HTTPParam.ts
│ │ │ ├── MCPController.ts
│ │ │ ├── MCPPromptParams.ts
│ │ │ ├── MCPResourceParams.ts
│ │ │ ├── MCPToolParams.ts
│ │ │ ├── MetadataKey.ts
│ │ │ ├── builder.ts
│ │ │ ├── index.ts
│ │ │ └── model/
│ │ │ ├── ControllerMetadata.ts
│ │ │ ├── MethodMeta.ts
│ │ │ └── types.ts
│ │ ├── core-decorator/
│ │ │ ├── ContextProto.ts
│ │ │ ├── Inject.ts
│ │ │ ├── Metadata.ts
│ │ │ ├── MultiInstanceProto.ts
│ │ │ ├── Prototype.ts
│ │ │ ├── SingletonProto.ts
│ │ │ ├── enum/
│ │ │ │ ├── AccessLevel.ts
│ │ │ │ ├── EggType.ts
│ │ │ │ ├── InjectType.ts
│ │ │ │ ├── MultiInstanceType.ts
│ │ │ │ ├── ObjectInitType.ts
│ │ │ │ └── Qualifier.ts
│ │ │ ├── index.ts
│ │ │ └── model/
│ │ │ ├── EggMultiInstancePrototypeInfo.ts
│ │ │ ├── EggPrototypeInfo.ts
│ │ │ ├── InjectConstructorInfo.ts
│ │ │ ├── InjectObjectInfo.ts
│ │ │ └── QualifierInfo.ts
│ │ ├── dal/
│ │ │ ├── Qualifier.ts
│ │ │ ├── decorator/
│ │ │ │ ├── Column.ts
│ │ │ │ ├── DataSourceQualifier.ts
│ │ │ │ ├── Index.ts
│ │ │ │ └── Table.ts
│ │ │ ├── enum/
│ │ │ │ ├── ColumnFormat.ts
│ │ │ │ ├── ColumnType.ts
│ │ │ │ ├── CompressionType.ts
│ │ │ │ ├── IndexStoreType.ts
│ │ │ │ ├── IndexType.ts
│ │ │ │ ├── InsertMethod.ts
│ │ │ │ ├── RowFormat.ts
│ │ │ │ ├── SqlType.ts
│ │ │ │ └── Templates.ts
│ │ │ ├── index.ts
│ │ │ └── type/
│ │ │ ├── BaseDao.ts
│ │ │ ├── CodeGenerator.ts
│ │ │ ├── ColumnTsType.ts
│ │ │ ├── DateSource.ts
│ │ │ ├── Spatial.ts
│ │ │ └── SqlMap.ts
│ │ ├── dynamic-inject.ts
│ │ ├── index.ts
│ │ ├── lifecycle/
│ │ │ ├── EggObjectLifecycle.ts
│ │ │ ├── IdenticalObject.ts
│ │ │ ├── LifecycleHook.ts
│ │ │ └── index.ts
│ │ ├── metadata/
│ │ │ ├── enum/
│ │ │ │ └── ProtoDescriptorType.ts
│ │ │ ├── errors.ts
│ │ │ ├── index.ts
│ │ │ └── model/
│ │ │ ├── EggPrototype.ts
│ │ │ ├── LoadUnit.ts
│ │ │ ├── Loader.ts
│ │ │ └── ProtoDescriptor.ts
│ │ ├── orm.ts
│ │ ├── package.json
│ │ ├── runtime/
│ │ │ ├── Factory.ts
│ │ │ ├── index.ts
│ │ │ └── model/
│ │ │ ├── EggContainer.ts
│ │ │ ├── EggContext.ts
│ │ │ ├── EggObject.ts
│ │ │ └── LoadUnitInstance.ts
│ │ ├── schedule.ts
│ │ ├── standalone/
│ │ │ ├── ServiceWorkerContext.ts
│ │ │ ├── fetch.ts
│ │ │ └── index.ts
│ │ ├── transaction.ts
│ │ ├── tsconfig.json
│ │ └── tsconfig.pub.json
│ └── vitest/
│ ├── CHANGELOG.md
│ ├── README.md
│ ├── index.ts
│ ├── package.json
│ ├── runner.ts
│ ├── src/
│ │ ├── index.ts
│ │ ├── runner.ts
│ │ └── shared.ts
│ ├── test/
│ │ ├── fixture_app.test.ts
│ │ ├── fixtures/
│ │ │ └── apps/
│ │ │ └── demo-app/
│ │ │ ├── config/
│ │ │ │ └── module.json
│ │ │ ├── modules/
│ │ │ │ └── demo-module/
│ │ │ │ ├── HelloService.ts
│ │ │ │ └── package.json
│ │ │ └── package.json
│ │ ├── get_app_throw.test.ts
│ │ ├── get_store_restore.test.ts
│ │ ├── hooks.test.ts
│ │ └── setup.ts
│ ├── tsconfig.json
│ ├── tsconfig.pub.json
│ └── vitest.config.ts
├── lerna.json
├── package.json
├── plugin/
│ ├── ajv/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── lib/
│ │ │ └── Ajv.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── ajv.test.ts
│ │ │ └── fixtures/
│ │ │ └── apps/
│ │ │ └── ajv-app/
│ │ │ ├── config/
│ │ │ │ ├── config.default.js
│ │ │ │ ├── module.json
│ │ │ │ └── plugin.js
│ │ │ ├── modules/
│ │ │ │ └── demo/
│ │ │ │ ├── FooController.ts
│ │ │ │ ├── module.yml
│ │ │ │ └── package.json
│ │ │ └── package.json
│ │ ├── tsconfig.json
│ │ ├── tsconfig.pub.json
│ │ └── typings/
│ │ └── index.d.ts
│ ├── aop/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── app.ts
│ │ ├── lib/
│ │ │ └── AopContextHook.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── aop.test.ts
│ │ │ └── fixtures/
│ │ │ └── apps/
│ │ │ └── aop-app/
│ │ │ ├── app/
│ │ │ │ ├── controller/
│ │ │ │ │ └── app.ts
│ │ │ │ ├── router.ts
│ │ │ │ └── typings/
│ │ │ │ └── index.d.ts
│ │ │ ├── config/
│ │ │ │ ├── config.default.js
│ │ │ │ ├── module.json
│ │ │ │ └── plugin.js
│ │ │ ├── modules/
│ │ │ │ └── aop-module/
│ │ │ │ ├── Hello.ts
│ │ │ │ └── package.json
│ │ │ └── package.json
│ │ ├── tsconfig.json
│ │ ├── tsconfig.pub.json
│ │ └── typings/
│ │ └── index.d.ts
│ ├── common/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── tsconfig.json
│ │ └── tsconfig.pub.json
│ ├── config/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── agent.ts
│ │ ├── app.ts
│ │ ├── lib/
│ │ │ └── ModuleScanner.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── DuplicateOptionalModule.test.ts
│ │ │ ├── ReadModule.test.ts
│ │ │ └── fixtures/
│ │ │ └── apps/
│ │ │ ├── app-with-modules/
│ │ │ │ ├── app/
│ │ │ │ │ └── module-a/
│ │ │ │ │ └── package.json
│ │ │ │ ├── config/
│ │ │ │ │ └── config.default.ts
│ │ │ │ └── package.json
│ │ │ └── duplicate-optional-module/
│ │ │ ├── config/
│ │ │ │ ├── config.default.js
│ │ │ │ └── plugin.js
│ │ │ ├── node_modules/
│ │ │ │ ├── foo/
│ │ │ │ │ └── package.json
│ │ │ │ ├── unused/
│ │ │ │ │ ├── Unused.js
│ │ │ │ │ └── package.json
│ │ │ │ └── used/
│ │ │ │ ├── Used.js
│ │ │ │ └── package.json
│ │ │ └── package.json
│ │ ├── tsconfig.json
│ │ ├── tsconfig.pub.json
│ │ └── typings/
│ │ └── index.d.ts
│ ├── controller/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── app/
│ │ │ └── middleware/
│ │ │ ├── mcp_body_middleware.ts
│ │ │ └── tegg_root_proto.ts
│ │ ├── app.ts
│ │ ├── config/
│ │ │ └── config.default.ts
│ │ ├── lib/
│ │ │ ├── AgentControllerObject.ts
│ │ │ ├── AgentControllerProto.ts
│ │ │ ├── AppLoadUnitControllerHook.ts
│ │ │ ├── ControllerLoadUnit.ts
│ │ │ ├── ControllerLoadUnitHandler.ts
│ │ │ ├── ControllerLoadUnitInstance.ts
│ │ │ ├── ControllerMetadataManager.ts
│ │ │ ├── ControllerRegister.ts
│ │ │ ├── ControllerRegisterFactory.ts
│ │ │ ├── EggControllerLoader.ts
│ │ │ ├── EggControllerPrototypeHook.ts
│ │ │ ├── MiddlewareGraphHook.ts
│ │ │ ├── RootProtoManager.ts
│ │ │ ├── errors.ts
│ │ │ └── impl/
│ │ │ ├── http/
│ │ │ │ ├── Acl.ts
│ │ │ │ ├── HTTPControllerRegister.ts
│ │ │ │ ├── HTTPMethodRegister.ts
│ │ │ │ └── Req.ts
│ │ │ └── mcp/
│ │ │ ├── MCPConfig.ts
│ │ │ ├── MCPControllerRegister.ts
│ │ │ └── MCPServerHelper.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── fixtures/
│ │ │ │ └── apps/
│ │ │ │ ├── acl-app/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ └── AclController.ts
│ │ │ │ │ │ └── extend/
│ │ │ │ │ │ └── context.ts
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── controller-app/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ ├── AopMiddlewareController.ts
│ │ │ │ │ │ │ ├── AppController.ts
│ │ │ │ │ │ │ ├── MiddlewareController.ts
│ │ │ │ │ │ │ ├── ParamController.ts
│ │ │ │ │ │ │ ├── PriorityController.ts
│ │ │ │ │ │ │ ├── RedirectController.ts
│ │ │ │ │ │ │ ├── TimeoutController.ts
│ │ │ │ │ │ │ └── ViewController.ts
│ │ │ │ │ │ └── middleware/
│ │ │ │ │ │ ├── call_module.ts
│ │ │ │ │ │ ├── count_mw.ts
│ │ │ │ │ │ └── log_mw.ts
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ ├── module.json
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ ├── modules/
│ │ │ │ │ │ ├── multi-module-common/
│ │ │ │ │ │ │ ├── advice/
│ │ │ │ │ │ │ │ ├── BarMethodAdvice.ts
│ │ │ │ │ │ │ │ ├── CountAdvice.ts
│ │ │ │ │ │ │ │ ├── FooControllerAdvice.ts
│ │ │ │ │ │ │ │ └── FooMethodAdvice.ts
│ │ │ │ │ │ │ ├── model/
│ │ │ │ │ │ │ │ └── App.ts
│ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ ├── multi-module-repo/
│ │ │ │ │ │ │ ├── AppRepo.ts
│ │ │ │ │ │ │ ├── PersistenceService.ts
│ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ └── multi-module-service/
│ │ │ │ │ │ ├── AppService.ts
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── package.json
│ │ │ │ ├── duplicate-controller-name-app/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── controller/
│ │ │ │ │ │ ├── AppController.ts
│ │ │ │ │ │ └── AppController2.ts
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── duplicate-proto-name-app/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── controller/
│ │ │ │ │ │ ├── AppController.ts
│ │ │ │ │ │ └── AppController2.ts
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── host-controller-app/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── controller/
│ │ │ │ │ │ ├── AppController.ts
│ │ │ │ │ │ ├── AppController2.ts
│ │ │ │ │ │ ├── MultiHostController.ts
│ │ │ │ │ │ └── MultiMethodHostController.ts
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── http-conflict-app/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── controller/
│ │ │ │ │ │ ├── AppController.ts
│ │ │ │ │ │ ├── HostController1.ts
│ │ │ │ │ │ └── HostController2.ts
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── http-inject-app/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ └── AppController.ts
│ │ │ │ │ │ └── middleware/
│ │ │ │ │ │ ├── call_module.ts
│ │ │ │ │ │ ├── count_mw.ts
│ │ │ │ │ │ └── log_mw.ts
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ ├── module.json
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── mcp-app/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ ├── AppController.ts
│ │ │ │ │ │ │ ├── McpController.ts
│ │ │ │ │ │ │ ├── TestAppController.ts
│ │ │ │ │ │ │ └── TestController.ts
│ │ │ │ │ │ └── middleware/
│ │ │ │ │ │ └── tracelog.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ ├── hook-plugin/
│ │ │ │ │ │ ├── app.ts
│ │ │ │ │ │ ├── lib/
│ │ │ │ │ │ │ └── MCPControllerHook.ts
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── package.json
│ │ │ │ ├── middleware-graph-app/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── router.ts
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ ├── module.json
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ ├── modules/
│ │ │ │ │ │ ├── advice-module/
│ │ │ │ │ │ │ ├── advice/
│ │ │ │ │ │ │ │ ├── AnotherAdvice.ts
│ │ │ │ │ │ │ │ └── TestAdvice.ts
│ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ └── controller-module/
│ │ │ │ │ │ ├── TestController.ts
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── package.json
│ │ │ │ ├── module-app/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ └── AppController2.ts
│ │ │ │ │ │ └── router.ts
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ ├── module.json
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ ├── modules/
│ │ │ │ │ │ ├── foo-module/
│ │ │ │ │ │ │ ├── AppService.ts
│ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ └── http-module/
│ │ │ │ │ │ ├── AppController.ts
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── package.json
│ │ │ │ └── proto-poisoning/
│ │ │ │ ├── app/
│ │ │ │ │ └── controller/
│ │ │ │ │ └── HelloController.ts
│ │ │ │ ├── config/
│ │ │ │ │ ├── config.default.js
│ │ │ │ │ └── plugin.js
│ │ │ │ └── package.json
│ │ │ ├── http/
│ │ │ │ ├── acl.test.ts
│ │ │ │ ├── decorator.test.ts
│ │ │ │ ├── edgecase.test.ts
│ │ │ │ ├── host.test.ts
│ │ │ │ ├── middleware-aop.test.ts
│ │ │ │ ├── middleware.test.ts
│ │ │ │ ├── module.test.ts
│ │ │ │ ├── params.test.ts
│ │ │ │ ├── priority.test.ts
│ │ │ │ ├── proto-poisoning.test.ts
│ │ │ │ └── request.test.ts
│ │ │ ├── lib/
│ │ │ │ ├── AgentControllerProto.test.ts
│ │ │ │ ├── ControllerMetaManager.test.ts
│ │ │ │ ├── EggControllerLoader.test.ts
│ │ │ │ └── HTTPMethodRegister.test.ts
│ │ │ └── mcp/
│ │ │ ├── helper.test.ts
│ │ │ ├── mcp.test.ts
│ │ │ └── mcpCluster.test.ts
│ │ ├── tsconfig.json
│ │ ├── tsconfig.pub.json
│ │ └── typings/
│ │ └── index.d.ts
│ ├── dal/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── app/
│ │ │ └── extend/
│ │ │ └── application.ts
│ │ ├── app.ts
│ │ ├── index.ts
│ │ ├── lib/
│ │ │ ├── DalModuleLoadUnitHook.ts
│ │ │ ├── DalTableEggPrototypeHook.ts
│ │ │ ├── DataSource.ts
│ │ │ ├── MysqlDataSourceManager.ts
│ │ │ ├── SqlMapManager.ts
│ │ │ ├── TableModelManager.ts
│ │ │ ├── TransactionPrototypeHook.ts
│ │ │ └── TransactionalAOP.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── dal.test.ts
│ │ │ ├── fixtures/
│ │ │ │ └── apps/
│ │ │ │ └── dal-app/
│ │ │ │ ├── config/
│ │ │ │ │ ├── config.default.js
│ │ │ │ │ ├── module.json
│ │ │ │ │ └── plugin.js
│ │ │ │ ├── modules/
│ │ │ │ │ └── dal/
│ │ │ │ │ ├── Foo.ts
│ │ │ │ │ ├── FooService.ts
│ │ │ │ │ ├── dal/
│ │ │ │ │ │ ├── dao/
│ │ │ │ │ │ │ ├── FooDAO.ts
│ │ │ │ │ │ │ └── base/
│ │ │ │ │ │ │ └── BaseFooDAO.ts
│ │ │ │ │ │ ├── extension/
│ │ │ │ │ │ │ └── FooExtension.ts
│ │ │ │ │ │ └── structure/
│ │ │ │ │ │ ├── Foo.json
│ │ │ │ │ │ └── Foo.sql
│ │ │ │ │ ├── module.yml
│ │ │ │ │ └── package.json
│ │ │ │ └── package.json
│ │ │ └── transaction.test.ts
│ │ ├── tsconfig.json
│ │ ├── tsconfig.pub.json
│ │ └── typings/
│ │ └── index.d.ts
│ ├── dns-cache/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── app.ts
│ │ ├── config/
│ │ │ └── config.default.ts
│ │ ├── lib/
│ │ │ ├── DnsResolver.ts
│ │ │ └── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── dns_cache_lookup.test.ts
│ │ │ ├── dns_cache_lookup_http_next.test.ts
│ │ │ ├── dns_cache_resolve.test.ts
│ │ │ ├── fixtures/
│ │ │ │ └── apps/
│ │ │ │ ├── dns_cache_lookup/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ └── home.js
│ │ │ │ │ │ └── router.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── config.js
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── dns_cache_lookup_http_next/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ └── home.js
│ │ │ │ │ │ └── router.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── config.js
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ └── package.json
│ │ │ │ └── dns_cache_resolve/
│ │ │ │ ├── app/
│ │ │ │ │ ├── controller/
│ │ │ │ │ │ └── home.js
│ │ │ │ │ └── router.js
│ │ │ │ ├── config/
│ │ │ │ │ ├── config.js
│ │ │ │ │ └── plugin.js
│ │ │ │ └── package.json
│ │ │ └── utils.ts
│ │ ├── tsconfig.json
│ │ ├── tsconfig.pub.json
│ │ └── typings/
│ │ └── index.d.ts
│ ├── eventbus/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── app/
│ │ │ └── extend/
│ │ │ ├── application.unittest.ts
│ │ │ └── context.ts
│ │ ├── app.ts
│ │ ├── lib/
│ │ │ ├── EggContextEventBus.ts
│ │ │ ├── EggEventContext.ts
│ │ │ ├── EventHandlerProtoManager.ts
│ │ │ ├── EventbusLoadUnitHook.ts
│ │ │ └── EventbusProtoHook.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── eventbus.test.ts
│ │ │ └── fixtures/
│ │ │ └── apps/
│ │ │ └── event-app/
│ │ │ ├── app/
│ │ │ │ └── event-module/
│ │ │ │ ├── HelloLogger.ts
│ │ │ │ ├── HelloService.ts
│ │ │ │ ├── MultiEventHandler.ts
│ │ │ │ └── package.json
│ │ │ ├── config/
│ │ │ │ ├── config.default.js
│ │ │ │ └── plugin.js
│ │ │ └── package.json
│ │ ├── tsconfig.json
│ │ ├── tsconfig.pub.json
│ │ └── typings/
│ │ └── index.d.ts
│ ├── langchain/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── app.ts
│ │ ├── index.ts
│ │ ├── lib/
│ │ │ ├── ChatModelHelper.ts
│ │ │ ├── ChatOpenAI.ts
│ │ │ ├── boundModel/
│ │ │ │ └── BoundModelObjectHook.ts
│ │ │ ├── config/
│ │ │ │ └── QualifierUtil.ts
│ │ │ ├── graph/
│ │ │ │ ├── CompiledStateGraphObject.ts
│ │ │ │ ├── CompiledStateGraphProto.ts
│ │ │ │ ├── GraphBuildHook.ts
│ │ │ │ ├── GraphLoadUnitHook.ts
│ │ │ │ ├── GraphObjectHook.ts
│ │ │ │ └── GraphPrototypeHook.ts
│ │ │ ├── tracing/
│ │ │ │ └── LangGraphTracer.ts
│ │ │ └── util.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── fixtures/
│ │ │ │ ├── apps/
│ │ │ │ │ └── langchain/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── modules/
│ │ │ │ │ │ └── bar/
│ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ └── AppController.ts
│ │ │ │ │ │ ├── module.yml
│ │ │ │ │ │ ├── package.json
│ │ │ │ │ │ └── service/
│ │ │ │ │ │ ├── BoundChatModel.ts
│ │ │ │ │ │ └── Graph.ts
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ ├── module.json
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── tsconfig.json
│ │ │ │ └── sse-mcp-server/
│ │ │ │ └── http.ts
│ │ │ └── llm.test.ts
│ │ ├── tsconfig.json
│ │ ├── tsconfig.pub.json
│ │ └── typings/
│ │ └── index.d.ts
│ ├── mcp-client/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── index.ts
│ │ ├── lib/
│ │ │ ├── EggHttpMCPClient.ts
│ │ │ ├── EggHttpStaticMCPClient.ts
│ │ │ ├── HttpMCPClientFactory.ts
│ │ │ ├── QualifierUtil.ts
│ │ │ └── constants.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── fixtures/
│ │ │ │ ├── apps/
│ │ │ │ │ └── mcpclient/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── modules/
│ │ │ │ │ │ └── bar/
│ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ └── AppController.ts
│ │ │ │ │ │ ├── module.yml
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ ├── module.json
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── sse-mcp-server/
│ │ │ │ │ └── http.ts
│ │ │ │ └── streamable-mcp-server/
│ │ │ │ └── http.ts
│ │ │ └── mcpclient.test.ts
│ │ ├── tsconfig.json
│ │ ├── tsconfig.pub.json
│ │ └── typings/
│ │ └── index.d.ts
│ ├── mcp-proxy/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── agent.ts
│ │ ├── app/
│ │ │ └── extend/
│ │ │ ├── agent.ts
│ │ │ └── application.ts
│ │ ├── app.ts
│ │ ├── config/
│ │ │ └── config.default.ts
│ │ ├── index.ts
│ │ ├── lib/
│ │ │ └── MCPProxyDataClient.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── fixtures/
│ │ │ │ └── apps/
│ │ │ │ └── mcp-proxy/
│ │ │ │ ├── app/
│ │ │ │ │ ├── controller/
│ │ │ │ │ │ └── app.ts
│ │ │ │ │ └── router.ts
│ │ │ │ ├── config/
│ │ │ │ │ ├── config.default.js
│ │ │ │ │ └── plugin.js
│ │ │ │ └── package.json
│ │ │ └── proxy.test.ts
│ │ ├── tsconfig.json
│ │ ├── tsconfig.pub.json
│ │ └── typings/
│ │ └── index.d.ts
│ ├── orm/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── app.ts
│ │ ├── lib/
│ │ │ ├── DataSourceManager.ts
│ │ │ ├── LeoricRegister.ts
│ │ │ ├── ModelProtoHook.ts
│ │ │ ├── ModelProtoManager.ts
│ │ │ ├── ORMLoadUnitHook.ts
│ │ │ ├── SingletonModelObject.ts
│ │ │ ├── SingletonModelProto.ts
│ │ │ └── SingletonORM.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── fixtures/
│ │ │ │ ├── apps/
│ │ │ │ │ └── orm-app/
│ │ │ │ │ ├── app.ts
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ ├── module.json
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ ├── modules/
│ │ │ │ │ │ └── orm-module/
│ │ │ │ │ │ ├── AppService.ts
│ │ │ │ │ │ ├── CtxService.ts
│ │ │ │ │ │ ├── PkgService.ts
│ │ │ │ │ │ ├── model/
│ │ │ │ │ │ │ ├── App.ts
│ │ │ │ │ │ │ └── Pkg.ts
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── package.json
│ │ │ │ └── prepare.js
│ │ │ └── index.test.ts
│ │ ├── tsconfig.json
│ │ ├── tsconfig.pub.json
│ │ └── typings/
│ │ └── index.d.ts
│ ├── schedule/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── agent.ts
│ │ ├── app.ts
│ │ ├── lib/
│ │ │ ├── EggScheduleAdapter.ts
│ │ │ ├── EggScheduleMetadataConvertor.ts
│ │ │ ├── ScheduleManager.ts
│ │ │ ├── SchedulePrototypeHook.ts
│ │ │ ├── ScheduleSubscriberRegister.ts
│ │ │ ├── ScheduleWorkerLoadUnitHook.ts
│ │ │ └── ScheduleWorkerRegister.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── ScheduleManager.test.ts
│ │ │ ├── fixtures/
│ │ │ │ └── schedule-app/
│ │ │ │ ├── app/
│ │ │ │ │ ├── simple-schedule-module/
│ │ │ │ │ │ ├── SimpleSchedule.ts
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── subscriber/
│ │ │ │ │ ├── Subscriber.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── config/
│ │ │ │ │ ├── module.json
│ │ │ │ │ └── plugin.js
│ │ │ │ └── package.json
│ │ │ └── schedule.test.ts
│ │ ├── tsconfig.json
│ │ ├── tsconfig.pub.json
│ │ └── typings/
│ │ └── index.d.ts
│ └── tegg/
│ ├── CHANGELOG.md
│ ├── README.md
│ ├── app/
│ │ ├── extend/
│ │ │ ├── application.ts
│ │ │ ├── application.unittest.ts
│ │ │ └── context.ts
│ │ └── middleware/
│ │ └── tegg_ctx_lifecycle_middleware.ts
│ ├── app.ts
│ ├── lib/
│ │ ├── AppLoadUnit.ts
│ │ ├── AppLoadUnitInstance.ts
│ │ ├── CompatibleUtil.ts
│ │ ├── ConfigSourceLoadUnitHook.ts
│ │ ├── EggAppLoader.ts
│ │ ├── EggCompatibleObject.ts
│ │ ├── EggCompatibleProtoImpl.ts
│ │ ├── EggContextCompatibleHook.ts
│ │ ├── EggContextHandler.ts
│ │ ├── EggContextImpl.ts
│ │ ├── EggModuleLoader.ts
│ │ ├── EggQualifierProtoHook.ts
│ │ ├── ModuleConfigLoader.ts
│ │ ├── ModuleHandler.ts
│ │ ├── Utils.ts
│ │ ├── ctx_lifecycle_middleware.ts
│ │ └── run_in_background.ts
│ ├── package.json
│ ├── test/
│ │ ├── AccessLevelCheck.test.ts
│ │ ├── BackgroundTask.test.ts
│ │ ├── ConstructorModuleConfig.test.ts
│ │ ├── DynamicInject.test.ts
│ │ ├── EggCompatible.test.ts
│ │ ├── Inject.test.ts
│ │ ├── ModuleConfig.test.ts
│ │ ├── MultiInstanceInjectMultiInstance.test.ts
│ │ ├── NoModuleJson.test.ts
│ │ ├── OptionalModule.test.ts
│ │ ├── OptionalPluginModule.test.ts
│ │ ├── SameProtoName.test.ts
│ │ ├── Subscription.test.ts
│ │ ├── app/
│ │ │ └── extend/
│ │ │ ├── application.test.ts
│ │ │ ├── application.unittest.test.ts
│ │ │ └── context.test.ts
│ │ ├── close.test.ts
│ │ ├── fixtures/
│ │ │ └── apps/
│ │ │ ├── access-level-check/
│ │ │ │ ├── app/
│ │ │ │ │ ├── controller/
│ │ │ │ │ │ └── app.ts
│ │ │ │ │ └── router.ts
│ │ │ │ ├── config/
│ │ │ │ │ ├── config.default.js
│ │ │ │ │ ├── module.json
│ │ │ │ │ └── plugin.js
│ │ │ │ ├── modules/
│ │ │ │ │ ├── module-a/
│ │ │ │ │ │ ├── BarService.ts
│ │ │ │ │ │ ├── FooService.ts
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── module-main/
│ │ │ │ │ │ ├── BarService.ts
│ │ │ │ │ │ ├── FooService.ts
│ │ │ │ │ │ ├── MainService.ts
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── package.json
│ │ │ │ ├── package.json
│ │ │ │ └── typings/
│ │ │ │ └── index.d.ts
│ │ │ ├── app-multi-inject-multi/
│ │ │ │ ├── app/
│ │ │ │ │ └── modules/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── App.ts
│ │ │ │ │ │ ├── module.yml
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── app2/
│ │ │ │ │ │ ├── App.ts
│ │ │ │ │ │ ├── module.yml
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── bar/
│ │ │ │ │ │ ├── BizManager.ts
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── foo/
│ │ │ │ │ ├── Secret.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── config/
│ │ │ │ │ ├── config.default.js
│ │ │ │ │ └── plugin.js
│ │ │ │ └── package.json
│ │ │ ├── app-with-no-module-json/
│ │ │ │ ├── app/
│ │ │ │ │ ├── controller/
│ │ │ │ │ │ └── app.ts
│ │ │ │ │ ├── extend/
│ │ │ │ │ │ ├── application.unittest.ts
│ │ │ │ │ │ └── context.ts
│ │ │ │ │ ├── router.ts
│ │ │ │ │ └── typings/
│ │ │ │ │ └── index.d.ts
│ │ │ │ ├── config/
│ │ │ │ │ ├── config.default.js
│ │ │ │ │ └── plugin.js
│ │ │ │ ├── modules/
│ │ │ │ │ └── config-module/
│ │ │ │ │ ├── ConfigService.ts
│ │ │ │ │ └── package.json
│ │ │ │ └── package.json
│ │ │ ├── background-app/
│ │ │ │ ├── app/
│ │ │ │ │ ├── controller/
│ │ │ │ │ │ └── app.ts
│ │ │ │ │ ├── router.ts
│ │ │ │ │ └── typings/
│ │ │ │ │ └── index.d.ts
│ │ │ │ ├── config/
│ │ │ │ │ ├── config.default.js
│ │ │ │ │ ├── module.json
│ │ │ │ │ └── plugin.js
│ │ │ │ ├── modules/
│ │ │ │ │ └── multi-module-background/
│ │ │ │ │ ├── BackgroundService.ts
│ │ │ │ │ ├── CountService.ts
│ │ │ │ │ └── package.json
│ │ │ │ └── package.json
│ │ │ ├── constructor-module-config/
│ │ │ │ ├── app/
│ │ │ │ │ ├── controller/
│ │ │ │ │ │ └── app.ts
│ │ │ │ │ ├── extend/
│ │ │ │ │ │ ├── application.unittest.ts
│ │ │ │ │ │ └── context.ts
│ │ │ │ │ ├── router.ts
│ │ │ │ │ └── typings/
│ │ │ │ │ └── index.d.ts
│ │ │ │ ├── app.ts
│ │ │ │ ├── config/
│ │ │ │ │ ├── config.default.js
│ │ │ │ │ └── plugin.js
│ │ │ │ ├── modules/
│ │ │ │ │ └── module-with-config/
│ │ │ │ │ ├── foo.ts
│ │ │ │ │ ├── module.unittest.yml
│ │ │ │ │ ├── module.yml
│ │ │ │ │ └── package.json
│ │ │ │ └── package.json
│ │ │ ├── dynamic-inject-app/
│ │ │ │ ├── app/
│ │ │ │ │ ├── controller/
│ │ │ │ │ │ └── app.ts
│ │ │ │ │ ├── router.ts
│ │ │ │ │ └── typings/
│ │ │ │ │ └── index.d.ts
│ │ │ │ ├── config/
│ │ │ │ │ ├── config.default.js
│ │ │ │ │ ├── module.json
│ │ │ │ │ └── plugin.js
│ │ │ │ ├── modules/
│ │ │ │ │ └── dynamic-inject-module/
│ │ │ │ │ ├── AbstractContextHello.ts
│ │ │ │ │ ├── AbstractSingletonHello.ts
│ │ │ │ │ ├── FooType.ts
│ │ │ │ │ ├── HelloService.ts
│ │ │ │ │ ├── SingletonHelloService.ts
│ │ │ │ │ ├── decorator/
│ │ │ │ │ │ ├── ContextHello.ts
│ │ │ │ │ │ └── SingletonHello.ts
│ │ │ │ │ ├── impl/
│ │ │ │ │ │ ├── BarContextHello.ts
│ │ │ │ │ │ ├── BarSingletonHello.ts
│ │ │ │ │ │ ├── FooContextHello.ts
│ │ │ │ │ │ └── FooSingletonHello.ts
│ │ │ │ │ └── package.json
│ │ │ │ └── package.json
│ │ │ ├── egg-app/
│ │ │ │ ├── app/
│ │ │ │ │ ├── controller/
│ │ │ │ │ │ └── app.ts
│ │ │ │ │ ├── extend/
│ │ │ │ │ │ ├── application.ts
│ │ │ │ │ │ ├── application.unittest.ts
│ │ │ │ │ │ └── context.ts
│ │ │ │ │ ├── router.ts
│ │ │ │ │ └── typings/
│ │ │ │ │ └── index.d.ts
│ │ │ │ ├── config/
│ │ │ │ │ ├── config.default.js
│ │ │ │ │ ├── module.json
│ │ │ │ │ └── plugin.js
│ │ │ │ ├── modules/
│ │ │ │ │ ├── multi-module-common/
│ │ │ │ │ │ ├── model/
│ │ │ │ │ │ │ └── App.ts
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── multi-module-repo/
│ │ │ │ │ │ ├── AppRepo.ts
│ │ │ │ │ │ ├── GlobalAppRepo.ts
│ │ │ │ │ │ ├── PersistenceService.ts
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── multi-module-service/
│ │ │ │ │ ├── AppService.ts
│ │ │ │ │ ├── ConfigService.ts
│ │ │ │ │ ├── CustomLoggerService.ts
│ │ │ │ │ ├── EggTypeService.ts
│ │ │ │ │ ├── SingletonFooService.ts
│ │ │ │ │ ├── TraceService.ts
│ │ │ │ │ └── package.json
│ │ │ │ └── package.json
│ │ │ ├── inject-module-config/
│ │ │ │ ├── app/
│ │ │ │ │ ├── controller/
│ │ │ │ │ │ └── app.ts
│ │ │ │ │ ├── extend/
│ │ │ │ │ │ ├── application.unittest.ts
│ │ │ │ │ │ └── context.ts
│ │ │ │ │ ├── router.ts
│ │ │ │ │ └── typings/
│ │ │ │ │ └── index.d.ts
│ │ │ │ ├── app.ts
│ │ │ │ ├── config/
│ │ │ │ │ ├── config.default.js
│ │ │ │ │ └── plugin.js
│ │ │ │ ├── modules/
│ │ │ │ │ ├── module-with-config/
│ │ │ │ │ │ ├── foo.ts
│ │ │ │ │ │ ├── module.unittest.yml
│ │ │ │ │ │ ├── module.yml
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── module-with-overwrite-config/
│ │ │ │ │ ├── bar.ts
│ │ │ │ │ ├── module.unittest.yml
│ │ │ │ │ ├── module.yml
│ │ │ │ │ └── package.json
│ │ │ │ └── package.json
│ │ │ ├── invalid-inject/
│ │ │ │ ├── app/
│ │ │ │ │ └── modules/
│ │ │ │ │ └── module-a/
│ │ │ │ │ ├── BarService.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── config/
│ │ │ │ │ ├── config.default.js
│ │ │ │ │ └── plugin.js
│ │ │ │ └── package.json
│ │ │ ├── optional-inject/
│ │ │ │ ├── app/
│ │ │ │ │ └── modules/
│ │ │ │ │ └── module-a/
│ │ │ │ │ ├── BarService.ts
│ │ │ │ │ ├── FooService.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── config/
│ │ │ │ │ ├── config.default.js
│ │ │ │ │ └── plugin.js
│ │ │ │ └── package.json
│ │ │ ├── optional-module/
│ │ │ │ ├── app/
│ │ │ │ │ └── modules/
│ │ │ │ │ └── root/
│ │ │ │ │ ├── Root.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── config/
│ │ │ │ │ ├── config.default.js
│ │ │ │ │ └── plugin.js
│ │ │ │ ├── node_modules/
│ │ │ │ │ ├── foo/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── unused/
│ │ │ │ │ │ ├── Unused.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── used/
│ │ │ │ │ ├── Used.js
│ │ │ │ │ └── package.json
│ │ │ │ └── package.json
│ │ │ ├── plugin-module/
│ │ │ │ ├── config/
│ │ │ │ │ ├── config.default.js
│ │ │ │ │ └── plugin.js
│ │ │ │ ├── node_modules/
│ │ │ │ │ ├── foo/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── foo-plugin/
│ │ │ │ │ ├── Used.js
│ │ │ │ │ └── package.json
│ │ │ │ └── package.json
│ │ │ ├── recursive-module-app/
│ │ │ │ ├── app/
│ │ │ │ │ ├── controller/
│ │ │ │ │ │ └── app.ts
│ │ │ │ │ └── router.ts
│ │ │ │ ├── config/
│ │ │ │ │ ├── config.default.js
│ │ │ │ │ ├── module.json
│ │ │ │ │ └── plugin.js
│ │ │ │ ├── modules/
│ │ │ │ │ ├── multi-module-repo/
│ │ │ │ │ │ ├── AppRepo.ts
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── multi-module-service/
│ │ │ │ │ ├── AppService.ts
│ │ │ │ │ └── package.json
│ │ │ │ └── package.json
│ │ │ ├── same-name-protos/
│ │ │ │ ├── app/
│ │ │ │ │ └── modules/
│ │ │ │ │ ├── module-a/
│ │ │ │ │ │ ├── BarService.ts
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── module-bar/
│ │ │ │ │ │ ├── FooService.ts
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── module-foo/
│ │ │ │ │ ├── FooService.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── config/
│ │ │ │ │ ├── config.default.js
│ │ │ │ │ └── plugin.js
│ │ │ │ └── package.json
│ │ │ ├── same-name-singleton-and-context-proto/
│ │ │ │ ├── app/
│ │ │ │ │ └── modules/
│ │ │ │ │ ├── module-bar/
│ │ │ │ │ │ ├── BarConstructorService1.ts
│ │ │ │ │ │ ├── BarConstructorService2.ts
│ │ │ │ │ │ ├── BarService1.ts
│ │ │ │ │ │ ├── BarService2.ts
│ │ │ │ │ │ ├── FooService.ts
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── module-foo/
│ │ │ │ │ ├── FooService.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── config/
│ │ │ │ │ ├── config.default.js
│ │ │ │ │ └── plugin.js
│ │ │ │ └── package.json
│ │ │ ├── schedule-app/
│ │ │ │ ├── app/
│ │ │ │ │ └── schedule/
│ │ │ │ │ └── foo.ts
│ │ │ │ ├── config/
│ │ │ │ │ ├── config.default.js
│ │ │ │ │ ├── module.json
│ │ │ │ │ └── plugin.js
│ │ │ │ ├── modules/
│ │ │ │ │ ├── multi-module-repo/
│ │ │ │ │ │ ├── AppRepo.ts
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── multi-module-service/
│ │ │ │ │ ├── AppService.ts
│ │ │ │ │ └── package.json
│ │ │ │ └── package.json
│ │ │ └── wrong-order-app/
│ │ │ ├── app/
│ │ │ │ ├── controller/
│ │ │ │ │ └── app.ts
│ │ │ │ └── router.ts
│ │ │ ├── config/
│ │ │ │ ├── config.default.js
│ │ │ │ ├── module.json
│ │ │ │ └── plugin.js
│ │ │ ├── modules/
│ │ │ │ ├── multi-module-repo/
│ │ │ │ │ ├── AppRepo.ts
│ │ │ │ │ └── package.json
│ │ │ │ └── multi-module-service/
│ │ │ │ ├── AppService.ts
│ │ │ │ └── package.json
│ │ │ └── package.json
│ │ └── lib/
│ │ └── EggModuleLoader.test.ts
│ ├── tsconfig.json
│ ├── tsconfig.pub.json
│ └── typings/
│ └── index.d.ts
├── standalone/
│ ├── service-worker/
│ │ ├── CHANGELOG.md
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── ServiceWorkerApp.ts
│ │ │ ├── ServiceWorkerRunner.ts
│ │ │ ├── StandaloneEggObjectFactory.ts
│ │ │ ├── constants.ts
│ │ │ ├── controller/
│ │ │ │ ├── ControllerMetadataManager.ts
│ │ │ │ ├── ControllerRegister.ts
│ │ │ │ ├── ControllerRegisterFactory.ts
│ │ │ │ ├── RootProtoManager.ts
│ │ │ │ └── ServiceWorkerContext.ts
│ │ │ ├── hook/
│ │ │ │ ├── ContextProtoLoadUnitHook.ts
│ │ │ │ ├── ControllerLoadUnitHook.ts
│ │ │ │ ├── ControllerPrototypeHook.ts
│ │ │ │ └── LoadUnitInnerClassHook.ts
│ │ │ ├── http/
│ │ │ │ ├── FetchEventHandler.ts
│ │ │ │ ├── FetchRouter.ts
│ │ │ │ ├── HTTPControllerRegister.ts
│ │ │ │ ├── HTTPMethodRegister.ts
│ │ │ │ └── ServiceWorkerFetchContext.ts
│ │ │ ├── mcp/
│ │ │ │ ├── AbstractControllerAdvice.ts
│ │ │ │ ├── MCPControllerRegister.ts
│ │ │ │ └── MCPServerHelper.ts
│ │ │ ├── types.ts
│ │ │ └── utils/
│ │ │ ├── RequestUtils.ts
│ │ │ └── ResponseUtils.ts
│ │ ├── test/
│ │ │ ├── Utils.ts
│ │ │ ├── fixtures/
│ │ │ │ ├── http/
│ │ │ │ │ ├── AopMiddlewareController.ts
│ │ │ │ │ ├── GetController.ts
│ │ │ │ │ ├── HttpTestAdvice.ts
│ │ │ │ │ ├── PostController.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── http-builtin/
│ │ │ │ │ ├── BuiltinController.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── http-inject/
│ │ │ │ │ ├── UserController.ts
│ │ │ │ │ ├── UserService.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── http-params/
│ │ │ │ │ ├── ParamController.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── http-priority/
│ │ │ │ │ ├── PriorityController.ts
│ │ │ │ │ ├── ViewController.ts
│ │ │ │ │ └── package.json
│ │ │ │ └── mcp/
│ │ │ │ ├── MCPTestController.ts
│ │ │ │ ├── McpTestAdvice.ts
│ │ │ │ └── package.json
│ │ │ ├── http/
│ │ │ │ ├── builtin.test.ts
│ │ │ │ ├── inject.test.ts
│ │ │ │ ├── params.test.ts
│ │ │ │ ├── priority.test.ts
│ │ │ │ ├── response.test.ts
│ │ │ │ └── router.test.ts
│ │ │ └── mcp/
│ │ │ └── mcp.test.ts
│ │ ├── tsconfig.json
│ │ └── tsconfig.pub.json
│ └── standalone/
│ ├── CHANGELOG.md
│ ├── README.md
│ ├── index.ts
│ ├── package.json
│ ├── src/
│ │ ├── ConfigSourceLoadUnitHook.ts
│ │ ├── EggModuleLoader.ts
│ │ ├── ModuleConfig.ts
│ │ ├── Runner.ts
│ │ ├── StandaloneContext.ts
│ │ ├── StandaloneContextHandler.ts
│ │ ├── StandaloneContextImpl.ts
│ │ ├── StandaloneInnerObject.ts
│ │ ├── StandaloneInnerObjectProto.ts
│ │ ├── StandaloneLoadUnit.ts
│ │ └── main.ts
│ ├── test/
│ │ ├── fixtures/
│ │ │ ├── ajv-module/
│ │ │ │ ├── foo.ts
│ │ │ │ └── package.json
│ │ │ ├── ajv-module-pass/
│ │ │ │ ├── foo.ts
│ │ │ │ └── package.json
│ │ │ ├── aop-module/
│ │ │ │ ├── Hello.ts
│ │ │ │ ├── main.ts
│ │ │ │ └── package.json
│ │ │ ├── custom-context/
│ │ │ │ ├── foo.ts
│ │ │ │ └── package.json
│ │ │ ├── dal-module/
│ │ │ │ ├── module.yml
│ │ │ │ ├── package.json
│ │ │ │ ├── src/
│ │ │ │ │ ├── Foo.ts
│ │ │ │ │ ├── dal/
│ │ │ │ │ │ ├── dao/
│ │ │ │ │ │ │ ├── FooDAO.ts
│ │ │ │ │ │ │ └── base/
│ │ │ │ │ │ │ └── BaseFooDAO.ts
│ │ │ │ │ │ ├── extension/
│ │ │ │ │ │ │ └── FooExtension.ts
│ │ │ │ │ │ └── structure/
│ │ │ │ │ │ ├── Foo.json
│ │ │ │ │ │ └── Foo.sql
│ │ │ │ │ └── main.ts
│ │ │ │ └── tsconfig.json
│ │ │ ├── dal-transaction-module/
│ │ │ │ ├── module.yml
│ │ │ │ ├── package.json
│ │ │ │ ├── src/
│ │ │ │ │ ├── Foo.ts
│ │ │ │ │ ├── FooService.ts
│ │ │ │ │ ├── dal/
│ │ │ │ │ │ ├── dao/
│ │ │ │ │ │ │ ├── FooDAO.ts
│ │ │ │ │ │ │ └── base/
│ │ │ │ │ │ │ └── BaseFooDAO.ts
│ │ │ │ │ │ ├── extension/
│ │ │ │ │ │ │ └── FooExtension.ts
│ │ │ │ │ │ └── structure/
│ │ │ │ │ │ ├── Foo.json
│ │ │ │ │ │ └── Foo.sql
│ │ │ │ │ └── main.ts
│ │ │ │ └── tsconfig.json
│ │ │ ├── dependency/
│ │ │ │ ├── foo.ts
│ │ │ │ ├── node_modules/
│ │ │ │ │ ├── dependency-1/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── dependency-2/
│ │ │ │ │ ├── foo.js
│ │ │ │ │ ├── module.yml
│ │ │ │ │ └── package.json
│ │ │ │ └── package.json
│ │ │ ├── dynamic-inject-module/
│ │ │ │ ├── AbstractContextHello.ts
│ │ │ │ ├── AbstractSingletonHello.ts
│ │ │ │ ├── FooType.ts
│ │ │ │ ├── HelloService.ts
│ │ │ │ ├── decorator/
│ │ │ │ │ ├── ContextHello.ts
│ │ │ │ │ └── SingletonHello.ts
│ │ │ │ ├── impl/
│ │ │ │ │ ├── BarContextHello.ts
│ │ │ │ │ ├── BarSingletonHello.ts
│ │ │ │ │ ├── FooContextHello.ts
│ │ │ │ │ └── FooSingletonHello.ts
│ │ │ │ ├── main.ts
│ │ │ │ └── package.json
│ │ │ ├── inner-object/
│ │ │ │ ├── foo.ts
│ │ │ │ └── package.json
│ │ │ ├── invalid-inject/
│ │ │ │ ├── foo.ts
│ │ │ │ └── package.json
│ │ │ ├── lifecycle/
│ │ │ │ ├── foo.ts
│ │ │ │ └── package.json
│ │ │ ├── module-with-config/
│ │ │ │ ├── foo.ts
│ │ │ │ ├── module.yml
│ │ │ │ └── package.json
│ │ │ ├── module-with-empty-config/
│ │ │ │ ├── foo.ts
│ │ │ │ ├── module.yml
│ │ │ │ └── package.json
│ │ │ ├── module-with-empty-default-config/
│ │ │ │ ├── foo.ts
│ │ │ │ ├── module.dev.yml
│ │ │ │ ├── module.yml
│ │ │ │ └── package.json
│ │ │ ├── module-with-env-config/
│ │ │ │ ├── foo.ts
│ │ │ │ ├── module.dev.yml
│ │ │ │ ├── module.yml
│ │ │ │ └── package.json
│ │ │ ├── multi-callback-instance-module/
│ │ │ │ ├── biz/
│ │ │ │ │ ├── biz.ts
│ │ │ │ │ ├── module.yml
│ │ │ │ │ └── package.json
│ │ │ │ ├── logger/
│ │ │ │ │ ├── DynamicLogger.ts
│ │ │ │ │ └── package.json
│ │ │ │ └── main/
│ │ │ │ ├── foo.ts
│ │ │ │ ├── module.yml
│ │ │ │ └── package.json
│ │ │ ├── multi-modules/
│ │ │ │ ├── bar/
│ │ │ │ │ ├── module.yml
│ │ │ │ │ └── package.json
│ │ │ │ └── foo/
│ │ │ │ ├── foo.ts
│ │ │ │ ├── module.yml
│ │ │ │ └── package.json
│ │ │ ├── optional-inject/
│ │ │ │ ├── bar.ts
│ │ │ │ ├── foo.ts
│ │ │ │ └── package.json
│ │ │ ├── runtime-config/
│ │ │ │ ├── foo.ts
│ │ │ │ └── package.json
│ │ │ └── simple/
│ │ │ ├── foo.ts
│ │ │ └── package.json
│ │ └── index.test.ts
│ ├── tsconfig.json
│ └── tsconfig.pub.json
└── tsconfig.json
================================================
FILE CONTENTS
================================================
================================================
FILE: .eslintignore
================================================
docs
coverage
dist
node_modules
plugin/**/node_modules
plugin/**/*.d.ts
core/**/node_modules
core/**/*.d.ts
core/**/test/fixtures
integration/**/node_modules
integration/**/*.d.ts
integration/**/test/fixtures
plugin/*/test/fixtures/**/run
plugin/*/test/fixtures/**/oneapi
plugin/*/test/fixtures/**/logs
benchmark
!plugin/tegg-compatible/typings/index.d.ts
================================================
FILE: .eslintrc
================================================
{
"extends": [
"eslint-config-egg/typescript",
"plugin:import/recommended",
"plugin:import/typescript"
],
"parserOptions": {
"project": "./tsconfig.json"
},
"rules": {
"@typescript-eslint/ban-types": "off",
"import/no-unresolved": "off",
"import/no-relative-packages": "error"
},
"overrides": [
{
"files": [
"core/*/test/**/*",
"plugin/*/test/**/*",
"standalone/*/test/**/*"
],
"rules": {
"import/no-relative-packages": "off"
}
}
]
}
================================================
FILE: .github/FUNDING.yml
================================================
# These are supported funding model platforms
open_collective: eggjs # Replace with a single Open Collective username
# github: [ fengmk2, popomore, atian25, dead_horse ] # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
# patreon: # Replace with a single Patreon username
# ko_fi: # Replace with a single Ko-fi username
# tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
# community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
# liberapay: # Replace with a single Liberapay username
# issuehunt: # Replace with a single IssueHunt username
# otechie: # Replace with a single Otechie username
# custom: # Replace with a single custom sponsorship URL
================================================
FILE: .github/ISSUE_TEMPLATE/bug-report-cn.yml
================================================
name: 🐛 TEgg Bug 反馈
description: 如发现 TEgg 框架中的 Bug,请及时在此汇报。
labels: [bug]
body:
- type: textarea
attributes:
label: |
在此输入你需要反馈的 Bug 具体信息(Bug in Detail):
placeholder: |
1. 我做了什么。
2. 我的预期值。
3. 我实际得到的结果。
4. 可以的话,请提供一些截图、视频作为附件以复现症状。
validations:
required: true
- type: textarea
attributes:
label: 可复现问题的仓库地址(Reproduction Repo)
description: |
1. 请使用 `npm init egg --type=simple bug` 创建最小可复现问题的代码。
2. 在 GitHub 中上传该代码项目,并在此处粘贴地址(你也可以直接将你的仓库压缩为 zip 文件直接以附件形式提交)。
placeholder: |
https://github.com/YOUR_REPOSITORY_URL
validations:
required: true
- type: input
attributes:
label: Node 版本号:
description: |
你的当前复现问题的 Node 版本号:
placeholder: |
使用 “node -v” 命令,在控制台得到版本号(例如:v18.14.0)。
validations:
required: true
- type: input
attributes:
label: TEgg 版本号:
description: |
你的当前复现问题 TEgg 版本号:
placeholder: |
请直接在“package.json”中查阅(例如:0.0.1)。
validations:
required: true
- type: input
attributes:
label: "相关插件名称与版本号:"
description: |
插件名称以及版本号:
placeholder: |
请直接在“package.json”中查阅(例如:egg-mysql,3.1.1)。
validations:
required: true
- type: input
attributes:
label: "操作平台与版本号:"
description: |
你的操作平台与版本号:
placeholder: |
Windows 10 专业版(21H2)
validations:
required: true
================================================
FILE: .github/ISSUE_TEMPLATE/bug-report.yml
================================================
name: 🐛 Bug Report For TEgg (in English)
description: Report an issue if something isn't working as expected 🤔.
labels: [bug]
body:
- type: textarea
attributes:
label: |
Your detail info about the Bug:
placeholder: |
1. What I did.
2. What I expected to happen.
3. What I actually got.
4. If possible, images/videos as attachments are welcomed to show the bug.
validations:
required: true
- type: textarea
attributes:
label: Reproduction Repo
description: |
1. Please use `npm init egg --type=simple bug` to create your smallest repo.
2. Submit it in the GitHub and paste your URL here (you can also attach your zip file directly).
placeholder: |
https://github.com/YOUR_REPOSITORY_URL or your zip file
validations:
required: true
- type: input
attributes:
label: Node Version
description: |
What's your Node's version?
placeholder: |
Use "node -v" in your console to get it (e.g: v18.14.0).
validations:
required: true
- type: input
attributes:
label: TEgg Version
description: |
What's your TEgg version?
placeholder: |
See it directly in your "package.json" file (e.g: 0.0.1)
validations:
required: true
- type: input
attributes:
label: Plugin Name and its version
description: |
What's your plugin's name and version?
placeholder: |
See them directly in your "package.json" file (e.g: egg-mysql, 3.1.1)
validations:
required: true
- type: input
attributes:
label: Platform and its version
description: |
What's your platform and its version?
placeholder: |
Windows 10 Professional(21H2)
validations:
required: true
================================================
FILE: .github/ISSUE_TEMPLATE/feature-request-cn.yml
================================================
name: 💡 我有一个新点子
description: 我对 TEgg 框架有一个新的想法(或许我想来实现他)……
labels: [feature request]
body:
- type: markdown
attributes:
value: |
对于 TEgg 框架,你有一个新的想法?
不过在提交你的新点子之前,麻烦请检阅一下是否之前的帖子中有类似重复的内容。
- type: textarea
attributes:
label: 请详细告知你的新点子:
placeholder: |
1. 您期望能够实现什么功能。
2. 您的理由(如:我一直被什么问题困扰……)。
如果方便的话,请提供截屏或者视频等详细信息。
3. 我能够做一些什么(最好是能提供一些伪代码帮助实现)。
validations:
required: true
================================================
FILE: .github/ISSUE_TEMPLATE/feature-request.yml
================================================
name: 💡 Feature Request For TEgg (in English)
description: I have a suggestion (and may want to implement it)!
labels: [feature request]
body:
- type: markdown
attributes:
value: |
You have an idea how to improve the TEgg?
Before submitting, please have a look at the existing issues if there's already
something related to your suggestion.
- type: textarea
attributes:
label: "Enter your suggestions in details:"
placeholder: |
1. What I expected to happen?
2. Your reason (e.g: I'm always frustrated with...).
If possible, images or videos are welcome.
3. What I plan to do (Optional but better in pseudo codes).
validations:
required: true
================================================
FILE: .github/ISSUE_TEMPLATE/rfc-cn.yml
================================================
name: 🚀 RFC 提案
description: 我对 TEgg 框架技术架构功能层面上有重大新增、改进等。
labels: [RFC proposal]
body:
- type: markdown
attributes:
value: |
对于 TEgg 框架功能你是否有重大的新增或改进之类的想法?
不过在提交你的新想法或方案之前,麻烦请检阅一下是否之前的帖子中有类似重复的内容。
- type: textarea
attributes:
label: 请详细告知你的新解决思路:
placeholder: |
1. 描述你希望解决的问题的现状,附上相关的 issue 地址。
如果方便的话,请提供截屏或者视频等详细信息。
2. 我能够做一些什么(譬如具体相关的的 API,描述思路,最好是能提供一些伪代码帮助实现)。
validations:
required: true
- type: checkboxes
attributes:
label: "跟进类型:"
description: 此议案跟进类型情况:
options:
- label: 这是某个任务
- label: 这是一个具体的 PR 的地址(URL)
================================================
FILE: .github/ISSUE_TEMPLATE/rfc.yml
================================================
name: 🚀 RFC Proposals (in English)
description: I've got a major improvement (or idea) on the technical architecture of the TEgg framework.
labels: [RFC proposal]
body:
- type: markdown
attributes:
value: |
Any better new/changable functions for the core technical architecture of the TEgg framework?
But please make sure there's no duplicated issues related to your idea before submitting.
- type: textarea
attributes:
label: "Please describe your idea in detail:"
placeholder: |
1. Describe the current situation of the problem you want to solve,
and attach the related issue address.
If it is possible, please provide screenshots or videos in detail.
2. What can I do (related APIs, Your ideas, better to provide some pseudo code to help implementations).
validations:
required: true
- type: checkboxes
attributes:
label: Follow-up type
description: The type of the RFC proposals.
options:
- label: Some Task
- label: PR URL(s)
validations:
required: true
================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
<!--
Thank you for your pull request. Please review below requirements.
Bug fixes and new features should include tests and possibly benchmarks.
Contributors guide: https://github.com/eggjs/egg/blob/master/CONTRIBUTING.md
感谢您贡献代码。请确认下列 checklist 的完成情况。
Bug 修复和新功能必须包含测试,必要时请附上性能测试。
Contributors guide: https://github.com/eggjs/egg/blob/master/CONTRIBUTING.md
-->
##### Checklist
<!-- Remove items that do not apply. For completed items, change [ ] to [x]. -->
- [ ] `npm test` passes
- [ ] tests and/or benchmarks are included
- [ ] documentation is changed or added
- [ ] commit message follows commit guidelines
##### Affected core subsystem(s)
<!-- Provide affected core subsystem(s). -->
##### Description of change
<!-- Provide a description of the change below this comment. -->
<!--
- any feature?
- close https://github.com/eggjs/egg/ISSUE_URL
-->
================================================
FILE: .github/workflows/codeql-analysis.yml
================================================
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "CodeQL"
on:
push:
branches: [ "master" ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ "master" ]
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
permissions:
actions: read
contents: read
security-events: write
strategy:
fail-fast: false
matrix:
language: [ 'javascript', 'typescript' ]
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
# Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support
steps:
- name: Checkout repository
uses: actions/checkout@v4
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
# queries: security-extended,security-and-quality
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v3
# ℹ️ Command-line programs to run using the OS shell.
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
# If the Autobuild fails above, remove it and uncomment the following three lines.
# modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance.
# - run: |
# echo "Run, Build Application using script"
# ./location_of_script_within_repo/buildscript.sh
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
================================================
FILE: .github/workflows/nodejs.yml
================================================
name: Continuous integration
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
Runner-ubuntu:
runs-on: ubuntu-latest
services:
mysql:
image: mysql:5.7
env:
MYSQL_ALLOW_EMPTY_PASSWORD: true
MYSQL_DATABASE: test
ports:
- 3306:3306
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=5
strategy:
fail-fast: false
matrix:
node-version: [ 16, 18, 20 ]
steps:
- name: Checkout Git Source
uses: actions/checkout@master
- name: Setup Node.js
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}
- name: Install Utoo
uses: utooland/setup-utoo@v1
- name: Install Dependencies
run: ut install --ignore-scripts
- name: Continuous integration
run: |
ut ci
ut tsc:pub
- name: Code Coverage
uses: codecov/codecov-action@v1
with:
token: ${{ secrets.CODECOV_TOKEN }}
Runner-macos:
runs-on: macOS-latest
strategy:
fail-fast: false
matrix:
node-version: [ 16, 18, 20 ]
steps:
- name: Checkout Git Source
uses: actions/checkout@master
- name: Setup Node.js
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}
- name: Install Mysql
run: brew install mysql
- name: Start Mysql
## arm64/x86 homebrew mysql path different
run: brew services start mysql
- name: Install Utoo
uses: utooland/setup-utoo@v1
- name: Install Dependencies
run: ut install --ignore-scripts
- name: Continuous integration
run: ut ci
- name: Code Coverage
uses: codecov/codecov-action@v1
with:
token: ${{ secrets.CODECOV_TOKEN }}
# GitHub mysql service not support windows
# Runner-windows:
# runs-on: windows-latest
#
# strategy:
# fail-fast: false
# matrix:
# node-version: [ 16, 18, 20 ]
# steps:
# - name: Checkout Git Source
# uses: actions/checkout@master
#
# - name: Setup Node.js
# uses: actions/setup-node@v1
# with:
# node-version: ${{ matrix.node-version }}
#
# - name: Install Npm
# run: npm i -g npm@8
#
# - name: Install Dependencies
# run: npm i
#
# - name: Continuous integration
# run: npm run ci
#
# - name: Code Coverage
# uses: codecov/codecov-action@v1
# with:
# token: ${{ secrets.CODECOV_TOKEN }}
================================================
FILE: .github/workflows/release.yml
================================================
name: Manual Release
on:
workflow_dispatch:
inputs:
branch:
description: 'Branch to release from'
required: true
default: 'next'
type: string
version_type:
description: 'Version bump type'
required: true
default: 'prerelease'
type: choice
options:
- patch
- minor
- major
- prerelease
- prepatch
- preminor
- premajor
prerelease_tag:
description: 'Prerelease tag (alpha, beta, rc) - only used with prerelease/pre* types'
required: false
default: 'beta'
type: choice
options:
- alpha
- beta
- rc
dry_run:
description: 'Dry run (do not publish)'
required: false
default: false
type: boolean
jobs:
release:
name: Manual Release
runs-on: ubuntu-latest
concurrency:
group: release-${{ github.workflow }}-#${{ github.event.pull_request.number || github.head_ref || github.ref }}
cancel-in-progress: false
permissions:
contents: write
packages: write
id-token: write
steps:
- name: Checkout
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
with:
ref: ${{ github.event.inputs.branch }}
fetch-depth: 0
# Use git token for checkout and pushing
token: ${{ secrets.GIT_TOKEN }}
- name: Setup pnpm
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4
- name: Setup Node.js
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5
with:
node-version: '22'
cache: 'pnpm'
registry-url: 'https://registry.npmjs.org'
- name: Re-install npm
# TODO: OIDC requires npm >=11.5.1.
# Until Node.js v24 is LTS (with npm 11 as the default), we need to bump.
run: npm install -g npm@11
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Build packages
run: pnpm build
- name: Configure Git
run: |
git config --local user.email "action@github.com"
git config --local user.name "GitHub Action"
- name: Version bump (dry run)
if: ${{ github.event.inputs.dry_run == 'true' }}
run: |
echo "🧪 Running version bump in dry-run mode..."
if [[ "${{ github.event.inputs.version_type }}" == prerelease* ]]; then
node scripts/version.js ${{ github.event.inputs.version_type }} --prerelease-tag=${{ github.event.inputs.prerelease_tag }} --dry-run
else
node scripts/version.js ${{ github.event.inputs.version_type }} --dry-run
fi
- name: Version bump
if: ${{ github.event.inputs.dry_run != 'true' }}
run: |
echo "🚀 Running version bump..."
if [[ "${{ github.event.inputs.version_type }}" == prerelease* ]]; then
node scripts/version.js ${{ github.event.inputs.version_type }} --prerelease-tag=${{ github.event.inputs.prerelease_tag }}
else
node scripts/version.js ${{ github.event.inputs.version_type }}
fi
# Get the new version tag
NEW_TAG=$(git describe --tags --abbrev=0)
echo "NEW_TAG=$NEW_TAG" >> $GITHUB_ENV
# Push changes and tags
git push origin ${{ github.event.inputs.branch }} --tags
- name: Publish packages (dry run)
if: ${{ github.event.inputs.dry_run == 'true' }}
run: |
echo "🧪 Running publish in dry-run mode..."
if [[ "${{ github.event.inputs.version_type }}" == pre* ]]; then
echo "Setting npm tag to: ${{ github.event.inputs.prerelease_tag }}"
pnpm -r publish --dry-run --no-git-checks --tag=${{ github.event.inputs.prerelease_tag }}
else
echo "Setting npm tag to: latest"
pnpm -r publish --dry-run --no-git-checks --tag=latest
fi
- name: Publish packages
if: ${{ github.event.inputs.dry_run != 'true' }}
run: |
echo "📦 Publishing packages..."
if [[ "${{ github.event.inputs.version_type }}" == pre* ]]; then
echo "Setting npm tag to: ${{ github.event.inputs.prerelease_tag }}"
pnpm -r publish --no-git-checks --tag=${{ github.event.inputs.prerelease_tag }}
else
echo "Setting npm tag to: latest"
pnpm -r publish --no-git-checks --tag=latest
fi
- name: Create GitHub Release (draft)
if: ${{ github.event.inputs.dry_run != 'true' }}
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
with:
github-token: ${{ secrets.GIT_TOKEN }}
script: |
const tag = process.env.NEW_TAG;
const versionType = '${{ github.event.inputs.version_type }}';
let releaseBody = `## 🎉 ${versionType.charAt(0).toUpperCase() + versionType.slice(1)} Release\n\n`;
releaseBody += `This release includes ${versionType} version updates for all packages.\n\n`;
releaseBody += `### 📦 Published Packages\n\n`;
// Get package versions from the tag
const fs = require('fs');
const packagesDirs = ['./packages', './tools', './plugins'];
for (const packagesDir of packagesDirs) {
const packageFolders = fs.readdirSync(packagesDir);
for (const folder of packageFolders) {
const packageJsonPath = `${packagesDir}/${folder}/package.json`;
if (fs.existsSync(packageJsonPath)) {
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
if (packageJson.private) {
continue;
}
releaseBody += `- [${packageJson.name}@${packageJson.version}](https://npmjs.com/package/${packageJson.name}/v/${packageJson.version})\n`;
}
}
}
releaseBody += `\n### 🔄 What's Changed\n\n`;
releaseBody += `<!-- Please add changelog information here manually -->\n`;
releaseBody += `- Add your changelog items here\n`;
releaseBody += `- Remove this placeholder text\n\n`;
releaseBody += `**Full Changelog**: https://github.com/${{ github.repository }}/compare/v${tag}...${tag}`;
const release = await github.rest.repos.createRelease({
owner: context.repo.owner,
repo: context.repo.repo,
tag_name: tag,
name: tag,
body: releaseBody,
draft: true,
prerelease: versionType.includes('pre')
});
core.info(`Created draft release: ${release.data.html_url}`);
// Set the release URL as an environment variable for use in summary
core.exportVariable('DRAFT_RELEASE_URL', release.data.html_url);
- name: Sync to cnpm
run: |
node scripts/sync-cnpm.js
- name: Summary
run: |
echo "## 🎉 Release Summary" >> $GITHUB_STEP_SUMMARY
if [ "${{ github.event.inputs.dry_run }}" == "true" ]; then
echo "### 🧪 Dry Run Completed" >> $GITHUB_STEP_SUMMARY
echo "- Version bump: **${{ github.event.inputs.version_type }}**" >> $GITHUB_STEP_SUMMARY
echo "- Branch: **${{ github.event.inputs.branch }}**" >> $GITHUB_STEP_SUMMARY
if [[ "${{ github.event.inputs.version_type }}" == pre* ]]; then
echo "- npm tag: **${{ github.event.inputs.prerelease_tag }}**" >> $GITHUB_STEP_SUMMARY
else
echo "- npm tag: **latest**" >> $GITHUB_STEP_SUMMARY
fi
echo "- Status: **Dry run - no changes made**" >> $GITHUB_STEP_SUMMARY
else
echo "### ✅ Release Completed" >> $GITHUB_STEP_SUMMARY
echo "- Version bump: **${{ github.event.inputs.version_type }}**" >> $GITHUB_STEP_SUMMARY
echo "- Branch: **${{ github.event.inputs.branch }}**" >> $GITHUB_STEP_SUMMARY
echo "- New tag: **$NEW_TAG**" >> $GITHUB_STEP_SUMMARY
if [[ "${{ github.event.inputs.version_type }}" == pre* ]]; then
echo "- npm tag: **${{ github.event.inputs.prerelease_tag }}**" >> $GITHUB_STEP_SUMMARY
else
echo "- npm tag: **latest**" >> $GITHUB_STEP_SUMMARY
fi
echo "- Packages published to npm" >> $GITHUB_STEP_SUMMARY
echo "- Draft GitHub release created: [View Draft Release]($DRAFT_RELEASE_URL)" >> $GITHUB_STEP_SUMMARY
fi
================================================
FILE: .gitignore
================================================
node_modules
coverage
*.log
npm-debug.log
.logs
logs
*.swp
run
*-run
.idea
.DS_Store
.tmp
.vscode
codex-logs/
package-lock.json
yarn.lock
.editorconfig
*clinic-flame*
*clinic-doctor*
.nyc_output/
dist
**/*.js
**/*.d.ts
core/**/dist
plugin/**/dist
plugin/oneapi/test/fixtures/modules/*/oneapi
plugin/dal/test/fixtures/modules/*/dal/
core/dal-runtime/test/fixtures/modules/*/dal
core/dal-runtime/test/fixtures/modules/*/src/dal/
!core/dal-runtime/test/fixtures/modules/generate_codes_not_overwrite_dao/dal/extension/FooExtension.ts
!core/dal-runtime/test/fixtures/modules/generate_codes_not_overwrite_dao/dal/dao/FooDAO.ts
plugin/tegg/test/fixtures/apps/**/*.js
!core/common-util/test/fixtures/**/node_modules
!core/common-util/test/fixtures/**/node_modules/**/*.js
!core/*/typings/*.d.ts
!plugin/*/test/fixtures/**/*.js
!plugin/*/typings/*.d.ts
!plugin/*/test/fixtures/apps/*/config/*.js
!plugin/*/test/fixtures/apps/**/typings/*.d.ts
!core/eventbus-decorator/src/type.d.ts
!plugin/orm/test/fixtures/prepare.js
!benchmark/**/*.js
!standalone/standalone/test/fixtures/**/node_modules
!standalone/standalone/test/fixtures/**/node_modules/**/*.js
!plugin/tegg/test/fixtures/**/node_modules
!plugin/config/test/fixtures/**/node_modules
.node
.egg
================================================
FILE: .mocharc.yml
================================================
timeout: "120000"
spec:
- test/**/*.test.ts
recursive: true
extension:
- ts
require:
- ts-node/register
- source-map-support/register
full-trace: true
exit: true
================================================
FILE: .nycrc.yml
================================================
extends:
- '@istanbuljs/nyc-config-typescript'
- 'test-exclude'
all: true
check-coverage: true
temp-directory: './node_modules/.nyc_output'
report-dir: './coverage'
reporter:
- text-summary
- json-summary
- json
- lcov
lines: 0
statements: 0
exclude:
- core/*/typings
- core/*/dist
- plugin/*/typings
- plugin/*/dist
- coverage
- core/*/test/**/*
- plugin/*/test/**/*
- standalone/*/test/**/*
- benchmark/**/*
- core/test-util/**/*
================================================
FILE: CHANGELOG.md
================================================
# Change Log
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [3.78.15](https://github.com/eggjs/tegg/compare/v3.78.14...v3.78.15) (2026-04-23)
### Bug Fixes
* **agent-runtime:** hold cancelRun until executor session is committed ([#441](https://github.com/eggjs/tegg/issues/441)) ([4e02a28](https://github.com/eggjs/tegg/commit/4e02a28bdfe9b924c1190482fd3d85f8cad1fcfa))
## [3.78.14](https://github.com/eggjs/tegg/compare/v3.78.13...v3.78.14) (2026-04-21)
### Bug Fixes
* mcp path ([3835288](https://github.com/eggjs/tegg/commit/3835288e9b78e3d2f422e91e3e56bf4ead0c4372))
* mcp sse connect clear ([#440](https://github.com/eggjs/tegg/issues/440)) ([4c59d6a](https://github.com/eggjs/tegg/commit/4c59d6a13cf066dec70173494bd09c30a5052712))
## [3.78.13](https://github.com/eggjs/tegg/compare/v3.78.12...v3.78.13) (2026-04-21)
### Bug Fixes
* **agent-runtime:** persist thread messages when a run is aborted ([#439](https://github.com/eggjs/tegg/issues/439)) ([384ab1b](https://github.com/eggjs/tegg/commit/384ab1bf3c344177d8eb2593d35dab41361a31dc))
## [3.78.12](https://github.com/eggjs/tegg/compare/v3.78.11...v3.78.12) (2026-04-18)
### Bug Fixes
* del debug log ([a7d8e06](https://github.com/eggjs/tegg/commit/a7d8e0608d709a733ea463c75ca955184ae4c552))
## [3.78.11](https://github.com/eggjs/tegg/compare/v3.78.10...v3.78.11) (2026-04-18)
### Bug Fixes
* limit mcp version ([8627372](https://github.com/eggjs/tegg/commit/86273726bbf4f33e0856dc726aa3f7ff963e9e99))
## [3.78.10](https://github.com/eggjs/tegg/compare/v3.78.9...v3.78.10) (2026-04-18)
### Bug Fixes
* import ([c7ed1b7](https://github.com/eggjs/tegg/commit/c7ed1b78f9c0ee308c85029e79d5187fd7fd1bd4))
## [3.78.9](https://github.com/eggjs/tegg/compare/v3.78.8...v3.78.9) (2026-04-18)
**Note:** Version bump only for package tegg
## [3.78.8](https://github.com/eggjs/tegg/compare/v3.78.7...v3.78.8) (2026-04-18)
### Bug Fixes
* remove egg module ([#438](https://github.com/eggjs/tegg/issues/438)) ([c82c26e](https://github.com/eggjs/tegg/commit/c82c26ebfa8272e32477f9b5be51da85e70904a6))
## [3.78.7](https://github.com/eggjs/tegg/compare/v3.78.6...v3.78.7) (2026-04-18)
### Bug Fixes
* ts ([4e9baaa](https://github.com/eggjs/tegg/commit/4e9baaad4a78e98148979fc3336e24f872300c7d))
## [3.78.6](https://github.com/eggjs/tegg/compare/v3.78.4...v3.78.6) (2026-04-18)
**Note:** Version bump only for package tegg
## [3.78.5](https://github.com/eggjs/tegg/compare/v3.78.4...v3.78.5) (2026-04-18)
**Note:** Version bump only for package tegg
## [3.78.4](https://github.com/eggjs/tegg/compare/v3.78.3...v3.78.4) (2026-04-18)
**Note:** Version bump only for package tegg
## [3.78.3](https://github.com/eggjs/tegg/compare/v3.78.2...v3.78.3) (2026-04-15)
### Bug Fixes
* mcp_client_dispatcher ([#435](https://github.com/eggjs/tegg/issues/435)) ([82cdf41](https://github.com/eggjs/tegg/commit/82cdf41230af10b15758c56ec59756d2c5885e5e))
## [3.78.2](https://github.com/eggjs/tegg/compare/v3.78.1...v3.78.2) (2026-04-09)
### Bug Fixes
* **agent-runtime:** filter stream_event in all appendMessages calls ([#434](https://github.com/eggjs/tegg/issues/434)) ([c3b81bd](https://github.com/eggjs/tegg/commit/c3b81bdb108d07528a40fbf14162fcbeb3338c60)), closes [#433](https://github.com/eggjs/tegg/issues/433)
## [3.78.1](https://github.com/eggjs/tegg/compare/v3.78.0...v3.78.1) (2026-04-09)
**Note:** Version bump only for package tegg
# [3.78.0](https://github.com/eggjs/tegg/compare/v3.77.2...v3.78.0) (2026-04-09)
### Features
* **agent-runtime:** rewrite streamRun with StreamEvent format and reconnection ([#432](https://github.com/eggjs/tegg/issues/432)) ([d03dac2](https://github.com/eggjs/tegg/commit/d03dac2ddd78641acb47e19275488ad9fbfcda2a))
## [3.77.2](https://github.com/eggjs/tegg/compare/v3.77.1...v3.77.2) (2026-04-07)
### Bug Fixes
* streamable get timeout ([#431](https://github.com/eggjs/tegg/issues/431)) ([ebacefa](https://github.com/eggjs/tegg/commit/ebacefaa0512cfe9a0d5e7465a0386041cb9d07c))
## [3.77.1](https://github.com/eggjs/tegg/compare/v3.77.0...v3.77.1) (2026-04-01)
### Bug Fixes
* **agent-runtime:** handle all content_block_start and delta subtypes in normalizeContentBlocks ([#430](https://github.com/eggjs/tegg/issues/430)) ([119ba38](https://github.com/eggjs/tegg/commit/119ba3889a52b3577bf0aa23b6123c4d2fd4a23c))
# [3.77.0](https://github.com/eggjs/tegg/compare/v3.76.1...v3.77.0) (2026-04-01)
### Features
* **agent-runtime:** add normalizeContentBlocks for Anthropic SDK stream events ([#429](https://github.com/eggjs/tegg/issues/429)) ([d780fdb](https://github.com/eggjs/tegg/commit/d780fdba3cc243db4811af6733fda737f8c1dc4a))
## [3.76.1](https://github.com/eggjs/tegg/compare/v3.76.0...v3.76.1) (2026-04-01)
### Bug Fixes
* **agent-runtime:** merge content blocks and support accumulate control ([#428](https://github.com/eggjs/tegg/issues/428)) ([f4f904e](https://github.com/eggjs/tegg/commit/f4f904e357497fc5ad9a2c7d2ece4e9b305f5738))
# [3.76.0](https://github.com/eggjs/tegg/compare/v3.75.1...v3.76.0) (2026-04-01)
### Features
* **agent-runtime:** support custom SSE event types in streamRun ([#427](https://github.com/eggjs/tegg/issues/427)) ([2efe539](https://github.com/eggjs/tegg/commit/2efe539cd2673e27dc91cb4597751e6e0a9d4b67))
## [3.75.1](https://github.com/eggjs/tegg/compare/v3.75.0...v3.75.1) (2026-04-01)
### Bug Fixes
* **agent-runtime:** preserve non-text content blocks in MessageConverter ([#426](https://github.com/eggjs/tegg/issues/426)) ([8c4382f](https://github.com/eggjs/tegg/commit/8c4382f33f68534218049cfbfadfd4f6800a348c))
# [3.75.0](https://github.com/eggjs/tegg/compare/v3.74.0...v3.75.0) (2026-03-30)
### Features
* **agent-tracing:** add typesVersions for moduleResolution:node compatibility ([#424](https://github.com/eggjs/tegg/issues/424)) ([25b282c](https://github.com/eggjs/tegg/commit/25b282c947e5ce567ad72516d9c612cfb949d891))
# [3.74.0](https://github.com/eggjs/tegg/compare/v3.73.0...v3.74.0) (2026-03-30)
### Bug Fixes
* **agent-runtime:** set isResume based on thread message history ([#419](https://github.com/eggjs/tegg/issues/419)) ([8a7eacc](https://github.com/eggjs/tegg/commit/8a7eacca79a94815251a0d660f828ebef443d12a))
* **agent-tracing:** add eggModule declaration for tegg module scanning ([#416](https://github.com/eggjs/tegg/issues/416)) ([d169cab](https://github.com/eggjs/tegg/commit/d169cabeb0580b96c320ac6c067d3d9828639a32))
* **agent-tracing:** separate traceId and sessionId in createSession ([#417](https://github.com/eggjs/tegg/issues/417)) ([c760776](https://github.com/eggjs/tegg/commit/c7607761d1e85cbf91cb74878e90af898672db3a))
### Features
* **agent-tracing:** collect assistant messages into root run outputs ([#421](https://github.com/eggjs/tegg/issues/421)) ([8dcebaf](https://github.com/eggjs/tegg/commit/8dcebafa19061d4a91161272409a2ac729d78341))
* **agent-tracing:** rename TraceSession to Trace and support inputs in createTrace ([#420](https://github.com/eggjs/tegg/issues/420)) ([5471bda](https://github.com/eggjs/tegg/commit/5471bda05bd21ed5c60d82182a2807d09f9be097))
# [3.73.0](https://github.com/eggjs/tegg/compare/v3.72.0...v3.73.0) (2026-03-25)
### Bug Fixes
* compatibility with @modelcontextprotocol/sdk 1.26 ([#404](https://github.com/eggjs/tegg/issues/404)) ([dbda39a](https://github.com/eggjs/tegg/commit/dbda39ad2f4be5879f1e0540cf26a242cecd05e3))
* mcp helper init ([#415](https://github.com/eggjs/tegg/issues/415)) ([58f15e1](https://github.com/eggjs/tegg/commit/58f15e176edf3e8229d2bcddcf034fd7d96d5f14))
### Features
* add @eggjs/agent-tracing package for AI agent tracing ([#412](https://github.com/eggjs/tegg/issues/412)) ([56f460d](https://github.com/eggjs/tegg/commit/56f460d17007a42b8643d8d5dd25d25c3f52dcc1))
* add agent-runtime package with @AgentController decorator ([#411](https://github.com/eggjs/tegg/issues/411)) ([d4d0006](https://github.com/eggjs/tegg/commit/d4d00061e90230f82c0958bcf5268f8a511395db))
* add tegg vitest workspace ([#401](https://github.com/eggjs/tegg/issues/401)) ([c853090](https://github.com/eggjs/tegg/commit/c853090c8da22c158b684d4e0ccabf0cba4c17b8))
* **agent-runtime:** add isResume flag to CreateRunInput ([#414](https://github.com/eggjs/tegg/issues/414)) ([29ac989](https://github.com/eggjs/tegg/commit/29ac98995c0a37bb34d33f7ad81af7c664a67bce))
# [3.72.0](https://github.com/eggjs/tegg/compare/v3.71.2...v3.72.0) (2026-02-04)
### Features
* add structured tool ([#387](https://github.com/eggjs/tegg/issues/387)) ([56c23ad](https://github.com/eggjs/tegg/commit/56c23adb0af25ce0fd3624491eaf7af3fb1570cf))
## [3.71.2](https://github.com/eggjs/tegg/compare/v3.71.1...v3.71.2) (2026-01-30)
### Bug Fixes
* duplicate wrap tracer ([#398](https://github.com/eggjs/tegg/issues/398)) ([c20f55c](https://github.com/eggjs/tegg/commit/c20f55c8ad26ee2236911b3153466cfc17c95c19))
## [3.71.1](https://github.com/eggjs/tegg/compare/v3.71.0...v3.71.1) (2026-01-28)
### Bug Fixes
* mcp proxy header ([#397](https://github.com/eggjs/tegg/issues/397)) ([d79cf73](https://github.com/eggjs/tegg/commit/d79cf735e535fe41756a4a349e1b04a556f81ce9))
# [3.71.0](https://github.com/eggjs/tegg/compare/v3.70.1...v3.71.0) (2026-01-26)
### Features
* add trace to log ([#395](https://github.com/eggjs/tegg/issues/395)) ([bcfb895](https://github.com/eggjs/tegg/commit/bcfb89554f1ad0d83acba6e1fc424edbe93ad774))
## [3.70.1](https://github.com/eggjs/tegg/compare/v3.70.0...v3.70.1) (2026-01-14)
### Bug Fixes
* add stream log and fix add node options ([#394](https://github.com/eggjs/tegg/issues/394)) ([9fce038](https://github.com/eggjs/tegg/commit/9fce038b876100f22344ced707a8c8039594aa3b))
# [3.70.0](https://github.com/eggjs/tegg/compare/v3.69.0...v3.70.0) (2026-01-07)
### Features
* set default retry time to 3 for dal init ([#390](https://github.com/eggjs/tegg/issues/390)) ([afde48c](https://github.com/eggjs/tegg/commit/afde48c39990f5b000520cb1ba3ba1a336222ce2))
# [3.69.0](https://github.com/eggjs/tegg/compare/v3.68.0...v3.69.0) (2026-01-06)
### Features
* dns cache logger ([#388](https://github.com/eggjs/tegg/issues/388)) ([e9c1180](https://github.com/eggjs/tegg/commit/e9c1180424df18c48c73615133bbf6ed2f930e7a))
# [3.68.0](https://github.com/eggjs/tegg/compare/v3.67.2...v3.68.0) (2025-12-29)
### Features
* impl dns cache plugin ([#385](https://github.com/eggjs/tegg/issues/385)) ([d319448](https://github.com/eggjs/tegg/commit/d31944827c02cb967f4335b0ac66eeea4e10251c))
* impl iterator of moduleConfigs ([#386](https://github.com/eggjs/tegg/issues/386)) ([ee1f1a2](https://github.com/eggjs/tegg/commit/ee1f1a27a5a7de09bc6ee2c35376211541be409b))
## [3.67.2](https://github.com/eggjs/tegg/compare/v3.67.1...v3.67.2) (2025-12-24)
### Bug Fixes
* langchain version ([#384](https://github.com/eggjs/tegg/issues/384)) ([2bdb3b4](https://github.com/eggjs/tegg/commit/2bdb3b49a1891bdbd9bb24c30ca52295ef4833d4))
## [3.67.1](https://github.com/eggjs/tegg/compare/v3.67.0...v3.67.1) (2025-12-23)
### Bug Fixes
* zod v4 ([#381](https://github.com/eggjs/tegg/issues/381)) ([43614c8](https://github.com/eggjs/tegg/commit/43614c8734084a98b1a25c6e907c9c12ff41cb8f))
# [3.67.0](https://github.com/eggjs/tegg/compare/v3.66.0...v3.67.0) (2025-12-18)
### Features
* **schedule:** module schedule unregister on module destroy ([#377](https://github.com/eggjs/tegg/issues/377)) ([098e889](https://github.com/eggjs/tegg/commit/098e889db4f9c1e227d2e8c6390b83e7596b3e69))
# [3.66.0](https://github.com/eggjs/tegg/compare/v3.65.3...v3.66.0) (2025-12-16)
### Features
* use langchain for deepagents ([#376](https://github.com/eggjs/tegg/issues/376)) ([0af84c7](https://github.com/eggjs/tegg/commit/0af84c7b143cba9234dceb6675ea14004b8b3c9c))
## [3.65.3](https://github.com/eggjs/tegg/compare/v3.65.2...v3.65.3) (2025-12-16)
**Note:** Version bump only for package tegg
## [3.65.2](https://github.com/eggjs/tegg/compare/v3.65.1...v3.65.2) (2025-12-16)
**Note:** Version bump only for package tegg
## [3.65.1](https://github.com/eggjs/tegg/compare/v3.65.0...v3.65.1) (2025-12-16)
### Bug Fixes
* hono node v16 ([#374](https://github.com/eggjs/tegg/issues/374)) ([870b5e3](https://github.com/eggjs/tegg/commit/870b5e34f41399a44023756614b8bb5c59efc6ee))
# [3.65.0](https://github.com/eggjs/tegg/compare/v3.64.5...v3.65.0) (2025-12-10)
### Features
* add parameterized query ([#366](https://github.com/eggjs/tegg/issues/366)) ([6d7d8d8](https://github.com/eggjs/tegg/commit/6d7d8d8383f4eea574d13e87ee03c57a33a319e7))
## [3.64.5](https://github.com/eggjs/tegg/compare/v3.64.4...v3.64.5) (2025-12-08)
### Bug Fixes
* langchain build bug ([#373](https://github.com/eggjs/tegg/issues/373)) ([3d32355](https://github.com/eggjs/tegg/commit/3d323550cefe950c1b0025296670ea33d7afc242))
## [3.64.4](https://github.com/eggjs/tegg/compare/v3.64.3...v3.64.4) (2025-12-06)
**Note:** Version bump only for package tegg
## [3.64.3](https://github.com/eggjs/tegg/compare/v3.64.2...v3.64.3) (2025-12-06)
### Bug Fixes
* update trace logger check ([#372](https://github.com/eggjs/tegg/issues/372)) ([b974762](https://github.com/eggjs/tegg/commit/b974762dfccf1bb7b188c233be33014b6336bfee))
## [3.64.2](https://github.com/eggjs/tegg/compare/v3.64.1...v3.64.2) (2025-11-27)
**Note:** Version bump only for package tegg
## [3.64.1](https://github.com/eggjs/tegg/compare/v3.64.0...v3.64.1) (2025-11-27)
**Note:** Version bump only for package tegg
# [3.64.0](https://github.com/eggjs/tegg/compare/v3.63.2...v3.64.0) (2025-11-27)
### Bug Fixes
* add ping config ([#364](https://github.com/eggjs/tegg/issues/364)) ([c2757fc](https://github.com/eggjs/tegg/commit/c2757fc568599f7da9a65b2b8fd2ebf3f4522f9d))
* mcp zod type and langchain test version ([#369](https://github.com/eggjs/tegg/issues/369)) ([8178168](https://github.com/eggjs/tegg/commit/81781685c392346d21c56b649bfe8bb7a99bc9fb))
### Features
* add langchain decorator ([#356](https://github.com/eggjs/tegg/issues/356)) ([b176c73](https://github.com/eggjs/tegg/commit/b176c7325009c372ce9d17f348b4fc1f1b6d7fb1))
## [3.63.2](https://github.com/eggjs/tegg/compare/v3.63.0...v3.63.2) (2025-11-18)
**Note:** Version bump only for package tegg
## [3.63.1](https://github.com/eggjs/tegg/compare/v3.63.0...v3.63.1) (2025-11-18)
**Note:** Version bump only for package tegg
# [3.63.0](https://github.com/eggjs/tegg/compare/v3.62.3...v3.63.0) (2025-11-18)
### Features
* add MiddlewareGraphHook to handle controller middleware depende… ([#361](https://github.com/eggjs/tegg/issues/361)) ([7ab3eae](https://github.com/eggjs/tegg/commit/7ab3eae1af20e14101e1df63628a426cb5f6d3db))
## [3.62.3](https://github.com/eggjs/tegg/compare/v3.62.1...v3.62.3) (2025-11-05)
### Bug Fixes
* mcp args chinese ([61dad90](https://github.com/eggjs/tegg/commit/61dad903b2ba6140dd52a5b5600a36caef26373f))
* mcp chinese args ([#359](https://github.com/eggjs/tegg/issues/359)) ([b3c6ff1](https://github.com/eggjs/tegg/commit/b3c6ff178e1e3c76c34cedfe936d40475514708e))
* **typings:** fix getEggObjectFromName return type to Promise<T> ([#358](https://github.com/eggjs/tegg/issues/358)) ([919b72b](https://github.com/eggjs/tegg/commit/919b72b48e7966226a5e970c7e297ee6c3d1f081))
## [3.62.2](https://github.com/eggjs/tegg/compare/v3.62.1...v3.62.2) (2025-11-05)
### Bug Fixes
* mcp args chinese ([61dad90](https://github.com/eggjs/tegg/commit/61dad903b2ba6140dd52a5b5600a36caef26373f))
* mcp chinese args ([#359](https://github.com/eggjs/tegg/issues/359)) ([b3c6ff1](https://github.com/eggjs/tegg/commit/b3c6ff178e1e3c76c34cedfe936d40475514708e))
* **typings:** fix getEggObjectFromName return type to Promise<T> ([#358](https://github.com/eggjs/tegg/issues/358)) ([919b72b](https://github.com/eggjs/tegg/commit/919b72b48e7966226a5e970c7e297ee6c3d1f081))
## [3.62.1](https://github.com/eggjs/tegg/compare/v3.62.0...v3.62.1) (2025-11-03)
### Bug Fixes
* multi mcp client ([#357](https://github.com/eggjs/tegg/issues/357)) ([f9e4728](https://github.com/eggjs/tegg/commit/f9e47289160dffc5b47e93b60128a25ffd94fb4e))
### Reverts
* Revert "chore: add release scripts (#347)" ([f8bce5c](https://github.com/eggjs/tegg/commit/f8bce5cad484db185f6568bec25a352a9ea94bbe)), closes [#347](https://github.com/eggjs/tegg/issues/347)
# [3.62.0](https://github.com/eggjs/tegg/compare/v3.61.0...v3.62.0) (2025-09-24)
### Bug Fixes
* deduplicate modules reference ([#343](https://github.com/eggjs/tegg/issues/343)) ([aa5daf7](https://github.com/eggjs/tegg/commit/aa5daf7e8db49c8b273ba2102c127fd14a2de044))
### Features
* add mcp middleware hook ([#344](https://github.com/eggjs/tegg/issues/344)) ([7215645](https://github.com/eggjs/tegg/commit/72156452a2d69ff8f31b4fe76324dd4164761698))
# [3.61.0](https://github.com/eggjs/tegg/compare/v3.60.3...v3.61.0) (2025-08-15)
### Features
* allow inject MysqlDataSourceManager ([#342](https://github.com/eggjs/tegg/issues/342)) ([d13b2d7](https://github.com/eggjs/tegg/commit/d13b2d7cd11dd36960647cb40bfc4bf92ce704fd))
## [3.60.3](https://github.com/eggjs/tegg/compare/v3.60.2...v3.60.3) (2025-08-06)
### Bug Fixes
* mcp middleware ([#340](https://github.com/eggjs/tegg/issues/340)) ([a47db22](https://github.com/eggjs/tegg/commit/a47db2295a899113aad46d7f4ca0857d91d44774))
## [3.60.2](https://github.com/eggjs/tegg/compare/v3.60.1...v3.60.2) (2025-08-06)
### Bug Fixes
* csrf type is bool bug ([#338](https://github.com/eggjs/tegg/issues/338)) ([67f69c9](https://github.com/eggjs/tegg/commit/67f69c90f8550f56d4bbf336986a0feabd1d192c))
## [3.60.1](https://github.com/eggjs/tegg/compare/v3.60.0...v3.60.1) (2025-07-28)
**Note:** Version bump only for package tegg
# [3.60.0](https://github.com/eggjs/tegg/compare/v3.59.1...v3.60.0) (2025-07-28)
### Features
* add multiple mcp server ([#337](https://github.com/eggjs/tegg/issues/337)) ([5b5e233](https://github.com/eggjs/tegg/commit/5b5e233510111b63bbcba14da1703becccebbd2f))
## [3.59.1](https://github.com/eggjs/tegg/compare/v3.59.0...v3.59.1) (2025-07-16)
### Bug Fixes
* concurrent init ([#336](https://github.com/eggjs/tegg/issues/336)) ([bfafeff](https://github.com/eggjs/tegg/commit/bfafeff99f1b7221de85df3890b55145a9fe2b35))
# [3.59.0](https://github.com/eggjs/tegg/compare/v3.58.0...v3.59.0) (2025-07-07)
### Features
* add mcp global middleware ([#335](https://github.com/eggjs/tegg/issues/335)) ([7722102](https://github.com/eggjs/tegg/commit/772210298a937b7fbae9fd4fd1e1bc318b754cef))
# [3.58.0](https://github.com/eggjs/tegg/compare/v3.57.14...v3.58.0) (2025-07-01)
### Features
* add timeout ([#334](https://github.com/eggjs/tegg/issues/334)) ([6d5d94b](https://github.com/eggjs/tegg/commit/6d5d94b6f319388a94b4adf4d427b95d2b851c17))
## [3.57.14](https://github.com/eggjs/tegg/compare/v3.57.13...v3.57.14) (2025-06-18)
**Note:** Version bump only for package tegg
## [3.57.13](https://github.com/eggjs/tegg/compare/v3.57.12...v3.57.13) (2025-06-18)
### Bug Fixes
* add mcp clearInterval ([#332](https://github.com/eggjs/tegg/issues/332)) ([b29d68b](https://github.com/eggjs/tegg/commit/b29d68bd4ec4cdbef5b8246426fa0391208e8ded))
## [3.57.12](https://github.com/eggjs/tegg/compare/v3.57.11...v3.57.12) (2025-06-16)
**Note:** Version bump only for package tegg
## [3.57.11](https://github.com/eggjs/tegg/compare/v3.57.10...v3.57.11) (2025-06-16)
### Bug Fixes
* mcp mem leak ([#329](https://github.com/eggjs/tegg/issues/329)) ([bddf8ed](https://github.com/eggjs/tegg/commit/bddf8ed45ea477f59c4d3b7d63bb81ca89484e56))
## [3.57.10](https://github.com/eggjs/tegg/compare/v3.57.9...v3.57.10) (2025-06-12)
### Bug Fixes
* muliti column primary generator code error ([#326](https://github.com/eggjs/tegg/issues/326)) ([7b8e1de](https://github.com/eggjs/tegg/commit/7b8e1de5b990574f7b907f3d7a3f68ecd54f8a86))
## [3.57.9](https://github.com/eggjs/tegg/compare/v3.57.8...v3.57.9) (2025-05-29)
**Note:** Version bump only for package tegg
## [3.57.8](https://github.com/eggjs/tegg/compare/v3.57.7...v3.57.8) (2025-05-29)
**Note:** Version bump only for package tegg
## [3.57.7](https://github.com/eggjs/tegg/compare/v3.57.6...v3.57.7) (2025-05-28)
### Bug Fixes
* the loading order issue in multi-module mode ([#324](https://github.com/eggjs/tegg/issues/324)) ([c9610bd](https://github.com/eggjs/tegg/commit/c9610bd53dee7bebd069bc6766e869cb2b2f9fc9))
## [3.57.6](https://github.com/eggjs/tegg/compare/v3.57.5...v3.57.6) (2025-05-27)
### Bug Fixes
* sse new ctx ([#323](https://github.com/eggjs/tegg/issues/323)) ([5716e0a](https://github.com/eggjs/tegg/commit/5716e0a33f8f58249ebdc1a3b6fb7959394ef4ee))
## [3.57.5](https://github.com/eggjs/tegg/compare/v3.57.4...v3.57.5) (2025-05-15)
### Bug Fixes
* zod phantom dependency ([#322](https://github.com/eggjs/tegg/issues/322)) ([e92372e](https://github.com/eggjs/tegg/commit/e92372eb884d0f5d8227d340a3d7db01b51267cf))
## [3.57.4](https://github.com/eggjs/tegg/compare/v3.57.3...v3.57.4) (2025-05-14)
**Note:** Version bump only for package tegg
## [3.57.3](https://github.com/eggjs/tegg/compare/v3.57.2...v3.57.3) (2025-05-13)
### Bug Fixes
* update sessionIdGenerator ([#320](https://github.com/eggjs/tegg/issues/320)) ([ffc1e19](https://github.com/eggjs/tegg/commit/ffc1e19f69c30aa21a19c8f7ecc920fece21a947))
## [3.57.2](https://github.com/eggjs/tegg/compare/v3.57.1...v3.57.2) (2025-05-13)
### Bug Fixes
* stream mcp wait ([#319](https://github.com/eggjs/tegg/issues/319)) ([47ef28b](https://github.com/eggjs/tegg/commit/47ef28b1fae06c57857a7b340d0703403a907859))
## [3.57.1](https://github.com/eggjs/tegg/compare/v3.57.0...v3.57.1) (2025-05-13)
### Bug Fixes
* mcp context proto ([#318](https://github.com/eggjs/tegg/issues/318)) ([4d8e107](https://github.com/eggjs/tegg/commit/4d8e107fad4414da9593dd07ab2ae888dfd6a335))
# [3.57.0](https://github.com/eggjs/tegg/compare/v3.56.3...v3.57.0) (2025-05-09)
### Features
* preserve SQL hint in minify function ([#314](https://github.com/eggjs/tegg/issues/314)) ([145bcf3](https://github.com/eggjs/tegg/commit/145bcf37bcd1ba86084cc304d15f0993abf0ebc8))
## [3.56.3](https://github.com/eggjs/tegg/compare/v3.56.2...v3.56.3) (2025-05-07)
### Bug Fixes
* dep ([#313](https://github.com/eggjs/tegg/issues/313)) ([791feea](https://github.com/eggjs/tegg/commit/791feead91ad48adaa2dee4c0746bea382e61d34))
* mcp teggCtxLifecycleMiddleware ([#312](https://github.com/eggjs/tegg/issues/312)) ([5304384](https://github.com/eggjs/tegg/commit/53043840c3aaab0e485db50b7a2d9362266eef8c))
## [3.56.2](https://github.com/eggjs/tegg/compare/v3.56.1...v3.56.2) (2025-05-01)
### Bug Fixes
* mcp version check ([#311](https://github.com/eggjs/tegg/issues/311)) ([7f16c9c](https://github.com/eggjs/tegg/commit/7f16c9c361cfec8b5ffd4075b23cff317cc5207a))
## [3.56.1](https://github.com/eggjs/tegg/compare/v3.56.0...v3.56.1) (2025-04-29)
### Bug Fixes
* mock init to ready ([#310](https://github.com/eggjs/tegg/issues/310)) ([2bd6fb6](https://github.com/eggjs/tegg/commit/2bd6fb6d5e60945637358140c8d669f78ea923f7))
# [3.56.0](https://github.com/eggjs/tegg/compare/v3.55.0...v3.56.0) (2025-04-29)
### Features
* add mcp stateless ([#309](https://github.com/eggjs/tegg/issues/309)) ([b79d313](https://github.com/eggjs/tegg/commit/b79d313aa8f24adc91f88ea0732f2d98c0a8ead9))
# [3.55.0](https://github.com/eggjs/tegg/compare/v3.53.0...v3.55.0) (2025-04-29)
### Features
* add mcp ([#307](https://github.com/eggjs/tegg/issues/307)) ([a9a57b4](https://github.com/eggjs/tegg/commit/a9a57b4d7102dd552e09d33c3f82fc15a245790a))
# [3.54.0](https://github.com/eggjs/tegg/compare/v3.53.0...v3.54.0) (2025-04-29)
### Features
* add mcp ([#307](https://github.com/eggjs/tegg/issues/307)) ([a9a57b4](https://github.com/eggjs/tegg/commit/a9a57b4d7102dd552e09d33c3f82fc15a245790a))
# [3.53.0](https://github.com/eggjs/tegg/compare/v3.52.1...v3.53.0) (2025-04-21)
### Bug Fixes
* stream end ([#302](https://github.com/eggjs/tegg/issues/302)) ([7f1f4b3](https://github.com/eggjs/tegg/commit/7f1f4b396294af5609c9454f6882d213dc237512))
### Features
* add timeout metadata for http controller ([#301](https://github.com/eggjs/tegg/issues/301)) ([68980c2](https://github.com/eggjs/tegg/commit/68980c23de81dbc9bd86c1d8df7b3952f52aa5ce))
## [3.52.1](https://github.com/eggjs/tegg/compare/v3.52.0...v3.52.1) (2025-03-14)
### Bug Fixes
* add qualifier check ([#295](https://github.com/eggjs/tegg/issues/295)) ([6744088](https://github.com/eggjs/tegg/commit/674408810d77fe0f4b95b25790bcb3975e543e26))
# [3.52.0](https://github.com/eggjs/tegg/compare/v3.51.2...v3.52.0) (2024-12-30)
### Features
* dal retry when init failed ([#260](https://github.com/eggjs/tegg/issues/260)) ([74e7c06](https://github.com/eggjs/tegg/commit/74e7c067c3ff7ae0ed705abaaa8a91f804e487e3))
## [3.51.2](https://github.com/eggjs/tegg/compare/v3.51.1...v3.51.2) (2024-12-09)
### Features
* add mgw stream types ([#259](https://github.com/eggjs/tegg/issues/259)) ([1379d38](https://github.com/eggjs/tegg/commit/1379d382635c6bc575ce4acf3d3a7b5168487a3d))
## [3.51.1](https://github.com/eggjs/tegg/compare/v3.51.0...v3.51.1) (2024-11-06)
### Bug Fixes
* remove inner class hook ([#257](https://github.com/eggjs/tegg/issues/257)) ([faffd34](https://github.com/eggjs/tegg/commit/faffd3492f9edd411213034651d6863fb3f1a24d))
# [3.51.0](https://github.com/eggjs/tegg/compare/v3.50.1...v3.51.0) (2024-10-30)
### Features
* add default inject init type qualifier ([#255](https://github.com/eggjs/tegg/issues/255)) ([538ae80](https://github.com/eggjs/tegg/commit/538ae8033ff102ac0b1d141c6495058a800e46f1))
* support optional inject ([#254](https://github.com/eggjs/tegg/issues/254)) ([260470b](https://github.com/eggjs/tegg/commit/260470b766d5fdb323c1bd72cc6260a90468a161))
## [3.50.1](https://github.com/eggjs/tegg/compare/v3.50.0...v3.50.1) (2024-10-23)
### Bug Fixes
* disable dump in preload ([#253](https://github.com/eggjs/tegg/issues/253)) ([081912b](https://github.com/eggjs/tegg/commit/081912beb9cb945c863c73d91ef5be112c2940d9))
# [3.50.0](https://github.com/eggjs/tegg/compare/v3.49.0...v3.50.0) (2024-10-22)
### Features
* add dump switcher ([#252](https://github.com/eggjs/tegg/issues/252)) ([80c312f](https://github.com/eggjs/tegg/commit/80c312f7862b4021180f3e587f63c6b0dd87202c))
# [3.49.0](https://github.com/eggjs/tegg/compare/v3.48.1...v3.49.0) (2024-10-21)
### Features
* expand register add loadUnit ([#251](https://github.com/eggjs/tegg/issues/251)) ([8a1649d](https://github.com/eggjs/tegg/commit/8a1649d5ea539d22c7cfd8881595247a07e3fbd7))
## [3.48.1](https://github.com/eggjs/tegg/compare/v3.48.0...v3.48.1) (2024-10-14)
### Bug Fixes
* fix merge qualifier ([#250](https://github.com/eggjs/tegg/issues/250)) ([d5a8a93](https://github.com/eggjs/tegg/commit/d5a8a93abad570f69881f9fa42f39d7b5cd436be))
# [3.48.0](https://github.com/eggjs/tegg/compare/v3.47.2...v3.48.0) (2024-10-10)
### Features
* add rpc stream type ([#249](https://github.com/eggjs/tegg/issues/249)) ([7f3d40b](https://github.com/eggjs/tegg/commit/7f3d40b95d7939534f245b08d9d06a9b10bac350))
## [3.47.2](https://github.com/eggjs/tegg/compare/v3.47.1...v3.47.2) (2024-10-10)
**Note:** Version bump only for package tegg
## [3.47.1](https://github.com/eggjs/tegg/compare/v3.47.0...v3.47.1) (2024-10-10)
### Bug Fixes
* fix aop in constructor inject type ([#247](https://github.com/eggjs/tegg/issues/247)) ([d169bb2](https://github.com/eggjs/tegg/commit/d169bb2fbbc86335315619866b4134a25296f552))
# [3.47.0](https://github.com/eggjs/tegg/compare/v3.46.4...v3.47.0) (2024-10-10)
### Features
* export ProtoDescriptorHelper ([#245](https://github.com/eggjs/tegg/issues/245)) ([f01fb63](https://github.com/eggjs/tegg/commit/f01fb639b153a907fd9c951d4b1e40ba101b43d0))
* impl GlobalGraph build hook ([#246](https://github.com/eggjs/tegg/issues/246)) ([48fce45](https://github.com/eggjs/tegg/commit/48fce4512e99259ec26a9b032bfcc9f4046ad235))
## [3.46.4](https://github.com/eggjs/tegg/compare/v3.46.3...v3.46.4) (2024-10-09)
**Note:** Version bump only for package tegg
## [3.46.3](https://github.com/eggjs/tegg/compare/v3.46.2...v3.46.3) (2024-10-08)
### Bug Fixes
* Prototype should not be inherited ([#243](https://github.com/eggjs/tegg/issues/243)) ([6e7017a](https://github.com/eggjs/tegg/commit/6e7017a48d395fba6525e0b31c848a257eb171ef))
## [3.46.2](https://github.com/eggjs/tegg/compare/v3.46.1...v3.46.2) (2024-10-07)
**Note:** Version bump only for package tegg
## [3.46.1](https://github.com/eggjs/tegg/compare/v3.46.0...v3.46.1) (2024-09-30)
### Bug Fixes
* fix miss MultiInstance proper qualifiers ([#241](https://github.com/eggjs/tegg/issues/241)) ([15666d3](https://github.com/eggjs/tegg/commit/15666d36c18b99eccc4f1a11d8e7702503694ee1))
# [3.46.0](https://github.com/eggjs/tegg/compare/v3.45.0...v3.46.0) (2024-09-29)
### Features
* impl MultiInstance inject MultiInstance ([#240](https://github.com/eggjs/tegg/issues/240)) ([08e3b0c](https://github.com/eggjs/tegg/commit/08e3b0cc02f3d2dbba767298a6aec6c00147f9ed))
# [3.45.0](https://github.com/eggjs/tegg/compare/v3.44.1...v3.45.0) (2024-09-29)
### Features
* impl MultiInstanceInfo decorator ([#239](https://github.com/eggjs/tegg/issues/239)) ([70d4d95](https://github.com/eggjs/tegg/commit/70d4d95bca4a0c3e11d0d7cc4f292b1315e49e81))
## [3.44.1](https://github.com/eggjs/tegg/compare/v3.44.0...v3.44.1) (2024-09-29)
### Bug Fixes
* fix DataSourceQualifier ([#238](https://github.com/eggjs/tegg/issues/238)) ([7b1ebe7](https://github.com/eggjs/tegg/commit/7b1ebe718736d93e548f531bf99c5d2d38b41046))
# [3.44.0](https://github.com/eggjs/tegg/compare/v3.43.2...v3.44.0) (2024-09-29)
### Features
* support inject in constructor ([#237](https://github.com/eggjs/tegg/issues/237)) ([e68b1ed](https://github.com/eggjs/tegg/commit/e68b1ed6a90432f1cb35a6f562914b7b04cb5114))
## [3.43.2](https://github.com/eggjs/tegg/compare/v3.43.1...v3.43.2) (2024-09-14)
### Bug Fixes
* add preload loadunit ([#236](https://github.com/eggjs/tegg/issues/236)) ([0e28972](https://github.com/eggjs/tegg/commit/0e2897200a9bc3bc6aa1028c8549bdbf45bbaaa3))
## [3.43.1](https://github.com/eggjs/tegg/compare/v3.43.0...v3.43.1) (2024-09-14)
**Note:** Version bump only for package tegg
# [3.43.0](https://github.com/eggjs/tegg/compare/v3.42.0...v3.43.0) (2024-09-13)
### Features
* add http cookies ([#235](https://github.com/eggjs/tegg/issues/235)) ([f46efa5](https://github.com/eggjs/tegg/commit/f46efa54b03bad41504bf76f6ed2baa8c48858ce))
# [3.42.0](https://github.com/eggjs/tegg/compare/v3.41.0...v3.42.0) (2024-09-10)
### Features
* add LifecyclePreLoad ([#234](https://github.com/eggjs/tegg/issues/234)) ([2b72163](https://github.com/eggjs/tegg/commit/2b7216387f02cd045952447eaa21baa3a7ee04a3))
# [3.41.0](https://github.com/eggjs/tegg/compare/v3.40.1...v3.41.0) (2024-08-26)
### Features
* export controller info util for get aop middleware ([#233](https://github.com/eggjs/tegg/issues/233)) ([1d3cca8](https://github.com/eggjs/tegg/commit/1d3cca8fad859ae54fb10c1700dda261e93055b3))
## [3.40.1](https://github.com/eggjs/tegg/compare/v3.40.0...v3.40.1) (2024-08-23)
### Bug Fixes
* use symbol.for instead of symbol ([#232](https://github.com/eggjs/tegg/issues/232)) ([4254ce5](https://github.com/eggjs/tegg/commit/4254ce558d22234f9dfff0ea9bc067075e21c654))
# [3.40.0](https://github.com/eggjs/tegg/compare/v3.39.5...v3.40.0) (2024-08-22)
### Features
* @Middleware support Advice ([#231](https://github.com/eggjs/tegg/issues/231)) ([613a89d](https://github.com/eggjs/tegg/commit/613a89da7ea6dd70d50e34aa9f4152358a622625))
## [3.39.5](https://github.com/eggjs/tegg/compare/v3.39.4...v3.39.5) (2024-08-09)
### Bug Fixes
* generate index name with column name ([#230](https://github.com/eggjs/tegg/issues/230)) ([82ec72d](https://github.com/eggjs/tegg/commit/82ec72d4fb8628c847b32d0ddf23a95119ca6ccf))
## [3.39.4](https://github.com/eggjs/tegg/compare/v3.39.3...v3.39.4) (2024-07-09)
### Bug Fixes
* fix total type in paginate ([#228](https://github.com/eggjs/tegg/issues/228)) ([e57b91e](https://github.com/eggjs/tegg/commit/e57b91ee64e89487a3cc1663868d9b819e6e60c0))
## [3.39.3](https://github.com/eggjs/tegg/compare/v3.39.2...v3.39.3) (2024-04-28)
### Bug Fixes
* mount clazzExtension/clazzExtension/tableSql to BaseDao ([#220](https://github.com/eggjs/tegg/issues/220)) ([ac322cf](https://github.com/eggjs/tegg/commit/ac322cfc4100841a1483b04b99e04d553af323eb))
## [3.39.2](https://github.com/eggjs/tegg/compare/v3.39.1...v3.39.2) (2024-04-28)
### Bug Fixes
* use loader to load TableClazzList ([#219](https://github.com/eggjs/tegg/issues/219)) ([15ef977](https://github.com/eggjs/tegg/commit/15ef977806dcb15831d6e906b92134257dd03654))
## [3.39.1](https://github.com/eggjs/tegg/compare/v3.39.0...v3.39.1) (2024-04-28)
### Bug Fixes
* not overwrite extension file ([#218](https://github.com/eggjs/tegg/issues/218)) ([f915f08](https://github.com/eggjs/tegg/commit/f915f08dc61b01f10400ad844496f5b227f377eb))
# [3.39.0](https://github.com/eggjs/tegg/compare/v3.38.0...v3.39.0) (2024-04-19)
### Bug Fixes
* not overwrite dao file ([#215](https://github.com/eggjs/tegg/issues/215)) ([0856bf1](https://github.com/eggjs/tegg/commit/0856bf189b160c7209bc24cf7eb911ec2f5875d1))
### Features
* use app.loader.getTypeFiles to generate module config file names ([#213](https://github.com/eggjs/tegg/issues/213)) ([e0656a4](https://github.com/eggjs/tegg/commit/e0656a4d59beef103a5627461d9b9c87996928e3))
# [3.38.0](https://github.com/eggjs/tegg/compare/v3.37.3...v3.38.0) (2024-04-18)
### Features
* impl dal transaction ([#214](https://github.com/eggjs/tegg/issues/214)) ([b8b67dd](https://github.com/eggjs/tegg/commit/b8b67dd7e0fb282d78de7e68e68834ff79d30732))
## [3.37.3](https://github.com/eggjs/tegg/compare/v3.37.2...v3.37.3) (2024-04-17)
### Bug Fixes
* tegg-types publish ([#212](https://github.com/eggjs/tegg/issues/212)) ([98a4188](https://github.com/eggjs/tegg/commit/98a4188be2a307722c3df0c82a7af0d0fef685fd))
## [3.37.2](https://github.com/eggjs/tegg/compare/v3.37.1...v3.37.2) (2024-04-17)
### Bug Fixes
* always get extension from Module._extensions ([#211](https://github.com/eggjs/tegg/issues/211)) ([62e9c06](https://github.com/eggjs/tegg/commit/62e9c06f3cbde28d17d0e43797d4080279d7b9fa))
## [3.37.1](https://github.com/eggjs/tegg/compare/v3.37.0...v3.37.1) (2024-04-16)
### Bug Fixes
* fix dal runtime dep ([#210](https://github.com/eggjs/tegg/issues/210)) ([5ad7f45](https://github.com/eggjs/tegg/commit/5ad7f4537114217924ae8dc7445e8fc77eee0b5a))
# [3.37.0](https://github.com/eggjs/tegg/compare/v3.36.3...v3.37.0) (2024-04-16)
### Bug Fixes
* @eggjs/dal-runtime deps ([#209](https://github.com/eggjs/tegg/issues/209)) ([ffc8fdf](https://github.com/eggjs/tegg/commit/ffc8fdf342e7ea73400d6e31f82981155c2b0693))
### Features
* add HTTPHeaders decorator ([#208](https://github.com/eggjs/tegg/issues/208)) ([4678c45](https://github.com/eggjs/tegg/commit/4678c450d8b3c632bbdbe2b49b9c02e99f16733c))
## [3.36.3](https://github.com/eggjs/tegg/compare/v3.36.2...v3.36.3) (2024-04-10)
### Bug Fixes
* fix custom sql extension ([#207](https://github.com/eggjs/tegg/issues/207)) ([a405233](https://github.com/eggjs/tegg/commit/a405233d11323cd8a51c6197e855f0c3ff98337d))
## [3.36.2](https://github.com/eggjs/tegg/compare/v3.36.1...v3.36.2) (2024-04-08)
### Bug Fixes
* fix dao extension in prod ([#206](https://github.com/eggjs/tegg/issues/206)) ([0498e9d](https://github.com/eggjs/tegg/commit/0498e9d11bd9e4d186160e8b6af07e627dde6a20))
## [3.36.1](https://github.com/eggjs/tegg/compare/v3.36.0...v3.36.1) (2024-04-07)
### Bug Fixes
* use @eggjs/ajv-keywords and @eggjs/ajv-formats ([#204](https://github.com/eggjs/tegg/issues/204)) ([31b02a0](https://github.com/eggjs/tegg/commit/31b02a08dac8bf27212fdb213a7d93b5b3a685ba))
# [3.36.0](https://github.com/eggjs/tegg/compare/v3.35.1...v3.36.0) (2024-04-02)
### Features
* impl ajv + typebox Validator ([#201](https://github.com/eggjs/tegg/issues/201)) ([9fd585d](https://github.com/eggjs/tegg/commit/9fd585de9b613466c96b73494a08a494db34ea57))
* impl dal forkDb ([#202](https://github.com/eggjs/tegg/issues/202)) ([a411f04](https://github.com/eggjs/tegg/commit/a411f04e074425419b5b348a362f120bf8189541))
* impl Date/timestamp on update ([#203](https://github.com/eggjs/tegg/issues/203)) ([e5c7b8d](https://github.com/eggjs/tegg/commit/e5c7b8d529f2854b77de2e99369c781a4ea9e070))
## [3.35.1](https://github.com/eggjs/tegg/compare/v3.35.0...v3.35.1) (2024-03-26)
### Bug Fixes
* fix dal templates build ([#199](https://github.com/eggjs/tegg/issues/199)) ([17afe8c](https://github.com/eggjs/tegg/commit/17afe8c98929c7613739e32e897e881619bbdb2a))
# [3.35.0](https://github.com/eggjs/tegg/compare/v3.34.0...v3.35.0) (2024-03-26)
### Features
* dal-runtime templates support pkg alias ([#198](https://github.com/eggjs/tegg/issues/198)) ([cecef78](https://github.com/eggjs/tegg/commit/cecef781bd134b629fc835063a351460aceb340c))
# [3.34.0](https://github.com/eggjs/tegg/compare/v3.33.1...v3.34.0) (2024-03-22)
### Features
* impl dal for standalone tegg ([#197](https://github.com/eggjs/tegg/issues/197)) ([56b259d](https://github.com/eggjs/tegg/commit/56b259d7215a9d9542b36e421996623819369846))
## [3.33.1](https://github.com/eggjs/tegg/compare/v3.33.0...v3.33.1) (2024-03-22)
### Bug Fixes
* add dal templates ([#196](https://github.com/eggjs/tegg/issues/196)) ([49ba4f9](https://github.com/eggjs/tegg/commit/49ba4f9db3d9313654674f813c0358dc0774fd10))
# [3.33.0](https://github.com/eggjs/tegg/compare/v3.32.0...v3.33.0) (2024-03-22)
### Bug Fixes
* set column canNull default to false ([#195](https://github.com/eggjs/tegg/issues/195)) ([24628ec](https://github.com/eggjs/tegg/commit/24628ec5a3cd167dc44a50017450d0dedec2c9ce))
### Features
* impl dal ([#192](https://github.com/eggjs/tegg/issues/192)) ([1c7d145](https://github.com/eggjs/tegg/commit/1c7d1454bc8c600cd58c3ec7b9cda4e8a98c7287))
# [3.32.0](https://github.com/eggjs/tegg/compare/v3.31.0...v3.32.0) (2024-02-19)
### Bug Fixes
* ignore duplicated module ([#191](https://github.com/eggjs/tegg/issues/191)) ([263467f](https://github.com/eggjs/tegg/commit/263467fc43a25eb5a1670de4778de127662a201b))
### Features
* set plugin module optional false if be enabled as a plugin ([#190](https://github.com/eggjs/tegg/issues/190)) ([57a1adc](https://github.com/eggjs/tegg/commit/57a1adcd4f0305cad690be229c59e103e7acf5cd))
# [3.31.0](https://github.com/eggjs/tegg/compare/v3.30.1...v3.31.0) (2024-01-31)
### Features
* add getEggObjects API to fetch all instances ([#189](https://github.com/eggjs/tegg/issues/189)) ([f8592c2](https://github.com/eggjs/tegg/commit/f8592c2cd141d01b4f1730b1e3d66e35c3e1ce05))
## [3.30.1](https://github.com/eggjs/tegg/compare/v3.30.0...v3.30.1) (2024-01-25)
### Bug Fixes
* fix modify ctx.args in aop beforeCall not work ([#187](https://github.com/eggjs/tegg/issues/187)) ([7656424](https://github.com/eggjs/tegg/commit/765642414387c8a9940525cd3c519fcb5fd694a0))
# [3.30.0](https://github.com/eggjs/tegg/compare/v3.29.0...v3.30.0) (2024-01-17)
### Bug Fixes
* config for env is not merged when default config is empty ([#178](https://github.com/eggjs/tegg/issues/178)) ([9c1de22](https://github.com/eggjs/tegg/commit/9c1de223e9c9befb0a803ac5a1bd843f74aa9493))
### Features
* scan framework dependencies as optional module ([#184](https://github.com/eggjs/tegg/issues/184)) ([a4908c6](https://github.com/eggjs/tegg/commit/a4908c6c640000c7068def57d32052cca15adf47))
# [3.29.0](https://github.com/eggjs/tegg/compare/v3.28.2...v3.29.0) (2023-12-26)
### Features
* allow a handler to subscribe to multiple events ([#179](https://github.com/eggjs/tegg/issues/179)) ([1d460a5](https://github.com/eggjs/tegg/commit/1d460a5a6bdcf9a3d61b13d3527633c8b990a38c))
## [3.28.2](https://github.com/eggjs/tegg/compare/v3.28.1...v3.28.2) (2023-12-12)
### Bug Fixes
* clear all hooks after app close ([#175](https://github.com/eggjs/tegg/issues/175)) ([6fe12b9](https://github.com/eggjs/tegg/commit/6fe12b9bd2cc1c250d02ac851a6e2e172ab12514))
## [3.28.1](https://github.com/eggjs/tegg/compare/v3.28.0...v3.28.1) (2023-12-11)
**Note:** Version bump only for package tegg
# [3.28.0](https://github.com/eggjs/tegg/compare/v3.27.0...v3.28.0) (2023-12-10)
### Features
* inject moduleConfig read from tegg-config app.moduleConfigs config ([#169](https://github.com/eggjs/tegg/issues/169)) ([2d984ef](https://github.com/eggjs/tegg/commit/2d984efad0806b333aa2ea30daac2df859967750))
# [3.27.0](https://github.com/eggjs/tegg/compare/v3.26.0...v3.27.0) (2023-11-23)
### Features
* impl getObjectFromName ([#167](https://github.com/eggjs/tegg/issues/167)) ([95843c7](https://github.com/eggjs/tegg/commit/95843c74c201ecdfeb7023e16e3f8348a1cb32ea))
# [3.26.0](https://github.com/eggjs/tegg/compare/v3.25.2...v3.26.0) (2023-11-17)
### Features
* Add ControllerType = SCHEDULE ([#166](https://github.com/eggjs/tegg/issues/166)) ([2c22e7d](https://github.com/eggjs/tegg/commit/2c22e7d4943659848ddbae7b552febef38b57a3d))
## [3.25.2](https://github.com/eggjs/tegg/compare/v3.25.1...v3.25.2) (2023-11-06)
### Bug Fixes
* verify isEggMultiInstancePrototype before proto exists ([#164](https://github.com/eggjs/tegg/issues/164)) ([db9a621](https://github.com/eggjs/tegg/commit/db9a62159886829de36b831f49f296fe05f0b228))
## [3.25.1](https://github.com/eggjs/tegg/compare/v3.25.0...v3.25.1) (2023-11-03)
### Bug Fixes
* fix standalone import ConfigSource ([#163](https://github.com/eggjs/tegg/issues/163)) ([6922071](https://github.com/eggjs/tegg/commit/6922071219413a8a11387be3d05f0e3970ce4f48))
# [3.25.0](https://github.com/eggjs/tegg/compare/v3.24.0...v3.25.0) (2023-11-03)
### Features
* getObject support MultiInstanceProto ([#161](https://github.com/eggjs/tegg/issues/161)) ([1a24e48](https://github.com/eggjs/tegg/commit/1a24e48cd9a38e906966a21c5f0d1304c4b40d7c))
* tegg plugin support ModuleConfig ([#162](https://github.com/eggjs/tegg/issues/162)) ([58bd9fa](https://github.com/eggjs/tegg/commit/58bd9fafdd0d56aabdde5f7c33f17c45568bada8))
# [3.24.0](https://github.com/eggjs/tegg/compare/v3.23.0...v3.24.0) (2023-10-26)
### Features
* support Request decorators for HTTPController ([#159](https://github.com/eggjs/tegg/issues/159)) ([945e1eb](https://github.com/eggjs/tegg/commit/945e1eb18237f40879acdd2e43cd53dd2e8272a9))
# [3.23.0](https://github.com/eggjs/tegg/compare/v3.22.0...v3.23.0) (2023-09-20)
### Bug Fixes
* typo `acL` to `acl` ([#156](https://github.com/eggjs/tegg/issues/156)) ([a775d34](https://github.com/eggjs/tegg/commit/a775d34d38c481c5f9e90504224553d31ad728d3))
### Features
* add className property to EggPrototypeInfo ([#158](https://github.com/eggjs/tegg/issues/158)) ([bddac97](https://github.com/eggjs/tegg/commit/bddac97a9f575c9f13b794246a7e8346c58d1a09))
# [3.20.0](https://github.com/eggjs/tegg/compare/v3.19.0...v3.20.0) (2023-09-07)
### Features
* support load module config with env ([#151](https://github.com/eggjs/tegg/issues/151)) ([c087226](https://github.com/eggjs/tegg/commit/c087226bd7764242fadce5622fccd9e9fee56322))
# [3.19.0](https://github.com/eggjs/tegg/compare/v3.18.1...v3.19.0) (2023-08-31)
### Features
* add LoadUnitMultiInstanceProtoHook for tegg plugin ([#150](https://github.com/eggjs/tegg/issues/150)) ([b938580](https://github.com/eggjs/tegg/commit/b9385803383dceedfc26bd990e5d752cd33f0f67))
## [3.18.1](https://github.com/eggjs/tegg/compare/v3.18.0...v3.18.1) (2023-08-29)
### Bug Fixes
* fix use MultiInstanceProto from other modules ([#147](https://github.com/eggjs/tegg/issues/147)) ([b71af60](https://github.com/eggjs/tegg/commit/b71af60ce6d1da0d778f5e712633b8c15052bd70))
# [3.18.0](https://github.com/eggjs/tegg/compare/v3.17.0...v3.18.0) (2023-08-29)
### Features
* add aop runtime/dynamic inject runtime for standalone ([#149](https://github.com/eggjs/tegg/issues/149)) ([6091fc6](https://github.com/eggjs/tegg/commit/6091fc6be885976d72a6920d37ec685927b63d5d))
* add helper to get EggObject from class ([#148](https://github.com/eggjs/tegg/issues/148)) ([77eaf38](https://github.com/eggjs/tegg/commit/77eaf38383ad974b30d13f4c30c489fb7fa7274d))
# [3.17.0](https://github.com/eggjs/tegg/compare/v3.16.0...v3.17.0) (2023-08-24)
### Features
* impl MultiInstanceProto ([#145](https://github.com/eggjs/tegg/issues/145)) ([12fd5cf](https://github.com/eggjs/tegg/commit/12fd5cff4004578bcc737dcdf4f7e9d1159f5633))
# [3.16.0](https://github.com/eggjs/tegg/compare/v3.15.0...v3.16.0) (2023-08-24)
### Features
* export EggModuleLoader in standalone ([#146](https://github.com/eggjs/tegg/issues/146)) ([9d1da9a](https://github.com/eggjs/tegg/commit/9d1da9a87dbd486930adc50cd43020c2fb478230))
* implement RuntimeConfig ([#144](https://github.com/eggjs/tegg/issues/144)) ([0862655](https://github.com/eggjs/tegg/commit/0862655846f6765349d406ee697c036cec2a37bd))
## [3.14.3](https://github.com/eggjs/tegg/compare/v3.14.2...v3.14.3) (2023-08-14)
### Bug Fixes
* fix aop plugin files ([#140](https://github.com/eggjs/tegg/issues/140)) ([f47eef6](https://github.com/eggjs/tegg/commit/f47eef634efd442ac5a8f68567e36c940247e48b))
## [3.14.2](https://github.com/eggjs/tegg/compare/v3.14.1...v3.14.2) (2023-08-14)
### Bug Fixes
* init all context advice if root proto miss ([#139](https://github.com/eggjs/tegg/issues/139)) ([0602ea8](https://github.com/eggjs/tegg/commit/0602ea81578bf717ee4b4c490ace8c1c133478c5))
## [3.14.1](https://github.com/eggjs/tegg/compare/v3.14.0...v3.14.1) (2023-08-11)
### Bug Fixes
* ensure ContextInitiator be called after ctx ready ([#138](https://github.com/eggjs/tegg/issues/138)) ([79e16da](https://github.com/eggjs/tegg/commit/79e16dae913b6114ac8d13bde8de60164d57dab3))
# [3.14.0](https://github.com/eggjs/tegg/compare/v3.13.0...v3.14.0) (2023-07-31)
### Features
* impl ModuleConfigs for standalone ([#136](https://github.com/eggjs/tegg/issues/136)) ([7227492](https://github.com/eggjs/tegg/commit/7227492295b9c84e3660bfc006ca96e7a9652a25))
# [3.13.0](https://github.com/eggjs/tegg/compare/v3.12.0...v3.13.0) (2023-07-25)
### Features
* 事务注解增加数据源选项 ([#135](https://github.com/eggjs/tegg/issues/135)) ([c33b3b5](https://github.com/eggjs/tegg/commit/c33b3b5ec9d32a8c6675d986013042f0cb8e4370))
# [3.12.0](https://github.com/eggjs/tegg/compare/v3.11.1...v3.12.0) (2023-07-13)
### Bug Fixes
* after call mockModuleContext, hasMockModuleContext should be true ([#134](https://github.com/eggjs/tegg/issues/134)) ([88b3caa](https://github.com/eggjs/tegg/commit/88b3caadd24f08221b8098c42733e26376338cae))
## [3.11.1](https://github.com/eggjs/tegg/compare/v3.11.0...v3.11.1) (2023-06-29)
### Bug Fixes
* export StandaloneInnerObject ([#131](https://github.com/eggjs/tegg/issues/131)) ([e4b87e0](https://github.com/eggjs/tegg/commit/e4b87e0a48e3232adaf43bad75f44d0ae775c984))
# [3.11.0](https://github.com/eggjs/tegg/compare/v3.10.0...v3.11.0) (2023-06-29)
### Features
* export transaction decorator from tegg ([8be0521](https://github.com/eggjs/tegg/commit/8be05212b62fe7f111688efaec935be64d623918))
* impl transaction decorator ([#124](https://github.com/eggjs/tegg/issues/124)) ([4896615](https://github.com/eggjs/tegg/commit/4896615af951bbff940cda7abc116df40ed486e5))
# [3.10.0](https://github.com/eggjs/tegg/compare/v3.9.0...v3.10.0) (2023-06-28)
### Bug Fixes
* use posix join for package path ([#127](https://github.com/eggjs/tegg/issues/127)) ([53672f4](https://github.com/eggjs/tegg/commit/53672f404edb72c7330e125f72dd356cde0607ad))
### Features
* standalone Runner run support ctx ([#126](https://github.com/eggjs/tegg/issues/126)) ([0788c7d](https://github.com/eggjs/tegg/commit/0788c7dfb57f96c55e94cc6692c0b6e9ac1ee03c))
# [3.9.0](https://github.com/eggjs/tegg/compare/v3.8.0...v3.9.0) (2023-06-20)
### Features
* implement advice params ([76ec8ad](https://github.com/eggjs/tegg/commit/76ec8ad7b7170a637e59d74d49c1f00d8a201321))
# [3.8.0](https://github.com/eggjs/tegg/compare/v3.7.0...v3.8.0) (2023-05-30)
### Features
* impl EggObjectLifecycle hook in decorator ([#119](https://github.com/eggjs/tegg/issues/119)) ([cced8a2](https://github.com/eggjs/tegg/commit/cced8a2e009c33d5040fa21d00409fddef471b0e))
# [3.7.0](https://github.com/eggjs/tegg/compare/v3.6.3...v3.7.0) (2023-04-03)
### Bug Fixes
* don't check eventbus plugin name ([#113](https://github.com/eggjs/tegg/issues/113)) ([2a94a57](https://github.com/eggjs/tegg/commit/2a94a57c58e4fd971400966c15597aace4bb1ecc))
### Features
* The exposed module reads the options. ([#112](https://github.com/eggjs/tegg/issues/112)) ([a52b44b](https://github.com/eggjs/tegg/commit/a52b44b753463bfdef6fbbc39f920be8eccf1567))
## [3.6.3](https://github.com/eggjs/tegg/compare/v3.6.2...v3.6.3) (2023-03-02)
### Bug Fixes
* fix contextEggObjectGetProperty conflict ([#105](https://github.com/eggjs/tegg/issues/105)) ([c570315](https://github.com/eggjs/tegg/commit/c570315ece6ef7443ecf3df2b45aa8c934a5aa38))
## [3.6.2](https://github.com/eggjs/tegg/compare/v3.6.1...v3.6.2) (2023-02-16)
### Bug Fixes
* should not cache ctx object ([#103](https://github.com/eggjs/tegg/issues/103)) ([be54083](https://github.com/eggjs/tegg/commit/be5408375261d98b60fbc97e18de9232581a9547))
## [3.6.1](https://github.com/eggjs/tegg/compare/v3.6.0...v3.6.1) (2023-02-14)
### Bug Fixes
* get app/ctx properties when load unit beforeCreate ([#102](https://github.com/eggjs/tegg/issues/102)) ([76ef679](https://github.com/eggjs/tegg/commit/76ef679d745deb235db9dcc3fa34984b511bd5c6))
# [3.6.0](https://github.com/eggjs/tegg/compare/v3.5.2...v3.6.0) (2023-02-13)
### Bug Fixes
* egg qualifier should register after all file loaded ([#100](https://github.com/eggjs/tegg/issues/100)) ([5033b51](https://github.com/eggjs/tegg/commit/5033b51796b8a3329bd79884a8d8f18226193a1b))
### Features
* add backgroundTask.timeout config ([#101](https://github.com/eggjs/tegg/issues/101)) ([0b1eee0](https://github.com/eggjs/tegg/commit/0b1eee00d6feb9c6d4509023dffe85c0ada749c2))
## [3.5.2](https://github.com/eggjs/tegg/compare/v3.5.1...v3.5.2) (2023-02-10)
### Bug Fixes
* eventbus cork should support reentry ([#98](https://github.com/eggjs/tegg/issues/98)) ([077044c](https://github.com/eggjs/tegg/commit/077044c040f8423572605eb2980e3cc6da8c038e))
* not create ctx logger proto ([#97](https://github.com/eggjs/tegg/issues/97)) ([100886b](https://github.com/eggjs/tegg/commit/100886ba90bdc7cccd07fa2f390defb5b0c53e22))
## [3.5.1](https://github.com/eggjs/tegg/compare/v3.5.0...v3.5.1) (2023-02-10)
### Bug Fixes
* remove useless init singleton proto ([#96](https://github.com/eggjs/tegg/issues/96)) ([097ac58](https://github.com/eggjs/tegg/commit/097ac58c675d43088c8785a12cf224b5d6adea17))
# [3.5.0](https://github.com/eggjs/tegg/compare/v3.4.1...v3.5.0) (2023-02-10)
### Bug Fixes
* loader should not deps metadata ([#94](https://github.com/eggjs/tegg/issues/94)) ([ff57de4](https://github.com/eggjs/tegg/commit/ff57de4f3e0d0dc33d77d05a887242fcb4c32024))
### Features
* append call stack for runInBackground ([#91](https://github.com/eggjs/tegg/issues/91)) ([ec7bc2c](https://github.com/eggjs/tegg/commit/ec7bc2c60ffb49b4a51feec82e391b1f6a88549a))
* remove context egg object factory ([#93](https://github.com/eggjs/tegg/issues/93)) ([e14bdb2](https://github.com/eggjs/tegg/commit/e14bdb257eaebc0b0a4c37c6073a5c3237718718))
* use SingletonProto for egg ctx object ([#92](https://github.com/eggjs/tegg/issues/92)) ([3385d57](https://github.com/eggjs/tegg/commit/3385d571b076d3148978f252188f29d9cf2c6781))
## [3.4.1](https://github.com/eggjs/tegg/compare/v3.4.0...v3.4.1) (2023-02-02)
### Bug Fixes
* BackgroundTaskHelper should support recursively call ([#90](https://github.com/eggjs/tegg/issues/90)) ([368ac03](https://github.com/eggjs/tegg/commit/368ac0343d0d4e96b3768e7fd169b721551d0e4b))
# [3.4.0](https://github.com/eggjs/tegg/compare/v3.3.4...v3.4.0) (2023-02-01)
### Features
* use singleton model insteadof context ([#89](https://github.com/eggjs/tegg/issues/89)) ([cfdfc05](https://github.com/eggjs/tegg/commit/cfdfc05f13048806274de1a35b1207c073a8519d))
## [3.3.4](https://github.com/eggjs/tegg/compare/v3.3.3...v3.3.4) (2023-01-29)
### Bug Fixes
* should not notify backgroundTaskHelper if teggContext not exists ([#88](https://github.com/eggjs/tegg/issues/88)) ([4cab68b](https://github.com/eggjs/tegg/commit/4cab68bfc08a3786bde9a67cd8687f152829d9a0))
## [3.3.3](https://github.com/eggjs/tegg/compare/v3.3.2...v3.3.3) (2023-01-29)
### Bug Fixes
* wait egg background task done before destroy tegg ctx ([#87](https://github.com/eggjs/tegg/issues/87)) ([deea4d8](https://github.com/eggjs/tegg/commit/deea4d8d75c43347c6ee09e0e97f5fa80dd68dd9))
## [3.3.2](https://github.com/eggjs/tegg/compare/v3.3.1...v3.3.2) (2023-01-29)
### Bug Fixes
* beginModuleScope should be reentrant ([#86](https://github.com/eggjs/tegg/issues/86)) ([648aeaf](https://github.com/eggjs/tegg/commit/648aeaf1f20ff5bc217bf6f16fac9d9181eb8447))
## [3.3.1](https://github.com/eggjs/tegg/compare/v3.3.0...v3.3.1) (2023-01-28)
### Bug Fixes
* inject property should be configurable ([#85](https://github.com/eggjs/tegg/issues/85)) ([c13ab55](https://github.com/eggjs/tegg/commit/c13ab55d7b483a5c4a6e4293a6095aa98d070a8b))
# [3.3.0](https://github.com/eggjs/tegg/compare/v3.2.4...v3.3.0) (2023-01-28)
### Bug Fixes
* router type ([#83](https://github.com/eggjs/tegg/issues/83)) ([b32d9b8](https://github.com/eggjs/tegg/commit/b32d9b8e94552d27dc0249c9f38e7223b24beff0))
### Features
* add app.eggContextHandler ([#84](https://github.com/eggjs/tegg/issues/84)) ([2772624](https://github.com/eggjs/tegg/commit/277262418143956b2e75bd1db5f2e7dd9b75eb8b))
* export singleton orm client ([#82](https://github.com/eggjs/tegg/issues/82)) ([5320af7](https://github.com/eggjs/tegg/commit/5320af77d7e7c5c73b80560a576f2ce01fc21fff))
## [3.2.3](https://github.com/eggjs/tegg/compare/v3.2.2...v3.2.3) (2023-01-16)
### Bug Fixes
* cork/uncork should can be called multi times in same ctx ([#78](https://github.com/eggjs/tegg/issues/78)) ([269cda6](https://github.com/eggjs/tegg/commit/269cda6327122111c230e6f69abb525ce4ab5be1))
## [3.2.2](https://github.com/eggjs/tegg/compare/v3.2.1...v3.2.2) (2023-01-06)
**Note:** Version bump only for package tegg
## [3.2.1](https://github.com/eggjs/tegg/compare/v3.2.0...v3.2.1) (2022-12-28)
### Bug Fixes
* fix nest inject ctx obj to singleton obj ([#74](https://github.com/eggjs/tegg/issues/74)) ([e4b6252](https://github.com/eggjs/tegg/commit/e4b6252aa79925e16185e568bf7b220f367253ab))
# [3.2.0](https://github.com/eggjs/tegg/compare/v3.1.0...v3.2.0) (2022-12-28)
### Features
* impl mockModuleContextScope ([#73](https://github.com/eggjs/tegg/issues/73)) ([041881c](https://github.com/eggjs/tegg/commit/041881ca317ad81366172a35ac56b7b2dc0a0488))
# [3.1.0](https://github.com/eggjs/tegg/compare/v1.3.0...v3.1.0) (2022-12-27)
### Bug Fixes
* add 'globby' as dependencies ([#71](https://github.com/eggjs/tegg/issues/71)) ([76d85d9](https://github.com/eggjs/tegg/commit/76d85d9948527028f926ae0ff5a61111eb1cbd04))
* eventbus runtime should wait all handlers done ([#51](https://github.com/eggjs/tegg/issues/51)) ([0651d30](https://github.com/eggjs/tegg/commit/0651d300f9a18bd97299548f3ebccad1d0382d28))
* fix events type from any to keyof Events ([#54](https://github.com/eggjs/tegg/issues/54)) ([a2551b2](https://github.com/eggjs/tegg/commit/a2551b2d9f9eabf9ed5c87f83489615eefa3e6d1))
* fix file path for advice decorator ([#64](https://github.com/eggjs/tegg/issues/64)) ([d6aa091](https://github.com/eggjs/tegg/commit/d6aa091851b5d1ca63e7e56e081df4d15ab3284e))
* fix miss agent file ([0fa496b](https://github.com/eggjs/tegg/commit/0fa496bdbb4ffa4e911fffa3e176fa7bdf03fb12))
* fix miss agent file ([#56](https://github.com/eggjs/tegg/issues/56)) ([cfb4dcc](https://github.com/eggjs/tegg/commit/cfb4dcc006ee1253733c7122f885a05da94f80b5))
* fix mock prototype in aop not work ([#66](https://github.com/eggjs/tegg/issues/66)) ([16640eb](https://github.com/eggjs/tegg/commit/16640eb751405532b2a1241b17624ce3ac2d1c7a))
* fix rootProtoManager.registerRootProto ([f416ed7](https://github.com/eggjs/tegg/commit/f416ed70af1c46d31ebf712b208205d67337d958))
* fix schedule import ([1fb5481](https://github.com/eggjs/tegg/commit/1fb54816fb3240c641824c2bc2b464c35652b655))
* inject context proto to singleton proto ([#72](https://github.com/eggjs/tegg/issues/72)) ([fcc0b2b](https://github.com/eggjs/tegg/commit/fcc0b2b48fc9bce580c1f2bcfcc38039ae909951))
* none exist node_modules path ([#59](https://github.com/eggjs/tegg/issues/59)) ([77cb068](https://github.com/eggjs/tegg/commit/77cb0687ba8e5d9f20a6df0548de9d55a8771c21))
* optimize backgroud output ([#47](https://github.com/eggjs/tegg/issues/47)) ([6d978c5](https://github.com/eggjs/tegg/commit/6d978c5d7c339c78a90b00d2c2622f0be85ab3ce))
* skip file not exits ([#62](https://github.com/eggjs/tegg/issues/62)) ([10e56d4](https://github.com/eggjs/tegg/commit/10e56d418f359efa5d8909541768082cf068d2a4))
* use getMetaData for ModelMetadataUtil ([#44](https://github.com/eggjs/tegg/issues/44)) ([87a306c](https://github.com/eggjs/tegg/commit/87a306c4fba51fd519a47c0caaa79442643ea107))
* use require.resolve instead path.join to resolve dependencies path ([#63](https://github.com/eggjs/tegg/issues/63)) ([d7f3beb](https://github.com/eggjs/tegg/commit/d7f3beb27a22b95bb54589c5988a68ce2484c089))
### Features
* add new module scan mode ([#58](https://github.com/eggjs/tegg/issues/58)) ([3be6c20](https://github.com/eggjs/tegg/commit/3be6c2047a0241a482aafd0aaa072f51f861b6ea))
* **break:** use async local storage ([#69](https://github.com/eggjs/tegg/issues/69)) ([772aeb9](https://github.com/eggjs/tegg/commit/772aeb9412c6d7cd23560230b441161ba28ffa0e))
* impl Host decorator ([#48](https://github.com/eggjs/tegg/issues/48)) ([65dc7a8](https://github.com/eggjs/tegg/commit/65dc7a899ba72dd0851c35046562766d7f2b71b6))
* impl Inject Model ([#43](https://github.com/eggjs/tegg/issues/43)) ([ced2ce2](https://github.com/eggjs/tegg/commit/ced2ce2134964dcb410410c0192a34f77507c42d))
* impl Schedule decorator ([#52](https://github.com/eggjs/tegg/issues/52)) ([7f95005](https://github.com/eggjs/tegg/commit/7f950050b548ca542addbd7b466675da4e81ce3f))
* implement cork/uncork for eventbus ([#60](https://github.com/eggjs/tegg/issues/60)) ([38114bd](https://github.com/eggjs/tegg/commit/38114bd7ea3b46cc4a79556a005ef18b2ae11ec2))
* middleware decorator allow multi middleware function ([#46](https://github.com/eggjs/tegg/issues/46)) ([a4b55f7](https://github.com/eggjs/tegg/commit/a4b55f7065c3d78e2c98c4b05f01871f666542ef))
* multi host decorator ([#68](https://github.com/eggjs/tegg/issues/68)) ([f6679de](https://github.com/eggjs/tegg/commit/f6679de1495024ecb9182168843300aa91288508))
* standalone support context ([#65](https://github.com/eggjs/tegg/issues/65)) ([b35dc2d](https://github.com/eggjs/tegg/commit/b35dc2d40fff1331145abd3f04917dc64f80010b))
* support leoric hooks ([#41](https://github.com/eggjs/tegg/issues/41)) ([9ecdbd2](https://github.com/eggjs/tegg/commit/9ecdbd2fe434445c698cd2140ae97f76b6bb6ddf))
# [3.0.0](https://github.com/eggjs/tegg/compare/v3.0.0-alpha.0...v3.0.0) (2022-12-26)
### Features
* delete controller root hook ([bbb68f4](https://github.com/eggjs/tegg/commit/bbb68f43a1a9fcfd86c05581b10c56eeb77d4053))
# [3.0.0-alpha.0](https://github.com/eggjs/tegg/compare/v1.3.0...v3.0.0-alpha.0) (2022-12-22)
### Bug Fixes
* eventbus runtime should wait all handlers done ([#51](https://github.com/eggjs/tegg/issues/51)) ([0651d30](https://github.com/eggjs/tegg/commit/0651d300f9a18bd97299548f3ebccad1d0382d28))
* fix events type from any to keyof Events ([#54](https://github.com/eggjs/tegg/issues/54)) ([a2551b2](https://github.com/eggjs/tegg/commit/a2551b2d9f9eabf9ed5c87f83489615eefa3e6d1))
* fix file path for advice decorator ([#64](https://github.com/eggjs/tegg/issues/64)) ([d6aa091](https://github.com/eggjs/tegg/commit/d6aa091851b5d1ca63e7e56e081df4d15ab3284e))
* fix miss agent file ([0fa496b](https://github.com/eggjs/tegg/commit/0fa496bdbb4ffa4e911fffa3e176fa7bdf03fb12))
* fix miss agent file ([#56](https://github.com/eggjs/tegg/issues/56)) ([cfb4dcc](https://github.com/eggjs/tegg/commit/cfb4dcc006ee1253733c7122f885a05da94f80b5))
* fix mock prototype in aop not work ([#66](https://github.com/eggjs/tegg/issues/66)) ([16640eb](https://github.com/eggjs/tegg/commit/16640eb751405532b2a1241b17624ce3ac2d1c7a))
* fix rootProtoManager.registerRootProto ([f416ed7](https://github.com/eggjs/tegg/commit/f416ed70af1c46d31ebf712b208205d67337d958))
* fix schedule import ([1fb5481](https://github.com/eggjs/tegg/commit/1fb54816fb3240c641824c2bc2b464c35652b655))
* none exist node_modules path ([#59](https://github.com/eggjs/tegg/issues/59)) ([77cb068](https://github.com/eggjs/tegg/commit/77cb0687ba8e5d9f20a6df0548de9d55a8771c21))
* optimize backgroud output ([#47](https://github.com/eggjs/tegg/issues/47)) ([6d978c5](https://github.com/eggjs/tegg/commit/6d978c5d7c339c78a90b00d2c2622f0be85ab3ce))
* skip file not exits ([#62](https://github.com/eggjs/tegg/issues/62)) ([10e56d4](https://github.com/eggjs/tegg/commit/10e56d418f359efa5d8909541768082cf068d2a4))
* use getMetaData for ModelMetadataUtil ([#44](https://github.com/eggjs/tegg/issues/44)) ([87a306c](https://github.com/eggjs/tegg/commit/87a306c4fba51fd519a47c0caaa79442643ea107))
* use require.resolve instead path.join to resolve dependencies path ([#63](https://github.com/eggjs/tegg/issues/63)) ([d7f3beb](https://github.com/eggjs/tegg/commit/d7f3beb27a22b95bb54589c5988a68ce2484c089))
### Features
* add new module scan mode ([#58](https://github.com/eggjs/tegg/issues/58)) ([3be6c20](https://github.com/eggjs/tegg/commit/3be6c2047a0241a482aafd0aaa072f51f861b6ea))
* **break:** use async local storage ([#69](https://github.com/eggjs/tegg/issues/69)) ([772aeb9](https://github.com/eggjs/tegg/commit/772aeb9412c6d7cd23560230b441161ba28ffa0e))
* impl Host decorator ([#48](https://github.com/eggjs/tegg/issues/48)) ([65dc7a8](https://github.com/eggjs/tegg/commit/65dc7a899ba72dd0851c35046562766d7f2b71b6))
* impl Inject Model ([#43](https://github.com/eggjs/tegg/issues/43)) ([ced2ce2](https://github.com/eggjs/tegg/commit/ced2ce2134964dcb410410c0192a34f77507c42d))
* impl Schedule decorator ([#52](https://github.com/eggjs/tegg/issues/52)) ([7f95005](https://github.com/eggjs/tegg/commit/7f950050b548ca542addbd7b466675da4e81ce3f))
* implement cork/uncork for eventbus ([#60](https://github.com/eggjs/tegg/issues/60)) ([38114bd](https://github.com/eggjs/tegg/commit/38114bd7ea3b46cc4a79556a005ef18b2ae11ec2))
* middleware decorator allow multi middleware function ([#46](https://github.com/eggjs/tegg/issues/46)) ([a4b55f7](https://github.com/eggjs/tegg/commit/a4b55f7065c3d78e2c98c4b05f01871f666542ef))
* multi host decorator ([#68](https://github.com/eggjs/tegg/issues/68)) ([f6679de](https://github.com/eggjs/tegg/commit/f6679de1495024ecb9182168843300aa91288508))
* standalone support context ([#65](https://github.com/eggjs/tegg/issues/65)) ([b35dc2d](https://github.com/eggjs/tegg/commit/b35dc2d40fff1331145abd3f04917dc64f80010b))
* support leoric hooks ([#41](https://github.com/eggjs/tegg/issues/41)) ([9ecdbd2](https://github.com/eggjs/tegg/commit/9ecdbd2fe434445c698cd2140ae97f76b6bb6ddf))
# [1.3.0](https://github.com/eggjs/tegg/compare/v1.2.0...v1.3.0) (2022-07-01)
### Features
* allow inject proto and name ([#40](https://github.com/eggjs/tegg/issues/40)) ([abd1766](https://github.com/eggjs/tegg/commit/abd17665af2528c4c2e33f4c6b0fceddd8a4e76b))
* support leoric hooks ([#41](https://github.com/eggjs/tegg/issues/41)) ([9bdbc2c](https://github.com/eggjs/tegg/commit/9bdbc2cbe96df9f66f96b4f8e208883e99957946))
# [0.2.0](https://github.com/eggjs/tegg/compare/v0.1.19...v0.2.0) (2022-01-20)
### Bug Fixes
* invalid value of main ([#27](https://github.com/eggjs/tegg/issues/27)) ([47f22d6](https://github.com/eggjs/tegg/commit/47f22d60f7ab01cf3c0e68bd078cdd0bb75169d5))
### Features
* impl aop ([c53df00](https://github.com/eggjs/tegg/commit/c53df001d1455a0a105689694775d880541d9d2f))
================================================
FILE: CLAUDE.md
================================================
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Project Overview
tegg is a TypeScript dependency injection framework and plugin system for [Egg.js](https://eggjs.org/). It provides decorator-based dependency injection, lifecycle management, and modular architecture for building scalable Node.js applications.
## Common Commands
```bash
# Install dependencies
npm install
# Run all tests across workspaces
npm test
# Run tests for a single package
npm test --workspace=core/metadata
npm test --workspace=plugin/tegg
# Run a single test file (from package directory)
cd core/metadata && npm test -- --grep "test name"
# Lint
npm run lint
npm run lint:fix
# Build TypeScript
npm run tsc
# Full CI (prepare + lint + test)
npm run ci
# Publish (requires permissions)
npm run bump # version bump with lerna
npm run pub # publish to npm
```
## Architecture
### Monorepo Structure
This is a Lerna monorepo with three workspace categories:
- **core/**: Core packages containing decorators, runtime, and utilities
- **plugin/**: Egg.js plugins that integrate tegg features
- **standalone/**: Standalone runtime without Egg.js dependency
### Key Packages
| Package | Description |
|---------|-------------|
| `@eggjs/tegg` | Main entry point, re-exports all decorator packages |
| `@eggjs/tegg-plugin` | Main Egg.js plugin for tegg integration |
| `@eggjs/core-decorator` | Core decorators: `@ContextProto`, `@SingletonProto`, `@Inject` |
| `@eggjs/tegg-types` | TypeScript type definitions |
| `@eggjs/tegg-metadata` | Metadata storage and graph building |
| `@eggjs/tegg-runtime` | Runtime container and object instantiation |
| `@eggjs/tegg-lifecycle` | Object lifecycle hooks |
### Core Concepts
**Prototype Types (instantiation modes):**
- `@ContextProto`: One instance per request context
- `@SingletonProto`: One instance for entire application lifecycle
- `@MultiInstanceProto`: Multiple instances with different qualifiers
**Access Levels:**
- `AccessLevel.PRIVATE`: Only accessible within the same module
- `AccessLevel.PUBLIC`: Accessible from other modules
**Object Init Types:**
- `ObjectInitType.CONTEXT`: New instance per request
- `ObjectInitType.SINGLETON`: Single instance for app lifetime
- `ObjectInitType.ALWAYS_NEW`: New instance on every injection
### Dependency Injection Flow
1. Decorators (`@ContextProto`, `@SingletonProto`, etc.) register metadata on classes
2. `@eggjs/tegg-loader` scans and loads modules
3. `@eggjs/tegg-metadata` builds a dependency graph (GlobalGraph, ModuleGraph)
4. `@eggjs/tegg-runtime` instantiates objects based on the graph
5. `@Inject` decorator triggers dependency resolution at runtime
### Lifecycle Hooks
Objects can implement `EggObjectLifecycle` interface or use decorators:
- `@LifecyclePostConstruct` / `postConstruct()`
- `@LifecyclePreInject` / `preInject()`
- `@LifecyclePostInject` / `postInject()`
- `@LifecycleInit` / `init()`
- `@LifecyclePreDestroy` / `preDestroy()`
- `@LifecycleDestroy` / `destroy()`
## Import Guidelines
### Application Code (Egg.js apps using tegg)
Always import from `@eggjs/tegg` - it re-exports everything needed:
```typescript
// Core decorators and enums
import {
ContextProto,
SingletonProto,
Inject,
AccessLevel,
EggQualifier,
EggType,
} from '@eggjs/tegg';
// Subpath imports for specific features
import { Advice, Crosscut, Pointcut } from '@eggjs/tegg/aop';
import { DataSource } from '@eggjs/tegg/orm';
import { Schedule } from '@eggjs/tegg/schedule';
import { Transactional } from '@eggjs/tegg/transaction';
```
Available subpaths: `aop`, `orm`, `dal`, `schedule`, `transaction`, `ajv`, `helper`, `standalone`
### Advanced Usage (custom loaders, lifecycle hooks)
Use `@eggjs/tegg/helper` for internal APIs:
```typescript
import {
ModuleConfigUtil,
LoaderFactory,
EggObjectLifeCycleContext,
EggObject,
} from '@eggjs/tegg/helper';
```
### Framework Internal Code (packages within this monorepo)
**For type-only imports**, use `@eggjs/tegg-types`:
```typescript
import type { EggPrototype, EggObject, EggObjectLifecycle } from '@eggjs/tegg-types';
import { AccessLevel, ObjectInitType } from '@eggjs/tegg-types';
```
**For decorator utilities**, import from `@eggjs/core-decorator`:
```typescript
import { PrototypeUtil, QualifierUtil, MetadataUtil } from '@eggjs/core-decorator';
```
### Package Dependency Rules
| If you're in... | Import decorators from | Import types from |
|-----------------|----------------------|-------------------|
| Application code | `@eggjs/tegg` | `@eggjs/tegg` |
| `plugin/*` packages | `@eggjs/tegg` | `@eggjs/tegg-types` |
| `core/*` packages | `@eggjs/core-decorator` | `@eggjs/tegg-types` |
## Best Practices
### Prefer SingletonProto for Performance
Use `@SingletonProto` by default unless you need request-scoped state. Singleton objects are created once at startup, avoiding repeated instantiation overhead per request.
```typescript
// Good: Stateless service as singleton
@SingletonProto()
export class UserRepository {
async findById(id: string) { /* ... */ }
}
// Use ContextProto only when you need request-specific state
@ContextProto()
export class RequestTracer {
@Inject()
ctx: EggContext; // needs access to current request
}
```
### Minimize AccessLevel Scope
Default is `AccessLevel.PRIVATE`. Only use `AccessLevel.PUBLIC` when the prototype genuinely needs to be accessed from other modules.
```typescript
// Good: explicitly public for cross-module access
@SingletonProto({ accessLevel: AccessLevel.PUBLIC })
export class SharedConfigService { }
// Good: private by default, only used within module
@SingletonProto()
export class InternalHelper { }
```
### Use Lifecycle Hooks for Async Initialization
Constructors cannot be async. Use `init()` lifecycle hook for async setup like database connections or external service initialization.
```typescript
@SingletonProto()
export class DatabaseClient implements EggObjectLifecycle {
private connection: Connection;
async init() {
// Async initialization here
this.connection = await createConnection();
}
async destroy() {
// Cleanup resources
await this.connection.close();
}
}
```
### Use BackgroundTaskHelper for Async Tasks
Never use raw `setTimeout`, `setInterval`, or `process.nextTick` in `@ContextProto` objects. The context may be destroyed before the task completes. Use `BackgroundTaskHelper` instead.
```typescript
@ContextProto()
export class OrderService {
@Inject()
backgroundTaskHelper: BackgroundTaskHelper;
async createOrder(data: OrderData) {
const order = await this.saveOrder(data);
// Safe async task that survives request lifecycle
this.backgroundTaskHelper.run(async () => {
await this.sendNotification(order);
});
return order;
}
}
```
### Inject What You Need
Avoid injecting `ctx` or `app` directly. Inject specific services or objects instead for better testability and clearer dependencies.
```typescript
// Avoid
@ContextProto()
export class BadService {
@Inject()
ctx: Context; // too broad
async doSomething() {
return this.ctx.service.userService.find();
}
}
// Better
@ContextProto()
export class GoodService {
@Inject()
userService: UserService; // explicit dependency
async doSomething() {
return this.userService.find();
}
}
```
### Module Organization
- One module per bounded context or feature domain
- Keep modules focused and cohesive
- Use `AccessLevel.PUBLIC` sparingly to define clear module boundaries
- Prefer injecting prototypes over direct module-to-module references
## Important Constraints
- `@ContextProto` objects can inject any prototype type
- `@SingletonProto` objects **can** inject `@ContextProto` objects via Proxy mechanism:
- tegg uses `AsyncLocalStorage` to track the current request context
- When SingletonProto injects ContextProto, a Proxy object is injected
- The Proxy resolves to the correct ContextProto instance from current context on each access
- **Caveat**: Accessing ContextProto from SingletonProto outside a request context will throw an error
- Circular dependencies between prototypes are not allowed
- Circular dependencies between modules are not allowed
## Code Conventions
- TypeScript strict mode with `experimentalDecorators` and `emitDecoratorMetadata` enabled
- ESLint with `eslint-config-egg/typescript`
- Tests use Mocha and are located in `test/` directories within each package
- Test fixtures are in `test/fixtures/` directories
---
## Framework Development Guide
This section is for contributors developing the tegg framework itself.
### Development Workflow
Before committing code, always run:
```bash
# 1. Lint check (required)
npm run lint
# 2. Run full CI: prepare-test + lint + test (required)
npm run ci
# 3. Verify TypeScript compilation for publishing (required for core packages)
npm run tsc:pub
```
**CI Pipeline** (`npm run ci`) executes:
1. `ut prepare-test` - Prepare test fixtures
2. `ut lint` - ESLint check
3. `ut test` - Run all tests across workspaces
**Note**: Some tests require MySQL. CI runs against MySQL 5.7. To run locally:
- macOS: `brew install mysql && brew services start mysql`
- Linux: Use Docker or native MySQL installation
### Package Development Order
When developing a new feature for tegg, create packages in this order:
```
1. core/types → Type definitions (interfaces, enums)
2. core/*-decorator → Decorators and metadata utilities
3. core/*-runtime → Runtime logic (if needed)
4. core/tegg → Re-export from main package (add to index.ts or create subpath)
5. plugin/* → Egg.js plugin integration
```
**Dependency direction**: `types` ← `decorator` ← `runtime` ← `plugin`
### Creating a New Decorator Package
1. Create package in `core/` directory:
```
core/my-decorator/
├── package.json
├── tsconfig.json
├── tsconfig.pub.json
├── src/
│ ├── decorator/
│ │ └── MyDecorator.ts
│ └── util/
│ └── MyDecoratorInfoUtil.ts
├── index.ts # exports
└── test/
└── MyDecorator.test.ts
```
2. Key dependencies in `package.json`:
```json
{
"dependencies": {
"@eggjs/core-decorator": "^3.x",
"@eggjs/tegg-types": "^3.x"
}
}
```
3. Decorator implementation pattern:
```typescript
// src/decorator/MyDecorator.ts
import { PrototypeUtil } from '@eggjs/core-decorator';
import type { EggProtoImplClass } from '@eggjs/tegg-types';
export const MY_DECORATOR_META = Symbol('MY_DECORATOR_META');
export interface MyDecoratorParams {
name?: string;
}
export function MyDecorator(params?: MyDecoratorParams) {
return function(target: EggProtoImplClass) {
PrototypeUtil.setMetaData(target, MY_DECORATOR_META, params || {});
};
}
```
4. Add export to `core/tegg/`:
- For core features: add to `index.ts`
- For optional features: create new subpath file (e.g., `myfeature.ts`)
### Creating a New Plugin
1. Create package in `plugin/` directory:
```
plugin/my-plugin/
├── package.json
├── tsconfig.json
├── tsconfig.pub.json
├── app.ts # Plugin entry point
├── config/
│ └── config.default.ts
├── lib/
│ ├── MyService.ts # Injectable services
│ └── MyHook.ts # Lifecycle hooks
├── typings/
│ └── index.d.ts # Type extensions for egg
└── test/
└── my-plugin.test.ts
```
2. Key fields in `package.json`:
```json
{
"name": "@eggjs/tegg-my-plugin",
"eggPlugin": {
"name": "myPlugin",
"dependencies": ["tegg"]
},
"eggModule": {
"name": "teggMyPlugin"
},
"dependencies": {
"@eggjs/tegg": "^3.x",
"@eggjs/my-decorator": "^3.x" // if you have decorator package
}
}
```
- `eggPlugin`: Configuration for Egg.js plugin mode
- `eggModule`: Configuration for standalone mode (`@eggjs/standalone`), where the plugin runs as a module without Egg.js
3. Plugin entry point (`app.ts`):
```typescript
import { Application } from 'egg';
export default class MyPluginAppHook {
private readonly app: Application;
constructor(app: Application) {
this.app = app;
}
configWillLoad() {
// Register hooks before module loading
}
async didLoad() {
// After modules are loaded
await this.app.moduleHandler.ready();
}
beforeClose() {
// Cleanup resources
}
}
```
### Wrapping Third-Party SDK as Plugin
Pattern for wrapping external SDKs (e.g., database clients, API clients). See `mcp-client` plugin for a complete example.
**Step 1: Create core wrapper package** (`core/my-client`)
Wrap the third-party SDK with tegg-compatible interface (no tegg runtime dependency):
```typescript
// core/my-client/src/MyClient.ts
import { ThirdPartySDK } from 'third-party-sdk';
import type { Logger } from '@eggjs/tegg';
export interface MyClientOptions {
logger: Logger;
// ... other options
}
// Extend the third-party SDK class directly
export class MyClient extends ThirdPartySDK {
protected logger: Logger;
constructor(options: MyClientOptions) {
super(options);
this.logger = options.logger;
}
async init() {
// Initialize connection
await super.connect();
}
}
```
**Step 2: Create Egg-specific subclass in plugin** (`plugin/my-plugin`)
Extend the core wrapper to add tegg-specific features (e.g., context tracking):
```typescript
// plugin/my-plugin/lib/EggMyClient.ts
import { Logger } from '@eggjs/tegg';
import { ContextHandler } from '@eggjs/tegg-runtime';
import { MyClient, MyClientOptions } from '@eggjs/my-client';
export interface EggMyClientOptions extends MyClientOptions {
// additional egg-specific options
}
// Extend the core wrapper class
export class EggMyClient extends MyClient {
constructor(options: EggMyClientOptions) {
super(options);
}
// Override methods to add tegg-specific behavior
async doSomething() {
const context = ContextHandler.getContext();
if (context) {
// Set context-specific data for tracing, logging, etc.
context.set('myClient.method', 'doSomething');
}
return super.doSomething();
}
}
```
**Step 3: Create factory for instantiation**
Factory injects tegg dependencies and creates the client:
```typescript
// plugin/my-plugin/lib/MyClientFactory.ts
import {
AccessLevel,
Inject,
Logger,
SingletonProto,
} from '@eggjs/tegg';
import { EggMyClient, EggMyClientOptions } from './EggMyClient';
@SingletonProto({
accessLevel: AccessLevel.PUBLIC,
name: 'myClientFactory',
})
export class MyClientFactory {
@Inject()
private readonly logger: Logger;
async build(options: Omit<EggMyClientOptions, 'logger'>): Promise<EggMyClient> {
const client = new EggMyClient({
...options,
logger: this.logger,
});
await client.init();
return client;
}
}
```
**Summary of the pattern:**
```
third-party-sdk → core/my-client (MyClient extends SDK)
→ plugin/my-plugin (EggMyClient extends MyClient)
→ plugin/my-plugin (MyClientFactory creates EggMyClient)
```
This layered approach:
- Keeps core wrapper independent of tegg runtime
- Allows Egg-specific extensions (context tracking, tracing)
- Factory handles dependency injection (logger, config)
**Step 4: Register lifecycle hooks in plugin** (if needed):
```typescript
// plugin/my-plugin/app.ts
import { Application } from 'egg';
import { MyPrototypeHook } from './lib/MyPrototypeHook';
export default class MyPluginAppHook {
private readonly app: Application;
private myHook: MyPrototypeHook;
constructor(app: Application) {
this.app = app;
}
configDidLoad() {
// Register prototype lifecycle hooks
this.myHook = new MyPrototypeHook();
this.app.eggPrototypeLifecycleUtil.registerLifecycle(this.myHook);
}
beforeClose() {
this.app.eggPrototypeLifecycleUtil.deleteLifecycle(this.myHook);
}
}
```
### Available Lifecycle Hooks
Plugins can register hooks at different levels:
| Hook Registry | Purpose |
|--------------|---------|
| `app.loadUnitLifecycleUtil` | Module loading/unloading |
| `app.eggPrototypeLifecycleUtil` | Prototype creation/destruction |
| `app.eggObjectLifecycleUtil` | Object instance creation/destruction |
| `app.eggContextLifecycleUtil` | Request context creation/destruction |
### Testing Plugins
Use `egg-mock` for plugin testing:
```typescript
import { app } from 'egg-mock/bootstrap';
describe('my-plugin', () => {
it('should work', async () => {
await app.mockModuleContextScope(async ctx => {
const myClient = await ctx.getEggObject(MyClient);
const result = await myClient.doSomething();
assert(result);
});
});
});
```
### Core Package Internals
#### @eggjs/core-decorator (`core/core-decorator`)
Provides the fundamental decorators for dependency injection.
```
src/
├── decorator/
│ ├── ContextProto.ts # @ContextProto decorator
│ ├── SingletonProto.ts # @SingletonProto decorator
│ ├── MultiInstanceProto.ts # @MultiInstanceProto decorator
│ ├── Inject.ts # @Inject decorator
│ ├── Prototype.ts # Base prototype decorator logic
│ ├── InitTypeQualifier.ts # @InitTypeQualifier for disambiguation
│ ├── ModuleQualifier.ts # @ModuleQualifier for cross-module injection
│ └── EggQualifier.ts # @EggQualifier for egg ctx/app disambiguation
└── util/
├── PrototypeUtil.ts # Read/write prototype metadata
├── QualifierUtil.ts # Qualifier metadata operations
└── MetadataUtil.ts # General metadata utilities
```
#### @eggjs/tegg-metadata (`core/metadata`)
Builds and manages the dependency graph for all modules and prototypes.
```
src/
├── model/
│ ├── graph/
│ │ ├── GlobalGraph.ts # Main dependency graph (modules + protos)
│ │ ├── GlobalModuleNode.ts # Module node in graph
│ │ ├── ProtoNode.ts # Prototype node in graph
│ │ └── ProtoSelector.ts # Logic for finding matching prototypes
│ ├── ModuleDescriptor.ts # Module metadata container
│ ├── LoadUnit.ts # LoadUnit interface (module instance)
│ └── EggPrototype.ts # Prototype metadata model
├── impl/
│ ├── EggPrototypeBuilder.ts # Builds EggPrototype from class
│ ├── EggPrototypeImpl.ts # EggPrototype implementation
│ └── ModuleLoadUnit.ts # LoadUnit implementation for modules
└── factory/
├── EggPrototypeFactory.ts # Creates prototypes from classes
└── LoadUnitFactory.ts # Manages LoadUnit instances
```
**Key class: `GlobalGraph`** - Manages two graphs:
- `moduleGraph`: Vertices are modules, edges are module dependencies
- `protoGraph`: Vertices are prototypes, edges are injection dependencies
The `build()` method resolves all injection edges, `sort()` produces instantiation order.
#### @eggjs/tegg-runtime (`core/runtime`)
Handles actual object instantiation and lifecycle management.
```
src/
├── model/
│ ├── EggObject.ts # EggObject interface and lifecycle utils
│ ├── EggContext.ts # Request context interface
│ ├── AbstractEggContext.ts # Base context implementation
│ └── LoadUnitInstance.ts # Runtime instance of a LoadUnit
├── impl/
│ ├── EggObjectImpl.ts # Creates and initializes object instances
│ ├── EggObjectUtil.ts # Injection and lifecycle utilities
│ ├── ModuleLoadUnitInstance.ts # LoadUnitInstance for modules
│ └── ContextObjectGraph.ts # Per-request object graph
└── factory/
├── EggObjectFactory.ts # Creates EggObject instances
├── EggContainerFactory.ts # Manages object containers
└── LoadUnitInstanceFactory.ts # Creates LoadUnitInstance
```
#### @eggjs/tegg-types (`core/types`)
TypeScript type definitions organized by domain:
```
├── core-decorator/ # Types for core decorators
│ ├── enum/ # AccessLevel, ObjectInitType, EggType, etc.
│ └── model/ # EggPrototypeInfo, InjectObjectInfo, etc.
├── metadata/ # Types for metadata layer
├── runtime/ # Types for runtime layer
├── lifecycle/ # Lifecycle hook interfaces
└── controller-decorator/ # HTTP controller types
```
#### @eggjs/tegg-plugin (`plugin/tegg`)
Main Egg.js plugin that integrates tegg into an Egg application.
```
├── app.ts # Plugin entry: lifecycle hooks (didLoad, beforeClose)
├── app/
│ ├── extend/
│ │ ├── application.ts # Extends app with getEggObject, moduleHandler
│ │ └── context.ts # Extends ctx with getEggObject, beginModuleScope
│ └── middleware/
│ └── tegg_ctx_lifecycle_middleware.ts # Creates EggContext per request
└── lib/
├── ModuleHandler.ts # Orchestrates module loading and initialization
├── EggModuleLoader.ts # Loads modules using tegg-loader
├── EggContextHandler.ts # Manages EggContext lifecycle
├── EggContextImpl.ts # EggContext implementation for Egg
├── EggCompatibleObject.ts # Wraps egg app/ctx objects as prototypes
└── EggCompatibleProtoImpl.ts # Makes egg objects injectable
```
**Initialization flow in `app.ts`:**
1. `configWillLoad`: Register middleware
2. `configDidLoad`: Setup EggContextHandler, ModuleHandler
3. `didLoad`: Register hooks, call `moduleHandler.init()` to load all modules
4. `beforeClose`: Cleanup and destroy
#### @eggjs/tegg-standalone (`standalone/standalone`)
Provides a standalone runtime for tegg that works without Egg.js. This enables using tegg's dependency injection in CLI tools, background workers, or any Node.js application.
```
├── src/
│ ├── Runner.ts # Main orchestrator: loads modules, manages lifecycle
│ ├── main.ts # Simple entry point: main() function
│ ├── EggModuleLoader.ts # Loads modules using tegg-loader
│ ├── StandaloneContext.ts # EggContext implementation for standalone
│ ├── StandaloneContextHandler.ts # AsyncLocalStorage-based context management
│ ├── StandaloneLoadUnit.ts # LoadUnit for inner objects (logger, config, etc.)
│ └── StandaloneInnerObjectProto.ts # EggPrototype for inner objects
└── index.ts # Exports all public APIs
```
### Standalone Mode: How tegg Runs Without Egg.js
The standalone package replicates Egg.js plugin functionality using pure Node.js primitives:
**Key Differences from Egg.js Mode:**
| Aspect | Egg.js Mode | Standalone Mode |
|--------|------------|-----------------|
| Context storage | Egg.js request context | `AsyncLocalStorage` via `StandaloneContextHandler` |
| Context object | `EggContextImpl` (wraps Egg ctx) | `StandaloneContext` (extends `AbstractEggContext`) |
| Inner objects | From `app` and `ctx` | Manually provided via `innerObjectHandlers` |
| HTTP handling | Egg.js middleware | Not provided (bring your own) |
| Config loading | Egg.js config system | `ModuleConfigUtil` reads `module.yml` files |
**Initialization Flow:**
```
1. new Runner(cwd, options)
├── Read module references from cwd
├── Load module configs (module.default.yml, module.{env}.yml)
├── Register lifecycle hooks (AOP, DAL, etc.)
└── Create GlobalGraph instance
2. runner.init()
├── Register StandaloneContextHandler (AsyncLocalStorage)
├── Register StandaloneLoadUnit factory (for inner objects)
├── Load all modules via EggModuleLoader
│ ├── LoaderFactory.loadApp() → ModuleDescriptors
│ ├── GlobalGraph.create() → build dependency graph
│ ├── GlobalGraph.build() → resolve all injections
│ └── GlobalGraph.sort() → topological sort for init order
├── Create LoadUnitInstance for each LoadUnit
└── Find @Runner decorated class
3. runner.run()
├── Create StandaloneContext
├── ContextHandler.run(ctx, async () => {...})
│ └── Uses AsyncLocalStorage.run() internally
├── Get @Runner class instance via EggContainerFactory
├── Call runner.main()
└── Cleanup context on completion
4. runner.destroy()
├── Destroy all LoadUnitInstances
├── Destroy all LoadUnits
└── Unregister lifecycle hooks
```
**Context Management Without Egg.js:**
In Egg.js, each HTTP request has a context object (`ctx`). Standalone mode simulates this using `AsyncLocalStorage`:
```typescript
// StandaloneContextHandler.ts
export class StandaloneContextHandler {
static storage = new AsyncLocalStorage<EggContext>();
static register() {
// Tell ContextHandler how to get/run context
ContextHandler.getContextCallback = () => {
return StandaloneContextHandler.storage.getStore();
};
ContextHandler.runInContextCallback = (context, fn) => {
return StandaloneContextHandler.storage.run(context, fn);
};
}
}
```
This allows `@ContextProto` objects to work correctly - they are stored per-context in the `AsyncLocalStorage`.
**Inner Objects (Replacing Egg.js app/ctx):**
In Egg.js, objects like `logger`, `config` come from `app` or `ctx`. Standalone mode uses `innerObjectHandlers`:
```typescript
// Runner creates these automatically:
this.innerObjects = {
moduleConfigs: [{ obj: new ModuleConfigs(...) }],
moduleConfig: [...], // per-module configs with qualifiers
runtimeConfig: [{ obj: { baseDir, name, env } }],
mysqlDataSourceManager: [{ obj: MysqlDataSourceManager.instance }],
};
// Users can add custom inner objects:
const runner = new Runner(cwd, {
innerObjectHandlers: {
logger: [{ obj: myLogger }],
customService: [{
obj: myService,
qualifiers: [{ attribute: 'type', value: 'production' }],
}],
},
});
```
These inner objects are wrapped as `StandaloneInnerObjectProto` and registered in a special `StandaloneLoadUnit`, making them injectable via `@Inject()`.
### Using Standalone Mode
**Basic Usage:**
```typescript
// main.ts
import { ContextProto, Inject, SingletonProto } from '@eggjs/tegg';
import { Runner, MainRunner } from '@eggjs/tegg/standalone';
@SingletonProto()
export class MyService {
async doSomething() {
return 'hello';
}
}
@ContextProto()
@Runner() // Mark as entry point
export class MyApp implements MainRunner<string> {
@Inject()
myService: MyService;
async main(): Promise<string> {
return await this.myService.doSomething();
}
}
// Run it
import { main } from '@eggjs/tegg-standalone';
const result = await main<string>(__dirname);
console.log(result); // 'hello'
```
**With Dependencies and Custom Objects:**
```typescript
import { main, Runner } from '@eggjs/tegg-standalone';
const result = await main(__dirname, {
// Environment name (affects config loading)
env: 'production',
// Application name
name: 'my-app',
// Additional module paths to load
dependencies: [
'/path/to/other/module',
{ baseDir: '/path/to/module', extraFilePattern: ['!**/test'] },
],
// Custom injectable objects
innerObjectHandlers: {
logger: [{ obj: myLogger }],
config: [{
obj: myConfig,
qualifiers: [{ attribute: 'env', value: 'production' }],
}],
},
// Disable module descriptor dump (default: true)
dump: false,
});
```
**Advanced: Manual Runner Control:**
```typescript
import { Runner, StandaloneContext } from '@eggjs/tegg-standalone';
const runner = new Runner(__dirname, options);
await runner.init();
// Custom context with pre-set values
const ctx = new StandaloneContext();
ctx.set('requestId', '12345');
// Run multiple times with different contexts
const result1 = await runner.run(ctx);
const result2 = await runner.run(new StandaloneContext());
// Cleanup when done
await runner.destroy();
```
**PreLoad for Faster Startup:**
Use `preLoad()` to run lifecycle `preLoad` hooks before `main()`. This is useful for warming up caches or validating configuration:
```typescript
import { preLoad, main } from '@eggjs/tegg-standalone';
// Run preLoad hooks (e.g., validate config, warm caches)
await preLoad(__dirname, dependencies);
// Then run main
const result = await main(__dirname, { dependencies });
```
### Creating Standalone-Compatible Plugins
Plugins that support standalone mode need an `eggModule` field in `package.json`:
```json
{
"name": "@eggjs/tegg-my-plugin",
"eggPlugin": {
"name": "myPlugin",
"dependencies": ["tegg"]
},
"eggModule": {
"name": "teggMyPlugin"
}
}
```
The `eggModule.name` is used by standalone mode to identify the module. The plugin's prototypes will be loaded automatically when the plugin path is included in `dependencies`.
Plugins should avoid depending on Egg.js-specific APIs (`app`, `ctx`) directly. Instead:
- Use `@Inject()` for dependencies
- Use lifecycle hooks (`init()`, `destroy()`) instead of Egg.js lifecycle
- Provide factories that accept configuration via injection
================================================
FILE: LICENSE
================================================
MIT License
Copyright (c) 2017-present Alibaba Group Holding Limited and other contributors.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: README.md
================================================
# `@eggjs/tegg`
## Install
```shell
# tegg 注解
npm i --save @eggjs/tegg
# tegg 插件
npm i --save @eggjs/tegg-plugin
```
## Config
```js
// config/plugin.js
exports.tegg = {
package: '@eggjs/tegg-plugin',
enable: true,
};
```
```js
// config/config.default.js
{
tegg: {
// 读取模块支持自定义配置,可用于扩展或过滤不需要的模块文件
readModuleOptions: {
extraFilePattern: ['!**/dist', '!**/release'],
},
};
}
```
## Usage
### 原型
module 中的对象基本信息,提供了
- 实例化方式:每个请求实例化/全局单例/每次注入都实例化
- 访问级别:module 外是否可访问
#### ContextProto
每次请求都会实例化一个 ContextProto,并且只会实例化一次
##### 定义
```typescript
@ContextProto(params: {
// 原型的实例化名称
// 默认行为:会把 Proto 的首字母转为小写
// 如 UserAdapter 会转换为 userAdapter
// 如果有不符合预期的可以手动指定,比如
// @ContextProto({ name: 'mistAdapter' })
// MISTAdapter
// MISTAdapter 的实例名称即为 mistAdapter
name?: string;
// 对象是在 module 内可访问还是全局可访问
// PRIVATE: 仅 module 内可访问
// PUBLIC: 全局可访问
// 默认值为 PRIVATE
accessLevel?: AccessLevel;
})
```
##### 示例
###### 简单示例
```typescript
import { ContextProto } from '@eggjs/tegg';
@ContextProto()
export class HelloService {
async hello(): Promise<string> {
return 'hello, module!';
}
}
```
###### 复杂示例
```typescript
import { ContextProto, AccessLevel } from '@eggjs/tegg';
@ContextProto({
accessLevel: AccessLevel.PUBLIC,
name: 'helloInterface',
})
export default class HelloService {
async hello(user: User): Promise<string> {
const echoResponse = await this.echoAdapter.echo({ name: user.name });
return `hello, ${echoResponse.name}`;
}
}
```
#### SingletonProto
整个应用声明周期只会实例化一个 SingletonProto
##### 定义
```typescript
@SingletonProto(params: {
// 原型的实例化名称
// 默认行为:会把 Proto 的首字母转为小写
// 如 UserAdapter 会转换为 userAdapter
// 如果有不符合预期的可以手动指定,比如
// @SingletonProto({ name: 'mistAdapter' })
// MISTAdapter
// MISTAdapter 的实例名称即为 mistAdapter
name?: string;
// 对象是在 module 内可访问还是全局可访问
// PRIVATE: 仅 module 内可访问
// PUBLIC: 全局可访问
// 默认值为 PRIVATE
accessLevel?: AccessLevel;
})
```
##### 示例
###### 简单示例
```typescript
import { SingletonProto } from '@eggjs/tegg';
@SingletonProto()
export class HelloService {
async hello(): Promise<string> {
return 'hello, module!';
}
}
```
###### 复杂示例
```typescript
import { SingletonProto, AccessLevel } from '@eggjs/tegg';
@SingletonProto({
accessLevel: AccessLevel.PUBLIC,
name: 'helloInterface',
})
export class HelloService {
async hello(user: User): Promise<string> {
const echoResponse = await this.echoAdapter.echo({ name: user.name });
return `hello, ${echoResponse.name}`;
}
}
```
#### MultiInstanceProto
支持一个类有多个实例。比如说 logger 可能会初始化多个,用来输出到不同文件,db 可能会初始化多个,用来连接不同的数据库。
使用这个注解可以方便的对接外部资源。
##### 定义
```ts
// 静态定义
@MultiInstanceProto(params: {
// 对象的生命周期
// CONTEXT: 每个上下文都有一个实例
// SINGLETON: 整个应用生命周期只有一个实例
initType?: ObjectInitTypeLike;
// 对象是在 module 内可访问还是全局可访问
// PRIVATE: 仅 module 内可访问
// PUBLIC: 全局可访问
// 默认值为 PRIVATE
accessLevel?: AccessLevel;
// 高阶参数,指定类型的实现原型
protoImplType?: string;
// 对象元信息
objects: ObjectInfo[];
})
// 动态定义
@MultiInstanceProto(params: {
// 对象的生命周期
// CONTEXT: 每个上下文都有一个实例
// SINGLETON: 整个应用生命周期只有一个实例
initType?: ObjectInitTypeLike;
// 对象是在 module 内可访问还是全局可访问
// PRIVATE: 仅 module 内可访问
// PUBLIC: 全局可访问
// 默认值为 PRIVATE
accessLevel?: AccessLevel;
// 高阶参数,指定类型的实现原型
protoImplType?: string;
// 动态调用,获取对象元信息
// 仅会调用一次,调用后结果会被缓存
getObjects(ctx: MultiInstancePrototypeGetObjectsContext): ObjectInfo[];
})
```
##### 示例
首先定义一个自定义 Qualifier 注解
```ts
import {
QualifierUtil,
EggProtoImplClass,
} from '@eggjs/tegg';
export const LOG_PATH_ATTRIBUTE = Symbol.for('LOG_PATH_ATTRIBUTE');
export function LogPath(name: string) {
return function(target: any, propertyKey: PropertyKey) {
QualifierUtil.addProperQualifier(target.constructor as EggProtoImplClass, propertyKey, LOG_PATH_ATTRIBUTE, name);
};
}
```
定一个具体实现
```typescript
import {
MultiInstanceProto,
MultiInstancePrototypeGetObjectsContext,
LifecycleInit,
LifecycleDestroy,
QualifierUtil,
EggProtoImplClass,
} from '@eggjs/tegg';
import { EggObject, ModuleConfigUtil, EggObjectLifeCycleContext } from '@eggjs/tegg/helper';
import fs from 'node:fs';
import { Writable } from 'node:stream';
import path from 'node:path';
import { EOL } from 'node:os';
export const LOG_PATH_ATTRIBUTE = Symbol.for('LOG_PATH_ATTRIBUTE');
@MultiInstanceProto({
// 从 module.yml 中动态获取配置来决定需要初始化几个对象
getObjects(ctx: MultiInstancePrototypeGetObjectsContext) {
const config = ModuleConfigUtil.loadModuleConfigSync(ctx.unitPath);
return (config as any).features.logger.map(name => {
return {
name: 'dynamicLogger',
qualifiers: [{
attribute: LOG_PATH_ATTRIBUTE,
value: name,
}],
}
});
},
})
export class DynamicLogger {
stream: Writable;
loggerName: string;
@LifecycleInit()
async init(ctx: EggObjectLifeCycleContext, obj: EggObject) {
// 获取需要实例化对象的 Qualifieri
const loggerName = obj.proto.getQualifier(LOG_PATH_ATTRIBUTE);
this.loggerName = loggerName as string;
this.stream = fs.createWriteStream(path.join(ctx.loadUnit.unitPath, `${loggerName}.log`));
}
@LifecycleDestroy()
async destroy() {
return new Promise<void>((resolve, reject) => {
this.stream.end(err => {
if (err) {
return reject(err);
}
return resolve();
});
});
}
info(msg: string) {
return new Promise<void>((resolve, reject) => {
this.stream.write(msg + EOL,err => {
if (err) {
return reject(err);
}
return resolve();
});
});
}
}
```
使用 DynamicLogger.
```ts
@SingletonProto()
export class Foo {
@Inject({
name: 'dynamicLogger',
})
// 通过自定义注解来指定 Qualifier
@LogPath('foo')
fooDynamicLogger: DynamicLogger;
@Inject({
name: 'dynamicLogger',
})
@LogPath('bar')
barDynamicLogger: DynamicLogger;
async hello(): Promise<void> {
await this.fooDynamicLogger.info('hello, foo');
await this.barDynamicLogger.info('hello, bar');
}
}
```
#### 生命周期 hook
由于对象的生命周期交给了容器来托管,代码中无法感知什么时候对象初始化,什么时候依赖被注入了。所以提供了生命周期 hook 来实现这些通知的功能。
##### 定义
```typescript
/**
* lifecycle hook interface for egg object
*/
interface EggObjectLifecycle {
/**
* call after construct
*/
postConstruct?(): Promise<void>;
/**
* call before inject deps
*/
preInject?(): Promise<void>;
/**
* call after inject deps
*/
postInject?(): Promise<void>;
/**
* before object is ready
*/
init?(): Promise<void>;
/**
* call before destroy
*/
preDestroy?(): Promise<void>;
/**
* destroy the object
*/
destroy?(): Promise<void>;
}
```
##### 示例
```typescript
import { EggObjectLifecycle } from '@eggjs/tegg';
@ContextProto()
export class Foo implements EggObjectLifecycle {
// 构造函数
constructor() {
}
async postConstruct(): Promise<void> {
console.log('对象构造完成');
}
async preInject(): Promise<void> {
console.log('依赖将要注入');
}
async postInject(): Promise<void> {
console.log('依赖注入完成');
}
async init(): Promise<void> {
console.log('执行一些异步的初始化过程');
}
async preDestroy(): Promise<void> {
console.log('对象将要释放了');
}
async destroy(): Promise<void> {
console.log('执行一些释放资源的操作');
}
}
```
##### 生命周期方法装饰器
上面展示的 hook 是通过方法命名约定来实现生命周期 hook,我们还提供了更加可读性更强的装饰器模式。
```ts
import {
LifecyclePostConstruct,
LifecyclePreInject,
LifecyclePostInject,
LifecycleInit,
LifecyclePreDestroy,
LifecycleDestroy,
} from '@eggjs/tegg';
@SingletonProto({
accessLevel: AccessLevel.PUBLIC,
name: 'helloInterface',
})
export class HelloService {
@LifecyclePostConstruct()
protected async _postConstruct() {
console.log('对象构造完成');
}
@LifecyclePreInject()
protected async _preInject() {
console.log('依赖将要注入');
}
@LifecyclePostInject()
protected async _postInject() {
console.log('依赖注入完成');
}
@LifecycleInit()
protected async _init() {
console.log('执行一些异步的初始化过程');
}
@LifecyclePreDestroy()
protected async _preDestroy() {
console.log('对象将要释放了');
}
@LifecycleDestroy()
protected async _destroy() {
console.log('执行一些释放资源的操作');
}
async hello(user: User) {
const echoResponse = await this.echoAdapter.echo({ name: user.name });
return `hello, ${echoResponse.name}`;
}
}
```
### 注入
Proto 中可以依赖其他的 Proto,或者 egg 中的对象。
#### 定义
```typescript
@Inject(param?: {
// 注入对象的名称,在某些情况下一个原型可能有多个实例
// 比如说 egg 的 logger
// 默认为属性名称
name?: string;
// 注入原型的名称
// 在某些情况不希望注入的原型和属性使用一个名称
// 默认为属性名称
proto?: string;
// 注入对象是否为可选,默认为 false
// 若为 false,当不存在该对象时,启动阶段将会抛出异常
// 若为 true,且未找到对象时,该属性值为 undefined
optional?: boolean;
})
```
对于 optional 为 true 的情况,也提供了 InjectOptional 的 alias 装饰器
```typescript
// 等价于 @Inject({ ...params, optional: true })
@InjectOptional(params: {
// 注入对象的名称,在某些情况下一个原型可能有多个实例
// 比如说 egg 的 logger
// 默认为属性名称
name?: string;
// 注入原型的名称
// 在某些情况不希望注入的原型和属性使用一个名称
// 默认为属性名称
proto?: string;
})
```
#### 示例
##### 简单示例
```typescript
import { EggLogger } from 'egg';
import { Inject } from '@eggjs/tegg';
@ContextProto()
export class HelloService {
@Inject()
logger: EggLogger;
// 等价于 @Inject({ optional: true })
@InjectOptional()
maybeUndefinedLogger?: EggLogger;
async hello(user: User): Promise<string> {
this.logger.info(`[HelloService] hello ${user.name}`);
// optional inject 使用时,需要判断是否有值
if (this.maybeUndefinedLogger) {
this.maybeUndefinedLogger.info(`[HelloService] hello ${user.name}`);
}
const echoResponse = await this.echoAdapter.echo({ name: user.name });
return `hello, ${echoResponse.name}`;
}
}
```
也可在构造函数中使用 `Inject` 注解。注意 property 和 构造函数两种模式只能选一种,不能混用。
```typescript
import { EggLogger } from 'egg';
import { Inject } from '@eggjs/tegg';
@ContextProto()
export class HelloService {
constructor(
@Inject() readonly logger: EggLogger,
@InjectOptional() readonly maybeUndefinedLogger?: EggLogger,
) {}
async hello(user: User): Promise<string> {
this.logger.info(`[HelloService] hello ${user.name}`);
// optional inject 使用时,需要判断是否有值
if (this.maybeUndefinedLogger) {
this.maybeUndefinedLogger.info(`[HelloService] hello ${user.name}`);
}
const echoResponse = await this.echoAdapter.echo({ name: user.name });
return `hello, ${echoResponse.name}`;
}
}
```
##### 复杂示例
```typescript
import { EggLogger } from 'egg';
import { Inject } from '@eggjs/tegg';
@ContextProto()
export class HelloService {
// 在 config.default.js 中
// 配置了 customLogger,
// 名称为 bizLogger
@Inject({ name: 'bizLogger' })
logger: EggLogger;
async hello(user: User): Promise<string> {
this.logger.info(`[HelloService] hello ${user.name}`);
const echoResponse = await this.echoAdapter.echo({ name: user.name });
return `hello, ${echoResponse.name}`;
}
}
```
#### 限制
- ContextProto 可以注入任何 Proto 但是 SingletonProto 不能注入 ContextProto
- 原型之间不允许有循环依赖,比如 Proto A - inject -> Proto B - inject- > Proto A,这种是不行的
- 类似原型之间不允许有循环依赖,module 直接也不能有循环依赖
- 一个 module 内不能有实例化方式和名称同时相同的原型
- **不可以注入 ctx/app,用什么注入什么**
#### 兼容 egg
egg 中有 extend 方式,可以将对象扩展到 Context/Application 上,这些对象均可注入。Context 上的对象类比为 ContextProto,Application 上的对象类比为 SingletonProto。
#### 进阶
### module 内原型名称冲突
一个 module 内,有两个原型,原型名相同,实例化不同,这时直接 Inject 是不行的,module 无法理解具体需要哪个对象。这时就需要告知 module 需要注入的对象实例化方式是哪种。
###### 定义
```typescript
@InitTypeQualifier(initType: ObjectInitType)
```
###### 示例
```typescript
import { EggLogger } from 'egg';
import { Inject, InitTypeQualifier, ObjectInitType } from '@eggjs/tegg';
@ContextProto()
export class HelloService {
@Inject()
// 明确指定实例化方式为 CONTEXT 的 logger
@InitTypeQualifier(ObjectInitType.CONTEXT)
logger: EggLogger;
}
```
##### module 间原型名称冲突
可能多个 module 都实现了名称为 `HelloAdapter` 的原型, 且 `accessLevel = AccessLevel.PUBLIC`,需要明确的告知 module 需要注入的原型来自哪个 module.
###### 定义
```typescript
@ModuleQualifier(moduleName: string)
```
###### 示例
```typescript
import { EggLogger } from 'egg';
import { Inject, InitTypeQualifier, ObjectInitType } from '@eggjs/tegg';
@ContextProto()
export class HelloService {
@Inject()
// 明确指定使用来自 foo module 的 HelloAdapter
@ModuleQualifier('foo')
helloAdapter: HelloAdapter;
}
```
### egg 内 ctx/app 命名冲突
egg 内可能出现 ctx 和 app 上有同名对象的存在,我们可以通过使用 `EggQualifier` 来明确指定注入的对象来自 ctx 还是 app。不指定时,默认注入 app 上的对象。
###### 定义
```typescript
@EggQualifier(eggType: EggType)
```
###### 示例
```typescript
import { EggLogger } from 'egg';
import { Inject, EggQualifier, EggType } from '@eggjs/tegg';
@ContextProto()
export class HelloService {
@Inject()
// 明确指定注入 ctx 上的 foo 而不是 app 上的 foo
@EggQualifier(EggType.CONTEXT)
foo: Foo;
}
```
### 单测
#### 单测 Context
在单测中需要获取 egg Context 时,可以使用以下 API。
```typescript
export interface Application {
/**
* 创建 module 上下文 scope
*/
mockModuleContextScope<R=any>(this: MockApplication, fn: (ctx: Context) => Promise<R>, data?: any): Promise<R>;
}
```
#### 获取对象实例
在单测中需要获取 module 中的对象实例时,可以使用以下 API。
```typescript
export interface Application {
/**
* 通过一个类来获取实例
*/
getEggObject<T> (clazz: EggProtoImplClass<T> ): Promise <T>;
/**
* 通过对象名称来获取实例
*/
getEggObjectFromName<T>(name: string, qualifiers?: QualifierInfo | QualifierInfo[]): Promise<unknown>;
}
export interface Context {
/**
* 通过一个类来获取实例
*/
getEggObject<T> (clazz: EggProtoImplClass<T> ): Promise <T>;
/**
* 通过对象名称来获取实例
*/
getEggObjectFromName<T>(name: string, qualifiers?: QualifierInfo | QualifierInfo[]): Promise<unknown>;
}
```
### Egg 兼容性
目前 module 尚未实现所有 egg 的特性,如果需要使用 egg 的功能,可以通过一些方式来兼容。
##### Schedule
目前 Schedule 尚未实现注解,仍然需要使用 egg 的目录和继承方式,在这种场景下如果需要使用 module 的实现,需要使用 `ctx.beginModuleScope`。举个例子:
```typescript
// notify/EC_FOO.js
import { Subscription, Context } from 'egg;
class FooSubscriber extends Subscription {
private readonly ctx: Context;
constructor(ctx: Context) {
super(ctx);
}
async subscribe(msg) {
await ctx.beginModuleScope(async () => {
await ctx.module.fooService.hello(msg);
});
}
}
module.exports = Subscription;
```
#### 注入 egg 对象
module 会自动去遍历 egg 的 Application 和 Context 对象,获取其所有的属性,所有的属性都可以进行无缝的注入。举个例子,如何注入现在的 egg proxy:
```typescript
import { IProxy } from 'egg'
@ContextProto()
class FooService {
@Inject()
private readonly proxy: IProxy;
get fooFacade() {
return this.proxy.fooFacade;
}
}
```
##### 注入 logger
专为 logger 做了优化,可以直接注入 custom logger。
举个例子:
有一个自定义的 fooLogger
```javascript
// config.default.js
exports.customLogger = {
fooLogger: {
file: 'foo.log',
},
};
```
代码中可以直接注入:
```typescript
import { EggLogger } from 'egg';
class FooService {
@Inject()
private fooLogger: EggLogger;
}
```
#### 注入 egg 方法
由于 module 注入时,只可以注入对象,不能注入方法,如果需要使用现有 egg 的方法,就需要对方法进行一定的封装。
举个例子:假设 context 上有一个方法是 `getHeader`,在 module 中需要使用这个方法需要进行封装。
```typescript
// extend/context.ts
export default {
getHeader() {
return '23333';
}
}
```
先将方法封装成一个对象。
```typescript
// HeaderHelper.ts
class HeaderHelper {
constructor(ctx) {
this.ctx = ctx;
}
getHeader(): string {
return this.ctx.getHeader();
}
}
```
再将对象放到 Context 扩展上即可。
```typescript
// extend/context.ts
const HEADER_HELPER = Symbol('context#headerHelper');
export default {
get headerHelper() {
if (!this[HEADER_HELPER]) {
this[HEADER_HELPER] = new HeaderHelper(this);
}
return this[HEADER_HELPER];
}
}
```
### 生命周期
在 module 中,每个对象实例都有自己的生命周期,开发者可以对每个对象进行细致的控制。只要为对象实现 module 定义好的接口即可。所有生命周期 hook 均为可选方法,不需要的可以不实现。
#### 接口定义
```typescript
interface EggObjectLifecycle {
/**
* 在对象的构造函数执行完成之后执行
*/
async postConstruct?();
/**
* 在注入对象依赖之前执行
*/
async preInject?();
/**
* 在注入对象依赖之后执行
*/
async postInject?();
/**
* 执行对象自定义异步初始化函数
*/
async init?();
/**
* 在对象释放前执行
*/
async preDestroy?();
/**
* 释放对象依赖的底层资源
*/
async destroy?();
}
```
#### 实现
```typescript
import { EggObjectLifecycle } from '@eggjs/tegg';
@SingletonProto()
class FooService implement EggObjectLifecycle {
@Inject()
cacheService: CacheService;
cache: Record<string, string>;
async init() {
this.cache = await this.cacheService.get(key);
}
}
```
### 异步任务
module 在请求结束后会把请求相关的对象释放,所以在请求中使用 `process.nextTick`、 `setTimeout`、 `setInterval`这类接口并不安全,可能导致一些错误。因此需要使用框架提供的接口,以便框架了解当前请求有哪些异步任务在执行,等异步任务执行完成后再释放对象。
#### 安装
```shell
npm i --save @eggjs/tegg-background-task
```
#### 使用
```typescript
import { BackgroundTaskHelper } from '@eggjs/tegg-background-task';
@ContextProto()
export default class BackgroundService {
@Inject()
private readonly backgroundTaskHelper: BackgroundTaskHelper;
async backgroundAdd() {
this.backgroundTaskHelper.run(async () => {
// do the background task
});
}
}
```
#### 超时时间
框架不会无限的等待异步任务执行,在默认 5s 之后如果异步任务还没有完成则会放弃等待开始执行释放过程。如果需要等待更长的时间,建议有两种方式:
- **推荐方式:将异步任务转发给单例对象(SingletonProto)来执行,单例对象永远不会释放**
- 调整超时时间,对 `backgroundTaskHelper.timeout` 进行赋值即可
- 如果将超时时间设置为 `Infinity`,框架将不会超时
- 可以在 config 文件中指定 `backgroundTask.timeout` 来全局覆盖默认的超时时间
### 动态注入
#### 使用
定义一个抽象类和一个类型枚举。
```ts
export enum HelloType {
FOO = 'FOO',
BAR = 'BAR',
}
export abstract class AbstractHello {
abstract hello(): string;
}
```
定义一个自定义枚举。
```ts
import { ImplDecorator, QualifierImplDecoratorUtil } from '@eggjs/tegg';
import { ContextHelloType } from '../FooType';
import { AbstractContextHello } from '../AbstractHello';
export const HELLO_ATTRIBUTE = 'HELLO_ATTRIBUTE';
export const Hello: ImplDecorator<AbstractHello, typeof HelloType> =
QualifierImplDecoratorUtil.generatorDecorator(AbstractHello, HELLO_ATTRIBUTE);
```
实现抽象类。
```ts
import { ContextProto } from '@eggjs/tegg';
import { ContextHello } from '../decorator/Hello';
import { ContextHelloType } from '../FooType';
import { AbstractContextHello } from '../AbstractHello';
@ContextProto()
@Hello(HelloType.BAR)
export class BarHello extends AbstractHello {
hello(): string {
return `hello, bar`;
}
}
```
动态获取实现。
```ts
import { EggObjectFactory } from '@eggjs/tegg';
@ContextProto()
export class HelloService {
@Inject()
private readonly eggObjectFactory: EggObjectFactory;
async hello(): Promise<string> {
const helloImpl = await this.eggObjectFactory.getEggObject(AbstractHello, HelloType.BAR);
return helloImpl.hello();
}
}
```
动态获取多个实现,通过 for/await 循环获得实例。
```ts
import { EggObjectFactory } from '@eggjs/tegg';
@ContextProto()
export class HelloService {
@Inject()
private readonly eggObjectFactory: EggObjectFactory;
async hello(): Promise<string[]> {
const helloImpls = await this.eggObjectFactory.getEggObjects(AbstractHello);
const messages = [];
for await (const helloImpl of helloImpls) {
messages.push(helloImpl.hello());
}
return messages;
}
}
```
### 配置项目 module
一般情况下,无需在项目中手动声明包含了哪些 module,tegg 会自动在项目目录下进行扫描。但是会存在一些特殊的情况,tegg 无法扫描到,比如说 module 是通过 npm 包的方式来发布。因此 tegg 支持通过 `config/module.json` 的方式来声明包含了哪些 module。
支持通过 `path` 引用 `app/modules/foo` 目录下的 module。
```json
[
{"path": "../app/modules/foo"}
]
```
支持通过 `package` 引用使用 npm 发布的 module。
```json
[
{"package": "foo"}
]
```
================================================
FILE: benchmark/http/app/controller/FooTeggController.ts
================================================
import { HTTPController, HTTPMethod, HTTPMethodEnum } from '@eggjs/tegg';
@HTTPController()
export default class FooTeggController {
@HTTPMethod({
method: HTTPMethodEnum.GET,
path: '/hello',
})
async hello() {
return 'hello, tegg';
}
}
================================================
FILE: benchmark/http/app/controller/template/egg_controller_1.js
================================================
'use strict';
const { Controller } = require('egg');
module.exports = class EggController1 extends Controller {
async hello() {
this.ctx.body = 'hello,egg';
}
}
================================================
FILE: benchmark/http/app/router.js
================================================
'use strict';
module.exports = function (app) {
const { router, controller } = app;
app.get('/egg1', controller.template.eggController_1.hello);
};
================================================
FILE: benchmark/http/config/config.default.js
================================================
'use strict';
module.exports = {
keys: 'tegg_benchmark',
};
================================================
FILE: benchmark/http/config/plugin.js
================================================
'use strict'
module.exports = {
tegg: {
enable: true,
package: '@eggjs/tegg-plugin',
},
teggController: {
enable: true,
package: '@eggjs/tegg-controller-plugin',
},
teggConfig: {
enable: true,
package: '@eggjs/tegg-config',
},
};
================================================
FILE: benchmark/http/package.json
================================================
{
"name": "tegg_benchmark",
"egg": {
},
"scripts": {
"dev": "egg-bin dev"
},
"dependencies": {
"@eggjs/tegg": "^3.7.0",
"@eggjs/tegg-config": "^3.7.0",
"@eggjs/tegg-controller-plugin": "^3.7.0",
"@eggjs/tegg-plugin": "^3.7.0",
"@eggjs/tsconfig": "^1.1.0",
"egg": "^3.9.1"
},
"devDependencies": {
"egg-bin": "6"
}
}
================================================
FILE: benchmark/http/tsconfig.json
================================================
{
"extends": "@eggjs/tsconfig"
}
================================================
FILE: core/agent-runtime/CHANGELOG.md
================================================
# Change Log
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [3.78.15](https://github.com/eggjs/tegg/compare/v3.78.14...v3.78.15) (2026-04-23)
### Bug Fixes
* **agent-runtime:** hold cancelRun until executor session is committed ([#441](https://github.com/eggjs/tegg/issues/441)) ([4e02a28](https://github.com/eggjs/tegg/commit/4e02a28bdfe9b924c1190482fd3d85f8cad1fcfa))
## [3.78.14](https://github.com/eggjs/tegg/compare/v3.78.13...v3.78.14) (2026-04-21)
**Note:** Version bump only for package @eggjs/agent-runtime
## [3.78.13](https://github.com/eggjs/tegg/compare/v3.78.12...v3.78.13) (2026-04-21)
### Bug Fixes
* **agent-runtime:** persist thread messages when a run is aborted ([#439](https://github.com/eggjs/tegg/issues/439)) ([384ab1b](https://github.com/eggjs/tegg/commit/384ab1bf3c344177d8eb2593d35dab41361a31dc))
## [3.78.12](https://github.com/eggjs/tegg/compare/v3.78.11...v3.78.12) (2026-04-18)
**Note:** Version bump only for package @eggjs/agent-runtime
## [3.78.11](https://github.com/eggjs/tegg/compare/v3.78.10...v3.78.11) (2026-04-18)
**Note:** Version bump only for package @eggjs/agent-runtime
## [3.78.10](https://github.com/eggjs/tegg/compare/v3.78.9...v3.78.10) (2026-04-18)
**Note:** Version bump only for package @eggjs/agent-runtime
## [3.78.9](https://github.com/eggjs/tegg/compare/v3.78.8...v3.78.9) (2026-04-18)
**Note:** Version bump only for package @eggjs/agent-runtime
## [3.78.8](https://github.com/eggjs/tegg/compare/v3.78.7...v3.78.8) (2026-04-18)
**Note:** Version bump only for package @eggjs/agent-runtime
## [3.78.7](https://github.com/eggjs/tegg/compare/v3.78.6...v3.78.7) (2026-04-18)
**Note:** Version bump only for package @eggjs/agent-runtime
## [3.78.6](https://github.com/eggjs/tegg/compare/v3.78.4...v3.78.6) (2026-04-18)
**Note:** Version bump only for package @eggjs/agent-runtime
## [3.78.5](https://github.com/eggjs/tegg/compare/v3.78.4...v3.78.5) (2026-04-18)
**Note:** Version bump only for package @eggjs/agent-runtime
## [3.78.4](https://github.com/eggjs/tegg/compare/v3.78.3...v3.78.4) (2026-04-18)
**Note:** Version bump only for package @eggjs/agent-runtime
## [3.78.3](https://github.com/eggjs/tegg/compare/v3.78.2...v3.78.3) (2026-04-15)
**Note:** Version bump only for package @eggjs/agent-runtime
## [3.78.2](https://github.com/eggjs/tegg/compare/v3.78.1...v3.78.2) (2026-04-09)
### Bug Fixes
* **agent-runtime:** filter stream_event in all appendMessages calls ([#434](https://github.com/eggjs/tegg/issues/434)) ([c3b81bd](https://github.com/eggjs/tegg/commit/c3b81bdb108d07528a40fbf14162fcbeb3338c60)), closes [#433](https://github.com/eggjs/tegg/issues/433)
## [3.78.1](https://github.com/eggjs/tegg/compare/v3.78.0...v3.78.1) (2026-04-09)
**Note:** Version bump only for package @eggjs/agent-runtime
# [3.78.0](https://github.com/eggjs/tegg/compare/v3.77.2...v3.78.0) (2026-04-09)
### Features
* **agent-runtime:** rewrite streamRun with StreamEvent format and reconnection ([#432](https://github.com/eggjs/tegg/issues/432)) ([d03dac2](https://github.com/eggjs/tegg/commit/d03dac2ddd78641acb47e19275488ad9fbfcda2a))
## [3.77.2](https://github.com/eggjs/tegg/compare/v3.77.1...v3.77.2) (2026-04-07)
**Note:** Version bump only for package @eggjs/agent-runtime
## [3.77.1](https://github.com/eggjs/tegg/compare/v3.77.0...v3.77.1) (2026-04-01)
### Bug Fixes
* **agent-runtime:** handle all content_block_start and delta subtypes in normalizeContentBlocks ([#430](https://github.com/eggjs/tegg/issues/430)) ([119ba38](https://github.com/eggjs/tegg/commit/119ba3889a52b3577bf0aa23b6123c4d2fd4a23c))
# [3.77.0](https://github.com/eggjs/tegg/compare/v3.76.1...v3.77.0) (2026-04-01)
### Features
* **agent-runtime:** add normalizeContentBlocks for Anthropic SDK stream events ([#429](https://github.com/eggjs/tegg/issues/429)) ([d780fdb](https://github.com/eggjs/tegg/commit/d780fdba3cc243db4811af6733fda737f8c1dc4a))
## [3.76.1](https://github.com/eggjs/tegg/compare/v3.76.0...v3.76.1) (2026-04-01)
### Bug Fixes
* **agent-runtime:** merge content blocks and support accumulate control ([#428](https://github.com/eggjs/tegg/issues/428)) ([f4f904e](https://github.com/eggjs/tegg/commit/f4f904e357497fc5ad9a2c7d2ece4e9b305f5738))
# [3.76.0](https://github.com/eggjs/tegg/compare/v3.75.1...v3.76.0) (2026-04-01)
### Features
* **agent-runtime:** support custom SSE event types in streamRun ([#427](https://github.com/eggjs/tegg/issues/427)) ([2efe539](https://github.com/eggjs/tegg/commit/2efe539cd2673e27dc91cb4597751e6e0a9d4b67))
## [3.75.1](https://github.com/eggjs/tegg/compare/v3.75.0...v3.75.1) (2026-04-01)
### Bug Fixes
* **agent-runtime:** preserve non-text content blocks in MessageConverter ([#426](https://github.com/eggjs/tegg/issues/426)) ([8c4382f](https://github.com/eggjs/tegg/commit/8c4382f33f68534218049cfbfadfd4f6800a348c))
# [3.75.0](https://github.com/eggjs/tegg/compare/v3.74.0...v3.75.0) (2026-03-30)
**Note:** Version bump only for package @eggjs/agent-runtime
# [3.74.0](https://github.com/eggjs/tegg/compare/v3.73.0...v3.74.0) (2026-03-30)
### Bug Fixes
* **agent-runtime:** set isResume based on thread message history ([#419](https://github.com/eggjs/tegg/issues/419)) ([8a7eacc](https://github.com/eggjs/tegg/commit/8a7eacca79a94815251a0d660f828ebef443d12a))
# [3.73.0](https://github.com/eggjs/tegg/compare/v3.72.0...v3.73.0) (2026-03-25)
### Features
* add agent-runtime package with @AgentController decorator ([#411](https://github.com/eggjs/tegg/issues/411)) ([d4d0006](https://github.com/eggjs/tegg/commit/d4d00061e90230f82c0958bcf5268f8a511395db))
* **agent-runtime:** add isResume flag to CreateRunInput ([#414](https://github.com/eggjs/tegg/issues/414)) ([29ac989](https://github.com/eggjs/tegg/commit/29ac98995c0a37bb34d33f7ad81af7c664a67bce))
================================================
FILE: core/agent-runtime/index.ts
================================================
// Re-export types from @eggjs/tegg-types (backward compatible)
export * from '@eggjs/tegg-types/agent-runtime';
// Implementation code
export * from './src/OSSObjectStorageClient';
export * from './src/OSSAgentStore';
export * from './src/AgentStoreUtils';
export * from './src/MessageConverter';
export * from './src/RunBuilder';
export * from './src/SSEWriter';
export * from './src/HttpSSEWriter';
export { AgentRuntime, AGENT_RUNTIME } from './src/AgentRuntime';
export type { AgentExecutor, AgentRuntimeOptions } from './src/AgentRuntime';
================================================
FILE: core/agent-runtime/package.json
================================================
{
"name": "@eggjs/agent-runtime",
"version": "3.78.15",
"description": "Agent runtime with store abstraction for Egg.js tegg",
"keywords": [
"agent",
"egg",
"runtime",
"store",
"tegg"
],
"homepage": "https://github.com/eggjs/tegg/tree/master/core/agent-runtime",
"bugs": {
"url": "https://github.com/eggjs/tegg/issues"
},
"license": "MIT",
"repository": {
"type": "git",
"url": "git+https://github.com/eggjs/tegg.git",
"directory": "core/agent-runtime"
},
"files": [
"dist",
"index.js",
"index.d.ts"
],
"main": "dist/index.js",
"types": "dist/index.d.ts",
"scripts": {
"tsc": "tsc -p tsconfig.json",
"tsc:pub": "tsc -p tsconfig.pub.json",
"prepublishOnly": "npm run tsc:pub",
"test": "mocha"
},
"dependencies": {
"@eggjs/tegg-types": "^3.78.15",
"egg-logger": "^3.0.1",
"oss-client": "^2.5.1"
},
"devDependencies": {
"@types/mocha": "^10.0.0",
"@types/node": "^20.0.0",
"mocha": "^10.0.0",
"typescript": "^5.0.0"
},
"engines": {
"node": ">= 16.0.0"
}
}
================================================
FILE: core/agent-runtime/src/AgentRuntime.ts
================================================
import { EventEmitter } from 'node:events';
import { appendFileSync, createReadStream, mkdirSync, existsSync } from 'node:fs';
import { tmpdir } from 'node:os';
import { join } from 'node:path';
import { createInterface } from 'node:readline';
import type {
CreateRunInput,
GetThreadOptions,
ThreadObject,
ThreadObjectWithMessages,
RunObject,
AgentMessage,
AgentStore,
StreamEvent,
} from '@eggjs/tegg-types/agent-runtime';
import {
RunStatus,
AgentObjectType,
AgentConflictError,
AgentNotFoundError,
AgentTimeoutError,
} from '@eggjs/tegg-types/agent-runtime';
import type { EggLogger } from 'egg-logger';
import { MessageConverter } from './MessageConverter';
import { RunBuilder } from './RunBuilder';
import type { SSEWriter } from './SSEWriter';
const HEARTBEAT_INTERVAL_MS = 10_000;
const EVENT_DIR = join(tmpdir(), 'agent-runtime-events');
const DEFAULT_CANCEL_COMMIT_TIMEOUT_MS = 30_000;
interface RunEventBuffer {
filePath: string;
lastSeq: number;
done: boolean;
emitter: EventEmitter;
}
export const AGENT_RUNTIME: unique symbol = Symbol('agentRuntime');
/**
* The executor interface — execRun is required so the runtime can delegate
* execution back through the controller's prototype chain (AOP/mock friendly).
*
* `isSessionCommitted` is an optional hook that lets the executor tell the
* runtime when its underlying session has been persisted to storage (e.g. the
* Claude Code SDK jsonl file). The runtime uses this to decide when a pending
* `cancelRun` can safely abort and persist the thread. See AgentHandler.ts
* for the semantics and the default heuristic used when this hook is absent.
*/
export interface AgentExecutor {
execRun(input: CreateRunInput, signal?: AbortSignal): AsyncGenerator<AgentMessage>;
isSessionCommitted?(msg: AgentMessage, history: AgentMessage[]): boolean | Promise<boolean>;
}
export interface AgentRuntimeOptions {
executor: AgentExecutor;
store: AgentStore;
logger: EggLogger;
/**
* How long cancelRun should wait for the executor's session to become
* committed before giving up and marking the run as failed. Defaults to
* 30 seconds.
*/
cancelCommitTimeoutMs?: number;
}
interface RunTaskState {
promise: Promise<void>;
abortController: AbortController;
/** True once the executor has reported (or the heuristic has detected) that
* its session is safely persisted and the run can be cancelled cleanly. */
committed: boolean;
/** Emits 'commit' the first time committed flips to true, and 'end' when the
* task's execution finally finishes (success, failure, or abort). */
emitter: EventEmitter;
}
export class AgentRuntime {
private static readonly TERMINAL_RUN_STATUSES = new Set<RunStatus>([
RunStatus.Completed,
RunStatus.Failed,
RunStatus.Cancelled,
RunStatus.Expired,
]);
// Statuses that must short-circuit the "write Completed" path in the
// execution loops. Covers a TOCTOU window where another actor (most
// notably cancelRun's commit-timeout watchdog, which writes Failed) sets
// a terminal state while this worker has just exited the for-await loop
// but hasn't yet written rb.complete(usage). Completed is intentionally
// excluded so the normal success path is not routed through here.
private static readonly POST_LOOP_TERMINAL_STATUSES = new Set<RunStatus>([
RunStatus.Cancelling,
RunStatus.Cancelled,
RunStatus.Failed,
RunStatus.Expired,
]);
private store: AgentStore;
private runningTasks: Map<string, RunTaskState>;
private runBuffers: Map<string, RunEventBuffer>;
private executor: AgentExecutor;
private logger: EggLogger;
private cancelCommitTimeoutMs: number;
constructor(options: AgentRuntimeOptions) {
this.executor = options.executor;
this.store = options.store;
if (!options.logger) {
throw new Error('AgentRuntimeOptions.logger is required');
}
this.logger = options.logger;
this.cancelCommitTimeoutMs = options.cancelCommitTimeoutMs ?? DEFAULT_CANCEL_COMMIT_TIMEOUT_MS;
this.runningTasks = new Map();
this.runBuffers = new Map();
}
async createThread(): Promise<ThreadObject> {
const thread = await this.store.createThread();
return {
id: thread.id,
object: AgentObjectType.Thread,
createdAt: thread.createdAt,
metadata: thread.metadata ?? {},
};
}
async getThread(threadId: string, options?: GetThreadOptions): Promise<ThreadObjectWithMessages> {
const thread = await this.store.getThread(threadId, options);
return {
id: thread.id,
object: AgentObjectType.Thread,
createdAt: thread.createdAt,
metadata: thread.metadata ?? {},
messages: thread.messages,
};
}
private async ensureThread(input: CreateRunInput): Promise<{ threadId: string; input: CreateRunInput }> {
if (input.threadId) {
const thread = await this.store.getThread(input.threadId);
const isResume = thread.messages.length > 0;
return { threadId: input.threadId, input: { ...input, isResume } };
}
const thread = await this.store.createThread();
return { threadId: thread.id, input: { ...input, threadId: thread.id, isResume: false } };
}
async syncRun(input: CreateRunInput, signal?: AbortSignal): Promise<RunObject> {
const { threadId, input: resolvedInput } = await this.ensureThread(input);
input = resolvedInput;
const run = await this.store.createRun(input.input.messages, threadId, input.config, input.metadata);
const rb = RunBuilder.create(run, threadId);
// Bridge external signal to an internal AbortController so cancelRun can abort syncRun
const abortController = new AbortController();
if (signal) {
if (signal.aborted) {
abortController.abort();
} else {
signal.addEventListener('abort', () => abortController.abort(), { once: true });
}
}
// Register in runningTasks so cancelRun can find and await this run.
let resolveTask!: () => void;
const taskPromise = new Promise<void>(r => {
resolveTask = r;
});
const task: RunTaskState = {
promise: taskPromise,
abortController,
committed: false,
emitter: new EventEmitter(),
};
this.runningTasks.set(run.id, task);
const streamMessages: AgentMessage[] = [];
try {
await this.store.updateRun(run.id, rb.start());
for await (const msg of this.executor.execRun(input, abortController.signal)) {
if (abortController.signal.aborted) {
if (task.committed) {
await this.persistMessagesOnAbort(threadId, input, streamMessages);
}
await this.finaliseAbortedRun(run.id);
const latest = await this.store.getRun(run.id);
return RunBuilder.fromRecord(latest).snapshot();
}
streamMessages.push(msg);
await this.markCommittedIfNeeded(task, msg, streamMessages);
}
// TOCTOU: another worker (e.g. cancelRun, or its commit-timeout
// watchdog which writes Failed) may have terminated this run while
// we were finishing the last iterator.next(). Respect the already-set
// terminal state instead of overwriting it with Completed.
const currentRun = await this.store.getRun(run.id);
if (AgentRuntime.POST_LOOP_TERMINAL_STATUSES.has(currentRun.status)) {
if (task.committed) {
await this.persistMessagesOnAbort(threadId, input, streamMessages);
}
await this.finaliseAbortedRun(run.id);
const latest = await this.store.getRun(run.id);
return RunBuilder.fromRecord(latest).snapshot();
}
const usage = MessageConverter.extractUsage(streamMessages);
// Append input messages + stream messages to thread (excluding stream_event deltas)
await this.store.appendMessages(threadId, [
...MessageConverter.toAgentMessages(input.input.messages),
...MessageConverter.filterForStorage(streamMessages),
]);
await this.store.updateRun(run.id, rb.complete(usage));
return rb.snapshot();
} catch (err: unknown) {
if (abortController.signal.aborted) {
if (task.committed) {
await this.persistMessagesOnAbort(threadId, input, streamMessages);
}
await this.finaliseAbortedRun(run.id);
const latest = await this.store.getRun(run.id);
return RunBuilder.fromRecord(latest).snapshot();
}
try {
await this.store.updateRun(run.id, rb.fail(err as Error));
} catch (storeErr) {
this.logger.error('[AgentRuntime] failed to update run status after syncRun error:', storeErr);
}
throw err;
} finally {
task.emitter.emit('end');
resolveTask();
this.runningTasks.delete(run.id);
}
}
async asyncRun(input: CreateRunInput): Promise<RunObject> {
const { threadId, input: resolvedInput } = await this.ensureThread(input);
input = resolvedInput;
const run = await this.store.createRun(input.input.messages, threadId, input.config, input.metadata);
const rb = RunBuilder.create(run, threadId);
const abortController = new AbortController();
// Capture queued snapshot before background task mutates state
const queuedSnapshot = rb.snapshot();
// Register in runningTasks before the IIFE starts executing to avoid a race
let resolveTask!: () => void;
const taskPromise = new Promise<void>(r => {
resolveTask = r;
});
const task: RunTaskState = {
promise: taskPromise,
abortController,
committed: false,
emitter: new EventEmitter(),
};
this.runningTasks.set(run.id, task);
(async () => {
const streamMessages: AgentMessage[] = [];
try {
await this.store.updateRun(run.id, rb.start());
for await (const msg of this.executor.execRun(input, abortController.signal)) {
if (abortController.signal.aborted) {
if (task.committed) {
await this.persistMessagesOnAbort(threadId, input, streamMessages);
}
await this.finaliseAbortedRun(run.id);
return;
}
streamMessages.push(msg);
await this.markCommittedIfNeeded(task, msg, streamMessages);
}
// TOCTOU: respect any terminal-ish status set by another worker
// (cancelRun, its commit-timeout watchdog which writes Failed, or
// an external expiration) instead of overwriting it with Completed.
const currentRun = await this.store.getRun(run.id);
if (AgentRuntime.POST_LOOP_TERMINAL_STATUSES.has(currentRun.status)) {
return;
}
const usage = MessageConverter.extractUsage(streamMessages);
// Append input messages + stream messages to thread (excluding stream_event deltas)
await this.store.appendMessages(threadId, [
...MessageConverter.toAgentMessages(input.input.messages),
...MessageConverter.filterForStorage(streamMessages),
]);
await this.store.updateRun(run.id, rb.complete(usage));
} catch (err: unknown) {
if (!abortController.signal.aborted) {
try {
const currentRun = await this.store.getRun(run.id);
if (currentRun.status !== RunStatus.Cancelling && currentRun.status !== RunStatus.Cancelled) {
await this.store.updateRun(run.id, rb.fail(err as Error));
}
} catch (storeErr) {
this.logger.error('[AgentRuntime] failed to update run status after error:', storeErr);
}
} else {
if (task.committed) {
await this.persistMessagesOnAbort(threadId, input, streamMessages);
}
await this.finaliseAbortedRun(run.id);
this.logger.error('[AgentRuntime] execRun error during abort:', err);
}
} finally {
task.emitter.emit('end');
resolveTask();
this.runningTasks.delete(run.id);
}
})();
return queuedSnapshot;
}
/**
* Start a streaming run with background execution.
* The task continues running even if the SSE client disconnects.
* Events are persisted to a JSONL file for reconnection support.
*/
async streamRun(input: CreateRunInput, writer: SSEWriter): Promise<void> {
const { threadId, input: resolvedInput } = await this.ensureThread(input);
input = resolvedInput;
const run = await this.store.createRun(input.input.messages, threadId, input.config, input.metadata);
const rb = RunBuilder.create(run, threadId);
// Create event buffer for this run (events persisted to JSONL file)
if (!existsSync(EVENT_DIR)) {
mkdirSync(EVENT_DIR, { recursive: true });
}
const buffer: RunEventBuffer = {
filePath: join(EVENT_DIR, `${run.id}.jsonl`),
lastSeq: 0,
done: false,
emitter: new EventEmitter(),
};
this.runBuffers.set(run.id, buffer);
// Emit initial lifecycle event
this.pushEvent(buffer, 'run_created', { runId: run.id, threadId });
// Start background execution (not tied to SSE connection)
const abortController = new AbortController();
let resolveTask!: () => void;
const taskPromise = new Promise<void>(r => {
resolveTask = r;
});
const task: RunTaskState = {
promise: taskPromise,
abortController,
committed: false,
emitter: new EventEmitter(),
};
this.runningTasks.set(run.id, task);
this.executeStreamBackground(input, run.id, threadId, rb, buffer, task)
.finally(() => {
task.emitter.emit('end');
resolveTask();
this.runningTasks.delete(run.id);
this.runBuffers.delete(run.id);
buffer.emitter.removeAllListeners();
});
// Stream events to the current client
await this.streamEventsToWriter(buffer, writer, 0);
}
/**
* Reconnect to a running or completed run's event stream.
* Replays events after lastSeq, then continues real-time if still running.
*/
async getRunStream(runId: string, writer: SSEWriter, lastSeq = 0): Promise<void> {
const buffer = this.runBuffers.get(runId);
if (buffer) {
await this.streamEventsToWriter(buffer, writer, lastSeq);
return;
}
// Task already finished — replay from JSONL file directly
const filePath = join(EVENT_DIR, `${runId}.jsonl`);
if (!existsSync(filePath)) {
throw new AgentNotFoundError(`Run event stream not found: ${runId}`);
}
for await (const event of this.readEventsFromFile(filePath, lastSeq)) {
if (writer.closed) return;
writer.writeEvent(event.type, event);
}
if (!writer.closed) writer.end();
}
private pushEvent(buffer: RunEventBuffer, type: string, data: unknown): void {
const event: StreamEvent = {
seq: ++buffer.lastSeq,
type,
data,
ts: Date.now(),
};
appendFileSync(buffer.filePath, JSON.stringify(event) + '\n');
buffer.emitter.emit('event', event);
}
/**
* Execute the run in the background, persisting events to JSONL file.
* AgentMessage objects are passed through directly as event data.
*/
private async executeStreamBackground(
input: CreateRunInput,
runId: string,
threadId: string,
rb: RunBuilder,
buffer: RunEventBuffer,
task: RunTaskState,
): Promise<void> {
const abortController = task.abortController;
const streamMessages: AgentMessage[] = [];
try {
await this.store.updateRun(runId, rb.start());
for await (const msg of this.executor.execRun(input, abortController.signal)) {
if (abortController.signal.aborted) {
if (task.committed) {
await this.persistMessagesOnAbort(threadId, input, streamMessages);
}
await this.finaliseAbortedRun(runId);
this.pushEvent(buffer, 'error', { message: 'cancelled', runId });
return;
}
streamMessages.push(msg);
// Pass through SDK message directly as event data
const eventType = msg.type || 'message';
this.pushEvent(buffer, eventType, msg);
await this.markCommittedIfNeeded(task, msg, streamMessages);
}
// TOCTOU: respect any terminal-ish status set by another worker
// (cancelRun, its commit-timeout watchdog which writes Failed, or
// an external expiration) instead of overwriting it with Completed.
const currentRun = await this.store.getRun(runId);
if (AgentRuntime.POST_LOOP_TERMINAL_STATUSES.has(currentRun.status)) {
if (task.committed) {
await this.persistMessagesOnAbort(threadId, input, streamMessages);
}
this.pushEvent(buffer, 'error', { message: currentRun.status, runId });
return;
}
// Persist to store (excluding stream_event deltas)
const usage = MessageConverter.extractUsage(streamMessages);
await this.store.appendMessages(threadId, [
...MessageConverter.toAgentMessages(input.input.messages),
...MessageConverter.filterForStorage(streamMessages),
]);
await this.store.updateRun(runId, rb.complete(usage));
this.pushEvent(buffer, 'done', { result: 'success', runId });
} catch (err: unknown) {
if (!abortController.signal.aborted) {
try {
const currentRun = await this.store.getRun(runId);
if (currentRun.status !== RunStatus.Cancelling && currentRun.status !== RunStatus.Cancelled) {
await this.store.updateRun(runId, rb.fail(err as Error));
}
} catch (storeErr) {
this.logger.error('[AgentRuntime] failed to update run status after error:', storeErr);
}
this.pushEvent(buffer, 'error', { message: (err as Error).message, runId });
} else {
if (task.committed) {
await this.persistMessagesOnAbort(threadId, input, streamMessages);
}
await this.finaliseAbortedRun(runId);
this.logger.error('[AgentRuntime] execRun error during abort:', err);
this.pushEvent(buffer, 'error', { message: 'cancelled', runId });
}
} finally {
buffer.done = true;
buffer.emitter.emit('event');
}
}
/**
* Flip the task's `committed` flag the first time the executor's current
* message indicates its session has been persisted to storage. Uses the
* executor's `isSessionCommitted` hook when available, otherwise a default
* heuristic where any message with `type !== 'system'` counts as committed
* (the Claude Code SDK writes the jsonl around the first non-system event).
*/
private async markCommittedIfNeeded(
task: RunTaskState,
msg: AgentMessage,
history: AgentMessage[],
): Promise<void> {
if (task.committed) return;
let committed: boolean;
try {
committed = typeof this.executor.isSessionCommitted === 'function'
? await this.executor.isSessionCommitted(msg, history)
: msg.type !== 'system';
} catch (err) {
this.logger.error('[AgentRuntime] isSessionCommitted threw, treating as not committed:', err);
committed = false;
}
if (committed) {
task.committed = true;
task.emitter.emit('commit');
}
}
/**
* Wait until the task reports that its session is committed, or the task
* finishes on its own, or the timeout elapses. Rejects with
* AgentTimeoutError on timeout. Resolves without error when the task ends
* before committing — in that case the caller should re-read the run's
* terminal status rather than trying to cancel further.
*/
private waitForCommitted(task: RunTaskState, timeoutMs: number): Promise<void> {
if (task.committed) return Promise.resolve();
return new Promise<void>((resolve, reject) => {
// Handlers need to reference each other (cleanup must off() all of
// commit / end / timer), which would force a forward reference if the
// arrow functions referred to each other by name. Stash them on a
// shared container so cleanup can read them by property access and the
// source order stays linear.
const refs: {
timer?: ReturnType<typeof globalThis.setTimeout>;
onCommit?: () => void;
onEnd?: () => void;
} = {};
const cleanup = (): void => {
if (refs.timer) clearTimeout(refs.timer);
if (refs.onCommit) task.emitter.off('commit', refs.onCommit);
if (refs.onEnd) task.emitter.off('end', refs.onEnd);
};
refs.onCommit = () => {
cleanup();
resolve();
};
refs.onEnd = () => {
cleanup();
resolve();
};
refs.timer = globalThis.setTimeout(() => {
cleanup();
reject(new AgentTimeoutError(
`Timed out waiting ${timeoutMs}ms for executor session to be committed before cancel`,
));
}, timeoutMs);
task.emitter.once('commit', refs.onCommit);
task.emitter.once('end', refs.onEnd);
});
}
/**
* Persist input + collected stream messages to the thread when a run is
* aborted. Keeping the thread in sync with any partial state that the
* executor has already written (e.g. Claude CLI session file) is what
* allows subsequent resume requests to continue from a consistent history
* instead of diverging and failing at executor startup.
*
* Callers must check `task.committed` before invoking this; if the
* executor never reached a committed state the thread should be left
* untouched so the next run starts fresh instead of trying to resume a
* session that was never created on disk.
*
* Errors are swallowed here so a store failure cannot mask the abort or
* prevent cancelRun from finalising the run status.
*/
private async persistMessagesOnAbort(
threadId: string,
input: CreateRunInput,
streamMessages: AgentMessage[],
): Promise<void> {
try {
await this.store.appendMessages(threadId, [
...MessageConverter.toAgentMessages(input.input.messages),
...MessageConverter.filterForStorage(streamMessages),
]);
} catch (err) {
this.logger.error('[AgentRuntime] failed to persist messages on abort:', err);
}
}
/**
* Push an aborted run to a terminal `cancelled` state when nobody else
* will. Abort can be driven either by `cancelRun` — which already owns
* the `in_progress → cancelling → cancelled` transition — or by an
* external `AbortSignal` / `destroy()`, where the run would otherwise
* stay stuck in `in_progress` forever.
*
* Behaviour:
* - terminal status (completed/failed/cancelled/expired): no-op.
* - `cancelling`: no-op, let `cancelRun` finish the transition.
* - `in_progress` / `queued`: write `cancelling` then `cancelled`.
*
* Errors are swallowed so a store failure cannot mask the abort.
*/
private async finaliseAbortedRun(runId: string): Promise<void> {
try {
const current = await this.store.getRun(runId);
if (AgentRuntime.TERMINAL_RUN_STATUSES.has(current.status)) return;
if (current.status === RunStatus.Cancelling) return;
const rb = RunBuilder.fromRecord(current);
await this.store.updateRun(runId, rb.cancelling());
await this.store.updateRun(runId, rb.cancel());
} catch (err) {
this.logger.error('[AgentRuntime] failed to finalise aborted run:', err);
}
}
private async* readEventsFromFile(filePath: string, afterSeq: number): AsyncGenerator<StreamEvent> {
if (!existsSync(filePath)) return;
const rl = createInterface({ input: createReadStream(filePath) });
for await (const line of rl) {
if (!line.trim()) continue;
try {
const event = JSON.parse(line) as StreamEvent;
if (event.seq > afterSeq) {
yield event;
}
} catch {
// skip malformed lines
}
}
}
private async streamEventsToWriter(
buffer: RunEventBuffer,
writer: SSEWriter,
lastSeq: number,
): Promise<void> {
// Phase 1: Replay from JSONL file
let lastWrittenSeq = lastSeq;
for await (const event of this.readEventsFromFile(buffer.filePath, lastSeq)) {
if (writer.closed) return;
writer.writeEvent(event.type, event);
lastWrittenSeq = event.seq;
}
if (buffer.done) {
if (!writer.closed) writer.end();
return;
}
// Phase 2: Real-time events via EventEmitter + heartbeat
const queue: StreamEvent[] = [];
let waitResolve: (() => void) | null = null;
function onEvent(event?: StreamEvent): void {
if (event) queue.push(event);
waitResolve?.();
}
buffer.emitter.on('event', onEvent);
try {
// Catch-up: drain any events that arrived during Phase 1 file read
for await (const event of this.readEventsFromFile(buffer.filePath, lastWrittenSeq)) {
if (writer.closed) return;
if (event.seq > lastWrittenSeq) {
writer.writeEvent(event.type, event);
lastWrittenSeq = event.seq;
}
}
const waitForEvent = () => new Promise<'event' | 'heartbeat'>(resolve => {
waitResolve = () => resolve('event');
setTimeout(() => resolve('heartbeat'), HEARTBEAT_INTERVAL_MS);
});
while (!buffer.done || queue.length > 0) {
while (queue.length > 0) {
const event = queue.shift()!;
if (event.seq > lastWrittenSeq) {
if (writer.closed) return;
writer.writeEvent(event.type, event);
lastWrittenSeq = event.seq;
}
}
if (buffer.done) break;
if (writer.closed) return;
const reason = await waitForEvent();
waitResolve = null;
if (reason === 'heartbeat' && queue.length === 0 && !buffer.done) {
if (writer.closed) return;
writer.writeComment('keepalive');
}
}
} finally {
buffer.emitter.off('event', onEvent);
}
if (!writer.closed) writer.end();
}
async getRun(runId: string): Promise<RunObject> {
const run = await this.store.getRun(runId);
return RunBuilder.fromRecord(run).snapshot();
}
/**
* Cancel a running task. The call blocks until either (a) the executor
* reports its session is safely committed to storage, and the task has
* been aborted and the thread persisted, or (b) the commit watchdog times
* out, in which case the run is marked `failed` (not `cancelled`) and
* AgentTimeoutError is thrown to the caller.
*
* The hold is there to guarantee that whatever user input the thread
* records on abort is also present in the executor's own persistent
* session (e.g. Claude Code SDK jsonl), so a subsequent resume request
* on the same thread doesn't diverge from a session that was never
* actually written.
*/
async cancelRun(runId: string): Promise<RunObject> {
const run = await this.store.getRun(runId);
if (AgentRuntime.TERMINAL_RUN_STATUSES.has(run.status)) {
throw new AgentConflictError(`Cannot cancel run with status '${run.status}'`);
}
const rb = RunBuilder.fromRecord(run);
await this.store.updateRun(runId, rb.cancelling());
const task = this.runningTasks.get(runId);
if (task) {
if (!task.committed) {
this.logger.info(
'[AgentRuntime] cancelRun %s holding up to %dms for executor session to commit',
runId,
this.cancelCommitTimeoutMs,
);
try {
await this.waitForCommitted(task, this.cancelCommitTimeoutMs);
} catch (err) {
// Commit watchdog timed out. Mark the run as failed *before*
// aborting so the execution path's finaliseAbortedRun sees a
// terminal status and skips the cancelled transition. The thread
// is left untouched because task.committed is still false.
this.logger.error(
'[AgentRuntime] cancelRun %s timed out after %dms waiting for executor to commit; marking run failed and leaving thread untouched',
runId,
this.cancelCommitTimeoutMs,
);
try {
await this.store.updateRun(runId, rb.fail(err as Error));
} catch (storeErr) {
this.logger.error('[AgentRuntime] failed to mark run failed after cancel timeout:', storeErr);
}
task.abortController.abort();
await task.promise.catch(() => {
/* ignore */
});
throw err;
}
}
task.abortController.abort();
await task.promise.catch(() => {
/* ignore */
});
}
const freshRun = await this.store.getRun(runId);
if (AgentRuntime.TERMINAL_RUN_STATUSES.has(freshRun.status)) {
return RunBuilder.fromRecord(freshRun).snapshot();
}
try {
await this.store.updateRun(runId, rb.cancel());
} catch (err) {
this.logger.error('[AgentRuntime] failed to write cancelled state after cancelling:', err);
const fallback = await this.store.getRun(runId);
return RunBuilder.fromRecord(fallback).snapshot();
}
return rb.snapshot();
}
async waitForPendingTasks(): Promise<void> {
if (this.runningTasks.size) {
const pending = Array.from(this.runningTasks.values()).map(t => t.promise);
await Promise.allSettled(pending);
}
}
async destroy(): Promise<void> {
for (const task of this.runningTasks.values()) {
task.abortController.abort();
}
await this.waitForPendingTasks();
for (const buffer of this.runBuffers.values()) {
buffer.emitter.removeAllListeners();
}
this.runBuffers.clear();
if (this.store.destroy) {
await this.store.destroy();
}
}
static create(options: AgentRuntimeOptions): AgentRuntime {
return new AgentRuntime(options);
}
}
================================================
FILE: core/agent-runtime/src/AgentStoreUtils.ts
================================================
import crypto from 'node:crypto';
export function nowUnix(): number {
return Math.floor(Date.now() / 1000);
}
export function newMsgId(): string {
return `msg_${crypto.randomUUID()}`;
}
export function newThreadId(): string {
return `thread_${crypto.randomUUID()}`;
}
export function newRunId(): string {
return `run_${crypto.randomUUID()}`;
}
================================================
FILE: core/agent-runtime/src/HttpSSEWriter.ts
================================================
import type { ServerResponse } from 'node:http';
import type { SSEWriter } from './SSEWriter';
export class HttpSSEWriter implements SSEWriter {
private res: ServerResponse;
private _closed = false;
private closeCallbacks: Array<() => void> = [];
private headersSent = false;
private readonly onResClose: () => void;
constructor(res: ServerResponse) {
this.res = res;
this.onResClose = () => {
this._closed = true;
for (const cb of this.closeCallbacks) cb();
this.closeCallbacks.length = 0;
};
res.on('close', this.onResClose);
}
/** Lazily write headers on first event — avoids sending corrupt headers if constructor throws. */
private ensureHeaders(): void {
if (this.headersSent) return;
this.headersSent = true;
this.res.writeHead(200, {
'content-type': 'text/event-stream',
'cache-control': 'no-cache',
connection: 'keep-alive',
});
}
writeEvent(event: string, data: unknown): void {
if (this._closed) return;
this.ensureHeaders();
this.res.write(`event: ${event}\ndata: ${JSON.stringify(data)}\n\n`);
}
writeComment(text: string): void {
if (this._closed) return;
this.ensureHeaders();
this.res.write(`: ${text}\n\n`);
}
get closed(): boolean {
return this._closed;
}
end(): void {
if (!this._closed) {
this._closed = true;
this.res.off('close', this.onResClose);
this.closeCallbacks.length = 0;
this.res.end();
}
}
onClose(callback: () => void): void {
this.closeCallbacks.push(callback);
}
}
================================================
FILE: core/agent-runtime/src/MessageConverter.ts
================================================
import type {
AgentMessage,
InputMessage,
SDKResultMessage,
} from '@eggjs/tegg-types/agent-runtime';
import type { RunUsage } from './RunBuilder';
export class MessageConverter {
/**
* Extract accumulated usage from AgentMessage objects.
* Only `result` type messages carry usage information.
*/
static extractUsage(messages: AgentMessage[]): RunUsage | undefined {
let promptTokens = 0;
let completionTokens = 0;
let hasUsage = false;
for (const msg of messages) {
if (msg.type === 'result') {
const resultMsg = msg as SDKResultMessage;
if (resultMsg.usage) {
hasUsage = true;
promptTokens += resultMsg.usage.input_tokens ?? 0;
completionTokens += resultMsg.usage.output_tokens ?? 0;
}
}
}
if (!hasUsage) return undefined;
return {
promptTokens,
completionTokens,
totalTokens: promptTokens + completionTokens,
};
}
/**
* Filter out stream_event messages before persisting to thread storage.
* Stream events are incremental deltas (one per token) only useful during
* real-time streaming; the final assistant message already contains the
* complete response.
*/
static filterForStorage(messages: AgentMessage[]): AgentMessage[] {
return messages.filter(m => m.type !== 'stream_event');
}
/**
* Convert input messages to AgentMessage format for thread history.
* System messages are filtered out — they are transient instructions,
* not conversation history.
*/
static toAgentMessages(messages: InputMessage[]): AgentMessage[] {
return messages
.filter(m => m.role !== 'system')
.map(m => ({
type: m.role as 'user' | 'assistant',
message: { role: m.role, content: m.content },
}));
}
}
================================================
FILE: core/agent-runtime/src/OSSAgentStore.ts
================================================
import type {
AgentMessage,
AgentRunConfig,
AgentStore,
GetThreadOptions,
InputMessage,
RunRecord,
ThreadRecord,
ObjectStorageClient } from '@eggjs/tegg-types/agent-runtime';
import { AgentObjectType, RunStatus, AgentNotFoundError } from '@eggjs/tegg-types/agent-runtime';
import { nowUnix, newThreadId, newRunId } from './AgentStoreUtils';
export interface OSSAgentStoreOptions {
client: ObjectStorageClient;
prefix?: string;
}
/**
* Thread metadata stored as a JSON object (excludes messages).
* Messages are stored separately in a JSONL file for append-friendly writes.
*/
type ThreadMetadata = Omit<ThreadRecord, 'messages'>;
/**
* AgentStore implementation backed by an ObjectStorageClient (OSS, S3, etc.).
*
* ## Storage layout
*
* ```
* {prefix}threads/{id}/meta.json — Thread metadata (JSON)
* {prefix}threads/{id}/messages.jsonl — Messages (JSONL, one AgentMessage per line)
* {prefix}runs/{id}.json — Run record (JSON)
* ```
*/
export class OSSAgentStore implements AgentStore {
private readonly client: ObjectStorageClient;
private readonly prefix: string;
constructor(options: OSSAgentStoreOptions) {
this.client = options.client;
const raw = options.prefix ?? '';
this.prefix = raw && !raw.endsWith('/') ? raw + '/' : raw;
}
private threadMetaKey(threadId: string): string {
return `${this.prefix}threads/${threadId}/meta.json`;
}
private threadMessagesKey(threadId: string): string {
return `${this.prefix}threads/${threadId}/messages.jsonl`;
}
private runKey(runId: string): string {
return `${this.prefix}runs/${runId}.json`;
}
async init(): Promise<void> {
await this.client.init?.();
}
async destroy(): Promise<void> {
await this.client.destroy?.();
}
async createThread(metadata?: Record<string, unknown>): Promise<ThreadRecord> {
const threadId = newThreadId();
const meta: ThreadMetadata = {
id: threadId,
object: AgentObjectType.Thread,
metadata: metadata ?? {},
createdAt: nowUnix(),
};
await this.client.put(this.threadMetaKey(threadId), JSON.stringify(meta));
return { ...meta, messages: [] };
}
async getThread(threadId: string, options?: GetThreadOptions): Promise<ThreadRecord> {
const [ metaData, messagesData ] = await Promise.all([
this.client.get(this.threadMetaKey(threadId)),
this.client.get(this.threadMessagesKey(threadId)),
]);
if (!metaData) {
throw new AgentNotFoundError(`Thread ${threadId} not found`);
}
const meta = JSON.parse(metaData) as ThreadMetadata;
let messages: AgentMessage[] = messagesData
? messagesData
.trim()
.split('\n')
.filter(line => line.length > 0)
.map(line => JSON.parse(line) as AgentMessage)
: [];
// By default only return conversation messages (user + assistant),
// aligned with SDK's getSessionMessages behavior.
// The JSONL file stores all message types as a complete event log;
// this filter provides the application-level conversation view.
if (!options?.includeAllMessages) {
messages = messages.filter(m => m.type === 'user' || m.type === 'assistant');
}
return { ...meta, messages };
}
async appendMessages(threadId: string, messages: AgentMessage[]): Promise<void> {
const metaData = await this.client.get(this.threadMetaKey(threadId));
if (!metaData) {
throw new AgentNotFoundError(`Thread ${threadId} not found`);
}
if (messages.length === 0) return;
const lines = messages.map(m => JSON.stringify(m)).join('\n') + '\n';
const messagesKey = this.threadMessagesKey(threadId);
if (this.client.append) {
await this.client.append(messagesKey, lines);
} else {
const existing = (await this.client.get(messagesKey)) ?? '';
await this.client.put(messagesKey, existing + lines);
}
}
async createRun(
input: InputMessage[],
threadId?: string,
config?: AgentRunConfig,
metadata?: Record<string, unknown>,
): Promise<RunRecord> {
const runId = newRunId();
const record: RunRecord = {
id: runId,
object: AgentObjectType.ThreadRun,
threadId,
status: RunStatus.Queued,
input,
config,
metadata,
createdAt: nowUnix(),
};
await this.client.put(this.runKey(runId), JSON.stringify(record));
return record;
}
async getRun(runId: string): Promise<RunRecord> {
const data = await this.client.get(this.runKey(runId));
if (!data) {
throw new AgentNotFoundError(`Run ${runId} not found`);
}
return JSON.parse(data) as RunRecord;
}
async updateRun(runId: string, updates: Partial<RunRecord>): Promise<void> {
const run = await this.getRun(runId);
const safeUpdates = { ...updates };
delete safeUpdates.id;
delete (safeUpdates as any).object;
Object.assign(run, safeUpdates);
await this.client.put(this.runKey(runId), JSON.stringify(run));
}
}
================================================
FILE: core/agent-runtime/src/OSSObjectStorageClient.ts
================================================
import type { ObjectStorageClient } from '@eggjs/tegg-types/agent-runtime';
import type { OSSObject } from 'oss-client';
function isOSSError(err: unknown, code: string): boolean {
return err != null && typeof err === 'object' && 'code' in err && (err as { code: unknown }).code === code;
}
/**
* ObjectStorageClient backed by Alibaba Cloud OSS (via oss-client).
*
* Supports both `put`/`get` for normal objects and `append` for
* OSS Appendable Objects. The append path uses a local position cache
* to avoid extra HEAD requests; on position mismatch it falls back to
* HEAD + retry automatically.
*
* The OSSObject instance should be constructed and injected by the caller,
* following the IoC/DI principle.
*/
export class OSSObjectStorageClient implements ObjectStorageClient {
private readonly client: OSSObject;
/**
* In-memory cache of next-append positions.
*
* After each successful `append()`, OSS returns `nextAppendPosition`.
* We cache it here so the next append can skip a HEAD round-trip.
* If the cached position is stale (e.g., process restarted or another
* writer appended), the append will fail with PositionNotEqualToLength
* and we fall back to HEAD + retry.
*/
private readonly appendPositions = new Map<string, number>();
constructor(client: OSSObject) {
this.client = client;
}
async put(key: string, value: string): Promise<void> {
await this.client.put(key, Buffer.from(value, 'utf-8'));
}
async get(key: string): Promise<string | null> {
try {
const result = await this.client.get(key);
if (result.content) {
return Buffer.isBuffer(result.content) ? result.content.toString('utf-8') : String(result.content);
}
return null;
} catch (err: unknown) {
if (isOSSError(err, 'NoSuchKey')) {
return null;
}
throw err;
}
}
/**
* Append data to an OSS Appendable Object.
*
* OSS AppendObject requires a `position` parameter that must equal the
* current object size. We use a three-step strategy:
*
* 1. Use the cached position (0 for new objects, or the value from the
* last successful append).
* 2. If OSS returns PositionNotEqualToLength (cache is stale), issue a
* HEAD request to learn the current object size, then retry once.
* 3. Update the cache with `nextAppendPosition` from the response.
*
* This gives us single-round-trip performance in the common case (single
* writer, no restarts) while still being self-healing when the cache is
* stale.
*/
async append(key: string, value: string): Promise<void> {
const buf = Buffer.from(value, 'utf-8');
const position = this.appendPositions.get(key) ?? 0;
try {
const result = await this.client.append(key, buf, { position });
this.appendPositions.set(key, Number(result.nextAppendPosition));
} catch (err: unknown) {
// Position mismatch — the object grew since our last cached position.
// Fall back to HEAD to learn the actual size, then retry.
if (isOSSError(err, 'PositionNotEqualToLength')) {
const head = await this.client.head(key);
const currentPos = Number(head.res.headers['content-length'] ?? 0);
const result = await this.client.append(key, buf, { position: currentPos });
this.appendPositions.set(key, Number(result.nextAppendPosition));
} else {
throw err;
}
}
}
}
================================================
FILE: core/agent-runtime/src/RunBuilder.ts
================================================
import type { RunObject, RunRecord, AgentRunConfig } from '@eggjs/tegg-types/agent-runtime';
import { RunStatus, AgentErrorCode, AgentObjectType, InvalidRunStateTransitionError } from '@eggjs/tegg-types/agent-runtime';
import { nowUnix } from './AgentStoreUtils';
/** Accumulated token usage — same shape as non-null RunRecord['usage']. */
export type RunUsage = NonNullable<RunRecord['usage']>;
/**
* Encapsulates run state transitions.
*
* Mutation methods (`start`, `complete`, `fail`, `cancel`) update internal
* state and return `Partial<RunRecord>` for the store.
*
* `snapshot()` produces a `RunObject` suitable for API responses and SSE events.
*/
export class RunBuilder {
private readonly id: string;
private readonly threadId: string;
private readonly createdAt: number;
private readonly metadata?: Record<string, unknown>;
private readonly config?: AgentRunConfig;
private status: RunStatus;
private startedAt?: number;
private completedAt?: number;
private cancelledAt?: number;
private failedAt?: number;
private lastError?: { code: string; message: string } | null;
private usage?: RunUsage;
private constructor(
id: string,
threadId: string,
createdAt: number,
status: RunStatus,
metadata?: Record<string, unknown>,
config?: AgentRunConfig,
) {
this.id = id;
this.threadId = threadId;
this.createdAt = createdAt;
this.status = status;
this.metadata = metadata;
this.config = config;
}
/** Create a RunBuilder from a store RunRecord, using its own threadId. */
static fromRecord(run: RunRecord): RunBuilder {
return RunBuilder.create(run, run.threadId ?? '');
}
/** Create a RunBuilder from a store RunRecord, restoring all mutable state. */
static create(run: RunRecord, threadId: string): RunBuilder {
const rb = new RunBuilder(run.id, threadId, run.createdAt, run.status, run.metadata, run.config);
rb.startedAt = run.startedAt ?? undefined;
rb.completedAt = run.completedAt ?? undefined;
rb.cancelledAt = run.cancelledAt ?? undefined;
rb.failedAt = run.failedAt ?? undefined;
rb.lastError = run.lastError ?? undefined;
if (run.usage) {
rb.usage = { ...run.usage };
}
return rb;
}
/** queued -> in_progress. Returns store update. */
start(): Partial<RunRecord> {
if (this.status !== RunStatus.Queued) {
throw new InvalidRunStateTransitionError(this.status, RunStatus.InProgress);
}
this.status = RunStatus.InProgress;
this.startedAt = nowUnix();
return { status: this.status, startedAt: this.startedAt };
}
/** in_progress -> completed. Returns store update. */
complete(usage?: RunUsage): Partial<RunRecord> {
if (this.status !== RunStatus.InProgress) {
throw new InvalidRunStateTransitionError(this.status, RunStatus.Completed);
}
this.status = RunStatus.Completed;
this.completedAt = nowUnix();
this.usage = usage;
return {
status: this.status,
usage,
completedAt: this.completedAt,
};
}
/**
* queued/in_progress/cancelling -> failed. Returns store update.
*
* `cancelling -> failed` covers the case where AgentRuntime has initiated
* a cancel but the watchdog times out before the executor commits — the
* run is treated as a failed startup rather than a successful cancel.
*/
fail(error: Error): Partial<RunRecord> {
if (
this.status !== RunStatus.InProgress &&
this.status !== RunStatus.Queued &&
this.status !== RunStatus.Cancelling
) {
throw new InvalidRunStateTransitionError(this.status, RunStatus.Failed);
}
this.status = RunStatus.Failed;
this.failedAt = nowUnix();
this.lastError = { code: AgentErrorCode.ExecError, message: error.message };
return {
status: this.status,
lastError: this.lastError,
failedAt: this.failedAt,
};
}
/** in_progress/queued -> cancelling (idempotent if already cancelling). Returns store update. */
cancelling(): Partial<RunRecord> {
if (this.status === RunStatus.Cancelling) {
return { status: this.status };
}
if (this.status !== RunStatus.InProgress && this.status !== RunStatus.Queued) {
throw new InvalidRunStateTransitionError(this.status, RunStatus.Cancelling);
}
this.status = RunStatus.Cancelling;
return { status: this.status };
}
/** cancelling -> cancelled. Returns store update. */
cancel(): Partial<RunRecord> {
if (this.status !== RunStatus.Cancelling) {
throw new InvalidRunStateTransitionError(this.status, RunStatus.Cancelled);
}
this.status = RunStatus.Cancelled;
this.cancelledAt = nowUnix();
return {
status: this.status,
cancelledAt: this.cancelledAt,
};
}
/** Produce a RunObject snapshot for API / SSE. */
snapshot(): RunObject {
return {
id: this.id,
object: AgentObjectType.ThreadRun,
createdAt: this.createdAt,
threadId: this.threadId,
status: this.status,
lastError: this.
gitextract_ixpf0f65/ ├── .eslintignore ├── .eslintrc ├── .github/ │ ├── FUNDING.yml │ ├── ISSUE_TEMPLATE/ │ │ ├── bug-report-cn.yml │ │ ├── bug-report.yml │ │ ├── feature-request-cn.yml │ │ ├── feature-request.yml │ │ ├── rfc-cn.yml │ │ └── rfc.yml │ ├── PULL_REQUEST_TEMPLATE.md │ └── workflows/ │ ├── codeql-analysis.yml │ ├── nodejs.yml │ └── release.yml ├── .gitignore ├── .mocharc.yml ├── .nycrc.yml ├── CHANGELOG.md ├── CLAUDE.md ├── LICENSE ├── README.md ├── benchmark/ │ └── http/ │ ├── app/ │ │ ├── controller/ │ │ │ ├── FooTeggController.ts │ │ │ └── template/ │ │ │ └── egg_controller_1.js │ │ └── router.js │ ├── config/ │ │ ├── config.default.js │ │ └── plugin.js │ ├── package.json │ └── tsconfig.json ├── core/ │ ├── agent-runtime/ │ │ ├── CHANGELOG.md │ │ ├── index.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── AgentRuntime.ts │ │ │ ├── AgentStoreUtils.ts │ │ │ ├── HttpSSEWriter.ts │ │ │ ├── MessageConverter.ts │ │ │ ├── OSSAgentStore.ts │ │ │ ├── OSSObjectStorageClient.ts │ │ │ ├── RunBuilder.ts │ │ │ └── SSEWriter.ts │ │ ├── test/ │ │ │ ├── AgentRuntime.test.ts │ │ │ ├── HttpSSEWriter.test.ts │ │ │ ├── MessageConverter.test.ts │ │ │ ├── OSSAgentStore.test.ts │ │ │ ├── OSSObjectStorageClient.test.ts │ │ │ ├── RunBuilder.test.ts │ │ │ └── helpers.ts │ │ ├── tsconfig.json │ │ └── tsconfig.pub.json │ ├── agent-tracing/ │ │ ├── CHANGELOG.md │ │ ├── claude.ts │ │ ├── index.ts │ │ ├── langgraph.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── AbstractLogServiceClient.ts │ │ │ ├── AbstractOssClient.ts │ │ │ ├── ClaudeAgentTracer.ts │ │ │ ├── LangGraphTracer.ts │ │ │ ├── TracingService.ts │ │ │ └── types.ts │ │ ├── test/ │ │ │ ├── ClaudeAgentTracer.test.ts │ │ │ ├── Configure.test.ts │ │ │ ├── LangGraphTracer.test.ts │ │ │ ├── TestUtils.ts │ │ │ └── TracingService.test.ts │ │ ├── tsconfig.json │ │ └── tsconfig.pub.json │ ├── ajv-decorator/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── index.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── enum/ │ │ │ │ └── TransformEnum.ts │ │ │ ├── error/ │ │ │ │ └── AjvInvalidParamError.ts │ │ │ └── type/ │ │ │ └── Ajv.ts │ │ ├── test/ │ │ │ └── TransformEnum.test.ts │ │ ├── tsconfig.json │ │ └── tsconfig.pub.json │ ├── aop-decorator/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── index.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── AspectMetaBuilder.ts │ │ │ ├── CrosscutAdviceFactory.ts │ │ │ ├── decorator/ │ │ │ │ ├── Advice.ts │ │ │ │ ├── Crosscut.ts │ │ │ │ └── Pointcut.ts │ │ │ ├── model/ │ │ │ │ ├── Aspect.ts │ │ │ │ └── PointcutInfo.ts │ │ │ └── util/ │ │ │ ├── AdviceInfoUtil.ts │ │ │ ├── AspectInfoUtil.ts │ │ │ ├── CrosscutInfoUtil.ts │ │ │ └── PointcutAdviceInfoUtil.ts │ │ ├── test/ │ │ │ ├── AspectMetaBuilder.test.ts │ │ │ └── fixtures/ │ │ │ ├── CrosscutExample.ts │ │ │ ├── InheritExample.ts │ │ │ └── PointcutExample.ts │ │ ├── tsconfig.json │ │ └── tsconfig.pub.json │ ├── aop-runtime/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── index.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── AspectExecutor.ts │ │ │ ├── CrossCutGraphHook.ts │ │ │ ├── EggObjectAopHook.ts │ │ │ ├── EggPrototypeCrossCutHook.ts │ │ │ ├── LoadUnitAopHook.ts │ │ │ └── PointCutGraphHook.ts │ │ ├── test/ │ │ │ ├── aop-runtime.test.ts │ │ │ └── fixtures/ │ │ │ ├── modules/ │ │ │ │ ├── constructor_inject_aop/ │ │ │ │ │ ├── Hello.ts │ │ │ │ │ └── package.json │ │ │ │ ├── hello_cross_cut/ │ │ │ │ │ ├── CallTrace.ts │ │ │ │ │ ├── HelloCrossCut.ts │ │ │ │ │ └── package.json │ │ │ │ ├── hello_point_cut/ │ │ │ │ │ ├── HelloPointCut.ts │ │ │ │ │ └── package.json │ │ │ │ ├── hello_succeed/ │ │ │ │ │ ├── Hello.ts │ │ │ │ │ └── package.json │ │ │ │ └── should_throw/ │ │ │ │ ├── Hello.ts │ │ │ │ └── package.json │ │ │ └── mutli/ │ │ │ ├── a/ │ │ │ │ ├── A.ts │ │ │ │ └── package.json │ │ │ ├── b/ │ │ │ │ ├── B.ts │ │ │ │ └── package.json │ │ │ ├── c/ │ │ │ │ ├── Base.ts │ │ │ │ └── package.json │ │ │ └── cross/ │ │ │ ├── Cross.ts │ │ │ └── package.json │ │ ├── tsconfig.json │ │ └── tsconfig.pub.json │ ├── background-task/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── index.ts │ │ ├── package.json │ │ ├── src/ │ │ │ └── BackgroundTaskHelper.ts │ │ ├── test/ │ │ │ └── BackgroundTaskHelper.test.ts │ │ ├── tsconfig.json │ │ └── tsconfig.pub.json │ ├── common-util/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── index.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── FSUtil.ts │ │ │ ├── Graph.ts │ │ │ ├── MapUtil.ts │ │ │ ├── ModuleConfig.ts │ │ │ ├── ModuleConfigs.ts │ │ │ ├── NameUtil.ts │ │ │ ├── ObjectUtils.ts │ │ │ ├── ProxyUtil.ts │ │ │ ├── StackUtil.ts │ │ │ ├── StreamUtil.ts │ │ │ └── TimerUtil.ts │ │ ├── test/ │ │ │ ├── MapUtil.test.ts │ │ │ ├── ModuleConfig.test.ts │ │ │ ├── NameUtil.test.ts │ │ │ ├── ObjectUtil.test.ts │ │ │ ├── ProtoGraph.test.ts │ │ │ ├── TimerUtil.test.ts │ │ │ └── fixtures/ │ │ │ ├── apps/ │ │ │ │ ├── app-with-module-json/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── module-a/ │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ └── module-b/ │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── module.json │ │ │ │ │ └── package.json │ │ │ │ ├── app-with-module-pkg-json/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── module.json │ │ │ │ │ ├── node_modules/ │ │ │ │ │ │ └── module-a/ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ └── package.json │ │ │ │ │ └── package.json │ │ │ │ ├── app-with-modules/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── module-a/ │ │ │ │ │ │ └── package.json │ │ │ │ │ └── package.json │ │ │ │ ├── app-with-no-module-json/ │ │ │ │ │ ├── .sff/ │ │ │ │ │ │ ├── .other/ │ │ │ │ │ │ │ └── module-d/ │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ └── module-c/ │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── module-a/ │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ └── module-b/ │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ └── test/ │ │ │ │ │ │ └── fixtures/ │ │ │ │ │ │ └── module-e/ │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── node_modules/ │ │ │ │ │ │ ├── dep/ │ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ └── module-c/ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ └── package.json │ │ │ │ │ └── package.json │ │ │ │ ├── app-with-no-module-json-duplicated/ │ │ │ │ │ ├── .sff/ │ │ │ │ │ │ ├── .other/ │ │ │ │ │ │ │ └── module-d/ │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ └── module-c/ │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── module-a/ │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ └── module-b/ │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ └── test/ │ │ │ │ │ │ └── fixtures/ │ │ │ │ │ │ └── module-e/ │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── node_modules/ │ │ │ │ │ │ └── module-b/ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ └── package.json │ │ │ │ │ └── package.json │ │ │ │ └── app-with-symlink/ │ │ │ │ ├── app/ │ │ │ │ │ └── module-a/ │ │ │ │ │ └── package.json │ │ │ │ └── package.json │ │ │ ├── modules/ │ │ │ │ ├── dev-module-config/ │ │ │ │ │ ├── module.dev.yml │ │ │ │ │ └── module.yml │ │ │ │ └── foo-yaml/ │ │ │ │ └── module.yml │ │ │ └── monorepo/ │ │ │ ├── foo/ │ │ │ │ └── .gitkeep │ │ │ └── packages/ │ │ │ ├── a/ │ │ │ │ ├── node_modules/ │ │ │ │ │ └── c/ │ │ │ │ │ └── package.json │ │ │ │ └── package.json │ │ │ ├── b/ │ │ │ │ └── package.json │ │ │ └── d/ │ │ │ ├── node_modules/ │ │ │ │ ├── e/ │ │ │ │ │ └── package.json │ │ │ │ └── f/ │ │ │ │ └── package.json │ │ │ └── package.json │ │ ├── tsconfig.json │ │ └── tsconfig.pub.json │ ├── controller-decorator/ │ │ ├── CHANGELOG.md │ │ ├── README.json │ │ ├── index.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── builder/ │ │ │ │ └── ControllerMetaBuilderFactory.ts │ │ │ ├── decorator/ │ │ │ │ ├── Acl.ts │ │ │ │ ├── Context.ts │ │ │ │ ├── Middleware.ts │ │ │ │ ├── agent/ │ │ │ │ │ ├── AgentController.ts │ │ │ │ │ ├── AgentHandler.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── http/ │ │ │ │ │ ├── HTTPController.ts │ │ │ │ │ ├── HTTPMethod.ts │ │ │ │ │ ├── HTTPParam.ts │ │ │ │ │ └── Host.ts │ │ │ │ └── mcp/ │ │ │ │ ├── Extra.ts │ │ │ │ ├── MCPController.ts │ │ │ │ ├── MCPPrompt.ts │ │ │ │ ├── MCPResource.ts │ │ │ │ └── MCPTool.ts │ │ │ ├── impl/ │ │ │ │ ├── http/ │ │ │ │ │ ├── HTTPControllerMetaBuilder.ts │ │ │ │ │ └── HTTPControllerMethodMetaBuilder.ts │ │ │ │ └── mcp/ │ │ │ │ ├── MCPControllerMetaBuilder.ts │ │ │ │ ├── MCPControllerPromptMetaBuilder.ts │ │ │ │ ├── MCPControllerResourceMetaBuilder.ts │ │ │ │ └── MCPControllerToolMetaBuilder.ts │ │ │ ├── model/ │ │ │ │ ├── HTTPControllerMeta.ts │ │ │ │ ├── HTTPCookies.ts │ │ │ │ ├── HTTPMethodMeta.ts │ │ │ │ ├── HTTPRequest.ts │ │ │ │ ├── HTTPResponse.ts │ │ │ │ ├── MCPControllerMeta.ts │ │ │ │ ├── MCPPromptMeta.ts │ │ │ │ ├── MCPResourceMeta.ts │ │ │ │ ├── MCPToolMeta.ts │ │ │ │ └── index.ts │ │ │ └── util/ │ │ │ ├── AgentInfoUtil.ts │ │ │ ├── ControllerInfoUtil.ts │ │ │ ├── ControllerMetadataUtil.ts │ │ │ ├── HTTPInfoUtil.ts │ │ │ ├── HTTPPriorityUtil.ts │ │ │ ├── MCPInfoUtil.ts │ │ │ ├── MethodInfoUtil.ts │ │ │ └── validator/ │ │ │ ├── ControllerValidator.ts │ │ │ └── MethodValidator.ts │ │ ├── test/ │ │ │ ├── Acl.test.ts │ │ │ ├── AgentController.test.ts │ │ │ ├── Context.test.ts │ │ │ ├── MCPMeta.test.ts │ │ │ ├── Middleware.test.ts │ │ │ ├── decorators.test.ts │ │ │ ├── fixtures/ │ │ │ │ ├── AclController.ts │ │ │ │ ├── AgentFooController.ts │ │ │ │ ├── AopMiddlewareController.ts │ │ │ │ ├── ContextController.ts │ │ │ │ ├── HTTPFooController.ts │ │ │ │ ├── HTTPPriorityController.ts │ │ │ │ ├── HostController.ts │ │ │ │ ├── MCPController.ts │ │ │ │ └── MiddlewareController.ts │ │ │ ├── http/ │ │ │ │ ├── HTTPMeta.test.ts │ │ │ │ └── Host.test.ts │ │ │ └── util/ │ │ │ ├── ControllerMetadataUtil.test.ts │ │ │ └── HTTPPriority.test.ts │ │ ├── tsconfig.json │ │ └── tsconfig.pub.json │ ├── core-decorator/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── index.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── decorator/ │ │ │ │ ├── ConfigSource.ts │ │ │ │ ├── ContextProto.ts │ │ │ │ ├── EggQualifier.ts │ │ │ │ ├── InitTypeQualifier.ts │ │ │ │ ├── Inject.ts │ │ │ │ ├── ModuleQualifier.ts │ │ │ │ ├── MultiInstanceInfo.ts │ │ │ │ ├── MultiInstanceProto.ts │ │ │ │ ├── Prototype.ts │ │ │ │ └── SingletonProto.ts │ │ │ └── util/ │ │ │ ├── MetadataUtil.ts │ │ │ ├── PrototypeUtil.ts │ │ │ └── QualifierUtil.ts │ │ ├── test/ │ │ │ ├── decorators.test.ts │ │ │ ├── fixtures/ │ │ │ │ └── decators/ │ │ │ │ ├── CacheService.ts │ │ │ │ ├── ChildService.ts │ │ │ │ ├── ConstructorObject.ts │ │ │ │ ├── ContextCache.ts │ │ │ │ ├── FooLogger.ts │ │ │ │ ├── ICache.ts │ │ │ │ ├── OtherService.ts │ │ │ │ ├── QualifierCacheService.ts │ │ │ │ └── SingletonCache.ts │ │ │ └── util/ │ │ │ └── MetadataUtil.test.ts │ │ ├── tsconfig.json │ │ └── tsconfig.pub.json │ ├── dal-decorator/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── index.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── decorator/ │ │ │ │ ├── Column.ts │ │ │ │ ├── Dao.ts │ │ │ │ ├── DataSourceQualifier.ts │ │ │ │ ├── Index.ts │ │ │ │ └── Table.ts │ │ │ ├── model/ │ │ │ │ ├── ColumnModel.ts │ │ │ │ ├── IndexModel.ts │ │ │ │ └── TableModel.ts │ │ │ ├── type/ │ │ │ │ ├── MySql.ts │ │ │ │ └── Spatial.ts │ │ │ └── util/ │ │ │ ├── ColumnInfoUtil.ts │ │ │ ├── DaoInfoUtil.ts │ │ │ ├── IndexInfoUtil.ts │ │ │ └── TableInfoUtil.ts │ │ ├── test/ │ │ │ ├── fixtures/ │ │ │ │ └── modules/ │ │ │ │ └── dal/ │ │ │ │ ├── Foo.ts │ │ │ │ └── package.json │ │ │ └── index.test.ts │ │ ├── tsconfig.json │ │ └── tsconfig.pub.json │ ├── dal-runtime/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── index.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── BaseSqlMap.ts │ │ │ ├── CodeGenerator.ts │ │ │ ├── DaoLoader.ts │ │ │ ├── DataSource.ts │ │ │ ├── DatabaseForker.ts │ │ │ ├── MySqlDataSource.ts │ │ │ ├── NunjucksConverter.ts │ │ │ ├── NunjucksUtil.ts │ │ │ ├── SqlGenerator.ts │ │ │ ├── SqlMapLoader.ts │ │ │ ├── SqlUtil.ts │ │ │ ├── TableModelInstanceBuilder.ts │ │ │ ├── TableSqlMap.ts │ │ │ ├── TemplateUtil.ts │ │ │ └── templates/ │ │ │ ├── base_dao.njk │ │ │ ├── dao.njk │ │ │ └── extension.njk │ │ ├── test/ │ │ │ ├── CodeGenerator.test.ts │ │ │ ├── DAO.test.ts │ │ │ ├── DataSource.test.ts │ │ │ ├── SqlGenerator.test.ts │ │ │ ├── SqlUtil.test.ts │ │ │ ├── TableSqlMap.test.ts │ │ │ └── fixtures/ │ │ │ └── modules/ │ │ │ ├── dal/ │ │ │ │ ├── AutoUpdateTime.ts │ │ │ │ ├── Foo.ts │ │ │ │ ├── FooIndexName.ts │ │ │ │ └── package.json │ │ │ ├── generate_codes/ │ │ │ │ ├── Foo.ts │ │ │ │ ├── MultiPrimaryKey.ts │ │ │ │ └── package.json │ │ │ ├── generate_codes_not_overwrite_dao/ │ │ │ │ ├── Foo.ts │ │ │ │ └── package.json │ │ │ └── generate_codes_to_src/ │ │ │ ├── package.json │ │ │ └── src/ │ │ │ └── Foo.ts │ │ ├── tsconfig.json │ │ └── tsconfig.pub.json │ ├── dynamic-inject/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── index.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── QualifierImplDecoratorUtil.ts │ │ │ └── QualifierImplUtil.ts │ │ ├── test/ │ │ │ ├── fixtures/ │ │ │ │ └── modules/ │ │ │ │ ├── base/ │ │ │ │ │ ├── AbstractContextHello.ts │ │ │ │ │ ├── ContextHello.ts │ │ │ │ │ └── FooType.ts │ │ │ │ ├── wrong-enum-module/ │ │ │ │ │ ├── WrongEnumCase.ts │ │ │ │ │ └── tsconfig.json │ │ │ │ └── wrong-extends-module/ │ │ │ │ ├── WrongExtendsCase.ts │ │ │ │ └── tsconfig.json │ │ │ └── typing.test.ts │ │ ├── tsconfig.json │ │ └── tsconfig.pub.json │ ├── dynamic-inject-runtime/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── index.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── EggObjectFactory.ts │ │ │ ├── EggObjectFactoryObject.ts │ │ │ └── EggObjectFactoryPrototype.ts │ │ ├── test/ │ │ │ ├── fixtures/ │ │ │ │ └── modules/ │ │ │ │ └── dynamic-inject-module/ │ │ │ │ ├── AbstractContextHello.ts │ │ │ │ ├── AbstractSingletonHello.ts │ │ │ │ ├── FooType.ts │ │ │ │ ├── HelloService.ts │ │ │ │ ├── decorator/ │ │ │ │ │ ├── ContextHello.ts │ │ │ │ │ └── SingletonHello.ts │ │ │ │ ├── impl/ │ │ │ │ │ ├── BarContextHello.ts │ │ │ │ │ ├── BarSingletonHello.ts │ │ │ │ │ ├── FooContextHello.ts │ │ │ │ │ └── FooSingletonHello.ts │ │ │ │ └── package.json │ │ │ └── index.test.ts │ │ ├── tsconfig.json │ │ └── tsconfig.pub.json │ ├── eventbus-decorator/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── index.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── Event.ts │ │ │ ├── EventBus.ts │ │ │ ├── EventContext.ts │ │ │ ├── EventInfoUtil.ts │ │ │ └── type.d.ts │ │ ├── test/ │ │ │ ├── Event.test.ts │ │ │ └── fixtures/ │ │ │ ├── empty-handle.ts │ │ │ ├── event-handle-with-context.ts │ │ │ ├── multiple-events-handle.ts │ │ │ ├── right-event-handle.ts │ │ │ └── wrong-event-handle.ts │ │ ├── tsconfig.json │ │ └── tsconfig.pub.json │ ├── eventbus-runtime/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── index.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── EventContextFactory.ts │ │ │ ├── EventHandlerFactory.ts │ │ │ └── SingletonEventBus.ts │ │ ├── test/ │ │ │ ├── EventBus.test.ts │ │ │ └── fixtures/ │ │ │ └── modules/ │ │ │ ├── event/ │ │ │ │ ├── HelloEvent.ts │ │ │ │ ├── MultiEvent.ts │ │ │ │ ├── MultiEventWithContext.ts │ │ │ │ └── package.json │ │ │ └── mock-module/ │ │ │ ├── MockLogger.ts │ │ │ └── package.json │ │ ├── tsconfig.json │ │ └── tsconfig.pub.json │ ├── langchain-decorator/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── index.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── builder/ │ │ │ │ ├── BoundModelMetaBuilder.ts │ │ │ │ ├── GraphEdgeMetaBuilder.ts │ │ │ │ ├── GraphMetaBuilder.ts │ │ │ │ ├── GraphNodeMetaBuilder.ts │ │ │ │ └── GraphToolMetaBuilder.ts │ │ │ ├── decorator/ │ │ │ │ ├── BoundModel.ts │ │ │ │ ├── Graph.ts │ │ │ │ ├── GraphEdge.ts │ │ │ │ ├── GraphNode.ts │ │ │ │ └── GraphTool.ts │ │ │ ├── model/ │ │ │ │ ├── BoundModelMetadata.ts │ │ │ │ ├── GraphEdgeMetadata.ts │ │ │ │ ├── GraphMetadata.ts │ │ │ │ ├── GraphNodeMetadata.ts │ │ │ │ └── GraphToolMetadata.ts │ │ │ ├── qualifier/ │ │ │ │ ├── ChatCheckpointSaverQualifier.ts │ │ │ │ └── ChatModelQualifier.ts │ │ │ ├── type/ │ │ │ │ └── metadataKey.ts │ │ │ └── util/ │ │ │ ├── BoundModelInfoUtil.ts │ │ │ ├── GraphEdgeInfoUtil.ts │ │ │ ├── GraphInfoUtil.ts │ │ │ ├── GraphNodeInfoUtil.ts │ │ │ ├── GraphToolInfoUtil.ts │ │ │ └── index.ts │ │ ├── test/ │ │ │ ├── fixtures/ │ │ │ │ └── modules/ │ │ │ │ ├── langchain/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── package.json │ │ │ │ └── langgraph/ │ │ │ │ └── Graph.ts │ │ │ ├── graph.test.ts │ │ │ ├── index.test.ts │ │ │ ├── package.json │ │ │ └── tsconfig.json │ │ ├── tsconfig.json │ │ └── tsconfig.pub.json │ ├── lifecycle/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── index.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── IdenticalObject.ts │ │ │ ├── LifycycleUtil.ts │ │ │ └── decorator/ │ │ │ └── index.ts │ │ ├── test/ │ │ │ └── IdenticalObject.test.ts │ │ ├── tsconfig.json │ │ └── tsconfig.pub.json │ ├── loader/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── index.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── LoaderFactory.ts │ │ │ ├── LoaderUtil.ts │ │ │ └── impl/ │ │ │ └── ModuleLoader.ts │ │ ├── test/ │ │ │ ├── Loader.test.ts │ │ │ └── fixtures/ │ │ │ └── modules/ │ │ │ ├── loader-failed/ │ │ │ │ ├── AppRepo.ts │ │ │ │ └── package.json │ │ │ ├── module-for-loader/ │ │ │ │ ├── AppRepo.ts │ │ │ │ ├── SprintRepo.ts │ │ │ │ ├── UserRepo.ts │ │ │ │ └── package.json │ │ │ ├── module-with-extra/ │ │ │ │ ├── .dist/ │ │ │ │ │ └── ThrowError.ts │ │ │ │ ├── AppRepo.ts │ │ │ │ ├── extra/ │ │ │ │ │ └── UserRepo.ts │ │ │ │ └── package.json │ │ │ └── module-with-test/ │ │ │ ├── .gitignore │ │ │ ├── AppRepo.ts │ │ │ ├── coverage/ │ │ │ │ └── fixtures/ │ │ │ │ └── UserRepo.ts │ │ │ ├── package.json │ │ │ └── test/ │ │ │ └── fixtures/ │ │ │ └── UserRepo.ts │ │ ├── tsconfig.json │ │ └── tsconfig.pub.json │ ├── mcp-client/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── index.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── HeaderUtil.ts │ │ │ ├── HttpMCPClient.ts │ │ │ └── MCPClientQualifier.ts │ │ ├── test/ │ │ │ ├── HttpMCPClient.test.ts │ │ │ └── fixtures/ │ │ │ ├── sse-mcp-server/ │ │ │ │ └── http.ts │ │ │ └── streamable-mcp-server/ │ │ │ └── http.ts │ │ ├── tsconfig.json │ │ ├── tsconfig.pub.json │ │ └── typings/ │ │ └── index.d.ts │ ├── metadata/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── index.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── errors.ts │ │ │ ├── factory/ │ │ │ │ ├── EggPrototypeCreatorFactory.ts │ │ │ │ ├── EggPrototypeFactory.ts │ │ │ │ └── LoadUnitFactory.ts │ │ │ ├── impl/ │ │ │ │ ├── EggPrototypeBuilder.ts │ │ │ │ ├── EggPrototypeImpl.ts │ │ │ │ ├── LoadUnitMultiInstanceProtoHook.ts │ │ │ │ └── ModuleLoadUnit.ts │ │ │ ├── model/ │ │ │ │ ├── AppGraph.ts │ │ │ │ ├── EggPrototype.ts │ │ │ │ ├── LoadUnit.ts │ │ │ │ ├── ModuleDescriptor.ts │ │ │ │ ├── ProtoDescriptor/ │ │ │ │ │ ├── AbstractProtoDescriptor.ts │ │ │ │ │ └── ClassProtoDescriptor.ts │ │ │ │ ├── ProtoDescriptorHelper.ts │ │ │ │ └── graph/ │ │ │ │ ├── GlobalGraph.ts │ │ │ │ ├── GlobalModuleNode.ts │ │ │ │ ├── GlobalModuleNodeBuilder.ts │ │ │ │ ├── ProtoNode.ts │ │ │ │ └── ProtoSelector.ts │ │ │ └── util/ │ │ │ └── ClassUtil.ts │ │ ├── test/ │ │ │ ├── AppGraph.test.ts │ │ │ ├── GlobalGraph.test.ts │ │ │ ├── LoadUnit.test.ts │ │ │ ├── ModuleGraph.test.ts │ │ │ └── fixtures/ │ │ │ ├── LoaderUtil.ts │ │ │ ├── TestLoader.ts │ │ │ └── modules/ │ │ │ ├── app-graph-modules/ │ │ │ │ ├── root/ │ │ │ │ │ ├── Root.ts │ │ │ │ │ ├── RootConstructor.ts │ │ │ │ │ └── package.json │ │ │ │ ├── unused/ │ │ │ │ │ ├── Unused.ts │ │ │ │ │ └── package.json │ │ │ │ └── used/ │ │ │ │ ├── Used.ts │ │ │ │ └── package.json │ │ │ ├── app-multi-inject-multi/ │ │ │ │ ├── app/ │ │ │ │ │ └── modules/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── App.ts │ │ │ │ │ │ ├── module.yml │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── app2/ │ │ │ │ │ │ ├── App.ts │ │ │ │ │ │ ├── module.yml │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── bar/ │ │ │ │ │ │ ├── BizManager.ts │ │ │ │ │ │ └── package.json │ │ │ │ │ └── foo/ │ │ │ │ │ ├── Secret.ts │ │ │ │ │ └── package.json │ │ │ │ └── package.json │ │ │ ├── extends-constructor-module/ │ │ │ │ ├── Base.ts │ │ │ │ └── package.json │ │ │ ├── extends-module/ │ │ │ │ ├── Base.ts │ │ │ │ └── package.json │ │ │ ├── incompatible-proto-inject/ │ │ │ │ ├── package.json │ │ │ │ └── test.ts │ │ │ ├── invalid-multimodule/ │ │ │ │ ├── invalidService.ts │ │ │ │ ├── invalidService2.ts │ │ │ │ ├── package.json │ │ │ │ └── test.ts │ │ │ ├── invalidate-module/ │ │ │ │ ├── InvalidateService.ts │ │ │ │ └── package.json │ │ │ ├── load-unit/ │ │ │ │ ├── AppRepo.ts │ │ │ │ ├── SprintRepo.ts │ │ │ │ ├── UserRepo.ts │ │ │ │ └── package.json │ │ │ ├── multi-callback-instance-module/ │ │ │ │ ├── MultiInstance.ts │ │ │ │ ├── module.yml │ │ │ │ └── package.json │ │ │ ├── multi-instance-module/ │ │ │ │ ├── MultiInstance.ts │ │ │ │ └── package.json │ │ │ ├── optional-inject-module/ │ │ │ │ ├── OptionalInjectService.ts │ │ │ │ └── package.json │ │ │ ├── recursive-load-unit/ │ │ │ │ ├── AppRepo.ts │ │ │ │ ├── SprintRepo.ts │ │ │ │ ├── UserRepo.ts │ │ │ │ └── package.json │ │ │ └── same-name-object/ │ │ │ ├── AppCache.ts │ │ │ ├── ContextAppCache.ts │ │ │ ├── CountService.ts │ │ │ ├── SingletonAppCache.ts │ │ │ └── package.json │ │ ├── tsconfig.json │ │ └── tsconfig.pub.json │ ├── orm-decorator/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── index.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── builder/ │ │ │ │ ├── AttributeMetaBuilder.ts │ │ │ │ ├── IndexMetaBuilder.ts │ │ │ │ └── ModelMetaBuilder.ts │ │ │ ├── decorator/ │ │ │ │ ├── Attribute.ts │ │ │ │ ├── DataSource.ts │ │ │ │ ├── Index.ts │ │ │ │ └── Model.ts │ │ │ ├── model/ │ │ │ │ ├── AttributeMeta.ts │ │ │ │ ├── IndexMeta.ts │ │ │ │ └── ModelMetadata.ts │ │ │ └── util/ │ │ │ ├── ModelInfoUtil.ts │ │ │ ├── ModelMetadataUtil.ts │ │ │ └── NameUtil.ts │ │ ├── test/ │ │ │ ├── builder/ │ │ │ │ ├── AttributeMetaBuilder.test.ts │ │ │ │ ├── IndexMetaBuilder.test.ts │ │ │ │ └── ModelMetaBuilder.test.ts │ │ │ ├── decorator.test.ts │ │ │ └── fixtures/ │ │ │ ├── AttributeModel.ts │ │ │ ├── DefaultAttributeModel.ts │ │ │ ├── DefaultIndexModel.ts │ │ │ ├── Foo.ts │ │ │ ├── IndexModel.ts │ │ │ └── InvalidateIndexModel.ts │ │ ├── tsconfig.json │ │ └── tsconfig.pub.json │ ├── runtime/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── index.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── factory/ │ │ │ │ ├── EggContainerFactory.ts │ │ │ │ ├── EggObjectFactory.ts │ │ │ │ └── LoadUnitInstanceFactory.ts │ │ │ ├── impl/ │ │ │ │ ├── ContextInitiator.ts │ │ │ │ ├── ContextObjectGraph.ts │ │ │ │ ├── EggAlwaysNewObjectContainer.ts │ │ │ │ ├── EggObjectImpl.ts │ │ │ │ ├── EggObjectUtil.ts │ │ │ │ └── ModuleLoadUnitInstance.ts │ │ │ └── model/ │ │ │ ├── AbstractEggContext.ts │ │ │ ├── ContextHandler.ts │ │ │ ├── EggContext.ts │ │ │ ├── EggObject.ts │ │ │ └── LoadUnitInstance.ts │ │ ├── test/ │ │ │ ├── EggObject.test.ts │ │ │ ├── EggObjectUtil.test.ts │ │ │ ├── LoadUnitInstance.test.ts │ │ │ ├── QualifierLoadUnitInstance.test.ts │ │ │ ├── fixtures/ │ │ │ │ ├── EggContextStorage.ts │ │ │ │ ├── EggTestContext.ts │ │ │ │ └── modules/ │ │ │ │ ├── extends-module/ │ │ │ │ │ ├── Base.ts │ │ │ │ │ └── package.json │ │ │ │ ├── init-type-qualifier-module/ │ │ │ │ │ ├── Cache.ts │ │ │ │ │ ├── CacheService.ts │ │ │ │ │ ├── ContextCache.ts │ │ │ │ │ ├── SingletonCache.ts │ │ │ │ │ └── package.json │ │ │ │ ├── inject-constructor-context-to-singleton/ │ │ │ │ │ ├── object.ts │ │ │ │ │ └── package.json │ │ │ │ ├── inject-context-to-singleton/ │ │ │ │ │ ├── object.ts │ │ │ │ │ └── package.json │ │ │ │ ├── lifecycle-hook/ │ │ │ │ │ ├── object.ts │ │ │ │ │ └── package.json │ │ │ │ ├── module-for-load-unit-instance/ │ │ │ │ │ ├── AppCache.ts │ │ │ │ │ ├── CountController.ts │ │ │ │ │ ├── CountService.ts │ │ │ │ │ ├── TempObj.ts │ │ │ │ │ └── package.json │ │ │ │ ├── multi-instance-module/ │ │ │ │ │ ├── MultiInstance.ts │ │ │ │ │ ├── MultiInstanceConstructor.ts │ │ │ │ │ └── package.json │ │ │ │ └── multi-module/ │ │ │ │ ├── multi-module-common/ │ │ │ │ │ ├── model/ │ │ │ │ │ │ └── App.ts │ │ │ │ │ └── package.json │ │ │ │ ├── multi-module-repo/ │ │ │ │ │ ├── AppRepo.ts │ │ │ │ │ ├── PersistenceService.ts │ │ │ │ │ └── package.json │ │ │ │ └── multi-module-service/ │ │ │ │ ├── AppService.ts │ │ │ │ └── package.json │ │ │ └── util.ts │ │ ├── tsconfig.json │ │ └── tsconfig.pub.json │ ├── schedule-decorator/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── index.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── builder/ │ │ │ │ └── ScheduleMetaBuilder.ts │ │ │ ├── decorator/ │ │ │ │ └── Schedule.ts │ │ │ ├── model/ │ │ │ │ └── ScheduleMetadata.ts │ │ │ └── util/ │ │ │ ├── ScheduleInfoUtil.ts │ │ │ └── ScheduleMetadataUtil.ts │ │ ├── tsconfig.json │ │ └── tsconfig.pub.json │ ├── standalone-decorator/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── index.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── decorator/ │ │ │ │ └── Runner.ts │ │ │ ├── event/ │ │ │ │ └── EventHandler.ts │ │ │ ├── typing.ts │ │ │ └── util/ │ │ │ └── StandaloneUtil.ts │ │ ├── tsconfig.json │ │ └── tsconfig.pub.json │ ├── tegg/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── agent.ts │ │ ├── ajv.ts │ │ ├── aop.ts │ │ ├── dal.ts │ │ ├── helper.ts │ │ ├── index.ts │ │ ├── orm.ts │ │ ├── package.json │ │ ├── schedule.ts │ │ ├── standalone.ts │ │ ├── test/ │ │ │ ├── helper.test.ts │ │ │ └── index.test.ts │ │ ├── transaction.ts │ │ ├── tsconfig.json │ │ ├── tsconfig.pub.json │ │ └── zod.ts │ ├── test-util/ │ │ ├── CHANGELOG.md │ │ ├── CoreTestHelper.ts │ │ ├── EggTestContext.ts │ │ ├── LoaderUtil.ts │ │ ├── StandaloneTestUtil.ts │ │ ├── TestLoader.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── tsconfig.json │ │ └── tsconfig.pub.json │ ├── transaction-decorator/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── index.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── builder/ │ │ │ │ └── TransactionMetaBuilder.ts │ │ │ ├── decorator/ │ │ │ │ └── Transactional.ts │ │ │ └── util/ │ │ │ └── TransactionMetadataUtil.ts │ │ ├── test/ │ │ │ ├── builder/ │ │ │ │ └── TransactionMetaBuilder.test.ts │ │ │ └── fixtures/ │ │ │ └── transaction.ts │ │ ├── tsconfig.json │ │ └── tsconfig.pub.json │ ├── types/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── agent-runtime/ │ │ │ ├── AgentMessage.ts │ │ │ ├── AgentRuntime.ts │ │ │ ├── AgentStore.ts │ │ │ ├── ObjectStorageClient.ts │ │ │ ├── errors.ts │ │ │ └── index.ts │ │ ├── aop/ │ │ │ ├── Advice.ts │ │ │ ├── Aspect.ts │ │ │ ├── Crosscut.ts │ │ │ ├── Pointcut.ts │ │ │ └── index.ts │ │ ├── common/ │ │ │ ├── Graph.ts │ │ │ ├── Logger.ts │ │ │ ├── ModuleConfig.ts │ │ │ ├── RuntimeConfig.ts │ │ │ └── index.ts │ │ ├── controller-decorator/ │ │ │ ├── HTTPController.ts │ │ │ ├── HTTPMethod.ts │ │ │ ├── HTTPParam.ts │ │ │ ├── MCPController.ts │ │ │ ├── MCPPromptParams.ts │ │ │ ├── MCPResourceParams.ts │ │ │ ├── MCPToolParams.ts │ │ │ ├── MetadataKey.ts │ │ │ ├── builder.ts │ │ │ ├── index.ts │ │ │ └── model/ │ │ │ ├── ControllerMetadata.ts │ │ │ ├── MethodMeta.ts │ │ │ └── types.ts │ │ ├── core-decorator/ │ │ │ ├── ContextProto.ts │ │ │ ├── Inject.ts │ │ │ ├── Metadata.ts │ │ │ ├── MultiInstanceProto.ts │ │ │ ├── Prototype.ts │ │ │ ├── SingletonProto.ts │ │ │ ├── enum/ │ │ │ │ ├── AccessLevel.ts │ │ │ │ ├── EggType.ts │ │ │ │ ├── InjectType.ts │ │ │ │ ├── MultiInstanceType.ts │ │ │ │ ├── ObjectInitType.ts │ │ │ │ └── Qualifier.ts │ │ │ ├── index.ts │ │ │ └── model/ │ │ │ ├── EggMultiInstancePrototypeInfo.ts │ │ │ ├── EggPrototypeInfo.ts │ │ │ ├── InjectConstructorInfo.ts │ │ │ ├── InjectObjectInfo.ts │ │ │ └── QualifierInfo.ts │ │ ├── dal/ │ │ │ ├── Qualifier.ts │ │ │ ├── decorator/ │ │ │ │ ├── Column.ts │ │ │ │ ├── DataSourceQualifier.ts │ │ │ │ ├── Index.ts │ │ │ │ └── Table.ts │ │ │ ├── enum/ │ │ │ │ ├── ColumnFormat.ts │ │ │ │ ├── ColumnType.ts │ │ │ │ ├── CompressionType.ts │ │ │ │ ├── IndexStoreType.ts │ │ │ │ ├── IndexType.ts │ │ │ │ ├── InsertMethod.ts │ │ │ │ ├── RowFormat.ts │ │ │ │ ├── SqlType.ts │ │ │ │ └── Templates.ts │ │ │ ├── index.ts │ │ │ └── type/ │ │ │ ├── BaseDao.ts │ │ │ ├── CodeGenerator.ts │ │ │ ├── ColumnTsType.ts │ │ │ ├── DateSource.ts │ │ │ ├── Spatial.ts │ │ │ └── SqlMap.ts │ │ ├── dynamic-inject.ts │ │ ├── index.ts │ │ ├── lifecycle/ │ │ │ ├── EggObjectLifecycle.ts │ │ │ ├── IdenticalObject.ts │ │ │ ├── LifecycleHook.ts │ │ │ └── index.ts │ │ ├── metadata/ │ │ │ ├── enum/ │ │ │ │ └── ProtoDescriptorType.ts │ │ │ ├── errors.ts │ │ │ ├── index.ts │ │ │ └── model/ │ │ │ ├── EggPrototype.ts │ │ │ ├── LoadUnit.ts │ │ │ ├── Loader.ts │ │ │ └── ProtoDescriptor.ts │ │ ├── orm.ts │ │ ├── package.json │ │ ├── runtime/ │ │ │ ├── Factory.ts │ │ │ ├── index.ts │ │ │ └── model/ │ │ │ ├── EggContainer.ts │ │ │ ├── EggContext.ts │ │ │ ├── EggObject.ts │ │ │ └── LoadUnitInstance.ts │ │ ├── schedule.ts │ │ ├── standalone/ │ │ │ ├── ServiceWorkerContext.ts │ │ │ ├── fetch.ts │ │ │ └── index.ts │ │ ├── transaction.ts │ │ ├── tsconfig.json │ │ └── tsconfig.pub.json │ └── vitest/ │ ├── CHANGELOG.md │ ├── README.md │ ├── index.ts │ ├── package.json │ ├── runner.ts │ ├── src/ │ │ ├── index.ts │ │ ├── runner.ts │ │ └── shared.ts │ ├── test/ │ │ ├── fixture_app.test.ts │ │ ├── fixtures/ │ │ │ └── apps/ │ │ │ └── demo-app/ │ │ │ ├── config/ │ │ │ │ └── module.json │ │ │ ├── modules/ │ │ │ │ └── demo-module/ │ │ │ │ ├── HelloService.ts │ │ │ │ └── package.json │ │ │ └── package.json │ │ ├── get_app_throw.test.ts │ │ ├── get_store_restore.test.ts │ │ ├── hooks.test.ts │ │ └── setup.ts │ ├── tsconfig.json │ ├── tsconfig.pub.json │ └── vitest.config.ts ├── lerna.json ├── package.json ├── plugin/ │ ├── ajv/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── lib/ │ │ │ └── Ajv.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── ajv.test.ts │ │ │ └── fixtures/ │ │ │ └── apps/ │ │ │ └── ajv-app/ │ │ │ ├── config/ │ │ │ │ ├── config.default.js │ │ │ │ ├── module.json │ │ │ │ └── plugin.js │ │ │ ├── modules/ │ │ │ │ └── demo/ │ │ │ │ ├── FooController.ts │ │ │ │ ├── module.yml │ │ │ │ └── package.json │ │ │ └── package.json │ │ ├── tsconfig.json │ │ ├── tsconfig.pub.json │ │ └── typings/ │ │ └── index.d.ts │ ├── aop/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── app.ts │ │ ├── lib/ │ │ │ └── AopContextHook.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── aop.test.ts │ │ │ └── fixtures/ │ │ │ └── apps/ │ │ │ └── aop-app/ │ │ │ ├── app/ │ │ │ │ ├── controller/ │ │ │ │ │ └── app.ts │ │ │ │ ├── router.ts │ │ │ │ └── typings/ │ │ │ │ └── index.d.ts │ │ │ ├── config/ │ │ │ │ ├── config.default.js │ │ │ │ ├── module.json │ │ │ │ └── plugin.js │ │ │ ├── modules/ │ │ │ │ └── aop-module/ │ │ │ │ ├── Hello.ts │ │ │ │ └── package.json │ │ │ └── package.json │ │ ├── tsconfig.json │ │ ├── tsconfig.pub.json │ │ └── typings/ │ │ └── index.d.ts │ ├── common/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── index.ts │ │ ├── package.json │ │ ├── tsconfig.json │ │ └── tsconfig.pub.json │ ├── config/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── agent.ts │ │ ├── app.ts │ │ ├── lib/ │ │ │ └── ModuleScanner.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── DuplicateOptionalModule.test.ts │ │ │ ├── ReadModule.test.ts │ │ │ └── fixtures/ │ │ │ └── apps/ │ │ │ ├── app-with-modules/ │ │ │ │ ├── app/ │ │ │ │ │ └── module-a/ │ │ │ │ │ └── package.json │ │ │ │ ├── config/ │ │ │ │ │ └── config.default.ts │ │ │ │ └── package.json │ │ │ └── duplicate-optional-module/ │ │ │ ├── config/ │ │ │ │ ├── config.default.js │ │ │ │ └── plugin.js │ │ │ ├── node_modules/ │ │ │ │ ├── foo/ │ │ │ │ │ └── package.json │ │ │ │ ├── unused/ │ │ │ │ │ ├── Unused.js │ │ │ │ │ └── package.json │ │ │ │ └── used/ │ │ │ │ ├── Used.js │ │ │ │ └── package.json │ │ │ └── package.json │ │ ├── tsconfig.json │ │ ├── tsconfig.pub.json │ │ └── typings/ │ │ └── index.d.ts │ ├── controller/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── app/ │ │ │ └── middleware/ │ │ │ ├── mcp_body_middleware.ts │ │ │ └── tegg_root_proto.ts │ │ ├── app.ts │ │ ├── config/ │ │ │ └── config.default.ts │ │ ├── lib/ │ │ │ ├── AgentControllerObject.ts │ │ │ ├── AgentControllerProto.ts │ │ │ ├── AppLoadUnitControllerHook.ts │ │ │ ├── ControllerLoadUnit.ts │ │ │ ├── ControllerLoadUnitHandler.ts │ │ │ ├── ControllerLoadUnitInstance.ts │ │ │ ├── ControllerMetadataManager.ts │ │ │ ├── ControllerRegister.ts │ │ │ ├── ControllerRegisterFactory.ts │ │ │ ├── EggControllerLoader.ts │ │ │ ├── EggControllerPrototypeHook.ts │ │ │ ├── MiddlewareGraphHook.ts │ │ │ ├── RootProtoManager.ts │ │ │ ├── errors.ts │ │ │ └── impl/ │ │ │ ├── http/ │ │ │ │ ├── Acl.ts │ │ │ │ ├── HTTPControllerRegister.ts │ │ │ │ ├── HTTPMethodRegister.ts │ │ │ │ └── Req.ts │ │ │ └── mcp/ │ │ │ ├── MCPConfig.ts │ │ │ ├── MCPControllerRegister.ts │ │ │ └── MCPServerHelper.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── fixtures/ │ │ │ │ └── apps/ │ │ │ │ ├── acl-app/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ └── AclController.ts │ │ │ │ │ │ └── extend/ │ │ │ │ │ │ └── context.ts │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ └── plugin.js │ │ │ │ │ └── package.json │ │ │ │ ├── controller-app/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ ├── AopMiddlewareController.ts │ │ │ │ │ │ │ ├── AppController.ts │ │ │ │ │ │ │ ├── MiddlewareController.ts │ │ │ │ │ │ │ ├── ParamController.ts │ │ │ │ │ │ │ ├── PriorityController.ts │ │ │ │ │ │ │ ├── RedirectController.ts │ │ │ │ │ │ │ ├── TimeoutController.ts │ │ │ │ │ │ │ └── ViewController.ts │ │ │ │ │ │ └── middleware/ │ │ │ │ │ │ ├── call_module.ts │ │ │ │ │ │ ├── count_mw.ts │ │ │ │ │ │ └── log_mw.ts │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ ├── module.json │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── modules/ │ │ │ │ │ │ ├── multi-module-common/ │ │ │ │ │ │ │ ├── advice/ │ │ │ │ │ │ │ │ ├── BarMethodAdvice.ts │ │ │ │ │ │ │ │ ├── CountAdvice.ts │ │ │ │ │ │ │ │ ├── FooControllerAdvice.ts │ │ │ │ │ │ │ │ └── FooMethodAdvice.ts │ │ │ │ │ │ │ ├── model/ │ │ │ │ │ │ │ │ └── App.ts │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ ├── multi-module-repo/ │ │ │ │ │ │ │ ├── AppRepo.ts │ │ │ │ │ │ │ ├── PersistenceService.ts │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ └── multi-module-service/ │ │ │ │ │ │ ├── AppService.ts │ │ │ │ │ │ └── package.json │ │ │ │ │ └── package.json │ │ │ │ ├── duplicate-controller-name-app/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── controller/ │ │ │ │ │ │ ├── AppController.ts │ │ │ │ │ │ └── AppController2.ts │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ └── plugin.js │ │ │ │ │ └── package.json │ │ │ │ ├── duplicate-proto-name-app/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── controller/ │ │ │ │ │ │ ├── AppController.ts │ │ │ │ │ │ └── AppController2.ts │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ └── plugin.js │ │ │ │ │ └── package.json │ │ │ │ ├── host-controller-app/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── controller/ │ │ │ │ │ │ ├── AppController.ts │ │ │ │ │ │ ├── AppController2.ts │ │ │ │ │ │ ├── MultiHostController.ts │ │ │ │ │ │ └── MultiMethodHostController.ts │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ └── plugin.js │ │ │ │ │ └── package.json │ │ │ │ ├── http-conflict-app/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── controller/ │ │ │ │ │ │ ├── AppController.ts │ │ │ │ │ │ ├── HostController1.ts │ │ │ │ │ │ └── HostController2.ts │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ └── plugin.js │ │ │ │ │ └── package.json │ │ │ │ ├── http-inject-app/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ └── AppController.ts │ │ │ │ │ │ └── middleware/ │ │ │ │ │ │ ├── call_module.ts │ │ │ │ │ │ ├── count_mw.ts │ │ │ │ │ │ └── log_mw.ts │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ ├── module.json │ │ │ │ │ │ └── plugin.js │ │ │ │ │ └── package.json │ │ │ │ ├── mcp-app/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ ├── AppController.ts │ │ │ │ │ │ │ ├── McpController.ts │ │ │ │ │ │ │ ├── TestAppController.ts │ │ │ │ │ │ │ └── TestController.ts │ │ │ │ │ │ └── middleware/ │ │ │ │ │ │ └── tracelog.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── hook-plugin/ │ │ │ │ │ │ ├── app.ts │ │ │ │ │ │ ├── lib/ │ │ │ │ │ │ │ └── MCPControllerHook.ts │ │ │ │ │ │ └── package.json │ │ │ │ │ └── package.json │ │ │ │ ├── middleware-graph-app/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── router.ts │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ ├── module.json │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── modules/ │ │ │ │ │ │ ├── advice-module/ │ │ │ │ │ │ │ ├── advice/ │ │ │ │ │ │ │ │ ├── AnotherAdvice.ts │ │ │ │ │ │ │ │ └── TestAdvice.ts │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ └── controller-module/ │ │ │ │ │ │ ├── TestController.ts │ │ │ │ │ │ └── package.json │ │ │ │ │ └── package.json │ │ │ │ ├── module-app/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ └── AppController2.ts │ │ │ │ │ │ └── router.ts │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ ├── module.json │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── modules/ │ │ │ │ │ │ ├── foo-module/ │ │ │ │ │ │ │ ├── AppService.ts │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ └── http-module/ │ │ │ │ │ │ ├── AppController.ts │ │ │ │ │ │ └── package.json │ │ │ │ │ └── package.json │ │ │ │ └── proto-poisoning/ │ │ │ │ ├── app/ │ │ │ │ │ └── controller/ │ │ │ │ │ └── HelloController.ts │ │ │ │ ├── config/ │ │ │ │ │ ├── config.default.js │ │ │ │ │ └── plugin.js │ │ │ │ └── package.json │ │ │ ├── http/ │ │ │ │ ├── acl.test.ts │ │ │ │ ├── decorator.test.ts │ │ │ │ ├── edgecase.test.ts │ │ │ │ ├── host.test.ts │ │ │ │ ├── middleware-aop.test.ts │ │ │ │ ├── middleware.test.ts │ │ │ │ ├── module.test.ts │ │ │ │ ├── params.test.ts │ │ │ │ ├── priority.test.ts │ │ │ │ ├── proto-poisoning.test.ts │ │ │ │ └── request.test.ts │ │ │ ├── lib/ │ │ │ │ ├── AgentControllerProto.test.ts │ │ │ │ ├── ControllerMetaManager.test.ts │ │ │ │ ├── EggControllerLoader.test.ts │ │ │ │ └── HTTPMethodRegister.test.ts │ │ │ └── mcp/ │ │ │ ├── helper.test.ts │ │ │ ├── mcp.test.ts │ │ │ └── mcpCluster.test.ts │ │ ├── tsconfig.json │ │ ├── tsconfig.pub.json │ │ └── typings/ │ │ └── index.d.ts │ ├── dal/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── app/ │ │ │ └── extend/ │ │ │ └── application.ts │ │ ├── app.ts │ │ ├── index.ts │ │ ├── lib/ │ │ │ ├── DalModuleLoadUnitHook.ts │ │ │ ├── DalTableEggPrototypeHook.ts │ │ │ ├── DataSource.ts │ │ │ ├── MysqlDataSourceManager.ts │ │ │ ├── SqlMapManager.ts │ │ │ ├── TableModelManager.ts │ │ │ ├── TransactionPrototypeHook.ts │ │ │ └── TransactionalAOP.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── dal.test.ts │ │ │ ├── fixtures/ │ │ │ │ └── apps/ │ │ │ │ └── dal-app/ │ │ │ │ ├── config/ │ │ │ │ │ ├── config.default.js │ │ │ │ │ ├── module.json │ │ │ │ │ └── plugin.js │ │ │ │ ├── modules/ │ │ │ │ │ └── dal/ │ │ │ │ │ ├── Foo.ts │ │ │ │ │ ├── FooService.ts │ │ │ │ │ ├── dal/ │ │ │ │ │ │ ├── dao/ │ │ │ │ │ │ │ ├── FooDAO.ts │ │ │ │ │ │ │ └── base/ │ │ │ │ │ │ │ └── BaseFooDAO.ts │ │ │ │ │ │ ├── extension/ │ │ │ │ │ │ │ └── FooExtension.ts │ │ │ │ │ │ └── structure/ │ │ │ │ │ │ ├── Foo.json │ │ │ │ │ │ └── Foo.sql │ │ │ │ │ ├── module.yml │ │ │ │ │ └── package.json │ │ │ │ └── package.json │ │ │ └── transaction.test.ts │ │ ├── tsconfig.json │ │ ├── tsconfig.pub.json │ │ └── typings/ │ │ └── index.d.ts │ ├── dns-cache/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── app.ts │ │ ├── config/ │ │ │ └── config.default.ts │ │ ├── lib/ │ │ │ ├── DnsResolver.ts │ │ │ └── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── dns_cache_lookup.test.ts │ │ │ ├── dns_cache_lookup_http_next.test.ts │ │ │ ├── dns_cache_resolve.test.ts │ │ │ ├── fixtures/ │ │ │ │ └── apps/ │ │ │ │ ├── dns_cache_lookup/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ └── home.js │ │ │ │ │ │ └── router.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── config.js │ │ │ │ │ │ └── plugin.js │ │ │ │ │ └── package.json │ │ │ │ ├── dns_cache_lookup_http_next/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ └── home.js │ │ │ │ │ │ └── router.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── config.js │ │ │ │ │ │ └── plugin.js │ │ │ │ │ └── package.json │ │ │ │ └── dns_cache_resolve/ │ │ │ │ ├── app/ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ └── home.js │ │ │ │ │ └── router.js │ │ │ │ ├── config/ │ │ │ │ │ ├── config.js │ │ │ │ │ └── plugin.js │ │ │ │ └── package.json │ │ │ └── utils.ts │ │ ├── tsconfig.json │ │ ├── tsconfig.pub.json │ │ └── typings/ │ │ └── index.d.ts │ ├── eventbus/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── app/ │ │ │ └── extend/ │ │ │ ├── application.unittest.ts │ │ │ └── context.ts │ │ ├── app.ts │ │ ├── lib/ │ │ │ ├── EggContextEventBus.ts │ │ │ ├── EggEventContext.ts │ │ │ ├── EventHandlerProtoManager.ts │ │ │ ├── EventbusLoadUnitHook.ts │ │ │ └── EventbusProtoHook.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── eventbus.test.ts │ │ │ └── fixtures/ │ │ │ └── apps/ │ │ │ └── event-app/ │ │ │ ├── app/ │ │ │ │ └── event-module/ │ │ │ │ ├── HelloLogger.ts │ │ │ │ ├── HelloService.ts │ │ │ │ ├── MultiEventHandler.ts │ │ │ │ └── package.json │ │ │ ├── config/ │ │ │ │ ├── config.default.js │ │ │ │ └── plugin.js │ │ │ └── package.json │ │ ├── tsconfig.json │ │ ├── tsconfig.pub.json │ │ └── typings/ │ │ └── index.d.ts │ ├── langchain/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── app.ts │ │ ├── index.ts │ │ ├── lib/ │ │ │ ├── ChatModelHelper.ts │ │ │ ├── ChatOpenAI.ts │ │ │ ├── boundModel/ │ │ │ │ └── BoundModelObjectHook.ts │ │ │ ├── config/ │ │ │ │ └── QualifierUtil.ts │ │ │ ├── graph/ │ │ │ │ ├── CompiledStateGraphObject.ts │ │ │ │ ├── CompiledStateGraphProto.ts │ │ │ │ ├── GraphBuildHook.ts │ │ │ │ ├── GraphLoadUnitHook.ts │ │ │ │ ├── GraphObjectHook.ts │ │ │ │ └── GraphPrototypeHook.ts │ │ │ ├── tracing/ │ │ │ │ └── LangGraphTracer.ts │ │ │ └── util.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── fixtures/ │ │ │ │ ├── apps/ │ │ │ │ │ └── langchain/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── modules/ │ │ │ │ │ │ └── bar/ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ └── AppController.ts │ │ │ │ │ │ ├── module.yml │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ └── service/ │ │ │ │ │ │ ├── BoundChatModel.ts │ │ │ │ │ │ └── Graph.ts │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ ├── module.json │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── package.json │ │ │ │ │ └── tsconfig.json │ │ │ │ └── sse-mcp-server/ │ │ │ │ └── http.ts │ │ │ └── llm.test.ts │ │ ├── tsconfig.json │ │ ├── tsconfig.pub.json │ │ └── typings/ │ │ └── index.d.ts │ ├── mcp-client/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── index.ts │ │ ├── lib/ │ │ │ ├── EggHttpMCPClient.ts │ │ │ ├── EggHttpStaticMCPClient.ts │ │ │ ├── HttpMCPClientFactory.ts │ │ │ ├── QualifierUtil.ts │ │ │ └── constants.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── fixtures/ │ │ │ │ ├── apps/ │ │ │ │ │ └── mcpclient/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── modules/ │ │ │ │ │ │ └── bar/ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ └── AppController.ts │ │ │ │ │ │ ├── module.yml │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ ├── module.json │ │ │ │ │ │ └── plugin.js │ │ │ │ │ └── package.json │ │ │ │ ├── sse-mcp-server/ │ │ │ │ │ └── http.ts │ │ │ │ └── streamable-mcp-server/ │ │ │ │ └── http.ts │ │ │ └── mcpclient.test.ts │ │ ├── tsconfig.json │ │ ├── tsconfig.pub.json │ │ └── typings/ │ │ └── index.d.ts │ ├── mcp-proxy/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── agent.ts │ │ ├── app/ │ │ │ └── extend/ │ │ │ ├── agent.ts │ │ │ └── application.ts │ │ ├── app.ts │ │ ├── config/ │ │ │ └── config.default.ts │ │ ├── index.ts │ │ ├── lib/ │ │ │ └── MCPProxyDataClient.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── fixtures/ │ │ │ │ └── apps/ │ │ │ │ └── mcp-proxy/ │ │ │ │ ├── app/ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ └── app.ts │ │ │ │ │ └── router.ts │ │ │ │ ├── config/ │ │ │ │ │ ├── config.default.js │ │ │ │ │ └── plugin.js │ │ │ │ └── package.json │ │ │ └── proxy.test.ts │ │ ├── tsconfig.json │ │ ├── tsconfig.pub.json │ │ └── typings/ │ │ └── index.d.ts │ ├── orm/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── app.ts │ │ ├── lib/ │ │ │ ├── DataSourceManager.ts │ │ │ ├── LeoricRegister.ts │ │ │ ├── ModelProtoHook.ts │ │ │ ├── ModelProtoManager.ts │ │ │ ├── ORMLoadUnitHook.ts │ │ │ ├── SingletonModelObject.ts │ │ │ ├── SingletonModelProto.ts │ │ │ └── SingletonORM.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── fixtures/ │ │ │ │ ├── apps/ │ │ │ │ │ └── orm-app/ │ │ │ │ │ ├── app.ts │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ ├── module.json │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── modules/ │ │ │ │ │ │ └── orm-module/ │ │ │ │ │ │ ├── AppService.ts │ │ │ │ │ │ ├── CtxService.ts │ │ │ │ │ │ ├── PkgService.ts │ │ │ │ │ │ ├── model/ │ │ │ │ │ │ │ ├── App.ts │ │ │ │ │ │ │ └── Pkg.ts │ │ │ │ │ │ └── package.json │ │ │ │ │ └── package.json │ │ │ │ └── prepare.js │ │ │ └── index.test.ts │ │ ├── tsconfig.json │ │ ├── tsconfig.pub.json │ │ └── typings/ │ │ └── index.d.ts │ ├── schedule/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── agent.ts │ │ ├── app.ts │ │ ├── lib/ │ │ │ ├── EggScheduleAdapter.ts │ │ │ ├── EggScheduleMetadataConvertor.ts │ │ │ ├── ScheduleManager.ts │ │ │ ├── SchedulePrototypeHook.ts │ │ │ ├── ScheduleSubscriberRegister.ts │ │ │ ├── ScheduleWorkerLoadUnitHook.ts │ │ │ └── ScheduleWorkerRegister.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── ScheduleManager.test.ts │ │ │ ├── fixtures/ │ │ │ │ └── schedule-app/ │ │ │ │ ├── app/ │ │ │ │ │ ├── simple-schedule-module/ │ │ │ │ │ │ ├── SimpleSchedule.ts │ │ │ │ │ │ └── package.json │ │ │ │ │ └── subscriber/ │ │ │ │ │ ├── Subscriber.ts │ │ │ │ │ └── package.json │ │ │ │ ├── config/ │ │ │ │ │ ├── module.json │ │ │ │ │ └── plugin.js │ │ │ │ └── package.json │ │ │ └── schedule.test.ts │ │ ├── tsconfig.json │ │ ├── tsconfig.pub.json │ │ └── typings/ │ │ └── index.d.ts │ └── tegg/ │ ├── CHANGELOG.md │ ├── README.md │ ├── app/ │ │ ├── extend/ │ │ │ ├── application.ts │ │ │ ├── application.unittest.ts │ │ │ └── context.ts │ │ └── middleware/ │ │ └── tegg_ctx_lifecycle_middleware.ts │ ├── app.ts │ ├── lib/ │ │ ├── AppLoadUnit.ts │ │ ├── AppLoadUnitInstance.ts │ │ ├── CompatibleUtil.ts │ │ ├── ConfigSourceLoadUnitHook.ts │ │ ├── EggAppLoader.ts │ │ ├── EggCompatibleObject.ts │ │ ├── EggCompatibleProtoImpl.ts │ │ ├── EggContextCompatibleHook.ts │ │ ├── EggContextHandler.ts │ │ ├── EggContextImpl.ts │ │ ├── EggModuleLoader.ts │ │ ├── EggQualifierProtoHook.ts │ │ ├── ModuleConfigLoader.ts │ │ ├── ModuleHandler.ts │ │ ├── Utils.ts │ │ ├── ctx_lifecycle_middleware.ts │ │ └── run_in_background.ts │ ├── package.json │ ├── test/ │ │ ├── AccessLevelCheck.test.ts │ │ ├── BackgroundTask.test.ts │ │ ├── ConstructorModuleConfig.test.ts │ │ ├── DynamicInject.test.ts │ │ ├── EggCompatible.test.ts │ │ ├── Inject.test.ts │ │ ├── ModuleConfig.test.ts │ │ ├── MultiInstanceInjectMultiInstance.test.ts │ │ ├── NoModuleJson.test.ts │ │ ├── OptionalModule.test.ts │ │ ├── OptionalPluginModule.test.ts │ │ ├── SameProtoName.test.ts │ │ ├── Subscription.test.ts │ │ ├── app/ │ │ │ └── extend/ │ │ │ ├── application.test.ts │ │ │ ├── application.unittest.test.ts │ │ │ └── context.test.ts │ │ ├── close.test.ts │ │ ├── fixtures/ │ │ │ └── apps/ │ │ │ ├── access-level-check/ │ │ │ │ ├── app/ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ └── app.ts │ │ │ │ │ └── router.ts │ │ │ │ ├── config/ │ │ │ │ │ ├── config.default.js │ │ │ │ │ ├── module.json │ │ │ │ │ └── plugin.js │ │ │ │ ├── modules/ │ │ │ │ │ ├── module-a/ │ │ │ │ │ │ ├── BarService.ts │ │ │ │ │ │ ├── FooService.ts │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── module-main/ │ │ │ │ │ │ ├── BarService.ts │ │ │ │ │ │ ├── FooService.ts │ │ │ │ │ │ ├── MainService.ts │ │ │ │ │ │ └── package.json │ │ │ │ │ └── package.json │ │ │ │ ├── package.json │ │ │ │ └── typings/ │ │ │ │ └── index.d.ts │ │ │ ├── app-multi-inject-multi/ │ │ │ │ ├── app/ │ │ │ │ │ └── modules/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── App.ts │ │ │ │ │ │ ├── module.yml │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── app2/ │ │ │ │ │ │ ├── App.ts │ │ │ │ │ │ ├── module.yml │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── bar/ │ │ │ │ │ │ ├── BizManager.ts │ │ │ │ │ │ └── package.json │ │ │ │ │ └── foo/ │ │ │ │ │ ├── Secret.ts │ │ │ │ │ └── package.json │ │ │ │ ├── config/ │ │ │ │ │ ├── config.default.js │ │ │ │ │ └── plugin.js │ │ │ │ └── package.json │ │ │ ├── app-with-no-module-json/ │ │ │ │ ├── app/ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ └── app.ts │ │ │ │ │ ├── extend/ │ │ │ │ │ │ ├── application.unittest.ts │ │ │ │ │ │ └── context.ts │ │ │ │ │ ├── router.ts │ │ │ │ │ └── typings/ │ │ │ │ │ └── index.d.ts │ │ │ │ ├── config/ │ │ │ │ │ ├── config.default.js │ │ │ │ │ └── plugin.js │ │ │ │ ├── modules/ │ │ │ │ │ └── config-module/ │ │ │ │ │ ├── ConfigService.ts │ │ │ │ │ └── package.json │ │ │ │ └── package.json │ │ │ ├── background-app/ │ │ │ │ ├── app/ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ └── app.ts │ │ │ │ │ ├── router.ts │ │ │ │ │ └── typings/ │ │ │ │ │ └── index.d.ts │ │ │ │ ├── config/ │ │ │ │ │ ├── config.default.js │ │ │ │ │ ├── module.json │ │ │ │ │ └── plugin.js │ │ │ │ ├── modules/ │ │ │ │ │ └── multi-module-background/ │ │ │ │ │ ├── BackgroundService.ts │ │ │ │ │ ├── CountService.ts │ │ │ │ │ └── package.json │ │ │ │ └── package.json │ │ │ ├── constructor-module-config/ │ │ │ │ ├── app/ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ └── app.ts │ │ │ │ │ ├── extend/ │ │ │ │ │ │ ├── application.unittest.ts │ │ │ │ │ │ └── context.ts │ │ │ │ │ ├── router.ts │ │ │ │ │ └── typings/ │ │ │ │ │ └── index.d.ts │ │ │ │ ├── app.ts │ │ │ │ ├── config/ │ │ │ │ │ ├── config.default.js │ │ │ │ │ └── plugin.js │ │ │ │ ├── modules/ │ │ │ │ │ └── module-with-config/ │ │ │ │ │ ├── foo.ts │ │ │ │ │ ├── module.unittest.yml │ │ │ │ │ ├── module.yml │ │ │ │ │ └── package.json │ │ │ │ └── package.json │ │ │ ├── dynamic-inject-app/ │ │ │ │ ├── app/ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ └── app.ts │ │ │ │ │ ├── router.ts │ │ │ │ │ └── typings/ │ │ │ │ │ └── index.d.ts │ │ │ │ ├── config/ │ │ │ │ │ ├── config.default.js │ │ │ │ │ ├── module.json │ │ │ │ │ └── plugin.js │ │ │ │ ├── modules/ │ │ │ │ │ └── dynamic-inject-module/ │ │ │ │ │ ├── AbstractContextHello.ts │ │ │ │ │ ├── AbstractSingletonHello.ts │ │ │ │ │ ├── FooType.ts │ │ │ │ │ ├── HelloService.ts │ │ │ │ │ ├── SingletonHelloService.ts │ │ │ │ │ ├── decorator/ │ │ │ │ │ │ ├── ContextHello.ts │ │ │ │ │ │ └── SingletonHello.ts │ │ │ │ │ ├── impl/ │ │ │ │ │ │ ├── BarContextHello.ts │ │ │ │ │ │ ├── BarSingletonHello.ts │ │ │ │ │ │ ├── FooContextHello.ts │ │ │ │ │ │ └── FooSingletonHello.ts │ │ │ │ │ └── package.json │ │ │ │ └── package.json │ │ │ ├── egg-app/ │ │ │ │ ├── app/ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ └── app.ts │ │ │ │ │ ├── extend/ │ │ │ │ │ │ ├── application.ts │ │ │ │ │ │ ├── application.unittest.ts │ │ │ │ │ │ └── context.ts │ │ │ │ │ ├── router.ts │ │ │ │ │ └── typings/ │ │ │ │ │ └── index.d.ts │ │ │ │ ├── config/ │ │ │ │ │ ├── config.default.js │ │ │ │ │ ├── module.json │ │ │ │ │ └── plugin.js │ │ │ │ ├── modules/ │ │ │ │ │ ├── multi-module-common/ │ │ │ │ │ │ ├── model/ │ │ │ │ │ │ │ └── App.ts │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── multi-module-repo/ │ │ │ │ │ │ ├── AppRepo.ts │ │ │ │ │ │ ├── GlobalAppRepo.ts │ │ │ │ │ │ ├── PersistenceService.ts │ │ │ │ │ │ └── package.json │ │ │ │ │ └── multi-module-service/ │ │ │ │ │ ├── AppService.ts │ │ │ │ │ ├── ConfigService.ts │ │ │ │ │ ├── CustomLoggerService.ts │ │ │ │ │ ├── EggTypeService.ts │ │ │ │ │ ├── SingletonFooService.ts │ │ │ │ │ ├── TraceService.ts │ │ │ │ │ └── package.json │ │ │ │ └── package.json │ │ │ ├── inject-module-config/ │ │ │ │ ├── app/ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ └── app.ts │ │ │ │ │ ├── extend/ │ │ │ │ │ │ ├── application.unittest.ts │ │ │ │ │ │ └── context.ts │ │ │ │ │ ├── router.ts │ │ │ │ │ └── typings/ │ │ │ │ │ └── index.d.ts │ │ │ │ ├── app.ts │ │ │ │ ├── config/ │ │ │ │ │ ├── config.default.js │ │ │ │ │ └── plugin.js │ │ │ │ ├── modules/ │ │ │ │ │ ├── module-with-config/ │ │ │ │ │ │ ├── foo.ts │ │ │ │ │ │ ├── module.unittest.yml │ │ │ │ │ │ ├── module.yml │ │ │ │ │ │ └── package.json │ │ │ │ │ └── module-with-overwrite-config/ │ │ │ │ │ ├── bar.ts │ │ │ │ │ ├── module.unittest.yml │ │ │ │ │ ├── module.yml │ │ │ │ │ └── package.json │ │ │ │ └── package.json │ │ │ ├── invalid-inject/ │ │ │ │ ├── app/ │ │ │ │ │ └── modules/ │ │ │ │ │ └── module-a/ │ │ │ │ │ ├── BarService.ts │ │ │ │ │ └── package.json │ │ │ │ ├── config/ │ │ │ │ │ ├── config.default.js │ │ │ │ │ └── plugin.js │ │ │ │ └── package.json │ │ │ ├── optional-inject/ │ │ │ │ ├── app/ │ │ │ │ │ └── modules/ │ │ │ │ │ └── module-a/ │ │ │ │ │ ├── BarService.ts │ │ │ │ │ ├── FooService.ts │ │ │ │ │ └── package.json │ │ │ │ ├── config/ │ │ │ │ │ ├── config.default.js │ │ │ │ │ └── plugin.js │ │ │ │ └── package.json │ │ │ ├── optional-module/ │ │ │ │ ├── app/ │ │ │ │ │ └── modules/ │ │ │ │ │ └── root/ │ │ │ │ │ ├── Root.ts │ │ │ │ │ └── package.json │ │ │ │ ├── config/ │ │ │ │ │ ├── config.default.js │ │ │ │ │ └── plugin.js │ │ │ │ ├── node_modules/ │ │ │ │ │ ├── foo/ │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── unused/ │ │ │ │ │ │ ├── Unused.js │ │ │ │ │ │ └── package.json │ │ │ │ │ └── used/ │ │ │ │ │ ├── Used.js │ │ │ │ │ └── package.json │ │ │ │ └── package.json │ │ │ ├── plugin-module/ │ │ │ │ ├── config/ │ │ │ │ │ ├── config.default.js │ │ │ │ │ └── plugin.js │ │ │ │ ├── node_modules/ │ │ │ │ │ ├── foo/ │ │ │ │ │ │ └── package.json │ │ │ │ │ └── foo-plugin/ │ │ │ │ │ ├── Used.js │ │ │ │ │ └── package.json │ │ │ │ └── package.json │ │ │ ├── recursive-module-app/ │ │ │ │ ├── app/ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ └── app.ts │ │ │ │ │ └── router.ts │ │ │ │ ├── config/ │ │ │ │ │ ├── config.default.js │ │ │ │ │ ├── module.json │ │ │ │ │ └── plugin.js │ │ │ │ ├── modules/ │ │ │ │ │ ├── multi-module-repo/ │ │ │ │ │ │ ├── AppRepo.ts │ │ │ │ │ │ └── package.json │ │ │ │ │ └── multi-module-service/ │ │ │ │ │ ├── AppService.ts │ │ │ │ │ └── package.json │ │ │ │ └── package.json │ │ │ ├── same-name-protos/ │ │ │ │ ├── app/ │ │ │ │ │ └── modules/ │ │ │ │ │ ├── module-a/ │ │ │ │ │ │ ├── BarService.ts │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── module-bar/ │ │ │ │ │ │ ├── FooService.ts │ │ │ │ │ │ └── package.json │ │ │ │ │ └── module-foo/ │ │ │ │ │ ├── FooService.ts │ │ │ │ │ └── package.json │ │ │ │ ├── config/ │ │ │ │ │ ├── config.default.js │ │ │ │ │ └── plugin.js │ │ │ │ └── package.json │ │ │ ├── same-name-singleton-and-context-proto/ │ │ │ │ ├── app/ │ │ │ │ │ └── modules/ │ │ │ │ │ ├── module-bar/ │ │ │ │ │ │ ├── BarConstructorService1.ts │ │ │ │ │ │ ├── BarConstructorService2.ts │ │ │ │ │ │ ├── BarService1.ts │ │ │ │ │ │ ├── BarService2.ts │ │ │ │ │ │ ├── FooService.ts │ │ │ │ │ │ └── package.json │ │ │ │ │ └── module-foo/ │ │ │ │ │ ├── FooService.ts │ │ │ │ │ └── package.json │ │ │ │ ├── config/ │ │ │ │ │ ├── config.default.js │ │ │ │ │ └── plugin.js │ │ │ │ └── package.json │ │ │ ├── schedule-app/ │ │ │ │ ├── app/ │ │ │ │ │ └── schedule/ │ │ │ │ │ └── foo.ts │ │ │ │ ├── config/ │ │ │ │ │ ├── config.default.js │ │ │ │ │ ├── module.json │ │ │ │ │ └── plugin.js │ │ │ │ ├── modules/ │ │ │ │ │ ├── multi-module-repo/ │ │ │ │ │ │ ├── AppRepo.ts │ │ │ │ │ │ └── package.json │ │ │ │ │ └── multi-module-service/ │ │ │ │ │ ├── AppService.ts │ │ │ │ │ └── package.json │ │ │ │ └── package.json │ │ │ └── wrong-order-app/ │ │ │ ├── app/ │ │ │ │ ├── controller/ │ │ │ │ │ └── app.ts │ │ │ │ └── router.ts │ │ │ ├── config/ │ │ │ │ ├── config.default.js │ │ │ │ ├── module.json │ │ │ │ └── plugin.js │ │ │ ├── modules/ │ │ │ │ ├── multi-module-repo/ │ │ │ │ │ ├── AppRepo.ts │ │ │ │ │ └── package.json │ │ │ │ └── multi-module-service/ │ │ │ │ ├── AppService.ts │ │ │ │ └── package.json │ │ │ └── package.json │ │ └── lib/ │ │ └── EggModuleLoader.test.ts │ ├── tsconfig.json │ ├── tsconfig.pub.json │ └── typings/ │ └── index.d.ts ├── standalone/ │ ├── service-worker/ │ │ ├── CHANGELOG.md │ │ ├── index.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── ServiceWorkerApp.ts │ │ │ ├── ServiceWorkerRunner.ts │ │ │ ├── StandaloneEggObjectFactory.ts │ │ │ ├── constants.ts │ │ │ ├── controller/ │ │ │ │ ├── ControllerMetadataManager.ts │ │ │ │ ├── ControllerRegister.ts │ │ │ │ ├── ControllerRegisterFactory.ts │ │ │ │ ├── RootProtoManager.ts │ │ │ │ └── ServiceWorkerContext.ts │ │ │ ├── hook/ │ │ │ │ ├── ContextProtoLoadUnitHook.ts │ │ │ │ ├── ControllerLoadUnitHook.ts │ │ │ │ ├── ControllerPrototypeHook.ts │ │ │ │ └── LoadUnitInnerClassHook.ts │ │ │ ├── http/ │ │ │ │ ├── FetchEventHandler.ts │ │ │ │ ├── FetchRouter.ts │ │ │ │ ├── HTTPControllerRegister.ts │ │ │ │ ├── HTTPMethodRegister.ts │ │ │ │ └── ServiceWorkerFetchContext.ts │ │ │ ├── mcp/ │ │ │ │ ├── AbstractControllerAdvice.ts │ │ │ │ ├── MCPControllerRegister.ts │ │ │ │ └── MCPServerHelper.ts │ │ │ ├── types.ts │ │ │ └── utils/ │ │ │ ├── RequestUtils.ts │ │ │ └── ResponseUtils.ts │ │ ├── test/ │ │ │ ├── Utils.ts │ │ │ ├── fixtures/ │ │ │ │ ├── http/ │ │ │ │ │ ├── AopMiddlewareController.ts │ │ │ │ │ ├── GetController.ts │ │ │ │ │ ├── HttpTestAdvice.ts │ │ │ │ │ ├── PostController.ts │ │ │ │ │ └── package.json │ │ │ │ ├── http-builtin/ │ │ │ │ │ ├── BuiltinController.ts │ │ │ │ │ └── package.json │ │ │ │ ├── http-inject/ │ │ │ │ │ ├── UserController.ts │ │ │ │ │ ├── UserService.ts │ │ │ │ │ └── package.json │ │ │ │ ├── http-params/ │ │ │ │ │ ├── ParamController.ts │ │ │ │ │ └── package.json │ │ │ │ ├── http-priority/ │ │ │ │ │ ├── PriorityController.ts │ │ │ │ │ ├── ViewController.ts │ │ │ │ │ └── package.json │ │ │ │ └── mcp/ │ │ │ │ ├── MCPTestController.ts │ │ │ │ ├── McpTestAdvice.ts │ │ │ │ └── package.json │ │ │ ├── http/ │ │ │ │ ├── builtin.test.ts │ │ │ │ ├── inject.test.ts │ │ │ │ ├── params.test.ts │ │ │ │ ├── priority.test.ts │ │ │ │ ├── response.test.ts │ │ │ │ └── router.test.ts │ │ │ └── mcp/ │ │ │ └── mcp.test.ts │ │ ├── tsconfig.json │ │ └── tsconfig.pub.json │ └── standalone/ │ ├── CHANGELOG.md │ ├── README.md │ ├── index.ts │ ├── package.json │ ├── src/ │ │ ├── ConfigSourceLoadUnitHook.ts │ │ ├── EggModuleLoader.ts │ │ ├── ModuleConfig.ts │ │ ├── Runner.ts │ │ ├── StandaloneContext.ts │ │ ├── StandaloneContextHandler.ts │ │ ├── StandaloneContextImpl.ts │ │ ├── StandaloneInnerObject.ts │ │ ├── StandaloneInnerObjectProto.ts │ │ ├── StandaloneLoadUnit.ts │ │ └── main.ts │ ├── test/ │ │ ├── fixtures/ │ │ │ ├── ajv-module/ │ │ │ │ ├── foo.ts │ │ │ │ └── package.json │ │ │ ├── ajv-module-pass/ │ │ │ │ ├── foo.ts │ │ │ │ └── package.json │ │ │ ├── aop-module/ │ │ │ │ ├── Hello.ts │ │ │ │ ├── main.ts │ │ │ │ └── package.json │ │ │ ├── custom-context/ │ │ │ │ ├── foo.ts │ │ │ │ └── package.json │ │ │ ├── dal-module/ │ │ │ │ ├── module.yml │ │ │ │ ├── package.json │ │ │ │ ├── src/ │ │ │ │ │ ├── Foo.ts │ │ │ │ │ ├── dal/ │ │ │ │ │ │ ├── dao/ │ │ │ │ │ │ │ ├── FooDAO.ts │ │ │ │ │ │ │ └── base/ │ │ │ │ │ │ │ └── BaseFooDAO.ts │ │ │ │ │ │ ├── extension/ │ │ │ │ │ │ │ └── FooExtension.ts │ │ │ │ │ │ └── structure/ │ │ │ │ │ │ ├── Foo.json │ │ │ │ │ │ └── Foo.sql │ │ │ │ │ └── main.ts │ │ │ │ └── tsconfig.json │ │ │ ├── dal-transaction-module/ │ │ │ │ ├── module.yml │ │ │ │ ├── package.json │ │ │ │ ├── src/ │ │ │ │ │ ├── Foo.ts │ │ │ │ │ ├── FooService.ts │ │ │ │ │ ├── dal/ │ │ │ │ │ │ ├── dao/ │ │ │ │ │ │ │ ├── FooDAO.ts │ │ │ │ │ │ │ └── base/ │ │ │ │ │ │ │ └── BaseFooDAO.ts │ │ │ │ │ │ ├── extension/ │ │ │ │ │ │ │ └── FooExtension.ts │ │ │ │ │ │ └── structure/ │ │ │ │ │ │ ├── Foo.json │ │ │ │ │ │ └── Foo.sql │ │ │ │ │ └── main.ts │ │ │ │ └── tsconfig.json │ │ │ ├── dependency/ │ │ │ │ ├── foo.ts │ │ │ │ ├── node_modules/ │ │ │ │ │ ├── dependency-1/ │ │ │ │ │ │ └── package.json │ │ │ │ │ └── dependency-2/ │ │ │ │ │ ├── foo.js │ │ │ │ │ ├── module.yml │ │ │ │ │ └── package.json │ │ │ │ └── package.json │ │ │ ├── dynamic-inject-module/ │ │ │ │ ├── AbstractContextHello.ts │ │ │ │ ├── AbstractSingletonHello.ts │ │ │ │ ├── FooType.ts │ │ │ │ ├── HelloService.ts │ │ │ │ ├── decorator/ │ │ │ │ │ ├── ContextHello.ts │ │ │ │ │ └── SingletonHello.ts │ │ │ │ ├── impl/ │ │ │ │ │ ├── BarContextHello.ts │ │ │ │ │ ├── BarSingletonHello.ts │ │ │ │ │ ├── FooContextHello.ts │ │ │ │ │ └── FooSingletonHello.ts │ │ │ │ ├── main.ts │ │ │ │ └── package.json │ │ │ ├── inner-object/ │ │ │ │ ├── foo.ts │ │ │ │ └── package.json │ │ │ ├── invalid-inject/ │ │ │ │ ├── foo.ts │ │ │ │ └── package.json │ │ │ ├── lifecycle/ │ │ │ │ ├── foo.ts │ │ │ │ └── package.json │ │ │ ├── module-with-config/ │ │ │ │ ├── foo.ts │ │ │ │ ├── module.yml │ │ │ │ └── package.json │ │ │ ├── module-with-empty-config/ │ │ │ │ ├── foo.ts │ │ │ │ ├── module.yml │ │ │ │ └── package.json │ │ │ ├── module-with-empty-default-config/ │ │ │ │ ├── foo.ts │ │ │ │ ├── module.dev.yml │ │ │ │ ├── module.yml │ │ │ │ └── package.json │ │ │ ├── module-with-env-config/ │ │ │ │ ├── foo.ts │ │ │ │ ├── module.dev.yml │ │ │ │ ├── module.yml │ │ │ │ └── package.json │ │ │ ├── multi-callback-instance-module/ │ │ │ │ ├── biz/ │ │ │ │ │ ├── biz.ts │ │ │ │ │ ├── module.yml │ │ │ │ │ └── package.json │ │ │ │ ├── logger/ │ │ │ │ │ ├── DynamicLogger.ts │ │ │ │ │ └── package.json │ │ │ │ └── main/ │ │ │ │ ├── foo.ts │ │ │ │ ├── module.yml │ │ │ │ └── package.json │ │ │ ├── multi-modules/ │ │ │ │ ├── bar/ │ │ │ │ │ ├── module.yml │ │ │ │ │ └── package.json │ │ │ │ └── foo/ │ │ │ │ ├── foo.ts │ │ │ │ ├── module.yml │ │ │ │ └── package.json │ │ │ ├── optional-inject/ │ │ │ │ ├── bar.ts │ │ │ │ ├── foo.ts │ │ │ │ └── package.json │ │ │ ├── runtime-config/ │ │ │ │ ├── foo.ts │ │ │ │ └── package.json │ │ │ └── simple/ │ │ │ ├── foo.ts │ │ │ └── package.json │ │ └── index.test.ts │ ├── tsconfig.json │ └── tsconfig.pub.json └── tsconfig.json
Showing preview only (335K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (3566 symbols across 841 files)
FILE: benchmark/http/app/controller/FooTeggController.ts
class FooTeggController (line 4) | class FooTeggController {
method hello (line 9) | async hello() {
FILE: benchmark/http/app/controller/template/egg_controller_1.js
method hello (line 6) | async hello() {
FILE: core/agent-runtime/src/AgentRuntime.ts
constant HEARTBEAT_INTERVAL_MS (line 30) | const HEARTBEAT_INTERVAL_MS = 10_000;
constant EVENT_DIR (line 31) | const EVENT_DIR = join(tmpdir(), 'agent-runtime-events');
constant DEFAULT_CANCEL_COMMIT_TIMEOUT_MS (line 32) | const DEFAULT_CANCEL_COMMIT_TIMEOUT_MS = 30_000;
type RunEventBuffer (line 34) | interface RunEventBuffer {
constant AGENT_RUNTIME (line 41) | const AGENT_RUNTIME: unique symbol = Symbol('agentRuntime');
type AgentExecutor (line 53) | interface AgentExecutor {
type AgentRuntimeOptions (line 58) | interface AgentRuntimeOptions {
type RunTaskState (line 70) | interface RunTaskState {
class AgentRuntime (line 81) | class AgentRuntime {
method constructor (line 109) | constructor(options: AgentRuntimeOptions) {
method createThread (line 121) | async createThread(): Promise<ThreadObject> {
method getThread (line 131) | async getThread(threadId: string, options?: GetThreadOptions): Promise...
method ensureThread (line 142) | private async ensureThread(input: CreateRunInput): Promise<{ threadId:...
method syncRun (line 152) | async syncRun(input: CreateRunInput, signal?: AbortSignal): Promise<Ru...
method asyncRun (line 246) | async asyncRun(input: CreateRunInput): Promise<RunObject> {
method streamRun (line 337) | async streamRun(input: CreateRunInput, writer: SSEWriter): Promise<voi...
method getRunStream (line 390) | async getRunStream(runId: string, writer: SSEWriter, lastSeq = 0): Pro...
method pushEvent (line 409) | private pushEvent(buffer: RunEventBuffer, type: string, data: unknown)...
method executeStreamBackground (line 424) | private async executeStreamBackground(
method markCommittedIfNeeded (line 509) | private async markCommittedIfNeeded(
method waitForCommitted (line 537) | private waitForCommitted(task: RunTaskState, timeoutMs: number): Promi...
method persistMessagesOnAbort (line 589) | private async persistMessagesOnAbort(
method finaliseAbortedRun (line 618) | private async finaliseAbortedRun(runId: string): Promise<void> {
method readEventsFromFile (line 632) | private async* readEventsFromFile(filePath: string, afterSeq: number):...
method streamEventsToWriter (line 648) | private async streamEventsToWriter(
method getRun (line 719) | async getRun(runId: string): Promise<RunObject> {
method cancelRun (line 737) | async cancelRun(runId: string): Promise<RunObject> {
method waitForPendingTasks (line 800) | async waitForPendingTasks(): Promise<void> {
method destroy (line 807) | async destroy(): Promise<void> {
method create (line 823) | static create(options: AgentRuntimeOptions): AgentRuntime {
FILE: core/agent-runtime/src/AgentStoreUtils.ts
function nowUnix (line 3) | function nowUnix(): number {
function newMsgId (line 7) | function newMsgId(): string {
function newThreadId (line 11) | function newThreadId(): string {
function newRunId (line 15) | function newRunId(): string {
FILE: core/agent-runtime/src/HttpSSEWriter.ts
class HttpSSEWriter (line 5) | class HttpSSEWriter implements SSEWriter {
method constructor (line 12) | constructor(res: ServerResponse) {
method ensureHeaders (line 23) | private ensureHeaders(): void {
method writeEvent (line 33) | writeEvent(event: string, data: unknown): void {
method writeComment (line 39) | writeComment(text: string): void {
method closed (line 45) | get closed(): boolean {
method end (line 49) | end(): void {
method onClose (line 58) | onClose(callback: () => void): void {
FILE: core/agent-runtime/src/MessageConverter.ts
class MessageConverter (line 9) | class MessageConverter {
method extractUsage (line 14) | static extractUsage(messages: AgentMessage[]): RunUsage | undefined {
method filterForStorage (line 44) | static filterForStorage(messages: AgentMessage[]): AgentMessage[] {
method toAgentMessages (line 53) | static toAgentMessages(messages: InputMessage[]): AgentMessage[] {
FILE: core/agent-runtime/src/OSSAgentStore.ts
type OSSAgentStoreOptions (line 14) | interface OSSAgentStoreOptions {
type ThreadMetadata (line 23) | type ThreadMetadata = Omit<ThreadRecord, 'messages'>;
class OSSAgentStore (line 36) | class OSSAgentStore implements AgentStore {
method constructor (line 40) | constructor(options: OSSAgentStoreOptions) {
method threadMetaKey (line 46) | private threadMetaKey(threadId: string): string {
method threadMessagesKey (line 50) | private threadMessagesKey(threadId: string): string {
method runKey (line 54) | private runKey(runId: string): string {
method init (line 58) | async init(): Promise<void> {
method destroy (line 62) | async destroy(): Promise<void> {
method createThread (line 66) | async createThread(metadata?: Record<string, unknown>): Promise<Thread...
method getThread (line 78) | async getThread(threadId: string, options?: GetThreadOptions): Promise...
method appendMessages (line 107) | async appendMessages(threadId: string, messages: AgentMessage[]): Prom...
method createRun (line 125) | async createRun(
method getRun (line 146) | async getRun(runId: string): Promise<RunRecord> {
method updateRun (line 154) | async updateRun(runId: string, updates: Partial<RunRecord>): Promise<v...
FILE: core/agent-runtime/src/OSSObjectStorageClient.ts
function isOSSError (line 4) | function isOSSError(err: unknown, code: string): boolean {
class OSSObjectStorageClient (line 19) | class OSSObjectStorageClient implements ObjectStorageClient {
method constructor (line 33) | constructor(client: OSSObject) {
method put (line 37) | async put(key: string, value: string): Promise<void> {
method get (line 41) | async get(key: string): Promise<string | null> {
method append (line 72) | async append(key: string, value: string): Promise<void> {
FILE: core/agent-runtime/src/RunBuilder.ts
type RunUsage (line 7) | type RunUsage = NonNullable<RunRecord['usage']>;
class RunBuilder (line 17) | class RunBuilder {
method constructor (line 32) | private constructor(
method fromRecord (line 49) | static fromRecord(run: RunRecord): RunBuilder {
method create (line 54) | static create(run: RunRecord, threadId: string): RunBuilder {
method start (line 68) | start(): Partial<RunRecord> {
method complete (line 78) | complete(usage?: RunUsage): Partial<RunRecord> {
method fail (line 99) | fail(error: Error): Partial<RunRecord> {
method cancelling (line 118) | cancelling(): Partial<RunRecord> {
method cancel (line 130) | cancel(): Partial<RunRecord> {
method snapshot (line 143) | snapshot(): RunObject {
FILE: core/agent-runtime/src/SSEWriter.ts
type SSEWriter (line 5) | interface SSEWriter {
FILE: core/agent-runtime/test/AgentRuntime.test.ts
class MockSSEWriter (line 25) | class MockSSEWriter implements SSEWriter {
method writeEvent (line 31) | writeEvent(event: string, data: unknown): void {
method writeComment (line 35) | writeComment(text: string): void {
method end (line 39) | end(): void {
method onClose (line 43) | onClose(callback: () => void): void {
method simulateClose (line 47) | simulateClose(): void {
function waitForRunStatus (line 53) | async function waitForRunStatus(
function createSlowExecRun (line 68) | function createSlowExecRun(chunks: AgentMessage[], onYielded?: () => voi...
function createBlockingExecRun (line 90) | function createBlockingExecRun(
method execRun (line 115) | async* execRun(input: CreateRunInput): AsyncGenerator<AgentMessage> {
method info (line 135) | info() {
method error (line 138) | error() {
method info (line 838) | info() { /* noop */ }
method error (line 838) | error() { /* noop */ }
method execRun (line 879) | async* execRun(): AsyncGenerator<AgentMessage> {
method info (line 890) | info() { /* noop */ }
method error (line 890) | error() { /* noop */ }
function waitUntil (line 1034) | async function waitUntil(cond: () => boolean, timeoutMs = 2000): Promise...
FILE: core/agent-runtime/test/HttpSSEWriter.test.ts
class MockServerResponse (line 10) | class MockServerResponse extends EventEmitter {
method writeHead (line 15) | writeHead(statusCode: number, headers: Record<string, string>): void {
method write (line 19) | write(chunk: string): boolean {
method end (line 24) | end(): void {
FILE: core/agent-runtime/test/OSSObjectStorageClient.test.ts
function mockFn (line 8) | function mockFn() {
FILE: core/agent-runtime/test/RunBuilder.test.ts
function makeRunRecord (line 9) | function makeRunRecord(overrides?: Partial<RunRecord>): RunRecord {
FILE: core/agent-runtime/test/helpers.ts
class MapStorageClient (line 4) | class MapStorageClient implements ObjectStorageClient {
method put (line 9) | async put(key: string, value: string): Promise<void> {
method get (line 13) | async get(key: string): Promise<string | null> {
method append (line 17) | async append(key: string, value: string): Promise<void> {
class MapStorageClientWithoutAppend (line 24) | class MapStorageClientWithoutAppend implements ObjectStorageClient {
method put (line 29) | async put(key: string, value: string): Promise<void> {
method get (line 33) | async get(key: string): Promise<string | null> {
FILE: core/agent-tracing/src/ClaudeAgentTracer.ts
class Trace (line 25) | class Trace {
method constructor (line 37) | constructor(tracer: ClaudeAgentTracer, options?: CreateTraceOptions) {
method processMessage (line 50) | async processMessage(message: SDKMessage): Promise<void> {
method handleInit (line 69) | private handleInit(message: ClaudeMessage): void {
method handleAssistant (line 81) | private handleAssistant(message: ClaudeMessage): void {
method handleUser (line 140) | private handleUser(message: ClaudeMessage): void {
method handleResult (line 156) | private handleResult(message: ClaudeMessage): void {
method getTraceId (line 198) | getTraceId(): string {
class ClaudeAgentTracer (line 212) | class ClaudeAgentTracer {
method configure (line 226) | configure(config: TracerConfig): void {
method createTrace (line 248) | public createTrace(options?: CreateTraceOptions): Trace {
method processMessages (line 259) | public async processMessages(sdkMessages: SDKMessage[]): Promise<void> {
method convertSDKMessage (line 288) | convertSDKMessage(msg: SDKMessage): ClaudeMessage | null {
method createRootRunInternal (line 344) | createRootRunInternal(initMsg: ClaudeMessage, startTime: number, trace...
method createLLMRunInternal (line 385) | createLLMRunInternal(
method createToolRunStartInternal (line 443) | createToolRunStartInternal(
method completeToolRunInternal (line 481) | completeToolRunInternal(toolRun: Run, toolResultBlock: ClaudeContentBl...
method extractTokenUsage (line 496) | private extractTokenUsage(usage: ClaudeTokenUsage): IRunCost {
method createRunCostInternal (line 524) | createRunCostInternal(resultMsg: ClaudeMessage): IRunCost {
method logTrace (line 538) | logTrace(run: Run, status: RunStatus): void {
FILE: core/agent-tracing/src/LangGraphTracer.ts
class LangGraphTracer (line 12) | class LangGraphTracer extends BaseTracer {
method configure (line 23) | configure(config: TracerConfig): void {
method persistRun (line 28) | protected persistRun(_: Run): Promise<void> {
method logTrace (line 32) | private logTrace(run: Run, status: RunStatus): void {
method onChainStart (line 36) | onChainStart(run: Run): void | Promise<void> {
method onChainEnd (line 39) | onChainEnd(run: Run): void | Promise<void> {
method onChainError (line 42) | onChainError(run: Run): void | Promise<void> {
method onToolStart (line 46) | onToolStart(run: Run): void | Promise<void> {
method onToolEnd (line 49) | onToolEnd(run: Run): void | Promise<void> {
method onToolError (line 53) | onToolError(run: Run): void | Promise<void> {
method onLLMStart (line 57) | onLLMStart(run: Run): void | Promise<void> {
method onLLMEnd (line 60) | onLLMEnd(run: Run): void | Promise<void> {
method onLLMError (line 63) | onLLMError(run: Run): void | Promise<void> {
method onRetrieverStart (line 67) | onRetrieverStart(run: Run): void | Promise<void> {
method onRetrieverEnd (line 70) | onRetrieverEnd(run: Run): void | Promise<void> {
method onRetrieverError (line 73) | onRetrieverError(run: Run): void | Promise<void> {
method onAgentAction (line 77) | onAgentAction(run: Run): void | Promise<void> {
method onAgentEnd (line 80) | onAgentEnd(run: Run): void | Promise<void> {
FILE: core/agent-tracing/src/TracingService.ts
class TracingService (line 19) | class TracingService {
method getEnv (line 35) | getEnv(): string {
method isOnlineEnv (line 46) | isOnlineEnv(): boolean {
method getLogInfoPrefix (line 54) | getLogInfoPrefix(run: Run, status: RunStatus, name: string): string {
method uploadToOss (line 74) | async uploadToOss(key: string, fileContent: string): Promise<void> {
method syncLocalToLogService (line 88) | async syncLocalToLogService(log: string, agentName: string): Promise<v...
method logTrace (line 106) | logTrace(run: Run, status: RunStatus, name: string, agentName: string)...
FILE: core/agent-tracing/src/types.ts
type ClaudeTextContent (line 3) | interface ClaudeTextContent {
type ClaudeToolUseContent (line 8) | interface ClaudeToolUseContent {
type ClaudeToolResultContent (line 15) | interface ClaudeToolResultContent {
type ClaudeContentBlock (line 22) | type ClaudeContentBlock = ClaudeTextContent | ClaudeToolUseContent | Cla...
type ClaudeTokenUsage (line 24) | interface ClaudeTokenUsage {
type ClaudeMessageContent (line 40) | interface ClaudeMessageContent {
type ClaudeModelUsage (line 54) | interface ClaudeModelUsage {
type ClaudeMessage (line 67) | interface ClaudeMessage {
type IResource (line 112) | interface IResource {
type IRunCost (line 117) | interface IRunCost {
constant FIELDS_TO_OSS (line 126) | const FIELDS_TO_OSS = [ 'inputs', 'outputs', 'attachments', 'serialized'...
type RunStatus (line 133) | type RunStatus = (typeof RunStatus)[keyof typeof RunStatus];
type CreateTraceOptions (line 136) | interface CreateTraceOptions {
type TracerConfig (line 146) | interface TracerConfig {
function applyTracerConfig (line 151) | function applyTracerConfig(tracer: { agentName: string }, config: Tracer...
FILE: core/agent-tracing/test/ClaudeAgentTracer.test.ts
function createTestEnv (line 11) | function createTestEnv() {
function createMockInit (line 24) | function createMockInit(overrides?: Partial<any>): SDKMessage {
function createMockAssistantWithTool (line 45) | function createMockAssistantWithTool(overrides?: Partial<any>): SDKMessa...
function createMockUserToolResult (line 67) | function createMockUserToolResult(overrides?: Partial<any>): SDKMessage {
function createMockAssistantTextOnly (line 88) | function createMockAssistantTextOnly(overrides?: Partial<any>): SDKMessa...
function createMockResult (line 107) | function createMockResult(overrides?: Partial<any>): SDKMessage {
function createMockToolProgress (line 133) | function createMockToolProgress(): SDKMessage {
function createMockStreamEvent (line 145) | function createMockStreamEvent(): SDKMessage {
FILE: core/agent-tracing/test/TestUtils.ts
type CapturedEntry (line 6) | interface CapturedEntry {
function createMockRun (line 13) | function createMockRun(overrides?: Partial<Run>): Run {
function createMockLogger (line 35) | function createMockLogger(logs?: string[]): Logger {
function createCapturingTracingService (line 53) | function createCapturingTracingService(): {
FILE: core/agent-tracing/test/TracingService.test.ts
function makeTracingService (line 9) | function makeTracingService({
FILE: core/ajv-decorator/src/enum/TransformEnum.ts
type TransformEnum (line 6) | enum TransformEnum {
FILE: core/ajv-decorator/src/error/AjvInvalidParamError.ts
type AjvInvalidParamErrorOptions (line 3) | interface AjvInvalidParamErrorOptions {
class AjvInvalidParamError (line 9) | class AjvInvalidParamError extends Error {
method constructor (line 14) | constructor(message: string, options: AjvInvalidParamErrorOptions) {
FILE: core/ajv-decorator/src/type/Ajv.ts
type Ajv (line 3) | interface Ajv {
FILE: core/aop-decorator/src/AspectMetaBuilder.ts
class AspectMetaBuilder (line 6) | class AspectMetaBuilder {
method constructor (line 10) | constructor(clazz: EggProtoImplClass, options: {
method build (line 17) | build(): Array<Aspect> {
method getAllMethods (line 29) | static getAllMethods(clazz): PropertyKey[] {
method doBuildMethodAspect (line 48) | private doBuildMethodAspect(method: PropertyKey): Aspect | undefined {
FILE: core/aop-decorator/src/CrosscutAdviceFactory.ts
class CrosscutAdviceFactory (line 5) | class CrosscutAdviceFactory {
method registerCrossAdviceClazz (line 8) | registerCrossAdviceClazz(clazz: EggProtoImplClass<IAdvice>) {
method getAdvice (line 13) | getAdvice(clazz: EggProtoImplClass, method: PropertyKey): Array<Advice...
FILE: core/aop-decorator/src/decorator/Advice.ts
function Advice (line 12) | function Advice(param?: PrototypeParams) {
FILE: core/aop-decorator/src/decorator/Crosscut.ts
function Crosscut (line 10) | function Crosscut(param: CrosscutParam, options?: CrosscutOptions) {
FILE: core/aop-decorator/src/decorator/Pointcut.ts
function Pointcut (line 10) | function Pointcut<T extends object, K = any>(adviceClazz: EggProtoImplCl...
FILE: core/aop-decorator/src/model/Aspect.ts
class Aspect (line 3) | class Aspect {
method constructor (line 8) | constructor(clazz: EggProtoImplClass, method: PropertyKey, adviceList:...
class AspectBuilder (line 15) | class AspectBuilder {
method constructor (line 20) | constructor(clazz: EggProtoImplClass, method: PropertyKey) {
method addAdvice (line 26) | addAdvice(adviceInfo: AdviceInfo) {
method build (line 30) | build(): Aspect {
method adviceName (line 42) | private adviceName(advice: EggProtoImplClass<IAdvice>, index: number) {
FILE: core/aop-decorator/src/model/PointcutInfo.ts
class ClassPointInfo (line 4) | class ClassPointInfo implements PointcutInfo {
method constructor (line 9) | constructor(clazz: EggProtoImplClass, method: PropertyKey) {
method match (line 14) | match(clazz: EggProtoImplClass, method: PropertyKey): boolean {
class NamePointInfo (line 24) | class NamePointInfo implements PointcutInfo {
method constructor (line 29) | constructor(className: RegExp, methodName: RegExp) {
method match (line 34) | match(clazz: EggProtoImplClass, method: PropertyKey): boolean {
class CustomPointInfo (line 39) | class CustomPointInfo implements PointcutInfo {
method constructor (line 43) | constructor(cb: CustomPointcutCallback) {
method match (line 47) | match(clazz: EggProtoImplClass, method: PropertyKey): boolean {
FILE: core/aop-decorator/src/util/AdviceInfoUtil.ts
constant IS_ADVICE (line 4) | const IS_ADVICE = Symbol.for('EggPrototype#isAdvice');
class AdviceInfoUtil (line 6) | class AdviceInfoUtil {
method setIsAdvice (line 7) | static setIsAdvice(isAdvice: boolean, clazz: EggProtoImplClass<IAdvice...
method isAdvice (line 11) | static isAdvice(clazz: EggProtoImplClass<IAdvice>): boolean {
FILE: core/aop-decorator/src/util/AspectInfoUtil.ts
class AspectInfoUtil (line 6) | class AspectInfoUtil {
method setAspectList (line 7) | static setAspectList(aspectList: Array<Aspect>, clazz: EggProtoImplCla...
method getAspectList (line 11) | static getAspectList(clazz: EggProtoImplClass<IAdvice>): Array<Aspect> {
FILE: core/aop-decorator/src/util/CrosscutInfoUtil.ts
class CrosscutInfoUtil (line 5) | class CrosscutInfoUtil {
method setIsCrosscutAdvice (line 6) | static setIsCrosscutAdvice(isCrosscutAdvice: boolean, clazz: EggProtoI...
method isCrosscutAdvice (line 10) | static isCrosscutAdvice(clazz: EggProtoImplClass<IAdvice>): boolean {
method addCrosscutInfo (line 14) | static addCrosscutInfo(crosscutInfo: CrosscutInfo, clazz: EggProtoImpl...
method getCrosscutInfoList (line 19) | static getCrosscutInfoList(clazz: EggProtoImplClass<IAdvice>): Array<C...
FILE: core/aop-decorator/src/util/PointcutAdviceInfoUtil.ts
type PointcutAdviceInfo (line 5) | interface PointcutAdviceInfo {
class PointcutAdviceInfoUtil (line 10) | class PointcutAdviceInfoUtil {
method addPointcutAdviceInfo (line 11) | static addPointcutAdviceInfo(adviceInfo: AdviceInfo, clazz: EggProtoIm...
method getPointcutAdviceInfoList (line 20) | static getPointcutAdviceInfoList(clazz: EggProtoImplClass, method: Pro...
FILE: core/aop-decorator/test/fixtures/CrosscutExample.ts
class CrosscutExample (line 7) | class CrosscutExample {
method constructor (line 8) | constructor() {
method hello (line 11) | hello() {
class CrosscutClassAdviceExample (line 22) | class CrosscutClassAdviceExample implements IAdvice{
class CrosscutNameAdviceExample (line 31) | class CrosscutNameAdviceExample implements IAdvice{
class CrosscutCustomAdviceExample (line 41) | class CrosscutCustomAdviceExample implements IAdvice{
FILE: core/aop-decorator/test/fixtures/InheritExample.ts
class PointcutAdviceNoOverwriteParentExample (line 9) | class PointcutAdviceNoOverwriteParentExample implements IAdvice {
method beforeCall (line 10) | async beforeCall(ctx: AdviceContext): Promise<void> {
class PointcutAdviceOverwriteParentExample (line 16) | class PointcutAdviceOverwriteParentExample implements IAdvice {
method beforeCall (line 17) | async beforeCall(ctx: AdviceContext): Promise<void> {
class PointcutAdviceOverwriteChildExample (line 23) | class PointcutAdviceOverwriteChildExample implements IAdvice {
method beforeCall (line 24) | async beforeCall(ctx: AdviceContext): Promise<void> {
class ParentExample (line 30) | class ParentExample {
method overwriteMethod (line 32) | overwriteMethod() {
method noOverwriteMethod (line 37) | noOverwriteMethod() {
class ChildExample (line 43) | class ChildExample extends ParentExample {
method overwriteMethod (line 45) | overwriteMethod() {
class CrosscutNoOverwriteParentExample (line 56) | class CrosscutNoOverwriteParentExample implements IAdvice {
method beforeCall (line 57) | async beforeCall(ctx: AdviceContext): Promise<void> {
class CrosscutOverwriteParentExample (line 68) | class CrosscutOverwriteParentExample implements IAdvice {
method beforeCall (line 69) | async beforeCall(ctx: AdviceContext): Promise<void> {
class CrosscutOverwriteChildExample (line 80) | class CrosscutOverwriteChildExample implements IAdvice {
method beforeCall (line 81) | async beforeCall(ctx: AdviceContext): Promise<void> {
FILE: core/aop-decorator/test/fixtures/PointcutExample.ts
class PointcutAdviceBeforeCallExample (line 6) | class PointcutAdviceBeforeCallExample implements IAdvice {
method beforeCall (line 7) | async beforeCall(ctx: AdviceContext): Promise<void> {
class PointcutAdviceAfterReturnExample (line 13) | class PointcutAdviceAfterReturnExample implements IAdvice {
method afterReturn (line 14) | async afterReturn(ctx: AdviceContext): Promise<void> {
class GetterExample (line 20) | class GetterExample {
method badGetter (line 21) | get badGetter() {
method foo (line 26) | foo() {
class PointcutExample (line 32) | class PointcutExample {
method hello (line 35) | hello() {
FILE: core/aop-runtime/src/AspectExecutor.ts
type InternalAdviceContext (line 5) | interface InternalAdviceContext<T = object> {
class AspectExecutor (line 11) | class AspectExecutor {
method constructor (line 16) | constructor(obj: object, method: PropertyKey, aspectAdviceList: readon...
method execute (line 22) | async execute(...args: any[]) {
method beforeCall (line 41) | async beforeCall(ctx: InternalAdviceContext) {
method afterReturn (line 59) | async afterReturn(ctx: InternalAdviceContext, result: any) {
method afterThrow (line 68) | async afterThrow(ctx: InternalAdviceContext, error: Error) {
method afterFinally (line 77) | async afterFinally(ctx: InternalAdviceContext) {
method doExecute (line 86) | async doExecute(ctx: InternalAdviceContext) {
FILE: core/aop-runtime/src/CrossCutGraphHook.ts
function crossCutGraphHook (line 10) | function crossCutGraphHook(globalGraph: GlobalGraph) {
function findCrossCuttedClazz (line 28) | function findCrossCuttedClazz(globalGraph: GlobalGraph, protoNode: Graph...
function checkClazzMatchCrossCut (line 48) | function checkClazzMatchCrossCut(protoNode: GraphNode<ProtoNode>, crossc...
FILE: core/aop-runtime/src/EggObjectAopHook.ts
class EggObjectAopHook (line 9) | class EggObjectAopHook implements LifecycleHook<EggObjectLifeCycleContex...
method hijackMethods (line 10) | private hijackMethods(obj: any, aspectList: Array<Aspect>) {
method injectAdvice (line 19) | private injectAdvice(eggObject: EggObject, obj: any, aspectList: Array...
method postCreate (line 36) | async postCreate(_: EggObjectLifeCycleContext, eggObject: EggObject): ...
FILE: core/aop-runtime/src/EggPrototypeCrossCutHook.ts
class EggPrototypeCrossCutHook (line 4) | class EggPrototypeCrossCutHook implements LifecycleHook<EggPrototypeLife...
method constructor (line 7) | constructor(crosscutAdviceFactory: CrosscutAdviceFactory) {
method preCreate (line 11) | async preCreate(ctx: EggPrototypeLifecycleContext): Promise<void> {
FILE: core/aop-runtime/src/LoadUnitAopHook.ts
class LoadUnitAopHook (line 12) | class LoadUnitAopHook implements LifecycleHook<LoadUnitLifecycleContext,...
method constructor (line 15) | constructor(crosscutAdviceFactory: CrosscutAdviceFactory) {
method postCreate (line 19) | async postCreate(_: LoadUnitLifecycleContext, loadUnit: LoadUnit): Pro...
FILE: core/aop-runtime/src/PointCutGraphHook.ts
function pointCutGraphHook (line 12) | function pointCutGraphHook(globalGraph: GlobalGraph) {
function findPointCutAdvice (line 28) | function findPointCutAdvice(globalGraph: GlobalGraph, protoNode: GraphNo...
FILE: core/aop-runtime/test/fixtures/modules/constructor_inject_aop/Hello.ts
class Foo (line 6) | class Foo {
class HelloConstructorInject (line 10) | class HelloConstructorInject {
method constructor (line 13) | constructor(@Inject() readonly foo: Foo) {
method hello (line 17) | async hello(name: string) {
method helloWithException (line 22) | async helloWithException(name: string) {
FILE: core/aop-runtime/test/fixtures/modules/hello_cross_cut/CallTrace.ts
type CallTraceMsg (line 3) | interface CallTraceMsg {
class CallTrace (line 15) | class CallTrace {
method addMsg (line 18) | addMsg(msg: CallTraceMsg) {
FILE: core/aop-runtime/test/fixtures/modules/hello_cross_cut/HelloCrossCut.ts
class CrosscutAdvice (line 21) | class CrosscutAdvice implements IAdvice<Hello, string> {
method beforeCall (line 25) | async beforeCall(ctx: AdviceContext<Hello, {}>): Promise<void> {
method afterReturn (line 37) | async afterReturn(ctx: AdviceContext<Hello>, result: any): Promise<voi...
method afterFinally (line 50) | async afterFinally(ctx: AdviceContext<Hello>): Promise<void> {
method around (line 62) | async around(ctx: AdviceContext<Hello>, next: () => Promise<any>): Pro...
FILE: core/aop-runtime/test/fixtures/modules/hello_point_cut/HelloPointCut.ts
constant TEST_CTX_ARGS_VALUE (line 14) | const TEST_CTX_ARGS_VALUE = 123;
class PointcutAdvice (line 19) | class PointcutAdvice implements IAdvice<Hello> {
method beforeCall (line 23) | async beforeCall(ctx: AdviceContext<Hello>): Promise<void> {
method afterReturn (line 36) | async afterReturn(ctx: AdviceContext<Hello>, result: any): Promise<voi...
method afterThrow (line 50) | async afterThrow(ctx: AdviceContext<Hello, any>, error: Error): Promis...
method afterFinally (line 63) | async afterFinally(ctx: AdviceContext<Hello>): Promise<void> {
method around (line 75) | async around(ctx: AdviceContext<Hello>, next: () => Promise<any>): Pro...
FILE: core/aop-runtime/test/fixtures/modules/hello_succeed/Hello.ts
class Hello (line 6) | class Hello {
method hello (line 10) | async hello(name: string) {
method helloWithException (line 15) | async helloWithException(name: string) {
FILE: core/aop-runtime/test/fixtures/modules/should_throw/Hello.ts
class PointcutAdvice (line 5) | @Advice()
method beforeCall (line 7) | async beforeCall(ctx: AdviceContext<Hello>): Promise<void> {
class Hello (line 13) | class Hello {
method hello (line 17) | async hello(name: string) {
FILE: core/aop-runtime/test/fixtures/mutli/a/A.ts
class A (line 5) | class A extends Base {
method hello (line 8) | async hello(name: string) {
FILE: core/aop-runtime/test/fixtures/mutli/b/B.ts
class B (line 5) | class B extends Base {
method hello (line 8) | async hello(name: string) {
FILE: core/aop-runtime/test/fixtures/mutli/c/Base.ts
class Base (line 4) | class Base {
method hello (line 7) | async hello(name: string) {
FILE: core/aop-runtime/test/fixtures/mutli/cross/Cross.ts
class BaseAdvice (line 19) | class BaseAdvice implements IAdvice<Base> {
method beforeCall (line 21) | async beforeCall(_ctx: AdviceContext<Base>): Promise<void> {
method afterReturn (line 24) | async afterReturn(_ctx: AdviceContext<Base>, _result: any): Promise<vo...
method afterThrow (line 27) | async afterThrow(_ctx: AdviceContext<Base>, _error: Error): Promise<vo...
method afterFinally (line 30) | async afterFinally(_ctx: AdviceContext<Base>): Promise<void> {
method around (line 33) | async around(_ctx: AdviceContext<Base>, _next: () => Promise<any>): Pr...
FILE: core/background-task/src/BackgroundTaskHelper.ts
class BackgroundTaskHelper (line 11) | class BackgroundTaskHelper implements EggObjectLifecycle {
method init (line 23) | async init() {
method run (line 36) | run(fn: () => Promise<void>) {
method doPreDestroy (line 59) | async doPreDestroy(): Promise<void> {
method sleep (line 83) | private sleep() {
FILE: core/common-util/src/FSUtil.ts
class FSUtil (line 3) | class FSUtil {
method fileExists (line 4) | static async fileExists(filePath: string): Promise<boolean> {
FILE: core/common-util/src/Graph.ts
type EdgeMeta (line 5) | interface EdgeMeta {
class GraphNode (line 10) | class GraphNode<T extends GraphNodeObj, M extends EdgeMeta = EdgeMeta> {
method constructor (line 15) | constructor(val: T) {
method id (line 19) | get id() {
method addToVertex (line 23) | addToVertex(node: GraphNode<T, M>, meta?: M) {
method addFromVertex (line 31) | addFromVertex(node: GraphNode<T, M>, meta?: M) {
method [inspect] (line 39) | [inspect]() {
method toJSON (line 43) | toJSON() {
method toString (line 51) | toString() {
class GraphPath (line 56) | class GraphPath<T extends GraphNodeObj, M extends EdgeMeta = EdgeMeta> {
method pushVertex (line 60) | pushVertex(node: GraphNode<T, M>, meta?: M): boolean {
method popVertex (line 67) | popVertex() {
method toString (line 75) | toString() {
method [inspect] (line 90) | [inspect]() {
class Graph (line 95) | class Graph<T extends GraphNodeObj, M extends EdgeMeta = EdgeMeta> {
method addVertex (line 98) | addVertex(node: GraphNode<T, M>): boolean {
method addEdge (line 106) | addEdge(from: GraphNode<T, M>, to: GraphNode<T, M>, meta?: M): boolean {
method findToNode (line 111) | findToNode(id: string, meta: M): GraphNode<T, M> | undefined {
method appendVertexToPath (line 122) | appendVertexToPath(node: GraphNode<T, M>, accessPath: GraphPath<T, M>,...
method loopPath (line 135) | loopPath(): GraphPath<T, M> | undefined {
method accessNode (line 146) | accessNode(node: GraphNode<T, M>, nodes: Array<GraphNode<T, M>>, acces...
method sort (line 171) | sort(): Array<GraphNode<T, M>> {
FILE: core/common-util/src/MapUtil.ts
class MapUtil (line 1) | class MapUtil {
method getOrStore (line 2) | static getOrStore<K, V>(map: Map<K, V>, key: K, value: V): V {
FILE: core/common-util/src/ModuleConfig.ts
class ModuleReferenceConfigHelp (line 17) | class ModuleReferenceConfigHelp {
method isInlineModuleReference (line 18) | static isInlineModuleReference(moduleReference: ModuleReferenceConfig)...
method isNpmModuleReference (line 22) | static isNpmModuleReference(moduleReference: ModuleReferenceConfig): m...
constant DEFAULT_READ_MODULE_REF_OPTS (line 27) | const DEFAULT_READ_MODULE_REF_OPTS = {
class ModuleConfigUtil (line 31) | class ModuleConfigUtil {
method setConfigNames (line 34) | public static setConfigNames(configNames: string[] | undefined) {
method readModuleReference (line 38) | public static readModuleReference(baseDir: string, options?: ReadModul...
method readModuleReferenceFromModuleJson (line 49) | private static readModuleReferenceFromModuleJson(configDir: string, mo...
method readModuleReferenceFromScan (line 79) | private static readModuleReferenceFromScan(baseDir: string, options?: ...
method readModuleFromNodeModules (line 140) | public static readModuleFromNodeModules(baseDir: string) {
method resolveModuleDir (line 173) | public static resolveModuleDir(moduleDir: string, baseDir?: string): s...
method getModuleName (line 181) | private static getModuleName(pkg: any) {
method readModuleName (line 186) | public static async readModuleName(baseDir: string, moduleDir: string)...
method readModuleNameSync (line 193) | public static readModuleNameSync(moduleDir: string, baseDir?: string):...
method loadModuleConfig (line 200) | public static async loadModuleConfig(moduleDir: string, baseDir?: stri...
method #loadOne (line 225) | static async #loadOne(moduleDir: string, configName: string): Promise<...
method #loadJson (line 235) | static async #loadJson(moduleJsonPath: string): Promise<ModuleConfig |...
method #loadYaml (line 245) | static async #loadYaml(moduleYamlPath: string): Promise<ModuleConfig |...
method loadModuleConfigSync (line 254) | public static loadModuleConfigSync(moduleDir: string, baseDir?: string...
method #loadOneSync (line 279) | static #loadOneSync(moduleDir: string, configName: string): ModuleConf...
method #loadJsonSync (line 289) | static #loadJsonSync(moduleJsonPath: string): ModuleConfig | undefined {
method #loadYamlSync (line 299) | static #loadYamlSync(moduleYamlPath: string): ModuleConfig | undefined {
method deduplicateModules (line 313) | public static deduplicateModules(
FILE: core/common-util/src/ModuleConfigs.ts
class ModuleConfigs (line 3) | class ModuleConfigs {
method constructor (line 4) | constructor(readonly inner: Record<string, ModuleConfigHolder>) {
method get (line 7) | get(moduleName: string): ModuleConfig | undefined {
method [Symbol.iterator] (line 11) | * [Symbol.iterator](): Iterator<[string, ModuleConfigHolder]> {
FILE: core/common-util/src/NameUtil.ts
class NameUtil (line 1) | class NameUtil {
method getClassName (line 2) | static getClassName(constructor: Function) {
FILE: core/common-util/src/ObjectUtils.ts
class ObjectUtils (line 3) | class ObjectUtils {
method getProperties (line 4) | static getProperties(obj: object): string[] {
method getFunctionArgNameList (line 14) | static getFunctionArgNameList(func: Function): string[] {
method getConstructorArgNameList (line 40) | static getConstructorArgNameList(clazz: EggProtoImplClass): string[] {
FILE: core/common-util/src/ProxyUtil.ts
class ProxyUtil (line 1) | class ProxyUtil {
method safeProxy (line 2) | static safeProxy<T extends object>(obj: T, getter: (obj: T, p: Propert...
FILE: core/common-util/src/StackUtil.ts
function prepareObjectStackTrace (line 6) | function prepareObjectStackTrace(_, stack) {
class StackUtil (line 10) | class StackUtil {
method getCalleeFromStack (line 13) | static getCalleeFromStack(withLine: boolean, stackIndex?: number) {
FILE: core/common-util/src/StreamUtil.ts
class StreamUtil (line 3) | class StreamUtil {
method isStream (line 4) | static isStream(obj: any): boolean {
FILE: core/common-util/src/TimerUtil.ts
class TimeoutError (line 1) | class TimeoutError extends Error {
method constructor (line 2) | constructor(message: string) {
class TimerUtil (line 8) | class TimerUtil {
method sleep (line 11) | static async sleep(ms: number) {
method timeout (line 15) | static async timeout<T>(fn: () => Promise<T>, ms?: number): Promise<T> {
FILE: core/common-util/test/NameUtil.test.ts
class Hello (line 6) | class Hello {}
FILE: core/common-util/test/ObjectUtil.test.ts
function InitTypeQualifier (line 4) | function InitTypeQualifier() {
function ModuleQualifier (line 11) | function ModuleQualifier(_foo: string) {
function Inject (line 18) | function Inject(_arg?: any) {
function mockFunction (line 27) | function mockFunction(/* test */ctx: object, foo: string, bar = '233') {
class ConstructorObject (line 37) | class ConstructorObject {
method constructor (line 38) | constructor(
FILE: core/common-util/test/ProtoGraph.test.ts
class GraphNodeVal (line 6) | class GraphNodeVal implements GraphNodeObj {
method constructor (line 9) | constructor(id: string) {
method toString (line 13) | toString() {
FILE: core/controller-decorator/src/builder/ControllerMetaBuilderFactory.ts
class ControllerMetaBuilderFactory (line 11) | class ControllerMetaBuilderFactory {
method registerControllerMetaBuilder (line 14) | static registerControllerMetaBuilder(controllerType: ControllerTypeLik...
method createControllerMetaBuilder (line 18) | static createControllerMetaBuilder(clazz: EggProtoImplClass, controlle...
method build (line 32) | static build(clazz: EggProtoImplClass, controllerType?: ControllerType...
FILE: core/controller-decorator/src/decorator/Acl.ts
function Acl (line 6) | function Acl(code?: string) {
FILE: core/controller-decorator/src/decorator/Context.ts
function Context (line 5) | function Context() {
FILE: core/controller-decorator/src/decorator/Middleware.ts
type MiddlewareType (line 8) | enum MiddlewareType {
function isAop (line 13) | function isAop(mw: MiddlewareFunc | EggProtoImplClass<IAdvice>) {
function isAopTypeOrMiddlewareType (line 17) | function isAopTypeOrMiddlewareType(middlewares: Array<MiddlewareFunc> | ...
function Middleware (line 28) | function Middleware(...middlewares: Array<MiddlewareFunc> | Array<EggPro...
FILE: core/controller-decorator/src/decorator/agent/AgentController.ts
type AgentRouteParam (line 17) | interface AgentRouteParam {
type AgentRouteDefinition (line 23) | interface AgentRouteDefinition {
function createNotImplemented (line 34) | function createNotImplemented(methodName: string, paramCount: number) {
constant AGENT_ROUTES (line 55) | const AGENT_ROUTES: AgentRouteDefinition[] = [
function AgentController (line 109) | function AgentController(): (constructor: EggProtoImplClass) => void {
FILE: core/controller-decorator/src/decorator/agent/AgentHandler.ts
type AgentHandler (line 12) | interface AgentHandler {
FILE: core/controller-decorator/src/decorator/http/HTTPController.ts
function HTTPController (line 8) | function HTTPController(param?: HTTPControllerParams) {
FILE: core/controller-decorator/src/decorator/http/HTTPMethod.ts
function HTTPMethod (line 7) | function HTTPMethod(param: HTTPMethodParams) {
FILE: core/controller-decorator/src/decorator/http/HTTPParam.ts
function HTTPBody (line 11) | function HTTPBody() {
function HTTPHeaders (line 21) | function HTTPHeaders() {
function HTTPQuery (line 31) | function HTTPQuery(param?: HTTPQueryParams) {
function HTTPQueries (line 44) | function HTTPQueries(param?: HTTPQueriesParams) {
function HTTPParam (line 57) | function HTTPParam(param?: HTTPParamParams) {
function Request (line 70) | function Request() {
function Cookies (line 83) | function Cookies() {
FILE: core/controller-decorator/src/decorator/http/Host.ts
function Host (line 6) | function Host(host: HostType) {
FILE: core/controller-decorator/src/decorator/mcp/Extra.ts
function Extra (line 6) | function Extra() {
FILE: core/controller-decorator/src/decorator/mcp/MCPController.ts
function MCPController (line 7) | function MCPController(param?: MCPControllerParams) {
FILE: core/controller-decorator/src/decorator/mcp/MCPPrompt.ts
function MCPPrompt (line 10) | function MCPPrompt(params?: MCPPromptParams) {
function PromptArgsSchema (line 35) | function PromptArgsSchema(argsSchema: Parameters<McpServer['prompt']>['2...
FILE: core/controller-decorator/src/decorator/mcp/MCPResource.ts
function MCPResource (line 9) | function MCPResource(params: MCPResourceParams) {
FILE: core/controller-decorator/src/decorator/mcp/MCPTool.ts
function MCPTool (line 10) | function MCPTool(params?: MCPToolParams) {
function ToolArgsSchema (line 35) | function ToolArgsSchema(argsSchema: Parameters<McpServer['tool']>['2']) {
FILE: core/controller-decorator/src/impl/http/HTTPControllerMetaBuilder.ts
class HTTPControllerMetaBuilder (line 15) | class HTTPControllerMetaBuilder {
method constructor (line 18) | constructor(clazz: EggProtoImplClass) {
method buildMethod (line 22) | private buildMethod(): HTTPMethodMeta[] {
method build (line 35) | build(): HTTPControllerMeta {
method create (line 63) | static create(clazz: EggProtoImplClass) {
FILE: core/controller-decorator/src/impl/http/HTTPControllerMethodMetaBuilder.ts
class HTTPControllerMethodMetaBuilder (line 10) | class HTTPControllerMethodMetaBuilder {
method constructor (line 14) | constructor(clazz: EggProtoImplClass, methodName: string) {
method checkParamDecorators (line 28) | private checkParamDecorators() {
method buildParamType (line 57) | private buildParamType(httpPath: string): Map<number, ParamMeta> {
method getPriority (line 80) | getPriority() {
method build (line 95) | build(): HTTPMethodMeta | undefined {
FILE: core/controller-decorator/src/impl/mcp/MCPControllerMetaBuilder.ts
class MCPControllerMetaBuilder (line 14) | class MCPControllerMetaBuilder {
method constructor (line 17) | constructor(clazz: EggProtoImplClass) {
method buildResource (line 21) | private buildResource(): MCPResourceMeta[] {
method buildPrompt (line 37) | private buildPrompt(): MCPPromptMeta[] {
method buildTool (line 53) | private buildTool(): MCPToolMeta[] {
method build (line 66) | build(): MCPControllerMeta {
method create (line 102) | static create(clazz: EggProtoImplClass) {
FILE: core/controller-decorator/src/impl/mcp/MCPControllerPromptMetaBuilder.ts
class MCPControllerPromptMetaBuilder (line 7) | class MCPControllerPromptMetaBuilder {
method constructor (line 11) | constructor(clazz: EggProtoImplClass, methodName: string) {
method build (line 16) | build(): MCPPromptMeta | undefined {
FILE: core/controller-decorator/src/impl/mcp/MCPControllerResourceMetaBuilder.ts
class MCPControllerResourceMetaBuilder (line 7) | class MCPControllerResourceMetaBuilder {
method constructor (line 11) | constructor(clazz: EggProtoImplClass, methodName: string) {
method build (line 16) | build(): MCPResourceMeta | undefined {
FILE: core/controller-decorator/src/impl/mcp/MCPControllerToolMetaBuilder.ts
class MCPControllerToolMetaBuilder (line 7) | class MCPControllerToolMetaBuilder {
method constructor (line 11) | constructor(clazz: EggProtoImplClass, methodName: string) {
method build (line 16) | build(): MCPToolMeta | undefined {
FILE: core/controller-decorator/src/model/HTTPControllerMeta.ts
class HTTPControllerMeta (line 6) | class HTTPControllerMeta implements ControllerMetadata {
method constructor (line 19) | constructor(
method getMethodRealPath (line 43) | getMethodRealPath(method: HTTPMethodMeta) {
method getMethodHosts (line 50) | getMethodHosts(method: HTTPMethodMeta): string[] | undefined {
method getMethodName (line 57) | getMethodName(method: HTTPMethodMeta) {
method getMethodMiddlewares (line 61) | getMethodMiddlewares(method: HTTPMethodMeta) {
method hasMethodAcl (line 71) | hasMethodAcl(method: HTTPMethodMeta): boolean {
method getMethodAcl (line 75) | getMethodAcl(method: HTTPMethodMeta): string | undefined {
method getMethodTimeout (line 82) | getMethodTimeout(method: HTTPMethodMeta): number | undefined {
FILE: core/controller-decorator/src/model/HTTPCookies.ts
class HTTPCookies (line 2) | class HTTPCookies extends Cookies {}
FILE: core/controller-decorator/src/model/HTTPMethodMeta.ts
class RequestParamMeta (line 11) | class RequestParamMeta extends ParamMeta {
method validate (line 14) | validate() {
class BodyParamMeta (line 19) | class BodyParamMeta extends ParamMeta {
method validate (line 22) | validate() {
class HeadersParamMeta (line 27) | class HeadersParamMeta extends ParamMeta {
method validate (line 30) | validate() {
class QueryParamMeta (line 35) | class QueryParamMeta extends ParamMeta {
method constructor (line 39) | constructor(name: string) {
method validate (line 44) | validate() {
class QueriesParamMeta (line 49) | class QueriesParamMeta extends ParamMeta {
method constructor (line 53) | constructor(name: string) {
method validate (line 58) | validate() {
class PathParamMeta (line 63) | class PathParamMeta extends ParamMeta {
method constructor (line 67) | constructor(name: string) {
method validate (line 72) | validate(httpPath: string) {
class CookiesParamMeta (line 81) | class CookiesParamMeta extends ParamMeta {
method validate (line 84) | validate() {
class HTTPMethodMeta (line 90) | class HTTPMethodMeta implements MethodMeta {
method constructor (line 103) | constructor(
class ParamMetaUtil (line 130) | class ParamMetaUtil {
method createParam (line 131) | static createParam(type: HTTPParamType, name?: string) {
FILE: core/controller-decorator/src/model/HTTPRequest.ts
class HTTPRequest (line 4) | class HTTPRequest extends (undici.Request || Object) {}
FILE: core/controller-decorator/src/model/HTTPResponse.ts
class HTTPResponse (line 4) | class HTTPResponse extends (undici.Response || Object) {}
FILE: core/controller-decorator/src/model/MCPControllerMeta.ts
class MCPControllerMeta (line 12) | class MCPControllerMeta implements ControllerMetadata {
method id (line 28) | get id() {
method constructor (line 32) | constructor(
method getMethodMiddlewares (line 61) | getMethodMiddlewares(method: MCPPromptMeta | MCPToolMeta | MCPResource...
method hasMethodAcl (line 68) | hasMethodAcl(method: MCPPromptMeta | MCPToolMeta | MCPResourceMeta): b...
method getMethodAcl (line 72) | getMethodAcl(
FILE: core/controller-decorator/src/model/MCPPromptMeta.ts
class MCPPromptMeta (line 4) | class MCPPromptMeta {
method constructor (line 15) | constructor(opt: {
FILE: core/controller-decorator/src/model/MCPResourceMeta.ts
class MCPResourceMeta (line 5) | class MCPResourceMeta {
method constructor (line 16) | constructor(opt: {
FILE: core/controller-decorator/src/model/MCPToolMeta.ts
class MCPToolMeta (line 5) | class MCPToolMeta {
method constructor (line 15) | constructor(opt: {
FILE: core/controller-decorator/src/util/AgentInfoUtil.ts
class AgentInfoUtil (line 9) | class AgentInfoUtil {
method setAgentController (line 10) | static setAgentController(clazz: EggProtoImplClass): void {
method isAgentController (line 14) | static isAgentController(clazz: EggProtoImplClass): boolean {
method setNotImplemented (line 18) | static setNotImplemented(fn: Function): void {
method isNotImplemented (line 22) | static isNotImplemented(fn: Function): boolean {
method setEnhanced (line 26) | static setEnhanced(clazz: EggProtoImplClass): void {
method isEnhanced (line 30) | static isEnhanced(clazz: EggProtoImplClass): boolean {
FILE: core/controller-decorator/src/util/ControllerInfoUtil.ts
class ControllerInfoUtil (line 14) | class ControllerInfoUtil {
method addControllerMiddleware (line 15) | static addControllerMiddleware(middleware: MiddlewareFunc, clazz: EggP...
method addControllerAopMiddleware (line 20) | static addControllerAopMiddleware(middleware: EggProtoImplClass<IAdvic...
method getControllerMiddlewares (line 25) | static getControllerMiddlewares(clazz: EggProtoImplClass): MiddlewareF...
method getControllerAopMiddlewares (line 29) | static getControllerAopMiddlewares(clazz: EggProtoImplClass): EggProto...
method setControllerType (line 33) | static setControllerType(clazz: EggProtoImplClass, controllerType: Con...
method setControllerName (line 37) | static setControllerName(clazz: EggProtoImplClass, controllerName: str...
method getControllerName (line 41) | static getControllerName(clazz: EggProtoImplClass): string | undefined {
method getControllerType (line 45) | static getControllerType(clazz): ControllerTypeLike | undefined {
method setControllerAcl (line 49) | static setControllerAcl(code: string | undefined, clazz: EggProtoImplC...
method hasControllerAcl (line 53) | static hasControllerAcl(clazz: EggProtoImplClass): boolean {
method getControllerAcl (line 57) | static getControllerAcl(clazz: EggProtoImplClass): string | undefined {
method addControllerHosts (line 61) | static addControllerHosts(hosts: string[], clazz: EggProtoImplClass) {
method getControllerHosts (line 65) | static getControllerHosts(clazz: EggProtoImplClass): string[] | undefi...
method setControllerTimeout (line 69) | static setControllerTimeout(timeout: number, clazz: EggProtoImplClass) {
method getControllerTimeout (line 73) | static getControllerTimeout(clazz: EggProtoImplClass): number | undefi...
FILE: core/controller-decorator/src/util/ControllerMetadataUtil.ts
class ControllerMetadataUtil (line 6) | class ControllerMetadataUtil {
method setControllerMetadata (line 7) | static setControllerMetadata(clazz: EggProtoImplClass, metaData: Contr...
method getControllerMetadata (line 11) | static getControllerMetadata(clazz): ControllerMetadata | undefined {
FILE: core/controller-decorator/src/util/HTTPInfoUtil.ts
type HTTPMethodPathMap (line 13) | type HTTPMethodPathMap = Map<string, string>;
type HTTPMethodMethodMap (line 14) | type HTTPMethodMethodMap = Map<string, HTTPMethodEnum>;
type HTTPMethodParamTypeMap (line 15) | type HTTPMethodParamTypeMap = Map<string, Map<number, HTTPParamType>>;
type HTTPMethodParamNameMap (line 16) | type HTTPMethodParamNameMap = Map<string, Map<number, string>>;
type HTTPMethodPriorityMap (line 17) | type HTTPMethodPriorityMap = Map<string, number>;
class HTTPInfoUtil (line 19) | class HTTPInfoUtil {
method setHTTPPath (line 20) | static setHTTPPath(path: string, clazz: EggProtoImplClass) {
method getHTTPPath (line 24) | static getHTTPPath(clazz: EggProtoImplClass): string | undefined {
method setHTTPMethodPath (line 28) | static setHTTPMethodPath(path: string, clazz: EggProtoImplClass, metho...
method getHTTPMethodPath (line 33) | static getHTTPMethodPath(clazz: EggProtoImplClass, methodName: string)...
method setHTTPMethodMethod (line 38) | static setHTTPMethodMethod(method: HTTPMethodEnum, clazz: EggProtoImpl...
method getHTTPMethodMethod (line 43) | static getHTTPMethodMethod(clazz: EggProtoImplClass, methodName: strin...
method setHTTPMethodParamType (line 48) | static setHTTPMethodParamType(paramType: HTTPParamType, parameterIndex...
method getParamIndexList (line 54) | static getParamIndexList(clazz: EggProtoImplClass, methodName: string)...
method getHTTPMethodParamType (line 63) | static getHTTPMethodParamType(parameterIndex: number, clazz: EggProtoI...
method setHTTPMethodParamName (line 69) | static setHTTPMethodParamName(paramName: string, parameterIndex: numbe...
method getHTTPMethodParamName (line 75) | static getHTTPMethodParamName(parameterIndex: number, clazz: EggProtoI...
method getHTTPMethodPriority (line 81) | static getHTTPMethodPriority(clazz: EggProtoImplClass, methodName: str...
method setHTTPMethodPriority (line 86) | static setHTTPMethodPriority(priority: number, clazz: EggProtoImplClas...
FILE: core/controller-decorator/src/util/HTTPPriorityUtil.ts
class HTTPPriorityUtil (line 3) | class HTTPPriorityUtil {
method calcPathPriority (line 21) | static calcPathPriority(path: string): number {
FILE: core/controller-decorator/src/util/MCPInfoUtil.ts
type MCPMethodMap (line 23) | type MCPMethodMap = Map<string, boolean>;
type MCPResourceMap (line 24) | type MCPResourceMap = Map<string, MCPResourceParams>;
type MCPToolMap (line 25) | type MCPToolMap = Map<string, MCPToolParams>;
type MCPPromptMap (line 26) | type MCPPromptMap = Map<string, MCPPromptParams>;
type ToolArgsSchemaDetail (line 28) | interface ToolArgsSchemaDetail {
type MCPToolArgsSchemaMap (line 32) | type MCPToolArgsSchemaMap = Map<string, ToolArgsSchemaDetail>;
type MCPExtraMap (line 34) | type MCPExtraMap = Map<string, number>;
type PromptArgsSchemaDetail (line 36) | interface PromptArgsSchemaDetail {
type MCPPromptArgsSchemaMap (line 40) | type MCPPromptArgsSchemaMap = Map<string, PromptArgsSchemaDetail>;
class MCPInfoUtil (line 42) | class MCPInfoUtil {
method setMCPName (line 44) | static setMCPName(name: string, clazz: EggProtoImplClass) {
method getMCPName (line 48) | static getMCPName(clazz: EggProtoImplClass): string | undefined {
method setMCPVersion (line 52) | static setMCPVersion(version: string, clazz: EggProtoImplClass) {
method getMCPVersion (line 56) | static getMCPVersion(clazz: EggProtoImplClass): string | undefined {
method setMCPControllerParams (line 60) | static setMCPControllerParams(params: MCPControllerParams | undefined,...
method getMCPControllerParams (line 64) | static getMCPControllerParams(clazz: EggProtoImplClass): MCPController...
method setMCPResource (line 68) | static setMCPResource(clazz: EggProtoImplClass, methodName: string) {
method getMCPResource (line 73) | static getMCPResource(clazz: EggProtoImplClass): string[] {
method setMCPResourceParams (line 81) | static setMCPResourceParams(params: MCPResourceParams & { mcpName?: st...
method getMCPResourceParams (line 86) | static getMCPResourceParams(clazz: EggProtoImplClass, resourceName: st...
method setMCPTool (line 91) | static setMCPTool(clazz: EggProtoImplClass, methodName: string) {
method getMCPTool (line 96) | static getMCPTool(clazz: EggProtoImplClass): string[] {
method getMCPToolParams (line 104) | static getMCPToolParams(clazz: EggProtoImplClass, resourceName: string...
method setMCPToolParams (line 109) | static setMCPToolParams(params: MCPToolParams & { mcpName?: string }, ...
method setMCPPrompt (line 114) | static setMCPPrompt(clazz: EggProtoImplClass, methodName: string) {
method getMCPPrompt (line 119) | static getMCPPrompt(clazz: EggProtoImplClass): string[] {
method setMCPPromptParams (line 127) | static setMCPPromptParams(params: MCPPromptParams & { mcpName?: string...
method getMCPPromptParams (line 132) | static getMCPPromptParams(clazz: EggProtoImplClass, resourceName: stri...
method setMCPToolArgsInArgs (line 137) | static setMCPToolArgsInArgs(detail: ToolArgsSchemaDetail, clazz: EggPr...
method getMCPToolArgsIndex (line 142) | static getMCPToolArgsIndex(clazz: EggProtoImplClass, methodName: strin...
method setMCPExtra (line 147) | static setMCPExtra(index: number, clazz: EggProtoImplClass, methodName...
method getMCPExtra (line 152) | static getMCPExtra(clazz: EggProtoImplClass, methodName: string): numb...
method setMCPPromptArgsInArgs (line 157) | static setMCPPromptArgsInArgs(detail: PromptArgsSchemaDetail, clazz: E...
method getMCPPromptArgsIndex (line 162) | static getMCPPromptArgsIndex(clazz: EggProtoImplClass, methodName: str...
FILE: core/controller-decorator/src/util/MethodInfoUtil.ts
type METHOD_MAP (line 16) | type METHOD_MAP = Map<string, ControllerTypeLike | string[]>;
type MethodAopRegisterMap (line 17) | type MethodAopRegisterMap = Map<string, boolean>;
type MethodContextIndexMap (line 18) | type MethodContextIndexMap = Map<string, number>;
type MethodMiddlewareMap (line 19) | type MethodMiddlewareMap = Map<string, MiddlewareFunc[]>;
type MethodAopMiddlewareMap (line 20) | type MethodAopMiddlewareMap = Map<string, EggProtoImplClass<IAdvice>[]>;
type MethodAclMap (line 21) | type MethodAclMap = Map<string, string | undefined>;
type MethodTimeoutMap (line 22) | type MethodTimeoutMap = Map<string, number>;
class MethodInfoUtil (line 24) | class MethodInfoUtil {
method setMethodControllerType (line 25) | static setMethodControllerType(clazz: EggProtoImplClass, methodName: s...
method getMethodControllerType (line 30) | static getMethodControllerType(clazz: EggProtoImplClass, methodName: s...
method setMethodContextIndexInArgs (line 35) | static setMethodContextIndexInArgs(index: number, clazz: EggProtoImplC...
method getMethodContextIndex (line 40) | static getMethodContextIndex(clazz: EggProtoImplClass, methodName: str...
method addMethodMiddleware (line 45) | static addMethodMiddleware(middleware: MiddlewareFunc, clazz: EggProto...
method getMethodMiddlewares (line 51) | static getMethodMiddlewares(clazz: EggProtoImplClass, methodName: stri...
method addMethodAopMiddleware (line 56) | static addMethodAopMiddleware(middleware: EggProtoImplClass<IAdvice>, ...
method getMethodAopMiddlewares (line 62) | static getMethodAopMiddlewares(clazz: EggProtoImplClass, methodName: s...
method setMethodAcl (line 67) | static setMethodAcl(code: string | undefined, clazz: EggProtoImplClass...
method hasMethodAcl (line 72) | static hasMethodAcl(clazz: EggProtoImplClass, methodName: string): boo...
method getMethodAcl (line 77) | static getMethodAcl(clazz: EggProtoImplClass, methodName: string): str...
method setMethodHosts (line 82) | static setMethodHosts(hosts: string[], clazz: EggProtoImplClass, metho...
method getMethodHosts (line 87) | static getMethodHosts(clazz: EggProtoImplClass, methodName: string): s...
method getMethods (line 92) | static getMethods(clazz: EggProtoImplClass): string[] {
method shouldRegisterAopMiddlewarePointCut (line 97) | static shouldRegisterAopMiddlewarePointCut(clazz: EggProtoImplClass, m...
method registerAopMiddlewarePointcut (line 102) | static registerAopMiddlewarePointcut(clazz: EggProtoImplClass, methodN...
method setMethodTimeout (line 107) | static setMethodTimeout(timeout: number, clazz: EggProtoImplClass, met...
method getMethodTimeout (line 112) | static getMethodTimeout(clazz: EggProtoImplClass, methodName: string):...
FILE: core/controller-decorator/src/util/validator/ControllerValidator.ts
class ControllerValidator (line 5) | class ControllerValidator {
method validate (line 8) | static validate(clazz: EggProtoImplClass) {
FILE: core/controller-decorator/src/util/validator/MethodValidator.ts
class MethodValidator (line 6) | class MethodValidator {
method validate (line 11) | static validate(clazz: EggProtoImplClass, methodName: string) {
FILE: core/controller-decorator/test/AgentController.test.ts
class NotEnhanced (line 119) | class NotEnhanced {}
class ToBeEnhanced (line 124) | class ToBeEnhanced {}
FILE: core/controller-decorator/test/fixtures/AclController.ts
class AclController (line 8) | class AclController {
method foo (line 14) | async foo() {
method bar (line 22) | async bar() {
FILE: core/controller-decorator/test/fixtures/AgentFooController.ts
class AgentFooController (line 8) | class AgentFooController implements AgentHandler {
method createStore (line 9) | async createStore(): Promise<unknown> {
method execRun (line 13) | async *execRun(input: CreateRunInput): AsyncGenerator<AgentMessage> {
FILE: core/controller-decorator/test/fixtures/AopMiddlewareController.ts
class FooAdvice (line 10) | class FooAdvice implements IAdvice {
method beforeCall (line 11) | async beforeCall(): Promise<void> {
class BarAdvice (line 19) | class BarAdvice implements IAdvice {
method beforeCall (line 20) | async beforeCall(): Promise<void> {
class FooMethodAdvice (line 28) | class FooMethodAdvice implements IAdvice {
method beforeCall (line 29) | async beforeCall(): Promise<void> {
class BarMethodAdvice (line 37) | class BarMethodAdvice implements IAdvice {
method beforeCall (line 38) | async beforeCall(): Promise<void> {
class AopMiddlewareController (line 45) | class AopMiddlewareController {
method hello (line 52) | async hello(): Promise<void> {
method bye (line 60) | async bye(): Promise<void> {
FILE: core/controller-decorator/test/fixtures/ContextController.ts
class ContextController (line 3) | class ContextController {
method hello (line 4) | async hello(@Context() ctx: object) {
FILE: core/controller-decorator/test/fixtures/HTTPFooController.ts
function middleware1 (line 10) | async function middleware1(ctx: EggContext, next: Next) {
function middleware2 (line 14) | async function middleware2(ctx: EggContext, next: Next) {
function middleware3 (line 18) | async function middleware3(ctx: EggContext, next: Next) {
class FooController (line 26) | class FooController {
method bar (line 35) | async bar(@Context() ctx: EggContext, @HTTPBody() body, @HTTPQuery() q...
class ControllerWithParam (line 43) | class ControllerWithParam {
method bar (line 50) | async bar(@Context() ctx: EggContext, @HTTPParam() id: string, @HTTPPa...
class FoxController (line 59) | class FoxController {
method bar (line 66) | async bar(@Context() ctx: EggContext, @HTTPBody() body, @HTTPQuery() q...
class FxxController (line 74) | class FxxController {
method bar (line 81) | async bar(@Context() ctx: EggContext, @HTTPBody() body, @HTTPQuery() q...
class ParentController (line 87) | class ParentController {
class ChildController (line 91) | class ChildController extends ParentController {
class DefaultValueController (line 95) | class DefaultValueController {
method bar (line 102) | async bar(@Context() ctx: EggContext, @HTTPParam() id = 233, @HTTPQuer...
class Error1Controller (line 108) | class Error1Controller {
method bar (line 115) | async bar(@Context() ctx: EggContext, id) {
class Error2Controller (line 121) | class Error2Controller {
method bar (line 128) | async bar(@Context() ctx: EggContext, id = 233, @HTTPParam() id2 = 233) {
class TimeoutController (line 134) | class TimeoutController {
method timeout1 (line 136) | async timeout1() {}
method timeout2 (line 139) | async timeout2() {}
FILE: core/controller-decorator/test/fixtures/HTTPPriorityController.ts
class PriorityController (line 8) | class PriorityController {
method regexpMethod (line 13) | async regexpMethod() {
method paramMethod (line 21) | async paramMethod() {
method regexpMethod2 (line 29) | async regexpMethod2() {
class TooLongController (line 35) | class TooLongController {
method tooLongMethod (line 40) | async tooLongMethod() {
FILE: core/controller-decorator/test/fixtures/HostController.ts
class HostController (line 4) | class HostController {
method hello (line 5) | async hello(): Promise<void> {
method bar (line 10) | async bar(): Promise<void> {
FILE: core/controller-decorator/test/fixtures/MCPController.ts
class MCPFooController (line 21) | class MCPFooController {
method foo (line 23) | async foo(@PromptArgsSchema(PromptType) args: PromptArgs<typeof Prompt...
method bar (line 38) | async bar(@ToolArgsSchema(ToolType) args: ToolArgs<typeof ToolType>): ...
method car (line 58) | async car(uri: URL, @Extra() extra): Promise<MCPResourceResponse> {
FILE: core/controller-decorator/test/fixtures/MiddlewareController.ts
function middleware1 (line 4) | async function middleware1(ctx: EggContext, next: Next) {
function middleware2 (line 8) | async function middleware2(ctx: EggContext, next: Next) {
function middleware3 (line 12) | async function middleware3(ctx: EggContext, next: Next) {
class MiddlewareController (line 17) | class MiddlewareController {
method hello (line 21) | async hello(): Promise<void> {
class MiddlewaresController (line 27) | class MiddlewaresController {
method hello (line 30) | async hello(): Promise<void> {
FILE: core/core-decorator/src/decorator/ConfigSource.ts
function ConfigSourceQualifier (line 5) | function ConfigSourceQualifier(moduleName: string) {
FILE: core/core-decorator/src/decorator/ContextProto.ts
function ContextProto (line 5) | function ContextProto(params?: ContextProtoParams) {
FILE: core/core-decorator/src/decorator/EggQualifier.ts
function EggQualifier (line 5) | function EggQualifier(eggType: EggType) {
FILE: core/core-decorator/src/decorator/InitTypeQualifier.ts
function InitTypeQualifier (line 5) | function InitTypeQualifier(initType: ObjectInitTypeLike) {
FILE: core/core-decorator/src/decorator/Inject.ts
function guessInjectInfo (line 13) | function guessInjectInfo(clazz: EggProtoImplClass, name: PropertyKey, pr...
function Inject (line 36) | function Inject(param?: InjectParams | string) {
function InjectOptional (line 111) | function InjectOptional(param?: Omit<InjectParams, 'optional'> | string) {
FILE: core/core-decorator/src/decorator/ModuleQualifier.ts
function ModuleQualifier (line 5) | function ModuleQualifier(moduleName: string) {
FILE: core/core-decorator/src/decorator/MultiInstanceInfo.ts
function MultiInstanceInfo (line 4) | function MultiInstanceInfo(attributes: QualifierAttribute[]) {
FILE: core/core-decorator/src/decorator/MultiInstanceProto.ts
constant DEFAULT_PARAMS (line 13) | const DEFAULT_PARAMS = {
function MultiInstanceProto (line 19) | function MultiInstanceProto(param: MultiInstancePrototypeParams) {
FILE: core/core-decorator/src/decorator/Prototype.ts
constant DEFAULT_PARAMS (line 6) | const DEFAULT_PARAMS = {
function Prototype (line 12) | function Prototype(param?: PrototypeParams) {
FILE: core/core-decorator/src/decorator/SingletonProto.ts
function SingletonProto (line 5) | function SingletonProto(params?: SingletonProtoParams) {
FILE: core/core-decorator/src/util/MetadataUtil.ts
class MetadataUtil (line 5) | class MetadataUtil {
method deleteMetaData (line 6) | static deleteMetaData(metadataKey: MetaDataKey, clazz: EggProtoImplCla...
method defineMetaData (line 10) | static defineMetaData<T>(metadataKey: MetaDataKey, metadataValue: T, c...
method getOwnMetaData (line 14) | static getOwnMetaData<T>(metadataKey: MetaDataKey, clazz: EggProtoImpl...
method hasMetaData (line 18) | static hasMetaData(metadataKey: MetaDataKey, clazz: EggProtoImplClass,...
method getMetaData (line 22) | static getMetaData<T>(metadataKey: MetaDataKey, clazz: EggProtoImplCla...
method getBooleanMetaData (line 26) | static getBooleanMetaData(metadataKey: MetaDataKey, clazz: EggProtoImp...
method getOwnBooleanMetaData (line 30) | static getOwnBooleanMetaData(metadataKey: MetaDataKey, clazz: EggProto...
method getArrayMetaData (line 34) | static getArrayMetaData<T>(metadataKey: MetaDataKey, clazz: EggProtoIm...
method initArrayMetaData (line 44) | static initArrayMetaData<T>(metadataKey: MetaDataKey, clazz: EggProtoI...
method initOwnArrayMetaData (line 59) | static initOwnArrayMetaData<T>(metadataKey: MetaDataKey, clazz: EggPro...
method initOwnMapMetaData (line 77) | static initOwnMapMetaData<K, V>(metadataKey: MetaDataKey, clazz: EggPr...
method getOrStoreMetaData (line 91) | static getOrStoreMetaData<T>(metadataKey: MetaDataKey, clazz: EggProto...
FILE: core/core-decorator/src/util/PrototypeUtil.ts
class PrototypeUtil (line 18) | class PrototypeUtil {
method setIsEggPrototype (line 36) | static setIsEggPrototype(clazz: EggProtoImplClass) {
method isEggPrototype (line 44) | static isEggPrototype(clazz: EggProtoImplClass): boolean {
method setIsEggMultiInstancePrototype (line 52) | static setIsEggMultiInstancePrototype(clazz: EggProtoImplClass) {
method isEggMultiInstancePrototype (line 60) | static isEggMultiInstancePrototype(clazz: EggProtoImplClass): boolean {
method getEggMultiInstancePrototypeType (line 68) | static getEggMultiInstancePrototypeType(clazz: EggProtoImplClass): Mul...
method setFilePath (line 84) | static setFilePath(clazz: EggProtoImplClass, filePath: string) {
method getFilePath (line 92) | static getFilePath(clazz: EggProtoImplClass): string | undefined {
method setProperty (line 101) | static setProperty(clazz: EggProtoImplClass, property: EggPrototypeInf...
method getProperty (line 110) | static getProperty(clazz: EggProtoImplClass): EggPrototypeInfo | undef...
method getInitType (line 114) | static getInitType(clazz: EggProtoImplClass, ctx: MultiInstancePrototy...
method getAccessLevel (line 119) | static getAccessLevel(clazz: EggProtoImplClass, ctx: MultiInstanceProt...
method getObjNames (line 124) | static getObjNames(clazz: EggProtoImplClass, ctx: MultiInstancePrototy...
method setMultiInstanceStaticProperty (line 138) | static setMultiInstanceStaticProperty(clazz: EggProtoImplClass, proper...
method setMultiInstanceCallbackProperty (line 147) | static setMultiInstanceCallbackProperty(clazz: EggProtoImplClass, prop...
method getStaticMultiInstanceProperty (line 155) | static getStaticMultiInstanceProperty(clazz: EggProtoImplClass): EggMu...
method getDynamicMultiInstanceProperty (line 167) | static getDynamicMultiInstanceProperty(clazz: EggProtoImplClass, ctx: ...
method getMultiInstanceProperty (line 183) | static getMultiInstanceProperty(clazz: EggProtoImplClass, ctx: MultiIn...
method setMultiInstanceConstructorAttributes (line 213) | static setMultiInstanceConstructorAttributes(clazz: EggProtoImplClass,...
method getMultiInstanceConstructorAttributes (line 217) | static getMultiInstanceConstructorAttributes(clazz: EggProtoImplClass)...
method setMultiInstanceConstructorIndex (line 221) | static setMultiInstanceConstructorIndex(clazz: EggProtoImplClass, inde...
method getMultiInstanceConstructorIndex (line 225) | static getMultiInstanceConstructorIndex(clazz: EggProtoImplClass): num...
method setInjectType (line 229) | static setInjectType(clazz: EggProtoImplClass, type: InjectType) {
method addInjectObject (line 238) | static addInjectObject(clazz: EggProtoImplClass, injectObject: InjectO...
method addInjectConstructor (line 244) | static addInjectConstructor(clazz: EggProtoImplClass, injectConstructo...
method getInjectType (line 250) | static getInjectType(clazz: EggProtoImplClass): InjectType | undefined {
method getInjectObjects (line 255) | static getInjectObjects(clazz: EggProtoImplClass): Array<InjectObjectI...
method getClazzProto (line 277) | static getClazzProto(clazz: EggProtoImplClass): object | undefined {
method setClazzProto (line 282) | static setClazzProto(clazz: EggProtoImplClass, proto: object) {
method getDesignType (line 286) | static getDesignType(clazz: EggProtoImplClass, propKey?: PropertyKey) {
method getDesignParamtypes (line 290) | static getDesignParamtypes(clazz: EggProtoImplClass, propKey?: Propert...
FILE: core/core-decorator/src/util/QualifierUtil.ts
class QualifierUtil (line 6) | class QualifierUtil {
method addProtoQualifier (line 7) | static addProtoQualifier(clazz: EggProtoImplClass, attribute: Qualifie...
method getProtoQualifiers (line 12) | static getProtoQualifiers(clazz: EggProtoImplClass): QualifierInfo[] {
method addInjectQualifier (line 27) | static addInjectQualifier(clazz: EggProtoImplClass, property: Property...
method addProperQualifier (line 37) | static addProperQualifier(clazz: EggProtoImplClass, property: Property...
method getProperQualifiers (line 43) | static getProperQualifiers(clazz: EggProtoImplClass, property: Propert...
method getQualifierValue (line 59) | static getQualifierValue(clazz: EggProtoImplClass, attribute: Qualifie...
method getProperQualifier (line 64) | static getProperQualifier(clazz: EggProtoImplClass, property: Property...
method matchQualifiers (line 70) | static matchQualifiers(clazzQualifiers: QualifierInfo[], requestQualif...
method equalQualifiers (line 79) | static equalQualifiers(clazzQualifiers: QualifierInfo[], requestQualif...
method mergeQualifiers (line 84) | static mergeQualifiers(...qualifiers: QualifierInfo[][]): QualifierInf...
FILE: core/core-decorator/test/fixtures/decators/CacheService.ts
class TestService3 (line 7) | class TestService3 {
method sayHi (line 8) | sayHi() {
class TestService4 (line 14) | class TestService4 {
method sayHi (line 15) | sayHi() {
class CacheService (line 22) | class CacheService {
FILE: core/core-decorator/test/fixtures/decators/ChildService.ts
class ParentSingletonProto (line 4) | class ParentSingletonProto {}
class ChildSingletonProto (line 6) | class ChildSingletonProto extends ParentSingletonProto {}
class ParentStaticMultiInstanceProto (line 12) | class ParentStaticMultiInstanceProto {}
class ChildStaticMultiInstanceProto (line 14) | class ChildStaticMultiInstanceProto extends ParentStaticMultiInstancePro...
class ParentDynamicMultiInstanceProto (line 20) | class ParentDynamicMultiInstanceProto {}
class ChildDynamicMultiInstanceProto (line 22) | class ChildDynamicMultiInstanceProto extends ParentDynamicMultiInstanceP...
FILE: core/core-decorator/test/fixtures/decators/ConstructorObject.ts
class CacheService (line 10) | class CacheService {}
class CacheContextService (line 13) | class CacheContextService {}
class ConstructorObject (line 16) | class ConstructorObject {
method constructor (line 17) | constructor(
class ConstructorQualifierObject (line 29) | class ConstructorQualifierObject {
method constructor (line 30) | constructor(
FILE: core/core-decorator/test/fixtures/decators/ContextCache.ts
class ContextCache (line 9) | class ContextCache implements ICache {
FILE: core/core-decorator/test/fixtures/decators/FooLogger.ts
constant FOO_ATTRIBUTE (line 4) | const FOO_ATTRIBUTE = Symbol.for('FOO_ATTRIBUTE');
class FooLogger (line 24) | class FooLogger {
FILE: core/core-decorator/test/fixtures/decators/ICache.ts
type ICache (line 1) | interface ICache {
FILE: core/core-decorator/test/fixtures/decators/OtherService.ts
class TestService (line 4) | class TestService {
method sayHi (line 5) | sayHi() {
class TestService2 (line 11) | class TestService2 {
method sayHi (line 12) | sayHi() {
FILE: core/core-decorator/test/fixtures/decators/QualifierCacheService.ts
class TestContextService (line 6) | class TestContextService {}
class TestSingletonService (line 9) | class TestSingletonService {}
class CacheService (line 12) | class CacheService {
FILE: core/core-decorator/test/fixtures/decators/SingletonCache.ts
class SingletonCache (line 9) | class SingletonCache implements ICache {
FILE: core/core-decorator/test/util/MetadataUtil.test.ts
class Parent (line 4) | class Parent {
class Child (line 7) | class Child extends Parent {
FILE: core/dal-decorator/src/decorator/Column.ts
function Column (line 5) | function Column(type: ColumnTypeParams, params?: ColumnParams) {
FILE: core/dal-decorator/src/decorator/Dao.ts
function Dao (line 7) | function Dao() {
FILE: core/dal-decorator/src/decorator/DataSourceQualifier.ts
function DataSourceQualifier (line 4) | function DataSourceQualifier(dataSourceName: string) {
FILE: core/dal-decorator/src/decorator/Index.ts
function Index (line 4) | function Index(params: IndexParams) {
FILE: core/dal-decorator/src/decorator/Table.ts
function Table (line 7) | function Table(params?: TableParams) {
FILE: core/dal-decorator/src/model/ColumnModel.ts
class ColumnModel (line 4) | class ColumnModel {
method constructor (line 20) | constructor(params: {
method build (line 52) | static build(property: string, type: ColumnTypeParams, params?: Column...
FILE: core/dal-decorator/src/model/IndexModel.ts
type IndexKey (line 5) | interface IndexKey {
class IndexModel (line 10) | class IndexModel {
method constructor (line 21) | constructor(params: {
method buildIndexName (line 41) | static buildIndexName(keys: string[], type: IndexType) {
method build (line 46) | static build(params: IndexParams, columns: ColumnModel[], clazz: EggPr...
FILE: core/dal-decorator/src/model/TableModel.ts
class TableModel (line 12) | class TableModel<T=object> {
method constructor (line 35) | constructor(params: {
method getPrimary (line 81) | getPrimary(): IndexModel | undefined {
method build (line 99) | static build<T>(clazz: EggProtoImplClass<T>): TableModel<T> {
FILE: core/dal-decorator/src/type/Spatial.ts
class SpatialHelper (line 4) | class SpatialHelper {
method isPoint (line 5) | static isPoint(t: Geometry) {
method isLine (line 9) | static isLine(t: Geometry) {
method isPolygon (line 13) | static isPolygon(t: Geometry) {
method getGeometryType (line 17) | static getGeometryType(t: Geometry) {
method isMultiPoint (line 27) | static isMultiPoint(t: GeometryCollection) {
method isMultiLine (line 31) | static isMultiLine(t: GeometryCollection) {
method isMultiPolygon (line 35) | static isMultiPolygon(t: GeometryCollection) {
FILE: core/dal-decorator/src/util/ColumnInfoUtil.ts
type ColumnInfoMap (line 5) | type ColumnInfoMap = Map<string, ColumnParams>;
type ColumnTypeMap (line 6) | type ColumnTypeMap = Map<string, ColumnTypeParams>;
class ColumnInfoUtil (line 8) | class ColumnInfoUtil {
method addColumnInfo (line 9) | static addColumnInfo(clazz: EggProtoImplClass, property: string, colum...
method addColumnType (line 14) | static addColumnType(clazz: EggProtoImplClass, property: string, type:...
method getColumnInfoMap (line 19) | static getColumnInfoMap(clazz: EggProtoImplClass): ColumnInfoMap | und...
method getColumnTypeMap (line 23) | static getColumnTypeMap(clazz: EggProtoImplClass): ColumnTypeMap | und...
FILE: core/dal-decorator/src/util/DaoInfoUtil.ts
class DaoInfoUtil (line 5) | class DaoInfoUtil {
method setIsDao (line 6) | static setIsDao(clazz: EggProtoImplClass) {
method getIsDao (line 10) | static getIsDao(clazz: EggProtoImplClass): clazz is BaseDaoType {
FILE: core/dal-decorator/src/util/IndexInfoUtil.ts
class IndexInfoUtil (line 5) | class IndexInfoUtil {
method addIndex (line 6) | static addIndex(clazz: EggProtoImplClass, index: IndexParams) {
method getIndexList (line 11) | static getIndexList(clazz: EggProtoImplClass): Array<IndexParams> {
FILE: core/dal-decorator/src/util/TableInfoUtil.ts
constant TABLE_CLAZZ_LIST (line 5) | const TABLE_CLAZZ_LIST: Array<EggProtoImplClass> = [];
class TableInfoUtil (line 7) | class TableInfoUtil {
method setIsTable (line 8) | static setIsTable(clazz: EggProtoImplClass) {
method getClazzList (line 14) | static getClazzList() {
method getIsTable (line 18) | static getIsTable(clazz: EggProtoImplClass) {
method setTableParams (line 22) | static setTableParams(clazz: EggProtoImplClass, params: TableParams) {
method getTableParams (line 26) | static getTableParams(clazz: EggProtoImplClass): TableParams | undefin...
FILE: core/dal-decorator/test/fixtures/modules/dal/Foo.ts
class Foo (line 11) | class Foo {
FILE: core/dal-runtime/src/BaseSqlMap.ts
class BaseSqlMapGenerator (line 7) | class BaseSqlMapGenerator {
method constructor (line 11) | constructor(tableModel: TableModel, logger: Logger) {
method generateAllColumns (line 16) | generateAllColumns(countIf: boolean): string {
method generateFindByPrimary (line 22) | generateFindByPrimary(): Array<GenerateSqlMap> {
method generateFindByIndexes (line 52) | generateFindByIndexes() {
method generateInsert (line 82) | generateInsert() {
method generateUpdate (line 198) | generateUpdate() {
method generateDelete (line 256) | generateDelete() {
method load (line 273) | load(): Record<string, SqlMap> {
FILE: core/dal-runtime/src/CodeGenerator.ts
class CodeGenerator (line 13) | class CodeGenerator {
method constructor (line 19) | constructor(options: CodeGeneratorOptions) {
method createNunjucksEnv (line 29) | createNunjucksEnv() {
method genCode (line 38) | genCode(tplName: Templates, filePath: string, tableModel: TableModel) {
method generate (line 63) | async generate(tableModel: TableModel) {
FILE: core/dal-runtime/src/DaoLoader.ts
class DaoLoader (line 6) | class DaoLoader {
method loadDaos (line 7) | static loadDaos(moduleDir: string): Array<BaseDaoType> {
FILE: core/dal-runtime/src/DataSource.ts
type ExecuteSql (line 7) | interface ExecuteSql {
constant PAGINATE_COUNT_WRAPPER (line 14) | const PAGINATE_COUNT_WRAPPER = [ 'SELECT COUNT(0) as count FROM (', ') A...
class DataSource (line 16) | class DataSource<T> implements IDataSource<T> {
method constructor (line 21) | constructor(tableModel: TableModel<T>, mysqlDataSource: MysqlDataSourc...
method generateSql (line 32) | async generateSql(sqlName: string, data: object): Promise<ExecuteSql> {
method count (line 44) | async count(sqlName: string, data?: any, options?: EggQueryOptions): P...
method execute (line 49) | async execute(sqlName: string, data?: any, options?: EggQueryOptions):...
method executeRaw (line 56) | async executeRaw(sqlName: string, data?: any, options?: EggQueryOption...
method executeScalar (line 60) | async executeScalar(sqlName: string, data?: any, options?: EggQueryOpt...
method executeRawScalar (line 65) | async executeRawScalar(sqlName: string, data?: any, options?: EggQuery...
method paginate (line 70) | async paginate(sqlName: string, data: any, currentPage: number, perPag...
method #paginateCount (line 89) | async #paginateCount(baseSQL: string, params: any[], options?: EggQuer...
FILE: core/dal-runtime/src/DatabaseForker.ts
class DatabaseForker (line 6) | class DatabaseForker {
method constructor (line 10) | constructor(env: string, options: DataSourceOptions) {
method shouldFork (line 15) | shouldFork() {
method forkDb (line 19) | async forkDb(moduleDir: string) {
method forkTables (line 32) | private async forkTables(conn, moduleDir: string) {
method doForkTable (line 39) | private async doForkTable(conn, sqlFile: string) {
method doCreateUtDb (line 46) | private async doCreateUtDb(conn) {
method destroy (line 51) | async destroy() {
FILE: core/dal-runtime/src/MySqlDataSource.ts
type DataSourceOptions (line 6) | interface DataSourceOptions extends RDSClientOptions {
constant DEFAULT_OPTIONS (line 16) | const DEFAULT_OPTIONS: RDSClientOptions = {
constant DEFAULT_RETRY_TIMES (line 22) | const DEFAULT_RETRY_TIMES = 3;
type EggQueryOptions (line 24) | interface EggQueryOptions extends QueryOptions {
class MysqlDataSource (line 28) | class MysqlDataSource extends Base {
method constructor (line 39) | constructor(options: DataSourceOptions) {
method _init (line 53) | protected async _init() {
method #doInit (line 59) | async #doInit(tryTimes: number): Promise<void> {
method query (line 74) | async query<T = any>(sql: string, params?: any[], options?: EggQueryOp...
method beginTransactionScope (line 83) | async beginTransactionScope<T>(scope: () => Promise<T>): Promise<T> {
FILE: core/dal-runtime/src/NunjucksConverter.ts
class NunjucksConverter (line 1) | class NunjucksConverter {
method convertNormalVariableCode (line 16) | static convertNormalVariableCode(code: string) {
method convertTernaryCode (line 40) | static convertTernaryCode(code: string) {
method convertNestedObjectCode (line 82) | static convertNestedObjectCode(code: string) {
method convertValueInsideFor (line 106) | static convertValueInsideFor(code: string) {
FILE: core/dal-runtime/src/NunjucksUtil.ts
constant ROOT_RENDER_FUNC (line 9) | const ROOT_RENDER_FUNC = Symbol('rootRenderFunc');
constant RUNTIME (line 10) | const RUNTIME = Object.assign({}, nunjucks.runtime, {
function _replaceCodeWithSQLFeature (line 18) | function _replaceCodeWithSQLFeature(source) {
function _compile (line 33) | function _compile(this: any) {
class NunjucksUtils (line 65) | class NunjucksUtils {
method createEnv (line 66) | static createEnv(modelName: string) {
method compile (line 76) | static compile(modelName: string, sqlName: string, sql: string) {
FILE: core/dal-runtime/src/SqlGenerator.ts
class SqlGenerator (line 10) | class SqlGenerator {
method formatComment (line 11) | private formatComment(comment: string) {
method generateColumn (line 15) | private generateColumn(column: ColumnModel) {
method generateColumnType (line 72) | private generateColumnType(columnType: ColumnTypeParams) {
method generateIndex (line 268) | private generateIndex(indexModel: IndexModel) {
method generateTableOptions (line 317) | private generateTableOptions(tableModel: TableModel) {
method generate (line 370) | generate(tableModel: TableModel) {
FILE: core/dal-runtime/src/SqlMapLoader.ts
class SqlMapLoader (line 6) | class SqlMapLoader {
method constructor (line 11) | constructor(tableModel: TableModel, baseDaoClazz: BaseDaoType, logger:...
method load (line 17) | load(): TableSqlMap {
FILE: core/dal-runtime/src/SqlUtil.ts
function isWhiteChar (line 1) | function isWhiteChar(ch) {
constant COMMENT_CHARS (line 5) | const COMMENT_CHARS = '-#/';
constant MUL_CHAR_LEADING_COMMENT_FIRST_CHAR (line 6) | const MUL_CHAR_LEADING_COMMENT_FIRST_CHAR = {
constant MUL_CHAR_LEADING_COMMENT_VERIFIER (line 10) | const MUL_CHAR_LEADING_COMMENT_VERIFIER = {
constant MUL_CHAR_LEADING_COMMENT_NEXT_STATE (line 14) | const MUL_CHAR_LEADING_COMMENT_NEXT_STATE = {
class SqlUtil (line 19) | class SqlUtil {
method minify (line 20) | static minify(sql: string) {
FILE: core/dal-runtime/src/TableModelInstanceBuilder.ts
class TableModelInstanceBuilder (line 3) | class TableModelInstanceBuilder {
method constructor (line 4) | constructor(tableModel: TableModel, row: Record<string, any>) {
method buildInstance (line 11) | static buildInstance<T>(tableModel: TableModel<T>, row: Record<string,...
method buildRow (line 15) | static buildRow<T extends object>(instance: T, tableModel: TableModel<...
FILE: core/dal-runtime/src/TableSqlMap.ts
constant SQL_PARAMS (line 8) | const SQL_PARAMS = '$$__sql_params';
type SqlGenerator (line 10) | interface SqlGenerator {
type GeneratedSql (line 16) | interface GeneratedSql {
class TableSqlMap (line 21) | class TableSqlMap {
method constructor (line 27) | constructor(name: string, map: Record<string, SqlMap>) {
method #extract (line 61) | #extract(map: Record<string, SqlMap>) {
method generate (line 94) | generate(name: string, data: object, timezone: string): GeneratedSql {
method getType (line 117) | getType(name: string): SqlType {
method getTemplateString (line 127) | getTemplateString(name: string) {
FILE: core/dal-runtime/src/TemplateUtil.ts
class TemplateUtil (line 15) | class TemplateUtil {
method isSpatialType (line 16) | static isSpatialType(columnModel: ColumnModel): boolean {
method importPath (line 34) | static importPath(tableModelPath: string, currentPath: string) {
method dbTypeToTsType (line 38) | static dbTypeToTsType(columnType: ColumnType): string {
method toJson (line 42) | static toJson(value: any): string {
method toPoint (line 46) | static toPoint(point: Point): string {
method toLine (line 52) | static toLine(val: Line): string {
method toPolygon (line 56) | static toPolygon(val: Polygon): string {
method toGeometry (line 60) | static toGeometry(val: Geometry): string {
method toMultiPoint (line 65) | static toMultiPoint(val: MultiPoint): string {
method toMultiLine (line 69) | static toMultiLine(val: MultiLine): string {
method toMultiPolygon (line 73) | static toMultiPolygon(val: MultiPolygon): string {
method toGeometryCollection (line 77) | static toGeometryCollection(val: GeometryCollection): string {
method getSpatialFilter (line 95) | static getSpatialFilter(columnType: ColumnType) {
FILE: core/dal-runtime/test/fixtures/modules/dal/AutoUpdateTime.ts
class AutoUpdateTime (line 8) | class AutoUpdateTime {
FILE: core/dal-runtime/test/fixtures/modules/dal/Foo.ts
class Foo (line 53) | class Foo {
FILE: core/dal-runtime/test/fixtures/modules/dal/FooIndexName.ts
class FooIndexName (line 27) | class FooIndexName {
FILE: core/dal-runtime/test/fixtures/modules/generate_codes/Foo.ts
class Foo (line 53) | class Foo {
FILE: core/dal-runtime/test/fixtures/modules/generate_codes/MultiPrimaryKey.ts
class MultiPrimaryKey (line 12) | class MultiPrimaryKey {
FILE: core/dal-runtime/test/fixtures/modules/generate_codes_not_overwrite_dao/Foo.ts
class Foo (line 53) | class Foo {
FILE: core/dal-runtime/test/fixtures/modules/generate_codes_to_src/src/Foo.ts
class Foo (line 53) | class Foo {
FILE: core/dynamic-inject-runtime/src/EggObjectFactory.ts
class EggObjectFactory (line 18) | class EggObjectFactory implements IEggObjectFactory {
method getEggObject (line 21) | async getEggObject<T extends object>(abstractClazz: EggAbstractClazz<T...
method getEggObjects (line 34) | async getEggObjects<T extends object>(abstractClazz: EggAbstractClazz<...
FILE: core/dynamic-inject-runtime/src/EggObjectFactoryObject.ts
constant OBJ (line 15) | const OBJ = Symbol('EggObjectFactoryObject#obj');
class EggObjectFactoryObject (line 17) | class EggObjectFactoryObject implements EggObject {
method constructor (line 24) | constructor(name: EggObjectName, proto: EggObjectFactoryPrototype) {
method obj (line 30) | get obj() {
method createObject (line 38) | static async createObject(name: EggObjectName, proto: EggPrototype): P...
method injectProperty (line 44) | injectProperty(): any {
FILE: core/dynamic-inject-runtime/src/EggObjectFactoryPrototype.ts
constant EGG_OBJECT_FACTORY_PROTO_IMPLE_TYPE (line 25) | const EGG_OBJECT_FACTORY_PROTO_IMPLE_TYPE = 'EGG_OBJECT_FACTORY_PROTOTYPE';
class EggObjectFactoryPrototype (line 27) | class EggObjectFactoryPrototype implements EggPrototype {
method constructor (line 37) | constructor(clazz: EggProtoImplClass<EggObjectFactory>, loadUnit: Load...
method constructEggObject (line 51) | constructEggObject(): EggObjectFactory {
method getMetaData (line 55) | getMetaData<T>(metadataKey: MetaDataKey): T | undefined {
method verifyQualifier (line 59) | verifyQualifier(qualifier: QualifierInfo): boolean {
method getQualifier (line 64) | getQualifier(attribute: string): QualifierValue | undefined {
method verifyQualifiers (line 68) | verifyQualifiers(qualifiers: QualifierInfo[]): boolean {
method create (line 77) | static create(ctx: EggPrototypeLifecycleContext) {
FILE: core/dynamic-inject-runtime/test/fixtures/modules/dynamic-inject-module/FooType.ts
type ContextHelloType (line 1) | enum ContextHelloType {
type SingletonHelloType (line 6) | enum SingletonHelloType {
FILE: core/dynamic-inject-runtime/test/fixtures/modules/dynamic-inject-module/HelloService.ts
class HelloService (line 9) | class HelloService {
method hello (line 13) | async hello(): Promise<string[]> {
method sayHelloToAll (line 24) | async sayHelloToAll(): Promise<string[]> {
FILE: core/dynamic-inject-runtime/test/fixtures/modules/dynamic-inject-module/decorator/ContextHello.ts
constant CONTEXT_HELLO_ATTRIBUTE (line 5) | const CONTEXT_HELLO_ATTRIBUTE = 'CONTEXT_HELLO_ATTRIBUTE';
FILE: core/dynamic-inject-runtime/test/fixtures/modules/dynamic-inject-module/decorator/SingletonHello.ts
constant SINGLETON_HELLO_ATTRIBUTE (line 5) | const SINGLETON_HELLO_ATTRIBUTE = 'SINGLETON_HELLO_ATTRIBUTE';
FILE: core/dynamic-inject-runtime/test/fixtures/modules/dynamic-inject-module/impl/BarContextHello.ts
class BarContextHello (line 8) | class BarContextHello extends AbstractContextHello {
method hello (line 11) | hello(): string {
FILE: core/dynamic-inject-runtime/test/fixtures/modules/dynamic-inject-module/impl/BarSingletonHello.ts
class BarSingletonHello (line 8) | class BarSingletonHello extends AbstractContextHello {
method hello (line 11) | hello(): string {
FILE: core/dynamic-inject-runtime/test/fixtures/modules/dynamic-inject-module/impl/FooContextHello.ts
class FooContextHello (line 8) | class FooContextHello extends AbstractContextHello {
method hello (line 11) | hello(): string {
FILE: core/dynamic-inject-runtime/test/fixtures/modules/dynamic-inject-module/impl/FooSingletonHello.ts
class FooSingletonHello (line 8) | class FooSingletonHello extends AbstractContextHello {
method hello (line 11) | hello(): string {
FILE: core/dynamic-inject/src/QualifierImplDecoratorUtil.ts
class QualifierImplDecoratorUtil (line 5) | class QualifierImplDecoratorUtil {
method generatorDecorator (line 6) | static generatorDecorator<T extends object, Enum extends ImplTypeEnum>...
FILE: core/dynamic-inject/src/QualifierImplUtil.ts
class QualifierImplUtil (line 5) | class QualifierImplUtil {
method addQualifierImpl (line 6) | static addQualifierImpl(abstractClazz: EggAbstractClazz, qualifierValu...
method getQualifierImp (line 11) | static getQualifierImp(abstractClazz: EggAbstractClazz, qualifierValue...
method getQualifierImpMap (line 16) | static getQualifierImpMap(abstractClazz: EggAbstractClazz): Map<Qualif...
FILE: core/dynamic-inject/test/fixtures/modules/base/ContextHello.ts
constant CONTEXT_HELLO_ATTRIBUTE (line 5) | const CONTEXT_HELLO_ATTRIBUTE = 'CONTEXT_HELLO_ATTRIBUTE';
FILE: core/dynamic-inject/test/fixtures/modules/base/FooType.ts
type ContextHelloType (line 1) | enum ContextHelloType {
FILE: core/dynamic-inject/test/fixtures/modules/wrong-enum-module/WrongEnumCase.ts
class BarContextHello (line 7) | class BarContextHello extends AbstractContextHello {
method hello (line 10) | hello(): string {
FILE: core/dynamic-inject/test/fixtures/modules/wrong-extends-module/WrongExtendsCase.ts
class BarContextHello (line 7) | class BarContextHello {
method helloWrong (line 10) | helloWrong(): string {
FILE: core/eventbus-decorator/index.ts
type Events (line 7) | interface Events {
FILE: core/eventbus-decorator/src/Event.ts
function Event (line 9) | function Event<E extends keyof Events>(eventName: E) {
FILE: core/eventbus-decorator/src/EventBus.ts
type EventName (line 8) | type EventName = string | symbol;
type EventBus (line 14) | interface EventBus extends Pick<TypedEventEmitter<Events>, 'emit'> {
constant CORK_ID (line 23) | const CORK_ID = Symbol.for('eventBus#corkId');
type ContextEventBus (line 25) | interface ContextEventBus extends EventBus {
type EventKeys (line 30) | type EventKeys = keyof Events;
type EventWaiter (line 36) | interface EventWaiter {
type EventHandlerWithContext (line 44) | type EventHandlerWithContext<E extends keyof Events> = {
type EventHandler (line 48) | type EventHandler<E extends keyof Events> = {
FILE: core/eventbus-decorator/src/EventContext.ts
type IEventContext (line 8) | interface IEventContext {
function EventContext (line 12) | function EventContext() {
FILE: core/eventbus-decorator/src/EventInfoUtil.ts
constant EVENT_NAME (line 5) | const EVENT_NAME = Symbol.for('EggPrototype#eventName');
constant EVENT_CONTEXT_INJECT (line 6) | const EVENT_CONTEXT_INJECT = Symbol.for('EggPrototype#event#handler#cont...
class EventInfoUtil (line 8) | class EventInfoUtil {
method setEventName (line 12) | static setEventName(eventName: EventName, clazz: EggProtoImplClass) {
method addEventName (line 16) | static addEventName(eventName: EventName, clazz: EggProtoImplClass) {
method getEventNameList (line 21) | static getEventNameList(clazz: EggProtoImplClass): EventName[] {
method getEventName (line 29) | static getEventName(clazz: EggProtoImplClass): EventName | undefined {
method setEventHandlerContextInject (line 37) | static setEventHandlerContextInject(enable: boolean, clazz: EggProtoIm...
method getEventHandlerContextInject (line 41) | static getEventHandlerContextInject(clazz: EggProtoImplClass): boolean {
FILE: core/eventbus-decorator/src/type.d.ts
type Events (line 4) | interface Events {
FILE: core/eventbus-decorator/test/fixtures/empty-handle.ts
class EmptyHandler (line 1) | class EmptyHandler{}
FILE: core/eventbus-decorator/test/fixtures/event-handle-with-context.ts
type Events (line 6) | interface Events {
class EventContextProducer (line 12) | class EventContextProducer {
method trigger (line 16) | trigger() {
class EventContextHandler (line 22) | class EventContextHandler {
method handle (line 23) | handle(@EventContext() ctx: IEventContext, msg: string): void {
FILE: core/eventbus-decorator/test/fixtures/multiple-events-handle.ts
type Events (line 6) | interface Events {
class MultiProducer (line 13) | class MultiProducer {
method trigger (line 17) | trigger() {
class MultiHandler (line 24) | class MultiHandler {
method handle (line 25) | handle(msg: string): void {
FILE: core/eventbus-decorator/test/fixtures/right-event-handle.ts
type Events (line 6) | interface Events {
class FooProducer (line 12) | class FooProducer {
method trigger (line 16) | trigger() {
class FooHandler (line 22) | class FooHandler {
method handle (line 23) | handle(msg: string): void {
FILE: core/eventbus-decorator/test/fixtures/wrong-event-handle.ts
type Events (line 5) | interface Events {
class BarProducer (line 11) | class BarProducer {
method trigger (line 15) | trigger() {
class BarHandler (line 21) | class BarHandler {
method handle (line 22) | handle(msg: string): void {
FILE: core/eventbus-runtime/src/EventContextFactory.ts
type ContextCreator (line 5) | type ContextCreator = (parentContext?: EggRuntimeContext) => EggRuntimeC...
class EventContextFactory (line 10) | class EventContextFactory {
method createContext (line 13) | createContext(parentContext?: EggRuntimeContext): EggRuntimeContext {
method registerContextCreator (line 17) | registerContextCreator(creator: ContextCreator) {
FILE: core/eventbus-runtime/src/EventHandlerFactory.ts
class EventHandlerFactory (line 11) | class EventHandlerFactory {
method registerHandler (line 14) | registerHandler(event: EventName, proto: EggPrototype) {
method hasListeners (line 19) | hasListeners(event: EventName) {
method getHandlerProtos (line 23) | getHandlerProtos(event: EventName): Array<EggPrototype> {
method getHandler (line 28) | async getHandler(proto: EggPrototype): Promise<EventHandler<keyof Even...
method getHandlers (line 33) | async getHandlers(event: EventName): Promise<Array<EventHandler<keyof ...
method handle (line 40) | async handle(eventName: EventName, proto: EggPrototype, args: Argument...
FILE: core/eventbus-runtime/src/SingletonEventBus.ts
type Event (line 14) | interface Event {
type CorkEvents (line 20) | interface CorkEvents {
class SingletonEventBus (line 31) | class SingletonEventBus implements EventBus, EventWaiter {
method once (line 52) | once<E extends keyof Events>(event: E, listener: Events[E]): this {
method await (line 57) | async await<E extends keyof Events>(event: E): Promise<Arguments<Event...
method awaitFirst (line 61) | awaitFirst<E extends keyof Events>(...e: Array<E>): Promise<{ event: E...
method emit (line 65) | emit<E extends keyof Events>(event: E, ...args: Arguments<Events[E]>):...
method generateCorkId (line 72) | generateCorkId(): string {
method cork (line 76) | cork(corkId: string) {
method uncork (line 88) | uncork(corkId: string) {
method queueEvent (line 105) | queueEvent(corkId: string, event: Event) {
method emitWithContext (line 113) | emitWithContext<E extends keyof Events>(parentContext: EggRuntimeConte...
method doEmitWithContext (line 123) | private doEmitWithContext(parentContext: EggRuntimeContext, event: Eve...
method doOnceEmit (line 130) | private doOnceEmit(event: EventName, args: Array<any>) {
method doEmit (line 139) | private async doEmit(ctx: EggRuntimeContext, event: EventName, args: A...
FILE: core/eventbus-runtime/test/fixtures/modules/event/HelloEvent.ts
type Events (line 5) | interface Events {
class HelloProducer (line 13) | class HelloProducer {
method trigger (line 17) | trigger() {
class HelloHandler (line 23) | class HelloHandler {
method handle (line 24) | handle(hello: string) {
FILE: core/eventbus-runtime/test/fixtures/modules/event/MultiEvent.ts
type Events (line 7) | interface Events {
class TimeoutProducer (line 15) | class TimeoutProducer {
method trigger (line 19) | trigger() {
class Timeout0Handler (line 25) | class Timeout0Handler {
method handle (line 26) | handle() {
class Timeout100Handler (line 33) | class Timeout100Handler {
method handle (line 38) | async handle() {
FILE: core/eventbus-runtime/test/fixtures/modules/event/MultiEventWithContext.ts
type Events (line 5) | interface Events {
class MultiWithContextProducer (line 14) | class MultiWithContextProducer {
method foo (line 18) | foo() {
method bar (line 22) | bar() {
class MultiWithContextHandler (line 29) | class MultiWithContextHandler {
method handle (line 32) | async handle(@EventContext() ctx: IEventContext, msg: string) {
FILE: core/eventbus-runtime/test/fixtures/modules/mock-module/MockLogger.ts
class MockLogger (line 7) | class MockLogger {
method constructor (line 8) | constructor() {
class MockContextLogger (line 23) | class MockContextLogger {
method constructor (line 24) | constructor() {
FILE: core/langchain-decorator/src/builder/BoundModelMetaBuilder.ts
class BoundModelMetaBuilder (line 5) | class BoundModelMetaBuilder {
method constructor (line 8) | constructor(clazz: EggProtoImplClass) {
method build (line 12) | build(): BoundModelMetadata | undefined {
method create (line 19) | static create(clazz: EggProtoImplClass): BoundModelMetaBuilder {
FILE: core/langchain-decorator/src/builder/GraphEdgeMetaBuilder.ts
class GraphEdgeMetaBuilder (line 5) | class GraphEdgeMetaBuilder {
method constructor (line 8) | constructor(clazz: EggProtoImplClass) {
method build (line 12) | build(): GraphEdgeMetadata | undefined {
method create (line 19) | static create(clazz: EggProtoImplClass): GraphEdgeMetaBuilder {
FILE: core/langchain-decorator/src/builder/GraphMetaBuilder.ts
class GraphMetaBuilder (line 5) | class GraphMetaBuilder {
method constructor (line 8) | constructor(clazz: EggProtoImplClass) {
method build (line 12) | build(): GraphMetadata | undefined {
method create (line 19) | static create(clazz: EggProtoImplClass): GraphMetaBuilder {
FILE: core/langchain-decorator/src/builder/GraphNodeMetaBuilder.ts
class GraphNodeMetaBuilder (line 5) | class GraphNodeMetaBuilder {
method constructor (line 8) | constructor(clazz: EggProtoImplClass) {
method build (line 12) | build(): GraphNodeMetadata | undefined {
method create (line 19) | static create(clazz: EggProtoImplClass): GraphNodeMetaBuilder {
FILE: core/langchain-decorator/src/builder/GraphToolMetaBuilder.ts
class GraphToolMetaBuilder (line 5) | class GraphToolMetaBuilder {
method constructor (line 8) | constructor(clazz: EggProtoImplClass) {
method build (line 12) | build(): GraphToolMetadata | undefined {
method create (line 19) | static create(clazz: EggProtoImplClass): GraphToolMetaBuilder {
FILE: core/langchain-decorator/src/decorator/BoundModel.ts
function BoundModel (line 14) | function BoundModel(params: IBoundModelMetadata) {
type BaseChatModel (line 27) | type BaseChatModel<T extends ChatOpenAICallOptions = ChatOpenAICallOptio...
type TeggBoundModel (line 30) | type TeggBoundModel<S, CallOptions extends ChatOpenAICallOptions = ChatO...
FILE: core/langchain-decorator/src/decorator/Graph.ts
function Graph (line 12) | function Graph<N extends string = '', S extends StateDefinition = StateD...
type IGraph (line 25) | interface IGraph<N extends string = '', S extends StateDefinition = Stat...
type TeggCompiledStateGraph (line 40) | type TeggCompiledStateGraph<G> = G extends AbstractStateGraph<infer N ex...
FILE: core/langchain-decorator/src/decorator/GraphEdge.ts
function GraphEdge (line 25) | function GraphEdge<S extends StateDefinition = StateDefinition, N extend...
type GraphStateType (line 38) | type GraphStateType<A extends StateDefinition = StateDefinition> = Annot...
type GraphUpdateType (line 40) | type GraphUpdateType<A extends StateDefinition = StateDefinition> = Upda...
type IGraphEdge (line 42) | interface IGraphEdge<S extends StateDefinition = StateDefinition, N exte...
FILE: core/langchain-decorator/src/decorator/GraphNode.ts
function GraphNode (line 16) | function GraphNode<S extends StateDefinition = StateDefinition>(params: ...
type StateGraphAddNodeOptions (line 29) | type StateGraphAddNodeOptions = Parameters<typeof StateGraph['prototype'...
type GraphRuntime (line 31) | type GraphRuntime<ContextType = Record<string, unknown>, InterruptType =...
type IGraphNode (line 33) | interface IGraphNode<S extends StateDefinition = StateDefinition, T = an...
class TeggToolNode (line 40) | class TeggToolNode implements IGraphNode {
method execute (line 43) | async execute() {
FILE: core/langchain-decorator/src/decorator/GraphTool.ts
function GraphTool (line 13) | function GraphTool<ToolSchema = ToolSchemaBase>(params: IGraphToolMetada...
type IGraphTool (line 26) | interface IGraphTool<ToolSchema = ToolSchemaBase> {
type IGraphStructuredTool (line 31) | type IGraphStructuredTool<T extends IGraphTool> = DynamicStructuredTool<...
FILE: core/langchain-decorator/src/model/BoundModelMetadata.ts
type IBoundModelMetadata (line 3) | interface IBoundModelMetadata extends SingletonProtoParams {
class BoundModelMetadata (line 9) | class BoundModelMetadata {
method constructor (line 14) | constructor(params: IBoundModelMetadata) {
FILE: core/langchain-decorator/src/model/GraphEdgeMetadata.ts
type IGraphEdgeMetadata (line 3) | interface IGraphEdgeMetadata extends SingletonProtoParams {
class GraphEdgeMetadata (line 8) | class GraphEdgeMetadata {
method constructor (line 12) | constructor(params: IGraphEdgeMetadata) {
FILE: core/langchain-decorator/src/model/GraphMetadata.ts
type IGraphMetadata (line 4) | interface IGraphMetadata extends SingletonProtoParams {
class GraphMetadata (line 10) | class GraphMetadata implements IGraphMetadata {
method constructor (line 15) | constructor(params: IGraphMetadata) {
FILE: core/langchain-decorator/src/model/GraphNodeMetadata.ts
type IGraphNodeMetadata (line 3) | interface IGraphNodeMetadata extends SingletonProtoParams {
class GraphNodeMetadata (line 9) | class GraphNodeMetadata {
method constructor (line 14) | constructor(params: IGraphNodeMetadata) {
FILE: core/langchain-decorator/src/model/GraphToolMetadata.ts
type IGraphToolMetadata (line 3) | interface IGraphToolMetadata extends SingletonProtoParams {
class GraphToolMetadata (line 9) | class GraphToolMetadata implements IGraphToolMetadata {
method constructor (line 13) | constructor(params: IGraphToolMetadata) {
FILE: core/langchain-decorator/src/qualifier/ChatCheckpointSaverQualifier.ts
function ChatCheckpointSaverQualifier (line 6) | function ChatCheckpointSaverQualifier(chatCheckpointSaverName: string) {
FILE: core/langchain-decorator/src/qualifier/ChatModelQualifier.ts
function ChatModelQualifier (line 6) | function ChatModelQualifier(chatModelName: string) {
FILE: core/langchain-decorator/src/type/metadataKey.ts
constant GRAPH_TOOL_METADATA (line 1) | const GRAPH_TOOL_METADATA = Symbol.for('EggPrototype#graph#tool#metadata');
constant GRAPH_EDGE_METADATA (line 2) | const GRAPH_EDGE_METADATA = Symbol.for('EggPrototype#graph#edge#metadata');
constant GRAPH_NODE_METADATA (line 3) | const GRAPH_NODE_METADATA = Symbol.for('EggPrototype#graph#node#metadata');
constant GRAPH_GRAPH_METADATA (line 4) | const GRAPH_GRAPH_METADATA = Symbol.for('EggPrototype#graph#graph#metada...
constant PROMPT_KEY_METADATA (line 5) | const PROMPT_KEY_METADATA = Symbol.for('EggPrototype#prompt#key#metadata');
constant BOUND_MODEL_METADATA (line 6) | const BOUND_MODEL_METADATA = Symbol.for('EggPrototype#bound#model#metada...
FILE: core/langchain-decorator/src/util/BoundModelInfoUtil.ts
class BoundModelInfoUtil (line 6) | class BoundModelInfoUtil {
method setBoundModelMetadata (line 7) | static setBoundModelMetadata(metadata: IBoundModelMetadata, clazz: Egg...
method getBoundModelMetadata (line 11) | static getBoundModelMetadata(clazz: EggProtoImplClass): IBoundModelMet...
FILE: core/langchain-decorator/src/util/GraphEdgeInfoUtil.ts
class GraphEdgeInfoUtil (line 6) | class GraphEdgeInfoUtil {
method setGraphEdgeMetadata (line 7) | static setGraphEdgeMetadata(metadata: IGraphEdgeMetadata, clazz: EggPr...
method getGraphEdgeMetadata (line 11) | static getGraphEdgeMetadata(clazz: EggProtoImplClass): IGraphEdgeMetad...
FILE: core/langchain-decorator/src/util/GraphInfoUtil.ts
class GraphInfoUtil (line 6) | class GraphInfoUtil {
method setGraphMetadata (line 9) | static setGraphMetadata(metadata: IGraphMetadata, clazz: EggProtoImplC...
method getGraphMetadata (line 14) | static getGraphMetadata(clazz: EggProtoImplClass): IGraphMetadata | un...
method getAllGraphMetadata (line 18) | static getAllGraphMetadata(): Map<EggProtoImplClass, IGraphMetadata> {
FILE: core/langchain-decorator/src/util/GraphNodeInfoUtil.ts
class GraphNodeInfoUtil (line 6) | class GraphNodeInfoUtil {
method setGraphNodeMetadata (line 7) | static setGraphNodeMetadata(metadata: IGraphNodeMetadata, clazz: EggPr...
method getGraphNodeMetadata (line 11) | static getGraphNodeMetadata(clazz: EggProtoImplClass): IGraphNodeMetad...
FILE: core/langchain-decorator/src/util/GraphToolInfoUtil.ts
class GraphToolInfoUtil (line 6) | class GraphToolInfoUtil {
method setGraphToolMetadata (line 8) | static setGraphToolMetadata(metadata: IGraphToolMetadata, clazz: EggPr...
method getGraphToolMetadata (line 13) | static getGraphToolMetadata(clazz: EggProtoImplClass): IGraphToolMetad...
method getAllGraphToolMetadata (line 17) | static getAllGraphToolMetadata(): Map<EggProtoImplClass, IGraphToolMet...
FILE: core/langchain-decorator/test/fixtures/modules/langchain/index.ts
class Foo (line 10) | class Foo {
FILE: core/langchain-decorator/test/fixtures/modules/langgraph/Graph.ts
type FooGraphNodeName (line 11) | enum FooGraphNodeName {
class FooSaver (line 24) | class FooSaver extends MemorySaver {}
type FooAnnotationStateDefinition (line 36) | type FooAnnotationStateDefinition = typeof fooAnnotationStateDefinition;
class FooTool (line 46) | class FooTool implements IGraphTool {
method execute (line 48) | async execute(@ToolArgsSchema(ToolType) args: ToolArgs<typeof ToolType...
class FooChatModel (line 59) | class FooChatModel {}
class ToolNode (line 66) | class ToolNode extends TeggToolNode {}
class FooNode (line 74) | class FooNode implements IGraphNode<FooAnnotationStateDefinition> {
method execute (line 80) | async execute(
class FooContinueEdge (line 94) | class FooContinueEdge implements IGraphEdge<FooAnnotationStateDefinition...
method execute (line 96) | async execute(
class FooGraph (line 114) | class FooGraph extends AbstractStateGraph<FooGraphNodeName, typeof fooAn...
method constructor (line 115) | constructor() {
class BarNode (line 124) | class BarNode implements IGraphNode<FooAnnotationStateDefinition> {
method execute (line 133) | async execute(
method build (line 142) | async build() {
class BarGraph (line 151) | class BarGraph extends AbstractStateGraph<FooGraphNodeName, FooAnnotatio...
method constructor (line 164) | constructor() {
method build (line 168) | async build() {
class FooService (line 178) | class FooService {
method blablabla (line 182) | async blablabla() {
FILE: core/lifecycle/src/IdenticalObject.ts
class IdenticalUtil (line 3) | class IdenticalUtil {
method createLoadUnitId (line 8) | static createLoadUnitId(loadUnitName: string): Id {
method createProtoId (line 13) | static createProtoId(loadUnitId: Id, name: PropertyKey): Id {
method createLoadUnitInstanceId (line 18) | static createLoadUnitInstanceId(loadUnitId: Id): Id {
method createContextId (line 23) | static createContextId(traceId?: string) {
method createObjectId (line 31) | static createObjectId(protoId: Id, ctxId?: Id) {
FILE: core/lifecycle/src/LifycycleUtil.ts
class LifecycleUtil (line 11) | class LifecycleUtil<T extends LifecycleContext, R extends LifecycleObjec...
method registerLifecycle (line 16) | registerLifecycle(lifecycle: LifecycleHook<T, R>) {
method deleteLifecycle (line 20) | deleteLifecycle(lifecycle: LifecycleHook<T, R>) {
method getLifecycleList (line 24) | getLifecycleList(): LifecycleHook<T, R>[] {
method registerObjectLifecycle (line 28) | registerObjectLifecycle(obj: R, lifecycle: LifecycleHook<T, R>) {
method deleteObjectLifecycle (line 35) | deleteObjectLifecycle(obj: R, lifecycle: LifecycleHook<T, R>) {
method clearObjectLifecycle (line 39) | clearObjectLifecycle(obj: R) {
method getObjectLifecycleList (line 43) | getObjectLifecycleList(obj: R): LifecycleHook<T, R>[] {
method objectPreCreate (line 50) | async objectPreCreate(ctx: T, obj: R) {
method objectPostCreate (line 57) | async objectPostCreate(ctx: T, obj: R) {
method objectPreDestroy (line 64) | async objectPreDestroy(ctx: T, obj: R) {
method callPreCreate (line 71) | static async callPreCreate<T extends LifecycleContext, R extends Lifec...
method callPostCreate (line 78) | static async callPostCreate<T extends LifecycleContext, R extends Life...
method callPreDestroy (line 85) | static async callPreDestroy<T extends LifecycleContext, R extends Life...
method setLifecycleHook (line 92) | static setLifecycleHook(method: string, hookName: LifecycleHookName, c...
method getLifecycleHook (line 97) | getLifecycleHook(hookName: LifecycleHookName, proto: EggPrototype) {
method getStaticLifecycleHook (line 102) | static getStaticLifecycleHook(hookName: LifecycleHookName, clazz: EggP...
FILE: core/lifecycle/src/decorator/index.ts
function createLifecycle (line 4) | function createLifecycle(hookName: LifecycleHookName) {
function createStaticLifecycle (line 13) | function createStaticLifecycle(hookName: LifecycleHookName) {
FILE: core/loader/src/LoaderFactory.ts
type LoaderCreator (line 5) | type LoaderCreator = (unitPath: string) => Loader;
class LoaderFactory (line 7) | class LoaderFactory {
method createLoader (line 10) | static createLoader(unitPath: string, type: EggLoadUnitTypeLike): Load...
method registerLoader (line 18) | static registerLoader(type: EggLoadUnitTypeLike, creator: LoaderCreato...
method loadApp (line 22) | static loadApp(moduleReferences: readonly ModuleReference[]): ModuleDe...
FILE: core/loader/src/LoaderUtil.ts
type LoaderUtilConfig (line 12) | interface LoaderUtilConfig {
class LoaderUtil (line 16) | class LoaderUtil {
method setConfig (line 18) | static setConfig(config: LoaderUtilConfig) {
method extension (line 22) | static get extension() {
method filePattern (line 26) | static filePattern(): string[] {
method loadFile (line 52) | static loadFile(filePath: string): EggProtoImplClass[] {
FILE: core/loader/src/impl/ModuleLoader.ts
class ModuleLoader (line 7) | class ModuleLoader implements Loader {
method constructor (line 11) | constructor(moduleDir: string) {
method load (line 15) | load(): EggProtoImplClass[] {
method createModuleLoader (line 35) | static createModuleLoader(path: string): ModuleLoader {
FILE: core/loader/test/fixtures/modules/loader-failed/AppRepo.ts
type App (line 3) | interface App {
class AppRepo (line 8) | class AppRepo {
method findAppByName (line 9) | async findAppByName(): Promise<App> {
class AppRepo2 (line 17) | class AppRepo2 {
method findAppByName (line 19) | async findAppByName(name: string): Promise<App> {
FILE: core/loader/test/fixtures/modules/module-for-loader/AppRepo.ts
type App (line 3) | interface App {
class AppRepo (line 8) | class AppRepo {
method findAppByName (line 9) | async findAppByName(): Promise<App> {
class AppRepo2 (line 17) | class AppRepo2 {
method findAppByName (line 18) | async findAppByName(): Promise<App> {
FILE: core/loader/test/fixtures/modules/module-for-loader/SprintRepo.ts
class SprintRepo (line 4) | class SprintRepo {
method save (line 5) | async save() {
FILE: core/loader/test/fixtures/modules/module-for-loader/UserRepo.ts
class UserRepo (line 4) | class UserRepo {
FILE: core/loader/test/fixtures/modules/module-with-extra/AppRepo.ts
type App (line 3) | interface App {
class AppRepo (line 8) | class AppRepo {
method findAppByName (line 9) | async findAppByName(): Promise<App> {
FILE: core/loader/test/fixtures/modules/module-with-extra/extra/UserRepo.ts
class UserRepo (line 4) | class UserRepo {
FILE: core/loader/test/fixtures/modules/module-with-test/AppRepo.ts
type App (line 3) | interface App {
class AppRepo (line 8) | class AppRepo {
method findAppByName (line 9) | async findAppByName(): Promise<App> {
FILE: core/loader/test/fixtures/modules/module-with-test/coverage/fixtures/UserRepo.ts
class UserRepo (line 4) | class UserRepo {
FILE: core/loader/test/fixtures/modules/module-with-test/test/fixtures/UserRepo.ts
class UserRepo (line 4) | class UserRepo {
FILE: core/mcp-client/src/HeaderUtil.ts
function mergeHeaders (line 3) | function mergeHeaders(...headersInits: Array<HeadersInit | undefined>): ...
FILE: core/mcp-client/src/HttpMCPClient.ts
type BaseHttpClientOptions (line 10) | interface BaseHttpClientOptions extends ClientOptions {
type HttpSSEClientOptions (line 16) | interface HttpSSEClientOptions extends BaseHttpClientOptions {
type HttpStreamableHTTPClientOptions (line 21) | interface HttpStreamableHTTPClientOptions extends BaseHttpClientOptions {
type HttpClientOptions (line 26) | type HttpClientOptions = HttpSSEClientOptions | HttpStreamableHTTPClient...
class HttpMCPClient (line 28) | class HttpMCPClient extends Client {
method constructor (line 35) | constructor(clientInfo: Implementation, options: HttpClientOptions) {
method #buildSSESTransport (line 43) | async #buildSSESTransport() {
method #buildStreamableHTTPTransport (line 82) | async #buildStreamableHTTPTransport() {
method init (line 111) | async init() {
method getLangChainTool (line 119) | async getLangChainTool() {
FILE: core/mcp-client/src/MCPClientQualifier.ts
function MCPClientQualifier (line 7) | function MCPClientQualifier(mcpClientName: string) {
type MCPConfigType (line 14) | type MCPConfigType =
function getMCPClientName (line 17) | function getMCPClientName(objectInfo: ObjectInfo): string {
function getMCPClientConfig (line 23) | function getMCPClientConfig(config: ModuleConfig, objectInfo: ObjectInfo...
FILE: core/mcp-client/test/fixtures/sse-mcp-server/http.ts
function startSSEServer (line 42) | async function startSSEServer(port = 17233) {
function stopSSEServer (line 73) | async function stopSSEServer() {
FILE: core/mcp-client/test/fixtures/streamable-mcp-server/http.ts
function startStreamableServer (line 39) | async function startStreamableServer(port = 17243){
function stopStreamableServer (line 93) | async function stopStreamableServer() {
FILE: core/mcp-client/typings/index.d.ts
type McpClientConfigSchemaType (line 30) | type McpClientConfigSchemaType = Static<typeof McpClientConfigSchema>;
type McpClientConfig (line 33) | type McpClientConfig = {
type ModuleConfig (line 37) | interface ModuleConfig extends McpClientConfig {
FILE: core/metadata/src/errors.ts
class TeggError (line 5) | class TeggError extends FrameworkBaseError {
method module (line 6) | get module() {
class EggPrototypeNotFound (line 11) | class EggPrototypeNotFound extends TeggError {
method constructor (line 12) | constructor(protoName: EggPrototypeName, loadUnitId: string | undefine...
class MultiPrototypeFound (line 20) | class MultiPrototypeFound extends TeggError {
method constructor (line 21) | constructor(name: EggPrototypeName, qualifier: QualifierInfo[], result...
class IncompatibleProtoInject (line 27) | class IncompatibleProtoInject extends TeggError {
method constructor (line 28) | constructor(msg: string) {
FILE: core/metadata/src/factory/EggPrototypeCreatorFactory.ts
class EggPrototypeCreatorFactory (line 13) | class EggPrototypeCreatorFactory {
method registerPrototypeCreator (line 16) | static registerPrototypeCreator(type: string, creator: EggPrototypeCre...
method getPrototypeCreator (line 20) | static getPrototypeCreator(type: string): EggPrototypeCreator | undefi...
method createProto (line 24) | static async createProto(clazz: EggProtoImplClass, loadUnit: LoadUnit)...
method createProtoByDescriptor (line 96) | static async createProtoByDescriptor(protoDescriptor: ClassProtoDescri...
FILE: core/metadata/src/factory/EggPrototypeFactory.ts
class EggPrototypeFactory (line 7) | class EggPrototypeFactory {
method registerPrototype (line 13) | public registerPrototype(proto: EggPrototype, loadUnit: LoadUnit) {
method deletePrototype (line 21) | public deletePrototype(proto: EggPrototype, loadUnit: LoadUnit) {
method getPrototype (line 35) | public getPrototype(name: PropertyKey, loadUnit?: LoadUnit, qualifiers...
method doGetPrototype (line 47) | private doGetPrototype(name: EggPrototypeName, qualifiers: QualifierIn...
FILE: core/metadata/src/factory/LoadUnitFactory.ts
class LoadUnitFactory (line 12) | class LoadUnitFactory {
method getLoanUnit (line 17) | protected static async getLoanUnit(ctx: LoadUnitLifecycleContext, type...
method createLoadUnit (line 25) | static async createLoadUnit(unitPath: string, type: EggLoadUnitTypeLik...
method createPreloadLoadUnit (line 44) | static async createPreloadLoadUnit(unitPath: string, type: EggLoadUnit...
method destroyLoadUnit (line 52) | static async destroyLoadUnit(loadUnit: LoadUnit) {
method getLoadUnitById (line 66) | static getLoadUnitById(id: Id): LoadUnit | undefined {
method registerLoadUnitCreator (line 70) | static registerLoadUnitCreator(type: EggLoadUnitTypeLike, creator: Loa...
FILE: core/metadata/src/impl/EggPrototypeBuilder.ts
class EggPrototypeBuilder (line 27) | class EggPrototypeBuilder {
method create (line 42) | static create(ctx: EggPrototypeLifecycleContext): EggPrototype {
method tryFindDefaultPrototype (line 66) | private tryFindDefaultPrototype(injectObject: InjectObject | InjectCon...
method tryFindContextPrototype (line 75) | private tryFindContextPrototype(injectObject: InjectObject | InjectCon...
method tryFindSelfInitTypePrototype (line 88) | private tryFindSelfInitTypePrototype(injectObject: InjectObject | Inje...
method findInjectObjectPrototype (line 101) | private findInjectObjectPrototype(injectObject: InjectObject | InjectC...
method build (line 120) | public build(): EggPrototype {
FILE: core/metadata/src/impl/EggPrototypeImpl.ts
class EggPrototypeImpl (line 16) | class EggPrototypeImpl implements EggPrototype {
method constructor (line 32) | constructor(
method verifyQualifiers (line 62) | verifyQualifiers(qualifiers: QualifierInfo[]): boolean {
method verifyQualifier (line 71) | verifyQualifier(qualifier: QualifierInfo): boolean {
method getQualifier (line 76) | getQualifier(attribute: string): QualifierValue | undefined {
method constructEggObject (line 80) | constructEggObject(...args: any): object {
method getMetaData (line 84) | getMetaData<T>(metadataKey: MetaDataKey): T | undefined {
FILE: core/metadata/src/impl/LoadUnitMultiInstanceProtoHook.ts
class LoadUnitMultiInstanceProtoHook (line 6) | class LoadUnitMultiInstanceProtoHook implements LifecycleHook<LoadUnitLi...
method setAllClassList (line 9) | static setAllClassList(clazzList: readonly EggProtoImplClass[]) {
method clear (line 17) | static clear() {
method preCreate (line 21) | async preCreate(): Promise<void> {
FILE: core/metadata/src/impl/ModuleLoadUnit.ts
class ProtoNode (line 31) | class ProtoNode implements GraphNodeObj {
method constructor (line 39) | constructor(
method verifyQualifiers (line 52) | verifyQualifiers(qualifiers: QualifierInfo[]): boolean {
method verifyQualifier (line 61) | verifyQualifier(qualifier: QualifierInfo): boolean {
method toString (line 66) | toString(): string {
class ModuleGraph (line 71) | class ModuleGraph {
method constructor (line 77) | constructor(clazzList: EggProtoImplClass[], unitPath: string, name: st...
method findInjectNode (line 85) | private findInjectNode(objName: EggPrototypeName, qualifiers: Qualifie...
method build (line 119) | private build() {
method sort (line 184) | sort() {
class ModuleLoadUnit (line 197) | class ModuleLoadUnit implements LoadUnit {
method globalGraph (line 208) | get globalGraph(): GlobalGraph {
method constructor (line 212) | constructor(name: string, unitPath: string) {
method doLoadClazz (line 218) | private doLoadClazz() {
method loadClazz (line 230) | private loadClazz() {
method preLoad (line 236) | async preLoad() {
method init (line 248) | async init() {
method containPrototype (line 256) | containPrototype(proto: EggPrototype): boolean {
method getEggPrototype (line 260) | getEggPrototype(name: string, qualifiers: QualifierInfo[]): EggPrototy...
method registerEggPrototype (line 265) | registerEggPrototype(proto: EggPrototype) {
method deletePrototype (line 270) | deletePrototype(proto: EggPrototype) {
method destroy (line 280) | async destroy() {
method iterateEggPrototype (line 289) | iterateEggPrototype(): IterableIterator<EggPrototype> {
method createModule (line 298) | static createModule(ctx: LoadUnitLifecycleContext): ModuleLoadUnit {
FILE: core/metadata/src/model/AppGraph.ts
type InstanceClazzMeta (line 8) | interface InstanceClazzMeta {
type ClazzMetaMap (line 17) | type ClazzMetaMap = Record<EggPrototypeName, InstanceClazzMeta[]>;
function verifyQualifier (line 19) | function verifyQualifier(clazzQualifiers: QualifierInfo[], qualifier: Qu...
function verifyQualifiers (line 24) | function verifyQualifiers(clazzQualifiers: QualifierInfo[], qualifiers: ...
class ClazzMap (line 33) | class ClazzMap {
method constructor (line 36) | constructor(graph: Graph<ModuleNode>) {
method build (line 40) | private build(graph: Graph<ModuleNode>) {
method findDependencyModule (line 97) | findDependencyModule(objName: EggPrototypeName, properQualifiers: Qual...
class ModuleNode (line 166) | class ModuleNode implements GraphNodeObj {
method constructor (line 172) | constructor(moduleConfig: ModuleReference) {
method addClazz (line 179) | addClazz(clazz: EggProtoImplClass) {
method toString (line 200) | toString() {
method getClazzList (line 204) | getClazzList(): readonly EggProtoImplClass[] {
class AppGraph (line 209) | class AppGraph {
method constructor (line 214) | constructor() {
method addNode (line 218) | addNode(moduleNode: ModuleNode) {
method getClazzList (line 224) | getClazzList(): readonly EggProtoImplClass[] {
method build (line 234) | build() {
method sort (line 283) | sort() {
FILE: core/metadata/src/model/ModuleDescriptor.ts
constant DUMP_PATH (line 6) | const DUMP_PATH = process.env.MODULE_DUMP_PATH;
type ModuleDescriptor (line 8) | interface ModuleDescriptor {
type ModuleDumpOptions (line 17) | interface ModuleDumpOptions {
class ModuleDescriptorDumper (line 21) | class ModuleDescriptorDumper {
method stringifyDescriptor (line 22) | static stringifyDescriptor(moduleDescriptor: ModuleDescriptor): string {
method stringifyClazz (line 39) | static stringifyClazz(clazz: EggProtoImplClass, moduleDescriptor: Modu...
method dumpPath (line 46) | static dumpPath(desc: ModuleDescriptor, options?: ModuleDumpOptions) {
method dump (line 51) | static async dump(desc: ModuleDescriptor, options?: ModuleDumpOptions) {
FILE: core/metadata/src/model/ProtoDescriptor/AbstractProtoDescriptor.ts
type AbstractProtoDescriptorOptions (line 10) | interface AbstractProtoDescriptorOptions {
method constructor (line 40) | protected constructor(options: AbstractProtoDescriptorOptions) {
FILE: core/metadata/src/model/ProtoDescriptor/ClassProtoDescriptor.ts
type ClassProtoDescriptorOptions (line 6) | interface ClassProtoDescriptorOptions extends Omit<AbstractProtoDescript...
class ClassProtoDescriptor (line 10) | class ClassProtoDescriptor extends AbstractProtoDescriptor {
method isClassProtoDescriptor (line 14) | static isClassProtoDescriptor(descriptor: ProtoDescriptor): descriptor...
method constructor (line 18) | constructor(options: ClassProtoDescriptorOptions) {
method equal (line 27) | equal(protoDescriptor: ProtoDescriptor): boolean {
FILE: core/metadata/src/model/ProtoDescriptorHelper.ts
class ProtoDescriptorHelper (line 21) | class ProtoDescriptorHelper {
method addDefaultQualifier (line 22) | static addDefaultQualifier(qualifiers: QualifierInfo[], initType: Obje...
method createByMultiInstanceClazz (line 41) | static createByMultiInstanceClazz(clazz: EggProtoImplClass, options: {
method createByDynamicMultiInstanceClazz (line 60) | static createByDynamicMultiInstanceClazz(clazz: EggProtoImplClass, opt...
method createByStaticMultiInstanceClazz (line 76) | static createByStaticMultiInstanceClazz(clazz: EggProtoImplClass, opti...
method #createByMultiInstanceClazz (line 90) | static #createByMultiInstanceClazz(clazz: EggProtoImplClass, instanceP...
method createByInstanceClazz (line 134) | static createByInstanceClazz(clazz: EggProtoImplClass, ctx: MultiInsta...
method selectProto (line 166) | static selectProto(proto: ProtoDescriptor, ctx: ProtoSelectorContext):...
FILE: core/metadata/src/model/graph/GlobalGraph.ts
type GlobalGraphOptions (line 17) | interface GlobalGraphOptions {
type GlobalGraphBuildHook (line 23) | type GlobalGraphBuildHook = (globalGraph: GlobalGraph) => void;
class GlobalGraph (line 38) | class GlobalGraph {
method constructor (line 68) | constructor(options?: GlobalGraphOptions) {
method registerBuildHook (line 76) | registerBuildHook(hook: GlobalGraphBuildHook) {
method addModuleNode (line 80) | addModuleNode(moduleNode: GlobalModuleNode) {
method build (line 91) | build() {
method buildInjectEdge (line 104) | buildInjectEdge(moduleNode: GraphNode<GlobalModuleNode, ModuleDependen...
method addInject (line 115) | addInject(
method findInjectProto (line 136) | findInjectProto(proto: ProtoDescriptor, injectObject: InjectObjectDesc...
method #findDependencyProtoWithDefaultQualifiers (line 143) | #findDependencyProtoWithDefaultQualifiers(proto: ProtoDescriptor, inje...
method findDependencyProtoNode (line 161) | findDependencyProtoNode(proto: ProtoDescriptor, injectObject: InjectOb...
method findModuleNode (line 205) | findModuleNode(moduleName: string) {
method #sortModule (line 213) | #sortModule() {
method #sortClazz (line 231) | #sortClazz() {
method sort (line 249) | sort() {
method create (line 254) | static create(moduleDescriptors: ModuleDescriptor[], options?: GlobalG...
FILE: core/metadata/src/model/graph/GlobalModuleNode.ts
type GlobalModuleNodeOptions (line 5) | interface GlobalModuleNodeOptions {
class ModuleDependencyMeta (line 11) | class ModuleDependencyMeta implements EdgeMeta {
method constructor (line 12) | constructor(readonly obj: ProtoDescriptor, readonly injectObj: Propert...
method equal (line 15) | equal(meta: ModuleDependencyMeta): boolean {
method toString (line 20) | toString(): string {
class GlobalModuleNode (line 25) | class GlobalModuleNode implements GraphNodeObj {
method constructor (line 32) | constructor(options: GlobalModuleNodeOptions) {
method addProto (line 40) | addProto(proto: ProtoDescriptor) {
method toString (line 44) | toString() {
FILE: core/metadata/src/model/graph/GlobalModuleNodeBuilder.ts
class GlobalModuleNodeBuilder (line 6) | class GlobalModuleNodeBuilder {
method constructor (line 12) | constructor(options: GlobalModuleNodeOptions) {
method addClazz (line 19) | addClazz(clazz: EggProtoImplClass) {
method addMultiInstanceClazz (line 28) | addMultiInstanceClazz(clazz: EggProtoImplClass, defineModuleName: stri...
method build (line 39) | build() {
method create (line 51) | static create(unitPath: string, optional = false) {
FILE: core/metadata/src/model/graph/ProtoNode.ts
class ProtoDependencyMeta (line 6) | class ProtoDependencyMeta implements EdgeMeta {
method constructor (line 9) | constructor({
method equal (line 17) | equal(meta: ProtoDependencyMeta): boolean {
method toString (line 21) | toString(): string {
class ProtoNode (line 26) | class ProtoNode implements GraphNodeObj {
method constructor (line 30) | constructor(proto: ProtoDescriptor) {
method toString (line 35) | toString() {
method selectProto (line 39) | selectProto(ctx: ProtoSelectorContext): boolean {
method createProtoId (line 43) | static createProtoId(proto: ProtoDescriptor) {
FILE: core/metadata/src/model/graph/ProtoSelector.ts
type ProtoSelectorContext (line 3) | interface ProtoSelectorContext {
FILE: core/metadata/src/util/ClassUtil.ts
class ClassUtil (line 4) | class ClassUtil {
method classDescription (line 5) | static classDescription(clazz: EggProtoImplClass): string {
method className (line 15) | static className(clazz: EggProtoImplClass): string {
FILE: core/metadata/test/fixtures/LoaderUtil.ts
class LoaderUtil (line 8) | class LoaderUtil {
method loadFile (line 9) | static loadFile(filePath: string): EggProtoImplClass[] {
function buildModuleNode (line 32) | function buildModuleNode(modulePath: string, clazzList: EggProtoImplClas...
function buildGlobalGraph (line 47) | function buildGlobalGraph(modulePaths: string[], loaders: Loader[]) {
FILE: core/metadata/test/fixtures/TestLoader.ts
class TestLoader (line 8) | class TestLoader implements Loader {
method constructor (line 11) | constructor(moduleDir: string) {
method load (line 15) | load(): EggProtoImplClass[] {
FILE: core/metadata/test/fixtures/modules/app-graph-modules/root/Root.ts
class RootProto (line 5) | class RootProto {
FILE: core/metadata/test/fixtures/modules/app-graph-modules/root/RootConstructor.ts
class RootConstructorProto (line 5) | class RootConstructorProto {
method constructor (line 6) | constructor(@Inject() readonly usedProto: UsedProto) {
FILE: core/metadata/test/fixtures/modules/app-graph-modules/unused/Unused.ts
class UnusedProto (line 4) | class UnusedProto {
FILE: core/metadata/test/fixtures/modules/app-graph-modules/used/Used.ts
class UsedProto (line 6) | class UsedProto {
FILE: core/metadata/test/fixtures/modules/app-multi-inject-multi/app/modules/app/App.ts
class App (line 5) | class App {
FILE: core/metadata/test/fixtures/modules/app-multi-inject-multi/app/modules/app2/App.ts
class App2 (line 5) | class App2 {
FILE: core/metadata/test/fixtures/modules/app-multi-inject-multi/app/modules/bar/BizManager.ts
function BizManagerQualifier (line 17) | function BizManagerQualifier(chatModelName: string) {
method getObjects (line 29) | getObjects(ctx: MultiInstancePrototypeGetObjectsContext) {
class BizManager (line 54) | class BizManager {
method constructor (line 58) | constructor(
FILE: core/metadata/test/fixtures/modules/app-multi-inject-multi/app/modules/foo/Secret.ts
function SecretQualifier (line 14) | function SecretQualifier(chatModelName: string) {
method getObjects (line 24) | getObjects(ctx: MultiInstancePrototypeGetObjectsContext) {
class Secret (line 39) | class Secret {
method getSecret (line 40) | getSecret(key: string): string {
FILE: core/metadata/test/fixtures/modules/extends-constructor-module/Base.ts
class Logger (line 4) | class Logger {
class Bar (line 8) | class Bar {
class ConstructorBase (line 12) | class ConstructorBase {
method constructor (line 13) | constructor(@Inject() readonly logger: Logger) {
class FooConstructor (line 18) | class FooConstructor extends ConstructorBase {
method constructor (line 19) | constructor(@Inject() readonly bar: Bar) {
class FooConstructorLogger (line 25) | class FooConstructorLogger extends ConstructorBase {
method constructor (line 26) | constructor(@Inject() readonly bar: Bar, @Inject() readonly logger: Lo...
FILE: core/metadata/test/fixtures/modules/extends-module/Base.ts
class Logger (line 4) | class Logger {
class Base (line 8) | class Base {
class Foo (line 14) | class Foo extends Base {
FILE: core/metadata/test/fixtures/modules/incompatible-proto-inject/test.ts
class Logger (line 4) | class Logger {
class Base (line 8) | class Base {
FILE: core/metadata/test/fixtures/modules/invalid-multimodule/invalidService.ts
class InvalidateService (line 6) | class InvalidateService {
FILE: core/metadata/test/fixtures/modules/invalid-multimodule/invalidService2.ts
class InvalidateService (line 6) | class InvalidateService {
FILE: core/metadata/test/fixtures/modules/invalid-multimodule/test.ts
class testService (line 4) | class testService {
FILE: core/metadata/test/fixtures/modules/invalidate-module/InvalidateService.ts
type PersistenceService (line 3) | interface PersistenceService {
class InvalidateService (line 7) | class InvalidateService {
FILE: core/metadata/test/fixtures/modules/load-unit/AppRepo.ts
type App (line 4) | interface App {
class AppRepo (line 9) | class AppRepo {
method findAppByName (line 10) | async findAppByName(): Promise<App> {
FILE: core/metadata/test/fixtures/modules/load-unit/SprintRepo.ts
class SprintRepo (line 4) | class SprintRepo {
method save (line 5) | async save() {
FILE: core/metadata/test/fixtures/modules/load-unit/UserRepo.ts
class UserRepo (line 4) | class UserRepo {
FILE: core/metadata/test/fixtures/modules/multi-callback-instance-module/MultiInstance.ts
constant FOO_ATTRIBUTE (line 9) | const FOO_ATTRIBUTE = Symbol.for('FOO_ATTRIBUTE');
method getObjects (line 14) | getObjects(ctx: MultiInstancePrototypeGetObjectsContext) {
class FooDynamicLogger (line 27) | class FooDynamicLogger {
FILE: core/metadata/test/fixtures/modules/multi-instance-module/MultiInstance.ts
constant FOO_ATTRIBUTE (line 4) | const FOO_ATTRIBUTE = Symbol.for('FOO_ATTRIBUTE');
class FooLogger (line 23) | class FooLogger {
FILE: core/metadata/test/fixtures/modules/optional-inject-module/OptionalInjectService.ts
type PersistenceService (line 3) | interface PersistenceService {
class OptionalInjectService (line 7) | class OptionalInjectService {
FILE: core/metadata/test/fixtures/modules/recursive-load-unit/AppRepo.ts
type App (line 5) | interface App {
class AppRepo (line 10) | class AppRepo {
method findAppByName (line 14) | async findAppByName(): Promise<App> {
FILE: core/metadata/test/fixtures/modules/recursive-load-unit/SprintRepo.ts
class SprintRepo (line 5) | class SprintRepo {
method save (line 9) | async save() {
FILE: core/metadata/test/fixtures/modules/recursive-load-unit/UserRepo.ts
class UserRepo (line 5) | class UserRepo {
FILE: core/metadata/test/fixtures/modules/same-name-object/AppCache.ts
type AppCache (line 1) | interface AppCache {
FILE: core/metadata/test/fixtures/modules/same-name-object/ContextAppCache.ts
class AppCache (line 4) | class AppCache {
method getCount (line 7) | async getCount(): Promise<number> {
FILE: core/metadata/test/fixtures/modules/same-name-object/CountService.ts
class CountService (line 5) | class CountService {
method getCount (line 9) | async getCount(): Promise<number> {
class SingletonCountService (line 15) | class SingletonCountService {
method getCount (line 19) | async getCount(): Promise<number> {
FILE: core/metadata/test/fixtures/modules/same-name-object/SingletonAppCache.ts
class AppCache (line 4) | class AppCache {
method getCount (line 7) | async getCount(): Promise<number> {
FILE: core/orm-decorator/src/builder/AttributeMetaBuilder.ts
class AttributeMetaBuilder (line 6) | class AttributeMetaBuilder {
method constructor (line 9) | constructor(clazz: EggProtoImplClass) {
method build (line 13) | build(): Array<AttributeMeta> {
method buildAttributeMeta (line 26) | private buildAttributeMeta(propertyName: string, attributeInfo: ModelA...
FILE: core/orm-decorator/src/builder/IndexMetaBuilder.ts
class IndexMetaBuilder (line 7) | class IndexMetaBuilder {
method constructor (line 11) | constructor(clazz: EggProtoImplClass, attributes: Array<AttributeMeta>) {
method build (line 16) | build(): Array<IndexMeta> {
method buildIndexMeta (line 21) | private buildIndexMeta(indexInfo: ModelIndexInfo): IndexMeta {
FILE: core/orm-decorator/src/builder/ModelMetaBuilder.ts
class ModelMetaBuilder (line 8) | class ModelMetaBuilder {
method constructor (line 11) | constructor(clazz: EggProtoImplClass) {
method build (line 15) | build(): ModelMetadata {
FILE: core/orm-decorator/src/decorator/Attribute.ts
function Attribute (line 5) | function Attribute(dataType: string, options?: AttributeOptions) {
FILE: core/orm-decorator/src/decorator/DataSource.ts
function DataSource (line 4) | function DataSource(dataSource: string) {
FILE: core/orm-decorator/src/decorator/Index.ts
function Index (line 4) | function Index(fields: string[], params?: IndexOptions) {
FILE: core/orm-decorator/src/decorator/Model.ts
function Model (line 6) | function Model(param?: ModelParams) {
FILE: core/orm-decorator/src/model/AttributeMeta.ts
class AttributeMeta (line 1) | class AttributeMeta {
method constructor (line 10) | constructor(
FILE: core/orm-decorator/src/model/IndexMeta.ts
class IndexMeta (line 1) | class IndexMeta {
method constructor (line 7) | constructor(
FILE: core/orm-decorator/src/model/ModelMetadata.ts
class ModelMetadata (line 4) | class ModelMetadata {
method constructor (line 10) | constructor(dataSource: string | undefined, tableName: string, attribu...
FILE: core/orm-decorator/src/util/ModelInfoUtil.ts
type ModelAttributeMap (line 17) | type ModelAttributeMap = Map<string, ModelAttributeInfo>;
class ModelInfoUtil (line 19) | class ModelInfoUtil {
method setIsModel (line 20) | static setIsModel(isModel: boolean, clazz: EggProtoImplClass) {
method getIsModel (line 24) | static getIsModel(clazz: EggProtoImplClass): boolean {
method setDataSource (line 28) | static setDataSource(dataSource: string, clazz: EggProtoImplClass) {
method getDataSource (line 32) | static getDataSource(clazz: EggProtoImplClass): string | undefined {
method setTableName (line 36) | static setTableName(tableName: string, clazz: EggProtoImplClass) {
method getTableName (line 40) | static getTableName(clazz: EggProtoImplClass): string | undefined {
method addModelIndex (line 44) | static addModelIndex(fields: string[], options: IndexOptions | undefin...
method getModelIndices (line 52) | static getModelIndices(clazz: EggProtoImplClass): Array<ModelIndexInfo> {
method addModelAttribute (line 56) | static addModelAttribute(dataType: string, options: AttributeOptions |...
method getModelAttributes (line 64) | static getModelAttributes(clazz: EggProtoImplClass): ModelAttributeMap...
FILE: core/orm-decorator/src/util/ModelMetadataUtil.ts
constant MODEL_METADATA (line 5) | const MODEL_METADATA = Symbol.for('EggPrototype#model#metadata');
class ModelMetadataUtil (line 7) | class ModelMetadataUtil {
method setModelMetadata (line 8) | static setModelMetadata(clazz: EggProtoImplClass, metaData: ModelMetad...
method getModelMetadata (line 12) | static getModelMetadata(clazz): ModelMetadata | undefined {
FILE: core/orm-decorator/src/util/NameUtil.ts
class NameUtil (line 4) | class NameUtil {
method getTableName (line 9) | static getTableName(modelName: string): string {
method getAttributeName (line 18) | static getAttributeName(propertyName: string): string {
method getIndexName (line 29) | static getIndexName(fields: string[], options?: { unique?: boolean }):...
FILE: core/orm-decorator/test/fixtures/AttributeModel.ts
class AttributeModel (line 5) | class AttributeModel {
FILE: core/orm-decorator/test/fixtures/DefaultAttributeModel.ts
class DefaultAttributeModel (line 5) | class DefaultAttributeModel {
FILE: core/orm-decorator/test/fixtures/DefaultIndexModel.ts
class DefaultIndexModel (line 7) | class DefaultIndexModel {
FILE: core/orm-decorator/test/fixtures/Foo.ts
class Foo (line 13) | class Foo {
FILE: core/orm-decorator/test/fixtures/IndexModel.ts
class IndexModel (line 11) | class IndexModel {
FILE: core/orm-decorator/test/fixtures/InvalidateIndexModel.ts
class InvalidateIndexModel (line 7) | class InvalidateIndexModel {
FILE: core/runtime/src/factory/EggContainerFactory.ts
class EggContainerFactory (line 18) | class EggContainerFactory {
method registerContainerGetMethod (line 21) | static registerContainerGetMethod(initType: ObjectInitTypeLike, method...
method getContainer (line 25) | static getContainer(proto: EggPrototype): EggContainer<LifecycleContex...
method getOrCreateEggObject (line 38) | static async getOrCreateEggObject(proto: EggPrototype, name?: EggObjec...
method getOrCreateEggObjectFromClazz (line 55) | static async getOrCreateEggObjectFromClazz(clazz: EggProtoImplClass, n...
method getOrCreateEggObjectFromName (line 75) | static async getOrCreateEggObjectFromName(name: EggObjectName, qualifi...
method getEggObject (line 83) | static getEggObject(proto: EggPrototype, name?: EggObjectName): EggObj...
FILE: core/runtime/src/factory/EggObjectFactory.ts
type EggObjectPair (line 14) | interface EggObjectPair {
class EggObjectFactory (line 19) | class EggObjectFactory {
method registerEggObjectCreateMethod (line 23) | public static registerEggObjectCreateMethod(protoClass: EggPrototypeCl...
method getEggObjectCreateMethod (line 27) | public static getEggObjectCreateMethod(protoClass: EggPrototypeClass):...
method createObject (line 34) | static async createObject(name: EggObjectName, proto: EggPrototype): P...
method destroyObject (line 51) | static async destroyObject(obj: EggObject): Promise<void> {
FILE: core/runtime/src/factory/LoadUnitInstanceFactory.ts
type LoadUnitInstanceCreator (line 13) | type LoadUnitInstanceCreator = (ctx: LoadUnitInstanceLifecycleContext) =...
type LoadUnitInstancePair (line 14) | interface LoadUnitInstancePair {
class LoadUnitInstanceFactory (line 19) | class LoadUnitInstanceFactory {
method registerLoadUnitInstanceClass (line 23) | static registerLoadUnitInstanceClass(type: EggLoadUnitTypeLike, creato...
method createLoadUnitInstance (line 27) | static async createLoadUnitInstance(loadUnit: LoadUnit): Promise<LoadU...
method getLoadUnitInstance (line 49) | static getLoadUnitInstance(loadUnit: LoadUnit): LoadUnitInstance | und...
method destroyLoadUnitInstance (line 54) | static async destroyLoadUnitInstance(loadUnitInstance: LoadUnitInstanc...
method getLoadUnitInstanceByProto (line 64) | static getLoadUnitInstanceByProto(proto: EggPrototype): LoadUnitInstan...
FILE: core/runtime/src/impl/ContextInitiator.ts
constant CONTEXT_INITIATOR (line 6) | const CONTEXT_INITIATOR = Symbol('EggContext#ContextInitiator');
class ContextInitiator (line 8) | class ContextInitiator {
method constructor (line 13) | constructor(eggContext: EggRuntimeContext) {
method init (line 20) | async init(obj: EggObject) {
method createContextInitiator (line 43) | static createContextInitiator(context: EggRuntimeContext): ContextInit...
FILE: core/runtime/src/impl/ContextObjectGraph.ts
class InjectProtoHolder (line 4) | class InjectProtoHolder {
method addInjectProto (line 8) | addInjectProto(injectObjectProto: InjectObjectProto) {
method dumpProtos (line 17) | dumpProtos(): Array<InjectObjectProto> {
class ContextObjectGraph (line 22) | class ContextObjectGraph {
method getContextProto (line 25) | static getContextProto(proto: EggPrototype): InjectObjectProto[] {
method doGetContextProto (line 36) | private static doGetContextProto(proto: EggPrototype, holder: InjectPr...
FILE: core/runtime/src/impl/EggAlwaysNewObjectContainer.ts
class EggAlwaysNewObjectContainer (line 6) | class EggAlwaysNewObjectContainer implements EggContainer<LifecycleConte...
method constructor (line 10) | constructor() {
method addProtoToCreate (line 14) | addProtoToCreate() {
method deleteProtoToCreate (line 18) | deleteProtoToCreate() {
method iterateProtoToCreate (line 22) | iterateProtoToCreate(): IterableIterator<[ EggObjectName, EggPrototype...
method getEggObject (line 26) | getEggObject(): EggObject {
method getOrCreateEggObject (line 30) | async getOrCreateEggObject(name: string, proto: EggPrototype): Promise...
method destroy (line 34) | async destroy(): Promise<void> {
method init (line 38) | async init(): Promise<void> {
FILE: core/runtime/src/impl/EggObjectImpl.ts
class EggObjectImpl (line 16) | class EggObjectImpl implements EggObject {
method constructor (line 24) | constructor(name: EggObjectName, proto: EggPrototype) {
method initWithInjectProperty (line 31) | async initWithInjectProperty(ctx: EggObjectLifeCycleContext) {
method initWithInjectConstructor (line 88) | async initWithInjectConstructor(ctx: EggObjectLifeCycleContext) {
method init (line 161) | async init(ctx: EggObjectLifeCycleContext) {
method destroy (line 169) | async destroy(ctx: EggObjectLifeCycleContext) {
method injectProperty (line 191) | injectProperty(name: EggObjectName, descriptor: PropertyDescriptor) {
method obj (line 195) | get obj() {
method isReady (line 199) | get isReady() {
method createObject (line 203) | static async createObject(name: EggObjectName, proto: EggPrototype, li...
FILE: core/runtime/src/impl/EggObjectUtil.ts
class EggObjectUtil (line 4) | class EggObjectUtil {
method eggObjectGetProperty (line 5) | static eggObjectGetProperty(eggObject: EggObject): PropertyDescriptor {
method contextEggObjectGetProperty (line 15) | static contextEggObjectGetProperty(proto: EggPrototype, objName: Prope...
method eggObjectProxy (line 30) | static eggObjectProxy(eggObject: EggObject): PropertyDescriptor {
method contextEggObjectProxy (line 102) | static contextEggObjectProxy(proto: EggPrototype, objName: PropertyKey...
FILE: core/runtime/src/impl/ModuleLoadUnitInstance.ts
class ModuleLoadUnitInstance (line 18) | class ModuleLoadUnitInstance implements LoadUnitInstance {
method constructor (line 26) | constructor(loadUnit: LoadUnit) {
method iterateProtoToCreate (line 40) | iterateProtoToCreate(): IterableIterator<[ EggObjectName, EggPrototype...
method addProtoToCreate (line 44) | addProtoToCreate(name: string, proto: EggPrototype) {
method deleteProtoToCreate (line 48) | deleteProtoToCreate(name: string) {
method init (line 55) | async init(ctx: LoadUnitInstanceLifecycleContext): Promise<void> {
method destroy (line 63) | async destroy(): Promise<void> {
method getOrCreateEggObject (line 76) | async getOrCreateEggObject(name: EggPrototypeName, proto: EggPrototype...
method getEggObject (line 96) | getEggObject(name: EggPrototypeName, proto: EggPrototype): EggObject {
method createModuleLoadUnitInstance (line 105) | static createModuleLoadUnitInstance(ctx: LoadUnitInstanceLifecycleCont...
FILE: core/runtime/src/model/AbstractEggContext.ts
method addProtoToCreate (line 19) | addProtoToCreate(name: string, proto: EggPrototype) {
method deleteProtoToCreate (line 23) | deleteProtoToCreate(name) {
method destroy (line 27) | async destroy(ctx: EggContextLifecycleContext): Promise<void> {
method get (line 44) | get(key: string | symbol): any | undefined {
method getEggObject (line 48) | getEggObject(name: EggPrototypeName, proto: EggPrototype): EggObject {
method getOrCreateEggObject (line 60) | async getOrCreateEggObject(name: EggPrototypeName, proto: EggPrototype):...
method init (line 80) | async init(ctx: EggContextLifecycleContext): Promise<void> {
method iterateProtoToCreate (line 88) | iterateProtoToCreate(): IterableIterator<[ EggObjectName, EggPrototype ]> {
method set (line 92) | set(key: string | symbol, val: any) {
FILE: core/runtime/src/model/ContextHandler.ts
type runInContextCallback (line 4) | type runInContextCallback<R = any> = (context: EggRuntimeContext, fn: ()...
class ContextHandler (line 6) | class ContextHandler {
method getContext (line 10) | static getContext(): EggRuntimeContext | undefined {
method run (line 15) | static run<R = any>(context: EggRuntimeContext, fn: () => Promise<R>):...
FILE: core/runtime/test/fixtures/EggContextStorage.ts
class EggContextStorage (line 5) | class EggContextStorage {
method register (line 8) | static register() {
FILE: core/runtime/test/fixtures/EggTestContext.ts
constant EGG_CTX (line 4) | const EGG_CTX = Symbol('TEgg#context');
type Tracer (line 6) | interface Tracer {
class EggTestContext (line 10) | class EggTestContext extends AbstractEggContext {
method constructor (line 14) | constructor() {
FILE: core/runtime/test/fixtures/modules/extends-module/Base.ts
class Logger (line 4) | class Logger {
class Base (line 8) | class Base {
class Foo (line 14) | class Foo extends Base {
class Bar (line 19) | class Bar extends Base {
FILE: core/runtime/test/fixtures/modules/init-type-qualifier-module/Cache.ts
type CacheValue (line 1) | interface CacheValue {
type ICache (line 6) | interface ICache {
FILE: core/runtime/test/fixtures/modules/init-type-qualifier-module/CacheService.ts
class CacheService (line 6) | class CacheService {
method setSingletonCache (line 15) | setSingletonCache(key: string, val: string) {
method getSingletonCache (line 19) | getSingletonCache(key: string): CacheValue {
method setContextCache (line 23) | setContextCache(key: string, val: string) {
method getContextCache (line 27) | getContextCache(key: string): CacheValue {
FILE: core/runtime/test/fixtures/modules/init-type-qualifier-module/ContextCache.ts
class ContextCache (line 7) | class ContextCache implements ICache {
method get (line 10) | get(key: string): CacheValue {
method set (line 18) | set(key: string, val: string) {
FILE: core/runtime/test/fixtures/modules/init-type-qualifier-module/SingletonCache.ts
class SingletonCache (line 7) | class SingletonCache implements ICache {
method get (line 10) | get(key: string): CacheValue {
method set (line 18) | set(key: string, val: string) {
FILE: core/runtime/test/fixtures/modules/inject-constructor-context-to-singleton/object.ts
class ContextFooDepth2 (line 7) | class ContextFooDepth2 {
method hello (line 8) | async hello() {
class SingletonConstructorBarDepth3 (line 16) | class SingletonConstructorBarDepth3 {
method constructor (line 17) | constructor(@Inject() readonly contextFooDepth2: ContextFooDepth2) {
method hello (line 20) | async hello() {
class SingletonBarConstructorDepth2 (line 28) | class SingletonBarConstructorDepth2 {
method constructor (line 29) | constructor(@Inject() readonly singletonConstructorBarDepth3: Singleto...
method hello (line 32) | async hello() {
class ContextConstructorFoo (line 41) | class ContextConstructorFoo {
method constructor (line 42) | constructor(@Inject() readonly singletonBarConstructorDepth2: Singleto...
method hello (line 45) | async hello() {
class SingletonConstructorBar (line 53) | class SingletonConstructorBar {
method constructor (line 54) | constructor(@Inject() readonly contextConstructorFoo: ContextConstruct...
method hello (line 57) | async hello() {
FILE: core/runtime/test/fixtures/modules/inject-context-to-singleton/object.ts
class ContextFooDepth2 (line 7) | class ContextFooDepth2 {
method hello (line 8) | async hello() {
class SingletonBarDepth3 (line 16) | class SingletonBarDepth3 {
method hello (line 20) | async hello() {
class SingletonBarDepth2 (line 28) | class SingletonBarDepth2 {
method hello (line 32) | async hello() {
class ContextFoo (line 41) | class ContextFoo {
method hello (line 45) | async hello() {
class SingletonBar (line 53) | class SingletonBar {
method hello (line 57) | async hello() {
FILE: core/runtime/test/fixtures/modules/lifecycle-hook/object.ts
class Foo (line 15) | class Foo implements EggObjectLifecycle {
method getLifecycleCalled (line 18) | getLifecycleCalled() {
method constructor (line 22) | constructor() {
method postConstruct (line 26) | async postConstruct(): Promise<void> {
method preInject (line 30) | async preInject(): Promise<void> {
method postInject (line 34) | async postInject(): Promise<void> {
method init (line 38) | async init(): Promise<void> {
method preDestroy (line 42) | async preDestroy(): Promise<void> {
method destroy (line 46) | async destroy(): Promise<void> {
class Bar (line 54) | class Bar {
method getLifecycleCalled (line 57) | getLifecycleCalled() {
method constructor (line 61) | constructor() {
method _postConstruct (line 66) | protected async _postConstruct() {
method _preInject (line 71) | protected async _preInject() {
method _postInject (line 76) | protected async _postInject() {
method init (line 80) | protected async init() {
method _init (line 85) | protected async _init() {
method _preDestroy (line 90) | protected async _preDestroy() {
method _destroy (line 95) | protected async _destroy() {
FILE: core/runtime/test/fixtures/modules/module-for-load-unit-instance/AppCache.ts
class AppCache (line 4) | class AppCache {
method getCount (line 7) | async getCount(): Promise<number> {
FILE: core/runtime/test/fixtures/modules/module-for-load-unit-instance/CountController.ts
type CountResult (line 6) | interface CountResult {
class CountController (line 16) | class CountController {
method getCount (line 23) | async getCount(): Promise<CountResult> {
FILE: core/runtime/test/fixtures/modules/module-for-load-unit-instance/CountService.ts
class CountService (line 6) | class CountService {
method getCount (line 13) | async getCount(): Promise<number> {
method getTempCount (line 17) | async getTempCount(): Promise<number> {
FILE: core/runtime/test/fixtures/modules/module-for-load-unit-instance/TempObj.ts
class TempObj (line 7) | class TempObj {
method getCount (line 10) | async getCount(): Promise<number> {
FILE: core/runtime/test/fixtures/modules/multi-instance-module/MultiInstance.ts
constant FOO_ATTRIBUTE (line 5) | const FOO_ATTRIBUTE = Symbol.for('FOO_ATTRIBUTE');
class FooLogger (line 24) | class FooLogger {
method init (line 29) | async init(ctx: EggObjectLifeCycleContext, obj: EggObject) {
FILE: core/runtime/test/fixtures/modules/multi-instance-module/MultiInstanceConstructor.ts
constant FOO_ATTRIBUTE (line 9) | const FOO_ATTRIBUTE = Symbol.for('FOO_ATTRIBUTE');
class Bar (line 12) | class Bar {
class FooLoggerConstructor (line 33) | class FooLoggerConstructor {
method constructor (line 37) | constructor(@Inject() bar: Bar, @MultiInstanceInfo([ FOO_ATTRIBUTE ]) ...
FILE: core/runtime/test/fixtures/modules/multi-module/multi-module-common/model/App.ts
class App (line 1) | class App {
FILE: core/runtime/test/fixtures/modules/multi-module/multi-module-repo/AppRepo.ts
class AppRepo (line 9) | class AppRepo {
method findApp (line 13) | public async findApp(name): Promise<App | null> {
method insertApp (line 21) | public async insertApp(app: App): Promise<void> {
FILE: core/runtime/test/fixtures/modules/multi-module/multi-module-repo/PersistenceService.ts
class PersistenceService (line 8) | class PersistenceService {
method set (line 11) | public set(key: string, val: string) {
method get (line 15) | public get(key: string): string | undefined {
FILE: core/runtime/test/fixtures/modules/multi-module/multi-module-service/AppService.ts
class AppService (line 6) | class AppService {
method findApp (line 10) | findApp(name: string): Promise<App | null> {
method save (line 14) | save(app: App) {
FILE: core/runtime/test/util.ts
class TestUtil (line 8) | class TestUtil {
method createLoadUnitInstance (line 9) | static async createLoadUnitInstance(modulePath: string, buildGraph = t...
method destroyLoadUnitInstance (line 19) | static async destroyLoadUnitInstance(loadUnitInstance: LoadUnitInstanc...
FILE: core/schedule-decorator/src/builder/ScheduleMetaBuilder.ts
constant DEFAULT_SCHEDULE_OPTIONS (line 5) | const DEFAULT_SCHEDULE_OPTIONS: ScheduleOptions = {
class ScheduleMetaBuilder (line 11) | class ScheduleMetaBuilder {
method constructor (line 14) | constructor(clazz: EggProtoImplClass) {
method build (line 18) | build(): ScheduleMetadata<object> {
FILE: core/schedule-decorator/src/decorator/Schedule.ts
function Schedule (line 7) | function Schedule<T>(param: ScheduleParams<T>, options?: ScheduleOptions) {
FILE: core/schedule-decorator/src/model/ScheduleMetadata.ts
class ScheduleMetadata (line 3) | class ScheduleMetadata<T> {
method constructor (line 10) | constructor(type: ScheduleTypeLike, data: T, immediate: boolean, disab...
method shouldRegister (line 18) | shouldRegister(env: string): boolean {
FILE: core/schedule-decorator/src/util/ScheduleInfoUtil.ts
class ScheduleInfoUtil (line 5) | class ScheduleInfoUtil {
method isSchedule (line 6) | static isSchedule(clazz: EggProtoImplClass): boolean {
method setIsSchedule (line 10) | static setIsSchedule(isSchedule: boolean, clazz: EggProtoImplClass) {
method setScheduleParams (line 14) | static setScheduleParams<T>(scheduleParams: ScheduleParams<T>, clazz: ...
method setScheduleOptions (line 18) | static setScheduleOptions(scheduleParams: ScheduleOptions, clazz: EggP...
method getScheduleOptions (line 22) | static getScheduleOptions(clazz: EggProtoImplClass): ScheduleOptions |...
method getScheduleParams (line 26) | static getScheduleParams(clazz: EggProtoImplClass): ScheduleParams<obj...
FILE: core/schedule-decorator/src/util/ScheduleMetadataUtil.ts
class ScheduleMetadataUtil (line 6) | class ScheduleMetadataUtil {
method setScheduleMetadata (line 7) | static setScheduleMetadata(clazz: EggProtoImplClass, metaData: Schedul...
method getScheduleMetadata (line 11) | static getScheduleMetadata(clazz): ScheduleMetadata<object> | undefined {
FILE: core/standalone-decorator/src/decorator/Runner.ts
function Runner (line 4) | function Runner<T>() {
FILE: core/standalone-decorator/src/event/EventHandler.ts
constant EVENT_HANDLER_ATTRIBUTE (line 8) | const EVENT_HANDLER_ATTRIBUTE = Symbol('EVENT_HANDLER_ATTRIBUTE');
type EventType (line 10) | type EventType = Record<string, string>;
type FetchEventLike (line 22) | interface FetchEventLike {
FILE: core/standalone-decorator/src/typing.ts
type MainRunner (line 1) | interface MainRunner<T = void> {
type MainRunnerClass (line 5) | type MainRunnerClass<T = void> = new() => MainRunner<T>;
FILE: core/standalone-decorator/src/util/StandaloneUtil.ts
class StandaloneUtil (line 3) | class StandaloneUtil {
method setMainRunner (line 6) | static setMainRunner(runnerClass: MainRunnerClass) {
method getMainRunner (line 10) | static getMainRunner(): MainRunnerClass | undefined {
FILE: core/test-util/CoreTestHelper.ts
class EggContextStorage (line 20) | class EggContextStorage {
method register (line 23) | static register() {
class CoreTestHelper (line 33) | class CoreTestHelper {
method getLoadUnitInstance (line 36) | static async getLoadUnitInstance(moduleDir: string): Promise<LoadUnitI...
method prepareModules (line 41) | static async prepareModules(moduleDirs: string[], hooks?: GlobalGraphB...
method getObject (line 50) | static async getObject<T>(clazz: EggProtoImplClass<T>): Promise<T> {
FILE: core/test-util/EggTestContext.ts
constant EGG_CTX (line 5) | const EGG_CTX = Symbol('TEgg#context');
type Tracer (line 7) | interface Tracer {
class EggTestContext (line 11) | class EggTestContext extends AbstractEggContext {
method constructor (line 15) | constructor() {
method mockContext (line 29) | static async mockContext<R>(cb: (ctx: EggTestContext) => Promise<R>): ...
FILE: core/test-util/LoaderUtil.ts
class LoaderUtil (line 6) | class LoaderUtil {
method loadFile (line 7) | static loadFile(filePath: string): EggProtoImplClass | null {
method buildModuleNode (line 22) | static buildModuleNode(modulePath: string, clazzList: EggProtoImplClas...
method buildGlobalGraph (line 37) | static buildGlobalGraph(modulePaths: string[], hooks?: GlobalGraphBuil...
FILE: core/test-util/StandaloneTestUtil.ts
type FetchEventListener (line 6) | type FetchEventListener = (event: FetchEvent) => Promise<Response>;
type StartHTTPServerOptions (line 8) | interface StartHTTPServerOptions extends ServerOptions {
class StandaloneTestUtil (line 12) | class StandaloneTestUtil {
method skipOnNode (line 13) | static skipOnNode(minVersion = 18) {
method #buildRequest (line 18) | static #buildRequest(req: IncomingMessage): Request {
method #createHTTPServerListener (line 45) | static #createHTTPServerListener(listener: FetchEventListener) {
method startHTTPServer (line 73) | static startHTTPServer(host: string, port: number, { listener, ...opti...
FILE: core/test-util/TestLoader.ts
class TestLoader (line 8) | class TestLoader implements Loader {
method constructor (line 11) | constructor(moduleDir: string) {
method load (line 15) | load(): EggProtoImplClass[] {
FILE: core/transaction-decorator/src/builder/TransactionMetaBuilder.ts
class TransactionMetaBuilder (line 4) | class TransactionMetaBuilder {
method constructor (line 7) | constructor(clazz: EggProtoImplClass) {
method build (line 11) | build(): TransactionMetadata[] {
FILE: core/transaction-decorator/src/decorator/Transactional.ts
function Transactional (line 5) | function Transactional(params?: TransactionalParams) {
FILE: core/transaction-decorator/src/util/TransactionMetadataUtil.ts
class TransactionMetadataUtil (line 5) | class TransactionMetadataUtil {
method setIsTransactionClazz (line 7) | static setIsTransactionClazz(clazz: EggProtoImplClass) {
method isTransactionClazz (line 11) | static isTransactionClazz(clazz: EggProtoImplClass): boolean {
method addTransactionMetadata (line 15) | static addTransactionMetadata(clazz: EggProtoImplClass, data: Transact...
method getTransactionMetadataList (line 20) | static getTransactionMetadataList(clazz: EggProtoImplClass): Transacti...
FILE: core/transaction-decorator/test/fixtures/transaction.ts
class Foo (line 4) | class Foo {
method defaultPropagation (line 7) | async defaultPropagation(msg) {
method requiredPropagation (line 14) | async requiredPropagation(msg) {
method alwaysNewPropagation (line 19) | async alwaysNewPropagation(msg) {
class Bar (line 25) | class Bar {
method foo (line 28) | async foo(msg) {
method bar (line 33) | async bar(msg) {
class FooBar (line 39) | class FooBar {
method foo (line 42) | async foo(msg) {
class BarFoo (line 48) | class BarFoo {
method foo (line 50) | async foo(msg) {
FILE: core/types/agent-runtime/AgentMessage.ts
type TextInputContentPart (line 3) | interface TextInputContentPart {
type ToolUseInputContentPart (line 8) | interface ToolUseInputContentPart {
type ToolResultInputContentPart (line 15) | interface ToolResultInputContentPart {
type GenericInputContentPart (line 22) | interface GenericInputContentPart {
type InputContentPart (line 27) | type InputContentPart =
type InputMessage (line 35) | interface InputMessage {
type SDKSystemMessage (line 46) | interface SDKSystemMessage {
type SDKStreamEvent (line 53) | interface SDKStreamEvent {
type SDKUserMessage (line 60) | interface SDKUserMessage {
type SDKAssistantMessage (line 66) | interface SDKAssistantMessage {
type SDKResultMessage (line 72) | interface SDKResultMessage {
type SDKGenericMessage (line 85) | interface SDKGenericMessage {
type AgentMessage (line 90) | type AgentMessage =
FILE: core/types/agent-runtime/AgentRuntime.ts
type AgentErrorCode (line 9) | type AgentErrorCode = (typeof AgentErrorCode)[keyof typeof AgentErrorCode];
type ThreadObject (line 13) | interface ThreadObject {
type ThreadObjectWithMessages (line 20) | interface ThreadObjectWithMessages extends ThreadObject {
type RunObject (line 26) | interface RunObject {
type CreateRunInput (line 44) | interface CreateRunInput {
type StreamEvent (line 61) | interface StreamEvent {
type GetThreadOptions (line 70) | interface GetThreadOptions {
FILE: core/types/agent-runtime/AgentStore.ts
type AgentObjectType (line 10) | type AgentObjectType = (typeof AgentObjectType)[keyof typeof AgentObject...
type RunStatus (line 23) | type RunStatus = (typeof RunStatus)[keyof typeof RunStatus];
type AgentRunConfig (line 27) | interface AgentRunConfig {
type ThreadRecord (line 34) | interface ThreadRecord {
type RunRecord (line 48) | interface RunRecord {
type AgentStore (line 67) | interface AgentStore {
FILE: core/types/agent-runtime/ObjectStorageClient.ts
type ObjectStorageClient (line 5) | interface ObjectStorageClient {
FILE: core/types/agent-runtime/errors.ts
class AgentNotFoundError (line 6) | class AgentNotFoundError extends Error {
method constructor (line 9) | constructor(message: string) {
class AgentConflictError (line 19) | class AgentConflictError extends Error {
method constructor (line 22) | constructor(message: string) {
class InvalidRunStateTransitionError (line 32) | class InvalidRunStateTransitionError extends Error {
method constructor (line 35) | constructor(from: string, to: string) {
class AgentTimeoutError (line 48) | class AgentTimeoutError extends Error {
method constructor (line 51) | constructor(message: string) {
FILE: core/types/aop/Advice.ts
type AdviceContext (line 1) | interface AdviceContext<T = object, K = any> {
type IAdvice (line 15) | interface IAdvice<T = object, K = any> {
FILE: core/types/aop/Aspect.ts
type AdviceInfo (line 4) | interface AdviceInfo {
type AspectAdvice (line 10) | interface AspectAdvice {
constant ASPECT_LIST (line 16) | const ASPECT_LIST = Symbol.for('EggPrototype#aspectList');
FILE: core/types/aop/Crosscut.ts
type CrosscutOptions (line 5) | interface CrosscutOptions {
type ClassCrosscutParam (line 12) | interface ClassCrosscutParam {
type NameCrosscutParam (line 18) | interface NameCrosscutParam {
type CustomCrosscutParam (line 25) | interface CustomCrosscutParam {
type CrosscutParam (line 30) | type CrosscutParam = ClassCrosscutParam | NameCrosscutParam | CustomCros...
constant CROSSCUT_INFO_LIST (line 32) | const CROSSCUT_INFO_LIST = Symbol.for('EggPrototype#crosscutInfoList');
constant IS_CROSSCUT_ADVICE (line 33) | const IS_CROSSCUT_ADVICE = Symbol.for('EggPrototype#isCrosscutAdvice');
type CrosscutInfo (line 35) | interface CrosscutInfo {
FILE: core/types/aop/Pointcut.ts
type PointcutOptions (line 3) | interface PointcutOptions<K = any> {
type PointcutType (line 9) | enum PointcutType {
type PointcutInfo (line 24) | interface PointcutInfo {
type CustomPointcutCallback (line 30) | type CustomPointcutCallback = (clazz: EggProtoImplClass, method: Propert...
constant POINTCUT_ADVICE_INFO_LIAR (line 32) | const POINTCUT_ADVICE_INFO_LIAR = Symbol.for('EggPrototype#pointcutAdvic...
FILE: core/types/common/Graph.ts
type GraphNodeObj (line 1) | interface GraphNodeObj {
FILE: core/types/common/Logger.ts
type Logger (line 1) | interface Logger {
FILE: core/types/common/ModuleConfig.ts
type ModuleReference (line 1) | interface ModuleReference {
type InlineModuleReferenceConfig (line 8) | interface InlineModuleReferenceConfig {
type NpmModuleReferenceConfig (line 13) | interface NpmModuleReferenceConfig {
type ModuleReferenceConfig (line 18) | type ModuleReferenceConfig = InlineModuleReferenceConfig | NpmModuleRefe...
type ModuleConfig (line 20) | interface ModuleConfig {
type ReadModuleReferenceOptions (line 23) | interface ReadModuleReferenceOptions {
type ModuleConfigHolder (line 31) | interface ModuleConfigHolder {
FILE: core/types/common/RuntimeConfig.ts
type EnvType (line 1) | type EnvType = 'local' | 'unittest' | 'prod' | string;
type RuntimeConfig (line 3) | interface RuntimeConfig {
FILE: core/types/controller-decorator/HTTPController.ts
type HTTPControllerParams (line 1) | interface HTTPControllerParams {
FILE: core/types/controller-decorator/HTTPMethod.ts
type HTTPMethodParams (line 3) | interface HTTPMethodParams {
FILE: core/types/controller-decorator/HTTPParam.ts
type HTTPQueryParams (line 1) | interface HTTPQueryParams {
type HTTPQueriesParams (line 5) | interface HTTPQueriesParams {
type HTTPParamParams (line 9) | interface HTTPParamParams {
FILE: core/types/controller-decorator/MCPController.ts
type MCPControllerParams (line 1) | interface MCPControllerParams {
FILE: core/types/controller-decorator/MCPPromptParams.ts
type PromptArgs (line 5) | type PromptArgs<T extends Parameters<McpServer['prompt']>['2']> = ShapeO...
type PromptExtra (line 6) | type PromptExtra = Parameters<Parameters<McpServer['prompt']>['3']>['1'];
type MCPPromptResponse (line 8) | type MCPPromptResponse = GetPromptResult;
type MCPPromptParams (line 10) | interface MCPPromptParams {
FILE: core/types/controller-decorator/MCPResourceParams.ts
type MCPResourceUriParams (line 4) | interface MCPResourceUriParams {
type MCPResourceTemplateParams (line 11) | interface MCPResourceTemplateParams {
type ResourceExtra (line 18) | type ResourceExtra = Parameters<Parameters<McpServer['resource']>['3']>[...
type ResourceVariables (line 19) | type ResourceVariables = Parameters<Parameters<McpServer['resource']>['3...
type MCPResourceParams (line 21) | type MCPResourceParams = MCPResourceUriParams | MCPResourceTemplateParams;
type MCPResourceResponse (line 23) | type MCPResourceResponse = ReadResourceResult;
FILE: core/types/controller-decorator/MCPToolParams.ts
type ToolArgs (line 5) | type ToolArgs<T extends Parameters<McpServer['tool']>['2']> = ShapeOutpu...
type ToolExtra (line 6) | type ToolExtra = Parameters<Parameters<McpServer['tool']>['4']>['1'];
type MCPToolResponse (line 8) | type MCPToolResponse = CallToolResult;
type MCPToolParams (line 10) | interface MCPToolParams {
FILE: core/types/controller-decorator/MetadataKey.ts
constant CONTROLLER_TYPE (line 1) | const CONTROLLER_TYPE = Symbol.for('EggPrototype#controllerType');
constant CONTROLLER_NAME (line 2) | const CONTROLLER_NAME = Symbol.for('EggPrototype#controllerName');
constant CONTROLLER_HOST (line 3) | const CONTROLLER_HOST = Symbol.for('EggPrototype#controllerHost');
constant CONTROLLER_MIDDLEWARES (line 4) | const CONTROLLER_MIDDLEWARES = Symbol.for('EggPrototype#controller#middl...
constant CONTROLLER_AOP_MIDDLEWARES (line 5) | const CONTROLLER_AOP_MIDDLEWARES = Symbol.for('EggPrototype#controller#a...
constant CONTROLLER_ACL (line 6) | const CONTROLLER_ACL = Symbol.for('EggPrototype#controller#acl');
constant CONTROLLER_TIMEOUT_METADATA (line 7) | const CONTROLLER_TIMEOUT_METADATA = Symbol.for('EggPrototype#controller#...
constant CONTROLLER_META_DATA (line 9) | const CONTROLLER_META_DATA = Symbol.for('EggPrototype#controller#metaDat...
constant CONTROLLER_HTTP_PATH (line 11) | const CONTROLLER_HTTP_PATH = Symbol.for('EggPrototype#controller#http#pa...
constant CONTROLLER_METHOD_METHOD_MAP (line 12) | const CONTROLLER_METHOD_METHOD_MAP = Symbol.for('EggPrototype#controller...
constant CONTROLLER_METHOD_PATH_MAP (line 13) | const CONTROLLER_METHOD_PATH_MAP = Symbol.for('EggPrototype#controller#m...
constant CONTROLLER_METHOD_PARAM_TYPE_MAP (line 14) | const CONTROLLER_METHOD_PARAM_TYPE_MAP = Symbol.for('EggPrototype#contro...
constant CONTROLLER_METHOD_PARAM_NAME_MAP (line 15) | const CONTROLLER_METHOD_PARAM_NAME_MAP = Symbol.for('EggPrototype#contro...
constant CONTROLLER_METHOD_PRIORITY (line 16) | const CONTROLLER_METHOD_PRIORITY = Symbol.for('EggPrototype#controller#m...
constant METHOD_CONTROLLER_TYPE_MAP (line 18) | const METHOD_CONTROLLER_TYPE_MAP = Symbol.for('EggPrototype#controller#m...
constant METHOD_CONTROLLER_HOST (line 19) | const METHOD_CONTROLLER_HOST = Symbol.for('EggPrototype#controller#mthod...
constant METHOD_CONTEXT_INDEX (line 20) | const METHOD_CONTEXT_INDEX = Symbol.for('EggPrototype#controller#method#...
constant METHOD_MIDDLEWARES (line 21) | const METHOD_MIDDLEWARES = Symbol.for('EggPrototype#method#middlewares');
constant METHOD_AOP_MIDDLEWARES (line 22) | const METHOD_AOP_MIDDLEWARES = Symbol.for('EggPrototype#method#aopMiddle...
constant METHOD_AOP_REGISTER_MAP (line 23) | const METHOD_AOP_REGISTER_MAP = Symbol.for('EggPrototype#method#aopMiddl...
constant METHOD_ACL (line 24) | const METHOD_ACL = Symbol.for('EggPrototype#method#acl');
constant METHOD_TIMEOUT_METADATA (line 25) | const METHOD_TIMEOUT_METADATA = Symbol.for('EggPrototype#method#timeout');
constant CONTROLLER_MCP_NAME (line 27) | const CONTROLLER_MCP_NAME = Symbol.for('EggPrototype#controller#mcp#name');
constant CONTROLLER_MCP_VERSION (line 28) | const CONTROLLER_MCP_VERSION = Symbol.for('EggPrototype#controller#mcp#v...
constant CONTROLLER_MCP_CONTROLLER_PARAMS_MAP (line 29) | const CONTROLLER_MCP_CONTROLLER_PARAMS_MAP = Symbol.for('EggPrototype#co...
constant CONTROLLER_MCP_RESOURCE_MAP (line 30) | const CONTROLLER_MCP_RESOURCE_MAP = Symbol.for('EggPrototype#controller#...
constant CONTROLLER_MCP_RESOURCE_PARAMS_MAP (line 31) | const CONTROLLER_MCP_RESOURCE_PARAMS_MAP = Symbol.for('EggPrototype#cont...
constant CONTROLLER_MCP_TOOL_MAP (line 32) | const CONTROLLER_MCP_TOOL_MAP = Symbol.for('EggPrototype#controller#mcp#...
constant CONTROLLER_MCP_TOOL_PARAMS_MAP (line 33) | const CONTROLLER_MCP_TOOL_PARAMS_MAP = Symbol.for('EggPrototype#controll...
constant CONTROLLER_MCP_TOOL_ARGS_INDEX (line 34) | const CONTROLLER_MCP_TOOL_ARGS_INDEX = Symbol.for('EggPrototype#controll...
constant CONTROLLER_MCP_EXTRA_INDEX (line 35) | const CONTROLLER_MCP_EXTRA_INDEX = Symbol.for('EggPrototype#controller#m...
constant CONTROLLER_MCP_PROMPT_MAP (line 36) | const CONTROLLER_MCP_PROMPT_MAP = Symbol.for('EggPrototype#controller#mc...
constant CONTROLLER_MCP_PROMPT_PARAMS_MAP (line 37) | const CONTROLLER_MCP_PROMPT_PARAMS_MAP = Symbol.for('EggPrototype#contro...
constant CONTROLLER_MCP_PROMPT_ARGS_INDEX (line 38) | const CONTROLLER_MCP_PROMPT_ARGS_INDEX = Symbol.for('EggPrototype#contro...
constant CONTROLLER_AGENT_CONTROLLER (line 40) | const CONTROLLER_AGENT_CONTROLLER = Symbol.for('EggPrototype#controller#...
constant CONTROLLER_AGENT_NOT_IMPLEMENTED (line 41) | const CONTROLLER_AGENT_NOT_IMPLEMENTED = Symbol.for('EggPrototype#contro...
constant CONTROLLER_AGENT_ENHANCED (line 42) | const CONTROLLER_AGENT_ENHANCED = Symbol.for('EggPrototype#controller#ag...
constant AGENT_CONTROLLER_PROTO_IMPL_TYPE (line 44) | const AGENT_CONTROLLER_PROTO_IMPL_TYPE = 'AGENT_CONTROLLER_PROTO';
FILE: core/types/controller-decorator/builder.ts
type ControllerMetaBuilder (line 4) | interface ControllerMetaBuilder {
type ControllerMetaBuilderCreator (line 8) | type ControllerMetaBuilderCreator = (clazz: EggProtoImplClass) => Contro...
FILE: core/types/controller-decorator/model/ControllerMetadata.ts
type ControllerMetadata (line 5) | interface ControllerMetadata {
FILE: core/types/controller-decorator/model/MethodMeta.ts
type MethodMeta (line 3) | interface MethodMeta {
FILE: core/types/controller-decorator/model/types.ts
type EggContext (line 3) | type EggContext = Context;
type Next (line 4) | type Next = () => Promise<void>;
type MiddlewareFunc (line 5) | type MiddlewareFunc = (ctx: Context, next: Next) => Promise<void>;
type ControllerType (line 8) | enum ControllerType {
type HostType (line 20) | type HostType = string | string [];
type ControllerTypeLike (line 22) | type ControllerTypeLike = ControllerType | string;
type MethodType (line 24) | enum MethodType {
type MethodTypeLike (line 34) | type MethodTypeLike = ControllerType | string;
type HTTPMethodEnum (line 36) | enum HTTPMethodEnum {
type HTTPParamType (line 46) | enum HTTPParamType {
type MCPProtocols (line 56) | enum MCPProtocols {
FILE: core/types/core-decorator/ContextProto.ts
type ContextProtoParams (line 3) | interface ContextProtoParams {
FILE: core/types/core-decorator/Inject.ts
type InjectParams (line 1) | interface InjectParams {
FILE: core/types/core-decorator/Metadata.ts
type MetaDataKey (line 1) | type MetaDataKey = symbol | string;
FILE: core/types/core-decorator/MultiInstanceProto.ts
type BaseMultiInstancePrototypeCallbackParams (line 5) | interface BaseMultiInstancePrototypeCallbackParams {
type MultiInstancePrototypeCallbackParams (line 20) | interface MultiInstancePrototypeCallbackParams extends BaseMultiInstance...
type MultiInstancePrototypeStaticParams (line 24) | interface MultiInstancePrototypeStaticParams extends BaseMultiInstancePr...
type MultiInstancePrototypeParams (line 31) | type MultiInstancePrototypeParams = MultiInstancePrototypeCallbackParams...
FILE: core/types/core-decorator/Prototype.ts
type PrototypeParams (line 4) | interface PrototypeParams {
constant DEFAULT_PROTO_IMPL_TYPE (line 11) | const DEFAULT_PROTO_IMPL_TYPE = 'DEFAULT';
FILE: core/types/core-decorator/SingletonProto.ts
type SingletonProtoParams (line 3) | interface SingletonProtoParams {
FILE: core/types/core-decorator/enum/AccessLevel.ts
type AccessLevel (line 1) | enum AccessLevel {
FILE: core/types/core-decorator/enum/EggType.ts
type EggType (line 1) | enum EggType {
FILE: core/types/core-decorator/enum/InjectType.ts
type InjectType (line 1) | enum InjectType {
FILE: core/types/core-decorator/enum/MultiInstanceType.ts
type MultiInstanceType (line 1) | enum MultiInstanceType {
FILE: core/types/core-decorator/enum/ObjectInitType.ts
type ObjectInitType (line 1) | enum ObjectInitType {
type ObjectInitTypeLike (line 10) | type ObjectInitTypeLike = ObjectInitType | string;
constant INIT_TYPE_TRY_ORDER (line 12) | const INIT_TYPE_TRY_ORDER = [
FILE: core/types/core-decorator/enum/Qualifier.ts
constant QUALIFIER_META_DATA (line 9) | const QUALIFIER_META_DATA = Symbol.for('EggPrototype#qualifier');
constant PROPERTY_QUALIFIER_META_DATA (line 11) | const PROPERTY_QUALIFIER_META_DATA = Symbol.for('EggPrototype#propertyQu...
constant CONSTRUCTOR_QUALIFIER_META_DATA (line 13) | const CONSTRUCTOR_QUALIFIER_META_DATA = Symbol.for('EggPrototype#constru...
FILE: core/types/core-decorator/model/EggMultiInstancePrototypeInfo.ts
type ObjectInfo (line 6) | interface ObjectInfo {
type MultiInstancePrototypeGetObjectsContext (line 12) | interface MultiInstancePrototypeGetObjectsContext {
type EggMultiInstancePrototypeInfo (line 18) | interface EggMultiInstancePrototypeInfo {
type EggMultiInstanceCallbackPrototypeInfo (line 42) | interface EggMultiInstanceCallbackPrototypeInfo {
FILE: core/types/core-decorator/model/EggPrototypeInfo.ts
type EggProtoImplClass (line 5) | type EggProtoImplClass<T = object> = new(...args: any[]) => T;
type EggPrototypeName (line 6) | type EggPrototypeName = PropertyKey;
type EggPrototypeInfo (line 8) | interface EggPrototypeInfo {
FILE: core/types/core-decorator/model/InjectConstructorInfo.ts
type InjectConstructorInfo (line 3) | interface InjectConstructorInfo {
FILE: core/types/core-decorator/model/InjectObjectInfo.ts
type EggObjectName (line 1) | type EggObjectName = PropertyKey;
type InjectObjectInfo (line 3) | interface InjectObjectInfo {
FILE: core/types/core-decorator/model/QualifierInfo.ts
type QualifierAttribute (line 1) | type QualifierAttribute = symbol | string;
type QualifierValue (line 2) | type QualifierValue = string | number;
type QualifierInfo (line 36) | interface QualifierInfo {
FILE: core/types/dal/Qualifier.ts
constant DAL_COLUMN_INFO_MAP (line 1) | const DAL_COLUMN_INFO_MAP = Symbol.for('EggPrototype#dalColumnInfoMap');
constant DAL_COLUMN_TYPE_MAP (line 2) | const DAL_COLUMN_TYPE_MAP = Symbol.for('EggPrototype#dalColumnTypeMap');
constant DAL_INDEX_LIST (line 3) | const DAL_INDEX_LIST = Symbol.for('EggPrototype#dalIndexList');
constant DAL_IS_TABLE (line 4) | const DAL_IS_TABLE = Symbol.for('EggPrototype#dalIsTable');
constant DAL_TABLE_PARAMS (line 5) | const DAL_TABLE_PARAMS = Symbol.for('EggPrototype#dalTableParams');
constant DAL_IS_DAO (line 6) | const DAL_IS_DAO = Symbol.for('EggPrototype#dalIsDao');
FILE: core/types/dal/decorator/Column.ts
type ColumnParams (line 4) | interface ColumnParams {
type IColumnTypeParams (line 19) | interface IColumnTypeParams {
type BitParams (line 23) | interface BitParams extends IColumnTypeParams {
type BoolParams (line 28) | interface BoolParams extends IColumnTypeParams {
type BaseNumericParams (line 32) | interface BaseNumericParams extends IColumnTypeParams {
type BaseFloatNumericParams (line 38) | interface BaseFloatNumericParams extends IColumnTypeParams {
type TinyIntParams (line 45) | interface TinyIntParams extends BaseNumericParams {
type SmallIntParams (line 49) | interface SmallIntParams extends BaseNumericParams {
type MediumIntParams (line 53) | interface MediumIntParams extends BaseNumericParams {
type IntParams (line 57) | interface IntParams extends BaseNumericParams {
type BigIntParams (line 61) | interface BigIntParams extends BaseNumericParams {
type DecimalParams (line 65) | interface DecimalParams extends BaseFloatNumericParams {
type FloatParams (line 69) | interface FloatParams extends BaseFloatNumericParams {
type DoubleParams (line 73) | interface DoubleParams extends BaseFloatNumericParams {
type DateParams (line 77) | interface DateParams extends IColumnTypeParams {
type DateTimeParams (line 81) | interface DateTimeParams extends IColumnTypeParams {
type TimestampParams (line 87) | interface TimestampParams extends IColumnTypeParams {
type TimeParams (line 93) | interface TimeParams extends IColumnTypeParams {
type YearParams (line 98) | interface YearParams extends IColumnTypeParams {
type CharParams (line 102) | interface CharParams extends IColumnTypeParams {
type VarCharParams (line 109) | interface VarCharParams extends IColumnTypeParams {
type BinaryParams (line 116) | interface BinaryParams extends IColumnTypeParams {
type VarBinaryParams (line 121) | interface VarBinaryParams extends IColumnTypeParams {
type TinyBlobParams (line 126) | interface TinyBlobParams extends IColumnTypeParams {
type TinyTextParams (line 130) | interface TinyTextParams extends IColumnTypeParams {
type BlobParams (line 136) | interface BlobParams extends IColumnTypeParams {
type TextParams (line 141) | interface TextParams extends IColumnTypeParams {
type MediumBlobParams (line 148) | interface MediumBlobParams extends IColumnTypeParams {
type LongBlobParams (line 152) | interface LongBlobParams extends IColumnTypeParams {
type MediumTextParams (line 156) | interface MediumTextParams extends IColumnTypeParams {
type LongTextParams (line 162) | interface LongTextParams extends IColumnTypeParams {
type EnumParams (line 168) | interface EnumParams extends IColumnTypeParams {
type SetParams (line 175) | interface SetParams extends IColumnTypeParams {
type JsonParams (line 182) | interface JsonParams extends IColumnTypeParams {
type BaseSpatialParams (line 186) | interface BaseSpatialParams extends IColumnTypeParams {
type GeometryParams (line 190) | interface GeometryParams extends BaseSpatialParams {
type PointParams (line 194) | interface PointParams extends BaseSpatialParams {
type LinestringParams (line 198) | interface LinestringParams extends BaseSpatialParams {
type PolygonParams (line 202) | interface PolygonParams extends BaseSpatialParams {
type MultiPointParams (line 206) | interface MultiPointParams extends BaseSpatialParams {
type MultiLinestringParams (line 210) | interface MultiLinestringParams extends BaseSpatialParams {
type MultiPolygonParams (line 214) | interface MultiPolygonParams extends BaseSpatialParams {
type GeometryCollectionParams (line 218) | interface GeometryCollectionParams extends BaseSpatialParams {
type ColumnTypeParams (line 222) | type ColumnTypeParams = BitParams
FILE: core/types/dal/decorator/Index.ts
type IndexParams (line 4) | interface IndexParams {
FILE: core/types/dal/decorator/Table.ts
type TableParams (line 6) | interface TableParams {
FILE: core/types/dal/enum/ColumnFormat.ts
type ColumnFormat (line 1) | enum ColumnFormat {
FILE: core/types/dal/enum/ColumnType.ts
type ColumnType (line 2) | enum ColumnType {
FILE: core/types/dal/enum/CompressionType.ts
type CompressionType (line 1) | enum CompressionType {
FILE: core/types/dal/enum/IndexStoreType.ts
type IndexStoreType (line 1) | enum IndexStoreType {
FILE: core/types/dal/enum/IndexType.ts
type IndexType (line 1) | enum IndexType {
FILE: core/types/dal/enum/InsertMethod.ts
type InsertMethod (line 1) | enum InsertMethod {
FILE: core/types/dal/enum/RowFormat.ts
type RowFormat (line 1) | enum RowFormat {
FILE: core/types/dal/enum/SqlType.ts
type SqlType (line 1) | enum SqlType {
FILE: core/types/dal/enum/Templates.ts
type Templates (line 1) | enum Templates {
FILE: core/types/dal/type/BaseDao.ts
type BaseDaoType (line 5) | interface BaseDaoType {
FILE: core/types/dal/type/CodeGenerator.ts
type CodeGeneratorOptions (line 1) | interface CodeGeneratorOptions {
FILE: core/types/dal/type/ColumnTsType.ts
type ColumnTsType (line 3) | interface ColumnTsType {
FILE: core/types/dal/type/DateSource.ts
type PaginateData (line 1) | interface PaginateData<T> {
type DataSource (line 7) | interface DataSource<T> {
FILE: core/types/dal/type/Spatial.ts
type Point (line 1) | interface Point {
type Line (line 6) | type Line = Array<Point>;
type Polygon (line 7) | type Polygon = Array<Line>;
type Geometry (line 8) | type Geometry = Point | Line | Polygon;
type MultiPoint (line 10) | type MultiPoint = Array<Point>;
type MultiLine (line 11) | type MultiLine = Array<Line>;
type MultiPolygon (line 12) | type MultiPolygon = Array<Polygon>;
type GeometryCollection (line 13) | type GeometryCollection = Array<Point | Line | Polygon>;
FILE: core/types/dal/type/SqlMap.ts
type BaseSqlMap (line 3) | interface BaseSqlMap {
type FullSqlMap (line 7) | interface FullSqlMap extends BaseSqlMap {
type BlockSqlMap (line 12) | interface BlockSqlMap extends BaseSqlMap {
type SqlMap (line 17) | type SqlMap = FullSqlMap | BlockSqlMap;
type GenerateSqlMap (line 19) | interface GenerateSqlMap {
FILE: core/types/dynamic-inject.ts
type EggAbstractClazz (line 3) | type EggAbstractClazz<T extends object = object> = Function & {prototype...
type ImplTypeEnum (line 4) | type ImplTypeEnum = {
type ImplDecorator (line 8) | type ImplDecorator<T extends object, Enum extends ImplTypeEnum> = (type:...
type EggObjectFactory (line 10) | interface EggObjectFactory {
constant QUALIFIER_IMPL_MAP (line 15) | const QUALIFIER_IMPL_MAP = Symbol.for('EggPrototype#qualifierImplMap');
FILE: core/types/lifecycle/EggObjectLifecycle.ts
type EggObjectLifecycle (line 6) | interface EggObjectLifecycle {
type LifecycleHookName (line 42) | type LifecycleHookName = keyof EggObjectLifecycle;
FILE: core/types/lifecycle/IdenticalObject.ts
type Id (line 1) | type Id = string;
type IdenticalObject (line 3) | interface IdenticalObject {
FILE: core/types/lifecycle/LifecycleHook.ts
type LifecycleContext (line 3) | interface LifecycleContext {
type LifecycleObject (line 6) | interface LifecycleObject<T extends LifecycleContext> extends IdenticalO...
type LifecycleHook (line 12) | interface LifecycleHook<T extends LifecycleContext, R extends LifecycleO...
FILE: core/types/metadata/enum/ProtoDescriptorType.ts
type ProtoDescriptorType (line 1) | enum ProtoDescriptorType {
FILE: core/types/metadata/errors.ts
type ErrorCodes (line 1) | enum ErrorCodes {
FILE: core/types/metadata/model/EggPrototype.ts
type InjectObjectProto (line 15) | interface InjectObjectProto {
type InjectConstructorProto (line 38) | interface InjectConstructorProto {
type InjectObject (line 65) | interface InjectObject {
type InjectConstructor (line 85) | interface InjectConstructor {
type EggPrototypeClass (line 109) | type EggPrototypeClass = new (...args: any[]) => EggPrototype;
type EggPrototypeLifecycleContext (line 111) | interface EggPrototypeLifecycleContext extends LifecycleContext {
type EggPrototype (line 117) | interface EggPrototype extends LifecycleObject<EggPrototypeLifecycleCont...
type EggPrototypeWithClazz (line 156) | interface EggPrototypeWithClazz extends EggPrototype {
type EggPrototypeCreator (line 160) | type EggPrototypeCreator = (ctx: EggPrototypeLifecycleContext) => EggPro...
FILE: core/types/metadata/model/LoadUnit.ts
type EggLoadUnitType (line 6) | enum EggLoadUnitType {
type EggLoadUnitTypeLike (line 12) | type EggLoadUnitTypeLike = EggLoadUnitType | string;
type LoadUnitLifecycleContext (line 14) | interface LoadUnitLifecycleContext extends LifecycleContext {
type LoadUnit (line 19) | interface LoadUnit extends LifecycleObject<LoadUnitLifecycleContext> {
type LoadUnitPair (line 31) | interface LoadUnitPair {
type LoadUnitCreator (line 36) | type LoadUnitCreator = (ctx: LoadUnitLifecycleContext) => LoadUnit;
FILE: core/types/metadata/model/Loader.ts
type Loader (line 6) | interface Loader {
FILE: core/types/metadata/model/ProtoDescriptor.ts
type ProtoDescriptorTypeLike (line 4) | type ProtoDescriptorTypeLike = ProtoDescriptorType | string;
type InjectObjectDescriptor (line 6) | interface InjectObjectDescriptor {
type ProtoDescriptor (line 12) | interface ProtoDescriptor extends EggPrototypeInfo {
FILE: core/types/orm.ts
type AttributeOptions (line 1) | interface AttributeOptions {
type IndexOptions (line 14) | interface IndexOptions {
type ModelParams (line 20) | interface ModelParams {
type ModelIndexInfo (line 25) | interface ModelIndexInfo {
type ModelAttributeInfo (line 30) | interface ModelAttributeInfo {
constant MODEL_PROTO_IMPL_TYPE (line 35) | const MODEL_PROTO_IMPL_TYPE = 'MODEL_PROTO';
constant IS_MODEL (line 37) | const IS_MODEL = Symbol.for('EggPrototype#model#isModel');
constant MODEL_DATA_SOURCE (line 38) | const MODEL_DATA_SOURCE = Symbol.for('EggPrototype#model#dataSource');
constant MODEL_DATA_TABLE_NAME (line 39) | const MODEL_DATA_TABLE_NAME = Symbol.for('EggPrototype#model#tableName');
constant MODEL_DATA_INDICES (line 40) | const MODEL_DATA_INDICES = Symbol.for('EggPrototype#model#indices');
constant MODEL_DATA_ATTRIBUTES (line 41) | const MODEL_DATA_ATTRIBUTES = Symbol.for('EggPrototype#model#attributes');
FILE: core/types/runtime/Factory.ts
type ContainerGetMethod (line 7) | type ContainerGetMethod = (proto: EggPrototype) => EggContainer<Lifecycl...
type CreateObjectMethod (line 9) | type CreateObjectMethod = (name: EggObjectName, proto: EggPrototype, lif...
FILE: core/types/runtime/model/EggContainer.ts
type EggContainer (line 6) | interface EggContainer<T extends LifecycleContext> extends LifecycleObje...
FILE: core/types/runtime/model/EggContext.ts
type EggContextLifecycleContext (line 3) | interface EggContextLifecycleContext {
type EggRuntimeContext (line 6) | interface EggRuntimeContext extends EggContainer<EggContextLifecycleCont...
FILE: core/types/runtime/model/EggObject.ts
type EggObjectStatus (line 7) | enum EggObjectStatus {
type EggObjectLifeCycleContext (line 15) | interface EggObjectLifeCycleContext extends LifecycleContext {
type EggObject (line 20) | interface EggObject extends LifecycleObject<EggObjectLifeCycleContext> {
FILE: core/types/runtime/model/LoadUnitInstance.ts
type LoadUnitInstanceLifecycleContext (line 4) | interface LoadUnitInstanceLifecycleContext {
type LoadUnitInstance (line 8) | interface LoadUnitInstance extends EggContainer<LoadUnitInstanceLifecycl...
FILE: core/types/schedule.ts
type ScheduleType (line 1) | enum ScheduleType {
constant IS_SCHEDULE (line 6) | const IS_SCHEDULE = Symbol.for('EggPrototype#isSchedule');
constant SCHEDULE_PARAMS (line 7) | const SCHEDULE_PARAMS = Symbol.for('EggPrototype#schedule#params');
constant SCHEDULE_OPTIONS (line 8) | const SCHEDULE_OPTIONS = Symbol.for('EggPrototype#schedule#options');
constant SCHEDULE_METADATA (line 9) | const SCHEDULE_METADATA = Symbol.for('EggPrototype#schedule#metadata');
type ScheduleTypeLike (line 11) | type ScheduleTypeLike = ScheduleType | string;
type ScheduleParams (line 13) | interface ScheduleParams<T> {
type CronParams (line 18) | interface CronParams {
type IntervalParams (line 23) | interface IntervalParams {
type CronScheduleParams (line 27) | type CronScheduleParams = ScheduleParams<CronParams>;
type IntervalScheduleParams (line 28) | type IntervalScheduleParams = ScheduleParams<IntervalParams>;
type ScheduleOptions (line 30) | interface ScheduleOptions {
type ScheduleSubscriber (line 39) | interface ScheduleSubscriber {
FILE: core/types/standalone/ServiceWorkerContext.ts
type ServiceWorkerContextInit (line 3) | interface ServiceWorkerContextInit<T> {
type ServiceWorkerContext (line 7) | interface ServiceWorkerContext<Event, Response> {
type ServiceWorkerFetchContext (line 16) | type ServiceWorkerFetchContext = ServiceWorkerContext<FetchEvent, Respon...
FILE: core/types/standalone/fetch.ts
type FetchEvent (line 1) | interface FetchEvent extends Event {
FILE: core/types/transaction.ts
type PropagationType (line 1) | enum PropagationType {
type TransactionalParams (line 8) | interface TransactionalParams {
typ
Condensed preview — 1679 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (3,645K chars).
[
{
"path": ".eslintignore",
"chars": 356,
"preview": "docs\ncoverage\ndist\nnode_modules\nplugin/**/node_modules\nplugin/**/*.d.ts\ncore/**/node_modules\ncore/**/*.d.ts\ncore/**/test"
},
{
"path": ".eslintrc",
"chars": 542,
"preview": "{\n \"extends\": [\n \"eslint-config-egg/typescript\",\n \"plugin:import/recommended\",\n \"plugin:import/typescript\"\n ]"
},
{
"path": ".github/FUNDING.yml",
"chars": 754,
"preview": "# These are supported funding model platforms\n\nopen_collective: eggjs # Replace with a single Open Collective username\n\n"
},
{
"path": ".github/ISSUE_TEMPLATE/bug-report-cn.yml",
"chars": 1486,
"preview": "name: 🐛 TEgg Bug 反馈\ndescription: 如发现 TEgg 框架中的 Bug,请及时在此汇报。\nlabels: [bug]\nbody:\n - type: textarea\n attributes:\n "
},
{
"path": ".github/ISSUE_TEMPLATE/bug-report.yml",
"chars": 1858,
"preview": "name: 🐛 Bug Report For TEgg (in English)\ndescription: Report an issue if something isn't working as expected 🤔.\nlabels: "
},
{
"path": ".github/ISSUE_TEMPLATE/feature-request-cn.yml",
"chars": 471,
"preview": "name: 💡 我有一个新点子\ndescription: 我对 TEgg 框架有一个新的想法(或许我想来实现他)……\nlabels: [feature request]\nbody:\n - type: markdown\n attrib"
},
{
"path": ".github/ISSUE_TEMPLATE/feature-request.yml",
"chars": 759,
"preview": "name: 💡 Feature Request For TEgg (in English)\ndescription: I have a suggestion (and may want to implement it)!\nlabels: ["
},
{
"path": ".github/ISSUE_TEMPLATE/rfc-cn.yml",
"chars": 656,
"preview": "name: 🚀 RFC 提案\ndescription: 我对 TEgg 框架技术架构功能层面上有重大新增、改进等。\nlabels: [RFC proposal]\nbody:\n - type: markdown\n attributes"
},
{
"path": ".github/ISSUE_TEMPLATE/rfc.yml",
"chars": 1109,
"preview": "name: 🚀 RFC Proposals (in English)\ndescription: I've got a major improvement (or idea) on the technical architecture of "
},
{
"path": ".github/PULL_REQUEST_TEMPLATE.md",
"chars": 862,
"preview": "<!--\nThank you for your pull request. Please review below requirements.\nBug fixes and new features should include tests "
},
{
"path": ".github/workflows/codeql-analysis.yml",
"chars": 2705,
"preview": "# For most projects, this workflow file will not need changing; you simply need\n# to commit it to your repository.\n#\n# Y"
},
{
"path": ".github/workflows/nodejs.yml",
"chars": 2639,
"preview": "name: Continuous integration\non:\n push:\n branches: [ master ]\n pull_request:\n branches: [ master ]\njobs:\n Runne"
},
{
"path": ".github/workflows/release.yml",
"chars": 8779,
"preview": "name: Manual Release\n\non:\n workflow_dispatch:\n inputs:\n branch:\n description: 'Branch to release from'\n "
},
{
"path": ".gitignore",
"chars": 1246,
"preview": "node_modules\ncoverage\n*.log\nnpm-debug.log\n.logs\nlogs\n*.swp\nrun\n*-run\n.idea\n.DS_Store\n.tmp\n.vscode\ncodex-logs/\n\npackage-l"
},
{
"path": ".mocharc.yml",
"chars": 170,
"preview": "timeout: \"120000\"\nspec:\n - test/**/*.test.ts\nrecursive: true\nextension:\n - ts\nrequire:\n - ts-node/register\n - source"
},
{
"path": ".nycrc.yml",
"chars": 464,
"preview": "extends:\n - '@istanbuljs/nyc-config-typescript'\n - 'test-exclude'\nall: true\ncheck-coverage: true\ntemp-directory: './no"
},
{
"path": "CHANGELOG.md",
"chars": 65033,
"preview": "# Change Log\n\nAll notable changes to this project will be documented in this file.\nSee [Conventional Commits](https://co"
},
{
"path": "CLAUDE.md",
"chars": 28708,
"preview": "# CLAUDE.md\n\nThis file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.\n\n## "
},
{
"path": "LICENSE",
"chars": 1118,
"preview": "MIT License\n\nCopyright (c) 2017-present Alibaba Group Holding Limited and other contributors.\n\nPermission is hereby gran"
},
{
"path": "README.md",
"chars": 19176,
"preview": "# `@eggjs/tegg`\n\n## Install\n\n```shell\n# tegg 注解\nnpm i --save @eggjs/tegg\n# tegg 插件\nnpm i --save @eggjs/tegg-plugin\n```\n\n"
},
{
"path": "benchmark/http/app/controller/FooTeggController.ts",
"chars": 257,
"preview": "import { HTTPController, HTTPMethod, HTTPMethodEnum } from '@eggjs/tegg';\n\n@HTTPController()\nexport default class FooTeg"
},
{
"path": "benchmark/http/app/controller/template/egg_controller_1.js",
"chars": 171,
"preview": "'use strict';\n\nconst { Controller } = require('egg');\n\nmodule.exports = class EggController1 extends Controller {\n asyn"
},
{
"path": "benchmark/http/app/router.js",
"chars": 153,
"preview": "'use strict';\n\nmodule.exports = function (app) {\n const { router, controller } = app;\n app.get('/egg1', controller.tem"
},
{
"path": "benchmark/http/config/config.default.js",
"chars": 63,
"preview": "'use strict';\n\nmodule.exports = {\n keys: 'tegg_benchmark',\n};\n"
},
{
"path": "benchmark/http/config/plugin.js",
"chars": 267,
"preview": "'use strict'\n\nmodule.exports = {\n tegg: {\n enable: true,\n package: '@eggjs/tegg-plugin',\n },\n teggController: {"
},
{
"path": "benchmark/http/package.json",
"chars": 365,
"preview": "{\n \"name\": \"tegg_benchmark\",\n \"egg\": {\n },\n \"scripts\": {\n \"dev\": \"egg-bin dev\"\n },\n \"dependencies\": {\n \"@egg"
},
{
"path": "benchmark/http/tsconfig.json",
"chars": 35,
"preview": "{\n \"extends\": \"@eggjs/tsconfig\"\n}\n"
},
{
"path": "core/agent-runtime/CHANGELOG.md",
"chars": 6020,
"preview": "# Change Log\n\nAll notable changes to this project will be documented in this file.\nSee [Conventional Commits](https://co"
},
{
"path": "core/agent-runtime/index.ts",
"chars": 546,
"preview": "// Re-export types from @eggjs/tegg-types (backward compatible)\nexport * from '@eggjs/tegg-types/agent-runtime';\n// Impl"
},
{
"path": "core/agent-runtime/package.json",
"chars": 1095,
"preview": "{\n \"name\": \"@eggjs/agent-runtime\",\n \"version\": \"3.78.15\",\n \"description\": \"Agent runtime with store abstraction for E"
},
{
"path": "core/agent-runtime/src/AgentRuntime.ts",
"chars": 29835,
"preview": "import { EventEmitter } from 'node:events';\nimport { appendFileSync, createReadStream, mkdirSync, existsSync } from 'nod"
},
{
"path": "core/agent-runtime/src/AgentStoreUtils.ts",
"chars": 356,
"preview": "import crypto from 'node:crypto';\n\nexport function nowUnix(): number {\n return Math.floor(Date.now() / 1000);\n}\n\nexport"
},
{
"path": "core/agent-runtime/src/HttpSSEWriter.ts",
"chars": 1581,
"preview": "import type { ServerResponse } from 'node:http';\n\nimport type { SSEWriter } from './SSEWriter';\n\nexport class HttpSSEWri"
},
{
"path": "core/agent-runtime/src/MessageConverter.ts",
"chars": 1810,
"preview": "import type {\n AgentMessage,\n InputMessage,\n SDKResultMessage,\n} from '@eggjs/tegg-types/agent-runtime';\n\nimport type"
},
{
"path": "core/agent-runtime/src/OSSAgentStore.ts",
"chars": 5012,
"preview": "import type {\n AgentMessage,\n AgentRunConfig,\n AgentStore,\n GetThreadOptions,\n InputMessage,\n RunRecord,\n ThreadR"
},
{
"path": "core/agent-runtime/src/OSSObjectStorageClient.ts",
"chars": 3453,
"preview": "import type { ObjectStorageClient } from '@eggjs/tegg-types/agent-runtime';\nimport type { OSSObject } from 'oss-client';"
},
{
"path": "core/agent-runtime/src/RunBuilder.ts",
"chars": 5322,
"preview": "import type { RunObject, RunRecord, AgentRunConfig } from '@eggjs/tegg-types/agent-runtime';\nimport { RunStatus, AgentEr"
},
{
"path": "core/agent-runtime/src/SSEWriter.ts",
"chars": 615,
"preview": "/**\n * Abstract interface for writing SSE events.\n * Decouples AgentRuntime from HTTP transport details.\n */\nexport inte"
},
{
"path": "core/agent-runtime/test/AgentRuntime.test.ts",
"chars": 50781,
"preview": "import assert from 'node:assert';\nimport { setTimeout } from 'node:timers/promises';\n\nimport type {\n RunRecord,\n Creat"
},
{
"path": "core/agent-runtime/test/HttpSSEWriter.test.ts",
"chars": 4575,
"preview": "import assert from 'node:assert';\nimport { EventEmitter } from 'node:events';\n\nimport { HttpSSEWriter } from '../src/Htt"
},
{
"path": "core/agent-runtime/test/MessageConverter.test.ts",
"chars": 7005,
"preview": "import assert from 'node:assert';\n\nimport type { AgentMessage, InputMessage, SDKResultMessage } from '@eggjs/tegg-types/"
},
{
"path": "core/agent-runtime/test/OSSAgentStore.test.ts",
"chars": 12054,
"preview": "import assert from 'node:assert';\n\nimport type { AgentMessage } from '@eggjs/tegg-types/agent-runtime';\n\nimport { AgentN"
},
{
"path": "core/agent-runtime/test/OSSObjectStorageClient.test.ts",
"chars": 6919,
"preview": "import assert from 'node:assert';\n\nimport type { OSSObject } from 'oss-client';\n\nimport { OSSObjectStorageClient } from "
},
{
"path": "core/agent-runtime/test/RunBuilder.test.ts",
"chars": 8982,
"preview": "import assert from 'node:assert';\n\nimport type { RunRecord } from '@eggjs/tegg-types/agent-runtime';\nimport { RunStatus,"
},
{
"path": "core/agent-runtime/test/helpers.ts",
"chars": 1137,
"preview": "import type { ObjectStorageClient } from '@eggjs/tegg-types/agent-runtime';\n\n/** In-memory ObjectStorageClient backed by"
},
{
"path": "core/agent-runtime/tsconfig.json",
"chars": 172,
"preview": "{\n \"extends\": \"../../tsconfig.json\",\n \"compilerOptions\": {\n \"outDir\": \"dist\",\n \"baseUrl\": \"./\"\n },\n \"exclude\":"
},
{
"path": "core/agent-runtime/tsconfig.pub.json",
"chars": 172,
"preview": "{\n \"extends\": \"../../tsconfig.json\",\n \"compilerOptions\": {\n \"outDir\": \"dist\",\n \"baseUrl\": \"./\"\n },\n \"exclude\":"
},
{
"path": "core/agent-tracing/CHANGELOG.md",
"chars": 5059,
"preview": "# Change Log\n\nAll notable changes to this project will be documented in this file.\nSee [Conventional Commits](https://co"
},
{
"path": "core/agent-tracing/claude.ts",
"chars": 86,
"preview": "export * from './index';\nexport { ClaudeAgentTracer } from './src/ClaudeAgentTracer';\n"
},
{
"path": "core/agent-tracing/index.ts",
"chars": 165,
"preview": "export * from './src/types';\nexport { AbstractOssClient } from './src/AbstractOssClient';\nexport { AbstractLogServiceCli"
},
{
"path": "core/agent-tracing/langgraph.ts",
"chars": 82,
"preview": "export * from './index';\nexport { LangGraphTracer } from './src/LangGraphTracer';\n"
},
{
"path": "core/agent-tracing/package.json",
"chars": 2548,
"preview": "{\n \"name\": \"@eggjs/agent-tracing\",\n \"version\": \"3.78.15\",\n \"description\": \"Tracing support for AI agents (LangGraph, "
},
{
"path": "core/agent-tracing/src/AbstractLogServiceClient.ts",
"chars": 1211,
"preview": "/**\n * Abstract log service client for dependency injection.\n *\n * To enable log service syncing in TracingService, impl"
},
{
"path": "core/agent-tracing/src/AbstractOssClient.ts",
"chars": 1035,
"preview": "/**\n * Abstract OSS client for dependency injection.\n *\n * To enable OSS uploads in TracingService, implement this class"
},
{
"path": "core/agent-tracing/src/ClaudeAgentTracer.ts",
"chars": 16506,
"preview": "import { randomUUID } from 'node:crypto';\n\nimport type { SDKMessage, SDKResultMessage } from '@anthropic-ai/claude-agent"
},
{
"path": "core/agent-tracing/src/LangGraphTracer.ts",
"chars": 2332,
"preview": "import { SingletonProto, Inject } from '@eggjs/core-decorator';\nimport { AccessLevel } from '@eggjs/tegg-types';\nimport "
},
{
"path": "core/agent-tracing/src/TracingService.ts",
"chars": 5097,
"preview": "import type { BackgroundTaskHelper } from '@eggjs/tegg-background-task';\nimport { SingletonProto, Inject, InjectOptional"
},
{
"path": "core/agent-tracing/src/types.ts",
"chars": 3865,
"preview": "// Claude SDK Message Types\n\nexport interface ClaudeTextContent {\n type: 'text';\n text: string;\n}\n\nexport interface Cl"
},
{
"path": "core/agent-tracing/test/ClaudeAgentTracer.test.ts",
"chars": 20908,
"preview": "import assert from 'node:assert/strict';\n\nimport type { SDKMessage } from '@anthropic-ai/claude-agent-sdk';\n\nimport { Cl"
},
{
"path": "core/agent-tracing/test/Configure.test.ts",
"chars": 2216,
"preview": "import assert from 'node:assert/strict';\n\nimport { ClaudeAgentTracer } from '../src/ClaudeAgentTracer';\nimport { LangGra"
},
{
"path": "core/agent-tracing/test/LangGraphTracer.test.ts",
"chars": 12478,
"preview": "import assert from 'node:assert/strict';\n\nimport type { Run } from '@langchain/core/tracers/base';\nimport { FakeLLM } fr"
},
{
"path": "core/agent-tracing/test/TestUtils.ts",
"chars": 1573,
"preview": "import type { Logger } from '@eggjs/tegg-types';\nimport type { Run } from '@langchain/core/tracers/base';\n\nimport { Trac"
},
{
"path": "core/agent-tracing/test/TracingService.test.ts",
"chars": 12873,
"preview": "import assert from 'node:assert/strict';\n\nimport { TracingService } from '../src/TracingService';\nimport { RunStatus } f"
},
{
"path": "core/agent-tracing/tsconfig.json",
"chars": 172,
"preview": "{\n \"extends\": \"../../tsconfig.json\",\n \"compilerOptions\": {\n \"outDir\": \"dist\",\n \"baseUrl\": \"./\"\n },\n \"exclude\":"
},
{
"path": "core/agent-tracing/tsconfig.pub.json",
"chars": 172,
"preview": "{\n \"extends\": \"../../tsconfig.json\",\n \"compilerOptions\": {\n \"outDir\": \"dist\",\n \"baseUrl\": \"./\"\n },\n \"exclude\":"
},
{
"path": "core/ajv-decorator/CHANGELOG.md",
"chars": 19201,
"preview": "# Change Log\n\nAll notable changes to this project will be documented in this file.\nSee [Conventional Commits](https://co"
},
{
"path": "core/ajv-decorator/README.md",
"chars": 98,
"preview": "# `@eggjs/ajv-decorator`\n\n## Usage\n\nPlease read [@eggjs/tegg-ajv-plugin](../../plugin/ajv-plugin)\n"
},
{
"path": "core/ajv-decorator/index.ts",
"chars": 159,
"preview": "export * from '@sinclair/typebox';\nexport * from './src/enum/TransformEnum';\nexport * from './src/error/AjvInvalidParamE"
},
{
"path": "core/ajv-decorator/package.json",
"chars": 1267,
"preview": "{\n \"name\": \"@eggjs/ajv-decorator\",\n \"version\": \"3.78.15\",\n \"description\": \"tegg ajv decorator\",\n \"keywords\": [\n \""
},
{
"path": "core/ajv-decorator/src/enum/TransformEnum.ts",
"chars": 1252,
"preview": "/**\n * This keyword allows a string to be modified during validation.\n * This keyword applies only to strings. If the da"
},
{
"path": "core/ajv-decorator/src/error/AjvInvalidParamError.ts",
"chars": 554,
"preview": "import { type ErrorObject } from 'ajv/dist/2019';\n\nexport interface AjvInvalidParamErrorOptions {\n errorData: unknown;\n"
},
{
"path": "core/ajv-decorator/src/type/Ajv.ts",
"chars": 120,
"preview": "import type { Schema } from 'ajv/dist/2019';\n\nexport interface Ajv {\n validate(schema: Schema, data: unknown): void;\n}\n"
},
{
"path": "core/ajv-decorator/test/TransformEnum.test.ts",
"chars": 248,
"preview": "import { strict as assert } from 'node:assert';\nimport { TransformEnum } from '..';\n\ndescribe('core/ajv-decorator/test/T"
},
{
"path": "core/ajv-decorator/tsconfig.json",
"chars": 172,
"preview": "{\n \"extends\": \"../../tsconfig.json\",\n \"compilerOptions\": {\n \"outDir\": \"dist\",\n \"baseUrl\": \"./\"\n },\n \"exclude\":"
},
{
"path": "core/ajv-decorator/tsconfig.pub.json",
"chars": 172,
"preview": "{\n \"extends\": \"../../tsconfig.json\",\n \"compilerOptions\": {\n \"outDir\": \"dist\",\n \"baseUrl\": \"./\"\n },\n \"exclude\":"
},
{
"path": "core/aop-decorator/CHANGELOG.md",
"chars": 26396,
"preview": "# Change Log\n\nAll notable changes to this project will be documented in this file.\nSee [Conventional Commits](https://co"
},
{
"path": "core/aop-decorator/README.md",
"chars": 100,
"preview": "# `@eggjs/aop-decorator`\n\n# Usage\n\nPlease read [@eggjs/tegg-aop-plugin](../../plugin/aop/README.md)\n"
},
{
"path": "core/aop-decorator/index.ts",
"chars": 509,
"preview": "export * from '@eggjs/tegg-types/aop';\nexport * from './src/decorator/Advice';\nexport * from './src/decorator/Pointcut';"
},
{
"path": "core/aop-decorator/package.json",
"chars": 1362,
"preview": "{\n \"name\": \"@eggjs/aop-decorator\",\n \"version\": \"3.78.15\",\n \"description\": \"tegg aop decorator\",\n \"keywords\": [\n \""
},
{
"path": "core/aop-decorator/src/AspectMetaBuilder.ts",
"chars": 2093,
"preview": "import type { EggProtoImplClass } from '@eggjs/tegg-types';\nimport { CrosscutAdviceFactory } from './CrosscutAdviceFacto"
},
{
"path": "core/aop-decorator/src/CrosscutAdviceFactory.ts",
"chars": 1007,
"preview": "import assert from 'node:assert';\nimport type { EggProtoImplClass, IAdvice, AdviceInfo } from '@eggjs/tegg-types';\nimpor"
},
{
"path": "core/aop-decorator/src/decorator/Advice.ts",
"chars": 790,
"preview": "import { Prototype, PrototypeUtil } from '@eggjs/core-decorator';\nimport { StackUtil } from '@eggjs/tegg-common-util';\ni"
},
{
"path": "core/aop-decorator/src/decorator/Crosscut.ts",
"chars": 1604,
"preview": "import { PointcutType } from '@eggjs/tegg-types';\nimport type { CrosscutInfo, EggProtoImplClass, IAdvice, CrosscutParam,"
},
{
"path": "core/aop-decorator/src/decorator/Pointcut.ts",
"chars": 919,
"preview": "import type { EggProtoImplClass, IAdvice, PointcutOptions } from '@eggjs/tegg-types';\nimport { PointcutAdviceInfoUtil } "
},
{
"path": "core/aop-decorator/src/model/Aspect.ts",
"chars": 1305,
"preview": "import type { AdviceInfo, AspectAdvice, EggProtoImplClass, IAdvice } from '@eggjs/tegg-types';\n\nexport class Aspect {\n "
},
{
"path": "core/aop-decorator/src/model/PointcutInfo.ts",
"chars": 1407,
"preview": "import { PointcutType } from '@eggjs/tegg-types';\nimport type { CustomPointcutCallback, EggProtoImplClass, PointcutInfo "
},
{
"path": "core/aop-decorator/src/util/AdviceInfoUtil.ts",
"chars": 487,
"preview": "import { MetadataUtil } from '@eggjs/core-decorator';\nimport type { EggProtoImplClass, IAdvice } from '@eggjs/tegg-types"
},
{
"path": "core/aop-decorator/src/util/AspectInfoUtil.ts",
"chars": 546,
"preview": "import { MetadataUtil } from '@eggjs/core-decorator';\nimport { ASPECT_LIST } from '@eggjs/tegg-types';\nimport type { Egg"
},
{
"path": "core/aop-decorator/src/util/CrosscutInfoUtil.ts",
"chars": 978,
"preview": "import { MetadataUtil } from '@eggjs/core-decorator';\nimport { IS_CROSSCUT_ADVICE, CROSSCUT_INFO_LIST } from '@eggjs/teg"
},
{
"path": "core/aop-decorator/src/util/PointcutAdviceInfoUtil.ts",
"chars": 1017,
"preview": "import { MetadataUtil } from '@eggjs/core-decorator';\nimport { POINTCUT_ADVICE_INFO_LIAR } from '@eggjs/tegg-types';\nimp"
},
{
"path": "core/aop-decorator/test/AspectMetaBuilder.test.ts",
"chars": 6717,
"preview": "import assert from 'node:assert';\nimport { PrototypeUtil } from '@eggjs/core-decorator';\nimport { CrosscutAdviceFactory "
},
{
"path": "core/aop-decorator/test/fixtures/CrosscutExample.ts",
"chars": 908,
"preview": "import { ContextProto } from '@eggjs/core-decorator';\nimport { PointcutType } from '@eggjs/tegg-types';\nimport type { Eg"
},
{
"path": "core/aop-decorator/test/fixtures/InheritExample.ts",
"chars": 2024,
"preview": "import { ContextProto } from '@eggjs/core-decorator';\nimport { PointcutType } from '@eggjs/tegg-types';\nimport type { Ad"
},
{
"path": "core/aop-decorator/test/fixtures/PointcutExample.ts",
"chars": 863,
"preview": "import { ContextProto } from '@eggjs/core-decorator';\nimport type { AdviceContext, IAdvice } from '@eggjs/tegg-types';\ni"
},
{
"path": "core/aop-decorator/tsconfig.json",
"chars": 172,
"preview": "{\n \"extends\": \"../../tsconfig.json\",\n \"compilerOptions\": {\n \"outDir\": \"dist\",\n \"baseUrl\": \"./\"\n },\n \"exclude\":"
},
{
"path": "core/aop-decorator/tsconfig.pub.json",
"chars": 172,
"preview": "{\n \"extends\": \"../../tsconfig.json\",\n \"compilerOptions\": {\n \"outDir\": \"dist\",\n \"baseUrl\": \"./\"\n },\n \"exclude\":"
},
{
"path": "core/aop-runtime/CHANGELOG.md",
"chars": 29793,
"preview": "# Change Log\n\nAll notable changes to this project will be documented in this file.\nSee [Conventional Commits](https://co"
},
{
"path": "core/aop-runtime/README.md",
"chars": 101,
"preview": "# `aop-runtime`\n\n## Usage\n\nThis is an internal tegg library, you probably shouldn't use it directly.\n"
},
{
"path": "core/aop-runtime/index.ts",
"chars": 210,
"preview": "export * from './src/EggPrototypeCrossCutHook';\nexport * from './src/EggObjectAopHook';\nexport * from './src/LoadUnitAop"
},
{
"path": "core/aop-runtime/package.json",
"chars": 1716,
"preview": "{\n \"name\": \"@eggjs/tegg-aop-runtime\",\n \"version\": \"3.78.15\",\n \"description\": \"tegg aop\",\n \"main\": \"dist/index.js\",\n "
},
{
"path": "core/aop-runtime/src/AspectExecutor.ts",
"chars": 3301,
"preview": "import type { AdviceContext, AspectAdvice, IAdvice } from '@eggjs/tegg-types';\nimport compose from 'koa-compose';\nimport"
},
{
"path": "core/aop-runtime/src/CrossCutGraphHook.ts",
"chars": 2090,
"preview": "import { AspectMetaBuilder, CrosscutInfo, CrosscutInfoUtil } from '@eggjs/aop-decorator';\nimport { GraphNode } from '@eg"
},
{
"path": "core/aop-runtime/src/EggObjectAopHook.ts",
"chars": 2490,
"preview": "import { ASPECT_LIST, InjectType } from '@eggjs/tegg-types';\nimport type { EggObject, EggObjectLifeCycleContext, Lifecyc"
},
{
"path": "core/aop-runtime/src/EggPrototypeCrossCutHook.ts",
"chars": 687,
"preview": "import type { EggPrototype, EggPrototypeLifecycleContext, LifecycleHook } from '@eggjs/tegg-types';\nimport { CrosscutAdv"
},
{
"path": "core/aop-runtime/src/LoadUnitAopHook.ts",
"chars": 1665,
"preview": "import { AspectInfoUtil, AspectMetaBuilder, CrosscutAdviceFactory } from '@eggjs/aop-decorator';\nimport { PrototypeUtil "
},
{
"path": "core/aop-runtime/src/PointCutGraphHook.ts",
"chars": 2008,
"preview": "import { AspectMetaBuilder, PointcutAdviceInfoUtil } from '@eggjs/aop-decorator';\nimport { PrototypeUtil, QualifierUtil "
},
{
"path": "core/aop-runtime/test/aop-runtime.test.ts",
"chars": 11705,
"preview": "import assert from 'node:assert';\nimport path from 'node:path';\nimport mm from 'mm';\nimport { EggObjectLifecycleUtil, Lo"
},
{
"path": "core/aop-runtime/test/fixtures/modules/constructor_inject_aop/Hello.ts",
"chars": 674,
"preview": "import { ContextProto, Inject, SingletonProto } from '@eggjs/core-decorator';\nimport { Pointcut } from '@eggjs/aop-decor"
},
{
"path": "core/aop-runtime/test/fixtures/modules/constructor_inject_aop/package.json",
"chars": 73,
"preview": "{\n \"name\": \"aop-module\",\n \"eggModule\": {\n \"name\": \"aopModule\"\n }\n}\n"
},
{
"path": "core/aop-runtime/test/fixtures/modules/hello_cross_cut/CallTrace.ts",
"chars": 396,
"preview": "import { AccessLevel, SingletonProto } from \"@eggjs/core-decorator\";\n\nexport interface CallTraceMsg {\n className: strin"
},
{
"path": "core/aop-runtime/test/fixtures/modules/hello_cross_cut/HelloCrossCut.ts",
"chars": 2184,
"preview": "import assert from 'node:assert';\nimport { AccessLevel, Inject } from '@eggjs/core-decorator';\nimport { Advice, Crosscut"
},
{
"path": "core/aop-runtime/test/fixtures/modules/hello_cross_cut/package.json",
"chars": 82,
"preview": "{\n \"name\": \"hello-cross-cut\",\n \"eggModule\": {\n \"name\": \"helloCrossCut\"\n }\n}\n"
},
{
"path": "core/aop-runtime/test/fixtures/modules/hello_point_cut/HelloPointCut.ts",
"chars": 2639,
"preview": "import assert from 'node:assert';\nimport { AccessLevel, Inject } from '@eggjs/core-decorator';\nimport { Advice } from '@"
},
{
"path": "core/aop-runtime/test/fixtures/modules/hello_point_cut/package.json",
"chars": 82,
"preview": "{\n \"name\": \"hello-point-cut\",\n \"eggModule\": {\n \"name\": \"helloPointCut\"\n }\n}\n"
},
{
"path": "core/aop-runtime/test/fixtures/modules/hello_succeed/Hello.ts",
"chars": 543,
"preview": "import { ContextProto } from '@eggjs/core-decorator';\nimport { Pointcut } from '@eggjs/aop-decorator';\nimport { Pointcut"
},
{
"path": "core/aop-runtime/test/fixtures/modules/hello_succeed/package.json",
"chars": 73,
"preview": "{\n \"name\": \"aop-module\",\n \"eggModule\": {\n \"name\": \"aopModule\"\n }\n}\n"
},
{
"path": "core/aop-runtime/test/fixtures/modules/should_throw/Hello.ts",
"chars": 471,
"preview": "import { ContextProto } from '@eggjs/core-decorator';\nimport { Advice, Pointcut } from '@eggjs/aop-decorator';\nimport ty"
},
{
"path": "core/aop-runtime/test/fixtures/modules/should_throw/package.json",
"chars": 84,
"preview": "{\n \"name\": \"throw-aop-module\",\n \"eggModule\": {\n \"name\": \"throwAopModule\"\n }\n}\n"
},
{
"path": "core/aop-runtime/test/fixtures/mutli/a/A.ts",
"chars": 214,
"preview": "import { ContextProto } from '@eggjs/core-decorator';\nimport { Base } from '../c/Base';\n\n@ContextProto()\nexport class A "
},
{
"path": "core/aop-runtime/test/fixtures/mutli/a/package.json",
"chars": 76,
"preview": "{\n \"name\": \"aop-module-a\",\n \"eggModule\": {\n \"name\": \"aopModuleA\"\n }\n}\n"
},
{
"path": "core/aop-runtime/test/fixtures/mutli/b/B.ts",
"chars": 214,
"preview": "import { ContextProto } from '@eggjs/core-decorator';\nimport { Base } from '../c/Base';\n\n@ContextProto()\nexport class B "
},
{
"path": "core/aop-runtime/test/fixtures/mutli/b/package.json",
"chars": 76,
"preview": "{\n \"name\": \"aop-module-b\",\n \"eggModule\": {\n \"name\": \"aopModuleB\"\n }\n}\n"
},
{
"path": "core/aop-runtime/test/fixtures/mutli/c/Base.ts",
"chars": 173,
"preview": "import { ContextProto } from '@eggjs/core-decorator';\n\n@ContextProto()\nexport class Base {\n id = 233;\n\n async hello(na"
},
{
"path": "core/aop-runtime/test/fixtures/mutli/c/package.json",
"chars": 76,
"preview": "{\n \"name\": \"aop-module-c\",\n \"eggModule\": {\n \"name\": \"aopModuleC\"\n }\n}\n"
},
{
"path": "core/aop-runtime/test/fixtures/mutli/cross/Cross.ts",
"chars": 905,
"preview": "import { AccessLevel } from '@eggjs/core-decorator';\nimport { Advice, Crosscut } from '@eggjs/aop-decorator';\nimport { A"
},
{
"path": "core/aop-runtime/test/fixtures/mutli/cross/package.json",
"chars": 82,
"preview": "{\n \"name\": \"hello-point-cut\",\n \"eggModule\": {\n \"name\": \"helloPointCut\"\n }\n}\n"
},
{
"path": "core/aop-runtime/tsconfig.json",
"chars": 172,
"preview": "{\n \"extends\": \"../../tsconfig.json\",\n \"compilerOptions\": {\n \"outDir\": \"dist\",\n \"baseUrl\": \"./\"\n },\n \"exclude\":"
},
{
"path": "core/aop-runtime/tsconfig.pub.json",
"chars": 172,
"preview": "{\n \"extends\": \"../../tsconfig.json\",\n \"compilerOptions\": {\n \"outDir\": \"dist\",\n \"baseUrl\": \"./\"\n },\n \"exclude\":"
},
{
"path": "core/background-task/CHANGELOG.md",
"chars": 28403,
"preview": "# Change Log\n\nAll notable changes to this project will be documented in this file.\nSee [Conventional Commits](https://co"
},
{
"path": "core/background-task/README.md",
"chars": 976,
"preview": "# `@eggjs/tegg-background-task`\n\n## install\n```sh\nnpm i --save @eggjs/tegg-background-task\n```\n\n## Usage\n\n```ts\nimport {"
},
{
"path": "core/background-task/index.ts",
"chars": 44,
"preview": "export * from './src/BackgroundTaskHelper';\n"
},
{
"path": "core/background-task/package.json",
"chars": 1490,
"preview": "{\n \"name\": \"@eggjs/tegg-background-task\",\n \"description\": \"background util for tegg\",\n \"version\": \"3.78.15\",\n \"keywo"
},
{
"path": "core/background-task/src/BackgroundTaskHelper.ts",
"chars": 3073,
"preview": "import assert from 'node:assert';\nimport type { EggLogger, EggAppConfig } from 'egg';\nimport { ContextProto, Inject } fr"
},
{
"path": "core/background-task/test/BackgroundTaskHelper.test.ts",
"chars": 1714,
"preview": "import assert from 'node:assert';\nimport { TimerUtil } from '@eggjs/tegg-common-util';\nimport { BackgroundTaskHelper } f"
},
{
"path": "core/background-task/tsconfig.json",
"chars": 172,
"preview": "{\n \"extends\": \"../../tsconfig.json\",\n \"compilerOptions\": {\n \"outDir\": \"dist\",\n \"baseUrl\": \"./\"\n },\n \"exclude\":"
},
{
"path": "core/background-task/tsconfig.pub.json",
"chars": 172,
"preview": "{\n \"extends\": \"../../tsconfig.json\",\n \"compilerOptions\": {\n \"outDir\": \"dist\",\n \"baseUrl\": \"./\"\n },\n \"exclude\":"
},
{
"path": "core/common-util/CHANGELOG.md",
"chars": 27325,
"preview": "# Change Log\n\nAll notable changes to this project will be documented in this file.\nSee [Conventional Commits](https://co"
},
{
"path": "core/common-util/README.md",
"chars": 4298,
"preview": "# @eggjs/tegg-common-util\n\nCommon utility functions for tegg framework.\n\n## ModuleConfigUtil.deduplicateModules\n\nA utili"
},
{
"path": "core/common-util/index.ts",
"chars": 405,
"preview": "export * from '@eggjs/tegg-types/common';\nexport * from './src/MapUtil';\nexport * from './src/NameUtil';\nexport * from '"
},
{
"path": "core/common-util/package.json",
"chars": 1356,
"preview": "{\n \"name\": \"@eggjs/tegg-common-util\",\n \"description\": \"common util for tegg\",\n \"version\": \"3.78.15\",\n \"keywords\": [\n"
},
{
"path": "core/common-util/src/FSUtil.ts",
"chars": 234,
"preview": "import { promises as fs } from 'fs';\n\nexport class FSUtil {\n static async fileExists(filePath: string): Promise<boolean"
},
{
"path": "core/common-util/src/Graph.ts",
"chars": 4700,
"preview": "import type { GraphNodeObj } from '@eggjs/tegg-types';\n\nconst inspect = Symbol.for('nodejs.util.inspect.custom');\n\nexpor"
},
{
"path": "core/common-util/src/MapUtil.ts",
"chars": 178,
"preview": "export class MapUtil {\n static getOrStore<K, V>(map: Map<K, V>, key: K, value: V): V {\n if (!map.has(key)) {\n m"
},
{
"path": "core/common-util/src/ModuleConfig.ts",
"chars": 13740,
"preview": "import assert from 'node:assert';\nimport fs, { promises as fsPromise } from 'node:fs';\nimport path from 'node:path';\nimp"
},
{
"path": "core/common-util/src/ModuleConfigs.ts",
"chars": 391,
"preview": "import type { ModuleConfig, ModuleConfigHolder } from '@eggjs/tegg-types';\n\nexport class ModuleConfigs {\n constructor(r"
},
{
"path": "core/common-util/src/NameUtil.ts",
"chars": 155,
"preview": "export class NameUtil {\n static getClassName(constructor: Function) {\n return constructor.name[0].toLowerCase() + co"
},
{
"path": "core/common-util/src/ObjectUtils.ts",
"chars": 1719,
"preview": "import { EggProtoImplClass } from '@eggjs/tegg-types';\n\nexport class ObjectUtils {\n static getProperties(obj: object): "
},
{
"path": "core/common-util/src/ProxyUtil.ts",
"chars": 315,
"preview": "export class ProxyUtil {\n static safeProxy<T extends object>(obj: T, getter: (obj: T, p: PropertyKey) => any) {\n ret"
},
{
"path": "core/common-util/src/StackUtil.ts",
"chars": 1266,
"preview": "/**\n * Capture call site stack from v8.\n * https://github.com/v8/v8/wiki/Stack-Trace-API\n */\n\nfunction prepareObjectStac"
},
{
"path": "core/common-util/src/StreamUtil.ts",
"chars": 144,
"preview": "import { Stream } from 'node:stream';\n\nexport class StreamUtil {\n static isStream(obj: any): boolean {\n return obj i"
},
{
"path": "core/common-util/src/TimerUtil.ts",
"chars": 734,
"preview": "class TimeoutError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'TimeoutError';\n"
},
{
"path": "core/common-util/test/MapUtil.test.ts",
"chars": 675,
"preview": "import assert from 'node:assert';\nimport { MapUtil } from '..';\n\ndescribe('test/MapUtil.test.ts', () => {\n it('should s"
},
{
"path": "core/common-util/test/ModuleConfig.test.ts",
"chars": 14042,
"preview": "import { strict as assert } from 'node:assert';\nimport path from 'node:path';\nimport { ModuleConfigUtil } from '../src/M"
},
{
"path": "core/common-util/test/NameUtil.test.ts",
"chars": 242,
"preview": "import assert from 'node:assert';\nimport { NameUtil } from '..';\n\ndescribe('test/NameUtil.test.ts', () => {\n it('should"
},
{
"path": "core/common-util/test/ObjectUtil.test.ts",
"chars": 1574,
"preview": "import assert from 'node:assert';\nimport { ObjectUtils } from '..';\n\nexport function InitTypeQualifier() {\n return func"
},
{
"path": "core/common-util/test/ProtoGraph.test.ts",
"chars": 3161,
"preview": "import assert from 'node:assert';\nimport type { GraphNodeObj } from '@eggjs/tegg-types';\nimport { GraphNode, Graph } fro"
},
{
"path": "core/common-util/test/TimerUtil.test.ts",
"chars": 1193,
"preview": "import { strict as assert } from 'node:assert';\nimport { TimerUtil } from '..';\n\ndescribe('test/TimerUtil.test.ts', () ="
},
{
"path": "core/common-util/test/fixtures/apps/app-with-module-json/app/module-a/package.json",
"chars": 69,
"preview": "{\n \"name\": \"module-a\",\n \"eggModule\": {\n \"name\": \"moduleA\"\n }\n}\n"
},
{
"path": "core/common-util/test/fixtures/apps/app-with-module-json/app/module-b/package.json",
"chars": 69,
"preview": "{\n \"name\": \"module-b\",\n \"eggModule\": {\n \"name\": \"moduleB\"\n }\n}\n"
},
{
"path": "core/common-util/test/fixtures/apps/app-with-module-json/config/module.json",
"chars": 71,
"preview": "[\n { \"path\": \"../app/module-a\" },\n { \"path\": \"../app/module-b\" }\n]\n"
},
{
"path": "core/common-util/test/fixtures/apps/app-with-module-json/package.json",
"chars": 20,
"preview": "{\n \"name\": \"foo\"\n}\n"
},
{
"path": "core/common-util/test/fixtures/apps/app-with-module-pkg-json/config/module.json",
"chars": 33,
"preview": "[\n { \"package\": \"module-a\" }\n]\n"
},
{
"path": "core/common-util/test/fixtures/apps/app-with-module-pkg-json/node_modules/module-a/index.js",
"chars": 36,
"preview": "'use strict';\n\nmodule.exports = {};\n"
},
{
"path": "core/common-util/test/fixtures/apps/app-with-module-pkg-json/node_modules/module-a/package.json",
"chars": 91,
"preview": "{\n \"name\": \"module-a\",\n \"main\": \"index.js\",\n \"eggModule\": {\n \"name\": \"moduleA\"\n }\n}\n"
},
{
"path": "core/common-util/test/fixtures/apps/app-with-module-pkg-json/package.json",
"chars": 20,
"preview": "{\n \"name\": \"foo\"\n}\n"
},
{
"path": "core/common-util/test/fixtures/apps/app-with-modules/app/module-a/package.json",
"chars": 69,
"preview": "{\n \"name\": \"module-a\",\n \"eggModule\": {\n \"name\": \"moduleA\"\n }\n}\n"
},
{
"path": "core/common-util/test/fixtures/apps/app-with-modules/package.json",
"chars": 20,
"preview": "{\n \"name\": \"foo\"\n}\n"
},
{
"path": "core/common-util/test/fixtures/apps/app-with-no-module-json/.sff/.other/module-d/package.json",
"chars": 69,
"preview": "{\n \"name\": \"module-d\",\n \"eggModule\": {\n \"name\": \"moduleD\"\n }\n}\n"
},
{
"path": "core/common-util/test/fixtures/apps/app-with-no-module-json/.sff/module-c/package.json",
"chars": 69,
"preview": "{\n \"name\": \"module-c\",\n \"eggModule\": {\n \"name\": \"moduleC\"\n }\n}\n"
},
{
"path": "core/common-util/test/fixtures/apps/app-with-no-module-json/app/module-a/package.json",
"chars": 69,
"preview": "{\n \"name\": \"module-a\",\n \"eggModule\": {\n \"name\": \"moduleA\"\n }\n}\n"
},
{
"path": "core/common-util/test/fixtures/apps/app-with-no-module-json/app/module-b/package.json",
"chars": 69,
"preview": "{\n \"name\": \"module-b\",\n \"eggModule\": {\n \"name\": \"moduleB\"\n }\n}\n"
},
{
"path": "core/common-util/test/fixtures/apps/app-with-no-module-json/app/module-b/test/fixtures/module-e/package.json",
"chars": 69,
"preview": "{\n \"name\": \"module-e\",\n \"eggModule\": {\n \"name\": \"moduleE\"\n }\n}\n"
},
{
"path": "core/common-util/test/fixtures/apps/app-with-no-module-json/node_modules/dep/index.js",
"chars": 36,
"preview": "'use strict';\n\nmodule.exports = {};\n"
},
{
"path": "core/common-util/test/fixtures/apps/app-with-no-module-json/node_modules/dep/package.json",
"chars": 42,
"preview": "{\n \"name\": \"dep\",\n \"main\": \"index.js\"\n}\n"
},
{
"path": "core/common-util/test/fixtures/apps/app-with-no-module-json/node_modules/module-c/index.js",
"chars": 36,
"preview": "'use strict';\n\nmodule.exports = {};\n"
},
{
"path": "core/common-util/test/fixtures/apps/app-with-no-module-json/node_modules/module-c/package.json",
"chars": 91,
"preview": "{\n \"name\": \"module-c\",\n \"main\": \"index.js\",\n \"eggModule\": {\n \"name\": \"moduleC\"\n }\n}\n"
},
{
"path": "core/common-util/test/fixtures/apps/app-with-no-module-json/package.json",
"chars": 91,
"preview": "{\n \"name\": \"foo\",\n \"dependencies\": {\n \"module-c\": \"^1.0.0\",\n \"dep\": \"^1.0.0\"\n }\n}\n"
},
{
"path": "core/common-util/test/fixtures/apps/app-with-no-module-json-duplicated/.sff/.other/module-d/package.json",
"chars": 69,
"preview": "{\n \"name\": \"module-d\",\n \"eggModule\": {\n \"name\": \"moduleD\"\n }\n}\n"
},
{
"path": "core/common-util/test/fixtures/apps/app-with-no-module-json-duplicated/.sff/module-c/package.json",
"chars": 69,
"preview": "{\n \"name\": \"module-c\",\n \"eggModule\": {\n \"name\": \"moduleC\"\n }\n}\n"
},
{
"path": "core/common-util/test/fixtures/apps/app-with-no-module-json-duplicated/app/module-a/package.json",
"chars": 69,
"preview": "{\n \"name\": \"module-a\",\n \"eggModule\": {\n \"name\": \"moduleA\"\n }\n}\n"
},
{
"path": "core/common-util/test/fixtures/apps/app-with-no-module-json-duplicated/app/module-b/package.json",
"chars": 69,
"preview": "{\n \"name\": \"module-b\",\n \"eggModule\": {\n \"name\": \"moduleB\"\n }\n}\n"
},
{
"path": "core/common-util/test/fixtures/apps/app-with-no-module-json-duplicated/app/module-b/test/fixtures/module-e/package.json",
"chars": 69,
"preview": "{\n \"name\": \"module-e\",\n \"eggModule\": {\n \"name\": \"moduleE\"\n }\n}\n"
},
{
"path": "core/common-util/test/fixtures/apps/app-with-no-module-json-duplicated/node_modules/module-b/index.js",
"chars": 36,
"preview": "'use strict';\n\nmodule.exports = {};\n"
},
{
"path": "core/common-util/test/fixtures/apps/app-with-no-module-json-duplicated/node_modules/module-b/package.json",
"chars": 91,
"preview": "{\n \"name\": \"module-b\",\n \"main\": \"index.js\",\n \"eggModule\": {\n \"name\": \"moduleB\"\n }\n}\n"
},
{
"path": "core/common-util/test/fixtures/apps/app-with-no-module-json-duplicated/package.json",
"chars": 70,
"preview": "{\n \"name\": \"foo\",\n \"dependencies\": {\n \"module-b\": \"^1.0.0\"\n }\n}\n"
},
{
"path": "core/common-util/test/fixtures/apps/app-with-symlink/app/module-a/package.json",
"chars": 69,
"preview": "{\n \"name\": \"module-a\",\n \"eggModule\": {\n \"name\": \"moduleA\"\n }\n}\n"
},
{
"path": "core/common-util/test/fixtures/apps/app-with-symlink/package.json",
"chars": 33,
"preview": "{\n \"name\": \"app-with-symlink\"\n}\n"
},
{
"path": "core/common-util/test/fixtures/modules/dev-module-config/module.dev.yml",
"chars": 21,
"preview": "mysql:\n port: 11306\n"
},
{
"path": "core/common-util/test/fixtures/modules/dev-module-config/module.yml",
"chars": 25,
"preview": "mysql:\n host: 127.0.0.1\n"
},
{
"path": "core/common-util/test/fixtures/modules/foo-yaml/module.yml",
"chars": 25,
"preview": "mysql:\n host: 127.0.0.1\n"
},
{
"path": "core/common-util/test/fixtures/monorepo/foo/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "core/common-util/test/fixtures/monorepo/packages/a/node_modules/c/package.json",
"chars": 93,
"preview": "{\n \"eggModule\": {\n \"name\": \"c\"\n },\n \"dependencies\": {},\n \"name\": \"c\",\n \"author\": \"\"\n}"
},
{
"path": "core/common-util/test/fixtures/monorepo/packages/a/package.json",
"chars": 109,
"preview": "{\n \"eggModule\": {\n \"name\": \"a\"\n },\n \"dependencies\": {\n \"c\": \"*\"\n },\n \"name\": \"b\",\n \"author\": \"\"\n}"
},
{
"path": "core/common-util/test/fixtures/monorepo/packages/b/package.json",
"chars": 110,
"preview": "{\n \"eggModule\": {\n \"name\": \"b\"\n },\n \"dependencies\": {\n \"a\": \"*\"\n },\n \"name\": \"b\",\n \"author\": \"\"\n}\n"
},
{
"path": "core/common-util/test/fixtures/monorepo/packages/d/node_modules/e/package.json",
"chars": 130,
"preview": "{\n \"eggModule\": {\n \"name\": \"e\"\n },\n \"name\": \"e\",\n \"exports\": {\n \"./package.json\": \"./package.json\"\n },\n \"aut"
},
{
"path": "core/common-util/test/fixtures/monorepo/packages/d/node_modules/f/package.json",
"chars": 122,
"preview": "{\n \"eggModule\": {\n \"name\": \"f\"\n },\n \"name\": \"f\",\n \"exports\": {\n \"./index.js\": \"./index.js\"\n },\n \"author\": \"\""
},
{
"path": "core/common-util/test/fixtures/monorepo/packages/d/package.json",
"chars": 123,
"preview": "{\n \"eggModule\": {\n \"name\": \"d\"\n },\n \"dependencies\": {\n \"e\": \"*\",\n \"f\": \"*\"\n },\n \"name\": \"d\",\n \"author\": \""
},
{
"path": "core/common-util/tsconfig.json",
"chars": 172,
"preview": "{\n \"extends\": \"../../tsconfig.json\",\n \"compilerOptions\": {\n \"outDir\": \"dist\",\n \"baseUrl\": \"./\"\n },\n \"exclude\":"
},
{
"path": "core/common-util/tsconfig.pub.json",
"chars": 172,
"preview": "{\n \"extends\": \"../../tsconfig.json\",\n \"compilerOptions\": {\n \"outDir\": \"dist\",\n \"baseUrl\": \"./\"\n },\n \"exclude\":"
},
{
"path": "core/controller-decorator/CHANGELOG.md",
"chars": 32728,
"preview": "# Change Log\n\nAll notable changes to this project will be documented in this file.\nSee [Conventional Commits](https://co"
}
]
// ... and 1479 more files (download for full content)
About this extraction
This page contains the full source code of the eggjs/tegg GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1679 files (3.2 MB), approximately 937.0k tokens, and a symbol index with 3566 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.