@eggjs/mock 6.0.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.
- package/LICENSE +21 -0
- package/README.md +547 -0
- package/README.zh_CN.md +512 -0
- package/dist/commonjs/app/extend/agent.d.ts +33 -0
- package/dist/commonjs/app/extend/agent.js +49 -0
- package/dist/commonjs/app/extend/application.d.ts +175 -0
- package/dist/commonjs/app/extend/application.js +448 -0
- package/dist/commonjs/app/middleware/cluster_app_mock.d.ts +3 -0
- package/dist/commonjs/app/middleware/cluster_app_mock.js +100 -0
- package/dist/commonjs/app.d.ts +6 -0
- package/dist/commonjs/app.js +20 -0
- package/dist/commonjs/bootstrap.d.ts +4 -0
- package/dist/commonjs/bootstrap.js +58 -0
- package/dist/commonjs/index.d.ts +76 -0
- package/dist/commonjs/index.js +99 -0
- package/dist/commonjs/index.test-d.d.ts +1 -0
- package/dist/commonjs/index.test-d.js +43 -0
- package/dist/commonjs/lib/agent_handler.d.ts +3 -0
- package/dist/commonjs/lib/agent_handler.js +28 -0
- package/dist/commonjs/lib/app.d.ts +28 -0
- package/dist/commonjs/lib/app.js +303 -0
- package/dist/commonjs/lib/app_handler.d.ts +5 -0
- package/dist/commonjs/lib/app_handler.js +67 -0
- package/dist/commonjs/lib/cluster.d.ts +114 -0
- package/dist/commonjs/lib/cluster.js +337 -0
- package/dist/commonjs/lib/context.d.ts +1 -0
- package/dist/commonjs/lib/context.js +16 -0
- package/dist/commonjs/lib/format_options.d.ts +5 -0
- package/dist/commonjs/lib/format_options.js +100 -0
- package/dist/commonjs/lib/inject_context.d.ts +6 -0
- package/dist/commonjs/lib/inject_context.js +132 -0
- package/dist/commonjs/lib/mock_agent.d.ts +5 -0
- package/dist/commonjs/lib/mock_agent.js +49 -0
- package/dist/commonjs/lib/mock_custom_loader.d.ts +1 -0
- package/dist/commonjs/lib/mock_custom_loader.js +37 -0
- package/dist/commonjs/lib/mock_http_server.d.ts +2 -0
- package/dist/commonjs/lib/mock_http_server.js +24 -0
- package/dist/commonjs/lib/mock_httpclient.d.ts +35 -0
- package/dist/commonjs/lib/mock_httpclient.js +147 -0
- package/dist/commonjs/lib/parallel/agent.d.ts +20 -0
- package/dist/commonjs/lib/parallel/agent.js +125 -0
- package/dist/commonjs/lib/parallel/app.d.ts +20 -0
- package/dist/commonjs/lib/parallel/app.js +115 -0
- package/dist/commonjs/lib/parallel/util.d.ts +3 -0
- package/dist/commonjs/lib/parallel/util.js +77 -0
- package/dist/commonjs/lib/prerequire.d.ts +1 -0
- package/dist/commonjs/lib/prerequire.js +26 -0
- package/dist/commonjs/lib/request_call_function.d.ts +1 -0
- package/dist/commonjs/lib/request_call_function.js +52 -0
- package/dist/commonjs/lib/restore.d.ts +1 -0
- package/dist/commonjs/lib/restore.js +16 -0
- package/dist/commonjs/lib/start-cluster.d.ts +2 -0
- package/dist/commonjs/lib/start-cluster.js +23 -0
- package/dist/commonjs/lib/supertest.d.ts +11 -0
- package/dist/commonjs/lib/supertest.js +48 -0
- package/dist/commonjs/lib/tmp/empty.d.ts +1 -0
- package/dist/commonjs/lib/tmp/empty.js +3 -0
- package/dist/commonjs/lib/types.d.ts +60 -0
- package/dist/commonjs/lib/types.js +3 -0
- package/dist/commonjs/lib/utils.d.ts +9 -0
- package/dist/commonjs/lib/utils.js +80 -0
- package/dist/commonjs/package.json +3 -0
- package/dist/commonjs/register.d.ts +8 -0
- package/dist/commonjs/register.js +80 -0
- package/dist/esm/app/extend/agent.d.ts +33 -0
- package/dist/esm/app/extend/agent.js +46 -0
- package/dist/esm/app/extend/application.d.ts +175 -0
- package/dist/esm/app/extend/application.js +442 -0
- package/dist/esm/app/middleware/cluster_app_mock.d.ts +3 -0
- package/dist/esm/app/middleware/cluster_app_mock.js +98 -0
- package/dist/esm/app.d.ts +6 -0
- package/dist/esm/app.js +17 -0
- package/dist/esm/bootstrap.d.ts +4 -0
- package/dist/esm/bootstrap.js +16 -0
- package/dist/esm/index.d.ts +76 -0
- package/dist/esm/index.js +90 -0
- package/dist/esm/index.test-d.d.ts +1 -0
- package/dist/esm/index.test-d.js +42 -0
- package/dist/esm/lib/agent_handler.d.ts +3 -0
- package/dist/esm/lib/agent_handler.js +24 -0
- package/dist/esm/lib/app.d.ts +28 -0
- package/dist/esm/lib/app.js +295 -0
- package/dist/esm/lib/app_handler.d.ts +5 -0
- package/dist/esm/lib/app_handler.js +61 -0
- package/dist/esm/lib/cluster.d.ts +114 -0
- package/dist/esm/lib/cluster.js +328 -0
- package/dist/esm/lib/context.d.ts +1 -0
- package/dist/esm/lib/context.js +13 -0
- package/dist/esm/lib/format_options.d.ts +5 -0
- package/dist/esm/lib/format_options.js +94 -0
- package/dist/esm/lib/inject_context.d.ts +6 -0
- package/dist/esm/lib/inject_context.js +126 -0
- package/dist/esm/lib/mock_agent.d.ts +5 -0
- package/dist/esm/lib/mock_agent.js +45 -0
- package/dist/esm/lib/mock_custom_loader.d.ts +1 -0
- package/dist/esm/lib/mock_custom_loader.js +34 -0
- package/dist/esm/lib/mock_http_server.d.ts +2 -0
- package/dist/esm/lib/mock_http_server.js +18 -0
- package/dist/esm/lib/mock_httpclient.d.ts +35 -0
- package/dist/esm/lib/mock_httpclient.js +144 -0
- package/dist/esm/lib/parallel/agent.d.ts +20 -0
- package/dist/esm/lib/parallel/agent.js +117 -0
- package/dist/esm/lib/parallel/app.d.ts +20 -0
- package/dist/esm/lib/parallel/app.js +110 -0
- package/dist/esm/lib/parallel/util.d.ts +3 -0
- package/dist/esm/lib/parallel/util.js +73 -0
- package/dist/esm/lib/prerequire.d.ts +1 -0
- package/dist/esm/lib/prerequire.js +25 -0
- package/dist/esm/lib/request_call_function.d.ts +1 -0
- package/dist/esm/lib/request_call_function.js +47 -0
- package/dist/esm/lib/restore.d.ts +1 -0
- package/dist/esm/lib/restore.js +13 -0
- package/dist/esm/lib/start-cluster.d.ts +2 -0
- package/dist/esm/lib/start-cluster.js +18 -0
- package/dist/esm/lib/supertest.d.ts +11 -0
- package/dist/esm/lib/supertest.js +40 -0
- package/dist/esm/lib/tmp/empty.d.ts +1 -0
- package/dist/esm/lib/tmp/empty.js +2 -0
- package/dist/esm/lib/types.d.ts +60 -0
- package/dist/esm/lib/types.js +2 -0
- package/dist/esm/lib/utils.d.ts +9 -0
- package/dist/esm/lib/utils.js +69 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/register.d.ts +8 -0
- package/dist/esm/register.js +75 -0
- package/dist/package.json +4 -0
- package/package.json +131 -0
- package/src/app/extend/agent.ts +56 -0
- package/src/app/extend/application.ts +512 -0
- package/src/app/middleware/cluster_app_mock.ts +101 -0
- package/src/app.ts +18 -0
- package/src/bootstrap.ts +25 -0
- package/src/index.d.ts +193 -0
- package/src/index.test-d.ts +47 -0
- package/src/index.ts +110 -0
- package/src/lib/agent_handler.ts +28 -0
- package/src/lib/app.ts +313 -0
- package/src/lib/app_handler.ts +69 -0
- package/src/lib/cluster.ts +363 -0
- package/src/lib/context.ts +14 -0
- package/src/lib/format_options.ts +103 -0
- package/src/lib/inject_context.ts +134 -0
- package/src/lib/mock_agent.ts +57 -0
- package/src/lib/mock_custom_loader.ts +36 -0
- package/src/lib/mock_http_server.ts +19 -0
- package/src/lib/mock_httpclient.ts +181 -0
- package/src/lib/parallel/agent.ts +128 -0
- package/src/lib/parallel/app.ts +123 -0
- package/src/lib/parallel/util.ts +66 -0
- package/src/lib/prerequire.ts +25 -0
- package/src/lib/request_call_function.ts +49 -0
- package/src/lib/restore.ts +14 -0
- package/src/lib/start-cluster.ts +23 -0
- package/src/lib/supertest.ts +45 -0
- package/src/lib/tmp/.gitkeep +0 -0
- package/src/lib/tmp/empty.ts +0 -0
- package/src/lib/types.ts +72 -0
- package/src/lib/utils.ts +82 -0
- package/src/register.ts +80 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { debuglog } from 'node:util';
|
|
2
|
+
const debug = debuglog('@eggjs/mock/lib/mock_custom_loader');
|
|
3
|
+
export function setCustomLoader(app) {
|
|
4
|
+
const customLoader = app.config.customLoader;
|
|
5
|
+
if (!customLoader)
|
|
6
|
+
return;
|
|
7
|
+
for (const field of Object.keys(customLoader)) {
|
|
8
|
+
const loaderConfig = Object.assign({}, customLoader[field]);
|
|
9
|
+
loaderConfig.field = field;
|
|
10
|
+
addMethod(loaderConfig);
|
|
11
|
+
}
|
|
12
|
+
function addMethod(loaderConfig) {
|
|
13
|
+
const field = loaderConfig.field;
|
|
14
|
+
const appMethodName = 'mock' + field.replace(/^[a-z]/i, s => s.toUpperCase());
|
|
15
|
+
if (app[appMethodName]) {
|
|
16
|
+
app.coreLogger.warn('Can\'t override app.%s', appMethodName);
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
debug('[addMethod] %s => %j', appMethodName, loaderConfig);
|
|
20
|
+
app[appMethodName] = function (service, methodName, fn) {
|
|
21
|
+
if (typeof service === 'string') {
|
|
22
|
+
const arr = service.split('.');
|
|
23
|
+
service = loaderConfig.inject === 'ctx' ? this[field + 'Classes'] : this[field];
|
|
24
|
+
for (const key of arr) {
|
|
25
|
+
service = service[key];
|
|
26
|
+
}
|
|
27
|
+
service = service.prototype || service;
|
|
28
|
+
}
|
|
29
|
+
this._mockFn(service, methodName, fn);
|
|
30
|
+
return this;
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja19jdXN0b21fbG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9tb2NrX2N1c3RvbV9sb2FkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVyQyxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsb0NBQW9DLENBQUMsQ0FBQztBQUU3RCxNQUFNLFVBQVUsZUFBZSxDQUFDLEdBQVE7SUFDdEMsTUFBTSxZQUFZLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUM7SUFDN0MsSUFBSSxDQUFDLFlBQVk7UUFBRSxPQUFPO0lBRTFCLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1FBQzlDLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzVELFlBQVksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQzNCLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQsU0FBUyxTQUFTLENBQUMsWUFBaUI7UUFDbEMsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLEtBQWUsQ0FBQztRQUMzQyxNQUFNLGFBQWEsR0FBRyxNQUFNLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUM5RSxJQUFJLEdBQUcsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQzdELE9BQU87UUFDVCxDQUFDO1FBQ0QsS0FBSyxDQUFDLHNCQUFzQixFQUFFLGFBQWEsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUMzRCxHQUFHLENBQUMsYUFBYSxDQUFDLEdBQUcsVUFBUyxPQUFZLEVBQUUsVUFBa0IsRUFBRSxFQUFPO1lBQ3JFLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ2hDLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQy9CLE9BQU8sR0FBRyxZQUFZLENBQUMsTUFBTSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNoRixLQUFLLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO29CQUN0QixPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN6QixDQUFDO2dCQUNELE9BQU8sR0FBRyxPQUFPLENBQUMsU0FBUyxJQUFJLE9BQU8sQ0FBQztZQUN6QyxDQUFDO1lBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3RDLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDO0lBQ0osQ0FBQztBQUNILENBQUMifQ==
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import http from 'node:http';
|
|
2
|
+
const SERVER = Symbol('http_server');
|
|
3
|
+
export function createServer(app) {
|
|
4
|
+
let server = app[SERVER] || app.callback();
|
|
5
|
+
if (typeof server === 'function') {
|
|
6
|
+
server = http.createServer(server);
|
|
7
|
+
// cache server, avoid create many times
|
|
8
|
+
app[SERVER] = server;
|
|
9
|
+
if (!app.server) {
|
|
10
|
+
app.server = server;
|
|
11
|
+
}
|
|
12
|
+
// emit server event just like egg-cluster does
|
|
13
|
+
// https://github.com/eggjs/egg-cluster/blob/master/lib/app_worker.js#L52
|
|
14
|
+
app.emit('server', server);
|
|
15
|
+
}
|
|
16
|
+
return server;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja19odHRwX3NlcnZlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvbW9ja19odHRwX3NlcnZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLElBQWdCLE1BQU0sV0FBVyxDQUFDO0FBRXpDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUVyQyxNQUFNLFVBQVUsWUFBWSxDQUFDLEdBQVE7SUFDbkMsSUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQyxJQUFJLE9BQU8sTUFBTSxLQUFLLFVBQVUsRUFBRSxDQUFDO1FBQ2pDLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25DLHdDQUF3QztRQUN4QyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEIsR0FBRyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDdEIsQ0FBQztRQUNELCtDQUErQztRQUMvQyx5RUFBeUU7UUFDekUsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMifQ==
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { Dispatcher, Headers, BodyInit } from 'urllib';
|
|
2
|
+
export interface MockResultOptions {
|
|
3
|
+
data: string | Buffer | Record<string, any>;
|
|
4
|
+
/**
|
|
5
|
+
* http status
|
|
6
|
+
*/
|
|
7
|
+
status?: number;
|
|
8
|
+
/**
|
|
9
|
+
* response header
|
|
10
|
+
*/
|
|
11
|
+
headers?: Record<string, string>;
|
|
12
|
+
/**
|
|
13
|
+
* delay the associated reply by a set amount in ms
|
|
14
|
+
*/
|
|
15
|
+
delay?: number;
|
|
16
|
+
/**
|
|
17
|
+
* any matching request will always reply with the defined response indefinitely
|
|
18
|
+
*/
|
|
19
|
+
persist?: boolean;
|
|
20
|
+
/**
|
|
21
|
+
* any matching request will reply with the defined response a fixed amount of times
|
|
22
|
+
*/
|
|
23
|
+
repeats?: number;
|
|
24
|
+
}
|
|
25
|
+
export interface MockResponseCallbackOptions {
|
|
26
|
+
path: string;
|
|
27
|
+
method: string;
|
|
28
|
+
headers?: Headers | Record<string, string>;
|
|
29
|
+
origin?: string;
|
|
30
|
+
body?: BodyInit | Dispatcher.DispatchOptions['body'] | null;
|
|
31
|
+
maxRedirections?: number;
|
|
32
|
+
}
|
|
33
|
+
export type MockResultFunction = (url: string, options: MockResponseCallbackOptions) => MockResultOptions | string;
|
|
34
|
+
export declare function createMockHttpClient(app: any): (mockUrl: string | RegExp, mockMethod: string | string[] | MockResultOptions | MockResultFunction, mockResult?: MockResultOptions | MockResultFunction | string) => void;
|
|
35
|
+
export type MockHttpClientMethod = ReturnType<typeof createMockHttpClient>;
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { mm } from 'mm';
|
|
2
|
+
import { extend } from 'extend2';
|
|
3
|
+
import { getMockAgent } from './mock_agent.js';
|
|
4
|
+
function normalizeResult(result) {
|
|
5
|
+
if (typeof result === 'string') {
|
|
6
|
+
result = { data: result };
|
|
7
|
+
}
|
|
8
|
+
if (!result.status) {
|
|
9
|
+
result.status = 200;
|
|
10
|
+
}
|
|
11
|
+
result.data = result.data || '';
|
|
12
|
+
if (Buffer.isBuffer(result.data)) {
|
|
13
|
+
// do nothing
|
|
14
|
+
}
|
|
15
|
+
else if (typeof result.data === 'object') {
|
|
16
|
+
// json
|
|
17
|
+
result.data = Buffer.from(JSON.stringify(result.data));
|
|
18
|
+
}
|
|
19
|
+
else if (typeof result.data === 'string') {
|
|
20
|
+
// string
|
|
21
|
+
result.data = Buffer.from(result.data);
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
throw new Error('`mockResult.data` must be buffer, string or json');
|
|
25
|
+
}
|
|
26
|
+
result.headers = result.headers ?? {};
|
|
27
|
+
return result;
|
|
28
|
+
}
|
|
29
|
+
const MOCK_CONFIGS = Symbol('MOCK_CONFIGS');
|
|
30
|
+
const MOCK_CONFIG_INDEX = Symbol('MOCK_CONFIG_INDEX');
|
|
31
|
+
export function createMockHttpClient(app) {
|
|
32
|
+
/**
|
|
33
|
+
* mock httpclient
|
|
34
|
+
* @function mockHttpclient
|
|
35
|
+
* @param {String} mockUrl - url
|
|
36
|
+
* @param {String|Array} mockMethod - http method, default is '*'
|
|
37
|
+
* @param {Object|Function} mockResult - you data
|
|
38
|
+
* - data - buffer / string / json
|
|
39
|
+
* - status - http status
|
|
40
|
+
* - headers - response header
|
|
41
|
+
* - delay - delay the associated reply by a set amount in ms.
|
|
42
|
+
* - persist - any matching request will always reply with the defined response indefinitely, default is true
|
|
43
|
+
* - repeats - number, any matching request will reply with the defined response a fixed amount of times
|
|
44
|
+
*/
|
|
45
|
+
return function mockHttpClient(mockUrl, mockMethod, mockResult) {
|
|
46
|
+
let mockMethods = mockMethod;
|
|
47
|
+
if (!mockResult) {
|
|
48
|
+
// app.mockHttpclient(mockUrl, mockResult)
|
|
49
|
+
mockResult = mockMethod;
|
|
50
|
+
mockMethods = ['*'];
|
|
51
|
+
}
|
|
52
|
+
if (!Array.isArray(mockMethods)) {
|
|
53
|
+
mockMethods = [mockMethods];
|
|
54
|
+
}
|
|
55
|
+
mockMethods = mockMethods.map(method => (method || 'GET').toUpperCase());
|
|
56
|
+
// use MockAgent on undici
|
|
57
|
+
let mockConfigs = app[MOCK_CONFIGS];
|
|
58
|
+
if (!mockConfigs) {
|
|
59
|
+
mockConfigs = [];
|
|
60
|
+
mm(app, MOCK_CONFIGS, mockConfigs);
|
|
61
|
+
}
|
|
62
|
+
let mockConfigIndex = -1;
|
|
63
|
+
let origin = mockUrl;
|
|
64
|
+
let originMethod;
|
|
65
|
+
const pathname = mockUrl;
|
|
66
|
+
let pathMethod;
|
|
67
|
+
if (typeof mockUrl === 'string') {
|
|
68
|
+
const urlObject = new URL(mockUrl);
|
|
69
|
+
origin = urlObject.origin;
|
|
70
|
+
const originalPathname = urlObject.pathname;
|
|
71
|
+
pathMethod = path => {
|
|
72
|
+
if (path === originalPathname)
|
|
73
|
+
return true;
|
|
74
|
+
// should match /foo?a=1 including query
|
|
75
|
+
if (path.includes('?'))
|
|
76
|
+
return path.startsWith(originalPathname);
|
|
77
|
+
return false;
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
else if (mockUrl instanceof RegExp) {
|
|
81
|
+
let requestOrigin = '';
|
|
82
|
+
originMethod = value => {
|
|
83
|
+
requestOrigin = value;
|
|
84
|
+
return true;
|
|
85
|
+
};
|
|
86
|
+
pathMethod = path => {
|
|
87
|
+
for (const config of mockConfigs) {
|
|
88
|
+
if (config.mockUrl.test(`${requestOrigin}${path}`)) {
|
|
89
|
+
mm(app, MOCK_CONFIG_INDEX, config.mockConfigIndex);
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return false;
|
|
94
|
+
};
|
|
95
|
+
mockConfigIndex = mockConfigs.length;
|
|
96
|
+
mockConfigs.push({ mockUrl, mockResult, mockConfigIndex });
|
|
97
|
+
}
|
|
98
|
+
const mockPool = originMethod
|
|
99
|
+
? getMockAgent(app).get(originMethod)
|
|
100
|
+
: getMockAgent(app).get(originMethod ?? origin);
|
|
101
|
+
// persist default is true
|
|
102
|
+
let persist = true;
|
|
103
|
+
if (typeof mockResult === 'object' && typeof mockResult.persist === 'boolean') {
|
|
104
|
+
persist = mockResult.persist;
|
|
105
|
+
}
|
|
106
|
+
mockMethods.forEach(function (method) {
|
|
107
|
+
const mockScope = mockPool.intercept({
|
|
108
|
+
path: pathMethod ?? pathname,
|
|
109
|
+
method: method === '*' ? () => true : method,
|
|
110
|
+
}).reply(options => {
|
|
111
|
+
// not support mockResult as an async function
|
|
112
|
+
const requestUrl = `${options.origin}${options.path}`;
|
|
113
|
+
let mockRequestResult;
|
|
114
|
+
if (mockConfigIndex >= 0) {
|
|
115
|
+
mockResult = mockConfigs[app[MOCK_CONFIG_INDEX]].mockResult;
|
|
116
|
+
mockRequestResult = typeof mockResult === 'function' ? mockResult(requestUrl, options) : mockResult;
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
mockRequestResult = typeof mockResult === 'function' ? mockResult(requestUrl, options) : mockResult;
|
|
120
|
+
}
|
|
121
|
+
const result = extend(true, {}, normalizeResult(mockRequestResult));
|
|
122
|
+
return {
|
|
123
|
+
statusCode: result.status,
|
|
124
|
+
data: result.data,
|
|
125
|
+
responseOptions: {
|
|
126
|
+
headers: result.headers,
|
|
127
|
+
},
|
|
128
|
+
};
|
|
129
|
+
});
|
|
130
|
+
if (typeof mockResult === 'object') {
|
|
131
|
+
if (mockResult.delay && mockResult.delay > 0) {
|
|
132
|
+
mockScope.delay(mockResult.delay);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
if (persist) {
|
|
136
|
+
mockScope.persist();
|
|
137
|
+
}
|
|
138
|
+
else if (typeof mockResult === 'object' && mockResult.repeats && mockResult.repeats > 0) {
|
|
139
|
+
mockScope.times(mockResult.repeats);
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja19odHRwY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9tb2NrX2h0dHBjbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLElBQUksQ0FBQztBQUN4QixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRWpDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQXNDL0MsU0FBUyxlQUFlLENBQUMsTUFBa0M7SUFDekQsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUMvQixNQUFNLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDbkIsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7SUFDdEIsQ0FBQztJQUVELE1BQU0sQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7SUFDaEMsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2pDLGFBQWE7SUFDZixDQUFDO1NBQU0sSUFBSSxPQUFPLE1BQU0sQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDM0MsT0FBTztRQUNQLE1BQU0sQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3pELENBQUM7U0FBTSxJQUFJLE9BQU8sTUFBTSxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUMzQyxTQUFTO1FBQ1QsTUFBTSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FB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
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Base } from 'sdk-base';
|
|
2
|
+
import type { EggCore } from '@eggjs/core';
|
|
3
|
+
import { MockOptions, MockApplicationOptions } from '../types.js';
|
|
4
|
+
import { APP_INIT } from './util.js';
|
|
5
|
+
export declare class MockAgent extends Base {
|
|
6
|
+
#private;
|
|
7
|
+
options: MockApplicationOptions;
|
|
8
|
+
baseDir: string;
|
|
9
|
+
[APP_INIT]: boolean;
|
|
10
|
+
_instance: EggCore;
|
|
11
|
+
constructor(options: MockApplicationOptions);
|
|
12
|
+
_init(): Promise<void>;
|
|
13
|
+
on(...args: any[]): this;
|
|
14
|
+
once(...args: any[]): this;
|
|
15
|
+
/**
|
|
16
|
+
* close agent
|
|
17
|
+
*/
|
|
18
|
+
_close(): Promise<void>;
|
|
19
|
+
}
|
|
20
|
+
export declare function createAgent(options: MockOptions): MockAgent;
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { debuglog } from 'node:util';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { Base } from 'sdk-base';
|
|
4
|
+
import { detectPort } from 'detect-port';
|
|
5
|
+
import { importModule } from '@eggjs/utils';
|
|
6
|
+
import { context } from '../context.js';
|
|
7
|
+
import { formatOptions } from '../format_options.js';
|
|
8
|
+
import { sleep, rimraf } from '../utils.js';
|
|
9
|
+
import { setCustomLoader } from '../mock_custom_loader.js';
|
|
10
|
+
import { APP_INIT } from './util.js';
|
|
11
|
+
const debug = debuglog('@eggjs/mock/lib/parallel/agent');
|
|
12
|
+
export class MockAgent extends Base {
|
|
13
|
+
baseDir;
|
|
14
|
+
[APP_INIT] = false;
|
|
15
|
+
#initOnListeners = new Set();
|
|
16
|
+
#initOnceListeners = new Set();
|
|
17
|
+
_instance;
|
|
18
|
+
constructor(options) {
|
|
19
|
+
super({ initMethod: '_init' });
|
|
20
|
+
this.options = options;
|
|
21
|
+
this.baseDir = this.options.baseDir;
|
|
22
|
+
}
|
|
23
|
+
async _init() {
|
|
24
|
+
if (this.options.beforeInit) {
|
|
25
|
+
await this.options.beforeInit(this);
|
|
26
|
+
delete this.options.beforeInit;
|
|
27
|
+
}
|
|
28
|
+
if (this.options.clean !== false) {
|
|
29
|
+
const logDir = path.join(this.options.baseDir, 'logs');
|
|
30
|
+
try {
|
|
31
|
+
await rimraf(logDir);
|
|
32
|
+
}
|
|
33
|
+
catch (err) {
|
|
34
|
+
console.error(`remove log dir ${logDir} failed: ${err.stack}`);
|
|
35
|
+
}
|
|
36
|
+
const runDir = path.join(this.options.baseDir, 'run');
|
|
37
|
+
try {
|
|
38
|
+
await rimraf(runDir);
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
console.error(`remove run dir ${runDir} failed: ${err.stack}`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
this.options.clusterPort = await detectPort();
|
|
45
|
+
process.env.CLUSTER_PORT = String(this.options.clusterPort);
|
|
46
|
+
debug('get clusterPort %s', this.options.clusterPort);
|
|
47
|
+
const { Agent } = await importModule(this.options.framework);
|
|
48
|
+
const agent = this._instance = new Agent({ ...this.options });
|
|
49
|
+
// egg-mock plugin need to override egg context
|
|
50
|
+
Object.assign(agent.context, context);
|
|
51
|
+
setCustomLoader(agent);
|
|
52
|
+
debug('agent instantiate');
|
|
53
|
+
this[APP_INIT] = true;
|
|
54
|
+
debug('this[APP_INIT] = true');
|
|
55
|
+
this.#bindEvents();
|
|
56
|
+
await agent.ready();
|
|
57
|
+
const msg = {
|
|
58
|
+
action: 'egg-ready',
|
|
59
|
+
data: this.options,
|
|
60
|
+
};
|
|
61
|
+
agent.messenger.onMessage(msg);
|
|
62
|
+
debug('agent ready');
|
|
63
|
+
}
|
|
64
|
+
#bindEvents() {
|
|
65
|
+
debug('bind cache events to agent');
|
|
66
|
+
for (const args of this.#initOnListeners) {
|
|
67
|
+
debug('on(%s), use cache and pass to agent', args);
|
|
68
|
+
this._instance.on(args[0], args[1]);
|
|
69
|
+
this.removeListener(args[0], args[1]);
|
|
70
|
+
}
|
|
71
|
+
for (const args of this.#initOnceListeners) {
|
|
72
|
+
debug('once(%s), use cache and pass to agent', args);
|
|
73
|
+
this._instance.once(args[0], args[1]);
|
|
74
|
+
this.removeListener(args[0], args[1]);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
on(...args) {
|
|
78
|
+
if (this[APP_INIT]) {
|
|
79
|
+
debug('on(%s), pass to agent', args);
|
|
80
|
+
this._instance.on(args[0], args[1]);
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
debug('on(%s), cache it because agent has not init', args);
|
|
84
|
+
this.#initOnListeners.add(args);
|
|
85
|
+
super.on(args[0], args[1]);
|
|
86
|
+
}
|
|
87
|
+
return this;
|
|
88
|
+
}
|
|
89
|
+
once(...args) {
|
|
90
|
+
if (this[APP_INIT]) {
|
|
91
|
+
debug('once(%s), pass to agent', args);
|
|
92
|
+
this._instance.once(args[0], args[1]);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
debug('once(%s), cache it because agent has not init', args);
|
|
96
|
+
this.#initOnceListeners.add(args);
|
|
97
|
+
super.on(args[0], args[1]);
|
|
98
|
+
}
|
|
99
|
+
return this;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* close agent
|
|
103
|
+
*/
|
|
104
|
+
async _close() {
|
|
105
|
+
if (this._instance) {
|
|
106
|
+
await this._instance.close();
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
// when agent init throws an exception, must wait for agent quit gracefully
|
|
110
|
+
await sleep(200);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
export function createAgent(options) {
|
|
115
|
+
return new MockAgent(formatOptions(options));
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3BhcmFsbGVsL2FnZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDckMsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQzdCLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDaEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRTVDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXJELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXJDLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO0FBRXpELE1BQU0sT0FBTyxTQUFVLFNBQVEsSUFBSTtJQUVqQyxPQUFPLENBQVM7SUFDaEIsQ0FBQyxRQUFRLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDbkIsZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLEVBQVMsQ0FBQztJQUNwQyxrQkFBa0IsR0FBRyxJQUFJLEdBQUcsRUFBUyxDQUFDO0lBQ3RDLFNBQVMsQ0FBVTtJQUVuQixZQUFZLE9BQStCO1FBQ3pDLEtBQUssQ0FBQyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9B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
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Base } from 'sdk-base';
|
|
2
|
+
import type { EggCore } from '@eggjs/core';
|
|
3
|
+
import { MockOptions, MockApplicationOptions } from '../types.js';
|
|
4
|
+
import { APP_INIT } from './util.js';
|
|
5
|
+
export declare class MockParallelApplication extends Base {
|
|
6
|
+
#private;
|
|
7
|
+
options: MockApplicationOptions;
|
|
8
|
+
baseDir: string;
|
|
9
|
+
[APP_INIT]: boolean;
|
|
10
|
+
_instance: EggCore;
|
|
11
|
+
constructor(options: MockApplicationOptions);
|
|
12
|
+
_init(): Promise<void>;
|
|
13
|
+
on(...args: any[]): this;
|
|
14
|
+
once(...args: any[]): this;
|
|
15
|
+
/**
|
|
16
|
+
* close app
|
|
17
|
+
*/
|
|
18
|
+
_close(): Promise<void>;
|
|
19
|
+
}
|
|
20
|
+
export declare function createApp(initOptions: MockOptions): any;
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { debuglog } from 'node:util';
|
|
2
|
+
import { Base } from 'sdk-base';
|
|
3
|
+
import { importModule } from '@eggjs/utils';
|
|
4
|
+
import { context } from '../context.js';
|
|
5
|
+
import { formatOptions } from '../format_options.js';
|
|
6
|
+
import { sleep } from '../utils.js';
|
|
7
|
+
import { setCustomLoader } from '../mock_custom_loader.js';
|
|
8
|
+
import { createServer } from '../mock_http_server.js';
|
|
9
|
+
import { proxyApp, APP_INIT } from './util.js';
|
|
10
|
+
const debug = debuglog('@eggjs/mock/lib/parallel/app');
|
|
11
|
+
export class MockParallelApplication extends Base {
|
|
12
|
+
baseDir;
|
|
13
|
+
[APP_INIT] = false;
|
|
14
|
+
#initOnListeners = new Set();
|
|
15
|
+
#initOnceListeners = new Set();
|
|
16
|
+
_instance;
|
|
17
|
+
constructor(options) {
|
|
18
|
+
super({ initMethod: '_init' });
|
|
19
|
+
this.options = options;
|
|
20
|
+
this.baseDir = options.baseDir;
|
|
21
|
+
}
|
|
22
|
+
async _init() {
|
|
23
|
+
if (this.options.beforeInit) {
|
|
24
|
+
await this.options.beforeInit(this);
|
|
25
|
+
delete this.options.beforeInit;
|
|
26
|
+
}
|
|
27
|
+
if (!this.options.clusterPort) {
|
|
28
|
+
this.options.clusterPort = parseInt(process.env.CLUSTER_PORT);
|
|
29
|
+
}
|
|
30
|
+
if (!this.options.clusterPort) {
|
|
31
|
+
throw new Error('cannot get env.CLUSTER_PORT, parallel run fail');
|
|
32
|
+
}
|
|
33
|
+
debug('get clusterPort %s', this.options.clusterPort);
|
|
34
|
+
const { Application } = await importModule(this.options.framework);
|
|
35
|
+
const app = this._instance = new Application({ ...this.options });
|
|
36
|
+
// egg-mock plugin need to override egg context
|
|
37
|
+
Object.assign(app.context, context);
|
|
38
|
+
setCustomLoader(app);
|
|
39
|
+
debug('app instantiate');
|
|
40
|
+
this[APP_INIT] = true;
|
|
41
|
+
debug('this[APP_INIT] = true');
|
|
42
|
+
this.#bindEvents();
|
|
43
|
+
debug('http server instantiate');
|
|
44
|
+
createServer(app);
|
|
45
|
+
await app.ready();
|
|
46
|
+
const msg = {
|
|
47
|
+
action: 'egg-ready',
|
|
48
|
+
data: this.options,
|
|
49
|
+
};
|
|
50
|
+
app.messenger.onMessage(msg);
|
|
51
|
+
debug('app ready');
|
|
52
|
+
}
|
|
53
|
+
#bindEvents() {
|
|
54
|
+
for (const args of this.#initOnListeners) {
|
|
55
|
+
debug('on(%s), use cache and pass to app', args);
|
|
56
|
+
this._instance.on(args[0], args[1]);
|
|
57
|
+
this.removeListener(args[0], args[1]);
|
|
58
|
+
}
|
|
59
|
+
for (const args of this.#initOnceListeners) {
|
|
60
|
+
debug('once(%s), use cache and pass to app', args);
|
|
61
|
+
this._instance.once(args[0], args[1]);
|
|
62
|
+
this.removeListener(args[0], args[1]);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
on(...args) {
|
|
66
|
+
if (this[APP_INIT]) {
|
|
67
|
+
debug('on(%s), pass to app', args);
|
|
68
|
+
this._instance.on(args[0], args[1]);
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
debug('on(%s), cache it because app has not init', args);
|
|
72
|
+
if (this.#initOnListeners) {
|
|
73
|
+
this.#initOnListeners.add(args);
|
|
74
|
+
}
|
|
75
|
+
super.on(args[0], args[1]);
|
|
76
|
+
}
|
|
77
|
+
return this;
|
|
78
|
+
}
|
|
79
|
+
once(...args) {
|
|
80
|
+
if (this[APP_INIT]) {
|
|
81
|
+
debug('once(%s), pass to app', args);
|
|
82
|
+
this._instance.once(args[0], args[1]);
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
debug('once(%s), cache it because app has not init', args);
|
|
86
|
+
if (this.#initOnceListeners) {
|
|
87
|
+
this.#initOnceListeners.add(args);
|
|
88
|
+
}
|
|
89
|
+
super.on(args[0], args[1]);
|
|
90
|
+
}
|
|
91
|
+
return this;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* close app
|
|
95
|
+
*/
|
|
96
|
+
async _close() {
|
|
97
|
+
if (this._instance) {
|
|
98
|
+
await this._instance.close();
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
// when app init throws an exception, must wait for app quit gracefully
|
|
102
|
+
await sleep(200);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
export function createApp(initOptions) {
|
|
107
|
+
const app = new MockParallelApplication(formatOptions(initOptions));
|
|
108
|
+
return proxyApp(app);
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9wYXJhbGxlbC9hcHAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNyQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFNUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFckQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNwQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRS9DLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO0FBRXZELE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxJQUFJO0lBRS9DLE9BQU8sQ0FBUztJQUNoQixDQUFDLFFBQVEsQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUNuQixnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsRUFBUyxDQUFDO0lBQ3BDLGtCQUFrQixHQUFHLElBQUksR0FBRyxFQUFTLENBQUM7SUFDdEMsU0FBUyxDQUFVO0lBRW5CLFlBQVksT0FBK0I7UUFDekMsS0FBSyxDQUFDLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxLQUFLLENB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
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { debuglog } from 'node:util';
|
|
2
|
+
import { getProperty } from '../utils.js';
|
|
3
|
+
const debug = debuglog('@eggjs/mock/lib/parallel/util');
|
|
4
|
+
export const MOCK_APP_METHOD = [
|
|
5
|
+
'ready',
|
|
6
|
+
'isClosed',
|
|
7
|
+
'closed',
|
|
8
|
+
'close',
|
|
9
|
+
'on',
|
|
10
|
+
'once',
|
|
11
|
+
];
|
|
12
|
+
export const APP_INIT = Symbol('appInit');
|
|
13
|
+
export function proxyApp(app) {
|
|
14
|
+
const proxyApp = new Proxy(app, {
|
|
15
|
+
get(target, prop) {
|
|
16
|
+
// don't delegate properties on MockAgent
|
|
17
|
+
if (MOCK_APP_METHOD.includes(prop)) {
|
|
18
|
+
return getProperty(target, prop);
|
|
19
|
+
}
|
|
20
|
+
if (!target[APP_INIT])
|
|
21
|
+
throw new Error(`can't get ${prop} before ready`);
|
|
22
|
+
// it's asynchronous when agent and app are loading,
|
|
23
|
+
// so should get the properties after loader ready
|
|
24
|
+
debug('proxy handler.get %s', prop);
|
|
25
|
+
return target._instance[prop];
|
|
26
|
+
},
|
|
27
|
+
set(target, prop, value) {
|
|
28
|
+
if (MOCK_APP_METHOD.includes(prop))
|
|
29
|
+
return true;
|
|
30
|
+
if (!target[APP_INIT])
|
|
31
|
+
throw new Error(`can't set ${prop} before ready`);
|
|
32
|
+
debug('proxy handler.set %s', prop);
|
|
33
|
+
target._instance[prop] = value;
|
|
34
|
+
return true;
|
|
35
|
+
},
|
|
36
|
+
defineProperty(target, prop, descriptor) {
|
|
37
|
+
// can't define properties on MockAgent
|
|
38
|
+
if (MOCK_APP_METHOD.includes(prop))
|
|
39
|
+
return true;
|
|
40
|
+
if (!target[APP_INIT])
|
|
41
|
+
throw new Error(`can't defineProperty ${prop} before ready`);
|
|
42
|
+
debug('proxy handler.defineProperty %s', prop);
|
|
43
|
+
Object.defineProperty(target._instance, prop, descriptor);
|
|
44
|
+
return true;
|
|
45
|
+
},
|
|
46
|
+
deleteProperty(target, prop) {
|
|
47
|
+
// can't delete properties on MockAgent
|
|
48
|
+
if (MOCK_APP_METHOD.includes(prop))
|
|
49
|
+
return true;
|
|
50
|
+
if (!target[APP_INIT])
|
|
51
|
+
throw new Error(`can't delete ${prop} before ready`);
|
|
52
|
+
debug('proxy handler.deleteProperty %s', prop);
|
|
53
|
+
delete target._instance[prop];
|
|
54
|
+
return true;
|
|
55
|
+
},
|
|
56
|
+
getOwnPropertyDescriptor(target, prop) {
|
|
57
|
+
if (MOCK_APP_METHOD.includes(prop))
|
|
58
|
+
return Object.getOwnPropertyDescriptor(target, prop);
|
|
59
|
+
if (!target[APP_INIT])
|
|
60
|
+
throw new Error(`can't getOwnPropertyDescriptor ${prop} before ready`);
|
|
61
|
+
debug('proxy handler.getOwnPropertyDescriptor %s', prop);
|
|
62
|
+
return Object.getOwnPropertyDescriptor(target._instance, prop);
|
|
63
|
+
},
|
|
64
|
+
getPrototypeOf(target) {
|
|
65
|
+
if (!target[APP_INIT])
|
|
66
|
+
throw new Error('can\'t getPrototypeOf before ready');
|
|
67
|
+
debug('proxy handler.getPrototypeOf %s');
|
|
68
|
+
return Object.getPrototypeOf(target._instance);
|
|
69
|
+
},
|
|
70
|
+
});
|
|
71
|
+
return proxyApp;
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvcGFyYWxsZWwvdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFMUMsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLCtCQUErQixDQUFDLENBQUM7QUFFeEQsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHO0lBQzdCLE9BQU87SUFDUCxVQUFVO0lBQ1YsUUFBUTtJQUNSLE9BQU87SUFDUCxJQUFJO0lBQ0osTUFBTTtDQUNQLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBRTFDLE1BQU0sVUFBVSxRQUFRLENBQUMsR0FBUTtJQUMvQixNQUFNLFFBQVEsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLEVBQUU7UUFDOUIsR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFZO1lBQ3RCLHlDQUF5QztZQUN6QyxJQUFJLGVBQWUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDbkMsT0FBTyxXQUFXLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ25DLENBQUM7WUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztnQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGFBQWEsSUFBSSxlQUFlLENBQUMsQ0FBQztZQUN6RSxvREFBb0Q7WUFDcEQsa0RBQWtEO1lBQ2xELEtBQUssQ0FBQyxzQkFBc0IsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNwQyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsQ0FBQztRQUNELEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBWSxFQUFFLEtBQUs7WUFDN0IsSUFBSSxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztnQkFBRSxPQUFPLElBQUksQ0FBQztZQUNoRCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztnQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGFBQWEsSUFBSSxlQUFlLENBQUMsQ0FBQztZQUN6RSxLQUFLLENBQUMsc0JBQXNCLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDcEMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDL0IsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsY0FBYyxDQUFDLE1BQU0sRUFBRSxJQUFZLEVBQUUsVUFBVTtZQUM3Qyx1Q0FBdUM7WUFDdkMsSUFBSSxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztnQkFBRSxPQUFPLElBQUksQ0FBQztZQUNoRCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztnQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHdCQUF3QixJQUFJLGVBQWUsQ0FBQyxDQUFDO1lBQ3BGLEtBQUssQ0FBQyxpQ0FBaUMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUMvQyxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQzFELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELGNBQWMsQ0FBQyxNQUFNLEVBQUUsSUFBWTtZQUNqQyx1Q0FBdUM7WUFDdkMsSUFBSSxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztnQkFBRSxPQUFPLElBQUksQ0FBQztZQUNoRCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztnQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGdCQUFnQixJQUFJLGVBQWUsQ0FBQyxDQUFDO1lBQzVFLEtBQUssQ0FBQyxpQ0FBaUMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUMvQyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDOUIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0Qsd0JBQXdCLENBQUMsTUFBTSxFQUFFLElBQVk7WUFDM0MsSUFBSSxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztnQkFBRSxPQUFPLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDekYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7Z0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQ0FBa0MsSUFBSSxlQUFlLENBQUMsQ0FBQztZQUM5RixLQUFLLENBQUMsMkNBQTJDLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDekQsT0FBTyxNQUFNLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNqRSxDQUFDO1FBQ0QsY0FBYyxDQUFDLE1BQU07WUFDbkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7Z0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO1lBQzdFLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO1lBQ3pDLE9BQU8sTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDakQsQ0FBQztLQUNGLENBQUMsQ0FBQztJQUNILE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUMifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// const debug = require('util').debuglog('egg-mock/prerequire');
|
|
2
|
+
// const path = require('path');
|
|
3
|
+
// const { existsSync } = require('fs');
|
|
4
|
+
// const globby = require('globby');
|
|
5
|
+
export {};
|
|
6
|
+
// const cwd = process.cwd();
|
|
7
|
+
// const dirs = [];
|
|
8
|
+
// if (existsSync(path.join(cwd, 'app'))) {
|
|
9
|
+
// dirs.push('app/**/*.js');
|
|
10
|
+
// }
|
|
11
|
+
// // avoid Error: ENOENT: no such file or directory, scandir
|
|
12
|
+
// if (existsSync(path.join(cwd, 'config'))) {
|
|
13
|
+
// dirs.push('config/**/*.js');
|
|
14
|
+
// }
|
|
15
|
+
// const files = globby.sync(dirs, { cwd });
|
|
16
|
+
// for (const file of files) {
|
|
17
|
+
// const filepath = path.join(cwd, file);
|
|
18
|
+
// try {
|
|
19
|
+
// debug('%s prerequire %s', process.pid, filepath);
|
|
20
|
+
// require(filepath);
|
|
21
|
+
// } catch (err) {
|
|
22
|
+
// debug('prerequire error %s', err.message);
|
|
23
|
+
// }
|
|
24
|
+
// }
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlcmVxdWlyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvcHJlcmVxdWlyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpRUFBaUU7QUFDakUsZ0NBQWdDO0FBQ2hDLHdDQUF3QztBQUN4QyxvQ0FBb0M7O0FBRXBDLDZCQUE2QjtBQUM3QixtQkFBbUI7QUFDbkIsMkNBQTJDO0FBQzNDLDhCQUE4QjtBQUM5QixJQUFJO0FBQ0osNkRBQTZEO0FBQzdELDhDQUE4QztBQUM5QyxpQ0FBaUM7QUFDakMsSUFBSTtBQUNKLDRDQUE0QztBQUU1Qyw4QkFBOEI7QUFDOUIsMkNBQTJDO0FBQzNDLFVBQVU7QUFDVix3REFBd0Q7QUFDeEQseUJBQXlCO0FBQ3pCLG9CQUFvQjtBQUNwQixpREFBaUQ7QUFDakQsTUFBTTtBQUNOLElBQUkifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|