@eggjs/mock 6.0.7 → 6.1.0-beta.3

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 (212) hide show
  1. package/README.md +35 -56
  2. package/README.zh_CN.md +30 -50
  3. package/dist/_virtual/rolldown_runtime.js +7 -0
  4. package/dist/app/extend/agent.d.ts +39 -0
  5. package/dist/app/extend/agent.js +48 -0
  6. package/dist/app/extend/application.d.ts +176 -0
  7. package/dist/app/extend/application.js +385 -0
  8. package/dist/app/middleware/cluster_app_mock.d.ts +6 -0
  9. package/dist/app/middleware/cluster_app_mock.js +97 -0
  10. package/dist/app.d.ts +10 -0
  11. package/dist/app.js +17 -0
  12. package/dist/bootstrap.d.ts +9 -0
  13. package/dist/bootstrap.js +14 -0
  14. package/dist/index.d.ts +81 -0
  15. package/dist/index.js +48 -0
  16. package/dist/lib/agent_handler.d.ts +7 -0
  17. package/dist/lib/agent_handler.js +26 -0
  18. package/dist/lib/app.d.ts +7 -0
  19. package/dist/lib/app.js +251 -0
  20. package/dist/lib/app_handler.d.ts +9 -0
  21. package/dist/lib/app_handler.js +56 -0
  22. package/dist/lib/cluster.d.ts +126 -0
  23. package/dist/lib/cluster.js +283 -0
  24. package/dist/lib/context.d.ts +4 -0
  25. package/dist/lib/context.js +13 -0
  26. package/dist/lib/format_options.d.ts +10 -0
  27. package/dist/lib/format_options.js +65 -0
  28. package/dist/lib/inject_context.d.ts +9 -0
  29. package/dist/lib/inject_context.js +106 -0
  30. package/dist/lib/mock_agent.d.ts +9 -0
  31. package/dist/lib/mock_agent.js +45 -0
  32. package/dist/lib/mock_custom_loader.d.ts +4 -0
  33. package/dist/lib/mock_custom_loader.js +35 -0
  34. package/dist/lib/mock_http_server.d.ts +6 -0
  35. package/dist/lib/mock_http_server.js +17 -0
  36. package/dist/lib/mock_httpclient.d.ts +40 -0
  37. package/dist/lib/mock_httpclient.js +110 -0
  38. package/dist/lib/parallel/agent.d.ts +24 -0
  39. package/dist/lib/parallel/agent.js +111 -0
  40. package/dist/lib/parallel/app.d.ts +24 -0
  41. package/dist/lib/parallel/app.js +98 -0
  42. package/dist/lib/parallel/util.d.ts +6 -0
  43. package/dist/lib/parallel/util.js +59 -0
  44. package/dist/lib/prerequire.d.ts +1 -0
  45. package/dist/lib/prerequire.js +1 -0
  46. package/dist/lib/request_call_function.d.ts +1 -0
  47. package/dist/lib/request_call_function.js +37 -0
  48. package/dist/lib/restore.d.ts +4 -0
  49. package/dist/lib/restore.js +16 -0
  50. package/dist/lib/start-cluster.d.ts +1 -0
  51. package/dist/lib/start-cluster.js +19 -0
  52. package/dist/lib/supertest.d.ts +16 -0
  53. package/dist/lib/supertest.js +39 -0
  54. package/dist/lib/tmp/empty.d.ts +1 -0
  55. package/dist/lib/tmp/empty.js +1 -0
  56. package/{src/lib/types.ts → dist/lib/types.d.ts} +12 -29
  57. package/dist/lib/types.js +1 -0
  58. package/dist/lib/utils.d.ts +12 -0
  59. package/dist/lib/utils.js +40 -0
  60. package/dist/register.d.ts +12 -0
  61. package/dist/register.js +65 -0
  62. package/dist/typings/index.d.ts +1 -0
  63. package/package.json +68 -100
  64. package/dist/commonjs/app/extend/agent.d.ts +0 -34
  65. package/dist/commonjs/app/extend/agent.js +0 -49
  66. package/dist/commonjs/app/extend/application.d.ts +0 -172
  67. package/dist/commonjs/app/extend/application.js +0 -450
  68. package/dist/commonjs/app/middleware/cluster_app_mock.d.ts +0 -3
  69. package/dist/commonjs/app/middleware/cluster_app_mock.js +0 -101
  70. package/dist/commonjs/app.d.ts +0 -6
  71. package/dist/commonjs/app.js +0 -20
  72. package/dist/commonjs/bootstrap.d.ts +0 -5
  73. package/dist/commonjs/bootstrap.js +0 -59
  74. package/dist/commonjs/index.d.ts +0 -77
  75. package/dist/commonjs/index.js +0 -114
  76. package/dist/commonjs/lib/agent_handler.d.ts +0 -3
  77. package/dist/commonjs/lib/agent_handler.js +0 -28
  78. package/dist/commonjs/lib/app.d.ts +0 -3
  79. package/dist/commonjs/lib/app.js +0 -301
  80. package/dist/commonjs/lib/app_handler.d.ts +0 -5
  81. package/dist/commonjs/lib/app_handler.js +0 -71
  82. package/dist/commonjs/lib/cluster.d.ts +0 -114
  83. package/dist/commonjs/lib/cluster.js +0 -337
  84. package/dist/commonjs/lib/context.d.ts +0 -1
  85. package/dist/commonjs/lib/context.js +0 -16
  86. package/dist/commonjs/lib/format_options.d.ts +0 -5
  87. package/dist/commonjs/lib/format_options.js +0 -100
  88. package/dist/commonjs/lib/inject_context.d.ts +0 -6
  89. package/dist/commonjs/lib/inject_context.js +0 -132
  90. package/dist/commonjs/lib/mock_agent.d.ts +0 -5
  91. package/dist/commonjs/lib/mock_agent.js +0 -49
  92. package/dist/commonjs/lib/mock_custom_loader.d.ts +0 -1
  93. package/dist/commonjs/lib/mock_custom_loader.js +0 -37
  94. package/dist/commonjs/lib/mock_http_server.d.ts +0 -2
  95. package/dist/commonjs/lib/mock_http_server.js +0 -24
  96. package/dist/commonjs/lib/mock_httpclient.d.ts +0 -36
  97. package/dist/commonjs/lib/mock_httpclient.js +0 -147
  98. package/dist/commonjs/lib/parallel/agent.d.ts +0 -20
  99. package/dist/commonjs/lib/parallel/agent.js +0 -125
  100. package/dist/commonjs/lib/parallel/app.d.ts +0 -20
  101. package/dist/commonjs/lib/parallel/app.js +0 -115
  102. package/dist/commonjs/lib/parallel/util.d.ts +0 -3
  103. package/dist/commonjs/lib/parallel/util.js +0 -77
  104. package/dist/commonjs/lib/prerequire.d.ts +0 -1
  105. package/dist/commonjs/lib/prerequire.js +0 -26
  106. package/dist/commonjs/lib/request_call_function.d.ts +0 -1
  107. package/dist/commonjs/lib/request_call_function.js +0 -52
  108. package/dist/commonjs/lib/restore.d.ts +0 -1
  109. package/dist/commonjs/lib/restore.js +0 -16
  110. package/dist/commonjs/lib/start-cluster.d.ts +0 -2
  111. package/dist/commonjs/lib/start-cluster.js +0 -23
  112. package/dist/commonjs/lib/supertest.d.ts +0 -11
  113. package/dist/commonjs/lib/supertest.js +0 -48
  114. package/dist/commonjs/lib/tmp/empty.d.ts +0 -1
  115. package/dist/commonjs/lib/tmp/empty.js +0 -3
  116. package/dist/commonjs/lib/types.d.ts +0 -68
  117. package/dist/commonjs/lib/types.js +0 -3
  118. package/dist/commonjs/lib/utils.d.ts +0 -9
  119. package/dist/commonjs/lib/utils.js +0 -80
  120. package/dist/commonjs/package.json +0 -3
  121. package/dist/commonjs/register.d.ts +0 -8
  122. package/dist/commonjs/register.js +0 -80
  123. package/dist/esm/app/extend/agent.d.ts +0 -34
  124. package/dist/esm/app/extend/agent.js +0 -46
  125. package/dist/esm/app/extend/application.d.ts +0 -172
  126. package/dist/esm/app/extend/application.js +0 -444
  127. package/dist/esm/app/middleware/cluster_app_mock.d.ts +0 -3
  128. package/dist/esm/app/middleware/cluster_app_mock.js +0 -99
  129. package/dist/esm/app.d.ts +0 -6
  130. package/dist/esm/app.js +0 -17
  131. package/dist/esm/bootstrap.d.ts +0 -5
  132. package/dist/esm/bootstrap.js +0 -15
  133. package/dist/esm/index.d.ts +0 -77
  134. package/dist/esm/index.js +0 -91
  135. package/dist/esm/lib/agent_handler.d.ts +0 -3
  136. package/dist/esm/lib/agent_handler.js +0 -24
  137. package/dist/esm/lib/app.d.ts +0 -3
  138. package/dist/esm/lib/app.js +0 -295
  139. package/dist/esm/lib/app_handler.d.ts +0 -5
  140. package/dist/esm/lib/app_handler.js +0 -65
  141. package/dist/esm/lib/cluster.d.ts +0 -114
  142. package/dist/esm/lib/cluster.js +0 -328
  143. package/dist/esm/lib/context.d.ts +0 -1
  144. package/dist/esm/lib/context.js +0 -13
  145. package/dist/esm/lib/format_options.d.ts +0 -5
  146. package/dist/esm/lib/format_options.js +0 -94
  147. package/dist/esm/lib/inject_context.d.ts +0 -6
  148. package/dist/esm/lib/inject_context.js +0 -126
  149. package/dist/esm/lib/mock_agent.d.ts +0 -5
  150. package/dist/esm/lib/mock_agent.js +0 -45
  151. package/dist/esm/lib/mock_custom_loader.d.ts +0 -1
  152. package/dist/esm/lib/mock_custom_loader.js +0 -34
  153. package/dist/esm/lib/mock_http_server.d.ts +0 -2
  154. package/dist/esm/lib/mock_http_server.js +0 -18
  155. package/dist/esm/lib/mock_httpclient.d.ts +0 -36
  156. package/dist/esm/lib/mock_httpclient.js +0 -144
  157. package/dist/esm/lib/parallel/agent.d.ts +0 -20
  158. package/dist/esm/lib/parallel/agent.js +0 -117
  159. package/dist/esm/lib/parallel/app.d.ts +0 -20
  160. package/dist/esm/lib/parallel/app.js +0 -110
  161. package/dist/esm/lib/parallel/util.d.ts +0 -3
  162. package/dist/esm/lib/parallel/util.js +0 -73
  163. package/dist/esm/lib/prerequire.d.ts +0 -1
  164. package/dist/esm/lib/prerequire.js +0 -25
  165. package/dist/esm/lib/request_call_function.d.ts +0 -1
  166. package/dist/esm/lib/request_call_function.js +0 -47
  167. package/dist/esm/lib/restore.d.ts +0 -1
  168. package/dist/esm/lib/restore.js +0 -13
  169. package/dist/esm/lib/start-cluster.d.ts +0 -2
  170. package/dist/esm/lib/start-cluster.js +0 -18
  171. package/dist/esm/lib/supertest.d.ts +0 -11
  172. package/dist/esm/lib/supertest.js +0 -40
  173. package/dist/esm/lib/tmp/empty.d.ts +0 -1
  174. package/dist/esm/lib/tmp/empty.js +0 -2
  175. package/dist/esm/lib/types.d.ts +0 -68
  176. package/dist/esm/lib/types.js +0 -2
  177. package/dist/esm/lib/utils.d.ts +0 -9
  178. package/dist/esm/lib/utils.js +0 -69
  179. package/dist/esm/package.json +0 -3
  180. package/dist/esm/register.d.ts +0 -8
  181. package/dist/esm/register.js +0 -75
  182. package/dist/package.json +0 -4
  183. package/src/app/extend/agent.ts +0 -57
  184. package/src/app/extend/application.ts +0 -512
  185. package/src/app/middleware/cluster_app_mock.ts +0 -102
  186. package/src/app.ts +0 -18
  187. package/src/bootstrap.ts +0 -25
  188. package/src/index.ts +0 -112
  189. package/src/lib/agent_handler.ts +0 -28
  190. package/src/lib/app.ts +0 -314
  191. package/src/lib/app_handler.ts +0 -77
  192. package/src/lib/cluster.ts +0 -363
  193. package/src/lib/context.ts +0 -14
  194. package/src/lib/format_options.ts +0 -103
  195. package/src/lib/inject_context.ts +0 -134
  196. package/src/lib/mock_agent.ts +0 -57
  197. package/src/lib/mock_custom_loader.ts +0 -36
  198. package/src/lib/mock_http_server.ts +0 -19
  199. package/src/lib/mock_httpclient.ts +0 -183
  200. package/src/lib/parallel/agent.ts +0 -128
  201. package/src/lib/parallel/app.ts +0 -123
  202. package/src/lib/parallel/util.ts +0 -66
  203. package/src/lib/prerequire.ts +0 -25
  204. package/src/lib/request_call_function.ts +0 -49
  205. package/src/lib/restore.ts +0 -14
  206. package/src/lib/start-cluster.ts +0 -23
  207. package/src/lib/supertest.ts +0 -45
  208. package/src/lib/tmp/.gitkeep +0 -0
  209. package/src/lib/tmp/empty.ts +0 -0
  210. package/src/lib/utils.ts +0 -82
  211. package/src/register.ts +0 -80
  212. package/src/typings/index.d.ts +0 -4
@@ -1,295 +0,0 @@
1
- import { debuglog } from 'node:util';
2
- import { strict as assert } from 'node:assert';
3
- import os from 'node:os';
4
- import path from 'node:path';
5
- import { Base } from 'sdk-base';
6
- import { detectPort } from 'detect-port';
7
- import { importModule } from '@eggjs/utils';
8
- import { sleep, rimraf, getProperty, getSourceDirname } from './utils.js';
9
- import { formatOptions } from './format_options.js';
10
- import { context } from './context.js';
11
- import { setCustomLoader } from './mock_custom_loader.js';
12
- import { createServer } from './mock_http_server.js';
13
- const debug = debuglog('@eggjs/mock/lib/app');
14
- const apps = new Map();
15
- const APP_INIT = Symbol('appInit');
16
- const MESSENGER = Symbol('messenger');
17
- const MOCK_APP_METHOD = [
18
- 'ready',
19
- 'closed',
20
- 'isClosed',
21
- 'close',
22
- '_agent',
23
- '_app',
24
- 'on',
25
- 'once',
26
- 'then',
27
- ];
28
- class MockApplicationWorker extends Base {
29
- _agent;
30
- _app;
31
- baseDir;
32
- [APP_INIT] = false;
33
- _initOnListeners;
34
- _initOnceListeners;
35
- constructor(options) {
36
- super({
37
- initMethod: '_init',
38
- ...options,
39
- });
40
- this.baseDir = options.baseDir;
41
- this._initOnListeners = new Set();
42
- this._initOnceListeners = new Set();
43
- }
44
- async _init() {
45
- if (this.options.beforeInit) {
46
- await this.options.beforeInit(this);
47
- // init once
48
- this.options.beforeInit = undefined;
49
- }
50
- if (this.options.clean !== false) {
51
- const logDir = path.join(this.options.baseDir, 'logs');
52
- try {
53
- if (os.platform() === 'win32') {
54
- await sleep(1000);
55
- }
56
- await rimraf(logDir);
57
- }
58
- catch (err) {
59
- console.error(`remove log dir ${logDir} failed: ${err.stack}`);
60
- }
61
- const runDir = path.join(this.options.baseDir, 'run');
62
- try {
63
- if (os.platform() === 'win32') {
64
- await sleep(1000);
65
- }
66
- await rimraf(runDir);
67
- }
68
- catch (err) {
69
- console.error(`remove run dir ${runDir} failed: ${err.stack}`);
70
- }
71
- }
72
- this.options.clusterPort = await detectPort();
73
- debug('get clusterPort %s', this.options.clusterPort);
74
- const egg = await importModule(this.options.framework);
75
- assert(egg.Agent, `should export Agent class from framework ${this.options.framework}`);
76
- const Agent = egg.Agent;
77
- const agent = this._agent = new Agent({ ...this.options });
78
- debug('agent instantiate');
79
- await agent.ready();
80
- debug('agent ready');
81
- const ApplicationClass = bindMessenger(egg.Application, agent);
82
- const app = this._app = new ApplicationClass({ ...this.options });
83
- // https://github.com/eggjs/egg/blob/8bb7c7e7d59d6aeca4b2ed1eb580368dcb731a4d/lib/egg.js#L125
84
- // egg single mode mount this at start(), so egg-mock should impel it.
85
- app.agent = agent;
86
- Reflect.set(agent, 'app', app);
87
- // egg-mock plugin need to override egg context
88
- Object.assign(app.context, context);
89
- debug('app instantiate');
90
- this[APP_INIT] = true;
91
- debug('this[APP_INIT] = true');
92
- this.#bindEvent();
93
- debug('http server instantiate');
94
- createServer(app);
95
- await app.ready();
96
- // work for config ready
97
- setCustomLoader(app);
98
- const msg = {
99
- action: 'egg-ready',
100
- data: this.options,
101
- };
102
- app.messenger.onMessage(msg);
103
- agent.messenger.onMessage(msg);
104
- debug('app ready');
105
- }
106
- #bindEvent() {
107
- debug('bind cache events to app');
108
- for (const args of this._initOnListeners) {
109
- debug('on(%s), use cache and pass to app', args);
110
- this._app.on(args[0], args[1]);
111
- this.removeListener(args[0], args[1]);
112
- }
113
- for (const args of this._initOnceListeners) {
114
- debug('once(%s), use cache and pass to app', args);
115
- this._app.once(args[0], args[1]);
116
- this.removeListener(args[0], args[1]);
117
- }
118
- }
119
- on(...args) {
120
- if (this[APP_INIT]) {
121
- debug('on(%s), pass to app', args);
122
- this._app.on(args[0], args[1]);
123
- }
124
- else {
125
- debug('on(%s), cache it because app has not init', args);
126
- this._initOnListeners.add(args);
127
- super.on(args[0], args[1]);
128
- }
129
- return this;
130
- }
131
- once(...args) {
132
- if (this[APP_INIT]) {
133
- debug('once(%s), pass to app', args);
134
- this._app.once(args[0], args[1]);
135
- }
136
- else {
137
- debug('once(%s), cache it because app has not init', args);
138
- this._initOnceListeners.add(args);
139
- // maybe some edge case bug here
140
- super.on(args[0], args[1]);
141
- }
142
- return this;
143
- }
144
- /**
145
- * close app
146
- */
147
- async _close() {
148
- const baseDir = this.baseDir;
149
- if (this._app) {
150
- await this._app.close();
151
- }
152
- else {
153
- // when app init throws an exception, must wait for app quit gracefully
154
- await sleep(200);
155
- }
156
- if (this._agent) {
157
- await this._agent.close();
158
- }
159
- apps.delete(baseDir);
160
- debug('delete app cache %s, remain %s', baseDir, [...apps.keys()]);
161
- if (os.platform() === 'win32') {
162
- await sleep(1000);
163
- }
164
- }
165
- /**
166
- * @deprecated please use isClosed instead, keep compatible with old version
167
- */
168
- get closed() {
169
- return this.isClosed;
170
- }
171
- }
172
- export function createApp(createOptions) {
173
- const options = formatOptions(createOptions);
174
- if (options.cache && apps.has(options.baseDir)) {
175
- const app = apps.get(options.baseDir);
176
- // return cache when it hasn't been killed
177
- if (app && !app.isClosed) {
178
- debug('use cache app %s', options.baseDir);
179
- return app;
180
- }
181
- // delete the cache when it's closed
182
- apps.delete(options.baseDir);
183
- }
184
- const appWorker = new MockApplicationWorker(options);
185
- const proxyApp = new Proxy(appWorker, {
186
- get(target, prop) {
187
- // don't delegate properties on MockApplication
188
- if (MOCK_APP_METHOD.includes(prop)) {
189
- return getProperty(target, prop);
190
- }
191
- if (!target[APP_INIT]) {
192
- throw new Error(`can't get ${prop} before ready`);
193
- }
194
- // it's asynchronous when agent and app are loading,
195
- // so should get the properties after loader ready
196
- debug('proxy handler.get %s', prop);
197
- return target._app[prop];
198
- },
199
- set(target, prop, value) {
200
- if (MOCK_APP_METHOD.includes(prop))
201
- return true;
202
- if (!target[APP_INIT])
203
- throw new Error(`can't set ${prop} before ready`);
204
- debug('proxy handler.set %s', prop);
205
- target._app[prop] = value;
206
- return true;
207
- },
208
- defineProperty(target, prop, descriptor) {
209
- // can't define properties on MockApplication
210
- if (MOCK_APP_METHOD.includes(prop))
211
- return true;
212
- if (!target[APP_INIT])
213
- throw new Error(`can't defineProperty ${prop} before ready`);
214
- debug('proxy handler.defineProperty %s', prop);
215
- Object.defineProperty(target._app, prop, descriptor);
216
- return true;
217
- },
218
- deleteProperty(target, prop) {
219
- // can't delete properties on MockApplication
220
- if (MOCK_APP_METHOD.includes(prop))
221
- return true;
222
- if (!target[APP_INIT])
223
- throw new Error(`can't delete ${prop} before ready`);
224
- debug('proxy handler.deleteProperty %s', prop);
225
- delete target._app[prop];
226
- return true;
227
- },
228
- getOwnPropertyDescriptor(target, prop) {
229
- if (MOCK_APP_METHOD.includes(prop)) {
230
- return Object.getOwnPropertyDescriptor(target, prop);
231
- }
232
- if (!target[APP_INIT]) {
233
- throw new Error(`can't getOwnPropertyDescriptor ${prop} before ready`);
234
- }
235
- debug('proxy handler.getOwnPropertyDescriptor %s', prop);
236
- return Object.getOwnPropertyDescriptor(target._app, prop);
237
- },
238
- getPrototypeOf(target) {
239
- if (!target[APP_INIT]) {
240
- throw new Error('can\'t getPrototypeOf before ready');
241
- }
242
- debug('proxy handler.getPrototypeOf %s');
243
- return Object.getPrototypeOf(target._app);
244
- },
245
- });
246
- apps.set(options.baseDir, proxyApp);
247
- return proxyApp;
248
- }
249
- function bindMessenger(ApplicationClass, agent) {
250
- const agentMessenger = agent.messenger;
251
- return class MessengerApplication extends ApplicationClass {
252
- [MESSENGER];
253
- constructor(options) {
254
- super(options);
255
- // enable app to send to a random agent
256
- this.messenger.sendRandom = (action, data) => {
257
- this.messenger.sendToAgent(action, data);
258
- };
259
- // enable agent to send to a random app
260
- agentMessenger.on('egg-ready', () => {
261
- agentMessenger.sendRandom = (action, data) => {
262
- agentMessenger.sendToApp(action, data);
263
- return agentMessenger;
264
- };
265
- });
266
- agentMessenger.send = new Proxy(agentMessenger.send, {
267
- apply: this._sendMessage.bind(this),
268
- });
269
- }
270
- _sendMessage(_target, _thisArg, [action, data, to]) {
271
- const appMessenger = this.messenger;
272
- setImmediate(() => {
273
- if (to === 'app') {
274
- appMessenger.onMessage({ action, data });
275
- }
276
- else {
277
- agentMessenger.onMessage({ action, data });
278
- }
279
- });
280
- }
281
- get messenger() {
282
- return this[MESSENGER];
283
- }
284
- set messenger(m) {
285
- m.send = new Proxy(m.send, {
286
- apply: this._sendMessage.bind(this),
287
- });
288
- this[MESSENGER] = m;
289
- }
290
- get [Symbol.for('egg#eggPath')]() {
291
- return path.join(getSourceDirname(), 'lib/tmp');
292
- }
293
- };
294
- }
295
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9hcHAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNyQyxPQUFPLEVBQUUsTUFBTSxJQUFJLE1BQU0sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMvQyxPQUFPLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDekIsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQzdCLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDaEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzVDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUMxRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN2QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBS3JELE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBRTlDLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxFQUErQixDQUFDO0FBQ3BELE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNuQyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDdEMsTUFBTSxlQUFlLEdBQUc7SUFDdEIsT0FBTztJQUNQLFFBQVE7SUFDUixVQUFVO0lBQ1YsT0FBTztJQUNQLFFBQVE7SUFDUixNQUFNO0lBQ04sSUFBSTtJ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
@@ -1,5 +0,0 @@
1
- import ApplicationUnittest from '../app/extend/application.js';
2
- export declare function setupApp(): ApplicationUnittest;
3
- export declare function setGetAppCallback(cb: (suite: unknown, test?: unknown) => any): void;
4
- export declare function getApp(suite?: unknown, test?: unknown): Promise<any>;
5
- export declare function getBootstrapApp(): ApplicationUnittest;
@@ -1,65 +0,0 @@
1
- import { debuglog } from 'node:util';
2
- import { createApp as createParallelApp } from './parallel/app.js';
3
- import { setupAgent } from './agent_handler.js';
4
- import { createApp } from './app.js';
5
- import { restore } from './restore.js';
6
- import { getEggOptions } from './utils.js';
7
- const debug = debuglog('@eggjs/mock/lib/app_handler');
8
- globalThis.__eggMockAppInstance = null;
9
- export function setupApp() {
10
- let app = globalThis.__eggMockAppInstance;
11
- if (app) {
12
- debug('return exists app');
13
- return app;
14
- }
15
- const options = getEggOptions();
16
- debug('env.ENABLE_MOCHA_PARALLEL: %s, process.env.AUTO_AGENT: %s', process.env.ENABLE_MOCHA_PARALLEL, process.env.AUTO_AGENT);
17
- if (process.env.ENABLE_MOCHA_PARALLEL && process.env.AUTO_AGENT) {
18
- // setup agent first
19
- app = createParallelApp({
20
- ...options,
21
- beforeInit: async (parallelApp) => {
22
- const agent = await setupAgent();
23
- parallelApp.options.clusterPort = agent.options.clusterPort;
24
- debug('mockParallelApp beforeInit get clusterPort: %s', parallelApp.options.clusterPort);
25
- },
26
- });
27
- debug('mockParallelApp app: %s', !!app);
28
- }
29
- else {
30
- app = createApp(options);
31
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
32
- // @ts-ignore
33
- if (typeof beforeAll === 'function') {
34
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
35
- // @ts-ignore
36
- // jest
37
- beforeAll(() => app.ready());
38
- }
39
- if (typeof afterEach === 'function') {
40
- // mocha and jest
41
- afterEach(() => app.backgroundTasksFinished());
42
- afterEach(restore);
43
- }
44
- }
45
- globalThis.__eggMockAppInstance = app;
46
- return app;
47
- }
48
- let getAppCallback;
49
- export function setGetAppCallback(cb) {
50
- getAppCallback = cb;
51
- }
52
- export async function getApp(suite, test) {
53
- if (getAppCallback) {
54
- return getAppCallback(suite, test);
55
- }
56
- const app = globalThis.__eggMockAppInstance;
57
- if (app) {
58
- await app.ready();
59
- }
60
- return app;
61
- }
62
- export function getBootstrapApp() {
63
- return globalThis.__eggMockAppInstance;
64
- }
65
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwX2hhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2FwcF9oYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDckMsT0FBTyxFQUFFLFNBQVMsSUFBSSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdkMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUczQyxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsNkJBQTZCLENBQUMsQ0FBQztBQU10RCxVQUFVLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO0FBRXZDLE1BQU0sVUFBVSxRQUFRO0lBQ3RCLElBQUksR0FBRyxHQUFHLFVBQVUsQ0FBQyxvQkFBcUIsQ0FBQztJQUMzQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ1IsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDM0IsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQsTUFBTSxPQUFPLEdBQUcsYUFBYSxFQUFFLENBQUM7SUFDaEMsS0FBSyxDQUFDLDJEQUEyRCxFQUMvRCxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDN0QsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDaEUsb0JBQW9CO1FBQ3BCLEdBQUcsR0FBRyxpQkFBaUIsQ0FBQztZQUN0QixHQUFHLE9BQU87WUFDVixVQUFVLEVBQUUsS0FBSyxFQUFDLFdBQVcsRUFBQyxFQUFFO2dCQUM5QixNQUFNLEtBQUssR0FBRyxNQUFNLFVBQVUsRUFBRSxDQUFDO2dCQUNqQyxXQUFXLENBQUMsT0FBTyxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztnQkFDNUQsS0FBSyxDQUFDLGdEQUFnRCxFQUFFLFdBQVcsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDM0YsQ0FBQztTQUNGLENBQUMsQ0FBQztRQUNILEtBQUssQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUMsQ0FBQztTQUFNLENBQUM7UUFDTixHQUFHLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBbUMsQ0FBQztRQUMzRCw2REFBNkQ7UUFDN0QsYUFBYTtRQUNiLElBQUksT0FBTyxTQUFTLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDcEMsNkRBQTZEO1lBQzdELGFBQWE7WUFDYixPQUFPO1lBQ1AsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLENBQUM7UUFDRCxJQUFJLE9BQU8sU0FBUyxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQ3BDLGlCQUFpQjtZQUNqQixTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLHVCQUF1QixFQUFFLENBQUMsQ0FBQztZQUMvQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckIsQ0FBQztJQUNILENBQUM7SUFDRCxVQUFVLENBQUMsb0JBQW9CLEdBQUcsR0FBRyxDQUFDO0lBQ3RDLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELElBQUksY0FBdUQsQ0FBQztBQUU1RCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsRUFBMkM7SUFDM0UsY0FBYyxHQUFHLEVBQUUsQ0FBQztBQUN0QixDQUFDO0FBRUQsTUFBTSxDQUFDLEtBQUssVUFBVSxNQUFNLENBQUMsS0FBZSxFQUFFLElBQWM7SUFDMUQsSUFBSSxjQUFjLEVBQUUsQ0FBQztRQUNuQixPQUFPLGNBQWMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUNELE1BQU0sR0FBRyxHQUFHLFVBQVUsQ0FBQyxvQkFBcUIsQ0FBQztJQUM3QyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ1IsTUFBTSxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sVUFBVSxlQUFlO0lBQzdCLE9BQU8sVUFBVSxDQUFDLG9CQUFxQixDQUFDO0FBQzFDLENBQUMifQ==
@@ -1,114 +0,0 @@
1
- import { Coffee } from 'coffee';
2
- import type { MockClusterOptions, MockClusterApplicationOptions } from './types.js';
3
- /**
4
- * A cluster version of egg.Application, you can test with supertest
5
- * @example
6
- * ```js
7
- * const mm = require('mm');
8
- * const request = require('supertest');
9
- *
10
- * describe('ClusterApplication', () => {
11
- * let app;
12
- * before(function (done) {
13
- * app = mm.cluster({ baseDir });
14
- * app.ready(done);
15
- * });
16
- *
17
- * after(function () {
18
- * app.close();
19
- * });
20
- *
21
- * it('should 200', function (done) {
22
- * request(app.callback())
23
- * .get('/')
24
- * .expect(200, done);
25
- * });
26
- * });
27
- */
28
- export declare class ClusterApplication extends Coffee {
29
- [key: string | symbol]: any;
30
- options: MockClusterApplicationOptions;
31
- port: number;
32
- baseDir: string;
33
- closed: boolean;
34
- /**
35
- * @class
36
- * @param {Object} options
37
- * - {String} baseDir - The directory of the application
38
- * - {Object} plugins - Custom you plugins
39
- * - {String} framework - The directory of the egg framework
40
- * - {Boolean} [cache=true] - Cache application based on baseDir
41
- * - {Boolean} [coverage=true] - Switch on process coverage, but it'll be slower
42
- * - {Boolean} [clean=true] - Remove $baseDir/logs
43
- * - {Object} [opt] - opt pass to coffee, such as { execArgv: ['--debug'] }
44
- * ```
45
- */
46
- constructor(options: MockClusterApplicationOptions);
47
- /**
48
- * the process that forked
49
- * @member {ChildProcess}
50
- */
51
- get process(): any;
52
- /**
53
- * Compatible API for supertest
54
- */
55
- callback(): this;
56
- /**
57
- * Compatible API for supertest
58
- * @member {String} url
59
- * @private
60
- */
61
- get url(): string;
62
- /**
63
- * Compatible API for supertest
64
- */
65
- address(): {
66
- port: number;
67
- };
68
- /**
69
- * Compatible API for supertest
70
- */
71
- listen(): this;
72
- /**
73
- * kill the process
74
- */
75
- close(): Promise<void>;
76
- get isClosed(): boolean;
77
- get router(): {
78
- pathFor(url: string): any;
79
- };
80
- /**
81
- * get app[property] value in app worker
82
- */
83
- getAppInstanceProperty(property: string): any;
84
- /**
85
- * collection logger message, then can be use on `expectLog()`
86
- * it's different from `app.expectLog()`, only support string params.
87
- *
88
- * @param {String} [logger] - logger instance name, default is `logger`
89
- * @function ClusterApplication#expectLog
90
- */
91
- mockLog(logger?: string): void;
92
- /**
93
- * expect str in the logger
94
- * it's different from `app.expectLog()`, only support string params.
95
- *
96
- * @param {String} str - test str
97
- * @param {String} [logger] - logger instance name, default is `logger`
98
- * @function ClusterApplication#expectLog
99
- */
100
- expectLog(str: string, logger?: string): void;
101
- /**
102
- * not expect str in the logger
103
- * it's different from `app.notExpectLog()`, only support string params.
104
- *
105
- * @param {String} str - test str
106
- * @param {String} [logger] - logger instance name, default is `logger`
107
- * @function ClusterApplication#notExpectLog
108
- */
109
- notExpectLog(str: string, logger?: string): void;
110
- httpRequest(): import("./supertest.js").EggTestRequest;
111
- _callFunctionOnAppWorker(method: string, args?: any[], property?: any, needResult?: boolean): any;
112
- }
113
- export declare function createCluster(initOptions?: MockClusterOptions): any;
114
- export declare function restore(): Promise<void>;