egg 3.26.0 → 4.0.0-beta.0

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 (196) hide show
  1. package/README.md +1 -1
  2. package/README.zh-CN.md +6 -5
  3. package/dist/commonjs/agent.d.ts +4 -0
  4. package/dist/commonjs/agent.js +10 -0
  5. package/dist/commonjs/app/middleware/body_parser.d.ts +2 -0
  6. package/dist/commonjs/app/middleware/body_parser.js +8 -0
  7. package/dist/commonjs/app/middleware/meta.d.ts +11 -0
  8. package/dist/commonjs/app/middleware/meta.js +22 -0
  9. package/dist/commonjs/app/middleware/notfound.d.ts +8 -0
  10. package/dist/commonjs/app/middleware/notfound.js +31 -0
  11. package/dist/commonjs/app/middleware/override_method.d.ts +2 -0
  12. package/dist/commonjs/app/middleware/override_method.js +8 -0
  13. package/dist/commonjs/app/middleware/site_file.d.ts +7 -0
  14. package/dist/commonjs/app/middleware/site_file.js +40 -0
  15. package/dist/commonjs/config/config.default.d.ts +9 -0
  16. package/dist/commonjs/config/config.default.js +378 -0
  17. package/dist/commonjs/config/config.local.d.ts +8 -0
  18. package/dist/commonjs/config/config.local.js +12 -0
  19. package/dist/commonjs/config/config.unittest.d.ts +7 -0
  20. package/dist/commonjs/config/config.unittest.js +11 -0
  21. package/dist/commonjs/config/plugin.d.ts +122 -0
  22. package/dist/commonjs/config/plugin.js +125 -0
  23. package/dist/commonjs/index.d.ts +61 -0
  24. package/dist/commonjs/index.js +89 -0
  25. package/dist/commonjs/lib/agent.d.ts +19 -0
  26. package/dist/commonjs/lib/agent.js +58 -0
  27. package/dist/commonjs/lib/application.d.ts +66 -0
  28. package/dist/commonjs/lib/application.js +281 -0
  29. package/dist/commonjs/lib/core/base_context_class.d.ts +14 -0
  30. package/dist/commonjs/lib/core/base_context_class.js +22 -0
  31. package/dist/commonjs/lib/core/base_context_logger.d.ts +36 -0
  32. package/dist/commonjs/lib/core/base_context_logger.js +64 -0
  33. package/dist/commonjs/lib/core/base_hook_class.d.ts +11 -0
  34. package/dist/commonjs/lib/core/base_hook_class.js +30 -0
  35. package/dist/commonjs/lib/core/context_httpclient.d.ts +16 -0
  36. package/dist/commonjs/lib/core/context_httpclient.js +30 -0
  37. package/dist/commonjs/lib/core/httpclient.d.ts +14 -0
  38. package/dist/commonjs/lib/core/httpclient.js +40 -0
  39. package/dist/commonjs/lib/core/logger.d.ts +3 -0
  40. package/dist/commonjs/lib/core/logger.js +40 -0
  41. package/dist/commonjs/lib/core/messenger/IMessenger.d.ts +50 -0
  42. package/dist/commonjs/lib/core/messenger/IMessenger.js +3 -0
  43. package/dist/commonjs/lib/core/messenger/index.d.ts +7 -0
  44. package/dist/commonjs/lib/core/messenger/index.js +14 -0
  45. package/dist/commonjs/lib/core/messenger/ipc.d.ts +57 -0
  46. package/dist/commonjs/lib/core/messenger/ipc.js +126 -0
  47. package/dist/commonjs/lib/core/messenger/local.d.ts +61 -0
  48. package/dist/commonjs/lib/core/messenger/local.js +134 -0
  49. package/dist/commonjs/lib/core/singleton.d.ts +23 -0
  50. package/dist/commonjs/lib/core/singleton.js +120 -0
  51. package/dist/commonjs/lib/core/utils.d.ts +2 -0
  52. package/dist/commonjs/lib/core/utils.js +77 -0
  53. package/dist/commonjs/lib/egg.d.ts +267 -0
  54. package/dist/commonjs/lib/egg.js +595 -0
  55. package/dist/commonjs/lib/loader/AgentWorkerLoader.d.ts +12 -0
  56. package/dist/commonjs/lib/loader/AgentWorkerLoader.js +24 -0
  57. package/dist/commonjs/lib/loader/AppWorkerLoader.d.ts +17 -0
  58. package/dist/commonjs/lib/loader/AppWorkerLoader.js +43 -0
  59. package/dist/commonjs/lib/loader/EggApplicationLoader.d.ts +4 -0
  60. package/dist/commonjs/lib/loader/EggApplicationLoader.js +8 -0
  61. package/dist/commonjs/lib/loader/index.d.ts +3 -0
  62. package/dist/commonjs/lib/loader/index.js +22 -0
  63. package/dist/commonjs/lib/start.d.ts +15 -0
  64. package/dist/commonjs/lib/start.js +49 -0
  65. package/dist/commonjs/lib/type.d.ts +295 -0
  66. package/dist/commonjs/lib/type.js +3 -0
  67. package/dist/commonjs/package.json +3 -0
  68. package/dist/esm/agent.d.ts +4 -0
  69. package/dist/esm/agent.js +7 -0
  70. package/dist/esm/app/middleware/body_parser.d.ts +2 -0
  71. package/dist/esm/app/middleware/body_parser.js +3 -0
  72. package/dist/esm/app/middleware/meta.d.ts +11 -0
  73. package/dist/esm/app/middleware/meta.js +20 -0
  74. package/dist/esm/app/middleware/notfound.d.ts +8 -0
  75. package/dist/esm/app/middleware/notfound.js +29 -0
  76. package/dist/esm/app/middleware/override_method.d.ts +2 -0
  77. package/dist/esm/app/middleware/override_method.js +3 -0
  78. package/dist/esm/app/middleware/site_file.d.ts +7 -0
  79. package/dist/esm/app/middleware/site_file.js +35 -0
  80. package/dist/esm/config/config.default.d.ts +9 -0
  81. package/dist/esm/config/config.default.js +373 -0
  82. package/dist/esm/config/config.local.d.ts +8 -0
  83. package/dist/esm/config/config.local.js +10 -0
  84. package/dist/esm/config/config.unittest.d.ts +7 -0
  85. package/dist/esm/config/config.unittest.js +9 -0
  86. package/dist/esm/config/favicon.png +0 -0
  87. package/dist/esm/config/plugin.d.ts +122 -0
  88. package/dist/esm/config/plugin.js +123 -0
  89. package/dist/esm/index.d.ts +61 -0
  90. package/dist/esm/index.js +65 -0
  91. package/dist/esm/lib/agent.d.ts +19 -0
  92. package/dist/esm/lib/agent.js +54 -0
  93. package/dist/esm/lib/application.d.ts +66 -0
  94. package/dist/esm/lib/application.js +274 -0
  95. package/dist/esm/lib/core/base_context_class.d.ts +14 -0
  96. package/dist/esm/lib/core/base_context_class.js +18 -0
  97. package/dist/esm/lib/core/base_context_logger.d.ts +36 -0
  98. package/dist/esm/lib/core/base_context_logger.js +60 -0
  99. package/dist/esm/lib/core/base_hook_class.d.ts +11 -0
  100. package/dist/esm/lib/core/base_hook_class.js +23 -0
  101. package/dist/esm/lib/core/context_httpclient.d.ts +16 -0
  102. package/dist/esm/lib/core/context_httpclient.js +26 -0
  103. package/dist/esm/lib/core/httpclient.d.ts +14 -0
  104. package/dist/esm/lib/core/httpclient.js +33 -0
  105. package/dist/esm/lib/core/logger.d.ts +3 -0
  106. package/dist/esm/lib/core/logger.js +37 -0
  107. package/dist/esm/lib/core/messenger/IMessenger.d.ts +50 -0
  108. package/dist/esm/lib/core/messenger/IMessenger.js +2 -0
  109. package/dist/esm/lib/core/messenger/index.d.ts +7 -0
  110. package/dist/esm/lib/core/messenger/index.js +11 -0
  111. package/dist/esm/lib/core/messenger/ipc.d.ts +57 -0
  112. package/dist/esm/lib/core/messenger/ipc.js +119 -0
  113. package/dist/esm/lib/core/messenger/local.d.ts +61 -0
  114. package/dist/esm/lib/core/messenger/local.js +127 -0
  115. package/dist/esm/lib/core/singleton.d.ts +23 -0
  116. package/dist/esm/lib/core/singleton.js +113 -0
  117. package/dist/esm/lib/core/utils.d.ts +2 -0
  118. package/dist/esm/lib/core/utils.js +70 -0
  119. package/dist/esm/lib/egg.d.ts +267 -0
  120. package/dist/esm/lib/egg.js +565 -0
  121. package/dist/esm/lib/loader/AgentWorkerLoader.d.ts +12 -0
  122. package/dist/esm/lib/loader/AgentWorkerLoader.js +20 -0
  123. package/dist/esm/lib/loader/AppWorkerLoader.d.ts +17 -0
  124. package/dist/esm/lib/loader/AppWorkerLoader.js +39 -0
  125. package/dist/esm/lib/loader/EggApplicationLoader.d.ts +4 -0
  126. package/dist/esm/lib/loader/EggApplicationLoader.js +4 -0
  127. package/dist/esm/lib/loader/index.d.ts +3 -0
  128. package/dist/esm/lib/loader/index.js +4 -0
  129. package/dist/esm/lib/start.d.ts +15 -0
  130. package/dist/esm/lib/start.js +43 -0
  131. package/dist/esm/lib/type.d.ts +295 -0
  132. package/dist/esm/lib/type.js +2 -0
  133. package/dist/esm/package.json +3 -0
  134. package/dist/package.json +4 -0
  135. package/package.json +83 -70
  136. package/src/agent.ts +7 -0
  137. package/src/app/middleware/body_parser.ts +3 -0
  138. package/{app/middleware/meta.js → src/app/middleware/meta.ts} +12 -4
  139. package/{app/middleware/notfound.js → src/app/middleware/notfound.ts} +9 -3
  140. package/src/app/middleware/override_method.ts +3 -0
  141. package/src/app/middleware/site_file.ts +49 -0
  142. package/{config/config.default.js → src/config/config.default.ts} +21 -42
  143. package/src/config/config.local.ts +11 -0
  144. package/src/config/config.unittest.ts +10 -0
  145. package/src/config/favicon.png +0 -0
  146. package/{config/plugin.js → src/config/plugin.ts} +1 -3
  147. package/src/index.ts +78 -0
  148. package/src/lib/agent.ts +66 -0
  149. package/{lib/application.js → src/lib/application.ts} +79 -120
  150. package/src/lib/core/base_context_class.ts +21 -0
  151. package/src/lib/core/base_context_logger.ts +67 -0
  152. package/src/lib/core/base_hook_class.ts +30 -0
  153. package/src/lib/core/context_httpclient.ts +33 -0
  154. package/src/lib/core/httpclient.ts +52 -0
  155. package/src/lib/core/logger.ts +42 -0
  156. package/src/lib/core/messenger/IMessenger.ts +58 -0
  157. package/src/lib/core/messenger/index.ts +15 -0
  158. package/{lib/core/messenger/ipc.js → src/lib/core/messenger/ipc.ts} +25 -29
  159. package/{lib/core/messenger/local.js → src/lib/core/messenger/local.ts} +27 -21
  160. package/{lib/core/singleton.js → src/lib/core/singleton.ts} +56 -33
  161. package/src/lib/core/utils.ts +77 -0
  162. package/{lib/egg.js → src/lib/egg.ts} +252 -218
  163. package/src/lib/loader/AgentWorkerLoader.ts +21 -0
  164. package/src/lib/loader/AppWorkerLoader.ts +42 -0
  165. package/src/lib/loader/EggApplicationLoader.ts +5 -0
  166. package/src/lib/loader/index.ts +3 -0
  167. package/src/lib/start.ts +56 -0
  168. package/src/lib/type.ts +329 -0
  169. package/agent.js +0 -11
  170. package/app/middleware/body_parser.js +0 -3
  171. package/app/middleware/override_method.js +0 -3
  172. package/app/middleware/site_file.js +0 -31
  173. package/config/config.local.js +0 -7
  174. package/config/config.unittest.js +0 -8
  175. package/index.d.ts +0 -1285
  176. package/index.js +0 -68
  177. package/lib/agent.js +0 -95
  178. package/lib/core/base_context_class.js +0 -20
  179. package/lib/core/base_context_logger.js +0 -64
  180. package/lib/core/base_hook_class.js +0 -31
  181. package/lib/core/context_httpclient.js +0 -26
  182. package/lib/core/dnscache_httpclient.js +0 -93
  183. package/lib/core/httpclient.js +0 -108
  184. package/lib/core/httpclient_next.js +0 -45
  185. package/lib/core/logger.js +0 -35
  186. package/lib/core/messenger/index.js +0 -14
  187. package/lib/core/utils.js +0 -73
  188. package/lib/loader/agent_worker_loader.js +0 -27
  189. package/lib/loader/app_worker_loader.js +0 -48
  190. package/lib/loader/index.js +0 -5
  191. package/lib/start.js +0 -39
  192. /package/{config → dist/commonjs/config}/favicon.png +0 -0
  193. /package/{app → src/app}/extend/context.js +0 -0
  194. /package/{app → src/app}/extend/helper.js +0 -0
  195. /package/{app → src/app}/extend/request.js +0 -0
  196. /package/{app → src/app}/extend/response.js +0 -0
@@ -0,0 +1,565 @@
1
+ import { performance } from 'node:perf_hooks';
2
+ import path from 'node:path';
3
+ import fs from 'node:fs';
4
+ import http from 'node:http';
5
+ import inspector from 'node:inspector';
6
+ import { fileURLToPath } from 'node:url';
7
+ import { EggCore } from '@eggjs/core';
8
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
9
+ // @ts-ignore
10
+ import createClusterClient, { close as closeClusterClient } from 'cluster-client';
11
+ import extend from 'extend2';
12
+ import { EggContextLogger as ContextLogger } from 'egg-logger';
13
+ import { Cookies as ContextCookies } from '@eggjs/cookies';
14
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
15
+ // @ts-ignore
16
+ import CircularJSON from 'circular-json-for-egg';
17
+ import { create as createMessenger } from './core/messenger/index.js';
18
+ import { ContextHttpClient } from './core/context_httpclient.js';
19
+ import { HttpClient, } from './core/httpclient.js';
20
+ import { createLoggers } from './core/logger.js';
21
+ import { Singleton, } from './core/singleton.js';
22
+ import { convertObject } from './core/utils.js';
23
+ import { BaseContextClass } from './core/base_context_class.js';
24
+ import { BaseHookClass } from './core/base_hook_class.js';
25
+ const EGG_PATH = Symbol.for('egg#eggPath');
26
+ /**
27
+ * Based on koa's Application
28
+ * @see https://github.com/eggjs/egg-core
29
+ * @see https://github.com/eggjs/koa/blob/master/src/application.ts
30
+ * @augments EggCore
31
+ */
32
+ export class EggApplicationCore extends EggCore {
33
+ // export context base classes, let framework can impl sub class and over context extend easily.
34
+ ContextCookies = ContextCookies;
35
+ ContextLogger = ContextLogger;
36
+ ContextHttpClient = ContextHttpClient;
37
+ HttpClient = HttpClient;
38
+ /**
39
+ * Retrieve base context class
40
+ * @member {BaseContextClass} BaseContextClass
41
+ * @since 1.0.0
42
+ */
43
+ BaseContextClass = BaseContextClass;
44
+ /**
45
+ * Retrieve base controller
46
+ * @member {Controller} Controller
47
+ * @since 1.0.0
48
+ */
49
+ Controller = BaseContextClass;
50
+ /**
51
+ * Retrieve base service
52
+ * @member {Service} Service
53
+ * @since 1.0.0
54
+ */
55
+ Service = BaseContextClass;
56
+ /**
57
+ * Retrieve base subscription
58
+ * @member {Subscription} Subscription
59
+ * @since 2.12.0
60
+ */
61
+ Subscription = BaseContextClass;
62
+ /**
63
+ * Retrieve base context class
64
+ * @member {BaseHookClass} BaseHookClass
65
+ */
66
+ BaseHookClass = BaseHookClass;
67
+ /**
68
+ * Retrieve base boot
69
+ * @member {Boot}
70
+ */
71
+ Boot = BaseHookClass;
72
+ #httpClient;
73
+ #loggers;
74
+ #clusterClients = [];
75
+ messenger;
76
+ agent;
77
+ application;
78
+ /**
79
+ * @class
80
+ * @param {Object} options
81
+ * - {Object} [type] - type of instance, Agent and Application both extend koa, type can determine what it is.
82
+ * - {String} [baseDir] - app root dir, default is `process.cwd()`
83
+ * - {Object} [plugins] - custom plugin config, use it in unittest
84
+ * - {String} [mode] - process mode, can be cluster / single, default is `cluster`
85
+ */
86
+ constructor(options) {
87
+ options = {
88
+ mode: 'cluster',
89
+ type: 'application',
90
+ baseDir: process.cwd(),
91
+ ...options,
92
+ };
93
+ super(options);
94
+ /**
95
+ * messenger instance
96
+ * @member {Messenger}
97
+ * @since 1.0.0
98
+ */
99
+ this.messenger = createMessenger(this);
100
+ // trigger `serverDidReady` hook when all the app workers
101
+ // and agent worker are ready
102
+ this.messenger.once('egg-ready', () => {
103
+ this.lifecycle.triggerServerDidReady();
104
+ });
105
+ this.load();
106
+ }
107
+ async loadConfig() {
108
+ await this.loader.loadConfig();
109
+ }
110
+ async load() {
111
+ await this.loadConfig();
112
+ // dump config after ready, ensure all the modifications during start will be recorded
113
+ // make sure dumpConfig is the last ready callback
114
+ this.ready(() => process.nextTick(() => {
115
+ const dumpStartTime = Date.now();
116
+ this.dumpConfig();
117
+ this.dumpTiming();
118
+ this.coreLogger.info('[egg] dump config after ready, %sms', Date.now() - dumpStartTime);
119
+ }));
120
+ this.#setupTimeoutTimer();
121
+ this.console.info('[egg] App root: %s', this.baseDir);
122
+ this.console.info('[egg] All *.log files save on %j', this.config.logger.dir);
123
+ this.console.info('[egg] Loaded enabled plugin %j', this.loader.orderPlugins);
124
+ // Listen the error that promise had not catch, then log it in common-error
125
+ this._unhandledRejectionHandler = this._unhandledRejectionHandler.bind(this);
126
+ process.on('unhandledRejection', this._unhandledRejectionHandler);
127
+ // register close function
128
+ this.lifecycle.registerBeforeClose(async () => {
129
+ // close all cluster clients
130
+ for (const clusterClient of this.#clusterClients) {
131
+ await closeClusterClient(clusterClient);
132
+ }
133
+ this.#clusterClients = [];
134
+ // single process mode will close agent before app close
135
+ if (this.type === 'application' && this.options.mode === 'single') {
136
+ await this.agent.close();
137
+ }
138
+ for (const logger of this.loggers.values()) {
139
+ logger.close();
140
+ }
141
+ this.messenger.close();
142
+ process.removeListener('unhandledRejection', this._unhandledRejectionHandler);
143
+ });
144
+ await this.loader.load();
145
+ }
146
+ /**
147
+ * Wrap the Client with Leader/Follower Pattern
148
+ *
149
+ * @description almost the same as Agent.cluster API, the only different is that this method create Follower.
150
+ *
151
+ * @see https://github.com/node-modules/cluster-client
152
+ * @param {Function} clientClass - client class function
153
+ * @param {Object} [options]
154
+ * - {Boolean} [autoGenerate] - whether generate delegate rule automatically, default is true
155
+ * - {Function} [formatKey] - a method to transform the subscription info into a string,default is JSON.stringify
156
+ * - {Object} [transcode|JSON.stringify/parse]
157
+ * - {Function} encode - custom serialize method
158
+ * - {Function} decode - custom deserialize method
159
+ * - {Boolean} [isBroadcast] - whether broadcast subscription result to all followers or just one, default is true
160
+ * - {Number} [responseTimeout] - response timeout, default is 3 seconds
161
+ * - {Number} [maxWaitTime|30000] - leader startup max time, default is 30 seconds
162
+ * @return {ClientWrapper} wrapper
163
+ */
164
+ cluster(clientClass, options) {
165
+ const clientClassOptions = {
166
+ ...this.config.clusterClient,
167
+ ...options,
168
+ singleMode: this.options.mode === 'single',
169
+ // cluster need a port that can't conflict on the environment
170
+ port: this.options.clusterPort,
171
+ // agent worker is leader, app workers are follower
172
+ isLeader: this.type === 'agent',
173
+ logger: this.coreLogger,
174
+ // debug mode does not check heartbeat
175
+ isCheckHeartbeat: this.config.env === 'prod' ? true : inspector.url() === undefined,
176
+ };
177
+ const client = createClusterClient(clientClass, clientClassOptions);
178
+ this.#patchClusterClient(client);
179
+ return client;
180
+ }
181
+ /**
182
+ * print the information when console.log(app)
183
+ * @return {Object} inspected app.
184
+ * @since 1.0.0
185
+ * @example
186
+ * ```js
187
+ * console.log(app);
188
+ * =>
189
+ * {
190
+ * name: 'mock-app',
191
+ * env: 'test',
192
+ * subdomainOffset: 2,
193
+ * config: '<egg config>',
194
+ * controller: '<egg controller>',
195
+ * service: '<egg service>',
196
+ * middlewares: '<egg middlewares>',
197
+ * urllib: '<egg urllib>',
198
+ * loggers: '<egg loggers>'
199
+ * }
200
+ * ```
201
+ */
202
+ inspect() {
203
+ const res = {
204
+ env: this.config.env,
205
+ };
206
+ function delegate(res, app, keys) {
207
+ for (const key of keys) {
208
+ if (app[key]) {
209
+ res[key] = app[key];
210
+ }
211
+ }
212
+ }
213
+ function abbr(res, app, keys) {
214
+ for (const key of keys) {
215
+ if (app[key]) {
216
+ res[key] = `<egg ${key}>`;
217
+ }
218
+ }
219
+ }
220
+ delegate(res, this, [
221
+ 'name',
222
+ 'baseDir',
223
+ 'subdomainOffset',
224
+ ]);
225
+ abbr(res, this, [
226
+ 'config',
227
+ 'controller',
228
+ 'httpclient',
229
+ 'loggers',
230
+ 'middlewares',
231
+ 'router',
232
+ 'serviceClasses',
233
+ ]);
234
+ return res;
235
+ }
236
+ toJSON() {
237
+ return this.inspect();
238
+ }
239
+ /**
240
+ * http request helper base on {@link httpclient}, it will auto save httpclient log.
241
+ * Keep the same api with `httpclient.request(url, args)`.
242
+ *
243
+ * See https://github.com/node-modules/urllib#api-doc for more details.
244
+ *
245
+ * @param {String} url request url address.
246
+ * @param {Object} options
247
+ * - method {String} - Request method, defaults to GET. Could be GET, POST, DELETE or PUT. Alias 'type'.
248
+ * - data {Object} - Data to be sent. Will be stringify automatically.
249
+ * - dataType {String} - String - Type of response data. Could be `text` or `json`.
250
+ * If it's `text`, the callback data would be a String.
251
+ * If it's `json`, the data of callback would be a parsed JSON Object.
252
+ * Default callback data would be a Buffer.
253
+ * - headers {Object} - Request headers.
254
+ * - timeout {Number} - Request timeout in milliseconds. Defaults to exports.TIMEOUT.
255
+ * Include remote server connecting timeout and response timeout.
256
+ * When timeout happen, will return ConnectionTimeout or ResponseTimeout.
257
+ * - auth {String} - `username:password` used in HTTP Basic Authorization.
258
+ * - followRedirect {Boolean} - follow HTTP 3xx responses as redirects. defaults to false.
259
+ * - gzip {Boolean} - let you get the res object when request connected, default false. alias customResponse
260
+ * - nestedQuerystring {Boolean} - urllib default use querystring to stringify form data which don't
261
+ * support nested object, will use qs instead of querystring to support nested object by set this option to true.
262
+ * - more options see https://github.com/node-modules/urllib
263
+ * @return {Object}
264
+ * - status {Number} - HTTP response status
265
+ * - headers {Object} - HTTP response headers
266
+ * - res {Object} - HTTP response meta
267
+ * - data {Object} - HTTP response body
268
+ *
269
+ * @example
270
+ * ```js
271
+ * const result = await app.curl('http://example.com/foo.json', {
272
+ * method: 'GET',
273
+ * dataType: 'json',
274
+ * });
275
+ * console.log(result.status, result.headers, result.data);
276
+ * ```
277
+ */
278
+ async curl(url, options) {
279
+ return await this.httpClient.request(url, options);
280
+ }
281
+ /**
282
+ * HttpClient instance
283
+ * @see https://github.com/node-modules/urllib
284
+ * @member {HttpClient}
285
+ */
286
+ get httpClient() {
287
+ if (!this.#httpClient) {
288
+ this.#httpClient = new this.HttpClient(this);
289
+ }
290
+ return this.#httpClient;
291
+ }
292
+ /**
293
+ * @deprecated please use httpClient instead
294
+ * @alias httpClient
295
+ * @member {HttpClient}
296
+ */
297
+ get httpclient() {
298
+ return this.httpClient;
299
+ }
300
+ /**
301
+ * All loggers contain logger, coreLogger and customLogger
302
+ * @member {Object}
303
+ * @since 1.0.0
304
+ */
305
+ get loggers() {
306
+ if (!this.#loggers) {
307
+ this.#loggers = createLoggers(this);
308
+ }
309
+ return this.#loggers;
310
+ }
311
+ /**
312
+ * Get logger by name, it's equal to app.loggers['name'],
313
+ * but you can extend it with your own logical.
314
+ * @param {String} name - logger name
315
+ * @return {Logger} logger
316
+ */
317
+ getLogger(name) {
318
+ return this.loggers[name] || null;
319
+ }
320
+ /**
321
+ * application logger, log file is `$HOME/logs/{appname}/{appname}-web`
322
+ * @member {Logger}
323
+ * @since 1.0.0
324
+ */
325
+ get logger() {
326
+ return this.getLogger('logger');
327
+ }
328
+ /**
329
+ * core logger for framework and plugins, log file is `$HOME/logs/{appname}/egg-web`
330
+ * @member {Logger}
331
+ * @since 1.0.0
332
+ */
333
+ get coreLogger() {
334
+ return this.getLogger('coreLogger');
335
+ }
336
+ _unhandledRejectionHandler(err) {
337
+ if (!(err instanceof Error)) {
338
+ const newError = new Error(String(err));
339
+ // err maybe an object, try to copy the name, message and stack to the new error instance
340
+ /* istanbul ignore else */
341
+ if (err) {
342
+ if (err.name)
343
+ newError.name = err.name;
344
+ if (err.message)
345
+ newError.message = err.message;
346
+ if (err.stack)
347
+ newError.stack = err.stack;
348
+ }
349
+ err = newError;
350
+ }
351
+ /* istanbul ignore else */
352
+ if (err.name === 'Error') {
353
+ err.name = 'unhandledRejectionError';
354
+ }
355
+ this.coreLogger.error(err);
356
+ }
357
+ /**
358
+ * dump out the config and meta object
359
+ * @private
360
+ */
361
+ dumpConfigToObject() {
362
+ let ignoreList;
363
+ try {
364
+ // support array and set
365
+ ignoreList = Array.from(this.config.dump.ignore);
366
+ }
367
+ catch (_) {
368
+ ignoreList = [];
369
+ }
370
+ const config = extend(true, {}, {
371
+ config: this.config,
372
+ plugins: this.loader.allPlugins,
373
+ appInfo: this.loader.appInfo,
374
+ });
375
+ convertObject(config, ignoreList);
376
+ return {
377
+ config,
378
+ meta: this.loader.configMeta,
379
+ };
380
+ }
381
+ /**
382
+ * save app.config to `run/${type}_config.json`
383
+ * @private
384
+ */
385
+ dumpConfig() {
386
+ const rundir = this.config.rundir;
387
+ try {
388
+ if (!fs.existsSync(rundir)) {
389
+ fs.mkdirSync(rundir);
390
+ }
391
+ // get dumped object
392
+ const { config, meta } = this.dumpConfigToObject();
393
+ // dump config
394
+ const dumpFile = path.join(rundir, `${this.type}_config.json`);
395
+ fs.writeFileSync(dumpFile, CircularJSON.stringify(config, null, 2));
396
+ // dump config meta
397
+ const dumpMetaFile = path.join(rundir, `${this.type}_config_meta.json`);
398
+ fs.writeFileSync(dumpMetaFile, CircularJSON.stringify(meta, null, 2));
399
+ }
400
+ catch (err) {
401
+ this.coreLogger.warn(`[egg] dumpConfig error: ${err.message}`);
402
+ }
403
+ }
404
+ dumpTiming() {
405
+ try {
406
+ const items = this.timing.toJSON();
407
+ const rundir = this.config.rundir;
408
+ const dumpFile = path.join(rundir, `${this.type}_timing_${process.pid}.json`);
409
+ fs.writeFileSync(dumpFile, CircularJSON.stringify(items, null, 2));
410
+ this.coreLogger.info(this.timing.toString());
411
+ // only disable, not clear bootstrap timing data.
412
+ this.timing.disable();
413
+ // show duration >= ${slowBootActionMinDuration}ms action to warning log
414
+ for (const item of items) {
415
+ // ignore #0 name: Process Start
416
+ if (item.index > 0 && item.duration && item.duration >= this.config.dump.timing.slowBootActionMinDuration) {
417
+ this.coreLogger.warn('[egg][dumpTiming][slow-boot-action] #%d %dms, name: %s', item.index, item.duration, item.name);
418
+ }
419
+ }
420
+ }
421
+ catch (err) {
422
+ this.coreLogger.warn(`[egg] dumpTiming error: ${err.message}`);
423
+ }
424
+ }
425
+ get [EGG_PATH]() {
426
+ if (typeof __dirname !== 'undefined') {
427
+ return path.dirname(__dirname);
428
+ }
429
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
430
+ // @ts-ignore
431
+ return path.dirname(path.dirname(fileURLToPath(import.meta.url)));
432
+ }
433
+ #setupTimeoutTimer() {
434
+ const startTimeoutTimer = setTimeout(() => {
435
+ this.coreLogger.error(this.timing.toString());
436
+ this.coreLogger.error(`${this.type} still doesn't ready after ${this.config.workerStartTimeout} ms.`);
437
+ // log unfinished
438
+ const items = this.timing.toJSON();
439
+ for (const item of items) {
440
+ if (item.end)
441
+ continue;
442
+ this.coreLogger.error(`unfinished timing item: ${CircularJSON.stringify(item)}`);
443
+ }
444
+ this.coreLogger.error('[egg][setupTimeoutTimer] check run/%s_timing_%s.json for more details.', this.type, process.pid);
445
+ this.emit('startTimeout');
446
+ this.dumpConfig();
447
+ this.dumpTiming();
448
+ }, this.config.workerStartTimeout);
449
+ this.ready(() => clearTimeout(startTimeoutTimer));
450
+ }
451
+ get config() {
452
+ return super.config;
453
+ }
454
+ /**
455
+ * app.env delegate app.config.env
456
+ * @deprecated
457
+ */
458
+ get env() {
459
+ this.deprecate('please use app.config.env instead');
460
+ return this.config.env;
461
+ }
462
+ /* eslint no-empty-function: off */
463
+ set env(_) { }
464
+ /**
465
+ * app.proxy delegate app.config.proxy
466
+ * @deprecated
467
+ */
468
+ get proxy() {
469
+ this.deprecate('please use app.config.proxy instead');
470
+ return this.config.proxy;
471
+ }
472
+ /* eslint no-empty-function: off */
473
+ set proxy(_) { }
474
+ /**
475
+ * create a singleton instance
476
+ * @param {String} name - unique name for singleton
477
+ * @param {Function|AsyncFunction} create - method will be invoked when singleton instance create
478
+ */
479
+ addSingleton(name, create) {
480
+ const options = {
481
+ name,
482
+ create,
483
+ app: this,
484
+ };
485
+ const singleton = new Singleton(options);
486
+ const initPromise = singleton.init();
487
+ if (initPromise) {
488
+ this.beforeStart(async () => {
489
+ await initPromise;
490
+ });
491
+ }
492
+ }
493
+ #patchClusterClient(client) {
494
+ const rawCreate = client.create;
495
+ client.create = (...args) => {
496
+ const realClient = rawCreate.apply(client, args);
497
+ this.#clusterClients.push(realClient);
498
+ return realClient;
499
+ };
500
+ }
501
+ /**
502
+ * Create an anonymous context, the context isn't request level, so the request is mocked.
503
+ * then you can use context level API like `ctx.service`
504
+ * @member {String} EggApplication#createAnonymousContext
505
+ * @param {Request} [req] - if you want to mock request like querystring, you can pass an object to this function.
506
+ * @return {Context} context
507
+ */
508
+ createAnonymousContext(req) {
509
+ const request = {
510
+ headers: {
511
+ host: '127.0.0.1',
512
+ 'x-forwarded-for': '127.0.0.1',
513
+ },
514
+ query: {},
515
+ querystring: '',
516
+ host: '127.0.0.1',
517
+ hostname: '127.0.0.1',
518
+ protocol: 'http',
519
+ secure: 'false',
520
+ method: 'GET',
521
+ url: '/',
522
+ path: '/',
523
+ socket: {
524
+ remoteAddress: '127.0.0.1',
525
+ remotePort: 7001,
526
+ },
527
+ };
528
+ if (req) {
529
+ for (const key in req) {
530
+ if (key === 'headers' || key === 'query' || key === 'socket') {
531
+ Object.assign(request[key], req[key]);
532
+ }
533
+ else {
534
+ request[key] = req[key];
535
+ }
536
+ }
537
+ }
538
+ const response = new http.ServerResponse(request);
539
+ return this.createContext(request, response);
540
+ }
541
+ /**
542
+ * Create egg context
543
+ * @function EggApplication#createContext
544
+ * @param {Req} req - node native Request object
545
+ * @param {Res} res - node native Response object
546
+ * @return {Context} context object
547
+ */
548
+ createContext(req, res) {
549
+ const context = Object.create(this.context);
550
+ const request = context.request = Object.create(this.request);
551
+ const response = context.response = Object.create(this.response);
552
+ context.app = request.app = response.app = this;
553
+ context.req = request.req = response.req = req;
554
+ context.res = request.res = response.res = res;
555
+ request.ctx = response.ctx = context;
556
+ request.response = response;
557
+ response.request = request;
558
+ context.onerror = context.onerror.bind(context);
559
+ context.originalUrl = request.originalUrl = req.url;
560
+ context.starttime = Date.now();
561
+ context.performanceStarttime = performance.now();
562
+ return context;
563
+ }
564
+ }
565
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWdnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9lZ2cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUM3QixPQUFPLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDekIsT0FBTyxJQUFtRCxNQUFNLFdBQVcsQ0FBQztBQUM1RSxPQUFPLFNBQVMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxPQUFPLEVBQTRDLE1BQU0sYUFBYSxDQUFDO0FBQ2hGLDZEQUE2RDtBQUM3RCxhQUFhO0FBQ2IsT0FBTyxtQkFBbUIsRUFBRSxFQUFFLEtBQUssSUFBSSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xGLE9BQU8sTUFBTSxNQUFNLFNBQVMsQ0FBQztBQUM3QixPQUFPLEVBQUUsZ0JBQWdCLElBQUksYUFBYSxFQUF5QixNQUFNLFlBQVksQ0FBQztBQUN0RixPQUFPLEVBQUUsT0FBTyxJQUFJLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNELDZEQUE2RDtBQUM3RCxhQUFhO0FBQ2IsT0FBTyxZQUFZLE1BQU0sdUJBQXVCLENBQUM7QUFJakQsT0FBTyxFQUFFLE1BQU0sSUFBSSxlQUFlLEVBQWMsTUFBTSwyQkFBMkIsQ0FBQztBQUNsRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRSxPQUFPLEVBQ0wsVUFBVSxHQUNYLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFDTCxTQUFTLEdBQ1YsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0s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
@@ -0,0 +1,12 @@
1
+ import { EggApplicationLoader } from './EggApplicationLoader.js';
2
+ /**
3
+ * Agent worker process loader
4
+ * @see https://github.com/eggjs/egg-core/blob/master/src/loader/egg_loader.ts
5
+ */
6
+ export declare class AgentWorkerLoader extends EggApplicationLoader {
7
+ /**
8
+ * loadPlugin first, then loadConfig
9
+ */
10
+ loadConfig(): Promise<void>;
11
+ load(): Promise<void>;
12
+ }
@@ -0,0 +1,20 @@
1
+ import { EggApplicationLoader } from './EggApplicationLoader.js';
2
+ /**
3
+ * Agent worker process loader
4
+ * @see https://github.com/eggjs/egg-core/blob/master/src/loader/egg_loader.ts
5
+ */
6
+ export class AgentWorkerLoader extends EggApplicationLoader {
7
+ /**
8
+ * loadPlugin first, then loadConfig
9
+ */
10
+ async loadConfig() {
11
+ await this.loadPlugin();
12
+ await super.loadConfig();
13
+ }
14
+ async load() {
15
+ await this.loadAgentExtend();
16
+ await this.loadContextExtend();
17
+ await this.loadCustomAgent();
18
+ }
19
+ }
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWdlbnRXb3JrZXJMb2FkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2xvYWRlci9BZ2VudFdvcmtlckxvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVqRTs7O0dBR0c7QUFDSCxNQUFNLE9BQU8saUJBQWtCLFNBQVEsb0JBQW9CO0lBQ3pEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLFVBQVU7UUFDZCxNQUFNLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN4QixNQUFNLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsS0FBSyxDQUFDLElBQUk7UUFDUixNQUFNLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUM3QixNQUFNLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQy9CLE1BQU0sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQy9CLENBQUM7Q0FDRiJ9
@@ -0,0 +1,17 @@
1
+ import { EggApplicationLoader } from './EggApplicationLoader.js';
2
+ /**
3
+ * App worker process Loader, will load plugins
4
+ * @see https://github.com/eggjs/egg-core/blob/master/src/loader/egg_loader.ts
5
+ */
6
+ export declare class AppWorkerLoader extends EggApplicationLoader {
7
+ /**
8
+ * loadPlugin first, then loadConfig
9
+ * @since 1.0.0
10
+ */
11
+ loadConfig(): Promise<void>;
12
+ /**
13
+ * Load all directories in convention
14
+ * @since 1.0.0
15
+ */
16
+ load(): Promise<void>;
17
+ }