egg 4.0.0-beta.5 → 4.0.0-beta.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/dist/commonjs/app/extend/context.d.ts +151 -2
  2. package/dist/commonjs/app/extend/context.js +81 -84
  3. package/dist/commonjs/app/extend/helper.d.ts +37 -0
  4. package/dist/commonjs/app/extend/helper.js +49 -0
  5. package/dist/commonjs/app/extend/request.d.ts +128 -0
  6. package/dist/commonjs/app/extend/request.js +270 -0
  7. package/dist/commonjs/app/extend/response.d.ts +25 -0
  8. package/dist/commonjs/app/extend/response.js +37 -0
  9. package/dist/commonjs/app/middleware/meta.d.ts +2 -3
  10. package/dist/commonjs/app/middleware/meta.js +1 -1
  11. package/dist/commonjs/app/middleware/notfound.d.ts +2 -3
  12. package/dist/commonjs/app/middleware/notfound.js +1 -1
  13. package/dist/commonjs/app/middleware/site_file.d.ts +2 -2
  14. package/dist/commonjs/app/middleware/site_file.js +1 -2
  15. package/dist/commonjs/config/config.default.js +3 -2
  16. package/dist/commonjs/lib/application.d.ts +5 -12
  17. package/dist/commonjs/lib/application.js +9 -20
  18. package/dist/commonjs/lib/core/base_context_class.d.ts +2 -2
  19. package/dist/commonjs/lib/core/context_httpclient.d.ts +3 -3
  20. package/dist/commonjs/lib/core/context_httpclient.js +1 -1
  21. package/dist/commonjs/lib/core/httpclient.d.ts +2 -3
  22. package/dist/commonjs/lib/core/httpclient.js +3 -6
  23. package/dist/commonjs/lib/core/messenger/ipc.js +1 -2
  24. package/dist/commonjs/lib/egg.d.ts +19 -15
  25. package/dist/commonjs/lib/egg.js +14 -11
  26. package/dist/commonjs/lib/type.d.ts +4 -7
  27. package/dist/commonjs/lib/utils.d.ts +2 -0
  28. package/dist/commonjs/lib/utils.js +21 -0
  29. package/dist/esm/app/extend/context.d.ts +151 -2
  30. package/dist/esm/app/extend/context.js +81 -85
  31. package/dist/esm/app/extend/helper.d.ts +37 -0
  32. package/dist/esm/app/extend/helper.js +43 -0
  33. package/dist/esm/app/extend/request.d.ts +128 -0
  34. package/dist/esm/app/extend/request.js +264 -0
  35. package/dist/esm/app/extend/response.d.ts +25 -0
  36. package/dist/esm/app/extend/response.js +34 -0
  37. package/dist/esm/app/middleware/meta.d.ts +2 -3
  38. package/dist/esm/app/middleware/meta.js +1 -1
  39. package/dist/esm/app/middleware/notfound.d.ts +2 -3
  40. package/dist/esm/app/middleware/notfound.js +1 -1
  41. package/dist/esm/app/middleware/site_file.d.ts +2 -2
  42. package/dist/esm/app/middleware/site_file.js +1 -2
  43. package/dist/esm/config/config.default.js +3 -2
  44. package/dist/esm/lib/application.d.ts +5 -12
  45. package/dist/esm/lib/application.js +9 -20
  46. package/dist/esm/lib/core/base_context_class.d.ts +2 -2
  47. package/dist/esm/lib/core/context_httpclient.d.ts +3 -3
  48. package/dist/esm/lib/core/context_httpclient.js +1 -1
  49. package/dist/esm/lib/core/httpclient.d.ts +2 -3
  50. package/dist/esm/lib/core/httpclient.js +2 -2
  51. package/dist/esm/lib/core/messenger/ipc.js +1 -2
  52. package/dist/esm/lib/egg.d.ts +19 -15
  53. package/dist/esm/lib/egg.js +12 -12
  54. package/dist/esm/lib/type.d.ts +4 -7
  55. package/dist/esm/lib/utils.d.ts +2 -0
  56. package/dist/esm/lib/utils.js +14 -0
  57. package/dist/package.json +1 -1
  58. package/package.json +6 -9
  59. package/src/app/extend/context.ts +116 -100
  60. package/src/app/extend/{helper.js → helper.ts} +14 -13
  61. package/src/app/extend/{request.js → request.ts} +81 -79
  62. package/src/app/extend/response.ts +36 -0
  63. package/src/app/middleware/meta.ts +2 -3
  64. package/src/app/middleware/notfound.ts +2 -3
  65. package/src/app/middleware/site_file.ts +3 -5
  66. package/src/config/config.default.ts +2 -1
  67. package/src/lib/application.ts +14 -21
  68. package/src/lib/core/base_context_class.ts +2 -2
  69. package/src/lib/core/context_httpclient.ts +3 -3
  70. package/src/lib/core/httpclient.ts +4 -5
  71. package/src/lib/core/messenger/ipc.ts +0 -1
  72. package/src/lib/egg.ts +45 -24
  73. package/src/lib/type.ts +3 -13
  74. package/src/lib/utils.ts +16 -0
  75. package/src/app/extend/response.js +0 -101
@@ -1,24 +1,34 @@
1
- import { performance } from 'node:perf_hooks';
2
1
  import delegate from 'delegates';
3
2
  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 = {
3
+ import { now, diff } from 'performance-ms';
4
+ import { utils, Context as EggCoreContext, } from '@eggjs/core';
5
+ const HELPER = Symbol('ctx helper');
6
+ const LOCALS = Symbol('ctx locals');
7
+ const LOCALS_LIST = Symbol('ctx localsList');
8
+ const COOKIES = Symbol('ctx cookies');
9
+ const CONTEXT_HTTPCLIENT = Symbol('ctx httpclient');
10
+ const CONTEXT_ROUTER = Symbol('ctx router');
11
+ export default class Context extends EggCoreContext {
12
+ /**
13
+ * Request start time
14
+ * @member {Number} Context#starttime
15
+ */
16
+ starttime;
17
+ /**
18
+ * Request start timer using `performance.now()`
19
+ * @member {Number} Context#performanceStarttime
20
+ */
21
+ performanceStarttime;
13
22
  /**
14
23
  * Get the current visitor's cookies.
15
24
  */
16
25
  get cookies() {
17
- if (!this[COOKIES]) {
18
- this[COOKIES] = new this.app.ContextCookies(this, this.app.keys, this.app.config.cookies);
26
+ let cookies = this[COOKIES];
27
+ if (!cookies) {
28
+ this[COOKIES] = cookies = new this.app.ContextCookies(this, this.app.keys, this.app.config.cookies);
19
29
  }
20
- return this[COOKIES];
21
- },
30
+ return cookies;
31
+ }
22
32
  /**
23
33
  * Get a wrapper httpclient instance contain ctx in the hold request process
24
34
  *
@@ -29,7 +39,13 @@ const Context = {
29
39
  this[CONTEXT_HTTPCLIENT] = new this.app.ContextHttpClient(this);
30
40
  }
31
41
  return this[CONTEXT_HTTPCLIENT];
32
- },
42
+ }
43
+ /**
44
+ * Alias to {@link Context#httpclient}
45
+ */
46
+ get httpClient() {
47
+ return this.httpclient;
48
+ }
33
49
  /**
34
50
  * Shortcut for httpclient.curl
35
51
  *
@@ -38,9 +54,9 @@ const Context = {
38
54
  * @param {Object} [options] - options for request.
39
55
  * @return {Object} see {@link ContextHttpClient#curl}
40
56
  */
41
- curl(url, options) {
42
- return this.httpclient.curl(url, options);
43
- },
57
+ async curl(url, options) {
58
+ return await this.httpclient.curl(url, options);
59
+ }
44
60
  /**
45
61
  * Alias to {@link Application#router}
46
62
  *
@@ -52,18 +68,18 @@ const Context = {
52
68
  * ```
53
69
  */
54
70
  get router() {
55
- if (!this[CONTEXT_ROUTER]) {
56
- this[CONTEXT_ROUTER] = this.app.router;
71
+ if (this[CONTEXT_ROUTER]) {
72
+ return this[CONTEXT_ROUTER];
57
73
  }
58
- return this[CONTEXT_ROUTER];
59
- },
74
+ return this.app.router;
75
+ }
60
76
  /**
61
77
  * Set router to Context, only use on EggRouter
62
- * @param {EggRouter} val router instance
78
+ * @param {Router} val router instance
63
79
  */
64
80
  set router(val) {
65
81
  this[CONTEXT_ROUTER] = val;
66
- },
82
+ }
67
83
  /**
68
84
  * Get helper instance from {@link Application#Helper}
69
85
  *
@@ -75,37 +91,20 @@ const Context = {
75
91
  this[HELPER] = new this.app.Helper(this);
76
92
  }
77
93
  return this[HELPER];
78
- },
94
+ }
79
95
  /**
80
96
  * Wrap app.loggers with context information,
81
97
  * if a custom logger is defined by naming aLogger, then you can `ctx.getLogger('aLogger')`
82
98
  *
83
99
  * @param {String} name - logger name
84
- * @return {Logger} logger
85
100
  */
86
101
  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
- },
102
+ return this.app.getLogger(name);
103
+ }
105
104
  /**
106
- * Logger for Application, wrapping app.coreLogger with context infomation
105
+ * Logger for Application
107
106
  *
108
- * @member {ContextLogger} Context#logger
107
+ * @member {Logger} Context#logger
109
108
  * @since 1.0.0
110
109
  * @example
111
110
  * ```js
@@ -115,17 +114,16 @@ const Context = {
115
114
  */
116
115
  get logger() {
117
116
  return this.getLogger('logger');
118
- },
117
+ }
119
118
  /**
120
- * Logger for frameworks and plugins,
121
- * wrapping app.coreLogger with context infomation
119
+ * Logger for frameworks and plugins
122
120
  *
123
- * @member {ContextLogger} Context#coreLogger
121
+ * @member {Logger} Context#coreLogger
124
122
  * @since 1.0.0
125
123
  */
126
124
  get coreLogger() {
127
125
  return this.getLogger('coreLogger');
128
- },
126
+ }
129
127
  /**
130
128
  * locals is an object for view, you can use `app.locals` and `ctx.locals` to set variables,
131
129
  * which will be used as data when view is rendering.
@@ -157,18 +155,17 @@ const Context = {
157
155
  if (!this[LOCALS]) {
158
156
  this[LOCALS] = assign({}, this.app.locals);
159
157
  }
160
- if (this[LOCALS_LIST] && this[LOCALS_LIST].length) {
158
+ if (Array.isArray(this[LOCALS_LIST]) && this[LOCALS_LIST].length > 0) {
161
159
  assign(this[LOCALS], this[LOCALS_LIST]);
162
160
  this[LOCALS_LIST] = null;
163
161
  }
164
162
  return this[LOCALS];
165
- },
163
+ }
166
164
  set locals(val) {
167
- if (!this[LOCALS_LIST]) {
168
- this[LOCALS_LIST] = [];
169
- }
170
- this[LOCALS_LIST].push(val);
171
- },
165
+ const localsList = this[LOCALS_LIST] ?? [];
166
+ localsList.push(val);
167
+ this[LOCALS_LIST] = localsList;
168
+ }
172
169
  /**
173
170
  * alias to {@link Context#locals}, compatible with koa that use this variable
174
171
  * @member {Object} state
@@ -176,10 +173,10 @@ const Context = {
176
173
  */
177
174
  get state() {
178
175
  return this.locals;
179
- },
176
+ }
180
177
  set state(val) {
181
178
  this.locals = val;
182
- },
179
+ }
183
180
  /**
184
181
  * Run async function in the background
185
182
  * @param {Function} scope - the first args is ctx
@@ -192,37 +189,37 @@ const Context = {
192
189
  * });
193
190
  * ```
194
191
  */
195
- runInBackground(scope) {
192
+ runInBackground(scope, taskName) {
196
193
  // 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
- },
194
+ if (!taskName) {
195
+ taskName = Reflect.get(scope, '_name') || scope.name || utils.getCalleeFromStack(true);
196
+ }
197
+ // use setImmediate to ensure all sync logic will run async
198
+ setImmediate(() => {
199
+ this._runInBackground(scope, taskName);
200
+ });
201
+ }
201
202
  // let plugins or frameworks to reuse _runInBackground in some cases.
202
203
  // 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 => {
204
+ async _runInBackground(scope, taskName) {
205
+ const startTime = now();
206
+ try {
207
+ await scope(this);
208
+ this.coreLogger.info('[egg:background] task:%s success (%dms)', taskName, diff(startTime));
209
+ }
210
+ catch (err) {
214
211
  // background task process log
215
- ctx.coreLogger.info('[egg:background] task:%s fail (%dms)', taskName, Math.floor((performance.now() - start) * 1000) / 1000);
212
+ this.coreLogger.info('[egg:background] task:%s fail (%dms)', taskName, diff(startTime));
216
213
  // emit error when promise catch, and set err.runInBackground flag
217
214
  err.runInBackground = true;
218
- ctx.app.emit('error', err, ctx);
219
- });
220
- },
221
- };
215
+ this.app.emit('error', err, this);
216
+ }
217
+ }
218
+ }
222
219
  /**
223
220
  * Context delegation.
224
221
  */
225
- delegate(Context, 'request')
222
+ delegate(Context.prototype, 'request')
226
223
  /**
227
224
  * @member {Boolean} Context#acceptJSON
228
225
  * @see Request#acceptJSON
@@ -247,12 +244,11 @@ delegate(Context, 'request')
247
244
  * @since 1.0.0
248
245
  */
249
246
  .access('ip');
250
- delegate(Context, 'response')
247
+ delegate(Context.prototype, 'response')
251
248
  /**
252
249
  * @member {Number} Context#realStatus
253
250
  * @see Response#realStatus
254
251
  * @since 1.0.0
255
252
  */
256
253
  .access('realStatus');
257
- export default Context;
258
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcHAvZXh0ZW5kL2NvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sUUFBUSxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFcEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDeEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDeEMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7QUFDakQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFDMUMsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDakQsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztBQUN4RCxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUVoRCxNQUFNLE9BQU8sR0FBRztJQUNkOztPQUVHO0lBQ0gsSUFBSSxPQUFPO1FBQ1QsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1RixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFD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
254
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcHAvZXh0ZW5kL2NvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxRQUFRLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDakMsT0FBTyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsS0FBSyxFQUFFLE9BQU8sSUFBSSxjQUFjLEdBRWpDLE1BQU0sYUFBYSxDQUFDO0FBU3JCLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNwQyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDcEMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDN0MsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ3RDLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDcEQsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBTzVDLE1BQU0sQ0FBQyxPQUFPLE9BQU8sT0FBUSxTQUFRLGNBQWM7SUFLakQ7OztPQUdHO0lBQ0gsU0FBUyxDQUFTO0lBQ2xCOzs7T0FHRztJQUNILG9CQUFvQixDQUFTO0lBRTdCOztPQUVHO0lBQ0gsSUFBSSxPQUFPO1FBQ1QsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxPQUFPLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJ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
@@ -0,0 +1,37 @@
1
+ import { BaseContextClass } from '../../lib/core/base_context_class.js';
2
+ /**
3
+ * The Helper class which can be used as utility function.
4
+ * We support developers to extend Helper through ${baseDir}/app/extend/helper.js ,
5
+ * then you can use all method on `ctx.helper` that is a instance of Helper.
6
+ */
7
+ export default class Helper extends BaseContextClass {
8
+ /**
9
+ * Generate URL path(without host) for route. Takes the route name and a map of named params.
10
+ * @function Helper#pathFor
11
+ * @param {String} name - Router Name
12
+ * @param {Object} params - Other params
13
+ *
14
+ * @example
15
+ * ```js
16
+ * app.get('home', '/index.htm', 'home.index');
17
+ * ctx.helper.pathFor('home', { by: 'recent', limit: 20 })
18
+ * => /index.htm?by=recent&limit=20
19
+ * ```
20
+ * @return {String} url path(without host)
21
+ */
22
+ pathFor(name: string, params: Record<string, any>): string;
23
+ /**
24
+ * Generate full URL(with host) for route. Takes the route name and a map of named params.
25
+ * @function Helper#urlFor
26
+ * @param {String} name - Router name
27
+ * @param {Object} params - Other params
28
+ * @example
29
+ * ```js
30
+ * app.get('home', '/index.htm', 'home.index');
31
+ * ctx.helper.urlFor('home', { by: 'recent', limit: 20 })
32
+ * => http://127.0.0.1:7001/index.htm?by=recent&limit=20
33
+ * ```
34
+ * @return {String} full url(with host)
35
+ */
36
+ urlFor(name: string, params: Record<string, any>): string;
37
+ }
@@ -0,0 +1,43 @@
1
+ import url from 'node:url';
2
+ import { BaseContextClass } from '../../lib/core/base_context_class.js';
3
+ /**
4
+ * The Helper class which can be used as utility function.
5
+ * We support developers to extend Helper through ${baseDir}/app/extend/helper.js ,
6
+ * then you can use all method on `ctx.helper` that is a instance of Helper.
7
+ */
8
+ export default class Helper extends BaseContextClass {
9
+ /**
10
+ * Generate URL path(without host) for route. Takes the route name and a map of named params.
11
+ * @function Helper#pathFor
12
+ * @param {String} name - Router Name
13
+ * @param {Object} params - Other params
14
+ *
15
+ * @example
16
+ * ```js
17
+ * app.get('home', '/index.htm', 'home.index');
18
+ * ctx.helper.pathFor('home', { by: 'recent', limit: 20 })
19
+ * => /index.htm?by=recent&limit=20
20
+ * ```
21
+ * @return {String} url path(without host)
22
+ */
23
+ pathFor(name, params) {
24
+ return this.app.router.url(name, params);
25
+ }
26
+ /**
27
+ * Generate full URL(with host) for route. Takes the route name and a map of named params.
28
+ * @function Helper#urlFor
29
+ * @param {String} name - Router name
30
+ * @param {Object} params - Other params
31
+ * @example
32
+ * ```js
33
+ * app.get('home', '/index.htm', 'home.index');
34
+ * ctx.helper.urlFor('home', { by: 'recent', limit: 20 })
35
+ * => http://127.0.0.1:7001/index.htm?by=recent&limit=20
36
+ * ```
37
+ * @return {String} full url(with host)
38
+ */
39
+ urlFor(name, params) {
40
+ return this.ctx.protocol + '://' + this.ctx.host + url.resolve('/', this.pathFor(name, params));
41
+ }
42
+ }
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwcC9leHRlbmQvaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sR0FBRyxNQUFNLFVBQVUsQ0FBQztBQUMzQixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUV4RTs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE9BQU8sT0FBTyxNQUFPLFNBQVEsZ0JBQWdCO0lBQ2xEOzs7Ozs7Ozs7Ozs7O09BYUc7SUFDSCxPQUFPLENBQUMsSUFBWSxFQUFFLE1BQTJCO1FBQy9DLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7OztPQVlHO0lBQ0gsTUFBTSxDQUFDLElBQVksRUFBRSxNQUEyQjtRQUM5QyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ2xHLENBQUM7Q0FDRiJ9
@@ -0,0 +1,128 @@
1
+ import { Request as EggCoreRequest } from '@eggjs/core';
2
+ import type { Application } from '../../lib/application.js';
3
+ import type { ContextDelegation } from './context.js';
4
+ import Response from './response.js';
5
+ export default class Request extends EggCoreRequest {
6
+ app: Application;
7
+ ctx: ContextDelegation;
8
+ response: Response;
9
+ /**
10
+ * Parse the "Host" header field host
11
+ * and support X-Forwarded-Host when a
12
+ * proxy is enabled.
13
+ * @member {String} Request#host
14
+ * @example
15
+ * ip + port
16
+ * ```js
17
+ * this.request.host
18
+ * => '127.0.0.1:7001'
19
+ * ```
20
+ * or domain
21
+ * ```js
22
+ * this.request.host
23
+ * => 'demo.eggjs.org'
24
+ * ```
25
+ */
26
+ get host(): string;
27
+ /**
28
+ * @member {String} Request#protocol
29
+ * @example
30
+ * ```js
31
+ * this.request.protocol
32
+ * => 'https'
33
+ * ```
34
+ */
35
+ get protocol(): string;
36
+ /**
37
+ * Get all pass through ip addresses from the request.
38
+ * Enable only on `app.config.proxy = true`
39
+ *
40
+ * @member {Array} Request#ips
41
+ * @example
42
+ * ```js
43
+ * this.request.ips
44
+ * => ['100.23.1.2', '201.10.10.2']
45
+ * ```
46
+ */
47
+ get ips(): string[];
48
+ /**
49
+ * Get the request remote IPv4 address
50
+ * @member {String} Request#ip
51
+ * @return {String} IPv4 address
52
+ * @example
53
+ * ```js
54
+ * this.request.ip
55
+ * => '127.0.0.1'
56
+ * => '111.10.2.1'
57
+ * ```
58
+ */
59
+ get ip(): string;
60
+ /**
61
+ * Set the request remote IPv4 address
62
+ * @member {String} Request#ip
63
+ * @param {String} ip - IPv4 address
64
+ * @example
65
+ * ```js
66
+ * this.request.ip
67
+ * => '127.0.0.1'
68
+ * => '111.10.2.1'
69
+ * ```
70
+ */
71
+ set ip(ip: string);
72
+ /**
73
+ * detect if response should be json
74
+ * 1. url path ends with `.json`
75
+ * 2. response type is set to json
76
+ * 3. detect by request accept header
77
+ *
78
+ * @member {Boolean} Request#acceptJSON
79
+ * @since 1.0.0
80
+ */
81
+ get acceptJSON(): boolean;
82
+ _customQuery(cacheName: symbol, filter: (value: string | string[]) => string | string[]): Record<string, string | string[]>;
83
+ /**
84
+ * get params pass by querystring, all values are of string type.
85
+ * @member {Object} Request#query
86
+ * @example
87
+ * ```js
88
+ * GET http://127.0.0.1:7001?name=Foo&age=20&age=21
89
+ * this.query
90
+ * => { 'name': 'Foo', 'age': '20' }
91
+ *
92
+ * GET http://127.0.0.1:7001?a=b&a=c&o[foo]=bar&b[]=1&b[]=2&e=val
93
+ * this.query
94
+ * =>
95
+ * {
96
+ * "a": "b",
97
+ * "o[foo]": "bar",
98
+ * "b[]": "1",
99
+ * "e": "val"
100
+ * }
101
+ * ```
102
+ */
103
+ get query(): Record<string, string>;
104
+ /**
105
+ * get params pass by querystring, all value are Array type. {@link Request#query}
106
+ * @member {Array} Request#queries
107
+ * @example
108
+ * ```js
109
+ * GET http://127.0.0.1:7001?a=b&a=c&o[foo]=bar&b[]=1&b[]=2&e=val
110
+ * this.queries
111
+ * =>
112
+ * {
113
+ * "a": ["b", "c"],
114
+ * "o[foo]": ["bar"],
115
+ * "b[]": ["1", "2"],
116
+ * "e": ["val"]
117
+ * }
118
+ * ```
119
+ */
120
+ get queries(): Record<string, string[]>;
121
+ /**
122
+ * Set query-string as an object.
123
+ *
124
+ * @function Request#query
125
+ * @param {Object} obj set querystring and query object for request.
126
+ */
127
+ set query(obj: Record<string, string>);
128
+ }