egg 4.0.0-beta.0 → 4.0.0-beta.11

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 (117) hide show
  1. package/README.md +1 -0
  2. package/README.zh-CN.md +1 -0
  3. package/dist/commonjs/app/extend/context.d.ts +154 -0
  4. package/dist/commonjs/app/extend/context.js +261 -0
  5. package/dist/commonjs/app/extend/context.types.d.ts +16 -0
  6. package/dist/commonjs/app/extend/context.types.js +3 -0
  7. package/dist/commonjs/app/extend/helper.d.ts +37 -0
  8. package/dist/commonjs/app/extend/helper.js +49 -0
  9. package/dist/commonjs/app/extend/request.d.ts +128 -0
  10. package/dist/commonjs/app/extend/request.js +270 -0
  11. package/dist/commonjs/app/extend/response.d.ts +25 -0
  12. package/dist/commonjs/app/extend/response.js +37 -0
  13. package/dist/commonjs/app/middleware/meta.d.ts +2 -3
  14. package/dist/commonjs/app/middleware/meta.js +1 -1
  15. package/dist/commonjs/app/middleware/notfound.d.ts +2 -3
  16. package/dist/commonjs/app/middleware/notfound.js +1 -1
  17. package/dist/commonjs/app/middleware/site_file.d.ts +5 -3
  18. package/dist/commonjs/app/middleware/site_file.js +21 -3
  19. package/dist/commonjs/config/config.default.js +5 -4
  20. package/dist/commonjs/config/plugin.js +3 -3
  21. package/dist/commonjs/index.d.ts +3 -1
  22. package/dist/commonjs/index.js +8 -6
  23. package/dist/commonjs/lib/application.d.ts +5 -12
  24. package/dist/commonjs/lib/application.js +9 -20
  25. package/dist/commonjs/lib/core/base_context_class.d.ts +2 -2
  26. package/dist/commonjs/lib/core/base_hook_class.d.ts +1 -1
  27. package/dist/commonjs/lib/core/context_httpclient.d.ts +3 -3
  28. package/dist/commonjs/lib/core/context_httpclient.js +1 -1
  29. package/dist/commonjs/lib/core/httpclient.d.ts +2 -3
  30. package/dist/commonjs/lib/core/httpclient.js +3 -6
  31. package/dist/commonjs/lib/core/messenger/IMessenger.d.ts +3 -3
  32. package/dist/commonjs/lib/core/messenger/index.js +2 -2
  33. package/dist/commonjs/lib/core/messenger/ipc.d.ts +6 -4
  34. package/dist/commonjs/lib/core/messenger/ipc.js +31 -20
  35. package/dist/commonjs/lib/core/messenger/local.d.ts +3 -3
  36. package/dist/commonjs/lib/core/messenger/local.js +14 -11
  37. package/dist/commonjs/lib/egg.d.ts +25 -16
  38. package/dist/commonjs/lib/egg.js +44 -22
  39. package/dist/commonjs/lib/egg.types.d.ts +6 -0
  40. package/dist/commonjs/lib/egg.types.js +3 -0
  41. package/dist/commonjs/lib/type.d.ts +3 -5
  42. package/dist/commonjs/lib/utils.d.ts +2 -0
  43. package/dist/commonjs/lib/utils.js +21 -0
  44. package/dist/commonjs/urllib.d.ts +1 -0
  45. package/dist/commonjs/urllib.js +18 -0
  46. package/dist/esm/app/extend/context.d.ts +154 -0
  47. package/dist/esm/app/extend/context.js +255 -0
  48. package/dist/esm/app/extend/context.types.d.ts +16 -0
  49. package/dist/esm/app/extend/context.types.js +2 -0
  50. package/dist/esm/app/extend/helper.d.ts +37 -0
  51. package/dist/esm/app/extend/helper.js +43 -0
  52. package/dist/esm/app/extend/request.d.ts +128 -0
  53. package/dist/esm/app/extend/request.js +264 -0
  54. package/dist/esm/app/extend/response.d.ts +25 -0
  55. package/dist/esm/app/extend/response.js +34 -0
  56. package/dist/esm/app/middleware/meta.d.ts +2 -3
  57. package/dist/esm/app/middleware/meta.js +1 -1
  58. package/dist/esm/app/middleware/notfound.d.ts +2 -3
  59. package/dist/esm/app/middleware/notfound.js +1 -1
  60. package/dist/esm/app/middleware/site_file.d.ts +5 -3
  61. package/dist/esm/app/middleware/site_file.js +21 -3
  62. package/dist/esm/config/config.default.js +5 -4
  63. package/dist/esm/config/plugin.js +3 -3
  64. package/dist/esm/index.d.ts +3 -1
  65. package/dist/esm/index.js +5 -4
  66. package/dist/esm/lib/application.d.ts +5 -12
  67. package/dist/esm/lib/application.js +9 -20
  68. package/dist/esm/lib/core/base_context_class.d.ts +2 -2
  69. package/dist/esm/lib/core/base_hook_class.d.ts +1 -1
  70. package/dist/esm/lib/core/context_httpclient.d.ts +3 -3
  71. package/dist/esm/lib/core/context_httpclient.js +1 -1
  72. package/dist/esm/lib/core/httpclient.d.ts +2 -3
  73. package/dist/esm/lib/core/httpclient.js +2 -2
  74. package/dist/esm/lib/core/messenger/IMessenger.d.ts +3 -3
  75. package/dist/esm/lib/core/messenger/index.js +2 -2
  76. package/dist/esm/lib/core/messenger/ipc.d.ts +6 -4
  77. package/dist/esm/lib/core/messenger/ipc.js +29 -18
  78. package/dist/esm/lib/core/messenger/local.d.ts +3 -3
  79. package/dist/esm/lib/core/messenger/local.js +14 -11
  80. package/dist/esm/lib/egg.d.ts +25 -16
  81. package/dist/esm/lib/egg.js +24 -15
  82. package/dist/esm/lib/egg.types.d.ts +6 -0
  83. package/dist/esm/lib/egg.types.js +2 -0
  84. package/dist/esm/lib/type.d.ts +3 -5
  85. package/dist/esm/lib/utils.d.ts +2 -0
  86. package/dist/esm/lib/utils.js +14 -0
  87. package/dist/esm/urllib.d.ts +1 -0
  88. package/dist/esm/urllib.js +2 -0
  89. package/dist/package.json +1 -1
  90. package/package.json +44 -29
  91. package/src/app/extend/context.ts +303 -0
  92. package/src/app/extend/context.types.ts +24 -0
  93. package/src/app/extend/{helper.js → helper.ts} +14 -13
  94. package/src/app/extend/{request.js → request.ts} +81 -79
  95. package/src/app/extend/response.ts +36 -0
  96. package/src/app/middleware/meta.ts +2 -3
  97. package/src/app/middleware/notfound.ts +2 -3
  98. package/src/app/middleware/site_file.ts +26 -7
  99. package/src/config/config.default.ts +4 -3
  100. package/src/config/plugin.ts +2 -2
  101. package/src/index.ts +5 -3
  102. package/src/lib/application.ts +14 -21
  103. package/src/lib/core/base_context_class.ts +2 -2
  104. package/src/lib/core/base_hook_class.ts +1 -1
  105. package/src/lib/core/context_httpclient.ts +3 -3
  106. package/src/lib/core/httpclient.ts +4 -5
  107. package/src/lib/core/messenger/IMessenger.ts +3 -3
  108. package/src/lib/core/messenger/index.ts +1 -1
  109. package/src/lib/core/messenger/ipc.ts +31 -20
  110. package/src/lib/core/messenger/local.ts +13 -11
  111. package/src/lib/egg.ts +60 -28
  112. package/src/lib/egg.types.ts +6 -0
  113. package/src/lib/type.ts +6 -6
  114. package/src/lib/utils.ts +16 -0
  115. package/src/urllib.ts +1 -0
  116. package/src/app/extend/context.js +0 -285
  117. package/src/app/extend/response.js +0 -101
package/README.md CHANGED
@@ -7,6 +7,7 @@ English | [简体中文](./README.zh-CN.md)
7
7
  [![NPM version](https://img.shields.io/npm/v/egg.svg?style=flat-square)](https://npmjs.org/package/egg)
8
8
  [![NPM quality](http://npm.packagequality.com/shield/egg.svg?style=flat-square)](http://packagequality.com/#?package=egg)
9
9
  [![NPM download](https://img.shields.io/npm/dm/egg.svg?style=flat-square)](https://npmjs.org/package/egg)
10
+ [![Node.js Version](https://img.shields.io/node/v/egg.svg?style=flat)](https://nodejs.org/en/download/)
10
11
  [![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Feggjs%2Fegg.svg?type=shield)](https://app.fossa.com/projects/git%2Bgithub.com%2Feggjs%2Fegg?ref=badge_shield)
11
12
 
12
13
  [![Continuous Integration](https://github.com/eggjs/egg/actions/workflows/nodejs.yml/badge.svg)](https://github.com/eggjs/egg/actions?query=branch%3Amaster)
package/README.zh-CN.md CHANGED
@@ -7,6 +7,7 @@
7
7
  [![NPM version](https://img.shields.io/npm/v/egg.svg?style=flat-square)](https://npmjs.org/package/egg)
8
8
  [![NPM quality](http://npm.packagequality.com/shield/egg.svg?style=flat-square)](http://packagequality.com/#?package=egg)
9
9
  [![NPM download](https://img.shields.io/npm/dm/egg.svg?style=flat-square)](https://npmjs.org/package/egg)
10
+ [![Node.js Version](https://img.shields.io/node/v/egg.svg?style=flat)](https://nodejs.org/en/download/)
10
11
 
11
12
  [![Continuous Integration](https://github.com/eggjs/egg/actions/workflows/nodejs.yml/badge.svg)](https://github.com/eggjs/egg/actions?query=branch%3Amaster)
12
13
  [![Test coverage](https://img.shields.io/codecov/c/github/eggjs/egg.svg?style=flat-square)](https://codecov.io/gh/eggjs/egg)
@@ -0,0 +1,154 @@
1
+ import { Context as EggCoreContext, Router, type ContextDelegation as EggCoreContextDelegation } from '@eggjs/core';
2
+ import type { Cookies as ContextCookies } from '@eggjs/cookies';
3
+ import { EggLogger } from 'egg-logger';
4
+ import type { Application } from '../../lib/application.js';
5
+ import type { HttpClientRequestURL, HttpClientRequestOptions, HttpClient } from '../../lib/core/httpclient.js';
6
+ import type { ContextHttpClient } from '../../lib/core/context_httpclient.js';
7
+ import type { BaseContextClass } from '../../lib//core/base_context_class.js';
8
+ import Request from './request.js';
9
+ import Response from './response.js';
10
+ import type Helper from './helper.js';
11
+ import './context.types.js';
12
+ interface Cookies extends ContextCookies {
13
+ request: any;
14
+ response: any;
15
+ }
16
+ export default class Context extends EggCoreContext {
17
+ app: Application;
18
+ request: Request;
19
+ service: BaseContextClass;
20
+ /**
21
+ * Request start time
22
+ * @member {Number} Context#starttime
23
+ */
24
+ starttime: number;
25
+ /**
26
+ * Request start timer using `performance.now()`
27
+ * @member {Number} Context#performanceStarttime
28
+ */
29
+ performanceStarttime: number;
30
+ /**
31
+ * Get the current visitor's cookies.
32
+ */
33
+ get cookies(): Cookies;
34
+ /**
35
+ * Get a wrapper httpclient instance contain ctx in the hold request process
36
+ *
37
+ * @return {ContextHttpClient} the wrapper httpclient instance
38
+ */
39
+ get httpclient(): ContextHttpClient;
40
+ /**
41
+ * Alias to {@link Context#httpclient}
42
+ */
43
+ get httpClient(): ContextHttpClient;
44
+ /**
45
+ * Shortcut for httpclient.curl
46
+ *
47
+ * @function Context#curl
48
+ * @param {String|Object} url - request url address.
49
+ * @param {Object} [options] - options for request.
50
+ * @return {Object} see {@link ContextHttpClient#curl}
51
+ */
52
+ curl(url: HttpClientRequestURL, options?: HttpClientRequestOptions): ReturnType<HttpClient['request']>;
53
+ /**
54
+ * Alias to {@link Application#router}
55
+ *
56
+ * @member {Router} Context#router
57
+ * @since 1.0.0
58
+ * @example
59
+ * ```js
60
+ * this.router.pathFor('post', { id: 12 });
61
+ * ```
62
+ */
63
+ get router(): Router;
64
+ /**
65
+ * Set router to Context, only use on EggRouter
66
+ * @param {Router} val router instance
67
+ */
68
+ set router(val: Router);
69
+ /**
70
+ * Get helper instance from {@link Application#Helper}
71
+ *
72
+ * @member {Helper} Context#helper
73
+ * @since 1.0.0
74
+ */
75
+ get helper(): Helper;
76
+ /**
77
+ * Wrap app.loggers with context information,
78
+ * if a custom logger is defined by naming aLogger, then you can `ctx.getLogger('aLogger')`
79
+ *
80
+ * @param {String} name - logger name
81
+ */
82
+ getLogger(name: string): EggLogger;
83
+ /**
84
+ * Logger for Application
85
+ *
86
+ * @member {Logger} Context#logger
87
+ * @since 1.0.0
88
+ * @example
89
+ * ```js
90
+ * this.logger.info('some request data: %j', this.request.body);
91
+ * this.logger.warn('WARNING!!!!');
92
+ * ```
93
+ */
94
+ get logger(): EggLogger;
95
+ /**
96
+ * Logger for frameworks and plugins
97
+ *
98
+ * @member {Logger} Context#coreLogger
99
+ * @since 1.0.0
100
+ */
101
+ get coreLogger(): EggLogger;
102
+ /**
103
+ * locals is an object for view, you can use `app.locals` and `ctx.locals` to set variables,
104
+ * which will be used as data when view is rendering.
105
+ * 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`.
106
+ *
107
+ * when you set locals, only object is available
108
+ *
109
+ * ```js
110
+ * this.locals = {
111
+ * a: 1
112
+ * };
113
+ * this.locals = {
114
+ * b: 1
115
+ * };
116
+ * this.locals.c = 1;
117
+ * console.log(this.locals);
118
+ * {
119
+ * a: 1,
120
+ * b: 1,
121
+ * c: 1,
122
+ * };
123
+ * ```
124
+ *
125
+ * `ctx.locals` has cache, it only merges `app.locals` once in one request.
126
+ *
127
+ * @member {Object} Context#locals
128
+ */
129
+ get locals(): Record<string, any>;
130
+ set locals(val: Record<string, any>);
131
+ /**
132
+ * alias to {@link Context#locals}, compatible with koa that use this variable
133
+ * @member {Object} state
134
+ * @see Context#locals
135
+ */
136
+ get state(): Record<string, any>;
137
+ set state(val: Record<string, any>);
138
+ /**
139
+ * Run async function in the background
140
+ * @param {Function} scope - the first args is ctx
141
+ * ```js
142
+ * this.body = 'hi';
143
+ *
144
+ * this.runInBackground(async ctx => {
145
+ * await ctx.mysql.query(sql);
146
+ * await ctx.curl(url);
147
+ * });
148
+ * ```
149
+ */
150
+ runInBackground(scope: (ctx: ContextDelegation) => Promise<void>, taskName?: string): void;
151
+ _runInBackground(scope: (ctx: ContextDelegation) => Promise<void>, taskName: string): Promise<void>;
152
+ }
153
+ export type ContextDelegation = EggCoreContextDelegation & Context & Pick<Request, 'acceptJSON' | 'queries' | 'accept' | 'ip'> & Pick<Response, 'realStatus'>;
154
+ export {};
@@ -0,0 +1,261 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const delegates_1 = __importDefault(require("delegates"));
7
+ const utility_1 = require("utility");
8
+ const performance_ms_1 = require("performance-ms");
9
+ const core_1 = require("@eggjs/core");
10
+ require("./context.types.js");
11
+ const HELPER = Symbol('ctx helper');
12
+ const LOCALS = Symbol('ctx locals');
13
+ const LOCALS_LIST = Symbol('ctx localsList');
14
+ const COOKIES = Symbol('ctx cookies');
15
+ const CONTEXT_HTTPCLIENT = Symbol('ctx httpclient');
16
+ const CONTEXT_ROUTER = Symbol('ctx router');
17
+ class Context extends core_1.Context {
18
+ /**
19
+ * Request start time
20
+ * @member {Number} Context#starttime
21
+ */
22
+ starttime;
23
+ /**
24
+ * Request start timer using `performance.now()`
25
+ * @member {Number} Context#performanceStarttime
26
+ */
27
+ performanceStarttime;
28
+ /**
29
+ * Get the current visitor's cookies.
30
+ */
31
+ get cookies() {
32
+ let cookies = this[COOKIES];
33
+ if (!cookies) {
34
+ this[COOKIES] = cookies = new this.app.ContextCookies(this, this.app.keys, this.app.config.cookies);
35
+ }
36
+ return cookies;
37
+ }
38
+ /**
39
+ * Get a wrapper httpclient instance contain ctx in the hold request process
40
+ *
41
+ * @return {ContextHttpClient} the wrapper httpclient instance
42
+ */
43
+ get httpclient() {
44
+ if (!this[CONTEXT_HTTPCLIENT]) {
45
+ this[CONTEXT_HTTPCLIENT] = new this.app.ContextHttpClient(this);
46
+ }
47
+ return this[CONTEXT_HTTPCLIENT];
48
+ }
49
+ /**
50
+ * Alias to {@link Context#httpclient}
51
+ */
52
+ get httpClient() {
53
+ return this.httpclient;
54
+ }
55
+ /**
56
+ * Shortcut for httpclient.curl
57
+ *
58
+ * @function Context#curl
59
+ * @param {String|Object} url - request url address.
60
+ * @param {Object} [options] - options for request.
61
+ * @return {Object} see {@link ContextHttpClient#curl}
62
+ */
63
+ async curl(url, options) {
64
+ return await this.httpclient.curl(url, options);
65
+ }
66
+ /**
67
+ * Alias to {@link Application#router}
68
+ *
69
+ * @member {Router} Context#router
70
+ * @since 1.0.0
71
+ * @example
72
+ * ```js
73
+ * this.router.pathFor('post', { id: 12 });
74
+ * ```
75
+ */
76
+ get router() {
77
+ if (this[CONTEXT_ROUTER]) {
78
+ return this[CONTEXT_ROUTER];
79
+ }
80
+ return this.app.router;
81
+ }
82
+ /**
83
+ * Set router to Context, only use on EggRouter
84
+ * @param {Router} val router instance
85
+ */
86
+ set router(val) {
87
+ this[CONTEXT_ROUTER] = val;
88
+ }
89
+ /**
90
+ * Get helper instance from {@link Application#Helper}
91
+ *
92
+ * @member {Helper} Context#helper
93
+ * @since 1.0.0
94
+ */
95
+ get helper() {
96
+ if (!this[HELPER]) {
97
+ this[HELPER] = new this.app.Helper(this);
98
+ }
99
+ return this[HELPER];
100
+ }
101
+ /**
102
+ * Wrap app.loggers with context information,
103
+ * if a custom logger is defined by naming aLogger, then you can `ctx.getLogger('aLogger')`
104
+ *
105
+ * @param {String} name - logger name
106
+ */
107
+ getLogger(name) {
108
+ return this.app.getLogger(name);
109
+ }
110
+ /**
111
+ * Logger for Application
112
+ *
113
+ * @member {Logger} Context#logger
114
+ * @since 1.0.0
115
+ * @example
116
+ * ```js
117
+ * this.logger.info('some request data: %j', this.request.body);
118
+ * this.logger.warn('WARNING!!!!');
119
+ * ```
120
+ */
121
+ get logger() {
122
+ return this.getLogger('logger');
123
+ }
124
+ /**
125
+ * Logger for frameworks and plugins
126
+ *
127
+ * @member {Logger} Context#coreLogger
128
+ * @since 1.0.0
129
+ */
130
+ get coreLogger() {
131
+ return this.getLogger('coreLogger');
132
+ }
133
+ /**
134
+ * locals is an object for view, you can use `app.locals` and `ctx.locals` to set variables,
135
+ * which will be used as data when view is rendering.
136
+ * 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`.
137
+ *
138
+ * when you set locals, only object is available
139
+ *
140
+ * ```js
141
+ * this.locals = {
142
+ * a: 1
143
+ * };
144
+ * this.locals = {
145
+ * b: 1
146
+ * };
147
+ * this.locals.c = 1;
148
+ * console.log(this.locals);
149
+ * {
150
+ * a: 1,
151
+ * b: 1,
152
+ * c: 1,
153
+ * };
154
+ * ```
155
+ *
156
+ * `ctx.locals` has cache, it only merges `app.locals` once in one request.
157
+ *
158
+ * @member {Object} Context#locals
159
+ */
160
+ get locals() {
161
+ if (!this[LOCALS]) {
162
+ this[LOCALS] = (0, utility_1.assign)({}, this.app.locals);
163
+ }
164
+ if (Array.isArray(this[LOCALS_LIST]) && this[LOCALS_LIST].length > 0) {
165
+ (0, utility_1.assign)(this[LOCALS], this[LOCALS_LIST]);
166
+ this[LOCALS_LIST] = null;
167
+ }
168
+ return this[LOCALS];
169
+ }
170
+ set locals(val) {
171
+ const localsList = this[LOCALS_LIST] ?? [];
172
+ localsList.push(val);
173
+ this[LOCALS_LIST] = localsList;
174
+ }
175
+ /**
176
+ * alias to {@link Context#locals}, compatible with koa that use this variable
177
+ * @member {Object} state
178
+ * @see Context#locals
179
+ */
180
+ get state() {
181
+ return this.locals;
182
+ }
183
+ set state(val) {
184
+ this.locals = val;
185
+ }
186
+ /**
187
+ * Run async function in the background
188
+ * @param {Function} scope - the first args is ctx
189
+ * ```js
190
+ * this.body = 'hi';
191
+ *
192
+ * this.runInBackground(async ctx => {
193
+ * await ctx.mysql.query(sql);
194
+ * await ctx.curl(url);
195
+ * });
196
+ * ```
197
+ */
198
+ runInBackground(scope, taskName) {
199
+ // try to use custom function name first
200
+ if (!taskName) {
201
+ taskName = Reflect.get(scope, '_name') || scope.name || core_1.utils.getCalleeFromStack(true);
202
+ }
203
+ // use setImmediate to ensure all sync logic will run async
204
+ setImmediate(() => {
205
+ this._runInBackground(scope, taskName);
206
+ });
207
+ }
208
+ // let plugins or frameworks to reuse _runInBackground in some cases.
209
+ // e.g.: https://github.com/eggjs/egg-mock/pull/78
210
+ async _runInBackground(scope, taskName) {
211
+ const startTime = (0, performance_ms_1.now)();
212
+ try {
213
+ await scope(this);
214
+ this.coreLogger.info('[egg:background] task:%s success (%dms)', taskName, (0, performance_ms_1.diff)(startTime));
215
+ }
216
+ catch (err) {
217
+ // background task process log
218
+ this.coreLogger.info('[egg:background] task:%s fail (%dms)', taskName, (0, performance_ms_1.diff)(startTime));
219
+ // emit error when promise catch, and set err.runInBackground flag
220
+ err.runInBackground = true;
221
+ this.app.emit('error', err, this);
222
+ }
223
+ }
224
+ }
225
+ exports.default = Context;
226
+ /**
227
+ * Context delegation.
228
+ */
229
+ (0, delegates_1.default)(Context.prototype, 'request')
230
+ /**
231
+ * @member {Boolean} Context#acceptJSON
232
+ * @see Request#acceptJSON
233
+ * @since 1.0.0
234
+ */
235
+ .getter('acceptJSON')
236
+ /**
237
+ * @member {Array} Context#queries
238
+ * @see Request#queries
239
+ * @since 1.0.0
240
+ */
241
+ .getter('queries')
242
+ /**
243
+ * @member {Boolean} Context#accept
244
+ * @see Request#accept
245
+ * @since 1.0.0
246
+ */
247
+ .getter('accept')
248
+ /**
249
+ * @member {string} Context#ip
250
+ * @see Request#ip
251
+ * @since 1.0.0
252
+ */
253
+ .access('ip');
254
+ (0, delegates_1.default)(Context.prototype, 'response')
255
+ /**
256
+ * @member {Number} Context#realStatus
257
+ * @see Response#realStatus
258
+ * @since 1.0.0
259
+ */
260
+ .access('realStatus');
261
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcHAvZXh0ZW5kL2NvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwwREFBaUM7QUFDakMscUNBQWlDO0FBQ2pDLG1EQUEyQztBQUMzQyxzQ0FHcUI7QUFhckIsOEJBQTRCO0FBRTVCLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNwQyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDcEMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDN0MsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ3RDLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDcEQsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBTzVDLE1BQXFCLE9BQVEsU0FBUSxjQUFjO0lBS2pEOzs7T0FHRztJQUNILFNBQVMsQ0FBUztJQUNsQjs7O09BR0c7SUFDSCxvQkFBb0IsQ0FBUztJQUU3Qjs7T0FFRztJQUNILElBQUksT0FBTztRQUNULElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDYixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsT0FBTyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3RHLENBQUM7UUFDRCxPQUFPLE9BQWtCLENBQUM7SUFDNUIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUFJLFVBQVU7UUFDWixJ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
@@ -0,0 +1,16 @@
1
+ import type { Router } from '@eggjs/core';
2
+ import type { HttpClientRequestURL, HttpClientRequestOptions, HttpClient } from '../../lib/core/httpclient.js';
3
+ import type { ContextHttpClient } from '../../lib/core/context_httpclient.js';
4
+ import type Helper from './helper.js';
5
+ import type { EggLogger } from 'egg-logger';
6
+ declare module '@eggjs/core' {
7
+ interface Context {
8
+ curl(url: HttpClientRequestURL, options?: HttpClientRequestOptions): ReturnType<HttpClient['request']>;
9
+ get router(): Router;
10
+ set router(val: Router);
11
+ get helper(): Helper;
12
+ get httpclient(): ContextHttpClient;
13
+ get httpClient(): ContextHttpClient;
14
+ getLogger(name: string): EggLogger;
15
+ }
16
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcHAvZXh0ZW5kL2NvbnRleHQudHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
@@ -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,49 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const node_url_1 = __importDefault(require("node:url"));
7
+ const base_context_class_js_1 = require("../../lib/core/base_context_class.js");
8
+ /**
9
+ * The Helper class which can be used as utility function.
10
+ * We support developers to extend Helper through ${baseDir}/app/extend/helper.js ,
11
+ * then you can use all method on `ctx.helper` that is a instance of Helper.
12
+ */
13
+ class Helper extends base_context_class_js_1.BaseContextClass {
14
+ /**
15
+ * Generate URL path(without host) for route. Takes the route name and a map of named params.
16
+ * @function Helper#pathFor
17
+ * @param {String} name - Router Name
18
+ * @param {Object} params - Other params
19
+ *
20
+ * @example
21
+ * ```js
22
+ * app.get('home', '/index.htm', 'home.index');
23
+ * ctx.helper.pathFor('home', { by: 'recent', limit: 20 })
24
+ * => /index.htm?by=recent&limit=20
25
+ * ```
26
+ * @return {String} url path(without host)
27
+ */
28
+ pathFor(name, params) {
29
+ return this.app.router.url(name, params);
30
+ }
31
+ /**
32
+ * Generate full URL(with host) for route. Takes the route name and a map of named params.
33
+ * @function Helper#urlFor
34
+ * @param {String} name - Router name
35
+ * @param {Object} params - Other params
36
+ * @example
37
+ * ```js
38
+ * app.get('home', '/index.htm', 'home.index');
39
+ * ctx.helper.urlFor('home', { by: 'recent', limit: 20 })
40
+ * => http://127.0.0.1:7001/index.htm?by=recent&limit=20
41
+ * ```
42
+ * @return {String} full url(with host)
43
+ */
44
+ urlFor(name, params) {
45
+ return this.ctx.protocol + '://' + this.ctx.host + node_url_1.default.resolve('/', this.pathFor(name, params));
46
+ }
47
+ }
48
+ exports.default = Helper;
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwcC9leHRlbmQvaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsd0RBQTJCO0FBQzNCLGdGQUF3RTtBQUV4RTs7OztHQUlHO0FBQ0gsTUFBcUIsTUFBTyxTQUFRLHdDQUFnQjtJQUNsRDs7Ozs7Ozs7Ozs7OztPQWFHO0lBQ0gsT0FBTyxDQUFDLElBQVksRUFBRSxNQUEyQjtRQUMvQyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7T0FZRztJQUNILE1BQU0sQ0FBQyxJQUFZLEVBQUUsTUFBMkI7UUFDOUMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsa0JBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDbEcsQ0FBQztDQUNGO0FBbkNELHlCQW1DQyJ9
@@ -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
+ }