testeranto 0.129.0 → 0.135.0

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 (403) hide show
  1. package/.aider.chat.history.md +137798 -0
  2. package/.aider.input.history +370 -0
  3. package/.aider.tags.cache.v3/{ec/c0/161c249c35be853cc40cf11f9267.val → 62/f5/8af72140d93c58db2f6aa5bf3f1f.val} +0 -0
  4. package/.aider.tags.cache.v3/8e/ec/2d4659a1589a0187a757ab1cbefa.val +0 -0
  5. package/.aider.tags.cache.v3/{b7/e6/5be87b62aeaf2bc244ff41c1b61a.val → a7/97/6d37fce350ad2d588f36729db0cd.val} +0 -0
  6. package/.aider.tags.cache.v3/{e3/e6/3501625caf5d5eb171f0d248462e.val → ad/3c/10f2ab1397f6d544e613d2a6acaf.val} +0 -0
  7. package/.aider.tags.cache.v3/cache.db +0 -0
  8. package/.aider.tags.cache.v3/d8/b0/a8966fcd65890fd9f70d7afe8141.val +0 -0
  9. package/.aider.tags.cache.v3/dd/5b/0ade824b0841c7c11e9352c5d2ca.val +0 -0
  10. package/README.md +194 -182
  11. package/bundle.js +8 -75
  12. package/dist/common/src/Init.js +6 -1
  13. package/dist/common/src/Node.js +6 -4
  14. package/dist/common/src/NodeSidecar.js +15 -0
  15. package/dist/common/src/PM/PM_WithEslintAndTsc.js +189 -0
  16. package/dist/common/src/PM/__tests__/nodeSidecar.testeranto.js +109 -0
  17. package/dist/common/src/PM/__tests__/pureSidecar.testeranto.js +94 -0
  18. package/dist/common/src/PM/__tests__/webSidecar.testeranto.js +94 -0
  19. package/dist/common/src/PM/base.js +33 -16
  20. package/dist/common/src/PM/main.js +492 -428
  21. package/dist/common/src/PM/node.js +54 -22
  22. package/dist/common/src/PM/nodeSidecar.js +65 -0
  23. package/dist/common/src/PM/pure.js +55 -47
  24. package/dist/common/src/PM/pureSidecar.js +48 -0
  25. package/dist/common/src/PM/sidecar.js +11 -0
  26. package/dist/common/src/PM/web.js +24 -6
  27. package/dist/common/src/PM/webSidecar.js +47 -0
  28. package/dist/common/src/PureSidecar.js +13 -0
  29. package/dist/common/src/SP__Polygon.test.js +10 -0
  30. package/dist/common/src/WebSidecar.js +14 -0
  31. package/dist/common/src/build.js +66 -12
  32. package/dist/common/src/defaultConfig.js +1 -0
  33. package/dist/common/src/esbuildConfigs/consoleDetectorPlugin.js +27 -0
  34. package/dist/common/src/esbuildConfigs/eslint-formatter-testeranto.js +16 -1
  35. package/dist/common/src/esbuildConfigs/node.js +2 -16
  36. package/dist/common/src/esbuildConfigs/pure.js +12 -12
  37. package/dist/common/src/esbuildConfigs/rebuildPlugin.js +22 -0
  38. package/dist/common/src/esbuildConfigs/web.js +12 -17
  39. package/dist/common/src/lib/Sidecar.js +6 -0
  40. package/dist/common/src/lib/abstractBase.js +13 -6
  41. package/dist/common/src/lib/basebuilder.js +1 -3
  42. package/dist/common/src/lib/classBuilder.js +6 -20
  43. package/dist/common/src/lib/core.js +11 -6
  44. package/dist/common/src/lib/index.js +13 -4
  45. package/dist/common/src/lib/pmProxy.js +1 -1
  46. package/dist/common/src/mothership/index.js +16 -0
  47. package/dist/common/src/mothership/test.js +65 -0
  48. package/dist/common/src/utils/queue.js +36 -0
  49. package/dist/common/src/utils.js +34 -5
  50. package/dist/common/testeranto.config.js +77 -39
  51. package/dist/common/tsconfig.common.tsbuildinfo +1 -1
  52. package/dist/module/src/Init.js +6 -1
  53. package/dist/module/src/Node.js +6 -4
  54. package/dist/module/src/NodeSidecar.js +11 -0
  55. package/dist/module/src/PM/PM_WithEslintAndTsc.js +182 -0
  56. package/dist/module/src/PM/__tests__/nodeSidecar.testeranto.js +104 -0
  57. package/dist/module/src/PM/__tests__/pureSidecar.testeranto.js +89 -0
  58. package/dist/module/src/PM/__tests__/webSidecar.testeranto.js +89 -0
  59. package/dist/module/src/PM/base.js +33 -16
  60. package/dist/module/src/PM/main.js +493 -429
  61. package/dist/module/src/PM/node.js +54 -22
  62. package/dist/module/src/PM/nodeSidecar.js +58 -0
  63. package/dist/module/src/PM/pure.js +55 -44
  64. package/dist/module/src/PM/pureSidecar.js +41 -0
  65. package/dist/module/src/PM/sidecar.js +7 -0
  66. package/dist/module/src/PM/web.js +24 -6
  67. package/dist/module/src/PM/webSidecar.js +40 -0
  68. package/dist/module/src/Project.js +154 -75
  69. package/dist/module/src/PureSidecar.js +9 -0
  70. package/dist/module/src/ReportClient.js +132 -97
  71. package/dist/module/src/SP__Polygon.test.js +8 -0
  72. package/dist/module/src/TestReport.js +32 -14
  73. package/dist/module/src/WebSidecar.js +10 -0
  74. package/dist/module/src/build.js +66 -12
  75. package/dist/module/src/defaultConfig.js +1 -0
  76. package/dist/module/src/esbuildConfigs/consoleDetectorPlugin.js +24 -0
  77. package/dist/module/src/esbuildConfigs/eslint-formatter-testeranto.js +16 -1
  78. package/dist/module/src/esbuildConfigs/node.js +2 -16
  79. package/dist/module/src/esbuildConfigs/pure.js +12 -12
  80. package/dist/module/src/esbuildConfigs/rebuildPlugin.js +17 -0
  81. package/dist/module/src/esbuildConfigs/web.js +12 -17
  82. package/dist/module/src/lib/Sidecar.js +2 -0
  83. package/dist/module/src/lib/abstractBase.js +13 -6
  84. package/dist/module/src/lib/basebuilder.js +1 -3
  85. package/dist/module/src/lib/classBuilder.js +6 -20
  86. package/dist/module/src/lib/core.js +11 -6
  87. package/dist/module/src/lib/index.js +12 -4
  88. package/dist/module/src/lib/pmProxy.js +1 -1
  89. package/dist/module/src/mothership/index.js +11 -0
  90. package/dist/module/src/mothership/test.js +60 -0
  91. package/dist/module/src/utils/queue.js +32 -0
  92. package/dist/module/src/utils.js +34 -5
  93. package/dist/module/testeranto.config.js +77 -36
  94. package/dist/module/tsconfig.module.tsbuildinfo +1 -1
  95. package/dist/prebuild/Project.js +3287 -385
  96. package/dist/prebuild/ReportClient.js +0 -24638
  97. package/dist/prebuild/TestReport.js +26 -22
  98. package/dist/prebuild/build.mjs +192 -70
  99. package/dist/prebuild/esbuildConfigs/eslint-formatter-testeranto.mjs +14 -1
  100. package/dist/prebuild/init-docs.mjs +2 -5
  101. package/dist/prebuild/mothership/index.mjs +17 -0
  102. package/dist/prebuild/run.mjs +733 -433
  103. package/dist/types/src/CoreTypes.d.ts +51 -0
  104. package/dist/types/src/Node.d.ts +2 -2
  105. package/dist/types/src/NodeSidecar.d.ts +6 -0
  106. package/dist/types/src/PM/PM_WithEslintAndTsc.d.ts +23 -0
  107. package/dist/types/src/PM/__tests__/nodeSidecar.testeranto.d.ts +2 -0
  108. package/dist/types/src/PM/__tests__/pureSidecar.testeranto.d.ts +2 -0
  109. package/dist/types/src/PM/__tests__/webSidecar.testeranto.d.ts +2 -0
  110. package/dist/types/src/PM/base.d.ts +6 -5
  111. package/dist/types/src/PM/index.d.ts +6 -4
  112. package/dist/types/src/PM/main.d.ts +23 -26
  113. package/dist/types/src/PM/node.d.ts +8 -6
  114. package/dist/types/src/PM/nodeSidecar.d.ts +13 -0
  115. package/dist/types/src/PM/pure.d.ts +4 -3
  116. package/dist/types/src/PM/pureSidecar.d.ts +11 -0
  117. package/dist/types/src/PM/sidecar.d.ts +8 -0
  118. package/dist/types/src/PM/web.d.ts +18 -8
  119. package/dist/types/src/PM/webSidecar.d.ts +11 -0
  120. package/dist/types/src/PureSidecar.d.ts +8 -0
  121. package/dist/types/src/SP__Polygon.test.d.ts +1 -0
  122. package/dist/types/src/Types.d.ts +80 -58
  123. package/dist/types/src/Web.d.ts +1 -1
  124. package/dist/types/src/WebSidecar.d.ts +8 -0
  125. package/dist/types/src/esbuildConfigs/consoleDetectorPlugin.d.ts +2 -0
  126. package/dist/types/src/esbuildConfigs/rebuildPlugin.d.ts +6 -0
  127. package/dist/types/src/lib/Sidecar.d.ts +5 -0
  128. package/dist/types/src/lib/abstractBase.d.ts +6 -12
  129. package/dist/types/src/lib/classBuilder.d.ts +7 -1
  130. package/dist/types/src/lib/core.d.ts +8 -2
  131. package/dist/types/src/lib/index.d.ts +10 -4
  132. package/dist/types/src/lib/types.d.ts +12 -2
  133. package/dist/types/src/mothership/index.d.ts +2 -0
  134. package/dist/types/src/mothership/test.d.ts +2 -0
  135. package/dist/types/src/utils/queue.d.ts +11 -0
  136. package/dist/types/src/utils.d.ts +4 -7
  137. package/dist/types/tsconfig.types.tsbuildinfo +1 -1
  138. package/docs/index.md +277 -0
  139. package/package.json +23 -104
  140. package/src/CoreTypes.ts +171 -0
  141. package/src/Init.ts +6 -5
  142. package/src/Node.ts +32 -15
  143. package/src/NodeSidecar.ts +22 -0
  144. package/src/PM/PM_WithEslintAndTsc.ts +315 -0
  145. package/src/PM/__tests__/nodeSidecar.testeranto.ts +173 -0
  146. package/src/PM/__tests__/pureSidecar.testeranto.ts +157 -0
  147. package/src/PM/__tests__/webSidecar.testeranto.ts +157 -0
  148. package/src/PM/base.ts +38 -17
  149. package/src/PM/index.ts +10 -4
  150. package/src/PM/main.ts +616 -589
  151. package/src/PM/node.ts +77 -33
  152. package/src/PM/nodeSidecar.ts +73 -0
  153. package/src/PM/pure.ts +68 -58
  154. package/src/PM/pureSidecar.ts +56 -0
  155. package/src/PM/sidecar.ts +48 -0
  156. package/src/PM/web.ts +42 -11
  157. package/src/PM/webSidecar.ts +55 -0
  158. package/src/Project.tsx +312 -109
  159. package/src/Pure.ts +0 -2
  160. package/src/PureSidecar.ts +14 -0
  161. package/src/ReportClient.tsx +164 -170
  162. package/src/SP__Polygon.test.ts +13 -0
  163. package/src/TestReport.tsx +77 -6
  164. package/src/Types.ts +278 -157
  165. package/src/Web.ts +0 -3
  166. package/src/WebSidecar.ts +14 -0
  167. package/src/build.ts +104 -16
  168. package/src/defaultConfig.ts +1 -0
  169. package/src/esbuildConfigs/README.md +46 -0
  170. package/src/esbuildConfigs/consoleDetectorPlugin.ts +29 -0
  171. package/src/esbuildConfigs/eslint-formatter-testeranto.ts +17 -1
  172. package/src/esbuildConfigs/node.ts +2 -18
  173. package/src/esbuildConfigs/pure.ts +19 -14
  174. package/src/esbuildConfigs/rebuildPlugin.ts +23 -0
  175. package/src/esbuildConfigs/web.ts +15 -18
  176. package/src/lib/Sidecar.ts +6 -0
  177. package/src/lib/TEST_ADAPTER_RENAME.md +48 -0
  178. package/src/lib/abstractBase.ts +18 -10
  179. package/src/lib/basebuilder.ts +5 -4
  180. package/src/lib/classBuilder.ts +19 -21
  181. package/src/lib/core.ts +28 -19
  182. package/src/lib/index.ts +38 -18
  183. package/src/lib/pmProxy.ts +3 -1
  184. package/src/lib/types.ts +15 -2
  185. package/src/mothership/index.ts +15 -0
  186. package/src/mothership/test.ts +137 -0
  187. package/src/run.ts +0 -1
  188. package/src/utils/queue.ts +41 -0
  189. package/src/utils.ts +41 -15
  190. package/testeranto/bundles/node/mothership/chunk-PG6KUKNP.mjs +44 -0
  191. package/testeranto/bundles/node/mothership/chunk-V2EQEXU2.mjs +1032 -0
  192. package/testeranto/bundles/node/mothership/metafile.json +389 -0
  193. package/testeranto/bundles/node/mothership/src/PM/__tests__/nodeSidecar.testeranto.mjs +1219 -0
  194. package/testeranto/bundles/node/mothership/src/PM/__tests__/pureSidecar.testeranto.mjs +156 -0
  195. package/testeranto/bundles/node/mothership/src/PM/__tests__/sidecar.testeranto.mjs +1199 -0
  196. package/testeranto/bundles/node/mothership/src/PM/__tests__/webSidecar.testeranto.mjs +156 -0
  197. package/testeranto/bundles/node/mothership/src/mothership/test.mjs +24411 -0
  198. package/testeranto/bundles/pure/mothership/metafile.json +8 -0
  199. package/testeranto/bundles/web/mothership/metafile.json +8 -0
  200. package/testeranto/index.html +4 -4
  201. package/testeranto/reports/mothership/config.json +25 -0
  202. package/testeranto/reports/{redux → mothership}/index.html +8 -8
  203. package/testeranto/reports/mothership/src/PM/__tests__/nodeSidecar.testeranto/node/console_log.txt +0 -0
  204. package/testeranto/reports/mothership/src/PM/__tests__/nodeSidecar.testeranto/node/index.html +20 -0
  205. package/testeranto/reports/mothership/src/PM/__tests__/nodeSidecar.testeranto/node/lint_errors.json +1564 -0
  206. package/testeranto/reports/mothership/src/PM/__tests__/nodeSidecar.testeranto/node/log.txt +0 -0
  207. package/testeranto/reports/mothership/src/PM/__tests__/nodeSidecar.testeranto/node/prompt.txt +22 -0
  208. package/testeranto/reports/mothership/src/PM/__tests__/nodeSidecar.testeranto/node/type_errors.txt +35 -0
  209. package/testeranto/reports/mothership/src/PM/__tests__/pureSidecar.testeranto/node/index.html +20 -0
  210. package/testeranto/reports/mothership/src/PM/__tests__/pureSidecar.testeranto/node/lint_errors.json +80 -0
  211. package/testeranto/reports/mothership/src/PM/__tests__/pureSidecar.testeranto/node/prompt.txt +12 -0
  212. package/testeranto/reports/mothership/src/PM/__tests__/pureSidecar.testeranto/node/type_errors.txt +26 -0
  213. package/testeranto/reports/mothership/src/PM/__tests__/sidecar.testeranto/node/bdd_errors.txt +1 -0
  214. package/testeranto/reports/mothership/src/PM/__tests__/sidecar.testeranto/node/console_log.txt +0 -0
  215. package/testeranto/reports/mothership/src/PM/__tests__/sidecar.testeranto/node/index.html +20 -0
  216. package/testeranto/reports/mothership/src/PM/__tests__/sidecar.testeranto/node/lint_errors.json +1564 -0
  217. package/testeranto/reports/mothership/src/PM/__tests__/sidecar.testeranto/node/log.txt +0 -0
  218. package/testeranto/reports/mothership/src/PM/__tests__/sidecar.testeranto/node/prompt.txt +22 -0
  219. package/testeranto/reports/mothership/src/PM/__tests__/sidecar.testeranto/node/tests.json +56 -0
  220. package/testeranto/reports/mothership/src/PM/__tests__/sidecar.testeranto/node/type_errors.txt +29 -0
  221. package/testeranto/reports/mothership/src/PM/__tests__/webSidecar.testeranto/node/index.html +20 -0
  222. package/testeranto/reports/mothership/src/PM/__tests__/webSidecar.testeranto/node/lint_errors.json +80 -0
  223. package/testeranto/reports/mothership/src/PM/__tests__/webSidecar.testeranto/node/prompt.txt +12 -0
  224. package/testeranto/reports/mothership/src/PM/__tests__/webSidecar.testeranto/node/type_errors.txt +26 -0
  225. package/testeranto/reports/mothership/src/mothership/test/node/bdd_errors.txt +1 -0
  226. package/testeranto/reports/mothership/src/mothership/test/node/console_log.txt +4 -0
  227. package/testeranto/reports/mothership/src/mothership/test/node/index.html +20 -0
  228. package/testeranto/reports/mothership/src/mothership/test/node/lint_errors.json +1 -0
  229. package/testeranto/reports/mothership/src/mothership/test/node/log.txt +0 -0
  230. package/testeranto/reports/mothership/src/mothership/test/node/prompt.txt +12 -0
  231. package/testeranto/reports/mothership/src/mothership/test/node/tests.json +24 -0
  232. package/testeranto/reports/mothership/src/mothership/test/node/type_errors.txt +18 -0
  233. package/testeranto/reports/mothership/summary.json +9 -0
  234. package/testeranto.config.ts +82 -44
  235. package/tsc.log +78 -81
  236. package/dist/common/src/SubPackages/react/component/index.js +0 -20
  237. package/dist/common/src/SubPackages/react/component/node.js +0 -10
  238. package/dist/common/src/SubPackages/react/component/pure.js +0 -10
  239. package/dist/common/src/SubPackages/react/component/web.js +0 -10
  240. package/dist/common/src/SubPackages/react/jsx/index.js +0 -64
  241. package/dist/common/src/SubPackages/react/jsx/node.js +0 -10
  242. package/dist/common/src/SubPackages/react/jsx/pure.js +0 -10
  243. package/dist/common/src/SubPackages/react/jsx/web.js +0 -10
  244. package/dist/common/src/SubPackages/react-dom/component/dynamic.js +0 -61
  245. package/dist/common/src/SubPackages/react-dom/component/node.js +0 -10
  246. package/dist/common/src/SubPackages/react-dom/component/pure.js +0 -10
  247. package/dist/common/src/SubPackages/react-dom/component/static.js +0 -26
  248. package/dist/common/src/SubPackages/react-dom/component/web.js +0 -16
  249. package/dist/common/src/SubPackages/react-dom/jsx/dynamic.js +0 -31
  250. package/dist/common/src/SubPackages/react-dom/jsx/node.js +0 -10
  251. package/dist/common/src/SubPackages/react-dom/jsx/pure.js +0 -10
  252. package/dist/common/src/SubPackages/react-dom/jsx/static.js +0 -59
  253. package/dist/common/src/SubPackages/react-dom/jsx/web.js +0 -16
  254. package/dist/common/src/SubPackages/react-test-renderer/MemoExoticComponent/node.js +0 -54
  255. package/dist/common/src/SubPackages/react-test-renderer/component/index.js +0 -15
  256. package/dist/common/src/SubPackages/react-test-renderer/component/interface.js +0 -70
  257. package/dist/common/src/SubPackages/react-test-renderer/component/node.js +0 -8
  258. package/dist/common/src/SubPackages/react-test-renderer/component/pure.js +0 -8
  259. package/dist/common/src/SubPackages/react-test-renderer/component/test/implementation.js +0 -57
  260. package/dist/common/src/SubPackages/react-test-renderer/component/test/node.js +0 -10
  261. package/dist/common/src/SubPackages/react-test-renderer/component/test/pure.js +0 -10
  262. package/dist/common/src/SubPackages/react-test-renderer/component/test/web.js +0 -10
  263. package/dist/common/src/SubPackages/react-test-renderer/component/web.js +0 -8
  264. package/dist/common/src/SubPackages/react-test-renderer/fc/node.js +0 -60
  265. package/dist/common/src/SubPackages/react-test-renderer/fc/web.js +0 -60
  266. package/dist/common/src/SubPackages/react-test-renderer/jsx/index.js +0 -67
  267. package/dist/common/src/SubPackages/react-test-renderer/jsx/node.js +0 -10
  268. package/dist/common/src/SubPackages/react-test-renderer/jsx/pure.js +0 -10
  269. package/dist/common/src/SubPackages/react-test-renderer/jsx/web.js +0 -10
  270. package/dist/common/src/SubPackages/react-test-renderer/jsx-promised/index.js +0 -52
  271. package/dist/common/src/SubPackages/react-test-renderer/jsx-promised/node.js +0 -10
  272. package/dist/common/src/SubPackages/react-test-renderer/jsx-promised/web.js +0 -10
  273. package/dist/common/src/examples/react/component/index.js +0 -33
  274. package/dist/common/src/examples/react/component/test.js +0 -36
  275. package/dist/module/src/SubPackages/react/component/index.js +0 -13
  276. package/dist/module/src/SubPackages/react/component/node.js +0 -5
  277. package/dist/module/src/SubPackages/react/component/pure.js +0 -5
  278. package/dist/module/src/SubPackages/react/component/web.js +0 -5
  279. package/dist/module/src/SubPackages/react/jsx/index.js +0 -58
  280. package/dist/module/src/SubPackages/react/jsx/node.js +0 -5
  281. package/dist/module/src/SubPackages/react/jsx/pure.js +0 -5
  282. package/dist/module/src/SubPackages/react/jsx/web.js +0 -5
  283. package/dist/module/src/SubPackages/react-dom/component/dynamic.js +0 -54
  284. package/dist/module/src/SubPackages/react-dom/component/node.js +0 -5
  285. package/dist/module/src/SubPackages/react-dom/component/pure.js +0 -5
  286. package/dist/module/src/SubPackages/react-dom/component/static.js +0 -22
  287. package/dist/module/src/SubPackages/react-dom/component/web.js +0 -11
  288. package/dist/module/src/SubPackages/react-dom/jsx/dynamic.js +0 -27
  289. package/dist/module/src/SubPackages/react-dom/jsx/node.js +0 -5
  290. package/dist/module/src/SubPackages/react-dom/jsx/pure.js +0 -5
  291. package/dist/module/src/SubPackages/react-dom/jsx/static.js +0 -53
  292. package/dist/module/src/SubPackages/react-dom/jsx/web.js +0 -11
  293. package/dist/module/src/SubPackages/react-test-renderer/MemoExoticComponent/node.js +0 -16
  294. package/dist/module/src/SubPackages/react-test-renderer/component/index.js +0 -14
  295. package/dist/module/src/SubPackages/react-test-renderer/component/interface.js +0 -31
  296. package/dist/module/src/SubPackages/react-test-renderer/component/node.js +0 -3
  297. package/dist/module/src/SubPackages/react-test-renderer/component/pure.js +0 -3
  298. package/dist/module/src/SubPackages/react-test-renderer/component/test/implementation.js +0 -54
  299. package/dist/module/src/SubPackages/react-test-renderer/component/test/node.js +0 -5
  300. package/dist/module/src/SubPackages/react-test-renderer/component/test/pure.js +0 -5
  301. package/dist/module/src/SubPackages/react-test-renderer/component/test/web.js +0 -5
  302. package/dist/module/src/SubPackages/react-test-renderer/component/web.js +0 -3
  303. package/dist/module/src/SubPackages/react-test-renderer/fc/node.js +0 -22
  304. package/dist/module/src/SubPackages/react-test-renderer/fc/web.js +0 -22
  305. package/dist/module/src/SubPackages/react-test-renderer/jsx/index.js +0 -28
  306. package/dist/module/src/SubPackages/react-test-renderer/jsx/node.js +0 -5
  307. package/dist/module/src/SubPackages/react-test-renderer/jsx/pure.js +0 -5
  308. package/dist/module/src/SubPackages/react-test-renderer/jsx/web.js +0 -5
  309. package/dist/module/src/SubPackages/react-test-renderer/jsx-promised/index.js +0 -16
  310. package/dist/module/src/SubPackages/react-test-renderer/jsx-promised/node.js +0 -5
  311. package/dist/module/src/SubPackages/react-test-renderer/jsx-promised/web.js +0 -5
  312. package/dist/module/src/examples/react/component/index.js +0 -26
  313. package/dist/module/src/examples/react/component/test.js +0 -32
  314. package/dist/prebuild/ReportClient.css +0 -11342
  315. package/dist/tsconfig.tsbuildinfo +0 -1
  316. package/dist/types/src/SubPackages/react/component/index.d.ts +0 -4
  317. package/dist/types/src/SubPackages/react/component/node.d.ts +0 -4
  318. package/dist/types/src/SubPackages/react/component/pure.d.ts +0 -4
  319. package/dist/types/src/SubPackages/react/component/web.d.ts +0 -4
  320. package/dist/types/src/SubPackages/react/jsx/index.d.ts +0 -5
  321. package/dist/types/src/SubPackages/react/jsx/node.d.ts +0 -4
  322. package/dist/types/src/SubPackages/react/jsx/pure.d.ts +0 -4
  323. package/dist/types/src/SubPackages/react/jsx/web.d.ts +0 -4
  324. package/dist/types/src/SubPackages/react-dom/component/dynamic.d.ts +0 -20
  325. package/dist/types/src/SubPackages/react-dom/component/node.d.ts +0 -4
  326. package/dist/types/src/SubPackages/react-dom/component/pure.d.ts +0 -4
  327. package/dist/types/src/SubPackages/react-dom/component/static.d.ts +0 -9
  328. package/dist/types/src/SubPackages/react-dom/component/web.d.ts +0 -4
  329. package/dist/types/src/SubPackages/react-dom/jsx/dynamic.d.ts +0 -5
  330. package/dist/types/src/SubPackages/react-dom/jsx/index.d.ts +0 -6
  331. package/dist/types/src/SubPackages/react-dom/jsx/node.d.ts +0 -4
  332. package/dist/types/src/SubPackages/react-dom/jsx/pure.d.ts +0 -4
  333. package/dist/types/src/SubPackages/react-dom/jsx/static.d.ts +0 -5
  334. package/dist/types/src/SubPackages/react-dom/jsx/web.d.ts +0 -5
  335. package/dist/types/src/SubPackages/react-test-renderer/MemoExoticComponent/node.d.ts +0 -6
  336. package/dist/types/src/SubPackages/react-test-renderer/component/index.d.ts +0 -5
  337. package/dist/types/src/SubPackages/react-test-renderer/component/interface.d.ts +0 -3
  338. package/dist/types/src/SubPackages/react-test-renderer/component/node.d.ts +0 -4
  339. package/dist/types/src/SubPackages/react-test-renderer/component/pure.d.ts +0 -4
  340. package/dist/types/src/SubPackages/react-test-renderer/component/test/implementation.d.ts +0 -4
  341. package/dist/types/src/SubPackages/react-test-renderer/component/test/node.d.ts +0 -3
  342. package/dist/types/src/SubPackages/react-test-renderer/component/test/pure.d.ts +0 -4
  343. package/dist/types/src/SubPackages/react-test-renderer/component/test/web.d.ts +0 -3
  344. package/dist/types/src/SubPackages/react-test-renderer/component/web.d.ts +0 -4
  345. package/dist/types/src/SubPackages/react-test-renderer/fc/node.d.ts +0 -8
  346. package/dist/types/src/SubPackages/react-test-renderer/fc/web.d.ts +0 -9
  347. package/dist/types/src/SubPackages/react-test-renderer/jsx/index.d.ts +0 -11
  348. package/dist/types/src/SubPackages/react-test-renderer/jsx/node.d.ts +0 -4
  349. package/dist/types/src/SubPackages/react-test-renderer/jsx/pure.d.ts +0 -4
  350. package/dist/types/src/SubPackages/react-test-renderer/jsx/web.d.ts +0 -4
  351. package/dist/types/src/SubPackages/react-test-renderer/jsx-promised/index.d.ts +0 -15
  352. package/dist/types/src/SubPackages/react-test-renderer/jsx-promised/node.d.ts +0 -5
  353. package/dist/types/src/SubPackages/react-test-renderer/jsx-promised/web.d.ts +0 -5
  354. package/dist/types/src/examples/react/component/index.d.ts +0 -13
  355. package/dist/types/src/examples/react/component/test.d.ts +0 -17
  356. package/src/SubPackages/react/component/index.ts +0 -28
  357. package/src/SubPackages/react/component/node.ts +0 -17
  358. package/src/SubPackages/react/component/pure.ts +0 -17
  359. package/src/SubPackages/react/component/web.ts +0 -17
  360. package/src/SubPackages/react/jsx/index.ts +0 -75
  361. package/src/SubPackages/react/jsx/node.ts +0 -23
  362. package/src/SubPackages/react/jsx/pure.ts +0 -23
  363. package/src/SubPackages/react/jsx/web.ts +0 -24
  364. package/src/SubPackages/react-dom/component/dynamic.ts +0 -107
  365. package/src/SubPackages/react-dom/component/node.ts +0 -17
  366. package/src/SubPackages/react-dom/component/pure.ts +0 -17
  367. package/src/SubPackages/react-dom/component/static.ts +0 -41
  368. package/src/SubPackages/react-dom/component/web.ts +0 -32
  369. package/src/SubPackages/react-dom/jsx/dynamic.ts +0 -46
  370. package/src/SubPackages/react-dom/jsx/index.ts +0 -6
  371. package/src/SubPackages/react-dom/jsx/node.ts +0 -18
  372. package/src/SubPackages/react-dom/jsx/pure.ts +0 -18
  373. package/src/SubPackages/react-dom/jsx/static.ts +0 -87
  374. package/src/SubPackages/react-dom/jsx/web.ts +0 -26
  375. package/src/SubPackages/react-test-renderer/MemoExoticComponent/node.ts +0 -54
  376. package/src/SubPackages/react-test-renderer/component/index.ts +0 -32
  377. package/src/SubPackages/react-test-renderer/component/interface.ts +0 -43
  378. package/src/SubPackages/react-test-renderer/component/node.ts +0 -18
  379. package/src/SubPackages/react-test-renderer/component/pure.ts +0 -18
  380. package/src/SubPackages/react-test-renderer/component/test/implementation.ts +0 -63
  381. package/src/SubPackages/react-test-renderer/component/test/node.ts +0 -14
  382. package/src/SubPackages/react-test-renderer/component/test/pure.ts +0 -14
  383. package/src/SubPackages/react-test-renderer/component/test/web.ts +0 -14
  384. package/src/SubPackages/react-test-renderer/component/web.ts +0 -18
  385. package/src/SubPackages/react-test-renderer/fc/node.ts +0 -83
  386. package/src/SubPackages/react-test-renderer/fc/web.ts +0 -80
  387. package/src/SubPackages/react-test-renderer/jsx/index.ts +0 -61
  388. package/src/SubPackages/react-test-renderer/jsx/node.ts +0 -31
  389. package/src/SubPackages/react-test-renderer/jsx/pure.ts +0 -31
  390. package/src/SubPackages/react-test-renderer/jsx/web.ts +0 -32
  391. package/src/SubPackages/react-test-renderer/jsx-promised/index.ts +0 -73
  392. package/src/SubPackages/react-test-renderer/jsx-promised/node.ts +0 -36
  393. package/src/SubPackages/react-test-renderer/jsx-promised/web.ts +0 -36
  394. package/src/examples/react/component/index.tsx +0 -35
  395. package/src/examples/react/component/test.ts +0 -83
  396. package/testeranto/bundles/node/redux/metafile.json +0 -559
  397. package/testeranto/bundles/pure/redux/metafile.json +0 -554
  398. package/testeranto/bundles/web/redux/metafile.json +0 -504
  399. package/testeranto/bundles/web/redux/test/web.html +0 -19
  400. package/testeranto/reports/redux/config.json +0 -38
  401. package/testeranto/reports/redux/summary.json +0 -20
  402. /package/dist/common/src/{SubPackages/react-dom/jsx/index.js → CoreTypes.js} +0 -0
  403. /package/dist/module/src/{SubPackages/react-dom/jsx/index.js → CoreTypes.js} +0 -0
package/src/PM/main.ts CHANGED
@@ -1,27 +1,27 @@
1
- import { exec, spawn } from "node:child_process";
1
+ /* eslint-disable @typescript-eslint/ban-ts-comment */
2
+ /* eslint-disable no-async-promise-executor */
3
+ /* eslint-disable @typescript-eslint/no-explicit-any */
4
+ /* eslint-disable @typescript-eslint/no-unused-vars */
5
+ import { ChildProcess, spawn } from "node:child_process";
2
6
 
3
- import ts from "typescript";
4
7
  import net from "net";
5
8
  import { Page } from "puppeteer-core/lib/esm/puppeteer";
6
9
  import fs, { watch } from "fs";
7
10
  import path from "path";
8
- import puppeteer, { ConsoleMessage, ScreenshotOptions } from "puppeteer-core";
11
+ import puppeteer, { ConsoleMessage } from "puppeteer-core";
9
12
  import ansiC from "ansi-colors";
10
13
  import crypto from "node:crypto";
11
- import { ESLint } from "eslint";
12
- import tsc from "tsc-prog";
13
14
 
14
- import { IFinalResults, IRunnables } from "../lib/index.js";
15
15
  import {
16
- getRunnables,
17
- ISummary,
18
- lintPather,
19
- promptPather,
20
- tscPather,
21
- } from "../utils";
16
+ IFinalResults,
17
+ IRunnables,
18
+ ITTestResourceConfiguration,
19
+ } from "../lib/index.js";
20
+ import { getRunnables } from "../utils";
22
21
  import { IBuiltConfig, IRunTime, ITestTypes } from "../Types.js";
23
-
24
- import { PM_Base } from "./base.js";
22
+ import { Sidecar } from "../lib/Sidecar.js";
23
+ import { Queue } from "../utils/queue.js";
24
+ import { PM_WithEslintAndTsc } from "./PM_WithEslintAndTsc.js";
25
25
 
26
26
  type IOutputs = Record<
27
27
  string,
@@ -30,10 +30,7 @@ type IOutputs = Record<
30
30
  inputs: Record<string, string>;
31
31
  }
32
32
  >;
33
- const eslint = new ESLint();
34
- const formatter = await eslint.loadFormatter(
35
- "./node_modules/testeranto/dist/prebuild/esbuildConfigs/eslint-formatter-testeranto.mjs"
36
- );
33
+
37
34
  const changes: Record<string, string> = {};
38
35
  const fileHashes = {};
39
36
  const files: Record<string, Set<string>> = {};
@@ -74,7 +71,7 @@ async function writeFileAndCreateDir(filePath, data) {
74
71
 
75
72
  try {
76
73
  await fs.promises.mkdir(dirPath, { recursive: true });
77
- await fs.appendFileSync(filePath, data);
74
+ await fs.writeFileSync(filePath, data);
78
75
  } catch (error) {
79
76
  console.error(`Error writing file: ${error}`);
80
77
  }
@@ -100,7 +97,7 @@ function isValidUrl(string) {
100
97
  }
101
98
 
102
99
  // Wait for file to exist, checks every 2 seconds by default
103
- function pollForFile(path, timeout = 2000) {
100
+ async function pollForFile(path, timeout = 2000) {
104
101
  const intervalObj = setInterval(function () {
105
102
  const file = path;
106
103
  const fileExists = fs.existsSync(file);
@@ -114,37 +111,84 @@ function pollForFile(path, timeout = 2000) {
114
111
  }, timeout);
115
112
  }
116
113
 
117
- export class PM_Main extends PM_Base {
118
- name: string;
114
+ export class PM_Main extends PM_WithEslintAndTsc {
119
115
  ports: Record<number, boolean>;
120
116
  queue: any[];
121
- mode: "once" | "dev";
122
- bigBoard: ISummary = {};
123
117
  webMetafileWatcher: fs.FSWatcher;
124
118
  nodeMetafileWatcher: fs.FSWatcher;
125
119
  importMetafileWatcher: fs.FSWatcher;
120
+ pureSidecars: Record<number, Sidecar>;
121
+ nodeSidecars: Record<number, ChildProcess>;
122
+ webSidecars: Record<number, Page>;
126
123
 
127
124
  constructor(configs: IBuiltConfig, name: string, mode: "once" | "dev") {
128
- super(configs);
125
+ super(configs, name, mode);
129
126
 
130
- this.name = name;
131
- this.mode = mode;
132
127
  this.ports = {};
128
+ this.queue = [];
133
129
 
134
- this.configs.tests.forEach(([t]) => {
135
- this.bigBoard[t] = {
136
- runTimeError: "?",
137
- typeErrors: "?",
138
- staticErrors: "?",
139
- prompt: "?",
140
- };
141
- });
130
+ this.nodeSidecars = {};
131
+ this.webSidecars = {};
132
+ this.pureSidecars = {};
142
133
 
143
134
  this.configs.ports.forEach((element) => {
144
- this.ports[element] = "true"; // set ports as open
135
+ this.ports[element] = true; // set ports as open
145
136
  });
146
137
  }
147
138
 
139
+ async stopSideCar(uid: number): Promise<any> {
140
+ console.log(ansiC.green(ansiC.inverse(`stopSideCar ${uid}`)));
141
+
142
+ Object.entries(this.pureSidecars).forEach(async ([k, v]) => {
143
+ if (Number(k) === uid) {
144
+ await this.pureSidecars[Number(k)].stop();
145
+ delete this.pureSidecars[Number(k)];
146
+ }
147
+ });
148
+
149
+ Object.entries(this.nodeSidecars).forEach(async ([k, v]) => {
150
+ if (Number(k) === uid) {
151
+ await this.nodeSidecars[Number(k)].send("stop");
152
+ delete this.nodeSidecars[Number(k)];
153
+ }
154
+ });
155
+
156
+ Object.entries(this.webSidecars).forEach(async ([k, v]) => {
157
+ if (Number(k) === uid) {
158
+ (await this.browser.pages()).forEach(async (p) => {
159
+ if (p.mainFrame()._id === k) {
160
+ await this.webSidecars[Number(k)].close();
161
+ delete this.webSidecars[Number(k)];
162
+ }
163
+ });
164
+ }
165
+ });
166
+
167
+ return;
168
+ }
169
+
170
+ async launchSideCar(
171
+ n: number,
172
+ name: string
173
+ ): Promise<[number, ITTestResourceConfiguration]> {
174
+ const c = this.configs.tests.find(([v, r]) => {
175
+ return v === name;
176
+ }) as ITestTypes;
177
+
178
+ const s = c[3][n];
179
+
180
+ const r = s[1];
181
+ if (r === "node") {
182
+ return this.launchNodeSideCar(s);
183
+ } else if (r === "web") {
184
+ return this.launchWebSideCar(s);
185
+ } else if (r === "pure") {
186
+ return this.launchPureSideCar(s);
187
+ } else {
188
+ throw `unknown runtime ${r}`;
189
+ }
190
+ }
191
+
148
192
  mapping(): [string, (...a) => any][] {
149
193
  return [
150
194
  ["$", this.$],
@@ -152,20 +196,23 @@ export class PM_Main extends PM_Base {
152
196
  ["closePage", this.closePage],
153
197
  ["createWriteStream", this.createWriteStream],
154
198
  ["customclose", this.customclose],
155
- ["customScreenShot", this.customScreenShot],
199
+ ["customScreenShot", this.customScreenShot.bind(this)],
156
200
  ["end", this.end],
157
201
  ["existsSync", this.existsSync],
158
202
  ["focusOn", this.focusOn],
159
203
  ["getAttribute", this.getAttribute],
160
- ["getValue", this.getValue],
161
- ["goto", this.goto],
204
+ ["getInnerHtml", this.getInnerHtml],
205
+ // ["setValue", this.setValue],
206
+ ["goto", this.goto.bind(this)],
162
207
  ["isDisabled", this.isDisabled],
208
+ ["launchSideCar", this.launchSideCar.bind(this)],
163
209
  ["mkdirSync", this.mkdirSync],
164
210
  ["newPage", this.newPage],
165
211
  ["page", this.page],
166
212
  ["pages", this.pages],
167
213
  ["screencast", this.screencast],
168
214
  ["screencastStop", this.screencastStop],
215
+ ["stopSideCar", this.stopSideCar.bind(this)],
169
216
  ["typeInto", this.typeInto],
170
217
  ["waitForSelector", this.waitForSelector],
171
218
  ["write", this.write],
@@ -176,7 +223,6 @@ export class PM_Main extends PM_Base {
176
223
  async start() {
177
224
  // set up the "pure" listeners
178
225
  this.mapping().forEach(async ([command, func]) => {
179
- // page.exposeFunction(command, func);
180
226
  globalThis[command] = func;
181
227
  });
182
228
 
@@ -184,51 +230,59 @@ export class PM_Main extends PM_Base {
184
230
  fs.mkdirSync(`testeranto/reports/${this.name}`);
185
231
  }
186
232
 
187
- // await pollForFile();
188
-
189
- this.browser = (await puppeteer.launch({
190
- slowMo: 1,
191
- waitForInitialPage: false,
192
- executablePath:
193
- // process.env.CHROMIUM_PATH || "/opt/homebrew/bin/chromium",
194
- "/opt/homebrew/bin/chromium",
195
- headless: true,
196
- dumpio: false,
197
- devtools: false,
198
-
199
- args: [
200
- "--allow-file-access-from-files",
201
- "--allow-insecure-localhost",
202
- "--allow-running-insecure-content",
203
- "--auto-open-devtools-for-tabs",
204
- "--disable-dev-shm-usage",
205
- "--disable-extensions",
206
- "--disable-gpu",
207
- "--disable-setuid-sandbox",
208
- "--disable-site-isolation-trials",
209
- "--disable-site-isolation-trials",
210
- "--disable-web-security",
211
- "--no-first-run",
212
- "--no-sandbox",
213
- "--no-startup-window",
214
- "--reduce-security-for-testing",
215
- "--remote-allow-origins=*",
216
- `--remote-debugging-port=3234`,
217
- "--unsafely-treat-insecure-origin-as-secure=*",
218
- // "--disable-features=IsolateOrigins,site-per-process",
219
- // "--disable-features=IsolateOrigins",
220
- // "--disk-cache-dir=/dev/null",
221
- // "--disk-cache-size=1",
222
- // "--no-zygote",
223
- // "--remote-allow-origins=ws://localhost:3234",
224
- // "--single-process",
225
- // "--start-maximized",
226
- // "--unsafely-treat-insecure-origin-as-secure",
227
- // "--unsafely-treat-insecure-origin-as-secure=ws://192.168.0.101:3234",
228
- ],
229
- })) as any;
233
+ const executablePath = "/opt/homebrew/bin/chromium";
230
234
 
231
- const { nodeEntryPoints, webEntryPoints, importEntryPoints } =
235
+ try {
236
+ this.browser = await puppeteer.launch({
237
+ slowMo: 1,
238
+ waitForInitialPage: false,
239
+ executablePath,
240
+
241
+ headless: true,
242
+
243
+ dumpio: false,
244
+ devtools: false,
245
+
246
+ args: [
247
+ "--disable-features=site-per-process",
248
+ "--allow-file-access-from-files",
249
+ "--allow-insecure-localhost",
250
+ "--allow-running-insecure-content",
251
+ "--auto-open-devtools-for-tabs",
252
+ "--disable-dev-shm-usage",
253
+ "--disable-extensions",
254
+ "--disable-gpu",
255
+ "--disable-setuid-sandbox",
256
+ "--disable-site-isolation-trials",
257
+ "--disable-web-security",
258
+ "--no-first-run",
259
+ "--no-sandbox",
260
+ "--no-startup-window",
261
+ "--reduce-security-for-testing",
262
+ "--remote-allow-origins=*",
263
+ "--unsafely-treat-insecure-origin-as-secure=*",
264
+ `--remote-debugging-port=3234`,
265
+ // "--disable-features=IsolateOrigins,site-per-process",
266
+ // "--disable-features=IsolateOrigins",
267
+ // "--disk-cache-dir=/dev/null",
268
+ // "--disk-cache-size=1",
269
+ // "--no-zygote",
270
+ // "--remote-allow-origins=ws://localhost:3234",
271
+ // "--single-process",
272
+ // "--start-maximized",
273
+ // "--unsafely-treat-insecure-origin-as-secure",
274
+ // "--unsafely-treat-insecure-origin-as-secure=ws://192.168.0.101:3234",
275
+ ],
276
+ });
277
+ } catch (e) {
278
+ console.error(e);
279
+ console.error(
280
+ "could not start chrome via puppeter. Check this path: ",
281
+ executablePath
282
+ );
283
+ }
284
+
285
+ const { nodeEntryPoints, webEntryPoints, pureEntryPoints } =
232
286
  this.getRunnables(this.configs.tests, this.name);
233
287
 
234
288
  [
@@ -249,7 +303,7 @@ export class PM_Main extends PM_Base {
249
303
  },
250
304
  ],
251
305
  [
252
- importEntryPoints,
306
+ pureEntryPoints,
253
307
  this.launchPure,
254
308
  "pure",
255
309
  (w) => {
@@ -301,6 +355,43 @@ export class PM_Main extends PM_Base {
301
355
  );
302
356
  }
303
357
  );
358
+
359
+ // Object.keys(this.configs.externalTests).forEach((et) => {
360
+ // this.launchExternalTest(et, this.configs.externalTests[et]);
361
+ // });
362
+ }
363
+
364
+ async launchExternalTest(
365
+ externalTestName: string,
366
+ externalTest: {
367
+ watch: string[];
368
+ exec: string;
369
+ }
370
+ ) {
371
+ // fs.mkdirSync(`testeranto/externalTests/${externalTestName}`);
372
+ // exec(externalTest.exec, (error, stdout, stderr) => {
373
+ // if (error) {
374
+ // fs.writeFileSync(
375
+ // `testeranto/externalTests/${externalTestName}/exitcode.txt`,
376
+ // `${error.name}\n${error.message}\n${error.code}\n`
377
+ // );
378
+ // } else {
379
+ // fs.writeFileSync(
380
+ // `testeranto/externalTests/${externalTestName}/exitcode.txt`,
381
+ // `0`
382
+ // );
383
+ // }
384
+ // fs.writeFileSync(
385
+ // `testeranto/externalTests/${externalTestName}/stdout.txt`,
386
+ // stdout
387
+ // );
388
+ // fs.writeFileSync(
389
+ // `testeranto/externalTests/${externalTestName}/stderr.txt`,
390
+ // stderr
391
+ // );
392
+ // // console.log(`externalTest stdout: ${stdout}`);
393
+ // // console.error(`externalTest stderr: ${stderr}`);
394
+ // });
304
395
  }
305
396
 
306
397
  async stop() {
@@ -317,8 +408,11 @@ export class PM_Main extends PM_Base {
317
408
  testName: string,
318
409
  payload = {
319
410
  nodeEntryPoints: {},
411
+ nodeEntryPointSidecars: {},
320
412
  webEntryPoints: {},
321
- importEntryPoints: {},
413
+ webEntryPointSidecars: {},
414
+ pureEntryPoints: {},
415
+ pureEntryPointSidecars: {},
322
416
  }
323
417
  ): IRunnables => {
324
418
  return getRunnables(tests, testName, payload);
@@ -338,13 +432,21 @@ export class PM_Main extends PM_Base {
338
432
  const outputs: IOutputs = metafile.outputs;
339
433
 
340
434
  Object.keys(outputs).forEach(async (k) => {
435
+ const pattern = `testeranto/bundles/${platform}/${this.name}/${this.configs.src}`;
436
+ if (!k.startsWith(pattern)) {
437
+ return false;
438
+ }
439
+
341
440
  const addableFiles = Object.keys(outputs[k].inputs).filter((i) => {
342
441
  if (!fs.existsSync(i)) return false;
343
442
  if (i.startsWith("node_modules")) return false;
443
+ if (i.startsWith("./node_modules")) return false;
444
+
344
445
  return true;
345
446
  });
346
447
 
347
448
  const f = `${k.split(".").slice(0, -1).join(".")}/`;
449
+
348
450
  if (!fs.existsSync(f)) {
349
451
  fs.mkdirSync(f);
350
452
  }
@@ -370,228 +472,6 @@ export class PM_Main extends PM_Base {
370
472
  });
371
473
  }
372
474
 
373
- tscCheck = async ({
374
- entrypoint,
375
- addableFiles,
376
- platform,
377
- }: {
378
- platform: IRunTime;
379
- entrypoint: string;
380
- addableFiles: string[];
381
- }) => {
382
- console.log(ansiC.green(ansiC.inverse(`tsc < ${entrypoint}`)));
383
- this.typeCheckIsRunning(entrypoint);
384
-
385
- const program = tsc.createProgramFromConfig({
386
- basePath: process.cwd(), // always required, used for relative paths
387
- configFilePath: "tsconfig.json", // config to inherit from (optional)
388
- compilerOptions: {
389
- outDir: tscPather(entrypoint, platform, this.name),
390
- // declaration: true,
391
- // skipLibCheck: true,
392
- noEmit: true,
393
- },
394
- include: addableFiles, //["src/**/*"],
395
- // exclude: ["node_modules", "../testeranto"],
396
- // exclude: ["**/*.test.ts", "**/*.spec.ts"],
397
- });
398
- const tscPath = tscPather(entrypoint, platform, this.name);
399
-
400
- let allDiagnostics = program.getSemanticDiagnostics();
401
-
402
- const results: string[] = [];
403
- allDiagnostics.forEach((diagnostic) => {
404
- if (diagnostic.file) {
405
- let { line, character } = ts.getLineAndCharacterOfPosition(
406
- diagnostic.file,
407
- diagnostic.start!
408
- );
409
- let message = ts.flattenDiagnosticMessageText(
410
- diagnostic.messageText,
411
- "\n"
412
- );
413
- results.push(
414
- `${diagnostic.file.fileName} (${line + 1},${
415
- character + 1
416
- }): ${message}`
417
- );
418
- } else {
419
- results.push(
420
- ts.flattenDiagnosticMessageText(diagnostic.messageText, "\n")
421
- );
422
- }
423
- });
424
-
425
- fs.writeFileSync(tscPath, results.join("\n"));
426
-
427
- this.typeCheckIsNowDone(entrypoint, results.length);
428
- };
429
-
430
- eslintCheck = async (
431
- entrypoint: string,
432
- platform: IRunTime,
433
- addableFiles: string[]
434
- ) => {
435
- console.log(ansiC.green(ansiC.inverse(`eslint < ${entrypoint}`)));
436
- this.lintIsRunning(entrypoint);
437
-
438
- const results = (await eslint.lintFiles(addableFiles))
439
- .filter((r) => r.messages.length)
440
- .filter((r) => {
441
- return r.messages[0].ruleId !== null;
442
- })
443
- .map((r) => {
444
- delete r.source;
445
- return r;
446
- });
447
-
448
- fs.writeFileSync(
449
- lintPather(entrypoint, platform, this.name),
450
- await formatter.format(results)
451
- );
452
- this.lintIsNowDone(entrypoint, results.length);
453
- };
454
-
455
- makePrompt = async (
456
- entryPoint: string,
457
- addableFiles: string[],
458
- platform: IRunTime
459
- ) => {
460
- this.bigBoard[entryPoint].prompt = "?";
461
- const promptPath = promptPather(entryPoint, platform, this.name);
462
-
463
- const testPaths = path.join(
464
- "testeranto",
465
- "reports",
466
- this.name,
467
- platform,
468
- entryPoint.split(".").slice(0, -1).join("."),
469
- `tests.json`
470
- );
471
-
472
- const featuresPath = path.join(
473
- "testeranto",
474
- "reports",
475
- this.name,
476
- platform,
477
- entryPoint.split(".").slice(0, -1).join("."),
478
- `featurePrompt.txt`
479
- );
480
-
481
- fs.writeFileSync(
482
- promptPath,
483
- `
484
- ${addableFiles
485
- .map((x) => {
486
- return `/add ${x}`;
487
- })
488
- .join("\n")}
489
-
490
- /read ${lintPather(entryPoint, platform, this.name)}
491
- /read ${tscPather(entryPoint, platform, this.name)}
492
- /read ${testPaths}
493
-
494
- /load ${featuresPath}
495
-
496
- /code Fix the failing tests described in ${testPaths}. Correct any type signature errors described in the files ${tscPather(
497
- entryPoint,
498
- platform,
499
- this.name
500
- )}. Implement any method which throws "Function not implemented. Resolve the lint errors described in ${lintPather(
501
- entryPoint,
502
- platform,
503
- this.name
504
- )}"
505
- `
506
- );
507
- this.bigBoard[
508
- entryPoint
509
- ].prompt = `aider --model deepseek/deepseek-chat --load testeranto/${
510
- this.name
511
- }/reports/${platform}/${entryPoint
512
- .split(".")
513
- .slice(0, -1)
514
- .join(".")}/prompt.txt`;
515
- this.checkForShutdown();
516
- };
517
-
518
- checkForShutdown = () => {
519
- this.writeBigBoard();
520
-
521
- if (this.mode === "dev") return;
522
-
523
- let inflight = false;
524
-
525
- Object.keys(this.bigBoard).forEach((k) => {
526
- if (this.bigBoard[k].prompt === "?") {
527
- console.log(ansiC.blue(ansiC.inverse(`🕕 prompt ${k}`)));
528
- inflight = true;
529
- }
530
- });
531
-
532
- Object.keys(this.bigBoard).forEach((k) => {
533
- if (this.bigBoard[k].runTimeError === "?") {
534
- console.log(ansiC.blue(ansiC.inverse(`🕕 runTimeError ${k}`)));
535
- inflight = true;
536
- }
537
- });
538
-
539
- Object.keys(this.bigBoard).forEach((k) => {
540
- if (this.bigBoard[k].staticErrors === "?") {
541
- console.log(ansiC.blue(ansiC.inverse(`🕕 staticErrors ${k}`)));
542
- inflight = true;
543
- }
544
- });
545
-
546
- Object.keys(this.bigBoard).forEach((k) => {
547
- if (this.bigBoard[k].typeErrors === "?") {
548
- console.log(ansiC.blue(ansiC.inverse(`🕕 typeErrors ${k}`)));
549
- inflight = true;
550
- }
551
- });
552
-
553
- this.writeBigBoard();
554
-
555
- if (!inflight) {
556
- this.browser.disconnect().then(() => {
557
- console.log(ansiC.inverse(`${this.name} has been tested. Goodbye.`));
558
- process.exit();
559
- });
560
- }
561
- };
562
-
563
- typeCheckIsRunning = (src: string) => {
564
- this.bigBoard[src].typeErrors = "?";
565
- };
566
-
567
- typeCheckIsNowDone = (src: string, failures: number) => {
568
- this.bigBoard[src].typeErrors = failures;
569
- this.writeBigBoard();
570
- this.checkForShutdown();
571
- };
572
-
573
- lintIsRunning = (src: string) => {
574
- this.bigBoard[src].staticErrors = "?";
575
- this.writeBigBoard();
576
- };
577
-
578
- lintIsNowDone = (src: string, failures: number) => {
579
- this.bigBoard[src].staticErrors = failures;
580
- this.writeBigBoard();
581
- this.checkForShutdown();
582
- };
583
-
584
- bddTestIsRunning = (src: string) => {
585
- this.bigBoard[src].runTimeError = "?";
586
- this.writeBigBoard();
587
- };
588
-
589
- bddTestIsNowDone = (src: string, failures: number) => {
590
- this.bigBoard[src].runTimeError = failures;
591
- this.writeBigBoard();
592
- this.checkForShutdown();
593
- };
594
-
595
475
  launchPure = async (src: string, dest: string) => {
596
476
  console.log(ansiC.green(ansiC.inverse(`! pure, ${src}`)));
597
477
  this.bddTestIsRunning(src);
@@ -600,6 +480,7 @@ ${addableFiles
600
480
  .split(".")
601
481
  .slice(0, -1)
602
482
  .join(".")}/pure`;
483
+
603
484
  if (!fs.existsSync(reportDest)) {
604
485
  fs.mkdirSync(reportDest, { recursive: true });
605
486
  }
@@ -618,7 +499,7 @@ ${addableFiles
618
499
  }
619
500
  const testConfigResource = testConfig[2];
620
501
 
621
- let portsToUse: string[] = [];
502
+ const portsToUse: string[] = [];
622
503
  if (testConfigResource.ports === 0) {
623
504
  argz = JSON.stringify({
624
505
  scheduled: true,
@@ -693,19 +574,23 @@ ${addableFiles
693
574
  defaultModule
694
575
  .receiveTestResourceConfig(argz)
695
576
  .then(async (results: IFinalResults) => {
696
- this.receiveFeatures(results.features, destFolder, src, "pure");
577
+ // this.receiveFeatures(results.features, destFolder, src, "pure");
578
+ // this.receiveFeaturesV2(reportDest, src, "pure");
579
+
697
580
  statusMessagePretty(results.fails, src);
698
581
  this.bddTestIsNowDone(src, results.fails);
699
582
  })
700
583
  .catch((e) => {
701
584
  console.log(
702
- ansiC.red(ansiC.inverse(`${src} errored with: ${e}`))
585
+ ansiC.red(
586
+ ansiC.inverse(`launchPure - ${src} errored with: ${e}`)
587
+ )
703
588
  );
704
589
  this.bddTestIsNowDone(src, -1);
705
- })
706
- .finally(() => {
707
- webSideCares.forEach((webSideCar) => webSideCar.close());
708
590
  });
591
+ // .finally(() => {
592
+ // // webSideCares.forEach((webSideCar) => webSideCar.close());
593
+ // });
709
594
  })
710
595
  .catch((e) => {
711
596
  console.log(
@@ -734,10 +619,9 @@ ${addableFiles
734
619
  statusMessagePretty(-1, src);
735
620
  }
736
621
 
737
- // console.log("portsToUse", portsToUse);
738
622
  for (let i = 0; i <= portsToUse.length; i++) {
739
623
  if (portsToUse[i]) {
740
- this.ports[portsToUse[i]] = "true"; //port is open again
624
+ this.ports[portsToUse[i]] = true; //port is open again
741
625
  }
742
626
  }
743
627
  };
@@ -750,11 +634,12 @@ ${addableFiles
750
634
  .split(".")
751
635
  .slice(0, -1)
752
636
  .join(".")}/node`;
637
+
753
638
  if (!fs.existsSync(reportDest)) {
754
639
  fs.mkdirSync(reportDest, { recursive: true });
755
640
  }
756
641
 
757
- const destFolder = dest.replace(".mjs", "");
642
+ // const destFolder = dest.replace(".mjs", "");
758
643
 
759
644
  let testResources = "";
760
645
 
@@ -770,17 +655,20 @@ ${addableFiles
770
655
  }
771
656
  const testConfigResource = testConfig[2];
772
657
 
773
- let portsToUse: string[] = [];
658
+ const portsToUse: string[] = [];
774
659
  if (testConfigResource.ports === 0) {
775
- testResources = JSON.stringify({
776
- scheduled: true,
660
+ console.error("portsToUse?!", []);
661
+ const t: ITTestResourceConfiguration = {
777
662
  name: src,
778
- ports: portsToUse,
663
+ // ports: portsToUse.map((v) => Number(v)),
664
+ ports: [],
779
665
  fs: reportDest,
780
666
  browserWSEndpoint: this.browser.wsEndpoint(),
781
- });
667
+ };
668
+
669
+ testResources = JSON.stringify(t);
782
670
  } else if (testConfigResource.ports > 0) {
783
- const openPorts = Object.entries(this.ports).filter(
671
+ const openPorts: [string, boolean][] = Object.entries(this.ports).filter(
784
672
  ([portnumber, portopen]) => portopen
785
673
  );
786
674
 
@@ -791,14 +679,17 @@ ${addableFiles
791
679
  this.ports[openPorts[i][0]] = false; // port is now closed
792
680
  }
793
681
 
682
+ console.error("portsToUse", portsToUse);
683
+
794
684
  testResources = JSON.stringify({
795
685
  scheduled: true,
796
686
  name: src,
797
687
  ports: portsToUse,
798
- fs: destFolder,
688
+ fs: reportDest,
799
689
  browserWSEndpoint: this.browser.wsEndpoint(),
800
690
  });
801
691
  } else {
692
+ console.log("Not enough ports! Enqueuing test job...");
802
693
  this.queue.push(src);
803
694
  return;
804
695
  }
@@ -809,52 +700,33 @@ ${addableFiles
809
700
 
810
701
  const builtfile = dest;
811
702
 
812
- // const webSideCares: Page[] = [];
813
-
814
- // await Promise.all(
815
- // testConfig[3].map(async (sidecar) => {
816
- // if (sidecar[1] === "web") {
817
- // const s = await this.launchWebSideCar(
818
- // sidecar[0],
819
- // destinationOfRuntime(sidecar[0], "web", this.configs),
820
- // sidecar
821
- // );
822
- // webSideCares.push(s);
823
- // return s;
824
- // }
825
-
826
- // if (sidecar[1] === "node") {
827
- // return this.launchNodeSideCar(
828
- // sidecar[0],
829
- // destinationOfRuntime(sidecar[0], "node", this.configs),
830
- // sidecar
831
- // );
832
- // }
833
- // })
834
- // );
835
-
836
- // const f = fork(builtfile, [testResources], {
837
- // silent: true,
838
- // // detached: true,
839
- // // stdio: "ignore",
840
- // });
841
-
842
703
  let haltReturns = false;
843
704
 
705
+ const ipcfile = "/tmp/tpipe_" + Math.random();
706
+ const child = spawn(
707
+ "node",
708
+ // "node --inspect-brk ",
709
+ [builtfile, testResources, ipcfile],
710
+ {
711
+ stdio: ["pipe", "pipe", "pipe", "ipc"],
712
+ }
713
+ );
714
+
844
715
  let buffer: Buffer<ArrayBufferLike> = new Buffer("");
845
716
 
846
717
  const server = net.createServer((socket) => {
718
+ const queue = new Queue<string[]>();
719
+
847
720
  socket.on("data", (data) => {
848
721
  buffer = Buffer.concat([buffer, data]);
849
722
 
850
- let messages: string[][] = [];
851
723
  for (let b = 0; b < buffer.length + 1; b++) {
852
- let c = buffer.slice(0, b);
724
+ const c = buffer.slice(0, b);
853
725
  let d;
854
726
  try {
855
727
  d = JSON.parse(c.toString());
856
728
 
857
- messages.push(d);
729
+ queue.enqueue(d);
858
730
  buffer = buffer.slice(b, buffer.length + 1);
859
731
  b = 0;
860
732
  } catch (e) {
@@ -862,82 +734,52 @@ ${addableFiles
862
734
  }
863
735
  }
864
736
 
865
- messages.forEach(async (payload) => {
866
- // set up the "node" listeners
867
- this.mapping().forEach(async ([command, func]) => {
868
- if (payload[0] === command) {
869
- const x = payload.slice(1, -1);
870
- const r = await this[command](...x);
871
-
872
- if (!haltReturns) {
873
- child.send(
874
- JSON.stringify({
875
- payload: r,
876
- key: payload[payload.length - 1],
877
- })
878
- );
737
+ while (queue.size() > 0) {
738
+ const message = queue.dequeue();
739
+
740
+ if (message) {
741
+ // set up the "node" listeners
742
+ this.mapping().forEach(async ([command, func]) => {
743
+ if (message[0] === command) {
744
+ const x = message.slice(1, -1);
745
+ const r = await this[command](...x);
746
+
747
+ if (!haltReturns) {
748
+ child.send(
749
+ JSON.stringify({
750
+ payload: r,
751
+ key: message[message.length - 1],
752
+ })
753
+ );
754
+ }
879
755
  }
880
- }
881
- });
882
- });
756
+ });
757
+ }
758
+ }
883
759
  });
884
760
  });
885
761
 
886
762
  const oStream = fs.createWriteStream(`${reportDest}/console_log.txt`);
887
763
 
888
- const child = spawn(
889
- "node",
890
- [builtfile, testResources, "--trace-warnings"],
891
- {
892
- stdio: ["pipe", "pipe", "pipe", "ipc"],
893
- // silent: true
894
- }
895
- );
896
-
897
- const p = destFolder + "/tpipe";
898
- // exec(`lsof`, (ec, out, err) => {
899
- // console.log(ec, out, err);
900
- // });
901
-
902
- // if (fs.existsSync(p)) {
903
- // fs.rmSync(p);
904
- // }
905
-
906
764
  const errFile = `${reportDest}/error.txt`;
907
765
 
908
766
  if (fs.existsSync(errFile)) {
909
767
  fs.rmSync(errFile);
910
768
  }
911
769
 
912
- // server.on("error", (e) => {
913
- // if (e.code === "EADDRINUSE") {
914
- // console.error(e);
915
- // process.exit(-1);
916
- // // console.error("Address in use, retrying...");
917
- // // setTimeout(() => {
918
- // // server.close();
919
- // // server.listen(p);
920
- // // }, 1000);
921
- // }
922
- // });
923
-
924
- server.listen(p, () => {
770
+ server.listen(ipcfile, () => {
925
771
  child.stderr?.on("data", (data) => {
926
- oStream.write(`stderr data ${data}`);
772
+ oStream.write(`stderr > ${data}`);
927
773
  });
928
774
  child.stdout?.on("data", (data) => {
929
- oStream.write(`stdout data ${data}`);
775
+ oStream.write(`stdout > ${data}`);
930
776
  });
931
777
  child.on("close", (code) => {
932
- console.log("close");
933
- console.log("deleting", p);
934
- if (fs.existsSync(p)) {
935
- fs.rmSync(p);
936
- }
937
-
938
778
  oStream.close();
939
779
  server.close();
940
780
 
781
+ // this.receiveFeaturesV2(reportDest, src, "node");
782
+
941
783
  if (code === null) {
942
784
  this.bddTestIsNowDone(src, -1);
943
785
  statusMessagePretty(-1, src);
@@ -952,20 +794,16 @@ ${addableFiles
952
794
  haltReturns = true;
953
795
  });
954
796
  child.on("exit", (code) => {
955
- console.log("exit");
956
- console.log("deleting", p);
957
- if (fs.existsSync(p)) {
958
- fs.rmSync(p);
959
- }
960
-
961
797
  haltReturns = true;
798
+
799
+ for (let i = 0; i <= portsToUse.length; i++) {
800
+ if (portsToUse[i]) {
801
+ this.ports[portsToUse[i]] = true; //port is open again
802
+ }
803
+ }
962
804
  });
963
805
  child.on("error", (e) => {
964
806
  console.log("error");
965
- console.log("deleting", p);
966
- if (fs.existsSync(p)) {
967
- fs.rmSync(p);
968
- }
969
807
 
970
808
  haltReturns = true;
971
809
 
@@ -979,170 +817,338 @@ ${addableFiles
979
817
  this.writeFileSync(`${reportDest}/error.txt`, e.toString(), src);
980
818
  this.bddTestIsNowDone(src, -1);
981
819
  statusMessagePretty(-1, src);
982
-
983
- // this.bddTestIsNowDone(src, -1);
984
- // statusMessagePretty(-1, src);
985
820
  });
986
821
  });
987
-
988
- child.send({ path: p });
989
-
990
- for (let i = 0; i <= portsToUse.length; i++) {
991
- if (portsToUse[i]) {
992
- this.ports[portsToUse[i]] = "true"; //port is open again
993
- }
994
- }
995
822
  };
996
823
 
997
824
  launchWebSideCar = async (
998
- src: string,
999
- dest: string,
825
+ // src: string,
826
+ // dest: string,
1000
827
  testConfig: ITestTypes
1001
- ): Promise<Page> => {
1002
- const d = dest + ".mjs";
828
+ ): Promise<[number, ITTestResourceConfiguration]> => {
829
+ const src = testConfig[0];
830
+ const dest = src.split(".").slice(0, -1).join(".");
831
+ // const d = dest + ".mjs";
832
+
833
+ const destFolder = dest.replace(".mjs", "");
1003
834
 
1004
835
  console.log(ansiC.green(ansiC.inverse(`launchWebSideCar ${src}`)));
1005
836
 
1006
837
  const fileStreams2: fs.WriteStream[] = [];
1007
838
  const doneFileStream2: Promise<any>[] = [];
1008
839
 
840
+ const oStream = fs.createWriteStream(`${destFolder}/console_log.txt`);
841
+
1009
842
  return new Promise((res, rej) => {
1010
843
  this.browser
1011
844
  .newPage()
1012
- .then((page) => {
1013
- // page.on("console", (msg) => {
1014
- // console.log("web > ", msg.args(), msg.text());
1015
- // // for (let i = 0; i < msg._args.length; ++i)
1016
- // // console.log(`${i}: ${msg._args[i]}`);
1017
- // });
1018
-
1019
- page.exposeFunction(
1020
- "custom-screenshot",
1021
- async (ssOpts: ScreenshotOptions, testName: string) => {
1022
- const p = ssOpts.path as string;
1023
- const dir = path.dirname(p);
1024
- fs.mkdirSync(dir, {
1025
- recursive: true,
1026
- });
1027
- files[testName].add(ssOpts.path as string);
1028
-
1029
- const sPromise = page.screenshot({
1030
- ...ssOpts,
1031
- path: p,
1032
- });
845
+ .then(async (page) => {
846
+ this.mapping().forEach(async ([command, func]) => {
847
+ page.exposeFunction(command, func);
848
+ });
1033
849
 
1034
- if (!screenshots[testName]) {
1035
- screenshots[testName] = [];
1036
- }
1037
- screenshots[testName].push(sPromise);
1038
- await sPromise;
1039
- return sPromise;
850
+ const close = () => {
851
+ if (!files[src]) {
852
+ files[src] = new Set();
1040
853
  }
1041
- );
854
+ // files[t].add(filepath);
855
+
856
+ // fs.writeFileSync(
857
+ // destFolder + "/manifest.json",
858
+ // JSON.stringify(Array.from(files[src]))
859
+ // );
860
+ delete files[src];
861
+
862
+ Promise.all(screenshots[src] || []).then(() => {
863
+ delete screenshots[src];
864
+ page.close();
865
+ oStream.close();
866
+ });
867
+ };
868
+
869
+ page.on("pageerror", (err: Error) => {
870
+ console.debug(`Error from ${src}: [${err.name}] `);
871
+ oStream.write(err.name);
872
+ oStream.write("\n");
1042
873
 
1043
- page.exposeFunction(
1044
- "writeFileSync",
1045
- (fp: string, contents: string, testName: string) => {
1046
- const dir = path.dirname(fp);
874
+ if (err.cause) {
875
+ console.debug(`Error from ${src} cause: [${err.cause}] `);
876
+ oStream.write(err.cause);
877
+ oStream.write("\n");
878
+ }
1047
879
 
1048
- fs.mkdirSync(dir, {
1049
- recursive: true,
1050
- });
880
+ if (err.stack) {
881
+ console.debug(`Error from stack ${src}: [${err.stack}] `);
882
+ oStream.write(err.stack);
883
+ oStream.write("\n");
884
+ }
1051
885
 
1052
- const p = new Promise<string>(async (res, rej) => {
1053
- fs.writeFileSync(fp, contents);
1054
- res(fp);
1055
- });
1056
- doneFileStream2.push(p);
886
+ console.debug(`Error from message ${src}: [${err.message}] `);
887
+ oStream.write(err.message);
888
+ oStream.write("\n");
1057
889
 
1058
- if (!files[testName]) {
1059
- files[testName] = new Set();
1060
- }
1061
- files[testName].add(fp);
1062
- return p;
1063
- }
1064
- );
890
+ this.bddTestIsNowDone(src, -1);
891
+ close();
892
+ });
1065
893
 
1066
- page.exposeFunction("existsSync", (fp: string, contents: string) => {
1067
- return fs.existsSync(fp);
894
+ page.on("console", (log: ConsoleMessage) => {
895
+ oStream.write(log.text());
896
+ oStream.write(JSON.stringify(log.location()));
897
+ oStream.write(JSON.stringify(log.stackTrace()));
898
+ oStream.write("\n");
1068
899
  });
1069
900
 
1070
- page.exposeFunction("mkdirSync", (fp: string) => {
1071
- if (!fs.existsSync(fp)) {
1072
- return fs.mkdirSync(fp, {
1073
- recursive: true,
1074
- });
1075
- }
1076
- return false;
901
+ await page.goto(`file://${`${destFolder}.html`}`, {});
902
+
903
+ const webArgz = JSON.stringify({
904
+ name: dest,
905
+ ports: [].toString(),
906
+ fs: dest,
907
+ browserWSEndpoint: this.browser.wsEndpoint(),
1077
908
  });
1078
909
 
1079
- page.exposeFunction(
1080
- "createWriteStream",
1081
- (fp: string, testName: string) => {
1082
- const f = fs.createWriteStream(fp);
910
+ const d = `${dest}?cacheBust=${Date.now()}`;
1083
911
 
1084
- files[testName].add(fp);
912
+ const evaluation = `
913
+ import('${d}').then(async (x) => {
1085
914
 
1086
- const p = new Promise<string>((res, rej) => {
1087
- res(fp);
1088
- });
1089
- doneFileStream2.push(p);
1090
- f.on("close", async () => {
1091
- await p;
1092
- });
1093
- fileStreams2.push(f);
1094
- return {
1095
- ...JSON.parse(JSON.stringify(f)),
1096
- uid: fileStreams2.length - 1,
1097
- };
1098
- }
1099
- );
915
+ try {
916
+ return await (await x.default).receiveTestResourceConfig(${webArgz})
917
+ } catch (e) {
918
+ console.log("fail", e.toString())
919
+ }
920
+ })`;
1100
921
 
1101
- page.exposeFunction(
1102
- "write",
1103
- async (uid: number, contents: string) => {
1104
- return fileStreams2[uid].write(contents);
1105
- }
1106
- );
922
+ await page
923
+ .evaluate(evaluation)
924
+ .then(async ({ fails, failed, features }: IFinalResults) => {
925
+ // this.receiveFeatures(features, destFolder, src, "web");
926
+ // this.receiveFeaturesV2(reportDest, src, "web");
1107
927
 
1108
- page.exposeFunction("end", async (uid: number) => {
1109
- return fileStreams2[uid].end();
1110
- });
928
+ statusMessagePretty(fails, src);
929
+ this.bddTestIsNowDone(src, fails);
930
+ })
931
+ .catch((e) => {
932
+ console.log(
933
+ ansiC.red(
934
+ ansiC.inverse(`launchWebSidecar - ${src} errored with: ${e}`)
935
+ )
936
+ );
937
+ })
938
+ .finally(() => {
939
+ this.bddTestIsNowDone(src, -1);
940
+ close();
941
+ });
1111
942
 
1112
943
  return page;
944
+
945
+ // return page;
1113
946
  })
1114
947
  .then(async (page) => {
1115
948
  await page.goto(`file://${`${dest}.html`}`, {});
1116
949
 
1117
950
  /* @ts-ignore:next-line */
1118
- res(page);
951
+ res([Math.random(), page]);
1119
952
  });
1120
953
  });
1121
954
  };
1122
955
 
1123
956
  launchNodeSideCar = async (
1124
- src: string,
1125
- dest: string,
1126
- testConfig: ITestTypes
1127
- ) => {
957
+ sidecar: ITestTypes
958
+ ): Promise<[number, ITTestResourceConfiguration]> => {
959
+ const src = sidecar[0];
960
+ const dest =
961
+ process.cwd() + `/testeranto/bundles/node/${this.name}/${sidecar[0]}`;
1128
962
  const d = dest + ".mjs";
1129
- console.log(ansiC.green(ansiC.inverse(`launchNodeSideCar ${src}`)));
963
+ console.log(ansiC.green(ansiC.inverse(`launchNodeSideCar ${sidecar[0]}`)));
964
+
965
+ const destFolder = dest.replace(".ts", "");
966
+
967
+ const reportDest = `testeranto/reports/${this.name}/${src
968
+ .split(".")
969
+ .slice(0, -1)
970
+ .join(".")}/node`;
971
+
972
+ const argz: ITTestResourceConfiguration = {
973
+ name: sidecar[0],
974
+ ports: [],
975
+ fs: destFolder,
976
+ browserWSEndpoint: this.browser.wsEndpoint(),
977
+ };
978
+
979
+ const testReq: { ports: number } = sidecar[2];
980
+
981
+ const portsToUse: number[] = [];
982
+ if (testReq.ports === 0) {
983
+ // argz = {
984
+ // name: sidecar[0],
985
+ // ports: portsToUse,
986
+ // fs: destFolder,
987
+ // browserWSEndpoint: this.browser.wsEndpoint(),
988
+ // };
989
+ } else if (testReq.ports > 0) {
990
+ const openPorts = Object.entries(this.ports).filter(
991
+ ([portnumber, portopen]) => portopen
992
+ );
993
+
994
+ if (openPorts.length >= testReq.ports) {
995
+ for (let i = 0; i < testReq.ports; i++) {
996
+ portsToUse.push(openPorts[i][0]);
997
+
998
+ this.ports[openPorts[i][0]] = false; // port is now closed
999
+ }
1000
+
1001
+ console.log("nodeSideCar portsToUse", portsToUse);
1002
+ argz.ports = portsToUse;
1003
+
1004
+ const builtfile = destFolder + ".mjs";
1005
+
1006
+ let haltReturns = false;
1007
+
1008
+ let buffer: Buffer<ArrayBufferLike> = new Buffer("");
1009
+
1010
+ const server = net.createServer((socket) => {
1011
+ socket.on("data", (data) => {
1012
+ buffer = Buffer.concat([buffer, data]);
1013
+
1014
+ const messages: string[][] = [];
1015
+ for (let b = 0; b < buffer.length + 1; b++) {
1016
+ const c = buffer.slice(0, b);
1017
+ let d;
1018
+ try {
1019
+ d = JSON.parse(c.toString());
1020
+
1021
+ messages.push(d);
1022
+ buffer = buffer.slice(b, buffer.length + 1);
1023
+ b = 0;
1024
+ } catch (e) {
1025
+ // b++;
1026
+ }
1027
+ }
1028
+
1029
+ messages.forEach(async (payload) => {
1030
+ this.mapping().forEach(async ([command, func]) => {
1031
+ if (payload[0] === command) {
1032
+ const x = payload.slice(1, -1);
1033
+ const r = await this[command](...x);
1034
+
1035
+ if (!haltReturns) {
1036
+ child.send(
1037
+ JSON.stringify({
1038
+ payload: r,
1039
+ key: payload[payload.length - 1],
1040
+ })
1041
+ );
1042
+ }
1043
+ }
1044
+ });
1045
+ });
1046
+ });
1047
+ });
1048
+
1049
+ const oStream = fs.createWriteStream(`${reportDest}/console_log.txt`);
1050
+
1051
+ const child = spawn("node", [builtfile, JSON.stringify(argz)], {
1052
+ stdio: ["pipe", "pipe", "pipe", "ipc"],
1053
+ // silent: true
1054
+ });
1055
+
1056
+ const p = "/tmp/tpipe" + Math.random();
1057
+
1058
+ const errFile = `${reportDest}/error.txt`;
1059
+
1060
+ server.listen(p, () => {
1061
+ child.stderr?.on("data", (data) => {
1062
+ oStream.write(`stderr > ${data}`);
1063
+ });
1064
+ child.stdout?.on("data", (data) => {
1065
+ oStream.write(`stdout > ${data}`);
1066
+ });
1067
+ child.on("close", (code) => {
1068
+ oStream.close();
1069
+ server.close();
1070
+
1071
+ haltReturns = true;
1072
+ });
1073
+ child.on("exit", (code) => {
1074
+ haltReturns = true;
1075
+
1076
+ for (let i = 0; i <= portsToUse.length; i++) {
1077
+ if (portsToUse[i]) {
1078
+ this.ports[portsToUse[i]] = true; //port is open again
1079
+ }
1080
+ }
1081
+ });
1082
+ child.on("error", (e) => {
1083
+ if (fs.existsSync(p)) {
1084
+ fs.rmSync(p);
1085
+ }
1086
+
1087
+ haltReturns = true;
1088
+
1089
+ console.log(
1090
+ ansiC.red(
1091
+ ansiC.inverse(
1092
+ `launchNodeSideCar - ${src} errored with: ${e.name}. Check ${errFile}for more info`
1093
+ )
1094
+ )
1095
+ );
1096
+ this.writeFileSync(`${reportDest}/error.txt`, e.toString(), src);
1097
+ // this.bddTestIsNowDone(src, -1);
1098
+ // statusMessagePretty(-1, src);
1099
+ });
1100
+ });
1101
+
1102
+ child.send({ path: p });
1103
+
1104
+ const r = Math.random();
1105
+ this.nodeSidecars[r] = child;
1106
+ return [r, argz];
1107
+ } else {
1108
+ console.log("Not enough open ports!", openPorts, testReq.ports);
1109
+ this.queue.push(sidecar[0]);
1110
+ return [Math.random(), argz];
1111
+ }
1112
+ } else {
1113
+ console.error("negative port makes no sense", sidecar[0]);
1114
+ process.exit(-1);
1115
+ }
1116
+ };
1117
+
1118
+ stopPureSideCar = async (uid: number) => {
1119
+ console.log(ansiC.green(ansiC.inverse(`stopPureSideCar ${uid}`)));
1120
+ await this.sidecars[uid].shutdown();
1121
+ return;
1122
+ };
1123
+
1124
+ launchPureSideCar = async (
1125
+ sidecar: ITestTypes
1126
+ ): Promise<[number, ITTestResourceConfiguration]> => {
1127
+ console.log(ansiC.green(ansiC.inverse(`launchPureSideCar ${sidecar[0]}`)));
1128
+
1129
+ const r = Math.random();
1130
+
1131
+ const dest =
1132
+ process.cwd() + `/testeranto/bundles/pure/${this.name}/${sidecar[0]}`;
1133
+ const builtfile = dest.split(".").slice(0, -1).concat("mjs").join(".");
1130
1134
 
1131
1135
  const destFolder = dest.replace(".mjs", "");
1132
1136
 
1133
- let argz = "";
1137
+ let argz: ITTestResourceConfiguration;
1134
1138
 
1135
- const testConfigResource = testConfig[2];
1139
+ const z = sidecar[2];
1140
+ const testConfigResource: { ports: number } = sidecar[2];
1141
+ const src = sidecar[0];
1136
1142
 
1137
- let portsToUse: string[] = [];
1143
+ const portsToUse: number[] = [];
1138
1144
  if (testConfigResource.ports === 0) {
1139
- argz = JSON.stringify({
1140
- scheduled: true,
1145
+ argz = {
1146
+ // scheduled: true,
1141
1147
  name: src,
1142
1148
  ports: portsToUse,
1143
1149
  fs: destFolder,
1144
1150
  browserWSEndpoint: this.browser.wsEndpoint(),
1145
- });
1151
+ };
1146
1152
  } else if (testConfigResource.ports > 0) {
1147
1153
  const openPorts = Object.entries(this.ports).filter(
1148
1154
  ([portnumber, portopen]) => portopen
@@ -1155,14 +1161,14 @@ ${addableFiles
1155
1161
  this.ports[openPorts[i][0]] = false; // port is now closed
1156
1162
  }
1157
1163
 
1158
- argz = JSON.stringify({
1159
- scheduled: true,
1164
+ argz = {
1165
+ // scheduled: true,
1160
1166
  name: src,
1161
1167
  // ports: [3333],
1162
1168
  ports: portsToUse,
1163
1169
  fs: ".",
1164
1170
  browserWSEndpoint: this.browser.wsEndpoint(),
1165
- });
1171
+ };
1166
1172
  } else {
1167
1173
  this.queue.push(src);
1168
1174
  return;
@@ -1172,32 +1178,19 @@ ${addableFiles
1172
1178
  process.exit(-1);
1173
1179
  }
1174
1180
 
1175
- const builtfile = dest + ".mjs";
1181
+ // const builtfile = dest + ".mjs";
1176
1182
 
1177
1183
  await import(`${builtfile}?cacheBust=${Date.now()}`).then((module) => {
1178
- return module.default.then((defaultModule) => {
1179
- // console.log("defaultModule", defaultModule);
1180
- const s = new defaultModule();
1181
- s.receiveTestResourceConfig(argz);
1182
- // Object.create(defaultModule);
1183
-
1184
- // defaultModule
1185
- // .receiveTestResourceConfig(argz)
1186
- // .then((x) => {
1187
- // console.log("then", x);
1188
- // return x;
1189
- // })
1190
- // .catch((e) => {
1191
- // console.log("catch", e);
1192
- // });
1193
- });
1184
+ this.pureSidecars[r] = module.default;
1185
+ this.pureSidecars[r].start(argz);
1194
1186
  });
1195
1187
 
1196
- for (let i = 0; i <= portsToUse.length; i++) {
1197
- if (portsToUse[i]) {
1198
- this.ports[portsToUse[i]] = "true"; //port is open again
1199
- }
1200
- }
1188
+ return [r, argz];
1189
+ // for (let i = 0; i <= portsToUse.length; i++) {
1190
+ // if (portsToUse[i]) {
1191
+ // this.ports[portsToUse[i]] = "true"; //port is open again
1192
+ // }
1193
+ // }
1201
1194
  };
1202
1195
 
1203
1196
  launchWeb = async (src: string, dest: string) => {
@@ -1215,7 +1208,7 @@ ${addableFiles
1215
1208
  const destFolder = dest.replace(".mjs", "");
1216
1209
 
1217
1210
  const webArgz = JSON.stringify({
1218
- name: dest,
1211
+ name: src,
1219
1212
  ports: [].toString(),
1220
1213
  fs: reportDest,
1221
1214
  browserWSEndpoint: this.browser.wsEndpoint(),
@@ -1239,9 +1232,18 @@ ${addableFiles
1239
1232
  this.browser
1240
1233
  .newPage()
1241
1234
  .then((page) => {
1242
- // set up the "node" listeners
1243
1235
  this.mapping().forEach(async ([command, func]) => {
1244
- page.exposeFunction(command, func);
1236
+ if (command === "page") {
1237
+ page.exposeFunction(command, (x?) => {
1238
+ if (x) {
1239
+ return func(x);
1240
+ } else {
1241
+ return func(page.mainFrame()._id);
1242
+ }
1243
+ });
1244
+ } else {
1245
+ return page.exposeFunction(command, func);
1246
+ }
1245
1247
  });
1246
1248
 
1247
1249
  return page;
@@ -1253,10 +1255,10 @@ ${addableFiles
1253
1255
  }
1254
1256
  // files[t].add(filepath);
1255
1257
 
1256
- fs.writeFileSync(
1257
- destFolder + "/manifest.json",
1258
- JSON.stringify(Array.from(files[src]))
1259
- );
1258
+ // fs.writeFileSync(
1259
+ // destFolder + "/manifest.json",
1260
+ // JSON.stringify(Array.from(files[src]))
1261
+ // );
1260
1262
  delete files[src];
1261
1263
 
1262
1264
  Promise.all(screenshots[src] || []).then(() => {
@@ -1292,24 +1294,34 @@ ${addableFiles
1292
1294
  });
1293
1295
  page.on("console", (log: ConsoleMessage) => {
1294
1296
  oStream.write(log.text());
1297
+ oStream.write("\n");
1295
1298
  oStream.write(JSON.stringify(log.location()));
1299
+ oStream.write("\n");
1296
1300
  oStream.write(JSON.stringify(log.stackTrace()));
1297
1301
  oStream.write("\n");
1298
1302
  });
1303
+
1299
1304
  await page.goto(`file://${`${destFolder}.html`}`, {});
1300
1305
 
1306
+ this.webSidecars[Math.random()] = page.mainFrame()._id;
1307
+
1301
1308
  await page
1302
1309
  .evaluate(evaluation)
1303
1310
  .then(async ({ fails, failed, features }: IFinalResults) => {
1304
- this.receiveFeatures(features, destFolder, src, "web");
1311
+ // this.receiveFeatures(features, destFolder, src, "web");
1312
+ // this.receiveFeaturesV2(reportDest, src, "web");
1313
+
1305
1314
  statusMessagePretty(fails, src);
1306
1315
  this.bddTestIsNowDone(src, fails);
1307
1316
  })
1308
1317
  .catch((e) => {
1309
- console.log(ansiC.red(ansiC.inverse(`${src} errored with: ${e}`)));
1318
+ console.log(
1319
+ ansiC.red(ansiC.inverse(`launchweb - ${src} errored with: ${e}`))
1320
+ );
1310
1321
  })
1311
1322
  .finally(() => {
1312
1323
  this.bddTestIsNowDone(src, -1);
1324
+ // process.exit(-1);
1313
1325
  close();
1314
1326
  });
1315
1327
 
@@ -1317,9 +1329,8 @@ ${addableFiles
1317
1329
  });
1318
1330
  };
1319
1331
 
1320
- receiveFeatures = (
1321
- features: string[],
1322
- destFolder: string,
1332
+ receiveFeaturesV2 = (
1333
+ reportDest: string,
1323
1334
  srcTest: string,
1324
1335
  platform: IRunTime
1325
1336
  ) => {
@@ -1331,8 +1342,16 @@ ${addableFiles
1331
1342
  srcTest.split(".").slice(0, -1).join(".") + ".features.txt"
1332
1343
  );
1333
1344
 
1334
- features
1345
+ const testReport = JSON.parse(
1346
+ fs.readFileSync(`${reportDest}/tests.json`).toString()
1347
+ );
1348
+
1349
+ // console.log("mark2", testReport);
1350
+
1351
+ testReport.features
1335
1352
  .reduce(async (mm, featureStringKey) => {
1353
+ // console.log("mark4", featureStringKey);
1354
+
1336
1355
  const accum = await mm;
1337
1356
 
1338
1357
  const isUrl = isValidUrl(featureStringKey);
@@ -1346,16 +1365,16 @@ ${addableFiles
1346
1365
  u.pathname
1347
1366
  )}`;
1348
1367
 
1349
- await fs.promises.mkdir(path.dirname(newPath), { recursive: true });
1368
+ // await fs.promises.mkdir(path.dirname(newPath), { recursive: true });
1350
1369
 
1351
- try {
1352
- await fs.unlinkSync(newPath);
1353
- // console.log(`Removed existing link at ${newPath}`);
1354
- } catch (error) {
1355
- if (error.code !== "ENOENT") {
1356
- // throw error;
1357
- }
1358
- }
1370
+ // try {
1371
+ // await fs.unlinkSync(newPath);
1372
+ // // console.log(`Removed existing link at ${newPath}`);
1373
+ // } catch (error) {
1374
+ // if (error.code !== "ENOENT") {
1375
+ // // throw error;
1376
+ // }
1377
+ // }
1359
1378
 
1360
1379
  // fs.symlink(u.pathname, newPath, (err) => {
1361
1380
  // if (err) {
@@ -1364,12 +1383,14 @@ ${addableFiles
1364
1383
  // // console.log("Symlink created successfully");
1365
1384
  // }
1366
1385
  // });
1367
- accum.files.push(newPath);
1386
+ accum.files.push(u.pathname);
1368
1387
  } else if (u.protocol === "http:" || u.protocol === "https:") {
1369
- const newPath = `${process.cwd()}/testeranto/features/external${
1388
+ const newPath = `${process.cwd()}/testeranto/features/external/${
1370
1389
  u.hostname
1371
1390
  }${u.pathname}`;
1391
+
1372
1392
  const body = await this.configs.featureIngestor(featureStringKey);
1393
+
1373
1394
  writeFileAndCreateDir(newPath, body);
1374
1395
  accum.files.push(newPath);
1375
1396
  }
@@ -1385,6 +1406,8 @@ ${addableFiles
1385
1406
  }, Promise.resolve({ files: [] as string[], strings: [] as string[] }))
1386
1407
 
1387
1408
  .then(({ files, strings }: { files: string[]; strings: string[] }) => {
1409
+ // Markdown files must be referenced in the prompt but string style features are already present in the test.json file
1410
+
1388
1411
  fs.writeFileSync(
1389
1412
  `testeranto/reports/${this.name}/${srcTest
1390
1413
  .split(".")
@@ -1397,12 +1420,16 @@ ${addableFiles
1397
1420
  .join("\n")
1398
1421
  );
1399
1422
  });
1400
- };
1401
1423
 
1402
- writeBigBoard = () => {
1403
- fs.writeFileSync(
1404
- `./testeranto/reports/${this.name}/summary.json`,
1405
- JSON.stringify(this.bigBoard, null, 2)
1406
- );
1424
+ // const f: Record<string, string> = {};
1425
+
1426
+ testReport.givens.forEach((g) => {
1427
+ if (g.failed === true) {
1428
+ this.summary[srcTest].failingFeatures[g.key] = g.features;
1429
+ }
1430
+ });
1431
+
1432
+ // this.summary[srcTest].failingFeatures = f;
1433
+ this.writeBigBoard();
1407
1434
  };
1408
1435
  }