@eggjs/mock 7.0.0-beta.34 → 7.0.0-beta.36

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 (63) hide show
  1. package/dist/_virtual/rolldown_runtime.js +7 -0
  2. package/dist/app/extend/agent.d.ts +38 -34
  3. package/dist/app/extend/agent.js +48 -46
  4. package/dist/app/extend/application.d.ts +171 -167
  5. package/dist/app/extend/application.js +382 -442
  6. package/dist/app/middleware/cluster_app_mock.d.ts +5 -2
  7. package/dist/app/middleware/cluster_app_mock.js +95 -100
  8. package/dist/app.d.ts +9 -5
  9. package/dist/app.js +17 -18
  10. package/dist/bootstrap.d.ts +9 -5
  11. package/dist/bootstrap.js +11 -12
  12. package/dist/index.d.ts +20 -17
  13. package/dist/index.js +39 -78
  14. package/dist/inject_mocha.d.ts +1 -1
  15. package/dist/inject_mocha.js +27 -28
  16. package/dist/lib/agent_handler.d.ts +7 -3
  17. package/dist/lib/agent_handler.js +22 -20
  18. package/dist/lib/app.d.ts +7 -3
  19. package/dist/lib/app.js +246 -287
  20. package/dist/lib/app_handler.d.ts +9 -5
  21. package/dist/lib/app_handler.js +48 -61
  22. package/dist/lib/cluster.d.ts +122 -118
  23. package/dist/lib/cluster.js +278 -335
  24. package/dist/lib/context.d.ts +4 -1
  25. package/dist/lib/context.js +10 -11
  26. package/dist/lib/format_options.d.ts +9 -4
  27. package/dist/lib/format_options.js +60 -88
  28. package/dist/lib/inject_context.d.ts +8 -5
  29. package/dist/lib/inject_context.js +103 -123
  30. package/dist/lib/mock_agent.d.ts +8 -4
  31. package/dist/lib/mock_agent.js +42 -42
  32. package/dist/lib/mock_custom_loader.d.ts +4 -1
  33. package/dist/lib/mock_custom_loader.js +34 -33
  34. package/dist/lib/mock_http_server.d.ts +6 -2
  35. package/dist/lib/mock_http_server.js +16 -17
  36. package/dist/lib/mock_httpclient.d.ts +38 -34
  37. package/dist/lib/mock_httpclient.js +106 -142
  38. package/dist/lib/parallel/agent.d.ts +22 -18
  39. package/dist/lib/parallel/agent.js +106 -112
  40. package/dist/lib/parallel/app.d.ts +23 -19
  41. package/dist/lib/parallel/app.js +93 -106
  42. package/dist/lib/parallel/util.d.ts +5 -2
  43. package/dist/lib/parallel/util.js +56 -63
  44. package/dist/lib/prerequire.d.ts +1 -1
  45. package/dist/lib/prerequire.js +1 -25
  46. package/dist/lib/request_call_function.d.ts +1 -1
  47. package/dist/lib/request_call_function.js +34 -47
  48. package/dist/lib/restore.d.ts +4 -1
  49. package/dist/lib/restore.js +14 -11
  50. package/dist/lib/start-cluster.d.ts +1 -2
  51. package/dist/lib/start-cluster.js +15 -14
  52. package/dist/lib/supertest.d.ts +14 -9
  53. package/dist/lib/supertest.js +32 -36
  54. package/dist/lib/tmp/empty.d.ts +1 -1
  55. package/dist/lib/tmp/empty.js +1 -2
  56. package/dist/lib/types.d.ts +71 -67
  57. package/dist/lib/types.js +1 -2
  58. package/dist/lib/utils.d.ts +11 -8
  59. package/dist/lib/utils.js +34 -63
  60. package/dist/register.d.ts +11 -7
  61. package/dist/register.js +36 -40
  62. package/dist/typings/index.d.ts +1 -0
  63. package/package.json +36 -39
@@ -1,34 +1,35 @@
1
- import { debuglog } from 'node:util';
2
- const debug = debuglog('egg/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
- }
1
+ import { debuglog } from "node:util";
2
+
3
+ //#region src/lib/mock_custom_loader.ts
4
+ const debug = debuglog("egg/mock/lib/mock_custom_loader");
5
+ function setCustomLoader(app) {
6
+ const customLoader = app.config.customLoader;
7
+ if (!customLoader) return;
8
+ for (const field of Object.keys(customLoader)) {
9
+ const loaderConfig = Object.assign({}, customLoader[field]);
10
+ loaderConfig.field = field;
11
+ addMethod(loaderConfig);
12
+ }
13
+ function addMethod(loaderConfig) {
14
+ const field = loaderConfig.field;
15
+ const appMethodName = "mock" + field.replace(/^[a-z]/i, (s) => s.toUpperCase());
16
+ if (app[appMethodName]) {
17
+ app.coreLogger.warn("Can't override app.%s", appMethodName);
18
+ return;
19
+ }
20
+ debug("[addMethod] %s => %j", appMethodName, loaderConfig);
21
+ app[appMethodName] = function(service, methodName, fn) {
22
+ if (typeof service === "string") {
23
+ const arr = service.split(".");
24
+ service = loaderConfig.inject === "ctx" ? this[field + "Classes"] : this[field];
25
+ for (const key of arr) service = service[key];
26
+ service = service.prototype || service;
27
+ }
28
+ this._mockFn(service, methodName, fn);
29
+ return this;
30
+ };
31
+ }
33
32
  }
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja19jdXN0b21fbG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9tb2NrX2N1c3RvbV9sb2FkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVyQyxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsaUNBQWlDLENBQUMsQ0FBQztBQUUxRCxNQUFNLFVBQVUsZUFBZSxDQUFDLEdBQVE7SUFDdEMsTUFBTSxZQUFZLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUM7SUFDN0MsSUFBSSxDQUFDLFlBQVk7UUFBRSxPQUFPO0lBRTFCLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1FBQzlDLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzVELFlBQVksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQzNCLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQsU0FBUyxTQUFTLENBQUMsWUFBaUI7UUFDbEMsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLEtBQWUsQ0FBQztRQUMzQyxNQUFNLGFBQWEsR0FBRyxNQUFNLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ2hGLElBQUksR0FBRyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7WUFDdkIsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsYUFBYSxDQUFDLENBQUM7WUFDNUQsT0FBTztRQUNULENBQUM7UUFDRCxLQUFLLENBQUMsc0JBQXNCLEVBQUUsYUFBYSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzNELEdBQUcsQ0FBQyxhQUFhLENBQUMsR0FBRyxVQUFVLE9BQVksRUFBRSxVQUFrQixFQUFFLEVBQU87WUFDdEUsSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDaEMsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDL0IsT0FBTyxHQUFHLFlBQVksQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2hGLEtBQUssTUFBTSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7b0JBQ3RCLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3pCLENBQUM7Z0JBQ0QsT0FBTyxHQUFHLE9BQU8sQ0FBQyxTQUFTLElBQUksT0FBTyxDQUFDO1lBQ3pDLENBQUM7WUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDdEMsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUM7SUFDSixDQUFDO0FBQ0gsQ0FBQyJ9
33
+
34
+ //#endregion
35
+ export { setCustomLoader };
@@ -1,2 +1,6 @@
1
- import { Server } from 'node:http';
2
- export declare function createServer(app: any): Server;
1
+ import { Server } from "node:http";
2
+
3
+ //#region src/lib/mock_http_server.d.ts
4
+ declare function createServer(app: any): Server;
5
+ //#endregion
6
+ export { createServer };
@@ -1,18 +1,17 @@
1
- import http, { Server } 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;
1
+ import http, { Server } from "node:http";
2
+
3
+ //#region src/lib/mock_http_server.ts
4
+ const SERVER = Symbol("http_server");
5
+ function createServer(app) {
6
+ let server = app[SERVER] || app.callback();
7
+ if (typeof server === "function") {
8
+ server = http.createServer(server);
9
+ app[SERVER] = server;
10
+ if (!app.server) app.server = server;
11
+ app.emit("server", server);
12
+ }
13
+ return server;
17
14
  }
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja19odHRwX3NlcnZlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvbW9ja19odHRwX3NlcnZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUV6QyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7QUFFckMsTUFBTSxVQUFVLFlBQVksQ0FBQyxHQUFRO0lBQ25DLElBQUksTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0MsSUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLEVBQUUsQ0FBQztRQUNqQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNuQyx3Q0FBd0M7UUFDeEMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hCLEdBQUcsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3RCLENBQUM7UUFDRCwrQ0FBK0M7UUFDL0MseUVBQXlFO1FBQ3pFLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDIn0=
15
+
16
+ //#endregion
17
+ export { createServer };
@@ -1,36 +1,40 @@
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;
1
+ import { BodyInit, Dispatcher, Headers } from "urllib";
2
+
3
+ //#region src/lib/mock_httpclient.d.ts
4
+ interface MockResultOptions {
5
+ data: string | Buffer | Record<string, any>;
6
+ /**
7
+ * http status
8
+ */
9
+ status?: number;
10
+ /**
11
+ * response header
12
+ */
13
+ headers?: Record<string, string>;
14
+ /**
15
+ * delay the associated reply by a set amount in ms
16
+ */
17
+ delay?: number;
18
+ /**
19
+ * any matching request will always reply with the defined response indefinitely
20
+ */
21
+ persist?: boolean;
22
+ /**
23
+ * any matching request will reply with the defined response a fixed amount of times
24
+ */
25
+ repeats?: number;
24
26
  }
25
- export type ResultObject = MockResultOptions;
26
- export interface MockResponseCallbackOptions {
27
- path: string;
28
- method: string;
29
- headers?: Headers | Record<string, string>;
30
- origin?: string;
31
- body?: BodyInit | Dispatcher.DispatchOptions['body'] | null;
32
- maxRedirections?: number;
27
+ type ResultObject = MockResultOptions;
28
+ interface MockResponseCallbackOptions {
29
+ path: string;
30
+ method: string;
31
+ headers?: Headers | Record<string, string>;
32
+ origin?: string;
33
+ body?: BodyInit | Dispatcher.DispatchOptions["body"] | null;
34
+ maxRedirections?: number;
33
35
  }
34
- export type MockResultFunction = (url: string, options: MockResponseCallbackOptions) => MockResultOptions | string;
35
- export type MockHttpClientMethod = (mockUrl: string | RegExp, mockMethod: string | string[] | MockResultOptions | MockResultFunction, mockResult?: MockResultOptions | MockResultFunction | string) => void;
36
- export declare function createMockHttpClient(app: any): MockHttpClientMethod;
36
+ type MockResultFunction = (url: string, options: MockResponseCallbackOptions) => MockResultOptions | string;
37
+ type MockHttpClientMethod = (mockUrl: string | RegExp, mockMethod: string | string[] | MockResultOptions | MockResultFunction, mockResult?: MockResultOptions | MockResultFunction | string) => void;
38
+ declare function createMockHttpClient(app: any): MockHttpClientMethod;
39
+ //#endregion
40
+ export { MockHttpClientMethod, MockResponseCallbackOptions, MockResultFunction, MockResultOptions, ResultObject, createMockHttpClient };
@@ -1,146 +1,110 @@
1
- import { mm } from 'mm';
2
- import { extend } from '@eggjs/extend2';
3
1
  import { getMockAgent } from "./mock_agent.js";
2
+ import { mm } from "mm";
3
+ import { extend } from "@eggjs/extend2";
4
+
5
+ //#region src/lib/mock_httpclient.ts
4
6
  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;
7
+ if (typeof result === "string") result = { data: result };
8
+ if (!result.status) result.status = 200;
9
+ result.data = result.data || "";
10
+ if (Buffer.isBuffer(result.data)) {} else if (typeof result.data === "object") result.data = Buffer.from(JSON.stringify(result.data));
11
+ else if (typeof result.data === "string") result.data = Buffer.from(result.data);
12
+ else throw new Error("`mockResult.data` must be buffer, string or json");
13
+ result.headers = result.headers ?? {};
14
+ return result;
28
15
  }
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
108
- .intercept({
109
- path: pathMethod ?? pathname,
110
- method: method === '*' ? () => true : method,
111
- })
112
- .reply((options) => {
113
- // not support mockResult as an async function
114
- const requestUrl = `${options.origin}${options.path}`;
115
- let mockRequestResult;
116
- if (mockConfigIndex >= 0) {
117
- mockResult = mockConfigs[app[MOCK_CONFIG_INDEX]].mockResult;
118
- mockRequestResult = typeof mockResult === 'function' ? mockResult(requestUrl, options) : mockResult;
119
- }
120
- else {
121
- mockRequestResult = typeof mockResult === 'function' ? mockResult(requestUrl, options) : mockResult;
122
- }
123
- const result = extend(true, {}, normalizeResult(mockRequestResult));
124
- return {
125
- statusCode: result.status,
126
- data: result.data,
127
- responseOptions: {
128
- headers: result.headers,
129
- },
130
- };
131
- });
132
- if (typeof mockResult === 'object') {
133
- if (mockResult.delay && mockResult.delay > 0) {
134
- mockScope.delay(mockResult.delay);
135
- }
136
- }
137
- if (persist) {
138
- mockScope.persist();
139
- }
140
- else if (typeof mockResult === 'object' && mockResult.repeats && mockResult.repeats > 0) {
141
- mockScope.times(mockResult.repeats);
142
- }
143
- });
144
- };
16
+ const MOCK_CONFIGS = Symbol("MOCK_CONFIGS");
17
+ const MOCK_CONFIG_INDEX = Symbol("MOCK_CONFIG_INDEX");
18
+ function createMockHttpClient(app) {
19
+ /**
20
+ * mock httpclient
21
+ * @function mockHttpclient
22
+ * @param {String} mockUrl - url
23
+ * @param {String|Array} mockMethod - http method, default is '*'
24
+ * @param {Object|Function} mockResult - you data
25
+ * - data - buffer / string / json
26
+ * - status - http status
27
+ * - headers - response header
28
+ * - delay - delay the associated reply by a set amount in ms.
29
+ * - persist - any matching request will always reply with the defined response indefinitely, default is true
30
+ * - repeats - number, any matching request will reply with the defined response a fixed amount of times
31
+ */
32
+ return function mockHttpClient(mockUrl, mockMethod, mockResult) {
33
+ let mockMethods = mockMethod;
34
+ if (!mockResult) {
35
+ mockResult = mockMethod;
36
+ mockMethods = ["*"];
37
+ }
38
+ if (!Array.isArray(mockMethods)) mockMethods = [mockMethods];
39
+ mockMethods = mockMethods.map((method) => (method || "GET").toUpperCase());
40
+ let mockConfigs = app[MOCK_CONFIGS];
41
+ if (!mockConfigs) {
42
+ mockConfigs = [];
43
+ mm(app, MOCK_CONFIGS, mockConfigs);
44
+ }
45
+ let mockConfigIndex = -1;
46
+ let origin = mockUrl;
47
+ let originMethod;
48
+ const pathname = mockUrl;
49
+ let pathMethod;
50
+ if (typeof mockUrl === "string") {
51
+ const urlObject = new URL(mockUrl);
52
+ origin = urlObject.origin;
53
+ const originalPathname = urlObject.pathname;
54
+ pathMethod = (path) => {
55
+ if (path === originalPathname) return true;
56
+ if (path.includes("?")) return path.startsWith(originalPathname);
57
+ return false;
58
+ };
59
+ } else if (mockUrl instanceof RegExp) {
60
+ let requestOrigin = "";
61
+ originMethod = (value) => {
62
+ requestOrigin = value;
63
+ return true;
64
+ };
65
+ pathMethod = (path) => {
66
+ for (const config of mockConfigs) if (config.mockUrl.test(`${requestOrigin}${path}`)) {
67
+ mm(app, MOCK_CONFIG_INDEX, config.mockConfigIndex);
68
+ return true;
69
+ }
70
+ return false;
71
+ };
72
+ mockConfigIndex = mockConfigs.length;
73
+ mockConfigs.push({
74
+ mockUrl,
75
+ mockResult,
76
+ mockConfigIndex
77
+ });
78
+ }
79
+ const mockPool = originMethod ? getMockAgent(app).get(originMethod) : getMockAgent(app).get(originMethod ?? origin);
80
+ let persist = true;
81
+ if (typeof mockResult === "object" && typeof mockResult.persist === "boolean") persist = mockResult.persist;
82
+ mockMethods.forEach(function(method) {
83
+ const mockScope = mockPool.intercept({
84
+ path: pathMethod ?? pathname,
85
+ method: method === "*" ? () => true : method
86
+ }).reply((options) => {
87
+ const requestUrl = `${options.origin}${options.path}`;
88
+ let mockRequestResult;
89
+ if (mockConfigIndex >= 0) {
90
+ mockResult = mockConfigs[app[MOCK_CONFIG_INDEX]].mockResult;
91
+ mockRequestResult = typeof mockResult === "function" ? mockResult(requestUrl, options) : mockResult;
92
+ } else mockRequestResult = typeof mockResult === "function" ? mockResult(requestUrl, options) : mockResult;
93
+ const result = extend(true, {}, normalizeResult(mockRequestResult));
94
+ return {
95
+ statusCode: result.status,
96
+ data: result.data,
97
+ responseOptions: { headers: result.headers }
98
+ };
99
+ });
100
+ if (typeof mockResult === "object") {
101
+ if (mockResult.delay && mockResult.delay > 0) mockScope.delay(mockResult.delay);
102
+ }
103
+ if (persist) mockScope.persist();
104
+ else if (typeof mockResult === "object" && mockResult.repeats && mockResult.repeats > 0) mockScope.times(mockResult.repeats);
105
+ });
106
+ };
145
107
  }
146
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja19odHRwY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9tb2NrX2h0dHBjbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLElBQUksQ0FBQztBQUN4QixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHeEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBdUMvQyxTQUFTLGVBQWUsQ0FBQyxNQUFrQztJQUN6RCxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQy9CLE1BQU0sR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNuQixNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztJQUN0QixDQUFDO0lBRUQsTUFBTSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUNoQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDakMsYUFBYTtJQUNmLENBQUM7U0FBTSxJQUFJLE9BQU8sTUFBTSxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUMzQyxPQUFPO1FBQ1AsTUFBTSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDekQsQ0FBQztTQUFNLElBQUksT0FBTyxNQUFNLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzNDLFNBQVM7UUFDVCxNQUFNLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pDLENBQUM7U0FBTSxDQUFDO1FBQ04sTUFBTSxJQUFJLEtBQUssQ0FBQyxrREFBa0QsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFDRCxNQUFNLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO0lBQ3RDLE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDNUMsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztBQVF0RCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsR0FBUTtJQUMzQzs7Ozs7Ozs7Ozs7O09BWUc7SUFDSCxPQUFPLFNBQVMsY0FBYyxDQUM1QixPQUF3QixFQUN4QixVQUFzRSxFQUN0RSxVQUE0RDtRQUU1RCxJQUFJLFdBQVcsR0FBRyxVQUFzQixDQUFDO1FBQ3pDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNoQiwwQ0FBMEM7WUFDMUMsVUFBVSxHQUFHLFVBQStCLENBQUM7WUFDN0MsV0FBVyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEIsQ0FBQztRQUNELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDaEMsV0FBVyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDOUIsQ0FBQztRQUNELFdBQVcsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBRTNFLDBCQUEwQjtRQUMxQixJQUFJLFdBQVcsR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2pCLFdBQVcsR0FBRyxFQUFFLENBQUM7WUFDakIsRUFBRSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDckMsQ0FBQztRQUVELElBQUksZUFBZSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3pCLElBQUksTUFBTSxHQUFHLE9BQU8sQ0FBQztRQUNyQixJQUFJLFlBQXNELENBQUM7UUFDM0QsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDO1FBQ3pCLElBQUksVUFBcUMsQ0FBQztRQUMxQyxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ2hDLE1BQU0sU0FBUyxHQUFHLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ25DLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO1lBQzFCLE1BQU0sZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQztZQUM1QyxVQUFVLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDcEIsSUFBSSxJQUFJLEtBQUssZ0JBQWdCO29CQUFFLE9BQU8sSUFBSSxDQUFDO2dCQUMzQyx3Q0FBd0M7Z0JBQ3hDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7b0JBQUUsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLENBQUM7Z0JBQ2pFLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQyxDQUFDO1FBQ0osQ0FBQzthQUFNLElBQUksT0FBTyxZQUFZLE1BQU0sRUFBRSxDQUFDO1lBQ3JDLElBQUksYUFBYSxHQUFHLEVBQUUsQ0FBQztZQUN2QixZQUFZLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDdkIsYUFBYSxHQUFHLEtBQUssQ0FBQztnQkFDdEIsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDLENBQUM7WUFDRixVQUFVLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDcEIsS0FBSyxNQUFNLE1BQU0sSUFBSSxXQUFXLEVBQUUsQ0FBQztvQkFDakMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLGFBQWEsR0FBRyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7d0JBQ25ELEVBQUUsQ0FBQyxHQUFHLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO3dCQUNuRCxPQUFPLElBQUksQ0FBQztvQkFDZCxDQUFDO2dCQUNILENBQUM7Z0JBQ0QsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDLENBQUM7WUFDRixlQUFlLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQztZQUNyQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDO1FBQzdELENBQUM7UUFDRCxNQUFNLFFBQVEsR0FBRyxZQUFZO1lBQzNCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQztZQUNyQyxDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxZQUFZLElBQUssTUFBaUIsQ0FBQyxDQUFDO1FBQzlELDBCQUEwQjtRQUMxQixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDbkIsSUFBSSxPQUFPLFVBQVUsS0FBSyxRQUFRLElBQUksT0FBTyxVQUFVLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzlFLE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDO1FBQy9CLENBQUM7UUFDRCxXQUFXLENBQUMsT0FBTyxDQUFDLFVBQVUsTUFBTTtZQUNsQyxNQUFNLFNBQVMsR0FBRyxRQUFRO2lCQUN2QixTQUFTLENBQUM7Z0JBQ1QsSUFBSSxFQUFFLFVBQVUsSUFBSSxRQUFRO2dCQUM1QixNQUFNLEVBQUUsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNO2FBQzdDLENBQUM7aUJBQ0QsS0FBSyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQ2pCLDhDQUE4QztnQkFDOUMsTUFBTSxVQUFVLEdBQUcsR0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDdEQsSUFBSSxpQkFBaUIsQ0FBQztnQkFDdEIsSUFBSSxlQUFlLElBQUksQ0FBQyxFQUFFLENBQUM7b0JBQ3pCLFVBQVUsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7b0JBQzVELGlCQUFpQixHQUFHLE9BQU8sVUFBVSxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO2dCQUN0RyxDQUFDO3FCQUFNLENBQUM7b0JBQ04saUJBQWlCLEdBQUcsT0FBTyxVQUFVLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7Z0JBQ3RHLENBQUM7Z0JBQ0QsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsZUFBZSxDQUFDLGlCQUFrQixDQUFDLENBQUMsQ0FBQztnQkFDckUsT0FBTztvQkFDTCxVQUFVLEVBQUUsTUFBTSxDQUFDLE1BQU07b0JBQ3pCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtvQkFDakIsZUFBZSxFQUFFO3dCQUNmLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTztxQkFDeEI7aUJBQ0YsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1lBQ0wsSUFBSSxPQUFPLFVBQVUsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDbkMsSUFBSSxVQUFVLENBQUMsS0FBSyxJQUFJLFVBQVUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQzdDLFNBQVMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNwQyxDQUFDO1lBQ0gsQ0FBQztZQUNELElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQ1osU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3RCLENBQUM7aUJBQU0sSUFBSSxPQUFPLFVBQVUsS0FBSyxRQUFRLElBQUksVUFBVSxDQUFDLE9BQU8sSUFBSSxVQUFVLENBQUMsT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUMxRixTQUFTLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN0QyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUM7QUFDSixDQUFDIn0=
108
+
109
+ //#endregion
110
+ export { createMockHttpClient };
@@ -1,19 +1,23 @@
1
- import { Base } from 'sdk-base';
2
- import type { Agent as EggAgent } from 'egg';
3
- import type { MockOptions, MockApplicationOptions } from '../types.ts';
4
- export declare class MockAgent extends Base {
5
- #private;
6
- options: MockApplicationOptions;
7
- baseDir: string;
8
- __APP_INIT__: boolean;
9
- _instance: EggAgent;
10
- constructor(options: MockApplicationOptions);
11
- _init(): Promise<void>;
12
- on(...args: any[]): this;
13
- once(...args: any[]): this;
14
- /**
15
- * close agent
16
- */
17
- _close(): Promise<void>;
1
+ import { MockApplicationOptions, MockOptions } from "../types.js";
2
+ import { Agent } from "egg";
3
+ import { Base } from "sdk-base";
4
+
5
+ //#region src/lib/parallel/agent.d.ts
6
+ declare class MockAgent extends Base {
7
+ #private;
8
+ options: MockApplicationOptions;
9
+ baseDir: string;
10
+ __APP_INIT__: boolean;
11
+ _instance: Agent;
12
+ constructor(options: MockApplicationOptions);
13
+ _init(): Promise<void>;
14
+ on(...args: any[]): this;
15
+ once(...args: any[]): this;
16
+ /**
17
+ * close agent
18
+ */
19
+ _close(): Promise<void>;
18
20
  }
19
- export declare function createAgent(options: MockOptions): MockAgent;
21
+ declare function createAgent(options: MockOptions): MockAgent;
22
+ //#endregion
23
+ export { MockAgent, createAgent };