egg 3.29.0 → 4.0.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -1
- package/README.zh-CN.md +7 -5
- package/dist/commonjs/agent.d.ts +4 -0
- package/dist/commonjs/agent.js +10 -0
- package/dist/commonjs/app/extend/context.d.ts +2 -0
- package/dist/commonjs/app/extend/context.js +263 -0
- package/dist/commonjs/app/middleware/body_parser.d.ts +2 -0
- package/dist/commonjs/app/middleware/body_parser.js +8 -0
- package/dist/commonjs/app/middleware/meta.d.ts +11 -0
- package/dist/commonjs/app/middleware/meta.js +22 -0
- package/dist/commonjs/app/middleware/notfound.d.ts +8 -0
- package/dist/commonjs/app/middleware/notfound.js +31 -0
- package/dist/commonjs/app/middleware/override_method.d.ts +2 -0
- package/dist/commonjs/app/middleware/override_method.js +8 -0
- package/dist/commonjs/app/middleware/site_file.d.ts +7 -0
- package/dist/commonjs/app/middleware/site_file.js +59 -0
- package/dist/commonjs/config/config.default.d.ts +9 -0
- package/dist/commonjs/config/config.default.js +378 -0
- package/dist/commonjs/config/config.local.d.ts +8 -0
- package/dist/commonjs/config/config.local.js +12 -0
- package/dist/commonjs/config/config.unittest.d.ts +7 -0
- package/dist/commonjs/config/config.unittest.js +11 -0
- package/dist/commonjs/config/plugin.d.ts +122 -0
- package/dist/commonjs/config/plugin.js +125 -0
- package/dist/commonjs/index.d.ts +61 -0
- package/dist/commonjs/index.js +89 -0
- package/dist/commonjs/lib/agent.d.ts +19 -0
- package/dist/commonjs/lib/agent.js +58 -0
- package/dist/commonjs/lib/application.d.ts +66 -0
- package/dist/commonjs/lib/application.js +281 -0
- package/dist/commonjs/lib/core/base_context_class.d.ts +14 -0
- package/dist/commonjs/lib/core/base_context_class.js +22 -0
- package/dist/commonjs/lib/core/base_context_logger.d.ts +36 -0
- package/dist/commonjs/lib/core/base_context_logger.js +64 -0
- package/dist/commonjs/lib/core/base_hook_class.d.ts +11 -0
- package/dist/commonjs/lib/core/base_hook_class.js +30 -0
- package/dist/commonjs/lib/core/context_httpclient.d.ts +16 -0
- package/dist/commonjs/lib/core/context_httpclient.js +30 -0
- package/dist/commonjs/lib/core/httpclient.d.ts +14 -0
- package/dist/commonjs/lib/core/httpclient.js +40 -0
- package/dist/commonjs/lib/core/logger.d.ts +3 -0
- package/dist/commonjs/lib/core/logger.js +40 -0
- package/dist/commonjs/lib/core/messenger/IMessenger.d.ts +50 -0
- package/dist/commonjs/lib/core/messenger/IMessenger.js +3 -0
- package/dist/commonjs/lib/core/messenger/index.d.ts +7 -0
- package/dist/commonjs/lib/core/messenger/index.js +14 -0
- package/dist/commonjs/lib/core/messenger/ipc.d.ts +57 -0
- package/dist/commonjs/lib/core/messenger/ipc.js +126 -0
- package/dist/commonjs/lib/core/messenger/local.d.ts +61 -0
- package/dist/commonjs/lib/core/messenger/local.js +134 -0
- package/dist/commonjs/lib/core/singleton.d.ts +23 -0
- package/dist/commonjs/lib/core/singleton.js +120 -0
- package/dist/commonjs/lib/core/utils.d.ts +2 -0
- package/dist/commonjs/lib/core/utils.js +77 -0
- package/dist/commonjs/lib/egg.d.ts +271 -0
- package/dist/commonjs/lib/egg.js +613 -0
- package/dist/commonjs/lib/loader/AgentWorkerLoader.d.ts +12 -0
- package/dist/commonjs/lib/loader/AgentWorkerLoader.js +24 -0
- package/dist/commonjs/lib/loader/AppWorkerLoader.d.ts +17 -0
- package/dist/commonjs/lib/loader/AppWorkerLoader.js +43 -0
- package/dist/commonjs/lib/loader/EggApplicationLoader.d.ts +4 -0
- package/dist/commonjs/lib/loader/EggApplicationLoader.js +8 -0
- package/dist/commonjs/lib/loader/index.d.ts +3 -0
- package/dist/commonjs/lib/loader/index.js +22 -0
- package/dist/commonjs/lib/start.d.ts +15 -0
- package/dist/commonjs/lib/start.js +49 -0
- package/dist/commonjs/lib/type.d.ts +296 -0
- package/dist/commonjs/lib/type.js +3 -0
- package/dist/commonjs/package.json +3 -0
- package/dist/esm/agent.d.ts +4 -0
- package/dist/esm/agent.js +7 -0
- package/dist/esm/app/extend/context.d.ts +2 -0
- package/dist/esm/app/extend/context.js +258 -0
- package/dist/esm/app/middleware/body_parser.d.ts +2 -0
- package/dist/esm/app/middleware/body_parser.js +3 -0
- package/dist/esm/app/middleware/meta.d.ts +11 -0
- package/dist/esm/app/middleware/meta.js +20 -0
- package/dist/esm/app/middleware/notfound.d.ts +8 -0
- package/dist/esm/app/middleware/notfound.js +29 -0
- package/dist/esm/app/middleware/override_method.d.ts +2 -0
- package/dist/esm/app/middleware/override_method.js +3 -0
- package/dist/esm/app/middleware/site_file.d.ts +7 -0
- package/dist/esm/app/middleware/site_file.js +54 -0
- package/dist/esm/config/config.default.d.ts +9 -0
- package/dist/esm/config/config.default.js +373 -0
- package/dist/esm/config/config.local.d.ts +8 -0
- package/dist/esm/config/config.local.js +10 -0
- package/dist/esm/config/config.unittest.d.ts +7 -0
- package/dist/esm/config/config.unittest.js +9 -0
- package/dist/esm/config/favicon.png +0 -0
- package/dist/esm/config/plugin.d.ts +122 -0
- package/dist/esm/config/plugin.js +123 -0
- package/dist/esm/index.d.ts +61 -0
- package/dist/esm/index.js +65 -0
- package/dist/esm/lib/agent.d.ts +19 -0
- package/dist/esm/lib/agent.js +54 -0
- package/dist/esm/lib/application.d.ts +66 -0
- package/dist/esm/lib/application.js +274 -0
- package/dist/esm/lib/core/base_context_class.d.ts +14 -0
- package/dist/esm/lib/core/base_context_class.js +18 -0
- package/dist/esm/lib/core/base_context_logger.d.ts +36 -0
- package/dist/esm/lib/core/base_context_logger.js +60 -0
- package/dist/esm/lib/core/base_hook_class.d.ts +11 -0
- package/dist/esm/lib/core/base_hook_class.js +23 -0
- package/dist/esm/lib/core/context_httpclient.d.ts +16 -0
- package/dist/esm/lib/core/context_httpclient.js +26 -0
- package/dist/esm/lib/core/httpclient.d.ts +14 -0
- package/dist/esm/lib/core/httpclient.js +33 -0
- package/dist/esm/lib/core/logger.d.ts +3 -0
- package/dist/esm/lib/core/logger.js +37 -0
- package/dist/esm/lib/core/messenger/IMessenger.d.ts +50 -0
- package/dist/esm/lib/core/messenger/IMessenger.js +2 -0
- package/dist/esm/lib/core/messenger/index.d.ts +7 -0
- package/dist/esm/lib/core/messenger/index.js +11 -0
- package/dist/esm/lib/core/messenger/ipc.d.ts +57 -0
- package/dist/esm/lib/core/messenger/ipc.js +119 -0
- package/dist/esm/lib/core/messenger/local.d.ts +61 -0
- package/dist/esm/lib/core/messenger/local.js +127 -0
- package/dist/esm/lib/core/singleton.d.ts +23 -0
- package/dist/esm/lib/core/singleton.js +113 -0
- package/dist/esm/lib/core/utils.d.ts +2 -0
- package/dist/esm/lib/core/utils.js +70 -0
- package/dist/esm/lib/egg.d.ts +271 -0
- package/dist/esm/lib/egg.js +573 -0
- package/dist/esm/lib/loader/AgentWorkerLoader.d.ts +12 -0
- package/dist/esm/lib/loader/AgentWorkerLoader.js +20 -0
- package/dist/esm/lib/loader/AppWorkerLoader.d.ts +17 -0
- package/dist/esm/lib/loader/AppWorkerLoader.js +39 -0
- package/dist/esm/lib/loader/EggApplicationLoader.d.ts +4 -0
- package/dist/esm/lib/loader/EggApplicationLoader.js +4 -0
- package/dist/esm/lib/loader/index.d.ts +3 -0
- package/dist/esm/lib/loader/index.js +4 -0
- package/dist/esm/lib/start.d.ts +15 -0
- package/dist/esm/lib/start.js +43 -0
- package/dist/esm/lib/type.d.ts +296 -0
- package/dist/esm/lib/type.js +2 -0
- package/dist/esm/package.json +3 -0
- package/dist/package.json +4 -0
- package/package.json +87 -72
- package/src/agent.ts +7 -0
- package/{app/extend/context.js → src/app/extend/context.ts} +19 -23
- package/src/app/middleware/body_parser.ts +3 -0
- package/{app/middleware/meta.js → src/app/middleware/meta.ts} +12 -4
- package/{app/middleware/notfound.js → src/app/middleware/notfound.ts} +9 -3
- package/src/app/middleware/override_method.ts +3 -0
- package/src/app/middleware/site_file.ts +70 -0
- package/{config/config.default.js → src/config/config.default.ts} +24 -45
- package/src/config/config.local.ts +11 -0
- package/src/config/config.unittest.ts +10 -0
- package/src/config/favicon.png +0 -0
- package/{config/plugin.js → src/config/plugin.ts} +1 -3
- package/src/index.ts +78 -0
- package/src/lib/agent.ts +66 -0
- package/{lib/application.js → src/lib/application.ts} +79 -120
- package/src/lib/core/base_context_class.ts +21 -0
- package/src/lib/core/base_context_logger.ts +67 -0
- package/src/lib/core/base_hook_class.ts +30 -0
- package/src/lib/core/context_httpclient.ts +33 -0
- package/src/lib/core/httpclient.ts +52 -0
- package/src/lib/core/logger.ts +42 -0
- package/src/lib/core/messenger/IMessenger.ts +58 -0
- package/src/lib/core/messenger/index.ts +15 -0
- package/{lib/core/messenger/ipc.js → src/lib/core/messenger/ipc.ts} +24 -29
- package/{lib/core/messenger/local.js → src/lib/core/messenger/local.ts} +27 -21
- package/{lib/core/singleton.js → src/lib/core/singleton.ts} +56 -33
- package/src/lib/core/utils.ts +77 -0
- package/{lib/egg.js → src/lib/egg.ts} +262 -219
- package/src/lib/loader/AgentWorkerLoader.ts +21 -0
- package/src/lib/loader/AppWorkerLoader.ts +42 -0
- package/src/lib/loader/EggApplicationLoader.ts +5 -0
- package/src/lib/loader/index.ts +3 -0
- package/src/lib/start.ts +56 -0
- package/src/lib/type.ts +336 -0
- package/CHANGELOG.md +0 -2395
- package/History.md +0 -52
- package/agent.js +0 -11
- package/app/middleware/body_parser.js +0 -3
- package/app/middleware/override_method.js +0 -3
- package/app/middleware/site_file.js +0 -31
- package/config/config.local.js +0 -7
- package/config/config.unittest.js +0 -8
- package/index.d.ts +0 -1288
- package/index.js +0 -68
- package/lib/agent.js +0 -95
- package/lib/core/base_context_class.js +0 -20
- package/lib/core/base_context_logger.js +0 -64
- package/lib/core/base_hook_class.js +0 -31
- package/lib/core/context_httpclient.js +0 -26
- package/lib/core/dnscache_httpclient.js +0 -93
- package/lib/core/httpclient.js +0 -119
- package/lib/core/httpclient_next.js +0 -80
- package/lib/core/logger.js +0 -35
- package/lib/core/messenger/index.js +0 -14
- package/lib/core/utils.js +0 -73
- package/lib/loader/agent_worker_loader.js +0 -27
- package/lib/loader/app_worker_loader.js +0 -48
- package/lib/loader/index.js +0 -5
- package/lib/start.js +0 -39
- /package/{config → dist/commonjs/config}/favicon.png +0 -0
- /package/{app → src/app}/extend/helper.js +0 -0
- /package/{app → src/app}/extend/request.js +0 -0
- /package/{app → src/app}/extend/response.js +0 -0
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
import { performance } from 'node:perf_hooks';
|
|
2
|
+
import delegate from 'delegates';
|
|
3
|
+
import { assign } from 'utility';
|
|
4
|
+
import { utils } from '@eggjs/core';
|
|
5
|
+
const HELPER = Symbol('Context#helper');
|
|
6
|
+
const LOCALS = Symbol('Context#locals');
|
|
7
|
+
const LOCALS_LIST = Symbol('Context#localsList');
|
|
8
|
+
const COOKIES = Symbol('Context#cookies');
|
|
9
|
+
const CONTEXT_LOGGERS = Symbol('Context#logger');
|
|
10
|
+
const CONTEXT_HTTPCLIENT = Symbol('Context#httpclient');
|
|
11
|
+
const CONTEXT_ROUTER = Symbol('Context#router');
|
|
12
|
+
const Context = {
|
|
13
|
+
/**
|
|
14
|
+
* Get the current visitor's cookies.
|
|
15
|
+
*/
|
|
16
|
+
get cookies() {
|
|
17
|
+
if (!this[COOKIES]) {
|
|
18
|
+
this[COOKIES] = new this.app.ContextCookies(this, this.app.keys, this.app.config.cookies);
|
|
19
|
+
}
|
|
20
|
+
return this[COOKIES];
|
|
21
|
+
},
|
|
22
|
+
/**
|
|
23
|
+
* Get a wrapper httpclient instance contain ctx in the hold request process
|
|
24
|
+
*
|
|
25
|
+
* @return {ContextHttpClient} the wrapper httpclient instance
|
|
26
|
+
*/
|
|
27
|
+
get httpclient() {
|
|
28
|
+
if (!this[CONTEXT_HTTPCLIENT]) {
|
|
29
|
+
this[CONTEXT_HTTPCLIENT] = new this.app.ContextHttpClient(this);
|
|
30
|
+
}
|
|
31
|
+
return this[CONTEXT_HTTPCLIENT];
|
|
32
|
+
},
|
|
33
|
+
/**
|
|
34
|
+
* Shortcut for httpclient.curl
|
|
35
|
+
*
|
|
36
|
+
* @function Context#curl
|
|
37
|
+
* @param {String|Object} url - request url address.
|
|
38
|
+
* @param {Object} [options] - options for request.
|
|
39
|
+
* @return {Object} see {@link ContextHttpClient#curl}
|
|
40
|
+
*/
|
|
41
|
+
curl(url, options) {
|
|
42
|
+
return this.httpclient.curl(url, options);
|
|
43
|
+
},
|
|
44
|
+
/**
|
|
45
|
+
* Alias to {@link Application#router}
|
|
46
|
+
*
|
|
47
|
+
* @member {Router} Context#router
|
|
48
|
+
* @since 1.0.0
|
|
49
|
+
* @example
|
|
50
|
+
* ```js
|
|
51
|
+
* this.router.pathFor('post', { id: 12 });
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
get router() {
|
|
55
|
+
if (!this[CONTEXT_ROUTER]) {
|
|
56
|
+
this[CONTEXT_ROUTER] = this.app.router;
|
|
57
|
+
}
|
|
58
|
+
return this[CONTEXT_ROUTER];
|
|
59
|
+
},
|
|
60
|
+
/**
|
|
61
|
+
* Set router to Context, only use on EggRouter
|
|
62
|
+
* @param {EggRouter} val router instance
|
|
63
|
+
*/
|
|
64
|
+
set router(val) {
|
|
65
|
+
this[CONTEXT_ROUTER] = val;
|
|
66
|
+
},
|
|
67
|
+
/**
|
|
68
|
+
* Get helper instance from {@link Application#Helper}
|
|
69
|
+
*
|
|
70
|
+
* @member {Helper} Context#helper
|
|
71
|
+
* @since 1.0.0
|
|
72
|
+
*/
|
|
73
|
+
get helper() {
|
|
74
|
+
if (!this[HELPER]) {
|
|
75
|
+
this[HELPER] = new this.app.Helper(this);
|
|
76
|
+
}
|
|
77
|
+
return this[HELPER];
|
|
78
|
+
},
|
|
79
|
+
/**
|
|
80
|
+
* Wrap app.loggers with context information,
|
|
81
|
+
* if a custom logger is defined by naming aLogger, then you can `ctx.getLogger('aLogger')`
|
|
82
|
+
*
|
|
83
|
+
* @param {String} name - logger name
|
|
84
|
+
* @return {Logger} logger
|
|
85
|
+
*/
|
|
86
|
+
getLogger(name) {
|
|
87
|
+
if (this.app.config.logger.enableFastContextLogger) {
|
|
88
|
+
return this.app.getLogger(name);
|
|
89
|
+
}
|
|
90
|
+
let cache = this[CONTEXT_LOGGERS];
|
|
91
|
+
if (!cache) {
|
|
92
|
+
cache = this[CONTEXT_LOGGERS] = {};
|
|
93
|
+
}
|
|
94
|
+
// read from cache
|
|
95
|
+
if (cache[name])
|
|
96
|
+
return cache[name];
|
|
97
|
+
// get no exist logger
|
|
98
|
+
const appLogger = this.app.getLogger(name);
|
|
99
|
+
if (!appLogger)
|
|
100
|
+
return null;
|
|
101
|
+
// write to cache
|
|
102
|
+
cache[name] = new this.app.ContextLogger(this, appLogger);
|
|
103
|
+
return cache[name];
|
|
104
|
+
},
|
|
105
|
+
/**
|
|
106
|
+
* Logger for Application, wrapping app.coreLogger with context infomation
|
|
107
|
+
*
|
|
108
|
+
* @member {ContextLogger} Context#logger
|
|
109
|
+
* @since 1.0.0
|
|
110
|
+
* @example
|
|
111
|
+
* ```js
|
|
112
|
+
* this.logger.info('some request data: %j', this.request.body);
|
|
113
|
+
* this.logger.warn('WARNING!!!!');
|
|
114
|
+
* ```
|
|
115
|
+
*/
|
|
116
|
+
get logger() {
|
|
117
|
+
return this.getLogger('logger');
|
|
118
|
+
},
|
|
119
|
+
/**
|
|
120
|
+
* Logger for frameworks and plugins,
|
|
121
|
+
* wrapping app.coreLogger with context infomation
|
|
122
|
+
*
|
|
123
|
+
* @member {ContextLogger} Context#coreLogger
|
|
124
|
+
* @since 1.0.0
|
|
125
|
+
*/
|
|
126
|
+
get coreLogger() {
|
|
127
|
+
return this.getLogger('coreLogger');
|
|
128
|
+
},
|
|
129
|
+
/**
|
|
130
|
+
* locals is an object for view, you can use `app.locals` and `ctx.locals` to set variables,
|
|
131
|
+
* which will be used as data when view is rendering.
|
|
132
|
+
* The difference between `app.locals` and `ctx.locals` is the context level, `app.locals` is global level, and `ctx.locals` is request level. when you get `ctx.locals`, it will merge `app.locals`.
|
|
133
|
+
*
|
|
134
|
+
* when you set locals, only object is available
|
|
135
|
+
*
|
|
136
|
+
* ```js
|
|
137
|
+
* this.locals = {
|
|
138
|
+
* a: 1
|
|
139
|
+
* };
|
|
140
|
+
* this.locals = {
|
|
141
|
+
* b: 1
|
|
142
|
+
* };
|
|
143
|
+
* this.locals.c = 1;
|
|
144
|
+
* console.log(this.locals);
|
|
145
|
+
* {
|
|
146
|
+
* a: 1,
|
|
147
|
+
* b: 1,
|
|
148
|
+
* c: 1,
|
|
149
|
+
* };
|
|
150
|
+
* ```
|
|
151
|
+
*
|
|
152
|
+
* `ctx.locals` has cache, it only merges `app.locals` once in one request.
|
|
153
|
+
*
|
|
154
|
+
* @member {Object} Context#locals
|
|
155
|
+
*/
|
|
156
|
+
get locals() {
|
|
157
|
+
if (!this[LOCALS]) {
|
|
158
|
+
this[LOCALS] = assign({}, this.app.locals);
|
|
159
|
+
}
|
|
160
|
+
if (this[LOCALS_LIST] && this[LOCALS_LIST].length) {
|
|
161
|
+
assign(this[LOCALS], this[LOCALS_LIST]);
|
|
162
|
+
this[LOCALS_LIST] = null;
|
|
163
|
+
}
|
|
164
|
+
return this[LOCALS];
|
|
165
|
+
},
|
|
166
|
+
set locals(val) {
|
|
167
|
+
if (!this[LOCALS_LIST]) {
|
|
168
|
+
this[LOCALS_LIST] = [];
|
|
169
|
+
}
|
|
170
|
+
this[LOCALS_LIST].push(val);
|
|
171
|
+
},
|
|
172
|
+
/**
|
|
173
|
+
* alias to {@link Context#locals}, compatible with koa that use this variable
|
|
174
|
+
* @member {Object} state
|
|
175
|
+
* @see Context#locals
|
|
176
|
+
*/
|
|
177
|
+
get state() {
|
|
178
|
+
return this.locals;
|
|
179
|
+
},
|
|
180
|
+
set state(val) {
|
|
181
|
+
this.locals = val;
|
|
182
|
+
},
|
|
183
|
+
/**
|
|
184
|
+
* Run async function in the background
|
|
185
|
+
* @param {Function} scope - the first args is ctx
|
|
186
|
+
* ```js
|
|
187
|
+
* this.body = 'hi';
|
|
188
|
+
*
|
|
189
|
+
* this.runInBackground(async ctx => {
|
|
190
|
+
* await ctx.mysql.query(sql);
|
|
191
|
+
* await ctx.curl(url);
|
|
192
|
+
* });
|
|
193
|
+
* ```
|
|
194
|
+
*/
|
|
195
|
+
runInBackground(scope) {
|
|
196
|
+
// try to use custom function name first
|
|
197
|
+
/* istanbul ignore next */
|
|
198
|
+
const taskName = Reflect.get(scope, '_name') || scope.name || utils.getCalleeFromStack(true);
|
|
199
|
+
this._runInBackground(scope, taskName);
|
|
200
|
+
},
|
|
201
|
+
// let plugins or frameworks to reuse _runInBackground in some cases.
|
|
202
|
+
// e.g.: https://github.com/eggjs/egg-mock/pull/78
|
|
203
|
+
_runInBackground(scope, taskName) {
|
|
204
|
+
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
205
|
+
const ctx = this;
|
|
206
|
+
const start = performance.now();
|
|
207
|
+
// use setImmediate to ensure all sync logic will run async
|
|
208
|
+
return new Promise(resolve => setImmediate(resolve))
|
|
209
|
+
.then(() => scope(ctx))
|
|
210
|
+
.then(() => {
|
|
211
|
+
ctx.coreLogger.info('[egg:background] task:%s success (%dms)', taskName, Math.floor((performance.now() - start) * 1000) / 1000);
|
|
212
|
+
})
|
|
213
|
+
.catch(err => {
|
|
214
|
+
// background task process log
|
|
215
|
+
ctx.coreLogger.info('[egg:background] task:%s fail (%dms)', taskName, Math.floor((performance.now() - start) * 1000) / 1000);
|
|
216
|
+
// emit error when promise catch, and set err.runInBackground flag
|
|
217
|
+
err.runInBackground = true;
|
|
218
|
+
ctx.app.emit('error', err, ctx);
|
|
219
|
+
});
|
|
220
|
+
},
|
|
221
|
+
};
|
|
222
|
+
/**
|
|
223
|
+
* Context delegation.
|
|
224
|
+
*/
|
|
225
|
+
delegate(Context, 'request')
|
|
226
|
+
/**
|
|
227
|
+
* @member {Boolean} Context#acceptJSON
|
|
228
|
+
* @see Request#acceptJSON
|
|
229
|
+
* @since 1.0.0
|
|
230
|
+
*/
|
|
231
|
+
.getter('acceptJSON')
|
|
232
|
+
/**
|
|
233
|
+
* @member {Array} Context#queries
|
|
234
|
+
* @see Request#queries
|
|
235
|
+
* @since 1.0.0
|
|
236
|
+
*/
|
|
237
|
+
.getter('queries')
|
|
238
|
+
/**
|
|
239
|
+
* @member {Boolean} Context#accept
|
|
240
|
+
* @see Request#accept
|
|
241
|
+
* @since 1.0.0
|
|
242
|
+
*/
|
|
243
|
+
.getter('accept')
|
|
244
|
+
/**
|
|
245
|
+
* @member {string} Context#ip
|
|
246
|
+
* @see Request#ip
|
|
247
|
+
* @since 1.0.0
|
|
248
|
+
*/
|
|
249
|
+
.access('ip');
|
|
250
|
+
delegate(Context, 'response')
|
|
251
|
+
/**
|
|
252
|
+
* @member {Number} Context#realStatus
|
|
253
|
+
* @see Response#realStatus
|
|
254
|
+
* @since 1.0.0
|
|
255
|
+
*/
|
|
256
|
+
.access('realStatus');
|
|
257
|
+
export default Context;
|
|
258
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcHAvZXh0ZW5kL2NvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sUUFBUSxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFcEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDeEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDeEMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7QUFDakQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFDMUMsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDakQsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztBQUN4RCxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUVoRCxNQUFNLE9BQU8sR0FBRztJQUNkOztPQUVHO0lBQ0gsSUFBSSxPQUFPO1FBQ1QsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1RixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFD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
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import bodyparser from 'koa-bodyparser';
|
|
2
|
+
export default bodyparser;
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9keV9wYXJzZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBwL21pZGRsZXdhcmUvYm9keV9wYXJzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxVQUFVLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEMsZUFBZSxVQUFVLENBQUMifQ==
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* meta middleware, should be the first middleware
|
|
3
|
+
*/
|
|
4
|
+
import type { EggCoreContext } from '@eggjs/core';
|
|
5
|
+
import type { Next } from '../../lib/type.js';
|
|
6
|
+
export interface MetaMiddlewareOptions {
|
|
7
|
+
enable: boolean;
|
|
8
|
+
logging: boolean;
|
|
9
|
+
}
|
|
10
|
+
declare const _default: (options: MetaMiddlewareOptions) => (ctx: EggCoreContext, next: Next) => Promise<void>;
|
|
11
|
+
export default _default;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* meta middleware, should be the first middleware
|
|
3
|
+
*/
|
|
4
|
+
import { performance } from 'node:perf_hooks';
|
|
5
|
+
export default (options) => {
|
|
6
|
+
return async function meta(ctx, next) {
|
|
7
|
+
if (options.logging) {
|
|
8
|
+
ctx.coreLogger.info('[meta] request started, host: %s, user-agent: %s', ctx.host, ctx.header['user-agent']);
|
|
9
|
+
}
|
|
10
|
+
await next();
|
|
11
|
+
// total response time header
|
|
12
|
+
if (ctx.performanceStarttime) {
|
|
13
|
+
ctx.set('x-readtime', Math.floor((performance.now() - ctx.performanceStarttime) * 1000) / 1000);
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
ctx.set('x-readtime', Date.now() - ctx.starttime);
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcHAvbWlkZGxld2FyZS9tZXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBUzlDLGVBQWUsQ0FBQyxPQUE4QixFQUFFLEVBQUU7SUFDaEQsT0FBTyxLQUFLLFVBQVUsSUFBSSxDQUFDLEdBQW1CLEVBQUUsSUFBVTtRQUN4RCxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNwQixHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxrREFBa0QsRUFDcEUsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFDeEMsQ0FBQztRQUNELE1BQU0sSUFBSSxFQUFFLENBQUM7UUFDYiw2QkFBNkI7UUFDN0IsSUFBSSxHQUFHLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUM3QixHQUFHLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ2xHLENBQUM7YUFBTSxDQUFDO1lBQ04sR0FBRyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNwRCxDQUFDO0lBQ0gsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDIn0=
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { EggCoreContext } from '@eggjs/core';
|
|
2
|
+
import type { Next } from '../../lib/type.js';
|
|
3
|
+
export interface NotFoundMiddlewareOptions {
|
|
4
|
+
enable: boolean;
|
|
5
|
+
pageUrl: string;
|
|
6
|
+
}
|
|
7
|
+
declare const _default: (options: NotFoundMiddlewareOptions) => (ctx: EggCoreContext, next: Next) => Promise<void>;
|
|
8
|
+
export default _default;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export default (options) => {
|
|
2
|
+
return async function notfound(ctx, next) {
|
|
3
|
+
await next();
|
|
4
|
+
if (ctx.status !== 404 || ctx.body) {
|
|
5
|
+
return;
|
|
6
|
+
}
|
|
7
|
+
// set status first, make sure set body not set status
|
|
8
|
+
ctx.status = 404;
|
|
9
|
+
if (ctx.acceptJSON) {
|
|
10
|
+
ctx.body = {
|
|
11
|
+
message: 'Not Found',
|
|
12
|
+
};
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
const notFoundHtml = '<h1>404 Not Found</h1>';
|
|
16
|
+
// notfound handler is unimplemented
|
|
17
|
+
if (options.pageUrl && ctx.path === options.pageUrl) {
|
|
18
|
+
ctx.body = `${notFoundHtml}<p><pre><code>config.notfound.pageUrl(${options.pageUrl})</code></pre> is unimplemented</p>`;
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
if (options.pageUrl) {
|
|
22
|
+
ctx.realStatus = 404;
|
|
23
|
+
ctx.redirect(options.pageUrl);
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
ctx.body = notFoundHtml;
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90Zm91bmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBwL21pZGRsZXdhcmUvbm90Zm91bmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBUUEsZUFBZSxDQUFDLE9BQWtDLEVBQUUsRUFBRTtJQUNwRCxPQUFPLEtBQUssVUFBVSxRQUFRLENBQUMsR0FBbUIsRUFBRSxJQUFVO1FBQzVELE1BQU0sSUFBSSxFQUFFLENBQUM7UUFFYixJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNuQyxPQUFPO1FBQ1QsQ0FBQztRQUVELHNEQUFzRDtRQUN0RCxHQUFHLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztRQUVqQixJQUFJLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNuQixHQUFHLENBQUMsSUFBSSxHQUFHO2dCQUNULE9BQU8sRUFBRSxXQUFXO2FBQ3JCLENBQUM7WUFDRixPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sWUFBWSxHQUFHLHdCQUF3QixDQUFDO1FBRTlDLG9DQUFvQztRQUNwQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDcEQsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLFlBQVkseUNBQXlDLE9BQU8sQ0FBQyxPQUFPLHFDQUFxQyxDQUFDO1lBQ3hILE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDcEIsR0FBRyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7WUFDckIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDOUIsT0FBTztRQUNULENBQUM7UUFDRCxHQUFHLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FBQztJQUMxQixDQUFDLENBQUM7QUFDSixDQUFDLENBQUMifQ==
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import override from 'koa-override';
|
|
2
|
+
export default override;
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcnJpZGVfbWV0aG9kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwcC9taWRkbGV3YXJlL292ZXJyaWRlX21ldGhvZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFFBQVEsTUFBTSxjQUFjLENBQUM7QUFFcEMsZUFBZSxRQUFRLENBQUMifQ==
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { EggCoreContext } from '@eggjs/core';
|
|
2
|
+
export type SiteFileContentFun = (ctx: EggCoreContext) => Promise<Buffer | string>;
|
|
3
|
+
export interface SiteFileMiddlewareOptions {
|
|
4
|
+
enable: boolean;
|
|
5
|
+
cacheControl: string;
|
|
6
|
+
[key: string]: string | Buffer | boolean | SiteFileContentFun | URL;
|
|
7
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { fileURLToPath } from 'node:url';
|
|
3
|
+
import { readFile } from 'node:fs/promises';
|
|
4
|
+
const BUFFER_CACHE = Symbol('siteFile URL buffer cache');
|
|
5
|
+
module.exports = (options) => {
|
|
6
|
+
return async function siteFile(ctx, next) {
|
|
7
|
+
if (ctx.method !== 'HEAD' && ctx.method !== 'GET') {
|
|
8
|
+
return next();
|
|
9
|
+
}
|
|
10
|
+
/* istanbul ignore if */
|
|
11
|
+
if (ctx.path[0] !== '/') {
|
|
12
|
+
return next();
|
|
13
|
+
}
|
|
14
|
+
let content = options[ctx.path];
|
|
15
|
+
if (!content) {
|
|
16
|
+
return next();
|
|
17
|
+
}
|
|
18
|
+
// '/favicon.ico': 'https://eggjs.org/favicon.ico' or '/favicon.ico': async (ctx) => 'https://eggjs.org/favicon.ico'
|
|
19
|
+
// content is function
|
|
20
|
+
if (typeof content === 'function') {
|
|
21
|
+
content = await content(ctx);
|
|
22
|
+
}
|
|
23
|
+
// content is url
|
|
24
|
+
if (typeof content === 'string') {
|
|
25
|
+
return ctx.redirect(content);
|
|
26
|
+
}
|
|
27
|
+
// URL
|
|
28
|
+
if (content instanceof URL) {
|
|
29
|
+
if (content.protocol !== 'file:') {
|
|
30
|
+
return ctx.redirect(content.href);
|
|
31
|
+
}
|
|
32
|
+
// protocol = file:
|
|
33
|
+
let buffer = Reflect.get(content, BUFFER_CACHE);
|
|
34
|
+
if (!buffer) {
|
|
35
|
+
buffer = await readFile(fileURLToPath(content));
|
|
36
|
+
Reflect.set(content, BUFFER_CACHE, buffer);
|
|
37
|
+
}
|
|
38
|
+
ctx.set('cache-control', options.cacheControl);
|
|
39
|
+
ctx.body = content;
|
|
40
|
+
ctx.type = path.extname(ctx.path);
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
// '/robots.txt': Buffer <xx..
|
|
44
|
+
// content is buffer
|
|
45
|
+
if (Buffer.isBuffer(content)) {
|
|
46
|
+
ctx.set('cache-control', options.cacheControl);
|
|
47
|
+
ctx.body = content;
|
|
48
|
+
ctx.type = path.extname(ctx.path);
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
return next();
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2l0ZV9maWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwcC9taWRkbGV3YXJlL3NpdGVfZmlsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLElBQUksTUFBTSxXQUFXLENBQUM7QUFDN0IsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFZNUMsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLDJCQUEyQixDQUFDLENBQUM7QUFFekQsTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDLE9BQWtDLEVBQUUsRUFBRTtJQUN0RCxPQUFPLEtBQUssVUFBVSxRQUFRLENBQUMsR0FBbUIsRUFBRSxJQUFVO1FBQzVELElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxNQUFNLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUNsRCxPQUFPLElBQUksRUFBRSxDQUFDO1FBQ2hCLENBQUM7UUFDRCx3QkFBd0I7UUFDeEIsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ3hCLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDaEIsQ0FBQztRQUVELElBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsT0FBTyxJQUFJLEVBQUUsQ0FBQztRQUNoQixDQUFDO1FBRUQsb0hBQW9IO1FBQ3BILHNCQUFzQjtRQUN0QixJQUFJLE9BQU8sT0FBTyxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQ2xDLE9BQU8sR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMvQixDQUFDO1FBQ0QsaUJBQWlCO1FBQ2pCLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDaEMsT0FBTyxHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9CLENBQUM7UUFFRCxNQUFNO1FBQ04sSUFBSSxPQUFPLFlBQVksR0FBRyxFQUFFLENBQUM7WUFDM0IsSUFBSSxPQUFPLENBQUMsUUFBUSxLQUFLLE9BQU8sRUFBRSxDQUFDO2dCQUNqQyxPQUFPLEdBQUcsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BDLENBQUM7WUFDRCxtQkFBbUI7WUFDbkIsSUFBSSxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFXLENBQUM7WUFDMUQsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNaLE1BQU0sR0FBRyxNQUFNLFFBQVEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztnQkFDaEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzdDLENBQUM7WUFDRCxHQUFHLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDL0MsR0FBRyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7WUFDbkIsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsQyxPQUFPO1FBQ1QsQ0FBQztRQUVELDhCQUE4QjtRQUM5QixvQkFBb0I7UUFDcEIsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDN0IsR0FBRyxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQy9DLEdBQUcsQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDO1lBQ25CLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbEMsT0FBTztRQUNULENBQUM7UUFFRCxPQUFPLElBQUksRUFBRSxDQUFDO0lBQ2hCLENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQyJ9
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { EggAppInfo } from '@eggjs/core';
|
|
2
|
+
import type { EggAppConfig } from '../lib/type.js';
|
|
3
|
+
/**
|
|
4
|
+
* The configuration of egg application, can be access by `app.config`
|
|
5
|
+
* @class Config
|
|
6
|
+
* @since 1.0.0
|
|
7
|
+
*/
|
|
8
|
+
declare const _default: (appInfo: EggAppInfo) => Partial<EggAppConfig>;
|
|
9
|
+
export default _default;
|