testeranto 0.79.6 → 0.79.8

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 (182) hide show
  1. package/TaskMan1.Dockerfile +1 -1
  2. package/dist/common/Features.js +84 -0
  3. package/dist/common/Node.js +23 -0
  4. package/dist/common/PM/index.js +7 -0
  5. package/dist/common/PM/main.js +641 -0
  6. package/dist/common/PM/node.js +88 -0
  7. package/dist/common/PM/web.js +132 -0
  8. package/dist/common/Project.js +186 -0
  9. package/dist/common/Puppeteer.js +104 -0
  10. package/dist/common/Reporter.js +112 -0
  11. package/dist/common/Scheduler.js +1 -0
  12. package/dist/common/SubPackages/puppeteer.js +21 -0
  13. package/dist/common/SubPackages/react/component/node.js +19 -0
  14. package/dist/common/SubPackages/react/component/web.js +19 -0
  15. package/dist/common/SubPackages/react/jsx/index.js +25 -0
  16. package/dist/common/SubPackages/react/jsx/node.js +10 -0
  17. package/dist/common/SubPackages/react/jsx/web.js +10 -0
  18. package/dist/common/SubPackages/react-dom/component/node.js +101 -0
  19. package/dist/common/SubPackages/react-dom/component/web.js +93 -0
  20. package/dist/common/SubPackages/react-dom/jsx/index.js +2 -0
  21. package/dist/common/SubPackages/react-dom/jsx/node.js +39 -0
  22. package/dist/common/SubPackages/react-dom/jsx/web.js +118 -0
  23. package/dist/common/SubPackages/react-test-renderer/MemoExoticComponent/node.js +44 -0
  24. package/dist/common/SubPackages/react-test-renderer/component/index.js +2 -0
  25. package/dist/common/SubPackages/react-test-renderer/component/interface.js +68 -0
  26. package/dist/common/SubPackages/react-test-renderer/component/node.js +8 -0
  27. package/dist/common/SubPackages/react-test-renderer/component/web.js +8 -0
  28. package/dist/common/SubPackages/react-test-renderer/fc/node.js +50 -0
  29. package/dist/common/SubPackages/react-test-renderer/fc/web.js +50 -0
  30. package/dist/common/SubPackages/react-test-renderer/jsx/index.js +48 -0
  31. package/dist/common/SubPackages/react-test-renderer/jsx/node.js +10 -0
  32. package/dist/common/SubPackages/react-test-renderer/jsx/web.js +10 -0
  33. package/dist/common/SubPackages/react-test-renderer/jsx-promised/index.js +42 -0
  34. package/dist/common/SubPackages/react-test-renderer/jsx-promised/node.js +10 -0
  35. package/dist/common/SubPackages/react-test-renderer/jsx-promised/web.js +10 -0
  36. package/dist/common/TaskManBackEnd.js +174 -0
  37. package/dist/common/Types.js +2 -0
  38. package/dist/common/Web.js +39 -0
  39. package/dist/common/esbuildConfigs/features.js +14 -0
  40. package/dist/common/esbuildConfigs/index.js +21 -0
  41. package/dist/common/esbuildConfigs/inputFilesPlugin.js +49 -0
  42. package/dist/common/esbuildConfigs/node.js +39 -0
  43. package/dist/common/esbuildConfigs/report.js +13 -0
  44. package/dist/common/esbuildConfigs/tests.js +13 -0
  45. package/dist/common/esbuildConfigs/web.js +57 -0
  46. package/dist/common/lib/abstractBase.js +553 -0
  47. package/dist/common/lib/basebuilder.js +79 -0
  48. package/dist/common/lib/classBuilder.js +42 -0
  49. package/dist/common/lib/core.js +75 -0
  50. package/dist/common/lib/index.js +22 -0
  51. package/dist/common/lib/types.js +2 -0
  52. package/dist/common/mongooseSchemas.js +56 -0
  53. package/dist/common/package.json +3 -0
  54. package/dist/common/preload.js +15 -0
  55. package/dist/common/puppeteerConfiger.js +24 -0
  56. package/dist/common/report.html.js +31 -0
  57. package/dist/common/tsconfig.common.tsbuildinfo +1 -0
  58. package/dist/common/utils.js +16 -0
  59. package/dist/common/web.html.js +22 -0
  60. package/dist/module/ExampleTab.js +112 -0
  61. package/dist/module/Features.js +73 -0
  62. package/dist/module/Node.js +18 -0
  63. package/dist/module/PM/index.js +3 -0
  64. package/dist/module/PM/main.js +611 -0
  65. package/dist/module/PM/node.js +81 -0
  66. package/dist/module/PM/web.js +125 -0
  67. package/dist/module/Project.js +179 -0
  68. package/dist/module/Puppeteer.js +99 -0
  69. package/dist/module/Reporter.js +107 -0
  70. package/dist/module/Scheduler.js +1 -0
  71. package/dist/module/SubPackages/puppeteer.js +16 -0
  72. package/dist/module/SubPackages/react/component/node.js +14 -0
  73. package/dist/module/SubPackages/react/component/web.js +14 -0
  74. package/dist/module/SubPackages/react/jsx/index.js +19 -0
  75. package/dist/module/SubPackages/react/jsx/node.js +5 -0
  76. package/dist/module/SubPackages/react/jsx/web.js +5 -0
  77. package/dist/module/SubPackages/react-dom/component/node.js +93 -0
  78. package/dist/module/SubPackages/react-dom/component/web.js +88 -0
  79. package/dist/module/SubPackages/react-dom/jsx/index.js +1 -0
  80. package/dist/module/SubPackages/react-dom/jsx/node.js +31 -0
  81. package/dist/module/SubPackages/react-dom/jsx/web.js +90 -0
  82. package/dist/module/SubPackages/react-test-renderer/MemoExoticComponent/node.js +16 -0
  83. package/dist/module/SubPackages/react-test-renderer/component/index.js +1 -0
  84. package/dist/module/SubPackages/react-test-renderer/component/interface.js +39 -0
  85. package/dist/module/SubPackages/react-test-renderer/component/node.js +3 -0
  86. package/dist/module/SubPackages/react-test-renderer/component/web.js +3 -0
  87. package/dist/module/SubPackages/react-test-renderer/fc/node.js +22 -0
  88. package/dist/module/SubPackages/react-test-renderer/fc/web.js +22 -0
  89. package/dist/module/SubPackages/react-test-renderer/jsx/index.js +19 -0
  90. package/dist/module/SubPackages/react-test-renderer/jsx/node.js +5 -0
  91. package/dist/module/SubPackages/react-test-renderer/jsx/web.js +5 -0
  92. package/dist/module/SubPackages/react-test-renderer/jsx-promised/index.js +16 -0
  93. package/dist/module/SubPackages/react-test-renderer/jsx-promised/node.js +5 -0
  94. package/dist/module/SubPackages/react-test-renderer/jsx-promised/web.js +5 -0
  95. package/dist/module/TaskManBackEnd.js +169 -0
  96. package/dist/module/TaskManFrontEnd.js +600 -0
  97. package/dist/module/Types.js +1 -0
  98. package/dist/module/Web.js +34 -0
  99. package/dist/module/esbuildConfigs/features.js +12 -0
  100. package/dist/module/esbuildConfigs/index.js +19 -0
  101. package/dist/module/esbuildConfigs/inputFilesPlugin.js +44 -0
  102. package/dist/module/esbuildConfigs/node.js +34 -0
  103. package/dist/module/esbuildConfigs/report.js +11 -0
  104. package/dist/module/esbuildConfigs/tests.js +11 -0
  105. package/dist/module/esbuildConfigs/web.js +52 -0
  106. package/dist/module/lib/abstractBase.js +545 -0
  107. package/dist/module/lib/basebuilder.js +75 -0
  108. package/dist/module/lib/classBuilder.js +38 -0
  109. package/dist/module/lib/core.js +72 -0
  110. package/dist/module/lib/index.js +18 -0
  111. package/dist/module/lib/types.js +1 -0
  112. package/dist/module/mongooseSchemas.js +50 -0
  113. package/dist/module/package.json +3 -0
  114. package/dist/module/preload.js +15 -0
  115. package/dist/module/puppeteerConfiger.js +19 -0
  116. package/dist/module/report.html.js +29 -0
  117. package/dist/module/tsconfig.module.tsbuildinfo +1 -0
  118. package/dist/module/utils.js +9 -0
  119. package/dist/module/web.html.js +20 -0
  120. package/dist/prebuild/Report.css +11358 -0
  121. package/dist/prebuild/Report.js +37666 -0
  122. package/dist/prebuild/TaskManBackEnd.mjs +180 -0
  123. package/dist/prebuild/TaskManFrontEnd.css +12301 -0
  124. package/dist/prebuild/TaskManFrontEnd.js +81737 -0
  125. package/dist/types/Features.d.ts +68 -0
  126. package/dist/types/Node.d.ts +6 -0
  127. package/dist/types/PM/index.d.ts +20 -0
  128. package/dist/types/PM/main.d.ts +31 -0
  129. package/dist/types/PM/node.d.ts +27 -0
  130. package/dist/types/PM/web.d.ts +25 -0
  131. package/dist/types/Project.d.ts +7 -0
  132. package/dist/types/Puppeteer.d.ts +1 -0
  133. package/dist/types/Reporter.d.ts +1 -0
  134. package/dist/types/Scheduler.d.ts +0 -0
  135. package/dist/types/SubPackages/puppeteer.d.ts +6 -0
  136. package/dist/types/SubPackages/react/component/node.d.ts +7 -0
  137. package/dist/types/SubPackages/react/component/web.d.ts +7 -0
  138. package/dist/types/SubPackages/react/jsx/index.d.ts +12 -0
  139. package/dist/types/SubPackages/react/jsx/node.d.ts +4 -0
  140. package/dist/types/SubPackages/react/jsx/web.d.ts +4 -0
  141. package/dist/types/SubPackages/react-dom/component/node.d.ts +12 -0
  142. package/dist/types/SubPackages/react-dom/component/web.d.ts +11 -0
  143. package/dist/types/SubPackages/react-dom/jsx/index.d.ts +6 -0
  144. package/dist/types/SubPackages/react-dom/jsx/node.d.ts +6 -0
  145. package/dist/types/SubPackages/react-dom/jsx/web.d.ts +5 -0
  146. package/dist/types/SubPackages/react-test-renderer/MemoExoticComponent/node.d.ts +5 -0
  147. package/dist/types/SubPackages/react-test-renderer/component/index.d.ts +13 -0
  148. package/dist/types/SubPackages/react-test-renderer/component/interface.d.ts +9 -0
  149. package/dist/types/SubPackages/react-test-renderer/component/node.d.ts +8 -0
  150. package/dist/types/SubPackages/react-test-renderer/component/web.d.ts +3 -0
  151. package/dist/types/SubPackages/react-test-renderer/fc/node.d.ts +8 -0
  152. package/dist/types/SubPackages/react-test-renderer/fc/web.d.ts +8 -0
  153. package/dist/types/SubPackages/react-test-renderer/jsx/index.d.ts +16 -0
  154. package/dist/types/SubPackages/react-test-renderer/jsx/node.d.ts +8 -0
  155. package/dist/types/SubPackages/react-test-renderer/jsx/web.d.ts +8 -0
  156. package/dist/types/SubPackages/react-test-renderer/jsx-promised/index.d.ts +15 -0
  157. package/dist/types/SubPackages/react-test-renderer/jsx-promised/node.d.ts +4 -0
  158. package/dist/types/SubPackages/react-test-renderer/jsx-promised/web.d.ts +4 -0
  159. package/dist/types/TaskManBackEnd.d.ts +1 -0
  160. package/dist/types/Types.d.ts +50 -0
  161. package/dist/types/Web.d.ts +6 -0
  162. package/dist/types/esbuildConfigs/features.d.ts +4 -0
  163. package/dist/types/esbuildConfigs/index.d.ts +4 -0
  164. package/dist/types/esbuildConfigs/inputFilesPlugin.d.ts +5 -0
  165. package/dist/types/esbuildConfigs/node.d.ts +4 -0
  166. package/dist/types/esbuildConfigs/report.d.ts +4 -0
  167. package/dist/types/esbuildConfigs/tests.d.ts +4 -0
  168. package/dist/types/esbuildConfigs/web.d.ts +4 -0
  169. package/dist/types/lib/abstractBase.d.ts +104 -0
  170. package/dist/types/lib/basebuilder.d.ts +27 -0
  171. package/dist/types/lib/classBuilder.d.ts +7 -0
  172. package/dist/types/lib/core.d.ts +8 -0
  173. package/dist/types/lib/index.d.ts +59 -0
  174. package/dist/types/lib/types.d.ts +64 -0
  175. package/dist/types/mongooseSchemas.d.ts +124 -0
  176. package/dist/types/preload.d.ts +0 -0
  177. package/dist/types/puppeteerConfiger.d.ts +4 -0
  178. package/dist/types/report.html.d.ts +2 -0
  179. package/dist/types/tsconfig.types.tsbuildinfo +1 -0
  180. package/dist/types/utils.d.ts +2 -0
  181. package/dist/types/web.html.d.ts +2 -0
  182. package/package.json +2 -2
@@ -0,0 +1,641 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.PM_Main = void 0;
30
+ const fs_1 = __importDefault(require("fs"));
31
+ const path_1 = __importDefault(require("path"));
32
+ const puppeteer_core_1 = __importDefault(require("puppeteer-core"));
33
+ const index_js_1 = require("./index.js");
34
+ const utils_js_1 = require("../utils.js");
35
+ const fPaths = [];
36
+ const fileStreams3 = [];
37
+ const files = {}; // = new Set<string>();
38
+ const screenshots = {};
39
+ class PM_Main extends index_js_1.PM {
40
+ constructor(configs) {
41
+ super();
42
+ this.launchNode = async (src, dest) => {
43
+ console.log("launchNode", src);
44
+ const destFolder = dest.replace(".mjs", "");
45
+ let argz = "";
46
+ const testConfig = this.configs.tests.find((t) => {
47
+ return t[0] === src;
48
+ });
49
+ if (!testConfig) {
50
+ console.error("missing test config");
51
+ process.exit(-1);
52
+ }
53
+ const testConfigResource = testConfig[2];
54
+ let portsToUse = [];
55
+ if (testConfigResource.ports === 0) {
56
+ argz = JSON.stringify({
57
+ scheduled: true,
58
+ name: src,
59
+ ports: portsToUse,
60
+ fs: destFolder,
61
+ browserWSEndpoint: this.browser.wsEndpoint(),
62
+ });
63
+ }
64
+ else if (testConfigResource.ports > 0) {
65
+ const openPorts = Object.entries(this.ports).filter(([portnumber, portopen]) => portopen);
66
+ console.log("openPorts", openPorts);
67
+ if (openPorts.length >= testConfigResource.ports) {
68
+ for (let i = 0; i < testConfigResource.ports; i++) {
69
+ portsToUse.push(openPorts[i][0]);
70
+ this.ports[openPorts[i][0]] = false; // port is now closed
71
+ }
72
+ argz = JSON.stringify({
73
+ scheduled: true,
74
+ name: src,
75
+ // ports: [3333],
76
+ ports: portsToUse,
77
+ fs: destFolder,
78
+ browserWSEndpoint: this.browser.wsEndpoint(),
79
+ });
80
+ }
81
+ else {
82
+ this.queue.push(src);
83
+ return;
84
+ }
85
+ }
86
+ else {
87
+ console.error("negative port makes no sense", src);
88
+ process.exit(-1);
89
+ }
90
+ const builtfile = dest + ".mjs";
91
+ await Promise.all(testConfig[3].map((sidecar) => {
92
+ if (sidecar[1] === "web") {
93
+ return this.launchWebSideCar(sidecar[0], (0, utils_js_1.destinationOfRuntime)(sidecar[0], "web", this.configs), sidecar);
94
+ }
95
+ if (sidecar[1] === "node") {
96
+ return this.launchNodeSideCar(sidecar[0], (0, utils_js_1.destinationOfRuntime)(sidecar[0], "node", this.configs), sidecar);
97
+ }
98
+ }));
99
+ this.server[builtfile] = await Promise.resolve().then(() => __importStar(require(`${builtfile}?cacheBust=${Date.now()}`))).then((module) => {
100
+ return module.default.then((defaultModule) => {
101
+ defaultModule
102
+ .receiveTestResourceConfig(argz)
103
+ .then((x) => {
104
+ console.log("then", x);
105
+ return x;
106
+ })
107
+ .catch((e) => {
108
+ console.log("catch", e);
109
+ });
110
+ });
111
+ });
112
+ console.log("portsToUse", portsToUse);
113
+ for (let i = 0; i <= portsToUse.length; i++) {
114
+ if (portsToUse[i]) {
115
+ this.ports[portsToUse[i]] = "true"; //port is open again
116
+ }
117
+ }
118
+ };
119
+ this.launchWebSideCar = async (src, dest, testConfig) => {
120
+ const d = dest + ".mjs";
121
+ console.log("launchWebSideCar", src, dest, d);
122
+ const destFolder = dest.replace(".mjs", "");
123
+ const webArgz = JSON.stringify({
124
+ name: dest,
125
+ ports: [].toString(),
126
+ fs: destFolder,
127
+ browserWSEndpoint: this.browser.wsEndpoint(),
128
+ });
129
+ const evaluation = `
130
+ console.log("importing ${dest}.mjs");
131
+ import('${dest}.mjs').then(async (x) => {
132
+ console.log("imported", x.default);
133
+ })`;
134
+ const fileStreams2 = [];
135
+ const doneFileStream2 = [];
136
+ return new Promise((res, rej) => {
137
+ this.browser
138
+ .newPage()
139
+ .then((page) => {
140
+ page.on("console", (msg) => {
141
+ console.log("web > ", msg.args(), msg.text());
142
+ // for (let i = 0; i < msg._args.length; ++i)
143
+ // console.log(`${i}: ${msg._args[i]}`);
144
+ });
145
+ page.exposeFunction("custom-screenshot", async (ssOpts, testName) => {
146
+ console.log("main.ts browser custom-screenshot", testName);
147
+ const p = ssOpts.path;
148
+ const dir = path_1.default.dirname(p);
149
+ fs_1.default.mkdirSync(dir, {
150
+ recursive: true,
151
+ });
152
+ files[testName].add(ssOpts.path);
153
+ const sPromise = page.screenshot(Object.assign(Object.assign({}, ssOpts), { path: p }));
154
+ if (!screenshots[testName]) {
155
+ screenshots[testName] = [];
156
+ }
157
+ screenshots[testName].push(sPromise);
158
+ // sPromise.then(())
159
+ await sPromise;
160
+ return sPromise;
161
+ // page.evaluate(`window["screenshot done"]`);
162
+ });
163
+ page.exposeFunction("writeFileSync", (fp, contents, testName) => {
164
+ const dir = path_1.default.dirname(fp);
165
+ fs_1.default.mkdirSync(dir, {
166
+ recursive: true,
167
+ });
168
+ const p = new Promise(async (res, rej) => {
169
+ fs_1.default.writeFileSync(fp, contents);
170
+ res(fp);
171
+ });
172
+ doneFileStream2.push(p);
173
+ if (!files[testName]) {
174
+ files[testName] = new Set();
175
+ }
176
+ files[testName].add(fp);
177
+ return p;
178
+ });
179
+ page.exposeFunction("existsSync", (fp, contents) => {
180
+ return fs_1.default.existsSync(fp);
181
+ });
182
+ page.exposeFunction("mkdirSync", (fp) => {
183
+ if (!fs_1.default.existsSync(fp)) {
184
+ return fs_1.default.mkdirSync(fp, {
185
+ recursive: true,
186
+ });
187
+ }
188
+ return false;
189
+ });
190
+ page.exposeFunction("createWriteStream", (fp, testName) => {
191
+ const f = fs_1.default.createWriteStream(fp);
192
+ if (!files[testName]) {
193
+ files[testName] = new Set();
194
+ }
195
+ files[testName].add(fp);
196
+ const p = new Promise((res, rej) => {
197
+ res(fp);
198
+ });
199
+ doneFileStream2.push(p);
200
+ f.on("close", async () => {
201
+ await p;
202
+ });
203
+ fileStreams2.push(f);
204
+ return Object.assign(Object.assign({}, JSON.parse(JSON.stringify(f))), { uid: fileStreams2.length - 1 });
205
+ });
206
+ page.exposeFunction("write", async (uid, contents) => {
207
+ return fileStreams2[uid].write(contents);
208
+ });
209
+ page.exposeFunction("end", async (uid) => {
210
+ return fileStreams2[uid].end();
211
+ });
212
+ page.exposeFunction("customclose", (p, testName) => {
213
+ fs_1.default.writeFileSync(p + "/manifest.json", JSON.stringify(Array.from(files[testName])));
214
+ delete files[testName];
215
+ Promise.all(screenshots[testName] || []).then(() => {
216
+ delete screenshots[testName];
217
+ page.close();
218
+ });
219
+ // globalThis["writeFileSync"](
220
+ // p + "/manifest.json",
221
+ // // files.entries()
222
+ // JSON.stringify(Array.from(files[testName]))
223
+ // );
224
+ // console.log("closing doneFileStream2", doneFileStream2);
225
+ // console.log("closing doneFileStream2", doneFileStream2);
226
+ // Promise.all([...doneFileStream2, ...screenshots2]).then(() => {
227
+ // page.close();
228
+ // });
229
+ // Promise.all(screenshots).then(() => {
230
+ // page.close();
231
+ // });
232
+ // setTimeout(() => {
233
+ // console.log("Delayed for 1 second.");
234
+ // page.close();
235
+ // }, 5000);
236
+ // return page.close();
237
+ });
238
+ return page;
239
+ })
240
+ .then(async (page) => {
241
+ page.on("console", (log) => console.debug(`Log from client: [${log.text()}] `));
242
+ await page.goto(`file://${`${dest}.html`}`, {});
243
+ res(page);
244
+ // page.evaluate(evaluation).finally(() => {
245
+ // console.log("evaluation failed.", dest);
246
+ // });
247
+ // return page;
248
+ });
249
+ });
250
+ };
251
+ // launchNodeSideCar = async (src: string, dest: string) => {};
252
+ this.launchNodeSideCar = async (src, dest, testConfig) => {
253
+ const d = dest + ".mjs";
254
+ console.log("launchNodeSideCar", src, dest, d);
255
+ const destFolder = dest.replace(".mjs", "");
256
+ let argz = "";
257
+ // const testConfig = this.configs.tests.find((t) => {
258
+ // return t[0] === src;
259
+ // });
260
+ // if (!testConfig) {
261
+ // console.error("missing test config");
262
+ // process.exit(-1);
263
+ // }
264
+ const testConfigResource = testConfig[2];
265
+ let portsToUse = [];
266
+ if (testConfigResource.ports === 0) {
267
+ argz = JSON.stringify({
268
+ scheduled: true,
269
+ name: src,
270
+ ports: portsToUse,
271
+ fs: destFolder,
272
+ browserWSEndpoint: this.browser.wsEndpoint(),
273
+ });
274
+ }
275
+ else if (testConfigResource.ports > 0) {
276
+ const openPorts = Object.entries(this.ports).filter(([portnumber, portopen]) => portopen);
277
+ console.log("openPorts", openPorts);
278
+ if (openPorts.length >= testConfigResource.ports) {
279
+ for (let i = 0; i < testConfigResource.ports; i++) {
280
+ portsToUse.push(openPorts[i][0]);
281
+ this.ports[openPorts[i][0]] = false; // port is now closed
282
+ }
283
+ argz = JSON.stringify({
284
+ scheduled: true,
285
+ name: src,
286
+ // ports: [3333],
287
+ ports: portsToUse,
288
+ fs: ".",
289
+ browserWSEndpoint: this.browser.wsEndpoint(),
290
+ });
291
+ }
292
+ else {
293
+ this.queue.push(src);
294
+ return;
295
+ }
296
+ }
297
+ else {
298
+ console.error("negative port makes no sense", src);
299
+ process.exit(-1);
300
+ }
301
+ const builtfile = dest + ".mjs";
302
+ // console.log(
303
+ // "node builtfile",
304
+ // (await import(`${builtfile}?cacheBust=${Date.now()}`)).default
305
+ // );
306
+ this.server[builtfile] = await Promise.resolve().then(() => __importStar(require(`${builtfile}?cacheBust=${Date.now()}`))).then((module) => {
307
+ return module.default.then((defaultModule) => {
308
+ console.log("defaultModule", defaultModule);
309
+ const s = new defaultModule();
310
+ s.receiveTestResourceConfig(argz);
311
+ // Object.create(defaultModule);
312
+ // defaultModule
313
+ // .receiveTestResourceConfig(argz)
314
+ // .then((x) => {
315
+ // console.log("then", x);
316
+ // return x;
317
+ // })
318
+ // .catch((e) => {
319
+ // console.log("catch", e);
320
+ // });
321
+ });
322
+ });
323
+ console.log("portsToUse", portsToUse);
324
+ for (let i = 0; i <= portsToUse.length; i++) {
325
+ if (portsToUse[i]) {
326
+ this.ports[portsToUse[i]] = "true"; //port is open again
327
+ }
328
+ }
329
+ };
330
+ this.launchWeb = (t, dest, sidecars) => {
331
+ console.log("launchWeb", t, dest);
332
+ sidecars.map((sidecar) => {
333
+ if (sidecar[1] === "node") {
334
+ return this.launchNodeSideCar(sidecar[0], (0, utils_js_1.destinationOfRuntime)(sidecar[0], "node", this.configs), sidecar);
335
+ }
336
+ });
337
+ const destFolder = dest.replace(".mjs", "");
338
+ const webArgz = JSON.stringify({
339
+ name: dest,
340
+ ports: [].toString(),
341
+ fs: destFolder,
342
+ browserWSEndpoint: this.browser.wsEndpoint(),
343
+ });
344
+ const evaluation = `
345
+ console.log("importing ${dest}.mjs");
346
+ import('${dest}.mjs').then(async (x) => {
347
+ console.log("imported", x.default);
348
+ try {
349
+ await (await x.default).receiveTestResourceConfig(${webArgz})
350
+ } catch (e) {
351
+ console.log("fail", e)
352
+ }
353
+ })`;
354
+ const fileStreams2 = [];
355
+ const doneFileStream2 = [];
356
+ this.browser
357
+ .newPage()
358
+ .then((page) => {
359
+ page.on("console", (msg) => {
360
+ console.log("web > ", msg.args(), msg.text());
361
+ // for (let i = 0; i < msg._args.length; ++i)
362
+ // console.log(`${i}: ${msg._args[i]}`);
363
+ });
364
+ page.exposeFunction("customScreenShot", async (ssOpts, testName) => {
365
+ console.log("main.ts browser custom-screenshot", testName);
366
+ const p = ssOpts.path;
367
+ const dir = path_1.default.dirname(p);
368
+ fs_1.default.mkdirSync(dir, {
369
+ recursive: true,
370
+ });
371
+ if (!files[testName]) {
372
+ files[testName] = new Set();
373
+ }
374
+ files[testName].add(ssOpts.path);
375
+ const sPromise = page.screenshot(Object.assign(Object.assign({}, ssOpts), { path: p }));
376
+ if (!screenshots[testName]) {
377
+ screenshots[testName] = [];
378
+ }
379
+ screenshots[testName].push(sPromise);
380
+ // sPromise.then(())
381
+ await sPromise;
382
+ return sPromise;
383
+ // page.evaluate(`window["screenshot done"]`);
384
+ });
385
+ page.exposeFunction("writeFileSync", (fp, contents, testName) => {
386
+ const dir = path_1.default.dirname(fp);
387
+ fs_1.default.mkdirSync(dir, {
388
+ recursive: true,
389
+ });
390
+ const p = new Promise(async (res, rej) => {
391
+ fs_1.default.writeFileSync(fp, contents);
392
+ res(fp);
393
+ });
394
+ doneFileStream2.push(p);
395
+ if (!files[testName]) {
396
+ files[testName] = new Set();
397
+ }
398
+ files[testName].add(fp);
399
+ return p;
400
+ });
401
+ page.exposeFunction("existsSync", (fp, contents) => {
402
+ return fs_1.default.existsSync(fp);
403
+ });
404
+ page.exposeFunction("mkdirSync", (fp) => {
405
+ if (!fs_1.default.existsSync(fp)) {
406
+ return fs_1.default.mkdirSync(fp, {
407
+ recursive: true,
408
+ });
409
+ }
410
+ return false;
411
+ });
412
+ page.exposeFunction("createWriteStream", (fp, testName) => {
413
+ const f = fs_1.default.createWriteStream(fp);
414
+ if (!files[testName]) {
415
+ files[testName] = new Set();
416
+ }
417
+ files[testName].add(fp);
418
+ const p = new Promise((res, rej) => {
419
+ res(fp);
420
+ });
421
+ doneFileStream2.push(p);
422
+ f.on("close", async () => {
423
+ await p;
424
+ });
425
+ fileStreams2.push(f);
426
+ return Object.assign(Object.assign({}, JSON.parse(JSON.stringify(f))), { uid: fileStreams2.length - 1 });
427
+ });
428
+ page.exposeFunction("write", async (uid, contents) => {
429
+ return fileStreams2[uid].write(contents);
430
+ });
431
+ page.exposeFunction("end", async (uid) => {
432
+ return fileStreams2[uid].end();
433
+ });
434
+ page.exposeFunction("customclose", (p, testName) => {
435
+ console.log("\t closing", p);
436
+ fs_1.default.writeFileSync(p + "/manifest.json", JSON.stringify(Array.from(files[testName])));
437
+ delete files[testName];
438
+ Promise.all(screenshots[testName] || []).then(() => {
439
+ delete screenshots[testName];
440
+ page.close();
441
+ });
442
+ // globalThis["writeFileSync"](
443
+ // p + "/manifest.json",
444
+ // // files.entries()
445
+ // JSON.stringify(Array.from(files[testName]))
446
+ // );
447
+ // console.log("closing doneFileStream2", doneFileStream2);
448
+ // console.log("closing doneFileStream2", doneFileStream2);
449
+ // Promise.all([...doneFileStream2, ...screenshots2]).then(() => {
450
+ // page.close();
451
+ // });
452
+ // Promise.all(screenshots).then(() => {
453
+ // page.close();
454
+ // });
455
+ // setTimeout(() => {
456
+ // console.log("Delayed for 1 second.");
457
+ // page.close();
458
+ // }, 5000);
459
+ // return page.close();
460
+ });
461
+ return page;
462
+ })
463
+ .then(async (page) => {
464
+ page.on("console", (log) => console.debug(`Log from client: [${log.text()}] `));
465
+ await page.goto(`file://${`${dest}.html`}`, {});
466
+ page.evaluate(evaluation).finally(() => {
467
+ console.log("evaluation failed.", dest);
468
+ });
469
+ return page;
470
+ });
471
+ };
472
+ this.server = {};
473
+ this.configs = configs;
474
+ this.ports = {};
475
+ this.configs.ports.forEach((element) => {
476
+ this.ports[element] = "true"; // set ports as open
477
+ });
478
+ globalThis["mkdirSync"] = (fp) => {
479
+ if (!fs_1.default.existsSync(fp)) {
480
+ return fs_1.default.mkdirSync(fp, {
481
+ recursive: true,
482
+ });
483
+ }
484
+ return false;
485
+ };
486
+ globalThis["writeFileSync"] = (filepath, contents, testName) => {
487
+ console.log("globalThis-writeFileSync", filepath);
488
+ // Create directories if they don't exist
489
+ const dir = path_1.default.dirname(filepath.split("/").slice(0, -1).join("/"));
490
+ fs_1.default.mkdirSync(dir, {
491
+ recursive: true,
492
+ });
493
+ if (!files[testName]) {
494
+ files[testName] = new Set();
495
+ }
496
+ files[testName].add(filepath);
497
+ return fs_1.default.writeFileSync(filepath, contents);
498
+ };
499
+ globalThis["createWriteStream"] = (filepath, testName) => {
500
+ const f = fs_1.default.createWriteStream(filepath);
501
+ fileStreams3.push(f);
502
+ // files.add(filepath);
503
+ if (!files[testName]) {
504
+ files[testName] = new Set();
505
+ }
506
+ files[testName].add(filepath);
507
+ return Object.assign(Object.assign({}, JSON.parse(JSON.stringify(f))), { uid: fileStreams3.length - 1 });
508
+ };
509
+ globalThis["write"] = (uid, contents) => {
510
+ fileStreams3[uid].write(contents);
511
+ };
512
+ globalThis["end"] = (uid) => {
513
+ fileStreams3[uid].end();
514
+ };
515
+ globalThis["customScreenShot"] = async (opts, page) => {
516
+ // // fileStreams3[uid].write(contents);
517
+ // // console.log("asd", opts.path.split("/").slice(0, -1).join("/"));
518
+ // // const dir = path.dirname(opts.path.split("/").slice(0, -1).join("/"));
519
+ // // console.log("dir", dir);
520
+ // fs.mkdirSync(opts.path.split("/").slice(0, -1).join("/"), {
521
+ // recursive: true,
522
+ // });
523
+ // return page.screenshot(opts);
524
+ console.log("main.ts node custom-screenshot", page);
525
+ const p = opts.path;
526
+ const dir = path_1.default.dirname(p);
527
+ fs_1.default.mkdirSync(dir, {
528
+ recursive: true,
529
+ });
530
+ if (!files[opts.path]) {
531
+ files[opts.path] = new Set();
532
+ }
533
+ files[opts.path].add(opts.path);
534
+ const sPromise = page.screenshot(Object.assign(Object.assign({}, opts), { path: p }));
535
+ if (!screenshots[opts.path]) {
536
+ screenshots[opts.path] = [];
537
+ }
538
+ screenshots[opts.path].push(sPromise);
539
+ await sPromise;
540
+ return sPromise;
541
+ };
542
+ globalThis["customclose"] = (p, testName) => {
543
+ if (!files[testName]) {
544
+ files[testName] = new Set();
545
+ }
546
+ fs_1.default.writeFileSync(p + "/manifest.json", JSON.stringify(Array.from(files[testName])));
547
+ delete files[testName];
548
+ // globalThis["writeFileSync"](
549
+ // p + "/manifest.json",
550
+ // // files.entries()
551
+ // JSON.stringify(Array.from(files[testName]))
552
+ // );
553
+ // fileStreams3[uid].end();
554
+ };
555
+ // page.exposeFunction("customclose", () => {
556
+ // console.log("closing doneFileStream2", doneFileStream2);
557
+ // // console.log("closing doneFileStream2", doneFileStream2);
558
+ // Promise.all([...doneFileStream2, ...screenshots2]).then(() => {
559
+ // page.close();
560
+ // });
561
+ // // page.close();
562
+ // // Promise.all(screenshots).then(() => {
563
+ // // page.close();
564
+ // // });
565
+ // // setTimeout(() => {
566
+ // // console.log("Delayed for 1 second.");
567
+ // // page.close();
568
+ // // }, 5000);
569
+ // // return page.close();
570
+ // });
571
+ }
572
+ customScreenShot(opts) {
573
+ throw new Error("Method not implemented.");
574
+ }
575
+ async startPuppeteer(options, destfolder) {
576
+ this.browser = await puppeteer_core_1.default.launch(options);
577
+ return this.browser;
578
+ }
579
+ end(accessObject) {
580
+ throw new Error("Method not implemented.");
581
+ }
582
+ existsSync(destFolder) {
583
+ return fs_1.default.existsSync(destFolder);
584
+ }
585
+ async mkdirSync(fp) {
586
+ if (!fs_1.default.existsSync(fp)) {
587
+ return fs_1.default.mkdirSync(fp, {
588
+ recursive: true,
589
+ });
590
+ }
591
+ return false;
592
+ }
593
+ writeFileSync(fp, contents) {
594
+ fs_1.default.writeFileSync(fp, contents);
595
+ }
596
+ createWriteStream(filepath) {
597
+ return fs_1.default.createWriteStream(filepath);
598
+ }
599
+ testArtiFactoryfileWriter(tLog, callback) {
600
+ return (fPath, value) => {
601
+ callback(new Promise((res, rej) => {
602
+ tLog("testArtiFactory =>", fPath);
603
+ const cleanPath = path_1.default.resolve(fPath);
604
+ fPaths.push(cleanPath.replace(process.cwd(), ``));
605
+ const targetDir = cleanPath.split("/").slice(0, -1).join("/");
606
+ fs_1.default.mkdir(targetDir, { recursive: true }, async (error) => {
607
+ if (error) {
608
+ console.error(`❗️testArtiFactory failed`, targetDir, error);
609
+ }
610
+ fs_1.default.writeFileSync(path_1.default.resolve(targetDir.split("/").slice(0, -1).join("/"), "manifest"), fPaths.join(`\n`), {
611
+ encoding: "utf-8",
612
+ });
613
+ if (Buffer.isBuffer(value)) {
614
+ fs_1.default.writeFileSync(fPath, value, "binary");
615
+ res();
616
+ }
617
+ else if (`string` === typeof value) {
618
+ fs_1.default.writeFileSync(fPath, value.toString(), {
619
+ encoding: "utf-8",
620
+ });
621
+ res();
622
+ }
623
+ else {
624
+ /* @ts-ignore:next-line */
625
+ const pipeStream = value;
626
+ const myFile = fs_1.default.createWriteStream(fPath);
627
+ pipeStream.pipe(myFile);
628
+ pipeStream.on("close", () => {
629
+ myFile.close();
630
+ res();
631
+ });
632
+ }
633
+ });
634
+ }));
635
+ };
636
+ }
637
+ write(accessObject, contents) {
638
+ throw new Error("Method not implemented.");
639
+ }
640
+ }
641
+ exports.PM_Main = PM_Main;