testeranto 0.47.34 → 0.47.52

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 (309) hide show
  1. package/.nvmrc +1 -0
  2. package/Bundle.Dockerfile +45 -0
  3. package/README.md +86 -11
  4. package/Report.Dockerfile +43 -0
  5. package/dist/cjs-shim.js +12 -0
  6. package/dist/common/Features.js +3 -37
  7. package/dist/common/Init.js +30 -0
  8. package/dist/common/Node.js +15 -66
  9. package/dist/common/PM/index.js +7 -0
  10. package/dist/common/PM/main.js +641 -0
  11. package/dist/common/PM/node.js +88 -0
  12. package/dist/common/PM/web.js +132 -0
  13. package/dist/common/Project.js +109 -637
  14. package/dist/common/Puppeteer.js +103 -0
  15. package/dist/common/Reporter.js +112 -0
  16. package/dist/common/Scheduler.js +1 -0
  17. package/dist/common/SubPackages/puppeteer.js +21 -0
  18. package/dist/common/{subPackages → SubPackages}/react/component/node.js +4 -4
  19. package/dist/common/{subPackages → SubPackages}/react/component/web.js +4 -4
  20. package/dist/common/SubPackages/react/jsx/index.js +25 -0
  21. package/dist/common/SubPackages/react/jsx/node.js +10 -0
  22. package/dist/common/SubPackages/react/jsx/web.js +10 -0
  23. package/dist/common/{subPackages/react-dom/jsx → SubPackages/react-dom/component}/node.js +6 -6
  24. package/dist/common/SubPackages/react-dom/component/web.js +93 -0
  25. package/dist/common/SubPackages/react-dom/jsx/index.js +2 -0
  26. package/dist/common/SubPackages/react-dom/jsx/node.js +39 -0
  27. package/dist/common/SubPackages/react-dom/jsx/web.js +118 -0
  28. package/dist/common/SubPackages/react-test-renderer/MemoExoticComponent/node.js +44 -0
  29. package/dist/common/SubPackages/react-test-renderer/component/index.js +2 -0
  30. package/dist/common/{subPackages/react-test-renderer/component/index.js → SubPackages/react-test-renderer/component/interface.js} +23 -33
  31. package/dist/common/{subPackages/react-test-renderer/jsx → SubPackages/react-test-renderer/component}/node.js +3 -5
  32. package/dist/common/{subPackages/react/jsx → SubPackages/react-test-renderer/component}/web.js +3 -5
  33. package/dist/common/SubPackages/react-test-renderer/fc/node.js +50 -0
  34. package/dist/common/SubPackages/react-test-renderer/fc/web.js +50 -0
  35. package/dist/common/{subPackages → SubPackages}/react-test-renderer/jsx/index.js +7 -3
  36. package/dist/common/SubPackages/react-test-renderer/jsx/node.js +10 -0
  37. package/dist/common/SubPackages/react-test-renderer/jsx/web.js +10 -0
  38. package/dist/common/SubPackages/react-test-renderer/jsx-promised/index.js +42 -0
  39. package/dist/common/{subPackages/react/jsx → SubPackages/react-test-renderer/jsx-promised}/node.js +2 -2
  40. package/dist/common/TaskManBackEnd.js +174 -0
  41. package/dist/common/Web.js +31 -108
  42. package/dist/common/esbuildConfigs/features.js +14 -0
  43. package/dist/common/esbuildConfigs/index.js +21 -0
  44. package/dist/common/esbuildConfigs/inputFilesPlugin.js +49 -0
  45. package/dist/common/esbuildConfigs/node.js +39 -0
  46. package/dist/common/esbuildConfigs/report.js +14 -0
  47. package/dist/common/esbuildConfigs/tests.js +13 -0
  48. package/dist/common/esbuildConfigs/web.js +57 -0
  49. package/dist/common/lib/abstractBase.js +553 -0
  50. package/dist/common/lib/basebuilder.js +79 -0
  51. package/dist/common/lib/classBuilder.js +42 -0
  52. package/dist/common/lib/core.js +75 -0
  53. package/dist/common/lib/index.js +22 -0
  54. package/dist/common/lib/types.js +2 -0
  55. package/dist/common/mongooseSchemas.js +56 -0
  56. package/dist/common/preload.js +14 -27
  57. package/dist/common/puppeteerConfiger.js +24 -0
  58. package/dist/common/report.html.js +31 -0
  59. package/dist/common/tsconfig.common.tsbuildinfo +1 -1
  60. package/dist/common/utils.js +16 -0
  61. package/dist/common/web.html.js +22 -0
  62. package/dist/module/ExampleTab.js +112 -0
  63. package/dist/module/Features.js +2 -35
  64. package/dist/module/Init.js +25 -0
  65. package/dist/module/Node.js +15 -66
  66. package/dist/module/PM/index.js +3 -0
  67. package/dist/module/PM/main.js +611 -0
  68. package/dist/module/PM/node.js +81 -0
  69. package/dist/module/PM/web.js +125 -0
  70. package/dist/module/Project.js +110 -615
  71. package/dist/module/Puppeteer.js +98 -0
  72. package/dist/module/Reporter.js +107 -0
  73. package/dist/module/Scheduler.js +1 -0
  74. package/dist/module/SubPackages/puppeteer.js +16 -0
  75. package/dist/module/{subPackages → SubPackages}/react/component/node.js +3 -3
  76. package/dist/module/{subPackages → SubPackages}/react/component/web.js +3 -3
  77. package/dist/module/SubPackages/react/jsx/index.js +19 -0
  78. package/dist/module/SubPackages/react/jsx/node.js +5 -0
  79. package/dist/module/SubPackages/react/jsx/web.js +5 -0
  80. package/dist/module/{subPackages → SubPackages}/react-dom/component/node.js +7 -7
  81. package/dist/module/SubPackages/react-dom/component/web.js +88 -0
  82. package/dist/module/SubPackages/react-dom/jsx/node.js +31 -0
  83. package/dist/module/SubPackages/react-dom/jsx/web.js +90 -0
  84. package/dist/module/SubPackages/react-test-renderer/MemoExoticComponent/node.js +16 -0
  85. package/dist/module/SubPackages/react-test-renderer/component/index.js +1 -0
  86. package/dist/module/SubPackages/react-test-renderer/component/interface.js +39 -0
  87. package/dist/module/{subPackages → SubPackages}/react-test-renderer/component/node.js +2 -2
  88. package/dist/module/{subPackages → SubPackages}/react-test-renderer/component/web.js +2 -2
  89. package/dist/module/{subPackages → SubPackages}/react-test-renderer/fc/node.js +3 -3
  90. package/dist/module/SubPackages/react-test-renderer/fc/web.js +22 -0
  91. package/dist/module/{subPackages → SubPackages}/react-test-renderer/jsx/index.js +7 -3
  92. package/dist/module/SubPackages/react-test-renderer/jsx/node.js +5 -0
  93. package/dist/module/SubPackages/react-test-renderer/jsx/web.js +5 -0
  94. package/dist/module/SubPackages/react-test-renderer/jsx-promised/index.js +16 -0
  95. package/dist/module/{subPackages/react-test-renderer/jsx → SubPackages/react-test-renderer/jsx-promised}/node.js +1 -1
  96. package/dist/module/TaskManBackEnd.js +169 -0
  97. package/dist/module/TaskManFrontEnd.js +600 -0
  98. package/dist/module/Web.js +31 -108
  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 +14 -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/preload.js +15 -26
  114. package/dist/module/puppeteerConfiger.js +19 -0
  115. package/dist/module/report.html.js +29 -0
  116. package/dist/module/tsconfig.module.tsbuildinfo +1 -1
  117. package/dist/module/utils.js +9 -0
  118. package/dist/module/web.html.js +20 -0
  119. package/dist/prebuild/TaskManBackEnd.mjs +174 -0
  120. package/dist/prebuild/TaskManFrontEnd.css +12301 -0
  121. package/dist/prebuild/TaskManFrontEnd.js +81264 -0
  122. package/dist/types/Features.d.ts +1 -34
  123. package/dist/types/Init.d.ts +2 -0
  124. package/dist/types/Node.d.ts +5 -11
  125. package/dist/types/PM/index.d.ts +20 -0
  126. package/dist/types/PM/main.d.ts +31 -0
  127. package/dist/types/PM/node.d.ts +27 -0
  128. package/dist/types/PM/web.d.ts +25 -0
  129. package/dist/types/Project.d.ts +3 -29
  130. package/dist/types/Puppeteer.d.ts +2 -0
  131. package/dist/types/Reporter.d.ts +1 -0
  132. package/dist/types/Scheduler.d.ts +0 -0
  133. package/dist/types/SubPackages/puppeteer.d.ts +6 -0
  134. package/dist/types/SubPackages/react/component/node.d.ts +7 -0
  135. package/dist/types/SubPackages/react/component/web.d.ts +7 -0
  136. package/dist/types/SubPackages/react/jsx/index.d.ts +12 -0
  137. package/dist/types/SubPackages/react/jsx/node.d.ts +4 -0
  138. package/dist/types/SubPackages/react/jsx/web.d.ts +4 -0
  139. package/dist/types/SubPackages/react-dom/component/node.d.ts +12 -0
  140. package/dist/types/SubPackages/react-dom/component/web.d.ts +11 -0
  141. package/dist/types/SubPackages/react-dom/jsx/index.d.ts +6 -0
  142. package/dist/types/SubPackages/react-dom/jsx/node.d.ts +6 -0
  143. package/dist/types/SubPackages/react-dom/jsx/web.d.ts +5 -0
  144. package/dist/types/SubPackages/react-test-renderer/MemoExoticComponent/node.d.ts +5 -0
  145. package/dist/types/SubPackages/react-test-renderer/component/index.d.ts +13 -0
  146. package/dist/types/SubPackages/react-test-renderer/component/interface.d.ts +9 -0
  147. package/dist/types/SubPackages/react-test-renderer/component/node.d.ts +8 -0
  148. package/dist/types/SubPackages/react-test-renderer/component/web.d.ts +3 -0
  149. package/dist/types/SubPackages/react-test-renderer/fc/node.d.ts +8 -0
  150. package/dist/types/SubPackages/react-test-renderer/fc/web.d.ts +8 -0
  151. package/dist/types/{subPackages → SubPackages}/react-test-renderer/jsx/index.d.ts +5 -4
  152. package/dist/types/SubPackages/react-test-renderer/jsx/node.d.ts +8 -0
  153. package/dist/types/SubPackages/react-test-renderer/jsx/web.d.ts +8 -0
  154. package/dist/types/SubPackages/react-test-renderer/jsx-promised/index.d.ts +15 -0
  155. package/dist/types/SubPackages/react-test-renderer/jsx-promised/node.d.ts +4 -0
  156. package/dist/types/SubPackages/react-test-renderer/jsx-promised/web.d.ts +4 -0
  157. package/dist/types/TaskManBackEnd.d.ts +3 -0
  158. package/dist/types/Types.d.ts +49 -16
  159. package/dist/types/Web.d.ts +5 -11
  160. package/dist/types/esbuildConfigs/features.d.ts +4 -0
  161. package/dist/types/esbuildConfigs/index.d.ts +4 -0
  162. package/dist/types/esbuildConfigs/inputFilesPlugin.d.ts +5 -0
  163. package/dist/types/esbuildConfigs/node.d.ts +4 -0
  164. package/dist/types/esbuildConfigs/report.d.ts +0 -0
  165. package/dist/types/esbuildConfigs/tests.d.ts +4 -0
  166. package/dist/types/esbuildConfigs/web.d.ts +4 -0
  167. package/dist/types/lib/abstractBase.d.ts +104 -0
  168. package/dist/types/lib/basebuilder.d.ts +27 -0
  169. package/dist/types/lib/classBuilder.d.ts +7 -0
  170. package/dist/types/lib/core.d.ts +8 -0
  171. package/dist/types/lib/index.d.ts +59 -0
  172. package/dist/types/lib/types.d.ts +62 -0
  173. package/dist/types/mongooseSchemas.d.ts +124 -0
  174. package/dist/types/preload.d.ts +0 -1
  175. package/dist/types/puppeteerConfiger.d.ts +4 -0
  176. package/dist/types/report.html.d.ts +2 -0
  177. package/dist/types/tsconfig.types.tsbuildinfo +1 -1
  178. package/dist/types/utils.d.ts +2 -0
  179. package/dist/types/web.html.d.ts +2 -0
  180. package/index.html +30 -0
  181. package/package.json +151 -79
  182. package/src/ExampleTab.tsx +219 -0
  183. package/src/Features.ts +2 -58
  184. package/src/Init.ts +51 -0
  185. package/src/Node.ts +71 -157
  186. package/src/PM/index.ts +25 -0
  187. package/src/PM/main.ts +830 -0
  188. package/src/PM/node.ts +128 -0
  189. package/src/PM/web.ts +166 -0
  190. package/src/Project.ts +158 -797
  191. package/src/Puppeteer.ts +141 -0
  192. package/src/Reporter.ts +126 -0
  193. package/src/Scheduler.ts +0 -0
  194. package/src/SubPackages/puppeteer.ts +51 -0
  195. package/src/SubPackages/react/component/node.ts +43 -0
  196. package/src/SubPackages/react/component/web.ts +43 -0
  197. package/src/SubPackages/react/jsx/index.ts +42 -0
  198. package/src/SubPackages/react/jsx/node.ts +26 -0
  199. package/src/SubPackages/react/jsx/web.ts +30 -0
  200. package/src/{subPackages → SubPackages}/react-dom/component/node.ts +24 -44
  201. package/src/SubPackages/react-dom/component/web.ts +143 -0
  202. package/src/SubPackages/react-dom/jsx/index.ts +6 -0
  203. package/src/SubPackages/react-dom/jsx/node.ts +68 -0
  204. package/src/SubPackages/react-dom/jsx/web.ts +139 -0
  205. package/src/SubPackages/react-test-renderer/MemoExoticComponent/node.ts +38 -0
  206. package/src/SubPackages/react-test-renderer/component/index.ts +23 -0
  207. package/src/SubPackages/react-test-renderer/component/interface.ts +48 -0
  208. package/src/SubPackages/react-test-renderer/component/node.ts +17 -0
  209. package/src/SubPackages/react-test-renderer/component/web.ts +17 -0
  210. package/src/SubPackages/react-test-renderer/fc/node.ts +49 -0
  211. package/src/SubPackages/react-test-renderer/fc/web.ts +48 -0
  212. package/src/SubPackages/react-test-renderer/jsx/index.ts +48 -0
  213. package/src/SubPackages/react-test-renderer/jsx/node.ts +20 -0
  214. package/src/SubPackages/react-test-renderer/jsx/web.ts +20 -0
  215. package/src/SubPackages/react-test-renderer/jsx-promised/index.ts +40 -0
  216. package/src/SubPackages/react-test-renderer/jsx-promised/node.ts +19 -0
  217. package/src/SubPackages/react-test-renderer/jsx-promised/web.ts +22 -0
  218. package/src/TaskManBackEnd.ts +228 -0
  219. package/src/TaskManFrontEnd.tsx +1222 -0
  220. package/src/Types.ts +222 -17
  221. package/src/Web.ts +86 -217
  222. package/src/cjs-shim.js +12 -0
  223. package/src/esbuildConfigs/features.ts +17 -0
  224. package/src/esbuildConfigs/index.ts +23 -0
  225. package/src/esbuildConfigs/inputFilesPlugin.ts +65 -0
  226. package/src/esbuildConfigs/node.ts +62 -0
  227. package/src/esbuildConfigs/report.ts +15 -0
  228. package/src/esbuildConfigs/tests.ts +14 -0
  229. package/src/esbuildConfigs/web.ts +79 -0
  230. package/src/lib/abstractBase.ts +910 -0
  231. package/src/lib/basebuilder.ts +214 -0
  232. package/src/lib/classBuilder.ts +131 -0
  233. package/src/lib/core.ts +224 -0
  234. package/src/lib/index.ts +226 -0
  235. package/src/lib/types.ts +303 -0
  236. package/src/mongooseSchemas.ts +105 -0
  237. package/src/preload.ts +14 -28
  238. package/src/puppeteerConfiger.ts +26 -0
  239. package/src/report.html.ts +29 -0
  240. package/src/utils.ts +15 -0
  241. package/src/web.html.ts +20 -0
  242. package/tests/Rectangle.test.ts +189 -0
  243. package/trash/TaskMan.Dockerfile +23 -0
  244. package/trash/TaskMan1.Dockerfile +43 -0
  245. package/trash/devBot.dockerfile +12 -0
  246. package/trash/docker-compose-dev.yml +9 -0
  247. package/trash/docker-compose-prod.yml +18 -0
  248. package/trash/electronBuild.ts +32 -0
  249. package/tsconfig.json +18 -6
  250. package/tsconfig.module.json +14 -4
  251. package/tsconfig.types.json +13 -4
  252. package/dist/common/NodeWriter.js +0 -56
  253. package/dist/common/core.js +0 -396
  254. package/dist/common/electron.js +0 -52
  255. package/dist/common/subPackages/react/jsx/index.js +0 -26
  256. package/dist/common/subPackages/react-dom/component/node.js +0 -101
  257. package/dist/common/subPackages/react-dom/component/web.js +0 -61
  258. package/dist/common/subPackages/react-dom/jsx/web.js +0 -76
  259. package/dist/common/subPackages/react-test-renderer/component/node.js +0 -8
  260. package/dist/common/subPackages/react-test-renderer/component/web.js +0 -8
  261. package/dist/module/NodeWriter.js +0 -50
  262. package/dist/module/Report.js +0 -186
  263. package/dist/module/core.js +0 -387
  264. package/dist/module/electron.js +0 -47
  265. package/dist/module/subPackages/react/jsx/index.js +0 -22
  266. package/dist/module/subPackages/react/jsx/node.js +0 -5
  267. package/dist/module/subPackages/react/jsx/web.js +0 -5
  268. package/dist/module/subPackages/react-dom/component/web.js +0 -56
  269. package/dist/module/subPackages/react-dom/jsx/node.js +0 -93
  270. package/dist/module/subPackages/react-dom/jsx/web.js +0 -48
  271. package/dist/module/subPackages/react-test-renderer/component/index.js +0 -52
  272. package/dist/types/NodeWriter.d.ts +0 -2
  273. package/dist/types/core.d.ts +0 -220
  274. package/dist/types/subPackages/react/component/node.d.ts +0 -12
  275. package/dist/types/subPackages/react/component/web.d.ts +0 -12
  276. package/dist/types/subPackages/react/jsx/index.d.ts +0 -15
  277. package/dist/types/subPackages/react/jsx/node.d.ts +0 -4
  278. package/dist/types/subPackages/react/jsx/web.d.ts +0 -4
  279. package/dist/types/subPackages/react-dom/component/node.d.ts +0 -14
  280. package/dist/types/subPackages/react-dom/component/web.d.ts +0 -19
  281. package/dist/types/subPackages/react-dom/jsx/node.d.ts +0 -14
  282. package/dist/types/subPackages/react-dom/jsx/web.d.ts +0 -15
  283. package/dist/types/subPackages/react-test-renderer/component/index.d.ts +0 -20
  284. package/dist/types/subPackages/react-test-renderer/component/node.d.ts +0 -9
  285. package/dist/types/subPackages/react-test-renderer/component/web.d.ts +0 -9
  286. package/dist/types/subPackages/react-test-renderer/jsx/node.d.ts +0 -4
  287. package/dist/types/subPackages/react-test-renderer/jsx/web.d.ts +0 -4
  288. package/src/NodeWriter.ts +0 -72
  289. package/src/Report.tsx +0 -392
  290. package/src/core.ts +0 -1396
  291. package/src/electron.ts +0 -59
  292. package/src/subPackages/react/component/node.ts +0 -75
  293. package/src/subPackages/react/component/web.ts +0 -80
  294. package/src/subPackages/react/jsx/index.ts +0 -64
  295. package/src/subPackages/react/jsx/node.ts +0 -29
  296. package/src/subPackages/react/jsx/web.ts +0 -29
  297. package/src/subPackages/react-dom/component/web.ts +0 -129
  298. package/src/subPackages/react-dom/jsx/node.ts +0 -150
  299. package/src/subPackages/react-dom/jsx/web.ts +0 -117
  300. package/src/subPackages/react-test-renderer/component/index.ts +0 -101
  301. package/src/subPackages/react-test-renderer/component/node.ts +0 -30
  302. package/src/subPackages/react-test-renderer/component/web.ts +0 -30
  303. package/src/subPackages/react-test-renderer/fc/node.tsx +0 -77
  304. package/src/subPackages/react-test-renderer/jsx/index.ts +0 -51
  305. package/src/subPackages/react-test-renderer/jsx/node.ts +0 -31
  306. package/src/subPackages/react-test-renderer/jsx/web.ts +0 -31
  307. /package/dist/common/{subPackages/react-test-renderer/jsx → SubPackages/react-test-renderer/jsx-promised}/web.js +0 -0
  308. /package/dist/{types/electron.d.ts → module/SubPackages/react-dom/jsx/index.js} +0 -0
  309. /package/dist/module/{subPackages/react-test-renderer/jsx → SubPackages/react-test-renderer/jsx-promised}/web.js +0 -0
package/src/PM/main.ts ADDED
@@ -0,0 +1,830 @@
1
+ import fs from "fs";
2
+ import path from "path";
3
+ import puppeteer, { Page, ScreenshotOptions } from "puppeteer-core";
4
+ import { PassThrough } from "stream";
5
+
6
+ import { IBuiltConfig, ITestTypes } from "../lib/types";
7
+
8
+ import { PM } from "./index.js";
9
+ import { destinationOfRuntime } from "../utils.js";
10
+ import { ITLog } from "../lib/index.js";
11
+
12
+ type IFPaths = string[];
13
+
14
+ const fPaths: IFPaths = [];
15
+ const fileStreams3: fs.WriteStream[] = [];
16
+ const files: Record<string, Set<string>> = {}; // = new Set<string>();
17
+ const screenshots: Record<string, Promise<Uint8Array>[]> = {};
18
+
19
+ export class PM_Main extends PM {
20
+ customScreenShot(opts: object) {
21
+ throw new Error("Method not implemented.");
22
+ }
23
+ configs: IBuiltConfig;
24
+ ports: Record<number, boolean>;
25
+ queue: any[];
26
+
27
+ constructor(configs: IBuiltConfig) {
28
+ super();
29
+ this.server = {};
30
+ this.configs = configs;
31
+ this.ports = {};
32
+ this.configs.ports.forEach((element) => {
33
+ this.ports[element] = "true"; // set ports as open
34
+ });
35
+
36
+ globalThis["mkdirSync"] = (fp: string) => {
37
+ if (!fs.existsSync(fp)) {
38
+ return fs.mkdirSync(fp, {
39
+ recursive: true,
40
+ });
41
+ }
42
+ return false;
43
+ };
44
+
45
+ globalThis["writeFileSync"] = (
46
+ filepath: string,
47
+ contents: string,
48
+ testName: string
49
+ ) => {
50
+ console.log("globalThis-writeFileSync", filepath);
51
+
52
+ // Create directories if they don't exist
53
+ const dir = path.dirname(filepath.split("/").slice(0, -1).join("/"));
54
+
55
+ fs.mkdirSync(dir, {
56
+ recursive: true,
57
+ });
58
+ if (!files[testName]) {
59
+ files[testName] = new Set();
60
+ }
61
+ files[testName].add(filepath);
62
+ return fs.writeFileSync(filepath, contents);
63
+ };
64
+
65
+ globalThis["createWriteStream"] = (filepath: string, testName: string) => {
66
+ const f = fs.createWriteStream(filepath);
67
+ fileStreams3.push(f);
68
+ // files.add(filepath);
69
+ if (!files[testName]) {
70
+ files[testName] = new Set();
71
+ }
72
+ files[testName].add(filepath);
73
+ return {
74
+ ...JSON.parse(JSON.stringify(f)),
75
+ uid: fileStreams3.length - 1,
76
+ };
77
+ };
78
+
79
+ globalThis["write"] = (uid: number, contents: string) => {
80
+ fileStreams3[uid].write(contents);
81
+ };
82
+
83
+ globalThis["end"] = (uid: number) => {
84
+ fileStreams3[uid].end();
85
+ };
86
+
87
+ globalThis["customScreenShot"] = async (
88
+ opts: { path: string },
89
+ page: Page
90
+ ) => {
91
+ // // fileStreams3[uid].write(contents);
92
+ // // console.log("asd", opts.path.split("/").slice(0, -1).join("/"));
93
+
94
+ // // const dir = path.dirname(opts.path.split("/").slice(0, -1).join("/"));
95
+ // // console.log("dir", dir);
96
+ // fs.mkdirSync(opts.path.split("/").slice(0, -1).join("/"), {
97
+ // recursive: true,
98
+ // });
99
+
100
+ // return page.screenshot(opts);
101
+
102
+ console.log("main.ts node custom-screenshot", page);
103
+ const p = opts.path as string;
104
+ const dir = path.dirname(p);
105
+ fs.mkdirSync(dir, {
106
+ recursive: true,
107
+ });
108
+ if (!files[opts.path]) {
109
+ files[opts.path] = new Set();
110
+ }
111
+ files[opts.path].add(opts.path as string);
112
+
113
+ const sPromise = page.screenshot({
114
+ ...opts,
115
+ path: p,
116
+ });
117
+
118
+ if (!screenshots[opts.path]) {
119
+ screenshots[opts.path] = [];
120
+ }
121
+ screenshots[opts.path].push(sPromise);
122
+
123
+ await sPromise;
124
+ return sPromise;
125
+ };
126
+
127
+ globalThis["customclose"] = (p: string, testName: string) => {
128
+ if (!files[testName]) {
129
+ files[testName] = new Set();
130
+ }
131
+
132
+ fs.writeFileSync(
133
+ p + "/manifest.json",
134
+ JSON.stringify(Array.from(files[testName]))
135
+ );
136
+ delete files[testName];
137
+ // globalThis["writeFileSync"](
138
+ // p + "/manifest.json",
139
+ // // files.entries()
140
+ // JSON.stringify(Array.from(files[testName]))
141
+ // );
142
+
143
+ // fileStreams3[uid].end();
144
+ };
145
+ // page.exposeFunction("customclose", () => {
146
+ // console.log("closing doneFileStream2", doneFileStream2);
147
+ // // console.log("closing doneFileStream2", doneFileStream2);
148
+ // Promise.all([...doneFileStream2, ...screenshots2]).then(() => {
149
+ // page.close();
150
+ // });
151
+
152
+ // // page.close();
153
+ // // Promise.all(screenshots).then(() => {
154
+ // // page.close();
155
+ // // });
156
+ // // setTimeout(() => {
157
+ // // console.log("Delayed for 1 second.");
158
+ // // page.close();
159
+ // // }, 5000);
160
+
161
+ // // return page.close();
162
+ // });
163
+ }
164
+
165
+ async startPuppeteer(options: any, destfolder: string): Promise<any> {
166
+ this.browser = await puppeteer.launch(options);
167
+ return this.browser;
168
+ }
169
+
170
+ launchNode = async (src: string, dest: string) => {
171
+ console.log("launchNode", src);
172
+
173
+ const destFolder = dest.replace(".mjs", "");
174
+
175
+ let argz = "";
176
+
177
+ const testConfig = this.configs.tests.find((t) => {
178
+ return t[0] === src;
179
+ });
180
+
181
+ if (!testConfig) {
182
+ console.error("missing test config");
183
+ process.exit(-1);
184
+ }
185
+ const testConfigResource = testConfig[2];
186
+
187
+ let portsToUse: string[] = [];
188
+ if (testConfigResource.ports === 0) {
189
+ argz = JSON.stringify({
190
+ scheduled: true,
191
+ name: src,
192
+ ports: portsToUse,
193
+ fs: destFolder,
194
+ browserWSEndpoint: this.browser.wsEndpoint(),
195
+ });
196
+ } else if (testConfigResource.ports > 0) {
197
+ const openPorts = Object.entries(this.ports).filter(
198
+ ([portnumber, portopen]) => portopen
199
+ );
200
+ console.log("openPorts", openPorts);
201
+ if (openPorts.length >= testConfigResource.ports) {
202
+ for (let i = 0; i < testConfigResource.ports; i++) {
203
+ portsToUse.push(openPorts[i][0]);
204
+
205
+ this.ports[openPorts[i][0]] = false; // port is now closed
206
+ }
207
+
208
+ argz = JSON.stringify({
209
+ scheduled: true,
210
+ name: src,
211
+ // ports: [3333],
212
+ ports: portsToUse,
213
+ fs: destFolder,
214
+ browserWSEndpoint: this.browser.wsEndpoint(),
215
+ });
216
+ } else {
217
+ this.queue.push(src);
218
+ return;
219
+ }
220
+ } else {
221
+ console.error("negative port makes no sense", src);
222
+ process.exit(-1);
223
+ }
224
+
225
+ const builtfile = dest + ".mjs";
226
+
227
+ await Promise.all(
228
+ testConfig[3].map((sidecar) => {
229
+ if (sidecar[1] === "web") {
230
+ return this.launchWebSideCar(
231
+ sidecar[0],
232
+ destinationOfRuntime(sidecar[0], "web", this.configs),
233
+ sidecar
234
+ );
235
+ }
236
+
237
+ if (sidecar[1] === "node") {
238
+ return this.launchNodeSideCar(
239
+ sidecar[0],
240
+ destinationOfRuntime(sidecar[0], "node", this.configs),
241
+ sidecar
242
+ );
243
+ }
244
+ })
245
+ );
246
+
247
+ this.server[builtfile] = await import(
248
+ `${builtfile}?cacheBust=${Date.now()}`
249
+ ).then((module) => {
250
+ return module.default.then((defaultModule) => {
251
+ defaultModule
252
+ .receiveTestResourceConfig(argz)
253
+ .then((x) => {
254
+ console.log("then", x);
255
+
256
+ return x;
257
+ })
258
+ .catch((e) => {
259
+ console.log("catch", e);
260
+ });
261
+ });
262
+ });
263
+
264
+ console.log("portsToUse", portsToUse);
265
+ for (let i = 0; i <= portsToUse.length; i++) {
266
+ if (portsToUse[i]) {
267
+ this.ports[portsToUse[i]] = "true"; //port is open again
268
+ }
269
+ }
270
+ };
271
+
272
+ launchWebSideCar = async (
273
+ src: string,
274
+ dest: string,
275
+ testConfig: ITestTypes
276
+ ) => {
277
+ const d = dest + ".mjs";
278
+ console.log("launchWebSideCar", src, dest, d);
279
+ const destFolder = dest.replace(".mjs", "");
280
+ const webArgz = JSON.stringify({
281
+ name: dest,
282
+ ports: [].toString(),
283
+ fs: destFolder,
284
+ browserWSEndpoint: this.browser.wsEndpoint(),
285
+ });
286
+
287
+ const evaluation = `
288
+ console.log("importing ${dest}.mjs");
289
+ import('${dest}.mjs').then(async (x) => {
290
+ console.log("imported", x.default);
291
+ })`;
292
+
293
+ const fileStreams2: fs.WriteStream[] = [];
294
+ const doneFileStream2: Promise<any>[] = [];
295
+
296
+ return new Promise((res, rej) => {
297
+ this.browser
298
+ .newPage()
299
+ .then((page) => {
300
+ page.on("console", (msg) => {
301
+ console.log("web > ", msg.args(), msg.text());
302
+ // for (let i = 0; i < msg._args.length; ++i)
303
+ // console.log(`${i}: ${msg._args[i]}`);
304
+ });
305
+
306
+ page.exposeFunction(
307
+ "custom-screenshot",
308
+ async (ssOpts: ScreenshotOptions, testName: string) => {
309
+ console.log("main.ts browser custom-screenshot", testName);
310
+ const p = ssOpts.path as string;
311
+ const dir = path.dirname(p);
312
+ fs.mkdirSync(dir, {
313
+ recursive: true,
314
+ });
315
+ files[testName].add(ssOpts.path as string);
316
+
317
+ const sPromise = page.screenshot({
318
+ ...ssOpts,
319
+ path: p,
320
+ });
321
+
322
+ if (!screenshots[testName]) {
323
+ screenshots[testName] = [];
324
+ }
325
+ screenshots[testName].push(sPromise);
326
+ // sPromise.then(())
327
+ await sPromise;
328
+ return sPromise;
329
+ // page.evaluate(`window["screenshot done"]`);
330
+ }
331
+ );
332
+
333
+ page.exposeFunction(
334
+ "writeFileSync",
335
+ (fp: string, contents: string, testName: string) => {
336
+ const dir = path.dirname(fp);
337
+
338
+ fs.mkdirSync(dir, {
339
+ recursive: true,
340
+ });
341
+
342
+ const p = new Promise<string>(async (res, rej) => {
343
+ fs.writeFileSync(fp, contents);
344
+ res(fp);
345
+ });
346
+ doneFileStream2.push(p);
347
+
348
+ if (!files[testName]) {
349
+ files[testName] = new Set();
350
+ }
351
+ files[testName].add(fp);
352
+ return p;
353
+ }
354
+ );
355
+
356
+ page.exposeFunction("existsSync", (fp: string, contents: string) => {
357
+ return fs.existsSync(fp);
358
+ });
359
+
360
+ page.exposeFunction("mkdirSync", (fp: string) => {
361
+ if (!fs.existsSync(fp)) {
362
+ return fs.mkdirSync(fp, {
363
+ recursive: true,
364
+ });
365
+ }
366
+ return false;
367
+ });
368
+
369
+ page.exposeFunction(
370
+ "createWriteStream",
371
+ (fp: string, testName: string) => {
372
+ const f = fs.createWriteStream(fp);
373
+
374
+ if (!files[testName]) {
375
+ files[testName] = new Set();
376
+ }
377
+ files[testName].add(fp);
378
+
379
+ const p = new Promise<string>((res, rej) => {
380
+ res(fp);
381
+ });
382
+ doneFileStream2.push(p);
383
+ f.on("close", async () => {
384
+ await p;
385
+ });
386
+ fileStreams2.push(f);
387
+ return {
388
+ ...JSON.parse(JSON.stringify(f)),
389
+ uid: fileStreams2.length - 1,
390
+ };
391
+ }
392
+ );
393
+
394
+ page.exposeFunction(
395
+ "write",
396
+ async (uid: number, contents: string) => {
397
+ return fileStreams2[uid].write(contents);
398
+ }
399
+ );
400
+
401
+ page.exposeFunction("end", async (uid: number) => {
402
+ return fileStreams2[uid].end();
403
+ });
404
+
405
+ page.exposeFunction("customclose", (p: string, testName: string) => {
406
+ fs.writeFileSync(
407
+ p + "/manifest.json",
408
+ JSON.stringify(Array.from(files[testName]))
409
+ );
410
+ delete files[testName];
411
+
412
+ Promise.all(screenshots[testName] || []).then(() => {
413
+ delete screenshots[testName];
414
+ page.close();
415
+ });
416
+
417
+ // globalThis["writeFileSync"](
418
+ // p + "/manifest.json",
419
+ // // files.entries()
420
+ // JSON.stringify(Array.from(files[testName]))
421
+ // );
422
+
423
+ // console.log("closing doneFileStream2", doneFileStream2);
424
+ // console.log("closing doneFileStream2", doneFileStream2);
425
+ // Promise.all([...doneFileStream2, ...screenshots2]).then(() => {
426
+ // page.close();
427
+ // });
428
+
429
+ // Promise.all(screenshots).then(() => {
430
+ // page.close();
431
+ // });
432
+ // setTimeout(() => {
433
+ // console.log("Delayed for 1 second.");
434
+ // page.close();
435
+ // }, 5000);
436
+
437
+ // return page.close();
438
+ });
439
+
440
+ return page;
441
+ })
442
+ .then(async (page) => {
443
+ page.on("console", (log) =>
444
+ console.debug(`Log from client: [${log.text()}] `)
445
+ );
446
+ await page.goto(`file://${`${dest}.html`}`, {});
447
+ res(page);
448
+
449
+ // page.evaluate(evaluation).finally(() => {
450
+ // console.log("evaluation failed.", dest);
451
+ // });
452
+
453
+ // return page;
454
+ });
455
+ });
456
+ };
457
+
458
+ // launchNodeSideCar = async (src: string, dest: string) => {};
459
+ launchNodeSideCar = async (
460
+ src: string,
461
+ dest: string,
462
+ testConfig: ITestTypes
463
+ ) => {
464
+ const d = dest + ".mjs";
465
+ console.log("launchNodeSideCar", src, dest, d);
466
+
467
+ const destFolder = dest.replace(".mjs", "");
468
+
469
+ let argz = "";
470
+
471
+ // const testConfig = this.configs.tests.find((t) => {
472
+ // return t[0] === src;
473
+ // });
474
+
475
+ // if (!testConfig) {
476
+ // console.error("missing test config");
477
+ // process.exit(-1);
478
+ // }
479
+ const testConfigResource = testConfig[2];
480
+
481
+ let portsToUse: string[] = [];
482
+ if (testConfigResource.ports === 0) {
483
+ argz = JSON.stringify({
484
+ scheduled: true,
485
+ name: src,
486
+ ports: portsToUse,
487
+ fs: destFolder,
488
+ browserWSEndpoint: this.browser.wsEndpoint(),
489
+ });
490
+ } else if (testConfigResource.ports > 0) {
491
+ const openPorts = Object.entries(this.ports).filter(
492
+ ([portnumber, portopen]) => portopen
493
+ );
494
+ console.log("openPorts", openPorts);
495
+ if (openPorts.length >= testConfigResource.ports) {
496
+ for (let i = 0; i < testConfigResource.ports; i++) {
497
+ portsToUse.push(openPorts[i][0]);
498
+
499
+ this.ports[openPorts[i][0]] = false; // port is now closed
500
+ }
501
+
502
+ argz = JSON.stringify({
503
+ scheduled: true,
504
+ name: src,
505
+ // ports: [3333],
506
+ ports: portsToUse,
507
+ fs: ".",
508
+ browserWSEndpoint: this.browser.wsEndpoint(),
509
+ });
510
+ } else {
511
+ this.queue.push(src);
512
+ return;
513
+ }
514
+ } else {
515
+ console.error("negative port makes no sense", src);
516
+ process.exit(-1);
517
+ }
518
+
519
+ const builtfile = dest + ".mjs";
520
+
521
+ // console.log(
522
+ // "node builtfile",
523
+ // (await import(`${builtfile}?cacheBust=${Date.now()}`)).default
524
+ // );
525
+ this.server[builtfile] = await import(
526
+ `${builtfile}?cacheBust=${Date.now()}`
527
+ ).then((module) => {
528
+ return module.default.then((defaultModule) => {
529
+ console.log("defaultModule", defaultModule);
530
+ const s = new defaultModule();
531
+ s.receiveTestResourceConfig(argz);
532
+ // Object.create(defaultModule);
533
+
534
+ // defaultModule
535
+ // .receiveTestResourceConfig(argz)
536
+ // .then((x) => {
537
+ // console.log("then", x);
538
+ // return x;
539
+ // })
540
+ // .catch((e) => {
541
+ // console.log("catch", e);
542
+ // });
543
+ });
544
+ });
545
+
546
+ console.log("portsToUse", portsToUse);
547
+ for (let i = 0; i <= portsToUse.length; i++) {
548
+ if (portsToUse[i]) {
549
+ this.ports[portsToUse[i]] = "true"; //port is open again
550
+ }
551
+ }
552
+ };
553
+
554
+ launchWeb = (t: string, dest: string, sidecars: ITestTypes[]) => {
555
+ console.log("launchWeb", t, dest);
556
+
557
+ sidecars.map((sidecar) => {
558
+ if (sidecar[1] === "node") {
559
+ return this.launchNodeSideCar(
560
+ sidecar[0],
561
+ destinationOfRuntime(sidecar[0], "node", this.configs),
562
+ sidecar
563
+ );
564
+ }
565
+ });
566
+
567
+ const destFolder = dest.replace(".mjs", "");
568
+
569
+ const webArgz = JSON.stringify({
570
+ name: dest,
571
+ ports: [].toString(),
572
+ fs: destFolder,
573
+ browserWSEndpoint: this.browser.wsEndpoint(),
574
+ });
575
+
576
+ const evaluation = `
577
+ console.log("importing ${dest}.mjs");
578
+ import('${dest}.mjs').then(async (x) => {
579
+ console.log("imported", x.default);
580
+ try {
581
+ await (await x.default).receiveTestResourceConfig(${webArgz})
582
+ } catch (e) {
583
+ console.log("fail", e)
584
+ }
585
+ })`;
586
+
587
+ const fileStreams2: fs.WriteStream[] = [];
588
+ const doneFileStream2: Promise<any>[] = [];
589
+
590
+ this.browser
591
+ .newPage()
592
+ .then((page) => {
593
+ page.on("console", (msg) => {
594
+ console.log("web > ", msg.args(), msg.text());
595
+ // for (let i = 0; i < msg._args.length; ++i)
596
+ // console.log(`${i}: ${msg._args[i]}`);
597
+ });
598
+
599
+ page.exposeFunction(
600
+ "customScreenShot",
601
+ async (ssOpts: ScreenshotOptions, testName: string) => {
602
+ console.log("main.ts browser custom-screenshot", testName);
603
+ const p = ssOpts.path as string;
604
+ const dir = path.dirname(p);
605
+ fs.mkdirSync(dir, {
606
+ recursive: true,
607
+ });
608
+ if (!files[testName]) {
609
+ files[testName] = new Set();
610
+ }
611
+ files[testName].add(ssOpts.path as string);
612
+
613
+ const sPromise = page.screenshot({
614
+ ...ssOpts,
615
+ path: p,
616
+ });
617
+
618
+ if (!screenshots[testName]) {
619
+ screenshots[testName] = [];
620
+ }
621
+ screenshots[testName].push(sPromise);
622
+ // sPromise.then(())
623
+ await sPromise;
624
+ return sPromise;
625
+ // page.evaluate(`window["screenshot done"]`);
626
+ }
627
+ );
628
+
629
+ page.exposeFunction(
630
+ "writeFileSync",
631
+ (fp: string, contents: string, testName: string) => {
632
+ const dir = path.dirname(fp);
633
+
634
+ fs.mkdirSync(dir, {
635
+ recursive: true,
636
+ });
637
+
638
+ const p = new Promise<string>(async (res, rej) => {
639
+ fs.writeFileSync(fp, contents);
640
+ res(fp);
641
+ });
642
+ doneFileStream2.push(p);
643
+
644
+ if (!files[testName]) {
645
+ files[testName] = new Set();
646
+ }
647
+ files[testName].add(fp);
648
+ return p;
649
+ }
650
+ );
651
+
652
+ page.exposeFunction("existsSync", (fp: string, contents: string) => {
653
+ return fs.existsSync(fp);
654
+ });
655
+
656
+ page.exposeFunction("mkdirSync", (fp: string) => {
657
+ if (!fs.existsSync(fp)) {
658
+ return fs.mkdirSync(fp, {
659
+ recursive: true,
660
+ });
661
+ }
662
+ return false;
663
+ });
664
+
665
+ page.exposeFunction(
666
+ "createWriteStream",
667
+ (fp: string, testName: string) => {
668
+ const f = fs.createWriteStream(fp);
669
+
670
+ if (!files[testName]) {
671
+ files[testName] = new Set();
672
+ }
673
+ files[testName].add(fp);
674
+
675
+ const p = new Promise<string>((res, rej) => {
676
+ res(fp);
677
+ });
678
+ doneFileStream2.push(p);
679
+ f.on("close", async () => {
680
+ await p;
681
+ });
682
+ fileStreams2.push(f);
683
+ return {
684
+ ...JSON.parse(JSON.stringify(f)),
685
+ uid: fileStreams2.length - 1,
686
+ };
687
+ }
688
+ );
689
+
690
+ page.exposeFunction("write", async (uid: number, contents: string) => {
691
+ return fileStreams2[uid].write(contents);
692
+ });
693
+
694
+ page.exposeFunction("end", async (uid: number) => {
695
+ return fileStreams2[uid].end();
696
+ });
697
+
698
+ page.exposeFunction("customclose", (p: string, testName: string) => {
699
+ console.log("\t closing", p);
700
+
701
+ fs.writeFileSync(
702
+ p + "/manifest.json",
703
+ JSON.stringify(Array.from(files[testName]))
704
+ );
705
+ delete files[testName];
706
+
707
+ Promise.all(screenshots[testName] || []).then(() => {
708
+ delete screenshots[testName];
709
+ page.close();
710
+ });
711
+
712
+ // globalThis["writeFileSync"](
713
+ // p + "/manifest.json",
714
+ // // files.entries()
715
+ // JSON.stringify(Array.from(files[testName]))
716
+ // );
717
+
718
+ // console.log("closing doneFileStream2", doneFileStream2);
719
+ // console.log("closing doneFileStream2", doneFileStream2);
720
+ // Promise.all([...doneFileStream2, ...screenshots2]).then(() => {
721
+ // page.close();
722
+ // });
723
+
724
+ // Promise.all(screenshots).then(() => {
725
+ // page.close();
726
+ // });
727
+ // setTimeout(() => {
728
+ // console.log("Delayed for 1 second.");
729
+ // page.close();
730
+ // }, 5000);
731
+
732
+ // return page.close();
733
+ });
734
+
735
+ return page;
736
+ })
737
+ .then(async (page) => {
738
+ page.on("console", (log) =>
739
+ console.debug(`Log from client: [${log.text()}] `)
740
+ );
741
+ await page.goto(`file://${`${dest}.html`}`, {});
742
+
743
+ page.evaluate(evaluation).finally(() => {
744
+ console.log("evaluation failed.", dest);
745
+ });
746
+
747
+ return page;
748
+ });
749
+ };
750
+
751
+ end(accessObject: { uid: number }): boolean {
752
+ throw new Error("Method not implemented.");
753
+ }
754
+
755
+ existsSync(destFolder: string): boolean {
756
+ return fs.existsSync(destFolder);
757
+ }
758
+
759
+ async mkdirSync(fp: string) {
760
+ if (!fs.existsSync(fp)) {
761
+ return fs.mkdirSync(fp, {
762
+ recursive: true,
763
+ });
764
+ }
765
+ return false;
766
+ }
767
+
768
+ writeFileSync(fp: string, contents: string) {
769
+ fs.writeFileSync(fp, contents);
770
+ }
771
+
772
+ createWriteStream(filepath: string): fs.WriteStream {
773
+ return fs.createWriteStream(filepath);
774
+ }
775
+
776
+ testArtiFactoryfileWriter(tLog: ITLog, callback: (Promise) => void) {
777
+ return (fPath, value: string | Buffer | PassThrough) => {
778
+ callback(
779
+ new Promise<void>((res, rej) => {
780
+ tLog("testArtiFactory =>", fPath);
781
+
782
+ const cleanPath = path.resolve(fPath);
783
+ fPaths.push(cleanPath.replace(process.cwd(), ``));
784
+
785
+ const targetDir = cleanPath.split("/").slice(0, -1).join("/");
786
+
787
+ fs.mkdir(targetDir, { recursive: true }, async (error) => {
788
+ if (error) {
789
+ console.error(`❗️testArtiFactory failed`, targetDir, error);
790
+ }
791
+
792
+ fs.writeFileSync(
793
+ path.resolve(
794
+ targetDir.split("/").slice(0, -1).join("/"),
795
+ "manifest"
796
+ ),
797
+ fPaths.join(`\n`),
798
+ {
799
+ encoding: "utf-8",
800
+ }
801
+ );
802
+
803
+ if (Buffer.isBuffer(value)) {
804
+ fs.writeFileSync(fPath, value, "binary");
805
+ res();
806
+ } else if (`string` === typeof value) {
807
+ fs.writeFileSync(fPath, value.toString(), {
808
+ encoding: "utf-8",
809
+ });
810
+ res();
811
+ } else {
812
+ /* @ts-ignore:next-line */
813
+ const pipeStream: PassThrough = value;
814
+ const myFile = fs.createWriteStream(fPath);
815
+ pipeStream.pipe(myFile);
816
+ pipeStream.on("close", () => {
817
+ myFile.close();
818
+ res();
819
+ });
820
+ }
821
+ });
822
+ })
823
+ );
824
+ };
825
+ }
826
+
827
+ write(accessObject: { uid: number }, contents: string): boolean {
828
+ throw new Error("Method not implemented.");
829
+ }
830
+ }