@eggjs/mock 6.0.7 → 6.1.0-beta.11

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 (214) hide show
  1. package/README.md +36 -57
  2. package/README.zh_CN.md +31 -51
  3. package/dist/_virtual/rolldown_runtime.js +7 -0
  4. package/dist/app/extend/agent.d.ts +39 -0
  5. package/dist/app/extend/agent.js +48 -0
  6. package/dist/app/extend/application.d.ts +175 -0
  7. package/dist/app/extend/application.js +385 -0
  8. package/dist/app/middleware/cluster_app_mock.d.ts +6 -0
  9. package/dist/app/middleware/cluster_app_mock.js +97 -0
  10. package/dist/app.d.ts +10 -0
  11. package/dist/app.js +17 -0
  12. package/dist/bootstrap.d.ts +9 -0
  13. package/dist/bootstrap.js +14 -0
  14. package/dist/index.d.ts +81 -0
  15. package/dist/index.js +47 -0
  16. package/dist/inject_mocha.d.ts +1 -0
  17. package/dist/inject_mocha.js +34 -0
  18. package/dist/lib/agent_handler.d.ts +7 -0
  19. package/dist/lib/agent_handler.js +26 -0
  20. package/dist/lib/app.d.ts +7 -0
  21. package/dist/lib/app.js +251 -0
  22. package/dist/lib/app_handler.d.ts +9 -0
  23. package/dist/lib/app_handler.js +56 -0
  24. package/dist/lib/cluster.d.ts +126 -0
  25. package/dist/lib/cluster.js +283 -0
  26. package/dist/lib/context.d.ts +4 -0
  27. package/dist/lib/context.js +10 -0
  28. package/dist/lib/format_options.d.ts +10 -0
  29. package/dist/lib/format_options.js +65 -0
  30. package/dist/lib/inject_context.d.ts +9 -0
  31. package/dist/lib/inject_context.js +106 -0
  32. package/dist/lib/mock_agent.d.ts +9 -0
  33. package/dist/lib/mock_agent.js +45 -0
  34. package/dist/lib/mock_custom_loader.d.ts +4 -0
  35. package/dist/lib/mock_custom_loader.js +35 -0
  36. package/dist/lib/mock_http_server.d.ts +6 -0
  37. package/dist/lib/mock_http_server.js +17 -0
  38. package/dist/lib/mock_httpclient.d.ts +40 -0
  39. package/dist/lib/mock_httpclient.js +110 -0
  40. package/dist/lib/parallel/agent.d.ts +24 -0
  41. package/dist/lib/parallel/agent.js +111 -0
  42. package/dist/lib/parallel/app.d.ts +24 -0
  43. package/dist/lib/parallel/app.js +99 -0
  44. package/dist/lib/parallel/util.d.ts +6 -0
  45. package/dist/lib/parallel/util.js +59 -0
  46. package/dist/lib/prerequire.d.ts +1 -0
  47. package/dist/lib/prerequire.js +1 -0
  48. package/dist/lib/request_call_function.d.ts +1 -0
  49. package/dist/lib/request_call_function.js +37 -0
  50. package/dist/lib/restore.d.ts +4 -0
  51. package/dist/lib/restore.js +16 -0
  52. package/dist/lib/start-cluster.d.ts +1 -0
  53. package/dist/lib/start-cluster.js +19 -0
  54. package/dist/lib/supertest.d.ts +16 -0
  55. package/dist/lib/supertest.js +39 -0
  56. package/dist/lib/tmp/empty.d.ts +1 -0
  57. package/dist/lib/tmp/empty.js +1 -0
  58. package/{src/lib/types.ts → dist/lib/types.d.ts} +12 -29
  59. package/dist/lib/types.js +1 -0
  60. package/dist/lib/utils.d.ts +12 -0
  61. package/dist/lib/utils.js +40 -0
  62. package/dist/register.d.ts +10 -0
  63. package/dist/register.js +40 -0
  64. package/dist/typings/index.d.ts +1 -0
  65. package/package.json +69 -98
  66. package/dist/commonjs/app/extend/agent.d.ts +0 -34
  67. package/dist/commonjs/app/extend/agent.js +0 -49
  68. package/dist/commonjs/app/extend/application.d.ts +0 -172
  69. package/dist/commonjs/app/extend/application.js +0 -450
  70. package/dist/commonjs/app/middleware/cluster_app_mock.d.ts +0 -3
  71. package/dist/commonjs/app/middleware/cluster_app_mock.js +0 -101
  72. package/dist/commonjs/app.d.ts +0 -6
  73. package/dist/commonjs/app.js +0 -20
  74. package/dist/commonjs/bootstrap.d.ts +0 -5
  75. package/dist/commonjs/bootstrap.js +0 -59
  76. package/dist/commonjs/index.d.ts +0 -77
  77. package/dist/commonjs/index.js +0 -114
  78. package/dist/commonjs/lib/agent_handler.d.ts +0 -3
  79. package/dist/commonjs/lib/agent_handler.js +0 -28
  80. package/dist/commonjs/lib/app.d.ts +0 -3
  81. package/dist/commonjs/lib/app.js +0 -301
  82. package/dist/commonjs/lib/app_handler.d.ts +0 -5
  83. package/dist/commonjs/lib/app_handler.js +0 -71
  84. package/dist/commonjs/lib/cluster.d.ts +0 -114
  85. package/dist/commonjs/lib/cluster.js +0 -337
  86. package/dist/commonjs/lib/context.d.ts +0 -1
  87. package/dist/commonjs/lib/context.js +0 -16
  88. package/dist/commonjs/lib/format_options.d.ts +0 -5
  89. package/dist/commonjs/lib/format_options.js +0 -100
  90. package/dist/commonjs/lib/inject_context.d.ts +0 -6
  91. package/dist/commonjs/lib/inject_context.js +0 -132
  92. package/dist/commonjs/lib/mock_agent.d.ts +0 -5
  93. package/dist/commonjs/lib/mock_agent.js +0 -49
  94. package/dist/commonjs/lib/mock_custom_loader.d.ts +0 -1
  95. package/dist/commonjs/lib/mock_custom_loader.js +0 -37
  96. package/dist/commonjs/lib/mock_http_server.d.ts +0 -2
  97. package/dist/commonjs/lib/mock_http_server.js +0 -24
  98. package/dist/commonjs/lib/mock_httpclient.d.ts +0 -36
  99. package/dist/commonjs/lib/mock_httpclient.js +0 -147
  100. package/dist/commonjs/lib/parallel/agent.d.ts +0 -20
  101. package/dist/commonjs/lib/parallel/agent.js +0 -125
  102. package/dist/commonjs/lib/parallel/app.d.ts +0 -20
  103. package/dist/commonjs/lib/parallel/app.js +0 -115
  104. package/dist/commonjs/lib/parallel/util.d.ts +0 -3
  105. package/dist/commonjs/lib/parallel/util.js +0 -77
  106. package/dist/commonjs/lib/prerequire.d.ts +0 -1
  107. package/dist/commonjs/lib/prerequire.js +0 -26
  108. package/dist/commonjs/lib/request_call_function.d.ts +0 -1
  109. package/dist/commonjs/lib/request_call_function.js +0 -52
  110. package/dist/commonjs/lib/restore.d.ts +0 -1
  111. package/dist/commonjs/lib/restore.js +0 -16
  112. package/dist/commonjs/lib/start-cluster.d.ts +0 -2
  113. package/dist/commonjs/lib/start-cluster.js +0 -23
  114. package/dist/commonjs/lib/supertest.d.ts +0 -11
  115. package/dist/commonjs/lib/supertest.js +0 -48
  116. package/dist/commonjs/lib/tmp/empty.d.ts +0 -1
  117. package/dist/commonjs/lib/tmp/empty.js +0 -3
  118. package/dist/commonjs/lib/types.d.ts +0 -68
  119. package/dist/commonjs/lib/types.js +0 -3
  120. package/dist/commonjs/lib/utils.d.ts +0 -9
  121. package/dist/commonjs/lib/utils.js +0 -80
  122. package/dist/commonjs/package.json +0 -3
  123. package/dist/commonjs/register.d.ts +0 -8
  124. package/dist/commonjs/register.js +0 -80
  125. package/dist/esm/app/extend/agent.d.ts +0 -34
  126. package/dist/esm/app/extend/agent.js +0 -46
  127. package/dist/esm/app/extend/application.d.ts +0 -172
  128. package/dist/esm/app/extend/application.js +0 -444
  129. package/dist/esm/app/middleware/cluster_app_mock.d.ts +0 -3
  130. package/dist/esm/app/middleware/cluster_app_mock.js +0 -99
  131. package/dist/esm/app.d.ts +0 -6
  132. package/dist/esm/app.js +0 -17
  133. package/dist/esm/bootstrap.d.ts +0 -5
  134. package/dist/esm/bootstrap.js +0 -15
  135. package/dist/esm/index.d.ts +0 -77
  136. package/dist/esm/index.js +0 -91
  137. package/dist/esm/lib/agent_handler.d.ts +0 -3
  138. package/dist/esm/lib/agent_handler.js +0 -24
  139. package/dist/esm/lib/app.d.ts +0 -3
  140. package/dist/esm/lib/app.js +0 -295
  141. package/dist/esm/lib/app_handler.d.ts +0 -5
  142. package/dist/esm/lib/app_handler.js +0 -65
  143. package/dist/esm/lib/cluster.d.ts +0 -114
  144. package/dist/esm/lib/cluster.js +0 -328
  145. package/dist/esm/lib/context.d.ts +0 -1
  146. package/dist/esm/lib/context.js +0 -13
  147. package/dist/esm/lib/format_options.d.ts +0 -5
  148. package/dist/esm/lib/format_options.js +0 -94
  149. package/dist/esm/lib/inject_context.d.ts +0 -6
  150. package/dist/esm/lib/inject_context.js +0 -126
  151. package/dist/esm/lib/mock_agent.d.ts +0 -5
  152. package/dist/esm/lib/mock_agent.js +0 -45
  153. package/dist/esm/lib/mock_custom_loader.d.ts +0 -1
  154. package/dist/esm/lib/mock_custom_loader.js +0 -34
  155. package/dist/esm/lib/mock_http_server.d.ts +0 -2
  156. package/dist/esm/lib/mock_http_server.js +0 -18
  157. package/dist/esm/lib/mock_httpclient.d.ts +0 -36
  158. package/dist/esm/lib/mock_httpclient.js +0 -144
  159. package/dist/esm/lib/parallel/agent.d.ts +0 -20
  160. package/dist/esm/lib/parallel/agent.js +0 -117
  161. package/dist/esm/lib/parallel/app.d.ts +0 -20
  162. package/dist/esm/lib/parallel/app.js +0 -110
  163. package/dist/esm/lib/parallel/util.d.ts +0 -3
  164. package/dist/esm/lib/parallel/util.js +0 -73
  165. package/dist/esm/lib/prerequire.d.ts +0 -1
  166. package/dist/esm/lib/prerequire.js +0 -25
  167. package/dist/esm/lib/request_call_function.d.ts +0 -1
  168. package/dist/esm/lib/request_call_function.js +0 -47
  169. package/dist/esm/lib/restore.d.ts +0 -1
  170. package/dist/esm/lib/restore.js +0 -13
  171. package/dist/esm/lib/start-cluster.d.ts +0 -2
  172. package/dist/esm/lib/start-cluster.js +0 -18
  173. package/dist/esm/lib/supertest.d.ts +0 -11
  174. package/dist/esm/lib/supertest.js +0 -40
  175. package/dist/esm/lib/tmp/empty.d.ts +0 -1
  176. package/dist/esm/lib/tmp/empty.js +0 -2
  177. package/dist/esm/lib/types.d.ts +0 -68
  178. package/dist/esm/lib/types.js +0 -2
  179. package/dist/esm/lib/utils.d.ts +0 -9
  180. package/dist/esm/lib/utils.js +0 -69
  181. package/dist/esm/package.json +0 -3
  182. package/dist/esm/register.d.ts +0 -8
  183. package/dist/esm/register.js +0 -75
  184. package/dist/package.json +0 -4
  185. package/src/app/extend/agent.ts +0 -57
  186. package/src/app/extend/application.ts +0 -512
  187. package/src/app/middleware/cluster_app_mock.ts +0 -102
  188. package/src/app.ts +0 -18
  189. package/src/bootstrap.ts +0 -25
  190. package/src/index.ts +0 -112
  191. package/src/lib/agent_handler.ts +0 -28
  192. package/src/lib/app.ts +0 -314
  193. package/src/lib/app_handler.ts +0 -77
  194. package/src/lib/cluster.ts +0 -363
  195. package/src/lib/context.ts +0 -14
  196. package/src/lib/format_options.ts +0 -103
  197. package/src/lib/inject_context.ts +0 -134
  198. package/src/lib/mock_agent.ts +0 -57
  199. package/src/lib/mock_custom_loader.ts +0 -36
  200. package/src/lib/mock_http_server.ts +0 -19
  201. package/src/lib/mock_httpclient.ts +0 -183
  202. package/src/lib/parallel/agent.ts +0 -128
  203. package/src/lib/parallel/app.ts +0 -123
  204. package/src/lib/parallel/util.ts +0 -66
  205. package/src/lib/prerequire.ts +0 -25
  206. package/src/lib/request_call_function.ts +0 -49
  207. package/src/lib/restore.ts +0 -14
  208. package/src/lib/start-cluster.ts +0 -23
  209. package/src/lib/supertest.ts +0 -45
  210. package/src/lib/tmp/.gitkeep +0 -0
  211. package/src/lib/tmp/empty.ts +0 -0
  212. package/src/lib/utils.ts +0 -82
  213. package/src/register.ts +0 -80
  214. package/src/typings/index.d.ts +0 -4
@@ -1,71 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.setupApp = setupApp;
4
- exports.setGetAppCallback = setGetAppCallback;
5
- exports.getApp = getApp;
6
- exports.getBootstrapApp = getBootstrapApp;
7
- const node_util_1 = require("node:util");
8
- const app_js_1 = require("./parallel/app.js");
9
- const agent_handler_js_1 = require("./agent_handler.js");
10
- const app_js_2 = require("./app.js");
11
- const restore_js_1 = require("./restore.js");
12
- const utils_js_1 = require("./utils.js");
13
- const debug = (0, node_util_1.debuglog)('@eggjs/mock/lib/app_handler');
14
- globalThis.__eggMockAppInstance = null;
15
- function setupApp() {
16
- let app = globalThis.__eggMockAppInstance;
17
- if (app) {
18
- debug('return exists app');
19
- return app;
20
- }
21
- const options = (0, utils_js_1.getEggOptions)();
22
- debug('env.ENABLE_MOCHA_PARALLEL: %s, process.env.AUTO_AGENT: %s', process.env.ENABLE_MOCHA_PARALLEL, process.env.AUTO_AGENT);
23
- if (process.env.ENABLE_MOCHA_PARALLEL && process.env.AUTO_AGENT) {
24
- // setup agent first
25
- app = (0, app_js_1.createApp)({
26
- ...options,
27
- beforeInit: async (parallelApp) => {
28
- const agent = await (0, agent_handler_js_1.setupAgent)();
29
- parallelApp.options.clusterPort = agent.options.clusterPort;
30
- debug('mockParallelApp beforeInit get clusterPort: %s', parallelApp.options.clusterPort);
31
- },
32
- });
33
- debug('mockParallelApp app: %s', !!app);
34
- }
35
- else {
36
- app = (0, app_js_2.createApp)(options);
37
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
38
- // @ts-ignore
39
- if (typeof beforeAll === 'function') {
40
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
41
- // @ts-ignore
42
- // jest
43
- beforeAll(() => app.ready());
44
- }
45
- if (typeof afterEach === 'function') {
46
- // mocha and jest
47
- afterEach(() => app.backgroundTasksFinished());
48
- afterEach(restore_js_1.restore);
49
- }
50
- }
51
- globalThis.__eggMockAppInstance = app;
52
- return app;
53
- }
54
- let getAppCallback;
55
- function setGetAppCallback(cb) {
56
- getAppCallback = cb;
57
- }
58
- async function getApp(suite, test) {
59
- if (getAppCallback) {
60
- return getAppCallback(suite, test);
61
- }
62
- const app = globalThis.__eggMockAppInstance;
63
- if (app) {
64
- await app.ready();
65
- }
66
- return app;
67
- }
68
- function getBootstrapApp() {
69
- return globalThis.__eggMockAppInstance;
70
- }
71
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwX2hhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2FwcF9oYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBZ0JBLDRCQXVDQztBQUlELDhDQUVDO0FBRUQsd0JBU0M7QUFFRCwwQ0FFQztBQTVFRCx5Q0FBcUM7QUFDckMsOENBQW1FO0FBQ25FLHlEQUFnRDtBQUNoRCxxQ0FBcUM7QUFDckMsNkNBQXVDO0FBQ3ZDLHlDQUEyQztBQUczQyxNQUFNLEtBQUssR0FBRyxJQUFBLG9CQUFRLEVBQUMsNkJBQTZCLENBQUMsQ0FBQztBQU10RCxVQUFVLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO0FBRXZDLFNBQWdCLFFBQVE7SUFDdEIsSUFBSSxHQUFHLEdBQUcsVUFBVSxDQUFDLG9CQUFxQixDQUFDO0lBQzNDLElBQUksR0FBRyxFQUFFLENBQUM7UUFDUixLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUMzQixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFBLHdCQUFhLEdBQUUsQ0FBQztJQUNoQyxLQUFLLENBQUMsMkRBQTJELEVBQy9ELE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM3RCxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNoRSxvQkFBb0I7UUFDcEIsR0FBRyxHQUFHLElBQUEsa0JBQWlCLEVBQUM7WUFDdEIsR0FBRyxPQUFPO1lBQ1YsVUFBVSxFQUFFLEtBQUssRUFBQyxXQUFXLEVBQUMsRUFBRTtnQkFDOUIsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFBLDZCQUFVLEdBQUUsQ0FBQztnQkFDakMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7Z0JBQzVELEtBQUssQ0FBQyxnREFBZ0QsRUFBRSxXQUFXLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzNGLENBQUM7U0FDRixDQUFDLENBQUM7UUFDSCxLQUFLLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFDLENBQUM7U0FBTSxDQUFDO1FBQ04sR0FBRyxHQUFHLElBQUEsa0JBQVMsRUFBQyxPQUFPLENBQW1DLENBQUM7UUFDM0QsNkRBQTZEO1FBQzdELGFBQWE7UUFDYixJQUFJLE9BQU8sU0FBUyxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQ3BDLDZEQUE2RDtZQUM3RCxhQUFhO1lBQ2IsT0FBTztZQUNQLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUMvQixDQUFDO1FBQ0QsSUFBSSxPQUFPLFNBQVMsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUNwQyxpQkFBaUI7WUFDakIsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLENBQUM7WUFDL0MsU0FBUyxDQUFDLG9CQUFPLENBQUMsQ0FBQztRQUNyQixDQUFDO0lBQ0gsQ0FBQztJQUNELFVBQVUsQ0FBQyxvQkFBb0IsR0FBRyxHQUFHLENBQUM7SUFDdEMsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsSUFBSSxjQUF1RCxDQUFDO0FBRTVELFNBQWdCLGlCQUFpQixDQUFDLEVBQTJDO0lBQzNFLGNBQWMsR0FBRyxFQUFFLENBQUM7QUFDdEIsQ0FBQztBQUVNLEtBQUssVUFBVSxNQUFNLENBQUMsS0FBZSxFQUFFLElBQWM7SUFDMUQsSUFBSSxjQUFjLEVBQUUsQ0FBQztRQUNuQixPQUFPLGNBQWMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUNELE1BQU0sR0FBRyxHQUFHLFVBQVUsQ0FBQyxvQkFBcUIsQ0FBQztJQUM3QyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ1IsTUFBTSxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELFNBQWdCLGVBQWU7SUFDN0IsT0FBTyxVQUFVLENBQUMsb0JBQXFCLENBQUM7QUFDMUMsQ0FBQyJ9
@@ -1,114 +0,0 @@
1
- import { Coffee } from 'coffee';
2
- import type { MockClusterOptions, MockClusterApplicationOptions } from './types.js';
3
- /**
4
- * A cluster version of egg.Application, you can test with supertest
5
- * @example
6
- * ```js
7
- * const mm = require('mm');
8
- * const request = require('supertest');
9
- *
10
- * describe('ClusterApplication', () => {
11
- * let app;
12
- * before(function (done) {
13
- * app = mm.cluster({ baseDir });
14
- * app.ready(done);
15
- * });
16
- *
17
- * after(function () {
18
- * app.close();
19
- * });
20
- *
21
- * it('should 200', function (done) {
22
- * request(app.callback())
23
- * .get('/')
24
- * .expect(200, done);
25
- * });
26
- * });
27
- */
28
- export declare class ClusterApplication extends Coffee {
29
- [key: string | symbol]: any;
30
- options: MockClusterApplicationOptions;
31
- port: number;
32
- baseDir: string;
33
- closed: boolean;
34
- /**
35
- * @class
36
- * @param {Object} options
37
- * - {String} baseDir - The directory of the application
38
- * - {Object} plugins - Custom you plugins
39
- * - {String} framework - The directory of the egg framework
40
- * - {Boolean} [cache=true] - Cache application based on baseDir
41
- * - {Boolean} [coverage=true] - Switch on process coverage, but it'll be slower
42
- * - {Boolean} [clean=true] - Remove $baseDir/logs
43
- * - {Object} [opt] - opt pass to coffee, such as { execArgv: ['--debug'] }
44
- * ```
45
- */
46
- constructor(options: MockClusterApplicationOptions);
47
- /**
48
- * the process that forked
49
- * @member {ChildProcess}
50
- */
51
- get process(): any;
52
- /**
53
- * Compatible API for supertest
54
- */
55
- callback(): this;
56
- /**
57
- * Compatible API for supertest
58
- * @member {String} url
59
- * @private
60
- */
61
- get url(): string;
62
- /**
63
- * Compatible API for supertest
64
- */
65
- address(): {
66
- port: number;
67
- };
68
- /**
69
- * Compatible API for supertest
70
- */
71
- listen(): this;
72
- /**
73
- * kill the process
74
- */
75
- close(): Promise<void>;
76
- get isClosed(): boolean;
77
- get router(): {
78
- pathFor(url: string): any;
79
- };
80
- /**
81
- * get app[property] value in app worker
82
- */
83
- getAppInstanceProperty(property: string): any;
84
- /**
85
- * collection logger message, then can be use on `expectLog()`
86
- * it's different from `app.expectLog()`, only support string params.
87
- *
88
- * @param {String} [logger] - logger instance name, default is `logger`
89
- * @function ClusterApplication#expectLog
90
- */
91
- mockLog(logger?: string): void;
92
- /**
93
- * expect str in the logger
94
- * it's different from `app.expectLog()`, only support string params.
95
- *
96
- * @param {String} str - test str
97
- * @param {String} [logger] - logger instance name, default is `logger`
98
- * @function ClusterApplication#expectLog
99
- */
100
- expectLog(str: string, logger?: string): void;
101
- /**
102
- * not expect str in the logger
103
- * it's different from `app.notExpectLog()`, only support string params.
104
- *
105
- * @param {String} str - test str
106
- * @param {String} [logger] - logger instance name, default is `logger`
107
- * @function ClusterApplication#notExpectLog
108
- */
109
- notExpectLog(str: string, logger?: string): void;
110
- httpRequest(): import("./supertest.js").EggTestRequest;
111
- _callFunctionOnAppWorker(method: string, args?: any[], property?: any, needResult?: boolean): any;
112
- }
113
- export declare function createCluster(initOptions?: MockClusterOptions): any;
114
- export declare function restore(): Promise<void>;
@@ -1,337 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.ClusterApplication = void 0;
7
- exports.createCluster = createCluster;
8
- exports.restore = restore;
9
- const node_util_1 = require("node:util");
10
- const node_path_1 = __importDefault(require("node:path"));
11
- const node_os_1 = __importDefault(require("node:os"));
12
- const node_child_process_1 = __importDefault(require("node:child_process"));
13
- const node_events_1 = require("node:events");
14
- const coffee_1 = require("coffee");
15
- const get_ready_1 = require("get-ready");
16
- const supertest_js_1 = require("./supertest.js");
17
- const utils_js_1 = require("./utils.js");
18
- const format_options_js_1 = require("./format_options.js");
19
- const debug = (0, node_util_1.debuglog)('@eggjs/mock/lib/cluster');
20
- const clusters = new Map();
21
- const serverBin = node_path_1.default.join((0, utils_js_1.getSourceDirname)(), 'lib/start-cluster.js');
22
- const requestCallFunctionFile = node_path_1.default.join((0, utils_js_1.getSourceDirname)(), 'lib/request_call_function.js');
23
- let masterPort = 17000;
24
- /**
25
- * A cluster version of egg.Application, you can test with supertest
26
- * @example
27
- * ```js
28
- * const mm = require('mm');
29
- * const request = require('supertest');
30
- *
31
- * describe('ClusterApplication', () => {
32
- * let app;
33
- * before(function (done) {
34
- * app = mm.cluster({ baseDir });
35
- * app.ready(done);
36
- * });
37
- *
38
- * after(function () {
39
- * app.close();
40
- * });
41
- *
42
- * it('should 200', function (done) {
43
- * request(app.callback())
44
- * .get('/')
45
- * .expect(200, done);
46
- * });
47
- * });
48
- */
49
- class ClusterApplication extends coffee_1.Coffee {
50
- options;
51
- port;
52
- baseDir;
53
- closed;
54
- /**
55
- * @class
56
- * @param {Object} options
57
- * - {String} baseDir - The directory of the application
58
- * - {Object} plugins - Custom you plugins
59
- * - {String} framework - The directory of the egg framework
60
- * - {Boolean} [cache=true] - Cache application based on baseDir
61
- * - {Boolean} [coverage=true] - Switch on process coverage, but it'll be slower
62
- * - {Boolean} [clean=true] - Remove $baseDir/logs
63
- * - {Object} [opt] - opt pass to coffee, such as { execArgv: ['--debug'] }
64
- * ```
65
- */
66
- constructor(options) {
67
- const opt = options.opt;
68
- delete options.opt;
69
- // incremental port
70
- options.port = options.port ?? ++masterPort;
71
- // Set 1 worker when test
72
- if (!options.workers) {
73
- options.workers = 1;
74
- }
75
- const args = [JSON.stringify(options)];
76
- debug('fork %s, args: %s, opt: %j', serverBin, args.join(' '), opt);
77
- super({
78
- method: 'fork',
79
- cmd: serverBin,
80
- args,
81
- opt,
82
- });
83
- get_ready_1.Ready.mixin(this);
84
- this.port = options.port;
85
- this.baseDir = options.baseDir;
86
- // print stdout and stderr when DEBUG, otherwise stderr.
87
- this.debug(process.env.DEBUG ? 0 : 2);
88
- // disable coverage
89
- if (options.coverage === false) {
90
- this.coverage(false);
91
- }
92
- process.nextTick(() => {
93
- this.proc.on('message', (msg) => {
94
- // 'egg-ready' and { action: 'egg-ready' }
95
- const action = msg && msg.action ? msg.action : msg;
96
- switch (action) {
97
- case 'egg-ready':
98
- this.emit('close', 0);
99
- break;
100
- case 'app-worker-died':
101
- case 'agent-worker-died':
102
- this.emit('close', 1);
103
- break;
104
- default:
105
- // ignore it
106
- break;
107
- }
108
- });
109
- });
110
- this.end(() => this.ready(true));
111
- }
112
- /**
113
- * the process that forked
114
- * @member {ChildProcess}
115
- */
116
- get process() {
117
- return this.proc;
118
- }
119
- /**
120
- * Compatible API for supertest
121
- */
122
- callback() {
123
- return this;
124
- }
125
- /**
126
- * Compatible API for supertest
127
- * @member {String} url
128
- * @private
129
- */
130
- get url() {
131
- return 'http://127.0.0.1:' + this.port;
132
- }
133
- /**
134
- * Compatible API for supertest
135
- */
136
- address() {
137
- return {
138
- port: this.port,
139
- };
140
- }
141
- /**
142
- * Compatible API for supertest
143
- */
144
- listen() {
145
- return this;
146
- }
147
- /**
148
- * kill the process
149
- */
150
- async close() {
151
- this.closed = true;
152
- const proc = this.proc;
153
- const baseDir = this.baseDir;
154
- if (proc.connected) {
155
- proc.kill('SIGTERM');
156
- await (0, node_events_1.once)(proc, 'exit');
157
- }
158
- clusters.delete(baseDir);
159
- debug('delete cluster cache %s, remain %s', baseDir, [...clusters.keys()]);
160
- if (node_os_1.default.platform() === 'win32') {
161
- await (0, utils_js_1.sleep)(1000);
162
- }
163
- }
164
- get isClosed() {
165
- return this.closed;
166
- }
167
- // mock app.router.pathFor(name) api
168
- get router() {
169
- const self = this;
170
- return {
171
- pathFor(url) {
172
- return self._callFunctionOnAppWorker('pathFor', [url], 'router', true);
173
- },
174
- };
175
- }
176
- /**
177
- * get app[property] value in app worker
178
- */
179
- getAppInstanceProperty(property) {
180
- return this._callFunctionOnAppWorker('__getter__', [], property, true);
181
- }
182
- /**
183
- * collection logger message, then can be use on `expectLog()`
184
- * it's different from `app.expectLog()`, only support string params.
185
- *
186
- * @param {String} [logger] - logger instance name, default is `logger`
187
- * @function ClusterApplication#expectLog
188
- */
189
- mockLog(logger) {
190
- logger = logger ?? 'logger';
191
- this._callFunctionOnAppWorker('mockLog', [logger], null, true);
192
- }
193
- /**
194
- * expect str in the logger
195
- * it's different from `app.expectLog()`, only support string params.
196
- *
197
- * @param {String} str - test str
198
- * @param {String} [logger] - logger instance name, default is `logger`
199
- * @function ClusterApplication#expectLog
200
- */
201
- expectLog(str, logger) {
202
- logger = logger ?? 'logger';
203
- this._callFunctionOnAppWorker('expectLog', [str, logger], null, true);
204
- }
205
- /**
206
- * not expect str in the logger
207
- * it's different from `app.notExpectLog()`, only support string params.
208
- *
209
- * @param {String} str - test str
210
- * @param {String} [logger] - logger instance name, default is `logger`
211
- * @function ClusterApplication#notExpectLog
212
- */
213
- notExpectLog(str, logger) {
214
- logger = logger ?? 'logger';
215
- this._callFunctionOnAppWorker('notExpectLog', [str, logger], null, true);
216
- }
217
- httpRequest() {
218
- return (0, supertest_js_1.request)(this);
219
- }
220
- _callFunctionOnAppWorker(method, args = [], property = undefined, needResult = false) {
221
- for (let i = 0; i < args.length; i++) {
222
- const arg = args[i];
223
- if (typeof arg === 'function') {
224
- args[i] = {
225
- __egg_mock_type: 'function',
226
- value: arg.toString(),
227
- };
228
- }
229
- else if (arg instanceof Error) {
230
- const errObject = {
231
- __egg_mock_type: 'error',
232
- name: arg.name,
233
- message: arg.message,
234
- stack: arg.stack,
235
- };
236
- for (const key in arg) {
237
- if (key !== 'name' && key !== 'message' && key !== 'stack') {
238
- errObject[key] = arg[key];
239
- }
240
- }
241
- args[i] = errObject;
242
- }
243
- }
244
- const data = {
245
- port: this.port,
246
- method,
247
- args,
248
- property,
249
- needResult,
250
- };
251
- const child = node_child_process_1.default.spawnSync(process.execPath, [
252
- requestCallFunctionFile,
253
- JSON.stringify(data),
254
- ], {
255
- stdio: 'pipe',
256
- });
257
- // if (child.stderr && child.stderr.length > 0) {
258
- // console.error(child.stderr.toString());
259
- // }
260
- let result;
261
- if (child.stdout && child.stdout.length > 0) {
262
- if (needResult) {
263
- result = JSON.parse(child.stdout.toString());
264
- }
265
- else {
266
- console.error(child.stdout.toString());
267
- }
268
- }
269
- if (child.status !== 0) {
270
- throw new Error(child.stderr.toString());
271
- }
272
- if (child.error) {
273
- throw child.error;
274
- }
275
- return result;
276
- }
277
- }
278
- exports.ClusterApplication = ClusterApplication;
279
- function createCluster(initOptions) {
280
- const options = (0, format_options_js_1.formatOptions)(initOptions);
281
- if (options.cache && clusters.has(options.baseDir)) {
282
- const clusterApp = clusters.get(options.baseDir);
283
- // return cache when it hasn't been killed
284
- if (!clusterApp.isClosed) {
285
- return clusterApp;
286
- }
287
- // delete the cache when it's closed
288
- clusters.delete(options.baseDir);
289
- }
290
- if (options.clean !== false) {
291
- const logDir = node_path_1.default.join(options.baseDir, 'logs');
292
- try {
293
- (0, utils_js_1.rimrafSync)(logDir);
294
- }
295
- catch (err) {
296
- console.error(`remove log dir ${logDir} failed: ${err.stack}`);
297
- }
298
- const runDir = node_path_1.default.join(options.baseDir, 'run');
299
- try {
300
- (0, utils_js_1.rimrafSync)(runDir);
301
- }
302
- catch (err) {
303
- console.error(`remove run dir ${runDir} failed: ${err.stack}`);
304
- }
305
- }
306
- let clusterApp = new ClusterApplication(options);
307
- clusterApp = new Proxy(clusterApp, {
308
- get(target, prop) {
309
- debug('proxy handler.get %s', prop);
310
- // proxy mockXXX function to app worker
311
- const method = prop;
312
- if (typeof method === 'string' && /^mock\w+$/.test(method) && target[method] === undefined) {
313
- return function mockProxy(...args) {
314
- return target._callFunctionOnAppWorker(method, args, null, true);
315
- };
316
- }
317
- return target[prop];
318
- },
319
- });
320
- clusters.set(options.baseDir, clusterApp);
321
- return clusterApp;
322
- }
323
- // export to let mm.restore() worked
324
- async function restore() {
325
- for (const clusterApp of clusters.values()) {
326
- // will proxy to app.mockRestore()
327
- await clusterApp.mockRestore();
328
- }
329
- }
330
- // ensure to close App process on test exit.
331
- process.on('exit', () => {
332
- for (const clusterApp of clusters.values()) {
333
- debug('on exit close clusterApp, port: %s', clusterApp.port);
334
- clusterApp.close();
335
- }
336
- });
337
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2x1c3Rlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvY2x1c3Rlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUE2U0Esc0NBNkNDO0FBR0QsMEJBS0M7QUFsV0QseUNBQXFDO0FBQ3JDLDBEQUE2QjtBQUM3QixzREFBeUI7QUFDekIsNEVBQThDO0FBQzlDLDZDQUFtQztBQUNuQyxtQ0FBZ0M7QUFDaEMseUNBQWtDO0FBQ2xDLGlEQUE2RDtBQUM3RCx5Q0FBaUU7QUFDakUsMkRBQW9EO0FBR3BELE1BQU0sS0FBSyxHQUFHLElBQUEsb0JBQVEsRUFBQyx5QkFBeUIsQ0FBQyxDQUFDO0FBRWxELE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7QUFDM0IsTUFBTSxTQUFTLEdBQUcsbUJBQUksQ0FBQyxJQUFJLENBQUMsSUFBQSwyQkFBZ0IsR0FBRSxFQUFFLHNCQUFzQixDQUFDLENBQUM7QUFDeEUsTUFBTSx1QkFBdUIsR0FBRyxtQkFBSSxDQUFDLElBQUksQ0FBQyxJQUFBLDJCQUFnQixHQUFFLEVBQUUsOEJBQThCLENBQUMsQ0FBQztBQUM5RixJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUM7QUFFdkI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdCRztBQUNILE1BQWEsa0JBQW1CLFNBQVEsZUFBTTtJQUU1QyxPQUFPLENBQWdDO0lBQ3ZDLElBQUksQ0FBUztJQUNiLE9BQU8sQ0FBUztJQUNoQixNQUFNLENBQVU7SUFFaEI7Ozs7Ozs7Ozs7O09BV0c7SUFDSCxZQUFZLE9BQXNDO1FBQ2hELE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUM7UUFDeEIsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDO1FBRW5CLG1CQUFtQjtRQUNuQixPQUFPLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLElBQUksRUFBRSxVQUFVLENBQUM7UUFDNUMseUJBQXlCO1FBQ3pCLElBQUksQ0FB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
@@ -1 +0,0 @@
1
- export declare const context: any;
@@ -1,16 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.context = void 0;
4
- const core_1 = require("@eggjs/core");
5
- exports.context = {
6
- runInBackground(scope) {
7
- /* istanbul ignore next */
8
- const taskName = scope._name || scope.name || core_1.utils.getCalleeFromStack(true);
9
- if (taskName) {
10
- scope._name = taskName;
11
- }
12
- const promise = this._runInBackground(scope);
13
- this.app._backgroundTasks.push(promise);
14
- },
15
- };
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvY29udGV4dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxzQ0FBb0M7QUFFdkIsUUFBQSxPQUFPLEdBQUc7SUFDckIsZUFBZSxDQUFDLEtBQVU7UUFDeEIsMEJBQTBCO1FBQzFCLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxZQUFLLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0UsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNiLEtBQUssQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLENBQUM7UUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDMUMsQ0FBQztDQUNLLENBQUMifQ==
@@ -1,5 +0,0 @@
1
- import { MockOptions, MockApplicationOptions } from './types.js';
2
- /**
3
- * format the options
4
- */
5
- export declare function formatOptions(initOptions?: MockOptions): MockApplicationOptions;
@@ -1,100 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.formatOptions = formatOptions;
7
- const node_util_1 = require("node:util");
8
- const node_path_1 = __importDefault(require("node:path"));
9
- const mm_1 = require("mm");
10
- const utils_1 = require("@eggjs/utils");
11
- const utility_1 = require("utility");
12
- const utils_js_1 = require("./utils.js");
13
- const debug = (0, node_util_1.debuglog)('@eggjs/mock/lib/format_options');
14
- /**
15
- * format the options
16
- */
17
- function formatOptions(initOptions) {
18
- const options = {
19
- baseDir: process.cwd(),
20
- cache: true,
21
- coverage: true,
22
- clean: true,
23
- ...initOptions,
24
- };
25
- // relative path to test/fixtures
26
- // ```js
27
- // formatOptions({ baseDir: 'app' }); // baseDir => $PWD/test/fixtures/app
28
- // ```
29
- if (!node_path_1.default.isAbsolute(options.baseDir)) {
30
- options.baseDir = node_path_1.default.join(process.cwd(), 'test/fixtures', options.baseDir);
31
- }
32
- let framework = initOptions?.framework ?? initOptions?.customEgg;
33
- // test for framework
34
- if (framework === true) {
35
- framework = process.cwd();
36
- // disable plugin test when framework test
37
- options.plugin = false;
38
- }
39
- else {
40
- if (!framework) {
41
- framework = '';
42
- }
43
- // it will throw when framework is not found
44
- framework = (0, utils_1.getFrameworkPath)({ framework, baseDir: options.baseDir });
45
- }
46
- options.framework = options.customEgg = framework;
47
- const plugins = options.plugins = options.plugins || {};
48
- // add self as a plugin
49
- let pluginPath = node_path_1.default.join((0, utils_js_1.getSourceDirname)(), '..');
50
- // for dist directory
51
- // convert `/eggjs/mock/dist` to `/eggjs/mock`
52
- if (pluginPath.endsWith('/dist') || pluginPath.endsWith('\\dist')) {
53
- pluginPath = node_path_1.default.join(pluginPath, '..');
54
- }
55
- plugins['egg-mock'] = {
56
- enable: true,
57
- path: pluginPath,
58
- };
59
- // test for plugin
60
- if (options.plugin !== false) {
61
- // add self to plugin list
62
- const pluginPath = process.cwd();
63
- const pkgPath = node_path_1.default.join(pluginPath, 'package.json');
64
- const pluginName = getPluginName(pkgPath);
65
- if (options.plugin && !pluginName) {
66
- throw new Error(`should set "eggPlugin" property in ${pkgPath}`);
67
- }
68
- if (pluginName) {
69
- plugins[pluginName] = {
70
- enable: true,
71
- path: pluginPath,
72
- };
73
- }
74
- }
75
- // mock HOME as baseDir, but ignore if it has been mocked
76
- const env = process.env.EGG_SERVER_ENV;
77
- if (!(0, mm_1.isMocked)(process.env, 'HOME') &&
78
- (env === 'default' || env === 'test' || env === 'prod')) {
79
- (0, mm_1.mm)(process.env, 'HOME', options.baseDir);
80
- }
81
- // disable cache after call mm.env(),
82
- // otherwise it will use cache and won't load again.
83
- if (process.env.EGG_MOCK_SERVER_ENV) {
84
- options.cache = false;
85
- }
86
- debug('format options: %j', options);
87
- return options;
88
- }
89
- function getPluginName(pkgPath) {
90
- try {
91
- const pkg = (0, utility_1.readJSONSync)(pkgPath);
92
- if (pkg.eggPlugin?.name) {
93
- return pkg.eggPlugin.name;
94
- }
95
- }
96
- catch (_) {
97
- // ignore
98
- }
99
- }
100
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0X29wdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2Zvcm1hdF9vcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBYUEsc0NBOEVDO0FBM0ZELHlDQUFxQztBQUNyQywwREFBNkI7QUFDN0IsMkJBQWtDO0FBQ2xDLHdDQUFnRDtBQUNoRCxxQ0FBdUM7QUFFdkMseUNBQThDO0FBRTlDLE1BQU0sS0FBSyxHQUFHLElBQUEsb0JBQVEsRUFBQyxnQ0FBZ0MsQ0FBQyxDQUFDO0FBRXpEOztHQUVHO0FBQ0gsU0FBZ0IsYUFBYSxDQUFDLFdBQXlCO0lBQ3JELE1BQU0sT0FBTyxHQUFHO1FBQ2QsT0FBTyxFQUFFLE9BQU8sQ0FBQyxHQUFHLEVBQUU7UUFDdEIsS0FBSyxFQUFFLElBQUk7UUFDWCxRQUFRLEVBQUUsSUFBSTtRQUNkLEtBQUssRUFBRSxJQUFJO1FBQ1gsR0FBRyxXQUFXO0tBQ1csQ0FBQztJQUU1QixpQ0FBaUM7SUFDakMsUUFBUTtJQUNSLDBFQUEwRTtJQUMxRSxNQUFNO0lBQ04sSUFBSSxDQUFDLG1CQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ3RDLE9BQU8sQ0FBQyxPQUFPLEdBQUcsbUJBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLGVBQWUsRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUVELElBQUksU0FBUyxHQUFHLFdBQVcsRUFBRSxTQUFTLElBQUksV0FBVyxFQUFFLFNBQVMsQ0FBQztJQUNqRSxxQkFBcUI7SUFDckIsSUFBSSxTQUFTLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDdkIsU0FBUyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUMxQiwwQ0FBMEM7UUFDMUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDekIsQ0FBQztT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