Copy disabled (too large)
Download .txt
Showing preview only (13,577K chars total). Download the full file to get everything.
Repository: eggjs/egg
Branch: next
Commit: 1980cf16dc06
Files: 6135
Total size: 11.6 MB
Directory structure:
gitextract_0ajxm_o6/
├── .github/
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug-report-cn.yml
│ │ ├── bug-report.yml
│ │ ├── feature-request-cn.yml
│ │ ├── feature-request.yml
│ │ ├── rfc-cn.yml
│ │ └── rfc.yml
│ ├── actions/
│ │ └── clone/
│ │ └── action.yml
│ ├── copilot-instructions.md
│ └── workflows/
│ ├── ci.yml
│ ├── cleanup-cache.yml
│ ├── e2e-test.yml
│ └── release.yml
├── .gitignore
├── .husky/
│ └── pre-commit
├── .node-version
├── .oxfmtrc.json
├── .oxlintrc.json
├── .vscode/
│ └── settings.json
├── AGENTS.md
├── CHANGELOG.md
├── CLAUDE.md
├── CONTRIBUTING.md
├── CONTRIBUTING.zh-CN.md
├── LICENSE
├── README.md
├── README.zh-CN.md
├── SECURITY.md
├── ecosystem-ci/
│ ├── clone.ts
│ ├── patch-project.ts
│ └── repo.json
├── examples/
│ ├── helloworld-commonjs/
│ │ ├── app/
│ │ │ ├── controller/
│ │ │ │ └── home.js
│ │ │ └── router.js
│ │ ├── config/
│ │ │ ├── config.default.js
│ │ │ └── plugin.js
│ │ ├── index.js
│ │ └── package.json
│ ├── helloworld-tegg/
│ │ ├── app/
│ │ │ ├── biz/
│ │ │ │ ├── Foo.ts
│ │ │ │ ├── HelloService.ts
│ │ │ │ ├── WorldService.ts
│ │ │ │ └── package.json
│ │ │ └── port/
│ │ │ ├── controller/
│ │ │ │ ├── ArgsController.ts
│ │ │ │ ├── HomeController.ts
│ │ │ │ └── SimpleController.ts
│ │ │ ├── package.json
│ │ │ └── schedule/
│ │ │ ├── CronDemo.ts
│ │ │ └── Demo.ts
│ │ ├── app.ts
│ │ ├── config/
│ │ │ ├── config.default.ts
│ │ │ └── plugin.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── ArgsController.test.ts
│ │ │ ├── SimpleController.test.ts
│ │ │ └── setup.ts
│ │ ├── tsconfig.json
│ │ ├── tsdown.config.ts
│ │ └── vitest.config.ts
│ └── helloworld-typescript/
│ ├── app/
│ │ ├── controller/
│ │ │ └── home.ts
│ │ ├── middleware/
│ │ │ └── hello.ts
│ │ └── router.ts
│ ├── app.ts
│ ├── config/
│ │ └── config.default.ts
│ ├── package.json
│ ├── test/
│ │ ├── hello.test.ts
│ │ └── setup.ts
│ ├── tsconfig.json
│ ├── tsdown.config.ts
│ └── vitest.config.ts
├── package.json
├── packages/
│ ├── cluster/
│ │ ├── .gitignore
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── agent_worker.ts
│ │ │ ├── app_worker.ts
│ │ │ ├── error/
│ │ │ │ ├── ClusterAgentWorkerError.ts
│ │ │ │ ├── ClusterWorkerExceptionError.ts
│ │ │ │ └── index.ts
│ │ │ ├── index.ts
│ │ │ ├── master.ts
│ │ │ └── utils/
│ │ │ ├── messenger.ts
│ │ │ ├── mode/
│ │ │ │ ├── base/
│ │ │ │ │ ├── agent.ts
│ │ │ │ │ └── app.ts
│ │ │ │ └── impl/
│ │ │ │ ├── process/
│ │ │ │ │ ├── agent.ts
│ │ │ │ │ └── app.ts
│ │ │ │ └── worker_threads/
│ │ │ │ ├── agent.ts
│ │ │ │ └── app.ts
│ │ │ ├── options.ts
│ │ │ ├── terminate.ts
│ │ │ └── worker_manager.ts
│ │ ├── test/
│ │ │ ├── agent_worker.test.ts
│ │ │ ├── app_worker.test.ts
│ │ │ ├── fixtures/
│ │ │ │ ├── apps/
│ │ │ │ │ ├── agent-debug-port/
│ │ │ │ │ │ ├── agent.js
│ │ │ │ │ │ ├── inject1.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── agent-die/
│ │ │ │ │ │ ├── agent.js
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ ├── package.json
│ │ │ │ │ │ └── start.js
│ │ │ │ │ ├── agent-die-on-forkapp/
│ │ │ │ │ │ ├── agent.js
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── agent-die-onboot/
│ │ │ │ │ │ ├── agent.js
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ ├── package.json
│ │ │ │ │ │ └── start.js
│ │ │ │ │ ├── agent-exit/
│ │ │ │ │ │ ├── agent.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── agent-start-error/
│ │ │ │ │ │ ├── agent.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── agent-start-framework-error/
│ │ │ │ │ │ ├── agent.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── agent-start-framework-ready-error/
│ │ │ │ │ │ ├── agent.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── agent-worker-threads/
│ │ │ │ │ │ ├── agent.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── plugin.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── agent-worker-threads-error/
│ │ │ │ │ │ ├── agent.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── app-die/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── app-error-listeners/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── app-exit/
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── app-kill/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── app-listen-hostname/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── app-listen-path/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── app-listen-port/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── app-listen-reusePort/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── app-listen-without-port/
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── app-monitor/
│ │ │ │ │ │ ├── agent.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── app-server/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── app-start-error/
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── app-start-framework-error/
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── app-start-framework-ready-error/
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── app-start-timeout/
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── before-close/
│ │ │ │ │ │ ├── agent.js
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── check-status/
│ │ │ │ │ │ ├── agent.js
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── cluster_mod_app/
│ │ │ │ │ │ ├── .gitignore
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ └── home.js
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── cluster_mod_sticky/
│ │ │ │ │ │ ├── .gitignore
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ └── home.js
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── custom-logger/
│ │ │ │ │ │ ├── agent.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── debug-port/
│ │ │ │ │ │ ├── agent.js
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── egg-ready/
│ │ │ │ │ │ ├── agent.js
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── framework/
│ │ │ │ │ │ ├── agent.js
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── plugin.js
│ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ ├── lib/
│ │ │ │ │ │ │ ├── agent.js
│ │ │ │ │ │ │ ├── framework.js
│ │ │ │ │ │ │ └── plugins/
│ │ │ │ │ │ │ └── custom/
│ │ │ │ │ │ │ ├── agent.js
│ │ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── framework-egg-default/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── framework-egg-default-noexist/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── framework-pkg-egg/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── framework-pkg-egg-noexist/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── frameworkapp/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ └── home.js
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── frameworkbiz/
│ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── https-server/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── https-server-config/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── master-worker-started/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── messenger/
│ │ │ │ │ │ ├── agent.js
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── mock-production-app/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ │ └── map.json
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── options/
│ │ │ │ │ │ ├── agent.js
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── plugin.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── options-require/
│ │ │ │ │ │ ├── agent.js
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ ├── inject.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── other-port/
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── pid/
│ │ │ │ │ │ ├── agent.js
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── reload-worker/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── script-start/
│ │ │ │ │ │ └── start-server.js
│ │ │ │ │ ├── send-to-multiapp/
│ │ │ │ │ │ ├── agent.js
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── sub-process/
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ ├── package.json
│ │ │ │ │ │ ├── worker1.js
│ │ │ │ │ │ └── worker2.js
│ │ │ │ │ ├── sub-process-sigkill/
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ ├── package.json
│ │ │ │ │ │ ├── worker1.js
│ │ │ │ │ │ └── worker2.js
│ │ │ │ │ ├── worker-close-timeout/
│ │ │ │ │ │ ├── agent.js
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── worker-die/
│ │ │ │ │ ├── app.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── egg/
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── server.ca
│ │ │ │ ├── server.cert
│ │ │ │ └── server.key
│ │ │ ├── https.test.ts
│ │ │ ├── master/
│ │ │ │ ├── after-start.test.ts
│ │ │ │ ├── check-pid-file.test.ts
│ │ │ │ ├── close-master.test.ts
│ │ │ │ ├── messenger.test.ts
│ │ │ │ ├── others.test.ts
│ │ │ │ └── start-master.test.ts
│ │ │ ├── options.test.ts
│ │ │ ├── utils.ts
│ │ │ └── worker_threads.test.ts
│ │ ├── tsconfig.json
│ │ ├── tsdown.config.ts
│ │ └── vitest.config.ts
│ ├── cookies/
│ │ ├── .gitignore
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── README.zh-CN.md
│ │ ├── benchmark/
│ │ │ └── index.cjs
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── cookie.ts
│ │ │ ├── cookies.ts
│ │ │ ├── error.ts
│ │ │ ├── index.ts
│ │ │ └── keygrip.ts
│ │ ├── test/
│ │ │ ├── cookie.test.ts
│ │ │ ├── cookies.test.ts
│ │ │ ├── cookies.ts
│ │ │ └── keygrip.test.ts
│ │ ├── tsconfig.json
│ │ └── tsdown.config.ts
│ ├── core/
│ │ ├── .gitignore
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── benchmark/
│ │ │ └── middleware/
│ │ │ ├── README.md
│ │ │ ├── app/
│ │ │ │ ├── controller/
│ │ │ │ │ └── home.js
│ │ │ │ ├── middleware/
│ │ │ │ │ └── async.js
│ │ │ │ └── router.js
│ │ │ ├── package.json
│ │ │ ├── run.sh
│ │ │ └── start.js
│ │ ├── example/
│ │ │ └── middleware/
│ │ │ └── hello.ts
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── base_context_class.ts
│ │ │ ├── egg.ts
│ │ │ ├── index.ts
│ │ │ ├── lifecycle.ts
│ │ │ ├── loader/
│ │ │ │ ├── context_loader.ts
│ │ │ │ ├── egg_loader.ts
│ │ │ │ └── file_loader.ts
│ │ │ ├── singleton.ts
│ │ │ ├── types.ts
│ │ │ └── utils/
│ │ │ ├── index.ts
│ │ │ ├── sequencify.ts
│ │ │ └── timing.ts
│ │ ├── test/
│ │ │ ├── __snapshots__/
│ │ │ │ └── index.test.ts.snap
│ │ │ ├── asyncLocalStorage.test.ts
│ │ │ ├── egg-ts.test.ts
│ │ │ ├── egg.test.ts
│ │ │ ├── fixtures/
│ │ │ │ ├── agent/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── extend/
│ │ │ │ │ │ ├── agent.js
│ │ │ │ │ │ └── context.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ ├── node_modules/
│ │ │ │ │ │ ├── a/
│ │ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ │ └── extend/
│ │ │ │ │ │ │ │ └── agent.js
│ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ └── b/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ └── extend/
│ │ │ │ │ │ │ └── agent.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── package.json
│ │ │ │ ├── app-before-close/
│ │ │ │ │ ├── app.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── app-core-middleware/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.default.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── app-getter/
│ │ │ │ │ └── package.json
│ │ │ │ ├── app-noname/
│ │ │ │ │ └── package.json
│ │ │ │ ├── app-outdir-pkg/
│ │ │ │ │ └── package.json
│ │ │ │ ├── app-outdir-precedence/
│ │ │ │ │ ├── build/
│ │ │ │ │ │ └── config/
│ │ │ │ │ │ └── config.default.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── tsconfig.json
│ │ │ │ ├── app-outdir-tsconfig/
│ │ │ │ │ ├── build/
│ │ │ │ │ │ └── config/
│ │ │ │ │ │ └── config.default.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── tsconfig.json
│ │ │ │ ├── app-ts/
│ │ │ │ │ ├── app-error.ts
│ │ │ │ │ ├── app.ts
│ │ │ │ │ └── tsconfig.json
│ │ │ │ ├── appinfo/
│ │ │ │ │ └── package.json
│ │ │ │ ├── application/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── extend/
│ │ │ │ │ │ ├── application.js
│ │ │ │ │ │ └── context.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ ├── node_modules/
│ │ │ │ │ │ ├── a/
│ │ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ │ └── extend/
│ │ │ │ │ │ │ │ └── application.js
│ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ └── b/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ └── extend/
│ │ │ │ │ │ │ └── application.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── package.json
│ │ │ │ ├── appname/
│ │ │ │ │ └── package.json
│ │ │ │ ├── beforestart/
│ │ │ │ │ ├── app.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── beforestart-error/
│ │ │ │ │ ├── app.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── beforestart-params-error/
│ │ │ │ │ ├── app.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── beforestart-timeout/
│ │ │ │ │ ├── app.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── beforestart-with-timeout-env/
│ │ │ │ │ ├── app.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── boot/
│ │ │ │ │ ├── agent.js
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── plugin/
│ │ │ │ │ │ ├── boot-plugin/
│ │ │ │ │ │ │ ├── agent.js
│ │ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ ├── boot-plugin-dep/
│ │ │ │ │ │ │ ├── agent.js
│ │ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ └── boot-plugin-empty/
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── app.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── boot-before-close/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── plugin/
│ │ │ │ │ │ ├── boot-plugin/
│ │ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ └── boot-plugin-dep/
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── app.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── boot-configDidLoad-error/
│ │ │ │ │ ├── app.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── boot-didLoad-error/
│ │ │ │ │ ├── app.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── boot-didReady-error/
│ │ │ │ │ ├── app.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── boot-serverDidLoad-error/
│ │ │ │ │ ├── app.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── boot-timeout/
│ │ │ │ │ ├── app.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── boot-willReady-error/
│ │ │ │ │ ├── app.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── close/
│ │ │ │ │ └── package.json
│ │ │ │ ├── config/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ ├── foo.js
│ │ │ │ │ │ │ └── util/
│ │ │ │ │ │ │ └── a.js
│ │ │ │ │ │ └── services/
│ │ │ │ │ │ ├── foo.js
│ │ │ │ │ │ └── util/
│ │ │ │ │ │ └── bar.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── config-array/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── plugin/
│ │ │ │ │ ├── a/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── b/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.default.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── config-env/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.default.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── config-env-app-config/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.default.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── configmeta/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── context-loader/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── depth/
│ │ │ │ │ │ │ ├── four/
│ │ │ │ │ │ │ │ └── four/
│ │ │ │ │ │ │ │ └── four/
│ │ │ │ │ │ │ │ └── four.js
│ │ │ │ │ │ │ ├── one.js
│ │ │ │ │ │ │ ├── three/
│ │ │ │ │ │ │ │ └── three/
│ │ │ │ │ │ │ │ └── three.js
│ │ │ │ │ │ │ └── two/
│ │ │ │ │ │ │ └── two.js
│ │ │ │ │ │ ├── extend/
│ │ │ │ │ │ │ └── context.js
│ │ │ │ │ │ ├── pathname/
│ │ │ │ │ │ │ └── a/
│ │ │ │ │ │ │ └── b/
│ │ │ │ │ │ │ └── c.js
│ │ │ │ │ │ ├── router.js
│ │ │ │ │ │ ├── service/
│ │ │ │ │ │ │ ├── post.js
│ │ │ │ │ │ │ └── user.js
│ │ │ │ │ │ ├── service1/
│ │ │ │ │ │ │ └── user.js
│ │ │ │ │ │ ├── service2/
│ │ │ │ │ │ │ └── user.js
│ │ │ │ │ │ └── type/
│ │ │ │ │ │ ├── class.js
│ │ │ │ │ │ ├── function-class.js
│ │ │ │ │ │ ├── generator.js
│ │ │ │ │ │ ├── null
│ │ │ │ │ │ ├── number.js
│ │ │ │ │ │ └── object.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.default.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── controller-app/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ ├── admin/
│ │ │ │ │ │ │ │ └── config.js
│ │ │ │ │ │ │ ├── async_function.js
│ │ │ │ │ │ │ ├── class.js
│ │ │ │ │ │ │ ├── class_inherited.js
│ │ │ │ │ │ │ ├── class_wrap_function.js
│ │ │ │ │ │ │ ├── function_attr.js
│ │ │ │ │ │ │ ├── generator_function.js
│ │ │ │ │ │ │ ├── generator_function_ctx.js
│ │ │ │ │ │ │ ├── number.js
│ │ │ │ │ │ │ ├── object.js
│ │ │ │ │ │ │ ├── resource_class.js
│ │ │ │ │ │ │ └── resource_object.js
│ │ │ │ │ │ ├── router.js
│ │ │ │ │ │ └── service/
│ │ │ │ │ │ └── home.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── controller-next-argument/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── controller/
│ │ │ │ │ │ └── home.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── controller-params/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ ├── class.js
│ │ │ │ │ │ │ ├── generator_function.js
│ │ │ │ │ │ │ └── object.js
│ │ │ │ │ │ └── router.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.default.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── custom-loader/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── adapter/
│ │ │ │ │ │ │ └── docker.js
│ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ └── user.js
│ │ │ │ │ │ ├── plugin/
│ │ │ │ │ │ │ └── a.js
│ │ │ │ │ │ ├── repository/
│ │ │ │ │ │ │ └── user.js
│ │ │ │ │ │ ├── router.js
│ │ │ │ │ │ └── util/
│ │ │ │ │ │ ├── sub/
│ │ │ │ │ │ │ └── fn.js
│ │ │ │ │ │ └── test.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── b/
│ │ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ │ └── plugin/
│ │ │ │ │ │ │ │ └── b.js
│ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── custom_session_invaild/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── middleware/
│ │ │ │ │ │ └── session.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── deprecate/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── extend/
│ │ │ │ │ │ └── application.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── dont-load-plugin/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── egg/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── extend/
│ │ │ │ │ │ │ └── application.js
│ │ │ │ │ │ └── middleware/
│ │ │ │ │ │ └── status.ts
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── config.default.ts
│ │ │ │ │ │ ├── config.unittest.js
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ ├── index.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── plugins/
│ │ │ │ │ ├── configclient/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── diamond/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── eagleeye/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── hsfclient/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── zzz/
│ │ │ │ │ └── package.json
│ │ │ │ ├── egg-esm/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── extend/
│ │ │ │ │ │ │ └── application.js
│ │ │ │ │ │ └── middleware/
│ │ │ │ │ │ └── status.ts
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ ├── config.unittest.js
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── node_modules/
│ │ │ │ │ │ ├── opt/
│ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ ├── package/
│ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ └── session/
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── plugins/
│ │ │ │ │ ├── configclient/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── diamond/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── eagleeye/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── hsfclient/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── zzz/
│ │ │ │ │ └── package.json
│ │ │ │ ├── egg-ts/
│ │ │ │ │ ├── agent.ts
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ └── home.ts
│ │ │ │ │ │ ├── extend/
│ │ │ │ │ │ │ ├── agent.ts
│ │ │ │ │ │ │ ├── application.ts
│ │ │ │ │ │ │ ├── context.ts
│ │ │ │ │ │ │ ├── helper.ts
│ │ │ │ │ │ │ ├── request.ts
│ │ │ │ │ │ │ └── response.ts
│ │ │ │ │ │ ├── middleware/
│ │ │ │ │ │ │ └── mid.ts
│ │ │ │ │ │ ├── router.ts
│ │ │ │ │ │ └── service/
│ │ │ │ │ │ └── Test.ts
│ │ │ │ │ ├── app.ts
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── config.default.ts
│ │ │ │ │ │ └── plugin.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── plugins/
│ │ │ │ │ └── a/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.default.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── egg-ts-js/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ ├── god.d.ts
│ │ │ │ │ │ │ └── test.ts
│ │ │ │ │ │ ├── extend/
│ │ │ │ │ │ │ └── application.ts
│ │ │ │ │ │ └── service/
│ │ │ │ │ │ ├── lord.js
│ │ │ │ │ │ └── test.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── egg-ts-js-tsconfig-paths/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ ├── god.d.ts
│ │ │ │ │ │ │ └── test.ts
│ │ │ │ │ │ ├── extend/
│ │ │ │ │ │ │ └── application.ts
│ │ │ │ │ │ └── service/
│ │ │ │ │ │ ├── lord.js
│ │ │ │ │ │ └── test.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── tsconfig.json
│ │ │ │ ├── eggpath/
│ │ │ │ │ └── package.json
│ │ │ │ ├── env-disable/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ ├── node_modules/
│ │ │ │ │ │ └── @ali/
│ │ │ │ │ │ ├── a/
│ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ └── b/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── package.json
│ │ │ │ ├── extend/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ ├── home.js
│ │ │ │ │ │ │ └── merge.js
│ │ │ │ │ │ ├── extend/
│ │ │ │ │ │ │ ├── application.js
│ │ │ │ │ │ │ ├── call.js
│ │ │ │ │ │ │ ├── context.js
│ │ │ │ │ │ │ ├── request.js
│ │ │ │ │ │ │ └── response.js
│ │ │ │ │ │ └── router.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ ├── node_modules/
│ │ │ │ │ │ ├── a/
│ │ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ │ └── extend/
│ │ │ │ │ │ │ │ ├── application.js
│ │ │ │ │ │ │ │ ├── context.js
│ │ │ │ │ │ │ │ ├── request.js
│ │ │ │ │ │ │ │ └── response.js
│ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ └── b/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ └── extend/
│ │ │ │ │ │ │ ├── application.js
│ │ │ │ │ │ │ ├── context/
│ │ │ │ │ │ │ │ └── index.js
│ │ │ │ │ │ │ ├── request.js
│ │ │ │ │ │ │ └── response.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── package.json
│ │ │ │ ├── extend-controller-service/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ └── api.js
│ │ │ │ │ │ ├── router.js
│ │ │ │ │ │ └── service/
│ │ │ │ │ │ └── api.js
│ │ │ │ │ ├── app.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── extend-env/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── extend/
│ │ │ │ │ │ ├── application.custom.js
│ │ │ │ │ │ └── application.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── plugins/
│ │ │ │ │ └── a/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── extend/
│ │ │ │ │ │ └── application.custom.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── extend-symbol/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── extend/
│ │ │ │ │ │ └── application.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── extend-with-class/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ └── home.js
│ │ │ │ │ │ ├── extend/
│ │ │ │ │ │ │ ├── application.js
│ │ │ │ │ │ │ ├── context.js
│ │ │ │ │ │ │ ├── request.js
│ │ │ │ │ │ │ └── response.js
│ │ │ │ │ │ └── router.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── extends-app-service/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ └── user.js
│ │ │ │ │ │ ├── router.js
│ │ │ │ │ │ └── service/
│ │ │ │ │ │ └── user.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── framework-dulp/
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── framework-nosymbol/
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── framework-symbol/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.js
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── framework-wrong-eggpath/
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── helloworld-ts/
│ │ │ │ │ ├── .eslintrc
│ │ │ │ │ ├── .gitignore
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ └── foo.ts
│ │ │ │ │ │ └── router.ts
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.default.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── test/
│ │ │ │ │ │ └── index.test.ts
│ │ │ │ │ └── tsconfig.json
│ │ │ │ ├── helper/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ └── home.js
│ │ │ │ │ │ ├── extend/
│ │ │ │ │ │ │ ├── application.js
│ │ │ │ │ │ │ ├── context.js
│ │ │ │ │ │ │ └── helper.js
│ │ │ │ │ │ └── router.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ ├── node_modules/
│ │ │ │ │ │ ├── a/
│ │ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ │ └── extend/
│ │ │ │ │ │ │ │ └── helper.js
│ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ └── b/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ └── extend/
│ │ │ │ │ │ │ └── helper.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── package.json
│ │ │ │ ├── load-plugin-by-env/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── plugin.custom.js
│ │ │ │ │ │ ├── plugin.js
│ │ │ │ │ │ └── plugin.unittest.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── plugins/
│ │ │ │ │ ├── a/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── b/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── c/
│ │ │ │ │ └── package.json
│ │ │ │ ├── load-plugin-config-override/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── plugins/
│ │ │ │ │ └── zzz/
│ │ │ │ │ └── package.json
│ │ │ │ ├── load-plugin-default/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── plugin.default.js
│ │ │ │ │ │ ├── plugin.js
│ │ │ │ │ │ └── plugin.unittest.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── plugins/
│ │ │ │ │ ├── a/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── b/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── c/
│ │ │ │ │ └── package.json
│ │ │ │ ├── load-plugin-unittest/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── extend/
│ │ │ │ │ │ ├── application.local.js
│ │ │ │ │ │ └── application.unittest.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── load_context_error/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── extend/
│ │ │ │ │ │ └── context.js
│ │ │ │ │ ├── load_context/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── package.json
│ │ │ │ ├── load_context_syntax_error/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── extend/
│ │ │ │ │ │ └── context.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── load_dirs/
│ │ │ │ │ ├── babel/
│ │ │ │ │ │ └── UserProxy.js
│ │ │ │ │ ├── camelize/
│ │ │ │ │ │ ├── FooBar3.js
│ │ │ │ │ │ ├── foo-bar4.js
│ │ │ │ │ │ ├── fooBar2.js
│ │ │ │ │ │ └── foo_bar1.js
│ │ │ │ │ ├── class/
│ │ │ │ │ │ └── UserProxy.js
│ │ │ │ │ ├── dao/
│ │ │ │ │ │ ├── TestClass.js
│ │ │ │ │ │ ├── testFunction.js
│ │ │ │ │ │ └── testReturnFunction.js
│ │ │ │ │ ├── error/
│ │ │ │ │ │ ├── dotdir/
│ │ │ │ │ │ │ └── dot.dir/
│ │ │ │ │ │ │ └── a.js
│ │ │ │ │ │ ├── underscore-dir/
│ │ │ │ │ │ │ └── _underscore/
│ │ │ │ │ │ │ └── a.js
│ │ │ │ │ │ ├── underscore-file/
│ │ │ │ │ │ │ └── _private.js
│ │ │ │ │ │ └── underscore-file-in-dir/
│ │ │ │ │ │ └── dir/
│ │ │ │ │ │ └── _a.js
│ │ │ │ │ ├── es6_module/
│ │ │ │ │ │ └── mod.js
│ │ │ │ │ ├── filter/
│ │ │ │ │ │ ├── arr.js
│ │ │ │ │ │ ├── class.js
│ │ │ │ │ │ └── object.js
│ │ │ │ │ ├── ignore/
│ │ │ │ │ │ ├── a.js
│ │ │ │ │ │ └── util/
│ │ │ │ │ │ ├── a.js
│ │ │ │ │ │ └── b/
│ │ │ │ │ │ └── b.js
│ │ │ │ │ ├── inject/
│ │ │ │ │ │ ├── a.js
│ │ │ │ │ │ └── b.js
│ │ │ │ │ ├── lowercase/
│ │ │ │ │ │ ├── SomeClass.js
│ │ │ │ │ │ └── SomeDir/
│ │ │ │ │ │ └── SomeSubClass.js
│ │ │ │ │ ├── middlewares/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── m1.js
│ │ │ │ │ │ │ ├── m2.js
│ │ │ │ │ │ │ └── other/
│ │ │ │ │ │ │ ├── bar.js
│ │ │ │ │ │ │ └── foo/
│ │ │ │ │ │ │ └── ok.js
│ │ │ │ │ │ └── default/
│ │ │ │ │ │ ├── dm1.js
│ │ │ │ │ │ ├── dm2.js
│ │ │ │ │ │ └── session.js
│ │ │ │ │ ├── overwrite_services/
│ │ │ │ │ │ └── foo.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── services/
│ │ │ │ │ │ ├── bar.js/
│ │ │ │ │ │ │ └── aaa
│ │ │ │ │ │ ├── dir/
│ │ │ │ │ │ │ ├── abc.js
│ │ │ │ │ │ │ └── service.js
│ │ │ │ │ │ ├── foo.js
│ │ │ │ │ │ ├── foo_bar_hello.js
│ │ │ │ │ │ ├── foo_service.js
│ │ │ │ │ │ ├── hyphen-dir/
│ │ │ │ │ │ │ └── a.js
│ │ │ │ │ │ ├── null.js
│ │ │ │ │ │ ├── tmp
│ │ │ │ │ │ ├── underscore_dir/
│ │ │ │ │ │ │ └── a.js
│ │ │ │ │ │ └── userProfile.js
│ │ │ │ │ ├── syntax_error/
│ │ │ │ │ │ └── error.js
│ │ │ │ │ ├── ts_module/
│ │ │ │ │ │ ├── mod.ts
│ │ │ │ │ │ ├── mod2.ts
│ │ │ │ │ │ └── mod3.ts
│ │ │ │ │ └── yml/
│ │ │ │ │ └── config.yml
│ │ │ │ ├── load_file/
│ │ │ │ │ ├── async.js
│ │ │ │ │ ├── es-module-default-async.js
│ │ │ │ │ ├── es-module-default-null.js
│ │ │ │ │ ├── es-module-default-promise.js
│ │ │ │ │ ├── es-module-default.js
│ │ │ │ │ ├── function.js
│ │ │ │ │ ├── no-js.yml
│ │ │ │ │ ├── obj.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── promise_function.js
│ │ │ │ ├── load_to_app/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── model/
│ │ │ │ │ │ │ └── user.js
│ │ │ │ │ │ └── service/
│ │ │ │ │ │ └── user.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── loadfile/
│ │ │ │ │ ├── es-module-default-async.js
│ │ │ │ │ ├── es-module-default-null.js
│ │ │ │ │ ├── es-module-default-promise.js
│ │ │ │ │ ├── es-module-default.js
│ │ │ │ │ ├── es-module.js
│ │ │ │ │ ├── no-js.yml
│ │ │ │ │ ├── null.js
│ │ │ │ │ ├── object.js
│ │ │ │ │ ├── object2.mjs
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── zero.js
│ │ │ │ ├── loadfile-esm/
│ │ │ │ │ ├── es-module-default-async.js
│ │ │ │ │ ├── es-module-default-null.js
│ │ │ │ │ ├── es-module-default-promise.js
│ │ │ │ │ ├── es-module-default.js
│ │ │ │ │ ├── es-module.js
│ │ │ │ │ ├── no-js.yml
│ │ │ │ │ ├── null.js
│ │ │ │ │ ├── object.js
│ │ │ │ │ ├── object2.cjs
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── zero.js
│ │ │ │ ├── middleware-aa/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── middleware/
│ │ │ │ │ │ │ ├── common.js
│ │ │ │ │ │ │ ├── custom.js
│ │ │ │ │ │ │ ├── match.js
│ │ │ │ │ │ │ ├── router.js
│ │ │ │ │ │ │ └── static.js
│ │ │ │ │ │ └── router.js
│ │ │ │ │ ├── app.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── middleware-app-disable/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── middleware/
│ │ │ │ │ │ ├── custom.js
│ │ │ │ │ │ └── static.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── middleware-disable/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── middleware/
│ │ │ │ │ │ ├── custom.js
│ │ │ │ │ │ └── static.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── middleware-ignore/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── middleware/
│ │ │ │ │ │ ├── custom.js
│ │ │ │ │ │ └── static.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── middleware-match/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── middleware/
│ │ │ │ │ │ ├── custom.js
│ │ │ │ │ │ └── static.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── middleware-override/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── middleware/
│ │ │ │ │ │ ├── custom.js
│ │ │ │ │ │ └── static.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── config.js
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ ├── node_modules/
│ │ │ │ │ │ ├── a/
│ │ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ │ └── middleware/
│ │ │ │ │ │ │ │ ├── a.js
│ │ │ │ │ │ │ │ └── custom.js
│ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ └── b/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ └── middleware/
│ │ │ │ │ │ │ ├── b.js
│ │ │ │ │ │ │ ├── custom.js
│ │ │ │ │ │ │ └── status.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── package.json
│ │ │ │ ├── middleware-redefined/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── middleware/
│ │ │ │ │ │ ├── custom.js
│ │ │ │ │ │ └── static.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── no-core-middleware/
│ │ │ │ │ └── package.json
│ │ │ │ ├── no-dep-plugin/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── plugins/
│ │ │ │ │ └── a/
│ │ │ │ │ └── package.json
│ │ │ │ ├── no-helper/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── extend/
│ │ │ │ │ │ └── helper.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── no-middleware/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── no-redefine-plugin/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── noplugin/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── nothing/
│ │ │ │ │ └── package.json
│ │ │ │ ├── notready/
│ │ │ │ │ ├── a/
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── other-directory/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── other-controller/
│ │ │ │ │ │ │ └── user.js
│ │ │ │ │ │ ├── other-middleware/
│ │ │ │ │ │ │ └── user.js
│ │ │ │ │ │ └── other-service/
│ │ │ │ │ │ └── user.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── plugin/
│ │ │ │ │ ├── agent.js
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── proxy/
│ │ │ │ │ │ │ ├── OnlyClassQuery.js
│ │ │ │ │ │ │ ├── UserInfoQuery.js
│ │ │ │ │ │ │ └── couponQuery.js
│ │ │ │ │ │ ├── router.js
│ │ │ │ │ │ └── service/
│ │ │ │ │ │ ├── Foo4.js
│ │ │ │ │ │ ├── foo.js
│ │ │ │ │ │ ├── foo2.js
│ │ │ │ │ │ ├── foo3/
│ │ │ │ │ │ │ └── foo3.js
│ │ │ │ │ │ └── fooDir/
│ │ │ │ │ │ └── Foo5.js
│ │ │ │ │ ├── app.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── config.js
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ ├── node_modules/
│ │ │ │ │ │ ├── a/
│ │ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ │ ├── proxy/
│ │ │ │ │ │ │ │ │ └── a.js
│ │ │ │ │ │ │ │ └── service/
│ │ │ │ │ │ │ │ └── bar1.js
│ │ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ │ └── config.js
│ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ ├── a1/
│ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ ├── b/
│ │ │ │ │ │ │ ├── agent.js
│ │ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ │ └── service/
│ │ │ │ │ │ │ │ └── bar2.js
│ │ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ ├── c/
│ │ │ │ │ │ │ ├── agent.js
│ │ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ │ └── config.js
│ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ ├── d/
│ │ │ │ │ │ │ ├── .gitkeep
│ │ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ │ └── config.js
│ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ └── rds/
│ │ │ │ │ │ ├── .gitkeep
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── plugin-middleware/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── plugin-proxy/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── plugins/
│ │ │ │ │ ├── e/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── g/
│ │ │ │ │ └── package.json
│ │ │ │ ├── plugin-complex-dependencies/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── plugin/
│ │ │ │ │ ├── ddcs/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── ldc/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── rpc/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── vip/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── zoneclient/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── zookeeper/
│ │ │ │ │ └── package.json
│ │ │ │ ├── plugin-complex-deps/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── plugin/
│ │ │ │ │ ├── gw/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── rpc-server/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── tracelog/
│ │ │ │ │ └── package.json
│ │ │ │ ├── plugin-dep/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── plugin-dep-disable/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ ├── framework/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── plugin.js
│ │ │ │ │ │ └── plugins/
│ │ │ │ │ │ ├── a/
│ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ ├── b/
│ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ ├── c/
│ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ ├── d/
│ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ └── e/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── package.json
│ │ │ │ ├── plugin-dep-missing/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── plugin-dep-recursive/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── plugin-duplicate/
│ │ │ │ │ ├── node_modules/
│ │ │ │ │ │ ├── @scope/
│ │ │ │ │ │ │ ├── a/
│ │ │ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ │ └── b/
│ │ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ └── a/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── release/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── plugin-egg-plugin/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── plugin-framework/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── plugin-from/
│ │ │ │ │ ├── a/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── b/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ ├── framework/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── plugin.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── package.json
│ │ │ │ ├── plugin-implicit-enable-dependencies/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── plugin/
│ │ │ │ │ ├── gateway/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── ldc/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── rpc_server/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── tracelog/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── zoneclient/
│ │ │ │ │ └── package.json
│ │ │ │ ├── plugin-noexist/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── plugin-optional-dependencies/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ ├── node_modules/
│ │ │ │ │ │ ├── a/
│ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ ├── b/
│ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ ├── c/
│ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ ├── d/
│ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ ├── e/
│ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ └── f/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── package.json
│ │ │ │ ├── plugin-path-package/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ ├── node_modules/
│ │ │ │ │ │ └── hsfclient/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── session/
│ │ │ │ │ └── package.json
│ │ │ │ ├── plugin-pkg-exports/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ ├── node_modules/
│ │ │ │ │ │ └── a/
│ │ │ │ │ │ ├── foo_dist/
│ │ │ │ │ │ │ ├── commonjs/
│ │ │ │ │ │ │ │ └── config/
│ │ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ │ └── esm/
│ │ │ │ │ │ │ └── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── package.json
│ │ │ │ ├── plugin-pnpm/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ ├── node_modules/
│ │ │ │ │ │ └── b/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── package.json
│ │ │ │ ├── plugin-pnpm-scope/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ ├── node_modules/
│ │ │ │ │ │ └── b/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── package.json
│ │ │ │ ├── plugin-strict/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── config.js
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── plugins/
│ │ │ │ │ └── g/
│ │ │ │ │ └── package.json
│ │ │ │ ├── plugin-ts-src/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── config.js
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── plugins/
│ │ │ │ │ └── g/
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── src/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── preload-app-config/
│ │ │ │ │ ├── a/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── config.js
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── proxy-override/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── proxy/
│ │ │ │ │ │ └── queryProxy.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── ready/
│ │ │ │ │ ├── app.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── realpath/
│ │ │ │ │ ├── a/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── redefine-plugin/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── router-app/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ ├── async.js
│ │ │ │ │ │ │ ├── comments.js
│ │ │ │ │ │ │ ├── locals.js
│ │ │ │ │ │ │ ├── members.js
│ │ │ │ │ │ │ ├── middleware.js
│ │ │ │ │ │ │ ├── package.js
│ │ │ │ │ │ │ └── posts.js
│ │ │ │ │ │ ├── middleware/
│ │ │ │ │ │ │ ├── async.js
│ │ │ │ │ │ │ ├── common.js
│ │ │ │ │ │ │ ├── generator.js
│ │ │ │ │ │ │ └── generator_both.js
│ │ │ │ │ │ ├── router.js
│ │ │ │ │ │ └── views/
│ │ │ │ │ │ └── locals/
│ │ │ │ │ │ └── router.html
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.default.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── router-in-app/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── middleware/
│ │ │ │ │ │ │ └── foo.js
│ │ │ │ │ │ └── router.js
│ │ │ │ │ ├── app.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.default.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── run-with-debug/
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── scope/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── plugin.en.js
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ ├── node_modules/
│ │ │ │ │ │ └── a/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── package.json
│ │ │ │ ├── scope-env/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ ├── config.en.js
│ │ │ │ │ │ ├── config.en_prod.js
│ │ │ │ │ │ ├── config.prod.js
│ │ │ │ │ │ ├── plugin.en.js
│ │ │ │ │ │ ├── plugin.en_prod.js
│ │ │ │ │ │ ├── plugin.js
│ │ │ │ │ │ └── plugin.prod.js
│ │ │ │ │ ├── node_modules/
│ │ │ │ │ │ ├── a/
│ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ ├── b/
│ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ ├── c/
│ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ └── d/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── package.json
│ │ │ │ ├── serverenv/
│ │ │ │ │ └── package.json
│ │ │ │ ├── serverenv-file/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── env
│ │ │ │ │ └── package.json
│ │ │ │ ├── service-override/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── service/
│ │ │ │ │ │ └── foo.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ ├── node_modules/
│ │ │ │ │ │ └── a/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ └── service/
│ │ │ │ │ │ │ └── foo.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── package.json
│ │ │ │ ├── service-unique/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ └── same.js
│ │ │ │ │ │ ├── router.js
│ │ │ │ │ │ └── service/
│ │ │ │ │ │ └── ctx.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── services_loader_verify/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── service/
│ │ │ │ │ │ └── foo.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── session-cache-app/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ └── home.js
│ │ │ │ │ │ └── router.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.default.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── subdir-proxy/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── proxy/
│ │ │ │ │ │ │ ├── certify-personal/
│ │ │ │ │ │ │ │ └── mobile-hi/
│ │ │ │ │ │ │ │ └── do_certify.js
│ │ │ │ │ │ │ ├── cif/
│ │ │ │ │ │ │ │ └── user.js
│ │ │ │ │ │ │ ├── foo/
│ │ │ │ │ │ │ │ ├── bar.js
│ │ │ │ │ │ │ │ ├── subdir/
│ │ │ │ │ │ │ │ │ └── bar.js
│ │ │ │ │ │ │ │ ├── subdir1/
│ │ │ │ │ │ │ │ │ └── subdir11/
│ │ │ │ │ │ │ │ │ └── bar.js
│ │ │ │ │ │ │ │ └── subdir2/
│ │ │ │ │ │ │ │ └── sub2.js
│ │ │ │ │ │ │ ├── null.js
│ │ │ │ │ │ │ ├── ok.js
│ │ │ │ │ │ │ ├── old_style.js
│ │ │ │ │ │ │ ├── undefined.js
│ │ │ │ │ │ │ └── user.js
│ │ │ │ │ │ └── router.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── subdir-services/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ └── home.js
│ │ │ │ │ │ ├── router.js
│ │ │ │ │ │ └── service/
│ │ │ │ │ │ ├── certify-personal/
│ │ │ │ │ │ │ └── mobile-hi/
│ │ │ │ │ │ │ └── do_certify.js
│ │ │ │ │ │ ├── cif/
│ │ │ │ │ │ │ └── user.js
│ │ │ │ │ │ ├── foo/
│ │ │ │ │ │ │ ├── bar.js
│ │ │ │ │ │ │ ├── subdir/
│ │ │ │ │ │ │ │ └── bar.js
│ │ │ │ │ │ │ ├── subdir1/
│ │ │ │ │ │ │ │ └── subdir11/
│ │ │ │ │ │ │ │ └── bar.js
│ │ │ │ │ │ │ └── subdir2/
│ │ │ │ │ │ │ └── sub2.js
│ │ │ │ │ │ ├── null.js
│ │ │ │ │ │ ├── ok.js
│ │ │ │ │ │ ├── old_style.js
│ │ │ │ │ │ ├── undefined.js
│ │ │ │ │ │ └── user.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── syntaxerror/
│ │ │ │ │ ├── app.js
│ │ │ │ │ └── package.json
│ │ │ │ └── timing/
│ │ │ │ ├── agent.js
│ │ │ │ ├── app/
│ │ │ │ │ ├── controler/
│ │ │ │ │ │ └── home.js
│ │ │ │ │ ├── extend/
│ │ │ │ │ │ └── application.js
│ │ │ │ │ ├── middleware/
│ │ │ │ │ │ └── auth.js
│ │ │ │ │ ├── proxy/
│ │ │ │ │ │ └── a.js
│ │ │ │ │ ├── router.js
│ │ │ │ │ └── service/
│ │ │ │ │ └── home.js
│ │ │ │ ├── app.js
│ │ │ │ ├── block.js
│ │ │ │ ├── config/
│ │ │ │ │ ├── config.default.js
│ │ │ │ │ └── plugin.js
│ │ │ │ ├── index.js
│ │ │ │ ├── package.json
│ │ │ │ └── preload.js
│ │ │ ├── helper.ts
│ │ │ ├── index.test.ts
│ │ │ ├── lifecycle.test.ts
│ │ │ ├── loader/
│ │ │ │ ├── context_loader.test.ts
│ │ │ │ ├── egg_loader.test.ts
│ │ │ │ ├── file_loader.test.ts
│ │ │ │ ├── get_app_info.test.ts
│ │ │ │ ├── get_appname.test.ts
│ │ │ │ ├── get_framework_paths.test.ts
│ │ │ │ ├── get_load_units.test.ts
│ │ │ │ ├── get_server_env.test.ts
│ │ │ │ ├── load_file.test.ts
│ │ │ │ └── mixin/
│ │ │ │ ├── load_agent_extend.test.ts
│ │ │ │ ├── load_application_extend.test.ts
│ │ │ │ ├── load_config.test.ts
│ │ │ │ ├── load_controller.test.ts
│ │ │ │ ├── load_custom_agent.test.ts
│ │ │ │ ├── load_custom_app.test.ts
│ │ │ │ ├── load_custom_loader.test.ts
│ │ │ │ ├── load_extend.test.ts
│ │ │ │ ├── load_extend_class.test.ts
│ │ │ │ ├── load_helper_extend.test.ts
│ │ │ │ ├── load_middleware.test.ts
│ │ │ │ ├── load_plugin.test.ts
│ │ │ │ └── load_service.test.ts
│ │ │ ├── singleton.test.ts
│ │ │ ├── support-typescript.test.ts
│ │ │ └── utils/
│ │ │ ├── index.test.ts
│ │ │ ├── router.test.ts
│ │ │ └── timing.test.ts
│ │ ├── tsconfig.json
│ │ ├── tsdown.config.ts
│ │ └── vitest.config.ts
│ ├── egg/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── agent.ts
│ │ │ ├── ajv.ts
│ │ │ ├── aop.ts
│ │ │ ├── app/
│ │ │ │ ├── extend/
│ │ │ │ │ ├── context.ts
│ │ │ │ │ ├── helper.ts
│ │ │ │ │ ├── request.ts
│ │ │ │ │ └── response.ts
│ │ │ │ └── middleware/
│ │ │ │ ├── body_parser.ts
│ │ │ │ ├── meta.ts
│ │ │ │ ├── notfound.ts
│ │ │ │ ├── override_method.ts
│ │ │ │ └── site_file.ts
│ │ │ ├── config/
│ │ │ │ ├── config.default.ts
│ │ │ │ ├── config.local.ts
│ │ │ │ ├── config.unittest.ts
│ │ │ │ └── plugin.ts
│ │ │ ├── dal.ts
│ │ │ ├── errors.ts
│ │ │ ├── helper.ts
│ │ │ ├── index.ts
│ │ │ ├── lib/
│ │ │ │ ├── agent.ts
│ │ │ │ ├── application.ts
│ │ │ │ ├── core/
│ │ │ │ │ ├── base_context_class.ts
│ │ │ │ │ ├── base_context_logger.ts
│ │ │ │ │ ├── base_hook_class.ts
│ │ │ │ │ ├── context_httpclient.ts
│ │ │ │ │ ├── httpclient.ts
│ │ │ │ │ ├── logger.ts
│ │ │ │ │ ├── messenger/
│ │ │ │ │ │ ├── IMessenger.ts
│ │ │ │ │ │ ├── base.ts
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ ├── ipc.ts
│ │ │ │ │ │ └── local.ts
│ │ │ │ │ └── utils.ts
│ │ │ │ ├── define.ts
│ │ │ │ ├── egg.ts
│ │ │ │ ├── error/
│ │ │ │ │ ├── CookieLimitExceedError.ts
│ │ │ │ │ ├── MessageUnhandledRejectionError.ts
│ │ │ │ │ └── index.ts
│ │ │ │ ├── loader/
│ │ │ │ │ ├── AgentWorkerLoader.ts
│ │ │ │ │ ├── AppWorkerLoader.ts
│ │ │ │ │ ├── EggApplicationLoader.ts
│ │ │ │ │ └── index.ts
│ │ │ │ ├── start.ts
│ │ │ │ ├── types.plugin.ts
│ │ │ │ └── types.ts
│ │ │ ├── orm.ts
│ │ │ ├── schedule.ts
│ │ │ ├── transaction.ts
│ │ │ └── urllib.ts
│ │ ├── test/
│ │ │ ├── __snapshots__/
│ │ │ │ ├── index.test.ts.snap
│ │ │ │ └── urllib.test.ts.snap
│ │ │ ├── agent.test.ts
│ │ │ ├── app/
│ │ │ │ ├── extend/
│ │ │ │ │ ├── agent.test.ts
│ │ │ │ │ ├── application.test.ts
│ │ │ │ │ ├── context.jsonp.test.ts
│ │ │ │ │ ├── context.test.ts
│ │ │ │ │ ├── helper.test.ts
│ │ │ │ │ ├── request.test.ts
│ │ │ │ │ └── response.test.ts
│ │ │ │ └── middleware/
│ │ │ │ ├── body_parser.test.ts
│ │ │ │ ├── meta.test.ts
│ │ │ │ ├── notfound.test.ts
│ │ │ │ ├── override_method.test.ts
│ │ │ │ └── site_file.test.ts
│ │ │ ├── application.test.ts
│ │ │ ├── asyncSupport.test.ts
│ │ │ ├── bench/
│ │ │ │ ├── hello/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ └── home.js
│ │ │ │ │ │ └── router.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.default.js
│ │ │ │ │ └── package.json
│ │ │ │ └── server.js
│ │ │ ├── cluster1/
│ │ │ │ ├── app_worker.test.ts
│ │ │ │ ├── cluster-client-error.test.ts
│ │ │ │ ├── cluster-client.test.ts
│ │ │ │ └── master.test.ts
│ │ │ ├── cluster2/
│ │ │ │ └── master.test.ts
│ │ │ ├── egg.test.ts
│ │ │ ├── fixtures/
│ │ │ │ ├── apps/
│ │ │ │ │ ├── agent-app/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ │ └── plugin.js
│ │ │ │ │ │ ├── package.json
│ │ │ │ │ │ └── plugins/
│ │ │ │ │ │ └── mock-client/
│ │ │ │ │ │ ├── agent.js
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── mock_client.js
│ │ │ │ │ ├── agent-app-sync/
│ │ │ │ │ │ ├── agent.js
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── agent-client-app/
│ │ │ │ │ │ ├── agent.js
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── agent-die/
│ │ │ │ │ │ ├── agent.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ ├── package.json
│ │ │ │ │ │ └── start.js
│ │ │ │ │ ├── agent-logger-config/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── agent-restart/
│ │ │ │ │ │ ├── agent.js
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ ├── client.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── agent-throw/
│ │ │ │ │ │ ├── agent.js
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ │ └── config.unittest.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── aliyun-egg/
│ │ │ │ │ │ ├── agent.js
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ │ └── plugin.js
│ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ ├── lib/
│ │ │ │ │ │ │ ├── agent.js
│ │ │ │ │ │ │ ├── aliyun-egg.js
│ │ │ │ │ │ │ └── plugins/
│ │ │ │ │ │ │ └── custom/
│ │ │ │ │ │ │ ├── agent.js
│ │ │ │ │ │ │ └── app.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── aliyun-egg-app/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ └── home.js
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── aliyun-egg-biz/
│ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── app-config-cookies/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ └── home.js
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── app-die/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── app-die-ignore-code/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── app-enableFastContextLogger/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ └── home.js
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── app-enablePerformanceTimer-true/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ └── home.js
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ │ └── config.unittest.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── app-locals-getter/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── app-router/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ └── home.js
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ │ └── plugin.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── app-runInAnonymousContextScope/
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ │ └── config.unittest.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── app-runInAnonymousContextScope-withRequest/
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ │ └── config.unittest.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── app-server/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── app-server-customized-client-error/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── app-server-timeout/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── app-server-with-hostname/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── app-start-timeout/
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ │ └── config.unittest.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── app-throw/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ │ └── config.unittest.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── app-ts/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ └── foo.ts
│ │ │ │ │ │ │ ├── extend/
│ │ │ │ │ │ │ │ ├── context.ts
│ │ │ │ │ │ │ │ ├── helper.ts
│ │ │ │ │ │ │ │ └── index.d.ts
│ │ │ │ │ │ │ ├── middleware/
│ │ │ │ │ │ │ │ ├── default_ctx.ts
│ │ │ │ │ │ │ │ ├── generic_ctx.ts
│ │ │ │ │ │ │ │ ├── index.d.ts
│ │ │ │ │ │ │ │ └── test.ts
│ │ │ │ │ │ │ ├── model/
│ │ │ │ │ │ │ │ └── test.ts
│ │ │ │ │ │ │ ├── proxy/
│ │ │ │ │ │ │ │ └── foo.d.ts
│ │ │ │ │ │ │ ├── router.ts
│ │ │ │ │ │ │ └── service/
│ │ │ │ │ │ │ └── foo.ts
│ │ │ │ │ │ ├── app.ts
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.ts
│ │ │ │ │ │ ├── lib/
│ │ │ │ │ │ │ ├── export-class.ts
│ │ │ │ │ │ │ └── logger.ts
│ │ │ │ │ │ ├── node_modules/
│ │ │ │ │ │ │ └── egg/
│ │ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ ├── package.json
│ │ │ │ │ │ └── tsconfig.json
│ │ │ │ │ ├── app-ts-esm/
│ │ │ │ │ │ ├── .gitignore
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ └── foo.ts
│ │ │ │ │ │ │ └── router.ts
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.ts
│ │ │ │ │ │ ├── package.json
│ │ │ │ │ │ └── tsconfig.json
│ │ │ │ │ ├── app-ts-type-check/
│ │ │ │ │ │ ├── error.ts
│ │ │ │ │ │ ├── framework.ts
│ │ │ │ │ │ ├── normal.ts
│ │ │ │ │ │ ├── tsconfig-error.json
│ │ │ │ │ │ ├── tsconfig.json
│ │ │ │ │ │ ├── xiandan.d.ts
│ │ │ │ │ │ └── yadan.d.ts
│ │ │ │ │ ├── async-app/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ └── api.js
│ │ │ │ │ │ │ ├── middleware/
│ │ │ │ │ │ │ │ ├── async.js
│ │ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ │ ├── router.js
│ │ │ │ │ │ │ ├── schedule/
│ │ │ │ │ │ │ │ └── async.js
│ │ │ │ │ │ │ └── service/
│ │ │ │ │ │ │ └── api.js
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── base-context-class/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ └── home.js
│ │ │ │ │ │ │ ├── router.js
│ │ │ │ │ │ │ └── service/
│ │ │ │ │ │ │ └── home.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ │ └── config.unittest.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── body_parser_testapp/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── body_parser_testapp_disable/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ │ └── plugin.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── body_parser_testapp_ignore/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── body_parser_testapp_match/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── boot-app/
│ │ │ │ │ │ ├── agent.js
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── boot-app-esm/
│ │ │ │ │ │ ├── agent.js
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── close-watcher-logrotator/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ │ └── plugin.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── cluster-client-error/
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── cluster_mod_app/
│ │ │ │ │ │ ├── agent.js
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ └── home.js
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ ├── lib/
│ │ │ │ │ │ │ ├── api_client.js
│ │ │ │ │ │ │ ├── api_client_2.js
│ │ │ │ │ │ │ └── registry_client.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── config-env/
│ │ │ │ │ │ ├── .gitignore
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ │ └── plugin.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── confused-configuration/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── context-config-app/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ └── home.js
│ │ │ │ │ │ │ ├── extend/
│ │ │ │ │ │ │ │ └── context.js
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.js
│ │ │ │ │ │ │ └── config.local.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── context_httpclient/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── context_httpclient_timeout/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── csrf-disable/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ └── api.js
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── csrf-enable/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ └── api.js
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ │ └── config.unittest.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── csrf-ignore/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ └── api.js
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ │ └── config.unittest.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── ctx-background/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ │ │ ├── custom.js
│ │ │ │ │ │ │ │ ├── error.js
│ │ │ │ │ │ │ │ ├── home.js
│ │ │ │ │ │ │ │ └── sync.js
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ │ └── config.unittest.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── custom-context-getlogger/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ └── home.js
│ │ │ │ │ │ │ ├── extend/
│ │ │ │ │ │ │ │ └── context.js
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── custom-env-app/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── custom-framework-demo/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ ├── foo.js
│ │ │ │ │ │ │ │ ├── hello.js
│ │ │ │ │ │ │ │ ├── home.js
│ │ │ │ │ │ │ │ ├── ip.js
│ │ │ │ │ │ │ │ ├── logger.js
│ │ │ │ │ │ │ │ ├── obj.js
│ │ │ │ │ │ │ │ └── obj2.js
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── custom-loader/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── adapter/
│ │ │ │ │ │ │ │ └── docker.js
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ └── user.js
│ │ │ │ │ │ │ ├── repository/
│ │ │ │ │ │ │ │ └── user.js
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── custom-logger/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── demo/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ ├── foo.js
│ │ │ │ │ │ │ │ ├── hello.js
│ │ │ │ │ │ │ │ ├── home.js
│ │ │ │ │ │ │ │ ├── ip.js
│ │ │ │ │ │ │ │ ├── logger.js
│ │ │ │ │ │ │ │ ├── obj.js
│ │ │ │ │ │ │ │ └── obj2.js
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ │ └── config.unittest.js
│ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── development/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── public/
│ │ │ │ │ │ │ │ └── foo.js
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ │ └── plugin.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── dnscache_httpclient/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ └── home.js
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ │ └── config.unittest.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── docapp/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ └── middleware/
│ │ │ │ │ │ │ └── koastatic.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── dump-ignore-error/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── dumpconfig/
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ │ └── plugin.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── dumpconfig-circular/
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── dumptiming-slowBootActionMinDuration/
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ │ └── plugin.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── dumptiming-timeout/
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ │ └── plugin.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── empty/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── encrypt-cookies/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ └── home.js
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ │ └── plugin.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── favicon/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ └── home.js
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── favicon-buffer/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ └── home.js
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── favicon-function/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ └── home.js
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── get-logger/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── helper/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ └── home.js
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── httpclient-agent-timeout-3000/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── httpclient-next-overwrite/
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── httpclient-next-with-tracer/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ │ └── plugin.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── httpclient-overwrite/
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── httpclient-request-timeout-100/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── httpclient-retry/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── httpclient-tracer/
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── plugin.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── i18n/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ ├── home.js
│ │ │ │ │ │ │ │ └── message.js
│ │ │ │ │ │ │ ├── router.js
│ │ │ │ │ │ │ └── view/
│ │ │ │ │ │ │ └── home.html
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ │ ├── locales/
│ │ │ │ │ │ │ │ ├── de.json
│ │ │ │ │ │ │ │ ├── xx.txt
│ │ │ │ │ │ │ │ └── zh-CN.js
│ │ │ │ │ │ │ └── plugin.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── keys-exists/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── keys-missing/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.unittest.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── koa-session/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ ├── clear.js
│ │ │ │ │ │ │ │ └── home.js
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── loader-plugin/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── router.js
│ │ │ │ │ │ │ └── service/
│ │ │ │ │ │ │ ├── Foo4.js
│ │ │ │ │ │ │ ├── foo.js
│ │ │ │ │ │ │ ├── foo2.js
│ │ │ │ │ │ │ ├── foo3/
│ │ │ │ │ │ │ │ └── foo3.js
│ │ │ │ │ │ │ └── fooDir/
│ │ │ │ │ │ │ └── Foo5.js
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ │ ├── map.json
│ │ │ │ │ │ │ └── plugin.js
│ │ │ │ │ │ ├── node_modules/
│ │ │ │ │ │ │ ├── a/
│ │ │ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ │ │ ├── proxy/
│ │ │ │ │ │ │ │ │ │ └── a.js
│ │ │ │ │ │ │ │ │ └── service/
│ │ │ │ │ │ │ │ │ └── bar1.js
│ │ │ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ │ │ └── config.js
│ │ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ │ ├── a1/
│ │ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ │ ├── b/
│ │ │ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ │ │ └── service/
│ │ │ │ │ │ │ │ │ └── bar2.js
│ │ │ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ │ │ ├── antx.default.properties
│ │ │ │ │ │ │ │ │ ├── antx.dev.properties
│ │ │ │ │ │ │ │ │ ├── antx.prod.properties
│ │ │ │ │ │ │ │ │ ├── antx.test.properties
│ │ │ │ │ │ │ │ │ └── antx.unittest.properties
│ │ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ │ ├── c/
│ │ │ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ │ │ └── config.js
│ │ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ │ ├── d/
│ │ │ │ │ │ │ │ ├── .gitkeep
│ │ │ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ │ │ └── config.js
│ │ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ │ └── rds/
│ │ │ │ │ │ │ ├── .gitkeep
│ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ ├── package.json
│ │ │ │ │ │ └── plugins/
│ │ │ │ │ │ ├── e/
│ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ ├── f/
│ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ └── g/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── loader-plugin-dep/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ │ └── plugin.js
│ │ │ │ │ │ ├── package.json
│ │ │ │ │ │ └── plugins/
│ │ │ │ │ │ ├── a/
│ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ ├── b/
│ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ ├── c/
│ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ ├── d/
│ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ ├── e/
│ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ └── f/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── loader-plugin-dep-missing/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ │ └── plugin.js
│ │ │ │ │ │ ├── package.json
│ │ │ │ │ │ └── plugins/
│ │ │ │ │ │ ├── a/
│ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ ├── b/
│ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ └── c/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── loader-plugin-dep-recursive/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ │ └── plugin.js
│ │ │ │ │ │ ├── package.json
│ │ │ │ │ │ └── plugins/
│ │ │ │ │ │ ├── a/
│ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ ├── b/
│ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ └── c/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── loader-plugin-noexist/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ │ └── plugin.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── locals/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── helper.js
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── logger/
│ │ │ │ │ │ ├── agent.js
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ │ ├── config.local.js
│ │ │ │ │ │ │ └── config.unittest.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── logger-level-debug/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── logger-output-json/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ │ └── map.json
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── logger-reload/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ └── home.js
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── logrotator-app/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── master-worker-started/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ ├── dispatch.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── master-worker-started-worker_threads/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ ├── dispatch.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── messenger/
│ │ │ │ │ │ ├── agent.js
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── messenger-app-agent/
│ │ │ │ │ │ ├── agent.js
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── messenger-broadcast/
│ │ │ │ │ │ ├── agent.js
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── messenger-random/
│ │ │ │ │ │ ├── agent.js
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── meta-logging-app/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ └── home.js
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── middlewares/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ ├── error.js
│ │ │ │ │ │ │ │ └── home.js
│ │ │ │ │ │ │ ├── crossdomain.xml
│ │ │ │ │ │ │ ├── robots.txt
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ │ └── plugin.js
│ │ │ │ │ │ ├── package.json
│ │ │ │ │ │ └── server.conf
│ │ │ │ │ ├── middlewares-meta-enablePerformanceTimer/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ └── home.js
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── middlewares-site-file/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ ├── error.js
│ │ │ │ │ │ │ │ └── home.js
│ │ │ │ │ │ │ ├── crossdomain.xml
│ │ │ │ │ │ │ ├── robots.txt
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ │ └── plugin.js
│ │ │ │ │ │ ├── package.json
│ │ │ │ │ │ └── server.conf
│ │ │ │ │ ├── mock-dev-app1/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── mock-dev-app2/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── mock-dev-app3/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── mock-dev-app4/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── mock-production-app/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.js
│ │ │ │ │ │ │ ├── config.unittest.js
│ │ │ │ │ │ │ └── map.json
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── mock-production-app-do-not-force/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.js
│ │ │ │ │ │ │ ├── config.unittest.js
│ │ │ │ │ │ │ └── map.json
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── multipart/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ ├── home.js
│ │ │ │ │ │ │ │ └── upload.js
│ │ │ │ │ │ │ ├── router.js
│ │ │ │ │ │ │ └── view/
│ │ │ │ │ │ │ └── home.html
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── multiple-view-engine/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ └── view.js
│ │ │ │ │ │ │ ├── router.js
│ │ │ │ │ │ │ ├── view/
│ │ │ │ │ │ │ │ ├── ext/
│ │ │ │ │ │ │ │ │ ├── a.ejs
│ │ │ │ │ │ │ │ │ └── a.nj
│ │ │ │ │ │ │ │ └── loader/
│ │ │ │ │ │ │ │ ├── a.ejs
│ │ │ │ │ │ │ │ ├── a.html
│ │ │ │ │ │ │ │ ├── a.nj.ejs
│ │ │ │ │ │ │ │ └── a.noext
│ │ │ │ │ │ │ └── view2/
│ │ │ │ │ │ │ └── loader/
│ │ │ │ │ │ │ ├── a.nj
│ │ │ │ │ │ │ └── from-view2.ejs
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ │ └── config.unittest.js
│ │ │ │ │ │ ├── ejs.js
│ │ │ │ │ │ ├── nunjucks.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── nobuffer-logger/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── notfound/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── notfound-custom-404/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── notready/
│ │ │ │ │ │ ├── a/
│ │ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ │ └── plugin.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── onerror/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ ├── home.js
│ │ │ │ │ │ │ │ └── user.js
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ │ └── config.unittest.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── override_method/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── querystring-extended/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ └── home.js
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── reload-worker/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ ├── home.js
│ │ │ │ │ │ │ │ └── home1.js
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── response/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── router-app/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ ├── locals.js
│ │ │ │ │ │ │ │ ├── members.js
│ │ │ │ │ │ │ │ └── posts.js
│ │ │ │ │ │ │ ├── router.js
│ │ │ │ │ │ │ └── view/
│ │ │ │ │ │ │ └── locals/
│ │ │ │ │ │ │ └── router.html
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── schedule/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ └── schedule/
│ │ │ │ │ │ │ ├── hello.js
│ │ │ │ │ │ │ └── sub/
│ │ │ │ │ │ │ └── cron.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── secure-app/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ └── index.js
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ │ ├── config.unittest.js
│ │ │ │ │ │ │ └── plugin.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── service-app/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ └── user.js
│ │ │ │ │ │ │ ├── router.js
│ │ │ │ │ │ │ └── service/
│ │ │ │ │ │ │ └── user.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── services_loader_verify/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ └── service/
│ │ │ │ │ │ │ └── foo.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── singleton-demo/
│ │ │ │ │ │ ├── agent.js
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ ├── create.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── siteFile-custom-cacheControl/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── static-server/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ └── public/
│ │ │ │ │ │ │ └── foo.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ │ └── plugin.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── subdir-services/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ └── home.js
│ │ │ │ │ │ │ ├── router.js
│ │ │ │ │ │ │ └── service/
│ │ │ │ │ │ │ ├── certify-personal/
│ │ │ │ │ │ │ │ └── mobile-hi/
│ │ │ │ │ │ │ │ └── do_certify.js
│ │ │ │ │ │ │ ├── cif/
│ │ │ │ │ │ │ │ └── user.js
│ │ │ │ │ │ │ ├── foo/
│ │ │ │ │ │ │ │ ├── bar.js
│ │ │ │ │ │ │ │ ├── subdir/
│ │ │ │ │ │ │ │ │ └── bar.js
│ │ │ │ │ │ │ │ ├── subdir1/
│ │ │ │ │ │ │ │ │ └── subdir11/
│ │ │ │ │ │ │ │ │ └── bar.js
│ │ │ │ │ │ │ │ └── subdir2/
│ │ │ │ │ │ │ │ └── sub2.js
│ │ │ │ │ │ │ ├── ok.js
│ │ │ │ │ │ │ ├── old_style.js
│ │ │ │ │ │ │ └── user.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── tracer-demo/
│ │ │ │ │ │ ├── agent.js
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ ├── foo.js
│ │ │ │ │ │ │ │ └── home.js
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── app.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ ├── package.json
│ │ │ │ │ │ └── tracer.js
│ │ │ │ │ ├── view-render/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── a.js
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ ├── async.js
│ │ │ │ │ │ │ │ ├── context.js
│ │ │ │ │ │ │ │ ├── csrf.js
│ │ │ │ │ │ │ │ ├── empty.js
│ │ │ │ │ │ │ │ ├── home.js
│ │ │ │ │ │ │ │ ├── inject.js
│ │ │ │ │ │ │ │ ├── locals.js
│ │ │ │ │ │ │ │ ├── nonce.js
│ │ │ │ │ │ │ │ ├── shtml.js
│ │ │ │ │ │ │ │ ├── sjs.js
│ │ │ │ │ │ │ │ ├── string.js
│ │ │ │ │ │ │ │ └── xss.js
│ │ │ │ │ │ │ ├── extend/
│ │ │ │ │ │ │ │ └── helper.js
│ │ │ │ │ │ │ ├── router.js
│ │ │ │ │ │ │ └── view/
│ │ │ │ │ │ │ ├── a.html
│ │ │ │ │ │ │ ├── form_csrf.html
│ │ │ │ │ │ │ ├── index.html
│ │ │ │ │ │ │ ├── inject.html
│ │ │ │ │ │ │ ├── locals.html
│ │ │ │ │ │ │ ├── nonce.html
│ │ │ │ │ │ │ ├── shtml.html
│ │ │ │ │ │ │ ├── sjs.html
│ │ │ │ │ │ │ └── xss.html
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ │ └── plugin.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── watcher-development-app/
│ │ │ │ │ │ ├── agent.js
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.unittest.js
│ │ │ │ │ │ ├── package.json
│ │ │ │ │ │ ├── tmp/
│ │ │ │ │ │ │ └── tmp.txt
│ │ │ │ │ │ ├── tmp-agent/
│ │ │ │ │ │ │ └── tmp.txt
│ │ │ │ │ │ ├── tmp-agent.txt
│ │ │ │ │ │ └── tmp.txt
│ │ │ │ │ ├── watcher-type-default/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.unittest.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── worker-die/
│ │ │ │ │ ├── app.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.default.js
│ │ │ │ │ └── package.json
│ │ │ │ └── custom-egg/
│ │ │ │ ├── index.js
│ │ │ │ └── package.json
│ │ │ ├── index.test.ts
│ │ │ ├── lib/
│ │ │ │ ├── __snapshots__/
│ │ │ │ │ └── define_config.test.ts.snap
│ │ │ │ ├── core/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── config.cookies.test.ts
│ │ │ │ │ │ └── config.test.ts
│ │ │ │ │ ├── context_httpclient.test.ts
│ │ │ │ │ ├── context_performance_starttime.test.ts
│ │ │ │ │ ├── cookies.test.ts
│ │ │ │ │ ├── custom_loader.test.ts
│ │ │ │ │ ├── dnscache_httpclient.test.ts
│ │ │ │ │ ├── httpclient.test.ts
│ │ │ │ │ ├── httpclient_tracer_demo.test.ts
│ │ │ │ │ ├── loader/
│ │ │ │ │ │ ├── __snapshots__/
│ │ │ │ │ │ │ ├── config_loader.test.ts.snap
│ │ │ │ │ │ │ └── load_plugin.test.ts.snap
│ │ │ │ │ │ ├── config_loader.test.ts
│ │ │ │ │ │ ├── load_app.test.ts
│ │ │ │ │ │ ├── load_boot.test.ts
│ │ │ │ │ │ ├── load_plugin.test.ts
│ │ │ │ │ │ ├── load_router.test.ts
│ │ │ │ │ │ └── load_service.test.ts
│ │ │ │ │ ├── logger.test.ts
│ │ │ │ │ ├── messenger/
│ │ │ │ │ │ ├── ipc.test.ts
│ │ │ │ │ │ └── local.test.ts
│ │ │ │ │ ├── router.test.ts
│ │ │ │ │ ├── utils.test.ts
│ │ │ │ │ └── view.test.ts
│ │ │ │ ├── define_config.test.ts
│ │ │ │ └── plugins/
│ │ │ │ ├── depd.test.ts
│ │ │ │ ├── development.test.ts
│ │ │ │ ├── i18n.test.ts
│ │ │ │ ├── multipart.test.ts
│ │ │ │ ├── onerror.test.ts
│ │ │ │ ├── security.test.ts
│ │ │ │ ├── session.test.ts
│ │ │ │ ├── static.test.ts
│ │ │ │ └── watcher.test.ts
│ │ │ ├── start.test.ts
│ │ │ ├── typescript.test.ts
│ │ │ ├── urllib.test.ts
│ │ │ └── utils.ts
│ │ ├── tsconfig.json
│ │ ├── tsdown.config.ts
│ │ └── vitest.config.ts
│ ├── errors/
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── base.ts
│ │ │ ├── base_error.ts
│ │ │ ├── base_exception.ts
│ │ │ ├── error.ts
│ │ │ ├── error_options.ts
│ │ │ ├── error_type.ts
│ │ │ ├── exception.ts
│ │ │ ├── framework/
│ │ │ │ ├── formatter.ts
│ │ │ │ └── framework_base_error.ts
│ │ │ ├── http/
│ │ │ │ ├── 400.ts
│ │ │ │ ├── 401.ts
│ │ │ │ ├── 402.ts
│ │ │ │ ├── 403.ts
│ │ │ │ ├── 404.ts
│ │ │ │ ├── 405.ts
│ │ │ │ ├── 406.ts
│ │ │ │ ├── 407.ts
│ │ │ │ ├── 408.ts
│ │ │ │ ├── 409.ts
│ │ │ │ ├── 410.ts
│ │ │ │ ├── 411.ts
│ │ │ │ ├── 412.ts
│ │ │ │ ├── 413.ts
│ │ │ │ ├── 414.ts
│ │ │ │ ├── 415.ts
│ │ │ │ ├── 416.ts
│ │ │ │ ├── 417.ts
│ │ │ │ ├── 418.ts
│ │ │ │ ├── 421.ts
│ │ │ │ ├── 422.ts
│ │ │ │ ├── 423.ts
│ │ │ │ ├── 424.ts
│ │ │ │ ├── 425.ts
│ │ │ │ ├── 426.ts
│ │ │ │ ├── 428.ts
│ │ │ │ ├── 429.ts
│ │ │ │ ├── 431.ts
│ │ │ │ ├── 451.ts
│ │ │ │ ├── 500.ts
│ │ │ │ ├── 501.ts
│ │ │ │ ├── 502.ts
│ │ │ │ ├── 503.ts
│ │ │ │ ├── 504.ts
│ │ │ │ ├── 505.ts
│ │ │ │ ├── 506.ts
│ │ │ │ ├── 507.ts
│ │ │ │ ├── 508.ts
│ │ │ │ ├── 509.ts
│ │ │ │ ├── 510.ts
│ │ │ │ ├── 511.ts
│ │ │ │ ├── http_error.ts
│ │ │ │ ├── http_error_options.ts
│ │ │ │ └── http_header.ts
│ │ │ └── index.ts
│ │ ├── test/
│ │ │ ├── __snapshots__/
│ │ │ │ └── index.test.ts.snap
│ │ │ ├── error.test.ts
│ │ │ ├── framework/
│ │ │ │ ├── formatter.test.ts
│ │ │ │ └── framework_base_error.test.ts
│ │ │ ├── http/
│ │ │ │ ├── 400.test.ts
│ │ │ │ ├── 401.test.ts
│ │ │ │ ├── 402.test.ts
│ │ │ │ ├── 403.test.ts
│ │ │ │ ├── 404.test.ts
│ │ │ │ ├── 405.test.ts
│ │ │ │ ├── 406.test.ts
│ │ │ │ ├── 407.test.ts
│ │ │ │ ├── 408.test.ts
│ │ │ │ ├── 409.test.ts
│ │ │ │ ├── 410.test.ts
│ │ │ │ ├── 411.test.ts
│ │ │ │ ├── 412.test.ts
│ │ │ │ ├── 413.test.ts
│ │ │ │ ├── 414.test.ts
│ │ │ │ ├── 415.test.ts
│ │ │ │ ├── 416.test.ts
│ │ │ │ ├── 417.test.ts
│ │ │ │ ├── 418.test.ts
│ │ │ │ ├── 421.test.ts
│ │ │ │ ├── 422.test.ts
│ │ │ │ ├── 423.test.ts
│ │ │ │ ├── 424.test.ts
│ │ │ │ ├── 425.test.ts
│ │ │ │ ├── 426.test.ts
│ │ │ │ ├── 428.test.ts
│ │ │ │ ├── 429.test.ts
│ │ │ │ ├── 431.test.ts
│ │ │ │ ├── 451.test.ts
│ │ │ │ ├── 500.test.ts
│ │ │ │ ├── 501.test.ts
│ │ │ │ ├── 502.test.ts
│ │ │ │ ├── 503.test.ts
│ │ │ │ ├── 504.test.ts
│ │ │ │ ├── 505.test.ts
│ │ │ │ ├── 506.test.ts
│ │ │ │ ├── 507.test.ts
│ │ │ │ ├── 508.test.ts
│ │ │ │ ├── 509.test.ts
│ │ │ │ ├── 510.test.ts
│ │ │ │ └── 511.test.ts
│ │ │ └── index.test.ts
│ │ ├── tsconfig.json
│ │ └── tsdown.config.ts
│ ├── extend2/
│ │ ├── .gitignore
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── src/
│ │ │ └── index.ts
│ │ ├── test/
│ │ │ └── index.test.ts
│ │ ├── tsconfig.json
│ │ └── tsdown.config.ts
│ ├── koa/
│ │ ├── .gitignore
│ │ ├── CHANGELOG.md
│ │ ├── CODE_OF_CONDUCT.md
│ │ ├── LICENSE
│ │ ├── Readme.md
│ │ ├── docs/
│ │ │ ├── api/
│ │ │ │ ├── context.md
│ │ │ │ ├── index.md
│ │ │ │ ├── request.md
│ │ │ │ └── response.md
│ │ │ ├── error-handling.md
│ │ │ ├── faq.md
│ │ │ ├── guide.md
│ │ │ ├── koa-vs-express.md
│ │ │ ├── migration.md
│ │ │ └── troubleshooting.md
│ │ ├── example/
│ │ │ ├── cjs/
│ │ │ │ ├── helloworld.js
│ │ │ │ └── package.json
│ │ │ ├── esm/
│ │ │ │ ├── helloworld.js
│ │ │ │ └── package.json
│ │ │ ├── extend/
│ │ │ │ ├── Context.ts
│ │ │ │ ├── Request.ts
│ │ │ │ └── middleware.ts
│ │ │ └── helloworld.ts
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── application.ts
│ │ │ ├── context.ts
│ │ │ ├── index.ts
│ │ │ ├── request.ts
│ │ │ ├── response.ts
│ │ │ └── types.ts
│ │ ├── test/
│ │ │ ├── __snapshots__/
│ │ │ │ └── index.test.ts.snap
│ │ │ ├── application/
│ │ │ │ ├── context.test.ts
│ │ │ │ ├── currentContext.test.ts
│ │ │ │ ├── index.test.ts
│ │ │ │ ├── inspect.test.ts
│ │ │ │ ├── onerror.test.ts
│ │ │ │ ├── request.test.ts
│ │ │ │ ├── respond.test.ts
│ │ │ │ ├── response.test.ts
│ │ │ │ ├── toJSON.test.ts
│ │ │ │ └── use.test.ts
│ │ │ ├── context/
│ │ │ │ ├── assert.test.ts
│ │ │ │ ├── cookies.test.ts
│ │ │ │ ├── inspect.test.ts
│ │ │ │ ├── onerror.test.ts
│ │ │ │ ├── state.test.ts
│ │ │ │ ├── throw.test.ts
│ │ │ │ └── toJSON.test.ts
│ │ │ ├── index.test.ts
│ │ │ ├── index.test.ts.snapshot
│ │ │ ├── request/
│ │ │ │ ├── accept.test.ts
│ │ │ │ ├── accepts.test.ts
│ │ │ │ ├── acceptsCharsets.test.ts
│ │ │ │ ├── acceptsEncodings.test.ts
│ │ │ │ ├── acceptsLanguages.test.ts
│ │ │ │ ├── charset.test.ts
│ │ │ │ ├── fresh.test.ts
│ │ │ │ ├── get.test.ts
│ │ │ │ ├── header.test.ts
│ │ │ │ ├── headers.test.ts
│ │ │ │ ├── host.test.ts
│ │ │ │ ├── hostname.test.ts
│ │ │ │ ├── href.test.ts
│ │ │ │ ├── idempotent.test.ts
│ │ │ │ ├── inspect.test.ts
│ │ │ │ ├── ip.test.ts
│ │ │ │ ├── ips.test.ts
│ │ │ │ ├── is.test.ts
│ │ │ │ ├── length.test.ts
│ │ │ │ ├── origin.test.ts
│ │ │ │ ├── path.test.ts
│ │ │ │ ├── protocol.test.ts
│ │ │ │ ├── query.test.ts
│ │ │ │ ├── querystring.test.ts
│ │ │ │ ├── search.test.ts
│ │ │ │ ├── secure.test.ts
│ │ │ │ ├── stale.test.ts
│ │ │ │ ├── subdomains.test.ts
│ │ │ │ ├── type.test.ts
│ │ │ │ └── whatwg-url.test.ts
│ │ │ ├── response/
│ │ │ │ ├── append.test.ts
│ │ │ │ ├── attachment.test.ts
│ │ │ │ ├── body.test.ts
│ │ │ │ ├── etag.test.ts
│ │ │ │ ├── flushHeaders.test.ts
│ │ │ │ ├── has.test.ts
│ │ │ │ ├── header.test.ts
│ │ │ │ ├── headers.test.ts
│ │ │ │ ├── inspect.test.ts
│ │ │ │ ├── is.test.ts
│ │ │ │ ├── last-modified.test.ts
│ │ │ │ ├── length.test.ts
│ │ │ │ ├── message.test.ts
│ │ │ │ ├── redirect.test.ts
│ │ │ │ ├── remove.test.ts
│ │ │ │ ├── set.test.ts
│ │ │ │ ├── socket.test.ts
│ │ │ │ ├── status.test.ts
│ │ │ │ ├── type.test.ts
│ │ │ │ ├── vary.test.ts
│ │ │ │ └── writable.test.ts
│ │ │ └── test-helpers/
│ │ │ └── context.ts
│ │ ├── tsconfig.json
│ │ └── tsdown.config.ts
│ ├── koa-static-cache/
│ │ ├── .gitignore
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── src/
│ │ │ └── index.ts
│ │ ├── test/
│ │ │ └── index.test.ts
│ │ ├── tsconfig.json
│ │ └── tsdown.config.ts
│ ├── logger/
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── egg/
│ │ │ │ ├── console_logger.ts
│ │ │ │ ├── custom_logger.ts
│ │ │ │ ├── error_logger.ts
│ │ │ │ ├── logger.ts
│ │ │ │ └── loggers.ts
│ │ │ ├── index.ts
│ │ │ ├── level.ts
│ │ │ ├── logger.ts
│ │ │ ├── transports/
│ │ │ │ ├── console.ts
│ │ │ │ ├── file.ts
│ │ │ │ ├── file_buffer.ts
│ │ │ │ └── transport.ts
│ │ │ ├── utils.ts
│ │ │ └── vendor.d.ts
│ │ ├── test/
│ │ │ ├── fixtures/
│ │ │ │ ├── console_transport.ts
│ │ │ │ ├── egg_console_logger.ts
│ │ │ │ ├── egg_custom_logger.ts
│ │ │ │ ├── egg_error_logger.ts
│ │ │ │ ├── egg_logger.ts
│ │ │ │ ├── egg_logger_dynamically.ts
│ │ │ │ ├── egg_loggers.ts
│ │ │ │ └── egg_loggers_console_duplicate.ts
│ │ │ ├── lib/
│ │ │ │ ├── egg/
│ │ │ │ │ ├── console_logger.test.ts
│ │ │ │ │ ├── custom_logger.test.ts
│ │ │ │ │ ├── error_logger.test.ts
│ │ │ │ │ ├── logger.test.ts
│ │ │ │ │ └── loggers.test.ts
│ │ │ │ ├── formatter.test.ts
│ │ │ │ ├── logger.test.ts
│ │ │ │ ├── transports/
│ │ │ │ │ ├── console.test.ts
│ │ │ │ │ ├── file.test.ts
│ │ │ │ │ ├── file_buffer.test.ts
│ │ │ │ │ └── transport.test.ts
│ │ │ │ └── utils.test.ts
│ │ │ └── utils.ts
│ │ ├── tsconfig.json
│ │ └── vitest.config.ts
│ ├── path-matching/
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── src/
│ │ │ └── index.ts
│ │ ├── test/
│ │ │ └── index.test.ts
│ │ ├── tsconfig.json
│ │ └── tsdown.config.ts
│ ├── router/
│ │ ├── .gitignore
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench/
│ │ │ ├── Makefile
│ │ │ └── server.cjs
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── EggRouter.ts
│ │ │ ├── Layer.ts
│ │ │ ├── Router.ts
│ │ │ ├── index.ts
│ │ │ └── types.ts
│ │ ├── test/
│ │ │ ├── EggRouter.test.ts
│ │ │ ├── Layer.test.ts
│ │ │ ├── Router.test.ts
│ │ │ └── index.test.ts
│ │ ├── tsconfig.json
│ │ └── tsdown.config.ts
│ ├── skills/
│ │ ├── CLAUDE.md
│ │ ├── PLAN.md
│ │ ├── README.md
│ │ ├── egg/
│ │ │ └── SKILL.md
│ │ ├── egg-controller/
│ │ │ ├── SKILL.md
│ │ │ └── references/
│ │ │ ├── ajv-validate.md
│ │ │ ├── http-controller.md
│ │ │ ├── mcp-controller.md
│ │ │ └── schedule.md
│ │ ├── egg-core/
│ │ │ ├── SKILL.md
│ │ │ └── references/
│ │ │ ├── aop.md
│ │ │ ├── background-task.md
│ │ │ ├── dynamic-inject.md
│ │ │ ├── eventbus.md
│ │ │ ├── inject.md
│ │ │ ├── module.md
│ │ │ └── proto.md
│ │ ├── eval/
│ │ │ ├── .gitignore
│ │ │ ├── evals-egg-controller.json
│ │ │ ├── evals-egg-core.json
│ │ │ └── evals-routing.json
│ │ └── package.json
│ ├── supertest/
│ │ ├── .gitignore
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── agent.ts
│ │ │ ├── error/
│ │ │ │ └── AssertError.ts
│ │ │ ├── index.ts
│ │ │ ├── request.ts
│ │ │ ├── test.ts
│ │ │ └── types.ts
│ │ ├── test/
│ │ │ ├── fixtures/
│ │ │ │ ├── test_cert.pem
│ │ │ │ └── test_key.pem
│ │ │ ├── supertest.test.ts
│ │ │ └── throwError.ts
│ │ ├── tsconfig.json
│ │ └── tsdown.config.ts
│ ├── tsconfig/
│ │ ├── .gitignore
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── fixtures/
│ │ │ │ └── apps/
│ │ │ │ └── ts-proj/
│ │ │ │ ├── Foo.ts
│ │ │ │ ├── FooDecorator.ts
│ │ │ │ └── tsconfig.json
│ │ │ └── index.test.ts
│ │ ├── tsconfig.json
│ │ └── tsdown.config.ts
│ └── utils/
│ ├── .gitignore
│ ├── CHANGELOG.md
│ ├── LICENSE
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── deprecated.ts
│ │ ├── error/
│ │ │ ├── ImportResolveError.ts
│ │ │ └── index.ts
│ │ ├── framework.ts
│ │ ├── import.ts
│ │ ├── index.ts
│ │ ├── plugin.ts
│ │ └── utils.ts
│ ├── test/
│ │ ├── __snapshots__/
│ │ │ └── index.test.ts.snap
│ │ ├── fixtures/
│ │ │ ├── cjs/
│ │ │ │ ├── es-module-default.js
│ │ │ │ ├── exports.cjs
│ │ │ │ ├── exports.js
│ │ │ │ ├── extend/
│ │ │ │ │ └── index.js
│ │ │ │ ├── index.js
│ │ │ │ ├── module-exports-null.js
│ │ │ │ ├── package.json
│ │ │ │ └── run.js
│ │ │ ├── cjs-index/
│ │ │ │ ├── index.cjs
│ │ │ │ └── package.json
│ │ │ ├── egg-app/
│ │ │ │ ├── config/
│ │ │ │ │ └── plugin.test.js
│ │ │ │ ├── get_config.js
│ │ │ │ ├── get_loadunit.js
│ │ │ │ ├── get_plugin.js
│ │ │ │ ├── package.json
│ │ │ │ └── plugin/
│ │ │ │ └── p/
│ │ │ │ └── package.json
│ │ │ ├── esm/
│ │ │ │ ├── config/
│ │ │ │ │ └── plugin.js
│ │ │ │ ├── export-default-null.js
│ │ │ │ ├── exports.js
│ │ │ │ ├── exports.mjs
│ │ │ │ ├── index.js
│ │ │ │ └── package.json
│ │ │ ├── esm-index/
│ │ │ │ ├── index.mjs
│ │ │ │ └── package.json
│ │ │ ├── framework-egg-default/
│ │ │ │ ├── app/
│ │ │ │ │ └── router.js
│ │ │ │ ├── app.js
│ │ │ │ └── package.json
│ │ │ ├── framework-egg-default-noexist/
│ │ │ │ └── package.json
│ │ │ ├── framework-pkg-egg/
│ │ │ │ └── package.json
│ │ │ ├── framework-pkg-egg-noexist/
│ │ │ │ └── package.json
│ │ │ ├── monorepo-app/
│ │ │ │ └── packages/
│ │ │ │ └── a/
│ │ │ │ └── package.json
│ │ │ ├── no-package-json/
│ │ │ │ └── index.js
│ │ │ ├── test-app/
│ │ │ │ ├── package.json
│ │ │ │ └── test/
│ │ │ │ └── fixtures/
│ │ │ │ └── app/
│ │ │ │ └── package.json
│ │ │ ├── ts-module/
│ │ │ │ ├── exports.ts
│ │ │ │ ├── extend/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── mod.ts
│ │ │ │ └── package.json
│ │ │ ├── tshy/
│ │ │ │ ├── package.json
│ │ │ │ └── src/
│ │ │ │ └── index.ts
│ │ │ ├── tshy-dist/
│ │ │ │ ├── dist2/
│ │ │ │ │ ├── commonjs/
│ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── esm/
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── package.json
│ │ │ │ └── src/
│ │ │ │ └── index.ts
│ │ │ └── yadan-app/
│ │ │ └── package.json
│ │ ├── framework.test.ts
│ │ ├── getFrameworkOrEggPath.test.ts
│ │ ├── helper.ts
│ │ ├── import.test.ts
│ │ ├── index.test.ts
│ │ └── plugin.test.ts
│ ├── tsconfig.json
│ ├── tsdown.config.ts
│ └── vitest.config.ts
├── plugins/
│ ├── development/
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── agent.ts
│ │ │ ├── app/
│ │ │ │ └── middleware/
│ │ │ │ ├── egg_loader_trace.ts
│ │ │ │ └── loader_trace.html
│ │ │ ├── app.ts
│ │ │ ├── config/
│ │ │ │ └── config.default.ts
│ │ │ ├── index.ts
│ │ │ ├── types.ts
│ │ │ └── utils.ts
│ │ ├── test/
│ │ │ ├── absolute.test.ts
│ │ │ ├── custom.test.ts
│ │ │ ├── development-ts.test.ts
│ │ │ ├── development.test.ts
│ │ │ ├── fast_ready_false.test.ts
│ │ │ ├── fixtures/
│ │ │ │ ├── absolute/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── custom/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── service/
│ │ │ │ │ │ └── .gitkeep
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── delay-ready/
│ │ │ │ │ ├── app.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── development/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── assets/
│ │ │ │ │ │ │ └── .gitkeep
│ │ │ │ │ │ ├── public/
│ │ │ │ │ │ │ └── foo.js
│ │ │ │ │ │ ├── router.js
│ │ │ │ │ │ └── service/
│ │ │ │ │ │ └── .gitkeep
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── development-process_mode_single/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── assets/
│ │ │ │ │ │ │ └── .gitkeep
│ │ │ │ │ │ ├── public/
│ │ │ │ │ │ │ └── foo.js
│ │ │ │ │ │ ├── router.js
│ │ │ │ │ │ └── service/
│ │ │ │ │ │ └── .gitkeep
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── development-ts/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── assets/
│ │ │ │ │ │ │ └── .gitkeep
│ │ │ │ │ │ ├── public/
│ │ │ │ │ │ │ └── foo.js
│ │ │ │ │ │ ├── router.ts
│ │ │ │ │ │ └── service/
│ │ │ │ │ │ └── .gitkeep
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── config.default.ts
│ │ │ │ │ │ └── plugin.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── tsconfig.json
│ │ │ │ ├── fast-ready/
│ │ │ │ │ ├── app.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── not-reload/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── service/
│ │ │ │ │ │ ├── .gitkeep
│ │ │ │ │ │ └── a.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── override/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── no-trigger/
│ │ │ │ │ │ │ └── .gitkeep
│ │ │ │ │ │ └── service/
│ │ │ │ │ │ └── .gitkeep
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── override-ignore/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── public/
│ │ │ │ │ │ │ └── .gitkeep
│ │ │ │ │ │ └── web/
│ │ │ │ │ │ └── .gitkeep
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ └── package.json
│ │ │ │ └── timing/
│ │ │ │ ├── app/
│ │ │ │ │ └── router.js
│ │ │ │ ├── app.js
│ │ │ │ ├── config/
│ │ │ │ │ ├── config.js
│ │ │ │ │ └── plugin.js
│ │ │ │ └── package.json
│ │ │ ├── not-reload.test.ts
│ │ │ ├── override.test.ts
│ │ │ ├── process_mode_single.test.ts
│ │ │ ├── timing.test.ts
│ │ │ └── utils.ts
│ │ ├── tsconfig.json
│ │ └── vitest.config.ts
│ ├── i18n/
│ │ ├── .gitignore
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── app/
│ │ │ │ └── extend/
│ │ │ │ ├── application.ts
│ │ │ │ └── context.ts
│ │ │ ├── app.ts
│ │ │ ├── config/
│ │ │ │ └── config.default.ts
│ │ │ ├── index.ts
│ │ │ ├── locales.ts
│ │ │ ├── types.ts
│ │ │ └── utils.ts
│ │ ├── test/
│ │ │ ├── fixtures/
│ │ │ │ ├── apps/
│ │ │ │ │ ├── i18n/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ └── message.js
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ │ └── locales/
│ │ │ │ │ │ │ ├── de.json
│ │ │ │ │ │ │ ├── xx.txt
│ │ │ │ │ │ │ └── zh-CN.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── i18n-domain/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ └── message.js
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ │ └── locales/
│ │ │ │ │ │ │ ├── de.json
│ │ │ │ │ │ │ ├── xx.txt
│ │ │ │ │ │ │ └── zh-CN.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── loader/
│ │ │ │ │ ├── a/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── locales/
│ │ │ │ │ │ │ ├── zh-CN.ts
│ │ │ │ │ │ │ ├── zh-CN.yaml
│ │ │ │ │ │ │ └── zh_CN.properties
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── router.js
│ │ │ │ │ ├── b/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── locales/
│ │ │ │ │ │ │ └── zh-CN.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── c/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── locale/
│ │ │ │ │ │ │ │ └── zh-CN.js
│ │ │ │ │ │ │ └── locales/
│ │ │ │ │ │ │ └── zh-CN.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ ├── locales/
│ │ │ │ │ │ │ ├── de.json
│ │ │ │ │ │ │ └── zh-CN.js
│ │ │ │ │ │ ├── locales2/
│ │ │ │ │ │ │ └── zh-CN.js
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ └── package.json
│ │ │ │ └── custom_egg/
│ │ │ │ ├── config/
│ │ │ │ │ └── locales/
│ │ │ │ │ └── zh-CN.js
│ │ │ │ ├── index.js
│ │ │ │ └── package.json
│ │ │ ├── i18n.test.ts
│ │ │ └── utils.test.ts
│ │ └── tsconfig.json
│ ├── jsonp/
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── app/
│ │ │ │ └── extend/
│ │ │ │ ├── application.ts
│ │ │ │ └── context.ts
│ │ │ ├── config/
│ │ │ │ └── config.default.ts
│ │ │ ├── error/
│ │ │ │ └── JSONPForbiddenReferrerError.ts
│ │ │ ├── index.ts
│ │ │ ├── lib/
│ │ │ │ └── private_key.ts
│ │ │ └── types.ts
│ │ ├── test/
│ │ │ ├── fixtures/
│ │ │ │ └── jsonp-test/
│ │ │ │ ├── app/
│ │ │ │ │ ├── controller/
│ │ │ │ │ │ └── jsonp.js
│ │ │ │ │ └── router.js
│ │ │ │ ├── config/
│ │ │ │ │ └── config.default.js
│ │ │ │ └── package.json
│ │ │ └── jsonp.test.ts
│ │ └── tsconfig.json
│ ├── logrotator/
│ │ ├── .gitignore
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── README.zh-CN.md
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── agent.ts
│ │ │ ├── app/
│ │ │ │ ├── extend/
│ │ │ │ │ ├── agent.ts
│ │ │ │ │ └── application.ts
│ │ │ │ └── schedule/
│ │ │ │ ├── clean_log.ts
│ │ │ │ ├── rotate_by_file.ts
│ │ │ │ ├── rotate_by_hour.ts
│ │ │ │ └── rotate_by_size.ts
│ │ │ ├── app.ts
│ │ │ ├── boot.ts
│ │ │ ├── config/
│ │ │ │ └── config.default.ts
│ │ │ ├── index.ts
│ │ │ ├── lib/
│ │ │ │ ├── day_rotator.ts
│ │ │ │ ├── hour_rotator.ts
│ │ │ │ ├── rotator.ts
│ │ │ │ ├── size_rotator.ts
│ │ │ │ └── utils.ts
│ │ │ └── types.ts
│ │ ├── test/
│ │ │ ├── __snapshots__/
│ │ │ │ └── clean_log.test.ts.snap
│ │ │ ├── clean_log.test.ts
│ │ │ ├── fixtures/
│ │ │ │ ├── clean-log/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.default.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── logger-reload/
│ │ │ │ │ ├── agent.js
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── router.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── logrotator-agent/
│ │ │ │ │ ├── app.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.default.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── logrotator-app/
│ │ │ │ │ ├── agent.js
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── router.js
│ │ │ │ │ ├── app.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.default.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── logrotator-app-day-gzip/
│ │ │ │ │ ├── agent.js
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── router.js
│ │ │ │ │ ├── app.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.default.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── logrotator-app-hour/
│ │ │ │ │ ├── agent.js
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── router.js
│ │ │ │ │ ├── app.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.default.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── logrotator-app-hour-custom_hourdelimiter/
│ │ │ │ │ ├── agent.js
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── router.js
│ │ │ │ │ ├── app.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.default.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── logrotator-app-hour-gzip/
│ │ │ │ │ ├── agent.js
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── router.js
│ │ │ │ │ ├── app.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.default.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── logrotator-app-size/
│ │ │ │ │ ├── agent.js
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── router.js
│ │ │ │ │ ├── app.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.default.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── logrotator-app-size-gzip/
│ │ │ │ │ ├── agent.js
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── router.js
│ │ │ │ │ ├── app.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.default.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── logrotator-default/
│ │ │ │ │ └── package.json
│ │ │ │ ├── logrotator-json-format/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.default.js
│ │ │ │ │ └── package.json
│ │ │ │ └── noexist-rotator-dir/
│ │ │ │ ├── config/
│ │ │ │ │ └── config.default.js
│ │ │ │ └── package.json
│ │ │ ├── index.test.ts
│ │ │ ├── logrotator.test.ts
│ │ │ ├── rotate_by_day.test.ts
│ │ │ ├── rotate_by_size.test.ts
│ │ │ └── utils.ts
│ │ ├── tsconfig.json
│ │ └── vitest.config.ts
│ ├── mock/
│ │ ├── .gitignore
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── README.zh_CN.md
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── app/
│ │ │ │ ├── extend/
│ │ │ │ │ ├── agent.ts
│ │ │ │ │ └── application.ts
│ │ │ │ └── middleware/
│ │ │ │ └── cluster_app_mock.ts
│ │ │ ├── app.ts
│ │ │ ├── bootstrap.ts
│ │ │ ├── index.ts
│ │ │ ├── inject_mocha.ts
│ │ │ ├── lib/
│ │ │ │ ├── agent_handler.ts
│ │ │ │ ├── app.ts
│ │ │ │ ├── app_handler.ts
│ │ │ │ ├── cluster.ts
│ │ │ │ ├── context.ts
│ │ │ │ ├── format_options.ts
│ │ │ │ ├── inject_context.ts
│ │ │ │ ├── mock_agent.ts
│ │ │ │ ├── mock_custom_loader.ts
│ │ │ │ ├── mock_http_server.ts
│ │ │ │ ├── mock_httpclient.ts
│ │ │ │ ├── parallel/
│ │ │ │ │ ├── agent.ts
│ │ │ │ │ ├── app.ts
│ │ │ │ │ └── util.ts
│ │ │ │ ├── prerequire.ts
│ │ │ │ ├── request_call_function.ts
│ │ │ │ ├── restore.ts
│ │ │ │ ├── start-cluster.ts
│ │ │ │ ├── supertest.ts
│ │ │ │ ├── tmp/
│ │ │ │ │ ├── .gitkeep
│ │ │ │ │ └── empty.ts
│ │ │ │ ├── types.ts
│ │ │ │ └── utils.ts
│ │ │ ├── register.ts
│ │ │ ├── setup_vitest.ts
│ │ │ └── typings/
│ │ │ └── index.d.ts
│ │ ├── test/
│ │ │ ├── __snapshots__/
│ │ │ │ └── app_proxy.test.ts.snap
│ │ │ ├── agent.test.ts
│ │ │ ├── app/
│ │ │ │ └── middleware/
│ │ │ │ └── cluster_app_mock.test.ts
│ │ │ ├── app.test.ts
│ │ │ ├── app_event.test.ts
│ │ │ ├── app_proxy.test.ts
│ │ │ ├── bootstrap-plugin.test.ts
│ │ │ ├── bootstrap.test.ts
│ │ │ ├── cluster-worker_threads.test.ts
│ │ │ ├── cluster.test.ts
│ │ │ ├── ctx.test.ts
│ │ │ ├── demo-cluster.ts
│ │ │ ├── fixtures/
│ │ │ │ ├── agent/
│ │ │ │ │ ├── agent.js
│ │ │ │ │ ├── app.js
│ │ │ │ │ ├── client.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.default.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── agent-boot-error/
│ │ │ │ │ ├── agent.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── agent-boot-ready-error/
│ │ │ │ │ ├── agent.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── app/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── router.js
│ │ │ │ │ ├── app.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.default.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── app-boot-error/
│ │ │ │ │ ├── app.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── app-boot-ready-error/
│ │ │ │ │ ├── app.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── app-event/
│ │ │ │ │ ├── agent.js
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── router.js
│ │ │ │ │ ├── app.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.default.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── app-fail/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── router.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.default.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── app-proxy/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── extend/
│ │ │ │ │ │ └── application.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.default.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── app-proxy-ready/
│ │ │ │ │ ├── agent.js
│ │ │ │ │ ├── app.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.default.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── app-ready-failed/
│ │ │ │ │ ├── app.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.default.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── test/
│ │ │ │ │ └── index.test.js
│ │ │ │ ├── apps/
│ │ │ │ │ ├── app-not-clean/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── app-throw/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ │ └── config.unittest.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── barapp/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ └── home.js
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── env-app/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ │ ├── config.local.js
│ │ │ │ │ │ │ ├── config.prod.js
│ │ │ │ │ │ │ ├── config.test.js
│ │ │ │ │ │ │ └── config.unittest.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── foo/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── helloworld/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ ├── package.json
│ │ │ │ │ │ └── test/
│ │ │ │ │ │ └── helloworld.test.js
│ │ │ │ │ ├── mock_cookies/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ │ └── plugin.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── mockhome/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── no-framework/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── plugin.js
│ │ │ │ │ │ ├── package.json
│ │ │ │ │ │ └── plugin/
│ │ │ │ │ │ └── a/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ └── extend/
│ │ │ │ │ │ │ └── application.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── parallel-test/
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── test/
│ │ │ │ │ ├── a.test.js
│ │ │ │ │ ├── b.test.js
│ │ │ │ │ └── c.test.js
│ │ │ │ ├── bar/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.default.js
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── cache/
│ │ │ │ │ ├── config.default.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── chair/
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── create-context-failed/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.default.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── test/
│ │ │ │ │ └── index.test.js
│ │ │ │ ├── custom-loader/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── adapter/
│ │ │ │ │ │ │ └── docker.js
│ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ └── user.js
│ │ │ │ │ │ ├── repository/
│ │ │ │ │ │ │ └── user.js
│ │ │ │ │ │ └── router.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.default.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── custom_egg/
│ │ │ │ │ └── package.json
│ │ │ │ ├── demo/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── context.js
│ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ ├── file.js
│ │ │ │ │ │ │ ├── home.js
│ │ │ │ │ │ │ ├── session.js
│ │ │ │ │ │ │ └── user.js
│ │ │ │ │ │ ├── extend/
│ │ │ │ │ │ │ └── application.js
│ │ │ │ │ │ ├── router.js
│ │ │ │ │ │ └── service/
│ │ │ │ │ │ ├── bar/
│ │ │ │ │ │ │ └── foo.js
│ │ │ │ │ │ ├── foo.js
│ │ │ │ │ │ ├── old.js
│ │ │ │ │ │ └── third/
│ │ │ │ │ │ └── bar/
│ │ │ │ │ │ └── foo.js
│ │ │ │ │ ├── app.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── config.js
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ ├── mocks_data/
│ │ │ │ │ │ └── service/
│ │ │ │ │ │ ├── bar/
│ │ │ │ │ │ │ └── foo/
│ │ │ │ │ │ │ └── get/
│ │ │ │ │ │ │ └── foobar.js
│ │ │ │ │ │ └── foo/
│ │ │ │ │ │ └── get/
│ │ │ │ │ │ └── foobar.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── demo-async/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ └── home.js
│ │ │ │ │ │ ├── router.js
│ │ │ │ │ │ └── service/
│ │ │ │ │ │ ├── bar/
│ │ │ │ │ │ │ └── foo.js
│ │ │ │ │ │ ├── foo.js
│ │ │ │ │ │ └── third/
│ │ │ │ │ │ └── bar/
│ │ │ │ │ │ └── foo.js
│ │ │ │ │ ├── app.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.js
│ │ │ │ │ ├── mocks_data/
│ │ │ │ │ │ └── service/
│ │ │ │ │ │ ├── bar/
│ │ │ │ │ │ │ └── foo/
│ │ │ │ │ │ │ └── get/
│ │ │ │ │ │ │ └── foobar.js
│ │ │ │ │ │ └── foo/
│ │ │ │ │ │ └── get/
│ │ │ │ │ │ └── foobar.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── demo_mock_service_cluster/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── context.js
│ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ ├── file.js
│ │ │ │ │ │ │ ├── home.js
│ │ │ │ │ │ │ ├── session.js
│ │ │ │ │ │ │ └── user.js
│ │ │ │ │ │ ├── extend/
│ │ │ │ │ │ │ └── application.js
│ │ │ │ │ │ ├── router.js
│ │ │ │ │ │ └── service/
│ │ │ │ │ │ ├── bar/
│ │ │ │ │ │ │ └── foo.js
│ │ │ │ │ │ ├── foo.js
│ │ │ │ │ │ ├── old.js
│ │ │ │ │ │ └── third/
│ │ │ │ │ │ └── bar/
│ │ │ │ │ │ └── foo.js
│ │ │ │ │ ├── app.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── config.js
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ ├── mocks_data/
│ │ │ │ │ │ └── service/
│ │ │ │ │ │ ├── bar/
│ │ │ │ │ │ │ └── foo/
│ │ │ │ │ │ │ └── get/
│ │ │ │ │ │ │ └── foobar.js
│ │ │ │ │ │ └── foo/
│ │ │ │ │ │ └── get/
│ │ │ │ │ │ └── foobar.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── demo_next/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── context.js
│ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ ├── file.js
│ │ │ │ │ │ │ ├── home.js
│ │ │ │ │ │ │ ├── session.js
│ │ │ │ │ │ │ └── user.js
│ │ │ │ │ │ ├── extend/
│ │ │ │ │ │ │ └── application.js
│ │ │ │ │ │ ├── router.js
│ │ │ │ │ │ └── service/
│ │ │ │ │ │ ├── bar/
│ │ │ │ │ │ │ └── foo.js
│ │ │ │ │ │ ├── foo.js
│ │ │ │ │ │ ├── old.js
│ │ │ │ │ │ └── third/
│ │ │ │ │ │ └── bar/
│ │ │ │ │ │ └── foo.js
│ │ │ │ │ ├── app.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.js
│ │ │ │ │ ├── mocks_data/
│ │ │ │ │ │ └── service/
│ │ │ │ │ │ ├── bar/
│ │ │ │ │ │ │ └── foo/
│ │ │ │ │ │ │ └── get/
│ │ │ │ │ │ │ └── foobar.js
│ │ │ │ │ │ └── foo/
│ │ │ │ │ │ └── get/
│ │ │ │ │ │ └── foobar.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── demo_next_h2/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── context.js
│ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ ├── file.js
│ │ │ │ │ │ │ ├── home.js
│ │ │ │ │ │ │ ├── session.js
│ │ │ │ │ │ │ └── user.js
│ │ │ │ │ │ ├── extend/
│ │ │ │ │ │ │ └── application.js
│ │ │ │ │ │ ├── router.js
│ │ │ │ │ │ └── service/
│ │ │ │ │ │ ├── bar/
│ │ │ │ │ │ │ └── foo.js
│ │ │ │ │ │ ├── foo.js
│ │ │ │ │ │ ├── old.js
│ │ │ │ │ │ └── third/
│ │ │ │ │ │ └── bar/
│ │ │ │ │ │ └── foo.js
│ │ │ │ │ ├── app.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.js
│ │ │ │ │ ├── mocks_data/
│ │ │ │ │ │ └── service/
│ │ │ │ │ │ ├── bar/
│ │ │ │ │ │ │ └── foo/
│ │ │ │ │ │ │ └── get/
│ │ │ │ │ │ │ └── foobar.js
│ │ │ │ │ │ └── foo/
│ │ │ │ │ │ └── get/
│ │ │ │ │ │ └── foobar.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── disable-security/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── context.js
│ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ ├── home.js
│ │ │ │ │ │ │ └── session.js
│ │ │ │ │ │ ├── router.js
│ │ │ │ │ │ └── service/
│ │ │ │ │ │ ├── bar/
│ │ │ │ │ │ │ └── foo.js
│ │ │ │ │ │ ├── foo.js
│ │ │ │ │ │ ├── old.js
│ │ │ │ │ │ └── third/
│ │ │ │ │ │ └── bar/
│ │ │ │ │ │ └── foo.js
│ │ │ │ │ ├── app.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── config.js
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ ├── mocks_data/
│ │ │ │ │ │ └── service/
│ │ │ │ │ │ ├── bar/
│ │ │ │ │ │ │ └── foo/
│ │ │ │ │ │ │ └── get/
│ │ │ │ │ │ │ └── foobar.js
│ │ │ │ │ │ └── foo/
│ │ │ │ │ │ └── get/
│ │ │ │ │ │ └── foobar.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── error-framework/
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── failed-app/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.default.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── test/
│ │ │ │ │ └── index.test.js
│ │ │ │ ├── fooPlugin/
│ │ │ │ │ ├── app.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── get-app-failed/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.default.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── test/
│ │ │ │ │ └── index.test.js
│ │ │ │ ├── messenger-binding/
│ │ │ │ │ ├── agent.js
│ │ │ │ │ ├── app.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.default.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── plugin/
│ │ │ │ │ └── package.json
│ │ │ │ ├── plugin-bootstrap/
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── test.js
│ │ │ │ ├── plugin_throw/
│ │ │ │ │ └── package.json
│ │ │ │ ├── request/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── router.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.default.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── server/
│ │ │ │ │ ├── app.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── setup-app/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.default.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── test/
│ │ │ │ │ ├── .setup.js
│ │ │ │ │ └── index.test.js
│ │ │ │ ├── simple/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ └── home.js
│ │ │ │ │ │ └── router.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.default.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── tegg-app/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── modules/
│ │ │ │ │ │ └── foo/
│ │ │ │ │ │ ├── LogService.ts
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── app.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── test/
│ │ │ │ │ │ ├── hooks.test.ts
│ │ │ │ │ │ ├── multi_mock_context.test.ts
│ │ │ │ │ │ ├── tegg.test.ts
│ │ │ │ │ │ └── tegg_context.test.ts
│ │ │ │ │ ├── tsconfig.json
│ │ │ │ │ └── typing.ts
│ │ │ │ ├── tegg-app-esm/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── modules/
│ │ │ │ │ │ └── foo/
│ │ │ │ │ │ ├── LogService.ts
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── app.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── test/
│ │ │ │ │ │ ├── hooks.test.ts
│ │ │ │ │ │ ├── multi_mock_context.test.ts
│ │ │ │ │ │ ├── tegg.test.ts
│ │ │ │ │ │ └── tegg_context.test.ts
│ │ │ │ │ ├── tsconfig.json
│ │ │ │ │ └── typing.ts
│ │ │ │ ├── test-case-create-context-failed/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.default.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── test/
│ │ │ │ │ └── index.test.js
│ │ │ │ ├── test-case-get-app-failed/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.default.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── test/
│ │ │ │ │ └── index.test.js
│ │ │ │ ├── yadan_app/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.default.js
│ │ │ │ │ └── package.json
│ │ │ │ └── yadan_app_fail/
│ │ │ │ ├── config/
│ │ │ │ │ └── config.default.js
│ │ │ │ └── package.json
│ │ │ ├── format_options.test.ts
│ │ │ ├── helper.ts
│ │ │ ├── index.test-skip.ts
│ │ │ ├── inject_ctx.test.ts
│ │ │ ├── mm.test.ts
│ │ │ ├── mock_agent_httpclient.test.ts
│ │ │ ├── mock_cluster_extend.test.ts
│ │ │ ├── mock_cluster_restore.test.ts
│ │ │ ├── mock_cluster_without_security_plugin.test.ts
│ │ │ ├── mock_context.test.ts
│ │ │ ├── mock_cookies.test.ts
│ │ │ ├── mock_csrf.test.ts
│ │ │ ├── mock_custom_loader.test.ts
│ │ │ ├── mock_env.test.ts
│ │ │ ├── mock_headers.test.ts
│ │ │ ├── mock_httpclient_next.test.ts
│ │ │ ├── mock_httpclient_next_h2.test.ts
│ │ │ ├── mock_request.test.ts
│ │ │ ├── mock_service.test.ts
│ │ │ ├── mock_service_async.test.ts
│ │ │ ├── mock_service_cluster.test.ts
│ │ │ ├── mock_session.test.ts
│ │ │ ├── parallel.test.ts
│ │ │ ├── parallel_hook.test.ts
│ │ │ └── setup_vitest.test.ts
│ │ ├── tsconfig.json
│ │ ├── tsdown.config.ts
│ │ └── vitest.config.ts
│ ├── multipart/
│ │ ├── .gitignore
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── app/
│ │ │ │ ├── extend/
│ │ │ │ │ └── context.ts
│ │ │ │ ├── middleware/
│ │ │ │ │ └── multipart.ts
│ │ │ │ └── schedule/
│ │ │ │ └── clean_tmpdir.ts
│ │ │ ├── app.ts
│ │ │ ├── config/
│ │ │ │ └── config.default.ts
│ │ │ ├── index.ts
│ │ │ ├── lib/
│ │ │ │ ├── LimitError.ts
│ │ │ │ ├── MultipartFileTooLargeError.ts
│ │ │ │ └── utils.ts
│ │ │ └── types.ts
│ │ ├── test/
│ │ │ ├── dynamic-option.test.ts
│ │ │ ├── enable-pathToRegexpModule.test.ts
│ │ │ ├── file-mode-limit-filesize-per-request.test.ts
│ │ │ ├── file-mode.test.ts
│ │ │ ├── fixtures/
│ │ │ │ ├── apps/
│ │ │ │ │ ├── dynamic-option/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ └── upload.js
│ │ │ │ │ │ │ ├── router.js
│ │ │ │ │ │ │ └── views/
│ │ │ │ │ │ │ └── home.html
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ │ └── config.unittest.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── file-mode/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ └── upload.js
│ │ │ │ │ │ │ ├── router.js
│ │ │ │ │ │ │ └── views/
│ │ │ │ │ │ │ └── home.html
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ │ └── config.unittest.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── fileModeMatch/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ ├── save.js
│ │ │ │ │ │ │ │ └── upload.js
│ │ │ │ │ │ │ ├── router.js
│ │ │ │ │ │ │ └── views/
│ │ │ │ │ │ │ └── home.html
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ │ └── config.unittest.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── fileModeMatch-glob/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ ├── save.js
│ │ │ │ │ │ │ │ └── upload.js
│ │ │ │ │ │ │ ├── router.js
│ │ │ │ │ │ │ └── views/
│ │ │ │ │ │ │ └── home.html
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ │ └── config.unittest.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── fileModeMatch-glob-with-pathToRegexpModule/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ ├── save.js
│ │ │ │ │ │ │ │ └── upload.js
│ │ │ │ │ │ │ ├── router.js
│ │ │ │ │ │ │ └── views/
│ │ │ │ │ │ │ └── home.html
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ │ └── config.unittest.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── limit-filesize-per-request/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ │ └── config.unittest.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── multipart/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ └── upload.js
│ │ │ │ │ │ │ ├── router.js
│ │ │ │ │ │ │ └── views/
│ │ │ │ │ │ │ └── home.html
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ │ └── config.unittest.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── multipart-for-await/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ └── upload.js
│ │ │ │ │ │ │ ├── router.js
│ │ │ │ │ │ │ └── views/
│ │ │ │ │ │ │ └── home.html
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── multipart-with-whitelist/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ └── upload.js
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ │ └── config.unittest.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── ts/
│ │ │ │ │ │ ├── .gitignore
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ └── home.ts
│ │ │ │ │ │ │ └── router.ts
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.ts
│ │ │ │ │ │ ├── package.json
│ │ │ │ │ │ └── tsconfig.json
│ │ │ │ │ ├── upload-limit/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ │ └── config.unittest.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── upload-one-file/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ └── async.js
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ │ └── config.unittest.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── whitelist-function/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ └── upload.js
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ │ └── config.unittest.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── wrong-fileModeMatch/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── wrong-fileModeMatch-value/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── config.default.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── wrong-mode/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.default.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── bigfile.txt
│ │ │ │ ├── testfile.txt
│ │ │ │ └── 中文名.js
│ │ │ ├── multipart-for-await.test.ts
│ │ │ ├── multipart.test.ts
│ │ │ ├── setup.ts
│ │ │ ├── stream-mode-with-filematch-glob.test.ts
│ │ │ ├── stream-mode-with-filematch.test.ts
│ │ │ ├── ts.test.ts
│ │ │ ├── utils.ts
│ │ │ └── wrong-mode.test.ts
│ │ ├── tsconfig.json
│ │ └── vitest.config.ts
│ ├── onerror/
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── agent.ts
│ │ │ ├── app.ts
│ │ │ ├── config/
│ │ │ │ └── config.default.ts
│ │ │ ├── index.ts
│ │ │ ├── lib/
│ │ │ │ ├── error_view.ts
│ │ │ │ ├── onerror_page.mustache.html
│ │ │ │ └── utils.ts
│ │ │ └── types.ts
│ │ ├── test/
│ │ │ ├── fixtures/
│ │ │ │ ├── agent-error/
│ │ │ │ │ ├── agent.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── custom-listener-onerror/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── router.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.default.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── mock-test-error/
│ │ │ │ │ └── package.json
│ │ │ │ ├── onerror/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ ├── home.js
│ │ │ │ │ │ │ └── user.js
│ │ │ │ │ │ └── router.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── onerror-4xx/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ ├── home.js
│ │ │ │ │ │ │ └── user.js
│ │ │ │ │ │ └── router.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.default.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── onerror-ctx-error/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── extend/
│ │ │ │ │ │ │ └── context.js
│ │ │ │ │ │ └── middleware/
│ │ │ │ │ │ └── trigger.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.default.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── onerror-custom-500/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── router.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.default.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── onerror-custom-template/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ ├── home.js
│ │ │ │ │ │ │ └── user.js
│ │ │ │ │ │ └── router.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.default.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── template.mustache
│ │ │ │ ├── onerror-customize/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ ├── home.js
│ │ │ │ │ │ │ └── user.js
│ │ │ │ │ │ └── router.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.default.js
│ │ │ │ │ └── package.json
│ │ │ │ └── onerror-no-errorpage/
│ │ │ │ ├── app/
│ │ │ │ │ ├── controller/
│ │ │ │ │ │ ├── home.js
│ │ │ │ │ │ └── user.js
│ │ │ │ │ └── router.js
│ │ │ │ ├── config/
│ │ │ │ │ └── config.default.js
│ │ │ │ └── package.json
│ │ │ └── onerror.test.ts
│ │ ├── tsconfig.json
│ │ ├── tsdown.config.ts
│ │ └── vitest.config.ts
│ ├── redis/
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── docker-compose.yml
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── agent.ts
│ │ │ ├── app.ts
│ │ │ ├── config/
│ │ │ │ └── config.default.ts
│ │ │ ├── index.ts
│ │ │ ├── lib/
│ │ │ │ └── redis.ts
│ │ │ └── types.ts
│ │ ├── test/
│ │ │ ├── __snapshots__/
│ │ │ │ └── redis.test.ts.snap
│ │ │ ├── fixtures/
│ │ │ │ ├── apps/
│ │ │ │ │ ├── redisapp/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ └── home.js
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.js
│ │ │ │ │ │ │ └── plugin.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── redisapp-customize/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ └── home.js
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.js
│ │ │ │ │ │ │ └── plugin.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── redisapp-default/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ └── home.js
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.js
│ │ │ │ │ │ │ └── plugin.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── redisapp-disable-offline-queue/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ └── home.js
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.js
│ │ │ │ │ │ │ └── plugin.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── redisapp-mock/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ └── home.js
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.js
│ │ │ │ │ │ │ └── plugin.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── redisapp-supportTimeCommand-false/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ └── home.js
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.js
│ │ │ │ │ │ │ └── plugin.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── redisapp-weakdependent/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ └── home.js
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.js
│ │ │ │ │ │ │ └── plugin.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── redisclusterapp/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ └── home.js
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.js
│ │ │ │ │ │ │ └── plugin.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── redispathapp/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ └── home.js
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.js
│ │ │ │ │ │ │ └── plugin.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── redissentinelapp/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ └── home.js
│ │ │ │ │ │ │ └── router.js
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.js
│ │ │ │ │ │ │ └── plugin.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── ts/
│ │ │ │ │ │ ├── .gitignore
│ │ │ │ │ │ └── redisapp-ts/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ └── home.ts
│ │ │ │ │ │ │ └── router.ts
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.ts
│ │ │ │ │ │ │ └── plugin.ts
│ │ │ │ │ │ ├── package.json
│ │ │ │ │ │ └── tsconfig.json
│ │ │ │ │ └── ts-multi/
│ │ │ │ │ ├── .gitignore
│ │ │ │ │ ├── redisapp-ts/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ └── home.ts
│ │ │ │ │ │ │ └── router.ts
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── config.ts
│ │ │ │ │ │ │ └── plugin.ts
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── tsconfig.json
│ │ │ │ └── redis/
│ │ │ │ ├── redispath-26381.conf
│ │ │ │ ├── sentinel-26379.conf
│ │ │ │ └── sentinel-26380.conf
│ │ │ └── redis.test.ts
│ │ ├── tsconfig.json
│ │ └── vitest.config.ts
│ ├── schedule/
│ │ ├── .gitignore
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── agent.ts
│ │ │ ├── app/
│ │ │ │ └── extend/
│ │ │ │ ├── agent.ts
│ │ │ │ ├── application.ts
│ │ │ │ └── application.unittest.ts
│ │ │ ├── app.ts
│ │ │ ├── config/
│ │ │ │ └── config.default.ts
│ │ │ ├── index.ts
│ │ │ ├── lib/
│ │ │ │ ├── load_schedule.ts
│ │ │ │ ├── schedule.ts
│ │ │ │ ├── schedule_worker.ts
│ │ │ │ ├── strategy/
│ │ │ │ │ ├── all.ts
│ │ │ │ │ ├── base.ts
│ │ │ │ │ ├── timer.ts
│ │ │ │ │ └── worker.ts
│ │ │ │ └── types.ts
│ │ │ └── types.ts
│ │ ├── test/
│ │ │ ├── all.test.ts
│ │ │ ├── cronError.test.ts
│ │ │ ├── customDirectory.test.ts
│ │ │ ├── customType.test.ts
│ │ │ ├── customTypeError.test.ts
│ │ │ ├── customTypeParams.test.ts
│ │ │ ├── customTypePlugin.test.ts
│ │ │ ├── customTypeWithoutStart.test.ts
│ │ │ ├── detect-error.test.ts
│ │ │ ├── dynamic.test.ts
│ │ │ ├── env.test.ts
│ │ │ ├── executeError-task-generator.test.ts
│ │ │ ├── executeError.test.ts
│ │ │ ├── fixtures/
│ │ │ │ ├── all/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── schedule/
│ │ │ │ │ │ ├── interval.js
│ │ │ │ │ │ └── sub/
│ │ │ │ │ │ └── cron.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── async/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── schedule/
│ │ │ │ │ │ │ └── sub/
│ │ │ │ │ │ │ └── cron.js
│ │ │ │ │ │ └── service/
│ │ │ │ │ │ └── user.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── context/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── schedule/
│ │ │ │ │ │ │ └── sub/
│ │ │ │ │ │ │ └── cron.js
│ │ │ │ │ │ └── service/
│ │ │ │ │ │ └── user.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── cronError/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── schedule/
│ │ │ │ │ │ ├── interval.js
│ │ │ │ │ │ └── sub/
│ │ │ │ │ │ └── cron.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── cronOptions/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── schedule/
│ │ │ │ │ │ └── cron-options.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── customDirectory/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── other-schedule/
│ │ │ │ │ │ │ └── custom.js
│ │ │ │ │ │ └── schedule/
│ │ │ │ │ │ └── interval.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── config.js
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── customType/
│ │ │ │ │ ├── agent.js
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── schedule/
│ │ │ │ │ │ └── cluster.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── customTypeError/
│ │ │ │ │ ├── agent.js
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── schedule/
│ │ │ │ │ │ └── cluster.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── customTypeParams/
│ │ │ │ │ ├── agent.js
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── schedule/
│ │ │ │ │ │ ├── cluster-all-clz.js
│ │ │ │ │ │ ├── cluster-all.js
│ │ │ │ │ │ ├── cluster-clz.js
│ │ │ │ │ │ └── cluster.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── customTypePlugin/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── schedule/
│ │ │ │ │ │ └── cluster.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ ├── lib/
│ │ │ │ │ │ └── plugin/
│ │ │ │ │ │ ├── agent.js
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── package.json
│ │ │ │ ├── customTypeWithoutStart/
│ │ │ │ │ ├── agent.js
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── schedule/
│ │ │ │ │ │ └── cluster.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── demo/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.default.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── detect-error/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── schedule/
│ │ │ │ │ │ ├── error.js
│ │ │ │ │ │ ├── fail.js
│ │ │ │ │ │ └── suc.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── dynamic-app/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── schedule/
│ │ │ │ │ │ ├── interval.js
│ │ │ │ │ │ └── sub/
│ │ │ │ │ │ └── cron.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.default.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── dynamic-cluster/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── schedule/
│ │ │ │ │ │ ├── interval.js
│ │ │ │ │ │ └── sub/
│ │ │ │ │ │ └── cron.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── config.default.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── env/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── schedule/
│ │ │ │ │ │ ├── local.js
│ │ │ │ │ │ ├── undefined.js
│ │ │ │ │ │ └── unittest.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── executeError/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── schedule/
│ │ │ │ │ │ └── interval.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── executeError-task-generator/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── schedule/
│ │ │ │ │ │ └── interval.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── immediate/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── schedule/
│ │ │ │ │ │ ├── immediate-cron.js
│ │ │ │ │ │ └── immediate-interval.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── immediate-onlyonce/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── schedule/
│ │ │ │ │ │ └── immediate-onlyonce.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── plugin/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── plugin/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── schedule/
│ │ │ │ │ │ ├── interval.js
│ │ │ │ │ │ └── sub/
│ │ │ │ │ │ └── cron.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── safe-timers/
│ │ │ │ │ ├── agent.js
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── schedule/
│ │ │ │ │ │ ├── interval.js
│ │ │ │ │ │ └── sub/
│ │ │ │ │ │ └── cron.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── scheduleError/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── schedule/
│ │ │ │ │ │ ├── interval.js
│ │ │ │ │ │ └── sub/
│ │ │ │ │ │ └── cron.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── stop/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── schedule/
│ │ │ │ │ │ └── interval.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── subscription/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── schedule/
│ │ │ │ │ │ ├── interval.js
│ │ │ │ │ │ └── sub/
│ │ │ │ │ │ └── cron.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── subscription-enableFastContextLogger/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── schedule/
│ │ │ │ │ │ ├── interval.js
│ │ │ │ │ │ └── sub/
│ │ │ │ │ │ └── cron.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── subscription-generator/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── schedule/
│ │ │ │ │ │ ├── interval.js
│ │ │ │ │ │ └── sub/
│ │ │ │ │ │ └── cron.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── symlink/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── realFile.js
│ │ │ │ │ ├── runDir/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ └── schedule/
│ │ │ │ │ │ │ └── .gitkeep
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── tsRealFile.ts
│ │ │ │ ├── typeUndefined/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── schedule/
│ │ │ │ │ │ ├── sub/
│ │ │ │ │ │ │ └── cron.js
│ │ │ │ │ │ └── undefined.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── unknown/
│ │ │ │ │ ├── agent.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── worker/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── schedule/
│ │ │ │ │ │ ├── interval.js
│ │ │ │ │ │ └── sub/
│ │ │ │ │ │ └── cron.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── config.default.js
│ │ │ │ │ │ └── plugin.js
│ │ │ │ │ └── package.json
│ │ │ │ └── worker-ctxStorage/
│ │ │ │ ├── app/
│ │ │ │ │ └── schedule/
│ │ │ │ │ ├── interval.js
│ │ │ │ │ └── sub/
│ │ │ │ │ └── foobar.js
│ │ │ │ ├── config/
│ │ │ │ │ └── plugin.js
│ │ │ │ └── package.json
│ │ │ ├── immediate.test.ts
│ │ │ ├── safe-timers.test.ts
│ │ │ ├── schedule-plugin.test.ts
│ │ │ ├── schedule-type-worker1.test.ts
│ │ │ ├── schedule-type-worker2.test.ts
│ │ │ ├── schedule.test.ts
│ │ │ ├── scheduleError.test.ts
│ │ │ ├── stop.test.ts
│ │ │ ├── subscription.test.ts
│ │ │ ├── typeUndefined.test.ts
│ │ │ ├── unknown.test.ts
│ │ │ └── utils.ts
│ │ ├── tsconfig.json
│ │ └── vitest.config.ts
│ ├── security/
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── README.zh-CN.md
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── agent.ts
│ │ │ ├── app/
│ │ │ │ ├── extend/
│ │ │ │ │ ├── agent.ts
│ │ │ │ │ ├── application.ts
│ │ │ │ │ ├── context.ts
│ │ │ │ │ ├── helper.ts
│ │ │ │ │ └── response.ts
│ │ │ │ └── middleware/
│ │ │ │ └── securities.ts
│ │ │ ├── app.ts
│ │ │ ├── config/
│ │ │ │ ├── config.default.ts
│ │ │ │ └── config.local.ts
│ │ │ ├── index.ts
│ │ │ ├── lib/
│ │ │ │ ├── extend/
│ │ │ │ │ └── safe_curl.ts
│ │ │ │ ├── helper/
│ │ │ │ │ ├── cliFilter.ts
│ │ │ │ │ ├── escape.ts
│ │ │ │ │ ├── escapeShellArg.ts
│ │ │ │ │ ├── escapeShellCmd.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── shtml.ts
│ │ │ │ │ ├── sjs.ts
│ │ │ │ │ ├── sjson.ts
│ │ │ │ │ ├── spath.ts
│ │ │ │ │ └── surl.ts
│ │ │ │ ├── middlewares/
│ │ │ │ │ ├── csp.ts
│ │ │ │ │ ├── csrf.ts
│ │ │ │ │ ├── dta.ts
│ │ │ │ │ ├── hsts.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── methodnoallow.ts
│ │ │ │ │ ├── noopen.ts
│ │ │ │ │ ├── nosniff.ts
│ │ │ │ │ ├── referrerPolicy.ts
│ │ │ │ │ ├── xframe.ts
│ │ │ │ │ └── xssProtection.ts
│ │ │ │ └── utils.ts
│ │ │ └── types.ts
│ │ ├── test/
│ │ │ ├── __snapshots__/
│ │ │ │ ├── context.test.ts.snap
│ │ │ │ ├── csp.test.ts.snap
│ │ │ │ ├── csrf.test.ts.snap
│ │ │ │ ├── dta.test.ts.snap
│ │ │ │ └── xss.test.ts.snap
│ │ │ ├── app/
│ │ │ │ └── extends/
│ │ │ │ ├── cliFilter.test.ts
│ │ │ │ ├── escapeShell
================================================
FILE CONTENTS
================================================
================================================
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: 🐛 Egg Bug 反馈
description: 如发现 Egg 框架中的 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” 命令,在控制台得到版本号(例如:v8.5.0)。
validations:
required: true
- type: input
attributes:
label: Eggjs 版本号:
description: |
你的当前复现问题 Eggjs 版本号:
placeholder: |
请直接在“package.json”中查阅(例如:3.1.0)。
validations:
required: true
- type: input
attributes:
label: '相关插件名称与版本号(PlugIn and Name):'
description: |
插件名称以及版本号:
placeholder: |
请直接在“package.json”中查阅(例如:egg-mysql,3.1.1)。
validations:
required: true
- type: input
attributes:
label: '操作平台与版本号(Platform and Version):'
description: |
你的操作平台与版本号:
placeholder: |
Windows 10 专业版(21H2)
validations:
required: true
================================================
FILE: .github/ISSUE_TEMPLATE/bug-report.yml
================================================
name: 🐛 Bug Report For Eggjs
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: v8.5.0).
validations:
required: true
- type: input
attributes:
label: Eggjs Version
description: |
What's your Eggjs version?
placeholder: |
See it directly in your "package.json" file (e.g: 3.1.0)
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: 我对 Eggjs 框架有一个新的想法(或许我想来实现他)……
labels: [feature request]
body:
- type: markdown
attributes:
value: |
对于 Egg.js 框架,你有一个新的想法?
不过在提交你的新点子之前,麻烦请检阅一下是否之前的帖子中有类似重复的内容。
- type: textarea
attributes:
label: 请详细告知你的新点子(Nice Ideas):
placeholder: |
1. 您期望能够实现什么功能。
2. 您的理由(如:我一直被什么问题困扰……)。
如果方便的话,请提供截屏或者视频等详细信息。
3. 我能够做一些什么(最好是能提供一些伪代码帮助实现)。
validations:
required: true
================================================
FILE: .github/ISSUE_TEMPLATE/feature-request.yml
================================================
name: 💡 Feature Request For Eggjs
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 Eggjs?
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: 我对 Eggjs 框架技术架构功能层面上有重大新增、改进等。
labels: [RFC proposal]
body:
- type: markdown
attributes:
value: |
对于 Eggjs 框架功能你是否有重大的新增或改进之类的想法?
不过在提交你的新想法或方案之前,麻烦请检阅一下是否之前的帖子中有类似重复的内容。
- type: textarea
attributes:
label: 请详细告知你的新解决思路(Your new RFCs):
placeholder: |
1. 描述你希望解决的问题的现状,附上相关的 issue 地址。
如果方便的话,请提供截屏或者视频等详细信息。
2. 我能够做一些什么(譬如具体相关的的 API,描述思路,最好是能提供一些伪代码帮助实现)。
validations:
required: true
- type: checkboxes
attributes:
label: '跟进类型(Follow-up Types):'
description: 此议案跟进类型情况:
options:
- label: 这是某个任务
- label: 这是一个具体的 PR 的地址(URL)
================================================
FILE: .github/ISSUE_TEMPLATE/rfc.yml
================================================
name: 🚀 RFC Proposals
description: I've got a major improvement (or idea) on the technical architecture of the Eggjs framework.
labels: [RFC proposal]
body:
- type: markdown
attributes:
value: |
Any better new/changable functions for the core technical architecture of the Egg.js 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/actions/clone/action.yml
================================================
name: 'Clone Repositories'
description: 'Clone self and upstream repositories'
inputs:
ecosystem-ci-project:
description: 'The ecosystem ci project to clone'
required: false
default: ''
runs:
using: 'composite'
steps:
- name: Output ecosystem ci project hash
shell: bash
id: ecosystem-ci-project-hash
if: ${{ inputs.ecosystem-ci-project != '' }}
run: |
node -e "const fs = require('fs'); const data = JSON.parse(fs.readFileSync('./ecosystem-ci/repo.json', 'utf8')); const project = data['${{ inputs.ecosystem-ci-project }}']; console.log('ECOSYSTEM_CI_PROJECT_HASH=' + project.hash);" >> $GITHUB_OUTPUT
node -e "const fs = require('fs'); const data = JSON.parse(fs.readFileSync('./ecosystem-ci/repo.json', 'utf8')); const project = data['${{ inputs.ecosystem-ci-project }}']; console.log('ECOSYSTEM_CI_PROJECT_REPOSITORY=' + project.repository.replace('https://github.com/', '').replace('.git', ''));" >> $GITHUB_OUTPUT
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
if: ${{ inputs.ecosystem-ci-project != '' }}
with:
repository: ${{ steps.ecosystem-ci-project-hash.outputs.ECOSYSTEM_CI_PROJECT_REPOSITORY }}
path: ecosystem-ci/${{ inputs.ecosystem-ci-project }}
ref: ${{ steps.ecosystem-ci-project-hash.outputs.ECOSYSTEM_CI_PROJECT_HASH }}
================================================
FILE: .github/copilot-instructions.md
================================================
# Eggjs Framework - GitHub Copilot Development Instructions
**Always reference these instructions first and fallback to search or additional context gathering only when you encounter unexpected information that does not match the information provided here.**
## Overview
Eggjs is a progressive Node.js framework for building enterprise-class server-side applications. Built on top of Koa.js, it provides a plugin system, conventions over configuration, and enterprise-grade features like clustering, logging, and security.
This is a **pnpm monorepo** with multiple packages using pnpm workspaces and catalog mode for centralized dependency management.
## Prerequisites and Environment Setup
- **Node.js >= 20.19.0 required** - This is a hard requirement
- Enable pnpm first: `corepack enable pnpm` (installs pnpm v10.16.0)
- **NEVER CANCEL** any build or test commands - they can take several minutes to complete
## Bootstrap and Build Process
**Always run these commands in sequence after fresh clone:**
```bash
# 1. Enable pnpm (required first)
corepack enable pnpm
# 2. Install all dependencies - takes ~63 seconds. NEVER CANCEL. Set timeout to 120+ seconds.
pnpm install
# 3. Build all packages - takes ~14 seconds. NEVER CANCEL. Set timeout to 60+ seconds.
pnpm run build
# 4. Run linting (optional but recommended) - takes ~2 seconds
pnpm run lint
```
## Monorepo Structure
### Key Packages (all in `packages/` directory)
- **`packages/egg/`** - Main Eggjs framework (TypeScript, uses tsdown for builds)
- **`packages/core/`** - Core plugin framework
- **`packages/utils/`** - Utility functions
- **`packages/mock/`** - Testing utilities
- **`packages/cluster/`** - Cluster management
- **`packages/koa/`** - Koa web framework
- **`packages/supertest/`** - HTTP testing utilities
- **`packages/extend2/`** - Object extension utility
### Supporting Directories
- **`examples/`** - Two example apps: `helloworld-commonjs` and `helloworld-typescript` (currently have runtime issues)
- **`site/`** - Documentation website built with Dumi
## Essential Commands and Timing
### Build Commands
- `pnpm run build` - **Build all packages (~14 seconds). NEVER CANCEL. Set timeout to 60+ seconds.**
- `pnpm run clean` - Clean all dist directories
### Testing Commands
- `pnpm run test` - **Run all tests (~2 minutes). NEVER CANCEL. Set timeout to 180+ seconds.**
- `pnpm run test:cov` - **Run tests with coverage (~2 minutes). NEVER CANCEL. Set timeout to 180+ seconds.**
- `pnpm run ci` - **Run test coverage + build (~2.1 minutes). NEVER CANCEL. Set timeout to 180+ seconds.**
### Linting Commands
- `pnpm run lint` - Run oxlint across all packages (~2 seconds)
### Documentation Commands
- `pnpm run site:dev` - Start documentation dev server at http://localhost:8000
- `cd site && pnpm run build:skip` - **Build documentation site (~24 seconds). NEVER CANCEL. Set timeout to 60+ seconds.**
### Example Applications (Currently Not Working)
- `pnpm run example:commonjs` - Start CommonJS example (has runtime issues)
- `pnpm run example:typescript` - Start TypeScript example (has runtime issues)
## Package-Specific Commands
Run commands for specific packages using `pnpm --filter=<package>`:
```bash
# Examples
pnpm --filter=egg run test
pnpm --filter=@eggjs/core run build
pnpm --filter=site run dev
```
## Development Workflow
### 1. Making Changes
- Always build packages first: `pnpm run build`
- Work primarily in `packages/egg/src/` for core framework features
- Use TypeScript throughout - all packages are TypeScript-based
- Follow the existing directory conventions in `packages/egg/src/`:
- `lib/` - Core classes (Application, Agent, EggApplicationCore)
- `app/extend/` - Framework extensions (context, helper, request, response)
- `config/` - Default configurations and plugins
- `lib/core/` - Core components (httpclient, logger, messenger)
- `lib/loader/` - Application loaders
### 2. Validation Steps
**Always perform these validation steps after making changes:**
```bash
# 1. Build all packages (required)
pnpm run build
# 2. Run linting
pnpm run lint
# 3. Run tests (some failures are expected in fresh environment)
pnpm run test
# 4. Test documentation site
pnpm run site:dev
```
### 3. Testing Strategy
- **All packages use Vitest for testing** - this is the standard test runner
- Test files follow pattern: `test/**/*.test.ts`
- Use `import { describe, it } from 'vitest'` for test functions
- Use Node.js built-in `assert` module for assertions
- Create test fixtures in `packages/egg/test/fixtures/apps/` for scenario testing
## Key Framework Concepts
### Architecture
- **EggApplicationCore** - Base application class with core functionality
- **Application** - Main app class for worker processes
- **Agent** - Agent process class for background tasks
- **Context** - Extended Koa context with Egg-specific features
- **BaseContextClass** - Base for controllers, services, subscriptions
### Loading Convention (Automatic Discovery Order)
1. Plugin system
2. Configurations
3. Application/Request/Response/Context extensions
4. Custom loaders
5. Services
6. Middlewares
7. Controllers
8. Router
### Cluster vs Single Mode
- **Cluster Mode** (default) - Multi-process with master, agent, and worker processes
- **Single Mode** - Single process for development/testing
## Working with TypeScript
- All packages use strict TypeScript mode
- Uses tsdown for unbundled ESM builds (preserves file structure)
- Each package has `tsdown.config.ts` for build configuration
- **All sub-project tsconfig.json files MUST extend from root:** `"extends": "../../tsconfig.json"`
- Root tsconfig.json includes all packages in `references` array
## pnpm Workspace & Catalog Dependencies
- Dependencies defined in `pnpm-workspace.yaml` catalog section
- Reference catalog entries: `"package-name": "catalog:"`
- Internal workspace dependencies: `"package-name": "workspace:*"`
- This ensures consistent versions across all packages
## Common Issues and Troubleshooting
### Test Failures
- Some tests may fail in fresh environments - this is normal
- Focus on fixing only failures related to your changes
- Examples may have runtime issues - don't use them for validation
### Build Issues
- Always run `pnpm run build` after making changes
- TypeScript compilation errors will show clearly
- Build warnings are generally acceptable
### ESM/CommonJS Issues
- Framework supports both ESM and CommonJS
- Main package exports both formats
- If you see "ERR_UNKNOWN_FILE_EXTENSION" errors, ensure packages are built first
## File Locations Reference
### Key Configuration Files
- `pnpm-workspace.yaml` - Workspace and catalog configuration
- `package.json` - Root monorepo scripts and devDependencies
- `packages/egg/package.json` - Main framework package configuration
- `packages/egg/tsdown.config.ts` - Build configuration
- `packages/egg/src/config/plugin.ts` - Built-in plugin configurations
- `packages/egg/src/config/config.default.ts` - Default framework configuration
### Important Source Files
- `packages/egg/src/lib/application.ts` - Main Application class
- `packages/egg/src/lib/agent.ts` - Agent process manager
- `packages/egg/src/lib/egg.ts` - Core EggApplicationCore
- `packages/egg/src/lib/start.ts` - Application startup logic
- `packages/egg/src/lib/loader/` - Convention-based loaders
### Build Outputs
- `packages/*/dist/` - Built JavaScript and TypeScript definitions
- `site/dist/` - Built documentation site
## Validation Scenarios
After making changes, always verify:
1. **Build Success**: `pnpm run build` completes without errors
2. **Linting Passes**: `pnpm run lint` shows no new errors
3. **Documentation Loads**: `pnpm run site:dev` starts successfully and site loads at http://localhost:8000
4. **Tests Run**: `pnpm run test` executes (some failures expected, focus on your changes)
**Remember**: This is a complex enterprise framework. Always build first, validate incrementally, and focus on the core packages (`egg`, `core`, `utils`) for most development work.
## Commit Message Format
**CRITICAL: All commits MUST follow the [Angular Commit Message Format](https://github.com/angular/angular.js/blob/master/DEVELOPERS.md#-git-commit-guidelines) as specified in CONTRIBUTING.md.**
### Required Format Structure
```
<type>(<scope>): <subject>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>
```
### Mandatory Types
- **feat**: A new feature
- **fix**: A bug fix
- **docs**: Documentation-only changes
- **style**: Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc)
- **refactor**: A code change that neither fixes a bug nor adds a feature
- **perf**: A code change that improves performance
- **test**: Adding missing tests
- **chore**: Changes to the build process or auxiliary tools and libraries such as documentation generation
- **deps**: Updates about dependencies
### Scope Guidelines
- **Package-specific changes**: Use package names like `core`, `mock`, `cluster`, `utils`, `tsconfig`, `extend2`
- **Cross-package changes**: Use feature areas like `loader`, `plugin`, `config`, `build`
- **Component-specific**: Use component names like `application`, `agent`, `context`
### Subject Rules
- Use imperative, present tense: "change" not "changed" nor "changes"
- Don't capitalize first letter
- No period (.) at the end
- Be succinct and descriptive
### Examples
```
feat(tsconfig): integrate package into monorepo with vitest
Merge @eggjs/tsconfig repository into packages/tsconfig/ and refactor
to use vitest testing framework instead of Node.js test runner.
- Update all consuming packages to use workspace:* dependencies
- Add vitest configuration and convert test assertions
- Remove external catalog dependency in favor of workspace package
Closes #123
```
```
fix(core): resolve loader initialization race condition
The loader was attempting to initialize plugins before configurations
were fully loaded, causing intermittent startup failures.
Fixes #456
```
```
chore: update dependencies to latest versions
Update catalog dependencies and rebuild packages to ensure
compatibility with latest versions.
```
**NEVER commit without following this format - it breaks the project's automated changelog and release process.**
================================================
FILE: .github/workflows/ci.yml
================================================
name: CI
on:
push:
paths-ignore:
- '**/*.md'
branches: [next]
pull_request:
types: [opened, synchronize]
paths-ignore:
- '**/*.md'
branches: [next]
merge_group:
permissions:
id-token: write
actions: write
jobs:
typecheck:
runs-on: ubuntu-latest
concurrency:
group: typecheck-${{ github.workflow }}-#${{ github.event.pull_request.number || github.head_ref || github.ref }}
cancel-in-progress: true
steps:
- name: Checkout repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
- name: Install pnpm
uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # v4
- name: Set up Node.js
uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6
with:
node-version: '24'
cache: 'pnpm'
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Run lint
run: pnpm run lint
- name: Check dedupe
run: pnpm dedupe --check
- name: Run typecheck
run: pnpm run typecheck
- name: Run format check
run: pnpm run fmtcheck
- name: Run build
run: pnpm run build
- name: Run site build
run: pnpm run site:build
test:
strategy:
fail-fast: false
matrix:
os: ['ubuntu-latest', 'macos-latest', 'windows-latest']
node: ['20', '22', '24']
# 1-based index
shardIndex: [1, 2, 3]
shardTotal: [3]
name: Test (${{ matrix.os }}, ${{ matrix.node }}, ${{ matrix.shardIndex }}/${{ matrix.shardTotal }})
runs-on: ${{ matrix.os }}
concurrency:
group: test-${{ github.workflow }}-#${{ github.event.pull_request.number || github.head_ref || github.ref }}-(${{ matrix.os }}, ${{ matrix.node }}, ${{ matrix.shardIndex }}/${{ matrix.shardTotal }})
cancel-in-progress: true
steps:
- name: Checkout repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
- name: Start Redis (MacOS or Linux)
if: ${{ matrix.os == 'macos-latest' || matrix.os == 'ubuntu-latest' }}
uses: shogo82148/actions-setup-redis@cff708d63a30aebc0bfaa7276fb709d173f36cb6 # v1
with:
redis-version: '7'
auto-start: 'true'
- name: Start Redis (Windows via Memurai)
if: ${{ matrix.os == 'windows-latest' }}
shell: pwsh
run: |
# retry up to 3 times to handle Chocolatey feed flakiness
for ($i = 1; $i -le 3; $i++) {
choco install -y memurai-developer.install
if ($LASTEXITCODE -eq 0) { break }
if ($i -lt 3) {
Write-Host "choco install failed (attempt $i/3), retrying in 15s..."
Start-Sleep -Seconds 15
} else {
Write-Error "choco install failed after 3 attempts"
exit 1
}
}
# ensure service exists and running (avoid non-zero return code of net start)
$svc = Get-Service -Name Memurai -ErrorAction SilentlyContinue
if (-not $svc) {
Write-Error "Memurai service not found after install"
exit 1
}
if ($svc.Status -ne 'Running') {
Start-Service -Name Memurai -ErrorAction Stop
# wait for 20s until Running
$svc.WaitForStatus('Running', '00:00:20')
} else {
Write-Host "Memurai already running."
}
# wait for 6379 port ready (max ~60s)
$deadline = (Get-Date).AddSeconds(60)
$ready = $false
while ((Get-Date) -lt $deadline -and -not $ready) {
try {
$client = New-Object System.Net.Sockets.TcpClient
$async = $client.BeginConnect('127.0.0.1', 6379, $null, $null)
$ok = $async.AsyncWaitHandle.WaitOne(2000)
if ($ok -and $client.Connected) { $ready = $true }
$client.Close()
} catch { }
}
if (-not $ready) {
Write-Error "Memurai (Redis) not ready on 127.0.0.1:6379"
exit 1
}
Write-Host "Memurai is ready on 127.0.0.1:6379"
# install and start MySQL (will automatically start mysqld)
- name: Start MySQL (macOS or Linux)
if: ${{ matrix.os == 'macos-latest' || matrix.os == 'ubuntu-latest' }}
uses: shogo82148/actions-setup-mysql@27e74fac04c136a9f4c2dc2ed457df57331b3e0c # v1
with:
mysql-version: '8'
auto-start: 'true'
- name: Init DB (macOS or Linux)
if: ${{ matrix.os == 'macos-latest' || matrix.os == 'ubuntu-latest' }}
run: |
mysql -uroot -e "CREATE DATABASE IF NOT EXISTS test;"
- name: Start MySQL (Windows)
if: ${{ matrix.os == 'windows-latest' }}
shell: pwsh
run: |
choco install -y mysql
refreshenv
# MySQL default root has no password, set a password and create database/user
# & mysqladmin -u root password root
& mysql -uroot -e "CREATE DATABASE IF NOT EXISTS test;"
- name: Install pnpm
uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # v4
- name: Set up Node.js
uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6
with:
node-version: ${{ matrix.node }}
cache: 'pnpm'
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Run tests
run: pnpm run ci --shard=${{ matrix.shardIndex }}/${{ matrix.shardTotal }}
- name: Run example tests
if: ${{ matrix.node != '20' && matrix.os != 'windows-latest' }}
run: |
pnpm run example:test:all
- name: Code Coverage
# skip on windows, it will hangup on codecov
if: ${{ matrix.os != 'windows-latest' }}
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5
with:
use_oidc: true
test-egg-bin:
strategy:
fail-fast: false
matrix:
os: ['ubuntu-latest', 'windows-latest']
node: ['24']
# 0-based index
shardIndex: [0, 1, 2]
shardTotal: [3]
name: Test bin (${{ matrix.os }}, ${{ matrix.node }}, ${{ matrix.shardIndex }}/${{ matrix.shardTotal }})
runs-on: ${{ matrix.os }}
concurrency:
group: test-egg-bin-${{ github.workflow }}-#${{ github.event.pull_request.number || github.head_ref || github.ref }}-(${{ matrix.os }}, ${{ matrix.node }}, ${{ matrix.shardIndex }}/${{ matrix.shardTotal }})
cancel-in-progress: true
steps:
- name: Checkout repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
- name: Install pnpm
uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # v4
- name: Set up Node.js
uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6
with:
node-version: ${{ matrix.node }}
cache: 'pnpm'
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Run tests
run: |
pnpm build --workspace ./tools/egg-bin
pnpm run --filter ./tools/egg-bin ci
env:
# https://github.com/jamiebuilds/ci-parallel-vars
CI_NODE_INDEX: ${{ matrix.shardIndex }}
CI_NODE_TOTAL: ${{ matrix.shardTotal }}
- name: Code Coverage
# skip on windows, it will hangup on codecov https://github.com/codecov/codecov-action/issues/1787
if: ${{ matrix.os != 'windows-latest' }}
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5
with:
use_oidc: true
test-egg-scripts:
strategy:
fail-fast: false
matrix:
os: ['ubuntu-latest']
node: ['22', '24']
name: Test scripts (${{ matrix.os }}, ${{ matrix.node }})
runs-on: ${{ matrix.os }}
concurrency:
group: test-egg-scripts-${{ github.workflow }}-#${{ github.event.pull_request.number || github.head_ref || github.ref }}-(${{ matrix.os }}, ${{ matrix.node }})
cancel-in-progress: true
steps:
- name: Checkout repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
- name: Install pnpm
uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # v4
- name: Set up Node.js
uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6
with:
node-version: ${{ matrix.node }}
cache: 'pnpm'
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Run tests
run: |
pnpm build
pnpm run --filter=./tools/scripts ci
- name: Code Coverage
if: ${{ matrix.os != 'windows-latest' }}
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5
with:
use_oidc: true
done:
runs-on: ubuntu-latest
needs:
- test
- test-egg-bin
- test-egg-scripts
- typecheck
steps:
- run: exit 1
if: ${{ always() && (contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled')) }}
================================================
FILE: .github/workflows/cleanup-cache.yml
================================================
name: Cleanup github runner caches on closed pull requests
on:
pull_request:
types:
- closed
jobs:
cleanup:
runs-on: ubuntu-latest
permissions:
actions: write
steps:
- name: Cleanup
run: |
echo "Fetching list of cache keys"
cacheKeysForPR=$(gh cache list --ref $BRANCH --limit 100 --json id --jq '.[].id')
echo "Cache keys: $cacheKeysForPR"
## Setting this to not fail the workflow while deleting cache keys.
set +e
echo "Deleting caches..."
for cacheKey in $cacheKeysForPR
do
gh cache delete $cacheKey
done
echo "Done"
env:
GH_TOKEN: ${{ github.token }}
GH_REPO: ${{ github.repository }}
BRANCH: refs/pull/${{ github.event.pull_request.number }}/merge
================================================
FILE: .github/workflows/e2e-test.yml
================================================
name: E2E Test
on:
push:
branches:
- next
paths-ignore:
- '**/*.md'
pull_request:
branches:
- next
paths-ignore:
- '**/*.md'
concurrency:
group: ${{ github.workflow }}-#${{ github.event.pull_request.number || github.head_ref || github.ref }}
cancel-in-progress: true
defaults:
run:
shell: bash
jobs:
e2e-test:
name: ${{ matrix.project.name }} E2E test
permissions:
contents: read
packages: read
runs-on: ubuntu-latest
services:
mysql:
image: mysql:5.7
env:
MYSQL_ALLOW_EMPTY_PASSWORD: true
MYSQL_DATABASE: cnpmcore
ports:
- 3306:3306
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=5
redis:
image: redis
ports:
- 6379:6379
strategy:
fail-fast: false
matrix:
project:
- name: cnpmcore
node-version: 24
command: |
npm install
npm run lint -- --quiet
npm run typecheck
npm run build
npm run prepublishOnly
# Clean build artifacts to avoid double-loading (src + dist)
npm run clean
# Run the full test suite
echo "Preparing databases..."
mysql -h 127.0.0.1 -u root -e "CREATE DATABASE IF NOT EXISTS cnpmcore_unittest"
CNPMCORE_DATABASE_NAME=cnpmcore_unittest bash ./prepare-database-mysql.sh
CNPMCORE_DATABASE_NAME=cnpmcore bash ./prepare-database-mysql.sh
npm run test:local
# Deployment test: start the app and verify it boots correctly
npm run clean
npm run tsc:prod
# Overlay compiled .js onto source locations so both egg loader
# and tegg module scanner find .js files at the expected paths
cp -r dist/* .
rm -rf dist
echo "Preparing database for deployment test..."
mysql -h 127.0.0.1 -u root -e "CREATE DATABASE IF NOT EXISTS cnpmcore_unittest"
CNPMCORE_DATABASE_NAME=cnpmcore_unittest bash ./prepare-database-mysql.sh
CNPMCORE_DATABASE_NAME=cnpmcore bash ./prepare-database-mysql.sh
EGG_TS_ENABLE=false npx eggctl start --port=7001 --env=unittest --daemon
HEALTH_URL="http://127.0.0.1:7001/"
START_TIME=$(date +%s)
TIMEOUT=120
STATUS=""
READY=0
echo "Waiting for application to become healthy at ${HEALTH_URL} (timeout: ${TIMEOUT}s)..."
while true; do
# Capture response body and status code
STATUS=$(curl -s -o /tmp/cnpmcore-health-response -w "%{http_code}" "${HEALTH_URL}" || echo "000")
echo "Health check attempt at $(date): status=${STATUS}"
if [ "${STATUS}" = "200" ]; then
echo "Health check succeeded with status 200"
READY=1
break
fi
NOW=$(date +%s)
ELAPSED=$((NOW - START_TIME))
if [ "${ELAPSED}" -ge "${TIMEOUT}" ]; then
echo "Health check timed out after ${ELAPSED}s with last status ${STATUS}"
break
fi
sleep 5
done
npx eggctl stop
if [ "${READY}" != "1" ]; then
echo "Health check failed; last HTTP status: ${STATUS}"
echo "Last health endpoint response body (if any):"
cat /tmp/cnpmcore-health-response 2>/dev/null || echo "<no response body captured>"
echo "Recent error logs (if any):"
cat logs/cnpmcore/common-error.log 2>/dev/null || true
exit 1
fi
- name: examples
node-version: 24
command: |
# examples/helloworld https://github.com/eggjs/examples/blob/master/helloworld/package.json
cd helloworld
npm install
npm run lint
npm run test
npm run prepublishOnly
cd ..
# examples/hello-tegg https://github.com/eggjs/examples/blob/master/hello-tegg/package.json
cd hello-tegg
npm install
npm run lint
npm run test
npm run prepublishOnly
steps:
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
- uses: ./.github/actions/clone
with:
ecosystem-ci-project: ${{ matrix.project.name }}
- name: Install pnpm
uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # v4
- name: Set up Node.js
uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6
with:
node-version: ${{ matrix.project.node-version }}
cache: 'pnpm'
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Build all packages
run: pnpm build
- name: Pack packages into tgz
run: |
pnpm -r pack
- name: Override dependencies from tgz in ${{ matrix.project.name }}
working-directory: ecosystem-ci/${{ matrix.project.name }}
run: |
node ../patch-project.ts ${{ matrix.project.name }}
- name: Run e2e test commands in ${{ matrix.project.name }}
working-directory: ecosystem-ci/${{ matrix.project.name }}
run: ${{ matrix.project.command }}
================================================
FILE: .github/workflows/release.yml
================================================
name: Manual Release
# Retry-safe: if a previous release failed after version bump, re-running
# with the same parameters will detect the existing version bump and skip it.
# The publish script handles already-published packages gracefully.
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.event.inputs.branch }}
cancel-in-progress: false
permissions:
contents: write
packages: write
id-token: write
steps:
- name: Checkout
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
with:
ref: ${{ github.event.inputs.branch }}
fetch-depth: 0
token: ${{ secrets.GIT_TOKEN }}
- name: Setup pnpm
uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # v4
- name: Setup Node.js
uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6
with:
node-version: '24'
cache: 'pnpm'
registry-url: 'https://registry.npmjs.org'
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Configure Git
run: |
git config --local user.email "action@github.com"
git config --local user.name "GitHub Action"
# Detect if this is a retry of a previously failed release.
# Skips version bump if the commit/tag already exist on HEAD.
- name: Detect existing release
id: detect
if: ${{ github.event.inputs.dry_run != 'true' }}
run: |
# Case 1: HEAD already has a version tag (version bump + push fully succeeded)
EXISTING_TAG=$(git describe --tags --exact-match HEAD 2>/dev/null || true)
if [[ -n "$EXISTING_TAG" && "$EXISTING_TAG" == v* ]]; then
echo "🔄 Retry detected: found tag $EXISTING_TAG on HEAD"
echo "skip_version_bump=true" >> $GITHUB_OUTPUT
echo "need_push=false" >> $GITHUB_OUTPUT
echo "NEW_TAG=$EXISTING_TAG" >> $GITHUB_ENV
exit 0
fi
# Case 2: HEAD is a version bump commit but tag may be missing (partial push)
HEAD_MSG=$(git log -1 --format=%s HEAD)
if [[ "$HEAD_MSG" == chore\(release\):*version\ bump ]]; then
EGG_VERSION=$(node -e "process.stdout.write(JSON.parse(require('fs').readFileSync('./packages/egg/package.json','utf8')).version)")
EXPECTED_TAG="v${EGG_VERSION}"
echo "🔄 Retry detected: version bump commit found (tag: $EXPECTED_TAG)"
# Create the tag locally if it doesn't exist
if ! git rev-parse "$EXPECTED_TAG" >/dev/null 2>&1; then
echo " Creating missing tag: $EXPECTED_TAG"
git tag "$EXPECTED_TAG"
fi
echo "skip_version_bump=true" >> $GITHUB_OUTPUT
echo "need_push=true" >> $GITHUB_OUTPUT
echo "NEW_TAG=$EXPECTED_TAG" >> $GITHUB_ENV
exit 0
fi
# Case 3: Fresh release
echo "Fresh release: will perform version bump"
echo "skip_version_bump=false" >> $GITHUB_OUTPUT
echo "need_push=true" >> $GITHUB_OUTPUT
- 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 }}" == pre* ]]; 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' && steps.detect.outputs.skip_version_bump != 'true' }}
run: |
echo "🚀 Running version bump..."
if [[ "${{ github.event.inputs.version_type }}" == pre* ]]; 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
NEW_TAG=$(git describe --tags --abbrev=0)
echo "NEW_TAG=$NEW_TAG" >> $GITHUB_ENV
- name: Push version commit and tags
if: ${{ github.event.inputs.dry_run != 'true' && steps.detect.outputs.need_push != 'false' }}
run: |
echo "📤 Pushing to origin/${{ github.event.inputs.branch }} with tags..."
git push origin ${{ github.event.inputs.branch }} --tags
- name: Run build
run: pnpm build
- name: Publish packages (dry run)
if: ${{ github.event.inputs.dry_run == 'true' }}
run: |
if [[ "${{ github.event.inputs.version_type }}" == pre* ]]; then
node scripts/publish.js --tag=${{ github.event.inputs.prerelease_tag }} --dry-run
else
node scripts/publish.js --tag=latest --dry-run
fi
- name: Publish packages
if: ${{ github.event.inputs.dry_run != 'true' }}
run: |
if [[ "${{ github.event.inputs.version_type }}" == pre* ]]; then
node scripts/publish.js --tag=${{ github.event.inputs.prerelease_tag }} --provenance
else
node scripts/publish.js --tag=latest --provenance
fi
- name: Create GitHub Release (draft)
if: ${{ !cancelled() && github.event.inputs.dry_run != 'true' && env.NEW_TAG != '' }}
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 }}';
// Idempotent: check if release already exists (safe for retry)
try {
const existing = await github.rest.repos.getReleaseByTag({
owner: context.repo.owner,
repo: context.repo.repo,
tag: tag,
});
core.info(`Release already exists: ${existing.data.html_url}`);
core.exportVariable('DRAFT_RELEASE_URL', existing.data.html_url);
return;
} catch (e) {
if (e.status !== 404) throw e;
// 404 = no release exists, proceed to create
}
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`;
const fs = require('fs');
const packagesDirs = ['./packages', './tools', './plugins', './tegg/core', './tegg/plugin', './tegg/standalone'];
for (const packagesDir of packagesDirs) {
if (!fs.existsSync(packagesDir)) continue;
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}`);
core.exportVariable('DRAFT_RELEASE_URL', release.data.html_url);
- name: Sync to cnpm
if: ${{ !cancelled() && github.event.inputs.dry_run != 'true' }}
run: node scripts/sync-cnpm.js
- name: Summary
if: ${{ !cancelled() }}
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
if [ "${{ steps.detect.outputs.skip_version_bump }}" == "true" ]; then
echo "### 🔄 Retry Release Completed" >> $GITHUB_STEP_SUMMARY
else
echo "### ✅ Release Completed" >> $GITHUB_STEP_SUMMARY
fi
echo "- Version bump: **${{ github.event.inputs.version_type }}**" >> $GITHUB_STEP_SUMMARY
echo "- Branch: **${{ github.event.inputs.branch }}**" >> $GITHUB_STEP_SUMMARY
echo "- 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
if [ -n "$DRAFT_RELEASE_URL" ]; then
echo "- GitHub Release: [View Draft]($DRAFT_RELEASE_URL)" >> $GITHUB_STEP_SUMMARY
fi
fi
================================================
FILE: .gitignore
================================================
node_modules
coverage
*.log
npm-debug.log
.logs
logs
*.swp
run
*-run
.idea
.DS_Store
.tmp
.egg
*-lock.json
*-lock.yaml
yarn.lock
.editorconfig
*clinic-flame*
*clinic-doctor*
.nyc_output/
test/fixtures/apps/app-ts/**/*.js
test/fixtures/apps/app-ts-esm/**/*.js
test/fixtures/apps/app-ts-type-check/**/*.js
test/fixtures/apps/app-ts-type-check/**/*.d.ts
test/fixtures/apps/app-ts/**/*.d.ts
test/fixtures/apps/app-ts-esm/**/*.d.ts
# site
site/dist
# Claude Code local settings (machine-personal, never commit)
.claude/settings.local.json
!site/public
.umi
.umi-production
.vercel
package-lock.json
.tshy*
dist
site/.dumi/
!pnpm-lock.yaml
!packages/egg/test/fixtures/apps/loader-plugin/node_modules
!packages/egg/test/fixtures/apps/app-ts/node_modules
!packages/egg/test/fixtures/apps/app-ts/node_modules/**/*.js
!packages/core/test/fixtures/egg-esm/node_modules
!packages/core/test/fixtures/plugin-duplicate/node_modules
!packages/core/test/fixtures/plugin/node_modules
!packages/core/test/fixtures/plugin-pnpm-scope/node_modules
!packages/core/test/fixtures/plugin-pkg-exports/node_modules
!packages/core/test/fixtures/service-override/node_modules
!packages/core/test/fixtures/scope-env/node_modules
!packages/core/test/fixtures/scope/node_modules
!packages/core/test/fixtures/plugin-optional-dependencies/node_modules
!packages/core/test/fixtures/plugin-path-package/node_modules
!packages/core/test/fixtures/env-disable/node_modules
!packages/core/test/fixtures/middleware-override/node_modules
!packages/core/test/fixtures/helper/node_modules
!packages/core/test/fixtures/extend/node_modules
!packages/core/test/fixtures/application/node_modules
!packages/core/test/fixtures/agent/node_modules
!packages/core/test/fixtures/plugin-pnpm/node_modules
# egg-bin
tools/egg-bin/test/fixtures/**/node_modules/
!tools/egg-bin/test/fixtures/demo-app/node_modules/
!tools/egg-bin/test/fixtures/demo-app-debug/node_modules/
!tools/egg-bin/test/fixtures/demo-app-commonjs/node_modules/
!tools/egg-bin/test/fixtures/demo-app-detect-port/node_modules/
!tools/egg-bin/test/fixtures/demo-app-esm/node_modules/
!tools/egg-bin/test/fixtures/demo-app-esm-dev/node_modules/
!tools/egg-bin/test/fixtures/ts/node_modules/aliyun-egg/node_modules/
!tools/egg-bin/test/fixtures/example/node_modules/
!tools/egg-bin/test/fixtures/example-ts-cluster/node_modules/
!tools/egg-bin/test/fixtures/egg-revert/node_modules/
!tools/egg-bin/test/fixtures/egg-revert-dev/node_modules/
!tools/egg-bin/test/fixtures/egg-revert-cov/node_modules/
!tools/egg-bin/test/fixtures/egg-require/node_modules/
!tools/egg-bin/test/fixtures/example-ts-simple/node_modules/
!tools/egg-bin/test/fixtures/test-demo-app/node_modules/
!tools/egg-bin/test/fixtures/test-demo-app-esm/node_modules/
!tools/egg-bin/test/fixtures/test-postinstall/node_modules/
!tools/egg-bin/test/fixtures/example-declarations/node_modules/
!tools/egg-bin/test/fixtures/custom-framework-app/node_modules/
!tools/egg-bin/test/fixtures/custom-framework-app-my-egg-bin/node_modules/
tegg/plugin/oneapi/test/fixtures/modules/*/oneapi
tegg/plugin/dal/test/fixtures/modules/*/dal/
tegg/core/dal-runtime/test/fixtures/modules/*/dal
tegg/core/dal-runtime/test/fixtures/modules/*/src/dal/
!tegg/core/dal-runtime/test/fixtures/modules/dal/dal
!tegg/core/dal-runtime/test/fixtures/modules/generate_codes_not_overwrite_dao/dal/extension/FooExtension.ts
!tegg/core/dal-runtime/test/fixtures/modules/generate_codes_not_overwrite_dao/dal/dao/FooDAO.ts
tegg/plugin/tegg/test/fixtures/apps/**/*.js
!tegg/core/common-util/test/fixtures/**/node_modules
!tegg/core/common-util/test/fixtures/**/node_modules/**/*.js
!tegg/plugin/*/test/fixtures/**/*.js
!tegg/plugin/*/typings/*.d.ts
!tegg/plugin/*/test/fixtures/apps/*/config/*.js
!tegg/plugin/*/test/fixtures/apps/**/typings/*.d.ts
!tegg/core/eventbus-decorator/src/type.d.ts
!tegg/plugin/orm/test/fixtures/prepare.js
!tegg/benchmark/**/*.js
!tegg/standalone/standalone/test/fixtures/**/node_modules
!tegg/standalone/standalone/test/fixtures/**/node_modules/**/*.js
!tegg/plugin/tegg/test/fixtures/**/node_modules
!tegg/plugin/config/test/fixtures/**/node_modules
*.tsbuildinfo
*.tgz
ecosystem-ci/cnpmcore
ecosystem-ci/examples
================================================
FILE: .husky/pre-commit
================================================
npx lint-staged
================================================
FILE: .node-version
================================================
24.13.0
================================================
FILE: .oxfmtrc.json
================================================
{
"$schema": "./node_modules/oxfmt/configuration_schema.json",
"printWidth": 120,
"singleQuote": true,
"ignorePatterns": [
"tegg/core/loader/test/fixtures/modules/loader-failed/AppRepo.ts",
"tegg/core/aop-runtime/test/aop-runtime.test.ts",
"packages/core/test/fixtures/load_dirs/syntax_error/*",
"packages/core/test/fixtures/syntaxerror/*",
"packages/core/test/fixtures/load_context_syntax_error/**/*",
"CHANGELOG.md"
],
"experimentalSortImports": {
"groups": [
["type-import"],
["type-builtin", "value-builtin"],
["type-external", "value-external", "type-internal", "value-internal"],
["type-parent", "type-sibling", "type-index", "value-parent", "value-sibling", "value-index"],
["ts-equals-import"],
["unknown"]
],
"newlinesBetween": true,
"order": "asc"
},
"yaml": {
"singleQuote": true
}
}
================================================
FILE: .oxlintrc.json
================================================
{
"$schema": "./node_modules/oxlint/configuration_schema.json",
"env": {
"node": true
},
"ignorePatterns": [
"**/test/fixtures/**",
"tegg/benchmark/http",
"tools/create-egg/src/templates/egg3-tegg",
"tools/create-egg/src/templates/egg3-simple-ts/test"
],
"rules": {
"no-unused-vars": "error",
"preserve-caught-error": "error"
}
}
================================================
FILE: .vscode/settings.json
================================================
{
"vitest.disableWorkspaceWarning": true
}
================================================
FILE: AGENTS.md
================================================
# Repository Guidelines
## Project Structure & Module Organization
Egg is maintained as a pnpm monorepo. Core runtime code lives in `packages/egg`, while supporting modules such as `packages/core`, `packages/cluster`, and `packages/utils` provide shared internals. Optional integrations reside under `plugins/`. Example applications in `examples/` demonstrate CommonJS and TypeScript setups, and the marketing/documentation site is in `site/`. Unit tests sit beside their packages under `test/` directories, often with fixtures in `test/fixtures/`.
## Build, Test, and Development Commands
Run `pnpm install` to hydrate the workspace (Node.js ≥ 20.19.0 is required). Build all packages with `pnpm run build`. Execute `pnpm run test` for the Vitest suite or `pnpm run test:cov` to generate coverage. Lint with `pnpm run lint`; add `pnpm run typecheck` before large refactors to catch TypeScript issues. Use filters for package-specific workflows, e.g. `pnpm --filter=egg run test` or `pnpm --filter=site run dev`.
## Coding Style & Naming Conventions
The repository is ESM-first and TypeScript-heavy; prefer `.ts` sources and exports over CommonJS. `oxfmt` and `oxlint --type-aware` enforce formatting—two-space indentation, trailing commas, and semicolons are the defaults. Name files in lowercase with hyphens (e.g. `loader-context.ts`), classes in PascalCase, and functions/variables in camelCase. Re-export types thoughtfully to keep the public API stable.
## Testing Guidelines
Vitest is configured via `vitest.config.ts` to discover `**/test/**/*.test.ts` within each package. Mirror that pattern when adding suites, and place reusable data under `test/fixtures/`. Run `pnpm run test` locally before submitting; include integration coverage when touching cluster or agent behavior. For features affecting HTTP or process orchestration, add regression cases that exercise both the CommonJS and TypeScript example apps.
## Commit & Pull Request Guidelines
Follow the Angular-style commit format (`type(scope): subject`), mirroring existing history such as `fix(loader): ensure middleware order`. Squash granular work before opening a PR, and describe the change, motivation, test evidence, and any migration notes. Link related issues in the footer and mark breaking changes explicitly. PRs should pass lint, typecheck, and tests; attach screenshots or logs when updating developer tooling or the docs site.
## Security & Configuration Tips
Review `SECURITY.md` before disclosing vulnerabilities; never post exploit details publicly. Keep local Node.js and pnpm versions aligned with the repo’s `packageManager` field. Secrets and credentials belong in application-level configuration, not this repository. When working on the documentation site, scrub generated content before committing to avoid leaking local URLs.
================================================
FILE: CHANGELOG.md
================================================
# Changelog
> [!IMPORTANT]
> Moving forwards we are using the GitHub releases page at <https://github.com/eggjs/egg/releases> in combination with [release.yml](https://github.com/eggjs/egg/actions/workflows/release.yml) for publishing releases and their changelogs.
---
## 4.1.0+
### ⚠ BREAKING CHANGES
* drop Node.js < 22.18.0 support
* only support egg@4
part of https://github.com/eggjs/egg/issues/5434
---
## [4.1.0](https://github.com/eggjs/egg/compare/v4.0.10...v4.1.0) (2025-08-31)
### Features
* migrate to pnpm monorepo structure ([#5435](https://github.com/eggjs/egg/issues/5435)) ([7c44571](https://github.com/eggjs/egg/commit/7c445711c4db7c4d8e4238bef5b89f45b3d8d8bc))
## [4.0.10](https://github.com/eggjs/egg/compare/v4.0.9...v4.0.10) (2025-03-10)
### Bug Fixes
* add missing tsd on application ([#5406](https://github.com/eggjs/egg/issues/5406)) ([8fa4aec](https://github.com/eggjs/egg/commit/8fa4aec1303b58ac76b41c9861db59b6dbdf912e))
## [4.0.9](https://github.com/eggjs/egg/compare/v4.0.8...v4.0.9) (2025-02-04)
### Bug Fixes
* logger should not Partial ([#5393](https://github.com/eggjs/egg/issues/5393)) ([8e433d9](https://github.com/eggjs/egg/commit/8e433d9967e73837eedaffc163d42f4a5e167b47))
## [4.0.8](https://github.com/eggjs/egg/compare/v4.0.7...v4.0.8) (2025-02-04)
### Bug Fixes
* add allowH2 define and more ([#5392](https://github.com/eggjs/egg/issues/5392)) ([413a6f9](https://github.com/eggjs/egg/commit/413a6f905161bc45ae54baccc83ae82170fecd09))
## [4.0.7](https://github.com/eggjs/egg/compare/v4.0.6...v4.0.7) (2025-02-04)
### Bug Fixes
* use @eggjs/multipart and @eggjs/view ([#5391](https://github.com/eggjs/egg/issues/5391)) ([c464cda](https://github.com/eggjs/egg/commit/c464cda53f1000f65546c9bd53b323fe667bd69f))
## [4.0.6](https://github.com/eggjs/egg/compare/v4.0.5...v4.0.6) (2025-02-03)
### Bug Fixes
* use @eggjs/logrotator ([#5390](https://github.com/eggjs/egg/issues/5390)) ([351a022](https://github.com/eggjs/egg/commit/351a0220f15874094f7f99a6cef7bbd50e2b3333))
## [4.0.5](https://github.com/eggjs/egg/compare/v4.0.4...v4.0.5) (2025-02-03)
### Bug Fixes
* use @eggjs/onerror ([#5389](https://github.com/eggjs/egg/issues/5389)) ([762e301](https://github.com/eggjs/egg/commit/762e3015120883212c1266054469ec509e7c369f))
## [4.0.4](https://github.com/eggjs/egg/compare/v4.0.3...v4.0.4) (2025-02-02)
### Bug Fixes
* export createAnonymousContext define ([#5388](https://github.com/eggjs/egg/issues/5388)) ([5d15623](https://github.com/eggjs/egg/commit/5d15623e5e7b412065adff0e02f2d2677289c176))
## [4.0.3](https://github.com/eggjs/egg/compare/v4.0.2...v4.0.3) (2025-01-21)
### Bug Fixes
* mv single to @eggjs/core ([#5387](https://github.com/eggjs/egg/issues/5387)) ([b223c7a](https://github.com/eggjs/egg/commit/b223c7a1318f56a1eba8bdfd2903f9199a1bbd97))
## [4.0.2](https://github.com/eggjs/egg/compare/v4.0.1...v4.0.2) (2025-01-19)
### Bug Fixes
* use @eggjs/security and @eggjs/session ([#5384](https://github.com/eggjs/egg/issues/5384)) ([d11ecd3](https://github.com/eggjs/egg/commit/d11ecd3fde8453ef88f8cf79ca98abafc2da151d))
## [4.0.1](https://github.com/eggjs/egg/compare/v4.0.0...v4.0.1) (2025-01-14)
### Bug Fixes
* add createHttpClient back to app instance ([#5383](https://github.com/eggjs/egg/issues/5383)) ([e5a697e](https://github.com/eggjs/egg/commit/e5a697e14003d6a12a35a4df4d4ebd6f746ef9ef)), closes [/github.com/eggjs/egg/blob/a612e806019402aa217a1562b5ad847a308e843b/lib/egg.js#L293](https://github.com/eggjs//github.com/eggjs/egg/blob/a612e806019402aa217a1562b5ad847a308e843b/lib/egg.js/issues/L293) [/github.com/eggjs/security/blob/e3408408adec5f8d009d37f75126ed082481d0ac/lib/extend/safe_curl.js#L21](https://github.com/eggjs//github.com/eggjs/security/blob/e3408408adec5f8d009d37f75126ed082481d0ac/lib/extend/safe_curl.js/issues/L21)
## [4.0.0](https://github.com/eggjs/egg/compare/v3.24.1...v4.0.0) (2025-01-11)
### ⚠ BREAKING CHANGES
* Drop Node.js < 18.19.0 support
part of https://github.com/eggjs/egg/issues/3644
Breaking changes:
- Drop Node.js < 18.19.0 support
- Drop generator function support
use @eggjs/core@4 https://github.com/eggjs/egg-core/pull/265
### Features
* **doc:** cookies 增加 partitioned、removeUnpartitioned 和 priority 选项文档 ([#5376](https://github.com/eggjs/egg/issues/5376)) ([60eb8a1](https://github.com/eggjs/egg/commit/60eb8a1264f74b9690748f339161af7c5106b72d))
* refactor with typescript to support cjs ane esm both ([#5328](https://github.com/eggjs/egg/issues/5328)) ([a09b1cf](https://github.com/eggjs/egg/commit/a09b1cfcf47cae8b577a8136c927b42d989c58a5))
## [3.24.1](https://github.com/eggjs/egg/compare/v3.24.0...v3.24.1) (2024-06-07)
### Bug Fixes
* serverTimeout default to 0 (no timeout) ([#5325](https://github.com/eggjs/egg/issues/5325)) ([44ab507](https://github.com/eggjs/egg/commit/44ab507b6299c849a2fe31bee54f3a1909aa9d53))
## [3.24.0](https://github.com/eggjs/egg/compare/v3.23.0...v3.24.0) (2024-06-07)
### Features
* add bodyParser.onProtoPoisoning type define ([#5324](https://github.com/eggjs/egg/issues/5324)) ([b3582e0](https://github.com/eggjs/egg/commit/b3582e02d0f5d85edbc03f3f20c4cdcc65619dc1))
## [3.23.0](https://github.com/eggjs/egg/compare/v3.22.0...v3.23.0) (2024-05-08)
### Features
* use utility@2 ([#5312](https://github.com/eggjs/egg/issues/5312)) ([9bf5f22](https://github.com/eggjs/egg/commit/9bf5f22bfae44a1f44651efba7b3e167f9040714))
## [3.22.0](https://github.com/eggjs/egg/compare/v3.21.0...v3.22.0) (2024-04-12)
### Features
* app.httpClient alias to app.httpclient ([#5304](https://github.com/eggjs/egg/issues/5304)) ([a6ebe0f](https://github.com/eggjs/egg/commit/a6ebe0f49a9e1a8506c26a0bb4e89a32528aa727))
## [3.21.0](https://github.com/eggjs/egg/compare/v3.20.0...v3.21.0) (2024-03-31)
### Features
* tiny improvements for "convertValue" ([#5302](https://github.com/eggjs/egg/issues/5302)) ([794d7f3](https://github.com/eggjs/egg/commit/794d7f3e89c2a283e38d2082b407b79e480f0b50))
## [3.20.0](https://github.com/eggjs/egg/compare/v3.19.0...v3.20.0) (2024-02-22)
### Features
* urllib-next alias to npm:urllib ([#5299](https://github.com/eggjs/egg/issues/5299)) ([61cd51d](https://github.com/eggjs/egg/commit/61cd51d02a86cb6ca8d510fb3ea3a1ed73f7beec))
## [3.19.0](https://github.com/eggjs/egg/compare/v3.18.0...v3.19.0) (2024-02-08)
### Features
* 优化中文文档表达 ([#5290](https://github.com/eggjs/egg/issues/5290)) ([d73046b](https://github.com/eggjs/egg/commit/d73046bb9165c74473b6f28842de23c880e78a87))
## [3.18.0](https://github.com/eggjs/egg/compare/v3.17.7...v3.18.0) (2024-01-21)
### Features
* auto set custom logger with onelogger ([#5287](https://github.com/eggjs/egg/issues/5287)) ([1fd79a2](https://github.com/eggjs/egg/commit/1fd79a2715b4eded47ae77d955de5fa50efa573b))
## [3.17.7](https://github.com/eggjs/egg/compare/v3.17.6...v3.17.7) (2024-01-11)
### Bug Fixes
* omit koa application ctxStorage and currentContext define ([#5285](https://github.com/eggjs/egg/issues/5285)) ([4c24dac](https://github.com/eggjs/egg/commit/4c24dac1e9ec86051d806dd6940c1d5095723b4d))
## [3.17.6](https://github.com/eggjs/egg/compare/v3.17.5...v3.17.6) (2024-01-10)
### Bug Fixes
* typo on index.d.ts ([#5284](https://github.com/eggjs/egg/issues/5284)) ([17ee60b](https://github.com/eggjs/egg/commit/17ee60b35a48c22eb90f392b688b4347c44b490d))
## [3.17.5](https://github.com/eggjs/egg/compare/v3.17.4...v3.17.5) (2023-10-12)
### Bug Fixes
* set body parser error to status 400 by default ([#5262](https://github.com/eggjs/egg/issues/5262)) ([5ac26a3](https://github.com/eggjs/egg/commit/5ac26a39b4256b6a3fcd55da947a47a82811c7c1))
## [3.17.4](https://github.com/eggjs/egg/compare/v3.17.3...v3.17.4) (2023-08-01)
### Bug Fixes
* use app.logger instead of ctx.logger ([#5246](https://github.com/eggjs/egg/issues/5246)) ([b700fb9](https://github.com/eggjs/egg/commit/b700fb962a866c6e699f5c88b342960cc5ee0b78)), closes [/github.com/eggjs/egg/issues/5213#issuecomment-1657771583](https://github.com/eggjs//github.com/eggjs/egg/issues/5213/issues/issuecomment-1657771583)
## [3.17.3](https://github.com/eggjs/egg/compare/v3.17.2...v3.17.3) (2023-06-29)
### Bug Fixes
* add missing args definition on runSchedule ([#5232](https://github.com/eggjs/egg/issues/5232)) ([f90763b](https://github.com/eggjs/egg/commit/f90763b164897bf4992b6ec58c4eae20775c0006))
## [3.17.2](https://github.com/eggjs/egg/compare/v3.17.1...v3.17.2) (2023-06-25)
### Bug Fixes
* don't require inspector module on production env ([#5228](https://github.com/eggjs/egg/issues/5228)) ([398fe15](https://github.com/eggjs/egg/commit/398fe15eb28c3bbe8d79a0c2b129d55922f45a9a))
## [3.17.1](https://github.com/eggjs/egg/compare/v3.17.0...v3.17.1) (2023-06-22)
### Bug Fixes
* compatible with content-type extra semicolon ([#5217](https://github.com/eggjs/egg/issues/5217)) ([cfdca36](https://github.com/eggjs/egg/commit/cfdca36b4ee84397ed2cb1987982d502a3c8af0a))
## [3.17.0](https://github.com/eggjs/egg/compare/v3.16.1...v3.17.0) (2023-06-19)
### Features
* add getSingletonInstance alias to singleton.get(id) ([#5216](https://github.com/eggjs/egg/issues/5216)) ([9868768](https://github.com/eggjs/egg/commit/98687685bb095d37166d3a66890f0164428a8e53))
## [3.16.1](https://github.com/eggjs/egg/compare/v3.16.0...v3.16.1) (2023-06-15)
### Bug Fixes
* ipc not work with worker_threads mode ([#5210](https://github.com/eggjs/egg/issues/5210)) ([03c8cf7](https://github.com/eggjs/egg/commit/03c8cf743d1fb56a55dbc633f088b08410423c5a))
## [3.16.0](https://github.com/eggjs/egg/compare/v3.15.0...v3.16.0) (2023-05-10)
### Features
* use egg-security@3.0.0 ([#5182](https://github.com/eggjs/egg/issues/5182)) ([a13b35e](https://github.com/eggjs/egg/commit/a13b35e05ca660fee3663db9381cdf44d63e44a0))
## [3.15.0](https://github.com/eggjs/egg/compare/v3.14.2...v3.15.0) (2023-01-28)
### Features
* runInAnonymousContextScope support req ([#5134](https://github.com/eggjs/egg/issues/5134)) ([615d660](https://github.com/eggjs/egg/commit/615d6608ab2fc66af848fb82ce41ed359f41bfb0))
## [3.14.2](https://github.com/eggjs/egg/compare/v3.14.1...v3.14.2) (2023-01-20)
### Bug Fixes
* **types:** app.router.url params should be optional ([#5132](https://github.com/eggjs/egg/issues/5132)) ([dda6bb3](https://github.com/eggjs/egg/commit/dda6bb3674af4acbdd7d5eb2f2ca373c714c7d2d))
## [3.14.1](https://github.com/eggjs/egg/compare/v3.14.0...v3.14.1) (2023-01-17)
### Bug Fixes
* export urllib types directly ([#5128](https://github.com/eggjs/egg/issues/5128)) ([483bf1d](https://github.com/eggjs/egg/commit/483bf1d12bee5157f9a95e0a5b7403fc7562900e))
## [3.14.0](https://github.com/eggjs/egg/compare/v3.13.0...v3.14.0) (2023-01-17)
### Features
* export urllib types ([#5127](https://github.com/eggjs/egg/issues/5127)) ([1f7b082](https://github.com/eggjs/egg/commit/1f7b08298ff4c6f118b93d3b3bf8e1fb3ac37db1))
## [3.13.0](https://github.com/eggjs/egg/compare/v3.12.0...v3.13.0) (2023-01-13)
### Features
* log app start timeline on coreLogger ([#5122](https://github.com/eggjs/egg/issues/5122)) ([6c4e8bc](https://github.com/eggjs/egg/commit/6c4e8bca1b829ecd47e98cc9b0544c7aa874e755))
## [3.12.0](https://github.com/eggjs/egg/compare/v3.11.1...v3.12.0) (2023-01-04)
### Features
* siteFile favicon config support async function type ([#5114](https://github.com/eggjs/egg/issues/5114)) ([667684f](https://github.com/eggjs/egg/commit/667684f79d8485ee9d9a03bf99077fa2dfef5507))
## [3.11.1](https://github.com/eggjs/egg/compare/v3.11.0...v3.11.1) (2023-01-03)
### Bug Fixes
* remove duplicate identifier ssrf ([#5113](https://github.com/eggjs/egg/issues/5113)) ([2b407eb](https://github.com/eggjs/egg/commit/2b407ebce9112d96e5e8a452eef09bcc70496e92))
## [3.11.0](https://github.com/eggjs/egg/compare/v3.10.0...v3.11.0) (2023-01-02)
### Features
* add ssrf declaration ([#4687](https://github.com/eggjs/egg/issues/4687)) ([b1414f2](https://github.com/eggjs/egg/commit/b1414f2c749da5ab9bf07abf26ff75eac0b9cb73))
## [3.10.0](https://github.com/eggjs/egg/compare/v3.9.2...v3.10.0) (2023-01-02)
### Features
* use egg-core@5 ([#5111](https://github.com/eggjs/egg/issues/5111)) ([7b8edbf](https://github.com/eggjs/egg/commit/7b8edbf322ed59c76ce3a85cd4595605d743fb80))
## [3.9.2](https://github.com/eggjs/egg/compare/v3.9.1...v3.9.2) (2022-12-21)
### Bug Fixes
* currentContext typo ([#5107](https://github.com/eggjs/egg/issues/5107)) ([713a081](https://github.com/eggjs/egg/commit/713a081475189ef6d00c85a559849ff97f824d11))
## [3.9.1](https://github.com/eggjs/egg/compare/v3.9.0...v3.9.1) (2022-12-18)
### Bug Fixes
* Enable auto npm release workflow ([#5102](https://github.com/eggjs/egg/issues/5102)) ([13bbe6c](https://github.com/eggjs/egg/commit/13bbe6c24e1c8160ae629e12c81e30e27b6c3dba))
## [3.9.1](https://github.com/eggjs/egg/compare/v3.9.0...v3.9.1) (2022-12-18)
### Bug Fixes
* Enable auto npm release workflow ([#5102](https://github.com/eggjs/egg/issues/5102)) ([13bbe6c](https://github.com/eggjs/egg/commit/13bbe6c24e1c8160ae629e12c81e30e27b6c3dba))
---
# History
## 2022-12-16, Version 3.9.0 @fengmk2
### Notable Changes
* **features**
* 📦 NEW: Run async function in the anonymous context scope
```js
await app.runInAnonymousContextScope(async ctx => {
// run with anonymous ctx here
});
```
### Commits
* [[`af1206904`](http://github.com/eggjs/egg/commit/af12069041c1ea11217688c9c17d3712a44d3422)] - chore: update workflow for gh-pages (#5098) (Suyi <<thonatos.yang@gmail.com>>)
* [[`344139e47`](http://github.com/eggjs/egg/commit/344139e4759f56ab2beca2e2a5c2783160396ba9)] - 🐛 FIX: Typo on HttpClient request (#5097) (fengmk2 <<fengmk2@gmail.com>>)
* [[`1021faf78`](http://github.com/eggjs/egg/commit/1021faf78e5f23fa366c0034a38f81b0f361e9ec)] - 👌 IMPROVE: Keep more compatible d.ts on httpclient request (#5092) (fengmk2 <<fengmk2@gmail.com>>)
* [[`9d6acfd7c`](http://github.com/eggjs/egg/commit/9d6acfd7c3266ae6a56e45cb7a72473d628f6e16)] - 📦 NEW: Run async function in the anonymous context scope (#5094) (fengmk2 <<fengmk2@gmail.com>>)
## 2022-12-12, Version 3.8.0 @fengmk2
### Notable Changes
* **features**
* Upgrade egg-schedule@4 to support `app.currentContext` on scheduler
### Commits
* [[`75d025b24`](http://github.com/eggjs/egg/commit/75d025b24e5e3016f2df84e2ba1901f42156c0b7)] - 👌 IMPROVE: Upgrade egg-schedule to v4 (#5088) (fengmk2 <<fengmk2@gmail.com>>)
## 2022-12-11, Version 3.7.0 @fengmk2
### Notable Changes
* **features**
* 📦 NEW: Set `config.logger.enableFastContextLogger = true` to enable faster context logger
### Commits
* [[`e94c7df63`](http://github.com/eggjs/egg/commit/e94c7df63e1812da672dbaf7200e652cc4537c7b)] - 📦 NEW: Upgrade egg-logger v3 to enable localStorage (#5085) (fengmk2 <<fengmk2@gmail.com>>)
* [[`c76e16cf7`](http://github.com/eggjs/egg/commit/c76e16cf7fb67d5f2c1b19252e01a5e3fed9cf96)] - 📖 DOC: Use @eggjs/tsconfig for tsconfig.json (#5066) (fengmk2 <<fengmk2@gmail.com>>)
## 2022-12-09, Version 3.6.0 @fengmk2
### Notable Changes
* **features**
* 🚀🚀🚀 Support `app.ctxStorage` and `app.currentContext` to get current execute ctx, see [koa#1455](https://github.com/koajs/koa/pull/1455)
### Commits
* [[`bf36904e0`](http://github.com/eggjs/egg/commit/bf36904e0fb1d4477ebb7068dd8ad6726d29182f)] - 📦 NEW: Add ctxStorage and currentContext d.ts (#5079) (fengmk2 <<fengmk2@gmail.com>>)
* [[`c68992ab7`](http://github.com/eggjs/egg/commit/c68992ab71b854f825df0ff3ea4b82e7666ec828)] - chore: ignore gp-pages branch while deploying preview (#5077) (Suyi <<thonatos.yang@gmail.com>>)
* [[`13906825b`](http://github.com/eggjs/egg/commit/13906825bc3fab260aa0dd8888ce9fd19f2f70c5)] - chore: use actions to deploy vercel project (#5076) (Suyi <<thonatos.yang@gmail.com>>)
* [[`5d825bb59`](http://github.com/eggjs/egg/commit/5d825bb59ed691bd45c3a8b2f6c222496910e250)] - docs: update communite links (#5073) (Suyi <<thonatos.yang@gmail.com>>)
## 2022-11-28, Version 3.5.1 @killagu
### Notable Changes
* **fixes**
* Dump `config/timing` when app start timeout
### Commits
* [[`c859506a0`](http://github.com/eggjs/egg/commit/c859506a094181f5f45db16a8501daaaea56b3d3)] - fix: dump config/timing when timeout (#5069) (killa <<killa123@126.com>>)
## 2022-11-15, Version 3.5.0 @fengmk2
### Notable Changes
* **features**
* Auto disable cluster-client heartbeat checker on debug mode
### Commits
* [[`6de5cba5d`](http://github.com/eggjs/egg/commit/6de5cba5d0d02d09e9e6ee71f9e7b1cb3d65c24e)] - feat: disable cluster-client heartbeat on debug mode (#5059) (sinkhaha <<1468709106@qq.com>>)
## 2022-11-07, Version 3.4.0 @fengmk2
### Notable Changes
* **features**
* Upgrade egg-cluster v2 to support worker_threads start mode
* Drop httpclient callback and thunk style, a breaking change to egg@2
* Print warnning log when boot action takes more than 5000ms
* Don't need to patch keep-alive header on Node.js >= 14.20.0
### Commits
* [[`2b5f289bb`](http://github.com/eggjs/egg/commit/2b5f289bba3bd14c2867136b5dcbf3bed5cfdf9e)] - 📦 NEW: Use egg-cluster v2 (#5055) (fengmk2 <<fengmk2@gmail.com>>)
* [[`610a39e7f`](http://github.com/eggjs/egg/commit/610a39e7f41a17a2123705691d6c1bfdc3e12f88)] - 👌 IMPROVE: Drop httpclient callback and thunk style (#5052) (fengmk2 <<fengmk2@gmail.com>>)
* [[`3a941d669`](http://github.com/eggjs/egg/commit/3a941d669cc1d2c12a2caad4dd24492e98444348)] - 👌 IMPROVE: Print warnning log when boot action takes more than 5000ms (#5049) (fengmk2 <<fengmk2@gmail.com>>)
* [[`d820b739b`](http://github.com/eggjs/egg/commit/d820b739b95207bdea8c9b4c3da0f5059bc0113c)] - 👌 IMPROVE: Don't need to patch keep-alive header on Node.js >= 14.20.0 (#5051) (fengmk2 <<fengmk2@gmail.com>>)
* [[`6ac4cdbfb`](http://github.com/eggjs/egg/commit/6ac4cdbfbb35905f6f315f51122c1badcb913b5c)] - 🤖 TEST: Add Node.js 19 ci runner (#5050) (fengmk2 <<fengmk2@gmail.com>>)
* [[`d05cc015e`](http://github.com/eggjs/egg/commit/d05cc015e4a748bf41a4dbf46e978d1f4ad44954)] - docs: fix Application description (#5044) (ldc-37 <<34739463+ldc-37@users.noreply.github.com>>)
## 2022-09-28, Version 3.3.3 @fengmk2
### Notable Changes
* **fixes**
* Allow override HttpClientNext
### Commits
* [[`7ee19e840`](http://github.com/eggjs/egg/commit/7ee19e8402b1d23ecdc1791e044a1902049e14dd)] - 🐛 FIX: Allow override HttpClientNext (#5037) (fengmk2 <<fengmk2@gmail.com>>)
## 2022-09-27, Version 3.3.2 @atian25
### Notable Changes
* **fixes**
* update multipart 3.1.0, https://github.com/eggjs/egg-multipart/pull/56
### Commits
* [[`201bfa749`](http://github.com/eggjs/egg/commit/201bfa7492920aafad71b7845e5cc6eaef69f8bc)] - fix: update multipart 3.1.0 (#5034) (TZ | 天猪 <<atian25@qq.com>>)
## 2022-09-26, Version 3.3.1 @fengmk2
### Notable Changes
* **fixes**
* fallback egg-multipart@2 to support filename with non-ASCII characters
### Commits
* [[`acadb28e2`](http://github.com/eggjs/egg/commit/acadb28e2814b0b91828e0766673f199d7767f3a)] - fix: fallback egg-multipart to v2 (#5032) (fengmk2 <<fengmk2@gmail.com>>)
## 2022-09-23, Version 3.3.0 @fengmk2
### Notable Changes
* **features**
* Support config `serverGracefulIgnoreCode` to ignore error avoid process exit when uncatch error emit
See https://github.com/node-modules/graceful/pull/13
### Commits
* [[`a0761d65f`](http://github.com/eggjs/egg/commit/a0761d65f5df1002853c169efedab969636247d3)] - feat(graceful): support serverGracefulIgnoreCode (#5027) (hyj1991 <<yeekwanvong@gmail.com>>)
* [[`8b8dd3be9`](http://github.com/eggjs/egg/commit/8b8dd3be95bb53ad3c732b8bc9c20566021e955f)] - chore: remove jsdoc and disable vercel comment (#5026) (Suyi <<thonatos.yang@gmail.com>>)
* [[`f4225339f`](http://github.com/eggjs/egg/commit/f4225339f6235f78fe53d34d1eb0993faa410b36)] - test: fix ci (#5025) (TZ | 天猪 <<atian25@qq.com>>)
* [[`5de994b9c`](http://github.com/eggjs/egg/commit/5de994b9c4cd17f9ecd4d4083c20b29f399a9e40)] - chore: fix action for gh-pages (#5024) (Suyi <<thonatos.yang@gmail.com>>)
## 2022-09-21, Version 3.2.0 @fengmk2
### Notable Changes
**features**
* [[`733d66989`](http://github.com/eggjs/egg/commit/733d66989d1f8657ce55b6032944188da635b8f0)] - feat: update egg-multipart 2.x -> 3.x (#5023) (TZ | 天猪 <<atian25@qq.com>>)
* [[`2ffb37ab5`](http://github.com/eggjs/egg/commit/2ffb37ab59395c9b14f153f91abb9f816a5e98ea)] - feat: Support urllib@3 (#5000) (fengmk2 <<fengmk2@gmail.com>>)
**others**
* [[`485781389`](http://github.com/eggjs/egg/commit/485781389e548ff0cf1eb107fea93c1bb01170d7)] - docs: update the version of the required Node (#5021) (Maledong <<maledong_public@foxmail.com>>)
* [[`bbd0e432e`](http://github.com/eggjs/egg/commit/bbd0e432e52832cc7a3d4b26a0141d7eb02e3793)] - chore: change the templates of bug/suggestion report (#5019) (Maledong <<maledong_public@foxmail.com>>)
* [[`2c5ba484a`](http://github.com/eggjs/egg/commit/2c5ba484a2dd8f214b9cdb53aa952688bc54cb2b)] - 🐛 FIX: Add config.httpclient.useHttpClientNext defined (#5001) (fengmk2 <<fengmk2@gmail.com>>)
## 2022-08-28, Version 3.1.0 @fengmk2
### Notable Changes
* **features**
* Support urllib@3 by `config.httpclient.useHttpClientNext = true`, see [#4847](https://github.com/eggjs/egg/issues/4847)
### Commits
* [[`2c5ba484a`](http://github.com/eggjs/egg/commit/2c5ba484a2dd8f214b9cdb53aa952688bc54cb2b)] - 🐛 FIX: Add config.httpclient.useHttpClientNext defined (#5001) (fengmk2 <<fengmk2@gmail.com>>)
* [[`2ffb37ab5`](http://github.com/eggjs/egg/commit/2ffb37ab59395c9b14f153f91abb9f816a5e98ea)] - feat: Support urllib@3 (#5000) (fengmk2 <<fengmk2@gmail.com>>)
## 2022-08-21, Version 3.0.0 @fengmk2
**features**
* Drop Node.js 8, 10, 12 supports, this release is a LTS version for egg@2, see https://github.com/eggjs/egg/issues/3644#issuecomment-1221460692
## 2022-06-17, Version 2.36.0 @atian25
**features**
* [[`e0b93e023`](http://github.com/eggjs/egg/commit/e0b93e023e1258c4037c68dacfc41fc304602bbc)] - feat: should log unfinished timing item (#4968) (TZ | 天猪 <<atian25@qq.com>>)
**others**
* [[`7f1689f9f`](http://github.com/eggjs/egg/commit/7f1689f9fbd286bde3b8b5aebf86af09a599359c)] - chore: typo CSRF on router.md (#4962) (Homyee King <<HomyeeKing@gmail.com>>)
* [[`e31c09c20`](http://github.com/eggjs/egg/commit/e31c09c2001b15fbc2431f4c36f6e59da5e3ebca)] - chore: fix some comments (#4937) (Maledong <<maledong_public@foxmail.com>>)
* [[`b0c17fdd0`](http://github.com/eggjs/egg/commit/b0c17fdd02512f743786203c326dc86be636f9a6)] - chore: remove git.io (#4940) (Baoshuo Ren <<i@baoshuo.ren>>)
* [[`12755e275`](http://github.com/eggjs/egg/commit/12755e27555b8f84a745c319c89b1c4d75ae3f78)] - test: Create codeql-analysis.yml (#4935) (fengmk2 <<fengmk2@gmail.com>>)
* [[`8078917fd`](http://github.com/eggjs/egg/commit/8078917fd66c41d21b0f2c738f77cc7916edfaca)] - chore: package upgrade and unittest fixture (#4933) (Maledong <<maledong_public@foxmail.com>>)
* [[`a5a358ceb`](http://github.com/eggjs/egg/commit/a5a358cebc78734d45a450a641913ae242c5dc70)] - chore: fix contributors badges on README.md (#4930) (XiaoRui <<xiangwu619@gmail.com>>)
## 2022-04-01, Version 2.35.0 @mansonchor
**features**
* [[`c1313f5ef`](http://github.com/eggjs/egg/commit/c1313f5ef960e5aaad7f04adb6665679f2ec10e2)] - feat: dumpConfig add appInfo (#4917) (mansonchor.github.com <<mansonchor1987@gmail.com>>)
**others**
* [[`4e5309188`](http://github.com/eggjs/egg/commit/4e5309188a60393435d5ab2df65ca67186f31035)] - test: add ChainAlert action (#4908) (fengmk2 <<fengmk2@gmail.com>>)
## 2022-03-16, Version 2.34.0
**features**
* [[`caacd09c3`](http://github.com/eggjs/egg/commit/caacd09c38aae03fc291febbb97a43c8ecbdc221)] - feat: siteFile support custom control-cache (#4902) (binginsist <<yangbingmail@foxmail.com>>)
**others**
* [[`f97fe4a8c`](http://github.com/eggjs/egg/commit/f97fe4a8c8c0b5f8c097055213f9e7177b9ab2dd)] - test: change error code assert (#4907) (fengmk2 <<fengmk2@gmail.com>>)
* [[`a7aa7f37d`](http://github.com/eggjs/egg/commit/a7aa7f37d901afd4c26a2a9aa57fe938b2109e94)] - docs: typo fix on deployment.zh-CN.md (#4906) (Krryxa <<krryxq@163.com>>)
* [[`d3fe13aa2`](http://github.com/eggjs/egg/commit/d3fe13aa25065995cfa9d78461be80194176f183)] - docs: typo fix on security.zh-CN.md (#4905) (Krryxa <<krryxq@163.com>>)
* [[`2dc723129`](http://github.com/eggjs/egg/commit/2dc723129614bd727e86871ae3e7cfc60166dd81)] - docs: use egg brand color for site (#4900) (Peach <<scdzwyxst@gmail.com>>)
* [[`11bbd8527`](http://github.com/eggjs/egg/commit/11bbd852731b1583cae5a5d519baa20960c0521d)] - docs: enhance (#4884) (Suyi <<thonatos.yang@gmail.com>>)
* [[`76d014bd5`](http://github.com/eggjs/egg/commit/76d014bd583c6d0b9b9f40ac2e6e7ba9dd66e8ed)] - docs: update node version (#4886) (lxinr <<33972246+lxinr@users.noreply.github.com>>)
* [[`9003cb5ad`](http://github.com/eggjs/egg/commit/9003cb5ad370d0c07b2baee88f3b25c597ac3929)] - docs: update https://registry.npm.taobao.org to https://registry.npmmirror.com (#4881) (Non-Official NPM Mirror Bot <<99484857+npmmirror@users.noreply.github.com>>)
* [[`b47409770`](http://github.com/eggjs/egg/commit/b47409770d76f03eb1ea0476be9e00207186c42e)] - docs: dumi (#4879) (Suyi <<thonatos.yang@gmail.com>>)
* [[`56816dbc5`](http://github.com/eggjs/egg/commit/56816dbc59dbb1a4973ca60130c9ff3f5be8b2da)] - docs (sequelize): Changed `config.sequelize` to `exports.sequelize` in configuration part (#4873) (Aelita <<45784210+xsjcTony@users.noreply.github.com>>)
* [[`20842f9c2`](http://github.com/eggjs/egg/commit/20842f9c216ed538924936163b7ed18437c54cd7)] - docs: Add license scan report and status (#4880) (fossabot <<badges@fossa.io>>)
## 2021-12-07, Version 2.33.1
**features**
* [[`18dcadc1c`](http://github.com/eggjs/egg/commit/18dcadc1cf6c9837de605916a0d8b161a63e7218)] - feat: meta middleware x-readtime support performanceStarttime (#4827) (fengmk2 <<fengmk2@gmail.com>>)
**others**
* [[`8659d4bc3`](http://github.com/eggjs/egg/commit/8659d4bc37e0652d66d04d2e5504fdc0ef2f7f7d)] - docs: update contributors (#4826) (Suyi <<thonatos.yang@gmail.com>>)
* [[`4d18732c7`](http://github.com/eggjs/egg/commit/4d18732c79e44a84140df05e879b8b5f569c2b4b)] - chore: remove @types/urllib from autod (fengmk2 <<fengmk2@gmail.com>>)
## 2021-12-06, Version 2.33.0
**features**
* [[`0f6589e1d`](http://github.com/eggjs/egg/commit/0f6589e1dc9e538434eb1580327556d5aa264822)] - feat: support better logger timer in precise milliseconds (#4806) (fengmk2 <<fengmk2@gmail.com>>)
## 2021-11-15, Version 2.32.0 @atian25
### Notable Changes
* **features**
* handle ENETUNREACH error on httpclient
### Commits
* [[`189c47804`](http://github.com/eggjs/egg/commit/189c478048d820b7b1a6ba6e8bce3444604876ff)] - feat: handle ENETUNREACH error on httpclient (#4792) (fengmk2 <<fengmk2@gmail.com>>)
## 2021-10-18, Version 2.31.0 @killagu
### Notable Changes
* **typing**
* support ssrf typing in config
### Commits
* [[`debfda7ab`](https://github.com/eggjs/egg/commit/debfda7ab38f4893b6f122abfbf3e5288af1441e)] - feat(config): support ssrf field in security config. (#4778) (Jasin Yip <<yejunxing@gmail.com>>)
## 2021-08-09, Version 2.30.0 @mansonchor
### Notable Changes
* **features**
* support disableDNSCache in one request even though config set to `enableDNSCache: true`
* **docs**
* update ts docs, add missing zh-CN doc
* typo fix
### Commits
* [[`13dd55076`](https://github.com/eggjs/egg.git/commit/13dd5507694a57a11e12d1ac6f71ba4a562d88c0)] - feat: support disableDNSCache by request args handle (#4728) (mansonchor.github.com <<mansonchor1987@gmail.com>>)
* [[`1b4fde454`](https://github.com/eggjs/egg.git/commit/1b4fde454d2d61200a8b066ba841ad6d81b5b69d)] - unittest: rename and remove some useless tests (#4705) (Maledong <<maledong_public@foxmail.com>>)
* [[`156980d36`](https://github.com/eggjs/egg.git/commit/156980d369570531c1ef9cf842f02f513b56fe4a)] - doc: Typo fixture (#4707) (Maledong <<maledong_public@foxmail.com>>)
* [[`27aa49b59`](https://github.com/eggjs/egg.git/commit/27aa49b5945f08fa6b636479cf4cba7822e3af2d)] - doc: Typo fixture:「,」->「,」 (#4708) (陈煮酒 <<501205587@qq.com>>)
* [[`1f02a8d45`](https://github.com/eggjs/egg.git/commit/1f02a8d4560ca3334425e646c1ac87226aba3a63)] - doc: Add the missing zh-CN trans for typescript (#4703) (Maledong <<52018749+MaledongGit@users.noreply.github.com>>)
* [[`f5cf0d965`](https://github.com/eggjs/egg.git/commit/f5cf0d965fa4077da10e87f070e113496077872c)] - doc: "登陆" should be "登录" (#4697) (HOU Ce <<594965698@qq.com>>)
* [[`750558400`](https://github.com/eggjs/egg.git/commit/750558400e3bd5f39658dfcbedd4af7bc0bdda2a)] - docs: update ts docs (#4666) (吖猩 <<whxaxes@gmail.com>>)
* [[`93d2b04b9`](https://github.com/eggjs/egg.git/commit/93d2b04b985145f27a39335300a78002a61da2a8)] - docs: fix loaderUpdate.md didReady example (#4652) (shadyzoz <<shadyzoz@icloud.com>>)
## 2021-04-13, Version 2.29.4 @popomore
### Notable Changes
* **fixes**
* remove internal interval handler when close agent
* **docs**
* Added english doc to how-to-migrate-from-1.x, Thx @ZixiaoWang
* typo improvement
### Commits
* [[`ce234226b`](http://github.com/eggjs/egg/commit/ce234226bf0c43f03aedf727a7d195ae4175c01f)] - fix: remove internal interval handler when close agent (#4654) (Harry Chen <<czy88840616@gmail.com>>)
* [[`6a6d68fb2`](http://github.com/eggjs/egg/commit/6a6d68fb228a3eae9b5cab3ba7afe0892d5e08ea)] - Typo fixture:制定 -> 指定 (#4639) (华晨 <<chanjsq@gmail.com>>)
* [[`603c74b58`](http://github.com/eggjs/egg/commit/603c74b581d6b3a9ad80170335425b0876ffcb1f)] - docs: Added english doc to how-to-migrate-from-1.x (#4630) (Jacky Wang <<www.wangzixiao@126.com>>)
* [[`693df6066`](http://github.com/eggjs/egg/commit/693df60661735008e8a758258fc2df0bb9783f04)] - docs: fix schedule reference (#4556) (xuxu <<must414@163.com>>)
* [[`4ebbe8143`](http://github.com/eggjs/egg/commit/4ebbe814386102377870959129e831a3b20133c1)] - docs: fix typo (#4596) (suinia <<suini_a@163.com>>)
## 2021-02-19, Version 2.29.3 @killa
### Notable Changes
* **fixes**
* fix ctx body typing
### Commits
* [[`e9fba1b7b`](http://github.com/eggjs/egg/commit/e9fba1b7bbe3f54b023262aeb5487b31047e119e)] - fix: fix ctx body as any (#4613) (killa <<killa123@126.com>>)
## 2021-02-18, Version 2.29.2 @killa
### Notable Changes
* **fixes**
* fix query typing
* add overrideIgnore define
### Commits
* [[`99682e4bd`](http://github.com/eggjs/egg/commit/99682e4bd5afe1697cab02001e919b967c264869)] - fix: fix query typing (#4611) (killa <<killa123@126.com>>)
* [[`26017ee2e`](http://github.com/eggjs/egg/commit/26017ee2e49bd8a42b660baabe31284e00f81bcb)] - chore: fix comment typo at request.js (#4513) (Albert 理斯特 <<shuaizhexu@gmail.com>>)
* [[`34048c275`](http://github.com/eggjs/egg/commit/34048c275afe1126716ef4265b667169e9866e53)] - fix: add overrideIgnore define (#4490) (kotot <<317643941@qq.com>>)
* [[`d652658d1`](http://github.com/eggjs/egg/commit/d652658d1205d0fbc73b4417c2ae54ee0a24f395)] - docs: d2 ads (#4508) (Suyi <<thonatos.yang@gmail.com>>)
## 2020-10-19, Version 2.29.1 @atian25
### Notable Changes
* **fixes**
* revert clear timing after ready, only disable
* won't set keep-alive header at Node.js ^12.19.0 || >=14.8.0
### Commits
* [[`9f653afe7`](http://github.com/eggjs/egg/commit/9f653afe790e0ead44109c68dfffb8353fdca56c)] - fix: remove clear timing && skip keep-alive after 12.19.0 (#4497) (TZ | 天猪 <<atian25@qq.com>>)
## 2020-09-23, Version 2.29.0 @atian25
### Notable Changes
* **features**
* dumpconfig also dump disabled plugin
* **docs**
* csrf double cookie defense should enabled on all method
* test case for env.EGG_APP_CONFIG
* optimize multiple env configuration description
### Commits
* [[`cc80c6ab8`](http://github.com/eggjs/egg/commit/cc80c6ab86c71b1c9ea244065d4766297bfb6c17)] - feat: dumpconfig also dump disabled plugin (#4480) (TZ | 天猪 <<atian25@qq.com>>)
* [[`1d32771e5`](http://github.com/eggjs/egg/commit/1d32771e5aeb8fa8546ad8bfacf2f438973afae0)] - doc: csrf double cookie defense should enabled on all method (#3881) (Hongcai Deng <<admin@dhchouse.com>>)
* [[`504e4bebc`](http://github.com/eggjs/egg/commit/504e4bebcef03830be7c7432210b5b6b1de9d06b)] - test: for env.EGG_APP_CONFIG (#4468) (TZ | 天猪 <<atian25@qq.com>>)
* [[`ff4dfaa09`](http://github.com/eggjs/egg/commit/ff4dfaa098ad40ab7a0773c44d409829fcbb0e41)] - docs(config): optimize multiple env configuration description (#4406) (Andy <<xiaoxiaocoder@126.com>>)
* [[`b283791da`](http://github.com/eggjs/egg/commit/b283791dab3c86beb14506668e2aa3ef21cb78e6)] - docs: update badge to github action (#4463) (TZ | 天猪 <<atian25@qq.com>>)
## 2020-09-08, Version 2.28.0 @atian25
### Notable Changes
* **features**
* clear & disable timing after ready
* **fixes**
* only set keep-alive header before Node.js 14.8.0
* **typings**
* Added missing types in HttpClientConfig
* export EggLogger/EggHttpClient/EggContextHttpClient
* **docs**
* fixed grammatical and spelling errors
* update compress url
### Commits
* [[`b31b47df1`](http://github.com/eggjs/egg/commit/b31b47df10722bfac7ac13771db534f0200fc6ce)] - feat: clear & disable timing after ready (#4421) (TZ | 天猪 <<atian25@qq.com>>)
* [[`d25d32e58`](http://github.com/eggjs/egg/commit/d25d32e584b0bfd80f21cc522b91ac465f2852ac)] - fix: only set keep-alive header before Node.js 14.8.0 (#4457) (TZ | 天猪 <<atian25@qq.com>>)
* [[`a7ae46c84`](http://github.com/eggjs/egg/commit/a7ae46c847db07c0c4af1a85173bc4009d1219d9)] - type: Added missing types in HttpClientConfig (#4388) (Gcaufy <<gcaufy@gmail.com>>)
* [[`064cc7a91`](http://github.com/eggjs/egg/commit/064cc7a91a2be89e39d72a833a1cb35cdcd8f201)] - docs: fixed grammatical and spelling errors (#4424) (Hridayesh Sharma <<dev.hridayesh@gmail.com>>)
* [[`95776d646`](http://github.com/eggjs/egg/commit/95776d6462080448e946c049f9ad4da4e9fc065e)] - docs: fix spelling mistakes and grammatical errors (#4423) (Hridayesh Sharma <<vyasriday7@gmail.com>>)
* [[`50976280f`](http://github.com/eggjs/egg/commit/50976280fcb19ce556ddc46f76da1f5fab46fa4a)] - docs: update compress url (#4415) (忽如寄 <<594613537@qq.com>>)
## 2020-06-29, Version 2.27.0 @killa
### Notable Changes
* **typings**
* fix curl type
* export EggLogger/EggHttpClient/EggContextHttpClient
* **docs**
* update docs about how to extends ctx.helper
### Commits
* [[`b5cc8b6e3`](http://github.com/eggjs/egg/commit/b5cc8b6e361b1ac2e7b4eb509f1e6486fe1dab13)] - fix(dts): fix curl type (#4312) (胡宇航 <<591765099@qq.com>>)
* [[`432128a80`](http://github.com/eggjs/egg/commit/432128a80aefdc8d11a6571da1ff35550e85fd66)] - type: export EggLogger/EggHttpClient/EggContextHttpClient (#4280) (killa <<killa123@126.com>>)
* [[`eca6b04c1`](http://github.com/eggjs/egg/commit/eca6b04c1c50bc69c53f9910cc35bb7441c7cb02)] - docs:update docs about how to extends ctx.helper (#4362) (EasonQwQ <<750225883@qq.com>>)
## 2020-05-13, Version 2.26.1 @dead-horse
### Notable Changes
* **fixes**
* runInBackground always run after setImmediate
* **docs**
* imporve docs
* imporve typings
### Commits
* [[`9c67298d6`](http://github.com/eggjs/egg/commit/9c67298d69946d4ba0887c3648d3404e835c6902)] - test: run test on node 14 (#4272) (fengmk2 <<fengmk2@gmail.com>>)
* [[`427a30a07`](http://github.com/eggjs/egg/commit/427a30a071d248cc2e5e15bb4bad35f3058e867f)] - test: make dnscache test case more stable (#4297) (Yiyu He <<dead_horse@qq.com>>)
* [[`64efd076b`](http://github.com/eggjs/egg/commit/64efd076bf9d937e36748f89bada6fce186913cd)] - fix: runInBackground always run after setImmediate (#4296) (Yiyu He <<dead_horse@qq.com>>)
* [[`69923977a`](http://github.com/eggjs/egg/commit/69923977a7e5c0825f2fc5c616852b0721411a0c)] - docs: Update doc for config of logger.consoleLevel (#4276) (xuxu <<must414@163.com>>)
* [[`7b6e4371c`](http://github.com/eggjs/egg/commit/7b6e4371c7367583627977a0ca4aa2ff66e28429)] - docs(typescript): Add --noEmit to unittest example code (#4250) (Ink <<chceyes@gmail.com>>)
* [[`3413e35fd`](http://github.com/eggjs/egg/commit/3413e35fd86408896e5c0b7e77ec2528ac08c9f9)] - chore: fix typo (#4234) (zoomdong <<1344492820@qq.com>>)
* [[`b4b9b50af`](http://github.com/eggjs/egg/commit/b4b9b50af1bb842e0138fc236d45882188698123)] - doc (socketio): fix packet middleware bug (#4204) (zfx <<502545703@qq.com>>)
* [[`2fcd605c6`](http://github.com/eggjs/egg/commit/2fcd605c6397480b0a5add9c11f7c7d071393de5)] - docs: update bodyParser types and doc (#4192) (sexy pig <<353071655@qq.com>>)
* [[`5e2bad0c4`](http://github.com/eggjs/egg/commit/5e2bad0c421952b7c84471df06d2ca80c20fa14c)] - docs: fix typo in router (#4203) (Xuemuyang <<myoungxue@gmail.com>>)
* [[`1181a675c`](http://github.com/eggjs/egg/commit/1181a675cae08c2d6952b8c15a3a9375947e220b)] - docs(plugin): format en/basics/plugin.md (#4168) (chs97 <<623528324@qq.com>>)
* [[`e9011e8f3`](http://github.com/eggjs/egg/commit/e9011e8f332a97da7e6e112d0f1ded42f0b5db42)] - feat: add http method patch to typings (#4125) (xiaoxu <<xiao.xu515@gmail.com>>)
* [[`2109505b4`](http://github.com/eggjs/egg/commit/2109505b40a159cd047075e566e9465b1ad5a365)] - test: fix doctools path on windows (#4090) (fengmk2 <<fengmk2@gmail.com>>)
## 2019-12-07, Version 2.26.0 @fengmk2
### Notable changes
* **features**
* add application level Cookie options, can fix [Cookie SameSite warning on Chrome](https://support.google.com/chrome/thread/16654793?hl=en) now.
* use new URL instead of url.parse, avoiding potential security issues.
### Commits
* [[`b28134e77`](http://github.com/eggjs/egg/commit/b28134e7709c803eb7a7ed071a25bac8a28e3d1f)] - feat: add application level Cookie options (#4086) (fengmk2 <<fengmk2@gmail.com>>)
* [[`b7718c1cc`](http://github.com/eggjs/egg/commit/b7718c1cc2b94b02ee728088060fdbc85e462b6d)] - fix: use new URL instead of url.parse (#4048) (Yiyu He <<dead_horse@qq.com>>)
* [[`afed9105d`](http://github.com/eggjs/egg/commit/afed9105df34aad60c40ecba0e44ddaad1a605dc)] - fix: index.d.ts (#4012) (dxd <<dxd_sjtu@outlook.com>>)
* [[`690711bab`](http://github.com/eggjs/egg/commit/690711bab8bd8c838b4dd651baea3bc49a5fa1f1)] - test: fix the testcase error of load_boot.test.js (#4041) (Xin Wang <<wangxinalex@gmail.com>>)
* [[`6c55a436b`](http://github.com/eggjs/egg/commit/6c55a436bf2afb7bb99810401a6f92b3a58471ff)] - docs: fix typo (#4028) (Xuehua Cai <<pixcai@163.com>>)
## 2019-10-28, Version 2.25.0 @dead-horse
### Notable changes
* **features**
* support config.maxIpsCount, deprecate config.maxProxyCount
* singleton returns client name when create client
### Commits
* [[`b3479e8e2`](http://github.com/eggjs/egg/commit/b3479e8e2b6cc74c95eef4334bd6b054fddb6158)] - feat: support config.maxIpsCount (#4014) (Yiyu He <<dead_horse@qq.com>>)
* [[`380e7d634`](http://github.com/eggjs/egg/commit/380e7d6344b4f608397fed5dea4f19918ca347f5)] - docs(env): cleanup the document (#3988) (Alpha <<AlphaWong@users.noreply.github.com>>)
* [[`2c5e64a50`](http://github.com/eggjs/egg/commit/2c5e64a50edd78522aa5bf83e4ea8ef4d72f5b40)] - docs: add promo link (#3995) (Haoliang Gao <<sakura9515@gmail.com>>)
* [[`adca16637`](http://github.com/eggjs/egg/commit/adca1663712acd361dddd1b390ca48dda5a3608e)] - docs(deployment): update the description for hostname (#3994) (Suyi <<thonatos@users.noreply.github.com>>)
* [[`27dacb7c9`](http://github.com/eggjs/egg/commit/27dacb7c9dae4b65c1b973d39aae1f8c9a4cd7b1)] - feat:Singleton returns client name when create client (#3905) (暗色调 <<41288382+dark-tone@users.noreply.github.com>>)
* [[`d3f68c371`](http://github.com/eggjs/egg/commit/d3f68c3710946a63f640b1885e9c7120db935d8e)] - docs(deployment): modify hostname (#3987) (zfx <<502545703@qq.com>>)
* [[`73ad6c086`](http://github.com/eggjs/egg/commit/73ad6c0861d5d6f8235fde2a5ba985ad9f53fcfe)] - chore: use github actions to run CI (#3974) (Suyi <<thonatos@users.noreply.github.com>>)
## 2019-10-11, Version 2.24.0 @thonatos
### Notable changes
* **features**
* feat: set default body-parser limitation to 1mb
* **fixes**
* app.keys getter must have a setter either
* more log for bodyParser
* **docs**
* add opencollective to sponsors list
* update lf url
* fix hsts docs error
* fix typo of socket.io
* modify invalid links
### Commits
* [[`bddf1e183`](http://github.com/eggjs/egg/commit/bddf1e183b5b6fc0f1414f81948ffdedd71e16a9)] - feat: set default body-parser limitation to 1mb (#3903) (Suyi <<thonatos@users.noreply.github.com>>)
* [[`5ddf07c43`](http://github.com/eggjs/egg/commit/5ddf07c435ad81142a6e995583849e20c7348dda)] - docs: update readme (#3968) (Suyi <<thonatos@users.noreply.github.com>>)
* [[`be1b72606`](http://github.com/eggjs/egg/commit/be1b72606a62a8efe88849976126cc8ca61b8d7e)] - docs(security): hsts is disabled by default (#3972) (Suyi <<thonatos@users.noreply.github.com>>)
* [[`e5e948783`](http://github.com/eggjs/egg/commit/e5e948783a45ea138592a33e9ae7faa20a85af26)] - docs: add opencollective to sponsors list (#3971) (Suyi <<thonatos@users.noreply.github.com>>)
* [[`cde921456`](http://github.com/eggjs/egg/commit/cde921456657c16dba81c6fb9c991b62a826d120)] - docs: update lf url (#3922) (Suyi <<thonatos@users.noreply.github.com>>)
* [[`17b22c86b`](http://github.com/eggjs/egg/commit/17b22c86b7f83bc168d9c7176191618e19add1dd)] - docs: fix typo of socket.io (#3895) (lqzhgood <<9134671+lqzhgood@users.noreply.github.com>>)
* [[`a9d0cf5c0`](http://github.com/eggjs/egg/commit/a9d0cf5c0d5aadc957e12854f7a3ab6469f83f75)] - fix: app.keys getter must have a setter either (#3891) (Yiyu He <<dead_horse@qq.com>>)
* [[`f1707410b`](http://github.com/eggjs/egg/commit/f1707410bc3f703d69aae27965cc622b9a768107)] - docs(deployment): add logs that the egg app has been successfully connected to alinode (#3868) (hyj1991 <<yeekwanvong@gmail.com>>)
* [[`24c388b4a`](http://github.com/eggjs/egg/commit/24c388b4a5ec4c717875a1510accbd5882800ad0)] - docs(egg-and-koa): modify invalid links (#3851) (sdjdd <<352207572@qq.com>>)
* [[`84894e871`](http://github.com/eggjs/egg/commit/84894e8714747876821447faeaada0dabc2a7147)] - chore: add sponsor config (#3751) (TZ | 天猪 <<atian25@qq.com>>)
* [[`064616934`](http://github.com/eggjs/egg/commit/064616934b4ff2c044395baae60bd33d3d7dc5ff)] - chore: add node12 for ci (#3196) (Haoliang Gao <<sakura9515@gmail.com>>)
* [[`45a966621`](http://github.com/eggjs/egg/commit/45a966621746f9d2c9e8a91fc1b17f75d97033de)] - docs(quickstart): npm version for npm init command (#3836) (QingDeng <<zrl412@163.com>>)
* [[`341beda59`](http://github.com/eggjs/egg/commit/341beda59ee99867998e28603f9ed623e49c33aa)] - test: mv assert to fixtures (#3829) (Suyi <<thonatos@users.noreply.github.com>>)
* [[`79dbb14a5`](http://github.com/eggjs/egg/commit/79dbb14a535c27a55daf83b441b47aabff472b06)] - docs(logger): formatter (#3835) (TZ | 天猪 <<atian25@qq.com>>)
## 2019-07-17, Version 2.23.0 @atian25
### Notable changes
* **features**
* error message rewrite when it has only a getter
* **fixes**
* handleRequest method should return a promise
* more log for bodyParser
* **docs**
* httpclient upload files
* typings improve
### Commits
* [[`6bfc0eb5b`](http://github.com/eggjs/egg/commit/6bfc0eb5b9a6d38c73d46bf641ece6adda3481a1)] - feat: error message rewrite when it has only a getter (#3796) (TZ | 天猪 <<atian25@qq.com>>)
* [[`489f52b5c`](http://github.com/eggjs/egg/commit/489f52b5ce4078efccefc8837729b42c15828722)] - fix: handleRequest method should return a promise (#3820) (引证 <<browsnet@163.com>>)
* [[`29a2f2fd9`](http://github.com/eggjs/egg/commit/29a2f2fd92e4d3e3cf0ee9ff034d8cdce07ee693)] - fix: more log for bodyParser (#3809) (TZ | 天猪 <<atian25@qq.com>>)
* [[`6dc8a2d14`](http://github.com/eggjs/egg/commit/6dc8a2d14582c774479593f002af2f2b96e0ce96)] - chore: fix ci (#3825) (Suyi <<thonatos@users.noreply.github.com>>)
* [[`e30511eff`](http://github.com/eggjs/egg/commit/e30511effeb77d954e2c15b684c274b85da2c69b)] - docs: add alinode supported platforms (#3821) (hyj1991 <<yeekwanvong@gmail.com>>)
* [[`c67ca2059`](http://github.com/eggjs/egg/commit/c67ca2059f2c44140e3a5bc46c38c87f52a08172)] - docs: open should come with protocol (#3787) (zhennann <<zhen.nann@icloud.com>>)
* [[`9adcd40f8`](http://github.com/eggjs/egg/commit/9adcd40f81a22670abf2f5f9167d9c8de438ad34)] - docs(lifecyle): add class export in sample code (#3758) (Kermit Xuan <<33770367+Kermit-Xuan@users.noreply.github.com>>)
* [[`4ca62734d`](http://github.com/eggjs/egg/commit/4ca62734db829cad7e3ea35bc6394de98c9ad160)] - fix: typos (#3768) (Jeff <<jeff.tian@outlook.com>>)
* [[`b1cb5332d`](http://github.com/eggjs/egg/commit/b1cb5332d433c158f59ab4877f3f6ab07bf9fe79)] - chore: remove @types/urllib (#3732) (TZ | 天猪 <<atian25@qq.com>>)
* [[`3de31f541`](http://github.com/eggjs/egg/commit/3de31f5418503f02afde9e92409d5f40e664c46c)] - fix(typings): add custom logger typings (#3697) (吖猩 <<whxaxes@gmail.com>>)
* [[`35af6331c`](http://github.com/eggjs/egg/commit/35af6331c97b2e9c9f831ff193709f8fc984f3a9)] - docs: https options en version (#3702) (liulun <<xland@live.cn>>)
* [[`9c23232a4`](http://github.com/eggjs/egg/commit/9c23232a47679bdcb8f071a5cc01f013f443aa05)] - docs(sequelize): replace findById with findByPk (#3700) (Zhao zuoqi <<30346283+Mavericker-1996@users.noreply.github.com>>)
* [[`3fccb4f27`](http://github.com/eggjs/egg/commit/3fccb4f275b2982b974a1a1d99cec32795f4efd3)] - docs: https options (#3701) (liulun <<xland@live.cn>>)
* [[`5b2dbd5b0`](http://github.com/eggjs/egg/commit/5b2dbd5b097d80b0f9150d1a03ec1d9c73af8dec)] - test: fix some test methods failed on windows platform (#3686) (QingDeng <<zrl412@163.com>>)
* [[`409990299`](http://github.com/eggjs/egg/commit/409990299fd3afeb35968bc06b02f4b0137718ba)] - fix:add the doc test on windows (#3654) (Maledong <<maledong_github@outlook.com>>)
* [[`17fab1c1d`](http://github.com/eggjs/egg/commit/17fab1c1d645076bda76be351fcb3c6f86cea4ca)] - docs: httpclient upload files (#3682) (TZ | 天猪 <<atian25@qq.com>>)
* [[`da2d439d6`](http://github.com/eggjs/egg/commit/da2d439d6f79f767055021bf96f7ef73207a751a)] - docs(lifecyle): fix typo (#3681) (+v <<ljw@live.jp>>)
## 2019-04-30, Version 2.22.2 @atian25
### Notable changes
* **fixes**
* optimize declaration of httpclient
### Commits
* [[`670ba3475`](http://github.com/eggjs/egg/commit/670ba34751af0b3869dd656064b4587affb888ec)] - fix(typings): optimize declaration of httpclient (#3665) (吖猩 <<whxaxes@gmail.com>>)
## 2019-04-29, Version 2.22.1 @atian25
### Notable changes
* **fixes**
* should restore agent messenger first
### Commits
* [[`04adcf93b`](http://github.com/eggjs/egg/commit/04adcf93b8f0a8c48c35015e8d2a279fc7d06b24)] - fix: should restore agent messenger first (#3658) (TZ | 天猪 <<atian25@qq.com>>)
* [[`99eb75398`](http://github.com/eggjs/egg/commit/99eb7539850c117d3d8b05f669cae5a9e9269be8)] - docs: fix history time (#3655) (TZ | 天猪 <<atian25@qq.com>>)
## 2019-04-29, Version 2.22.0 @atian25
### Notable changes
* **features**
* switch httpclient to httpclient2 for retry feature
* add BaseHookClass
* **fixes**
* loadCustomLoader should be run before loadCustomApp
* **docs**
* d.ts for single mode
### Commits
* [[`d3b1cb5d9`](http://github.com/eggjs/egg/commit/d3b1cb5d9d2dd91330778966ba9813f56476a47b)] - fix: loadCustomLoader should be run before loadCustomApp (#3652) (Haoliang Gao <<sakura9515@gmail.com>>)
* [[`7cc8aab02`](http://github.com/eggjs/egg/commit/7cc8aab02d89869b4ce460b2fa186aedcf00b64b)] - chore: update packages,remove 'plugin' and validations of doc generation (#3643) (Maledong <<maledong_github@outlook.com>>)
* [[`bffb6448f`](http://github.com/eggjs/egg/commit/bffb6448f201ce0d61bd3a32b91f673cf5c074f4)] - docs: fix httpclient proxy (#3638) (TZ | 天猪 <<atian25@qq.com>>)
* [[`e7fbd68f3`](http://github.com/eggjs/egg/commit/e7fbd68f32054041b74bc860f11aca05c025c0a9)] - feat: switch httpclient to httpclient2 for retry feature (#3626) (TZ | 天猪 <<atian25@qq.com>>)
* [[`8bb7c7e7d`](http://github.com/eggjs/egg/commit/8bb7c7e7d59d6aeca4b2ed1eb580368dcb731a4d)] - feat: add BaseHookClass (#3581) (killa <<killa123@126.com>>)
* [[`459454354`](http://github.com/eggjs/egg/commit/4594543543290a8c714fe3b9047c84578bf2f9a6)] - feat: index.d.ts添加单进程模式 (#3628) (jasine <<jasinechen@gmail.com>>)
* [[`4b13a1ffb`](http://github.com/eggjs/egg/commit/4b13a1ffbed0895731bf38f72d5786d4b15f263f)] - chore: fix jsdocs (#3627) (TZ | 天猪 <<atian25@qq.com>>)
## 2019-04-12, Version 2.21.1 @dead-horse
### Notable changes
* **fixes**
* Revert "feat: switch httpclient to httpclient2 for retry feature(which is a breaking change)
### Commits
* [[`89872a76f`](http://github.com/eggjs/egg/commit/89872a76fc09cefb9ff92221a5c3b9977d206f7c)] - Revert "feat: switch httpclient to httpclient2 for retry feature (#36… (#3622) (Yiyu He <<dead_horse@qq.com>>)
## 2019-04-11, Version 2.21.0 @dead-horse
### Notable changes
* **features**
* support config.maxProxyCount to help get the real client ip
* switch httpclient to httpclient2 for retry feature
* **docs**
* add how to config egg behind a proxy
* update http_proxy usage
* change `egg-init` to `npm init egg`
### Commits
* [[`01b9588a3`](http://github.com/eggjs/egg/commit/01b9588a35ba33a7088e79f6d3e08c713c4de963)] - feat: support config.maxProxyCount to help get the real client ip (#3612) (Yiyu He <<dead_horse@qq.com>>)
* [[`eead31862`](http://github.com/eggjs/egg/commit/eead318625347bb9de8f9d7ffc6fae5ae1b33901)] - feat: switch httpclient to httpclient2 for retry feature (#3606) (TZ | 天猪 <<atian25@qq.com>>)
* [[`879fe93a6`](http://github.com/eggjs/egg/commit/879fe93a6dde156101318c766a3c29ca07f1e18d)] - docs: add how to config egg behind a proxy (#3614) (Yiyu He <<dead_horse@qq.com>>)
* [[`2357fbc1e`](http://github.com/eggjs/egg/commit/2357fbc1ee18cf0a8ee8692ed2d62d2224acfe3b)] - docs: remove egg-ts-helper && inspect-brk (#3603) (TZ | 天猪 <<atian25@qq.com>>)
* [[`e0a1d8fc6`](http://github.com/eggjs/egg/commit/e0a1d8fc6806acc0a4141bc4cf67149069bfbdf0)] - docs: change egg-init to `npm init egg` (#3588) (TZ | 天猪 <<atian25@qq.com>>)
* [[`763923cd7`](http://github.com/eggjs/egg/commit/763923cd76be30496fee9f733db9500c1d8188f2)] - chore: remove unused plugins.puml link (#3579) (TZ | 天猪 <<atian25@qq.com>>)
* [[`b1746468d`](http://github.com/eggjs/egg/commit/b1746468dae2d02aeef37f6e8d85414624c79880)] - docs(httpclient): update http_proxy usage (#3569) (TZ | 天猪 <<atian25@qq.com>>)
## 2019-03-25, Version 2.20.2 @whxaxes
### Notable changes
* **fixes**
* onClientError remove content-length header
* **types**
* add custom loader typing
* import types from egg-core
### Commits
* [[`f31cd38aa`](http://github.com/eggjs/egg/commit/f31cd38aa1c1cb58f4fb6b08020b0b49a9b5c1a8)] - fix(types): add custom loader typing (#3533) (吖猩 <<whxaxes@qq.com>>)
* [[`a73cfd067`](http://github.com/eggjs/egg/commit/a73cfd067b48b2c2301e50d5ab431dfecebddef4)] - fix(types): import types from egg-core (#3545) (吖猩 <<whxaxes@qq.com>>)
* [[`04adb930d`](http://github.com/eggjs/egg/commit/04adb930de61f6c3d1b7b9b4e7f49800e3b49602)] - fix: onClientError remove content-length header (#3544) (Yiyu He <<dead_horse@qq.com>>)
## 2019-03-12, Version 2.20.1 @dead-horse
### Notable changes
* **fixes**
* empty querystring must be cached
* add Singleton class declare typings
### Commits
* [[`2fc241a86`](http://github.com/eggjs/egg/commit/2fc241a8648d64faab78196ccd0377c781287e5e)] - fix: add Singleton class declare typings (#3522) (mars <<marshalys@gmail.com>>)
* [[`981bad58b`](http://github.com/eggjs/egg/commit/981bad58ba6c4644b8bbbd818a43bf0dd62e206f)] - fix: empty querystring must be cached (#3535) (Yiyu He <<dead_horse@qq.com>>)
## 2019-03-07, Version 2.20.0 @popomore
### Notable changes
* **features**
* support customLoader
* **chore**
* fix typo
* fix testcase
### Commits
* [[`4cf06da27`](http://github.com/eggjs/egg/commit/4cf06da272a3f71b864efb6780ddfe2e6c1ad37c)] - feat: support customLoader (#3484) (Haoliang Gao <<sakura9515@gmail.com>>)
* [[`2f2bd69bb`](http://github.com/eggjs/egg/commit/2f2bd69bb5a5ef5f9d45514c0640f3849bc64293)] - chore:Fix some typos in Chinese and English (#3514) (Maledong <<maledong_github@outlook.com>>)
* [[`65bdd158c`](http://github.com/eggjs/egg/commit/65bdd158caf38abfc945de9aad8367a8567b1a18)] - Fix(cluster-client.test.js):Rollback to previous (#3507) (Maledong <<maledong_github@outlook.com>>)
## 2019-02-28, Version 2.19.0 @dead-horse
### Notable changes
* **features**
* single mode support ignore warning
* **fixes**
* fix type defined
### Commits
* [[`18efac152`](http://github.com/eggjs/egg/commit/18efac152dd5cf789d1e79b1c1fb1fb4ec2013a1)] - feat: single mode support ignore warning (#3501) (Yiyu He <<dead_horse@qq.com>>)
* [[`f9eea2a4d`](http://github.com/eggjs/egg/commit/f9eea2a4da805a1b2f0e8883860266d68eb432ff)] - fix(types): getFileStream options types (#3500) (kayikay <<469797590@qq.com>>)
## 2019-02-26, Version 2.18.0 @dead-horse
### Notable changes
* **features**
* cluster-client support single process mode
* **fixes**
* fix type defined
### Commits
* [[`db1093128`](http://github.com/eggjs/egg/commit/db10931281dd39106e5c657e358117abd39b2103)] - feat: cluster-client support single cpu mode (#3497) (zōng yǔ <<gxcsoccer@users.noreply.github.com>>)
* [[`f7e6ab535`](http://github.com/eggjs/egg/commit/f7e6ab535df378b35dfe6b6b49d7e009dc2bcf3f)] - doc (typescript.md): Chinese translation for the beginning of TypeScript's Introduction (#3488) (Maledong <<maledong_github@outlook.com>>)
* [[`ac7e9a6b6`](http://github.com/eggjs/egg/commit/ac7e9a6b6d732d946dc238d9bad3eaabb81a1b70)] - fix: helper type (#3483) (吖猩 <<whxaxes@qq.com>>)
## 2019-02-21, Version 2.17.0 @dead-horse
### Notable changes
* **features**
* agent context can be extended
* **fixes**
* createAnonymousContext add host in headers
### Commits
* [[`7147b23cf`](http://github.com/eggjs/egg/commit/7147b23cf7edaa98a8f009d98de7ef2aaa5303a0)] - feat: agent context can be extended (#3478) (Hongcai Deng <<admin@dhchouse.com>>)
* [[`a2f0d9620`](http://github.com/eggjs/egg/commit/a2f0d96204e05f11c5586ff0fa9441f4e3ab5dff)] - fix: createAnonymousContext add host in headers (#3477) (Yiyu He <<dead_horse@qq.com>>)
* [[`5952d1240`](http://github.com/eggjs/egg/commit/5952d12404ae896a2338ee4ee79d68876ffbb205)] - docs(typescript): fix wrong path of LifeCycle (#3475) (CHANG, TZU-YEN <<try_love_tom@icloud.com>>)
## 2019-02-18, Version 2.16.2 @dead-horse
### Notable changes
* **fixes**
* fix: messenger in single process mode support send without `to`
### Commits
* [[`eac494184`](http://github.com/eggjs/egg/commit/eac4941846948ca6bb8a357d525ad82737425005)] - fix: support send without to argument (#3472) (Yiyu He <<dead_horse@qq.com>>)
## 2019-02-15, Version 2.16.1 @atian25
### Notable changes
* **docs**
* remove declaration of view
* **others**
* update dependencies
### Commits
* [[`1e859f2e2`](http://github.com/eggjs/egg/commit/1e859f2e200260cab95ac0b860d85609eb3eec06)] - feat(types): remove declaration of view (#3466) (吖猩 <<whxaxes@qq.com>>)
* [[`4a3ab5ac0`](http://github.com/eggjs/egg/commit/4a3ab5ac0324537fc3cdbcc0e84e3085b8a34586)] - deps: update dependencies (#3464) (Yiyu He <<dead_horse@qq.com>>)
## 2019-02-14, Version 2.16.0 @dead-horse
### Notable changes
* **features**
* allow ctx.router setter
* **others**
* more document improvement
### Commits
* [[`0b67c85f6`](http://github.com/eggjs/egg/commit/0b67c85f6f1798b2d3f377fb5ea336c96b60b6e3)] - feat: allow ctx.router setter (#3460) (fengmk2 <<fengmk2@gmail.com>>)
* [[`ae5f56f3e`](http://github.com/eggjs/egg/commit/ae5f56f3e9b60eaa3507db44736020f3a13ec6f1)] - chore: Add principles for English titles and change all English titles (#3444) (Maledong <<maledong_github@outlook.com>>)
* [[`a9bee07da`](http://github.com/eggjs/egg/commit/a9bee07daff1530da7350f9ad1ea56e21aa3eead)] - docs(sequelize): fix init doc (#3456) (Yiyu He <<dead_horse@qq.com>>)
* [[`f76c23052`](http://github.com/eggjs/egg/commit/f76c23052c86afcf158087f8b13a7e47ef76f67c)] - docs(logger): add logger.outputJSON to docs (#3425) (FX <<friskfly@gmail.com>>)
## 2019-02-04, Version 2.15.1 @dead-horse
### Notable changes
* **fixes**
* add missing framework support for single process mode
### Commits
* [[`277c024cf`](http://github.com/eggjs/egg/commit/277c024cf565948547dbc7a518d39d7f55318f58)] - fix: add missing framework support for single process mode (#3445) (Yiyu He <<dead_horse@qq.com>>)
## 2019-02-03, Version 2.15.0 @dead-horse
### Notable changes
* **features**
* [EXPERIMENT FEATURE] support single process mode
* **fixes**
* [TYPE] array supporting for config.static.dir
* [TYPE] fix IMiddleware type is incompatible
* [TYPE] fix type error while esModuleInterop is true
* **others**
* more document improvement
### Commits
* [[`83c423a0a`](http://github.com/eggjs/egg/commit/83c423a0a985e701bfaef7f10372268b4ce8cef5)] - docs(development.md): Add English translation (Jennie <<jennie.ji@hotmail.com>>)
* [[`d79da17bd`](http://github.com/eggjs/egg/commit/d79da17bdbe94f7b78d923caa10abf21e6c5f752)] - fix: type error while esModuleInterop is true (#3436) (吖猩 <<whxaxes@qq.com>>)
* [[`20ba4632b`](http://github.com/eggjs/egg/commit/20ba4632ba32e3b81e760678b4bbe00cdf05388e)] - feat: support single process mode (#3430) (Yiyu He <<dead_horse@qq.com>>)
* [[`133616961`](http://github.com/eggjs/egg/commit/133616961e5a2e95d5e2cd1254d7304c846b859c)] - docs: fix typo in socketio.md (#3431) (kilmas <<kilmas@qq.com>>)
* [[`e899630e9`](http://github.com/eggjs/egg/commit/e899630e97865701b81d428686a19288b1c87b98)] - fix: array supporting for config.static.dir (#3421) (Gray <<njugray@gmail.com>>)
* [[`43f2e3c44`](http://github.com/eggjs/egg/commit/43f2e3c449a7b448506d2484ed729618b06bffec)] - fix: IMiddleware type is incompatible (#3419) (吖猩 <<whxaxes@qq.com>>)
* [[`b3256b54e`](http://github.com/eggjs/egg/commit/b3256b54eeb09b2cee3cfdb75e98d6c090844a10)] - doc:Add new loaderUpdate.md (#3395) (Maledong <<maledong_github@outlook.com>>)
* [[`71768002a`](http://github.com/eggjs/egg/commit/71768002a468a8fd30b9516c0bed85fa27b99b0a)] - docs: Wrong words are corrected (#3418) (巧克力冰激凌 <<121017405@qq.com>>)
* [[`20d56c7a8`](http://github.com/eggjs/egg/commit/20d56c7a83a74bb81ee47b0b8c2785db15519996)] - fix: fix ts ci (#3416) (吖猩 <<whxaxes@qq.com>>)
* [[`8beacd13e`](http://github.com/eggjs/egg/commit/8beacd13e3bcfff6b6a1e02eea72cafdd343858c)] - docs(logger): add logger.disableConsoleAfterReady to docs (#3384) (吖猩 <<whxaxes@qq.com>>)
* [[`271bc6372`](http://github.com/eggjs/egg/commit/271bc63722723531556bbec06d621f964ad1db33)] - chore: typo "submit an PR" should be "submit a PR" (#3408) (DAI JIE <<daijie@php.net>>)
* [[`688f67c9f`](http://github.com/eggjs/egg/commit/688f67c9f329c71ea4469b9d28d5ee41815831ed)] - Chore: Fix some chore issues (#3400) (Maledong <<maledong_github@outlook.com>>)
* [[`cfcebc623`](http://github.com/eggjs/egg/commit/cfcebc6234c62780c6aecf84db3862efd74e430c)] - doc (typescript.md): Sync the English translation (#3397) (Maledong <<maledong_github@outlook.com>>)
* [[`7e5ef2181`](http://github.com/eggjs/egg/commit/7e5ef21811f98e5d55884f2574092e6f2e7b619b)] - docs(typescript): optimize docs of typescript (#3374) (吖猩 <<whxaxes@qq.com>>)
* [[`2a801f789`](http://github.com/eggjs/egg/commit/2a801f789f6e60427657b507951de8fc8e4a830f)] - chore: comments typo fix (#3392) (Jeff <<jeff.tian@outlook.com>>)
* [[`9a4b72062`](http://github.com/eggjs/egg/commit/9a4b7206212a27d37a37a1d68b4739be306b1a7a)] - chore: fix issue template (#3369) (Suyi <<thonatos@users.noreply.github.com>>)
* [[`ef73396a5`](http://github.com/eggjs/egg/commit/ef73396a5828c6b4e55c85cd2b27c3830bd306e5)] - docs: improve debug docs (#3370) (TZ | 天猪 <<atian25@qq.com>>)
* [[`874e57fda`](http://github.com/eggjs/egg/commit/874e57fda480d3295c1b1b30198ca3493f57814d)] - docs(sequelize): fix init (#3372) (Yiyu He <<dead_horse@qq.com>>)
* [[`b2152c56f`](http://github.com/eggjs/egg/commit/b2152c56f525a87fe0c1cfe66949005f308e1569)] - Chore: Fix some typo translations (#3361) (Maledong <<maledong_github@outlook.com>>)
* [[`d275929d1`](http://github.com/eggjs/egg/commit/d275929d17830c95a2c828611b5ca54ffb747270)] - docs(boot): update app start document (#3348) (Yiyu He <<dead_horse@qq.com>>)
* [[`9a8652beb`](http://github.com/eggjs/egg/commit/9a8652bebc29f3d097039196b10daa2575f49695)] - Fix: Change the diagram of "starting process" (#3358) (Maledong <<maledong_github@outlook.com>>)
* [[`ac0f13bc6`](http://github.com/eggjs/egg/commit/ac0f13bc604ebfc08185b336a106ec7e5d1bc98f)] - Chore: Add missing links for "Sails" and union the spellings of "Plugin" (#3356) (Maledong <<maledong_github@outlook.com>>)
* [[`cd52b063b`](http://github.com/eggjs/egg/commit/cd52b063b60e15bc78c440fdebc00ddd3dca9909)] - docs(cluster-and-ipc.md): fix typos and formatting errors (#3357) (Darren Poon <<dyhpoon@gmail.com>>)
* [[`37e3c1aba`](http://github.com/eggjs/egg/commit/37e3c1abab31f47fc492574464657a57ff686b2b)] - Chroe: Fix something in articles (#3349) (Maledong <<maledong_github@outlook.com>>)
## 2018-12-20, Version 2.14.2 @atian25
### Notable changes
* **fixes**
* fix d.ts context declaration not works
* **docs**
* more document improvement
### Commits
* [[`edfe66093`](http://github.com/eggjs/egg/commit/edfe66093c9ffe730ffd9804da1e2b264a48c38e)] - fix: Add comments for re-writing properties from Koa (#3332) (Maledong <<maledong_github@outlook.com>>)
* [[`f312db78f`](http://github.com/eggjs/egg/commit/f312db78fc330da2bfe6efdb0f095d7b3b363beb)] - fix: fix context declaration not works (#3329) (Axes <<whxaxes@qq.com>>)
* [[`ef47a2746`](http://github.com/eggjs/egg/commit/ef47a274625a6ae8696857bef01b2c679dd65395)] - docs: fix config heading level (#3327) (Suyi <<thonatos@users.noreply.github.com>>)
* [[`cddd91ded`](http://github.com/eggjs/egg/commit/cddd91ded2fac1395487e2847caaf92afaafcf8e)] - chore: adjust template (TZ <<atian25@qq.com>>)
* [[`7319727a0`](http://github.com/eggjs/egg/commit/7319727a0b8a4fa210746ac201631a4b7db4359b)] - chore: Update issue templates (#3326) (TZ | 天猪 <<atian25@qq.com>>)
* [[`0cb246e26`](http://github.com/eggjs/egg/commit/0cb246e2663a288395a013ee78a1b34ab5b7c641)] - doc: Fix some translations with some icons (#3315) (Maledong <<maledong_github@outlook.com>>)
* [[`9dc20377e`](http://github.com/eggjs/egg/commit/9dc20377e18e53278bcfac037e15a5a761cccdb3)] - doc: session special usage tip (#3304) (Jerry Wu <<perzy_wu@163.com>>)
* [[`6f4e91274`](http://github.com/eggjs/egg/commit/6f4e91274daa0685ba0ed8983ad5b6fd457322bc)] - docs: Update httpclient.md (#3276) (Albert <<shuaizhexu@gmail.com>>)
* [[`64e88abfd`](http://github.com/eggjs/egg/commit/64e88abfd24d50096aa2d4ef442aafd46101429a)] - docs(egg-passport): add redirection desc while auth succeed (#3260) (Suyi <<thonatos@users.noreply.github.com>>)
## 2018-11-24, Version 2.14.1 @atian25
### Notable changes
* **fixes**
* remove timeout log msg
* **others**
* use circular-json-for-egg to remove deprecate message
### Commits
* [[`0fb5a96c0`](http://github.com/eggjs/egg/commit/0fb5a96c023e916cb9c14c5960df62547ed391d8)] - fix: remove timeout log msg (#3229) (TZ | 天猪 <<atian25@qq.com>>)
* [[`de81caef1`](http://github.com/eggjs/egg/commit/de81caef1d91c229effadd25ddf752297c2a08f5)] - deps: use circular-json-for-egg to remove deprecate message (#3211) (Yiyu He <<dead_horse@qq.com>>)
## 2018-11-17, Version 2.14.0 @dead-horse
### Notable changes
* **features**
* add create anonymous context to agent
* support server timeout
* **fixes**
* curl: allow request timeout bigger than agent timeout
* triggerServerDidReady should be triggered only once
### Commits
* [[`db999d3f7`](http://github.com/eggjs/egg/commit/db999d3f7afa210c855f3f1a4518e83f7d8c1dc6)] - docs: add serverTimeout to d.ts (#3200) (TZ | 天猪 <<atian25@qq.com>>)
* [[`a43fef4e1`](http://github.com/eggjs/egg/commit/a43fef4e1828937d3d84469989582df273de1493)] - docs(index.d.ts): curl 增加泛型 (#3197) (The Rock <<simonzhong0924@gmail.com>>)
* [[`d40124a25`](http://github.com/eggjs/egg/commit/d40124a25fcd1b52ab862ee297139a022458b81d)] - feat: add create anonymous context to agent (#3193) (Hongcai Deng <<admin@dhchouse.com>>)
* [[`9dfd19ead`](http://github.com/eggjs/egg/commit/9dfd19eada8bae7be212155a2989d0ccc410e8eb)] - fix: triggerServerDidReady should be triggered only once (#3190) (killa <<killa123@126.com>>)
* [[`7802528e1`](http://github.com/eggjs/egg/commit/7802528e122691eb2cb78174e1c1490d0a382c08)] - feat: support server timeout (#3133) (TZ |
天猪 <<atian25@qq.com>>)
* [[`ff79101b5`](http://github.com/eggjs/egg/commit/ff79101b592d59ad12d110dd26dd7fa3d044b968)] - docs: Update service.md (#3191) (肖金 <<xiaojin1992@126.com>>)
* [[`327fa174f`](http://github.com/eggjs/egg/commit/327fa174ffd74a67a77520d839eac282c916e8c0)] - fix: allow request timeout bigger than agent timeout (#3146) (fengmk2 <<fengmk2@gmail.com>>)
* [[`86093c03a`](http://github.com/eggjs/egg/commit/86093c03a822a2b925de94cfda96198dc8159ade)] - docs: remove promo logo (#3176) (Suyi <<thonatos@users.noreply.github.com>>)
## 2018-11-07, Version 2.13.0 @mansonchor
### Notable changes
* **feature**
* emit event when runInBackground catch error
* **perf**
* better TypeScript support
* **docs**
* supplement documentation
### Commits
* [[`03378b8c3`](https://github.com/mansonchor/egg.git/commit/03378b8c3e48e7000a580a4acf5375f9ffcac4dc)] - docs(plugin.md): fix 'path' declaration example (#3152) (maigozhang <<zhangsnxiang@126.com>>)
* [[`3c25221bd`](https://github.com/mansonchor/egg.git/commit/3c25221bd24a0a39cd06540fad46884e4dda363c)] - chore: use is.string() in utils.js for consistency (#3153) (ZYSzys <<zyszys98@gmail.com>>)
* [[`a9b0fcec6`](https://github.com/mansonchor/egg.git/commit/a9b0fcec636f7241d0f578dca6b99444dabfeb83)] - chore(typings): add method `beforeClose` in index.d.ts (#3120) (Erona <<erona@loli.bz>>)
* [[`4709db746`](https://github.com/mansonchor/egg.git/commit/4709db746d8f97de99c04558f1ba86443e394668)] - feature(context): emit event when runInBackground catch error (#3118) (mansonchor <<mansonchor@126.com>>)
* [[`e1dc2a7a4`](https://github.com/mansonchor/egg.git/commit/e1dc2a7a409a8bf56a817773229d5fc6dcde796b)] - docs: add promo logo (#3113) (Haoliang Gao <<sakura9515@gmail.com>>)
* [[`51e9c1578`](https://github.com/mansonchor/egg.git/commit/51e9c1578496ed2afb44c47fdfd77867a95fec52)] - chore(typings): add interface IBoot (#3098) (killa <<killa123@126.com>>)
* [[`8052d7ff7`](https://github.com/mansonchor/egg.git/commit/8052d7ff7bf6278e8ce4b4de46e0e6324d0d3861)] - doc: Update the `configWillLoad` explainations (#3116) (Maledong <<maledong_github@outlook.com>>)
* [[`c3c4e2e3e`](https://github.com/mansonchor/egg.git/commit/c3c4e2e3e04a924595d6837ab15c7b292e3529f6)] - docs: add configWillLoad to lifecycle (#3101) (fengmk2 <<fengmk2@gmail.com>>)
* [[`4abdb4980`](https://github.com/mansonchor/egg.git/commit/4abdb49801ebb3075b408d6fb3b72eba1a70c056)] - docs(CONTRIBUTION): Add missing link for `Accquire the submitted files` (#3102) (Maledong <<maledong_github@outlook.com>>)
* [[`c7061ec62`](https://github.com/mansonchor/egg.git/commit/c7061ec6255faa250c6565a4c102f64c0498683c)] - fix(docs): Grammar of "lots of" (#3100) (waiting <<waiting@xiaozhong.biz>>)
* [[`92181e83f`](https://github.com/mansonchor/egg.git/commit/92181e83f98d55bd1a796a871ab5d438d02c8e84)] - doc (CONTRIBUTION): Add missing English translations and clearify dns (#3035) (Maledong <<maledong_github@outlook.com>>)
* [[`0a7497987`](https://github.com/mansonchor/egg.git/commit/0a7497987067ce1c3376dfc30676c35f484a5ccc)] - doc(logger.md): Fix incorrect description on default log output level. (#3082) (TX-Kunkun <<eiclkun@gmail.com>>)
## 2018-10-08, Version 2.12.0 @dead-horse
### Notable changes
* **feature**
* add Subscription base class on app instance
* **fix**
* upgrade to egg-logger@2, don't write log when stream was destroyed.
* pin circular-json@0.5.5 to avoid output deprecate message
* **docs**
* corrected lots of documentation errors, thanks @Maledong
* use egg-logger definition
### Commits
* [[`eb1eae736`](http://github.com/eggjs/egg/commit/eb1eae736c0fc541e6d21fb726d52d971d6a95da)] - refactor(typescript): use egg-logger definition (#3078) (Haoliang Gao <<sakura9515@gmail.com>>)
* [[`04d9a3b85`](http://github.com/eggjs/egg/commit/04d9a3b85ef54819c0ad3ac505e7806db6a7e9b3)] - deps: egg-logger@2 (#3073) (Yiyu He <<dead_horse@qq.com>>)
* [[`886d9ad8f`](http://github.com/eggjs/egg/commit/886d9ad8fd11e1fbbd1712dd53ef464658f525b5)] - feat: add Subscription base class on app instance (#3058) (fengmk2 <<fengmk2@gmail.com>>)
* [[`4c6fb2a17`](http://github.com/eggjs/egg/commit/4c6fb2a175c2481aa61aaad131f6812517bc7022)] - doc (socket.io): Make 'uws' cannot use anymore clear (#3068) (Maledong <<maledong_github@outlook.com>>)
* [[`0d6798d22`](http://github.com/eggjs/egg/commit/0d6798d22d0e5016b0f7f25e5fa15ffe6900e16c)] - docs (Controller.md): Add new feat description (#3066) (Maledong <<maledong_github@outlook.com>>)
* [[`399902680`](http://github.com/eggjs/egg/commit/39990268081d1da3fdb2d575802ea46cdf67bcd5)] - doc(typescript.md): Clarify the middleware's usages (#3039) (Maledong <<maledong_github@outlook.com>>)
* [[`6bf812f73`](http://github.com/eggjs/egg/commit/6bf812f73603e967e405a815dcb2cc94dcb8384c)] - chore: fix middleware docs typo (#3060) (TZ | 天猪 <<atian25@qq.com>>)
* [[`b13d904d3`](http://github.com/eggjs/egg/commit/b13d904d302639c3b6068f109d4bcfa5aff12c61)] - test: avoid DNS pollution on local env (#3034) (fengmk2 <<fengmk2@gmail.com>>)
* [[`bace2433b`](http://github.com/eggjs/egg/commit/bace2433bcc96d1507403c34711b2a2e450e6a6a)] - fix: remove loader.loadBootHook (Yiyu He <<dead_horse@qq.com>>)
* [[`6a7db2a35`](http://github.com/eggjs/egg/commit/6a7db2a3591a03b187bc3b52c67b37fde7984d34)] - doc (objects.md): Fix number and code errors (#3029) (Maledong <<maledong_github@outlook.com>>)
* [[`c65a64899`](http://github.com/eggjs/egg/commit/c65a648991900b95a8ef0b21dcd8e3f715523df7)] - doc (TypeScript): Formation errors with missing translations (#3020) (Maledong <<maledong_github@outlook.com>>)
* [[`abd8d1286`](http://github.com/eggjs/egg/commit/abd8d12861e17ff8fe5e950d589c00d17625beae)] - deps: pin circular-json@0.5.5 to avoid output deprecate message (#3023) (Yiyu He <<dead_horse@qq.com>>)
* [[`e3ffcbe64`](http://github.com/eggjs/egg/commit/e3ffcbe6449b95b50ea40583a28383e734c72fe1)] - docs (typescript.md): Add missing trans in English for TypeScript (#2998) (Maledong <<maledong_github@outlook.com>>)
## 2018-09-19, Version 2.11.2 @XadillaX
### Notable changes
* **fix**
* typescript: add missing 'ignore', 'match'
* **refactor**
* separate dumping config object and config file
### Commits
* [[`1d30166e0`](http://github.com/eggjs/egg/commit/1d30166e037e8890fc850e51bdba02af76772485)] - refactor: separate dumping config object and config file (#3014) (Khaidi Chu <<i@2333.moe>>)
* [[`e3f183e96`](http://github.com/eggjs/egg/commit/e3f183e9658e603c74850376f2257bd88bc4a043)] - fix (typescript): Add missing 'ignore','match' (#3010) (Maledong <<maledong_github@outlook.com>>)
## 2018-09-14, Version 2.11.1 @popomore
### Notable changes
* **fix**
* httpclient: can't use runInBackground in agent
* **deps**
* upgrade to debug@4 and coffee@5
### Commits
* [[`eed74e861`](http://github.com/eggjs/egg/commit/eed74e8610e1ea189beed1c3526b38f0b59c48ab)] - chore: update deps, debug@4 and coffee@5 (#2995) (TZ | 天猪 <<atian25@qq.com>>)
* [[`a8a3dfb04`](http://github.com/eggjs/egg/commit/a8a3dfb04f11b1c48ed1f01154e4d4311bfafa4b)] - fix(httpclient): can't use runInBackground in agent (#3003) (Haoliang Gao <<sakura9515@gmail.com>>)
* [[`4faf68f4b`](http://github.com/eggjs/egg/commit/4faf68f4b6dad160a151b3d76041a0521261b530)] - doc (loader.md): Add missing English translations (#2996) (Maledong <<maledong_github@outlook.com>>)
## 2018-09-11, Version 2.11.0 @atian25
### Notable changes
* **feature**
* support boot lifecycle, see https://github.com/eggjs/egg/issues/2520
* `dnshttpclient` now use async function instead of Promise
* **fix**
* don't log when rawPacket is empty
* **docs**
* add sequelize guide docs
* more document and typings improvement
### Commits
* [[`0d876c71a`](http://github.com/eggjs/egg/commit/0d876c71a9c4862b93cb039f564ae3d3171e1cad)] - feat: support boot lifecyle (#2972) (killa <<killa123@126.com>>)
* [[`b02ce1547`](http://github.com/eggjs/egg/commit/b02ce154777fc78a6d344fe45d915d013096bea3)] - chroe(doc): Fix some typos (#2988) (Maledong <<maledong_github@outlook.com>>)
* [[`688067ae0`](http://github.com/eggjs/egg/commit/688067ae09071316cbf5310b17d92d4fec39b42a)] - docs: fix 2 typos (#2982) (Jeff <<jeff.tian@outlook.com>>)
* [[`a719fd345`](http://github.com/eggjs/egg/commit/a719fd34507ebbfcf800768fb58adc81aa9c5e36)] - docs: Fix and add missing typos (#2935) (Maledong <<maledong_github@outlook.com>>)
* [[`815c27879`](http://github.com/eggjs/egg/commit/815c278792e94ccf85822b3496f10396236e6628)] - fix (typings): Upgrade to the latest version of 'egg-cookie' to fetch (#2958) (Maledong <<maledong_github@outlook.com>>)
* [[`a2df5ad13`](http://github.com/eggjs/egg/commit/a2df5ad137dea5faf7724d480edcc482a1df9393)] - docs: fixed typo. (#2961) (Ariel Yang <<arielyang@gmail.com>>)
* [[`b971e6633`](http://github.com/eggjs/egg/commit/b971e66336af4c8e241303866c8fa9acaaf4e66f)] - test: fix sitefile icon test (#2940) (Yiyu He <<dead_horse@qq.com>>)
* [[`81826ed1a`](http://github.com/eggjs/egg/commit/81826ed1a826a3436f8c42b7b5466295c60f241e)] - docs: fix link to angular commit-message-format (#2939) (Vincent <<santochance@users.noreply.github.com>>)
* [[`45e302459`](http://github.com/eggjs/egg/commit/45e30245952619e4ed95867b2f76b0bdd06e94cc)] - fix: don't log when rawPacket is empty (#2924) (Haoliang Gao <<sakura9515@gmail.com>>)
* [[`db1286de7`](http://github.com/eggjs/egg/commit/db1286de73de2cd987dc8f28c0616e9a683824a6)] - chore(typings): add class EggLoader (#2321) (waiting <<waiting@xiaozhong.biz>>)
* [[`80528ccec`](http://github.com/eggjs/egg/commit/80528cceced500b5ae49ebf6d9df242ba2ce5ea4)] - refactor(dnshttpclient): use async function instead of Promise (#2774) (Haoliang Gao <<sakura9515@gmail.com>>)
* [[`fe9e95654`](http://github.com/eggjs/egg/commit/fe9e9565472c7de9ff8dfb8894917764fe26fa0b)] - doc (package.json,README.zh-CN): Fix some typos (#2927) (Maledong <<maledong_github@outlook.com>>)
* [[`289e96278`](http://github.com/eggjs/egg/commit/289e96278359a1468e366a6f3f7b2094dd3b7d6c)] - docs(sequelize): hostname shoule be host (#2921) (Will <<1078954008@qq.com>>)
* [[`72cd808b8`](http://github.com/eggjs/egg/commit/72cd808b86f37847cf340d88ec4eb73b9d7a7aa0)] - docs: fix sequelize link (#2909) (Yiyu He <<dead_horse@qq.com>>)
* [[`ae9ec30b4`](http://github.com/eggjs/egg/commit/ae9ec30b410bba3f8a99ba741e59fdb13e51c806)] - docs: add sequelize (#2902) (Yiyu He <<dead_horse@qq.com>>)
* [[`68135608b`](http://github.com/eggjs/egg/commit/68135608b3518b7d3dbd852453061179f63d5e4f)] - docs(deployment): fix typo on grep (#2898) (Baffin Lee <<baffinlee@gmail.com>>)
* [[`6bfe70b3d`](http://github.com/eggjs/egg/commit/6bfe70b3d64206c85dea19c308abb40c46c6e347)] - doc (en,zh-cn): Fix translations error (#2885) (Maledong <<maledong_github@outlook.com>>)
* [[`96ed020ce`](http://github.com/eggjs/egg/commit/96ed020ce04919049181808cee217029586d11c3)] - docs: fix config and socketio error (#2884) (Suyi <<thonatos@users.noreply.github.com>>)
## 2018-08-06, Version 2.10.0 @fengmk2
### Notable changes
* **feature**
* allow runInBackground reuse on plugins
* use Math.floor instead of parseInt
* **fix**
* use cache-content-type
* **docs**
* add lifecycle doc
* add sequelize guide
* add allowDebugAtProd in document
* egg-scripts support windows
* schedule add env description
* more document and typings improvement
### Commits
* [[`ff7431d5c`](http://github.com/eggjs/egg/commit/ff7431d5c4ea1e1d40fd7e3656dc5ab52ca55726)] - feat: allow runInBackground reuse on plugins (#2872) (fengmk2 <<fengmk2@gmail.com>>)
* [[`422b342b1`](http://github.com/eggjs/egg/commit/422b342b1fa419db145323927f4f2d2a8996b7fb)] - feat: Update index.d.ts (#2853) (Ben <<ben@zfben.com>>)
* [[`2ca8f0184`](http://github.com/eggjs/egg/commit/2ca8f018473274fa544234c91fc608fa9bf09032)] - feat(typings): define Messenger['on'] and Messenger['once'] (#2763) (waiting <<waiting@xiaozhong.biz>>)
* [[`9f8926d7c`](http://github.com/eggjs/egg/commit/9f8926d7cc55ae103b6a37751538870cc70aa12d)] - fix: use cache-content-type (#2793) (Yiyu He <<dead_horse@qq.com>>)
* [[`033fe0ce1`](http://github.com/eggjs/egg/commit/033fe0ce1d39bd63346de1ec60c97b159be867aa)] - docs: optimize egg-validate usage (#2852) (Sean Zou <<405495715@qq.com>>)
* [[`c0b0bb834`](http://github.com/eggjs/egg/commit/c0b0bb8345df83bbd2949b0af34bb397b5185e17)] - docs(session): fix bug in example code of modify session value (#2824) (Baffin Lee <<baffinlee@gmail.com>>)
* [[`b55b303ed`](http://github.com/eggjs/egg/commit/b55b303eddbaf545cdb06fd81df624fd3070110a)] - test: test on travis with node 10 (#2461) (Yiyu He <<dead_horse@qq.com>>)
* [[`38a472f24`](http://github.com/eggjs/egg/commit/38a472f24cf68acb9c64fafa2e4374115d578220)] - docs: add allowDebugAtProd in document (#2803) (Yiyu He <<dead_horse@qq.com>>)
* [[`e86669937`](http://github.com/eggjs/egg/commit/e866699379bc570f8bfcef9a090f1bdb5cddee32)] - perf: use Math.floor instead of parseInt (Eason <<tobewhatwewant@gmail.com>>)
* [[`67d538e0e`](http://github.com/eggjs/egg/commit/67d538e0e175e96fe2a64b9c8d17b063537236f7)] - docs(plugin): add details for plugin.js (#2780) (TZ | 天猪 <<atian25@qq.com>>)
* [[`8d0b29cc9`](http://github.com/eggjs/egg/commit/8d0b29cc9b0a3b8eefad1ab64a05478c81709144)] - docs(deployment): egg-scripts support windows (#2788) (Baffin Lee <<baffinlee@gmail.com>>)
* [[`aaf8faf4f`](http://github.com/eggjs/egg/commit/aaf8faf4fd8d813c7938baa1533d768b9d205fc7)] - test: skip test (#2773) (Haoliang Gao <<sakura9515@gmail.com>>)
* [[`eb70335bd`](http://github.com/eggjs/egg/commit/eb70335bd61b6887ffeb33f103340b89c857312a)] - docs(schedule): add env description (#2753) (TZ | 天猪 <<atian25@qq.com>>)
* [[`ef20ff756`](http://github.com/eggjs/egg/commit/ef20ff75633b6e83b115d32af603d0f4f34cb1e1)] - docs: add http://www.sofastack.tech (#2752) (Haoliang Gao <<sakura9515@gmail.com>>)
* [[`1ecb521c5`](http://github.com/eggjs/egg/commit/1ecb521c50b6238397f9a0b628448c0d2b5ec4fa)] - doc: add lifecyle doc (#2708) (killa <<killa123@126.com>>)
* [[`7930f0419`](http://github.com/eggjs/egg/commit/7930f0419fee741bcf6de73693bcdf1e9986f31e)] - docs: fix ws engine error (#2717) (Suyi <<thonatos@users.noreply.github.com>>)
## 2018-06-14, Version 2.9.1 @dead-horse
### Notable changes
* **perf**
* improve set type performance
* **docs**
* fix socketio's browser demo
* add Messenger in tsd
### Commits
* [[`1a820bd44`](http://github.com/eggjs/egg/commit/1a820bd4408b36cf3e48eda62f392006081c17a3)] - perf: improve set type performance by lru cache (#2697) (fengmk2 <<fengmk2@gmail.com>>)
* [[`239ce03ef`](http://github.com/eggjs/egg/commit/239ce03efaf60d3d961ced29cf4bf95e44bde2db)] - docs: fix socketio's browser demo (#2645) (xcold <<lxstart@outlook.com>>)
* [[`73ca1b7a3`](http://github.com/eggjs/egg/commit/73ca1b7a3ef6546d4f8a3d227055121a93b80188)] - chore(typings): add Messenger (#2688) (waiting <<waiting@xiaozhong.biz>>)
## 2018-06-01, Version 2.9.0 @popomore
### Notable changes
* **feature**
* dump timing data for loader
* **fix**
* the default value of config.allowDebugAtProd is false
* make definition of app.locals and ctx.locals definitions merge available
* add key any to Context in typescript define
* **docs**
* more document improvement
### Commits
* [[`e5737d545`](http://github.com/eggjs/egg/commit/e5737d5455d536b908f37ba367446e511f30e663)] - fix: add key any to Context (#2650) (Axes <<whxaxes@qq.com>>)
* [[`65a43aa9e`](http://github.com/eggjs/egg/commit/65a43aa9e47ad2f799e328e4e0ab91a63669c5e3)] - feat: dump timing data for loader (#2521) (#2621) (Haoliang Gao <<sakura9515@gmail.com>>)
* [[`48c6d3c9d`](http://github.com/eggjs/egg/commit/48c6d3c9d524e1cbba3e301e6613436741696cc0)] - fix: typo (#2615) (Yanan Che <<cynosurech@gmail.com>>)
* [[`c91e67cc0`](http://github.com/eggjs/egg/commit/c91e67cc0246a22efee126ebd01866b05b8312dc)] - docs(logger): the unit of maxFileSize should be byte (#2575) (Haoliang Gao <<sakura9515@gmail.com>>)
* [[`26c274174`](http://github.com/eggjs/egg/commit/26c274174c9a48ef1636933fbb2be9777d38f522)] - docs: tweek doc style (#2613) (Haoliang Gao <<sakura9515@gmail.com>>)
* [[`3ee7fcf12`](http://github.com/eggjs/egg/commit/3ee7fcf1291a4968197fab4648e951176dfa2714)] - docs: fix quickstart typo error (#2578) (Zhuxy <<ghostcode521@gmail.com>>)
* [[`8b7c8bd35`](http://github.com/eggjs/egg/commit/8b7c8bd35f8695f4459cfd623f9961c276e0d5a6)] - docs(d.ts): add property of EggAppConfig.development (#2561) (SinaVee <<sinalvee@gmail.com>>)
* [[`16a61231d`](http://github.com/eggjs/egg/commit/16a61231d12c91ae609e68509d29aac669e1b83c)] - docs: add d.ts for bodyparser (#2548) (wangtao0101 <<yuecjn@gmail.com>>)
* [[`e7696a7d2`](http://github.com/eggjs/egg/commit/e7696a7d2b4bc8eb6fb984aaaa0e0f2422d1c048)] - fix(d.ts): make app.locals and ctx.locals definitions merging available (#2546) (Tony Hawking <<ThaGKI9@outlook.com>>)
* [[`e5d47524e`](http://github.com/eggjs/egg/commit/e5d47524ef96138172c86e774014a6b26d5cac09)] - chroe: Correct an error syntax of English (#2544) (DongWei <<maledong_forwork@foxmail.com>>)
* [[`c0f4bd12d`](http://github.com/eggjs/egg/commit/c0f4bd12d422554351b1d1e9866a7b9bbc444e76)] - fix: config.allowDebugAtProd default to false (ZhangJan <<dsonet@msn.com>>)
* [[`0723cd230`](http://github.com/eggjs/egg/commit/0723cd230514b623c4454120dae988fd5a68ec44)] - docs(cookie): how to get frontend cookie (#2542) (Yiyu He <<dead_horse@qq.com>>)
* [[`9fea64ee9`](http://github.com/eggjs/egg/commit/9fea64ee993de7c3ee2e239d7bba91f5f3b3408a)] - docs: Fix an error link, change a comment into English (#2535) (DongWei <<maledong_forwork@foxmail.com>>)
* [[`e96ddb6a8`](http://github.com/eggjs/egg/commit/e96ddb6a884ef767c8653242c666dcc7381222b7)] - docs: Modifications of comments and full translations (DongWei <<maledong_forwork@foxmail.com>>)
## 2018-05-05, Version 2.8.1 @atian25
### Notable changes
* **docs**
* fix missing d.ts
### Commits
* [[`20356bffc`](http://github.com/eggjs/egg/commit/20356bffcf7e99970b44f230a6fc2a8f9547a380)] - feat(d.ts): add createAnonymousContext & runInBackground (#2501) (Hengfei Zhuang <<zhuanghengfei@gmail.com>>)
* [[`c013ef3e6`](http://github.com/eggjs/egg/commit/c013ef3e64e049c6ef48e29d289f6d756b6ca1f7)] - feat(d.ts): add runSchedule & Subscription define (#2504) (Hengfei Zhuang <<zhuanghengfei@gmail.com>>)
## 2018-05-03, Version 2.8.0 @dead-horse
### Notable changes
* **feature**
* add time duration for dump config
* **fix**
* make singleton work for unextensible or frozen instance
* **docs**
* switch to English document
* add middleware to Application and other ts improvement (typescript)
* update wxapp-socket-io project to weapp.socket.io
* update title and remove unused files
### Commits
* [[`4b602d037`](http://github.com/eggjs/egg/commit/4b602d037554b72c8261b7abb7efd94f8f59f3fe)] - fix: make singleton work for unextensible or frozen instance (#2472) (Yiyu He <<dead_horse@qq.com>>)
* [[`824200c11`](http://github.com/eggjs/egg/commit/824200c11cac8e20b2c275daa7f5a4a365c71259)] - feat: add time duration for dump config (#2485) (Haoliang Gao <<sakura9515@gmail.com>>)
* [[`73dac083d`](http://github.com/eggjs/egg/commit/73dac083d2a029f893e9b6737080c921027e308f)] - docs: update wxapp-socket-io project to weapp.socket.io (#2421) (liuguili <<gongzili456@gmail.com>>)
* [[`1ada8e384`](http://github.com/eggjs/egg/commit/1ada8e3848be9f09680d7cac091fb14206df5a11)] - feat(d.ts): add middleware to Application and other ts improvement (#2465) (Axes <<whxaxes@qq.com>>)
* [[`437785315`](http://github.com/eggjs/egg/commit/437785315f28a828ea0cf7bece80223d5b796dc5)] - docs: fix the code error of LOCALS in view.md (#2464) (zjz19901029 <<346663801@qq.com>>)
* [[`f341b9fb8`](http://github.com/eggjs/egg/commit/f341b9fb8bdf36b6280500578e8448c59aec10f1)] - chore: update title and remove unused files (#2433) (TZ |
天猪 <<atian25@qq.com>>)
* [[`a5ab29cbd`](http://github.com/eggjs/egg/commit/a5ab29cbd1de0f5425019085258a496b4bce8b45)] - docs: switch to English document (#2426) (Haoliang Gao <<sakura9515@gmail.com>>)
* [[`4ab7df25f`](http://github.com/eggjs/egg/commit/4ab7df25f152609d494745eac2794b78e66444f0)] - deps: update dependencies, add @types/urllib to autod config (#2423) (Yiyu He <<dead_horse@qq.com>>)
## 2018-04-17, Version 2.7.1 @dead-horse
### Notable changes
* **fix**
* imporve compatibility of singleton
### Commits
* [[`e4d219f`](http://github.com/eggjs/egg/commit/e4d219f1aaecbca13601c7813e57c67934e8c32b)] - fix: imporve compatibility of singleton (#2410) (Yiyu He <<dead_horse@qq.com>>)
## 2018-04-16, Version 2.7.0 @dead-horse [DEPRECATED]
### Notable changes
* **feature**
* singleton support asynchronous create function
* **fix**
* dump config support circular json
* **docs**
* improve router and typescript
### Commits
* [[`3d499a9`](http://github.com/eggjs/egg/commit/3d499a90bab7095569e115e223de40e63812f2f5)] - docs(plugin): add singleton support async create function (#2392) (Yiyu He <<dead_horse@qq.com>>)
* [[`05d925f`](http://github.com/eggjs/egg/commit/05d925fea4e0b2d8efa48cb01ced2133c0c059cd)] - docs: change English document on Readme (#2397) (Haoliang Gao <<sakura9515@gmail.com>>)
* [[`590bd8c`](http://github.com/eggjs/egg/commit/590bd8cb400845706ec7cc84232b812cb468c8ac)] - fix: dumpConfig support circular json (#2394) (Yiyu He <<dead_horse@qq.com>>)
* [[`3a489b6`](http://github.com/eggjs/egg/commit/3a489b6f47b39ff2ec31efe936504918300b3f08)] - feat(singleton): support async create function (#2382) (Yiyu He <<dead_horse@qq.com>>)
* [[`a5b6731`](http://github.com/eggjs/egg/commit/a5b673133b35e9b005e19c1e3267a2ff3d58e32b)] - docs: chore for router and typescript (#2390) (TZ | 天猪 <<atian25@qq.com>>)
* [[`ee2d2b3`](http://github.com/eggjs/egg/commit/ee2d2b3c33671a822b45a6c474d3710aab5e70d5)] - docs(passport): translation for passport tutorial (#2235) (Cemre Mengu <<cemremengu@gmail.com>>)
* [[`6fad4e1`](http://github.com/eggjs/egg/commit/6fad4e1bed3c388e964fc656244e5e606b258085)] - chore: update package.json for release (#2381) (TZ | 天猪 <<atian25@qq.com>>)
## 2018-04-12, Version 2.6.1 @atian25
### Notable changes
* **docs**
* TypeScript Guide (#2324)
* fix d.ts with ts support
* docs improve
### Commits
* [[`2998bf733`](http://github.com/eggjs/egg/commit/2998bf733268d4d88d5fc77e05943b3fa0f824d4)] - chore(typings): add index signature of EggAppConfig (#2359) (waiting <<waiting@xiaozhong.biz>>)
* [[`5f2358bbd`](http://github.com/eggjs/egg/commit/5f2358bbdd6e21a1ab387a8425d0fefc30954227)] - docs: intro session.renew in the doc (#2375) (Yiyu He <<dead_horse@qq.com>>)
* [[`f0e7773f2`](http://github.com/eggjs/egg/commit/f0e7773f28eb7a233230a847ff2f8bc737aa3c01)] - docs: add TypeScript Guide (#2324) (TZ | 天猪 <<atian25@qq.com>>)
* [[`cd418f57a`](http://github.com/eggjs/egg/commit/cd418f57a843b504dcac6d8c25b99026e1edf072)] - docs(controller): add ctx.redirect (#2373) (Yiyu He <<dead_horse@qq.com>>)
* [[`2fafb16b8`](http://github.com/eggjs/egg/commit/2fafb16b8810e41b86d15f51257c2a0531c78357)] - docs(socketio): update demo & solve problem on chrome (#2354) (Suyi <<thonatos@users.noreply.github.com>>)
* [[`ba708ca4e`](http://github.com/eggjs/egg/commit/ba708ca4e911a345d2ee6aea5d4cf5845f93212b)] - feat: support customized client error (#2283) (Khaidi Chu <<i@2333.moe>>)
* [[`8697140d6`](http://github.com/eggjs/egg/commit/8697140d6ab10f42980ea301e7122331b6e5573a)] - chore: add export to declarations (#2344) (Axes <<whxaxes@qq.com>>)
* [[`441884145`](http://github.com/eggjs/egg/commit/4418841452a20a4fcca212e17dad0fbe9ff97646)] - chore(typings): export PowerPartial (#2327) (waiting <<waiting@xiaozhong.biz>>)
* [[`33d39519e`](http://github.com/eggjs/egg/commit/33d39519e1bd9bb1451776abe4986cdf4dee7626)] - docs(passport): config passport-github behind of proxy (#2318) (Suyi <<thonatos@users.noreply.github.com>>)
* [[`84e0dc4e7`](http://github.com/eggjs/egg/commit/84e0dc4e74e4e907d39b5485e1b19c3900aec393)] - fix(d.ts): add modifier to plugin and add middleware to config (#2322) (Axes <<whxaxes@qq.com>>)
## 2018-04-04, Version 2.6.0 @atian25
### Notable changes
* **feature**
* TypeScript tool support (#2272)
* **docs**
* improve d.ts with ts support (#2306)
* docs improve and translation
### Commits
* [[`406142758`](http://github.com/eggjs/egg/commit/40614275845f49512e80d1c8c00d1997ee91b113)] - chore: improve d.ts with ts support (#2306) (Axes <<whxaxes@qq.com>>)
* [[`7fba689b7`](http://github.com/eggjs/egg/commit/7fba689b73fa46fdf7447844338a7f538ad78665)] - docs(controller): session example bug (#2313) (Suyi <<thonatos@users.noreply.github.com>>)
* [[`e0e7ed146`](http://github.com/eggjs/egg/commit/e0e7ed146adfe932558628b815caa2d8c64d6939)] - chore(typings): change export interface to class definition (#2293) (waiting <<waiting@xiaozhong.biz>>)
* [[`161107929`](http://github.com/eggjs/egg/commit/1611079291ddcf8cc82dba40a2406dcad20b75b5)] - docs(plugin): add config notice for `addSingleton` function (#2305) (Shangbin Yang <<rccoder.net@gmail.com>>)
* [[`1c74a8491`](http://github.com/eggjs/egg/commit/1c74a84918869ec035c5767884501a87cce945d5)] - docs: add assets document (#2220) (Haoliang Gao <<sakura9515@gmail.com>>)
* [[`e4531e563`](http://github.com/eggjs/egg/commit/e4531e563214472e54b4c467e0d2879e6390cb52)] - docs: EN translation for view plugin dev doc (#2240) (Cemre Mengu <<cemremengu@gmail.com>>)
* [[`348ff18d8`](http://github.com/eggjs/egg/commit/348ff18d82e357d9bceba5136c339ef7dfb44bda)] - docs: EN translation for style guide doc (#2239) (Cemre Mengu <<cemremengu@gmail.com>>)
* [[`d9c4ec2bb`](http://github.com/eggjs/egg/commit/d9c4ec2bbb3aa29ddcba2efceec6edfa879267d7)] - EN translation for resources doc (#2238) (Cemre Mengu <<cemremengu@gmail.com>>)
* [[`46217a5d2`](http://github.com/eggjs/egg/commit/46217a5d2e451433ec86614cfb65336300a074d9)] - docs(security): add ssrf in security (#2274) (Yiyu He <<dead_horse@qq.com>>)
* [[`c3586eab5`](http://github.com/eggjs/egg/commit/c3586eab535ee540ffac664f0311c656ef7adca2)] - docs: deprecate ignoreJSON (#2270) (Yiyu He <<dead_horse@qq.com>>)
* [[`a86334c59`](http://github.com/eggjs/egg/commit/a86334c595530c5f4e9cf65204a4591dfd26bcf0)] - docs: example for custom id when mysql update (#2165) (OnedayLiu <<onedayliu552@gmail.com>>)
* [[`10327e185`](http://github.com/eggjs/egg/commit/10327e185015098c9c29747abbaf79a352f975d7)] - docs: EN translation for socketio tutorial doc (#2167) (Cemre Mengu <<cemremengu@gmail.com>>)
* [[`5b059db6a`](http://github.com/eggjs/egg/commit/5b059db6a879abb3ffe7b30e95855afc8a660107)] - docs: add boilerplate type desc (#2250) (QiChang Li <<github@liqichang.com>>)
* [[`9007b5847`](http://github.com/eggjs/egg/commit/9007b5847e67b678f6624da4610b6bdff9457c52)] - chore: update package.json for release (#2244) (Haoliang Gao <<sakura9515@gmail.com>>)
## 2018-03-20, Version 2.5.0 @atian25
### Notable changes
* **feature**
* display router when log app (#2230)
* update `favicon.png`
* upgrade cluster-client to 2.x (#2236)
* **docs**
* improve d.ts
* add socket.io webchat description (#2198)
### Commits
* [[`6040d6f8f`](http://github.com/eggjs/egg/commit/6040d6f8f1a67282ff697c6d86945bc0cb487fe6)] - chore: fix spelling error rotator (#2242) (HE ZIQIANG <<heziqiang@qq.com>>)
* [[`1554da57e`](http://github.com/eggjs/egg/commit/1554da57ef9d8b0fd2cb023a0cc68b50bee6b69f)] - chore: upgrade cluster-client to 2.x (#2236) (zōng yǔ <<gxcsoccer@users.noreply.github.com>>)
* [[`9faa052bf`](http://github.com/eggjs/egg/commit/9faa052bfdffe887c1557126a73a62fe2e462dc5)] - feat: tsd add init module (#2233) (Eward Song <<eward.song@gmail.com>>)
* [[`d5f9059f1`](http://github.com/eggjs/egg/commit/d5f9059f1935a67748033143081755811664df9d)] - docs: translation for basic plugin (#2166) (Cemre Mengu <<cemremengu@gmail.com>>)
* [[`7afc7e24b`](http://github.com/eggjs/egg/commit/7afc7e24b60776a71702ae5495d637b1ac4a3d06)] - feat: display router when log app (#2230) (Kiho · Cham <<monkindey@163.com>>)
* [[`5e99fd6fd`](http://github.com/eggjs/egg/commit/5e99fd6fd86be4de5a2eca24bc2025f120cef6aa)] - docs: egg-passsport-local -> egg-passport-local (楊傑文 Chuck Yang <<chuck@ninethreads.com>>)
* [[`c042366df`](http://github.com/eggjs/egg/commit/c042366df6a691e56c528f16083516a53e114944)] - docs(socket.io): add webchat description (#2198) (TZ | 天猪 <<atian25@qq.com>>)
* [[`5cce8795a`](http://github.com/eggjs/egg/commit/5cce8795a733c9096de6e050fec5a87be99b0002)] - chore: fix typo. (#2172) (薛定谔的猫 <<hh_2013@foxmail.com>>)
## 2018-03-05, Version 2.4.1 @dead-horse
### Notable changes
* **fix**
* [security] don't allow x-forwarded-host header by default
* `ctx.runInBackground` will try to use custom function name first
* **docs**
* improve d.ts
* add regexp as type of path in Router
* fix type of `render`
* more semantic and moment installation in quickstart
### Commits
* [[`0eabce6`](http://github.com/eggjs/egg/commit/0eabce6389190cecc00011512ec7e4e63fd0471e)] - fix: don't allow x-forwarded-host header (#2163) (Haoliang Gao <<sakura9515@gmail.com>>)
* [[`f0edf96`](http://github.com/eggjs/egg/commit/f0edf9622b6a18831f285e6ceb5a0e2b25b04fd0)] - fix: try to use custom function name first (#2161) (fengmk2 <<fengmk2@gmail.com>>)
* [[`1a73720`](http://github.com/eggjs/egg/commit/1a73720d8ba14c612cc6fd38d419212e032049f8)] - fix(typings): add regexp as type of path (#2157) (AngrySean <<xujihui1985@gmail.com>>)
* [[`b55e908`](http://github.com/eggjs/egg/commit/b55e908643dc2ef1a21c7a4b11559e1785985792)] - doc(quickstart): more semantic and moment installation (#2154) (Kiho · Cham <<monkindey@163.com>>)
* [[`951e236`](http://github.com/eggjs/egg/commit/951e236586f3fdc988504f4138351b2c7778e67c)] - Fix type of `render` (#2155) (Arniu Tseng <<arniu2006@gmail.com>>)
## 2018-02-28, Version 2.4.0, @fengmk2
### Notable changes
* **feature**
* support Keep-Alive Header
* **fix**
* add logger in base_context_class
* **docs**
* Lots of d.ts improved.
* add context
* add urllib
* add resources & logger
* new documents
* how to call the service
* socket.io tutorial
* add events on application
### Commits
* [[`79927324a`](http://github.com/eggjs/egg/commit/79927324a5aeb1f826fc9f133bed253d8324c62e)] - fix: add logger in base_context_class (#2149) (Axes <<whxaxes@qq.com>>)
* [[`a73900231`](http://github.com/eggjs/egg/commit/a7390023150ff4d5a7ec069276a94542a7ef67fa)] - feat: support Keep-Alive Header (#2146) (fengmk2 <<fengmk2@gmail.com>>)
* [[`c8284367c`](http://github.com/eggjs/egg/commit/c8284367c727aa2da453a1a485c4d7f97cfb3967)] - docs(ts): fix some d.ts (#2144) (TZ | 天猪 <<atian25@qq.com>>)
* [[`e0282b923`](http://github.com/eggjs/egg/commit/e0282b923375132fcc3b936b471999a84eb1e941)] - docs(router): add definition of ctx (#2136) (重庆 <<1756260160@qq.com>>)
* [[`3e7ef6aa5`](http://github.com/eggjs/egg/commit/3e7ef6aa566d800411822d9a4195c9df34634789)] - docs(app-start): how to call service (#2133) (TZ | 天猪 <<atian25@qq.com>>)
* [[`9472b5828`](http://github.com/eggjs/egg/commit/9472b5828c95cd1dec2910b657d1e6c34372a6a2)] - docs(schedule): fix log dir (#2123) (TZ | 天猪 <<atian25@qq.com>>)
* [[`ede433fc5`](http://github.com/eggjs/egg/commit/ede433fc594c915683a519bf9b409209812806cf)] - docs(unittest):fix some mistakes (#2110) (恬竹 <<2632807692@qq.com>>)
* [[`2d03c79a1`](http://github.com/eggjs/egg/commit/2d03c79a1842846c4caf2f3b971a5bae5fc9f24d)] - chore: add urllib declaration support in index.d.ts (#2117) (SoraYama <<sorayamahou@gmail.com>>)
* [[`fd6fa2495`](http://github.com/eggjs/egg/commit/fd6fa24955a7a7bceaad7b2f754123282b7e1cbe)] - docs(2.x-advanced-plugin):fix some descriptions (#2111) (恬竹 <<2632807692@qq.com>>)
* [[`0a208d741`](http://github.com/eggjs/egg/commit/0a208d7413d77f12048df91b6bdb6e2dfd047c89)] - docs: translation for advanced/plugin.md (#2075) (DukeFightLife <<AdoBeatTheWorld@users.noreply.github.com>>)
* [[`42e4ea4c1`](http://github.com/eggjs/egg/commit/42e4ea4c12a542671bac7ca92931e83d0fc439f4)] - docs(schedule):fix some places (#2105) (恬竹 <<2632807692@qq.com>>)
* [[`63278c229`](http://github.com/eggjs/egg/commit/63278c2293b0899165386288c38cac44aa7a0b71)] - docs(2.x-basic-extend):fix some mistakes (#2107) (恬竹 <<2632807692@qq.com>>)
* [[`7a604d37f`](http://github.com/eggjs/egg/commit/7a604d37f5184c268263779fa2b8ca459e3d6f5b)] - docs(2.x-basic-service):fix some mistakes of service (#2102) (恬竹 <<2632807692@qq.com>>)
* [[`a1a4e7dd3`](http://github.com/eggjs/egg/commit/a1a4e7dd32bf040b69e8c8bfbdcae3e483eee335)] - docs(plugin): add description for plugin.local.js (#2104) (TZ | 天猪 <<atian25@qq.com>>)
* [[`2cdfcc249`](http://github.com/eggjs/egg/commit/2cdfcc249863630dbb298374dbbe2b45864a0e1c)] - docs(development): adjust to new version vscode (#2098) (TZ | 天猪 <<atian25@qq.com>>)
* [[`bb4b29002`](http://github.com/eggjs/egg/commit/bb4b290027a6dcf8404ae357e29aaa6a76d5413a)] - docs(faq): add the most common mistake of config (#2086) (TZ | 天猪 <<atian25@qq.com>>)
* [[`5621a8574`](http://github.com/eggjs/egg/commit/5621a8574b60d61dab79f601105b69710559831c)] - docs(schedule): logging && args (#2091) (TZ | 天猪 <<atian25@qq.com>>)
* [[`03a894439`](http://github.com/eggjs/egg/commit/03a89443904211785ca600ec74f78d75bbf7a299)] - docs: d.ts of resources& logger (#2079) (x22x22 <<wadeking@qq.com>>)
* [[`bbfacc5a7`](http://github.com/eggjs/egg/commit/bbfacc5a75984a7ddc111195b51d7da8bd6d0713)] - docs(middleware): use app.middleware instead of app.middlewares (#2077) (x22x22 <<wadeking@qq.com>>)
* [[`7e9f330ee`](http://github.com/eggjs/egg/commit/7e9f330eea2efcc26e99eb89ad3fb40c517e0101)] - docs(socket.io): add tutorial (#1913) (Suyi <<thonatos@users.noreply.github.com>>)
* [[`1224dd65f`](http://github.com/eggjs/egg/commit/1224dd65f2e4dadcce70d9a6e8e66122d93fbdd7)] - docs(2.x-basic-controller):fix some descriptions of basic-controller (#2043) (恬竹 <<2632807692@qq.com>>)
* [[`fa5bdaeb5`](http://github.com/eggjs/egg/commit/fa5bdaeb5fec6385f81bc4c3781036df3fa6d870)] - style(app/extend/request.js): Some Comments from Chinese To English in union (#2051) (DongWei <<maledong_forwork@foxmail.com>>)
* [[`06e7710c7`](http://github.com/eggjs/egg/commit/06e7710c73c5f4ad313d08b770e5874919e21b88)] - docs: add events on application (#2039) (Yiyu He <<dead_horse@qq.com>>)
* [[`65e038132`](http://github.com/eggjs/egg/commit/65e038132c9183c66c11fb50e3a8bc6358cdae4c)] - docs(advanced/loader): translate (#1654) (Weilun Xiong <<azardf4yy@gmail.com>>)
## 2018-01-26, Version 2.3.0, @dead-horse
### Notable changes
* **feature**
* emit `request` and `response` event in every request
* **docs**
* improve english docs
* add alinode usage
### Commits
* [[`50a0f8a`](http://github.com/eggjs/egg/commit/50a0f8ac8fe246d664f73f171b8886f9b9c2eda7)] - doc: fix deploy example (dead-horse <<dead_horse@qq.com>>)
* [[`3b7a313`](http://github.com/eggjs/egg/commit/3b7a313965f9c8ae6e20a16dd74533b1885f216f)] - docs(deploy): more about alinode (#2036) (TZ | 天猪 <<atian25@qq.com>>)
* [[`950b9e6`](http://github.com/eggjs/egg/commit/950b9e684f2441674ed85a3c0152002991d2ff86)] - doc: fix deploy docs (dead-horse <<dead_horse@qq.com>>)
* [[`18d6436`](http://github.com/eggjs/egg/commit/18d6436195ca1a73098c643d39ce4560b20e7d76)] - docs: translate advanced/cluster-client.md (#1839) (学究 <<zsxyz1314@gmail.com>>)
* [[`287c761`](http://github.com/eggjs/egg/commit/287c7615ad425b130e2c669a41409bfa763feef2)] - Update deployment.md (#1979) (juju <<juju_chen@foxmail.com>>)
* [[`22dfaa7`](http://github.com/eggjs/egg/commit/22dfaa72e3851196153f4ecb7f3599d2951e9b1b)] - feat: emit request and response event (#2020) (Yiyu He <<dead_horse@qq.com>>)
* [[`ddbb4b3`](http://github.com/eggjs/egg/commit/ddbb4b3c0ec7cfc5c9b1baa7e678770613bd4761)] - docs(deploy): add alinode (#2025) (TZ | 天猪 <<atian25@qq.com>>)
* [[`b5d823f`](http://github.com/eggjs/egg/commit/b5d823f52a770f879da46c6968adadd3fa14e8d7)] - docs(core/unittest): fix path of helper.js(#2029) (#2030) (Jiulong Hu <<me@hujiulong.com>>)
* [[`1e3a4b3`](http://github.com/eggjs/egg/commit/1e3a4b35801e136dd4f1fbaf3c49b771a50c0f72)] - docs(basic-router):fix some places of basic-router (#2012) (恬竹 <<2632807692@qq.com>>)
## 2018-01-22, Version 2.2.1, @dead-horse
### Notable changes
* **fix**
* log cookie's key when cookie exceed limit length
* **document**
* improve english documents, fix some grammars
* add link to alicloud node.js perfomance platform
* use PATCH method in resource router
### Commits
* [[`aa46eb2`](http://github.com/eggjs/egg/commit/aa46eb26d45012036c69c524db512ed16fde7b6b)] - fix: log cookie's key when cookie exceed limit length (#1996) (Yiyu He <<dead_horse@qq.com>>)
* [[`7993b45`](http://github.com/eggjs/egg/commit/7993b45ec2af8c2d96d82370d877476786504dc8)] - docs(basic-middleware):fix some descriptions of basic-middleware (#1998) (恬竹 <<2632807692@qq.com>>)
* [[`b2d09e1`](http://github.com/eggjs/egg/commit/b2d09e150da70a08c1886b00031c0f07eeb7d830)] - docs: put => patch. (#1793) (#1938) (吴建金 <<mosaic101@foxmail.com>>)
* [[`dede240`](http://github.com/eggjs/egg/commit/dede240340570c00e3baed8098853a44c902dc21)] - feat: add helper interface in d.ts (#1989) (Axes <<whxaxes@qq.com>>)
* [[`19fe608`](http://github.com/eggjs/egg/commit/19fe6085fedabfc09eb9c26534df237decf4d28e)] - docs: add deer stat (#1974) (TZ | 天猪 <<atian25@qq.com>>)
* [[`cef371e`](http://github.com/eggjs/egg/commit/cef371e4a176c62d9b44c0f1e55668e992921d2d)] - docs(basic-env): fix some descriptions base on the Chinese version (#1930) (恬竹 <<2632807692@qq.com>>)
* [[`55d08bd`](http://github.com/eggjs/egg/commit/55d08bded812b81efeee96a0e3465728c7f4f5a2)] - fix(ts): error declare of route.resource (#1959) (AntSworD <<zhengjj.asd@gmail.com>>)
* [[`32d7c81`](http://github.com/eggjs/egg/commit/32d7c8199611b00cd5117e6adcf8904ea0b33ff5)] - docs: fix word error (#1965) (jxDeveloper <<896222652@qq.com>>)
* [[`3acf45f`](http://github.com/eggjs/egg/commit/3acf45f77ef791b1e6467bd4047511d867d46cc9)] - docs(basic-config): fix some word spelling (#1931) (恬竹 <<2632807692@qq.com>>)
* [[`0e90819`](http://github.com/eggjs/egg/commit/0e9081954a765228ee9d590f01f3bfaaf1a4e5d8)] - docs(advanced/framework): translation (#1668) (freebyron <<freexiegd@gmail.com>>)
* [[`ab1b08e`](http://github.com/eggjs/egg/commit/ab1b08ef520ab8db4cddd8f6cf52f1aa87d6975f)] - docs: fix en index (#1915) (Weilun Xiong <<azardf4yy@gmail.com>>)
* [[`2270f7f`](http://github.com/eggjs/egg/commit/2270f7f0417f9c78958c6b51e70ad7a0d838d6ec)] - docs(basic-objects): fix some descriptions (#1903) (恬竹 <<2632807692@qq.com>>)
* [[`c136470`](http://github.com/eggjs/egg/commit/c136470861b35a5f796d4edcdd8f6fbce41f7314)] - test: use Buffer.alloc, Buffer.from. (#1895) (薛定谔的猫 <<hh_2013@foxmail.com>>)
* [[`73bc636`](http://github.com/eggjs/egg/commit/73bc636ddb82bd73fa14fb5f56e8ffe6260b46cc)] - docs(links): Add link to alicloud node.js perfomance platform (#1894) (Jackson Tian <<shyvo1987@gmail.com>>)
* [[`55d1b0e`](http://github.com/eggjs/egg/commit/55d1b0eb5c4ca27668559b94259f0670b60d57b6)] - docs(deploy): add --ignore-stderr (#1876) (TZ | 天猪 <<atian25@qq.com>>)
* [[`532110a`](http://github.com/eggjs/egg/commit/532110abbc01cf3f225c47ed6219d9434c48808c)] - fix: fix 404 page url (#1881) (sam <<289623783@qq.com>>)
## 2017-12-26, Version 2.2.0, @dead-horse
### Notable changes
* **feature**
* `config.meta.logging` to enable log every request when received
* **document**
* fix some grammars
* add rule for issue
### Commits
* [[`9fe5b85`](http://github.com/eggjs/egg/commit/9fe5b8563958d313b02482e5b3fe69c342acfa71)] - feat: enable request started log on meta middleware (#1877) (fengmk2 <<fengmk2@gmail.com>>)
* [[`8ce9611`](http://github.com/eggjs/egg/commit/8ce9611e2e2e5098a7a4557e0f8d29cd93ab468c)] - docs(objects): fix some grammars (#1806) (恬竹 <<2632807692@qq.com>>)
* [[`e43aa2b`](http://github.com/eggjs/egg/commit/e43aa2bad227475744ef6422f376475d0ee266c4)] - docs(error-handling): fix some words (#1874) (Fan <<incomparable9527@foxmail.com>>)
* [[`4c1617a`](http://github.com/eggjs/egg/commit/4c1617a16ee3df1b455f5eeb1cb31e37e5f593c1)] - docs(faq): add rule for issue (#1861) (TZ | 天猪 <<atian25@qq.com>>)
## 2017-12-15, Version 2.1.0, @dead-horse
### Notable changes
* **feature**
* add 400 response for broken client request to instead of empty response
* dump application router json
* **fix**
* fix: run dumpConfig at the last ready callback
* **document**
* migrate docs to egg 2
* add document for passport
### Commits
* [[`40df153`](http://github.com/eggjs/egg/commit/40df153dd7ca8124a7502ba6cdc838835388a0ae)] - feat: add 400 response for broken client request to instead of empty response (#1829) (Khaidi Chu <<i@2333.moe>>)
* [[`d0ee9f2`](http://github.com/eggjs/egg/commit/d0ee9f2500e69a1e0662c9ea597bf97db3418041)] - docs(passport): fix some description (#1828) (TZ | 天猪 <<atian25@qq.com>>)
* [[`f7c6a0a`](http://github.com/eggjs/egg/commit/f7c6a0a835ea950e98e40a0b4b83736912b5ab82)] - docs(passport): add description (#1825) (TZ | 天猪 <<atian25@qq.com>>)
* [[`f66d9be`](http://github.com/eggjs/egg/commit/f66d9be57807c04058511b47611afa890884b2a5)] - docs(passport): the missing docs for passport (#1824) (TZ | 天猪 <<atian25@qq.com>>)
* [[`18f93f0`](http://github.com/eggjs/egg/commit/18f93f0b927a08e6bd356f9fcc6a3141e813e85f)] - docs(core/view.md): translation (#1577) (Zhongyuan <<zhang.zhongyuan11@gmail.com>>)
* [[`7e05669`](http://github.com/eggjs/egg/commit/7e056692506f5801390fd804d75bf6756991a54b)] - 1. docs(error-handle): missing function keywords. (#1819) (M.Y.Akashi <<yanzhi.mo@aliyun.com>>)
* [[`89e114c`](http://github.com/eggjs/egg/commit/89e114cb88ef1ef96e479001bf0f8250867111c9)] - docs: add AntV links (#1809) (TZ | 天猪 <<atian25@qq.com>>)
* [[`bdfd3cc`](http://github.com/eggjs/egg/commit/bdfd3cc62b8377cadac2a6c108944d86eaca3df0)] - docs(router): new style & remove app.verb (#1803) (TZ | 天猪 <<atian25@qq.com>>)
* [[`4c9eacb`](http://github.com/eggjs/egg/commit/4c9eacbb7d4560924602103e5e23ae578ac34a52)] - docs(middleware): add description of import koa middleware (#1805) (TZ | 天猪 <<atian25@qq.com>>)
* [[`c152dee`](http://github.com/eggjs/egg/commit/c152deec69c3dbb06ce87433a46bab0bc61e295b)] - docs(loader): adjust extends way (#1729) (TZ | 天猪 <<atian25@qq.com>>)
* [[`289f8cd`](http://github.com/eggjs/egg/commit/289f8cd3d90cc24c55fa51e3d75f5750233af7ee)] - docs(progressive):changes some grammar (#1773) (恬竹 <<2632807692@qq.com>>)
* [[`ae87460`](http://github.com/eggjs/egg/commit/ae87460d6aacb38f4d60d703450f8085c72d3b0d)] - docs(migration): add description for plugin breakchange (#1766) (TZ | 天猪 <<atian25@qq.com>>)
* [[`a2788a8`](http://github.com/eggjs/egg/commit/a2788a870175d6c1abdad3c379bbb9adc6c24ba9)] - docs(controller): import base controller directly (#1771) (Yiyu He <<dead_horse@qq.com>>)
* [[`7ebfc9b`](http://github.com/eggjs/egg/commit/7ebfc9b96b03a6b1bdffc3da65c6940902dc3086)] - docs(quickstart): fix typo in code example (#1765) (Darren Poon <<dyhpoon@gmail.com>>)
* [[`6ff6998`](http://github.com/eggjs/egg/commit/6ff699824dce6962d7aa9e9e48f41a50a994834f)] - docs: add security english translation (#1691) (Adams <<jtyjty99999@126.com>>)
* [[`a061f21`](http://github.com/eggjs/egg/commit/a061f21178b2253b587dab780ba74f19605109a4)] - docs(intro): make some changes for egg-and-koa (#1739) (恬竹 <<2632807692@qq.com>>)
* [[`d752b3b`](http://github.com/eggjs/egg/commit/d752b3b795cc0c5a579770695fcadd3db713ff6f)] - docs(deployment): adjust with new version egg-scripts (#1757) (TZ | 天猪 <<atian25@qq.com>>)
* [[`1b12b51`](http://github.com/eggjs/egg/commit/1b12b519937e80728d133ea24ff88a2568b72a57)] - docs(cookie-session): use async (#1723) (TZ | 天猪 <<atian25@qq.com>>)
* [[`5c88026`](http://github.com/eggjs/egg/commit/5c880266f9968a2e9b102db7c0eea2c7b0f09a43)] - docs(plugin): use async (#1730) (TZ | 天猪 <<atian25@qq.com>>)
* [[`ebb8adf`](http://github.com/eggjs/egg/commit/ebb8adfadcf21ba29997c65d5adc5a92235ffa8d)] - some changes of docs(what is egg) (#1734) (恬竹 <<2632807692@qq.com>>)
* [[`2da00fc`](http://github.com/eggjs/egg/commit/2da00fca45d9bc161cae5ab9754a3fcc0321b9c7)] - docs(framework): use new way (#1728) (TZ | 天猪 <<atian25@qq.com>>)
* [[`47fbee5`](http://github.com/eggjs/egg/commit/47fbee574b94d9f6420d44e7a8f0ccec035d94f4)] - docs(cluster-client): use async (#1727) (TZ | 天猪 <<atian25@qq.com>>)
* [[`1420682`](http://github.com/eggjs/egg/commit/1420682dc5b6fb14342373d9b70614c3de0c015b)] - docs(ipc): use async (#1722) (TZ | 天猪 <<atian25@qq.com>>)
* [[`503b69b`](http://github.com/eggjs/egg/commit/503b69b2e5c3f59b9c3c307a50e711cd8eb8d967)] - feat: dump application router json (fengmk2 <<fengmk2@gmail.com>>)
* [[`76ff783`](http://github.com/eggjs/egg/commit/76ff783b80a9d9ffc01db1b434c25fedd6e27ca7)] - fix: run dumpConfig at the last ready callback (fengmk2 <<fengmk2@gmail.com>>)
* [[`50efe4c`](http://github.com/eggjs/egg/commit/50efe4ceb9a4c8ec902a503db7ad10ffe7819e1a)] - docs(httpclient): use async (#1724) (TZ | 天猪 <<atian25@qq.com>>)
* [[`d043148`](http://github.com/eggjs/egg/commit/d043148b8ee69614098b39604dd6b7d7e1a84810)] - docs: remove async-function (#1713) (TZ | 天猪 <<atian25@qq.com>>)
* [[`e3ef3ec`](http://github.com/eggjs/egg/commit/e3ef3ec65c5e2874c813f6cda18b61b630d137be)] - docs(restful): use async (#1709) (TZ | 天猪 <<atian25@qq.com>>)
* [[`b042937`](http://github.com/eggjs/egg/commit/b042937b1e77b8206206a248c9f3e3ab82b7d6d8)] - docs(error-handling): use async (#1721) (TZ | 天猪 <<atian25@qq.com>>)
* [[`80ab243`](http://github.com/eggjs/egg/commit/80ab2439d508e9e0574df31061b5bb14988c2e3e)] - docs(i18n): use async (#1720) (TZ | 天猪 <<atian25@qq.com>>)
* [[`6741999`](http://github.com/eggjs/egg/commit/67419996a3abd403ab8d67755ecb98c3a9b97338)] - docs(logger): use async (#1719) (TZ | 天猪 <<atian25@qq.com>>)
* [[`f39c105`](http://github.com/eggjs/egg/commit/f39c105067e08fe416f86d0a415f5475ce66ba17)] - docs(view): use async (#1717) (TZ | 天猪 <<atian25@qq.com>>)
* [[`cf3de0f`](http://github.com/eggjs/egg/commit/cf3de0f248e3435a7d6ac41ece16dea55f5e86c9)] - docs(unittest): use async (#1716) (TZ | 天猪 <<atian25@qq.com>>)
* [[`cb9c9a4`](http://github.com/eggjs/egg/commit/cb9c9a43015a47347273bf8a09d971205b0d57ec)] - docs(mysql): use async (#1711) (TZ | 天猪 <<atian25@qq.com>>)
## 2017-11-20, Version 2.0.0, @dead-horse
### Notable changes
* **performance**
* By removing the wrapper code of `co` library, performance increase over 30% (which not include the performance boost coming with Node 8), see [#14](https://github.com/eggjs/benchmark/pull/14) and [benchmark](https://eggjs.github.io/benchmark/plot/)
* **feature**
* [BREAKING CHANGE] drop node <8 support
* upgrade to egg-core@4(base on koa 2), but still supports all the usages in egg 1
* upgrade built-in plugins to adapt egg@2
* `runInBackground` use location as scope name when anonymous
* **fix**
* dump async function as AsyncFunction
* **document**
* migrate some documents to async function
* split plugin and plugin development
* refactor the description about cluster client @vincenthou
* add document for how to customize error handler
* translate cookie and session @zhang-z
* translate basics/schedule.md, thanks @Azard
### Commits
* [[`8197826`](http://github.com/eggjs/egg/commit/8197826a8dca062c91ba45c235cec66a93f335a4)] - docs: refine egg-and-koa with egg 2 (#1686) (Yiyu He <<dead_horse@qq.com>>)
* [[`757f275`](http://github.com/eggjs/egg/commit/757f275a16741c670f210876408aaeefe5797a23)] - fix: dump async function as AsyncFunction (#1687) (Yiyu He <<dead_horse@qq.com>>)
* [[`12edd64`](http://github.com/eggjs/egg/commit/12edd64915164df6b2d5fed9e179e90954f25687)] - test: use async function instead of generator function (#1684) (Yiyu He <<dead_horse@qq.com>>)
* [[`5513456`](http://github.com/eggjs/egg/commit/5513456e2c702fdc1b7a500f8d8d58048d1041fa)] - feat: runInBackground use location as scope name when anonymous (#1683) (Yiyu He <<dead_horse@qq.com>>)
* [[`212b077`](http://github.com/eggjs/egg/commit/212b077993cff01c08c55fa4545c324adb96322c)] - doc: Add th.yml (#1682) (NatPi <<31546528+NatJNP@users.noreply.github.com>>)
* [[`3ddd67f`](http://github.com/eggjs/egg/commit/3ddd67fbbb83a783541118a05d7e0febb2fde7f3)] - docs(advanced/cluster-client): refactor the description about cluster client (#1417) (vincent.hou <<vincenthou365@gmail.com>>)
* [[`3d948e4`](http://github.com/eggjs/egg/commit/3d948e44e55fbb88c318a8f14fa7a0b0a8b71b4e)] - docs(plugin): split plugin and plugin development (#1663) (TZ | 天猪 <<atian25@qq.com>>)
* [[`b1343ad`](http://github.com/eggjs/egg/commit/b1343ad55f08b15f8084104c54db0b5975716323)] - docs(core/unittest): translate unittest.md (#1660) (freebyron <<freexiegd@gmail.com>>)
* [[`fb2d96a`](http://github.com/eggjs/egg/commit/fb2d96ae8e1759edc9126a2920f9028b6e4d15df)] - docs(app-start): generator -> async (#1662) (TZ | 天猪 <<atian25@qq.com>>)
* [[`12c0a8a`](http://github.com/eggjs/egg/commit/12c0a8afb8cd332037670f7db8e8662566c1407f)] - docs(quickstart): fix app.Service (#1661) (TZ | 天猪 <<atian25@qq.com>>)
* [[`49b0071`](http://github.com/eggjs/egg/commit/49b00712de6eed7c386b07c7c91082ef36cc667f)] - docs(core/cookie-and-session): translate section Cookie (#1562) (Zhongyuan <<zhang.zhongyuan11@gmail.com>>)
* [[`ac55d5e`](http://github.com/eggjs/egg/commit/ac55d5eb0b90e2333e3d92523075615e80835647)] - docs: fix typo in async function (#1657) (BccSafe <<bccsafe5988@gmail.com>>)
* [[`9f362d8`](http://github.com/eggjs/egg/commit/9f362d878b61e1144ceab851215dbafb974fb85f)] - docs(basics/schedule.md): translate (#1648) (Weilun Xiong <<azardf4yy@gmail.com>>)
* [[`448d094`](http://github.com/eggjs/egg/commit/448d0945c0030d2f2bdf8e0f85ccfcbde4ba2b25)] - deps: upgrade all plugins to adapt egg@2 (#1653) (Yiyu He <<dead_horse@qq.com>>)
* [[`4993ee8`](http://github.com/eggjs/egg/commit/4993ee8fae81bf14f92c86ac1d4d952d62e1d165)] - docs(quickstart): generator -> async (#1650) (TZ | 天猪 <<atian25@qq.com>>)
* [[`8c6f16d`](http://github.com/eggjs/egg/commit/8c6f16d64834d46b0689ce079cc5d71155848ac8)] - docs: how to customize error handler (#1651) (Yiyu He <<dead_horse@qq.com>>)
* [[`8e8869a`](http://github.com/eggjs/egg/commit/8e8869a4d73908503cf1f60de3be49461639ca08)] - refactor: upgrade egg-core@4 (#1631) (Yiyu He <<dead_horse@qq.com>>)
## 2017-11-08, Version 1.11.0, @dead-horse
### Notable changes
* **feature**
* export global namespace at d.ts @atian25
### Commits
* [[`b131a4c`](http://github.com/eggjs/egg/commit/b131a4cec51cc783dcd4ccb8756439063c5b875c)] - feat: export global namespace at d.ts (#1633) (TZ | 天猪 <<atian25@qq.com>>)
## 2017-11-08, Version 1.10.1, @dead-horse
### Notable changes
* **fix**
* use `app.options` instead of deprecated `app._options`
* **document**
* translate core/cluster-and-ipc.md, thanks @lslxdx
### Commits
* [[`9eec677`](http://github.com/eggjs/egg/commit/9eec677757ddbde6f7ddcff2c6a698087e07b70e)] - fix: use `app.options` instead of `app._options` (#1625) (Yiyu He <<dead_horse@qq.com>>)
* [[`fd1ff63`](http://github.com/eggjs/egg/commit/fd1ff638920fef4a3258767df982b87e70614215)] - test: fix tsc test case (#1620) (Yiyu He <<dead_horse@qq.com>>)
* [[`6804bd3`](http://github.com/eggjs/egg/commit/6804bd36cfc7a9bd54b3be2d9ce828d4e951f8b8)] - test: add node 9 and drop node 7 (#1602) (fengmk2 <<fengmk2@gmail.com>>)
* [[`3878862`](http://github.com/eggjs/egg/commit/38788621ccf06fd6ac8f4068de3e49c5668e1915)] - docs: translate core/cluster-and-ipc.md (#1594) (lslxdx <<lslxdx@163.com>>)
## 2017-10-24, Version 1.10.0, @popomore
### Notable changes
* **feature**
* add Subscription @popomore
* **document**
* multipart example @dead_horse
* fix document @atian25 @beilunyang
* improve schedule document @atian25
### Commits
* [[`6dd1594a5`](http://github.com/eggjs/egg/commit/6dd1594a5c300f24e668b3679c7ae8df733b6a39)] - docs: fix egg-scripts (#1552) (TZ | 天猪 <<atian25@qq.com>>)
* [[`46ed6fac9`](http://github.com/eggjs/egg/commit/46ed6fac9f94d300a23903a71cfafdb5c8b1ba91)] - feat: add Subscription (#1469) (Haoliang Gao <<sakura9515@gmail.com>>)
* [[`c508f9fa7`](http://github.com/eggjs/egg/commit/c508f9fa7dedbc8c3c4f6319b7233a034db463b4)] - docs: fix csrf (#1551) (TZ | 天猪 <<atian25@qq.com>>)
* [[`7fb9bbf71`](http://github.com/eggjs/egg/commit/7fb9bbf71219debf35b4e864a65be22e24a0480a)] - docs: fix typo (#1537) (悖论 <<786220806@qq.com>>)
* [[`68c0e1a9c`](http://github.com/eggjs/egg/commit/68c0e1a9c053618133d3484043abfb77e3372a22)] - docs: adjust new schedule (#1477) (TZ | 天猪 <<atian25@qq.com>>)
* [[`aeae948ec`](http://github.com/eggjs/egg/commit/aeae948ec986f5f7204ad6a0f748403b8e6e6fe1)] - docs: adjust middleware config at framework (#1523) (TZ | 天猪 <<atian25@qq.com>>)
* [[`7b37d2393`](http://github.com/eggjs/egg/commit/7b37d2393f59f3c5efbc84cf1d5f51e9332b0cd8)] - docs: multipart example use yield parts() (#1518) (Yiyu He <<dead_horse@qq.com>>)
* [[`6846badc8`](http://github.com/eggjs/egg/commit/6846badc8da89b00483aa7be5c69b1cd2f06d797)] - docs: add plugin.js description (#1499) (TZ | 天猪 <<atian25@qq.com>>)
## 2017-09-25, Version 1.9.0, @gxcsoccer
### Notable changes
* **feature**
* make cluster client configurable in egg
* don’t force logger to use INFO level in prod
* **document**
* correct sample codes, by @Jawnkuin
* fix devtools debug, by @atian25
* adjust debug docs with new egg-bin debug, by @atian25
* fix port should be number, @atian25
### Commits
* [[`21425e7`](https://github.com/eggjs/egg/commit/21425e7a9c451cfa07f3cb580d0b770eb5b0c890)] - feat: make cluster client configurable in egg (#1459) (gxcsoccer <<gxcsoccer@126.com>>)
* [[`d0797b1`](https://github.com/eggjs/egg/commit/d0797b1c2d078d1bea97c104471388bedc5e61c9)] - docs: correct sample codes (#1434) (Jawnkuin <<jawnkuin@gmail.com>>)
* [[`6eac07e`](https://github.com/eggjs/egg/commit/6eac07eb287ecf158b2c182a0e36a81fa14700ce)] - refactor: httpclient args tracer to be enforced (#1421) (hui <<kangpangpang@gmail.com>>)
* [[`c56274b`](https://github.com/eggjs/egg/commit/c56274bb818526370f857b926d178ff520b3bea8)] - docs(development): fix devtools debug (#1428) (TZ | 天猪 <<atian25@qq.com>>)
* [[`e3f29de`](https://github.com/eggjs/egg/commit/e3f29de9bbbfb67c641cf54272883759d7256d89)] - docs(development): adjust debug docs with new egg-bin debug (#1427) (AnzerWall <<AnzerWall@gmail.com>>)
* [[`5a9531a`](https://github.com/eggjs/egg/commit/5a9531abbec83fbff08ddb6feb475f87498d2a3d)] - feat: don’t force logger to use INFO level in prod (#1218) (TZ | 天猪 <<atian25@qq.com>>)
* [[`95fbd47`](https://github.com/eggjs/egg/commit/95fbd47f4c20797df17dd210f30a40f43d1d8900)] - docs(deployment): port should be number (#1424) (TZ | 天猪 <<atian25@qq.com>>)
## 2017-09-11, Version 1.8.0, @leoner
### Notable changes
* **feature**
* support app.httpclient and agent.httpclient auto set tracer
* **fix**
* should extends from egg-core BaseContextClass
* **document**
* English documents `basics/objects`,`core/docs-logger` and `core/httpclient`
have been translated by @DarrenWong, @Azard and @gztchan
* documents typo fixed and improved by @vincenthou, @waitingsong and @hyj1991
### Commits
* [[`54be7dc09`](http://github.com/eggjs/egg/commit/54be7dc099f47fb65b9bc3d9bb29de4d70ac25cd)] - docs(core/cluster-and-ipc): fix some typo (#1415) (vincent.hou <<vincenthou365@gmail.com>>)
* [[`6cf17c11a`](http://github.com/eggjs/egg/commit/6cf17c11af51220904881ed99aa65cac0f212c2b)] - docs: (core/httpclient): [translate] Done (#1409) (Darren Wong <<darrenwongf@gmail.com>>)
* [[`105e1947e`](http://github.com/eggjs/egg/commit/105e1947ee0863ebd6c0a1111f218b025e0e9989)] - docs: translate basics/objects (#1238) (Weilun Xiong <<azardf4yy@gmail.com>>)
* [[`f7c0d8520`](http://github.com/eggjs/egg/commit/f7c0d85209c9e96f7812c4a2996f000a2667770d)] - feat: support app.httpclient and agent.httpclient auto set tracer (#1393) (hui <<kangpangpang@gmail.com>>)
* [[`3aaee8fbe`](http://github.com/eggjs/egg/commit/3aaee8fbea4aee8b5c40921670642772835bf40d)] - fix: should extends from egg-core BaseContextClass (#1392) (fengmk2 <<fengmk2@gmail.com>>)
* [[`a9936a383`](http://github.com/eggjs/egg/commit/a9936a383174fd0b2c201ee759bc5174486970a1)] - fix: typo (#1388) (waiting <<waiting@xiaozhong.biz>>)
* [[`eef30faf6`](http://github.com/eggjs/egg/commit/eef30faf69b41f4a352a592ad65d097698d27303)] - docs: adjust webstorm debug config (#1367) (TZ | 天猪 <<atian25@qq.com>>)
* [[`499454379`](http://github.com/eggjs/egg/commit/499454379b2234a80d3946933f7511ac83c292d6)] - docs: curl(url, opts) add parameter introduction (#1351) (#1352) (hyj1991 <<66cfat66@gmail.com>>)
* [[`4daf497eb`](http://github.com/eggjs/egg/commit/4daf497eb32c05c73911a01e861b9cf761ede451)] - docs(en/core/docs-logger): finish logger.md translation in English (#1254) (Tony Chan <<gztchan@gmail.com>>)
* [[`aaacd56c9`](http://github.com/eggjs/egg/commit/aaacd56c9c60dbf0cbfd0d1fcc77366a3e3993fe)] - docs: remove egg-scripts env default description (#1318) (TZ | 天猪 <<atian25@qq.com>>)
* [[`4feae70b8`](http://github.com/eggjs/egg/commit/4feae70b8c8e69890053bff9f3df9cc7024d69cd)] - docs: add egg-scripts to deployment (#1279) (TZ | 天猪 <<atian25@qq.com>>)
* [[`08ed1b3c6`](http://github.com/eggjs/egg/commit/08ed1b3c68e242eba187640c9f6cf8a0acd7489f)] - docs(unittest): typo of egg-mock (#1284) (TZ | 天猪 <<atian25@qq.com>>)
* [[`734854c84`](http://github.com/eggjs/egg/commit/734854c84ef8b0107df3101b6aa212d96574b317)] - docs(unittest): add bootstrap usage (#1278) (Yiyu He <<dead-horse@users.noreply.github.com>>)
* [[`ebbbcd574`](http://github.com/eggjs/egg/commit/ebbbcd574f5bbd4d91bec345e8b35f9adc48d6c0)] - chore: skip docs deploy at ci cron (#1268) (TZ | 天猪 <<atian25@qq.com>>)
## 2017-07-27, Version 1.7.0, @popomore
### Notable changes
* **feature**
* Support listen options in config.js
* **improve**
* `app.HttpClient` can be overwritten
* **document**
* Document improvement
* English documents have been translated by @gztchan
### Commits
* [[`dd07cacb2`](http://github.com/eggjs/egg/commit/dd07cacb209565cc8bdc240b2a3bd7f624a3e56c)] - docs: fix typo on CONTRIBUTING.zh-CN.md (#1266) (SuperEwe <<superewe@qq.com>>)
* [[`773343061`](http://github.com/eggjs/egg/commit/7733430614d62392fa1b06568e223ce2ae5b3709)] - docs: only deploy docs at 8 (#1252) (TZ | 天猪 <<atian25@qq.com>>)
* [[`4f2ebfda8`](http://github.com/eggjs/egg/commit/4f2ebfda81c067ba500ee22ac30c8b201f746cac)] - docs: fix const define (#1249) (TZ | 天猪 <<atian25@qq.com>>)
* [[`45bea3cb5`](http://github.com/eggjs/egg/commit/45bea3cb55636a09160bfc66befca476994dacc8)] - docs(core-deployment): translate deployment.md in English (#1235) (Tony Chan <<gztchan@gmail.com>>)
* [[`dda386e42`](http://github.com/eggjs/egg/commit/dda386e425ce96019f3d068e66603f80af966571)] - test: add test and doc for listen options (#1246) (Haoliang Gao <<sakura9515@gmail.com>>)
* [[`3ef1de952`](http://github.com/eggjs/egg/commit/3ef1de95247aa3e3fdcbda71fe83e58a892a13d6)] - feat: set cluster options, include path, port, hostname (#1231) (Haoliang Gao <<sakura9515@gmail.com>>)
* [[`e9f93cf83`](http://github.com/eggjs/egg/commit/e9f93cf83d46fd84c8c6b10ec2e7e3eb2bf24f9d)] - refactor: export app.HttpClient that can be overwritten (#1234) (Haoliang Gao <<sakura9515@gmail.com>>)
* [[`96b3786eb`](http://github.com/eggjs/egg/commit/96b3786eb9640c9ec2d71a5a0a0b18ee32e9e3ad)] - docs(core/error-handling): translate error-handling.md in English (#1228) (Tony Chan <<gztchan@gmail.com>>)
* [[`c3c9fce55`](http://github.com/eggjs/egg/commit/c3c9fce557a8d8c57b2a5e5391d1c11a81ceeaa7)] - docs(controller): examples use controller class (#1221) (Yiyu He <<dead-horse@users.noreply.github.com>>)
* [[`24f279005`](http://github.com/eggjs/egg/commit/24f2790051c0d248f6df9850ffe8513dc11e5780)] - docs: new VScode 1.14 default protocol changed. (#1212) (Anto <<anto17@foxmail.com>>)
* [[`2b78b4cf8`](http://github.com/eggjs/egg/commit/2b78b4cf8275171ddf788550745edc3aef948ca7)] - docs: Fix config name from egg-Plugin to eggPlugin in plugin's doc (#1215) (hansen <<hasseyoung@gmail.com>>)
## 2017-07-19, Version 1.6.1, @fengmk2
### Notable changes
* **fix**
* make sure config.httpclient.httpAgent.timeout >= 30000, and distinguish
options: request, httpAgent and httpsAgent on `config.httpclient`.
### Commits
* [[`988b8c8`](http://github.com/eggjs/egg/commit/988b8c84d0f63ce0e83e00bd12cff65ebf4f2ff5)] - fix: make sure config.httpclient.httpAgent.timeout >= 30000 (#1165) (fengmk2 <<fengmk2@gmail.com>>)
* [[`894005c`](http://github.com/eggjs/egg/commit/894005c8e683e764ec234c915afce89b57343f98)] - docs: (core/i18n): [translate] Done (#1194) (Darren Wong <<darrenwongf@gmail.com>>)
* [[`410633b`](http://github.com/eggjs/egg/commit/410633b3e47098abc30d83429895b543431929ec)] - chore: kill ssh-agent after deploy (#1204) (Haoliang Gao <<sakura9515@gmail.com>>)
* [[`05f4785`](http://github.com/eggjs/egg/commit/05f47858a6d74041a10539443a9ea2e195826bc4)] - chore: add travis_wait to avoid deploying document timeout (#1201) (Haoliang Gao <<sakura9515@gmail.com>>)
* [[`367e1d6`](http://github.com/eggjs/egg/commit/367e1d66ef3bdb49ee41758246cdaf49e04ea140)] - docs: fix typo (#1191) (BingqiChan <<bingqichen@live.cn>>)
## 2017-07-04, Version 1.6.0, @fengmk2
### Notable changes
* **feature**
* tsd add ctx.logger and logger.error support Error object
* ignore any key contains "secret" on dump config files
* show who define the property of the config on `run/application_config_meta.json`
* **fix**
* don't cache the intermediate locals for application
### Commits
* [[`5dc56fa`](http://github.com/eggjs/egg/commit/5dc56fac043eab22187f9ae1dd7e73d2160fd7ae)] - feat: ignore any key contains "secret" (#1156) (fengmk2 <<fengmk2@gmail.com>>)
* [[`74c8a54`](http://github.com/eggjs/egg/commit/74c8a547cc90939253946a145655996b59373457)] - feat: dump `run/${type}_config_meta.json` (#1155) (Haoliang Gao <<sakura9515@gmail.com>>)
* [[`b80bb14`](http://github.com/eggjs/egg/commit/b80bb1405c1f47c5596ff4a2c9540af7447430ec)] - fix: don't cache the intermediate locals for application (#1146) (Jackson Tian <<shyvo1987@gmail.com>>)
* [[`7c70beb`](http://github.com/eggjs/egg/commit/7c70beb26ecf2176cda7547f3163fec11aff450f)] - docs: change istanbul to nyc (#1150) (TZ | 天猪 <<atian25@qq.com>>)
* [[`c7a87a8`](http://github.com/eggjs/egg/commit/c7a87a8abade84769b34a1ef0ba50a3cc12dec49)] - docs: adjust objects docs (#1140) (TZ | 天猪 <<atian25@qq.com>>)
* [[`0052351`](http://github.com/eggjs/egg/commit/005235162dce4b0e87768a201c9a68c4291592d4)] - docs: improve plugin dependencies (#1061) (luicfer <<lucifer4he@gmail.com>>)
* [[`4322212`](http://github.com/eggjs/egg/commit/43222127b922b486d8f523230fed82ba453ee8d8)] - docs: add missing class in objects.md (kaiye <<catgecn@gmail.com>>)
* [[`daa8227`](http://github.com/eggjs/egg/commit/daa82278332d7617d6ebb3d07e8cdfd1e95cf644)] - feat(tsd): add ctx.logger and logger.error support Error object (#1108) (Eward Song <<eward.song@gmail.com>>)
* [[`7c2e436`](http://github.com/eggjs/egg/commit/7c2e43626d93049b5f91f59773ef02c4b0f478b3)] - docs: improve feature describe (#1102) (Yiyu He <<dead-horse@users.noreply.github.com>>)
* [[`5ae7814`](http://github.com/eggjs/egg/commit/5ae7814632b1f92d534a496fe4f51c6737447aba)] - chore: comments in english (#1101) (Yiyu He <<dead-horse@users.noreply.github.com>>)
* [[`9099be9`](http://github.com/eggjs/egg/commit/9099be91afa806d0a8258441d11e1da2318777ef)] - docs: unify config in quickstart (#1094) (Yiyu He <<dead-horse@users.noreply.github.com>>)
* [[`c31bc15`](http://github.com/eggjs/egg/commit/c31bc15097c692d08596a277c69fbd44f9d3e2bf)] - test: wait logger to flush (#1090) (Haoliang Gao <<sakura9515@gmail.com>>)
* [[`82d2158`](http://github.com/eggjs/egg/commit/82d2158e4c399ead9567b67dc27d13d1ef2e104e)] - docs: add Enclose.IO to Links (#1089) (Minqi Pan <<pmq2001@gmail.com>>)
## 2017-06-21, Version 1.5.0, @fengmk2
### Notable changes
* **feature**
* better TypeScript support, add `index.d.ts` file.
* enable overrideMethod middleware by default.
* **document**
* Documents improved.
### Commits
* [[`1d02601`](http://github.com/eggjs/egg/commit/1d026019df76525d2d9117c260eb5d892388121c)] - tsd: add another properties of FileStream (#1080) (Rwing <<Rwing@rwing.cn>>)
* [[`2b1644e`](http://github.com/eggjs/egg/commit/2b1644e6d56e6481ee97bce009c5f53b4dd18441)] - feat: add tsd (#1027) (Eward Song <<eward.song@gmail.com>>)
* [[`a4ba2a2`](http://github.com/eggjs/egg/commit/a4ba2a2a1ef7de49e196c01447fd73ab22ed6d34)] - feat: enable overrideMethod middleware by default (#1069) (fengmk2 <<fengmk2@gmail.com>>)
* [[`bfb8df5`](http://github.com/eggjs/egg/commit/bfb8df58bcc7d7fe0fd6ff3453efcb54b715b4a0)] - docs: typo (#1060) (chenbin92 <<chen@mothin.com>>)
* [[`64d1b00`](http://github.com/eggjs/egg/commit/64d1b0026648e1128f09efb6e6c2cc7f632bf608)] - docs: add chrome devtools debug information (#1050) (仙森 <<dapixp@gmail.com>>)
* [[`4e510b2`](http://github.com/eggjs/egg/commit/4e510b22836096a47d562dbd5ca8affd28f94f9e)] - chore: use app.httpRequest() instead of supertest (#1041) (fengmk2 <<fengmk2@gmail.com>>)
* [[`78a13d5`](http://github.com/eggjs/egg/commit/78a13d52c3b6e8b40a0015b285cda33a059c0ee4)] - docs: add more description at quickstart (#1042) (TZ | 天猪 <<atian25@qq.com>>)
* [[`ef7c864`](http://github.com/eggjs/egg/commit/ef7c864fbddf7e70afbd93a16d5176787328400d)] - docs: add ant.design link (#1037) (Haoliang Gao <<sakura9515@gmail.com>>)
* [[`f1b510c`](http://github.com/eggjs/egg/commit/f1b510c34039259c5772021432ab71a7a62b89e8)] - feat: add config.logger.disableConsoleAfterReady (#1001) (fengmk2 <<fengmk2@gmail.com>>)
* [[`4890eda`](http://github.com/eggjs/egg/commit/4890eda31b9bc60ea4a1a7f36460ec1bf86dc134)] - docs: Uniform the standards that we should acquire this parsed parame… (#1038) (Ruanyq <<yiqiang0930@163.com>>)
* [[`9d705e4`](http://github.com/eggjs/egg/commit/9d705e4687cdb98d327fbd9a1061604828218dfc)] - test: make sure app close (#1030) (fengmk2 <<fengmk2@gmail.com>>)
* [[`1d72e37`](http://github.com/eggjs/egg/commit/1d72e3799822e252934d6218a978c2bd21f378d3)] - docs: fix caseStyle link (#1033) (Desen Meng <<mds@xue.bi>>)
* [[`9b50725`](http://github.com/eggjs/egg/commit/9b507250725ef3beda0ee51ac0c2bc2b007b2ecb)] - docs: (tutorials/index.md & async-function.md ): [translate] Done (#1028) (Darren Wong <<darrenwongf@gmail.com>>)
* [[`3d04199`](http://github.com/eggjs/egg/commit/3d041992912d9aca1eb0edc6b226474022e08236)] - docs: typo (#1029) (Jerry Wu <<perzy_wu@163.com>>)
* [[`13b7c19`](http://github.com/eggjs/egg/commit/13b7c19531d772a2b932ada28e186a0dbd0cf5f5)] - test: node 8 (#976) (fengmk2 <<fengmk2@gmail.com>>)
* [[`1b108a7`](http://github.com/eggjs/egg/commit/1b108a72a96d3d8241b332b8e728a9ec409efbb1)] - docs: remove api that is from egg-rest (#1022) (Haoliang Gao <<sakura9515@gmail.com>>)
* [[`057bc47`](http://github.com/eggjs/egg/commit/057bc47e4c5e3ec8faae0de3807f656fa4ef41d4)] - test: add doc test (#989) (Haoliang Gao <<sakura9515@gmail.com>>)
* [[`c6eb7b2`](http://github.com/eggjs/egg/commit/c6eb7b2f59f24fe0c6a787829d33cdf0cd4a2e77)] - doc: fix view config doc (#991) (当轩 <<code.falling@gmail.com>>)
* [[`52865b4`](http://github.com/eggjs/egg/commit/52865b47c4d336833ef1151bae9f30867359ceb6)] - docs: devtool inspect at 8.x (#1018) (TZ | 天猪 <<atian25@qq.com>>)
* [[`8a120fd`](http://github.com/eggjs/egg/commit/8a120fde73df60e23f8c5559a3281acaf0a393e0)] - docs: remove max time limit at schdule (#995) (TZ | 天猪 <<atian25@qq.com>>)
* [[`9084c24`](http://github.com/eggjs/egg/commit/9084c24dd10fcbcd0d436ada9639b59f36dd2edf)] - docs: add plugin list (#988) (Haoliang Gao <<sakura9515@gmail.com>>)
* [[`20a5d91`](http://github.com/eggjs/egg/commit/20a5d9127f7454c899f7701f02b04eefa7c61fce)] - test: disable coverage for schedule (#987) (Haoliang Gao <<sakura9515@gmail.com>>)
* [[`3de963f`](http://github.com/eggjs/egg/commit/3de963f3881ef6fb9c5b6fa207730c6695853239)] - docs(basics/structure.md): [translate] (#970) (Weilun Xiong <<330815461@qq.com>>)
* [[`2f232f3`](http://github.com/eggjs/egg/commit/2f232f30b0ba7e14ab07c43e34d363bac3906a43)] - docs: file must appear after other fiels when using getFileStream (#982) (Yiyu He <<dead-horse@users.noreply.github.com>>)
## 2017-05-28, Version 1.4.0, @dead-horse
### Notable changes
* **feature**
* use lru to aovid oom when httpclient dns cache enabled
* **fix**
* fix port is missed when httpclient dns cache enabled
* fix request url object will be changed when httpclient dns cache enabled
* set maxSockets defautl value to Number.MAX_SAFE_INTEGER
* **document**
* Documents improved. Thanks @DarrenWong, @zousandian, @lslxdx, @Azard, @johnnychen, @coogleyao, @DanielWLam, @m31271n, @Brian175
### Commits
* [[`7370a62`](http://github.com/eggjs/egg/commit/7370a62e190db55dab3fde7f39f621f449301eaa)] - docs: translate tutorials/restful.md (#908) (Darren Wong <<darrenwongf@gmail.com>>)
* [[`5d8ca65`](http://github.com/eggjs/egg/commit/5d8ca654f311c52fd5faaa939943071c3f69f43f)] - docs: translatebasics/controller.md (#889) (lslxdx <<lslxdx@163.com>>)
* [[`5b959e0`](http://github.com/eggjs/egg/commit/5b959e0a382491b3111afb66e10b6e866105e0c8)] - docs: translate tutorials/progressive.md to English version (#966) (Darren Wong <<darrenwongf@gmail.com>>)
* [[`35fa5a9c`](http://github.com/eggjs/egg/commit/35fa5a9c4c2d969f66a5e4df28e1da7f69370709)] - fix: set maxSockets defautl value to Number.MAX_SAFE_INTEGER (#938) (tangyao <<2001-wms@163.com>>)
* [[`5b6fe2b`](http://github.com/eggjs/egg/commit/5b6fe2b187b2c1a4bcee4693b2b1043f2724fe68)] - feat: use lru to aovid oom in dns cache httpclient (#961) (Yiyu He <<dead-horse@users.noreply.github.com>>)
* [[`3c5c0b8`](http://github.com/eggjs/egg/commit/3c5c0b8d81bb63166f6592390d14277d3baca283)] - docs: Fix objects.md typo (#969) (三点 <<zousandian@gmail.com>>)
* [[`2bca50b`](http://github.com/eggjs/egg/commit/2bca50b2217424b8cdacd48550dcc39a31e50cff)] - docs(core/unittest.md): update with app.httpRequest() (#943) (Weilun Xiong <<330815461@qq.com>>)
* [[`713e033`](http://github.com/eggjs/egg/commit/713e033f90eb39aad8ac48916985396ca5282815)] - docs: app.controller.foo instead of 'foo' (#942) (Yiyu He <<dead-horse@users.noreply.github.com>>)
* [[`cfc76ec`](http://github.com/eggjs/egg/commit/cfc76ec721460780d703ead1dfdd315ed484e5c8)] - fix spell error from sign to signed (#932) (johnnychen <<johnnychq@gmail.com>>)
* [[`12499d6`](http://github.com/eggjs/egg/commit/12499d636dd471f35e54aad9f09b5f452ea198bf)] - docs: fix yield db.query for en (#930) (Yao Mengfei <<coogleyao@gmail.com>>)
* [[`25c7c95`](http://github.com/eggjs/egg/commit/25c7c95bff9eb51baf4f93724444982209872895)] - docs: translate basics/router.md (#896) (lslxdx <<lslxdx@163.com>>)
* [[`a5c7ac4`](http://github.com/eggjs/egg/commit/a5c7ac462a275c5393f93308a7f31b21cba524a2)] - docs: translate basics/service.md (lslxdx <<lslxdx@163.com>>)
* [[`7ee5de6`](http://github.com/eggjs/egg/commit/7ee5de6b0ad628332a5c130eb5a405b993a98c60)] - docs: translate basics/extend.md (#884) (DanielLam <<lwd931227@126.com>>)
* [[`9bf3a65`](http://github.com/eggjs/egg/commit/9bf3a6511469ee85963096836ae8c2421313448d)] - docs: Update env.md (#918) (m31271n <<m31271n@2players.studio>>)
* [[`b3825f3`](http://github.com/eggjs/egg/commit/b3825f33406c01ebc19b16519eccfca9f60e770f)] - docs: fix objects.md (#928) (Yiyu He <<dead-horse@users.noreply.github.com>>)
* [[`fd04ea2`](http://github.com/eggjs/egg/commit/fd04ea222af962e7fe9b82d108a0bd6f23b32891)] - docs: add document for built-in objects (#914) (Yiyu He <<dead-horse@users.noreply.github.com>>)
* [[`6180d5d`](http://github.com/eggjs/egg/commit/6180d5db90047a58222ba24d660c1a19b93648f3)] - docs: use names of constants declared (#923) (Yao Mengfei <<coogleyao@gmail.com>>)
* [[`02b02e0`](http://github.com/eggjs/egg/commit/02b02e0faf0d423105136723b9d2938a182fd486)] - docs: using a doctools as a external lib (#913) (Haoliang Gao <<sakura9515@gmail.com>>)
* [[`5113088`](http://github.com/eggjs/egg/commit/51130889ad8d75baa157c43d9b88e7d08c6067fe)] - fix(docs): yield db.query (#921) (Yao Mengfei <<coogleyao@gmail.com>>)
* [[`ddd342c`](http://github.com/eggjs/egg/commit/ddd342c84358319aaffe9ee6eab90c2df1a2e9dc)] - docs: translate basic/config.md (#875) (Brian175 <<zhangweilu@buaa.edu.cn>>)
* [[`ae99e5d`](http://github.com/eggjs/egg/commit/ae99e5d6ee032171d17ce7ce67a8cb3c2f7bd04b)] - fix(docs): basics/structure.md link agent typo (#909) (Weilun Xiong <<330815461@qq.com>>)
* [[`fac3e0c`](http://github.com/eggjs/egg/commit/fac3e0c7306b1143698c29a3685c8116c36b1434)] - refactor: rename private method name to symbol (#904) (Yu Qi <<njuyuqi@gmail.com>>)
* [[`8115c57`](http://github.com/eggjs/egg/commit/8115c575ea082a92ebda5e4fd08ba4ad37e47bc0)] - docs: translate docs/source/zh-cn/tutorials/mysql.md (#883) (Darren Wong <<darrenwongf@gmail.com>>)
* [[`e13c515`](http://github.com/eggjs/egg/commit/e13c515226566ae3c87c35b575a8e914e75c6a0b)] - Release 1.3.0 (#885) (fengmk2 <<fengmk2@gmail.com>>)
## 2017-05-11, Version 1.3.0, @fengmk2
### Notable changes
* **document**
* Documents improved. Thanks @Rwing, @lslxdx, @solarhell, @magicdawn
* API document is out https://eggjs.org/api/
* **refactor**
* Set coreLogger's consoleLevel to WARN in local env
### Commits
* [[`bd6681a`](http://github.com/eggjs/egg/commit/bd6681a509f74af7f39b1505962c0d75958ae0d3)] - chore: typo eggg=>egg (#881) (Rwing <<Rwing@rwing.cn>>)
* [[`22c9cd9`](http://github.com/eggjs/egg/commit/22c9cd96df19bb43d1681ce0cffc59bc930c8f0f)] - docs: translated & proofread 'middleware.md' (#784) (lslxdx <<lslxdx@163.com>>)
* [[`e55a134`](http://github.com/eggjs/egg/commit/e55a13439ec297081d33a7eb2f87ece605581908)] - docs: Add a link to issue template (#853) (Haoliang Gao <<sakura9515@gmail.com>>)
* [[`b01d30e`](http://github.com/eggjs/egg/commit/b01d30e33e9b910ee24d69d3b55e2dbe887ff4e3)] - docs: Fix typo. (#869) (jethro <<songjiaxin2008@gmail.com>>)
* [[`b3403b5`](http://github.com/eggjs/egg/commit/b3403b56a5635394a4dc9825ef2780850449e573)] - docs: fix view typo (#867) (Tao <<magicdawn@qq.com>>)
* [[`5d6e067`](http://github.com/eggjs/egg/commit/5d6e067fc36697b7c01f290bccac06ce21fb4371)] - chore: add quality badge (#857) (仙森 <<chaogui.hcg@alibaba-inc.com>>)
* [[`8d6755b`](http://github.com/eggjs/egg/commit/8d6755b33c54d6230d1b20141dd6d043ed6c3897)] - deps: upgrade dependencies (#854) (Haoliang Gao <<sakura9515@gmail.com>>)
* [[`bd0a827`](http://github.com/eggjs/egg/commit/bd0a827c38f0a2cff42c8a73909081a1f9cd939a)] - refactor: set consoleLevel WARN of coreLogger in local (#850) (Haoliang Gao <<sakura9515@gmail.com>>)
* [[`af174ef`](http://github.com/eggjs/egg/commit/af174efb0a0dfe545849d03f8ec1fbee34559dae)] - docs: Add API document to menu (#845) (Haoliang Gao <<sakura9515@gmail.com>>)
* [[`edfc07e`](http://github.com/eggjs/egg/commit/edfc07e841b751a4c195544167f50a2ad56971e8)] - chore: generate puml (#842) (Haoliang Gao <<sakura9515@gmail.com>>)
## 2017-05-04, Version 1.2.1, @popomore
### Notable changes
* **fix**
* loadPlugin can be extended
### Commits
* [[`13587667`](http://github.com/eggjs/egg/commit/13587667ac019ca516ae11aea728e84966dc57a5)] - fix(loader): loadPlugin can be extended (#836) (Haoliang Gao <<sakura9515@gmail.com>>)
* [[`1a027ad7`](http://github.com/eggjs/egg/commit/1a027ad727468d48afe45d1f3ce54de2e4ecfd16)] - test: use assert instead of should (#837) (Haoliang Gao <<sakura9515@gmail.com>>)
* [[`89b4df9d`](http://github.com/eggjs/egg/commit/89b4df9d21ddf07efd246145c52141a72e07ad80)] - docs: fix wrong name in chinese router doc (#833) (Tomatoo <<424203705@qq.com>>)
## 2017-04-28, Version 1.2.0, @popomore
### Notable changes
* **document**
* Documents improved, Thanks @Rwing, @bingqichen, @okoala, @binsee, @lslxdx
* **feature**
* Move BaseContextClass to egg and add BaseContextLogger [#816](https://github.com/eggjs/egg/pull/816)
* Remove logger config in local environment [#695](https://github.com/eggjs/egg/pull/695)
### Commits
* [[`0757655c`](http://github.com/eggjs/egg/commit/0757655cfed451ab3b1ca5a480fb96a3da908708)] - feat: BaseContextClass add logger (#816) (Yiyu He <<dead-horse@users.noreply.github.com>>)
* [[`9871e450`](http://github.com/eggjs/egg/commit/9871e45098ab4927236382656c4ac774eeffcd11)] - docs: only use inspect at 7.x+ (#813) (TZ | 天猪 <<atian25@qq.com>>)
* [[`394bf371`](http://github.com/eggjs/egg/commit/394bf3711312f09d851be728b718e4d0f8fc9c1f)] - docs:Modify some words (#811) (binsee <<binsee@163.com>>)
* [[`1132779c`](http://github.com/eggjs/egg/commit/1132779c4057bf96be1b73a3473b1545c3b5ab7a)] - docs(head.swig):fix the document page anchor position offset. (#790) (binsee <<binsee@163.com>>)
* [[`9ef9d6aa`](http://github.com/eggjs/egg/commit/9ef9d6aa5953106555f11ac5dee6fe544773ceb8)] - fix(package.json & doc.js): fix doc tool error. (#791) (binsee <<binsee@163.com>>)
* [[`90234efb`](http://github.com/eggjs/egg/commit/90234efbae13066ced3d25e8ba7201c0197c3ab1)] - docs(middleware.md): fix grammar (lslxdx <<lslxdx@163.com>>)
* [[`9200a51d`](http://github.com/eggjs/egg/commit/9200a51d5b5c530a8f5ce8af4dd61f38981dc4c8)] - docs(basic/controller.md): typo 'matchs' -> 'matches' (#802) (lslxdx <<lslxdx@163.com>>)
* [[`b4eb05b3`](http://github.com/eggjs/egg/commit/b4eb05b301bb1226edfc634ec90d1a5ae53514e2)] - docs(zh-cn docs):fix some link and link text in docs (#789) (binsee <<binsee@163.com>>)
* [[`df1bf345`](http://github.com/eggjs/egg/commit/df1bf3459fd03f948532f7b6d2d436a74c54ed59)] - docs: add inspector protocol vscode debug (#776) (仙森 <<dapixp@
Showing preview only (370K chars total). Download the full file or copy to clipboard to get everything.
gitextract_0ajxm_o6/ ├── .github/ │ ├── FUNDING.yml │ ├── ISSUE_TEMPLATE/ │ │ ├── bug-report-cn.yml │ │ ├── bug-report.yml │ │ ├── feature-request-cn.yml │ │ ├── feature-request.yml │ │ ├── rfc-cn.yml │ │ └── rfc.yml │ ├── actions/ │ │ └── clone/ │ │ └── action.yml │ ├── copilot-instructions.md │ └── workflows/ │ ├── ci.yml │ ├── cleanup-cache.yml │ ├── e2e-test.yml │ └── release.yml ├── .gitignore ├── .husky/ │ └── pre-commit ├── .node-version ├── .oxfmtrc.json ├── .oxlintrc.json ├── .vscode/ │ └── settings.json ├── AGENTS.md ├── CHANGELOG.md ├── CLAUDE.md ├── CONTRIBUTING.md ├── CONTRIBUTING.zh-CN.md ├── LICENSE ├── README.md ├── README.zh-CN.md ├── SECURITY.md ├── ecosystem-ci/ │ ├── clone.ts │ ├── patch-project.ts │ └── repo.json ├── examples/ │ ├── helloworld-commonjs/ │ │ ├── app/ │ │ │ ├── controller/ │ │ │ │ └── home.js │ │ │ └── router.js │ │ ├── config/ │ │ │ ├── config.default.js │ │ │ └── plugin.js │ │ ├── index.js │ │ └── package.json │ ├── helloworld-tegg/ │ │ ├── app/ │ │ │ ├── biz/ │ │ │ │ ├── Foo.ts │ │ │ │ ├── HelloService.ts │ │ │ │ ├── WorldService.ts │ │ │ │ └── package.json │ │ │ └── port/ │ │ │ ├── controller/ │ │ │ │ ├── ArgsController.ts │ │ │ │ ├── HomeController.ts │ │ │ │ └── SimpleController.ts │ │ │ ├── package.json │ │ │ └── schedule/ │ │ │ ├── CronDemo.ts │ │ │ └── Demo.ts │ │ ├── app.ts │ │ ├── config/ │ │ │ ├── config.default.ts │ │ │ └── plugin.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── ArgsController.test.ts │ │ │ ├── SimpleController.test.ts │ │ │ └── setup.ts │ │ ├── tsconfig.json │ │ ├── tsdown.config.ts │ │ └── vitest.config.ts │ └── helloworld-typescript/ │ ├── app/ │ │ ├── controller/ │ │ │ └── home.ts │ │ ├── middleware/ │ │ │ └── hello.ts │ │ └── router.ts │ ├── app.ts │ ├── config/ │ │ └── config.default.ts │ ├── package.json │ ├── test/ │ │ ├── hello.test.ts │ │ └── setup.ts │ ├── tsconfig.json │ ├── tsdown.config.ts │ └── vitest.config.ts ├── package.json ├── packages/ │ ├── cluster/ │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── agent_worker.ts │ │ │ ├── app_worker.ts │ │ │ ├── error/ │ │ │ │ ├── ClusterAgentWorkerError.ts │ │ │ │ ├── ClusterWorkerExceptionError.ts │ │ │ │ └── index.ts │ │ │ ├── index.ts │ │ │ ├── master.ts │ │ │ └── utils/ │ │ │ ├── messenger.ts │ │ │ ├── mode/ │ │ │ │ ├── base/ │ │ │ │ │ ├── agent.ts │ │ │ │ │ └── app.ts │ │ │ │ └── impl/ │ │ │ │ ├── process/ │ │ │ │ │ ├── agent.ts │ │ │ │ │ └── app.ts │ │ │ │ └── worker_threads/ │ │ │ │ ├── agent.ts │ │ │ │ └── app.ts │ │ │ ├── options.ts │ │ │ ├── terminate.ts │ │ │ └── worker_manager.ts │ │ ├── test/ │ │ │ ├── agent_worker.test.ts │ │ │ ├── app_worker.test.ts │ │ │ ├── fixtures/ │ │ │ │ ├── apps/ │ │ │ │ │ ├── agent-debug-port/ │ │ │ │ │ │ ├── agent.js │ │ │ │ │ │ ├── inject1.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── agent-die/ │ │ │ │ │ │ ├── agent.js │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ └── start.js │ │ │ │ │ ├── agent-die-on-forkapp/ │ │ │ │ │ │ ├── agent.js │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── agent-die-onboot/ │ │ │ │ │ │ ├── agent.js │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ └── start.js │ │ │ │ │ ├── agent-exit/ │ │ │ │ │ │ ├── agent.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── agent-start-error/ │ │ │ │ │ │ ├── agent.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── agent-start-framework-error/ │ │ │ │ │ │ ├── agent.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── agent-start-framework-ready-error/ │ │ │ │ │ │ ├── agent.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── agent-worker-threads/ │ │ │ │ │ │ ├── agent.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── agent-worker-threads-error/ │ │ │ │ │ │ ├── agent.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── app-die/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── app-error-listeners/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── app-exit/ │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── app-kill/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── app-listen-hostname/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── app-listen-path/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── app-listen-port/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── app-listen-reusePort/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── app-listen-without-port/ │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── app-monitor/ │ │ │ │ │ │ ├── agent.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── app-server/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── app-start-error/ │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── app-start-framework-error/ │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── app-start-framework-ready-error/ │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── app-start-timeout/ │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── before-close/ │ │ │ │ │ │ ├── agent.js │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── check-status/ │ │ │ │ │ │ ├── agent.js │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── cluster_mod_app/ │ │ │ │ │ │ ├── .gitignore │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ └── home.js │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── cluster_mod_sticky/ │ │ │ │ │ │ ├── .gitignore │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ └── home.js │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── custom-logger/ │ │ │ │ │ │ ├── agent.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── debug-port/ │ │ │ │ │ │ ├── agent.js │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── egg-ready/ │ │ │ │ │ │ ├── agent.js │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── framework/ │ │ │ │ │ │ ├── agent.js │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ ├── lib/ │ │ │ │ │ │ │ ├── agent.js │ │ │ │ │ │ │ ├── framework.js │ │ │ │ │ │ │ └── plugins/ │ │ │ │ │ │ │ └── custom/ │ │ │ │ │ │ │ ├── agent.js │ │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── framework-egg-default/ │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── framework-egg-default-noexist/ │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── framework-pkg-egg/ │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── framework-pkg-egg-noexist/ │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── frameworkapp/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ └── home.js │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── frameworkbiz/ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── https-server/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── https-server-config/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── master-worker-started/ │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── messenger/ │ │ │ │ │ │ ├── agent.js │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── mock-production-app/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ │ └── map.json │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── options/ │ │ │ │ │ │ ├── agent.js │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── options-require/ │ │ │ │ │ │ ├── agent.js │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ ├── inject.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── other-port/ │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── pid/ │ │ │ │ │ │ ├── agent.js │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── reload-worker/ │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── script-start/ │ │ │ │ │ │ └── start-server.js │ │ │ │ │ ├── send-to-multiapp/ │ │ │ │ │ │ ├── agent.js │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── sub-process/ │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ ├── worker1.js │ │ │ │ │ │ └── worker2.js │ │ │ │ │ ├── sub-process-sigkill/ │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ ├── worker1.js │ │ │ │ │ │ └── worker2.js │ │ │ │ │ ├── worker-close-timeout/ │ │ │ │ │ │ ├── agent.js │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ └── package.json │ │ │ │ │ └── worker-die/ │ │ │ │ │ ├── app.js │ │ │ │ │ └── package.json │ │ │ │ ├── egg/ │ │ │ │ │ ├── index.js │ │ │ │ │ └── package.json │ │ │ │ ├── server.ca │ │ │ │ ├── server.cert │ │ │ │ └── server.key │ │ │ ├── https.test.ts │ │ │ ├── master/ │ │ │ │ ├── after-start.test.ts │ │ │ │ ├── check-pid-file.test.ts │ │ │ │ ├── close-master.test.ts │ │ │ │ ├── messenger.test.ts │ │ │ │ ├── others.test.ts │ │ │ │ └── start-master.test.ts │ │ │ ├── options.test.ts │ │ │ ├── utils.ts │ │ │ └── worker_threads.test.ts │ │ ├── tsconfig.json │ │ ├── tsdown.config.ts │ │ └── vitest.config.ts │ ├── cookies/ │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── README.zh-CN.md │ │ ├── benchmark/ │ │ │ └── index.cjs │ │ ├── package.json │ │ ├── src/ │ │ │ ├── cookie.ts │ │ │ ├── cookies.ts │ │ │ ├── error.ts │ │ │ ├── index.ts │ │ │ └── keygrip.ts │ │ ├── test/ │ │ │ ├── cookie.test.ts │ │ │ ├── cookies.test.ts │ │ │ ├── cookies.ts │ │ │ └── keygrip.test.ts │ │ ├── tsconfig.json │ │ └── tsdown.config.ts │ ├── core/ │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── benchmark/ │ │ │ └── middleware/ │ │ │ ├── README.md │ │ │ ├── app/ │ │ │ │ ├── controller/ │ │ │ │ │ └── home.js │ │ │ │ ├── middleware/ │ │ │ │ │ └── async.js │ │ │ │ └── router.js │ │ │ ├── package.json │ │ │ ├── run.sh │ │ │ └── start.js │ │ ├── example/ │ │ │ └── middleware/ │ │ │ └── hello.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── base_context_class.ts │ │ │ ├── egg.ts │ │ │ ├── index.ts │ │ │ ├── lifecycle.ts │ │ │ ├── loader/ │ │ │ │ ├── context_loader.ts │ │ │ │ ├── egg_loader.ts │ │ │ │ └── file_loader.ts │ │ │ ├── singleton.ts │ │ │ ├── types.ts │ │ │ └── utils/ │ │ │ ├── index.ts │ │ │ ├── sequencify.ts │ │ │ └── timing.ts │ │ ├── test/ │ │ │ ├── __snapshots__/ │ │ │ │ └── index.test.ts.snap │ │ │ ├── asyncLocalStorage.test.ts │ │ │ ├── egg-ts.test.ts │ │ │ ├── egg.test.ts │ │ │ ├── fixtures/ │ │ │ │ ├── agent/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── extend/ │ │ │ │ │ │ ├── agent.js │ │ │ │ │ │ └── context.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── node_modules/ │ │ │ │ │ │ ├── a/ │ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ │ └── extend/ │ │ │ │ │ │ │ │ └── agent.js │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ └── b/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ └── extend/ │ │ │ │ │ │ │ └── agent.js │ │ │ │ │ │ └── package.json │ │ │ │ │ └── package.json │ │ │ │ ├── app-before-close/ │ │ │ │ │ ├── app.js │ │ │ │ │ └── package.json │ │ │ │ ├── app-core-middleware/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ └── package.json │ │ │ │ ├── app-getter/ │ │ │ │ │ └── package.json │ │ │ │ ├── app-noname/ │ │ │ │ │ └── package.json │ │ │ │ ├── app-outdir-pkg/ │ │ │ │ │ └── package.json │ │ │ │ ├── app-outdir-precedence/ │ │ │ │ │ ├── build/ │ │ │ │ │ │ └── config/ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ ├── package.json │ │ │ │ │ └── tsconfig.json │ │ │ │ ├── app-outdir-tsconfig/ │ │ │ │ │ ├── build/ │ │ │ │ │ │ └── config/ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ ├── package.json │ │ │ │ │ └── tsconfig.json │ │ │ │ ├── app-ts/ │ │ │ │ │ ├── app-error.ts │ │ │ │ │ ├── app.ts │ │ │ │ │ └── tsconfig.json │ │ │ │ ├── appinfo/ │ │ │ │ │ └── package.json │ │ │ │ ├── application/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── extend/ │ │ │ │ │ │ ├── application.js │ │ │ │ │ │ └── context.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── node_modules/ │ │ │ │ │ │ ├── a/ │ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ │ └── extend/ │ │ │ │ │ │ │ │ └── application.js │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ └── b/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ └── extend/ │ │ │ │ │ │ │ └── application.js │ │ │ │ │ │ └── package.json │ │ │ │ │ └── package.json │ │ │ │ ├── appname/ │ │ │ │ │ └── package.json │ │ │ │ ├── beforestart/ │ │ │ │ │ ├── app.js │ │ │ │ │ └── package.json │ │ │ │ ├── beforestart-error/ │ │ │ │ │ ├── app.js │ │ │ │ │ └── package.json │ │ │ │ ├── beforestart-params-error/ │ │ │ │ │ ├── app.js │ │ │ │ │ └── package.json │ │ │ │ ├── beforestart-timeout/ │ │ │ │ │ ├── app.js │ │ │ │ │ └── package.json │ │ │ │ ├── beforestart-with-timeout-env/ │ │ │ │ │ ├── app.js │ │ │ │ │ └── package.json │ │ │ │ ├── boot/ │ │ │ │ │ ├── agent.js │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── plugin/ │ │ │ │ │ │ ├── boot-plugin/ │ │ │ │ │ │ │ ├── agent.js │ │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ ├── boot-plugin-dep/ │ │ │ │ │ │ │ ├── agent.js │ │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ └── boot-plugin-empty/ │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── app.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ └── package.json │ │ │ │ ├── boot-before-close/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── plugin/ │ │ │ │ │ │ ├── boot-plugin/ │ │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ └── boot-plugin-dep/ │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── app.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ └── package.json │ │ │ │ ├── boot-configDidLoad-error/ │ │ │ │ │ ├── app.js │ │ │ │ │ └── package.json │ │ │ │ ├── boot-didLoad-error/ │ │ │ │ │ ├── app.js │ │ │ │ │ └── package.json │ │ │ │ ├── boot-didReady-error/ │ │ │ │ │ ├── app.js │ │ │ │ │ └── package.json │ │ │ │ ├── boot-serverDidLoad-error/ │ │ │ │ │ ├── app.js │ │ │ │ │ └── package.json │ │ │ │ ├── boot-timeout/ │ │ │ │ │ ├── app.js │ │ │ │ │ └── package.json │ │ │ │ ├── boot-willReady-error/ │ │ │ │ │ ├── app.js │ │ │ │ │ └── package.json │ │ │ │ ├── close/ │ │ │ │ │ └── package.json │ │ │ │ ├── config/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ ├── foo.js │ │ │ │ │ │ │ └── util/ │ │ │ │ │ │ │ └── a.js │ │ │ │ │ │ └── services/ │ │ │ │ │ │ ├── foo.js │ │ │ │ │ │ └── util/ │ │ │ │ │ │ └── bar.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.js │ │ │ │ │ └── package.json │ │ │ │ ├── config-array/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── package.json │ │ │ │ │ └── plugin/ │ │ │ │ │ ├── a/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ └── b/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ └── package.json │ │ │ │ ├── config-env/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ └── package.json │ │ │ │ ├── config-env-app-config/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ └── package.json │ │ │ │ ├── configmeta/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.js │ │ │ │ │ └── package.json │ │ │ │ ├── context-loader/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── depth/ │ │ │ │ │ │ │ ├── four/ │ │ │ │ │ │ │ │ └── four/ │ │ │ │ │ │ │ │ └── four/ │ │ │ │ │ │ │ │ └── four.js │ │ │ │ │ │ │ ├── one.js │ │ │ │ │ │ │ ├── three/ │ │ │ │ │ │ │ │ └── three/ │ │ │ │ │ │ │ │ └── three.js │ │ │ │ │ │ │ └── two/ │ │ │ │ │ │ │ └── two.js │ │ │ │ │ │ ├── extend/ │ │ │ │ │ │ │ └── context.js │ │ │ │ │ │ ├── pathname/ │ │ │ │ │ │ │ └── a/ │ │ │ │ │ │ │ └── b/ │ │ │ │ │ │ │ └── c.js │ │ │ │ │ │ ├── router.js │ │ │ │ │ │ ├── service/ │ │ │ │ │ │ │ ├── post.js │ │ │ │ │ │ │ └── user.js │ │ │ │ │ │ ├── service1/ │ │ │ │ │ │ │ └── user.js │ │ │ │ │ │ ├── service2/ │ │ │ │ │ │ │ └── user.js │ │ │ │ │ │ └── type/ │ │ │ │ │ │ ├── class.js │ │ │ │ │ │ ├── function-class.js │ │ │ │ │ │ ├── generator.js │ │ │ │ │ │ ├── null │ │ │ │ │ │ ├── number.js │ │ │ │ │ │ └── object.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ └── package.json │ │ │ │ ├── controller-app/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ ├── admin/ │ │ │ │ │ │ │ │ └── config.js │ │ │ │ │ │ │ ├── async_function.js │ │ │ │ │ │ │ ├── class.js │ │ │ │ │ │ │ ├── class_inherited.js │ │ │ │ │ │ │ ├── class_wrap_function.js │ │ │ │ │ │ │ ├── function_attr.js │ │ │ │ │ │ │ ├── generator_function.js │ │ │ │ │ │ │ ├── generator_function_ctx.js │ │ │ │ │ │ │ ├── number.js │ │ │ │ │ │ │ ├── object.js │ │ │ │ │ │ │ ├── resource_class.js │ │ │ │ │ │ │ └── resource_object.js │ │ │ │ │ │ ├── router.js │ │ │ │ │ │ └── service/ │ │ │ │ │ │ └── home.js │ │ │ │ │ └── package.json │ │ │ │ ├── controller-next-argument/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── controller/ │ │ │ │ │ │ └── home.js │ │ │ │ │ └── package.json │ │ │ │ ├── controller-params/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ ├── class.js │ │ │ │ │ │ │ ├── generator_function.js │ │ │ │ │ │ │ └── object.js │ │ │ │ │ │ └── router.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ └── package.json │ │ │ │ ├── custom-loader/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── adapter/ │ │ │ │ │ │ │ └── docker.js │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ └── user.js │ │ │ │ │ │ ├── plugin/ │ │ │ │ │ │ │ └── a.js │ │ │ │ │ │ ├── repository/ │ │ │ │ │ │ │ └── user.js │ │ │ │ │ │ ├── router.js │ │ │ │ │ │ └── util/ │ │ │ │ │ │ ├── sub/ │ │ │ │ │ │ │ └── fn.js │ │ │ │ │ │ └── test.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── b/ │ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ │ └── plugin/ │ │ │ │ │ │ │ │ └── b.js │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ └── plugin.js │ │ │ │ │ └── package.json │ │ │ │ ├── custom_session_invaild/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── middleware/ │ │ │ │ │ │ └── session.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.js │ │ │ │ │ └── package.json │ │ │ │ ├── deprecate/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── extend/ │ │ │ │ │ │ └── application.js │ │ │ │ │ └── package.json │ │ │ │ ├── dont-load-plugin/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ └── package.json │ │ │ │ ├── egg/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── extend/ │ │ │ │ │ │ │ └── application.js │ │ │ │ │ │ └── middleware/ │ │ │ │ │ │ └── status.ts │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── config.default.ts │ │ │ │ │ │ ├── config.unittest.js │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── index.js │ │ │ │ │ ├── package.json │ │ │ │ │ └── plugins/ │ │ │ │ │ ├── configclient/ │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── diamond/ │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── eagleeye/ │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── hsfclient/ │ │ │ │ │ │ └── package.json │ │ │ │ │ └── zzz/ │ │ │ │ │ └── package.json │ │ │ │ ├── egg-esm/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── extend/ │ │ │ │ │ │ │ └── application.js │ │ │ │ │ │ └── middleware/ │ │ │ │ │ │ └── status.ts │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ ├── config.unittest.js │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── node_modules/ │ │ │ │ │ │ ├── opt/ │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ ├── package/ │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ └── session/ │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── package.json │ │ │ │ │ └── plugins/ │ │ │ │ │ ├── configclient/ │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── diamond/ │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── eagleeye/ │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── hsfclient/ │ │ │ │ │ │ └── package.json │ │ │ │ │ └── zzz/ │ │ │ │ │ └── package.json │ │ │ │ ├── egg-ts/ │ │ │ │ │ ├── agent.ts │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ └── home.ts │ │ │ │ │ │ ├── extend/ │ │ │ │ │ │ │ ├── agent.ts │ │ │ │ │ │ │ ├── application.ts │ │ │ │ │ │ │ ├── context.ts │ │ │ │ │ │ │ ├── helper.ts │ │ │ │ │ │ │ ├── request.ts │ │ │ │ │ │ │ └── response.ts │ │ │ │ │ │ ├── middleware/ │ │ │ │ │ │ │ └── mid.ts │ │ │ │ │ │ ├── router.ts │ │ │ │ │ │ └── service/ │ │ │ │ │ │ └── Test.ts │ │ │ │ │ ├── app.ts │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── config.default.ts │ │ │ │ │ │ └── plugin.ts │ │ │ │ │ ├── package.json │ │ │ │ │ └── plugins/ │ │ │ │ │ └── a/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.default.ts │ │ │ │ │ └── package.json │ │ │ │ ├── egg-ts-js/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ ├── god.d.ts │ │ │ │ │ │ │ └── test.ts │ │ │ │ │ │ ├── extend/ │ │ │ │ │ │ │ └── application.ts │ │ │ │ │ │ └── service/ │ │ │ │ │ │ ├── lord.js │ │ │ │ │ │ └── test.ts │ │ │ │ │ └── package.json │ │ │ │ ├── egg-ts-js-tsconfig-paths/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ ├── god.d.ts │ │ │ │ │ │ │ └── test.ts │ │ │ │ │ │ ├── extend/ │ │ │ │ │ │ │ └── application.ts │ │ │ │ │ │ └── service/ │ │ │ │ │ │ ├── lord.js │ │ │ │ │ │ └── test.ts │ │ │ │ │ ├── package.json │ │ │ │ │ └── tsconfig.json │ │ │ │ ├── eggpath/ │ │ │ │ │ └── package.json │ │ │ │ ├── env-disable/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── node_modules/ │ │ │ │ │ │ └── @ali/ │ │ │ │ │ │ ├── a/ │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ └── b/ │ │ │ │ │ │ └── package.json │ │ │ │ │ └── package.json │ │ │ │ ├── extend/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ ├── home.js │ │ │ │ │ │ │ └── merge.js │ │ │ │ │ │ ├── extend/ │ │ │ │ │ │ │ ├── application.js │ │ │ │ │ │ │ ├── call.js │ │ │ │ │ │ │ ├── context.js │ │ │ │ │ │ │ ├── request.js │ │ │ │ │ │ │ └── response.js │ │ │ │ │ │ └── router.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── node_modules/ │ │ │ │ │ │ ├── a/ │ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ │ └── extend/ │ │ │ │ │ │ │ │ ├── application.js │ │ │ │ │ │ │ │ ├── context.js │ │ │ │ │ │ │ │ ├── request.js │ │ │ │ │ │ │ │ └── response.js │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ └── b/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ └── extend/ │ │ │ │ │ │ │ ├── application.js │ │ │ │ │ │ │ ├── context/ │ │ │ │ │ │ │ │ └── index.js │ │ │ │ │ │ │ ├── request.js │ │ │ │ │ │ │ └── response.js │ │ │ │ │ │ └── package.json │ │ │ │ │ └── package.json │ │ │ │ ├── extend-controller-service/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ └── api.js │ │ │ │ │ │ ├── router.js │ │ │ │ │ │ └── service/ │ │ │ │ │ │ └── api.js │ │ │ │ │ ├── app.js │ │ │ │ │ └── package.json │ │ │ │ ├── extend-env/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── extend/ │ │ │ │ │ │ ├── application.custom.js │ │ │ │ │ │ └── application.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── package.json │ │ │ │ │ └── plugins/ │ │ │ │ │ └── a/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── extend/ │ │ │ │ │ │ └── application.custom.js │ │ │ │ │ └── package.json │ │ │ │ ├── extend-symbol/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── extend/ │ │ │ │ │ │ └── application.js │ │ │ │ │ └── package.json │ │ │ │ ├── extend-with-class/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ └── home.js │ │ │ │ │ │ ├── extend/ │ │ │ │ │ │ │ ├── application.js │ │ │ │ │ │ │ ├── context.js │ │ │ │ │ │ │ ├── request.js │ │ │ │ │ │ │ └── response.js │ │ │ │ │ │ └── router.js │ │ │ │ │ └── package.json │ │ │ │ ├── extends-app-service/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ └── user.js │ │ │ │ │ │ ├── router.js │ │ │ │ │ │ └── service/ │ │ │ │ │ │ └── user.js │ │ │ │ │ └── package.json │ │ │ │ ├── framework-dulp/ │ │ │ │ │ ├── index.js │ │ │ │ │ └── package.json │ │ │ │ ├── framework-nosymbol/ │ │ │ │ │ ├── index.js │ │ │ │ │ └── package.json │ │ │ │ ├── framework-symbol/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.js │ │ │ │ │ ├── index.js │ │ │ │ │ └── package.json │ │ │ │ ├── framework-wrong-eggpath/ │ │ │ │ │ ├── index.js │ │ │ │ │ └── package.json │ │ │ │ ├── helloworld-ts/ │ │ │ │ │ ├── .eslintrc │ │ │ │ │ ├── .gitignore │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ └── foo.ts │ │ │ │ │ │ └── router.ts │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.default.ts │ │ │ │ │ ├── package.json │ │ │ │ │ ├── test/ │ │ │ │ │ │ └── index.test.ts │ │ │ │ │ └── tsconfig.json │ │ │ │ ├── helper/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ └── home.js │ │ │ │ │ │ ├── extend/ │ │ │ │ │ │ │ ├── application.js │ │ │ │ │ │ │ ├── context.js │ │ │ │ │ │ │ └── helper.js │ │ │ │ │ │ └── router.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── node_modules/ │ │ │ │ │ │ ├── a/ │ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ │ └── extend/ │ │ │ │ │ │ │ │ └── helper.js │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ └── b/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ └── extend/ │ │ │ │ │ │ │ └── helper.js │ │ │ │ │ │ └── package.json │ │ │ │ │ └── package.json │ │ │ │ ├── load-plugin-by-env/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── plugin.custom.js │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ └── plugin.unittest.js │ │ │ │ │ ├── package.json │ │ │ │ │ └── plugins/ │ │ │ │ │ ├── a/ │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── b/ │ │ │ │ │ │ └── package.json │ │ │ │ │ └── c/ │ │ │ │ │ └── package.json │ │ │ │ ├── load-plugin-config-override/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── package.json │ │ │ │ │ └── plugins/ │ │ │ │ │ └── zzz/ │ │ │ │ │ └── package.json │ │ │ │ ├── load-plugin-default/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── plugin.default.js │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ └── plugin.unittest.js │ │ │ │ │ ├── package.json │ │ │ │ │ └── plugins/ │ │ │ │ │ ├── a/ │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── b/ │ │ │ │ │ │ └── package.json │ │ │ │ │ └── c/ │ │ │ │ │ └── package.json │ │ │ │ ├── load-plugin-unittest/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── extend/ │ │ │ │ │ │ ├── application.local.js │ │ │ │ │ │ └── application.unittest.js │ │ │ │ │ └── package.json │ │ │ │ ├── load_context_error/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── extend/ │ │ │ │ │ │ └── context.js │ │ │ │ │ ├── load_context/ │ │ │ │ │ │ └── package.json │ │ │ │ │ └── package.json │ │ │ │ ├── load_context_syntax_error/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── extend/ │ │ │ │ │ │ └── context.js │ │ │ │ │ └── package.json │ │ │ │ ├── load_dirs/ │ │ │ │ │ ├── babel/ │ │ │ │ │ │ └── UserProxy.js │ │ │ │ │ ├── camelize/ │ │ │ │ │ │ ├── FooBar3.js │ │ │ │ │ │ ├── foo-bar4.js │ │ │ │ │ │ ├── fooBar2.js │ │ │ │ │ │ └── foo_bar1.js │ │ │ │ │ ├── class/ │ │ │ │ │ │ └── UserProxy.js │ │ │ │ │ ├── dao/ │ │ │ │ │ │ ├── TestClass.js │ │ │ │ │ │ ├── testFunction.js │ │ │ │ │ │ └── testReturnFunction.js │ │ │ │ │ ├── error/ │ │ │ │ │ │ ├── dotdir/ │ │ │ │ │ │ │ └── dot.dir/ │ │ │ │ │ │ │ └── a.js │ │ │ │ │ │ ├── underscore-dir/ │ │ │ │ │ │ │ └── _underscore/ │ │ │ │ │ │ │ └── a.js │ │ │ │ │ │ ├── underscore-file/ │ │ │ │ │ │ │ └── _private.js │ │ │ │ │ │ └── underscore-file-in-dir/ │ │ │ │ │ │ └── dir/ │ │ │ │ │ │ └── _a.js │ │ │ │ │ ├── es6_module/ │ │ │ │ │ │ └── mod.js │ │ │ │ │ ├── filter/ │ │ │ │ │ │ ├── arr.js │ │ │ │ │ │ ├── class.js │ │ │ │ │ │ └── object.js │ │ │ │ │ ├── ignore/ │ │ │ │ │ │ ├── a.js │ │ │ │ │ │ └── util/ │ │ │ │ │ │ ├── a.js │ │ │ │ │ │ └── b/ │ │ │ │ │ │ └── b.js │ │ │ │ │ ├── inject/ │ │ │ │ │ │ ├── a.js │ │ │ │ │ │ └── b.js │ │ │ │ │ ├── lowercase/ │ │ │ │ │ │ ├── SomeClass.js │ │ │ │ │ │ └── SomeDir/ │ │ │ │ │ │ └── SomeSubClass.js │ │ │ │ │ ├── middlewares/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── m1.js │ │ │ │ │ │ │ ├── m2.js │ │ │ │ │ │ │ └── other/ │ │ │ │ │ │ │ ├── bar.js │ │ │ │ │ │ │ └── foo/ │ │ │ │ │ │ │ └── ok.js │ │ │ │ │ │ └── default/ │ │ │ │ │ │ ├── dm1.js │ │ │ │ │ │ ├── dm2.js │ │ │ │ │ │ └── session.js │ │ │ │ │ ├── overwrite_services/ │ │ │ │ │ │ └── foo.js │ │ │ │ │ ├── package.json │ │ │ │ │ ├── services/ │ │ │ │ │ │ ├── bar.js/ │ │ │ │ │ │ │ └── aaa │ │ │ │ │ │ ├── dir/ │ │ │ │ │ │ │ ├── abc.js │ │ │ │ │ │ │ └── service.js │ │ │ │ │ │ ├── foo.js │ │ │ │ │ │ ├── foo_bar_hello.js │ │ │ │ │ │ ├── foo_service.js │ │ │ │ │ │ ├── hyphen-dir/ │ │ │ │ │ │ │ └── a.js │ │ │ │ │ │ ├── null.js │ │ │ │ │ │ ├── tmp │ │ │ │ │ │ ├── underscore_dir/ │ │ │ │ │ │ │ └── a.js │ │ │ │ │ │ └── userProfile.js │ │ │ │ │ ├── syntax_error/ │ │ │ │ │ │ └── error.js │ │ │ │ │ ├── ts_module/ │ │ │ │ │ │ ├── mod.ts │ │ │ │ │ │ ├── mod2.ts │ │ │ │ │ │ └── mod3.ts │ │ │ │ │ └── yml/ │ │ │ │ │ └── config.yml │ │ │ │ ├── load_file/ │ │ │ │ │ ├── async.js │ │ │ │ │ ├── es-module-default-async.js │ │ │ │ │ ├── es-module-default-null.js │ │ │ │ │ ├── es-module-default-promise.js │ │ │ │ │ ├── es-module-default.js │ │ │ │ │ ├── function.js │ │ │ │ │ ├── no-js.yml │ │ │ │ │ ├── obj.js │ │ │ │ │ ├── package.json │ │ │ │ │ └── promise_function.js │ │ │ │ ├── load_to_app/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── model/ │ │ │ │ │ │ │ └── user.js │ │ │ │ │ │ └── service/ │ │ │ │ │ │ └── user.js │ │ │ │ │ └── package.json │ │ │ │ ├── loadfile/ │ │ │ │ │ ├── es-module-default-async.js │ │ │ │ │ ├── es-module-default-null.js │ │ │ │ │ ├── es-module-default-promise.js │ │ │ │ │ ├── es-module-default.js │ │ │ │ │ ├── es-module.js │ │ │ │ │ ├── no-js.yml │ │ │ │ │ ├── null.js │ │ │ │ │ ├── object.js │ │ │ │ │ ├── object2.mjs │ │ │ │ │ ├── package.json │ │ │ │ │ └── zero.js │ │ │ │ ├── loadfile-esm/ │ │ │ │ │ ├── es-module-default-async.js │ │ │ │ │ ├── es-module-default-null.js │ │ │ │ │ ├── es-module-default-promise.js │ │ │ │ │ ├── es-module-default.js │ │ │ │ │ ├── es-module.js │ │ │ │ │ ├── no-js.yml │ │ │ │ │ ├── null.js │ │ │ │ │ ├── object.js │ │ │ │ │ ├── object2.cjs │ │ │ │ │ ├── package.json │ │ │ │ │ └── zero.js │ │ │ │ ├── middleware-aa/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── middleware/ │ │ │ │ │ │ │ ├── common.js │ │ │ │ │ │ │ ├── custom.js │ │ │ │ │ │ │ ├── match.js │ │ │ │ │ │ │ ├── router.js │ │ │ │ │ │ │ └── static.js │ │ │ │ │ │ └── router.js │ │ │ │ │ ├── app.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.js │ │ │ │ │ └── package.json │ │ │ │ ├── middleware-app-disable/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── middleware/ │ │ │ │ │ │ ├── custom.js │ │ │ │ │ │ └── static.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.js │ │ │ │ │ └── package.json │ │ │ │ ├── middleware-disable/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── middleware/ │ │ │ │ │ │ ├── custom.js │ │ │ │ │ │ └── static.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.js │ │ │ │ │ └── package.json │ │ │ │ ├── middleware-ignore/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── middleware/ │ │ │ │ │ │ ├── custom.js │ │ │ │ │ │ └── static.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.js │ │ │ │ │ └── package.json │ │ │ │ ├── middleware-match/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── middleware/ │ │ │ │ │ │ ├── custom.js │ │ │ │ │ │ └── static.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.js │ │ │ │ │ └── package.json │ │ │ │ ├── middleware-override/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── middleware/ │ │ │ │ │ │ ├── custom.js │ │ │ │ │ │ └── static.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── config.js │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── node_modules/ │ │ │ │ │ │ ├── a/ │ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ │ └── middleware/ │ │ │ │ │ │ │ │ ├── a.js │ │ │ │ │ │ │ │ └── custom.js │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ └── b/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ └── middleware/ │ │ │ │ │ │ │ ├── b.js │ │ │ │ │ │ │ ├── custom.js │ │ │ │ │ │ │ └── status.js │ │ │ │ │ │ └── package.json │ │ │ │ │ └── package.json │ │ │ │ ├── middleware-redefined/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── middleware/ │ │ │ │ │ │ ├── custom.js │ │ │ │ │ │ └── static.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.js │ │ │ │ │ └── package.json │ │ │ │ ├── no-core-middleware/ │ │ │ │ │ └── package.json │ │ │ │ ├── no-dep-plugin/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── package.json │ │ │ │ │ └── plugins/ │ │ │ │ │ └── a/ │ │ │ │ │ └── package.json │ │ │ │ ├── no-helper/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── extend/ │ │ │ │ │ │ └── helper.js │ │ │ │ │ └── package.json │ │ │ │ ├── no-middleware/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.js │ │ │ │ │ └── package.json │ │ │ │ ├── no-redefine-plugin/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ └── package.json │ │ │ │ ├── noplugin/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ └── package.json │ │ │ │ ├── nothing/ │ │ │ │ │ └── package.json │ │ │ │ ├── notready/ │ │ │ │ │ ├── a/ │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ └── package.json │ │ │ │ ├── other-directory/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── other-controller/ │ │ │ │ │ │ │ └── user.js │ │ │ │ │ │ ├── other-middleware/ │ │ │ │ │ │ │ └── user.js │ │ │ │ │ │ └── other-service/ │ │ │ │ │ │ └── user.js │ │ │ │ │ └── package.json │ │ │ │ ├── plugin/ │ │ │ │ │ ├── agent.js │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── proxy/ │ │ │ │ │ │ │ ├── OnlyClassQuery.js │ │ │ │ │ │ │ ├── UserInfoQuery.js │ │ │ │ │ │ │ └── couponQuery.js │ │ │ │ │ │ ├── router.js │ │ │ │ │ │ └── service/ │ │ │ │ │ │ ├── Foo4.js │ │ │ │ │ │ ├── foo.js │ │ │ │ │ │ ├── foo2.js │ │ │ │ │ │ ├── foo3/ │ │ │ │ │ │ │ └── foo3.js │ │ │ │ │ │ └── fooDir/ │ │ │ │ │ │ └── Foo5.js │ │ │ │ │ ├── app.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── config.js │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── node_modules/ │ │ │ │ │ │ ├── a/ │ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ │ ├── proxy/ │ │ │ │ │ │ │ │ │ └── a.js │ │ │ │ │ │ │ │ └── service/ │ │ │ │ │ │ │ │ └── bar1.js │ │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ │ └── config.js │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ ├── a1/ │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ ├── b/ │ │ │ │ │ │ │ ├── agent.js │ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ │ └── service/ │ │ │ │ │ │ │ │ └── bar2.js │ │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ ├── c/ │ │ │ │ │ │ │ ├── agent.js │ │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ │ └── config.js │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ ├── d/ │ │ │ │ │ │ │ ├── .gitkeep │ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ │ └── config.js │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ └── rds/ │ │ │ │ │ │ ├── .gitkeep │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── package.json │ │ │ │ │ ├── plugin-middleware/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── plugin-proxy/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ └── plugins/ │ │ │ │ │ ├── e/ │ │ │ │ │ │ └── package.json │ │ │ │ │ └── g/ │ │ │ │ │ └── package.json │ │ │ │ ├── plugin-complex-dependencies/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── package.json │ │ │ │ │ └── plugin/ │ │ │ │ │ ├── ddcs/ │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── ldc/ │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── rpc/ │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── vip/ │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── zoneclient/ │ │ │ │ │ │ └── package.json │ │ │ │ │ └── zookeeper/ │ │ │ │ │ └── package.json │ │ │ │ ├── plugin-complex-deps/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── package.json │ │ │ │ │ └── plugin/ │ │ │ │ │ ├── gw/ │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── rpc-server/ │ │ │ │ │ │ └── package.json │ │ │ │ │ └── tracelog/ │ │ │ │ │ └── package.json │ │ │ │ ├── plugin-dep/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ └── package.json │ │ │ │ ├── plugin-dep-disable/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── framework/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ │ └── plugins/ │ │ │ │ │ │ ├── a/ │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ ├── b/ │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ ├── c/ │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ ├── d/ │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ └── e/ │ │ │ │ │ │ └── package.json │ │ │ │ │ └── package.json │ │ │ │ ├── plugin-dep-missing/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ └── package.json │ │ │ │ ├── plugin-dep-recursive/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ └── package.json │ │ │ │ ├── plugin-duplicate/ │ │ │ │ │ ├── node_modules/ │ │ │ │ │ │ ├── @scope/ │ │ │ │ │ │ │ ├── a/ │ │ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ │ └── b/ │ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ └── a/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ └── release/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ └── package.json │ │ │ │ ├── plugin-egg-plugin/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ └── package.json │ │ │ │ ├── plugin-framework/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ └── package.json │ │ │ │ ├── plugin-from/ │ │ │ │ │ ├── a/ │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── b/ │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── framework/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ │ └── package.json │ │ │ │ │ └── package.json │ │ │ │ ├── plugin-implicit-enable-dependencies/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── package.json │ │ │ │ │ └── plugin/ │ │ │ │ │ ├── gateway/ │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── ldc/ │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── rpc_server/ │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── tracelog/ │ │ │ │ │ │ └── package.json │ │ │ │ │ └── zoneclient/ │ │ │ │ │ └── package.json │ │ │ │ ├── plugin-noexist/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ └── package.json │ │ │ │ ├── plugin-optional-dependencies/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── node_modules/ │ │ │ │ │ │ ├── a/ │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ ├── b/ │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ ├── c/ │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ ├── d/ │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ ├── e/ │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ └── f/ │ │ │ │ │ │ └── package.json │ │ │ │ │ └── package.json │ │ │ │ ├── plugin-path-package/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── node_modules/ │ │ │ │ │ │ └── hsfclient/ │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── package.json │ │ │ │ │ └── session/ │ │ │ │ │ └── package.json │ │ │ │ ├── plugin-pkg-exports/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── node_modules/ │ │ │ │ │ │ └── a/ │ │ │ │ │ │ ├── foo_dist/ │ │ │ │ │ │ │ ├── commonjs/ │ │ │ │ │ │ │ │ └── config/ │ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ │ └── esm/ │ │ │ │ │ │ │ └── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ └── package.json │ │ │ │ ├── plugin-pnpm/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── node_modules/ │ │ │ │ │ │ └── b/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ └── package.json │ │ │ │ ├── plugin-pnpm-scope/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── node_modules/ │ │ │ │ │ │ └── b/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ └── package.json │ │ │ │ ├── plugin-strict/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── config.js │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── package.json │ │ │ │ │ └── plugins/ │ │ │ │ │ └── g/ │ │ │ │ │ └── package.json │ │ │ │ ├── plugin-ts-src/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── config.js │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── package.json │ │ │ │ │ └── plugins/ │ │ │ │ │ └── g/ │ │ │ │ │ ├── package.json │ │ │ │ │ └── src/ │ │ │ │ │ └── index.ts │ │ │ │ ├── preload-app-config/ │ │ │ │ │ ├── a/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── config.js │ │ │ │ │ │ └── plugin.js │ │ │ │ │ └── package.json │ │ │ │ ├── proxy-override/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── proxy/ │ │ │ │ │ │ └── queryProxy.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ └── package.json │ │ │ │ ├── ready/ │ │ │ │ │ ├── app.js │ │ │ │ │ └── package.json │ │ │ │ ├── realpath/ │ │ │ │ │ ├── a/ │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ └── package.json │ │ │ │ ├── redefine-plugin/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ └── package.json │ │ │ │ ├── router-app/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ ├── async.js │ │ │ │ │ │ │ ├── comments.js │ │ │ │ │ │ │ ├── locals.js │ │ │ │ │ │ │ ├── members.js │ │ │ │ │ │ │ ├── middleware.js │ │ │ │ │ │ │ ├── package.js │ │ │ │ │ │ │ └── posts.js │ │ │ │ │ │ ├── middleware/ │ │ │ │ │ │ │ ├── async.js │ │ │ │ │ │ │ ├── common.js │ │ │ │ │ │ │ ├── generator.js │ │ │ │ │ │ │ └── generator_both.js │ │ │ │ │ │ ├── router.js │ │ │ │ │ │ └── views/ │ │ │ │ │ │ └── locals/ │ │ │ │ │ │ └── router.html │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ └── package.json │ │ │ │ ├── router-in-app/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── middleware/ │ │ │ │ │ │ │ └── foo.js │ │ │ │ │ │ └── router.js │ │ │ │ │ ├── app.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ └── package.json │ │ │ │ ├── run-with-debug/ │ │ │ │ │ ├── index.js │ │ │ │ │ └── package.json │ │ │ │ ├── scope/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── plugin.en.js │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── node_modules/ │ │ │ │ │ │ └── a/ │ │ │ │ │ │ └── package.json │ │ │ │ │ └── package.json │ │ │ │ ├── scope-env/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ ├── config.en.js │ │ │ │ │ │ ├── config.en_prod.js │ │ │ │ │ │ ├── config.prod.js │ │ │ │ │ │ ├── plugin.en.js │ │ │ │ │ │ ├── plugin.en_prod.js │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ └── plugin.prod.js │ │ │ │ │ ├── node_modules/ │ │ │ │ │ │ ├── a/ │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ ├── b/ │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ ├── c/ │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ └── d/ │ │ │ │ │ │ └── package.json │ │ │ │ │ └── package.json │ │ │ │ ├── serverenv/ │ │ │ │ │ └── package.json │ │ │ │ ├── serverenv-file/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── env │ │ │ │ │ └── package.json │ │ │ │ ├── service-override/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── service/ │ │ │ │ │ │ └── foo.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── node_modules/ │ │ │ │ │ │ └── a/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ └── service/ │ │ │ │ │ │ │ └── foo.js │ │ │ │ │ │ └── package.json │ │ │ │ │ └── package.json │ │ │ │ ├── service-unique/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ └── same.js │ │ │ │ │ │ ├── router.js │ │ │ │ │ │ └── service/ │ │ │ │ │ │ └── ctx.js │ │ │ │ │ └── package.json │ │ │ │ ├── services_loader_verify/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── service/ │ │ │ │ │ │ └── foo.js │ │ │ │ │ └── package.json │ │ │ │ ├── session-cache-app/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ └── home.js │ │ │ │ │ │ └── router.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.default.ts │ │ │ │ │ └── package.json │ │ │ │ ├── subdir-proxy/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── proxy/ │ │ │ │ │ │ │ ├── certify-personal/ │ │ │ │ │ │ │ │ └── mobile-hi/ │ │ │ │ │ │ │ │ └── do_certify.js │ │ │ │ │ │ │ ├── cif/ │ │ │ │ │ │ │ │ └── user.js │ │ │ │ │ │ │ ├── foo/ │ │ │ │ │ │ │ │ ├── bar.js │ │ │ │ │ │ │ │ ├── subdir/ │ │ │ │ │ │ │ │ │ └── bar.js │ │ │ │ │ │ │ │ ├── subdir1/ │ │ │ │ │ │ │ │ │ └── subdir11/ │ │ │ │ │ │ │ │ │ └── bar.js │ │ │ │ │ │ │ │ └── subdir2/ │ │ │ │ │ │ │ │ └── sub2.js │ │ │ │ │ │ │ ├── null.js │ │ │ │ │ │ │ ├── ok.js │ │ │ │ │ │ │ ├── old_style.js │ │ │ │ │ │ │ ├── undefined.js │ │ │ │ │ │ │ └── user.js │ │ │ │ │ │ └── router.js │ │ │ │ │ └── package.json │ │ │ │ ├── subdir-services/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ └── home.js │ │ │ │ │ │ ├── router.js │ │ │ │ │ │ └── service/ │ │ │ │ │ │ ├── certify-personal/ │ │ │ │ │ │ │ └── mobile-hi/ │ │ │ │ │ │ │ └── do_certify.js │ │ │ │ │ │ ├── cif/ │ │ │ │ │ │ │ └── user.js │ │ │ │ │ │ ├── foo/ │ │ │ │ │ │ │ ├── bar.js │ │ │ │ │ │ │ ├── subdir/ │ │ │ │ │ │ │ │ └── bar.js │ │ │ │ │ │ │ ├── subdir1/ │ │ │ │ │ │ │ │ └── subdir11/ │ │ │ │ │ │ │ │ └── bar.js │ │ │ │ │ │ │ └── subdir2/ │ │ │ │ │ │ │ └── sub2.js │ │ │ │ │ │ ├── null.js │ │ │ │ │ │ ├── ok.js │ │ │ │ │ │ ├── old_style.js │ │ │ │ │ │ ├── undefined.js │ │ │ │ │ │ └── user.js │ │ │ │ │ └── package.json │ │ │ │ ├── syntaxerror/ │ │ │ │ │ ├── app.js │ │ │ │ │ └── package.json │ │ │ │ └── timing/ │ │ │ │ ├── agent.js │ │ │ │ ├── app/ │ │ │ │ │ ├── controler/ │ │ │ │ │ │ └── home.js │ │ │ │ │ ├── extend/ │ │ │ │ │ │ └── application.js │ │ │ │ │ ├── middleware/ │ │ │ │ │ │ └── auth.js │ │ │ │ │ ├── proxy/ │ │ │ │ │ │ └── a.js │ │ │ │ │ ├── router.js │ │ │ │ │ └── service/ │ │ │ │ │ └── home.js │ │ │ │ ├── app.js │ │ │ │ ├── block.js │ │ │ │ ├── config/ │ │ │ │ │ ├── config.default.js │ │ │ │ │ └── plugin.js │ │ │ │ ├── index.js │ │ │ │ ├── package.json │ │ │ │ └── preload.js │ │ │ ├── helper.ts │ │ │ ├── index.test.ts │ │ │ ├── lifecycle.test.ts │ │ │ ├── loader/ │ │ │ │ ├── context_loader.test.ts │ │ │ │ ├── egg_loader.test.ts │ │ │ │ ├── file_loader.test.ts │ │ │ │ ├── get_app_info.test.ts │ │ │ │ ├── get_appname.test.ts │ │ │ │ ├── get_framework_paths.test.ts │ │ │ │ ├── get_load_units.test.ts │ │ │ │ ├── get_server_env.test.ts │ │ │ │ ├── load_file.test.ts │ │ │ │ └── mixin/ │ │ │ │ ├── load_agent_extend.test.ts │ │ │ │ ├── load_application_extend.test.ts │ │ │ │ ├── load_config.test.ts │ │ │ │ ├── load_controller.test.ts │ │ │ │ ├── load_custom_agent.test.ts │ │ │ │ ├── load_custom_app.test.ts │ │ │ │ ├── load_custom_loader.test.ts │ │ │ │ ├── load_extend.test.ts │ │ │ │ ├── load_extend_class.test.ts │ │ │ │ ├── load_helper_extend.test.ts │ │ │ │ ├── load_middleware.test.ts │ │ │ │ ├── load_plugin.test.ts │ │ │ │ └── load_service.test.ts │ │ │ ├── singleton.test.ts │ │ │ ├── support-typescript.test.ts │ │ │ └── utils/ │ │ │ ├── index.test.ts │ │ │ ├── router.test.ts │ │ │ └── timing.test.ts │ │ ├── tsconfig.json │ │ ├── tsdown.config.ts │ │ └── vitest.config.ts │ ├── egg/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── agent.ts │ │ │ ├── ajv.ts │ │ │ ├── aop.ts │ │ │ ├── app/ │ │ │ │ ├── extend/ │ │ │ │ │ ├── context.ts │ │ │ │ │ ├── helper.ts │ │ │ │ │ ├── request.ts │ │ │ │ │ └── response.ts │ │ │ │ └── middleware/ │ │ │ │ ├── body_parser.ts │ │ │ │ ├── meta.ts │ │ │ │ ├── notfound.ts │ │ │ │ ├── override_method.ts │ │ │ │ └── site_file.ts │ │ │ ├── config/ │ │ │ │ ├── config.default.ts │ │ │ │ ├── config.local.ts │ │ │ │ ├── config.unittest.ts │ │ │ │ └── plugin.ts │ │ │ ├── dal.ts │ │ │ ├── errors.ts │ │ │ ├── helper.ts │ │ │ ├── index.ts │ │ │ ├── lib/ │ │ │ │ ├── agent.ts │ │ │ │ ├── application.ts │ │ │ │ ├── core/ │ │ │ │ │ ├── base_context_class.ts │ │ │ │ │ ├── base_context_logger.ts │ │ │ │ │ ├── base_hook_class.ts │ │ │ │ │ ├── context_httpclient.ts │ │ │ │ │ ├── httpclient.ts │ │ │ │ │ ├── logger.ts │ │ │ │ │ ├── messenger/ │ │ │ │ │ │ ├── IMessenger.ts │ │ │ │ │ │ ├── base.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── ipc.ts │ │ │ │ │ │ └── local.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── define.ts │ │ │ │ ├── egg.ts │ │ │ │ ├── error/ │ │ │ │ │ ├── CookieLimitExceedError.ts │ │ │ │ │ ├── MessageUnhandledRejectionError.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── loader/ │ │ │ │ │ ├── AgentWorkerLoader.ts │ │ │ │ │ ├── AppWorkerLoader.ts │ │ │ │ │ ├── EggApplicationLoader.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── start.ts │ │ │ │ ├── types.plugin.ts │ │ │ │ └── types.ts │ │ │ ├── orm.ts │ │ │ ├── schedule.ts │ │ │ ├── transaction.ts │ │ │ └── urllib.ts │ │ ├── test/ │ │ │ ├── __snapshots__/ │ │ │ │ ├── index.test.ts.snap │ │ │ │ └── urllib.test.ts.snap │ │ │ ├── agent.test.ts │ │ │ ├── app/ │ │ │ │ ├── extend/ │ │ │ │ │ ├── agent.test.ts │ │ │ │ │ ├── application.test.ts │ │ │ │ │ ├── context.jsonp.test.ts │ │ │ │ │ ├── context.test.ts │ │ │ │ │ ├── helper.test.ts │ │ │ │ │ ├── request.test.ts │ │ │ │ │ └── response.test.ts │ │ │ │ └── middleware/ │ │ │ │ ├── body_parser.test.ts │ │ │ │ ├── meta.test.ts │ │ │ │ ├── notfound.test.ts │ │ │ │ ├── override_method.test.ts │ │ │ │ └── site_file.test.ts │ │ │ ├── application.test.ts │ │ │ ├── asyncSupport.test.ts │ │ │ ├── bench/ │ │ │ │ ├── hello/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ └── home.js │ │ │ │ │ │ └── router.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ └── package.json │ │ │ │ └── server.js │ │ │ ├── cluster1/ │ │ │ │ ├── app_worker.test.ts │ │ │ │ ├── cluster-client-error.test.ts │ │ │ │ ├── cluster-client.test.ts │ │ │ │ └── master.test.ts │ │ │ ├── cluster2/ │ │ │ │ └── master.test.ts │ │ │ ├── egg.test.ts │ │ │ ├── fixtures/ │ │ │ │ ├── apps/ │ │ │ │ │ ├── agent-app/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ └── plugins/ │ │ │ │ │ │ └── mock-client/ │ │ │ │ │ │ ├── agent.js │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── mock_client.js │ │ │ │ │ ├── agent-app-sync/ │ │ │ │ │ │ ├── agent.js │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── agent-client-app/ │ │ │ │ │ │ ├── agent.js │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── agent-die/ │ │ │ │ │ │ ├── agent.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ └── start.js │ │ │ │ │ ├── agent-logger-config/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── agent-restart/ │ │ │ │ │ │ ├── agent.js │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ ├── client.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── agent-throw/ │ │ │ │ │ │ ├── agent.js │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ │ └── config.unittest.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── aliyun-egg/ │ │ │ │ │ │ ├── agent.js │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ ├── lib/ │ │ │ │ │ │ │ ├── agent.js │ │ │ │ │ │ │ ├── aliyun-egg.js │ │ │ │ │ │ │ └── plugins/ │ │ │ │ │ │ │ └── custom/ │ │ │ │ │ │ │ ├── agent.js │ │ │ │ │ │ │ └── app.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── aliyun-egg-app/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ └── home.js │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── aliyun-egg-biz/ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── app-config-cookies/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ └── home.js │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── app-die/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── app-die-ignore-code/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── app-enableFastContextLogger/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ └── home.js │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── app-enablePerformanceTimer-true/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ └── home.js │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ │ └── config.unittest.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── app-locals-getter/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── app-router/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ └── home.js │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── app-runInAnonymousContextScope/ │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ │ └── config.unittest.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── app-runInAnonymousContextScope-withRequest/ │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ │ └── config.unittest.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── app-server/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── app-server-customized-client-error/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── app-server-timeout/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── app-server-with-hostname/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── app-start-timeout/ │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ │ └── config.unittest.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── app-throw/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ │ └── config.unittest.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── app-ts/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ └── foo.ts │ │ │ │ │ │ │ ├── extend/ │ │ │ │ │ │ │ │ ├── context.ts │ │ │ │ │ │ │ │ ├── helper.ts │ │ │ │ │ │ │ │ └── index.d.ts │ │ │ │ │ │ │ ├── middleware/ │ │ │ │ │ │ │ │ ├── default_ctx.ts │ │ │ │ │ │ │ │ ├── generic_ctx.ts │ │ │ │ │ │ │ │ ├── index.d.ts │ │ │ │ │ │ │ │ └── test.ts │ │ │ │ │ │ │ ├── model/ │ │ │ │ │ │ │ │ └── test.ts │ │ │ │ │ │ │ ├── proxy/ │ │ │ │ │ │ │ │ └── foo.d.ts │ │ │ │ │ │ │ ├── router.ts │ │ │ │ │ │ │ └── service/ │ │ │ │ │ │ │ └── foo.ts │ │ │ │ │ │ ├── app.ts │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.ts │ │ │ │ │ │ ├── lib/ │ │ │ │ │ │ │ ├── export-class.ts │ │ │ │ │ │ │ └── logger.ts │ │ │ │ │ │ ├── node_modules/ │ │ │ │ │ │ │ └── egg/ │ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ └── tsconfig.json │ │ │ │ │ ├── app-ts-esm/ │ │ │ │ │ │ ├── .gitignore │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ └── foo.ts │ │ │ │ │ │ │ └── router.ts │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.ts │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ └── tsconfig.json │ │ │ │ │ ├── app-ts-type-check/ │ │ │ │ │ │ ├── error.ts │ │ │ │ │ │ ├── framework.ts │ │ │ │ │ │ ├── normal.ts │ │ │ │ │ │ ├── tsconfig-error.json │ │ │ │ │ │ ├── tsconfig.json │ │ │ │ │ │ ├── xiandan.d.ts │ │ │ │ │ │ └── yadan.d.ts │ │ │ │ │ ├── async-app/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ └── api.js │ │ │ │ │ │ │ ├── middleware/ │ │ │ │ │ │ │ │ ├── async.js │ │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ │ ├── router.js │ │ │ │ │ │ │ ├── schedule/ │ │ │ │ │ │ │ │ └── async.js │ │ │ │ │ │ │ └── service/ │ │ │ │ │ │ │ └── api.js │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── base-context-class/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ └── home.js │ │ │ │ │ │ │ ├── router.js │ │ │ │ │ │ │ └── service/ │ │ │ │ │ │ │ └── home.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ │ └── config.unittest.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── body_parser_testapp/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── body_parser_testapp_disable/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── body_parser_testapp_ignore/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── body_parser_testapp_match/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── boot-app/ │ │ │ │ │ │ ├── agent.js │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── boot-app-esm/ │ │ │ │ │ │ ├── agent.js │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── close-watcher-logrotator/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── cluster-client-error/ │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── cluster_mod_app/ │ │ │ │ │ │ ├── agent.js │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ └── home.js │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ ├── lib/ │ │ │ │ │ │ │ ├── api_client.js │ │ │ │ │ │ │ ├── api_client_2.js │ │ │ │ │ │ │ └── registry_client.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── config-env/ │ │ │ │ │ │ ├── .gitignore │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── confused-configuration/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── context-config-app/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ └── home.js │ │ │ │ │ │ │ ├── extend/ │ │ │ │ │ │ │ │ └── context.js │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.js │ │ │ │ │ │ │ └── config.local.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── context_httpclient/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── context_httpclient_timeout/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── csrf-disable/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ └── api.js │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── csrf-enable/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ └── api.js │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ │ └── config.unittest.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── csrf-ignore/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ └── api.js │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ │ └── config.unittest.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── ctx-background/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ │ │ ├── custom.js │ │ │ │ │ │ │ │ ├── error.js │ │ │ │ │ │ │ │ ├── home.js │ │ │ │ │ │ │ │ └── sync.js │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ │ └── config.unittest.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── custom-context-getlogger/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ └── home.js │ │ │ │ │ │ │ ├── extend/ │ │ │ │ │ │ │ │ └── context.js │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── custom-env-app/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── custom-framework-demo/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ ├── foo.js │ │ │ │ │ │ │ │ ├── hello.js │ │ │ │ │ │ │ │ ├── home.js │ │ │ │ │ │ │ │ ├── ip.js │ │ │ │ │ │ │ │ ├── logger.js │ │ │ │ │ │ │ │ ├── obj.js │ │ │ │ │ │ │ │ └── obj2.js │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── custom-loader/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── adapter/ │ │ │ │ │ │ │ │ └── docker.js │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ └── user.js │ │ │ │ │ │ │ ├── repository/ │ │ │ │ │ │ │ │ └── user.js │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── custom-logger/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── demo/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ ├── foo.js │ │ │ │ │ │ │ │ ├── hello.js │ │ │ │ │ │ │ │ ├── home.js │ │ │ │ │ │ │ │ ├── ip.js │ │ │ │ │ │ │ │ ├── logger.js │ │ │ │ │ │ │ │ ├── obj.js │ │ │ │ │ │ │ │ └── obj2.js │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ │ └── config.unittest.js │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── development/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── public/ │ │ │ │ │ │ │ │ └── foo.js │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── dnscache_httpclient/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ └── home.js │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ │ └── config.unittest.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── docapp/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ └── middleware/ │ │ │ │ │ │ │ └── koastatic.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── dump-ignore-error/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── dumpconfig/ │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── dumpconfig-circular/ │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── dumptiming-slowBootActionMinDuration/ │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── dumptiming-timeout/ │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── empty/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── encrypt-cookies/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ └── home.js │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── favicon/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ └── home.js │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── favicon-buffer/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ └── home.js │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── favicon-function/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ └── home.js │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── get-logger/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── helper/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ └── home.js │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── httpclient-agent-timeout-3000/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── httpclient-next-overwrite/ │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── httpclient-next-with-tracer/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── httpclient-overwrite/ │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── httpclient-request-timeout-100/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── httpclient-retry/ │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── httpclient-tracer/ │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── i18n/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ ├── home.js │ │ │ │ │ │ │ │ └── message.js │ │ │ │ │ │ │ ├── router.js │ │ │ │ │ │ │ └── view/ │ │ │ │ │ │ │ └── home.html │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ │ ├── locales/ │ │ │ │ │ │ │ │ ├── de.json │ │ │ │ │ │ │ │ ├── xx.txt │ │ │ │ │ │ │ │ └── zh-CN.js │ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── keys-exists/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── keys-missing/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.unittest.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── koa-session/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ ├── clear.js │ │ │ │ │ │ │ │ └── home.js │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── loader-plugin/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── router.js │ │ │ │ │ │ │ └── service/ │ │ │ │ │ │ │ ├── Foo4.js │ │ │ │ │ │ │ ├── foo.js │ │ │ │ │ │ │ ├── foo2.js │ │ │ │ │ │ │ ├── foo3/ │ │ │ │ │ │ │ │ └── foo3.js │ │ │ │ │ │ │ └── fooDir/ │ │ │ │ │ │ │ └── Foo5.js │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ │ ├── map.json │ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ │ ├── node_modules/ │ │ │ │ │ │ │ ├── a/ │ │ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ │ │ ├── proxy/ │ │ │ │ │ │ │ │ │ │ └── a.js │ │ │ │ │ │ │ │ │ └── service/ │ │ │ │ │ │ │ │ │ └── bar1.js │ │ │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ │ │ └── config.js │ │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ │ ├── a1/ │ │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ │ ├── b/ │ │ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ │ │ └── service/ │ │ │ │ │ │ │ │ │ └── bar2.js │ │ │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ │ │ ├── antx.default.properties │ │ │ │ │ │ │ │ │ ├── antx.dev.properties │ │ │ │ │ │ │ │ │ ├── antx.prod.properties │ │ │ │ │ │ │ │ │ ├── antx.test.properties │ │ │ │ │ │ │ │ │ └── antx.unittest.properties │ │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ │ ├── c/ │ │ │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ │ │ └── config.js │ │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ │ ├── d/ │ │ │ │ │ │ │ │ ├── .gitkeep │ │ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ │ │ └── config.js │ │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ │ └── rds/ │ │ │ │ │ │ │ ├── .gitkeep │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ └── plugins/ │ │ │ │ │ │ ├── e/ │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ ├── f/ │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ └── g/ │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── loader-plugin-dep/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ └── plugins/ │ │ │ │ │ │ ├── a/ │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ ├── b/ │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ ├── c/ │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ ├── d/ │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ ├── e/ │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ └── f/ │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── loader-plugin-dep-missing/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ └── plugins/ │ │ │ │ │ │ ├── a/ │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ ├── b/ │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ └── c/ │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── loader-plugin-dep-recursive/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ └── plugins/ │ │ │ │ │ │ ├── a/ │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ ├── b/ │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ └── c/ │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── loader-plugin-noexist/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── locals/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── helper.js │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── logger/ │ │ │ │ │ │ ├── agent.js │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ │ ├── config.local.js │ │ │ │ │ │ │ └── config.unittest.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── logger-level-debug/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── logger-output-json/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ │ └── map.json │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── logger-reload/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ └── home.js │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── logrotator-app/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── master-worker-started/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ ├── dispatch.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── master-worker-started-worker_threads/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ ├── dispatch.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── messenger/ │ │ │ │ │ │ ├── agent.js │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── messenger-app-agent/ │ │ │ │ │ │ ├── agent.js │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── messenger-broadcast/ │ │ │ │ │ │ ├── agent.js │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── messenger-random/ │ │ │ │ │ │ ├── agent.js │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── meta-logging-app/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ └── home.js │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── middlewares/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ ├── error.js │ │ │ │ │ │ │ │ └── home.js │ │ │ │ │ │ │ ├── crossdomain.xml │ │ │ │ │ │ │ ├── robots.txt │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ └── server.conf │ │ │ │ │ ├── middlewares-meta-enablePerformanceTimer/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ └── home.js │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── middlewares-site-file/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ ├── error.js │ │ │ │ │ │ │ │ └── home.js │ │ │ │ │ │ │ ├── crossdomain.xml │ │ │ │ │ │ │ ├── robots.txt │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ └── server.conf │ │ │ │ │ ├── mock-dev-app1/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── mock-dev-app2/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── mock-dev-app3/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── mock-dev-app4/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── mock-production-app/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.js │ │ │ │ │ │ │ ├── config.unittest.js │ │ │ │ │ │ │ └── map.json │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── mock-production-app-do-not-force/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.js │ │ │ │ │ │ │ ├── config.unittest.js │ │ │ │ │ │ │ └── map.json │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── multipart/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ ├── home.js │ │ │ │ │ │ │ │ └── upload.js │ │ │ │ │ │ │ ├── router.js │ │ │ │ │ │ │ └── view/ │ │ │ │ │ │ │ └── home.html │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── multiple-view-engine/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ └── view.js │ │ │ │ │ │ │ ├── router.js │ │ │ │ │ │ │ ├── view/ │ │ │ │ │ │ │ │ ├── ext/ │ │ │ │ │ │ │ │ │ ├── a.ejs │ │ │ │ │ │ │ │ │ └── a.nj │ │ │ │ │ │ │ │ └── loader/ │ │ │ │ │ │ │ │ ├── a.ejs │ │ │ │ │ │ │ │ ├── a.html │ │ │ │ │ │ │ │ ├── a.nj.ejs │ │ │ │ │ │ │ │ └── a.noext │ │ │ │ │ │ │ └── view2/ │ │ │ │ │ │ │ └── loader/ │ │ │ │ │ │ │ ├── a.nj │ │ │ │ │ │ │ └── from-view2.ejs │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ │ └── config.unittest.js │ │ │ │ │ │ ├── ejs.js │ │ │ │ │ │ ├── nunjucks.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── nobuffer-logger/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── notfound/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── notfound-custom-404/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── notready/ │ │ │ │ │ │ ├── a/ │ │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── onerror/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ ├── home.js │ │ │ │ │ │ │ │ └── user.js │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ │ └── config.unittest.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── override_method/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── querystring-extended/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ └── home.js │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── reload-worker/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ ├── home.js │ │ │ │ │ │ │ │ └── home1.js │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── response/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── router-app/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ ├── locals.js │ │ │ │ │ │ │ │ ├── members.js │ │ │ │ │ │ │ │ └── posts.js │ │ │ │ │ │ │ ├── router.js │ │ │ │ │ │ │ └── view/ │ │ │ │ │ │ │ └── locals/ │ │ │ │ │ │ │ └── router.html │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── schedule/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ └── schedule/ │ │ │ │ │ │ │ ├── hello.js │ │ │ │ │ │ │ └── sub/ │ │ │ │ │ │ │ └── cron.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── secure-app/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ └── index.js │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ │ ├── config.unittest.js │ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── service-app/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ └── user.js │ │ │ │ │ │ │ ├── router.js │ │ │ │ │ │ │ └── service/ │ │ │ │ │ │ │ └── user.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── services_loader_verify/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ └── service/ │ │ │ │ │ │ │ └── foo.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── singleton-demo/ │ │ │ │ │ │ ├── agent.js │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ ├── create.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── siteFile-custom-cacheControl/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── static-server/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ └── public/ │ │ │ │ │ │ │ └── foo.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── subdir-services/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ └── home.js │ │ │ │ │ │ │ ├── router.js │ │ │ │ │ │ │ └── service/ │ │ │ │ │ │ │ ├── certify-personal/ │ │ │ │ │ │ │ │ └── mobile-hi/ │ │ │ │ │ │ │ │ └── do_certify.js │ │ │ │ │ │ │ ├── cif/ │ │ │ │ │ │ │ │ └── user.js │ │ │ │ │ │ │ ├── foo/ │ │ │ │ │ │ │ │ ├── bar.js │ │ │ │ │ │ │ │ ├── subdir/ │ │ │ │ │ │ │ │ │ └── bar.js │ │ │ │ │ │ │ │ ├── subdir1/ │ │ │ │ │ │ │ │ │ └── subdir11/ │ │ │ │ │ │ │ │ │ └── bar.js │ │ │ │ │ │ │ │ └── subdir2/ │ │ │ │ │ │ │ │ └── sub2.js │ │ │ │ │ │ │ ├── ok.js │ │ │ │ │ │ │ ├── old_style.js │ │ │ │ │ │ │ └── user.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── tracer-demo/ │ │ │ │ │ │ ├── agent.js │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ ├── foo.js │ │ │ │ │ │ │ │ └── home.js │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ └── tracer.js │ │ │ │ │ ├── view-render/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── a.js │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ ├── async.js │ │ │ │ │ │ │ │ ├── context.js │ │ │ │ │ │ │ │ ├── csrf.js │ │ │ │ │ │ │ │ ├── empty.js │ │ │ │ │ │ │ │ ├── home.js │ │ │ │ │ │ │ │ ├── inject.js │ │ │ │ │ │ │ │ ├── locals.js │ │ │ │ │ │ │ │ ├── nonce.js │ │ │ │ │ │ │ │ ├── shtml.js │ │ │ │ │ │ │ │ ├── sjs.js │ │ │ │ │ │ │ │ ├── string.js │ │ │ │ │ │ │ │ └── xss.js │ │ │ │ │ │ │ ├── extend/ │ │ │ │ │ │ │ │ └── helper.js │ │ │ │ │ │ │ ├── router.js │ │ │ │ │ │ │ └── view/ │ │ │ │ │ │ │ ├── a.html │ │ │ │ │ │ │ ├── form_csrf.html │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ ├── inject.html │ │ │ │ │ │ │ ├── locals.html │ │ │ │ │ │ │ ├── nonce.html │ │ │ │ │ │ │ ├── shtml.html │ │ │ │ │ │ │ ├── sjs.html │ │ │ │ │ │ │ └── xss.html │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── watcher-development-app/ │ │ │ │ │ │ ├── agent.js │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.unittest.js │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ ├── tmp/ │ │ │ │ │ │ │ └── tmp.txt │ │ │ │ │ │ ├── tmp-agent/ │ │ │ │ │ │ │ └── tmp.txt │ │ │ │ │ │ ├── tmp-agent.txt │ │ │ │ │ │ └── tmp.txt │ │ │ │ │ ├── watcher-type-default/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.unittest.js │ │ │ │ │ │ └── package.json │ │ │ │ │ └── worker-die/ │ │ │ │ │ ├── app.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ └── package.json │ │ │ │ └── custom-egg/ │ │ │ │ ├── index.js │ │ │ │ └── package.json │ │ │ ├── index.test.ts │ │ │ ├── lib/ │ │ │ │ ├── __snapshots__/ │ │ │ │ │ └── define_config.test.ts.snap │ │ │ │ ├── core/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── config.cookies.test.ts │ │ │ │ │ │ └── config.test.ts │ │ │ │ │ ├── context_httpclient.test.ts │ │ │ │ │ ├── context_performance_starttime.test.ts │ │ │ │ │ ├── cookies.test.ts │ │ │ │ │ ├── custom_loader.test.ts │ │ │ │ │ ├── dnscache_httpclient.test.ts │ │ │ │ │ ├── httpclient.test.ts │ │ │ │ │ ├── httpclient_tracer_demo.test.ts │ │ │ │ │ ├── loader/ │ │ │ │ │ │ ├── __snapshots__/ │ │ │ │ │ │ │ ├── config_loader.test.ts.snap │ │ │ │ │ │ │ └── load_plugin.test.ts.snap │ │ │ │ │ │ ├── config_loader.test.ts │ │ │ │ │ │ ├── load_app.test.ts │ │ │ │ │ │ ├── load_boot.test.ts │ │ │ │ │ │ ├── load_plugin.test.ts │ │ │ │ │ │ ├── load_router.test.ts │ │ │ │ │ │ └── load_service.test.ts │ │ │ │ │ ├── logger.test.ts │ │ │ │ │ ├── messenger/ │ │ │ │ │ │ ├── ipc.test.ts │ │ │ │ │ │ └── local.test.ts │ │ │ │ │ ├── router.test.ts │ │ │ │ │ ├── utils.test.ts │ │ │ │ │ └── view.test.ts │ │ │ │ ├── define_config.test.ts │ │ │ │ └── plugins/ │ │ │ │ ├── depd.test.ts │ │ │ │ ├── development.test.ts │ │ │ │ ├── i18n.test.ts │ │ │ │ ├── multipart.test.ts │ │ │ │ ├── onerror.test.ts │ │ │ │ ├── security.test.ts │ │ │ │ ├── session.test.ts │ │ │ │ ├── static.test.ts │ │ │ │ └── watcher.test.ts │ │ │ ├── start.test.ts │ │ │ ├── typescript.test.ts │ │ │ ├── urllib.test.ts │ │ │ └── utils.ts │ │ ├── tsconfig.json │ │ ├── tsdown.config.ts │ │ └── vitest.config.ts │ ├── errors/ │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── base.ts │ │ │ ├── base_error.ts │ │ │ ├── base_exception.ts │ │ │ ├── error.ts │ │ │ ├── error_options.ts │ │ │ ├── error_type.ts │ │ │ ├── exception.ts │ │ │ ├── framework/ │ │ │ │ ├── formatter.ts │ │ │ │ └── framework_base_error.ts │ │ │ ├── http/ │ │ │ │ ├── 400.ts │ │ │ │ ├── 401.ts │ │ │ │ ├── 402.ts │ │ │ │ ├── 403.ts │ │ │ │ ├── 404.ts │ │ │ │ ├── 405.ts │ │ │ │ ├── 406.ts │ │ │ │ ├── 407.ts │ │ │ │ ├── 408.ts │ │ │ │ ├── 409.ts │ │ │ │ ├── 410.ts │ │ │ │ ├── 411.ts │ │ │ │ ├── 412.ts │ │ │ │ ├── 413.ts │ │ │ │ ├── 414.ts │ │ │ │ ├── 415.ts │ │ │ │ ├── 416.ts │ │ │ │ ├── 417.ts │ │ │ │ ├── 418.ts │ │ │ │ ├── 421.ts │ │ │ │ ├── 422.ts │ │ │ │ ├── 423.ts │ │ │ │ ├── 424.ts │ │ │ │ ├── 425.ts │ │ │ │ ├── 426.ts │ │ │ │ ├── 428.ts │ │ │ │ ├── 429.ts │ │ │ │ ├── 431.ts │ │ │ │ ├── 451.ts │ │ │ │ ├── 500.ts │ │ │ │ ├── 501.ts │ │ │ │ ├── 502.ts │ │ │ │ ├── 503.ts │ │ │ │ ├── 504.ts │ │ │ │ ├── 505.ts │ │ │ │ ├── 506.ts │ │ │ │ ├── 507.ts │ │ │ │ ├── 508.ts │ │ │ │ ├── 509.ts │ │ │ │ ├── 510.ts │ │ │ │ ├── 511.ts │ │ │ │ ├── http_error.ts │ │ │ │ ├── http_error_options.ts │ │ │ │ └── http_header.ts │ │ │ └── index.ts │ │ ├── test/ │ │ │ ├── __snapshots__/ │ │ │ │ └── index.test.ts.snap │ │ │ ├── error.test.ts │ │ │ ├── framework/ │ │ │ │ ├── formatter.test.ts │ │ │ │ └── framework_base_error.test.ts │ │ │ ├── http/ │ │ │ │ ├── 400.test.ts │ │ │ │ ├── 401.test.ts │ │ │ │ ├── 402.test.ts │ │ │ │ ├── 403.test.ts │ │ │ │ ├── 404.test.ts │ │ │ │ ├── 405.test.ts │ │ │ │ ├── 406.test.ts │ │ │ │ ├── 407.test.ts │ │ │ │ ├── 408.test.ts │ │ │ │ ├── 409.test.ts │ │ │ │ ├── 410.test.ts │ │ │ │ ├── 411.test.ts │ │ │ │ ├── 412.test.ts │ │ │ │ ├── 413.test.ts │ │ │ │ ├── 414.test.ts │ │ │ │ ├── 415.test.ts │ │ │ │ ├── 416.test.ts │ │ │ │ ├── 417.test.ts │ │ │ │ ├── 418.test.ts │ │ │ │ ├── 421.test.ts │ │ │ │ ├── 422.test.ts │ │ │ │ ├── 423.test.ts │ │ │ │ ├── 424.test.ts │ │ │ │ ├── 425.test.ts │ │ │ │ ├── 426.test.ts │ │ │ │ ├── 428.test.ts │ │ │ │ ├── 429.test.ts │ │ │ │ ├── 431.test.ts │ │ │ │ ├── 451.test.ts │ │ │ │ ├── 500.test.ts │ │ │ │ ├── 501.test.ts │ │ │ │ ├── 502.test.ts │ │ │ │ ├── 503.test.ts │ │ │ │ ├── 504.test.ts │ │ │ │ ├── 505.test.ts │ │ │ │ ├── 506.test.ts │ │ │ │ ├── 507.test.ts │ │ │ │ ├── 508.test.ts │ │ │ │ ├── 509.test.ts │ │ │ │ ├── 510.test.ts │ │ │ │ └── 511.test.ts │ │ │ └── index.test.ts │ │ ├── tsconfig.json │ │ └── tsdown.config.ts │ ├── extend2/ │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ └── index.ts │ │ ├── test/ │ │ │ └── index.test.ts │ │ ├── tsconfig.json │ │ └── tsdown.config.ts │ ├── koa/ │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── CODE_OF_CONDUCT.md │ │ ├── LICENSE │ │ ├── Readme.md │ │ ├── docs/ │ │ │ ├── api/ │ │ │ │ ├── context.md │ │ │ │ ├── index.md │ │ │ │ ├── request.md │ │ │ │ └── response.md │ │ │ ├── error-handling.md │ │ │ ├── faq.md │ │ │ ├── guide.md │ │ │ ├── koa-vs-express.md │ │ │ ├── migration.md │ │ │ └── troubleshooting.md │ │ ├── example/ │ │ │ ├── cjs/ │ │ │ │ ├── helloworld.js │ │ │ │ └── package.json │ │ │ ├── esm/ │ │ │ │ ├── helloworld.js │ │ │ │ └── package.json │ │ │ ├── extend/ │ │ │ │ ├── Context.ts │ │ │ │ ├── Request.ts │ │ │ │ └── middleware.ts │ │ │ └── helloworld.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── application.ts │ │ │ ├── context.ts │ │ │ ├── index.ts │ │ │ ├── request.ts │ │ │ ├── response.ts │ │ │ └── types.ts │ │ ├── test/ │ │ │ ├── __snapshots__/ │ │ │ │ └── index.test.ts.snap │ │ │ ├── application/ │ │ │ │ ├── context.test.ts │ │ │ │ ├── currentContext.test.ts │ │ │ │ ├── index.test.ts │ │ │ │ ├── inspect.test.ts │ │ │ │ ├── onerror.test.ts │ │ │ │ ├── request.test.ts │ │ │ │ ├── respond.test.ts │ │ │ │ ├── response.test.ts │ │ │ │ ├── toJSON.test.ts │ │ │ │ └── use.test.ts │ │ │ ├── context/ │ │ │ │ ├── assert.test.ts │ │ │ │ ├── cookies.test.ts │ │ │ │ ├── inspect.test.ts │ │ │ │ ├── onerror.test.ts │ │ │ │ ├── state.test.ts │ │ │ │ ├── throw.test.ts │ │ │ │ └── toJSON.test.ts │ │ │ ├── index.test.ts │ │ │ ├── index.test.ts.snapshot │ │ │ ├── request/ │ │ │ │ ├── accept.test.ts │ │ │ │ ├── accepts.test.ts │ │ │ │ ├── acceptsCharsets.test.ts │ │ │ │ ├── acceptsEncodings.test.ts │ │ │ │ ├── acceptsLanguages.test.ts │ │ │ │ ├── charset.test.ts │ │ │ │ ├── fresh.test.ts │ │ │ │ ├── get.test.ts │ │ │ │ ├── header.test.ts │ │ │ │ ├── headers.test.ts │ │ │ │ ├── host.test.ts │ │ │ │ ├── hostname.test.ts │ │ │ │ ├── href.test.ts │ │ │ │ ├── idempotent.test.ts │ │ │ │ ├── inspect.test.ts │ │ │ │ ├── ip.test.ts │ │ │ │ ├── ips.test.ts │ │ │ │ ├── is.test.ts │ │ │ │ ├── length.test.ts │ │ │ │ ├── origin.test.ts │ │ │ │ ├── path.test.ts │ │ │ │ ├── protocol.test.ts │ │ │ │ ├── query.test.ts │ │ │ │ ├── querystring.test.ts │ │ │ │ ├── search.test.ts │ │ │ │ ├── secure.test.ts │ │ │ │ ├── stale.test.ts │ │ │ │ ├── subdomains.test.ts │ │ │ │ ├── type.test.ts │ │ │ │ └── whatwg-url.test.ts │ │ │ ├── response/ │ │ │ │ ├── append.test.ts │ │ │ │ ├── attachment.test.ts │ │ │ │ ├── body.test.ts │ │ │ │ ├── etag.test.ts │ │ │ │ ├── flushHeaders.test.ts │ │ │ │ ├── has.test.ts │ │ │ │ ├── header.test.ts │ │ │ │ ├── headers.test.ts │ │ │ │ ├── inspect.test.ts │ │ │ │ ├── is.test.ts │ │ │ │ ├── last-modified.test.ts │ │ │ │ ├── length.test.ts │ │ │ │ ├── message.test.ts │ │ │ │ ├── redirect.test.ts │ │ │ │ ├── remove.test.ts │ │ │ │ ├── set.test.ts │ │ │ │ ├── socket.test.ts │ │ │ │ ├── status.test.ts │ │ │ │ ├── type.test.ts │ │ │ │ ├── vary.test.ts │ │ │ │ └── writable.test.ts │ │ │ └── test-helpers/ │ │ │ └── context.ts │ │ ├── tsconfig.json │ │ └── tsdown.config.ts │ ├── koa-static-cache/ │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ └── index.ts │ │ ├── test/ │ │ │ └── index.test.ts │ │ ├── tsconfig.json │ │ └── tsdown.config.ts │ ├── logger/ │ │ ├── package.json │ │ ├── src/ │ │ │ ├── egg/ │ │ │ │ ├── console_logger.ts │ │ │ │ ├── custom_logger.ts │ │ │ │ ├── error_logger.ts │ │ │ │ ├── logger.ts │ │ │ │ └── loggers.ts │ │ │ ├── index.ts │ │ │ ├── level.ts │ │ │ ├── logger.ts │ │ │ ├── transports/ │ │ │ │ ├── console.ts │ │ │ │ ├── file.ts │ │ │ │ ├── file_buffer.ts │ │ │ │ └── transport.ts │ │ │ ├── utils.ts │ │ │ └── vendor.d.ts │ │ ├── test/ │ │ │ ├── fixtures/ │ │ │ │ ├── console_transport.ts │ │ │ │ ├── egg_console_logger.ts │ │ │ │ ├── egg_custom_logger.ts │ │ │ │ ├── egg_error_logger.ts │ │ │ │ ├── egg_logger.ts │ │ │ │ ├── egg_logger_dynamically.ts │ │ │ │ ├── egg_loggers.ts │ │ │ │ └── egg_loggers_console_duplicate.ts │ │ │ ├── lib/ │ │ │ │ ├── egg/ │ │ │ │ │ ├── console_logger.test.ts │ │ │ │ │ ├── custom_logger.test.ts │ │ │ │ │ ├── error_logger.test.ts │ │ │ │ │ ├── logger.test.ts │ │ │ │ │ └── loggers.test.ts │ │ │ │ ├── formatter.test.ts │ │ │ │ ├── logger.test.ts │ │ │ │ ├── transports/ │ │ │ │ │ ├── console.test.ts │ │ │ │ │ ├── file.test.ts │ │ │ │ │ ├── file_buffer.test.ts │ │ │ │ │ └── transport.test.ts │ │ │ │ └── utils.test.ts │ │ │ └── utils.ts │ │ ├── tsconfig.json │ │ └── vitest.config.ts │ ├── path-matching/ │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ └── index.ts │ │ ├── test/ │ │ │ └── index.test.ts │ │ ├── tsconfig.json │ │ └── tsdown.config.ts │ ├── router/ │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench/ │ │ │ ├── Makefile │ │ │ └── server.cjs │ │ ├── package.json │ │ ├── src/ │ │ │ ├── EggRouter.ts │ │ │ ├── Layer.ts │ │ │ ├── Router.ts │ │ │ ├── index.ts │ │ │ └── types.ts │ │ ├── test/ │ │ │ ├── EggRouter.test.ts │ │ │ ├── Layer.test.ts │ │ │ ├── Router.test.ts │ │ │ └── index.test.ts │ │ ├── tsconfig.json │ │ └── tsdown.config.ts │ ├── skills/ │ │ ├── CLAUDE.md │ │ ├── PLAN.md │ │ ├── README.md │ │ ├── egg/ │ │ │ └── SKILL.md │ │ ├── egg-controller/ │ │ │ ├── SKILL.md │ │ │ └── references/ │ │ │ ├── ajv-validate.md │ │ │ ├── http-controller.md │ │ │ ├── mcp-controller.md │ │ │ └── schedule.md │ │ ├── egg-core/ │ │ │ ├── SKILL.md │ │ │ └── references/ │ │ │ ├── aop.md │ │ │ ├── background-task.md │ │ │ ├── dynamic-inject.md │ │ │ ├── eventbus.md │ │ │ ├── inject.md │ │ │ ├── module.md │ │ │ └── proto.md │ │ ├── eval/ │ │ │ ├── .gitignore │ │ │ ├── evals-egg-controller.json │ │ │ ├── evals-egg-core.json │ │ │ └── evals-routing.json │ │ └── package.json │ ├── supertest/ │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── agent.ts │ │ │ ├── error/ │ │ │ │ └── AssertError.ts │ │ │ ├── index.ts │ │ │ ├── request.ts │ │ │ ├── test.ts │ │ │ └── types.ts │ │ ├── test/ │ │ │ ├── fixtures/ │ │ │ │ ├── test_cert.pem │ │ │ │ └── test_key.pem │ │ │ ├── supertest.test.ts │ │ │ └── throwError.ts │ │ ├── tsconfig.json │ │ └── tsdown.config.ts │ ├── tsconfig/ │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── package.json │ │ ├── test/ │ │ │ ├── fixtures/ │ │ │ │ └── apps/ │ │ │ │ └── ts-proj/ │ │ │ │ ├── Foo.ts │ │ │ │ ├── FooDecorator.ts │ │ │ │ └── tsconfig.json │ │ │ └── index.test.ts │ │ ├── tsconfig.json │ │ └── tsdown.config.ts │ └── utils/ │ ├── .gitignore │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── package.json │ ├── src/ │ │ ├── deprecated.ts │ │ ├── error/ │ │ │ ├── ImportResolveError.ts │ │ │ └── index.ts │ │ ├── framework.ts │ │ ├── import.ts │ │ ├── index.ts │ │ ├── plugin.ts │ │ └── utils.ts │ ├── test/ │ │ ├── __snapshots__/ │ │ │ └── index.test.ts.snap │ │ ├── fixtures/ │ │ │ ├── cjs/ │ │ │ │ ├── es-module-default.js │ │ │ │ ├── exports.cjs │ │ │ │ ├── exports.js │ │ │ │ ├── extend/ │ │ │ │ │ └── index.js │ │ │ │ ├── index.js │ │ │ │ ├── module-exports-null.js │ │ │ │ ├── package.json │ │ │ │ └── run.js │ │ │ ├── cjs-index/ │ │ │ │ ├── index.cjs │ │ │ │ └── package.json │ │ │ ├── egg-app/ │ │ │ │ ├── config/ │ │ │ │ │ └── plugin.test.js │ │ │ │ ├── get_config.js │ │ │ │ ├── get_loadunit.js │ │ │ │ ├── get_plugin.js │ │ │ │ ├── package.json │ │ │ │ └── plugin/ │ │ │ │ └── p/ │ │ │ │ └── package.json │ │ │ ├── esm/ │ │ │ │ ├── config/ │ │ │ │ │ └── plugin.js │ │ │ │ ├── export-default-null.js │ │ │ │ ├── exports.js │ │ │ │ ├── exports.mjs │ │ │ │ ├── index.js │ │ │ │ └── package.json │ │ │ ├── esm-index/ │ │ │ │ ├── index.mjs │ │ │ │ └── package.json │ │ │ ├── framework-egg-default/ │ │ │ │ ├── app/ │ │ │ │ │ └── router.js │ │ │ │ ├── app.js │ │ │ │ └── package.json │ │ │ ├── framework-egg-default-noexist/ │ │ │ │ └── package.json │ │ │ ├── framework-pkg-egg/ │ │ │ │ └── package.json │ │ │ ├── framework-pkg-egg-noexist/ │ │ │ │ └── package.json │ │ │ ├── monorepo-app/ │ │ │ │ └── packages/ │ │ │ │ └── a/ │ │ │ │ └── package.json │ │ │ ├── no-package-json/ │ │ │ │ └── index.js │ │ │ ├── test-app/ │ │ │ │ ├── package.json │ │ │ │ └── test/ │ │ │ │ └── fixtures/ │ │ │ │ └── app/ │ │ │ │ └── package.json │ │ │ ├── ts-module/ │ │ │ │ ├── exports.ts │ │ │ │ ├── extend/ │ │ │ │ │ └── index.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mod.ts │ │ │ │ └── package.json │ │ │ ├── tshy/ │ │ │ │ ├── package.json │ │ │ │ └── src/ │ │ │ │ └── index.ts │ │ │ ├── tshy-dist/ │ │ │ │ ├── dist2/ │ │ │ │ │ ├── commonjs/ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ └── package.json │ │ │ │ │ └── esm/ │ │ │ │ │ ├── index.js │ │ │ │ │ └── package.json │ │ │ │ ├── package.json │ │ │ │ └── src/ │ │ │ │ └── index.ts │ │ │ └── yadan-app/ │ │ │ └── package.json │ │ ├── framework.test.ts │ │ ├── getFrameworkOrEggPath.test.ts │ │ ├── helper.ts │ │ ├── import.test.ts │ │ ├── index.test.ts │ │ └── plugin.test.ts │ ├── tsconfig.json │ ├── tsdown.config.ts │ └── vitest.config.ts ├── plugins/ │ ├── development/ │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── agent.ts │ │ │ ├── app/ │ │ │ │ └── middleware/ │ │ │ │ ├── egg_loader_trace.ts │ │ │ │ └── loader_trace.html │ │ │ ├── app.ts │ │ │ ├── config/ │ │ │ │ └── config.default.ts │ │ │ ├── index.ts │ │ │ ├── types.ts │ │ │ └── utils.ts │ │ ├── test/ │ │ │ ├── absolute.test.ts │ │ │ ├── custom.test.ts │ │ │ ├── development-ts.test.ts │ │ │ ├── development.test.ts │ │ │ ├── fast_ready_false.test.ts │ │ │ ├── fixtures/ │ │ │ │ ├── absolute/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ └── plugin.js │ │ │ │ │ └── package.json │ │ │ │ ├── custom/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── service/ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ └── plugin.js │ │ │ │ │ └── package.json │ │ │ │ ├── delay-ready/ │ │ │ │ │ ├── app.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ └── package.json │ │ │ │ ├── development/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── assets/ │ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ │ ├── public/ │ │ │ │ │ │ │ └── foo.js │ │ │ │ │ │ ├── router.js │ │ │ │ │ │ └── service/ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ └── plugin.js │ │ │ │ │ └── package.json │ │ │ │ ├── development-process_mode_single/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── assets/ │ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ │ ├── public/ │ │ │ │ │ │ │ └── foo.js │ │ │ │ │ │ ├── router.js │ │ │ │ │ │ └── service/ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ └── plugin.js │ │ │ │ │ └── package.json │ │ │ │ ├── development-ts/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── assets/ │ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ │ ├── public/ │ │ │ │ │ │ │ └── foo.js │ │ │ │ │ │ ├── router.ts │ │ │ │ │ │ └── service/ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── config.default.ts │ │ │ │ │ │ └── plugin.ts │ │ │ │ │ ├── package.json │ │ │ │ │ └── tsconfig.json │ │ │ │ ├── fast-ready/ │ │ │ │ │ ├── app.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ └── plugin.js │ │ │ │ │ └── package.json │ │ │ │ ├── not-reload/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── service/ │ │ │ │ │ │ ├── .gitkeep │ │ │ │ │ │ └── a.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ └── plugin.js │ │ │ │ │ └── package.json │ │ │ │ ├── override/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── no-trigger/ │ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ │ └── service/ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ └── plugin.js │ │ │ │ │ └── package.json │ │ │ │ ├── override-ignore/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── public/ │ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ │ └── web/ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ └── plugin.js │ │ │ │ │ └── package.json │ │ │ │ └── timing/ │ │ │ │ ├── app/ │ │ │ │ │ └── router.js │ │ │ │ ├── app.js │ │ │ │ ├── config/ │ │ │ │ │ ├── config.js │ │ │ │ │ └── plugin.js │ │ │ │ └── package.json │ │ │ ├── not-reload.test.ts │ │ │ ├── override.test.ts │ │ │ ├── process_mode_single.test.ts │ │ │ ├── timing.test.ts │ │ │ └── utils.ts │ │ ├── tsconfig.json │ │ └── vitest.config.ts │ ├── i18n/ │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── app/ │ │ │ │ └── extend/ │ │ │ │ ├── application.ts │ │ │ │ └── context.ts │ │ │ ├── app.ts │ │ │ ├── config/ │ │ │ │ └── config.default.ts │ │ │ ├── index.ts │ │ │ ├── locales.ts │ │ │ ├── types.ts │ │ │ └── utils.ts │ │ ├── test/ │ │ │ ├── fixtures/ │ │ │ │ ├── apps/ │ │ │ │ │ ├── i18n/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ └── message.js │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ │ └── locales/ │ │ │ │ │ │ │ ├── de.json │ │ │ │ │ │ │ ├── xx.txt │ │ │ │ │ │ │ └── zh-CN.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── i18n-domain/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ └── message.js │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ │ └── locales/ │ │ │ │ │ │ │ ├── de.json │ │ │ │ │ │ │ ├── xx.txt │ │ │ │ │ │ │ └── zh-CN.js │ │ │ │ │ │ └── package.json │ │ │ │ │ └── loader/ │ │ │ │ │ ├── a/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── locales/ │ │ │ │ │ │ │ ├── zh-CN.ts │ │ │ │ │ │ │ ├── zh-CN.yaml │ │ │ │ │ │ │ └── zh_CN.properties │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── router.js │ │ │ │ │ ├── b/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── locales/ │ │ │ │ │ │ │ └── zh-CN.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── c/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── locale/ │ │ │ │ │ │ │ │ └── zh-CN.js │ │ │ │ │ │ │ └── locales/ │ │ │ │ │ │ │ └── zh-CN.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ ├── locales/ │ │ │ │ │ │ │ ├── de.json │ │ │ │ │ │ │ └── zh-CN.js │ │ │ │ │ │ ├── locales2/ │ │ │ │ │ │ │ └── zh-CN.js │ │ │ │ │ │ └── plugin.js │ │ │ │ │ └── package.json │ │ │ │ └── custom_egg/ │ │ │ │ ├── config/ │ │ │ │ │ └── locales/ │ │ │ │ │ └── zh-CN.js │ │ │ │ ├── index.js │ │ │ │ └── package.json │ │ │ ├── i18n.test.ts │ │ │ └── utils.test.ts │ │ └── tsconfig.json │ ├── jsonp/ │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── app/ │ │ │ │ └── extend/ │ │ │ │ ├── application.ts │ │ │ │ └── context.ts │ │ │ ├── config/ │ │ │ │ └── config.default.ts │ │ │ ├── error/ │ │ │ │ └── JSONPForbiddenReferrerError.ts │ │ │ ├── index.ts │ │ │ ├── lib/ │ │ │ │ └── private_key.ts │ │ │ └── types.ts │ │ ├── test/ │ │ │ ├── fixtures/ │ │ │ │ └── jsonp-test/ │ │ │ │ ├── app/ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ └── jsonp.js │ │ │ │ │ └── router.js │ │ │ │ ├── config/ │ │ │ │ │ └── config.default.js │ │ │ │ └── package.json │ │ │ └── jsonp.test.ts │ │ └── tsconfig.json │ ├── logrotator/ │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── README.zh-CN.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── agent.ts │ │ │ ├── app/ │ │ │ │ ├── extend/ │ │ │ │ │ ├── agent.ts │ │ │ │ │ └── application.ts │ │ │ │ └── schedule/ │ │ │ │ ├── clean_log.ts │ │ │ │ ├── rotate_by_file.ts │ │ │ │ ├── rotate_by_hour.ts │ │ │ │ └── rotate_by_size.ts │ │ │ ├── app.ts │ │ │ ├── boot.ts │ │ │ ├── config/ │ │ │ │ └── config.default.ts │ │ │ ├── index.ts │ │ │ ├── lib/ │ │ │ │ ├── day_rotator.ts │ │ │ │ ├── hour_rotator.ts │ │ │ │ ├── rotator.ts │ │ │ │ ├── size_rotator.ts │ │ │ │ └── utils.ts │ │ │ └── types.ts │ │ ├── test/ │ │ │ ├── __snapshots__/ │ │ │ │ └── clean_log.test.ts.snap │ │ │ ├── clean_log.test.ts │ │ │ ├── fixtures/ │ │ │ │ ├── clean-log/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ └── package.json │ │ │ │ ├── logger-reload/ │ │ │ │ │ ├── agent.js │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── router.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.js │ │ │ │ │ └── package.json │ │ │ │ ├── logrotator-agent/ │ │ │ │ │ ├── app.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ └── package.json │ │ │ │ ├── logrotator-app/ │ │ │ │ │ ├── agent.js │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── router.js │ │ │ │ │ ├── app.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ └── package.json │ │ │ │ ├── logrotator-app-day-gzip/ │ │ │ │ │ ├── agent.js │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── router.js │ │ │ │ │ ├── app.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ └── package.json │ │ │ │ ├── logrotator-app-hour/ │ │ │ │ │ ├── agent.js │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── router.js │ │ │ │ │ ├── app.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ └── package.json │ │ │ │ ├── logrotator-app-hour-custom_hourdelimiter/ │ │ │ │ │ ├── agent.js │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── router.js │ │ │ │ │ ├── app.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ └── package.json │ │ │ │ ├── logrotator-app-hour-gzip/ │ │ │ │ │ ├── agent.js │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── router.js │ │ │ │ │ ├── app.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ └── package.json │ │ │ │ ├── logrotator-app-size/ │ │ │ │ │ ├── agent.js │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── router.js │ │ │ │ │ ├── app.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ └── package.json │ │ │ │ ├── logrotator-app-size-gzip/ │ │ │ │ │ ├── agent.js │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── router.js │ │ │ │ │ ├── app.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ └── package.json │ │ │ │ ├── logrotator-default/ │ │ │ │ │ └── package.json │ │ │ │ ├── logrotator-json-format/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ └── package.json │ │ │ │ └── noexist-rotator-dir/ │ │ │ │ ├── config/ │ │ │ │ │ └── config.default.js │ │ │ │ └── package.json │ │ │ ├── index.test.ts │ │ │ ├── logrotator.test.ts │ │ │ ├── rotate_by_day.test.ts │ │ │ ├── rotate_by_size.test.ts │ │ │ └── utils.ts │ │ ├── tsconfig.json │ │ └── vitest.config.ts │ ├── mock/ │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── README.zh_CN.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── app/ │ │ │ │ ├── extend/ │ │ │ │ │ ├── agent.ts │ │ │ │ │ └── application.ts │ │ │ │ └── middleware/ │ │ │ │ └── cluster_app_mock.ts │ │ │ ├── app.ts │ │ │ ├── bootstrap.ts │ │ │ ├── index.ts │ │ │ ├── inject_mocha.ts │ │ │ ├── lib/ │ │ │ │ ├── agent_handler.ts │ │ │ │ ├── app.ts │ │ │ │ ├── app_handler.ts │ │ │ │ ├── cluster.ts │ │ │ │ ├── context.ts │ │ │ │ ├── format_options.ts │ │ │ │ ├── inject_context.ts │ │ │ │ ├── mock_agent.ts │ │ │ │ ├── mock_custom_loader.ts │ │ │ │ ├── mock_http_server.ts │ │ │ │ ├── mock_httpclient.ts │ │ │ │ ├── parallel/ │ │ │ │ │ ├── agent.ts │ │ │ │ │ ├── app.ts │ │ │ │ │ └── util.ts │ │ │ │ ├── prerequire.ts │ │ │ │ ├── request_call_function.ts │ │ │ │ ├── restore.ts │ │ │ │ ├── start-cluster.ts │ │ │ │ ├── supertest.ts │ │ │ │ ├── tmp/ │ │ │ │ │ ├── .gitkeep │ │ │ │ │ └── empty.ts │ │ │ │ ├── types.ts │ │ │ │ └── utils.ts │ │ │ ├── register.ts │ │ │ ├── setup_vitest.ts │ │ │ └── typings/ │ │ │ └── index.d.ts │ │ ├── test/ │ │ │ ├── __snapshots__/ │ │ │ │ └── app_proxy.test.ts.snap │ │ │ ├── agent.test.ts │ │ │ ├── app/ │ │ │ │ └── middleware/ │ │ │ │ └── cluster_app_mock.test.ts │ │ │ ├── app.test.ts │ │ │ ├── app_event.test.ts │ │ │ ├── app_proxy.test.ts │ │ │ ├── bootstrap-plugin.test.ts │ │ │ ├── bootstrap.test.ts │ │ │ ├── cluster-worker_threads.test.ts │ │ │ ├── cluster.test.ts │ │ │ ├── ctx.test.ts │ │ │ ├── demo-cluster.ts │ │ │ ├── fixtures/ │ │ │ │ ├── agent/ │ │ │ │ │ ├── agent.js │ │ │ │ │ ├── app.js │ │ │ │ │ ├── client.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ └── package.json │ │ │ │ ├── agent-boot-error/ │ │ │ │ │ ├── agent.js │ │ │ │ │ └── package.json │ │ │ │ ├── agent-boot-ready-error/ │ │ │ │ │ ├── agent.js │ │ │ │ │ └── package.json │ │ │ │ ├── app/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── router.js │ │ │ │ │ ├── app.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ └── package.json │ │ │ │ ├── app-boot-error/ │ │ │ │ │ ├── app.js │ │ │ │ │ └── package.json │ │ │ │ ├── app-boot-ready-error/ │ │ │ │ │ ├── app.js │ │ │ │ │ └── package.json │ │ │ │ ├── app-event/ │ │ │ │ │ ├── agent.js │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── router.js │ │ │ │ │ ├── app.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ └── package.json │ │ │ │ ├── app-fail/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── router.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ └── package.json │ │ │ │ ├── app-proxy/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── extend/ │ │ │ │ │ │ └── application.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ └── package.json │ │ │ │ ├── app-proxy-ready/ │ │ │ │ │ ├── agent.js │ │ │ │ │ ├── app.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ └── package.json │ │ │ │ ├── app-ready-failed/ │ │ │ │ │ ├── app.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ ├── package.json │ │ │ │ │ └── test/ │ │ │ │ │ └── index.test.js │ │ │ │ ├── apps/ │ │ │ │ │ ├── app-not-clean/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── app-throw/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ │ └── config.unittest.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── barapp/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ └── home.js │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── env-app/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ │ ├── config.local.js │ │ │ │ │ │ │ ├── config.prod.js │ │ │ │ │ │ │ ├── config.test.js │ │ │ │ │ │ │ └── config.unittest.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── foo/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── helloworld/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ └── test/ │ │ │ │ │ │ └── helloworld.test.js │ │ │ │ │ ├── mock_cookies/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── mockhome/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── no-framework/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ └── plugin/ │ │ │ │ │ │ └── a/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ └── extend/ │ │ │ │ │ │ │ └── application.js │ │ │ │ │ │ └── package.json │ │ │ │ │ └── parallel-test/ │ │ │ │ │ ├── package.json │ │ │ │ │ └── test/ │ │ │ │ │ ├── a.test.js │ │ │ │ │ ├── b.test.js │ │ │ │ │ └── c.test.js │ │ │ │ ├── bar/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ ├── index.js │ │ │ │ │ └── package.json │ │ │ │ ├── cache/ │ │ │ │ │ ├── config.default.js │ │ │ │ │ └── package.json │ │ │ │ ├── chair/ │ │ │ │ │ ├── index.js │ │ │ │ │ └── package.json │ │ │ │ ├── create-context-failed/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ ├── package.json │ │ │ │ │ └── test/ │ │ │ │ │ └── index.test.js │ │ │ │ ├── custom-loader/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── adapter/ │ │ │ │ │ │ │ └── docker.js │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ └── user.js │ │ │ │ │ │ ├── repository/ │ │ │ │ │ │ │ └── user.js │ │ │ │ │ │ └── router.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ └── package.json │ │ │ │ ├── custom_egg/ │ │ │ │ │ └── package.json │ │ │ │ ├── demo/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── context.js │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ ├── file.js │ │ │ │ │ │ │ ├── home.js │ │ │ │ │ │ │ ├── session.js │ │ │ │ │ │ │ └── user.js │ │ │ │ │ │ ├── extend/ │ │ │ │ │ │ │ └── application.js │ │ │ │ │ │ ├── router.js │ │ │ │ │ │ └── service/ │ │ │ │ │ │ ├── bar/ │ │ │ │ │ │ │ └── foo.js │ │ │ │ │ │ ├── foo.js │ │ │ │ │ │ ├── old.js │ │ │ │ │ │ └── third/ │ │ │ │ │ │ └── bar/ │ │ │ │ │ │ └── foo.js │ │ │ │ │ ├── app.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── config.js │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── mocks_data/ │ │ │ │ │ │ └── service/ │ │ │ │ │ │ ├── bar/ │ │ │ │ │ │ │ └── foo/ │ │ │ │ │ │ │ └── get/ │ │ │ │ │ │ │ └── foobar.js │ │ │ │ │ │ └── foo/ │ │ │ │ │ │ └── get/ │ │ │ │ │ │ └── foobar.js │ │ │ │ │ └── package.json │ │ │ │ ├── demo-async/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ └── home.js │ │ │ │ │ │ ├── router.js │ │ │ │ │ │ └── service/ │ │ │ │ │ │ ├── bar/ │ │ │ │ │ │ │ └── foo.js │ │ │ │ │ │ ├── foo.js │ │ │ │ │ │ └── third/ │ │ │ │ │ │ └── bar/ │ │ │ │ │ │ └── foo.js │ │ │ │ │ ├── app.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.js │ │ │ │ │ ├── mocks_data/ │ │ │ │ │ │ └── service/ │ │ │ │ │ │ ├── bar/ │ │ │ │ │ │ │ └── foo/ │ │ │ │ │ │ │ └── get/ │ │ │ │ │ │ │ └── foobar.js │ │ │ │ │ │ └── foo/ │ │ │ │ │ │ └── get/ │ │ │ │ │ │ └── foobar.js │ │ │ │ │ └── package.json │ │ │ │ ├── demo_mock_service_cluster/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── context.js │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ ├── file.js │ │ │ │ │ │ │ ├── home.js │ │ │ │ │ │ │ ├── session.js │ │ │ │ │ │ │ └── user.js │ │ │ │ │ │ ├── extend/ │ │ │ │ │ │ │ └── application.js │ │ │ │ │ │ ├── router.js │ │ │ │ │ │ └── service/ │ │ │ │ │ │ ├── bar/ │ │ │ │ │ │ │ └── foo.js │ │ │ │ │ │ ├── foo.js │ │ │ │ │ │ ├── old.js │ │ │ │ │ │ └── third/ │ │ │ │ │ │ └── bar/ │ │ │ │ │ │ └── foo.js │ │ │ │ │ ├── app.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── config.js │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── mocks_data/ │ │ │ │ │ │ └── service/ │ │ │ │ │ │ ├── bar/ │ │ │ │ │ │ │ └── foo/ │ │ │ │ │ │ │ └── get/ │ │ │ │ │ │ │ └── foobar.js │ │ │ │ │ │ └── foo/ │ │ │ │ │ │ └── get/ │ │ │ │ │ │ └── foobar.js │ │ │ │ │ └── package.json │ │ │ │ ├── demo_next/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── context.js │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ ├── file.js │ │ │ │ │ │ │ ├── home.js │ │ │ │ │ │ │ ├── session.js │ │ │ │ │ │ │ └── user.js │ │ │ │ │ │ ├── extend/ │ │ │ │ │ │ │ └── application.js │ │ │ │ │ │ ├── router.js │ │ │ │ │ │ └── service/ │ │ │ │ │ │ ├── bar/ │ │ │ │ │ │ │ └── foo.js │ │ │ │ │ │ ├── foo.js │ │ │ │ │ │ ├── old.js │ │ │ │ │ │ └── third/ │ │ │ │ │ │ └── bar/ │ │ │ │ │ │ └── foo.js │ │ │ │ │ ├── app.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.js │ │ │ │ │ ├── mocks_data/ │ │ │ │ │ │ └── service/ │ │ │ │ │ │ ├── bar/ │ │ │ │ │ │ │ └── foo/ │ │ │ │ │ │ │ └── get/ │ │ │ │ │ │ │ └── foobar.js │ │ │ │ │ │ └── foo/ │ │ │ │ │ │ └── get/ │ │ │ │ │ │ └── foobar.js │ │ │ │ │ └── package.json │ │ │ │ ├── demo_next_h2/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── context.js │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ ├── file.js │ │ │ │ │ │ │ ├── home.js │ │ │ │ │ │ │ ├── session.js │ │ │ │ │ │ │ └── user.js │ │ │ │ │ │ ├── extend/ │ │ │ │ │ │ │ └── application.js │ │ │ │ │ │ ├── router.js │ │ │ │ │ │ └── service/ │ │ │ │ │ │ ├── bar/ │ │ │ │ │ │ │ └── foo.js │ │ │ │ │ │ ├── foo.js │ │ │ │ │ │ ├── old.js │ │ │ │ │ │ └── third/ │ │ │ │ │ │ └── bar/ │ │ │ │ │ │ └── foo.js │ │ │ │ │ ├── app.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.js │ │ │ │ │ ├── mocks_data/ │ │ │ │ │ │ └── service/ │ │ │ │ │ │ ├── bar/ │ │ │ │ │ │ │ └── foo/ │ │ │ │ │ │ │ └── get/ │ │ │ │ │ │ │ └── foobar.js │ │ │ │ │ │ └── foo/ │ │ │ │ │ │ └── get/ │ │ │ │ │ │ └── foobar.js │ │ │ │ │ └── package.json │ │ │ │ ├── disable-security/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── context.js │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ ├── home.js │ │ │ │ │ │ │ └── session.js │ │ │ │ │ │ ├── router.js │ │ │ │ │ │ └── service/ │ │ │ │ │ │ ├── bar/ │ │ │ │ │ │ │ └── foo.js │ │ │ │ │ │ ├── foo.js │ │ │ │ │ │ ├── old.js │ │ │ │ │ │ └── third/ │ │ │ │ │ │ └── bar/ │ │ │ │ │ │ └── foo.js │ │ │ │ │ ├── app.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── config.js │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── mocks_data/ │ │ │ │ │ │ └── service/ │ │ │ │ │ │ ├── bar/ │ │ │ │ │ │ │ └── foo/ │ │ │ │ │ │ │ └── get/ │ │ │ │ │ │ │ └── foobar.js │ │ │ │ │ │ └── foo/ │ │ │ │ │ │ └── get/ │ │ │ │ │ │ └── foobar.js │ │ │ │ │ └── package.json │ │ │ │ ├── error-framework/ │ │ │ │ │ ├── index.js │ │ │ │ │ └── package.json │ │ │ │ ├── failed-app/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ ├── package.json │ │ │ │ │ └── test/ │ │ │ │ │ └── index.test.js │ │ │ │ ├── fooPlugin/ │ │ │ │ │ ├── app.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ └── plugin.js │ │ │ │ │ └── package.json │ │ │ │ ├── get-app-failed/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ ├── package.json │ │ │ │ │ └── test/ │ │ │ │ │ └── index.test.js │ │ │ │ ├── messenger-binding/ │ │ │ │ │ ├── agent.js │ │ │ │ │ ├── app.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ └── package.json │ │ │ │ ├── plugin/ │ │ │ │ │ └── package.json │ │ │ │ ├── plugin-bootstrap/ │ │ │ │ │ ├── package.json │ │ │ │ │ └── test.js │ │ │ │ ├── plugin_throw/ │ │ │ │ │ └── package.json │ │ │ │ ├── request/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── router.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ └── package.json │ │ │ │ ├── server/ │ │ │ │ │ ├── app.js │ │ │ │ │ └── package.json │ │ │ │ ├── setup-app/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ ├── package.json │ │ │ │ │ └── test/ │ │ │ │ │ ├── .setup.js │ │ │ │ │ └── index.test.js │ │ │ │ ├── simple/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ └── home.js │ │ │ │ │ │ └── router.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ └── package.json │ │ │ │ ├── tegg-app/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── modules/ │ │ │ │ │ │ └── foo/ │ │ │ │ │ │ ├── LogService.ts │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── app.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── package.json │ │ │ │ │ ├── test/ │ │ │ │ │ │ ├── hooks.test.ts │ │ │ │ │ │ ├── multi_mock_context.test.ts │ │ │ │ │ │ ├── tegg.test.ts │ │ │ │ │ │ └── tegg_context.test.ts │ │ │ │ │ ├── tsconfig.json │ │ │ │ │ └── typing.ts │ │ │ │ ├── tegg-app-esm/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── modules/ │ │ │ │ │ │ └── foo/ │ │ │ │ │ │ ├── LogService.ts │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── app.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── package.json │ │ │ │ │ ├── test/ │ │ │ │ │ │ ├── hooks.test.ts │ │ │ │ │ │ ├── multi_mock_context.test.ts │ │ │ │ │ │ ├── tegg.test.ts │ │ │ │ │ │ └── tegg_context.test.ts │ │ │ │ │ ├── tsconfig.json │ │ │ │ │ └── typing.ts │ │ │ │ ├── test-case-create-context-failed/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ ├── package.json │ │ │ │ │ └── test/ │ │ │ │ │ └── index.test.js │ │ │ │ ├── test-case-get-app-failed/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ ├── package.json │ │ │ │ │ └── test/ │ │ │ │ │ └── index.test.js │ │ │ │ ├── yadan_app/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ └── package.json │ │ │ │ └── yadan_app_fail/ │ │ │ │ ├── config/ │ │ │ │ │ └── config.default.js │ │ │ │ └── package.json │ │ │ ├── format_options.test.ts │ │ │ ├── helper.ts │ │ │ ├── index.test-skip.ts │ │ │ ├── inject_ctx.test.ts │ │ │ ├── mm.test.ts │ │ │ ├── mock_agent_httpclient.test.ts │ │ │ ├── mock_cluster_extend.test.ts │ │ │ ├── mock_cluster_restore.test.ts │ │ │ ├── mock_cluster_without_security_plugin.test.ts │ │ │ ├── mock_context.test.ts │ │ │ ├── mock_cookies.test.ts │ │ │ ├── mock_csrf.test.ts │ │ │ ├── mock_custom_loader.test.ts │ │ │ ├── mock_env.test.ts │ │ │ ├── mock_headers.test.ts │ │ │ ├── mock_httpclient_next.test.ts │ │ │ ├── mock_httpclient_next_h2.test.ts │ │ │ ├── mock_request.test.ts │ │ │ ├── mock_service.test.ts │ │ │ ├── mock_service_async.test.ts │ │ │ ├── mock_service_cluster.test.ts │ │ │ ├── mock_session.test.ts │ │ │ ├── parallel.test.ts │ │ │ ├── parallel_hook.test.ts │ │ │ └── setup_vitest.test.ts │ │ ├── tsconfig.json │ │ ├── tsdown.config.ts │ │ └── vitest.config.ts │ ├── multipart/ │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── app/ │ │ │ │ ├── extend/ │ │ │ │ │ └── context.ts │ │ │ │ ├── middleware/ │ │ │ │ │ └── multipart.ts │ │ │ │ └── schedule/ │ │ │ │ └── clean_tmpdir.ts │ │ │ ├── app.ts │ │ │ ├── config/ │ │ │ │ └── config.default.ts │ │ │ ├── index.ts │ │ │ ├── lib/ │ │ │ │ ├── LimitError.ts │ │ │ │ ├── MultipartFileTooLargeError.ts │ │ │ │ └── utils.ts │ │ │ └── types.ts │ │ ├── test/ │ │ │ ├── dynamic-option.test.ts │ │ │ ├── enable-pathToRegexpModule.test.ts │ │ │ ├── file-mode-limit-filesize-per-request.test.ts │ │ │ ├── file-mode.test.ts │ │ │ ├── fixtures/ │ │ │ │ ├── apps/ │ │ │ │ │ ├── dynamic-option/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ └── upload.js │ │ │ │ │ │ │ ├── router.js │ │ │ │ │ │ │ └── views/ │ │ │ │ │ │ │ └── home.html │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ │ └── config.unittest.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── file-mode/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ └── upload.js │ │ │ │ │ │ │ ├── router.js │ │ │ │ │ │ │ └── views/ │ │ │ │ │ │ │ └── home.html │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ │ └── config.unittest.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── fileModeMatch/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ ├── save.js │ │ │ │ │ │ │ │ └── upload.js │ │ │ │ │ │ │ ├── router.js │ │ │ │ │ │ │ └── views/ │ │ │ │ │ │ │ └── home.html │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ │ └── config.unittest.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── fileModeMatch-glob/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ ├── save.js │ │ │ │ │ │ │ │ └── upload.js │ │ │ │ │ │ │ ├── router.js │ │ │ │ │ │ │ └── views/ │ │ │ │ │ │ │ └── home.html │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ │ └── config.unittest.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── fileModeMatch-glob-with-pathToRegexpModule/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ ├── save.js │ │ │ │ │ │ │ │ └── upload.js │ │ │ │ │ │ │ ├── router.js │ │ │ │ │ │ │ └── views/ │ │ │ │ │ │ │ └── home.html │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ │ └── config.unittest.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── limit-filesize-per-request/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ │ └── config.unittest.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── multipart/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ └── upload.js │ │ │ │ │ │ │ ├── router.js │ │ │ │ │ │ │ └── views/ │ │ │ │ │ │ │ └── home.html │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ │ └── config.unittest.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── multipart-for-await/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ └── upload.js │ │ │ │ │ │ │ ├── router.js │ │ │ │ │ │ │ └── views/ │ │ │ │ │ │ │ └── home.html │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── multipart-with-whitelist/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ └── upload.js │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ │ └── config.unittest.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── ts/ │ │ │ │ │ │ ├── .gitignore │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ └── home.ts │ │ │ │ │ │ │ └── router.ts │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.ts │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ └── tsconfig.json │ │ │ │ │ ├── upload-limit/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ │ └── config.unittest.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── upload-one-file/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ └── async.js │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ │ └── config.unittest.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── whitelist-function/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ └── upload.js │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ │ └── config.unittest.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── wrong-fileModeMatch/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── wrong-fileModeMatch-value/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ │ └── package.json │ │ │ │ │ └── wrong-mode/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ └── package.json │ │ │ │ ├── bigfile.txt │ │ │ │ ├── testfile.txt │ │ │ │ └── 中文名.js │ │ │ ├── multipart-for-await.test.ts │ │ │ ├── multipart.test.ts │ │ │ ├── setup.ts │ │ │ ├── stream-mode-with-filematch-glob.test.ts │ │ │ ├── stream-mode-with-filematch.test.ts │ │ │ ├── ts.test.ts │ │ │ ├── utils.ts │ │ │ └── wrong-mode.test.ts │ │ ├── tsconfig.json │ │ └── vitest.config.ts │ ├── onerror/ │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── agent.ts │ │ │ ├── app.ts │ │ │ ├── config/ │ │ │ │ └── config.default.ts │ │ │ ├── index.ts │ │ │ ├── lib/ │ │ │ │ ├── error_view.ts │ │ │ │ ├── onerror_page.mustache.html │ │ │ │ └── utils.ts │ │ │ └── types.ts │ │ ├── test/ │ │ │ ├── fixtures/ │ │ │ │ ├── agent-error/ │ │ │ │ │ ├── agent.js │ │ │ │ │ └── package.json │ │ │ │ ├── custom-listener-onerror/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── router.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ └── package.json │ │ │ │ ├── mock-test-error/ │ │ │ │ │ └── package.json │ │ │ │ ├── onerror/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ ├── home.js │ │ │ │ │ │ │ └── user.js │ │ │ │ │ │ └── router.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ └── plugin.js │ │ │ │ │ └── package.json │ │ │ │ ├── onerror-4xx/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ ├── home.js │ │ │ │ │ │ │ └── user.js │ │ │ │ │ │ └── router.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ └── package.json │ │ │ │ ├── onerror-ctx-error/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── extend/ │ │ │ │ │ │ │ └── context.js │ │ │ │ │ │ └── middleware/ │ │ │ │ │ │ └── trigger.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ └── package.json │ │ │ │ ├── onerror-custom-500/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── router.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ └── package.json │ │ │ │ ├── onerror-custom-template/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ ├── home.js │ │ │ │ │ │ │ └── user.js │ │ │ │ │ │ └── router.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ ├── package.json │ │ │ │ │ └── template.mustache │ │ │ │ ├── onerror-customize/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ ├── home.js │ │ │ │ │ │ │ └── user.js │ │ │ │ │ │ └── router.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ └── package.json │ │ │ │ └── onerror-no-errorpage/ │ │ │ │ ├── app/ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ ├── home.js │ │ │ │ │ │ └── user.js │ │ │ │ │ └── router.js │ │ │ │ ├── config/ │ │ │ │ │ └── config.default.js │ │ │ │ └── package.json │ │ │ └── onerror.test.ts │ │ ├── tsconfig.json │ │ ├── tsdown.config.ts │ │ └── vitest.config.ts │ ├── redis/ │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── docker-compose.yml │ │ ├── package.json │ │ ├── src/ │ │ │ ├── agent.ts │ │ │ ├── app.ts │ │ │ ├── config/ │ │ │ │ └── config.default.ts │ │ │ ├── index.ts │ │ │ ├── lib/ │ │ │ │ └── redis.ts │ │ │ └── types.ts │ │ ├── test/ │ │ │ ├── __snapshots__/ │ │ │ │ └── redis.test.ts.snap │ │ │ ├── fixtures/ │ │ │ │ ├── apps/ │ │ │ │ │ ├── redisapp/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ └── home.js │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.js │ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── redisapp-customize/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ └── home.js │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.js │ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── redisapp-default/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ └── home.js │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.js │ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── redisapp-disable-offline-queue/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ └── home.js │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.js │ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── redisapp-mock/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ └── home.js │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.js │ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── redisapp-supportTimeCommand-false/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ └── home.js │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.js │ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── redisapp-weakdependent/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ └── home.js │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.js │ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── redisclusterapp/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ └── home.js │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.js │ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── redispathapp/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ └── home.js │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.js │ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── redissentinelapp/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ └── home.js │ │ │ │ │ │ │ └── router.js │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.js │ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── ts/ │ │ │ │ │ │ ├── .gitignore │ │ │ │ │ │ └── redisapp-ts/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ └── home.ts │ │ │ │ │ │ │ └── router.ts │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.ts │ │ │ │ │ │ │ └── plugin.ts │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ └── tsconfig.json │ │ │ │ │ └── ts-multi/ │ │ │ │ │ ├── .gitignore │ │ │ │ │ ├── redisapp-ts/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ │ │ └── home.ts │ │ │ │ │ │ │ └── router.ts │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── config.ts │ │ │ │ │ │ │ └── plugin.ts │ │ │ │ │ │ └── package.json │ │ │ │ │ └── tsconfig.json │ │ │ │ └── redis/ │ │ │ │ ├── redispath-26381.conf │ │ │ │ ├── sentinel-26379.conf │ │ │ │ └── sentinel-26380.conf │ │ │ └── redis.test.ts │ │ ├── tsconfig.json │ │ └── vitest.config.ts │ ├── schedule/ │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── agent.ts │ │ │ ├── app/ │ │ │ │ └── extend/ │ │ │ │ ├── agent.ts │ │ │ │ ├── application.ts │ │ │ │ └── application.unittest.ts │ │ │ ├── app.ts │ │ │ ├── config/ │ │ │ │ └── config.default.ts │ │ │ ├── index.ts │ │ │ ├── lib/ │ │ │ │ ├── load_schedule.ts │ │ │ │ ├── schedule.ts │ │ │ │ ├── schedule_worker.ts │ │ │ │ ├── strategy/ │ │ │ │ │ ├── all.ts │ │ │ │ │ ├── base.ts │ │ │ │ │ ├── timer.ts │ │ │ │ │ └── worker.ts │ │ │ │ └── types.ts │ │ │ └── types.ts │ │ ├── test/ │ │ │ ├── all.test.ts │ │ │ ├── cronError.test.ts │ │ │ ├── customDirectory.test.ts │ │ │ ├── customType.test.ts │ │ │ ├── customTypeError.test.ts │ │ │ ├── customTypeParams.test.ts │ │ │ ├── customTypePlugin.test.ts │ │ │ ├── customTypeWithoutStart.test.ts │ │ │ ├── detect-error.test.ts │ │ │ ├── dynamic.test.ts │ │ │ ├── env.test.ts │ │ │ ├── executeError-task-generator.test.ts │ │ │ ├── executeError.test.ts │ │ │ ├── fixtures/ │ │ │ │ ├── all/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── schedule/ │ │ │ │ │ │ ├── interval.js │ │ │ │ │ │ └── sub/ │ │ │ │ │ │ └── cron.js │ │ │ │ │ └── package.json │ │ │ │ ├── async/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── schedule/ │ │ │ │ │ │ │ └── sub/ │ │ │ │ │ │ │ └── cron.js │ │ │ │ │ │ └── service/ │ │ │ │ │ │ └── user.js │ │ │ │ │ └── package.json │ │ │ │ ├── context/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── schedule/ │ │ │ │ │ │ │ └── sub/ │ │ │ │ │ │ │ └── cron.js │ │ │ │ │ │ └── service/ │ │ │ │ │ │ └── user.js │ │ │ │ │ └── package.json │ │ │ │ ├── cronError/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── schedule/ │ │ │ │ │ │ ├── interval.js │ │ │ │ │ │ └── sub/ │ │ │ │ │ │ └── cron.js │ │ │ │ │ └── package.json │ │ │ │ ├── cronOptions/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── schedule/ │ │ │ │ │ │ └── cron-options.js │ │ │ │ │ └── package.json │ │ │ │ ├── customDirectory/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── other-schedule/ │ │ │ │ │ │ │ └── custom.js │ │ │ │ │ │ └── schedule/ │ │ │ │ │ │ └── interval.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── config.js │ │ │ │ │ │ └── plugin.js │ │ │ │ │ └── package.json │ │ │ │ ├── customType/ │ │ │ │ │ ├── agent.js │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── schedule/ │ │ │ │ │ │ └── cluster.js │ │ │ │ │ └── package.json │ │ │ │ ├── customTypeError/ │ │ │ │ │ ├── agent.js │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── schedule/ │ │ │ │ │ │ └── cluster.js │ │ │ │ │ └── package.json │ │ │ │ ├── customTypeParams/ │ │ │ │ │ ├── agent.js │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── schedule/ │ │ │ │ │ │ ├── cluster-all-clz.js │ │ │ │ │ │ ├── cluster-all.js │ │ │ │ │ │ ├── cluster-clz.js │ │ │ │ │ │ └── cluster.js │ │ │ │ │ └── package.json │ │ │ │ ├── customTypePlugin/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── schedule/ │ │ │ │ │ │ └── cluster.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── lib/ │ │ │ │ │ │ └── plugin/ │ │ │ │ │ │ ├── agent.js │ │ │ │ │ │ └── package.json │ │ │ │ │ └── package.json │ │ │ │ ├── customTypeWithoutStart/ │ │ │ │ │ ├── agent.js │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── schedule/ │ │ │ │ │ │ └── cluster.js │ │ │ │ │ └── package.json │ │ │ │ ├── demo/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.default.ts │ │ │ │ │ └── package.json │ │ │ │ ├── detect-error/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── schedule/ │ │ │ │ │ │ ├── error.js │ │ │ │ │ │ ├── fail.js │ │ │ │ │ │ └── suc.js │ │ │ │ │ └── package.json │ │ │ │ ├── dynamic-app/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── schedule/ │ │ │ │ │ │ ├── interval.js │ │ │ │ │ │ └── sub/ │ │ │ │ │ │ └── cron.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ └── package.json │ │ │ │ ├── dynamic-cluster/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── schedule/ │ │ │ │ │ │ ├── interval.js │ │ │ │ │ │ └── sub/ │ │ │ │ │ │ └── cron.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.default.js │ │ │ │ │ └── package.json │ │ │ │ ├── env/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── schedule/ │ │ │ │ │ │ ├── local.js │ │ │ │ │ │ ├── undefined.js │ │ │ │ │ │ └── unittest.js │ │ │ │ │ └── package.json │ │ │ │ ├── executeError/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── schedule/ │ │ │ │ │ │ └── interval.js │ │ │ │ │ └── package.json │ │ │ │ ├── executeError-task-generator/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── schedule/ │ │ │ │ │ │ └── interval.js │ │ │ │ │ └── package.json │ │ │ │ ├── immediate/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── schedule/ │ │ │ │ │ │ ├── immediate-cron.js │ │ │ │ │ │ └── immediate-interval.js │ │ │ │ │ └── package.json │ │ │ │ ├── immediate-onlyonce/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── schedule/ │ │ │ │ │ │ └── immediate-onlyonce.js │ │ │ │ │ └── package.json │ │ │ │ ├── plugin/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── package.json │ │ │ │ │ └── plugin/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── schedule/ │ │ │ │ │ │ ├── interval.js │ │ │ │ │ │ └── sub/ │ │ │ │ │ │ └── cron.js │ │ │ │ │ └── package.json │ │ │ │ ├── safe-timers/ │ │ │ │ │ ├── agent.js │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── schedule/ │ │ │ │ │ │ ├── interval.js │ │ │ │ │ │ └── sub/ │ │ │ │ │ │ └── cron.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ └── package.json │ │ │ │ ├── scheduleError/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── schedule/ │ │ │ │ │ │ ├── interval.js │ │ │ │ │ │ └── sub/ │ │ │ │ │ │ └── cron.js │ │ │ │ │ └── package.json │ │ │ │ ├── stop/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── schedule/ │ │ │ │ │ │ └── interval.js │ │ │ │ │ └── package.json │ │ │ │ ├── subscription/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── schedule/ │ │ │ │ │ │ ├── interval.js │ │ │ │ │ │ └── sub/ │ │ │ │ │ │ └── cron.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ └── package.json │ │ │ │ ├── subscription-enableFastContextLogger/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── schedule/ │ │ │ │ │ │ ├── interval.js │ │ │ │ │ │ └── sub/ │ │ │ │ │ │ └── cron.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ └── plugin.js │ │ │ │ │ └── package.json │ │ │ │ ├── subscription-generator/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── schedule/ │ │ │ │ │ │ ├── interval.js │ │ │ │ │ │ └── sub/ │ │ │ │ │ │ └── cron.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── plugin.js │ │ │ │ │ └── package.json │ │ │ │ ├── symlink/ │ │ │ │ │ ├── package.json │ │ │ │ │ ├── realFile.js │ │ │ │ │ ├── runDir/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ └── schedule/ │ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ │ └── package.json │ │ │ │ │ └── tsRealFile.ts │ │ │ │ ├── typeUndefined/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── schedule/ │ │ │ │ │ │ ├── sub/ │ │ │ │ │ │ │ └── cron.js │ │ │ │ │ │ └── undefined.js │ │ │ │ │ └── package.json │ │ │ │ ├── unknown/ │ │ │ │ │ ├── agent.js │ │ │ │ │ └── package.json │ │ │ │ ├── worker/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── schedule/ │ │ │ │ │ │ ├── interval.js │ │ │ │ │ │ └── sub/ │ │ │ │ │ │ └── cron.js │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── config.default.js │ │ │ │ │ │ └── plugin.js │ │ │ │ │ └── package.json │ │ │ │ └── worker-ctxStorage/ │ │ │ │ ├── app/ │ │ │ │ │ └── schedule/ │ │ │ │ │ ├── interval.js │ │ │ │ │ └── sub/ │ │ │ │ │ └── foobar.js │ │ │ │ ├── config/ │ │ │ │ │ └── plugin.js │ │ │ │ └── package.json │ │ │ ├── immediate.test.ts │ │ │ ├── safe-timers.test.ts │ │ │ ├── schedule-plugin.test.ts │ │ │ ├── schedule-type-worker1.test.ts │ │ │ ├── schedule-type-worker2.test.ts │ │ │ ├── schedule.test.ts │ │ │ ├── scheduleError.test.ts │ │ │ ├── stop.test.ts │ │ │ ├── subscription.test.ts │ │ │ ├── typeUndefined.test.ts │ │ │ ├── unknown.test.ts │ │ │ └── utils.ts │ │ ├── tsconfig.json │ │ └── vitest.config.ts │ ├── security/ │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── README.zh-CN.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── agent.ts │ │ │ ├── app/ │ │ │ │ ├── extend/ │ │ │ │ │ ├── agent.ts │ │ │ │ │ ├── application.ts │ │ │ │ │ ├── context.ts │ │ │ │ │ ├── helper.ts │ │ │ │ │ └── response.ts │ │ │ │ └── middleware/ │ │ │ │ └── securities.ts │ │ │ ├── app.ts │ │ │ ├── config/ │ │ │ │ ├── config.default.ts │ │ │ │ └── config.local.ts │ │ │ ├── index.ts │ │ │ ├── lib/ │ │ │ │ ├── extend/ │ │ │ │ │ └── safe_curl.ts │ │ │ │ ├── helper/ │ │ │ │ │ ├── cliFilter.ts │ │ │ │ │ ├── escape.ts │ │ │ │ │ ├── escapeShellArg.ts │ │ │ │ │ ├── escapeShellCmd.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── shtml.ts │ │ │ │ │ ├── sjs.ts │ │ │ │ │ ├── sjson.ts │ │ │ │ │ ├── spath.ts │ │ │ │ │ └── surl.ts │ │ │ │ ├── middlewares/ │ │ │ │ │ ├── csp.ts │ │ │ │ │ ├── csrf.ts │ │ │ │ │ ├── dta.ts │ │ │ │ │ ├── hsts.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── methodnoallow.ts │ │ │ │ │ ├── noopen.ts │ │ │ │ │ ├── nosniff.ts │ │ │ │ │ ├── referrerPolicy.ts │ │ │ │ │ ├── xframe.ts │ │ │ │ │ └── xssProtection.ts │ │ │ │ └── utils.ts │ │ │ └── types.ts │ │ ├── test/ │ │ │ ├── __snapshots__/ │ │ │ │ ├── context.test.ts.snap │ │ │ │ ├── csp.test.ts.snap │ │ │ │ ├── csrf.test.ts.snap │ │ │ │ ├── dta.test.ts.snap │ │ │ │ └── xss.test.ts.snap │ │ │ ├── app/ │ │ │ │ └── extends/ │ │ │ │ ├── cliFilter.test.ts │ │ │ │ ├── escapeShellArg.test.ts │ │ │ │ ├── escapeShellCmd.test.ts │ │ │ │ ├── helper.test.ts │ │ │
Showing preview only (579K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (6359 symbols across 1569 files)
FILE: ecosystem-ci/clone.ts
function exec (line 9) | function exec(cmd: string, execCwd: string = cwd): string {
function getRemoteUrl (line 13) | function getRemoteUrl(dir: string): string | null {
function normalizeGitUrl (line 21) | function normalizeGitUrl(url: string): string {
function isSameRepo (line 30) | function isSameRepo(url1: string, url2: string): boolean {
function getCurrentHash (line 34) | function getCurrentHash(dir: string): string | null {
function cloneRepo (line 42) | function cloneRepo(repoUrl: string, branch: string, targetDir: string): ...
function checkoutHash (line 47) | function checkoutHash(dir: string, hash: string): void {
FILE: ecosystem-ci/patch-project.ts
function discoverPackages (line 28) | async function discoverPackages(): Promise<[string, string][]> {
function buildOverrides (line 55) | async function buildOverrides(): Promise<Record<string, string>> {
function patchPackageJSON (line 68) | async function patchPackageJSON(filePath: string, overrides: Record<stri...
function patchCnpmcore (line 94) | async function patchCnpmcore(overrides: Record<string, string>): Promise...
function patchExamples (line 99) | async function patchExamples(overrides: Record<string, string>): Promise...
function main (line 109) | async function main(): Promise<void> {
FILE: examples/helloworld-commonjs/index.js
function main (line 9) | async function main() {
FILE: examples/helloworld-tegg/app.ts
class AppBootHook (line 3) | class AppBootHook implements ILifecycleBoot {
method constructor (line 6) | constructor(app: Application) {
method didLoad (line 10) | async didLoad() {
method willReady (line 18) | async willReady() {
method didReady (line 22) | async didReady() {
method serverDidReady (line 27) | async serverDidReady() {
method beforeClose (line 31) | async beforeClose() {
FILE: examples/helloworld-tegg/app/biz/Foo.ts
class Foo (line 9) | class Foo {
method bar (line 25) | async bar() {
method fetch (line 31) | async fetch() {
FILE: examples/helloworld-tegg/app/biz/HelloService.ts
class HelloService (line 4) | class HelloService {
method hello (line 5) | async hello(): Promise<string> {
FILE: examples/helloworld-tegg/app/biz/WorldService.ts
class WorldService (line 6) | class WorldService {
method world (line 7) | async world(): Promise<string> {
FILE: examples/helloworld-tegg/app/port/controller/ArgsController.ts
class ArgsController (line 4) | class ArgsController {
method getRequest (line 6) | async getRequest(@HTTPRequest() request: Request) {
method getRequest2 (line 18) | async getRequest2(@HTTPBody() body: object, @HTTPRequest() request: Re...
FILE: examples/helloworld-tegg/app/port/controller/HomeController.ts
class HomeController (line 4) | class HomeController {
method index (line 6) | async index() {
FILE: examples/helloworld-tegg/app/port/controller/SimpleController.ts
class SimpleController (line 22) | class SimpleController {
method hello (line 34) | async hello(@HTTPParam() name: string) {
method getHeaders (line 42) | async getHeaders(@HTTPHeaders() headers: IncomingHttpHeaders) {
method getRequest (line 51) | async getRequest(@HTTPRequest() request: Request, @HTTPCookies() cooki...
method getContext (line 59) | async getContext(@HTTPContext() ctx: Context) {
method getFoo (line 66) | async getFoo(@HTTPContext() ctx: Context) {
FILE: examples/helloworld-tegg/app/port/schedule/CronDemo.ts
class CronSubscriber (line 21) | class CronSubscriber {
method subscribe (line 25) | async subscribe() {
FILE: examples/helloworld-tegg/app/port/schedule/Demo.ts
class IntervalScheduler (line 11) | class IntervalScheduler {
method subscribe (line 15) | async subscribe() {
FILE: examples/helloworld-typescript/app.ts
class AppBootHook (line 3) | class AppBootHook implements ILifecycleBoot {
method constructor (line 6) | constructor(app: Application) {
method didLoad (line 10) | async didLoad() {
method willReady (line 18) | async willReady() {
method didReady (line 22) | async didReady() {
method serverDidReady (line 27) | async serverDidReady() {
method beforeClose (line 31) | async beforeClose() {
FILE: examples/helloworld-typescript/app/controller/home.ts
class HomeController (line 3) | class HomeController extends Controller {
method index (line 4) | async index() {
FILE: packages/cluster/src/agent_worker.ts
function main (line 19) | async function main() {
FILE: packages/cluster/src/app_worker.ts
constant REUSE_PORT_SUPPORTED_PLATFORMS (line 21) | const REUSE_PORT_SUPPORTED_PLATFORMS = ['linux', 'freebsd', 'sunos', 'ai...
function main (line 23) | async function main() {
FILE: packages/cluster/src/error/ClusterAgentWorkerError.ts
class ClusterAgentWorkerError (line 1) | class ClusterAgentWorkerError extends Error {
method constructor (line 10) | constructor(id: number, workerId: number, status: string, error: Error) {
FILE: packages/cluster/src/error/ClusterWorkerExceptionError.ts
class ClusterWorkerExceptionError (line 1) | class ClusterWorkerExceptionError extends Error {
method constructor (line 7) | constructor(agent: number, worker: number) {
FILE: packages/cluster/src/index.ts
function startCluster (line 17) | async function startCluster(options: ClusterOptions): Promise<void> {
FILE: packages/cluster/src/master.ts
type MasterOptions (line 30) | interface MasterOptions extends ParsedClusterOptions {
class Master (line 35) | class Master extends ReadyEventEmitter {
method constructor (line 51) | constructor(options?: ClusterOptions) {
method #start (line 58) | async #start(options?: ClusterOptions) {
method startByProcess (line 207) | startByProcess(): void {
method startByWorkerThreads (line 222) | startByWorkerThreads(): void {
method detectPorts (line 237) | async detectPorts(): Promise<void> {
method log (line 254) | log(msg: string, ...args: any[]): void {
method startMasterSocketServer (line 259) | startMasterSocketServer(cb: (err?: Error) => void): void {
method stickyWorker (line 286) | stickyWorker(ip: string): AppProcessWorker | AppThreadWorker {
method forkAgentWorker (line 300) | forkAgentWorker(): void {
method forkAppWorkers (line 307) | forkAppWorkers(): void {
method killAgentWorker (line 323) | async killAgentWorker(timeout: number): Promise<void> {
method killAppWorkers (line 327) | async killAppWorkers(timeout: number): Promise<void> {
method onAgentExit (line 335) | onAgentExit(data: {
method onAgentStart (line 386) | onAgentStart(): void {
method onAppExit (line 427) | onAppExit(data: { workerId: number; code: number; signal: string }): v...
method onAppStart (line 481) | onAppStart(data: { workerId: number; address: ListeningAddress }): void {
method onExit (line 571) | onExit(code: number): void {
method onSignal (line 586) | onSignal(signal: string): void {
method onReload (line 603) | onReload(): void {
method close (line 611) | async close(): Promise<void> {
method _doClose (line 627) | async _doClose(): Promise<void> {
function isProduction (line 651) | function isProduction(options: ClusterOptions) {
type ListeningAddress (line 658) | interface ListeningAddress {
function getAddress (line 666) | function getAddress({ addressType, address, port, protocol }: ListeningA...
function isUnixSock (line 686) | function isUnixSock(address: ListeningAddress): boolean {
FILE: packages/cluster/src/utils/messenger.ts
type MessageCharacter (line 9) | type MessageCharacter = 'agent' | 'app' | 'master' | 'parent';
type MessageBody (line 11) | interface MessageBody {
class Messenger (line 76) | class Messenger {
method constructor (line 81) | constructor(master: Master, workerManager: WorkerManager) {
method send (line 100) | send(data: MessageBody): void {
method sendToMaster (line 170) | sendToMaster(data: MessageBody): void {
method sendToParent (line 179) | sendToParent(data: MessageBody): void {
method sendToAppWorker (line 190) | sendToAppWorker(data: MessageBody): void {
method sendToAgentWorker (line 208) | sendToAgentWorker(data: MessageBody): void {
FILE: packages/cluster/src/utils/mode/base/agent.ts
method constructor (line 17) | constructor(instance: T) {
method id (line 23) | get id(): number {
method id (line 27) | set id(id: number) {
method status (line 31) | get status(): string {
method status (line 35) | set status(status: string) {
method send (line 42) | static send(_message: MessageBody): void {
method kill (line 46) | static kill(): void {
method gracefulExit (line 51) | static gracefulExit(_options: any): void {
type LogFun (line 56) | type LogFun = (msg: any, ...args: any[]) => void;
method constructor (line 66) | constructor(
method getAgentWorkerFile (line 86) | getAgentWorkerFile(): string {
method fork (line 95) | fork(): void {
method clean (line 99) | clean(): void {
FILE: packages/cluster/src/utils/mode/base/app.ts
method constructor (line 15) | constructor(instance: T) {
method state (line 23) | get state(): string {
method state (line 27) | set state(state: string) {
method disableRefork (line 35) | get disableRefork(): boolean {
method disableRefork (line 39) | set disableRefork(disableRefork: boolean) {
method isDevReload (line 43) | get isDevReload(): boolean {
method isDevReload (line 47) | set isDevReload(isDevReload: boolean) {
method clean (line 53) | clean(): void {
method workerId (line 59) | static get workerId(): number {
method on (line 64) | static on(..._args: any[]): void {
method send (line 69) | static send(_message: MessageBody): void {
method kill (line 73) | static kill(): void {
method gracefulExit (line 78) | static gracefulExit(_options: any): void {
type LogFun (line 83) | type LogFun = (msg: any, ...args: any[]) => void;
method constructor (line 96) | constructor(
method getAppWorkerFile (line 118) | getAppWorkerFile(): string {
method fork (line 127) | fork(): void {
FILE: packages/cluster/src/utils/mode/impl/process/agent.ts
class AgentProcessWorker (line 14) | class AgentProcessWorker extends BaseAgentWorker<ChildProcess> {
method workerId (line 15) | get workerId(): number {
method send (line 19) | send(message: MessageBody): void {
method send (line 23) | static send(message: MessageBody): void {
method kill (line 28) | static kill(): void {
method gracefulExit (line 33) | static gracefulExit(options: gracefulExitOptions): void {
class AgentProcessUtils (line 38) | class AgentProcessUtils extends BaseAgentUtils {
method fork (line 43) | fork(): this {
method clean (line 118) | clean(): void {
method kill (line 122) | async kill(timeout: number): Promise<void> {
FILE: packages/cluster/src/utils/mode/impl/process/app.ts
class AppProcessWorker (line 14) | class AppProcessWorker extends BaseAppWorker<ClusterProcessWorker> {
method id (line 15) | get id(): number {
method workerId (line 19) | get workerId(): number {
method exitedAfterDisconnect (line 23) | get exitedAfterDisconnect(): boolean {
method exitCode (line 27) | get exitCode(): number {
method send (line 31) | send(message: MessageBody): void {
method clean (line 35) | clean(): void {
method workerId (line 41) | static get workerId(): number {
method on (line 45) | static on(event: string, listener: (...args: any[]) => void): void {
method send (line 49) | static send(message: MessageBody): void {
method kill (line 61) | static kill(): void {
method gracefulExit (line 66) | static gracefulExit(options: gracefulExitOptions): void {
class AppProcessUtils (line 71) | class AppProcessUtils extends BaseAppUtils {
method fork (line 72) | fork(): this {
method kill (line 154) | async kill(timeout: number): Promise<void> {
FILE: packages/cluster/src/utils/mode/impl/worker_threads/agent.ts
class AgentThreadWorker (line 9) | class AgentThreadWorker extends BaseAgentWorker<Worker> {
method workerId (line 10) | get workerId(): number {
method send (line 14) | send(message: MessageBody): void {
method send (line 18) | static send(message: MessageBody): void {
method kill (line 23) | static kill(): void {
method gracefulExit (line 29) | static gracefulExit(options: gracefulExitOptions): void {
class AgentThreadUtils (line 40) | class AgentThreadUtils extends BaseAgentUtils {
method fork (line 45) | fork(): void {
method clean (line 91) | clean(): void {
method kill (line 95) | async kill(): Promise<void> {
FILE: packages/cluster/src/utils/mode/impl/worker_threads/app.ts
class AppThreadWorker (line 9) | class AppThreadWorker extends BaseAppWorker<ThreadWorker> {
method constructor (line 13) | constructor(instance: ThreadWorker, id: number) {
method id (line 18) | get id(): number {
method workerId (line 22) | get workerId(): number {
method state (line 26) | get state(): string {
method state (line 30) | set state(val: string) {
method exitedAfterDisconnect (line 34) | get exitedAfterDisconnect(): boolean {
method exitCode (line 38) | get exitCode(): number {
method send (line 43) | send(message: MessageBody): void {
method clean (line 47) | clean(): void {
method workerId (line 53) | static get workerId(): number {
method on (line 57) | static on(event: string, listener: (...args: any[]) => void): void {
method send (line 61) | static send(message: MessageBody): void {
method kill (line 66) | static kill(): void {
method gracefulExit (line 70) | static gracefulExit(options: gracefulExitOptions): void {
class AppThreadUtils (line 80) | class AppThreadUtils extends BaseAppUtils {
method #forkSingle (line 83) | #forkSingle(appPath: string, options: WorkerOptions, id: number): void {
method fork (line 139) | fork(): this {
method kill (line 171) | async kill(): Promise<void> {
FILE: packages/cluster/src/utils/options.ts
type ClusterHTTPSSecureOptions (line 12) | interface ClusterHTTPSSecureOptions {
type ClusterStartMode (line 19) | type ClusterStartMode = 'process' | 'worker_threads';
type ClusterOptions (line 22) | interface ClusterOptions {
type ParsedClusterOptions (line 92) | interface ParsedClusterOptions extends ClusterOptions {
function parseOptions (line 100) | async function parseOptions(options?: ClusterOptions): Promise<ParsedClu...
FILE: packages/cluster/src/utils/terminate.ts
type SubProcess (line 10) | interface SubProcess extends ChildProcess {
function terminate (line 14) | async function terminate(subProcess: SubProcess, timeout: number): Promi...
function killProcess (line 21) | async function killProcess(subProcess: SubProcess, timeout: number) {
function killChildren (line 35) | async function killChildren(childrenPids: number[], timeout: number) {
function getChildPids (line 56) | async function getChildPids(pid: number) {
function kill (line 68) | function kill(pids: number[], signal: string) {
function getUnterminatedProcesses (line 79) | function getUnterminatedProcesses(pids: number[]) {
FILE: packages/cluster/src/utils/worker_manager.ts
class WorkerManager (line 8) | class WorkerManager extends EventEmitter {
method constructor (line 14) | constructor() {
method getWorkers (line 19) | getWorkers(): number[] {
method setAgent (line 23) | setAgent(agent: BaseAgentWorker): void {
method getAgent (line 27) | getAgent(): BaseAgentWorker | null {
method deleteAgent (line 31) | deleteAgent(): void {
method setWorker (line 35) | setWorker(worker: BaseAppWorker): void {
method getWorker (line 39) | getWorker(workerId: number): BaseAppWorker | undefined {
method deleteWorker (line 43) | deleteWorker(workerId: number): void {
method listWorkerIds (line 47) | listWorkerIds(): number[] {
method listWorkers (line 51) | listWorkers(): BaseAppWorker[] {
method getListeningWorkerIds (line 55) | getListeningWorkerIds(): number[] {
method count (line 65) | count(): { agent: number; worker: number } {
method startCheck (line 74) | startCheck(): void {
FILE: packages/cluster/test/fixtures/apps/agent-start-framework-error/agent.js
class CustomError (line 2) | class CustomError extends FrameworkBaseError {
method module (line 3) | get module() {
method configWillLoad (line 9) | configWillLoad() {
FILE: packages/cluster/test/fixtures/apps/agent-start-framework-ready-error/agent.js
class CustomError (line 3) | class CustomError extends FrameworkBaseError {
method module (line 4) | get module() {
method didLoad (line 10) | async didLoad() {
FILE: packages/cluster/test/fixtures/apps/app-start-framework-error/app.js
class CustomError (line 2) | class CustomError extends FrameworkBaseError {
method module (line 3) | get module() {
method configWillLoad (line 9) | configWillLoad() {
FILE: packages/cluster/test/fixtures/apps/app-start-framework-ready-error/app.js
class CustomError (line 3) | class CustomError extends FrameworkBaseError {
method module (line 4) | get module() {
method didLoad (line 10) | async didLoad() {
FILE: packages/cluster/test/fixtures/apps/framework/lib/agent.js
class FrameworkAgent (line 4) | class FrameworkAgent extends Agent {
method [Symbol.for('egg#eggPath')] (line 5) | get [Symbol.for('egg#eggPath')]() {
FILE: packages/cluster/test/fixtures/apps/framework/lib/framework.js
class Loader (line 6) | class Loader extends AppWorkerLoader {
method loadConfig (line 7) | async loadConfig() {
method loadServerConf (line 12) | loadServerConf() {}
class ChairApplication (line 15) | class ChairApplication extends Application {
method [Symbol.for('egg#eggPath')] (line 16) | get [Symbol.for('egg#eggPath')]() {
method [Symbol.for('egg#loader')] (line 20) | get [Symbol.for('egg#loader')]() {
FILE: packages/cluster/test/fixtures/apps/messenger/agent.js
function workerOnline (line 53) | function workerOnline(data) {
function sendToProcess (line 61) | function sendToProcess(messenger) {
FILE: packages/cluster/test/fixtures/apps/messenger/app.js
function workerOnline (line 50) | function workerOnline(data) {
function sendToProcess (line 58) | function sendToProcess(messenger) {
FILE: packages/cluster/test/master/close-master.test.ts
function alive (line 303) | function alive(pid: number) {
FILE: packages/cluster/test/utils.ts
function cluster (line 5) | function cluster(baseDir: string, options: MockClusterOptions = {}): Ret...
function getFilepath (line 19) | function getFilepath(name: string): string {
FILE: packages/cookies/benchmark/index.cjs
function createCtx (line 76) | function createCtx(egg) {
function createEggCookie (line 120) | function createEggCookie() {
function createCookie (line 124) | function createCookie() {
FILE: packages/cookies/src/cookie.ts
constant PRIORITY_REGEXP (line 21) | const PRIORITY_REGEXP = /^(?:low|medium|high)$/i;
type CookieSetOptions (line 23) | interface CookieSetOptions {
class Cookie (line 83) | class Cookie {
method constructor (line 88) | constructor(name: string, value?: string | null, attrs?: CookieSetOpti...
method toString (line 111) | toString(): string {
method toHeader (line 115) | toHeader(): string {
function mergeDefaultAttrs (line 152) | function mergeDefaultAttrs(attrs?: CookieSetOptions) {
FILE: packages/cookies/src/cookies.ts
type DefaultCookieOptions (line 12) | interface DefaultCookieOptions extends CookieSetOptions {
type CookieGetOptions (line 19) | interface CookieGetOptions {
class Cookies (line 34) | class Cookies {
method constructor (line 44) | constructor(ctx: Record<string, any>, keys: string[], defaultCookieOpt...
method keys (line 54) | get keys(): Keygrip {
method get (line 76) | get(name: string, opts: CookieGetOptions = {}): string | undefined {
method _get (line 85) | _get(name: string, opts: CookieGetOptions): string | undefined {
method set (line 125) | set(name: string, value: string | null, opts?: CookieSetOptions): this {
method #formatChipsCookieName (line 249) | #formatChipsCookieName(name: string) {
method #parseChromiumAndMajorVersion (line 253) | #parseChromiumAndMajorVersion(userAgent: string) {
method isSameSiteNoneCompatible (line 260) | isSameSiteNoneCompatible(userAgent: string): boolean {
method isPartitionedCompatible (line 269) | isPartitionedCompatible(userAgent: string): boolean {
type ParseChromiumResult (line 281) | interface ParseChromiumResult {
function parseChromiumAndMajorVersion (line 287) | function parseChromiumAndMajorVersion(userAgent: string): ParseChromiumR...
function getPattern (line 297) | function getPattern(name: string) {
function computeSigned (line 307) | function computeSigned(opts: { encrypt?: boolean; signed?: boolean | num...
function pushCookie (line 314) | function pushCookie(cookies: string[], cookie: Cookie) {
function ignoreCookiesByName (line 322) | function ignoreCookiesByName(cookies: string[], name: string) {
function ignoreCookiesByNameAndPath (line 327) | function ignoreCookiesByNameAndPath(cookies: string[], name: string, pat...
FILE: packages/cookies/src/error.ts
class CookieError (line 1) | class CookieError extends Error {
method constructor (line 2) | constructor(message: string, options?: ErrorOptions) {
FILE: packages/cookies/src/keygrip.ts
constant KEY_LEN (line 7) | const KEY_LEN = 32;
constant IV_SIZE (line 8) | const IV_SIZE = 16;
function constantTimeCompare (line 17) | function constantTimeCompare(a: Buffer, b: Buffer) {
class Keygrip (line 26) | class Keygrip {
method constructor (line 31) | constructor(keys: string[]) {
method encrypt (line 37) | encrypt(data: string, key?: string): Buffer {
method decrypt (line 46) | decrypt(data: string | Buffer): { value: Buffer; index: number } | fal...
method #decryptByKey (line 58) | #decryptByKey(data: string | Buffer, key: string) {
method sign (line 69) | sign(data: string | Buffer, key?: string): string {
method verify (line 83) | verify(data: string, digest: string): number {
function crypt (line 96) | function crypt(cipher: Cipheriv, data: string | Buffer): Buffer {
function keyToPassword (line 102) | function keyToPassword(key: string): { key: Buffer; iv: Buffer } {
FILE: packages/cookies/test/cookies.ts
function createCookie (line 5) | function createCookie(
FILE: packages/core/benchmark/middleware/app/controller/home.js
method async (line 2) | async async() {
method index (line 6) | async index() {
FILE: packages/core/src/base_context_class.ts
class BaseContextClass (line 8) | class BaseContextClass {
method constructor (line 17) | constructor(ctx: Context) {
FILE: packages/core/src/egg.ts
constant EGG_LOADER (line 26) | const EGG_LOADER: symbol = Symbol.for('egg#loader');
type EggCoreOptions (line 28) | interface EggCoreOptions {
type EggCoreInitOptions (line 36) | type EggCoreInitOptions = Partial<EggCoreOptions>;
class Request (line 45) | class Request extends KoaRequest {
class Response (line 51) | class Response extends KoaResponse {
class Context (line 56) | class Context extends KoaContext {
type MiddlewareFunc (line 93) | type MiddlewareFunc<T extends KoaContext = Context> = KoaMiddlewareFunc<T>;
class EggCore (line 95) | class EggCore extends KoaApplication {
method constructor (line 125) | constructor(options: EggCoreInitOptions = {}) {
method logger (line 224) | get logger(): Logger {
method coreLogger (line 228) | get coreLogger(): Logger {
method addSingleton (line 237) | addSingleton(name: string, create: SingletonCreateMethod): void {
method use (line 256) | use<T extends KoaContext = Context>(fn: MiddlewareFunc<T>): this {
method type (line 268) | get type(): 'application' | 'agent' {
method baseDir (line 278) | get baseDir(): string {
method deprecate (line 287) | get deprecate(): (message: string) => void {
method name (line 297) | get name(): string {
method plugins (line 306) | get plugins(): Record<string, any> {
method config (line 315) | get config(): EggAppConfig {
method beforeStart (line 332) | beforeStart(scope: Fun, name?: string): void {
method ready (line 352) | ready(flagOrFunction?: ReadyFunctionArg) {
method readyCallback (line 377) | readyCallback(name: string, opts: object): (...args: unknown[]) => void {
method beforeClose (line 396) | beforeClose(fn: Fun, name?: string): void {
method close (line 414) | async close(): Promise<void> {
method router (line 425) | get router(): Router {
method url (line 439) | url(name: string, params?: Parameters<Router['url']>[1]): string {
method head (line 449) | head(...args: any): EggCore {
method get (line 462) | get(...args: any): EggCore {
method put (line 469) | put(...args: any): EggCore {
method patch (line 480) | patch(...args: any): EggCore {
method post (line 487) | post(...args: any): EggCore {
method delete (line 498) | delete(...args: any): EggCore {
method del (line 505) | del(...args: any): EggCore {
method all (line 513) | all(...args: any): EggCore {
method resources (line 528) | resources(...args: any): EggCore {
method redirect (line 533) | redirect(source: string, destination: string, status = 301): this {
method register (line 538) | register(
method customEggLoader (line 565) | protected customEggLoader(): typeof EggLoader {
method customEggPaths (line 586) | protected customEggPaths(): string[] {
FILE: packages/core/src/lifecycle.ts
type ILifecycleBoot (line 17) | interface ILifecycleBoot {
type BootImplClass (line 59) | type BootImplClass<T = ILifecycleBoot> = new (...args: any[]) => T;
type LifecycleOptions (line 61) | interface LifecycleOptions {
type FunWithFullPath (line 67) | type FunWithFullPath = Fun & { fullPath?: string };
class Lifecycle (line 69) | class Lifecycle extends EventEmitter {
method constructor (line 81) | constructor(options: Partial<LifecycleOptions>) {
method ready (line 121) | ready(flagOrFunction?: ReadyFunctionArg) {
method app (line 128) | get app(): EggCore {
method logger (line 132) | get logger(): EggConsoleLogger {
method timing (line 136) | get timing(): Timing {
method legacyReadyCallback (line 140) | legacyReadyCallback(name: string, opt?: object): (...args: unknown[]) ...
method addBootHook (line 154) | addBootHook(bootHootOrBootClass: BootImplClass | ILifecycleBoot): void {
method addFunctionAsBootHook (line 159) | addFunctionAsBootHook<T = EggCore>(hook: (app: T) => void, fullPath?: ...
method init (line 180) | init(): void {
method registerBeforeStart (line 197) | registerBeforeStart(scope: Fun, name: string): void {
method registerBeforeClose (line 207) | registerBeforeClose(fn: FunWithFullPath, fullPath?: string): void {
method close (line 217) | async close(): Promise<void> {
method triggerConfigWillLoad (line 234) | triggerConfigWillLoad(): void {
method triggerConfigDidLoad (line 246) | triggerConfigDidLoad(): void {
method triggerDidLoad (line 263) | triggerDidLoad(): void {
method triggerWillReady (line 280) | triggerWillReady(): void {
method triggerDidReady (line 297) | triggerDidReady(err?: Error): Promise<void> {
method triggerServerDidReady (line 315) | triggerServerDidReady(): Promise<void> {
method #initReady (line 334) | #initReady(): void {
method #delegateReadyEvent (line 358) | #delegateReadyEvent(ready: Ready): void {
method #registerReadyCallback (line 365) | #registerReadyCallback(args: { scope: Fun; ready: Ready; timingKeyPref...
FILE: packages/core/src/loader/context_loader.ts
constant CLASS_LOADER (line 8) | const CLASS_LOADER = Symbol('classLoader');
type ClassLoaderOptions (line 10) | interface ClassLoaderOptions {
class ClassLoader (line 15) | class ClassLoader {
method constructor (line 19) | constructor(options: ClassLoaderOptions) {
method #defineProperty (line 29) | #defineProperty(property: string, values: any): void {
type ContextLoaderOptions (line 43) | interface ContextLoaderOptions extends Omit<FileLoaderOptions, 'target'> {
class ContextLoader (line 58) | class ContextLoader extends FileLoader {
method constructor (line 65) | constructor(options: ContextLoaderOptions) {
function getInstance (line 103) | function getInstance(values: any, ctx: Context): any {
FILE: packages/core/src/loader/egg_loader.ts
type EggLoaderOptions (line 36) | interface EggLoaderOptions {
type EggDirInfoType (line 52) | type EggDirInfoType = 'app' | 'plugin' | 'framework';
type EggDirInfo (line 54) | interface EggDirInfo {
class EggLoader (line 59) | class EggLoader {
method constructor (line 80) | constructor(options: EggLoaderOptions) {
method app (line 159) | get app(): EggCore {
method lifecycle (line 163) | get lifecycle(): Lifecycle {
method logger (line 167) | get logger(): Logger {
method getServerEnv (line 178) | protected getServerEnv(): string {
method getServerScope (line 211) | protected getServerScope(): string {
method getAppname (line 221) | getAppname(): string {
method getHomedir (line 235) | getHomedir(): string {
method getAppInfo (line 245) | protected getAppInfo(): EggAppInfo {
method getEggPaths (line 323) | protected getEggPaths(): string[] {
method loadPlugin (line 424) | async loadPlugin(): Promise<void> {
method loadAppPlugins (line 487) | protected async loadAppPlugins(): Promise<Record<string, EggPluginInfo...
method loadEggPlugins (line 497) | protected async loadEggPlugins(): Promise<Record<string, EggPluginInfo...
method loadCustomPlugins (line 508) | protected loadCustomPlugins(): Record<string, EggPluginInfo> {
method readPluginConfigs (line 543) | protected async readPluginConfigs(configPaths: string[] | string): Pro...
method #normalizePluginConfig (line 585) | #normalizePluginConfig(plugins: Record<string, EggPluginInfo | boolean...
method #mergePluginConfig (line 621) | async #mergePluginConfig(plugin: EggPluginInfo): Promise<void> {
method getOrderPlugins (line 662) | protected getOrderPlugins(
method getLookupDirs (line 741) | protected getLookupDirs(): Set<string> {
method getPluginPath (line 760) | protected getPluginPath(plugin: EggPluginInfo): string {
method #resolvePluginPath (line 774) | #resolvePluginPath(plugin: EggPluginInfo): string {
method #formatPluginPathFromPackageJSON (line 795) | async #formatPluginPathFromPackageJSON(
method #extendPlugins (line 876) | #extendPlugins(targets: Record<string, EggPluginInfo>, plugins: Record...
method loadConfig (line 924) | async loadConfig(): Promise<void> {
method #preloadAppConfig (line 975) | async #preloadAppConfig(): Promise<Record<string, any>> {
method #loadConfig (line 988) | async #loadConfig(
method #loadConfigFromEnv (line 1018) | #loadConfigFromEnv(): Record<string, unknown> | undefined {
method #setConfigMeta (line 1030) | #setConfigMeta(config: Record<string, unknown>, filepath: string): void {
method #setConfig (line 1036) | #setConfig(obj: Record<string, any>, filepath: string): void {
method loadAgentExtend (line 1059) | async loadAgentExtend(): Promise<void> {
method loadApplicationExtend (line 1068) | async loadApplicationExtend(): Promise<void> {
method loadRequestExtend (line 1077) | async loadRequestExtend(): Promise<void> {
method loadResponseExtend (line 1086) | async loadResponseExtend(): Promise<void> {
method loadContextExtend (line 1095) | async loadContextExtend(): Promise<void> {
method loadHelperExtend (line 1104) | async loadHelperExtend(): Promise<void> {
method getExtendFilePaths (line 1118) | protected getExtendFilePaths(name: string): string[] {
method loadExtend (line 1129) | async loadExtend(name: string, proto: object): Promise<void> {
method loadCustomApp (line 1234) | async loadCustomApp(): Promise<void> {
method loadCustomAgent (line 1242) | async loadCustomAgent(): Promise<void> {
method loadBootHook (line 1248) | loadBootHook(): void {
method #loadBootHook (line 1252) | async #loadBootHook(fileName: string): Promise<void> {
method loadService (line 1290) | async loadService(options?: Partial<ContextLoaderOptions>): Promise<vo...
method loadMiddleware (line 1327) | async loadMiddleware(opt?: Partial<FileLoaderOptions>): Promise<void> {
method loadController (line 1408) | async loadController(opt?: Partial<FileLoaderOptions>): Promise<void> {
method loadRouter (line 1459) | async loadRouter(): Promise<void> {
method loadCustomLoader (line 1467) | async loadCustomLoader(): Promise<void> {
method loadFile (line 1531) | async loadFile(filepath: string, ...inject: unknown[]): Promise<any> {
method requireFile (line 1555) | async requireFile(filepath: string): Promise<any> {
method getLoadUnits (line 1578) | getLoadUnits(): EggDirInfo[] {
method loadToApp (line 1618) | async loadToApp(
method loadToContext (line 1645) | async loadToContext(
method FileLoader (line 1667) | get FileLoader(): typeof FileLoader {
method ContextLoader (line 1675) | get ContextLoader(): typeof ContextLoader {
method getTypeFiles (line 1679) | getTypeFiles(filename: string): string[] {
method resolveModule (line 1690) | resolveModule(filepath: string): string | undefined {
method #resolveOutDir (line 1703) | #resolveOutDir(): string | undefined {
method #resolveFromOutDir (line 1724) | #resolveFromOutDir(filepath: string): string | undefined {
function depCompatible (line 1740) | function depCompatible(plugin: EggPluginInfo & { dep?: string[] }) {
function isValidatePackageName (line 1747) | function isValidatePackageName(name: string) {
function wrapMiddleware (line 1756) | function wrapMiddleware(
function debugMiddlewareWrapper (line 1779) | function debugMiddlewareWrapper(mw: MiddlewareFunc): MiddlewareFunc {
function wrapControllerClass (line 1792) | function wrapControllerClass(Controller: typeof BaseContextClass, fullPa...
function controllerMethodToMiddleware (line 1823) | function controllerMethodToMiddleware(Controller: typeof BaseContextClas...
function wrapObject (line 1835) | function wrapObject(obj: Record<string, any>, fullPath: string, prefix?:...
function objectFunctionToMiddleware (line 1862) | function objectFunctionToMiddleware(func: Fun) {
FILE: packages/core/src/loader/file_loader.ts
constant FULLPATH (line 14) | const FULLPATH: unique symbol = Symbol('EGG_LOADER_ITEM_FULLPATH');
constant EXPORTS (line 15) | const EXPORTS: unique symbol = Symbol('EGG_LOADER_ITEM_EXPORTS');
type CaseStyle (line 22) | type CaseStyle = (typeof CaseStyle)[keyof typeof CaseStyle];
type CaseStyleFunction (line 24) | type CaseStyleFunction = (filepath: string) => string[];
type FileLoaderInitializer (line 25) | type FileLoaderInitializer = (exports: unknown, options: { path: string;...
type FileLoaderFilter (line 26) | type FileLoaderFilter = (exports: unknown) => boolean;
type FileLoaderOptions (line 28) | interface FileLoaderOptions {
type FileLoaderParseItem (line 54) | interface FileLoaderParseItem {
class FileLoader (line 64) | class FileLoader {
method FULLPATH (line 65) | static get FULLPATH(): typeof FULLPATH {
method EXPORTS (line 69) | static get EXPORTS(): typeof EXPORTS {
method constructor (line 89) | constructor(options: FileLoaderOptions) {
method load (line 112) | async load(): Promise<object> {
method parse (line 172) | protected async parse(): Promise<FileLoaderParseItem[]> {
function getProperties (line 238) | function getProperties(filepath: string, caseStyle: CaseStyle | CaseStyl...
function getExports (line 251) | async function getExports(fullpath: string, options: FileLoaderOptions, ...
function defaultCamelize (line 288) | function defaultCamelize(filepath: string, caseStyle: CaseStyle): string...
FILE: packages/core/src/singleton.ts
type SingletonCreateMethod (line 7) | type SingletonCreateMethod = (
type SingletonOptions (line 13) | interface SingletonOptions {
class Singleton (line 19) | class Singleton<T = any> {
method constructor (line 26) | constructor(options: SingletonOptions) {
method init (line 37) | init(): void | Promise<void> {
method initSync (line 41) | initSync(): void {
method initAsync (line 70) | async initAsync(): Promise<void> {
method #setClientToApp (line 100) | #setClientToApp(client: unknown): void {
method get (line 107) | get(id: string) {
method getSingletonInstance (line 114) | getSingletonInstance(id: string) {
method createInstance (line 118) | createInstance(config: Record<string, any>, clientName: string) {
method createInstanceAsync (line 132) | async createInstanceAsync(config: Record<string, any>, clientName: str...
method #extendDynamicMethods (line 141) | #extendDynamicMethods(client: any): void {
FILE: packages/core/src/types.ts
type EggAppInfo (line 1) | interface EggAppInfo {
type EggPluginInfo (line 18) | interface EggPluginInfo {
type CustomLoaderConfigItem (line 42) | interface CustomLoaderConfigItem {
type EggAppConfig (line 51) | interface EggAppConfig extends Record<string, any> {
FILE: packages/core/src/utils/index.ts
type Fun (line 11) | type Fun = (...args: unknown[]) => unknown;
function getCalleeFromStack (line 23) | function getCalleeFromStack(withLine?: boolean, stackIndex?: number): st...
method deprecated (line 57) | deprecated(message: string): void {
method existsPath (line 69) | async existsPath(filepath: string): Promise<boolean> {
method loadFile (line 78) | async loadFile(filepath: string): Promise<any> {
method resolvePath (line 101) | resolvePath(filepath: string, options?: { paths?: string[] }): string {
method callFn (line 107) | async callFn(fn: Fun, args?: unknown[], ctx?: unknown): Promise<unknown> {
method getResolvedFilename (line 115) | getResolvedFilename(filepath: string, baseDir: string): string {
function prepareObjectStackTrace (line 127) | function prepareObjectStackTrace(_obj: unknown, stack: unknown): unknown {
FILE: packages/core/src/utils/sequencify.ts
type SequencifyResult (line 5) | interface SequencifyResult {
type SequencifyTask (line 10) | interface SequencifyTask {
function sequence (line 15) | function sequence(
function sequencify (line 62) | function sequencify(
FILE: packages/core/src/utils/timing.ts
type TimingItem (line 7) | interface TimingItem {
class Timing (line 16) | class Timing {
method constructor (line 21) | constructor() {
method init (line 28) | init(): void {
method start (line 40) | start(name?: string, start?: number): TimingItem | undefined {
method end (line 63) | end(name?: string): TimingItem | undefined {
method enable (line 73) | enable(): void {
method disable (line 77) | disable(): void {
method clear (line 81) | clear(): void {
method toJSON (line 86) | toJSON(): TimingItem[] {
method itemToString (line 90) | itemToString(timelineEnd: number, item: TimingItem, times: number): st...
method toString (line 102) | toString(prefix = 'egg start timeline:', width = 50): string {
FILE: packages/core/test/fixtures/app-before-close/app.js
function onlyOnce (line 24) | function onlyOnce() {
FILE: packages/core/test/fixtures/app-ts/app.ts
constant EGG_LOADER (line 3) | const EGG_LOADER = Symbol.for('egg#loader');
constant EGG_PATH (line 4) | const EGG_PATH = Symbol.for('egg#eggPath');
class CustomEggCore (line 19) | class CustomEggCore extends EggCore {
method constructor (line 20) | constructor(options: EggCoreOptions) {
method [EGG_PATH] (line 24) | get [EGG_PATH]() {
method customFn (line 28) | customFn() {
class MyEgg (line 72) | class MyEgg extends EggCore {
method [EGG_LOADER] (line 73) | get [EGG_LOADER]() {
method [EGG_PATH] (line 77) | get [EGG_PATH]() {
class MyLoader (line 81) | class MyLoader extends EggLoader {
method constructor (line 82) | constructor(opt: EggLoaderOptions) {
method filter (line 145) | filter(obj) {
method initializer (line 148) | initializer(obj, options) {
class CustomFileLoader (line 159) | class CustomFileLoader extends FileLoader {
method test (line 160) | test() {
method filter (line 170) | filter(obj) {
method initializer (line 173) | initializer(obj, options) {
method filter (line 190) | filter(obj) {
method initializer (line 193) | initializer(obj, options) {
class CustomContextLoader (line 206) | class CustomContextLoader extends ContextLoader {
method test (line 207) | test() {
method filter (line 219) | filter(obj) {
method initializer (line 222) | initializer(obj, options) {
FILE: packages/core/test/fixtures/boot-before-close/app.js
method constructor (line 2) | constructor(app) {
method beforeClose (line 7) | async beforeClose() {
FILE: packages/core/test/fixtures/boot-before-close/app/plugin/boot-plugin/app.js
method constructor (line 2) | constructor(app) {
method beforeClose (line 6) | async beforeClose() {
FILE: packages/core/test/fixtures/boot-configDidLoad-error/app.js
method constructor (line 4) | constructor(app) {
method configDidLoad (line 9) | configDidLoad() {
method didLoad (line 13) | async didLoad() {
method willReady (line 18) | async willReady() {
method didReady (line 23) | async didReady() {
method beforeClose (line 28) | async beforeClose() {
FILE: packages/core/test/fixtures/boot-didLoad-error/app.js
method constructor (line 4) | constructor(app) {
method configDidLoad (line 9) | configDidLoad() {
method didLoad (line 13) | async didLoad() {
method willReady (line 18) | async willReady() {
method didReady (line 23) | async didReady() {
method beforeClose (line 28) | async beforeClose() {
FILE: packages/core/test/fixtures/boot-didReady-error/app.js
method constructor (line 4) | constructor(app) {
method configDidLoad (line 9) | configDidLoad() {
method didLoad (line 13) | async didLoad() {
method willReady (line 18) | async willReady() {
method didReady (line 23) | async didReady() {
method beforeClose (line 28) | async beforeClose() {
FILE: packages/core/test/fixtures/boot-serverDidLoad-error/app.js
method constructor (line 4) | constructor(app) {
method configDidLoad (line 9) | configDidLoad() {
method didLoad (line 13) | async didLoad() {
method willReady (line 18) | async willReady() {
method didReady (line 23) | async didReady() {
method beforeClose (line 28) | async beforeClose() {
method serverDidReady (line 33) | async serverDidReady() {
FILE: packages/core/test/fixtures/boot-timeout/app.js
method didLoad (line 4) | async didLoad() {
FILE: packages/core/test/fixtures/boot-willReady-error/app.js
method constructor (line 4) | constructor(app) {
method configDidLoad (line 9) | configDidLoad() {
method didLoad (line 13) | async didLoad() {
method willReady (line 18) | async willReady() {
method didReady (line 23) | async didReady() {
method beforeClose (line 28) | async beforeClose() {
FILE: packages/core/test/fixtures/boot/agent.js
method constructor (line 4) | constructor(app) {
method configDidLoad (line 9) | configDidLoad() {
method didLoad (line 13) | async didLoad() {
method willReady (line 18) | async willReady() {
method didReady (line 23) | async didReady() {
method beforeClose (line 28) | async beforeClose() {
method serverDidReady (line 33) | async serverDidReady() {
FILE: packages/core/test/fixtures/boot/app.js
method constructor (line 4) | constructor(app) {
method configWillLoad (line 9) | configWillLoad() {
method configDidLoad (line 13) | configDidLoad() {
method didLoad (line 17) | async didLoad() {
method willReady (line 22) | async willReady() {
method didReady (line 27) | async didReady() {
method beforeClose (line 32) | async beforeClose() {
method serverDidReady (line 37) | async serverDidReady() {
FILE: packages/core/test/fixtures/boot/app/plugin/boot-plugin-dep/agent.js
method constructor (line 4) | constructor(agent) {
method configDidLoad (line 7) | configDidLoad() {
FILE: packages/core/test/fixtures/boot/app/plugin/boot-plugin-dep/app.js
method constructor (line 4) | constructor(app) {
method configDidLoad (line 7) | configDidLoad() {
FILE: packages/core/test/fixtures/context-loader/app/depth/four/four/four/four.js
method constructor (line 4) | constructor(ctx) {
method get (line 8) | get() {
FILE: packages/core/test/fixtures/context-loader/app/depth/one.js
method constructor (line 4) | constructor(ctx) {
method get (line 8) | get() {
FILE: packages/core/test/fixtures/context-loader/app/depth/three/three/three.js
method constructor (line 4) | constructor(ctx) {
method get (line 8) | get() {
FILE: packages/core/test/fixtures/context-loader/app/depth/two/two.js
method constructor (line 4) | constructor(ctx) {
method get (line 8) | get() {
FILE: packages/core/test/fixtures/context-loader/app/pathname/a/b/c.js
method getPathname (line 5) | async getPathname() {
method getName (line 9) | async getName() {
FILE: packages/core/test/fixtures/context-loader/app/service/post.js
method postInfo (line 5) | get postInfo() {
FILE: packages/core/test/fixtures/context-loader/app/service/user.js
method info (line 5) | get info() {
FILE: packages/core/test/fixtures/context-loader/app/service1/user.js
method userInfo (line 5) | get userInfo() {
FILE: packages/core/test/fixtures/context-loader/app/service2/user.js
method userInfo (line 5) | get userInfo() {
FILE: packages/core/test/fixtures/context-loader/app/type/class.js
method constructor (line 4) | constructor(ctx) {
method get (line 7) | get() {
FILE: packages/core/test/fixtures/context-loader/app/type/function-class.js
method constructor (line 5) | constructor(ctx) {
method get (line 8) | get() {
FILE: packages/core/test/fixtures/context-loader/app/type/object.js
method get (line 4) | get() {
FILE: packages/core/test/fixtures/controller-app/app/controller/admin/config.js
method getName (line 5) | async getName() {
method getFullPath (line 9) | async getFullPath() {
FILE: packages/core/test/fixtures/controller-app/app/controller/class.js
method constructor (line 2) | constructor(ctx) {
method callFunction (line 6) | callFunction() {
method callGeneratorFunction (line 10) | async callGeneratorFunction() {
method callGeneratorFunctionWithArg (line 14) | async callGeneratorFunctionWithArg(ctx) {
method callAsyncFunction (line 18) | async callAsyncFunction() {
method callAsyncFunctionWithArg (line 22) | async callAsyncFunctionWithArg(ctx) {
method nofunction (line 27) | get nofunction() {
method request (line 31) | get request() {
method body (line 35) | set body(val) {
FILE: packages/core/test/fixtures/controller-app/app/controller/class_inherited.js
class BaseController (line 3) | class BaseController {
method constructor (line 4) | constructor(ctx) {
method callInheritedFunction (line 8) | callInheritedFunction() {
method callOverriddenFunction (line 12) | callOverriddenFunction() {
method callOverriddenFunction (line 18) | callOverriddenFunction() {
FILE: packages/core/test/fixtures/controller-app/app/controller/class_wrap_function.js
method get (line 5) | get() {
FILE: packages/core/test/fixtures/controller-app/app/controller/object.js
method callFunction (line 2) | callFunction() {
method callGeneratorFunction (line 6) | async callGeneratorFunction() {
method callGeneratorFunctionWithArg (line 10) | async callGeneratorFunctionWithArg(ctx) {
method callGeneratorFunction (line 15) | async callGeneratorFunction() {
method callGeneratorFunction (line 19) | async callGeneratorFunction() {
method callAsyncFunction (line 25) | async callAsyncFunction() {
method callAsyncFunctionWithArg (line 29) | async callAsyncFunctionWithArg(ctx) {
method nofunction (line 33) | get nofunction() {
FILE: packages/core/test/fixtures/controller-app/app/controller/resource_class.js
method index (line 5) | async index(ctx) {
method create (line 9) | async create(ctx) {
FILE: packages/core/test/fixtures/controller-app/app/service/home.js
method info (line 5) | async info() {
FILE: packages/core/test/fixtures/controller-params/app/controller/class.js
method constructor (line 4) | constructor(ctx) {
method generatorFunction (line 8) | async generatorFunction(...args) {
method asyncFunction (line 13) | async asyncFunction(...args) {
FILE: packages/core/test/fixtures/controller-params/app/controller/object.js
method callFunction (line 4) | async callFunction(...args) {
FILE: packages/core/test/fixtures/custom-loader/app/adapter/docker.js
class DockerAdapter (line 1) | class DockerAdapter {
method constructor (line 2) | constructor(app) {
method inspectDocker (line 6) | async inspectDocker() {
FILE: packages/core/test/fixtures/custom-loader/app/controller/user.js
class UserController (line 3) | class UserController {
method constructor (line 4) | constructor(ctx) {
method get (line 9) | async get() {
FILE: packages/core/test/fixtures/custom-loader/app/plugin/a.js
class PluginA (line 3) | class PluginA {
method getName (line 4) | getName() {
FILE: packages/core/test/fixtures/custom-loader/app/repository/user.js
class UserRepository (line 3) | class UserRepository {
method constructor (line 4) | constructor(ctx) {
method get (line 8) | async get() {
FILE: packages/core/test/fixtures/custom-loader/app/util/sub/fn.js
method echo (line 5) | echo() {
FILE: packages/core/test/fixtures/custom-loader/config/b/app/plugin/b.js
class PluginB (line 3) | class PluginB {
method getName (line 4) | getName() {
FILE: packages/core/test/fixtures/deprecate/app/extend/application.js
method env (line 4) | get env() {
FILE: packages/core/test/fixtures/egg-esm/app/extend/application.js
method Proxy (line 2) | get Proxy() {
method [Symbol.for('view')] (line 5) | get [Symbol.for('view')]() {
FILE: packages/core/test/fixtures/egg-esm/index.ts
class AppLoader (line 9) | class AppLoader extends EggLoader {
method loadAll (line 10) | async loadAll(): Promise<void> {
class Application (line 25) | class Application extends EggCore {
method constructor (line 28) | constructor(options: EggCoreInitOptions = {}) {
method customEggPaths (line 35) | protected override customEggPaths(): string[] {
method customEggLoader (line 39) | protected override customEggLoader(): typeof EggLoader {
FILE: packages/core/test/fixtures/egg-esm/node_modules/session/app.js
method getSessionById (line 3) | async getSessionById(sessionId) {
FILE: packages/core/test/fixtures/egg-ts-js-tsconfig-paths/app/service/lord.js
method jsService (line 2) | jsService() {
FILE: packages/core/test/fixtures/egg-ts-js-tsconfig-paths/app/service/test.ts
method tsService (line 2) | tsService() {
FILE: packages/core/test/fixtures/egg-ts-js/app/service/lord.js
method jsService (line 2) | jsService() {
FILE: packages/core/test/fixtures/egg-ts-js/app/service/test.ts
method tsService (line 2) | tsService() {
FILE: packages/core/test/fixtures/egg-ts/app/extend/agent.ts
method agentShow (line 2) | agentShow() {
FILE: packages/core/test/fixtures/egg-ts/app/extend/application.ts
method applicationShow (line 2) | applicationShow() {
FILE: packages/core/test/fixtures/egg-ts/app/extend/context.ts
method contextShow (line 2) | contextShow() {
FILE: packages/core/test/fixtures/egg-ts/app/extend/helper.ts
method helperShow (line 2) | helperShow() {
FILE: packages/core/test/fixtures/egg-ts/app/extend/request.ts
method requestShow (line 2) | requestShow() {
FILE: packages/core/test/fixtures/egg-ts/app/extend/response.ts
method responseShow (line 2) | responseShow() {
FILE: packages/core/test/fixtures/egg-ts/app/service/Test.ts
method getTest (line 2) | getTest() {
FILE: packages/core/test/fixtures/egg/app/extend/application.js
method Proxy (line 2) | get Proxy() {
method [Symbol.for('view')] (line 5) | get [Symbol.for('view')]() {
FILE: packages/core/test/fixtures/egg/index.js
class AppLoader (line 3) | class AppLoader extends EggLoader {
method loadAll (line 4) | async loadAll() {
class Application (line 19) | class Application extends EggCore {
method constructor (line 20) | constructor(options = {}) {
method [Symbol.for('egg#eggPath')] (line 27) | get [Symbol.for('egg#eggPath')]() {
method [Symbol.for('egg#loader')] (line 30) | get [Symbol.for('egg#loader')]() {
FILE: packages/core/test/fixtures/extend-controller-service/app.js
class CustomController (line 2) | class CustomController extends app.Controller {
method success (line 3) | success(result) {
method fail (line 10) | fail(message) {
class CustomService (line 18) | class CustomService extends app.Service {
method getData (line 19) | async getData() {
FILE: packages/core/test/fixtures/extend-controller-service/app/controller/api.js
method successAction (line 3) | async successAction() {
method failAction (line 8) | async failAction() {
FILE: packages/core/test/fixtures/extend-controller-service/app/service/api.js
method get (line 3) | async get() {
FILE: packages/core/test/fixtures/extend-symbol/app/extend/application.js
method [Symbol.for('view')] (line 2) | get [Symbol.for('view')]() {
FILE: packages/core/test/fixtures/extend-with-class/app/extend/application.js
class Application (line 3) | class Application extends EggCore {
method appApplication (line 4) | get appApplication() {
FILE: packages/core/test/fixtures/extend-with-class/app/extend/context.js
class MyContext (line 3) | class MyContext extends Context {
method appContext (line 4) | get appContext() {
method ajax (line 8) | ajax() {
FILE: packages/core/test/fixtures/extend-with-class/app/extend/request.js
class AppRequest (line 3) | class AppRequest extends Request {
method appRequest (line 4) | get appRequest() {
FILE: packages/core/test/fixtures/extend-with-class/app/extend/response.js
class AppResponse (line 3) | class AppResponse extends Response {
method appResponse (line 4) | get appResponse() {
method status (line 8) | set status(code) {
method etag (line 14) | get etag() {
FILE: packages/core/test/fixtures/extend/app/extend/application.js
method appApplication (line 4) | get appApplication() {
FILE: packages/core/test/fixtures/extend/app/extend/context.js
method appContext (line 4) | get appContext() {
FILE: packages/core/test/fixtures/extend/app/extend/response.js
method status (line 7) | set status(code) {
method etag (line 13) | get etag() {
FILE: packages/core/test/fixtures/extend/node_modules/b/app/extend/request.js
method pluginb (line 6) | get pluginb() {
method ip (line 10) | get ip() {
method ip (line 14) | set ip(_) {}
FILE: packages/core/test/fixtures/extends-app-service/app/service/user.js
class User (line 4) | class User extends app.Service {
method constructor (line 5) | constructor(ctx) {
method get (line 9) | async get(uid) {
FILE: packages/core/test/fixtures/framework-dulp/index.js
class Application (line 5) | class Application extends EggApplication {
method [Symbol.for('egg#eggPath')] (line 6) | get [Symbol.for('egg#eggPath')]() {
class Application2 (line 11) | class Application2 extends Application {
method [Symbol.for('egg#eggPath')] (line 12) | get [Symbol.for('egg#eggPath')]() {
FILE: packages/core/test/fixtures/framework-nosymbol/index.js
class Application (line 5) | class Application extends EggApplication {
method a (line 6) | get a() {}
class Application2 (line 9) | class Application2 extends Application {
method [Symbol.for('egg#eggPath')] (line 10) | get [Symbol.for('egg#eggPath')]() {
FILE: packages/core/test/fixtures/framework-symbol/index.js
class Framework (line 5) | class Framework extends Application {
method constructor (line 6) | constructor(options) {
method [Symbol.for('egg#eggPath')] (line 10) | get [Symbol.for('egg#eggPath')]() {
FILE: packages/core/test/fixtures/framework-wrong-eggpath/index.js
class Application (line 5) | class Application extends EggApplication {
method [Symbol.for('egg#eggPath')] (line 6) | [Symbol.for('egg#eggPath')]() {
FILE: packages/core/test/fixtures/helloworld-ts/app/controller/foo.ts
class FooController (line 1) | class FooController {
method render (line 2) | async render() {}
FILE: packages/core/test/fixtures/helper/app/extend/application.js
method constructor (line 4) | constructor(ctx) {
FILE: packages/core/test/fixtures/helper/app/extend/context.js
method helper (line 4) | get helper() {
FILE: packages/core/test/fixtures/load_dirs/babel/UserProxy.js
function defineProperties (line 6) | function defineProperties(target, props) {
function _temporalAssertDefined (line 24) | function _temporalAssertDefined(val, name, undef) {
function _classCallCheck (line 31) | function _classCallCheck(instance, Constructor) {
function UserProxy (line 38) | function UserProxy() {
FILE: packages/core/test/fixtures/load_dirs/class/UserProxy.js
class UserProxy (line 3) | class UserProxy {
method constructor (line 4) | constructor() {
method getUser (line 10) | getUser() {
FILE: packages/core/test/fixtures/load_dirs/dao/TestClass.js
method constructor (line 4) | constructor(app, fullpath) {
FILE: packages/core/test/fixtures/load_dirs/inject/a.js
method constructor (line 4) | constructor(inject) {
FILE: packages/core/test/fixtures/load_dirs/ts_module/mod2.ts
class HelloFoo (line 2) | class HelloFoo {}
FILE: packages/core/test/fixtures/load_file/es-module-default.js
method fn (line 4) | fn() {}
FILE: packages/core/test/fixtures/loadfile-esm/es-module-default.js
method fn (line 2) | fn() {}
FILE: packages/core/test/fixtures/loadfile-esm/es-module.js
function fn (line 1) | function fn() {
FILE: packages/core/test/fixtures/loadfile/es-module-default.js
method fn (line 4) | fn() {}
FILE: packages/core/test/fixtures/loadfile/es-module.js
function fn (line 3) | function fn() {
FILE: packages/core/test/fixtures/middleware-aa/app/router.js
function controller (line 11) | function controller() {
FILE: packages/core/test/fixtures/middleware-ignore/config/config.js
method ignore (line 2) | ignore(ctx) {
FILE: packages/core/test/fixtures/middleware-match/config/config.js
method match (line 2) | match(ctx) {
FILE: packages/core/test/fixtures/plugin/app/proxy/OnlyClassQuery.js
class OnlyCLassQuery (line 5) | class OnlyCLassQuery extends Proxy {
method constructor (line 6) | constructor(ctx) {
method query (line 10) | *query() {
FILE: packages/core/test/fixtures/plugin/app/proxy/UserInfoQuery.js
class UserInfoQuery (line 4) | class UserInfoQuery extends app.Proxy {
method constructor (line 5) | constructor(ctx) {
method query (line 9) | *query() {
FILE: packages/core/test/fixtures/plugin/app/proxy/couponQuery.js
class CouponQuery (line 4) | class CouponQuery extends app.Proxy {
method constructor (line 5) | constructor(ctx) {
method query (line 9) | *query() {
FILE: packages/core/test/fixtures/plugin/app/service/Foo4.js
class Foo4 (line 4) | class Foo4 extends app.Service {}
FILE: packages/core/test/fixtures/plugin/app/service/foo.js
class Foo (line 4) | class Foo extends app.Service {}
FILE: packages/core/test/fixtures/plugin/app/service/fooDir/Foo5.js
class Foo5 (line 4) | class Foo5 extends app.Service {}
FILE: packages/core/test/fixtures/plugin/node_modules/b/app/service/bar2.js
class Bar2 (line 4) | class Bar2 extends app.Service {}
FILE: packages/core/test/fixtures/proxy-override/app/proxy/queryProxy.js
class QueryProxy (line 4) | class QueryProxy extends app.Proxy {
method constructor (line 5) | constructor(ctx) {
method query (line 9) | *query() {
FILE: packages/core/test/fixtures/router-app/app/controller/async.js
method index (line 5) | async index() {
FILE: packages/core/test/fixtures/run-with-debug/index.js
class Application (line 4) | class Application extends EggApplication {
method toJSON (line 8) | toJSON() {
method [Symbol.for('egg#eggPath')] (line 5) | get [Symbol.for('egg#eggPath')]() {
FILE: packages/core/test/fixtures/service-unique/app/service/ctx.js
class CtxService (line 4) | class CtxService extends app.Service {
method get (line 5) | get() {
FILE: packages/core/test/fixtures/services_loader_verify/app/service/foo.js
method bar (line 5) | *bar(ctx) {
method bar1 (line 9) | *bar1(ctx) {
FILE: packages/core/test/fixtures/subdir-proxy/app/proxy/certify-personal/mobile-hi/do_certify.js
class Certify (line 4) | class Certify extends app.Service {
method constructor (line 5) | constructor(ctx) {
method exec (line 9) | *exec(cmd) {
FILE: packages/core/test/fixtures/subdir-proxy/app/proxy/cif/user.js
class UserCif (line 4) | class UserCif extends app.Service {
method constructor (line 5) | constructor(ctx) {
method get (line 9) | *get(uid) {
FILE: packages/core/test/fixtures/subdir-proxy/app/proxy/foo/bar.js
class Bar (line 4) | class Bar extends app.Service {
method constructor (line 5) | constructor(ctx) {
method get (line 9) | *get(name) {
FILE: packages/core/test/fixtures/subdir-proxy/app/proxy/foo/subdir/bar.js
class Bar2 (line 4) | class Bar2 extends app.Service {
method constructor (line 5) | constructor(ctx) {
method get (line 9) | *get(name) {
FILE: packages/core/test/fixtures/subdir-proxy/app/proxy/foo/subdir1/subdir11/bar.js
class Bar111 (line 4) | class Bar111 extends app.Service {
method constructor (line 5) | constructor(ctx) {
method get (line 9) | *get(name) {
FILE: packages/core/test/fixtures/subdir-proxy/app/proxy/foo/subdir2/sub2.js
method constructor (line 5) | constructor(ctx) {
method get (line 9) | *get(name) {
FILE: packages/core/test/fixtures/subdir-proxy/app/proxy/ok.js
method constructor (line 5) | constructor(ctx) {
method get (line 9) | *get() {
FILE: packages/core/test/fixtures/subdir-proxy/app/proxy/user.js
class User (line 4) | class User extends app.Service {
method constructor (line 5) | constructor(ctx) {
method get (line 9) | *get(uid) {
FILE: packages/core/test/fixtures/subdir-services/app/service/certify-personal/mobile-hi/do_certify.js
class Certify (line 4) | class Certify extends app.Service {
method constructor (line 5) | constructor(ctx) {
method exec (line 9) | async exec(cmd) {
FILE: packages/core/test/fixtures/subdir-services/app/service/cif/user.js
class UserCif (line 4) | class UserCif extends app.Service {
method constructor (line 5) | constructor(ctx) {
method get (line 9) | async get(uid) {
FILE: packages/core/test/fixtures/subdir-services/app/service/foo/bar.js
class Bar (line 4) | class Bar extends app.Service {
method constructor (line 5) | constructor(ctx) {
method get (line 9) | async get(name) {
FILE: packages/core/test/fixtures/subdir-services/app/service/foo/subdir/bar.js
class Bar2 (line 4) | class Bar2 extends app.Service {
method constructor (line 5) | constructor(ctx) {
method get (line 9) | async get(name) {
FILE: packages/core/test/fixtures/subdir-services/app/service/foo/subdir1/subdir11/bar.js
class Bar111 (line 4) | class Bar111 extends app.Service {
method constructor (line 5) | constructor(ctx) {
method get (line 9) | async get(name) {
FILE: packages/core/test/fixtures/subdir-services/app/service/foo/subdir2/sub2.js
method constructor (line 5) | constructor(ctx) {
method get (line 9) | async get(name) {
FILE: packages/core/test/fixtures/subdir-services/app/service/ok.js
method constructor (line 5) | constructor(ctx) {
method get (line 9) | async get() {
FILE: packages/core/test/fixtures/subdir-services/app/service/user.js
class User (line 4) | class User extends app.Service {
method constructor (line 5) | constructor(ctx) {
method get (line 9) | async get(uid) {
FILE: packages/core/test/fixtures/timing/index.js
class Application (line 9) | class Application extends EggApplication {
method toJSON (line 13) | toJSON() {
method [Symbol.for('egg#eggPath')] (line 10) | get [Symbol.for('egg#eggPath')]() {
FILE: packages/core/test/helper.ts
function getFilepath (line 18) | function getFilepath(name: string): string {
function createApp (line 26) | function createApp(name: string, options?: EggCoreInitOptions & { Applic...
FILE: packages/core/test/lifecycle.test.ts
method constructor (line 20) | constructor(app: EggCore) {
method configDidLoad (line 23) | configDidLoad() {
FILE: packages/core/test/loader/file_loader.test.ts
method initializer (line 179) | initializer(exports: any, opt) {
method initializer (line 197) | initializer(exports: any) {
method caseStyle (line 321) | caseStyle(filepath) {
method caseStyle (line 341) | caseStyle(filepath: string) {
method filter (line 385) | filter(obj) {
method filter (line 394) | filter(obj) {
FILE: packages/core/test/loader/get_framework_paths.test.ts
class CustomApplication (line 58) | class CustomApplication {
method constructor (line 60) | constructor() {
method close (line 71) | close() {
method constructor (line 86) | constructor() {
method customEggPaths (line 95) | protected override customEggPaths() {
method close (line 98) | async close() {
method [Symbol.for('egg#eggPath')] (line 68) | get [Symbol.for('egg#eggPath')]() {
class CustomApplication (line 84) | class CustomApplication extends EggCore {
method constructor (line 60) | constructor() {
method close (line 71) | close() {
method constructor (line 86) | constructor() {
method customEggPaths (line 95) | protected override customEggPaths() {
method close (line 98) | async close() {
FILE: packages/core/test/loader/mixin/load_plugin.test.ts
class Application (line 115) | class Application extends EggCore {
method [Symbol.for('egg#loader')] (line 116) | get [Symbol.for('egg#loader')]() {
method [Symbol.for('egg#eggPath')] (line 119) | get [Symbol.for('egg#eggPath')]() {
class Application (line 137) | class Application extends EggCore {
method [Symbol.for('egg#loader')] (line 138) | get [Symbol.for('egg#loader')]() {
method [Symbol.for('egg#eggPath')] (line 141) | get [Symbol.for('egg#eggPath')]() {
class Application (line 396) | class Application extends EggCore {
method [Symbol.for('egg#eggPath')] (line 397) | get [Symbol.for('egg#eggPath')]() {
class Application (line 503) | class Application extends EggCore {
method [Symbol.for('egg#loader')] (line 504) | get [Symbol.for('egg#loader')]() {
method [Symbol.for('egg#eggPath')] (line 507) | get [Symbol.for('egg#eggPath')]() {
class Application (line 595) | class Application extends EggCore {
method [Symbol.for('egg#eggPath')] (line 596) | get [Symbol.for('egg#eggPath')]() {
class Application (line 613) | class Application extends EggCore {
method [Symbol.for('egg#eggPath')] (line 614) | get [Symbol.for('egg#eggPath')]() {
class BaseApplication (line 677) | class BaseApplication extends EggCore {
method [Symbol.for('egg#loader')] (line 678) | get [Symbol.for('egg#loader')]() {
method [Symbol.for('egg#eggPath')] (line 681) | get [Symbol.for('egg#eggPath')]() {
class Application (line 686) | class Application extends BaseApplication {
method [Symbol.for('egg#loader')] (line 687) | get [Symbol.for('egg#loader')]() {
method [Symbol.for('egg#eggPath')] (line 690) | get [Symbol.for('egg#eggPath')]() {
FILE: packages/core/test/singleton.test.ts
class DataService (line 8) | class DataService {
method constructor (line 10) | constructor(config: any) {
method query (line 14) | async query() {
function create (line 19) | function create(config: any) {
function asyncCreate (line 23) | async function asyncCreate(config: any) {
function create (line 152) | function create(config: any) {
function create (line 182) | function create(config: any) {
function create (line 215) | function create() {
method warn (line 228) | warn(_msg: string, name?: string) {
function create (line 254) | function create(_config: any, _app: any, client: string) {
function _create (line 373) | async function _create(_config: any, _app: any, client: string) {
FILE: packages/egg/src/agent.ts
class EggAgentHook (line 3) | class EggAgentHook extends BaseHookClass {
method configDidLoad (line 4) | configDidLoad(): void {
FILE: packages/egg/src/app/extend/context.ts
constant HELPER (line 14) | const HELPER = Symbol('ctx helper');
constant LOCALS (line 15) | const LOCALS = Symbol('ctx locals');
constant LOCALS_LIST (line 16) | const LOCALS_LIST = Symbol('ctx localsList');
constant COOKIES (line 17) | const COOKIES = Symbol('ctx cookies');
constant CONTEXT_HTTPCLIENT (line 18) | const CONTEXT_HTTPCLIENT = Symbol('ctx httpclient');
constant CONTEXT_ROUTER (line 19) | const CONTEXT_ROUTER = Symbol('ctx router');
type Cookies (line 21) | interface Cookies extends ContextCookies {
class Context (line 26) | class Context extends EggCoreContext {
method cookies (line 47) | get cookies() {
method httpclient (line 60) | get httpclient(): HttpClient {
method httpClient (line 70) | get httpClient(): HttpClient {
method curl (line 82) | async curl(url: HttpClientRequestURL, options?: HttpClientRequestOptio...
method router (line 96) | get router(): Router {
method router (line 107) | set router(val: Router) {
method helper (line 117) | get helper(): Helper {
method getLogger (line 130) | getLogger(name: string): EggLogger {
method logger (line 145) | get logger(): EggLogger {
method coreLogger (line 155) | get coreLogger(): EggLogger {
method locals (line 186) | get locals() {
method locals (line 197) | set locals(val) {
method state (line 208) | get state(): Record<string, any> {
method state (line 212) | set state(val: Record<string, any>) {
method runInBackground (line 228) | runInBackground(scope: (ctx: Context) => Promise<void>, taskName?: str...
method _runInBackground (line 241) | async _runInBackground(scope: (ctx: Context) => Promise<void>, taskNam...
method acceptJSON (line 261) | get acceptJSON(): boolean {
method query (line 265) | get query(): Record<string, string> {
method queries (line 274) | get queries(): Record<string, string[]> {
method ip (line 283) | get ip(): string {
method ip (line 287) | set ip(val: string) {
method realStatus (line 296) | get realStatus(): number {
method realStatus (line 300) | set realStatus(val: number) {
FILE: packages/egg/src/app/extend/helper.ts
class Helper (line 10) | class Helper extends BaseContextClass {
method pathFor (line 25) | pathFor(name: string, params: Record<string, any>): string {
method urlFor (line 42) | urlFor(name: string, params: Record<string, any>): string {
FILE: packages/egg/src/app/extend/request.ts
constant QUERY_CACHE (line 9) | const QUERY_CACHE = Symbol('request query cache');
constant QUERIES_CACHE (line 10) | const QUERIES_CACHE = Symbol('request queries cache');
constant PROTOCOL (line 11) | const PROTOCOL = Symbol('request protocol');
constant HOST (line 12) | const HOST = Symbol('request host');
constant IPS (line 13) | const IPS = Symbol('request ips');
constant RE_ARRAY_KEY (line 14) | const RE_ARRAY_KEY = /[^[\]]+\[\]$/;
class Request (line 16) | class Request extends EggCoreRequest {
method host (line 43) | get host(): string {
method protocol (line 65) | get protocol(): string {
method ips (line 99) | get ips(): string[] {
method ip (line 139) | get ip(): string {
method ip (line 161) | set ip(ip: string) {
method acceptJSON (line 174) | get acceptJSON(): boolean {
method _customQuery (line 183) | _customQuery(
method query (line 237) | get query(): Record<string, string> {
method queries (line 257) | get queries(): Record<string, string[]> {
method query (line 267) | set query(obj: Record<string, string>) {
function firstValue (line 272) | function firstValue(value: string | string[]) {
function arrayValue (line 279) | function arrayValue(value: string | string[]) {
function getFromHeaders (line 286) | function getFromHeaders(request: Request, names: string) {
FILE: packages/egg/src/app/extend/response.ts
constant REAL_STATUS (line 3) | const REAL_STATUS = Symbol('response realStatus');
class Response (line 5) | class Response extends KoaResponse {
method realStatus (line 16) | get realStatus(): number {
method realStatus (line 33) | set realStatus(status: number) {
FILE: packages/egg/src/app/middleware/meta.ts
type MetaMiddlewareOptions (line 9) | interface MetaMiddlewareOptions {
FILE: packages/egg/src/app/middleware/notfound.ts
type NotFoundMiddlewareOptions (line 3) | interface NotFoundMiddlewareOptions {
FILE: packages/egg/src/app/middleware/site_file.ts
type SiteFileContentFun (line 7) | type SiteFileContentFun = (ctx: Context) => Promise<Buffer | string>;
type SiteFileMiddlewareOptions (line 9) | interface SiteFileMiddlewareOptions {
constant BUFFER_CACHE (line 15) | const BUFFER_CACHE = Symbol('siteFile URL buffer cache');
FILE: packages/egg/src/config/config.default.ts
method onerror (line 248) | onerror(err, ctx) {
FILE: packages/egg/src/lib/agent.ts
class Agent (line 10) | class Agent extends EggApplicationCore {
method constructor (line 17) | constructor(options?: Omit<EggApplicationCoreOptions, 'type'>) {
method customEggLoader (line 32) | protected override customEggLoader(): typeof AgentWorkerLoader {
method _wrapMessenger (line 36) | _wrapMessenger(): void {
method close (line 54) | async close(): Promise<void> {
FILE: packages/egg/src/lib/application.ts
constant DEFAULT_BAD_REQUEST_HTML (line 19) | const DEFAULT_BAD_REQUEST_HTML = `<html>
constant DEFAULT_BAD_REQUEST_HTML_LENGTH (line 26) | const DEFAULT_BAD_REQUEST_HTML_LENGTH = Buffer.byteLength(DEFAULT_BAD_RE...
constant DEFAULT_BAD_REQUEST_RESPONSE (line 27) | const DEFAULT_BAD_REQUEST_RESPONSE =
function escapeHeaderValue (line 32) | function escapeHeaderValue(value: string) {
class Application (line 42) | class Application extends EggApplicationCore {
method constructor (line 58) | constructor(options?: Omit<EggApplicationCoreOptions, 'type'>) {
method customEggLoader (line 65) | protected override customEggLoader(): typeof AppWorkerLoader {
method load (line 69) | protected async load(): Promise<void> {
method #responseRaw (line 75) | #responseRaw(socket: Socket, raw?: any): void {
method onClientError (line 104) | onClientError(err: any, socket: Socket): void {
method onServer (line 148) | onServer(server: http.Server): void {
method locals (line 187) | get locals() {
method locals (line 191) | set locals(val: Record<string, any>) {
method dumpConfig (line 199) | dumpConfig(): void {
method runInBackground (line 229) | runInBackground(scope: (ctx: Context) => Promise<void>, req?: unknown)...
method keys (line 243) | get keys(): string[] {
method toAsyncFunction (line 261) | toAsyncFunction(fn: (...args: any[]) => any): (...args: any[]) => any {
method #bindEvents (line 273) | #bindEvents(): void {
method #warnConfusedConfig (line 289) | #warnConfusedConfig(): void {
FILE: packages/egg/src/lib/core/base_context_class.ts
class BaseContextClass (line 13) | class BaseContextClass extends EggCoreBaseContextClass {
method logger (line 21) | get logger(): BaseContextLogger {
FILE: packages/egg/src/lib/core/base_context_logger.ts
class BaseContextLogger (line 3) | class BaseContextLogger {
method constructor (line 13) | constructor(ctx: EggContext, pathName?: string) {
method _log (line 22) | protected _log(method: 'info' | 'warn' | 'error' | 'debug', args: any[...
method debug (line 37) | debug(...args: any[]): void {
method info (line 46) | info(...args: any[]): void {
method warn (line 55) | warn(...args: any[]): void {
method error (line 64) | error(...args: any[]): void {
FILE: packages/egg/src/lib/core/base_hook_class.ts
class BaseHookClass (line 8) | class BaseHookClass implements ILifecycleBoot {
method constructor (line 12) | constructor(instance: Application | Agent) {
method logger (line 16) | get logger(): EggLogger {
method config (line 20) | get config(): EggAppConfig {
method app (line 24) | get app(): Application {
method agent (line 29) | get agent(): Agent {
FILE: packages/egg/src/lib/core/context_httpclient.ts
class ContextHttpClient (line 5) | class ContextHttpClient {
method constructor (line 9) | constructor(ctx: Context) {
method curl (line 21) | async curl<T = any>(url: HttpClientRequestURL, options?: HttpClientReq...
method request (line 29) | async request<T = any>(
FILE: packages/egg/src/lib/core/httpclient.ts
type HttpClientRequestOptions (line 18) | interface HttpClientRequestOptions extends RequestOptions {
class HttpClient (line 23) | class HttpClient extends RawHttpClient {
method constructor (line 26) | constructor(app: EggApplicationCore, options: HttpClientOptions = {}) {
method request (line 41) | async request<T = any>(
method curl (line 54) | async curl<T = any>(url: HttpClientRequestURL, options?: HttpClientReq...
function normalizeConfig (line 62) | function normalizeConfig(app: EggApplicationCore) {
FILE: packages/egg/src/lib/core/logger.ts
function createLoggers (line 6) | function createLoggers(app: EggApplicationCore): EggLoggers {
FILE: packages/egg/src/lib/core/messenger/IMessenger.ts
type IMessenger (line 3) | interface IMessenger extends EventEmitter {
FILE: packages/egg/src/lib/core/messenger/base.ts
class BaseMessenger (line 6) | class BaseMessenger extends EventEmitter {
method constructor (line 9) | constructor(egg: EggApplicationCore) {
method onRejection (line 16) | private onRejection(err: Error, event: string | symbol, ...args: any[]...
method emit (line 20) | emit(eventName: string | symbol, ...args: any[]): boolean {
FILE: packages/egg/src/lib/core/messenger/index.ts
function create (line 11) | function create(egg: EggApplicationCore): IMessenger {
FILE: packages/egg/src/lib/core/messenger/ipc.ts
class Messenger (line 15) | class Messenger extends BaseMessenger implements IMessenger {
method constructor (line 19) | constructor(egg: EggApplicationCore) {
method broadcast (line 42) | broadcast(action: string, data?: unknown): Messenger {
method sendTo (line 56) | sendTo(workerId: string, action: string, data?: unknown): Messenger {
method sendRandom (line 79) | sendRandom(action: string, data?: unknown): Messenger {
method sendToApp (line 96) | sendToApp(action: string, data?: unknown): Messenger {
method sendToAgent (line 108) | sendToAgent(action: string, data?: unknown): Messenger {
method send (line 120) | send(action: string, data: unknown | undefined, to?: string): Messenger {
method #sendMessage (line 130) | #sendMessage(message: any): void {
method onMessage (line 135) | onMessage(message: any): void {
method close (line 156) | close(): void {
FILE: packages/egg/src/lib/core/messenger/local.ts
class Messenger (line 12) | class Messenger extends BaseMessenger implements IMessenger {
method constructor (line 15) | constructor(egg: EggApplicationCore) {
method broadcast (line 26) | broadcast(action: string, data?: unknown): Messenger {
method sendTo (line 41) | sendTo(workerId: string, action: string, data?: unknown): Messenger {
method sendRandom (line 59) | sendRandom(action: string, data?: unknown): Messenger {
method sendToApp (line 71) | sendToApp(action: string, data?: unknown): Messenger {
method sendToAgent (line 83) | sendToAgent(action: string, data?: unknown): Messenger {
method send (line 95) | send(action: string, data: unknown, to?: string): Messenger {
method onMessage (line 135) | onMessage(message: any): void {
method close (line 144) | close(): void {
FILE: packages/egg/src/lib/core/utils.ts
function convertObject (line 5) | function convertObject(obj: any, ignore: string | RegExp | (string | Reg...
function convertValue (line 15) | function convertValue(key: string, value: any, ignore: (string | RegExp)...
function safeParseURL (line 69) | function safeParseURL(url: string): URL | null {
FILE: packages/egg/src/lib/define.ts
type PartialEggConfig (line 10) | type PartialEggConfig = PartialDeep<EggAppConfig>;
type EggConfigFactory (line 15) | type EggConfigFactory = (appInfo: EggAppInfo) => PartialEggConfig;
function defineConfig (line 29) | function defineConfig(config: PartialEggConfig): PartialEggConfig {
function defineConfigFactory (line 43) | function defineConfigFactory(configFactory: EggConfigFactory): EggConfig...
type EggPluginMeta (line 50) | interface EggPluginMeta {
type EggPluginOptions (line 68) | type EggPluginOptions = PartialDeep<Omit<EggPluginMeta, 'name'>>;
type EggPluginFactory (line 73) | type EggPluginFactory = (options?: EggPluginOptions) => Record<string, E...
function definePluginFactory (line 91) | function definePluginFactory(pluginMeta: EggPluginMeta): EggPluginFactory {
FILE: packages/egg/src/lib/egg.ts
type EggApplicationCoreOptions (line 41) | interface EggApplicationCoreOptions extends Omit<EggCoreOptions, 'baseDi...
type EggContext (line 57) | type EggContext = Context;
type MiddlewareFunc (line 58) | type MiddlewareFunc<T extends Context = Context> = EggCoreMiddlewareFunc...
class EggApplicationCore (line 69) | class EggApplicationCore extends EggCore {
method currentContext (line 77) | get currentContext(): Context | undefined {
method constructor (line 148) | constructor(options?: EggApplicationCoreOptions) {
method _options (line 176) | get _options(): Required<EggApplicationCoreOptions> {
method loadConfig (line 180) | protected async loadConfig(): Promise<void> {
method load (line 184) | protected async load(): Promise<void> {
method cluster (line 233) | get cluster(): (clientClass: unknown, options?: object) => any {
method clusterWrapper (line 255) | clusterWrapper(clientClass: unknown, options?: object): any {
method inspect (line 294) | inspect(): any {
method toJSON (line 322) | toJSON(): any {
method curl (line 365) | async curl<T = any>(url: HttpClientRequestURL, options?: HttpClientReq...
method createHttpClient (line 373) | createHttpClient(options?: HttpClientOptions): HttpClient {
method httpClient (line 382) | get httpClient(): HttpClient {
method httpclient (line 394) | get httpclient(): HttpClient {
method loggers (line 403) | get loggers(): EggLoggers {
method getLogger (line 416) | getLogger(name: string): EggLogger {
method logger (line 425) | get logger(): EggLogger {
method coreLogger (line 434) | get coreLogger(): EggLogger {
method _unhandledRejectionHandler (line 438) | _unhandledRejectionHandler(err: any): void {
method dumpConfigToObject (line 460) | dumpConfigToObject(): { config: any; meta: any } {
method dumpConfig (line 488) | dumpConfig(): void {
method dumpTiming (line 510) | dumpTiming(): void {
method customEggPaths (line 536) | protected override customEggPaths(): string[] {
method #setupTimeoutTimer (line 540) | #setupTimeoutTimer(): void {
method config (line 562) | get config() {
method env (line 570) | get env(): string {
method env (line 575) | set env(_: any) {}
method proxy (line 581) | get proxy(): boolean {
method proxy (line 586) | set proxy(_: any) {}
method #patchClusterClient (line 588) | #patchClusterClient(client: any): void {
method createAnonymousContext (line 604) | createAnonymousContext(req?: any): EggContext {
method runInAnonymousContextScope (line 643) | async runInAnonymousContextScope<T = void>(scope: (ctx: Context) => Pr...
method createContext (line 660) | createContext(req: IncomingMessage, res: ServerResponse): Context {
FILE: packages/egg/src/lib/error/CookieLimitExceedError.ts
class CookieLimitExceedError (line 1) | class CookieLimitExceedError extends Error {
method constructor (line 5) | constructor(key: string, cookie: string) {
FILE: packages/egg/src/lib/error/MessageUnhandledRejectionError.ts
class MessageUnhandledRejectionError (line 1) | class MessageUnhandledRejectionError extends Error {
method constructor (line 5) | constructor(err: Error, event: string | symbol, ...args: any[]) {
FILE: packages/egg/src/lib/loader/AgentWorkerLoader.ts
class AgentWorkerLoader (line 7) | class AgentWorkerLoader extends EggApplicationLoader {
method loadConfig (line 11) | async loadConfig(): Promise<void> {
method load (line 16) | async load(): Promise<void> {
FILE: packages/egg/src/lib/loader/AppWorkerLoader.ts
class AppWorkerLoader (line 7) | class AppWorkerLoader extends EggApplicationLoader {
method loadConfig (line 12) | async loadConfig(): Promise<void> {
method load (line 21) | async load(): Promise<void> {
FILE: packages/egg/src/lib/start.ts
type StartEggOptions (line 10) | interface StartEggOptions {
type SingleModeApplication (line 22) | interface SingleModeApplication extends Application {
type SingleModeAgent (line 26) | interface SingleModeAgent extends Agent {
function startEgg (line 33) | async function startEgg(options: StartEggOptions = {}): Promise<SingleMo...
FILE: packages/egg/src/lib/types.ts
type IgnoreItem (line 18) | type IgnoreItem = string | RegExp | ((ctx: Context) => boolean);
type IgnoreOrMatch (line 19) | type IgnoreOrMatch = IgnoreItem | IgnoreItem[];
type ClientErrorResponse (line 21) | interface ClientErrorResponse {
type EggEnvType (line 28) | type EggEnvType = 'local' | 'unittest' | 'prod' | string;
type EggLoggerConfig (line 31) | interface EggLoggerConfig extends Omit<EggLoggersOptions, 'type'> {
type CustomLoaderConfig (line 45) | interface CustomLoaderConfig extends Omit<FileLoaderOptions, 'inject' | ...
type HttpClientConfig (line 56) | interface HttpClientConfig {
type PowerPartial (line 82) | type PowerPartial<T> = PartialDeep<T>;
type EggAppConfig (line 84) | interface EggAppConfig extends EggCoreAppConfig {
type RequestObjectBody (line 278) | type RequestObjectBody = Record<string, any>;
type IEggPluginItem (line 283) | interface IEggPluginItem {
type EggPluginItem (line 290) | type EggPluginItem = IEggPluginItem | boolean;
type EggPlugin (line 295) | interface EggPlugin {
type IService (line 330) | interface IService extends Record<string, any> {}
type IController (line 351) | interface IController extends Record<string, any> {}
FILE: packages/egg/test/app/extend/request.test.ts
function expectQuery (line 194) | function expectQuery(querystring: any, query: any) {
function expectQueries (line 226) | function expectQueries(querystring: any, query: any) {
FILE: packages/egg/test/bench/hello/app/controller/home.js
method index (line 5) | async index() {
FILE: packages/egg/test/cluster1/app_worker.test.ts
constant DEFAULT_BAD_REQUEST_HTML (line 11) | const DEFAULT_BAD_REQUEST_HTML = `<html>
function connect (line 152) | function connect(port: number) {
FILE: packages/egg/test/egg.test.ts
function checkApp (line 39) | function checkApp(json: any) {
function checkApp (line 73) | function checkApp(json: any) {
function checkApp (line 86) | function checkApp(json: any) {
FILE: packages/egg/test/fixtures/apps/agent-app-sync/app.js
method listen (line 6) | listen(cb) {
FILE: packages/egg/test/fixtures/apps/agent-app/app.js
function listener (line 7) | function listener(value) {
FILE: packages/egg/test/fixtures/apps/agent-app/app/router.js
function subThunk (line 20) | function subThunk() {
FILE: packages/egg/test/fixtures/apps/agent-app/plugins/mock-client/agent.js
method subscribe (line 16) | subscribe(info, listener) {
FILE: packages/egg/test/fixtures/apps/agent-app/plugins/mock-client/app.js
method on (line 9) | on(event, listner) {
method once (line 12) | once(event, listner) {
method removeListener (line 15) | removeListener(event, listner) {
method removeAllListeners (line 18) | removeAllListeners(event) {
method subscribe (line 21) | subscribe(reg, listner) {
method unSubscribe (line 24) | unSubscribe(reg, listner) {
method getData (line 27) | *getData(key) {
method getError (line 30) | *getError() {
method getTimeout (line 33) | *getTimeout() {
method getDataGenerator (line 36) | *getDataGenerator(key) {
method save (line 39) | *save(key, value) {
method saveCallback (line 42) | saveCallback(key, value, callback) {
method saveAsync (line 45) | saveAsync(key, value) {
FILE: packages/egg/test/fixtures/apps/agent-app/plugins/mock-client/mock_client.js
class MockClient (line 4) | class MockClient extends EventEmitter {
method constructor (line 5) | constructor(options) {
method ready (line 17) | ready(flagOrFunction) {
method getCallback (line 35) | getCallback(key, callback) {
method getData (line 45) | getData(key) {
method getTimeout (line 53) | *getTimeout() {
method getDataGenerator (line 58) | *getDataGenerator(key) {
method save (line 63) | *save(key, value) {
method getError (line 68) | getError() {
FILE: packages/egg/test/fixtures/apps/agent-client-app/agent.js
method ready (line 7) | ready(cb) {
method subscribe (line 15) | subscribe(info, listener) {
FILE: packages/egg/test/fixtures/apps/agent-client-app/app.js
method subscribe (line 5) | subscribe(info, listener) {
FILE: packages/egg/test/fixtures/apps/aliyun-egg/lib/agent.js
class MyAgent (line 8) | class MyAgent extends Agent {
method constructor (line 9) | constructor(options) {
method [Symbol.for('egg#eggPath')] (line 13) | get [Symbol.for('egg#eggPath')]() {
FILE: packages/egg/test/fixtures/apps/aliyun-egg/lib/aliyun-egg.js
class Loader (line 8) | class Loader extends AppWorkerLoader {
method constructor (line 9) | constructor(options) {
method loadConfig (line 13) | loadConfig() {
method loadServerConf (line 18) | loadServerConf() {}
class ChairApplication (line 21) | class ChairApplication extends Application {
method constructor (line 22) | constructor(options) {
method [Symbol.for('egg#eggPath')] (line 26) | get [Symbol.for('egg#eggPath')]() {
method [Symbol.for('egg#loader')] (line 30) | get [Symbol.for('egg#loader')]() {
FILE: packages/egg/test/fixtures/apps/app-runInAnonymousContextScope-withRequest/app.js
method constructor (line 2) | constructor(app) {
method beforeClose (line 6) | async beforeClose() {
FILE: packages/egg/test/fixtures/apps/app-runInAnonymousContextScope/app.js
method constructor (line 2) | constructor(app) {
method beforeClose (line 6) | async beforeClose() {
FILE: packages/egg/test/fixtures/apps/app-throw/app/router.js
method get (line 14) | get() {
method toString (line 44) | toString() {
FILE: packages/egg/test/fixtures/apps/app-ts-esm/app/controller/foo.ts
type IController (line 5) | interface IController {
class FooController (line 11) | class FooController extends Controller {
method index (line 12) | async index() {
FILE: packages/egg/test/fixtures/apps/app-ts-type-check/error.ts
class MyController (line 15) | class MyController extends Controller {
method test (line 16) | async test() {
class MyService (line 25) | class MyService extends Service {
method test (line 26) | async test() {
FILE: packages/egg/test/fixtures/apps/app-ts-type-check/framework.ts
class CustomBaseContextClass (line 16) | class CustomBaseContextClass extends BaseContextClass {
method constructor (line 17) | constructor(ctx: Context) {
method test (line 21) | test() {
class MyController (line 83) | class MyController extends Controller {
method test (line 84) | async test() {
class MyService (line 94) | class MyService extends Service {
method test (line 95) | async test() {
class MySubscription (line 102) | class MySubscription extends Subscription {
method test (line 103) | test() {
type IApplicationLocals (line 112) | interface IApplicationLocals {
type IController (line 116) | interface IController {
type IService (line 121) | interface IService {
type EggAppConfig (line 126) | interface EggAppConfig {
type EggAppConfig (line 134) | interface EggAppConfig {
FILE: packages/egg/test/fixtures/apps/app-ts-type-check/normal.ts
class CustomBaseContextClass (line 22) | class CustomBaseContextClass extends BaseContextClass {
method constructor (line 23) | constructor(ctx: Context) {
method test (line 27) | test() {
function main (line 62) | async function main() {
function request (line 92) | async function request<T = any>(
class MyController (line 125) | class MyController extends Controller {
method test (line 126) | async test() {
class MyService (line 134) | class MyService extends Service {
method test (line 135) | async test() {
class MySubscription (line 145) | class MySubscription extends Subscription {
method test (line 146) | test() {
method checkAddress (line 228) | checkAddress(ip) {
type IApplicationLocals (line 251) | interface IApplicationLocals {
type IController (line 255) | interface IController {
type IService (line 260) | interface IService {
type EggAppConfig (line 265) | interface EggAppConfig {
FILE: packages/egg/test/fixtures/apps/app-ts/app.ts
class AppBoot (line 5) | class AppBoot implements IBoot {
method constructor (line 8) | constructor(app: Application) {
method stages (line 12) | get stages(): string[] {
method configWillLoad (line 20) | configWillLoad() {
method configDidLoad (line 24) | configDidLoad() {
method didLoad (line 30) | async didLoad() {
method willReady (line 34) | async willReady() {
method didReady (line 38) | async didReady() {
method serverDidReady (line 42) | async serverDidReady() {
method beforeClose (line 46) | async beforeClose() {
FILE: packages/egg/test/fixtures/apps/app-ts/app/controller/foo.ts
type IController (line 18) | interface IController {
class FooController (line 24) | class FooController extends Controller {
method constructor (line 29) | constructor(ctx: Context) {
method getData (line 45) | async getData() {
method getBar (line 57) | async getBar() {
method requestWithHttpclientNext (line 65) | async requestWithHttpclientNext(request: RequestOptionsNext) {
method requestWithHttpclient (line 75) | async requestWithHttpclient(request: RequestOptions) {
method requestWithHttpclient2 (line 85) | async requestWithHttpclient2(request: RequestOptions2) {
method httpclient (line 95) | async httpclient() {
method testQuery (line 121) | async testQuery() {
method testQueries (line 125) | async testQueries() {
method stringQuery (line 129) | stringQuery(q: string) {
method stringArrayQuery (line 133) | stringArrayQuery(q: string[]) {
FILE: packages/egg/test/fixtures/apps/app-ts/app/extend/context.ts
method test (line 4) | test(this: Context) {
FILE: packages/egg/test/fixtures/apps/app-ts/app/extend/helper.ts
method test (line 5) | test(this: IHelper) {
method test2 (line 9) | test2(this: IHelper) {
FILE: packages/egg/test/fixtures/apps/app-ts/app/extend/index.d.ts
type ExtendHelperType (line 5) | type ExtendHelperType = typeof ExtendHelper;
type ExtendContextType (line 6) | type ExtendContextType = typeof ExtendContext;
type IHelper (line 7) | interface IHelper extends ExtendHelperType {}
type Context (line 8) | interface Context extends ExtendContextType {}
FILE: packages/egg/test/fixtures/apps/app-ts/app/middleware/generic_ctx.ts
type CustomBody (line 4) | interface CustomBody {
FILE: packages/egg/test/fixtures/apps/app-ts/app/middleware/index.d.ts
type IMiddleware (line 4) | interface IMiddleware {
FILE: packages/egg/test/fixtures/apps/app-ts/app/model/test.ts
class Test (line 1) | class Test {}
FILE: packages/egg/test/fixtures/apps/app-ts/app/proxy/foo.d.ts
type Foo (line 2) | interface Foo {
type IProxy (line 6) | interface IProxy {
type Context (line 10) | interface Context {
FILE: packages/egg/test/fixtures/apps/app-ts/app/service/foo.ts
type IService (line 6) | interface IService {
class FooService (line 11) | class FooService extends Service {
method bar (line 12) | async bar() {
FILE: packages/egg/test/fixtures/apps/app-ts/lib/export-class.ts
class HttpClient (line 7) | class HttpClient extends app.HttpClient {}
class Controller (line 10) | class Controller extends app.Controller {}
class Service (line 13) | class Service extends app.Service {}
class Subscription (line 16) | class Subscription extends app.Subscription {}
class ContextHttpClient (line 19) | class ContextHttpClient extends app.ContextHttpClient {}
class ContextLogger (line 22) | class ContextLogger extends app.ContextLogger {}
class ContextCookies (line 25) | class ContextCookies extends app.ContextCookies {}
FILE: packages/egg/test/fixtures/apps/async-app/app/controller/api.js
method index (line 5) | async index() {
FILE: packages/egg/test/fixtures/apps/async-app/app/service/api.js
method getName (line 5) | async getName() {
function sleep (line 12) | function sleep(ms) {
FILE: packages/egg/test/fixtures/apps/base-context-class/app/controller/home.js
method show (line 3) | async show() {
method getPathName (line 12) | getPathName() {
method getConfig (line 16) | getConfig() {
FILE: packages/egg/test/fixtures/apps/base-context-class/app/service/home.js
method show (line 3) | async show() {
FILE: packages/egg/test/fixtures/apps/boot-app-esm/agent.js
class CustomBoot (line 6) | class CustomBoot extends Boot {
method constructor (line 7) | constructor(agent) {
method configDidLoad (line 16) | configDidLoad() {
method didLoad (line 20) | async didLoad() {
method willReady (line 25) | async willReady() {
method didReady (line 30) | async didReady() {
method beforeClose (line 36) | async beforeClose() {
method serverDidReady (line 41) | async serverDidReady() {
FILE: packages/egg/test/fixtures/apps/boot-app-esm/app.js
class CustomBoot (line 6) | class CustomBoot extends Boot {
method constructor (line 7) | constructor(app) {
method configDidLoad (line 17) | configDidLoad() {
method didLoad (line 21) | async didLoad() {
method willReady (line 26) | async willReady() {
method didReady (line 31) | async didReady() {
method beforeClose (line 37) | async beforeClose() {
method serverDidReady (line 42) | async serverDidReady() {
FILE: packages/egg/test/fixtures/apps/boot-app/agent.js
method constructor (line 5) | constructor(agent) {
method configDidLoad (line 15) | configDidLoad() {
method didLoad (line 19) | async didLoad() {
method willReady (line 24) | async willReady() {
method didReady (line 29) | async didReady() {
method beforeClose (line 35) | async beforeClose() {
method serverDidReady (line 40) | async serverDidReady() {
FILE: packages/egg/test/fixtures/apps/boot-app/app.js
method constructor (line 5) | constructor(app) {
method configDidLoad (line 17) | configDidLoad() {
method didLoad (line 21) | async didLoad() {
method willReady (line 26) | async willReady() {
method didReady (line 31) | async didReady() {
method beforeClose (line 37) | async beforeClose() {
method serverDidReady (line 42) | async serverDidReady() {
FILE: packages/egg/test/fixtures/apps/cluster_mod_app/agent.js
method constructor (line 6) | constructor(agent) {
method didLoad (line 10) | async didLoad() {
method willReady (line 21) | async willReady() {
FILE: packages/egg/test/fixtures/apps/cluster_mod_app/lib/api_client.js
class ApiClient (line 5) | class ApiClient extends APIClientBase {
method DataClient (line 6) | get DataClient() {
method clusterOptions (line 10) | get clusterOptions() {
method getResponseTimeout (line 16) | async getResponseTimeout() {
FILE: packages/egg/test/fixtures/apps/cluster_mod_app/lib/api_client_2.js
class ApiClient2 (line 5) | class ApiClient2 extends APIClientBase {
method DataClient (line 6) | get DataClient() {
method clusterOptions (line 10) | get clusterOptions() {
method getResponseTimeout (line 17) | async getResponseTimeout() {
FILE: packages/egg/test/fixtures/apps/cluster_mod_app/lib/registry_client.js
class RegistryClient (line 4) | class RegistryClient extends Base {
method constructor (line 5) | constructor() {
method subscribe (line 18) | subscribe(reg, listener) {
method publish (line 35) | publish(reg) {
method close (line 52) | close() {
FILE: packages/egg/test/fixtures/apps/custom-context-getlogger/app/extend/context.js
method getLogger (line 2) | getLogger(name) {
FILE: packages/egg/test/fixtures/apps/custom-framework-demo/app/controller/foo.js
method bar (line 5) | *bar() {
FILE: packages/egg/test/fixtures/apps/custom-framework-demo/app/controller/obj.js
method bar (line 5) | *bar() {
method error (line 9) | *error() {
method hello (line 14) | *hello() {
FILE: packages/egg/test/fixtures/apps/custom-framework-demo/app/controller/obj2.js
method bar (line 4) | *bar() {
method hello (line 9) | *hello() {
method hello (line 14) | *hello() {
FILE: packages/egg/test/fixtures/apps/custom-loader/app.js
method constructor (line 4) | constructor(app) {
method didLoad (line 8) | async didLoad() {
FILE: packages/egg/test/fixtures/apps/custom-loader/app/adapter/docker.js
class DockerAdapter (line 3) | class DockerAdapter {
method constructor (line 4) | constructor(app) {
method inspectDocker (line 8) | async inspectDocker() {
FILE: packages/egg/test/fixtures/apps/custom-loader/app/controller/user.js
class UserController (line 3) | class UserController {
method constructor (line 4) | constructor(ctx) {
method get (line 9) | async get() {
method beforeLoad (line 16) | async beforeLoad() {
FILE: packages/egg/test/fixtures/apps/custom-loader/app/repository/user.js
class UserRepository (line 3) | class UserRepository {
method constructor (line 4) | constructor(ctx) {
method get (line 8) | async get() {
method beforeLoad (line 12) | async beforeLoad() {
FILE: packages/egg/test/fixtures/apps/demo/app.js
class DemoAppTest (line 3) | class DemoAppTest {
method constructor (line 4) | constructor(app) {
method configWillLoad (line 17) | configWillLoad() {
method didReady (line 21) | async didReady() {
FILE: packages/egg/test/fixtures/apps/demo/app/controller/foo.js
method bar (line 5) | async bar() {
FILE: packages/egg/test/fixtures/apps/demo/app/controller/obj.js
method bar (line 3) | async bar() {
method error (line 7) | async error() {
method hello (line 12) | async hello() {
FILE: packages/egg/test/fixtures/apps/demo/app/controller/obj2.js
method bar (line 2) | async bar() {
method hello (line 7) | async hello() {
method hello (line 12) | async hello() {
FILE: packages/egg/test/fixtures/apps/dumpconfig/app.js
function readJSON (line 6) | function readJSON(p) {
FILE: packages/egg/test/fixtures/apps/dumptiming-slowBootActionMinDuration/app.js
method constructor (line 2) | constructor(app) {
method didLoad (line 6) | async didLoad() {
FILE: packages/egg/test/fixtures/apps/dumptiming-timeout/app.js
method constructor (line 4) | constructor(app) {
method didLoad (line 8) | async didLoad() {
FILE: packages/egg/test/fixtures/apps/httpclient-next-overwrite/app.js
class CustomHttpClient (line 4) | class CustomHttpClient extends app.HttpClientNext {
method request (line 5) | request(url, opt) {
method curl (line 14) | curl(url, opt) {
FILE: packages/egg/test/fixtures/apps/httpclient-overwrite/app.js
class CustomHttpClient (line 6) | class CustomHttpClient extends app.HttpClient {
method request (line 7) | request(url, opt) {
method curl (line 16) | curl(url, opt) {
FILE: packages/egg/test/fixtures/apps/loader-plugin/app/service/Foo4.js
class Foo4 (line 4) | class Foo4 extends app.Service {}
FILE: packages/egg/test/fixtures/apps/loader-plugin/app/service/foo.js
class Foo (line 4) | class Foo extends app.Service {}
FILE: packages/egg/test/fixtures/apps/loader-plugin/app/service/fooDir/Foo5.js
class Foo5 (line 4) | class Foo5 extends app.Service {}
FILE: packages/egg/test/fixtures/apps/loader-plugin/node_modules/b/app/service/bar2.js
class Bar2 (line 4) | class Bar2 extends app.Service {}
FILE: packages/egg/test/fixtures/apps/multiple-view-engine/ejs.js
class EjsView (line 3) | class EjsView {
method render (line 4) | async render(filename, locals, options) {
method renderString (line 14) | async renderString(tpl, locals, options) {
FILE: packages/egg/test/fixtures/apps/multiple-view-engine/nunjucks.js
class NunjucksView (line 3) | class NunjucksView {
method render (line 4) | async render(filename, locals, options) {
method renderString (line 14) | async renderString() {}
FILE: packages/egg/test/fixtures/apps/schedule/app/schedule/hello.js
method schedule (line 5) | static get schedule() {
method subscribe (line 13) | async subscribe() {
FILE: packages/egg/test/fixtures/apps/service-app/app/service/user.js
class User (line 2) | class User extends app.Service {
method constructor (line 3) | constructor(ctx) {
method get (line 7) | async get(uid) {
FILE: packages/egg/test/fixtures/apps/services_loader_verify/app/service/foo.js
method bar (line 5) | *bar(ctx) {
method bar1 (line 9) | *bar1(ctx) {
FILE: packages/egg/test/fixtures/apps/singleton-demo/create.js
class DataService (line 3) | class DataService {
method constructor (line 4) | constructor(config) {
method getConfig (line 8) | async getConfig() {
method ready (line 12) | ready(done) {
FILE: packages/egg/test/fixtures/apps/subdir-services/app/service/certify-personal/mobile-hi/do_certify.js
class Certify (line 2) | class Certify extends app.Service {
method constructor (line 3) | constructor(ctx) {
method exec (line 7) | async exec(cmd) {
FILE: packages/egg/test/fixtures/apps/subdir-services/app/service/cif/user.js
class UserCif (line 2) | class UserCif extends app.Service {
method constructor (line 3) | constructor(ctx) {
method get (line 7) | async get(uid) {
FILE: packages/egg/test/fixtures/apps/subdir-services/app/service/foo/bar.js
class Bar (line 2) | class Bar extends app.Service {
method constructor (line 3) | constructor(ctx) {
method get (line 7) | async get(name) {
FILE: packages/egg/test/fixtures/apps/subdir-services/app/service/foo/subdir/bar.js
class Bar2 (line 2) | class Bar2 extends app.Service {
method constructor (line 3) | constructor(ctx) {
method get (line 7) | async get(name) {
FILE: packages/egg/test/fixtures/apps/subdir-services/app/service/foo/subdir1/subdir11/bar.js
class Bar111 (line 2) | class Bar111 extends app.Service {
method constructor (line 3) | constructor(ctx) {
method get (line 7) | async get(name) {
FILE: packages/egg/test/fixtures/apps/subdir-services/app/service/foo/subdir2/sub2.js
method constructor (line 5) | constructor(ctx) {
method get (line 9) | async get(name) {
FILE: packages/egg/test/fixtures/apps/subdir-services/app/service/ok.js
method constructor (line 3) | constructor(ctx) {
method get (line 7) | async get() {
FILE: packages/egg/test/fixtures/apps/subdir-services/app/service/user.js
class User (line 2) | class User extends app.Service {
method constructor (line 3) | constructor(ctx) {
method get (line 7) | async get(uid) {
FILE: packages/egg/test/fixtures/apps/tracer-demo/app/controller/foo.js
method index (line 3) | async index(ctx) {
FILE: packages/egg/test/fixtures/apps/view-render/app/controller/async.js
method index (line 3) | async index() {
FILE: packages/egg/test/fixtures/apps/watcher-development-app/agent.js
function listener (line 8) | function listener() {
FILE: packages/egg/test/fixtures/apps/watcher-development-app/app/router.js
function callback (line 9) | function callback(a) {
FILE: packages/egg/test/fixtures/custom-egg/index.js
method constructor (line 5) | constructor(...args) {
method [Symbol.for('egg#eggPath')] (line 10) | get [Symbol.for('egg#eggPath')]() {
FILE: packages/egg/test/lib/core/httpclient.test.ts
method isRetry (line 647) | isRetry(res) {
method isRetry (line 665) | isRetry(res) {
FILE: packages/egg/test/lib/core/loader/load_plugin.test.ts
class CustomAppLoader (line 310) | class CustomAppLoader extends AppWorkerLoader {
method loadPlugin (line 313) | async loadPlugin() {
class CustomAgentLoader (line 327) | class CustomAgentLoader extends AgentWorkerLoader {
method loadPlugin (line 329) | async loadPlugin() {
FILE: packages/egg/test/lib/core/messenger/ipc.test.ts
function count (line 163) | function count(data: string, key: string) {
function count (line 190) | function count(data: string, key: string) {
FILE: packages/egg/test/lib/core/utils.test.ts
class TestError (line 72) | class TestError extends Error {}
class BaseClass (line 87) | class BaseClass {}
class Class (line 88) | class Class extends BaseClass {}
class SlowBuffer (line 99) | class SlowBuffer extends Buffer {}
FILE: packages/egg/test/lib/core/view.test.ts
class View (line 20) | class View extends ViewEngineBase {
method render (line 21) | async render() {
method renderString (line 24) | async renderString() {
FILE: packages/egg/test/utils.ts
function rimraf (line 19) | async function rimraf(target: string): Promise<void> {
type SingleModeApplication (line 25) | interface SingleModeApplication extends MockApplication {
function app (line 31) | function app(name: string | MockOptions, options?: MockOptions): MockApp...
function cluster (line 47) | function cluster(name: string | MockClusterOptions, options?: MockCluste...
function singleProcessApp (line 59) | async function singleProcessApp(baseDir: string, options: StartEggOption...
function startLocalServer (line 80) | async function startLocalServer(): Promise<string> {
function getFilepath (line 127) | function getFilepath(name: string): string {
function getJSON (line 131) | function getJSON(name: string): any {
function formatOptions (line 135) | function formatOptions(name: string | MockOptions, options?: MockOptions) {
function startNewLocalServer (line 157) | async function startNewLocalServer(ip = '127.0.0.1'): Promise<{
FILE: packages/errors/src/base.ts
constant TYPE (line 4) | const TYPE: symbol = Symbol.for('BaseError#type');
class BaseError (line 6) | class BaseError<T extends ErrorOptions> extends Error {
method getType (line 9) | public static getType(err: Error): ErrorType {
method from (line 20) | public static from<
method constructor (line 39) | constructor(options?: T) {
FILE: packages/errors/src/base_error.ts
class EggBaseError (line 5) | class EggBaseError<T extends ErrorOptions> extends BaseError<T> {
method constructor (line 6) | constructor(options?: T) {
FILE: packages/errors/src/base_exception.ts
class EggBaseException (line 5) | class EggBaseException<T extends ErrorOptions = ErrorOptions> extends Ba...
method constructor (line 6) | constructor(options?: T) {
FILE: packages/errors/src/error.ts
class EggError (line 4) | class EggError extends EggBaseError<ErrorOptions> {
method constructor (line 5) | constructor(message?: string) {
FILE: packages/errors/src/error_options.ts
type ErrorOptions (line 3) | interface ErrorOptions {
FILE: packages/errors/src/error_type.ts
type ErrorType (line 16) | type ErrorType = (typeof ErrorType)[keyof typeof ErrorType];
FILE: packages/errors/src/exception.ts
class EggException (line 3) | class EggException extends EggBaseException {
method constructor (line 4) | constructor(message?: string) {
FILE: packages/errors/src/framework/formatter.ts
class FrameworkErrorFormatter (line 8) | class FrameworkErrorFormatter {
method format (line 15) | static format(err: Error): string {
method formatError (line 38) | static formatError<T extends Error>(err: T): T {
FILE: packages/errors/src/framework/framework_base_error.ts
constant FRAMEWORK_ERROR_SYMBOL (line 7) | const FRAMEWORK_ERROR_SYMBOL: unique symbol = Symbol.for('FrameworkBaseE...
class FrameworkBaseError (line 9) | class FrameworkBaseError extends EggBaseError<ErrorOptions> {
method module (line 13) | get module(): string {
method constructor (line 17) | constructor(message: string, serialNumber: string | number, errorConte...
method create (line 30) | static create(message: string, serialNumber: string | number, errorCon...
method isFrameworkError (line 36) | static isFrameworkError(err: Error): err is FrameworkBaseError {
FILE: packages/errors/src/http/400.ts
class BadRequestError (line 3) | class BadRequestError extends HttpError {
method constructor (line 4) | constructor(message?: string) {
FILE: packages/errors/src/http/401.ts
class UnauthorizedError (line 3) | class UnauthorizedError extends HttpError {
method constructor (line 4) | constructor(message?: string) {
FILE: packages/errors/src/http/402.ts
class PaymentRequiredError (line 3) | class PaymentRequiredError extends HttpError {
method constructor (line 4) | constructor(message?: string) {
FILE: packages/errors/src/http/403.ts
class ForbiddenError (line 3) | class ForbiddenError extends HttpError {
method constructor (line 4) | constructor(message?: string) {
FILE: packages/errors/src/http/404.ts
class NotFoundError (line 3) | class NotFoundError extends HttpError {
method constructor (line 4) | constructor(message?: string) {
FILE: packages/errors/src/http/405.ts
class MethodNotAllowedError (line 3) | class MethodNotAllowedError extends HttpError {
method constructor (line 4) | constructor(message?: string) {
FILE: packages/errors/src/http/406.ts
class NotAcceptableError (line 3) | class NotAcceptableError extends HttpError {
method constructor (line 4) | constructor(message?: string) {
FILE: packages/errors/src/http/407.ts
class ProxyAuthenticationRequiredError (line 3) | class ProxyAuthenticationRequiredError extends HttpError {
method constructor (line 4) | constructor(message?: string) {
FILE: packages/errors/src/http/408.ts
class RequestTimeoutError (line 3) | class RequestTimeoutError extends HttpError {
method constructor (line 4) | constructor(message?: string) {
FILE: packages/errors/src/http/409.ts
class ConflictError (line 3) | class ConflictError extends HttpError {
method constructor (line 4) | constructor(message?: string) {
FILE: packages/errors/src/http/410.ts
class GoneError (line 3) | class GoneError extends HttpError {
method constructor (line 4) | constructor(message?: string) {
FILE: packages/errors/src/http/411.ts
class LengthRequiredError (line 3) | class LengthRequiredError extends HttpError {
method constructor (line 4) | constructor(message?: string) {
FILE: packages/errors/src/http/412.ts
class PreconditionFailedError (line 3) | class PreconditionFailedError extends HttpError {
method constructor (line 4) | constructor(message?: string) {
FILE: packages/errors/src/http/413.ts
class PayloadTooLargeError (line 3) | class PayloadTooLargeError extends HttpError {
method constructor (line 4) | constructor(message?: string) {
FILE: packages/errors/src/http/414.ts
class URITooLongError (line 3) | class URITooLongError extends HttpError {
method constructor (line 4) | constructor(message?: string) {
FILE: packages/errors/src/http/415.ts
class UnsupportedMediaTypeError (line 3) | class UnsupportedMediaTypeError extends HttpError {
method constructor (line 4) | constructor(message?: string) {
FILE: packages/errors/src/http/416.ts
class RangeNotSatisfiableError (line 3) | class RangeNotSatisfiableError extends HttpError {
method constructor (line 4) | constructor(message?: string) {
FILE: packages/errors/src/http/417.ts
class ExpectationFailedError (line 3) | class ExpectationFailedError extends HttpError {
method constructor (line 4) | constructor(message?: string) {
FILE: packages/errors/src/http/418.ts
class ImATeapotError (line 3) | class ImATeapotError extends HttpError {
method constructor (line 4) | constructor(message?: string) {
FILE: packages/errors/src/http/421.ts
class MisdirectedRequestError (line 3) | class MisdirectedRequestError extends HttpError {
method constructor (line 4) | constructor(message?: string) {
FILE: packages/errors/src/http/422.ts
class UnprocessableEntityError (line 3) | class UnprocessableEntityError extends HttpError {
method constructor (line 4) | constructor(message?: string) {
FILE: packages/errors/src/http/423.ts
class LockedError (line 3) | class LockedError extends HttpError {
method constructor (line 4) | constructor(message?: string) {
FILE: packages/errors/src/http/424.ts
class FailedDependencyError (line 3) | class FailedDependencyError extends HttpError {
method constructor (line 4) | constructor(message?: string) {
FILE: packages/errors/src/http/425.ts
class UnorderedCollectionError (line 3) | class UnorderedCollectionError extends HttpError {
method constructor (line 4) | constructor(message?: string) {
FILE: packages/errors/src/http/426.ts
class UpgradeRequiredError (line 3) | class UpgradeRequiredError extends HttpError {
method constructor (line 4) | constructor(message?: string) {
FILE: packages/errors/src/http/428.ts
class PreconditionRequiredError (line 3) | class PreconditionRequiredError extends HttpError {
method constructor (line 4) | constructor(message?: string) {
FILE: packages/errors/src/http/429.ts
class TooManyRequestsError (line 3) | class TooManyRequestsError extends HttpError {
method constructor (line 4) | constructor(message?: string) {
FILE: packages/errors/src/http/431.ts
class RequestHeaderFieldsTooLargeError (line 3) | class RequestHeaderFieldsTooLargeError extends HttpError {
method constructor (line 4) | constructor(message?: string) {
FILE: packages/errors/src/http/451.ts
class UnavailableForLegalReasonsError (line 3) | class UnavailableForLegalReasonsError extends HttpError {
method constructor (line 4) | constructor(message?: string) {
FILE: packages/errors/src/http/500.ts
class InternalServerError (line 3) | class InternalServerError extends HttpError {
method constructor (line 4) | constructor(message?: string) {
FILE: packages/errors/src/http/501.ts
class NotImplementedError (line 3) | class NotImplementedError extends HttpError {
method constructor (line 4) | constructor(message?: string) {
FILE: packages/errors/src/http/502.ts
class BadGatewayError (line 3) | class BadGatewayError extends HttpError {
method constructor (line 4) | constructor(message?: string) {
FILE: packages/errors/src/http/503.ts
class ServiceUnavailableError (line 3) | class ServiceUnavailableError extends HttpError {
method constructor (line 4) | constructor(message?: string) {
FILE: packages/errors/src/http/504.ts
class GatewayTimeoutError (line 3) | class GatewayTimeoutError extends HttpError {
method constructor (line 4) | constructor(message?: string) {
FILE: packages/errors/src/http/505.ts
class HTTPVersionNotSupportedError (line 3) | class HTTPVersionNotSupportedError extends HttpError {
method constructor (line 4) | constructor(message?: string) {
FILE: packages/errors/src/http/506.ts
class VariantAlsoNegotiatesError (line 3) | class VariantAlsoNegotiatesError extends HttpError {
method constructor (line 4) | constructor(message?: string) {
FILE: packages/errors/src/http/507.ts
class InsufficientStorageError (line 3) | class InsufficientStorageError extends HttpError {
method constructor (line 4) | constructor(message?: string) {
FILE: packages/errors/src/http/508.ts
class LoopDetectedError (line 3) | class LoopDetectedError extends HttpError {
method constructor (line 4) | constructor(message?: string) {
FILE: packages/errors/src/http/509.ts
class BandwidthLimitExceededError (line 3) | class BandwidthLimitExceededError extends HttpError {
method constructor (line 4) | constructor(message?: string) {
FILE: packages/errors/src/http/510.ts
class NotExtendedError (line 3) | class NotExtendedError extends HttpError {
method constructor (line 4) | constructor(message?: string) {
FILE: packages/errors/src/http/511.ts
class NetworkAuthenticationRequiredError (line 3) | class NetworkAuthenticationRequiredError extends HttpError {
method constructor (line 4) | constructor(message?: string) {
FILE: packages/errors/src/http/http_error.ts
class HttpError (line 5) | class HttpError extends EggBaseError<HttpErrorOptions> {
method constructor (line 10) | constructor(options?: HttpErrorOptions) {
FILE: packages/errors/src/http/http_error_options.ts
type HttpErrorOptions (line 4) | interface HttpErrorOptions extends ErrorOptions {
FILE: packages/errors/src/http/http_header.ts
type HttpHeader (line 1) | interface HttpHeader {
FILE: packages/errors/test/error.test.ts
class CustomError (line 127) | class CustomError extends EggBaseError<ErrorOptions> {
method constructor (line 145) | constructor(options: CustomErrorOptions, custom: boolean) {
method constructor (line 166) | constructor(options: CustomErrorOptions, custom: boolean) {
method constructor (line 210) | constructor(options?: CustomErrorOptions) {
type CustomErrorOptions (line 139) | interface CustomErrorOptions extends ErrorOptions {
class CustomError (line 143) | class CustomError extends EggBaseError<CustomErrorOptions> {
method constructor (line 145) | constructor(options: CustomErrorOptions, custom: boolean) {
method constructor (line 166) | constructor(options: CustomErrorOptions, custom: boolean) {
method constructor (line 210) | constructor(options?: CustomErrorOptions) {
type CustomErrorOptions (line 160) | interface CustomErrorOptions extends ErrorOptions {
class CustomError (line 164) | class CustomError extends EggBaseError<CustomErrorOptions> {
method constructor (line 145) | constructor(options: CustomErrorOptions, custom: boolean) {
method constructor (line 166) | constructor(options: CustomErrorOptions, custom: boolean) {
method constructor (line 210) | constructor(options?: CustomErrorOptions) {
class CustomError (line 192) | class CustomError extends EggBaseError<ErrorOptions> {}
method constructor (line 145) | constructor(options: CustomErrorOptions, custom: boolean) {
method constructor (line 166) | constructor(options: CustomErrorOptions, custom: boolean) {
method constructor (line 210) | constructor(options?: CustomErrorOptions) {
type CustomErrorOptions (line 203) | interface CustomErrorOptions extends ErrorOptions {
class CustomError (line 206) | class CustomError extends EggBaseError<CustomErrorOptions> {
method constructor (line 145) | constructor(options: CustomErrorOptions, custom: boolean) {
method constructor (line 166) | constructor(options: CustomErrorOptions, custom: boolean) {
method constructor (line 210) | constructor(options?: CustomErrorOptions) {
FILE: packages/errors/test/framework/formatter.test.ts
class CustomError (line 11) | class CustomError extends FrameworkBaseError {
method module (line 12) | get module() {
class CustomErrorFormatter (line 78) | class CustomErrorFormatter extends FrameworkErrorFormatter {
class CustomErrorFormatter (line 123) | class CustomErrorFormatter extends FrameworkErrorFormatter {
FILE: packages/errors/test/framework/framework_base_error.test.ts
class CustomError (line 27) | class CustomError extends FrameworkBaseError {
method module (line 28) | get module() {
class TestError (line 65) | class TestError extends FrameworkBaseError {
method module (line 66) | get module() {
FILE: packages/extend2/src/index.ts
function isPlainObject (line 4) | function isPlainObject(obj: unknown) {
function extend (line 27) | function extend<T = Record<string, any>>(deepOrTarget?: unknown, ...obje...
FILE: packages/extend2/test/index.test.ts
class Foo (line 12) | class Foo {}
FILE: packages/koa-static-cache/src/index.ts
type FileFilter (line 17) | type FileFilter = (path: string) => boolean;
type FileMeta (line 19) | interface FileMeta {
type FileMap (line 32) | interface FileMap {
type FileStore (line 36) | interface FileStore {
type Options (line 41) | interface Options {
type Next (line 106) | type Next = () => Promise<void>;
class FileManager (line 108) | class FileManager {
method constructor (line 112) | constructor(store?: FileStore | FileMap) {
method get (line 120) | get(key: string): unknown {
method set (line 124) | set(key: string, value: FileMeta): void {
type MiddlewareFunc (line 132) | type MiddlewareFunc = (ctx: any, next: Next) => Promise<void> | void;
function staticCache (line 139) | function staticCache(
function loadFile (line 326) | function loadFile(name: string, dir: string, options: Options, fileManag...
FILE: packages/koa-static-cache/test/index.test.ts
method filter (line 29) | filter(file: string) {
method filter (line 44) | filter(file: string) {
method filter (line 56) | filter(file: string) {
method filter (line 68) | filter(file: string) {
method filter (line 81) | filter(file: string) {
method filter (line 94) | filter(file: string) {
method cacheControl (line 97) | cacheControl(path) {
method filter (line 451) | filter(file: string) {
FILE: packages/koa/example/extend/Context.ts
class CustomContext (line 3) | class CustomContext extends Context {
method state (line 4) | get state() {
FILE: packages/koa/example/extend/Request.ts
constant HOST (line 3) | const HOST = Symbol('request host');
class CustomRequest (line 5) | class CustomRequest extends Request {
method host (line 6) | get host(): string {
FILE: packages/koa/example/extend/middleware.ts
class CustomContext (line 3) | class CustomContext extends Context {
method hello (line 5) | get hello() {
FILE: packages/koa/src/application.ts
type ProtoImplClass (line 25) | type ProtoImplClass<T = object> = new (...args: any[]) => T;
type Next (line 26) | type Next = () => Promise<void>;
type _MiddlewareFunc (line 27) | type _MiddlewareFunc<T> = (ctx: T, next: Next) => Promise<void> | void;
type MiddlewareFunc (line 28) | type MiddlewareFunc<T extends Context = Context> = _MiddlewareFunc<T> & {
class Application (line 36) | class Application extends Emitter {
method constructor (line 72) | constructor(options?: {
method keys (line 103) | get keys() {
method keys (line 107) | set keys(value: string[] | undefined) {
method env (line 111) | get env() {
method env (line 114) | set env(value: string) {
method proxy (line 118) | get proxy() {
method proxy (line 121) | set proxy(value: boolean) {
method listen (line 131) | listen(...args: any[]): http.Server {
method toJSON (line 141) | toJSON(): object {
method inspect (line 152) | inspect(): object {
method use (line 159) | use<T extends Context = Context>(fn: MiddlewareFunc<T>): this {
method callback (line 178) | callback(): (req: IncomingMessage, res: ServerResponse) => Promise<voi...
method currentContext (line 198) | get currentContext(): Context | undefined {
method handleRequest (line 206) | protected async handleRequest(ctx: Context, fnMiddleware: (ctx: Contex...
method createContext (line 230) | createContext(req: IncomingMessage, res: ServerResponse): Context {
method onerror (line 239) | protected onerror(err: CustomError): void {
method _respond (line 257) | protected _respond(ctx: Context): void {
FILE: packages/koa/src/context.ts
class Context (line 15) | class Context {
method constructor (line 27) | constructor(app: Application, req: IncomingMessage, res: ServerRespons...
method inspect (line 44) | inspect(): object {
method toJSON (line 57) | toJSON(): object {
method assert (line 78) | assert(
method throw (line 132) | throw(arg1: number | string | Error, arg2?: number | string | Error | ...
method onerror (line 156) | onerror(err: CustomError): void {
method cookies (line 224) | get cookies() {
method cookies (line 234) | set cookies(cookies: Cookies) {
method state (line 239) | get state(): Record<string, any> {
method acceptsLanguages (line 250) | acceptsLanguages(languages?: string | string[], ...others: string[]): ...
method acceptsEncodings (line 257) | acceptsEncodings(encodings?: string | string[], ...others: string[]): ...
method acceptsCharsets (line 264) | acceptsCharsets(charsets?: string | string[], ...others: string[]): st...
method accepts (line 270) | accepts(args?: string | string[], ...others: string[]): string | strin...
method get (line 274) | get<T = string | string[]>(field: string): T {
method is (line 278) | is(type?: string | string[], ...types: string[]): string | false | null {
method querystring (line 282) | get querystring(): string {
method querystring (line 286) | set querystring(str: string) {
method idempotent (line 290) | get idempotent(): boolean {
method socket (line 294) | get socket(): RequestSocket {
method search (line 298) | get search(): string {
method search (line 302) | set search(str: string) {
method method (line 306) | get method(): string {
method method (line 310) | set method(method: string) {
method query (line 314) | get query(): ParsedUrlQuery {
method query (line 318) | set query(obj: ParsedUrlQuery) {
method path (line 322) | get path(): string {
method path (line 326) | set path(path: string) {
method url (line 330) | get url(): string {
method url (line 334) | set url(url: string) {
method accept (line 338) | get accept(): Accepts {
method accept (line 342) | set accept(accept: Accepts) {
method origin (line 346) | get origin(): string {
method href (line 350) | get href(): string {
method subdomains (line 354) | get subdomains(): string[] {
method protocol (line 358) | get protocol(): string {
method host (line 362) | get host(): string {
method hostname (line 366) | get hostname(): string {
method URL (line 370) | get URL(): URL {
method header (line 374) | get header(): IncomingMessage['headers'] {
method headers (line 378) | get headers(): IncomingMessage['headers'] {
method secure (line 382) | get secure(): boolean {
method stale (line 386) | get stale(): boolean {
method fresh (line 390) | get fresh(): boolean {
method ips (line 394) | get ips(): string[] {
method ip (line 398) | get ip(): string {
method attachment (line 406) | attachment(...args: Parameters<Response['attachment']>): void {
method redirect (line 410) | redirect(...args: Parameters<Response['redirect']>): void {
method remove (line 414) | remove(...args: Parameters<Response['remove']>): void {
method vary (line 418) | vary(...args: Parameters<Response['vary']>): void {
method has (line 422) | has(...args: Parameters<Response['has']>): boolean {
method set (line 426) | set(...args: Parameters<Response['set']>): void {
method append (line 430) | append(...args: Parameters<Response['append']>): void {
method flushHeaders (line 434) | flushHeaders(...args: Parameters<Response['flushHeaders']>): void {
method status (line 438) | get status() {
method status (line 442) | set status(status: number) {
method message (line 446) | get message() {
method message (line 450) | set message(msg: string) {
method body (line 455) | get body(): any {
method body (line 460) | set body(val: any) {
method length (line 464) | get length(): number | undefined {
method length (line 468) | set length(n: number | string | undefined) {
method type (line 472) | get type(): string {
method type (line 476) | set type(type: string | null | undefined) {
method lastModified (line 480) | get lastModified() {
method lastModified (line 484) | set lastModified(val: string | Date | undefined) {
method etag (line 488) | get etag() {
method etag (line 492) | set etag(val: string) {
method headerSent (line 496) | get headerSent(): boolean {
method writable (line 500) | get writable(): boolean {
FILE: packages/koa/src/request.ts
type RequestSocket (line 17) | interface RequestSocket extends Socket {
class Request (line 21) | class Request {
method constructor (line 30) | constructor(app: Application, ctx: Context, req: IncomingMessage, res:...
method header (line 44) | get header(): IncomingMessage['headers'] {
method header (line 52) | set header(val) {
method headers (line 60) | get headers(): IncomingMessage['headers'] {
method headers (line 68) | set headers(val) {
method url (line 76) | get url(): string {
method url (line 84) | set url(val) {
method origin (line 92) | get origin() {
method href (line 100) | get href(): string {
method method (line 112) | get method() {
method method (line 119) | set method(val: string) {
method path (line 126) | get path() {
method path (line 133) | set path(pathname: string) {
method query (line 149) | get query(): ParsedUrlQuery {
method query (line 165) | set query(obj: ParsedUrlQuery) {
method querystring (line 172) | get querystring() {
method querystring (line 180) | set querystring(str: string) {
method search (line 194) | get search() {
method search (line 204) | set search(str: string) {
method host (line 214) | get host(): string {
method hostname (line 236) | get hostname(): string {
method URL (line 253) | get URL() {
method fresh (line 270) | get fresh(): boolean {
method stale (line 292) | get stale(): boolean {
method idempotent (line 299) | get idempotent(): boolean {
method socket (line 307) | get socket() {
method charset (line 314) | get charset(): string | undefined {
method length (line 326) | get length(): number | undefined {
method protocol (line 342) | get protocol(): string {
method secure (line 361) | get secure(): boolean {
method ips (line 373) | get ips(): string[] {
method ip (line 389) | get ip() {
method ip (line 396) | set ip(ip: string) {
method subdomains (line 412) | get subdomains(): string[] {
method accept (line 424) | get accept() {
method accept (line 431) | set accept(obj: Accepts) {
method accepts (line 473) | accepts(args?: string | string[], ...others: string[]): string | strin...
method acceptsEncodings (line 488) | acceptsEncodings(encodings?: string | string[], ...others: string[]): ...
method acceptsCharsets (line 511) | acceptsCharsets(charsets?: string | string[], ...others: string[]): st...
method acceptsLanguages (line 534) | acceptsLanguages(languages?: string | string[], ...others: string[]): ...
method is (line 567) | is(type?: string | string[], ...types: string[]): string | false | null {
method type (line 579) | get type(): string {
method get (line 602) | get<T = string | string[]>(field: string): T {
method inspect (line 618) | inspect(): object | undefined {
method toJSON (line 626) | toJSON(): object {
function splitCommaSeparatedValues (line 643) | function splitCommaSeparatedValues(value: string, limit?: number): strin...
FILE: packages/koa/src/response.ts
class Response (line 21) | class Response {
method constructor (line 29) | constructor(app: Application, ctx: Context, req: IncomingMessage, res:...
method socket (line 41) | get socket(): ServerResponse['socket'] {
method header (line 48) | get header(): OutgoingHttpHeaders {
method headers (line 56) | get headers(): OutgoingHttpHeaders {
method status (line 65) | get status() {
method status (line 72) | set status(code: number) {
method message (line 89) | get message(): string {
method message (line 96) | set message(msg: string) {
method body (line 107) | get body() {
method body (line 114) | set body(val: string | Buffer | object | Stream | null | undefined | b...
method length (line 178) | set length(n: number | string | undefined) {
method length (line 190) | get length(): number | undefined {
method headerSent (line 211) | get headerSent(): boolean {
method vary (line 218) | vary(field: string): void {
method _getBackReferrer (line 223) | protected _getBackReferrer(): string | undefined {
method redirect (line 248) | redirect(url: string, alt?: string): void {
method attachment (line 278) | attachment(filename?: string, options?: ContentDispositionOptions): vo...
method type (line 295) | set type(type: string | null | undefined) {
method type (line 310) | get type(): string {
method is (line 323) | is(type?: string | string[], ...types: string[]): string | false {
method lastModified (line 337) | set lastModified(val: string | Date | undefined) {
method lastModified (line 347) | get lastModified(): Date | undefined {
method etag (line 360) | set etag(val: string) {
method etag (line 368) | get etag() {
method get (line 383) | get<T = string | string[] | number>(field: string): T {
method has (line 399) | has(field: string): boolean {
method set (line 413) | set(field: string | Record<string, string>, val?: string | number | un...
method append (line 440) | append(field: string, val: string | string[]): void {
method remove (line 454) | remove(field: string): void {
method writable (line 464) | get writable(): boolean {
method inspect (line 482) | inspect(): object | undefined {
method toJSON (line 492) | toJSON(): object {
method flushHeaders (line 503) | flushHeaders(): void {
FILE: packages/koa/src/types.ts
type CustomError (line 1) | type CustomError = Error & {
type AnyProto (line 10) | interface AnyProto {
FILE: packages/koa/test/application/context.test.ts
class MyContext (line 43) | class MyContext extends Context {
method getMsg (line 44) | getMsg() {
class MyApp (line 49) | class MyApp extends Application {
method constructor (line 50) | constructor() {
FILE: packages/koa/test/application/index.test.ts
method getHeaders (line 146) | getHeaders() {
FILE: packages/koa/test/context/cookies.test.ts
method set (line 107) | set(key: string, value: string) {
FILE: packages/koa/test/context/state.test.ts
method state (line 29) | get state(): Record<string, string> {
FILE: packages/koa/test/response/status.test.ts
function strip (line 69) | function strip(status: number) {
FILE: packages/koa/test/response/writable.test.ts
function requestTwice (line 12) | function requestTwice(server: Server, done: (err: Error | null, datas: B...
function requestClosed (line 45) | function requestClosed(server: Server) {
function request (line 72) | function request(server: Server) {
FILE: packages/koa/test/test-helpers/context.ts
function context (line 8) | function context(req?: any, res?: any, app?: Koa): Context {
function request (line 27) | function request(...args: unknown[]): Request {
function response (line 31) | function response(...args: unknown[]): Response {
FILE: packages/logger/src/egg/console_logger.ts
class EggConsoleLogger (line 11) | class EggConsoleLogger extends Logger {
method constructor (line 12) | constructor(options?: Partial<EggConsoleLoggerOptions>) {
method defaults (line 30) | get defaults(): Partial<EggConsoleLoggerOptions> {
FILE: packages/logger/src/egg/custom_logger.ts
class EggCustomLogger (line 6) | class EggCustomLogger extends EggLogger {}
FILE: packages/logger/src/egg/error_logger.ts
class EggErrorLogger (line 8) | class EggErrorLogger extends EggLogger {
method constructor (line 9) | constructor(options?: Partial<EggLoggerOptions>) {
function getMinLevel (line 17) | function getMinLevel(level?: LoggerLevel): LoggerLevel {
FILE: packages/logger/src/egg/logger.ts
class EggLogger (line 13) | class EggLogger extends Logger {
method constructor (line 16) | constructor(options?: Partial<EggLoggerOptions>) {
method level (line 85) | get level(): LoggerLevel {
method level (line 89) | set level(level: LoggerLevel) {
method consoleLevel (line 97) | get consoleLevel(): LoggerLevel {
method consoleLevel (line 101) | set consoleLevel(level: LoggerLevel) {
method defaults (line 110) | get defaults(): Partial<EggLoggerOptions> {
FILE: packages/logger/src/egg/loggers.ts
class EggLoggers (line 32) | class EggLoggers extends Map<string, Logger> {
method constructor (line 35) | constructor(config: EggLoggersConfig) {
method set (line 92) | override set(name: string, logger: Logger): this {
method disableConsole (line 99) | disableConsole(): void {
method reload (line 105) | reload(): void {
method setConcentrateError (line 111) | setConcentrateError(name: string, logger: Logger): void {
FILE: packages/logger/src/level.ts
constant ALL (line 1) | const ALL: number = -Infinity;
constant DEBUG (line 4) | const DEBUG: number = 0;
constant INFO (line 7) | const INFO: number = 1;
constant WARN (line 10) | const WARN: number = 2;
constant ERROR (line 13) | const ERROR: number = 3;
constant NONE (line 15) | const NONE: number = Infinity;
type LoggerLevel (line 17) | type LoggerLevel = 'ALL' | 'DEBUG' | 'INFO' | 'WARN' | 'ERROR' | 'NONE';
FILE: packages/logger/src/logger.ts
type DuplicateLoggerEntry (line 7) | interface DuplicateLoggerEntry {
class Logger (line 16) | class Logger<T extends Transport = Transport> extends Map<string, T> {
method constructor (line 22) | constructor(options?: Record<string, unknown>) {
method disable (line 30) | disable(name: string): void {
method enable (line 35) | enable(name: string): void {
method log (line 40) | log(level: string, args: unknown[], meta?: LoggerMeta): void {
method write (line 64) | write(msg: string, ...rest: unknown[]): void {
method redirect (line 69) | redirect(level: string, logger: Logger): void {
method unredirect (line 76) | unredirect(level: string): void {
method duplicate (line 80) | duplicate(level: string, logger: Logger, options: { excludes?: string[...
method unduplicate (line 87) | unduplicate(level: string): void {
method reload (line 91) | reload(): void {
method close (line 97) | close(): void {
method end (line 104) | end(): void {
method error (line 112) | error(...args: unknown[]): void {
method warn (line 116) | warn(...args: unknown[]): void {
method info (line 120) | info(...args: unknown[]): void {
method debug (line 124) | debug(...args: unknown[]): void {
FILE: packages/logger/src/transports/console.ts
class ConsoleTransport (line 9) | class ConsoleTransport extends Transport {
method constructor (line 12) | constructor(options?: Partial<ConsoleTransportOptions>) {
method defaults (line 21) | override get defaults(): Partial<ConsoleTransportOptions> {
method log (line 28) | override log(level: string, args: unknown[], meta?: LoggerMeta): strin...
FILE: packages/logger/src/transports/file.ts
type WriteStream (line 10) | type WriteStream = fs.WriteStream & { _onError?: (err: Error) => void };
class FileTransport (line 15) | class FileTransport extends Transport {
method constructor (line 19) | constructor(options?: Partial<FileTransportOptions>) {
method defaults (line 26) | override get defaults(): Partial<FileTransportOptions> {
method reload (line 34) | override reload(): void {
method log (line 39) | override log(level: string, args: unknown[], meta?: LoggerMeta): strin...
method close (line 52) | override close(): void {
method writable (line 56) | get writable(): boolean {
method _write (line 60) | _write(buf: string | Buffer): void {
method _createStream (line 64) | _createStream(): WriteStream {
method _closeStream (line 78) | _closeStream(): void {
FILE: packages/logger/src/transports/file_buffer.ts
class FileBufferTransport (line 7) | class FileBufferTransport extends FileTransport {
method constructor (line 12) | constructor(options?: Partial<FileTransportOptions>) {
method defaults (line 19) | override get defaults(): Partial<FileTransportOptions> {
method close (line 27) | override close(): void {
method flush (line 32) | flush(): void {
method _closeStream (line 44) | override _closeStream(): void {
method _write (line 51) | override _write(buf: string | Buffer): void {
method _createInterval (line 59) | _createInterval(): ReturnType<typeof setInterval> {
method _closeInterval (line 65) | _closeInterval(): void {
FILE: packages/logger/src/transports/transport.ts
class Transport (line 14) | class Transport {
method constructor (line 18) | constructor(options?: Partial<TransportOptions>) {
method defaults (line 29) | get defaults(): Partial<TransportOptions> {
method enabled (line 40) | get enabled(): boolean {
method enable (line 44) | enable(): void {
method disable (line 48) | disable(): void {
method level (line 52) | set level(level: LoggerLevel | number) {
method level (line 59) | get level(): number {
method shouldLog (line 63) | shouldLog(level: string): boolean {
method log (line 69) | log(level: string, args: unknown[], meta?: LoggerMeta): string | Buffer {
method reload (line 79) | reload(): void {}
method close (line 80) | close(): void {}
method end (line 81) | end(): void {}
FILE: packages/logger/src/utils.ts
type LoggerMeta (line 19) | interface LoggerMeta {
type TransportOptions (line 32) | interface TransportOptions {
type FileTransportOptions (line 45) | interface FileTransportOptions extends TransportOptions {
type ConsoleTransportOptions (line 51) | interface ConsoleTransportOptions extends TransportOptions {
type EggLoggerOptions (line 55) | interface EggLoggerOptions extends Omit<TransportOptions, 'level'> {
type EggLoggersOptions (line 70) | interface EggLoggersOptions extends EggLoggerOptions {
type EggConsoleLoggerOptions (line 80) | interface EggConsoleLoggerOptions extends TransportOptions {
type EggLoggersConfig (line 84) | interface EggLoggersConfig {
function normalizeLevel (line 89) | function normalizeLevel(level?: LoggerLevel | number | string): number |...
function defaultContextPaddingMessage (line 97) | function defaultContextPaddingMessage(ctx: Record<string, unknown>): str...
function defaultFormatter (line 110) | function defaultFormatter(meta: LoggerMeta): string {
function consoleFormatter (line 123) | function consoleFormatter(meta: LoggerMeta): string {
function formatLog (line 140) | function formatLog(
function assign (line 196) | function assign<T>(target: Partial<T>, ...sources: Array<Partial<T> | nu...
function formatError (line 211) | function formatError(err: Error, options?: TransportOptions, causeLength...
function errorToString (line 219) | function errorToString(err: Error, options?: TransportOptions, causeLeng...
function inspectProp (line 267) | function inspectProp(key: string, value: unknown): string {
function formatString (line 271) | function formatString(str: string): string {
function formatBuffer (line 276) | function formatBuffer(buf: { type: string; data: number[] }): string {
function formatObject (line 288) | function formatObject(obj: unknown): string {
FILE: packages/logger/test/lib/formatter.test.ts
class AppError (line 81) | class AppError extends FrameworkBaseError {
method module (line 82) | get module(): string {
FILE: packages/logger/test/utils.ts
function sleep (line 3) | function sleep(ms: number): Promise<void> {
function rimraf (line 7) | async function rimraf(file: string): Promise<void> {
FILE: packages/path-matching/src/index.ts
type PathMatchingFun (line 3) | type PathMatchingFun = (ctx: any) => boolean;
type PathMatchingPattern (line 5) | type PathMatchingPattern = string | RegExp | PathMatchingFun | (string |...
type PathMatchingOptions (line 7) | interface PathMatchingOptions {
function pathMatching (line 13) | function pathMatching(options: PathMatchingOptions): PathMatchingFun {
function toPathMatch (line 34) | function toPathMatch(pattern: PathMatchingPattern, pathToRegexpFn: any):...
FILE: packages/router/src/EggRouter.ts
type RestfulOptions (line 12) | interface RestfulOptions {
constant REST_MAP (line 19) | const REST_MAP: Record<string, RestfulOptions> = {
type Application (line 59) | interface Application {
class EggRouter (line 66) | class EggRouter extends Router {
method constructor (line 74) | constructor(opts: RouterOptions, app: Application) {
method verb (line 79) | verb(
method head (line 96) | head(
method options (line 109) | options(
method get (line 118) | get(
method put (line 127) | put(
method patch (line 136) | patch(
method post (line 145) | post(
method delete (line 158) | delete(
method all (line 167) | all(
method register (line 175) | register(
method resources (line 244) | resources(
method url (line 289) | url(name: string, params?: Record<string, string | number | (string | ...
method pathFor (line 341) | pathFor(name: string, params?: Record<string, string | number | (strin...
function resolveController (line 351) | function resolveController(controller: string | MiddlewareFunc | Resourc...
function convertMiddlewares (line 380) | function convertMiddlewares(middlewares: (MiddlewareFunc | string | Reso...
FILE: packages/router/src/Layer.ts
type LayerOptions (line 12) | interface LayerOptions {
type LayerURLOptions (line 24) | interface LayerURLOptions {
class Layer (line 28) | class Layer {
method constructor (line 49) | constructor(
method match (line 108) | match(path: string): boolean {
method params (line 121) | params(_path: string, captures: Array<string>, existingParams?: Record...
method captures (line 141) | captures(path: string): Array<string> {
method url (line 165) | url(params?: string | number | object, ...paramsOrOptions: (string | n...
method param (line 239) | param(param: string, fn: ParamMiddlewareFunc): Layer {
method setPrefix (line 276) | setPrefix(prefix: string): Layer {
FILE: packages/router/src/Router.ts
type RouterMethod (line 23) | type RouterMethod = (typeof methods)[0];
type RouterOptions (line 25) | interface RouterOptions {
type RegisterOptions (line 33) | interface RegisterOptions {
type AllowedMethodsOptions (line 42) | interface AllowedMethodsOptions {
type MatchedResult (line 48) | interface MatchedResult {
class Router (line 57) | class Router {
method constructor (line 92) | constructor(opts?: RouterOptions) {
method use (line 127) | use(pathOrMiddleware: string | string[] | MiddlewareFunc, ...middlewar...
method prefix (line 188) | prefix(prefix: string): Router {
method routes (line 204) | routes(): MiddlewareFuncWithRouter<Router> {
method middleware (line 248) | middleware(): MiddlewareFuncWithRouter<Router> {
method allowedMethods (line 294) | allowedMethods(options?: AllowedMethodsOptions): MiddlewareFunc {
method redirect (line 368) | redirect(source: string, destination: string, status: number = 301): R...
method register (line 402) | register(
method #register (line 423) | #register(
method route (line 460) | route(name: string): Layer | false {
method url (line 497) | url(
method url (line 523) | static url(
method match (line 540) | match(path: string, method: string): MatchedResult {
method param (line 603) | param(param: string, middleware: ParamMiddlewareFunc): Router {
method _formatRouteParams (line 611) | protected _formatRouteParams(
method verb (line 785) | verb(
method all (line 810) | all(
method acl (line 824) | acl(
method bind (line 834) | bind(
method checkout (line 844) | checkout(
method connect (line 854) | connect(
method copy (line 864) | copy(
method delete (line 874) | delete(
method del (line 885) | del(
method get (line 895) | get(
method query (line 905) | query(
method head (line 915) | head(
method link (line 925) | link(
method lock (line 935) | lock(
method ['m-search'] (line 945) | ['m-search'](
method merge (line 955) | merge(
method mkactivity (line 965) | mkactivity(
method mkcalendar (line 975) | mkcalendar(
method mkcol (line 985) | mkcol(
method move (line 995) | move(
method notify (line 1005) | notify(
method options (line 1015) | options(
method patch (line 1025) | patch(
method post (line 1035) | post(
method propfind (line 1045) | propfind(
method proppatch (line 1055) | proppatch(
method purge (line 1065) | purge(
method put (line 1075) | put(
method rebind (line 1085) | rebind(
method report (line 1095) | report(
method search (line 1105) | search(
method source (line 1115) | source(
method subscribe (line 1125) | subscribe(
method trace (line 1135) | trace(
method unbind (line 1145) | unbind(
method unlink (line 1155) | unlink(
method unlock (line 1165) | unlock(
method unsubscribe (line 1175) | unsubscribe(
FILE: packages/router/src/types.ts
type Next (line 1) | type Next = () => Promise<void>;
type MiddlewareFunc (line 2) | type MiddlewareFunc = (ctx: any, next: Next) => Promise<void> | void;
type MiddlewareFuncWithParamProperty (line 3) | type MiddlewareFuncWithParamProperty = MiddlewareFunc & {
type ParamMiddlewareFunc (line 6) | type ParamMiddlewareFunc = (param: string, ctx: any, next: Next) => Prom...
type MiddlewareFuncWithRouter (line 7) | type MiddlewareFuncWithRouter<T> = MiddlewareFunc & { router: T };
type ResourcesController (line 9) | interface ResourcesController {
FILE: packages/router/test/EggRouter.test.ts
method foo (line 36) | async foo() {
method world (line 40) | *world() {
method foo (line 57) | async foo() {
method world (line 61) | world() {
method foo (line 90) | async foo() {
method world (line 94) | world() {
method foo (line 119) | async foo() {
method world (line 123) | world() {
method foo (line 147) | async foo() {
method world (line 151) | world() {
method foo (line 175) | async foo() {
method world (line 179) | world() {
method foo (line 203) | async foo() {
method world (line 207) | world() {
method foo (line 245) | async foo() {
method world (line 249) | world() {
method foo (line 282) | async foo() {
method world (line 286) | world() {
method foo (line 306) | async foo() {
method world (line 310) | world() {
method index (line 351) | async index() {
method show (line 354) | async show() {
method create (line 357) | async create() {
method update (line 360) | async update() {
method new (line 363) | async new() {
method index (line 389) | async index() {
method show (line 392) | async show() {
method create (line 395) | async create() {
method update (line 398) | async update() {
method new (line 401) | async new() {
method foo (line 429) | async foo() {
method world (line 433) | world() {
FILE: packages/router/test/Router.test.ts
method methodNotAllowed (line 496) | methodNotAllowed() {
method notImplemented (line 577) | notImplemented() {
function testPrefix (line 1360) | function testPrefix(prefix: string) {
FILE: packages/supertest/src/agent.ts
class TestAgent (line 17) | class TestAgent extends Agent {
method constructor (line 22) | constructor(appOrListener: App, options: AgentOptions = {}) {
method host (line 37) | host(host: string): this {
method _testRequest (line 44) | protected _testRequest(method: string, url: string): Test {
method delete (line 64) | delete(url: string): Test {
method del (line 67) | del(url: string): Test {
method get (line 70) | get(url: string): Test {
method head (line 73) | head(url: string): Test {
method put (line 76) | put(url: string): Test {
method post (line 79) | post(url: string): Test {
method patch (line 82) | patch(url: string): Test {
method options (line 85) | options(url: string): Test {
method trace (line 88) | trace(url: string): Test {
method apply (line 95) | apply(target, _, argumentsList) {
FILE: packages/supertest/src/error/AssertError.ts
class AssertError (line 1) | class AssertError extends Error {
method constructor (line 5) | constructor(message: string, expected: any, actual: any, options?: Err...
FILE: packages/supertest/src/index.ts
function request (line 9) | function request(app: App, options: RequestOptions = {}): Request {
method apply (line 27) | apply(target, _, argumentsList) {
method get (line 30) | get(target, property, receiver) {
FILE: packages/supertest/src/request.ts
type RequestOptions (line 8) | interface RequestOptions {
class Request (line 12) | class Request {
method constructor (line 16) | constructor(appOrListener: App, options: RequestOptions = {}) {
method _testRequest (line 29) | protected _testRequest(method: string, url: string): Test {
method delete (line 36) | delete(url: string): Test {
method del (line 39) | del(url: string): Test {
method get (line 42) | get(url: string): Test {
method head (line 45) | head(url: string): Test {
method put (line 48) | put(url: string): Test {
method post (line 51) | post(url: string): Test {
method patch (line 54) | patch(url: string): Test {
method options (line 57) | options(url: string): Test {
method trace (line 60) | trace(url: string): Test {
FILE: packages/supertest/src/test.ts
type TestApplication (line 11) | type TestApplication = Server | string;
type AssertFunction (line 13) | type AssertFunction = (res: Response) => AssertError | void;
type CallbackFunction (line 14) | type CallbackFunction = (err: AssertError | Error | null, res: Response)...
type ResponseError (line 15) | type ResponseError = Error & {
type ExpectHeader (line 20) | interface ExpectHeader {
class Test (line 25) | class Test extends Request {
method constructor (line 34) | constructor(app: TestApplication, method: string, path: string) {
method serverAddress (line 49) | protected serverAddress(app: Server, path: string): string {
method expect (line 77) | expect(
method unexpectHeader (line 140) | unexpectHeader(name: string, fn?: CallbackFunction): this {
method expectHeader (line 158) | expectHeader(name: string, fn?: CallbackFunction): this {
method _unexpectHeader (line 170) | _unexpectHeader(name: string, res: Response): AssertError | void {
method _expectHeader (line 177) | _expectHeader(name: string, res: Response): AssertError | void {
method end (line 188) | end(fn: CallbackFunction): this {
method assert (line 209) | assert(resError: ResponseError | null, res: Response, fn: CallbackFunc...
method _assertBody (line 251) | _assertBody(body: RegExp | string | number | object | null | undefined...
method _assertHeader (line 282) | _assertHeader(header: ExpectHeader, res: Response): AssertError | void {
method _assertStatus (line 314) | _assertStatus(status: number, res: Response): AssertError | void {
method _assertStatusArray (line 329) | _assertStatusArray(statusArray: number[], res: Response): AssertError ...
method _assertFunction (line 344) | _assertFunction(fn: AssertFunction, res: Response): Error | undefined {
function wrapAssertFn (line 365) | function wrapAssertFn(assertFn: AssertFunction) {
FILE: packages/supertest/src/types.ts
type H2RequestListener (line 7) | type H2RequestListener = (request: Http2ServerRequest, response: Http2Se...
type H1RequestListener (line 8) | type H1RequestListener = RequestListener;
type App (line 10) | type App = Server | H1RequestListener | H2RequestListener | string;
type AgentOptions (line 12) | interface AgentOptions extends SAgentOptions {
FILE: packages/supertest/test/supertest.test.ts
function shouldIncludeStackWithThisFile (line 20) | function shouldIncludeStackWithThisFile(err: Error) {
method get (line 799) | get() {
FILE: packages/supertest/test/throwError.ts
function throwError (line 4) | function throwError(message: string): () => never {
FILE: packages/tsconfig/test/fixtures/apps/ts-proj/Foo.ts
class Foo (line 4) | class Foo {
method demoError (line 5) | demoError() {
FILE: packages/tsconfig/test/fixtures/apps/ts-proj/FooDecorator.ts
function FooDecorator (line 1) | function FooDecorator() {
FILE: packages/utils/src/deprecated.ts
function getFrameworkOrEggPath (line 15) | function getFrameworkOrEggPath(cwd: string, eggNames?: string[]): string {
FILE: packages/utils/src/error/ImportResolveError.ts
class ImportResolveError (line 1) | class ImportResolveError extends Error {
method constructor (line 5) | constructor(filepath: string, paths: string[], error: Error) {
FILE: packages/utils/src/framework.ts
type Options (line 13) | interface Options {
function getFrameworkPath (line 28) | function getFrameworkPath(options: Options): string {
function assertAndReturn (line 58) | function assertAndReturn(frameworkName: string, moduleDir: string, baseD...
FILE: packages/utils/src/import.ts
type ImportResolveOptions (line 11) | interface ImportResolveOptions {
type ImportModuleOptions (line 15) | interface ImportModuleOptions extends ImportResolveOptions {
function getRequire (line 35) | function getRequire(): NodeRequire {
function getExtensions (line 46) | function getExtensions(): NodeJS.RequireExtensions {
function isSupportTypeScript (line 51) | function isSupportTypeScript(): boolean {
function tryToResolveFromFile (line 78) | function tryToResolveFromFile(filepath: string): string | undefined {
function tryToResolveByDirnameFromPackage (line 119) | function tryToResolveByDirnameFromPackage(dirname: string, pkg: any): st...
function tryToResolveByDirname (line 229) | function tryToResolveByDirname(dirname: string): string | undefined {
function isRelativePath (line 238) | function isRelativePath(filepath: string): boolean {
function tryToResolveFromAbsoluteFile (line 244) | function tryToResolveFromAbsoluteFile(filepath: string): string | undefi...
function importResolve (line 281) | function importResolve(filepath: string, options?: ImportResolveOptions)...
function importModule (line 369) | async function importModule(filepath: string, options?: ImportModuleOpti...
FILE: packages/utils/src/index.ts
type EggType (line 36) | type EggType = (typeof EggType)[keyof typeof EggType];
function detectType (line 41) | async function detectType(baseDir: string): Promise<keyof typeof EggType> {
FILE: packages/utils/src/plugin.ts
function noop (line 13) | function noop() {}
type LoaderOptions (line 22) | interface LoaderOptions {
type Plugin (line 28) | interface Plugin {
function getPlugins (line 43) | async function getPlugins(options: LoaderOptions): Promise<Record<string...
type Unit (line 49) | interface Unit {
function getLoadUnits (line 57) | async function getLoadUnits(options: LoaderOptions): Promise<Unit[]> {
function getConfig (line 63) | async function getConfig(options: LoaderOptions): Promise<Record<string,...
function exists (line 70) | async function exists(filepath: string) {
type IEggLoader (line 79) | interface IEggLoader {
type IEggLoaderOptions (line 87) | interface IEggLoaderOptions {
type EggLoaderImplClass (line 94) | type EggLoaderImplClass<T = IEggLoader> = new (options: IEggLoaderOption...
function getLoader (line 96) | async function getLoader(options: LoaderOptions): Promise<IEggLoader> {
function findEggCore (line 127) | async function findEggCore(
FILE: packages/utils/src/utils.ts
function readJSONSync (line 5) | function readJSONSync(file: string): any {
function getDirname (line 12) | function getDirname(): string {
FILE: packages/utils/test/fixtures/cjs/es-module-default.js
method fn (line 3) | fn() {}
FILE: packages/utils/test/helper.ts
function getFilepath (line 7) | function getFilepath(name: string): string {
FILE: plugins/development/src/agent.ts
class AgentBoot (line 11) | class AgentBoot implements ILifecycleBoot {
method constructor (line 14) | constructor(agent: Agent) {
method didLoad (line 18) | async didLoad(): Promise<void> {
method serverDidReady (line 30) | async serverDidReady(): Promise<void> {
FILE: plugins/development/src/app.ts
class AppBoot (line 3) | class AppBoot implements ILifecycleBoot {
method constructor (line 6) | constructor(app: Application) {
method configWillLoad (line 14) | async configWillLoad(): Promise<void> {
FILE: plugins/development/src/app/middleware/egg_loader_trace.ts
function createEggLoaderTraceMiddleware (line 9) | function createEggLoaderTraceMiddleware(_options: unknown, app: Applicat...
function loadTimingData (line 21) | async function loadTimingData(app: Application) {
FILE: plugins/development/src/config/config.default.ts
type DevelopmentConfig (line 1) | interface DevelopmentConfig {
FILE: plugins/development/src/types.ts
type EggAppConfig (line 5) | interface EggAppConfig {
FILE: plugins/development/src/utils.ts
function isTimingFile (line 1) | function isTimingFile(file: string): boolean {
FILE: plugins/development/test/development-ts.test.ts
function count (line 83) | function count(str: string, match: string) {
FILE: plugins/development/test/development.test.ts
function count (line 61) | function count(str: string, match: string) {
FILE: plugins/development/test/utils.ts
function getFilepath (line 7) | function getFilepath(name: string): string {
function escape (line 11) | function escape(str: string): string {
constant DELAY (line 15) | const DELAY: number = process.env.CI ? 30000 : 5500;
FILE: plugins/i18n/src/app.ts
class I18n (line 62) | class I18n implements ILifecycleBoot {
method constructor (line 65) | constructor(app: I18nApplication) {
method didLoad (line 69) | async didLoad(): Promise<void> {
FILE: plugins/i18n/src/app/extend/application.ts
class I18nApplication (line 9) | class I18nApplication extends Application {
method isSupportLocale (line 12) | isSupportLocale(locale: string): boolean {
method gettext (line 16) | gettext(locale: string, key: string, value?: any, ...args: any[]): str...
method __ (line 64) | __(locale: string, key: string, value?: any, ...args: any[]): string {
constant ARRAY_INDEX_RE (line 69) | const ARRAY_INDEX_RE = /\{(\d+)\}/g;
function formatWithArray (line 70) | function formatWithArray(text: string, values: any[]) {
function formatWithObject (line 82) | function formatWithObject(text: string, values: Record<string, any>) {
FILE: plugins/i18n/src/app/extend/context.ts
class I18nContext (line 9) | class I18nContext extends Context {
method locale (line 15) | get locale(): string {
method locale (line 19) | set locale(l: string) {
method gettext (line 28) | gettext(key: string, value?: any, ...args: any[]): string {
method __ (line 82) | __(key: string, value?: any, ...args: any[]): string {
method __getLocale (line 90) | __getLocale(): string {
method __getLocaleOrigin (line 167) | __getLocaleOrigin(): string {
method __setLocale (line 175) | __setLocale(locale: string): void {
function updateCookie (line 184) | function updateCookie(ctx: Context, locale: string) {
FILE: plugins/i18n/src/config/config.default.ts
type I18nConfig (line 1) | interface I18nConfig {
FILE: plugins/i18n/src/locales.ts
function loadLocaleResources (line 16) | async function loadLocaleResources(app: I18nApplication, options: I18nCo...
function flattening (line 60) | function flattening(data: any) {
FILE: plugins/i18n/src/types.ts
type EggAppConfig (line 5) | interface EggAppConfig {
type Application (line 13) | interface Application {
type Context (line 19) | interface Context {
FILE: plugins/i18n/src/utils.ts
function isObject (line 1) | function isObject(obj: any): boolean {
function formatLocale (line 5) | function formatLocale(locale: string): string {
FILE: plugins/i18n/test/fixtures/custom_egg/index.js
constant EGG_PATH (line 7) | const EGG_PATH = path.dirname(__filename);
class Application (line 9) | class Application extends _Application {
method [Symbol.for('egg#eggPath')] (line 10) | get [Symbol.for('egg#eggPath')]() {
class Agent (line 15) | class Agent extends _Agent {
method [Symbol.for('egg#eggPath')] (line 16) | get [Symbol.for('egg#eggPath')]() {
function startCluster (line 21) | function startCluster(options, callback) {
FILE: plugins/i18n/test/i18n.test.ts
function getFixtures (line 6) | function getFixtures(name: string) {
FILE: plugins/jsonp/src/app/extend/application.ts
class JSONPApplication (line 14) | class JSONPApplication extends Application {
method jsonp (line 20) | jsonp(initOptions: Partial<JSONPConfig> = {}): MiddlewareFunc {
function createValidateReferer (line 79) | function createValidateReferer(whiteList: Required<JSONPConfig>['whiteLi...
function validateCsrf (line 113) | function validateCsrf(ctx: JSONPContext) {
function getJsonpFunction (line 123) | function getJsonpFunction(query: ParsedUrlQuery, callbacks: string[]) {
FILE: plugins/jsonp/src/app/extend/context.ts
type JSONPConfigData (line 7) | interface JSONPConfigData {
class JSONPContext (line 12) | class JSONPContext extends Context {
method acceptJSONP (line 16) | get acceptJSONP(): boolean {
method createJsonpBody (line 28) | createJsonpBody(body: any): void {
FILE: plugins/jsonp/src/config/config.default.ts
type JSONPConfig (line 3) | interface JSONPConfig {
FILE: plugins/jsonp/src/error/JSONPForbiddenReferrerError.ts
class JSONPForbiddenReferrerError (line 1) | class JSONPForbiddenReferrerError extends Error {
method constructor (line 5) | constructor(message: string, referrer: string, status: number) {
FILE: plugins/jsonp/src/lib/private_key.ts
constant JSONP_CONFIG (line 1) | const JSONP_CONFIG: unique symbol = Symbol('jsonp#config');
FILE: plugins/jsonp/src/types.ts
type EggAppConfig (line 7) | interface EggAppConfig {
type Context (line 15) | interface Context {
type Application (line 30) | interface Application {
FILE: plugins/logrotator/src/app/schedule/clean_log.ts
method task (line 18) | async task(): Promise<void> {
function removeExpiredLogFiles (line 41) | async function removeExpiredLogFiles(logDir: string, maxDays: number, lo...
FILE: plugins/logrotator/src/app/schedule/rotate_by_file.ts
method task (line 16) | async task(): Promise<void> {
FILE: plugins/logrotator/src/app/schedule/rotate_by_hour.ts
method task (line 16) | async task(): Promise<void> {
FILE: plugins/logrotator/src/app/schedule/rotate_by_size.ts
method task (line 16) | async task(): Promise<void> {
FILE: plugins/logrotator/src/boot.ts
class Boot (line 3) | class Boot implements ILifecycleBoot {
method constructor (line 5) | constructor(app: Application) {
method didLoad (line 9) | async didLoad(): Promise<void> {
FILE: plugins/logrotator/src/config/config.default.ts
type LogrotatorConfig (line 1) | interface LogrotatorConfig {
FILE: plugins/logrotator/src/lib/day_rotator.ts
class DayRotator (line 15) | class DayRotator extends LogRotator {
method constructor (line 19) | constructor(options: RotatorOptions) {
method getRotateFiles (line 25) | async getRotateFiles(): Promise<Map<string, RotateFile>> {
method _setFile (line 74) | _setFile(srcPath: string, files: Map<string, RotateFile>): void {
FILE: plugins/logrotator/src/lib/hour_rotator.ts
class HourRotator (line 13) | class HourRotator extends LogRotator {
method getRotateFiles (line 14) | async getRotateFiles(): Promise<Map<string, RotateFile>> {
method hourDelimiter (line 34) | get hourDelimiter(): string {
method _setFile (line 38) | _setFile(srcPath: string, files: Map<string, RotateFile>): void {
FILE: plugins/logrotator/src/lib/rotator.ts
type RotatorOptions (line 13) | interface RotatorOptions {
type RotateFile (line 17) | interface RotateFile {
method constructor (line 27) | constructor(options: RotatorOptions) {
method rotate (line 36) | async rotate(): Promise<void> {
function renameOrDelete (line 66) | async function renameOrDelete(srcPath: string, targetPath: string, gzip:...
FILE: plugins/logrotator/src/lib/size_rotator.ts
class SizeRotator (line 14) | class SizeRotator extends LogRotator {
method getRotateFiles (line 15) | async getRotateFiles(): Promise<Map<string, RotateFile>> {
method _setFile (line 54) | _setFile(logPath: string, files: Map<string, RotateFile>): void {
FILE: plugins/logrotator/src/lib/utils.ts
type LoggerTransport (line 1) | interface LoggerTransport {
function walkLoggerFile (line 10) | function walkLoggerFile(loggers: Record<string, Map<string, LoggerTransp...
FILE: plugins/logrotator/src/types.ts
type EggAppConfig (line 6) | interface EggAppConfig {
type Agent (line 14) | interface Agent {
type Application (line 18) | interface Application {
FILE: plugins/logrotator/test/utils.ts
function getFixtures (line 3) | function getFixtures(name: string): string {
FILE: plugins/mock/src/app.ts
class Boot (line 3) | class Boot implements ILifecycleBoot {
method constructor (line 5) | constructor(app: Application) {
method configWillLoad (line 9) | configWillLoad(): void {
FILE: plugins/mock/src/app/extend/agent.ts
method mockHttpclient (line 22) | mockHttpclient(
method mockHttpClient (line 34) | mockHttpClient(
method mockAgent (line 50) | mockAgent(): MockAgent {
method mockAgentRestore (line 54) | async mockAgentRestore(): Promise<void> {
FILE: plugins/mock/src/app/extend/application.ts
constant ORIGIN_TYPES (line 25) | const ORIGIN_TYPES = Symbol('@eggjs/mock originTypes');
constant BACKGROUND_TASKS (line 26) | const BACKGROUND_TASKS = Symbol('Application#backgroundTasks');
constant REUSED_CTX (line 27) | const REUSED_CTX = Symbol('Context#reusedInSuite');
type MockContextOptions (line 29) | interface MockContextOptions {
type MockContextData (line 40) | interface MockContextData {
type MockContext (line 45) | interface MockContext extends Context {
method mockContext (line 77) | mockContext(data?: MockContextData, options?: MockContextOptions): MockC...
method mockContextScope (line 116) | async mockContextScope(fn: (ctx?: MockContext) => Promise<any>, data?: M...
method mockSession (line 131) | mockSession(data: any): this {
method mockService (line 154) | mockService(service: string | any, methodName: string, fn: any): this {
method mockServiceError (line 174) | mockServiceError(service: string | any, methodName: string, err?: string...
method _mockFn (line 186) | _mockFn(obj: any, name: string, data: any): void {
method mockRequest (line 237) | mockRequest(req: MockContextData): IncomingMessage {
method mockCookies (line 270) | mockCookies(cookies: Record<string, string | string[]>): this {
method mockHeaders (line 293) | mockHeaders(headers: Record<string, string | string[]>): this {
method mockCsrf (line 311) | mockCsrf(): this {
method mockHttpclient (line 322) | mockHttpclient(
method mockHttpClient (line 334) | mockHttpClient(
method mockUrllib (line 349) | mockUrllib(
method mockAgent (line 362) | mockAgent(): MockAgent {
method mockAgentRestore (line 366) | async mockAgentRestore(): Promise<void> {
method mockRestore (line 374) | async mockRestore(): Promise<void> {
method mm (line 383) | get mm(): typeof mock {
method loadAgent (line 391) | loadAgent(): void {}
method mockEnv (line 398) | mockEnv(env: string): this {
method httpRequest (line 411) | httpRequest(): EggTestRequest {
method mockLog (line 420) | mockLog(logger?: string | Logger): void {
method __checkExpectLog (line 440) | __checkExpectLog(expectOrNot: boolean, str: string | RegExp, logger?: st...
method expectLog (line 480) | expectLog(str: string | RegExp, logger?: string | Logger): void {
method notExpectLog (line 490) | notExpectLog(str: string | RegExp, logger?: string | Logger): void {
method backgroundTasksFinished (line 494) | async backgroundTasksFinished(): Promise<void> {
method _backgroundTasks (line 508) | get _backgroundTasks() {
method _backgroundTasks (line 515) | set _backgroundTasks(tasks) {
function findHeaders (line 520) | function findHeaders(headers: Record<string, any>, key: string) {
FILE: plugins/mock/src/index.ts
type ExtendedMock (line 19) | interface ExtendedMock {
method env (line 65) | env(env: string): void {
method consoleLevel (line 74) | consoleLevel(level: string): void {
method home (line 79) | home(homePath?: string): void {
method apply (line 90) | apply(target, _, args) {
method get (line 93) | get(_target, property, receiver) {
FILE: plugins/mock/src/inject_mocha.ts
function findNodeJSMocha (line 12) | function findNodeJSMocha() {
FILE: plugins/mock/src/lib/agent_handler.ts
function setupAgent (line 10) | async function setupAgent(): Promise<MockAgent> {
function closeAgent (line 28) | async function closeAgent(): Promise<void> {
FILE: plugins/mock/src/lib/app.ts
constant APP_INIT (line 22) | const APP_INIT = Symbol('appInit');
constant MESSENGER (line 23) | const MESSENGER = Symbol('messenger');
constant MOCK_APP_METHOD (line 24) | const MOCK_APP_METHOD = ['ready', 'closed', 'isClosed', 'close', '_agent...
class MockApplicationWorker (line 26) | class MockApplicationWorker extends Base {
method constructor (line 35) | constructor(options: MockApplicationOptions) {
method _init (line 45) | async _init() {
method #bindEvent (line 117) | #bindEvent() {
method on (line 131) | on(...args: any[]) {
method once (line 143) | once(...args: any[]) {
method _close (line 159) | async _close() {
method closed (line 183) | get closed() {
function createApp (line 188) | function createApp(createOptions?: MockOptions): ApplicationUnittest {
function bindMessenger (line 266) | function bindMessenger(ApplicationClass: any, agent: AgentUnittest) {
FILE: plugins/mock/src/lib/app_handler.ts
function setupApp (line 18) | function setupApp(): ApplicationUnittest {
function setGetAppCallback (line 71) | function setGetAppCallback(cb: (suite: unknown, test?: unknown) => any):...
function getApp (line 75) | async function getApp(suite?: unknown, test?: unknown): Promise<Applicat...
function getBootstrapApp (line 86) | function getBootstrapApp(): ApplicationUnittest {
FILE: plugins/mock/src/lib/cluster.ts
class ClusterApplication (line 60) | class ClusterApplication extends Coffee {
method constructor (line 80) | constructor(options: MockClusterApplicationOptions) {
method process (line 142) | get process(): childProcess.ChildProcess {
method callback (line 149) | callback(): this {
method url (line 158) | get url(): string {
method address (line 168) | address(): { port: number; address: string | undefined } {
method listen (line 178) | listen(): this {
method close (line 185) | async close(): Promise<void> {
method isClosed (line 203) | get isClosed(): boolean {
method router (line 208) | get router(): { pathFor: (url: string) => any } {
method getAppInstanceProperty (line 220) | getAppInstanceProperty(property: string): any {
method mockLog (line 231) | mockLog(logger?: string): void {
method expectLog (line 244) | expectLog(str: string, logger?: string): void {
method notExpectLog (line 257) | notExpectLog(str: string, logger?: string): void {
method httpRequest (line 262) | httpRequest(): ReturnType<typeof supertestRequest> {
method _callFunctionOnAppWorker (line 266) | _callFunctionOnAppWorker(method: string, args: any[] = [], property: a...
type MockClusterApplication (line 322) | type MockClusterApplication = ClusterApplication & ApplicationUnittest;
function createCluster (line 324) | function createCluster(initOptions?: MockClusterOptions): MockClusterApp...
function restore (line 372) | async function restore(): Promise<void> {
FILE: plugins/mock/src/lib/context.ts
method runInBackground (line 2) | runInBackground(scope: any) {
FILE: plugins/mock/src/lib/format_options.ts
function formatOptions (line 16) | function formatOptions(initOptions?: MockOptions): MockApplicationOptions {
function getPluginName (line 101) | function getPluginName(pkgPath: string): string | undefined {
FILE: plugins/mock/src/lib/inject_context.ts
constant MOCHA_SUITE_APP (line 8) | const MOCHA_SUITE_APP = Symbol.for('mocha#suite#app');
function injectContext (line 15) | function injectContext(mocha: any): void {
FILE: plugins/mock/src/lib/mock_agent.ts
function getMockAgent (line 16) | function getMockAgent(app?: { httpClient?: HttpClient }): MockAgent {
function restoreMockAgent (line 37) | async function restoreMockAgent(): Promise<void> {
FILE: plugins/mock/src/lib/mock_custom_loader.ts
function setCustomLoader (line 5) | function setCustomLoader(app: any): void {
FILE: plugins/mock/src/lib/mock_http_server.ts
constant SERVER (line 3) | const SERVER = Symbol('http_server');
function createServer (line 5) | function createServer(app: any): Server {
FILE: plugins/mock/src/lib/mock_httpclient.ts
type MockResultOptions (line 7) | interface MockResultOptions {
type ResultObject (line 31) | type ResultObject = MockResultOptions;
type MockResponseCallbackOptions (line 33) | interface MockResponseCallbackOptions {
type MockResultFunction (line 42) | type MockResultFunction = (url: string, options: MockResponseCallbackOpt...
function normalizeResult (line 44) | function normalizeResult(result: string | MockResultOptions) {
constant MOCK_CONFIGS (line 69) | const MOCK_CONFIGS = Symbol('MOCK_CONFIGS');
constant MOCK_CONFIG_INDEX (line 70) | const MOCK_CONFIG_INDEX = Symbol('MOCK_CONFIG_INDEX');
type MockHttpClientMethod (line 72) | type MockHttpClientMethod = (
function createMockHttpClient (line 78) | function createMockHttpClient(app: any): MockHttpClientMethod {
FILE: plugins/mock/src/lib/parallel/agent.ts
class MockAgent (line 17) | class MockAgent extends Base {
method constructor (line 25) | constructor(options: MockApplicationOptions) {
method _init (line 31) | async _init(): Promise<void> {
method #bindEvents (line 76) | #bindEvents(): void {
method on (line 90) | on(...args: any[]): this {
method once (line 102) | once(...args: any[]): this {
method _close (line 117) | async _close(): Promise<void> {
function createAgent (line 127) | function createAgent(options: MockOptions): MockAgent {
FILE: plugins/mock/src/lib/parallel/app.ts
class MockParallelApplication (line 17) | class MockParallelApplication extends Base {
method constructor (line 25) | constructor(options: MockApplicationOptions) {
method _init (line 31) | async _init(): Promise<void> {
method #bindEvents (line 68) | #bindEvents(): void {
method on (line 81) | on(...args: any[]): this {
method once (line 95) | once(...args: any[]): this {
method _close (line 112) | async _close(): Promise<void> {
function createApp (line 122) | function createApp(initOptions: MockOptions): ReturnType<typeof proxyApp> {
FILE: plugins/mock/src/lib/parallel/util.ts
constant MOCK_APP_METHOD (line 7) | const MOCK_APP_METHOD: string[] = ['ready', 'isClosed', 'closed', 'close...
function proxyApp (line 9) | function proxyApp(app: any): any {
FILE: plugins/mock/src/lib/restore.ts
function restore (line 10) | async function restore(): Promise<void> {
FILE: plugins/mock/src/lib/start-cluster.ts
function main (line 15) | async function main() {
FILE: plugins/mock/src/lib/supertest.ts
class EggTestRequest (line 17) | class EggTestRequest extends Request {
method constructor (line 20) | constructor(app: any) {
method _testRequest (line 25) | protected _testRequest(method: string, url: string): Test {
function request (line 45) | function request(app: any): EggTestRequest {
FILE: plugins/mock/src/lib/types.ts
type MockOptions (line 1) | interface MockOptions {
type MockClusterOptions (line 62) | interface MockClusterOptions extends MockOptions {
type MockOption (line 77) | type MockOption = MockOptions;
type MockApplicationOptions (line 79) | interface MockApplicationOptions extends MockOptions {
type MockClusterApplicationOptions (line 85) | interface MockClusterApplicationOptions extends MockClusterOptions {
FILE: plugins/mock/src/lib/utils.ts
function getSourceDirname (line 7) | function getSourceDirname(): string {
function sleep (line 16) | async function sleep(delay: number): Promise<void> {
function rimraf (line 20) | async function rimraf(filepath: string): Promise<void> {
function rimrafSync (line 24) | function rimrafSync(filepath: string): void {
function getProperty (line 28) | function getProperty(target: any, prop: PropertyKey): any {
function getEggOptions (line 36) | function getEggOptions(): { baseDir: string; framework?: string } {
FILE: plugins/mock/src/register.ts
function mochaGlobalSetup (line 9) | async function mochaGlobalSetup(): Promise<void> {
function mochaGlobalTeardown (line 15) | async function mochaGlobalTeardown(): Promise<void> {
method beforeAll (line 26) | async beforeAll(): Promise<void> {
method afterEach (line 33) | async afterEach(): Promise<void> {
method afterAll (line 41) | async afterAll(): Promise<void> {
FILE: plugins/mock/test/app.test.ts
method beforeInit (line 88) | beforeInit(instance) {
function call (line 157) | function call(method: string) {
FILE: plugins/mock/test/app_proxy.test.ts
method get (line 134) | get() {
method set (line 140) | set(prop) {
FILE: plugins/mock/test/fixtures/agent-boot-error/agent.js
class CustomError (line 3) | class CustomError extends FrameworkBaseError {
method module (line 4) | get module() {
method configWillLoad (line 10) | async configWillLoad() {
FILE: plugins/mock/test/fixtures/agent-boot-ready-error/agent.js
class CustomError (line 3) | class CustomError extends FrameworkBaseError {
method module (line 4) | get module() {
method didLoad (line 10) | async didLoad() {
FILE: plugins/mock/test/fixtures/agent/client.js
class Client (line 3) | class Client extends Base {
method constructor (line 4) | constructor() {
method subscribe (line 9) | subscribe(topic, listener) {
FILE: plugins/mock/test/fixtures/app-boot-error/app.js
class CustomError (line 3) | class CustomError extends FrameworkBaseError {
method module (line 4) | get module() {
method configWillLoad (line 10) | configWillLoad() {
FILE: plugins/mock/test/fixtures/app-boot-ready-error/app.js
class CustomError (line 3) | class CustomError extends FrameworkBaseError {
method module (line 4) | get module() {
method didLoad (line 10) | async didLoad() {
FILE: plugins/mock/test/fixtures/app-proxy/app/extend/application.js
method getter (line 4) | get getter() {
method method (line 7) | method() {
method a (line 13) | get a() {
method a (line 16) | set a(x) {
FILE: plugins/mock/test/fixtures/app-ready-failed/app.js
method didLoad (line 2) | async didLoad() {
FILE: plugins/mock/test/fixtures/apps/app-throw/app/router.js
method toString (line 31) | toString() {
FILE: plugins/mock/test/fixtures/apps/no-framework/plugin/a/app/extend/application.js
method mockEnv (line 2) | mockEnv() {
FILE: plugins/mock/test/fixtures/bar/index.js
constant EGG_PATH (line 3) | const EGG_PATH = Symbol.for('egg#eggPath');
class BarApplication (line 5) | class BarApplication extends egg.Application {
method [EGG_PATH] (line 6) | get [EGG_PATH]() {
FILE: plugins/mock/test/fixtures/chair/index.js
function startCluster (line 3) | async function startCluster(options) {
FILE: plugins/mock/test/fixtures/custom-loader/app/adapter/docker.js
class DockerAdapter (line 3) | class DockerAdapter {
method constructor (line 4) | constructor(app) {
method inspectDocker (line 8) | async inspectDocker() {
FILE: plugins/mock/test/fixtures/custom-loader/app/controller/user.js
class UserController (line 3) | class UserController {
method constructor (line 4) | constructor(ctx) {
method get (line 9) | async get() {
FILE: plugins/mock/test/fixtures/custom-loader/app/repository/user.js
class UserRepository (line 3) | class UserRepository {
method constructor (line 4) | constructor(ctx) {
method get (line 8) | async get() {
FILE: plugins/mock/test/fixtures/demo-async/app/controller/home.js
class Home (line 4) | class Home extends app.Controller {
method testService (line 5) | async testService() {
FILE: plugins/mock/test/fixtures/demo-async/app/service/bar/foo.js
class Foo (line 4) | class Foo extends app.Service {
method get (line 5) | async get() {
FILE: plugins/mock/test/fixtures/demo-async/app/service/foo.js
class Foo (line 4) | class Foo extends app.Service {
method get (line 5) | async get() {
method getSync (line 9) | getSync() {
FILE: plugins/mock/test/fixtures/demo-async/app/service/third/bar/foo.js
class Main (line 4) | class Main extends app.Service {
method get (line 5) | async get() {
FILE: plugins/mock/test/fixtures/demo/app/context.js
method getResult (line 4) | getResult(result) {
FILE: plugins/mock/test/fixtures/demo/app/extend/application.js
method mockDevice (line 2) | mockDevice(obj) {
method mockGenerator (line 7) | async mockGenerator(obj) {
method mockPromise (line 12) | mockPromise(obj) {
FILE: plugins/mock/test/fixtures/demo/app/service/bar/foo.js
class Foo (line 2) | class Foo extends app.Service {
method get (line 3) | async get() {
FILE: plugins/mock/test/fixtures/demo/app/service/foo.js
class Foo (line 2) | class Foo extends app.Service {
method get (line 3) | async get() {
method getSync (line 7) | getSync() {
FILE: plugins/mock/test/fixtures/demo/app/service/third/bar/foo.js
class Main (line 2) | class Main extends app.Service {
method get (line 3) | async get() {
FILE: plugins/mock/test/fixtures/demo_mock_service_cluster/app/context.js
method getResult (line 4) | getResult(result) {
FILE: plugins/mock/test/fixtures/demo_mock_service_cluster/app/extend/application.js
method mockDevice (line 2) | mockDevice(obj) {
method mockGenerator (line 7) | async mockGenerator(obj) {
method mockPromise (line 12) | mockPromise(obj) {
FILE: plugins/mock/test/fixtures/demo_mock_service_cluster/app/service/bar/foo.js
class Foo (line 2) | class Foo extends app.Service {
method get (line 3) | async get() {
FILE: plugins/mock/test/fixtures/demo_mock_service_cluster/app/service/foo.js
class Foo (line 2) | class Foo extends app.Service {
method get (line 3) | async get() {
method getSync (line 7) | getSync() {
FILE: plugins/mock/test/fixtures/demo_mock_service_cluster/app/service/third/bar/foo.js
class Main (line 2) | class Main extends app.Service {
method get (line 3) | async get() {
FILE: plugins/mock/test/fixtures/demo_next/app/context.js
method getResult (line 2) | getResult(result) {
FILE: plugins/mock/test/fixtures/demo_next/app/extend/application.js
method mockDevice (line 2) | mockDevice(obj) {
method mockGenerator (line 7) | async mockGenerator(obj) {
method mockPromise (line 12) | mockPromise(obj) {
FILE: plugins/mock/test/fixtures/demo_next/app/service/bar/foo.js
class Foo (line 2) | class Foo extends app.Service {
method get (line 3) | async get() {
FILE: plugins/mock/test/fixtures/demo_next/app/service/foo.js
class Foo (line 2) | class Foo extends app.Service {
method get (line 3) | async get() {
method getSync (line 7) | getSync() {
FILE: plugins/mock/test/fixtures/demo_next/app/service/third/bar/foo.js
class Main (line 2) | class Main extends app.Service {
method get (line 3) | async get() {
FILE: plugins/mock/test/fixtures/demo_next_h2/app/context.js
method getResult (line 2) | getResult(result) {
FILE: plugins/mock/test/fixtures/demo_next_h2/app/extend/application.js
method mockDevice (line 2) | mockDevice(obj) {
method mockGenerator (line 7) | async mockGenerator(obj) {
method mockPromise (line 12) | mockPromise(obj) {
FILE: plugins/mock/test/fixtures/demo_next_h2/app/service/bar/foo.js
class Foo (line 2) | class Foo extends app.Service {
method get (line 3) | async get() {
FILE: plugins/mock/test/fixtures/demo_next_h2/app/service/foo.js
class Foo (line 2) | class Foo extends app.Service {
method get (line 3) | async get() {
method getSync (line 7) | getSync() {
FILE: plugins/mock/test/fixtures/demo_next_h2/app/service/third/bar/foo.js
class Main (line 2) | class Main extends app.Service {
method get (line 3) | async get() {
FILE: plugins/mock/test/fixtures/disable-security/app/context.js
method getResult (line 2) | getResult(result) {
FILE: plugins/mock/test/fixtures/disable-security/app/service/bar/foo.js
class Foo (line 2) | class Foo extends app.Service {
method get (line 3) | async get() {
FILE: plugins/mock/test/fixtures/disable-security/app/service/foo.js
class Foo (line 2) | class Foo extends app.Service {
method get (line 3) | async get() {
method getSync (line 7) | getSync() {
FILE: plugins/mock/test/fixtures/disable-security/app/service/third/bar/foo.js
class Main (line 2) | class Main extends app.Service {
method get (line 3) | async get() {
FILE: plugins/mock/test/fixtures/error-framework/index.js
class Application (line 3) | class Application extends egg.Application {
method constructor (line 4) | constructor() {
FILE: plugins/mock/test/fixtures/messenger-binding/agent.js
method constructor (line 2) | constructor(agent) {
method willReady (line 6) | async willReady() {
method didReady (line 22) | async didReady() {
method serverDidReady (line 28) | async serverDidReady() {
FILE: plugins/mock/test/fixtures/messenger-binding/app.js
method constructor (line 2) | constructor(app) {
method willReady (line 6) | async willReady() {
method didReady (line 40) | async didReady() {
method serverDidReady (line 46) | async serverDidReady() {
FILE: plugins/mock/test/fixtures/tegg-app-esm/app/modules/foo/LogService.ts
type Tracer (line 3) | interface Tracer {
class LogService (line 10) | class LogService {
method getTracerId (line 14) | getTracerId() {
FILE: plugins/mock/test/fixtures/tegg-app/app/modules/foo/LogService.ts
type Tracer (line 3) | interface Tracer {
class LogService (line 10) | class LogService {
method getTracerId (line 14) | getTracerId() {
FILE: plugins/mock/test/helper.ts
function getFixtures (line 5) | function getFixtures(filename: string): string {
FILE: plugins/mock/test/mock_agent_httpclient.test.ts
function crtHttpclient (line 270) | function crtHttpclient(app: any) {
FILE: plugins/multipart/src/app.ts
class AppBootHook (line 5) | class AppBootHook implements ILifecycleBoot {
method constructor (line 7) | constructor(app: Application) {
method configWillLoad (line 11) | configWillLoad(): void {
FILE: plugins/multipart/src/app/extend/context.ts
constant HAS_CONSUMED (line 18) | const HAS_CONSUMED = Symbol('Context#multipartHasConsumed');
type EggFile (line 20) | interface EggFile {
type MultipartFileStream (line 28) | interface MultipartFileStream extends Readable {
type MultipartOptions (line 39) | interface MultipartOptions {
class MultipartContext (line 72) | class MultipartContext extends Context {
method multipart (line 84) | multipart(options: MultipartOptions = {}): AsyncIterable<MultipartFile...
method saveRequestFiles (line 171) | async saveRequestFiles(options: MultipartOptions = {}): Promise<void> {
method getFileStream (line 259) | async getFileStream(options: MultipartOptions = {}): Promise<Multipart...
method cleanupRequestFiles (line 305) | async cleanupRequestFiles(files?: EggFile[]): Promise<void> {
function extractOptions (line 322) | function extractOptions(options: MultipartOptions = {}) {
FILE: plugins/multipart/src/app/schedule/clean_tmpdir.ts
method schedule (line 10) | static get schedule(): EggScheduleTaskOptions {
method _remove (line 19) | async _remove(dir: string) {
method subscribe (line 38) | async subscribe() {
FILE: plugins/multipart/src/config/config.default.ts
type MatchItem (line 7) | type MatchItem = string | RegExp | ((ctx: Context) => boolean);
type MultipartConfig (line 9) | interface MultipartConfig {
FILE: plugins/multipart/src/lib/LimitError.ts
class LimitError (line 1) | class LimitError extends Error {
method constructor (line 5) | constructor(code: string, message: string) {
FILE: plugins/multipart/src/lib/MultipartFileTooLargeError.ts
class MultipartFileTooLargeError (line 1) | class MultipartFileTooLargeError extends Error {
method constructor (line 6) | constructor(message: string, fields: Record<string, any>, filename: st...
FILE: plugins/multipart/src/lib/utils.ts
function humanizeBytes (line 40) | function humanizeBytes(size: number | string): number {
function normalizeOptions (line 47) | function normalizeOptions(options: MultipartConfig): MultipartConfig {
FILE: plugins/multipart/src/types.ts
type EggAppConfig (line 6) | interface EggAppConfig {
type Request (line 14) | interface Request {
type Context (line 21) | interface Context {
FILE: plugins/multipart/test/fixtures/apps/dynamic-option/app/controller/upload.js
method index (line 5) | async index(ctx) {
FILE: plugins/multipart/test/fixtures/apps/multipart-for-await/app/controller/upload.js
method index (line 10) | async index() {
FILE: plugins/multipart/test/fixtures/apps/multipart/app/controller/upload.js
function saveStream (line 49) | function saveStream(stream, filepath) {
FILE: plugins/multipart/test/fixtures/apps/ts/app/controller/home.ts
class HomeController (line 3) | class HomeController extends Controller {
method index (line 4) | async index(): Promise<void> {
FILE: plugins/multipart/test/fixtures/apps/upload-limit/app/router.js
method put (line 9) | async put(name, stream) {
FILE: plugins/multipart/test/fixtures/apps/upload-one-file/app/controller/async.js
method async (line 7) | async async() {
method allowEmpty (line 28) | async allowEmpty() {
FILE: plugins/multipart/test/fixtures/apps/upload-one-file/app/router.js
function readableToBytes (line 5) | async function readableToBytes(stream) {
method put (line 19) | async put(name, stream) {
FILE: plugins/multipart/test/fixtures/apps/whitelist-function/config/config.default.js
method whitelist (line 5) | whitelist(filename) {
FILE: plugins/multipart/test/utils.ts
function getFixtures (line 3) | function getFixtures(name: string): string {
FILE: plu
Copy disabled (too large)
Download .json
Condensed preview — 6135 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (13,115K chars).
[
{
"path": ".github/FUNDING.yml",
"chars": 755,
"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": 1514,
"preview": "name: 🐛 Egg Bug 反馈\ndescription: 如发现 Egg 框架中的 Bug,请及时在此汇报。\nlabels: [bug]\nbody:\n - type: textarea\n attributes:\n l"
},
{
"path": ".github/ISSUE_TEMPLATE/bug-report.yml",
"chars": 1836,
"preview": "name: 🐛 Bug Report For Eggjs\ndescription: Report an issue if something isn't working as expected 🤔.\nlabels: [bug]\nbody:\n"
},
{
"path": ".github/ISSUE_TEMPLATE/feature-request-cn.yml",
"chars": 478,
"preview": "name: 💡 我有一个新点子\ndescription: 我对 Eggjs 框架有一个新的想法(或许我想来实现他)……\nlabels: [feature request]\nbody:\n - type: markdown\n attri"
},
{
"path": ".github/ISSUE_TEMPLATE/feature-request.yml",
"chars": 731,
"preview": "name: 💡 Feature Request For Eggjs\ndescription: I have a suggestion (and may want to implement it)!\nlabels: [feature requ"
},
{
"path": ".github/ISSUE_TEMPLATE/rfc-cn.yml",
"chars": 674,
"preview": "name: 🚀 RFC 提案\ndescription: 我对 Eggjs 框架技术架构功能层面上有重大新增、改进等。\nlabels: [RFC proposal]\nbody:\n - type: markdown\n attribute"
},
{
"path": ".github/ISSUE_TEMPLATE/rfc.yml",
"chars": 1090,
"preview": "name: 🚀 RFC Proposals\ndescription: I've got a major improvement (or idea) on the technical architecture of the Eggjs fra"
},
{
"path": ".github/actions/clone/action.yml",
"chars": 1370,
"preview": "name: 'Clone Repositories'\ndescription: 'Clone self and upstream repositories'\n\ninputs:\n ecosystem-ci-project:\n desc"
},
{
"path": ".github/copilot-instructions.md",
"chars": 10318,
"preview": "# Eggjs Framework - GitHub Copilot Development Instructions\n\n**Always reference these instructions first and fallback to"
},
{
"path": ".github/workflows/ci.yml",
"chars": 9306,
"preview": "name: CI\n\non:\n push:\n paths-ignore:\n - '**/*.md'\n branches: [next]\n pull_request:\n types: [opened, synch"
},
{
"path": ".github/workflows/cleanup-cache.yml",
"chars": 853,
"preview": "name: Cleanup github runner caches on closed pull requests\non:\n pull_request:\n types:\n - closed\n\njobs:\n cleanu"
},
{
"path": ".github/workflows/e2e-test.yml",
"chars": 5656,
"preview": "name: E2E Test\n\non:\n push:\n branches:\n - next\n paths-ignore:\n - '**/*.md'\n pull_request:\n branches:"
},
{
"path": ".github/workflows/release.yml",
"chars": 11367,
"preview": "name: Manual Release\n\n# Retry-safe: if a previous release failed after version bump, re-running\n# with the same paramete"
},
{
"path": ".gitignore",
"chars": 4195,
"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.egg\n\n*-lock.json\n*-lock.yaml\n"
},
{
"path": ".husky/pre-commit",
"chars": 16,
"preview": "npx lint-staged\n"
},
{
"path": ".node-version",
"chars": 8,
"preview": "24.13.0\n"
},
{
"path": ".oxfmtrc.json",
"chars": 893,
"preview": "{\n \"$schema\": \"./node_modules/oxfmt/configuration_schema.json\",\n \"printWidth\": 120,\n \"singleQuote\": true,\n \"ignorePa"
},
{
"path": ".oxlintrc.json",
"chars": 372,
"preview": "{\n \"$schema\": \"./node_modules/oxlint/configuration_schema.json\",\n \"env\": {\n \"node\": true\n },\n \"ignorePatterns\": ["
},
{
"path": ".vscode/settings.json",
"chars": 45,
"preview": "{\n \"vitest.disableWorkspaceWarning\": true\n}\n"
},
{
"path": "AGENTS.md",
"chars": 2833,
"preview": "# Repository Guidelines\n\n## Project Structure & Module Organization\n\nEgg is maintained as a pnpm monorepo. Core runtime "
},
{
"path": "CHANGELOG.md",
"chars": 165730,
"preview": "# Changelog\n\n> [!IMPORTANT]\n> Moving forwards we are using the GitHub releases page at <https://github.com/eggjs/egg/rel"
},
{
"path": "CLAUDE.md",
"chars": 39015,
"preview": "# CLAUDE.md\n\nThis file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.\n\n## "
},
{
"path": "CONTRIBUTING.md",
"chars": 12245,
"preview": "English | [简体中文](./CONTRIBUTING.zh-CN.md)\n\n# Contribution Guide\n\nIf you have any comment or advice, please report your ["
},
{
"path": "CONTRIBUTING.zh-CN.md",
"chars": 5807,
"preview": "[English](./CONTRIBUTING.md) | 简体中文\n\n# 代码贡献规范\n\n有任何疑问,欢迎提交 [issue](https://github.com/eggjs/egg/issues),\n或者直接修改提交 [PR](ht"
},
{
"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": 3706,
"preview": "English | [简体中文](./README.zh-CN.md)\n\n<div style=\"text-align:center\">\n\t<img src=\"site/public/assets/egg-banner.png\" />\n</"
},
{
"path": "README.zh-CN.md",
"chars": 2233,
"preview": "[English](./README.md) | 简体中文\n\n<div style=\"text-align:center\">\n\t<img src=\"site/public/assets/egg-banner.png\" />\n</div>\n\n"
},
{
"path": "SECURITY.md",
"chars": 507,
"preview": "# Security Policy\n\n## Supported Versions\n\nThese versions are currently being supported with security updates.\n\n| Version"
},
{
"path": "ecosystem-ci/clone.ts",
"chars": 2625,
"preview": "import { execSync } from 'node:child_process';\nimport { existsSync } from 'node:fs';\nimport { join } from 'node:path';\n\n"
},
{
"path": "ecosystem-ci/patch-project.ts",
"chars": 4025,
"preview": "import fs from 'node:fs';\nimport { glob } from 'node:fs/promises';\nimport { dirname, join, relative } from 'node:path';\n"
},
{
"path": "ecosystem-ci/repo.json",
"chars": 320,
"preview": "{\n \"cnpmcore\": {\n \"repository\": \"https://github.com/cnpm/cnpmcore.git\",\n \"branch\": \"master\",\n \"hash\": \"e82df3f"
},
{
"path": "examples/helloworld-commonjs/app/controller/home.js",
"chars": 73,
"preview": "exports.index = async function index(ctx) {\n ctx.body = 'hello egg';\n};\n"
},
{
"path": "examples/helloworld-commonjs/app/router.js",
"chars": 61,
"preview": "module.exports = (app) => {\n app.get('/', 'home.index');\n};\n"
},
{
"path": "examples/helloworld-commonjs/config/config.default.js",
"chars": 30,
"preview": "exports.keys = 'hello world';\n"
},
{
"path": "examples/helloworld-commonjs/config/plugin.js",
"chars": 70,
"preview": "exports.schedule = {\n enable: false,\n};\n\nexports.logrotator = false;\n"
},
{
"path": "examples/helloworld-commonjs/index.js",
"chars": 451,
"preview": "const { once } = require('node:events');\nconst { Application } = require('../../dist/commonjs/index');\n\nconst app = new "
},
{
"path": "examples/helloworld-commonjs/package.json",
"chars": 501,
"preview": "{\n \"name\": \"helloworld-commonjs\",\n \"version\": \"1.0.0\",\n \"private\": true,\n \"description\": \"Hello World example using "
},
{
"path": "examples/helloworld-tegg/app/biz/Foo.ts",
"chars": 1089,
"preview": "import { SingletonProto, Inject, EggAppConfig, HttpClient, AccessLevel } from 'egg';\n\nimport { HelloService } from './He"
},
{
"path": "examples/helloworld-tegg/app/biz/HelloService.ts",
"chars": 146,
"preview": "import { SingletonProto } from 'egg';\n\n@SingletonProto()\nexport class HelloService {\n async hello(): Promise<string> {\n"
},
{
"path": "examples/helloworld-tegg/app/biz/WorldService.ts",
"chars": 176,
"preview": "import { SingletonProto } from 'egg';\n\n@SingletonProto({\n name: 'worldInterface',\n})\nexport class WorldService {\n asyn"
},
{
"path": "examples/helloworld-tegg/app/biz/package.json",
"chars": 87,
"preview": "{\n \"name\": \"app-biz\",\n \"type\": \"module\",\n \"eggModule\": {\n \"name\": \"appBiz\"\n }\n}\n"
},
{
"path": "examples/helloworld-tegg/app/port/controller/ArgsController.ts",
"chars": 1356,
"preview": "import { HTTPBody, HTTPController, HTTPMethod, HTTPMethodEnum, HTTPRequest } from 'egg';\n\n@HTTPController()\nexport defau"
},
{
"path": "examples/helloworld-tegg/app/port/controller/HomeController.ts",
"chars": 257,
"preview": "import { HTTPController, HTTPMethod, HTTPMethodEnum } from 'egg';\n\n@HTTPController()\nexport default class HomeController"
},
{
"path": "examples/helloworld-tegg/app/port/controller/SimpleController.ts",
"chars": 2058,
"preview": "import assert from 'node:assert/strict';\n\nimport { Tracer } from '@eggjs/tracer';\nimport {\n HTTPController,\n HTTPHeade"
},
{
"path": "examples/helloworld-tegg/app/port/package.json",
"chars": 89,
"preview": "{\n \"name\": \"app-port\",\n \"type\": \"module\",\n \"eggModule\": {\n \"name\": \"appPort\"\n }\n}\n"
},
{
"path": "examples/helloworld-tegg/app/port/schedule/CronDemo.ts",
"chars": 546,
"preview": "import { Inject, Logger } from 'egg';\nimport { CronParams, Schedule, ScheduleType } from 'egg/schedule';\n\n@Schedule<Cron"
},
{
"path": "examples/helloworld-tegg/app/port/schedule/Demo.ts",
"chars": 405,
"preview": "import { Inject, Logger } from 'egg';\nimport { IntervalParams, Schedule, ScheduleType } from 'egg/schedule'; // 每 1000ms"
},
{
"path": "examples/helloworld-tegg/app.ts",
"chars": 798,
"preview": "import type { ILifecycleBoot, Application } from 'egg';\n\nexport default class AppBootHook implements ILifecycleBoot {\n "
},
{
"path": "examples/helloworld-tegg/config/config.default.ts",
"chars": 154,
"preview": "import { defineConfig, type PartialEggConfig } from 'egg';\n\nconst config: PartialEggConfig = defineConfig({\n keys: '123"
},
{
"path": "examples/helloworld-tegg/config/plugin.ts",
"chars": 84,
"preview": "import tracerPlugin from '@eggjs/tracer';\n\nexport default {\n ...tracerPlugin(),\n};\n"
},
{
"path": "examples/helloworld-tegg/package.json",
"chars": 2553,
"preview": "{\n \"name\": \"helloworld-tegg\",\n \"version\": \"1.0.0\",\n \"private\": true,\n \"description\": \"Hello World example using tegg"
},
{
"path": "examples/helloworld-tegg/test/ArgsController.test.ts",
"chars": 926,
"preview": "import { app } from '@eggjs/mock/bootstrap';\nimport { expect, test } from 'vitest';\n\ntest('should POST /api/args/request"
},
{
"path": "examples/helloworld-tegg/test/SimpleController.test.ts",
"chars": 817,
"preview": "import { app } from '@eggjs/mock/bootstrap';\nimport { expect, test } from 'vitest';\n\ntest('should GET /api/headers with "
},
{
"path": "examples/helloworld-tegg/test/setup.ts",
"chars": 221,
"preview": "import { beforeAll, afterAll } from 'vitest';\n\n// https://vitest.dev/config/#setupfiles\n// export beforeAll and afterAll"
},
{
"path": "examples/helloworld-tegg/tsconfig.json",
"chars": 35,
"preview": "{\n \"extends\": \"@eggjs/tsconfig\"\n}\n"
},
{
"path": "examples/helloworld-tegg/tsdown.config.ts",
"chars": 224,
"preview": "import { defineConfig } from 'tsdown';\n\nexport default defineConfig({\n entry: ['app.ts', 'config/**/*.ts', 'app/**/*.ts"
},
{
"path": "examples/helloworld-tegg/vitest.config.ts",
"chars": 171,
"preview": "import { defineProject } from 'vitest/config';\n\nexport default defineProject({\n test: {\n include: ['test/**/*.test.t"
},
{
"path": "examples/helloworld-typescript/app/controller/home.ts",
"chars": 156,
"preview": "import { Controller } from 'egg';\n\nexport default class HomeController extends Controller {\n async index() {\n this.c"
},
{
"path": "examples/helloworld-typescript/app/middleware/hello.ts",
"chars": 437,
"preview": "import type { MiddlewareFunc } from 'egg';\n\nexport const hello: MiddlewareFunc = async (ctx, next) => {\n ctx.body = 'He"
},
{
"path": "examples/helloworld-typescript/app/router.ts",
"chars": 113,
"preview": "import type { Application } from 'egg';\n\nexport default (app: Application) => {\n app.get('/', 'home.index');\n};\n"
},
{
"path": "examples/helloworld-typescript/app.ts",
"chars": 798,
"preview": "import type { ILifecycleBoot, Application } from 'egg';\n\nexport default class AppBootHook implements ILifecycleBoot {\n "
},
{
"path": "examples/helloworld-typescript/config/config.default.ts",
"chars": 126,
"preview": "import { type PartialEggConfig } from 'egg';\n\nconst config: PartialEggConfig = {\n keys: '123456',\n};\n\nexport default co"
},
{
"path": "examples/helloworld-typescript/package.json",
"chars": 1627,
"preview": "{\n \"name\": \"helloworld-typescript\",\n \"version\": \"1.0.0\",\n \"private\": true,\n \"description\": \"Hello World example usin"
},
{
"path": "examples/helloworld-typescript/test/hello.test.ts",
"chars": 191,
"preview": "import { app } from '@eggjs/mock/bootstrap';\nimport { test } from 'vitest';\n\ntest('should GET /', async () => {\n await "
},
{
"path": "examples/helloworld-typescript/test/setup.ts",
"chars": 221,
"preview": "import { beforeAll, afterAll } from 'vitest';\n\n// https://vitest.dev/config/#setupfiles\n// export beforeAll and afterAll"
},
{
"path": "examples/helloworld-typescript/tsconfig.json",
"chars": 35,
"preview": "{\n \"extends\": \"@eggjs/tsconfig\"\n}\n"
},
{
"path": "examples/helloworld-typescript/tsdown.config.ts",
"chars": 224,
"preview": "import { defineConfig } from 'tsdown';\n\nexport default defineConfig({\n entry: ['app.ts', 'config/**/*.ts', 'app/**/*.ts"
},
{
"path": "examples/helloworld-typescript/vitest.config.ts",
"chars": 171,
"preview": "import { defineProject } from 'vitest/config';\n\nexport default defineProject({\n test: {\n include: ['test/**/*.test.t"
},
{
"path": "package.json",
"chars": 2909,
"preview": "{\n \"name\": \"@eggjs/monorepo\",\n \"version\": \"4.1.2-beta.5\",\n \"private\": true,\n \"description\": \"Eggjs framework monorep"
},
{
"path": "packages/cluster/.gitignore",
"chars": 190,
"preview": "/node_modules\ncoverage\n.logs\nlogs\nrun\n.tmp\n*.log\n.vscode\n.nyc_output\npackage-lock.json\n.package-lock.json\n.tshy*\n.eslint"
},
{
"path": "packages/cluster/CHANGELOG.md",
"chars": 16288,
"preview": "# Changelog\n\n> [!IMPORTANT]\n> Moving forwards we are using the GitHub releases page at <https://github.com/eggjs/egg/rel"
},
{
"path": "packages/cluster/LICENSE",
"chars": 1110,
"preview": "MIT License\n\nCopyright (c) 2017 Alibaba Group Holding Limited and other contributors.\n\nPermission is hereby granted, fre"
},
{
"path": "packages/cluster/README.md",
"chars": 3852,
"preview": "# @eggjs/cluster\n\n[![NPM version][npm-image]][npm-url]\n[![Known Vulnerabilities][snyk-image]][snyk-url]\n[![npm download]"
},
{
"path": "packages/cluster/package.json",
"chars": 1907,
"preview": "{\n \"name\": \"@eggjs/cluster\",\n \"version\": \"4.0.2-beta.5\",\n \"description\": \"cluster manager for egg\",\n \"keywords\": [\n "
},
{
"path": "packages/cluster/src/agent_worker.ts",
"chars": 2266,
"preview": "import { debuglog } from 'node:util';\n\nimport { importModule } from '@eggjs/utils';\nimport { EggConsoleLogger as Console"
},
{
"path": "packages/cluster/src/app_worker.ts",
"chars": 7330,
"preview": "import fs from 'node:fs';\nimport { createServer as createHttpServer, type Server } from 'node:http';\nimport { createServ"
},
{
"path": "packages/cluster/src/error/ClusterAgentWorkerError.ts",
"chars": 525,
"preview": "export class ClusterAgentWorkerError extends Error {\n id: number;\n /**\n * pid in process mode\n * tid in worker_thr"
},
{
"path": "packages/cluster/src/error/ClusterWorkerExceptionError.ts",
"chars": 437,
"preview": "export class ClusterWorkerExceptionError extends Error {\n count: {\n agent: number;\n worker: number;\n };\n\n const"
},
{
"path": "packages/cluster/src/error/index.ts",
"chars": 96,
"preview": "export * from './ClusterAgentWorkerError.ts';\nexport * from './ClusterWorkerExceptionError.ts';\n"
},
{
"path": "packages/cluster/src/index.ts",
"chars": 744,
"preview": "import { Master, type MasterOptions } from './master.ts';\nimport { type ClusterOptions, type ClusterHTTPSSecureOptions, "
},
{
"path": "packages/cluster/src/master.ts",
"chars": 21199,
"preview": "import fs from 'node:fs';\nimport net from 'node:net';\nimport os from 'node:os';\nimport path from 'node:path';\nimport uti"
},
{
"path": "packages/cluster/src/utils/messenger.ts",
"chars": 5191,
"preview": "import { debuglog } from 'node:util';\nimport workerThreads from 'node:worker_threads';\n\nimport type { Master } from '../"
},
{
"path": "packages/cluster/src/utils/mode/base/agent.ts",
"chars": 2495,
"preview": "import type { ChildProcess } from 'node:child_process';\nimport { EventEmitter } from 'node:events';\nimport { existsSync "
},
{
"path": "packages/cluster/src/utils/mode/base/app.ts",
"chars": 3394,
"preview": "import type { Worker as ClusterProcessWorker } from 'node:cluster';\nimport { EventEmitter } from 'node:events';\nimport {"
},
{
"path": "packages/cluster/src/utils/mode/impl/process/agent.ts",
"chars": 3679,
"preview": "import { fork, type ChildProcess, type ForkOptions } from 'node:child_process';\nimport { debuglog } from 'node:util';\n\ni"
},
{
"path": "packages/cluster/src/utils/mode/impl/process/app.ts",
"chars": 4530,
"preview": "import cluster, { type Worker as ClusterProcessWorker } from 'node:cluster';\nimport { debuglog } from 'node:util';\n\nimpo"
},
{
"path": "packages/cluster/src/utils/mode/impl/worker_threads/agent.ts",
"chars": 2792,
"preview": "import workerThreads, { type Worker } from 'node:worker_threads';\n\nimport { type Options as gracefulExitOptions } from '"
},
{
"path": "packages/cluster/src/utils/mode/impl/worker_threads/app.ts",
"chars": 4613,
"preview": "import { setTimeout as sleep } from 'node:timers/promises';\nimport { Worker as ThreadWorker, threadId, parentPort, type "
},
{
"path": "packages/cluster/src/utils/options.ts",
"chars": 5335,
"preview": "import assert from 'node:assert';\nimport fs from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\nimpo"
},
{
"path": "packages/cluster/src/utils/terminate.ts",
"chars": 2780,
"preview": "import { ChildProcess } from 'node:child_process';\nimport { once } from 'node:events';\nimport { setTimeout as sleep } fr"
},
{
"path": "packages/cluster/src/utils/worker_manager.ts",
"chars": 2090,
"preview": "import { EventEmitter } from 'node:events';\n\nimport { BaseAgentWorker } from './mode/base/agent.ts';\nimport { BaseAppWor"
},
{
"path": "packages/cluster/test/agent_worker.test.ts",
"chars": 5963,
"preview": "import { strict as assert } from 'node:assert';\nimport { readFile } from 'node:fs/promises';\nimport { scheduler } from '"
},
{
"path": "packages/cluster/test/app_worker.test.ts",
"chars": 10968,
"preview": "import { strict as assert } from 'node:assert';\nimport { rm } from 'node:fs/promises';\nimport { scheduler } from 'node:t"
},
{
"path": "packages/cluster/test/fixtures/apps/agent-debug-port/agent.js",
"chars": 77,
"preview": "module.exports = () => {\n console.log('agent argv: ', process.execArgv);\n};\n"
},
{
"path": "packages/cluster/test/fixtures/apps/agent-debug-port/inject1.js",
"chars": 33,
"preview": "console.log('@@inject1.js run');\n"
},
{
"path": "packages/cluster/test/fixtures/apps/agent-debug-port/package.json",
"chars": 33,
"preview": "{\n \"name\": \"agent-debug-port\"\n}\n"
},
{
"path": "packages/cluster/test/fixtures/apps/agent-die/agent.js",
"chars": 110,
"preview": "'use strict';\n\nprocess.on('message', function (msg) {\n if (msg.action === 'kill-agent') process.exit(1);\n});\n"
},
{
"path": "packages/cluster/test/fixtures/apps/agent-die/app.js",
"chars": 129,
"preview": "'use strict';\n\nmodule.exports = function (app) {\n app.messenger.on('agent-start', () => console.log('app get agent-star"
},
{
"path": "packages/cluster/test/fixtures/apps/agent-die/package.json",
"chars": 26,
"preview": "{\n \"name\": \"agent-die\"\n}\n"
},
{
"path": "packages/cluster/test/fixtures/apps/agent-die/start.js",
"chars": 184,
"preview": "'use strict';\n\nconst path = require('path');\n\nrequire('../../../../index').startCluster({\n baseDir: __dirname,\n eggPat"
},
{
"path": "packages/cluster/test/fixtures/apps/agent-die-on-forkapp/agent.js",
"chars": 138,
"preview": "'use strict';\n\nmodule.exports = () => {\n process.on('message', (msg) => {\n if (msg.action === 'kill-agent') process."
},
{
"path": "packages/cluster/test/fixtures/apps/agent-die-on-forkapp/app.js",
"chars": 163,
"preview": "'use strict';\n\nmodule.exports = function (app) {\n process.send({\n action: 'kill-agent',\n });\n setTimeout(app.ready"
},
{
"path": "packages/cluster/test/fixtures/apps/agent-die-on-forkapp/package.json",
"chars": 37,
"preview": "{\n \"name\": \"agent-die-on-forkapp\"\n}\n"
},
{
"path": "packages/cluster/test/fixtures/apps/agent-die-onboot/agent.js",
"chars": 52,
"preview": "'use strict';\n\nthrow new Error('app worker throw');\n"
},
{
"path": "packages/cluster/test/fixtures/apps/agent-die-onboot/app.js",
"chars": 57,
"preview": "'use strict';\n\nconsole.log('agent-error-but-app-start');\n"
},
{
"path": "packages/cluster/test/fixtures/apps/agent-die-onboot/package.json",
"chars": 26,
"preview": "{\n \"name\": \"agent-die\"\n}\n"
},
{
"path": "packages/cluster/test/fixtures/apps/agent-die-onboot/start.js",
"chars": 278,
"preview": "'use strict';\n\nconst path = require('path');\n\nrequire('../../../../index').startCluster({\n baseDir: __dirname,\n eggPat"
},
{
"path": "packages/cluster/test/fixtures/apps/agent-exit/agent.js",
"chars": 117,
"preview": "'use strict';\n\nmodule.exports = (agent) => {\n agent.messenger.on('egg-ready', () => {\n process.exit(1);\n });\n};\n"
},
{
"path": "packages/cluster/test/fixtures/apps/agent-exit/package.json",
"chars": 34,
"preview": "{\n \"name\": \"agent-start-error\"\n}\n"
},
{
"path": "packages/cluster/test/fixtures/apps/agent-start-error/agent.js",
"chars": 134,
"preview": "'use strict';\n\nmodule.exports = (agent) => {\n const done = agent.readyCallback('prepare-agent');\n done(new Error('mock"
},
{
"path": "packages/cluster/test/fixtures/apps/agent-start-error/package.json",
"chars": 34,
"preview": "{\n \"name\": \"agent-start-error\"\n}\n"
},
{
"path": "packages/cluster/test/fixtures/apps/agent-start-framework-error/agent.js",
"chars": 253,
"preview": "const { FrameworkBaseError } = require('@eggjs/errors');\nclass CustomError extends FrameworkBaseError {\n get module() {"
},
{
"path": "packages/cluster/test/fixtures/apps/agent-start-framework-error/package.json",
"chars": 44,
"preview": "{\n \"name\": \"agent-start-framework-error\"\n}\n"
},
{
"path": "packages/cluster/test/fixtures/apps/agent-start-framework-ready-error/agent.js",
"chars": 253,
"preview": "const { FrameworkBaseError } = require('@eggjs/errors');\n\nclass CustomError extends FrameworkBaseError {\n get module() "
},
{
"path": "packages/cluster/test/fixtures/apps/agent-start-framework-ready-error/package.json",
"chars": 50,
"preview": "{\n \"name\": \"agent-start-framework-ready-error\"\n}\n"
},
{
"path": "packages/cluster/test/fixtures/apps/agent-worker-threads/agent.js",
"chars": 148,
"preview": "'use strict';\n\nconst workerThreads = require('worker_threads');\n\nmodule.exports = () => {\n console.log('workerId: %d', "
},
{
"path": "packages/cluster/test/fixtures/apps/agent-worker-threads/config/plugin.js",
"chars": 293,
"preview": "// not support tegg plugins on worker_threads mode\nexports.teggEventbus = false;\nexports.tegg = false;\nexports.teggConfi"
},
{
"path": "packages/cluster/test/fixtures/apps/agent-worker-threads/package.json",
"chars": 37,
"preview": "{\n \"name\": \"agent-worker-threads\"\n}\n"
},
{
"path": "packages/cluster/test/fixtures/apps/agent-worker-threads-error/agent.js",
"chars": 149,
"preview": "'use strict';\n\nmodule.exports = (agent) => {\n const done = agent.readyCallback('prepare-agent');\n done(new Error('work"
},
{
"path": "packages/cluster/test/fixtures/apps/agent-worker-threads-error/package.json",
"chars": 43,
"preview": "{\n \"name\": \"agent-worker-threads-error\"\n}\n"
},
{
"path": "packages/cluster/test/fixtures/apps/app-die/app/router.js",
"chars": 156,
"preview": "module.exports = (app) => {\n app.get('/exit', (ctx) => {\n setTimeout(() => {\n throw new Error('exit');\n }, 1"
},
{
"path": "packages/cluster/test/fixtures/apps/app-die/config/config.default.js",
"chars": 42,
"preview": "'use strict';\n\nexports.keys = 'keys,foo';\n"
},
{
"path": "packages/cluster/test/fixtures/apps/app-die/package.json",
"chars": 24,
"preview": "{\n \"name\": \"app-die\"\n}\n"
},
{
"path": "packages/cluster/test/fixtures/apps/app-error-listeners/app/router.js",
"chars": 172,
"preview": "module.exports = (app) => {\n app.get('/', (ctx) => {\n ctx.body = {\n beforeReady: app.beforeReady,\n afterRe"
},
{
"path": "packages/cluster/test/fixtures/apps/app-error-listeners/app.js",
"chars": 157,
"preview": "'use strict';\n\nmodule.exports = function (app) {\n // before cluster ready\n app.ready(() => {\n app.beforeReady = app"
},
{
"path": "packages/cluster/test/fixtures/apps/app-error-listeners/config/config.default.js",
"chars": 38,
"preview": "'use strict';\n\nexports.keys = 'keys';\n"
},
{
"path": "packages/cluster/test/fixtures/apps/app-error-listeners/package.json",
"chars": 72,
"preview": "{\n \"name\": \"app-error-listeners\",\n \"chair\": {\n \"type\": \"ali\"\n }\n}\n"
},
{
"path": "packages/cluster/test/fixtures/apps/app-exit/app.js",
"chars": 113,
"preview": "'use strict';\n\nmodule.exports = (app) => {\n app.messenger.on('egg-ready', () => {\n process.exit(1);\n });\n};\n"
},
{
"path": "packages/cluster/test/fixtures/apps/app-exit/package.json",
"chars": 34,
"preview": "{\n \"name\": \"agent-start-error\"\n}\n"
},
{
"path": "packages/cluster/test/fixtures/apps/app-kill/app/router.js",
"chars": 242,
"preview": "module.exports = (app) => {\n app.get('/kill', (ctx) => {\n const signal = ctx.query.signal && ctx.query.signal.toUppe"
},
{
"path": "packages/cluster/test/fixtures/apps/app-kill/config/config.default.js",
"chars": 42,
"preview": "'use strict';\n\nexports.keys = 'keys,foo';\n"
},
{
"path": "packages/cluster/test/fixtures/apps/app-kill/package.json",
"chars": 25,
"preview": "{\n \"name\": \"app-kill\"\n}\n"
},
{
"path": "packages/cluster/test/fixtures/apps/app-listen-hostname/app/router.js",
"chars": 86,
"preview": "module.exports = (app) => {\n app.get('/', (ctx) => {\n ctx.body = 'done';\n });\n};\n"
},
{
"path": "packages/cluster/test/fixtures/apps/app-listen-hostname/app.js",
"chars": 125,
"preview": "'use strict';\n\nmodule.exports = (app) => {\n // don't use the port that egg-mock defined\n app._options.port = undefined"
},
{
"path": "packages/cluster/test/fixtures/apps/app-listen-hostname/config/config.default.js",
"chars": 177,
"preview": "'use strict';\n\nconst address = require('address');\n\nmodule.exports = {\n keys: '123',\n cluster: {\n listen: {\n p"
},
{
"path": "packages/cluster/test/fixtures/apps/app-listen-hostname/package.json",
"chars": 36,
"preview": "{\n \"name\": \"app-listen-hostname\"\n}\n"
},
{
"path": "packages/cluster/test/fixtures/apps/app-listen-path/app/router.js",
"chars": 86,
"preview": "module.exports = (app) => {\n app.get('/', (ctx) => {\n ctx.body = 'done';\n });\n};\n"
},
{
"path": "packages/cluster/test/fixtures/apps/app-listen-path/app.js",
"chars": 125,
"preview": "'use strict';\n\nmodule.exports = (app) => {\n // don't use the port that egg-mock defined\n app._options.port = undefined"
},
{
"path": "packages/cluster/test/fixtures/apps/app-listen-path/config/config.default.js",
"chars": 206,
"preview": "'use strict';\n\nconst path = require('path');\n\nmodule.exports = (app) => {\n return {\n keys: '123',\n cluster: {\n "
},
{
"path": "packages/cluster/test/fixtures/apps/app-listen-path/package.json",
"chars": 32,
"preview": "{\n \"name\": \"app-listen-port\"\n}\n"
},
{
"path": "packages/cluster/test/fixtures/apps/app-listen-port/app/router.js",
"chars": 160,
"preview": "module.exports = (app) => {\n app.get('/', (ctx) => {\n ctx.body = 'done';\n });\n\n app.get('/port', (ctx) => {\n ct"
},
{
"path": "packages/cluster/test/fixtures/apps/app-listen-port/app.js",
"chars": 125,
"preview": "'use strict';\n\nmodule.exports = (app) => {\n // don't use the port that egg-mock defined\n app._options.port = undefined"
},
{
"path": "packages/cluster/test/fixtures/apps/app-listen-port/config/config.default.js",
"chars": 95,
"preview": "module.exports = {\n keys: '123',\n cluster: {\n listen: {\n port: 17010,\n },\n },\n};\n"
},
{
"path": "packages/cluster/test/fixtures/apps/app-listen-port/package.json",
"chars": 32,
"preview": "{\n \"name\": \"app-listen-port\"\n}\n"
},
{
"path": "packages/cluster/test/fixtures/apps/app-listen-reusePort/app/router.js",
"chars": 160,
"preview": "module.exports = (app) => {\n app.get('/', (ctx) => {\n ctx.body = 'done';\n });\n\n app.get('/port', (ctx) => {\n ct"
},
{
"path": "packages/cluster/test/fixtures/apps/app-listen-reusePort/app.js",
"chars": 110,
"preview": "module.exports = (app) => {\n // don't use the port that egg-mock defined\n app._options.port = undefined;\n};\n"
},
{
"path": "packages/cluster/test/fixtures/apps/app-listen-reusePort/config/config.default.js",
"chars": 118,
"preview": "module.exports = {\n keys: '123',\n cluster: {\n listen: {\n port: 17010,\n reusePort: true,\n },\n },\n};\n"
},
{
"path": "packages/cluster/test/fixtures/apps/app-listen-reusePort/package.json",
"chars": 37,
"preview": "{\n \"name\": \"app-listen-reusePort\"\n}\n"
},
{
"path": "packages/cluster/test/fixtures/apps/app-listen-without-port/app.js",
"chars": 125,
"preview": "'use strict';\n\nmodule.exports = (app) => {\n // don't use the port that egg-mock defined\n app._options.port = undefined"
},
{
"path": "packages/cluster/test/fixtures/apps/app-listen-without-port/config/config.default.js",
"chars": 79,
"preview": "module.exports = {\n cluster: {\n listen: {\n port: null,\n },\n },\n};\n"
},
{
"path": "packages/cluster/test/fixtures/apps/app-listen-without-port/package.json",
"chars": 40,
"preview": "{\n \"name\": \"app-listen-without-port\"\n}\n"
},
{
"path": "packages/cluster/test/fixtures/apps/app-monitor/agent.js",
"chars": 122,
"preview": "'use strict';\n\nmodule.exports = () => {\n setTimeout(() => {\n process.send({ action: 'custom-agent' });\n }, 2000);\n}"
},
{
"path": "packages/cluster/test/fixtures/apps/app-monitor/package.json",
"chars": 28,
"preview": "{\n \"name\": \"app-monitor\"\n}\n"
},
{
"path": "packages/cluster/test/fixtures/apps/app-server/app/router.js",
"chars": 98,
"preview": "module.exports = (app) => {\n app.get('/', (ctx) => {\n ctx.body = ctx.app.serverEmit;\n });\n};\n"
},
{
"path": "packages/cluster/test/fixtures/apps/app-server/app.js",
"chars": 112,
"preview": "'use strict';\n\nmodule.exports = function (app) {\n app.on('server', () => {\n app.serverEmit = true;\n });\n};\n"
},
{
"path": "packages/cluster/test/fixtures/apps/app-server/config/config.default.js",
"chars": 37,
"preview": "'use strict';\n\nexports.keys = '123';\n"
},
{
"path": "packages/cluster/test/fixtures/apps/app-server/package.json",
"chars": 27,
"preview": "{\n \"name\": \"app-server\"\n}\n"
},
{
"path": "packages/cluster/test/fixtures/apps/app-start-error/app.js",
"chars": 128,
"preview": "'use strict';\n\nmodule.exports = (app) => {\n const done = app.readyCallback('prepare-app');\n done(new Error('mock error"
},
{
"path": "packages/cluster/test/fixtures/apps/app-start-error/package.json",
"chars": 32,
"preview": "{\n \"name\": \"app-start-error\"\n}\n"
},
{
"path": "packages/cluster/test/fixtures/apps/app-start-framework-error/app.js",
"chars": 253,
"preview": "const { FrameworkBaseError } = require('@eggjs/errors');\nclass CustomError extends FrameworkBaseError {\n get module() {"
},
{
"path": "packages/cluster/test/fixtures/apps/app-start-framework-error/package.json",
"chars": 42,
"preview": "{\n \"name\": \"app-start-framework-error\"\n}\n"
},
{
"path": "packages/cluster/test/fixtures/apps/app-start-framework-ready-error/app.js",
"chars": 253,
"preview": "const { FrameworkBaseError } = require('@eggjs/errors');\n\nclass CustomError extends FrameworkBaseError {\n get module() "
},
{
"path": "packages/cluster/test/fixtures/apps/app-start-framework-ready-error/package.json",
"chars": 42,
"preview": "{\n \"name\": \"app-start-framework-error\"\n}\n"
},
{
"path": "packages/cluster/test/fixtures/apps/app-start-timeout/app.js",
"chars": 128,
"preview": "'use strict';\n\nmodule.exports = function (app) {\n const done = app.readyCallback('app-timeout');\n setTimeout(done, 300"
},
{
"path": "packages/cluster/test/fixtures/apps/app-start-timeout/config/config.default.js",
"chars": 50,
"preview": "'use strict';\n\nexports.workerStartTimeout = 1000;\n"
},
{
"path": "packages/cluster/test/fixtures/apps/app-start-timeout/package.json",
"chars": 34,
"preview": "{\n \"name\": \"app-start-timeout\"\n}\n"
},
{
"path": "packages/cluster/test/fixtures/apps/before-close/agent.js",
"chars": 226,
"preview": "const { scheduler } = require('node:timers/promises');\n\nmodule.exports = (agent) => {\n agent.beforeClose(async () => {\n"
},
{
"path": "packages/cluster/test/fixtures/apps/before-close/app.js",
"chars": 218,
"preview": "const { scheduler } = require('node:timers/promises');\n\nmodule.exports = (app) => {\n app.beforeClose(async () => {\n "
},
{
"path": "packages/cluster/test/fixtures/apps/before-close/package.json",
"chars": 28,
"preview": "{\n \"name\": \"egg-cluster\"\n}\n"
},
{
"path": "packages/cluster/test/fixtures/apps/check-status/agent.js",
"chars": 290,
"preview": "'use strict';\n\nconst fs = require('fs');\nconst path = require('path');\n\nmodule.exports = (agent) => {\n if (fs.existsSyn"
},
{
"path": "packages/cluster/test/fixtures/apps/check-status/app.js",
"chars": 286,
"preview": "'use strict';\n\nconst fs = require('fs');\nconst path = require('path');\n\nmodule.exports = (app) => {\n if (fs.existsSync("
},
{
"path": "packages/cluster/test/fixtures/apps/check-status/package.json",
"chars": 26,
"preview": "{\n \"name\": \"agent-die\"\n}\n"
},
{
"path": "packages/cluster/test/fixtures/apps/cluster_mod_app/.gitignore",
"chars": 10,
"preview": "\nassembly/"
},
{
"path": "packages/cluster/test/fixtures/apps/cluster_mod_app/app/controller/home.js",
"chars": 57,
"preview": "exports.index = (ctx) => {\n ctx.body = 'hi cluster';\n};\n"
},
{
"path": "packages/cluster/test/fixtures/apps/cluster_mod_app/app/router.js",
"chars": 229,
"preview": "'use strict';\n\nmodule.exports = function (app) {\n // GET / 302 to /portal/i.htm\n app.redirect('/', '/portal/i.htm', 30"
},
{
"path": "packages/cluster/test/fixtures/apps/cluster_mod_app/config/config.default.js",
"chars": 37,
"preview": "'use strict';\n\nexports.keys = '123';\n"
},
{
"path": "packages/cluster/test/fixtures/apps/cluster_mod_app/package.json",
"chars": 32,
"preview": "{\n \"name\": \"cluster_mod_app\"\n}\n"
},
{
"path": "packages/cluster/test/fixtures/apps/cluster_mod_sticky/.gitignore",
"chars": 10,
"preview": "\nassembly/"
},
{
"path": "packages/cluster/test/fixtures/apps/cluster_mod_sticky/app/controller/home.js",
"chars": 57,
"preview": "exports.index = (ctx) => {\n ctx.body = 'hi cluster';\n};\n"
},
{
"path": "packages/cluster/test/fixtures/apps/cluster_mod_sticky/app/router.js",
"chars": 229,
"preview": "'use strict';\n\nmodule.exports = function (app) {\n // GET / 302 to /portal/i.htm\n app.redirect('/', '/portal/i.htm', 30"
},
{
"path": "packages/cluster/test/fixtures/apps/cluster_mod_sticky/app.js",
"chars": 274,
"preview": "'use strict';\n\nconst net = require('net');\n\nmodule.exports = (app) => {\n // don't use the port that egg-mock defined\n "
},
{
"path": "packages/cluster/test/fixtures/apps/cluster_mod_sticky/config/config.default.js",
"chars": 110,
"preview": "'use strict';\n\nmodule.exports = {\n keys: '123',\n cluster: {\n listen: {\n port: 17010,\n },\n },\n};\n"
},
{
"path": "packages/cluster/test/fixtures/apps/cluster_mod_sticky/package.json",
"chars": 35,
"preview": "{\n \"name\": \"cluster_mod_sticky\"\n}\n"
},
{
"path": "packages/cluster/test/fixtures/apps/custom-logger/agent.js",
"chars": 108,
"preview": "'use strict';\n\nmodule.exports = function (agent) {\n agent.loggers.monitorLogger.info('hello monitor!');\n};\n"
},
{
"path": "packages/cluster/test/fixtures/apps/custom-logger/config/config.default.js",
"chars": 261,
"preview": "'use strict';\n\nconst path = require('path');\n\nmodule.exports = (appInfo) => {\n return {\n customLogger: {\n monit"
},
{
"path": "packages/cluster/test/fixtures/apps/custom-logger/package.json",
"chars": 30,
"preview": "{\n \"name\": \"custom-logger\"\n}\n"
},
{
"path": "packages/cluster/test/fixtures/apps/debug-port/agent.js",
"chars": 106,
"preview": "'use strict';\n\nmodule.exports = () => {\n console.log('debug port of agent is %s', process.debugPort);\n};\n"
},
{
"path": "packages/cluster/test/fixtures/apps/debug-port/app.js",
"chars": 104,
"preview": "'use strict';\n\nmodule.exports = () => {\n console.log('debug port of app is %s', process.debugPort);\n};\n"
},
{
"path": "packages/cluster/test/fixtures/apps/debug-port/package.json",
"chars": 27,
"preview": "{\n \"name\": \"debug-port\"\n}\n"
},
{
"path": "packages/cluster/test/fixtures/apps/egg-ready/agent.js",
"chars": 245,
"preview": "'use strict';\n\nmodule.exports = function (agent) {\n agent.messenger.on('throw', () => {\n process.exit(1);\n });\n ag"
},
{
"path": "packages/cluster/test/fixtures/apps/egg-ready/app/router.js",
"chars": 276,
"preview": "module.exports = (app) => {\n app.get('/exception-app', (ctx) => {\n setTimeout(() => {\n throw new Error('error')"
},
{
"path": "packages/cluster/test/fixtures/apps/egg-ready/app.js",
"chars": 207,
"preview": "'use strict';\n\nconst cluster = require('cluster');\n\nmodule.exports = function (app) {\n app.messenger.on('egg-ready', ()"
},
{
"path": "packages/cluster/test/fixtures/apps/egg-ready/config/config.default.js",
"chars": 37,
"preview": "'use strict';\n\nexports.keys = '111';\n"
},
{
"path": "packages/cluster/test/fixtures/apps/egg-ready/package.json",
"chars": 26,
"preview": "{\n \"name\": \"egg-ready\"\n}\n"
},
{
"path": "packages/cluster/test/fixtures/apps/framework/agent.js",
"chars": 48,
"preview": "'use strict';\n\nmodule.exports = function () {};\n"
},
{
"path": "packages/cluster/test/fixtures/apps/framework/app.js",
"chars": 74,
"preview": "'use strict';\n\nmodule.exports = function (app) {\n app.framework = {};\n};\n"
},
{
"path": "packages/cluster/test/fixtures/apps/framework/config/plugin.js",
"chars": 160,
"preview": "'use strict';\n\nconst path = require('path');\n\nmodule.exports = {\n custom: {\n enable: true,\n path: path.join(__dir"
},
{
"path": "packages/cluster/test/fixtures/apps/framework/index.js",
"chars": 169,
"preview": "const { startCluster } = require('egg');\n\nexports.startCluster = startCluster;\nexports.Application = require('./lib/fram"
},
{
"path": "packages/cluster/test/fixtures/apps/framework/lib/agent.js",
"chars": 219,
"preview": "const path = require('path');\nconst { Agent } = require('egg');\n\nclass FrameworkAgent extends Agent {\n get [Symbol.for("
},
{
"path": "packages/cluster/test/fixtures/apps/framework/lib/framework.js",
"chars": 515,
"preview": "const path = require('path');\nconst egg = require('egg');\nconst Application = egg.Application;\nconst AppWorkerLoader = e"
}
]
// ... and 5935 more files (download for full content)
About this extraction
This page contains the full source code of the eggjs/egg GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 6135 files (11.6 MB), approximately 3.5M tokens, and a symbol index with 6359 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.