egg 4.1.0-beta.20 → 4.1.0-beta.21
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/dist/agent.d.ts +3 -17
- package/dist/agent.js +7 -11
- package/dist/app/extend/context.d.ts +180 -12
- package/dist/app/extend/context.js +259 -3
- package/dist/app/extend/helper.d.ts +37 -12
- package/dist/app/extend/helper.js +43 -5
- package/dist/app/extend/request.d.ts +132 -12
- package/dist/app/extend/request.js +265 -4
- package/dist/app/extend/response.d.ts +25 -2
- package/dist/app/extend/response.js +34 -3
- package/dist/app/middleware/body_parser.d.ts +2 -2
- package/dist/app/middleware/body_parser.js +3 -7
- package/dist/app/middleware/meta.d.ts +10 -12
- package/dist/app/middleware/meta.js +19 -13
- package/dist/app/middleware/notfound.d.ts +7 -12
- package/dist/app/middleware/notfound.js +28 -25
- package/dist/app/middleware/override_method.d.ts +2 -2
- package/dist/app/middleware/override_method.js +3 -7
- package/dist/app/middleware/site_file.d.ts +9 -12
- package/dist/app/middleware/site_file.js +52 -37
- package/dist/config/config.default.d.ts +2 -16
- package/dist/config/config.default.js +375 -282
- package/dist/config/config.local.d.ts +5 -7
- package/dist/config/config.local.js +9 -6
- package/dist/config/config.unittest.d.ts +5 -7
- package/dist/config/config.unittest.js +8 -9
- package/dist/config/plugin.d.ts +120 -122
- package/dist/config/plugin.js +121 -53
- package/dist/index.d.ts +66 -13
- package/dist/index.js +70 -30
- package/dist/lib/agent.d.ts +19 -12
- package/dist/lib/agent.js +48 -22
- package/dist/lib/application.d.ts +56 -12
- package/dist/lib/application.js +261 -23
- package/dist/lib/core/base_context_class.d.ts +18 -12
- package/dist/lib/core/base_context_class.js +17 -4
- package/dist/lib/core/base_context_logger.d.ts +36 -12
- package/dist/lib/core/base_context_logger.js +60 -3
- package/dist/lib/core/base_hook_class.d.ts +11 -12
- package/dist/lib/core/base_hook_class.js +22 -3
- package/dist/lib/core/context_httpclient.d.ts +17 -12
- package/dist/lib/core/context_httpclient.js +26 -3
- package/dist/lib/core/httpclient.d.ts +14 -12
- package/dist/lib/core/httpclient.js +39 -3
- package/dist/lib/core/logger.d.ts +3 -17
- package/dist/lib/core/logger.js +37 -3
- package/dist/lib/core/messenger/IMessenger.d.ts +50 -2
- package/dist/lib/core/messenger/IMessenger.js +2 -1
- package/dist/lib/core/messenger/base.d.ts +8 -13
- package/dist/lib/core/messenger/base.js +28 -17
- package/dist/lib/core/messenger/index.d.ts +7 -12
- package/dist/lib/core/messenger/index.js +10 -17
- package/dist/lib/core/messenger/ipc.d.ts +55 -68
- package/dist/lib/core/messenger/ipc.js +151 -17
- package/dist/lib/core/messenger/local.d.ts +56 -69
- package/dist/lib/core/messenger/local.js +128 -17
- package/dist/lib/core/utils.d.ts +2 -5
- package/dist/lib/core/utils.js +70 -3
- package/dist/lib/egg.d.ts +285 -12
- package/dist/lib/egg.js +582 -17
- package/dist/lib/error/CookieLimitExceedError.d.ts +5 -2
- package/dist/lib/error/CookieLimitExceedError.js +12 -3
- package/dist/lib/error/MessageUnhandledRejectionError.d.ts +5 -2
- package/dist/lib/error/MessageUnhandledRejectionError.js +12 -3
- package/dist/lib/error/index.d.ts +2 -4
- package/dist/lib/error/index.js +3 -5
- package/dist/lib/loader/AgentWorkerLoader.d.ts +12 -3
- package/dist/lib/loader/AgentWorkerLoader.js +20 -4
- package/dist/lib/loader/AppWorkerLoader.d.ts +17 -3
- package/dist/lib/loader/AppWorkerLoader.js +39 -4
- package/dist/lib/loader/EggApplicationLoader.d.ts +4 -2
- package/dist/lib/loader/EggApplicationLoader.js +4 -3
- package/dist/lib/loader/index.d.ts +3 -5
- package/dist/lib/loader/index.js +4 -6
- package/dist/lib/start.d.ts +24 -12
- package/dist/lib/start.js +46 -27
- package/dist/lib/types.d.ts +281 -12
- package/dist/lib/types.js +31 -4
- package/dist/lib/types.plugin.d.ts +12 -1
- package/dist/lib/types.plugin.js +14 -3
- package/dist/lib/utils.d.ts +2 -5
- package/dist/lib/utils.js +14 -3
- package/dist/urllib.d.ts +1 -1
- package/dist/urllib.js +2 -3
- package/package.json +23 -23
- package/dist/AgentWorkerLoader-DG_hAClt.d.ts +0 -17
- package/dist/AgentWorkerLoader-D_hceBRW.js +0 -24
- package/dist/AppWorkerLoader-CAtxJvGl.js +0 -37
- package/dist/AppWorkerLoader-CT875rYM.d.ts +0 -22
- package/dist/CookieLimitExceedError-CAW0HYJw.d.ts +0 -8
- package/dist/CookieLimitExceedError-DLGakbeu.js +0 -15
- package/dist/EggApplicationLoader-CMe1VQt1.js +0 -7
- package/dist/EggApplicationLoader-PnIvd5oV.d.ts +0 -8
- package/dist/IMessenger-C9g6ypSI.d.ts +0 -54
- package/dist/MessageUnhandledRejectionError-Lq5fWw24.d.ts +0 -8
- package/dist/MessageUnhandledRejectionError-oD_E1Ewl.js +0 -15
- package/dist/agent-BfFWeJj4.js +0 -55
- package/dist/application-DVwFQSa9.js +0 -208
- package/dist/base-KLVtlzUD.d.ts +0 -12
- package/dist/base_context_class-Xc1OZql9.js +0 -19
- package/dist/base_context_logger-CZU59PGA.js +0 -58
- package/dist/base_hook_class-D0Gu2p8r.js +0 -26
- package/dist/base_hook_class-R8A8gm1s.d.ts +0 -1109
- package/dist/context-D1Wg7CXs.js +0 -244
- package/dist/context_httpclient-BpRMdJhf.js +0 -29
- package/dist/egg-DVo5e_lr.js +0 -800
- package/dist/error-BYo_LRnd.js +0 -1
- package/dist/helper-B3PKMPXq.js +0 -47
- package/dist/httpclient-C1QPc_R7.js +0 -36
- package/dist/index-CUPkUUOR.d.ts +0 -1
- package/dist/index-CkgLZdB4.d.ts +0 -1
- package/dist/loader-3myZ-rpm.js +0 -1
- package/dist/logger-C4tIcO3S.js +0 -31
- package/dist/request-Cy_1DlaX.js +0 -225
- package/dist/response-CDeQ9Sx2.js +0 -36
- package/dist/response-DlNYDj00.d.ts +0 -29
- package/dist/src-BuOjXSrB.js +0 -3
- package/dist/start-4E84z796.js +0 -35
- package/dist/types-dKSyDnVp.js +0 -32
- package/dist/types.plugin-B2v0K0I8.js +0 -14
- package/dist/types.plugin-C3D5I7VD.d.ts +0 -12
- package/dist/utils-B1Rjsoi9.js +0 -48
- package/dist/utils-BDoYg6z6.js +0 -14
|
@@ -1,12 +1,132 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
1
|
+
import { Request as EggCoreRequest } from '@eggjs/core';
|
|
2
|
+
import type { Application } from '../../lib/application.ts';
|
|
3
|
+
import type Context from './context.ts';
|
|
4
|
+
import Response from './response.ts';
|
|
5
|
+
export default class Request extends EggCoreRequest {
|
|
6
|
+
app: Application;
|
|
7
|
+
ctx: Context;
|
|
8
|
+
response: Response;
|
|
9
|
+
/**
|
|
10
|
+
* Request body, parsed from koa-bodyparser or @eggjs/multipart
|
|
11
|
+
*/
|
|
12
|
+
body: any;
|
|
13
|
+
/**
|
|
14
|
+
* Parse the "Host" header field host
|
|
15
|
+
* and support X-Forwarded-Host when a
|
|
16
|
+
* proxy is enabled.
|
|
17
|
+
* @member {String} Request#host
|
|
18
|
+
* @example
|
|
19
|
+
* ip + port
|
|
20
|
+
* ```js
|
|
21
|
+
* this.request.host
|
|
22
|
+
* => '127.0.0.1:7001'
|
|
23
|
+
* ```
|
|
24
|
+
* or domain
|
|
25
|
+
* ```js
|
|
26
|
+
* this.request.host
|
|
27
|
+
* => 'demo.eggjs.org'
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
get host(): string;
|
|
31
|
+
/**
|
|
32
|
+
* @member {String} Request#protocol
|
|
33
|
+
* @example
|
|
34
|
+
* ```js
|
|
35
|
+
* this.request.protocol
|
|
36
|
+
* => 'https'
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
get protocol(): string;
|
|
40
|
+
/**
|
|
41
|
+
* Get all pass through ip addresses from the request.
|
|
42
|
+
* Enable only on `app.config.proxy = true`
|
|
43
|
+
*
|
|
44
|
+
* @member {Array} Request#ips
|
|
45
|
+
* @example
|
|
46
|
+
* ```js
|
|
47
|
+
* this.request.ips
|
|
48
|
+
* => ['100.23.1.2', '201.10.10.2']
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
get ips(): string[];
|
|
52
|
+
/**
|
|
53
|
+
* Get the request remote IPv4 address
|
|
54
|
+
* @member {String} Request#ip
|
|
55
|
+
* @return {String} IPv4 address
|
|
56
|
+
* @example
|
|
57
|
+
* ```js
|
|
58
|
+
* this.request.ip
|
|
59
|
+
* => '127.0.0.1'
|
|
60
|
+
* => '111.10.2.1'
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
get ip(): string;
|
|
64
|
+
/**
|
|
65
|
+
* Set the request remote IPv4 address
|
|
66
|
+
* @member {String} Request#ip
|
|
67
|
+
* @param {String} ip - IPv4 address
|
|
68
|
+
* @example
|
|
69
|
+
* ```js
|
|
70
|
+
* this.request.ip
|
|
71
|
+
* => '127.0.0.1'
|
|
72
|
+
* => '111.10.2.1'
|
|
73
|
+
* ```
|
|
74
|
+
*/
|
|
75
|
+
set ip(ip: string);
|
|
76
|
+
/**
|
|
77
|
+
* detect if response should be json
|
|
78
|
+
* 1. url path ends with `.json`
|
|
79
|
+
* 2. response type is set to json
|
|
80
|
+
* 3. detect by request accept header
|
|
81
|
+
*
|
|
82
|
+
* @member {Boolean} Request#acceptJSON
|
|
83
|
+
* @since 1.0.0
|
|
84
|
+
*/
|
|
85
|
+
get acceptJSON(): boolean;
|
|
86
|
+
_customQuery(cacheName: symbol, filter: (value: string | string[]) => string | string[]): Record<string, string | string[]>;
|
|
87
|
+
/**
|
|
88
|
+
* get params pass by querystring, all values are of string type.
|
|
89
|
+
* @member {Object} Request#query
|
|
90
|
+
* @example
|
|
91
|
+
* ```js
|
|
92
|
+
* GET http://127.0.0.1:7001?name=Foo&age=20&age=21
|
|
93
|
+
* this.query
|
|
94
|
+
* => { 'name': 'Foo', 'age': '20' }
|
|
95
|
+
*
|
|
96
|
+
* GET http://127.0.0.1:7001?a=b&a=c&o[foo]=bar&b[]=1&b[]=2&e=val
|
|
97
|
+
* this.query
|
|
98
|
+
* =>
|
|
99
|
+
* {
|
|
100
|
+
* "a": "b",
|
|
101
|
+
* "o[foo]": "bar",
|
|
102
|
+
* "b[]": "1",
|
|
103
|
+
* "e": "val"
|
|
104
|
+
* }
|
|
105
|
+
* ```
|
|
106
|
+
*/
|
|
107
|
+
get query(): Record<string, string>;
|
|
108
|
+
/**
|
|
109
|
+
* get params pass by querystring, all value are Array type. {@link Request#query}
|
|
110
|
+
* @member {Array} Request#queries
|
|
111
|
+
* @example
|
|
112
|
+
* ```js
|
|
113
|
+
* GET http://127.0.0.1:7001?a=b&a=c&o[foo]=bar&b[]=1&b[]=2&e=val
|
|
114
|
+
* this.queries
|
|
115
|
+
* =>
|
|
116
|
+
* {
|
|
117
|
+
* "a": ["b", "c"],
|
|
118
|
+
* "o[foo]": ["bar"],
|
|
119
|
+
* "b[]": ["1", "2"],
|
|
120
|
+
* "e": ["val"]
|
|
121
|
+
* }
|
|
122
|
+
* ```
|
|
123
|
+
*/
|
|
124
|
+
get queries(): Record<string, string[]>;
|
|
125
|
+
/**
|
|
126
|
+
* Set query-string as an object.
|
|
127
|
+
*
|
|
128
|
+
* @function Request#query
|
|
129
|
+
* @param {Object} obj set querystring and query object for request.
|
|
130
|
+
*/
|
|
131
|
+
set query(obj: Record<string, string>);
|
|
132
|
+
}
|
|
@@ -1,4 +1,265 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { Request } from
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import querystring from 'node:querystring';
|
|
2
|
+
import { Request as EggCoreRequest } from '@eggjs/core';
|
|
3
|
+
import Response from "./response.js";
|
|
4
|
+
const QUERY_CACHE = Symbol('request query cache');
|
|
5
|
+
const QUERIES_CACHE = Symbol('request queries cache');
|
|
6
|
+
const PROTOCOL = Symbol('request protocol');
|
|
7
|
+
const HOST = Symbol('request host');
|
|
8
|
+
const IPS = Symbol('request ips');
|
|
9
|
+
const RE_ARRAY_KEY = /[^[\]]+\[\]$/;
|
|
10
|
+
export default class Request extends EggCoreRequest {
|
|
11
|
+
/**
|
|
12
|
+
* Parse the "Host" header field host
|
|
13
|
+
* and support X-Forwarded-Host when a
|
|
14
|
+
* proxy is enabled.
|
|
15
|
+
* @member {String} Request#host
|
|
16
|
+
* @example
|
|
17
|
+
* ip + port
|
|
18
|
+
* ```js
|
|
19
|
+
* this.request.host
|
|
20
|
+
* => '127.0.0.1:7001'
|
|
21
|
+
* ```
|
|
22
|
+
* or domain
|
|
23
|
+
* ```js
|
|
24
|
+
* this.request.host
|
|
25
|
+
* => 'demo.eggjs.org'
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
get host() {
|
|
29
|
+
let host = this[HOST];
|
|
30
|
+
if (host) {
|
|
31
|
+
return host;
|
|
32
|
+
}
|
|
33
|
+
if (this.app.config.proxy) {
|
|
34
|
+
host = getFromHeaders(this, this.app.config.hostHeaders);
|
|
35
|
+
}
|
|
36
|
+
host = host || this.get('host') || '';
|
|
37
|
+
this[HOST] = host = host.split(',')[0].trim();
|
|
38
|
+
return host;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* @member {String} Request#protocol
|
|
42
|
+
* @example
|
|
43
|
+
* ```js
|
|
44
|
+
* this.request.protocol
|
|
45
|
+
* => 'https'
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
get protocol() {
|
|
49
|
+
let protocol = this[PROTOCOL];
|
|
50
|
+
if (protocol) {
|
|
51
|
+
return protocol;
|
|
52
|
+
}
|
|
53
|
+
// detect encrypted socket
|
|
54
|
+
if (this.socket?.encrypted) {
|
|
55
|
+
this[PROTOCOL] = protocol = 'https';
|
|
56
|
+
return protocol;
|
|
57
|
+
}
|
|
58
|
+
// get from headers specified in `app.config.protocolHeaders`
|
|
59
|
+
if (this.app.config.proxy) {
|
|
60
|
+
const proto = getFromHeaders(this, this.app.config.protocolHeaders);
|
|
61
|
+
if (proto) {
|
|
62
|
+
this[PROTOCOL] = protocol = proto.split(/\s*,\s*/)[0];
|
|
63
|
+
return protocol;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
// use protocol specified in `app.config.protocol`
|
|
67
|
+
this[PROTOCOL] = protocol = this.app.config.protocol || 'http';
|
|
68
|
+
return protocol;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Get all pass through ip addresses from the request.
|
|
72
|
+
* Enable only on `app.config.proxy = true`
|
|
73
|
+
*
|
|
74
|
+
* @member {Array} Request#ips
|
|
75
|
+
* @example
|
|
76
|
+
* ```js
|
|
77
|
+
* this.request.ips
|
|
78
|
+
* => ['100.23.1.2', '201.10.10.2']
|
|
79
|
+
* ```
|
|
80
|
+
*/
|
|
81
|
+
get ips() {
|
|
82
|
+
let ips = this[IPS];
|
|
83
|
+
if (ips) {
|
|
84
|
+
return ips;
|
|
85
|
+
}
|
|
86
|
+
// return empty array when proxy=false
|
|
87
|
+
if (!this.app.config.proxy) {
|
|
88
|
+
this[IPS] = ips = [];
|
|
89
|
+
return ips;
|
|
90
|
+
}
|
|
91
|
+
const val = getFromHeaders(this, this.app.config.ipHeaders);
|
|
92
|
+
this[IPS] = ips = val ? val.split(/\s*,\s*/) : [];
|
|
93
|
+
let maxIpsCount = this.app.config.maxIpsCount;
|
|
94
|
+
// Compatible with maxProxyCount logic (previous logic is wrong, only for compatibility with legacy logic)
|
|
95
|
+
if (!maxIpsCount && this.app.config.maxProxyCount) {
|
|
96
|
+
maxIpsCount = this.app.config.maxProxyCount + 1;
|
|
97
|
+
}
|
|
98
|
+
if (maxIpsCount > 0) {
|
|
99
|
+
// if maxIpsCount present, only keep `maxIpsCount` ips
|
|
100
|
+
// [ illegalIp, clientRealIp, proxyIp1, proxyIp2 ...]
|
|
101
|
+
this[IPS] = ips = ips.slice(-maxIpsCount);
|
|
102
|
+
}
|
|
103
|
+
return ips;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Get the request remote IPv4 address
|
|
107
|
+
* @member {String} Request#ip
|
|
108
|
+
* @return {String} IPv4 address
|
|
109
|
+
* @example
|
|
110
|
+
* ```js
|
|
111
|
+
* this.request.ip
|
|
112
|
+
* => '127.0.0.1'
|
|
113
|
+
* => '111.10.2.1'
|
|
114
|
+
* ```
|
|
115
|
+
*/
|
|
116
|
+
get ip() {
|
|
117
|
+
if (this._ip) {
|
|
118
|
+
return this._ip;
|
|
119
|
+
}
|
|
120
|
+
const ip = this.ips[0] ?? this.socket.remoteAddress;
|
|
121
|
+
// will be '::ffff:x.x.x.x', should convert to standard IPv4 format
|
|
122
|
+
// https://zh.wikipedia.org/wiki/IPv6
|
|
123
|
+
this._ip = ip && ip.startsWith('::ffff:') ? ip.substring(7) : ip;
|
|
124
|
+
return this._ip;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Set the request remote IPv4 address
|
|
128
|
+
* @member {String} Request#ip
|
|
129
|
+
* @param {String} ip - IPv4 address
|
|
130
|
+
* @example
|
|
131
|
+
* ```js
|
|
132
|
+
* this.request.ip
|
|
133
|
+
* => '127.0.0.1'
|
|
134
|
+
* => '111.10.2.1'
|
|
135
|
+
* ```
|
|
136
|
+
*/
|
|
137
|
+
set ip(ip) {
|
|
138
|
+
this._ip = ip;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* detect if response should be json
|
|
142
|
+
* 1. url path ends with `.json`
|
|
143
|
+
* 2. response type is set to json
|
|
144
|
+
* 3. detect by request accept header
|
|
145
|
+
*
|
|
146
|
+
* @member {Boolean} Request#acceptJSON
|
|
147
|
+
* @since 1.0.0
|
|
148
|
+
*/
|
|
149
|
+
get acceptJSON() {
|
|
150
|
+
if (this.path.endsWith('.json'))
|
|
151
|
+
return true;
|
|
152
|
+
if (this.response.type && this.response.type.indexOf('json') >= 0)
|
|
153
|
+
return true;
|
|
154
|
+
if (this.accepts('html', 'text', 'json') === 'json')
|
|
155
|
+
return true;
|
|
156
|
+
return false;
|
|
157
|
+
}
|
|
158
|
+
// How to read query safely
|
|
159
|
+
// https://github.com/koajs/qs/issues/5
|
|
160
|
+
_customQuery(cacheName, filter) {
|
|
161
|
+
const str = this.querystring || '';
|
|
162
|
+
let c = this[cacheName];
|
|
163
|
+
if (!c) {
|
|
164
|
+
c = this[cacheName] = {};
|
|
165
|
+
}
|
|
166
|
+
let cacheQuery = c[str];
|
|
167
|
+
if (!cacheQuery) {
|
|
168
|
+
cacheQuery = c[str] = {};
|
|
169
|
+
const isQueries = cacheName === QUERIES_CACHE;
|
|
170
|
+
// `querystring.parse` CANNOT parse something like `a[foo]=1&a[bar]=2`
|
|
171
|
+
const query = str ? querystring.parse(str) : {};
|
|
172
|
+
for (const key in query) {
|
|
173
|
+
if (!key) {
|
|
174
|
+
// key is '', like `a=b&`
|
|
175
|
+
continue;
|
|
176
|
+
}
|
|
177
|
+
const value = filter(query[key]);
|
|
178
|
+
cacheQuery[key] = value;
|
|
179
|
+
if (isQueries && RE_ARRAY_KEY.test(key)) {
|
|
180
|
+
// `this.queries['key'] => this.queries['key[]']` is compatibly supported
|
|
181
|
+
const subKey = key.substring(0, key.length - 2);
|
|
182
|
+
if (!cacheQuery[subKey]) {
|
|
183
|
+
cacheQuery[subKey] = value;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
return cacheQuery;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* get params pass by querystring, all values are of string type.
|
|
192
|
+
* @member {Object} Request#query
|
|
193
|
+
* @example
|
|
194
|
+
* ```js
|
|
195
|
+
* GET http://127.0.0.1:7001?name=Foo&age=20&age=21
|
|
196
|
+
* this.query
|
|
197
|
+
* => { 'name': 'Foo', 'age': '20' }
|
|
198
|
+
*
|
|
199
|
+
* GET http://127.0.0.1:7001?a=b&a=c&o[foo]=bar&b[]=1&b[]=2&e=val
|
|
200
|
+
* this.query
|
|
201
|
+
* =>
|
|
202
|
+
* {
|
|
203
|
+
* "a": "b",
|
|
204
|
+
* "o[foo]": "bar",
|
|
205
|
+
* "b[]": "1",
|
|
206
|
+
* "e": "val"
|
|
207
|
+
* }
|
|
208
|
+
* ```
|
|
209
|
+
*/
|
|
210
|
+
get query() {
|
|
211
|
+
return this._customQuery(QUERY_CACHE, firstValue);
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* get params pass by querystring, all value are Array type. {@link Request#query}
|
|
215
|
+
* @member {Array} Request#queries
|
|
216
|
+
* @example
|
|
217
|
+
* ```js
|
|
218
|
+
* GET http://127.0.0.1:7001?a=b&a=c&o[foo]=bar&b[]=1&b[]=2&e=val
|
|
219
|
+
* this.queries
|
|
220
|
+
* =>
|
|
221
|
+
* {
|
|
222
|
+
* "a": ["b", "c"],
|
|
223
|
+
* "o[foo]": ["bar"],
|
|
224
|
+
* "b[]": ["1", "2"],
|
|
225
|
+
* "e": ["val"]
|
|
226
|
+
* }
|
|
227
|
+
* ```
|
|
228
|
+
*/
|
|
229
|
+
get queries() {
|
|
230
|
+
return this._customQuery(QUERIES_CACHE, arrayValue);
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Set query-string as an object.
|
|
234
|
+
*
|
|
235
|
+
* @function Request#query
|
|
236
|
+
* @param {Object} obj set querystring and query object for request.
|
|
237
|
+
*/
|
|
238
|
+
set query(obj) {
|
|
239
|
+
this.querystring = querystring.stringify(obj);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
function firstValue(value) {
|
|
243
|
+
if (Array.isArray(value)) {
|
|
244
|
+
value = value[0];
|
|
245
|
+
}
|
|
246
|
+
return value;
|
|
247
|
+
}
|
|
248
|
+
function arrayValue(value) {
|
|
249
|
+
if (!Array.isArray(value)) {
|
|
250
|
+
value = [value];
|
|
251
|
+
}
|
|
252
|
+
return value;
|
|
253
|
+
}
|
|
254
|
+
function getFromHeaders(request, names) {
|
|
255
|
+
if (!names)
|
|
256
|
+
return '';
|
|
257
|
+
const fields = names.split(/\s*,\s*/);
|
|
258
|
+
for (const name of fields) {
|
|
259
|
+
const value = request.get(name);
|
|
260
|
+
if (value)
|
|
261
|
+
return value;
|
|
262
|
+
}
|
|
263
|
+
return '';
|
|
264
|
+
}
|
|
265
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcHAvZXh0ZW5kL3JlcXVlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxXQUFXLE1BQU0sa0JBQWtCLENBQUM7QUFFM0MsT0FBTyxFQUFFLE9BQU8sSUFBSSxjQUFjLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFJeEQsT0FBTyxRQUFRLE1BQU0sZUFBZSxDQUFDO0FBRXJDLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBQ2xELE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0FBQ3RELE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBQzVDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUNwQyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDbEMsTUFBTSxZQUFZLEdBQUcsY0FBYyxDQUFDO0FBRXBDLE1BQU0sQ0FBQyxPQUFPLE9BQU8sT0FBUSxTQUFRLGNBQWM7SUFVakQ7Ozs7Ozs7Ozs7Ozs7Ozs7T0FnQkc7SUFDSCxJQUFJLElBQUk7UUFDTixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUF1QixDQUFDO1FBQzVDLElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzFCLElBQUksR0FBRyxjQUFjLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzNELENBQUM7UUFDRCxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxD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
|
|
@@ -1,2 +1,25 @@
|
|
|
1
|
-
import { Response } from
|
|
2
|
-
export
|
|
1
|
+
import { Response as KoaResponse } from '@eggjs/core';
|
|
2
|
+
export default class Response extends KoaResponse {
|
|
3
|
+
/**
|
|
4
|
+
* Get or set a real status code.
|
|
5
|
+
*
|
|
6
|
+
* e.g.: Using 302 status redirect to the global error page
|
|
7
|
+
* instead of show current 500 status page.
|
|
8
|
+
* And access log should save 500 not 302,
|
|
9
|
+
* then the `realStatus` can help us find out the real status code.
|
|
10
|
+
* @member {Number} Response#realStatus
|
|
11
|
+
* @return {Number} The status code to be set.
|
|
12
|
+
*/
|
|
13
|
+
get realStatus(): number;
|
|
14
|
+
/**
|
|
15
|
+
* Set a real status code.
|
|
16
|
+
*
|
|
17
|
+
* e.g.: Using 302 status redirect to the global error page
|
|
18
|
+
* instead of show current 500 status page.
|
|
19
|
+
* And access log should save 500 not 302,
|
|
20
|
+
* then the `realStatus` can help us find out the real status code.
|
|
21
|
+
* @member {Number} Response#realStatus
|
|
22
|
+
* @param {Number} status The status code to be set.
|
|
23
|
+
*/
|
|
24
|
+
set realStatus(status: number);
|
|
25
|
+
}
|
|
@@ -1,3 +1,34 @@
|
|
|
1
|
-
import { Response } from
|
|
2
|
-
|
|
3
|
-
export
|
|
1
|
+
import { Response as KoaResponse } from '@eggjs/core';
|
|
2
|
+
const REAL_STATUS = Symbol('response realStatus');
|
|
3
|
+
export default class Response extends KoaResponse {
|
|
4
|
+
/**
|
|
5
|
+
* Get or set a real status code.
|
|
6
|
+
*
|
|
7
|
+
* e.g.: Using 302 status redirect to the global error page
|
|
8
|
+
* instead of show current 500 status page.
|
|
9
|
+
* And access log should save 500 not 302,
|
|
10
|
+
* then the `realStatus` can help us find out the real status code.
|
|
11
|
+
* @member {Number} Response#realStatus
|
|
12
|
+
* @return {Number} The status code to be set.
|
|
13
|
+
*/
|
|
14
|
+
get realStatus() {
|
|
15
|
+
if (this[REAL_STATUS]) {
|
|
16
|
+
return this[REAL_STATUS];
|
|
17
|
+
}
|
|
18
|
+
return this.status;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Set a real status code.
|
|
22
|
+
*
|
|
23
|
+
* e.g.: Using 302 status redirect to the global error page
|
|
24
|
+
* instead of show current 500 status page.
|
|
25
|
+
* And access log should save 500 not 302,
|
|
26
|
+
* then the `realStatus` can help us find out the real status code.
|
|
27
|
+
* @member {Number} Response#realStatus
|
|
28
|
+
* @param {Number} status The status code to be set.
|
|
29
|
+
*/
|
|
30
|
+
set realStatus(status) {
|
|
31
|
+
this[REAL_STATUS] = status;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwL2V4dGVuZC9yZXNwb25zZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxJQUFJLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUV0RCxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztBQUVsRCxNQUFNLENBQUMsT0FBTyxPQUFPLFFBQVMsU0FBUSxXQUFXO0lBQy9DOzs7Ozs7Ozs7T0FTRztJQUNILElBQUksVUFBVTtRQUNaLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDdEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFXLENBQUM7UUFDckMsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0gsSUFBSSxVQUFVLENBQUMsTUFBYztRQUMzQixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDO0lBQzdCLENBQUM7Q0FDRiJ9
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import bodyparser from
|
|
2
|
-
export
|
|
1
|
+
import bodyparser from 'koa-bodyparser';
|
|
2
|
+
export default bodyparser;
|
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
import bodyparser from
|
|
2
|
-
|
|
3
|
-
//#
|
|
4
|
-
var body_parser_default = bodyparser;
|
|
5
|
-
|
|
6
|
-
//#endregion
|
|
7
|
-
export { body_parser_default as default };
|
|
1
|
+
import bodyparser from 'koa-bodyparser';
|
|
2
|
+
export default bodyparser;
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9keV9wYXJzZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwL21pZGRsZXdhcmUvYm9keV9wYXJzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxVQUFVLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEMsZUFBZSxVQUFVLENBQUMifQ==
|
|
@@ -1,12 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
import
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
import "../../index-CkgLZdB4.js";
|
|
12
|
-
export { MetaMiddlewareOptions, _default as default };
|
|
1
|
+
/**
|
|
2
|
+
* meta middleware, should be the first middleware
|
|
3
|
+
*/
|
|
4
|
+
import type { Context, Next } from '../../lib/egg.ts';
|
|
5
|
+
export interface MetaMiddlewareOptions {
|
|
6
|
+
enable: boolean;
|
|
7
|
+
logging: boolean;
|
|
8
|
+
}
|
|
9
|
+
declare const _default: (options: MetaMiddlewareOptions) => (ctx: Context, next: Next) => Promise<void>;
|
|
10
|
+
export default _default;
|
|
@@ -1,14 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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
|
+
};
|
|
11
19
|
};
|
|
12
|
-
|
|
13
|
-
//#endregion
|
|
14
|
-
export { meta_default as default };
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcHAvbWlkZGxld2FyZS9tZXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBUzlDLGVBQWUsQ0FBQyxPQUE4QixFQUFFLEVBQUU7SUFDaEQsT0FBTyxLQUFLLFVBQVUsSUFBSSxDQUFDLEdBQVksRUFBRSxJQUFVO1FBQ2pELElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3BCLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGtEQUFrRCxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBQzlHLENBQUM7UUFDRCxNQUFNLElBQUksRUFBRSxDQUFDO1FBQ2IsNkJBQTZCO1FBQzdCLElBQUksR0FBRyxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDN0IsR0FBRyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsb0JBQW9CLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUNsRyxDQUFDO2FBQU0sQ0FBQztZQUNOLEdBQUcsQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDcEQsQ0FBQztJQUNILENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQyJ9
|
|
@@ -1,12 +1,7 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
import "../../IMessenger-C9g6ypSI.js";
|
|
9
|
-
import "../../CookieLimitExceedError-CAW0HYJw.js";
|
|
10
|
-
import "../../MessageUnhandledRejectionError-Lq5fWw24.js";
|
|
11
|
-
import "../../index-CkgLZdB4.js";
|
|
12
|
-
export { NotFoundMiddlewareOptions, _default as default };
|
|
1
|
+
import type { Next, Context } from '../../lib/egg.ts';
|
|
2
|
+
export interface NotFoundMiddlewareOptions {
|
|
3
|
+
enable: boolean;
|
|
4
|
+
pageUrl: string;
|
|
5
|
+
}
|
|
6
|
+
declare const _default: (options: NotFoundMiddlewareOptions) => (ctx: Context, next: Next) => Promise<void>;
|
|
7
|
+
export default _default;
|
|
@@ -1,26 +1,29 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
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
|
+
};
|
|
23
28
|
};
|
|
24
|
-
|
|
25
|
-
//#endregion
|
|
26
|
-
export { notfound_default as default };
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90Zm91bmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwL21pZGRsZXdhcmUvbm90Zm91bmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBT0EsZUFBZSxDQUFDLE9BQWtDLEVBQUUsRUFBRTtJQUNwRCxPQUFPLEtBQUssVUFBVSxRQUFRLENBQUMsR0FBWSxFQUFFLElBQVU7UUFDckQsTUFBTSxJQUFJLEVBQUUsQ0FBQztRQUViLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ25DLE9BQU87UUFDVCxDQUFDO1FBRUQsc0RBQXNEO1FBQ3RELEdBQUcsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO1FBRWpCLElBQUksR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ25CLEdBQUcsQ0FBQyxJQUFJLEdBQUc7Z0JBQ1QsT0FBTyxFQUFFLFdBQVc7YUFDckIsQ0FBQztZQUNGLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxZQUFZLEdBQUcsd0JBQXdCLENBQUM7UUFFOUMsb0NBQW9DO1FBQ3BDLElBQUksT0FBTyxDQUFDLE9BQU8sSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNwRCxHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsWUFBWSx5Q0FBeUMsT0FBTyxDQUFDLE9BQU8scUNBQXFDLENBQUM7WUFDeEgsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNwQixHQUFHLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztZQUNyQixHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM5QixPQUFPO1FBQ1QsQ0FBQztRQUNELEdBQUcsQ0FBQyxJQUFJLEdBQUcsWUFBWSxDQUFDO0lBQzFCLENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQyJ9
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import override from
|
|
2
|
-
export
|
|
1
|
+
import override from 'koa-override';
|
|
2
|
+
export default override;
|
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
import override from
|
|
2
|
-
|
|
3
|
-
//#
|
|
4
|
-
var override_method_default = override;
|
|
5
|
-
|
|
6
|
-
//#endregion
|
|
7
|
-
export { override_method_default as default };
|
|
1
|
+
import override from 'koa-override';
|
|
2
|
+
export default override;
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcnJpZGVfbWV0aG9kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcC9taWRkbGV3YXJlL292ZXJyaWRlX21ldGhvZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFFBQVEsTUFBTSxjQUFjLENBQUM7QUFFcEMsZUFBZSxRQUFRLENBQUMifQ==
|