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,61 @@
1
+ /**
2
+ * @namespace Egg
3
+ */
4
+ import { BaseContextClass } from './lib/core/base_context_class.js';
5
+ import { startEgg } from './lib/start.js';
6
+ export * from './lib/egg.js';
7
+ export * from './lib/type.js';
8
+ export * from './lib/start.js';
9
+ /**
10
+ * Start egg application with cluster mode
11
+ * @since 1.0.0
12
+ */
13
+ export { startCluster } from 'egg-cluster';
14
+ /**
15
+ * Start egg application with single process mode
16
+ * @since 1.0.0
17
+ */
18
+ export declare const start: typeof startEgg;
19
+ /**
20
+ * @member {Application} Egg#Application
21
+ * @since 1.0.0
22
+ */
23
+ export { Application } from './lib/application.js';
24
+ /**
25
+ * @member {Agent} Egg#Agent
26
+ * @since 1.0.0
27
+ */
28
+ export { Agent } from './lib/agent.js';
29
+ /**
30
+ * @member {AppWorkerLoader} Egg#AppWorkerLoader
31
+ * @since 1.0.0
32
+ */
33
+ /**
34
+ * @member {AgentWorkerLoader} Egg#AgentWorkerLoader
35
+ * @since 1.0.0
36
+ */
37
+ export { AppWorkerLoader, AgentWorkerLoader } from './lib/loader/index.js';
38
+ /**
39
+ * @member {Controller} Egg#Controller
40
+ * @since 1.1.0
41
+ */
42
+ export declare const Controller: typeof BaseContextClass;
43
+ /**
44
+ * @member {Service} Egg#Service
45
+ * @since 1.1.0
46
+ */
47
+ export declare const Service: typeof BaseContextClass;
48
+ /**
49
+ * @member {Subscription} Egg#Subscription
50
+ * @since 1.10.0
51
+ */
52
+ export declare const Subscription: typeof BaseContextClass;
53
+ /**
54
+ * @member {BaseContextClass} Egg#BaseContextClass
55
+ * @since 1.2.0
56
+ */
57
+ export { BaseContextClass } from './lib/core/base_context_class.js';
58
+ /**
59
+ * @member {Boot} Egg#Boot
60
+ */
61
+ export { BaseHookClass as Boot } from './lib/core/base_hook_class.js';
@@ -0,0 +1,65 @@
1
+ /**
2
+ * @namespace Egg
3
+ */
4
+ import { BaseContextClass } from './lib/core/base_context_class.js';
5
+ import { startEgg } from './lib/start.js';
6
+ // export types
7
+ export * from './lib/egg.js';
8
+ export * from './lib/type.js';
9
+ export * from './lib/start.js';
10
+ /**
11
+ * Start egg application with cluster mode
12
+ * @since 1.0.0
13
+ */
14
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
15
+ // @ts-ignore
16
+ export { startCluster } from 'egg-cluster';
17
+ /**
18
+ * Start egg application with single process mode
19
+ * @since 1.0.0
20
+ */
21
+ export const start = startEgg;
22
+ /**
23
+ * @member {Application} Egg#Application
24
+ * @since 1.0.0
25
+ */
26
+ export { Application } from './lib/application.js';
27
+ /**
28
+ * @member {Agent} Egg#Agent
29
+ * @since 1.0.0
30
+ */
31
+ export { Agent } from './lib/agent.js';
32
+ /**
33
+ * @member {AppWorkerLoader} Egg#AppWorkerLoader
34
+ * @since 1.0.0
35
+ */
36
+ /**
37
+ * @member {AgentWorkerLoader} Egg#AgentWorkerLoader
38
+ * @since 1.0.0
39
+ */
40
+ export { AppWorkerLoader, AgentWorkerLoader } from './lib/loader/index.js';
41
+ /**
42
+ * @member {Controller} Egg#Controller
43
+ * @since 1.1.0
44
+ */
45
+ export const Controller = BaseContextClass;
46
+ /**
47
+ * @member {Service} Egg#Service
48
+ * @since 1.1.0
49
+ */
50
+ export const Service = BaseContextClass;
51
+ /**
52
+ * @member {Subscription} Egg#Subscription
53
+ * @since 1.10.0
54
+ */
55
+ export const Subscription = BaseContextClass;
56
+ /**
57
+ * @member {BaseContextClass} Egg#BaseContextClass
58
+ * @since 1.2.0
59
+ */
60
+ export { BaseContextClass } from './lib/core/base_context_class.js';
61
+ /**
62
+ * @member {Boot} Egg#Boot
63
+ */
64
+ export { BaseHookClass as Boot } from './lib/core/base_hook_class.js';
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFMUMsZUFBZTtBQUNmLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsZ0JBQWdCLENBQUM7QUFFL0I7OztHQUdHO0FBQ0gsNkRBQTZEO0FBQzdELGFBQWE7QUFDYixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTNDOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUM7QUFFOUI7OztHQUdHO0FBQ0gsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRW5EOzs7R0FHRztBQUNILE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2Qzs7O0dBR0c7QUFFSDs7O0dBR0c7QUFFSCxPQUFPLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFM0U7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLGdCQUFnQixDQUFDO0FBRTNDOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxnQkFBZ0IsQ0FBQztBQUV4Qzs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsZ0JBQWdCLENBQUM7QUFFN0M7OztHQUdHO0FBQ0gsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFcEU7O0dBRUc7QUFDSCxPQUFPLEVBQUUsYUFBYSxJQUFJLElBQUksRUFBRSxNQUFNLCtCQUErQixDQUFDIn0=
@@ -0,0 +1,19 @@
1
+ import { EggApplicationCore, EggApplicationCoreOptions } from './egg.js';
2
+ import { AgentWorkerLoader } from './loader/index.js';
3
+ declare const EGG_LOADER: unique symbol;
4
+ /**
5
+ * Singleton instance in Agent Worker, extend {@link EggApplicationCore}
6
+ * @augments EggApplicationCore
7
+ */
8
+ export declare class Agent extends EggApplicationCore {
9
+ #private;
10
+ /**
11
+ * @class
12
+ * @param {Object} options - see {@link EggApplicationCore}
13
+ */
14
+ constructor(options?: Omit<EggApplicationCoreOptions, 'type'>);
15
+ get [EGG_LOADER](): typeof AgentWorkerLoader;
16
+ _wrapMessenger(): void;
17
+ close(): Promise<void>;
18
+ }
19
+ export {};
@@ -0,0 +1,54 @@
1
+ import { EggApplicationCore } from './egg.js';
2
+ import { AgentWorkerLoader } from './loader/index.js';
3
+ const EGG_LOADER = Symbol.for('egg#loader');
4
+ /**
5
+ * Singleton instance in Agent Worker, extend {@link EggApplicationCore}
6
+ * @augments EggApplicationCore
7
+ */
8
+ export class Agent extends EggApplicationCore {
9
+ #agentAliveHandler;
10
+ /**
11
+ * @class
12
+ * @param {Object} options - see {@link EggApplicationCore}
13
+ */
14
+ constructor(options) {
15
+ super({
16
+ ...options,
17
+ type: 'agent',
18
+ });
19
+ // keep agent alive even it doesn't have any io tasks
20
+ this.#agentAliveHandler = setInterval(() => {
21
+ this.coreLogger.info('[]');
22
+ }, 24 * 60 * 60 * 1000);
23
+ }
24
+ get [EGG_LOADER]() {
25
+ return AgentWorkerLoader;
26
+ }
27
+ _wrapMessenger() {
28
+ for (const methodName of [
29
+ 'broadcast',
30
+ 'sendTo',
31
+ 'sendToApp',
32
+ 'sendToAgent',
33
+ 'sendRandom',
34
+ ]) {
35
+ wrapMethod(methodName, this.messenger, this.coreLogger);
36
+ }
37
+ function wrapMethod(methodName, messenger, logger) {
38
+ const originMethod = messenger[methodName];
39
+ messenger[methodName] = function (...args) {
40
+ const stack = new Error().stack.split('\n').slice(1).join('\n');
41
+ logger.warn("agent can't call %s before server started\n%s", methodName, stack);
42
+ originMethod.apply(this, args);
43
+ };
44
+ messenger.prependOnceListener('egg-ready', () => {
45
+ messenger[methodName] = originMethod;
46
+ });
47
+ }
48
+ }
49
+ async close() {
50
+ clearInterval(this.#agentAliveHandler);
51
+ await super.close();
52
+ }
53
+ }
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2FnZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxrQkFBa0IsRUFBNkIsTUFBTSxVQUFVLENBQUM7QUFDekUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFdEQsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUU1Qzs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sS0FBTSxTQUFRLGtCQUFrQjtJQUNsQyxrQkFBa0IsQ0FBaUI7SUFFNUM7OztPQUdHO0lBQ0gsWUFBWSxPQUFpRDtRQUMzRCxLQUFLLENBQUM7WUFDSixHQUFHLE9BQU87WUFDVixJQUFJLEVBQUUsT0FBTztTQUNkLENBQUMsQ0FBQztRQUVILHFEQUFxRDtRQUNyRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRTtZQUN6QyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QixDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQUksQ0FBQyxVQUFVLENBQUM7UUFDZCxPQUFPLGlCQUFpQixDQUFDO0lBQzNCLENBQUM7SUFFRCxjQUFjO1FBQ1osS0FBSyxNQUFNLFVBQVUsSUFBSTtZQUN2QixXQUFXO1lBQ1gsUUFBUTtZQUNSLFdBQVc7WUFDWCxhQUFhO1lBQ2IsWUFBWTtTQUNiLEVBQUUsQ0FBQztZQUNGLFVBQVUsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDMUQsQ0FBQztRQUVELFNBQVMsVUFBVSxDQUFDLFVBQWtCLEVBQUUsU0FBYyxFQUFFLE1BQWlCO1lBQ3ZFLE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUMzQyxTQUFTLENBQUMsVUFBVSxDQUFDLEdBQUcsVUFBUyxHQUFHLElBQVc7Z0JBQzdDLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUMsS0FBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNqRSxNQUFNLENBQUMsSUFBSSxDQUNULCtDQUErQyxFQUMvQyxVQUFVLEVBQ1YsS0FBSyxDQUNOLENBQUM7Z0JBQ0YsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDakMsQ0FBQyxDQUFDO1lBQ0YsU0FBUyxDQUFDLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUU7Z0JBQzlDLFNBQVMsQ0FBQyxVQUFVLENBQUMsR0FBRyxZQUFZLENBQUM7WUFDdkMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxLQUFLO1FBQ1QsYUFBYSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3RCLENBQUM7Q0FDRiJ9
@@ -0,0 +1,66 @@
1
+ import http from 'node:http';
2
+ import { Socket } from 'node:net';
3
+ import { EggApplicationCore, EggContext, EggApplicationCoreOptions } from './egg.js';
4
+ import { AppWorkerLoader } from './loader/index.js';
5
+ import { BaseContextClass } from './core/base_context_class.js';
6
+ declare const EGG_LOADER: unique symbol;
7
+ /**
8
+ * The Helper class which can be used as utility function.
9
+ * We support developers to extend Helper through ${baseDir}/app/extend/helper.js ,
10
+ * then you can use all method on `ctx.helper` that is a instance of Helper.
11
+ */
12
+ declare class HelperClass extends BaseContextClass {
13
+ }
14
+ /**
15
+ * Singleton instance in App Worker, extend {@link EggApplicationCore}
16
+ * @augments EggApplicationCore
17
+ */
18
+ export declare class Application extends EggApplicationCore {
19
+ #private;
20
+ server?: http.Server;
21
+ /**
22
+ * reference to {@link Helper}
23
+ * @member {Helper} Application#Helper
24
+ */
25
+ Helper: typeof HelperClass;
26
+ /**
27
+ * @class
28
+ * @param {Object} options - see {@link EggApplicationCore}
29
+ */
30
+ constructor(options?: Omit<EggApplicationCoreOptions, 'type'>);
31
+ protected load(): Promise<void>;
32
+ get [EGG_LOADER](): typeof AppWorkerLoader;
33
+ onClientError(err: any, socket: Socket): void;
34
+ onServer(server: http.Server): void;
35
+ /**
36
+ * global locals for view
37
+ * @member {Object} Application#locals
38
+ * @see Context#locals
39
+ */
40
+ get locals(): Record<string, any>;
41
+ set locals(val: Record<string, any>);
42
+ /**
43
+ * save routers to `run/router.json`
44
+ * @private
45
+ */
46
+ dumpConfig(): void;
47
+ /**
48
+ * Run async function in the background
49
+ * @see Context#runInBackground
50
+ * @param {Function} scope - the first args is an anonymous ctx
51
+ */
52
+ runInBackground(scope: (ctx: EggContext) => void): void;
53
+ /**
54
+ * Run async function in the anonymous context scope
55
+ * @see Context#runInAnonymousContextScope
56
+ * @param {Function} scope - the first args is an anonymous ctx, scope should be async function
57
+ * @param {Request} [req] - if you want to mock request like querystring, you can pass an object to this function.
58
+ */
59
+ runInAnonymousContextScope(scope: (ctx: EggContext) => Promise<void>, req?: unknown): Promise<void>;
60
+ /**
61
+ * secret key for Application
62
+ * @member {String} Application#keys
63
+ */
64
+ get keys(): string[];
65
+ }
66
+ export {};
@@ -0,0 +1,274 @@
1
+ import path from 'node:path';
2
+ import fs from 'node:fs';
3
+ import http from 'node:http';
4
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
5
+ // @ts-ignore
6
+ import graceful from 'graceful';
7
+ import { assign } from 'utility';
8
+ import { utils as eggUtils } from '@eggjs/core';
9
+ import { EggApplicationCore } from './egg.js';
10
+ import { AppWorkerLoader } from './loader/index.js';
11
+ import { BaseContextClass } from './core/base_context_class.js';
12
+ const EGG_LOADER = Symbol.for('egg#loader');
13
+ // client error => 400 Bad Request
14
+ // Refs: https://nodejs.org/dist/latest-v8.x/docs/api/http.html#http_event_clienterror
15
+ const DEFAULT_BAD_REQUEST_HTML = `<html>
16
+ <head><title>400 Bad Request</title></head>
17
+ <body bgcolor="white">
18
+ <center><h1>400 Bad Request</h1></center>
19
+ <hr><center>❤</center>
20
+ </body>
21
+ </html>`;
22
+ const DEFAULT_BAD_REQUEST_HTML_LENGTH = Buffer.byteLength(DEFAULT_BAD_REQUEST_HTML);
23
+ const DEFAULT_BAD_REQUEST_RESPONSE = `HTTP/1.1 400 Bad Request\r\nContent-Length: ${DEFAULT_BAD_REQUEST_HTML_LENGTH}` +
24
+ `\r\n\r\n${DEFAULT_BAD_REQUEST_HTML}`;
25
+ // Refs: https://github.com/nodejs/node/blob/b38c81/lib/_http_outgoing.js#L706-L710
26
+ function escapeHeaderValue(value) {
27
+ // Protect against response splitting. The regex test is there to
28
+ // minimize the performance impact in the common case.
29
+ return /[\r\n]/.test(value) ? value.replace(/[\r\n]+[ \t]*/g, '') : value;
30
+ }
31
+ /**
32
+ * The Helper class which can be used as utility function.
33
+ * We support developers to extend Helper through ${baseDir}/app/extend/helper.js ,
34
+ * then you can use all method on `ctx.helper` that is a instance of Helper.
35
+ */
36
+ class HelperClass extends BaseContextClass {
37
+ }
38
+ /**
39
+ * Singleton instance in App Worker, extend {@link EggApplicationCore}
40
+ * @augments EggApplicationCore
41
+ */
42
+ export class Application extends EggApplicationCore {
43
+ // will auto set after 'server' event emit
44
+ server;
45
+ #locals = {};
46
+ /**
47
+ * reference to {@link Helper}
48
+ * @member {Helper} Application#Helper
49
+ */
50
+ Helper = HelperClass;
51
+ /**
52
+ * @class
53
+ * @param {Object} options - see {@link EggApplicationCore}
54
+ */
55
+ constructor(options) {
56
+ super({
57
+ ...options,
58
+ type: 'application',
59
+ });
60
+ }
61
+ async load() {
62
+ await super.load();
63
+ this.#warnConfusedConfig();
64
+ this.#bindEvents();
65
+ }
66
+ get [EGG_LOADER]() {
67
+ return AppWorkerLoader;
68
+ }
69
+ #responseRaw(socket, raw) {
70
+ /* istanbul ignore next */
71
+ if (!socket.writable)
72
+ return;
73
+ if (!raw) {
74
+ return socket.end(DEFAULT_BAD_REQUEST_RESPONSE);
75
+ }
76
+ const body = (raw.body == null) ? DEFAULT_BAD_REQUEST_HTML : raw.body;
77
+ const headers = raw.headers || {};
78
+ const status = raw.status || 400;
79
+ let responseHeaderLines = '';
80
+ const firstLine = `HTTP/1.1 ${status} ${http.STATUS_CODES[status] || 'Unknown'}`;
81
+ // Not that safe because no validation for header keys.
82
+ // Refs: https://github.com/nodejs/node/blob/b38c81/lib/_http_outgoing.js#L451
83
+ for (const key of Object.keys(headers)) {
84
+ if (key.toLowerCase() === 'content-length') {
85
+ delete headers[key];
86
+ continue;
87
+ }
88
+ responseHeaderLines += `${key}: ${escapeHeaderValue(headers[key])}\r\n`;
89
+ }
90
+ responseHeaderLines += `Content-Length: ${Buffer.byteLength(body)}\r\n`;
91
+ socket.end(`${firstLine}\r\n${responseHeaderLines}\r\n${body.toString()}`);
92
+ }
93
+ onClientError(err, socket) {
94
+ // ignore when there is no http body, it almost like an ECONNRESET
95
+ if (err.rawPacket) {
96
+ this.logger.warn('[egg:application] A client (%s:%d) error [%s] occurred: %s', socket.remoteAddress, socket.remotePort, err.code, err.message);
97
+ }
98
+ if (typeof this.config.onClientError === 'function') {
99
+ const p = eggUtils.callFn(this.config.onClientError, [err, socket, this]);
100
+ // the returned object should be something like:
101
+ //
102
+ // {
103
+ // body: '...',
104
+ // headers: {
105
+ // ...
106
+ // },
107
+ // status: 400
108
+ // }
109
+ //
110
+ // default values:
111
+ //
112
+ // + body: ''
113
+ // + headers: {}
114
+ // + status: 400
115
+ p.then(ret => {
116
+ this.#responseRaw(socket, ret || {});
117
+ }).catch(err => {
118
+ this.logger.error(err);
119
+ this.#responseRaw(socket);
120
+ });
121
+ }
122
+ else {
123
+ // because it's a raw socket object, we should return the raw HTTP response
124
+ // packet.
125
+ this.#responseRaw(socket);
126
+ }
127
+ }
128
+ onServer(server) {
129
+ // expose app.server
130
+ this.server = server;
131
+ // set ignore code
132
+ const serverGracefulIgnoreCode = this.config.serverGracefulIgnoreCode || [];
133
+ /* istanbul ignore next */
134
+ graceful({
135
+ server: [server],
136
+ error: (err, throwErrorCount) => {
137
+ const originMessage = err.message;
138
+ if (originMessage) {
139
+ // shouldjs will override error property but only getter
140
+ // https://github.com/shouldjs/should.js/blob/889e22ebf19a06bc2747d24cf34b25cc00b37464/lib/assertion-error.js#L26
141
+ Object.defineProperty(err, 'message', {
142
+ get() {
143
+ return `${originMessage} (uncaughtException throw ${throwErrorCount} times on pid: ${process.pid})`;
144
+ },
145
+ configurable: true,
146
+ enumerable: false,
147
+ });
148
+ }
149
+ this.coreLogger.error(err);
150
+ },
151
+ ignoreCode: serverGracefulIgnoreCode,
152
+ });
153
+ server.on('clientError', (err, socket) => this.onClientError(err, socket));
154
+ // server timeout
155
+ if (typeof this.config.serverTimeout === 'number') {
156
+ server.setTimeout(this.config.serverTimeout);
157
+ }
158
+ }
159
+ /**
160
+ * global locals for view
161
+ * @member {Object} Application#locals
162
+ * @see Context#locals
163
+ */
164
+ get locals() {
165
+ return this.#locals;
166
+ }
167
+ set locals(val) {
168
+ assign(this.#locals, val);
169
+ }
170
+ /**
171
+ * save routers to `run/router.json`
172
+ * @private
173
+ */
174
+ dumpConfig() {
175
+ super.dumpConfig();
176
+ // dump routers to router.json
177
+ const rundir = this.config.rundir;
178
+ const FULLPATH = this.loader.FileLoader.FULLPATH;
179
+ try {
180
+ const dumpRouterFile = path.join(rundir, 'router.json');
181
+ const routers = [];
182
+ for (const layer of this.router.stack) {
183
+ routers.push({
184
+ name: layer.name,
185
+ methods: layer.methods,
186
+ paramNames: layer.paramNames,
187
+ path: layer.path,
188
+ regexp: layer.regexp.toString(),
189
+ stack: layer.stack.map((stack) => stack[FULLPATH] || stack._name || stack.name || 'anonymous'),
190
+ });
191
+ }
192
+ fs.writeFileSync(dumpRouterFile, JSON.stringify(routers, null, 2));
193
+ }
194
+ catch (err) {
195
+ this.coreLogger.warn(`dumpConfig router.json error: ${err.message}`);
196
+ }
197
+ }
198
+ /**
199
+ * Run async function in the background
200
+ * @see Context#runInBackground
201
+ * @param {Function} scope - the first args is an anonymous ctx
202
+ */
203
+ runInBackground(scope) {
204
+ const ctx = this.createAnonymousContext();
205
+ if (!scope.name) {
206
+ Reflect.set(scope, '_name', eggUtils.getCalleeFromStack(true));
207
+ }
208
+ this.ctxStorage.run(ctx, () => {
209
+ ctx.runInBackground(scope);
210
+ });
211
+ }
212
+ /**
213
+ * Run async function in the anonymous context scope
214
+ * @see Context#runInAnonymousContextScope
215
+ * @param {Function} scope - the first args is an anonymous ctx, scope should be async function
216
+ * @param {Request} [req] - if you want to mock request like querystring, you can pass an object to this function.
217
+ */
218
+ async runInAnonymousContextScope(scope, req) {
219
+ const ctx = this.createAnonymousContext(req);
220
+ if (!scope.name) {
221
+ Reflect.set(scope, '_name', eggUtils.getCalleeFromStack(true));
222
+ }
223
+ return await this.ctxStorage.run(ctx, async () => {
224
+ return await scope(ctx);
225
+ });
226
+ }
227
+ /**
228
+ * secret key for Application
229
+ * @member {String} Application#keys
230
+ */
231
+ get keys() {
232
+ if (!this._keys) {
233
+ if (!this.config.keys) {
234
+ if (this.config.env === 'local' || this.config.env === 'unittest') {
235
+ const configPath = path.join(this.config.baseDir, 'config/config.default.js');
236
+ console.error('Cookie need secret key to sign and encrypt.');
237
+ console.error('Please add `config.keys` in %s', configPath);
238
+ }
239
+ throw new Error('Please set config.keys first');
240
+ }
241
+ this._keys = this.config.keys.split(',').map(s => s.trim());
242
+ }
243
+ return this._keys;
244
+ }
245
+ /**
246
+ * bind app's events
247
+ *
248
+ * @private
249
+ */
250
+ #bindEvents() {
251
+ // Browser Cookie Limits: http://browsercookielimits.squawky.net/
252
+ this.on('cookieLimitExceed', ({ name, value, ctx }) => {
253
+ const err = new Error(`cookie ${name}'s length(${value.length}) exceed the limit(4093)`);
254
+ err.name = 'CookieLimitExceedError';
255
+ ctx.coreLogger.error(err);
256
+ });
257
+ // expose server to support websocket
258
+ this.once('server', (server) => this.onServer(server));
259
+ }
260
+ /**
261
+ * warn when confused configurations are present
262
+ *
263
+ * @private
264
+ */
265
+ #warnConfusedConfig() {
266
+ const confusedConfigurations = this.config.confusedConfigurations;
267
+ Object.keys(confusedConfigurations).forEach(key => {
268
+ if (this.config[key] !== undefined) {
269
+ this.logger.warn('[egg:application] Unexpected config key `%o` exists, Please use `%o` instead.', key, confusedConfigurations[key]);
270
+ }
271
+ });
272
+ }
273
+ }
274
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2FwcGxpY2F0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUM3QixPQUFPLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDekIsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBRTdCLDZEQUE2RDtBQUM3RCxhQUFhO0FBQ2IsT0FBTyxRQUFRLE1BQU0sVUFBVSxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDakMsT0FBTyxFQUFFLEtBQUssSUFBSSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDaEQsT0FBTyxFQUFFLGtCQUFrQixFQUF5QyxNQUFNLFVBQVUsQ0FBQztBQUNyRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFaEUsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUU1QyxrQ0FBa0M7QUFDbEMsc0ZBQXNGO0FBQ3RGLE1BQU0sd0JBQXdCLEdBQUc7Ozs7OztVQU12QixDQUFDO0FBQ1gsTUFBTSwrQkFBK0IsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLHdCQUF3QixDQUFDLENBQUM7QUFDcEYsTUFBTSw0QkFBNEIsR0FDaEMsK0NBQStDLCtCQUErQixFQUFFO0lBQ2hGLFdBQVcsd0JBQXdCLEVBQUUsQ0FBQztBQUV4QyxtRkFBbUY7QUFDbkYsU0FBUyxpQkFBaUIsQ0FBQyxLQUFhO0lBQ3RDLGlFQUFpRTtJQUNqRSxzREFBc0Q7SUFDdEQsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLEVB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
@@ -0,0 +1,14 @@
1
+ import { BaseContextClass as EggCoreBaseContextClass } from '@eggjs/core';
2
+ import type { EggContext } from '../egg.js';
3
+ import { BaseContextLogger } from './base_context_logger.js';
4
+ /**
5
+ * BaseContextClass is a base class that can be extended,
6
+ * it's instantiated in context level,
7
+ * {@link Helper}, {@link Service} is extending it.
8
+ */
9
+ export declare class BaseContextClass extends EggCoreBaseContextClass {
10
+ #private;
11
+ ctx: EggContext;
12
+ protected pathName?: string;
13
+ get logger(): BaseContextLogger;
14
+ }
@@ -0,0 +1,18 @@
1
+ import { BaseContextClass as EggCoreBaseContextClass } from '@eggjs/core';
2
+ import { BaseContextLogger } from './base_context_logger.js';
3
+ /**
4
+ * BaseContextClass is a base class that can be extended,
5
+ * it's instantiated in context level,
6
+ * {@link Helper}, {@link Service} is extending it.
7
+ */
8
+ export class BaseContextClass extends EggCoreBaseContextClass {
9
+ pathName;
10
+ #logger;
11
+ get logger() {
12
+ if (!this.#logger) {
13
+ this.#logger = new BaseContextLogger(this.ctx, this.pathName);
14
+ }
15
+ return this.#logger;
16
+ }
17
+ }
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZV9jb250ZXh0X2NsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jb3JlL2Jhc2VfY29udGV4dF9jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLElBQUksdUJBQXVCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFMUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFN0Q7Ozs7R0FJRztBQUNILE1BQU0sT0FBTyxnQkFBaUIsU0FBUSx1QkFBdUI7SUFFakQsUUFBUSxDQUFVO0lBQzVCLE9BQU8sQ0FBcUI7SUFFNUIsSUFBSSxNQUFNO1FBQ1IsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEUsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0NBQ0YifQ==
@@ -0,0 +1,36 @@
1
+ import type { EggContext } from '../egg.js';
2
+ export declare class BaseContextLogger {
3
+ #private;
4
+ /**
5
+ * @class
6
+ * @param {Context} ctx - context instance
7
+ * @param {String} pathName - class path name
8
+ * @since 1.0.0
9
+ */
10
+ constructor(ctx: EggContext, pathName?: string);
11
+ protected _log(method: 'info' | 'warn' | 'error' | 'debug', args: any[]): void;
12
+ /**
13
+ * @member {Function} BaseContextLogger#debug
14
+ * @param {...any} args - log msg
15
+ * @since 1.2.0
16
+ */
17
+ debug(...args: any[]): void;
18
+ /**
19
+ * @member {Function} BaseContextLogger#info
20
+ * @param {...any} args - log msg
21
+ * @since 1.2.0
22
+ */
23
+ info(...args: any[]): void;
24
+ /**
25
+ * @member {Function} BaseContextLogger#warn
26
+ * @param {...any} args - log msg
27
+ * @since 1.2.0
28
+ */
29
+ warn(...args: any[]): void;
30
+ /**
31
+ * @member {Function} BaseContextLogger#error
32
+ * @param {...any} args - log msg
33
+ * @since 1.2.0
34
+ */
35
+ error(...args: any[]): void;
36
+ }