@eggjs/mock 7.0.0-beta.20 → 7.0.0-beta.22

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 (96) hide show
  1. package/dist/app/extend/agent.d.ts +33 -38
  2. package/dist/app/extend/agent.js +46 -5
  3. package/dist/app/extend/application.d.ts +171 -5
  4. package/dist/app/extend/application.js +445 -9
  5. package/dist/app/middleware/cluster_app_mock.d.ts +2 -5
  6. package/dist/app/middleware/cluster_app_mock.js +99 -96
  7. package/dist/app.d.ts +5 -9
  8. package/dist/app.js +18 -17
  9. package/dist/bootstrap.d.ts +5 -15
  10. package/dist/bootstrap.js +13 -29
  11. package/dist/index.d.ts +77 -10
  12. package/dist/index.js +90 -22
  13. package/dist/inject_mocha.d.ts +1 -1
  14. package/dist/inject_mocha.js +35 -23
  15. package/dist/lib/agent_handler.d.ts +3 -10
  16. package/dist/lib/agent_handler.js +24 -9
  17. package/dist/lib/app.d.ts +3 -6
  18. package/dist/lib/app.js +291 -14
  19. package/dist/lib/app_handler.d.ts +5 -6
  20. package/dist/lib/app_handler.js +69 -21
  21. package/dist/lib/cluster.d.ts +121 -6
  22. package/dist/lib/cluster.js +340 -7
  23. package/dist/lib/context.d.ts +1 -4
  24. package/dist/lib/context.js +11 -3
  25. package/dist/lib/format_options.d.ts +2 -7
  26. package/dist/lib/format_options.js +93 -4
  27. package/dist/lib/inject_context.d.ts +1 -4
  28. package/dist/lib/inject_context.js +126 -22
  29. package/dist/lib/mock_agent.d.ts +4 -8
  30. package/dist/lib/mock_agent.js +45 -3
  31. package/dist/lib/mock_custom_loader.d.ts +1 -4
  32. package/dist/lib/mock_custom_loader.js +34 -3
  33. package/dist/lib/mock_http_server.d.ts +2 -6
  34. package/dist/lib/mock_http_server.js +18 -3
  35. package/dist/lib/mock_httpclient.d.ts +36 -2
  36. package/dist/lib/mock_httpclient.js +146 -4
  37. package/dist/lib/parallel/agent.d.ts +20 -5
  38. package/dist/lib/parallel/agent.js +117 -8
  39. package/dist/lib/parallel/app.d.ts +19 -24
  40. package/dist/lib/parallel/app.js +111 -9
  41. package/dist/lib/parallel/util.d.ts +3 -2
  42. package/dist/lib/parallel/util.js +66 -4
  43. package/dist/lib/prerequire.d.ts +1 -1
  44. package/dist/lib/prerequire.js +25 -1
  45. package/dist/lib/request_call_function.d.ts +1 -1
  46. package/dist/lib/request_call_function.js +47 -34
  47. package/dist/lib/restore.d.ts +1 -2
  48. package/dist/lib/restore.js +13 -9
  49. package/dist/lib/start-cluster.d.ts +2 -1
  50. package/dist/lib/start-cluster.js +14 -15
  51. package/dist/lib/supertest.d.ts +11 -2
  52. package/dist/lib/supertest.js +40 -5
  53. package/dist/lib/tmp/empty.d.ts +1 -1
  54. package/dist/lib/tmp/empty.js +2 -1
  55. package/dist/lib/types.d.ts +72 -3
  56. package/dist/lib/types.js +2 -3
  57. package/dist/lib/utils.d.ts +8 -11
  58. package/dist/lib/utils.js +69 -3
  59. package/dist/register.d.ts +7 -11
  60. package/dist/register.js +41 -55
  61. package/package.json +7 -7
  62. package/dist/agent-BKYkjoCx.js +0 -111
  63. package/dist/agent-CHCe8tnW.d.ts +0 -24
  64. package/dist/agent-DZ_fHoxJ.js +0 -48
  65. package/dist/agent_handler-DeUtoRVT.js +0 -26
  66. package/dist/app-6Bn3F5Uw.js +0 -252
  67. package/dist/app-CoypamK1.js +0 -99
  68. package/dist/app-l47a-gqT.d.ts +0 -7
  69. package/dist/app_handler-CkiK6fyC.js +0 -55
  70. package/dist/app_handler-Gp5J9X-v.d.ts +0 -9
  71. package/dist/application-BPpvw5dg.d.ts +0 -175
  72. package/dist/application-LrKwuOKn.js +0 -385
  73. package/dist/cluster-CA_hr9eV.js +0 -283
  74. package/dist/cluster-RTfUwmUd.d.ts +0 -126
  75. package/dist/context-BIduDy1M.js +0 -10
  76. package/dist/format_options-LRnReKde.js +0 -65
  77. package/dist/index-BtBMDZg8.d.ts +0 -78
  78. package/dist/inject_context-BxpcF-ds.js +0 -106
  79. package/dist/inject_mocha-BVf8v6El.js +0 -38
  80. package/dist/inject_mocha-Daf1Aj8M.d.ts +0 -1
  81. package/dist/mock_agent-CxT7Q0_N.js +0 -45
  82. package/dist/mock_custom_loader-f_tHRojG.js +0 -35
  83. package/dist/mock_http_server-De0r07gr.js +0 -17
  84. package/dist/mock_httpclient-1EgQkMxi.d.ts +0 -40
  85. package/dist/mock_httpclient-B6UVI7GS.js +0 -110
  86. package/dist/restore-BL0cE0KG.d.ts +0 -4
  87. package/dist/restore-CVQYXquh.js +0 -16
  88. package/dist/src-D22EjdGo.js +0 -47
  89. package/dist/supertest-BIds28yL.d.ts +0 -16
  90. package/dist/supertest-Cg412Los.js +0 -39
  91. package/dist/types-CPNMyF89.js +0 -1
  92. package/dist/types-CjZ-JeCo.d.ts +0 -75
  93. package/dist/typings/index.d.ts +0 -1
  94. package/dist/util-1xYBaaoh.d.ts +0 -6
  95. package/dist/util-BpppqTXv.js +0 -59
  96. package/dist/utils-MhP_Krx1.js +0 -40
@@ -1,9 +1,445 @@
1
- import "../../mock_http_server-De0r07gr.js";
2
- import "../../utils-MhP_Krx1.js";
3
- import "../../supertest-Cg412Los.js";
4
- import "../../mock_agent-CxT7Q0_N.js";
5
- import "../../mock_httpclient-B6UVI7GS.js";
6
- import "../../types-CPNMyF89.js";
7
- import { ApplicationUnittest } from "../../application-LrKwuOKn.js";
8
-
9
- export { ApplicationUnittest as default };
1
+ import { debuglog } from 'node:util';
2
+ import http, { IncomingMessage } from 'node:http';
3
+ import fs from 'node:fs';
4
+ import assert from 'node:assert';
5
+ import mergeDescriptors from 'merge-descriptors';
6
+ import { isAsyncFunction, isObject } from 'is-type-of';
7
+ import { mock, restore } from 'mm';
8
+ import { Transport, Logger } from 'egg-logger';
9
+ import { Application } from 'egg';
10
+ import { getMockAgent, restoreMockAgent } from "../../lib/mock_agent.js";
11
+ import { createMockHttpClient, } from "../../lib/mock_httpclient.js";
12
+ import { request as supertestRequest, EggTestRequest } from "../../lib/supertest.js";
13
+ import {} from "../../lib/types.js";
14
+ const debug = debuglog('egg/mock/app/extend/application');
15
+ const ORIGIN_TYPES = Symbol('@eggjs/mock originTypes');
16
+ const BACKGROUND_TASKS = Symbol('Application#backgroundTasks');
17
+ const REUSED_CTX = Symbol('Context#reusedInSuite');
18
+ export default class ApplicationUnittest extends Application {
19
+ _mockHttpClient;
20
+ /**
21
+ * mock Context
22
+ * @function App#mockContext
23
+ * @param {Object} data - ctx data
24
+ * @param {Object} [options] - mock ctx options
25
+ * @example
26
+ * ```js
27
+ * const ctx = app.mockContext({
28
+ * user: {
29
+ * name: 'Jason'
30
+ * }
31
+ * });
32
+ * console.log(ctx.user.name); // Jason
33
+ *
34
+ * // controller
35
+ * module.exports = function*() {
36
+ * this.body = this.user.name;
37
+ * };
38
+ * ```
39
+ */
40
+ mockContext(data, options) {
41
+ data = data ?? {};
42
+ function mockRequest(req) {
43
+ for (const key in data?.headers) {
44
+ mock(req.headers, key, data.headers[key]);
45
+ mock(req.headers, key.toLowerCase(), data.headers[key]);
46
+ }
47
+ }
48
+ // try to use app.options.mockCtxStorage first
49
+ const mockCtxStorage = this.options.mockCtxStorage ?? true;
50
+ options = Object.assign({ mockCtxStorage }, options);
51
+ if ('_customMockContext' in this && typeof this._customMockContext === 'function') {
52
+ this._customMockContext(data);
53
+ }
54
+ // 使用者自定义mock,可以覆盖上面的 mock
55
+ for (const key in data) {
56
+ mock(this.context, key, data[key]);
57
+ }
58
+ const req = this.mockRequest(data);
59
+ const res = new http.ServerResponse(req);
60
+ if (options.reuseCtxStorage !== false) {
61
+ if (this.currentContext && !this.currentContext[REUSED_CTX]) {
62
+ mockRequest(this.currentContext.request.req);
63
+ this.currentContext[REUSED_CTX] = true;
64
+ return this.currentContext;
65
+ }
66
+ }
67
+ const ctx = this.createContext(req, res);
68
+ if (options.mockCtxStorage) {
69
+ mock(this.ctxStorage, 'getStore', () => ctx);
70
+ }
71
+ return ctx;
72
+ }
73
+ async mockContextScope(fn, data) {
74
+ const ctx = this.mockContext(data, {
75
+ mockCtxStorage: false,
76
+ reuseCtxStorage: false,
77
+ });
78
+ return await this.ctxStorage.run(ctx, async () => {
79
+ return await fn(ctx);
80
+ });
81
+ }
82
+ /**
83
+ * mock cookie session
84
+ * @function App#mockSession
85
+ * @param {Object} data - session object
86
+ */
87
+ mockSession(data) {
88
+ if (!data) {
89
+ return this;
90
+ }
91
+ if (isObject(data) && !('save' in data)) {
92
+ // keep session.save() work
93
+ Object.defineProperty(data, 'save', {
94
+ value: () => { },
95
+ enumerable: false,
96
+ });
97
+ }
98
+ mock(this.context, 'session', data);
99
+ return this;
100
+ }
101
+ /**
102
+ * Mock service
103
+ * @function App#mockService
104
+ * @param {String} service - name
105
+ * @param {String} methodName - method
106
+ * @param {Object|Function|Error} fn - mock you data
107
+ */
108
+ mockService(service, methodName, fn) {
109
+ if (typeof service === 'string') {
110
+ const splits = service.split('.');
111
+ service = this.serviceClasses;
112
+ for (const key of splits) {
113
+ service = service[key];
114
+ }
115
+ service = service.prototype || service;
116
+ }
117
+ this._mockFn(service, methodName, fn);
118
+ return this;
119
+ }
120
+ /**
121
+ * mock service that return error
122
+ * @function App#mockServiceError
123
+ * @param {String} service - name
124
+ * @param {String} methodName - method
125
+ * @param {Error} [err] - error information
126
+ */
127
+ mockServiceError(service, methodName, err) {
128
+ if (typeof err === 'string') {
129
+ err = new Error(err);
130
+ }
131
+ if (!err) {
132
+ // mockServiceError(service, methodName)
133
+ err = new Error(`mock ${methodName} error`);
134
+ }
135
+ this.mockService(service, methodName, err);
136
+ return this;
137
+ }
138
+ _mockFn(obj, name, data) {
139
+ const origin = obj[name];
140
+ assert(typeof origin === 'function', `property ${name} in original object must be function`);
141
+ // keep origin properties' type to support mock multi times
142
+ if (!obj[ORIGIN_TYPES])
143
+ obj[ORIGIN_TYPES] = {};
144
+ let type = obj[ORIGIN_TYPES][name];
145
+ if (!type) {
146
+ type = obj[ORIGIN_TYPES][name] = isAsyncFunction(origin) ? 'async' : 'sync';
147
+ }
148
+ if (typeof data === 'function') {
149
+ const fn = data;
150
+ // if original is async function
151
+ // but the mock function is normal function, need to change it return a promise
152
+ if (type === 'async' && !isAsyncFunction(fn)) {
153
+ mock(obj, name, function (...args) {
154
+ return new Promise(resolve => {
155
+ resolve(fn.apply(this, args));
156
+ });
157
+ });
158
+ return;
159
+ }
160
+ mock(obj, name, fn);
161
+ return;
162
+ }
163
+ if (type === 'async') {
164
+ mock(obj, name, () => {
165
+ return new Promise((resolve, reject) => {
166
+ if (data instanceof Error)
167
+ return reject(data);
168
+ resolve(data);
169
+ });
170
+ });
171
+ return;
172
+ }
173
+ mock(obj, name, () => {
174
+ if (data instanceof Error) {
175
+ throw data;
176
+ }
177
+ return data;
178
+ });
179
+ }
180
+ /**
181
+ * mock request
182
+ * @function App#mockRequest
183
+ * @param {Request} req - mock request
184
+ */
185
+ mockRequest(req) {
186
+ req = { ...req };
187
+ const headers = req.headers ?? {};
188
+ for (const key in req.headers) {
189
+ headers[key.toLowerCase()] = req.headers[key];
190
+ }
191
+ if (!headers['x-forwarded-for']) {
192
+ headers['x-forwarded-for'] = '127.0.0.1';
193
+ }
194
+ headers['x-mock-request-from'] = '@eggjs/mock';
195
+ req.headers = headers;
196
+ mergeDescriptors(req, {
197
+ query: {},
198
+ querystring: '',
199
+ host: '127.0.0.1',
200
+ hostname: '127.0.0.1',
201
+ protocol: 'http',
202
+ secure: 'false',
203
+ method: 'GET',
204
+ url: '/',
205
+ path: '/',
206
+ socket: {
207
+ remoteAddress: '127.0.0.1',
208
+ remotePort: 7001,
209
+ },
210
+ });
211
+ return req;
212
+ }
213
+ /**
214
+ * mock cookies
215
+ * @function App#mockCookies
216
+ */
217
+ mockCookies(cookies) {
218
+ if (!cookies) {
219
+ return this;
220
+ }
221
+ const createContext = this.createContext;
222
+ mock(this, 'createContext', function (req, res) {
223
+ const ctx = createContext.call(this, req, res);
224
+ const getCookie = ctx.cookies.get;
225
+ mock(ctx.cookies, 'get', function (key, opts) {
226
+ if (cookies[key]) {
227
+ return cookies[key];
228
+ }
229
+ return getCookie.call(this, key, opts);
230
+ });
231
+ return ctx;
232
+ });
233
+ return this;
234
+ }
235
+ /**
236
+ * mock header
237
+ * @function App#mockHeaders
238
+ */
239
+ mockHeaders(headers) {
240
+ if (!headers) {
241
+ return this;
242
+ }
243
+ const getHeader = this.request.get;
244
+ mock(this.request, 'get', function (field) {
245
+ const value = findHeaders(headers, field);
246
+ if (value)
247
+ return value;
248
+ return getHeader.call(this, field);
249
+ });
250
+ return this;
251
+ }
252
+ /**
253
+ * mock csrf
254
+ * @function App#mockCsrf
255
+ * @since 1.11
256
+ */
257
+ mockCsrf() {
258
+ mock(this.context, 'assertCSRF', () => { });
259
+ mock(this.context, 'assertCsrf', () => { });
260
+ return this;
261
+ }
262
+ /**
263
+ * mock httpclient
264
+ * @alias mockHttpClient
265
+ * @function App#mockHttpclient
266
+ */
267
+ mockHttpclient(mockUrl, mockMethod, mockResult) {
268
+ return this.mockHttpClient(mockUrl, mockMethod, mockResult);
269
+ }
270
+ /**
271
+ * mock httpclient
272
+ * @function App#mockHttpClient
273
+ */
274
+ mockHttpClient(mockUrl, mockMethod, mockResult) {
275
+ if (!this._mockHttpClient) {
276
+ this._mockHttpClient = createMockHttpClient(this);
277
+ }
278
+ this._mockHttpClient(mockUrl, mockMethod, mockResult);
279
+ return this;
280
+ }
281
+ /**
282
+ * @deprecated Please use app.mockHttpClient instead of app.mockUrllib
283
+ */
284
+ mockUrllib(mockUrl, mockMethod, mockResult) {
285
+ this.deprecate('[@eggjs/mock] Please use app.mockHttpClient instead of app.mockUrllib');
286
+ return this.mockHttpClient(mockUrl, mockMethod, mockResult);
287
+ }
288
+ /**
289
+ * get mock httpclient agent
290
+ * @function App#mockHttpclientAgent
291
+ */
292
+ mockAgent() {
293
+ return getMockAgent(this);
294
+ }
295
+ async mockAgentRestore() {
296
+ await restoreMockAgent();
297
+ }
298
+ /**
299
+ * @see mm#restore
300
+ * @function App#mockRestore
301
+ */
302
+ async mockRestore() {
303
+ await this.mockAgentRestore();
304
+ restore();
305
+ }
306
+ /**
307
+ * @see mm
308
+ * @function App#mm
309
+ */
310
+ get mm() {
311
+ return mock;
312
+ }
313
+ /**
314
+ * override loadAgent
315
+ * @function App#loadAgent
316
+ */
317
+ loadAgent() { }
318
+ /**
319
+ * mock serverEnv
320
+ * @function App#mockEnv
321
+ * @param {String} env - serverEnv
322
+ */
323
+ mockEnv(env) {
324
+ mock(this.config, 'env', env);
325
+ mock(this.config, 'serverEnv', env);
326
+ debug('mock env: %o', env);
327
+ return this;
328
+ }
329
+ /**
330
+ * http request helper
331
+ * @function App#httpRequest
332
+ * @return {SupertestRequest} req - supertest request
333
+ * @see https://github.com/visionmedia/supertest
334
+ */
335
+ httpRequest() {
336
+ return supertestRequest(this);
337
+ }
338
+ /**
339
+ * collection logger message, then can be use on `expectLog()`
340
+ * @param {String|Logger} [logger] - logger instance, default is `app.logger`
341
+ * @function App#mockLog
342
+ */
343
+ mockLog(logger) {
344
+ logger = logger ?? this.logger;
345
+ if (typeof logger === 'string') {
346
+ logger = this.getLogger(logger);
347
+ }
348
+ // make sure mock once
349
+ if ('_mockLogs' in logger && logger._mockLogs)
350
+ return;
351
+ const transport = new Transport(logger.options);
352
+ // https://github.com/eggjs/egg-logger/blob/master/lib/logger.js#L64
353
+ const log = logger.log;
354
+ const mockLogs = [];
355
+ mock(logger, '_mockLogs', mockLogs);
356
+ mock(logger, 'log', (level, args, meta) => {
357
+ const message = transport.log(level, args, meta);
358
+ mockLogs.push(message);
359
+ log.apply(logger, [level, args, meta]);
360
+ });
361
+ }
362
+ __checkExpectLog(expectOrNot, str, logger) {
363
+ logger = logger || this.logger;
364
+ if (typeof logger === 'string') {
365
+ logger = this.getLogger(logger);
366
+ }
367
+ const filepath = logger.options.file;
368
+ let content;
369
+ if ('_mockLogs' in logger && logger._mockLogs) {
370
+ content = logger._mockLogs.join('\n');
371
+ }
372
+ else {
373
+ content = fs.readFileSync(filepath, 'utf8');
374
+ }
375
+ let match;
376
+ let type;
377
+ if (str instanceof RegExp) {
378
+ match = str.test(content);
379
+ type = 'RegExp';
380
+ }
381
+ else {
382
+ match = content.includes(String(str));
383
+ type = 'String';
384
+ }
385
+ if (expectOrNot) {
386
+ assert(match, `Can't find ${type}:"${str}" in ${filepath}, log content: ...${content.substring(content.length - 500)}`);
387
+ }
388
+ else {
389
+ assert(!match, `Find ${type}:"${str}" in ${filepath}, log content: ...${content.substring(content.length - 500)}`);
390
+ }
391
+ }
392
+ /**
393
+ * expect str/regexp in the logger, if your server disk is slow, please call `mockLog()` first.
394
+ * @param {String|RegExp} str - test str or regexp
395
+ * @param {String|Logger} [logger] - logger instance, default is `ctx.logger`
396
+ * @function App#expectLog
397
+ */
398
+ expectLog(str, logger) {
399
+ this.__checkExpectLog(true, str, logger);
400
+ }
401
+ /**
402
+ * not expect str/regexp in the logger, if your server disk is slow, please call `mockLog()` first.
403
+ * @param {String|RegExp} str - test str or regexp
404
+ * @param {String|Logger} [logger] - logger instance, default is `ctx.logger`
405
+ * @function App#notExpectLog
406
+ */
407
+ notExpectLog(str, logger) {
408
+ this.__checkExpectLog(false, str, logger);
409
+ }
410
+ async backgroundTasksFinished() {
411
+ const tasks = this._backgroundTasks;
412
+ debug('waiting %d background tasks', tasks.length);
413
+ if (tasks.length === 0)
414
+ return;
415
+ this._backgroundTasks = [];
416
+ await Promise.all(tasks);
417
+ debug('finished %d background tasks', tasks.length);
418
+ if (this._backgroundTasks.length) {
419
+ debug('new background tasks created: %s', this._backgroundTasks.length);
420
+ await this.backgroundTasksFinished();
421
+ }
422
+ }
423
+ get _backgroundTasks() {
424
+ if (!this[BACKGROUND_TASKS]) {
425
+ this[BACKGROUND_TASKS] = [];
426
+ }
427
+ return this[BACKGROUND_TASKS];
428
+ }
429
+ set _backgroundTasks(tasks) {
430
+ this[BACKGROUND_TASKS] = tasks;
431
+ }
432
+ }
433
+ function findHeaders(headers, key) {
434
+ if (!headers || !key) {
435
+ return null;
436
+ }
437
+ key = key.toLowerCase();
438
+ for (const headerKey in headers) {
439
+ if (key === headerKey.toLowerCase()) {
440
+ return headers[headerKey];
441
+ }
442
+ }
443
+ return null;
444
+ }
445
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwL2V4dGVuZC9hcHBsaWNhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3JDLE9BQU8sSUFBSSxFQUFFLEVBQUUsZUFBZSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2xELE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN6QixPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFFakMsT0FBTyxnQkFBZ0IsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN2RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQztBQUNuQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBcUMsTUFBTSxZQUFZLENBQUM7QUFDbEYsT0FBTyxFQUFnQixXQUFXLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFHaEQsT0FBTyxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pFLE9BQU8sRUFDTCxvQkFBb0IsR0FJckIsTUFBTSw4QkFBOEIsQ0FBQztBQUN0QyxPQUFPLEVBQUUsT0FBTyxJQUFJLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JGLE9BQU8sRUFBb0IsTUFBTSxvQkFBb0IsQ0FBQztBQUV0RCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsaUNBQWlDLENBQUMsQ0FBQztBQUUxRCxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQztBQUN2RCxNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0FBQy9ELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyx1QkFBdUIsQ0FB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
@@ -1,6 +1,3 @@
1
- import { Context, Next } from "egg";
2
-
3
- //#region src/app/middleware/cluster_app_mock.d.ts
1
+ import { Context, type Next } from 'egg';
4
2
  declare const _default: () => (ctx: Context, next: Next) => Promise<void>;
5
- //#endregion
6
- export { _default as default };
3
+ export default _default;