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
@@ -1,17 +1,17 @@
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 */
1
5
  import { spawn } from "node:child_process";
2
- import ts from "typescript";
3
6
  import net from "net";
4
7
  import fs, { watch } from "fs";
5
8
  import path from "path";
6
9
  import puppeteer from "puppeteer-core";
7
10
  import ansiC from "ansi-colors";
8
11
  import crypto from "node:crypto";
9
- import { ESLint } from "eslint";
10
- import tsc from "tsc-prog";
11
- import { getRunnables, lintPather, promptPather, tscPather, } from "../utils";
12
- import { PM_Base } from "./base.js";
13
- const eslint = new ESLint();
14
- const formatter = await eslint.loadFormatter("./node_modules/testeranto/dist/prebuild/esbuildConfigs/eslint-formatter-testeranto.mjs");
12
+ import { getRunnables } from "../utils";
13
+ import { Queue } from "../utils/queue.js";
14
+ import { PM_WithEslintAndTsc } from "./PM_WithEslintAndTsc.js";
15
15
  const changes = {};
16
16
  const fileHashes = {};
17
17
  const files = {};
@@ -44,7 +44,7 @@ async function writeFileAndCreateDir(filePath, data) {
44
44
  const dirPath = path.dirname(filePath);
45
45
  try {
46
46
  await fs.promises.mkdir(dirPath, { recursive: true });
47
- await fs.appendFileSync(filePath, data);
47
+ await fs.writeFileSync(filePath, data);
48
48
  }
49
49
  catch (error) {
50
50
  console.error(`Error writing file: ${error}`);
@@ -67,7 +67,7 @@ function isValidUrl(string) {
67
67
  }
68
68
  }
69
69
  // Wait for file to exist, checks every 2 seconds by default
70
- function pollForFile(path, timeout = 2000) {
70
+ async function pollForFile(path, timeout = 2000) {
71
71
  const intervalObj = setInterval(function () {
72
72
  const file = path;
73
73
  const fileExists = fs.existsSync(file);
@@ -78,153 +78,19 @@ function pollForFile(path, timeout = 2000) {
78
78
  }
79
79
  }, timeout);
80
80
  }
81
- export class PM_Main extends PM_Base {
81
+ export class PM_Main extends PM_WithEslintAndTsc {
82
82
  constructor(configs, name, mode) {
83
- super(configs);
84
- this.bigBoard = {};
83
+ super(configs, name, mode);
85
84
  this.getRunnables = (tests, testName, payload = {
86
85
  nodeEntryPoints: {},
86
+ nodeEntryPointSidecars: {},
87
87
  webEntryPoints: {},
88
- importEntryPoints: {},
88
+ webEntryPointSidecars: {},
89
+ pureEntryPoints: {},
90
+ pureEntryPointSidecars: {},
89
91
  }) => {
90
92
  return getRunnables(tests, testName, payload);
91
93
  };
92
- this.tscCheck = async ({ entrypoint, addableFiles, platform, }) => {
93
- console.log(ansiC.green(ansiC.inverse(`tsc < ${entrypoint}`)));
94
- this.typeCheckIsRunning(entrypoint);
95
- const program = tsc.createProgramFromConfig({
96
- basePath: process.cwd(), // always required, used for relative paths
97
- configFilePath: "tsconfig.json", // config to inherit from (optional)
98
- compilerOptions: {
99
- outDir: tscPather(entrypoint, platform, this.name),
100
- // declaration: true,
101
- // skipLibCheck: true,
102
- noEmit: true,
103
- },
104
- include: addableFiles, //["src/**/*"],
105
- // exclude: ["node_modules", "../testeranto"],
106
- // exclude: ["**/*.test.ts", "**/*.spec.ts"],
107
- });
108
- const tscPath = tscPather(entrypoint, platform, this.name);
109
- let allDiagnostics = program.getSemanticDiagnostics();
110
- const results = [];
111
- allDiagnostics.forEach((diagnostic) => {
112
- if (diagnostic.file) {
113
- let { line, character } = ts.getLineAndCharacterOfPosition(diagnostic.file, diagnostic.start);
114
- let message = ts.flattenDiagnosticMessageText(diagnostic.messageText, "\n");
115
- results.push(`${diagnostic.file.fileName} (${line + 1},${character + 1}): ${message}`);
116
- }
117
- else {
118
- results.push(ts.flattenDiagnosticMessageText(diagnostic.messageText, "\n"));
119
- }
120
- });
121
- fs.writeFileSync(tscPath, results.join("\n"));
122
- this.typeCheckIsNowDone(entrypoint, results.length);
123
- };
124
- this.eslintCheck = async (entrypoint, platform, addableFiles) => {
125
- console.log(ansiC.green(ansiC.inverse(`eslint < ${entrypoint}`)));
126
- this.lintIsRunning(entrypoint);
127
- const results = (await eslint.lintFiles(addableFiles))
128
- .filter((r) => r.messages.length)
129
- .filter((r) => {
130
- return r.messages[0].ruleId !== null;
131
- })
132
- .map((r) => {
133
- delete r.source;
134
- return r;
135
- });
136
- fs.writeFileSync(lintPather(entrypoint, platform, this.name), await formatter.format(results));
137
- this.lintIsNowDone(entrypoint, results.length);
138
- };
139
- this.makePrompt = async (entryPoint, addableFiles, platform) => {
140
- this.bigBoard[entryPoint].prompt = "?";
141
- const promptPath = promptPather(entryPoint, platform, this.name);
142
- const testPaths = path.join("testeranto", "reports", this.name, platform, entryPoint.split(".").slice(0, -1).join("."), `tests.json`);
143
- const featuresPath = path.join("testeranto", "reports", this.name, platform, entryPoint.split(".").slice(0, -1).join("."), `featurePrompt.txt`);
144
- fs.writeFileSync(promptPath, `
145
- ${addableFiles
146
- .map((x) => {
147
- return `/add ${x}`;
148
- })
149
- .join("\n")}
150
-
151
- /read ${lintPather(entryPoint, platform, this.name)}
152
- /read ${tscPather(entryPoint, platform, this.name)}
153
- /read ${testPaths}
154
-
155
- /load ${featuresPath}
156
-
157
- /code Fix the failing tests described in ${testPaths}. Correct any type signature errors described in the files ${tscPather(entryPoint, platform, this.name)}. Implement any method which throws "Function not implemented. Resolve the lint errors described in ${lintPather(entryPoint, platform, this.name)}"
158
- `);
159
- this.bigBoard[entryPoint].prompt = `aider --model deepseek/deepseek-chat --load testeranto/${this.name}/reports/${platform}/${entryPoint
160
- .split(".")
161
- .slice(0, -1)
162
- .join(".")}/prompt.txt`;
163
- this.checkForShutdown();
164
- };
165
- this.checkForShutdown = () => {
166
- this.writeBigBoard();
167
- if (this.mode === "dev")
168
- return;
169
- let inflight = false;
170
- Object.keys(this.bigBoard).forEach((k) => {
171
- if (this.bigBoard[k].prompt === "?") {
172
- console.log(ansiC.blue(ansiC.inverse(`🕕 prompt ${k}`)));
173
- inflight = true;
174
- }
175
- });
176
- Object.keys(this.bigBoard).forEach((k) => {
177
- if (this.bigBoard[k].runTimeError === "?") {
178
- console.log(ansiC.blue(ansiC.inverse(`🕕 runTimeError ${k}`)));
179
- inflight = true;
180
- }
181
- });
182
- Object.keys(this.bigBoard).forEach((k) => {
183
- if (this.bigBoard[k].staticErrors === "?") {
184
- console.log(ansiC.blue(ansiC.inverse(`🕕 staticErrors ${k}`)));
185
- inflight = true;
186
- }
187
- });
188
- Object.keys(this.bigBoard).forEach((k) => {
189
- if (this.bigBoard[k].typeErrors === "?") {
190
- console.log(ansiC.blue(ansiC.inverse(`🕕 typeErrors ${k}`)));
191
- inflight = true;
192
- }
193
- });
194
- this.writeBigBoard();
195
- if (!inflight) {
196
- this.browser.disconnect().then(() => {
197
- console.log(ansiC.inverse(`${this.name} has been tested. Goodbye.`));
198
- process.exit();
199
- });
200
- }
201
- };
202
- this.typeCheckIsRunning = (src) => {
203
- this.bigBoard[src].typeErrors = "?";
204
- };
205
- this.typeCheckIsNowDone = (src, failures) => {
206
- this.bigBoard[src].typeErrors = failures;
207
- this.writeBigBoard();
208
- this.checkForShutdown();
209
- };
210
- this.lintIsRunning = (src) => {
211
- this.bigBoard[src].staticErrors = "?";
212
- this.writeBigBoard();
213
- };
214
- this.lintIsNowDone = (src, failures) => {
215
- this.bigBoard[src].staticErrors = failures;
216
- this.writeBigBoard();
217
- this.checkForShutdown();
218
- };
219
- this.bddTestIsRunning = (src) => {
220
- this.bigBoard[src].runTimeError = "?";
221
- this.writeBigBoard();
222
- };
223
- this.bddTestIsNowDone = (src, failures) => {
224
- this.bigBoard[src].runTimeError = failures;
225
- this.writeBigBoard();
226
- this.checkForShutdown();
227
- };
228
94
  this.launchPure = async (src, dest) => {
229
95
  console.log(ansiC.green(ansiC.inverse(`! pure, ${src}`)));
230
96
  this.bddTestIsRunning(src);
@@ -245,7 +111,7 @@ ${addableFiles
245
111
  process.exit(-1);
246
112
  }
247
113
  const testConfigResource = testConfig[2];
248
- let portsToUse = [];
114
+ const portsToUse = [];
249
115
  if (testConfigResource.ports === 0) {
250
116
  argz = JSON.stringify({
251
117
  scheduled: true,
@@ -312,17 +178,18 @@ ${addableFiles
312
178
  defaultModule
313
179
  .receiveTestResourceConfig(argz)
314
180
  .then(async (results) => {
315
- this.receiveFeatures(results.features, destFolder, src, "pure");
181
+ // this.receiveFeatures(results.features, destFolder, src, "pure");
182
+ // this.receiveFeaturesV2(reportDest, src, "pure");
316
183
  statusMessagePretty(results.fails, src);
317
184
  this.bddTestIsNowDone(src, results.fails);
318
185
  })
319
186
  .catch((e) => {
320
- console.log(ansiC.red(ansiC.inverse(`${src} errored with: ${e}`)));
187
+ console.log(ansiC.red(ansiC.inverse(`launchPure - ${src} errored with: ${e}`)));
321
188
  this.bddTestIsNowDone(src, -1);
322
- })
323
- .finally(() => {
324
- webSideCares.forEach((webSideCar) => webSideCar.close());
325
189
  });
190
+ // .finally(() => {
191
+ // // webSideCares.forEach((webSideCar) => webSideCar.close());
192
+ // });
326
193
  })
327
194
  .catch((e) => {
328
195
  console.log(ansiC.red(ansiC.inverse(`${src} errored with: ${e}. Check ${reportDest}/error.txt for more info`)));
@@ -339,10 +206,9 @@ ${addableFiles
339
206
  this.bddTestIsNowDone(src, -1);
340
207
  statusMessagePretty(-1, src);
341
208
  }
342
- // console.log("portsToUse", portsToUse);
343
209
  for (let i = 0; i <= portsToUse.length; i++) {
344
210
  if (portsToUse[i]) {
345
- this.ports[portsToUse[i]] = "true"; //port is open again
211
+ this.ports[portsToUse[i]] = true; //port is open again
346
212
  }
347
213
  }
348
214
  };
@@ -356,7 +222,7 @@ ${addableFiles
356
222
  if (!fs.existsSync(reportDest)) {
357
223
  fs.mkdirSync(reportDest, { recursive: true });
358
224
  }
359
- const destFolder = dest.replace(".mjs", "");
225
+ // const destFolder = dest.replace(".mjs", "");
360
226
  let testResources = "";
361
227
  const testConfig = this.configs.tests.find((t) => {
362
228
  return t[0] === src;
@@ -366,15 +232,17 @@ ${addableFiles
366
232
  process.exit(-1);
367
233
  }
368
234
  const testConfigResource = testConfig[2];
369
- let portsToUse = [];
235
+ const portsToUse = [];
370
236
  if (testConfigResource.ports === 0) {
371
- testResources = JSON.stringify({
372
- scheduled: true,
237
+ console.error("portsToUse?!", []);
238
+ const t = {
373
239
  name: src,
374
- ports: portsToUse,
240
+ // ports: portsToUse.map((v) => Number(v)),
241
+ ports: [],
375
242
  fs: reportDest,
376
243
  browserWSEndpoint: this.browser.wsEndpoint(),
377
- });
244
+ };
245
+ testResources = JSON.stringify(t);
378
246
  }
379
247
  else if (testConfigResource.ports > 0) {
380
248
  const openPorts = Object.entries(this.ports).filter(([portnumber, portopen]) => portopen);
@@ -383,15 +251,17 @@ ${addableFiles
383
251
  portsToUse.push(openPorts[i][0]);
384
252
  this.ports[openPorts[i][0]] = false; // port is now closed
385
253
  }
254
+ console.error("portsToUse", portsToUse);
386
255
  testResources = JSON.stringify({
387
256
  scheduled: true,
388
257
  name: src,
389
258
  ports: portsToUse,
390
- fs: destFolder,
259
+ fs: reportDest,
391
260
  browserWSEndpoint: this.browser.wsEndpoint(),
392
261
  });
393
262
  }
394
263
  else {
264
+ console.log("Not enough ports! Enqueuing test job...");
395
265
  this.queue.push(src);
396
266
  return;
397
267
  }
@@ -401,44 +271,24 @@ ${addableFiles
401
271
  process.exit(-1);
402
272
  }
403
273
  const builtfile = dest;
404
- // const webSideCares: Page[] = [];
405
- // await Promise.all(
406
- // testConfig[3].map(async (sidecar) => {
407
- // if (sidecar[1] === "web") {
408
- // const s = await this.launchWebSideCar(
409
- // sidecar[0],
410
- // destinationOfRuntime(sidecar[0], "web", this.configs),
411
- // sidecar
412
- // );
413
- // webSideCares.push(s);
414
- // return s;
415
- // }
416
- // if (sidecar[1] === "node") {
417
- // return this.launchNodeSideCar(
418
- // sidecar[0],
419
- // destinationOfRuntime(sidecar[0], "node", this.configs),
420
- // sidecar
421
- // );
422
- // }
423
- // })
424
- // );
425
- // const f = fork(builtfile, [testResources], {
426
- // silent: true,
427
- // // detached: true,
428
- // // stdio: "ignore",
429
- // });
430
274
  let haltReturns = false;
275
+ const ipcfile = "/tmp/tpipe_" + Math.random();
276
+ const child = spawn("node",
277
+ // "node --inspect-brk ",
278
+ [builtfile, testResources, ipcfile], {
279
+ stdio: ["pipe", "pipe", "pipe", "ipc"],
280
+ });
431
281
  let buffer = new Buffer("");
432
282
  const server = net.createServer((socket) => {
283
+ const queue = new Queue();
433
284
  socket.on("data", (data) => {
434
285
  buffer = Buffer.concat([buffer, data]);
435
- let messages = [];
436
286
  for (let b = 0; b < buffer.length + 1; b++) {
437
- let c = buffer.slice(0, b);
287
+ const c = buffer.slice(0, b);
438
288
  let d;
439
289
  try {
440
290
  d = JSON.parse(c.toString());
441
- messages.push(d);
291
+ queue.enqueue(d);
442
292
  buffer = buffer.slice(b, buffer.length + 1);
443
293
  b = 0;
444
294
  }
@@ -446,66 +296,43 @@ ${addableFiles
446
296
  // b++;
447
297
  }
448
298
  }
449
- messages.forEach(async (payload) => {
450
- // set up the "node" listeners
451
- this.mapping().forEach(async ([command, func]) => {
452
- if (payload[0] === command) {
453
- const x = payload.slice(1, -1);
454
- const r = await this[command](...x);
455
- if (!haltReturns) {
456
- child.send(JSON.stringify({
457
- payload: r,
458
- key: payload[payload.length - 1],
459
- }));
299
+ while (queue.size() > 0) {
300
+ const message = queue.dequeue();
301
+ if (message) {
302
+ // set up the "node" listeners
303
+ this.mapping().forEach(async ([command, func]) => {
304
+ if (message[0] === command) {
305
+ const x = message.slice(1, -1);
306
+ const r = await this[command](...x);
307
+ if (!haltReturns) {
308
+ child.send(JSON.stringify({
309
+ payload: r,
310
+ key: message[message.length - 1],
311
+ }));
312
+ }
460
313
  }
461
- }
462
- });
463
- });
314
+ });
315
+ }
316
+ }
464
317
  });
465
318
  });
466
319
  const oStream = fs.createWriteStream(`${reportDest}/console_log.txt`);
467
- const child = spawn("node", [builtfile, testResources, "--trace-warnings"], {
468
- stdio: ["pipe", "pipe", "pipe", "ipc"],
469
- // silent: true
470
- });
471
- const p = destFolder + "/tpipe";
472
- // exec(`lsof`, (ec, out, err) => {
473
- // console.log(ec, out, err);
474
- // });
475
- // if (fs.existsSync(p)) {
476
- // fs.rmSync(p);
477
- // }
478
320
  const errFile = `${reportDest}/error.txt`;
479
321
  if (fs.existsSync(errFile)) {
480
322
  fs.rmSync(errFile);
481
323
  }
482
- // server.on("error", (e) => {
483
- // if (e.code === "EADDRINUSE") {
484
- // console.error(e);
485
- // process.exit(-1);
486
- // // console.error("Address in use, retrying...");
487
- // // setTimeout(() => {
488
- // // server.close();
489
- // // server.listen(p);
490
- // // }, 1000);
491
- // }
492
- // });
493
- server.listen(p, () => {
324
+ server.listen(ipcfile, () => {
494
325
  var _a, _b;
495
326
  (_a = child.stderr) === null || _a === void 0 ? void 0 : _a.on("data", (data) => {
496
- oStream.write(`stderr data ${data}`);
327
+ oStream.write(`stderr > ${data}`);
497
328
  });
498
329
  (_b = child.stdout) === null || _b === void 0 ? void 0 : _b.on("data", (data) => {
499
- oStream.write(`stdout data ${data}`);
330
+ oStream.write(`stdout > ${data}`);
500
331
  });
501
332
  child.on("close", (code) => {
502
- console.log("close");
503
- console.log("deleting", p);
504
- if (fs.existsSync(p)) {
505
- fs.rmSync(p);
506
- }
507
333
  oStream.close();
508
334
  server.close();
335
+ // this.receiveFeaturesV2(reportDest, src, "node");
509
336
  if (code === null) {
510
337
  this.bddTestIsNowDone(src, -1);
511
338
  statusMessagePretty(-1, src);
@@ -521,134 +348,276 @@ ${addableFiles
521
348
  haltReturns = true;
522
349
  });
523
350
  child.on("exit", (code) => {
524
- console.log("exit");
525
- console.log("deleting", p);
526
- if (fs.existsSync(p)) {
527
- fs.rmSync(p);
528
- }
529
351
  haltReturns = true;
352
+ for (let i = 0; i <= portsToUse.length; i++) {
353
+ if (portsToUse[i]) {
354
+ this.ports[portsToUse[i]] = true; //port is open again
355
+ }
356
+ }
530
357
  });
531
358
  child.on("error", (e) => {
532
359
  console.log("error");
533
- console.log("deleting", p);
534
- if (fs.existsSync(p)) {
535
- fs.rmSync(p);
536
- }
537
360
  haltReturns = true;
538
361
  console.log(ansiC.red(ansiC.inverse(`${src} errored with: ${e.name}. Check ${errFile}for more info`)));
539
362
  this.writeFileSync(`${reportDest}/error.txt`, e.toString(), src);
540
363
  this.bddTestIsNowDone(src, -1);
541
364
  statusMessagePretty(-1, src);
542
- // this.bddTestIsNowDone(src, -1);
543
- // statusMessagePretty(-1, src);
544
365
  });
545
366
  });
546
- child.send({ path: p });
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
367
  };
553
- this.launchWebSideCar = async (src, dest, testConfig) => {
554
- const d = dest + ".mjs";
368
+ this.launchWebSideCar = async (
369
+ // src: string,
370
+ // dest: string,
371
+ testConfig) => {
372
+ const src = testConfig[0];
373
+ const dest = src.split(".").slice(0, -1).join(".");
374
+ // const d = dest + ".mjs";
375
+ const destFolder = dest.replace(".mjs", "");
555
376
  console.log(ansiC.green(ansiC.inverse(`launchWebSideCar ${src}`)));
556
377
  const fileStreams2 = [];
557
378
  const doneFileStream2 = [];
379
+ const oStream = fs.createWriteStream(`${destFolder}/console_log.txt`);
558
380
  return new Promise((res, rej) => {
559
381
  this.browser
560
382
  .newPage()
561
- .then((page) => {
562
- // page.on("console", (msg) => {
563
- // console.log("web > ", msg.args(), msg.text());
564
- // // for (let i = 0; i < msg._args.length; ++i)
565
- // // console.log(`${i}: ${msg._args[i]}`);
566
- // });
567
- page.exposeFunction("custom-screenshot", async (ssOpts, testName) => {
568
- const p = ssOpts.path;
569
- const dir = path.dirname(p);
570
- fs.mkdirSync(dir, {
571
- recursive: true,
572
- });
573
- files[testName].add(ssOpts.path);
574
- const sPromise = page.screenshot(Object.assign(Object.assign({}, ssOpts), { path: p }));
575
- if (!screenshots[testName]) {
576
- screenshots[testName] = [];
577
- }
578
- screenshots[testName].push(sPromise);
579
- await sPromise;
580
- return sPromise;
383
+ .then(async (page) => {
384
+ this.mapping().forEach(async ([command, func]) => {
385
+ page.exposeFunction(command, func);
581
386
  });
582
- page.exposeFunction("writeFileSync", (fp, contents, testName) => {
583
- const dir = path.dirname(fp);
584
- fs.mkdirSync(dir, {
585
- recursive: true,
586
- });
587
- const p = new Promise(async (res, rej) => {
588
- fs.writeFileSync(fp, contents);
589
- res(fp);
387
+ const close = () => {
388
+ if (!files[src]) {
389
+ files[src] = new Set();
390
+ }
391
+ // files[t].add(filepath);
392
+ // fs.writeFileSync(
393
+ // destFolder + "/manifest.json",
394
+ // JSON.stringify(Array.from(files[src]))
395
+ // );
396
+ delete files[src];
397
+ Promise.all(screenshots[src] || []).then(() => {
398
+ delete screenshots[src];
399
+ page.close();
400
+ oStream.close();
590
401
  });
591
- doneFileStream2.push(p);
592
- if (!files[testName]) {
593
- files[testName] = new Set();
402
+ };
403
+ page.on("pageerror", (err) => {
404
+ console.debug(`Error from ${src}: [${err.name}] `);
405
+ oStream.write(err.name);
406
+ oStream.write("\n");
407
+ if (err.cause) {
408
+ console.debug(`Error from ${src} cause: [${err.cause}] `);
409
+ oStream.write(err.cause);
410
+ oStream.write("\n");
594
411
  }
595
- files[testName].add(fp);
596
- return p;
597
- });
598
- page.exposeFunction("existsSync", (fp, contents) => {
599
- return fs.existsSync(fp);
600
- });
601
- page.exposeFunction("mkdirSync", (fp) => {
602
- if (!fs.existsSync(fp)) {
603
- return fs.mkdirSync(fp, {
604
- recursive: true,
605
- });
412
+ if (err.stack) {
413
+ console.debug(`Error from stack ${src}: [${err.stack}] `);
414
+ oStream.write(err.stack);
415
+ oStream.write("\n");
606
416
  }
607
- return false;
417
+ console.debug(`Error from message ${src}: [${err.message}] `);
418
+ oStream.write(err.message);
419
+ oStream.write("\n");
420
+ this.bddTestIsNowDone(src, -1);
421
+ close();
608
422
  });
609
- page.exposeFunction("createWriteStream", (fp, testName) => {
610
- const f = fs.createWriteStream(fp);
611
- files[testName].add(fp);
612
- const p = new Promise((res, rej) => {
613
- res(fp);
614
- });
615
- doneFileStream2.push(p);
616
- f.on("close", async () => {
617
- await p;
618
- });
619
- fileStreams2.push(f);
620
- return Object.assign(Object.assign({}, JSON.parse(JSON.stringify(f))), { uid: fileStreams2.length - 1 });
423
+ page.on("console", (log) => {
424
+ oStream.write(log.text());
425
+ oStream.write(JSON.stringify(log.location()));
426
+ oStream.write(JSON.stringify(log.stackTrace()));
427
+ oStream.write("\n");
621
428
  });
622
- page.exposeFunction("write", async (uid, contents) => {
623
- return fileStreams2[uid].write(contents);
429
+ await page.goto(`file://${`${destFolder}.html`}`, {});
430
+ const webArgz = JSON.stringify({
431
+ name: dest,
432
+ ports: [].toString(),
433
+ fs: dest,
434
+ browserWSEndpoint: this.browser.wsEndpoint(),
624
435
  });
625
- page.exposeFunction("end", async (uid) => {
626
- return fileStreams2[uid].end();
436
+ const d = `${dest}?cacheBust=${Date.now()}`;
437
+ const evaluation = `
438
+ import('${d}').then(async (x) => {
439
+
440
+ try {
441
+ return await (await x.default).receiveTestResourceConfig(${webArgz})
442
+ } catch (e) {
443
+ console.log("fail", e.toString())
444
+ }
445
+ })`;
446
+ await page
447
+ .evaluate(evaluation)
448
+ .then(async ({ fails, failed, features }) => {
449
+ // this.receiveFeatures(features, destFolder, src, "web");
450
+ // this.receiveFeaturesV2(reportDest, src, "web");
451
+ statusMessagePretty(fails, src);
452
+ this.bddTestIsNowDone(src, fails);
453
+ })
454
+ .catch((e) => {
455
+ console.log(ansiC.red(ansiC.inverse(`launchWebSidecar - ${src} errored with: ${e}`)));
456
+ })
457
+ .finally(() => {
458
+ this.bddTestIsNowDone(src, -1);
459
+ close();
627
460
  });
628
461
  return page;
462
+ // return page;
629
463
  })
630
464
  .then(async (page) => {
631
465
  await page.goto(`file://${`${dest}.html`}`, {});
632
466
  /* @ts-ignore:next-line */
633
- res(page);
467
+ res([Math.random(), page]);
634
468
  });
635
469
  });
636
470
  };
637
- this.launchNodeSideCar = async (src, dest, testConfig) => {
471
+ this.launchNodeSideCar = async (sidecar) => {
472
+ const src = sidecar[0];
473
+ const dest = process.cwd() + `/testeranto/bundles/node/${this.name}/${sidecar[0]}`;
638
474
  const d = dest + ".mjs";
639
- console.log(ansiC.green(ansiC.inverse(`launchNodeSideCar ${src}`)));
475
+ console.log(ansiC.green(ansiC.inverse(`launchNodeSideCar ${sidecar[0]}`)));
476
+ const destFolder = dest.replace(".ts", "");
477
+ const reportDest = `testeranto/reports/${this.name}/${src
478
+ .split(".")
479
+ .slice(0, -1)
480
+ .join(".")}/node`;
481
+ const argz = {
482
+ name: sidecar[0],
483
+ ports: [],
484
+ fs: destFolder,
485
+ browserWSEndpoint: this.browser.wsEndpoint(),
486
+ };
487
+ const testReq = sidecar[2];
488
+ const portsToUse = [];
489
+ if (testReq.ports === 0) {
490
+ // argz = {
491
+ // name: sidecar[0],
492
+ // ports: portsToUse,
493
+ // fs: destFolder,
494
+ // browserWSEndpoint: this.browser.wsEndpoint(),
495
+ // };
496
+ }
497
+ else if (testReq.ports > 0) {
498
+ const openPorts = Object.entries(this.ports).filter(([portnumber, portopen]) => portopen);
499
+ if (openPorts.length >= testReq.ports) {
500
+ for (let i = 0; i < testReq.ports; i++) {
501
+ portsToUse.push(openPorts[i][0]);
502
+ this.ports[openPorts[i][0]] = false; // port is now closed
503
+ }
504
+ console.log("nodeSideCar portsToUse", portsToUse);
505
+ argz.ports = portsToUse;
506
+ const builtfile = destFolder + ".mjs";
507
+ let haltReturns = false;
508
+ let buffer = new Buffer("");
509
+ const server = net.createServer((socket) => {
510
+ socket.on("data", (data) => {
511
+ buffer = Buffer.concat([buffer, data]);
512
+ const messages = [];
513
+ for (let b = 0; b < buffer.length + 1; b++) {
514
+ const c = buffer.slice(0, b);
515
+ let d;
516
+ try {
517
+ d = JSON.parse(c.toString());
518
+ messages.push(d);
519
+ buffer = buffer.slice(b, buffer.length + 1);
520
+ b = 0;
521
+ }
522
+ catch (e) {
523
+ // b++;
524
+ }
525
+ }
526
+ messages.forEach(async (payload) => {
527
+ this.mapping().forEach(async ([command, func]) => {
528
+ if (payload[0] === command) {
529
+ const x = payload.slice(1, -1);
530
+ const r = await this[command](...x);
531
+ if (!haltReturns) {
532
+ child.send(JSON.stringify({
533
+ payload: r,
534
+ key: payload[payload.length - 1],
535
+ }));
536
+ }
537
+ }
538
+ });
539
+ });
540
+ });
541
+ });
542
+ const oStream = fs.createWriteStream(`${reportDest}/console_log.txt`);
543
+ const child = spawn("node", [builtfile, JSON.stringify(argz)], {
544
+ stdio: ["pipe", "pipe", "pipe", "ipc"],
545
+ // silent: true
546
+ });
547
+ const p = "/tmp/tpipe" + Math.random();
548
+ const errFile = `${reportDest}/error.txt`;
549
+ server.listen(p, () => {
550
+ var _a, _b;
551
+ (_a = child.stderr) === null || _a === void 0 ? void 0 : _a.on("data", (data) => {
552
+ oStream.write(`stderr > ${data}`);
553
+ });
554
+ (_b = child.stdout) === null || _b === void 0 ? void 0 : _b.on("data", (data) => {
555
+ oStream.write(`stdout > ${data}`);
556
+ });
557
+ child.on("close", (code) => {
558
+ oStream.close();
559
+ server.close();
560
+ haltReturns = true;
561
+ });
562
+ child.on("exit", (code) => {
563
+ haltReturns = true;
564
+ for (let i = 0; i <= portsToUse.length; i++) {
565
+ if (portsToUse[i]) {
566
+ this.ports[portsToUse[i]] = true; //port is open again
567
+ }
568
+ }
569
+ });
570
+ child.on("error", (e) => {
571
+ if (fs.existsSync(p)) {
572
+ fs.rmSync(p);
573
+ }
574
+ haltReturns = true;
575
+ console.log(ansiC.red(ansiC.inverse(`launchNodeSideCar - ${src} errored with: ${e.name}. Check ${errFile}for more info`)));
576
+ this.writeFileSync(`${reportDest}/error.txt`, e.toString(), src);
577
+ // this.bddTestIsNowDone(src, -1);
578
+ // statusMessagePretty(-1, src);
579
+ });
580
+ });
581
+ child.send({ path: p });
582
+ const r = Math.random();
583
+ this.nodeSidecars[r] = child;
584
+ return [r, argz];
585
+ }
586
+ else {
587
+ console.log("Not enough open ports!", openPorts, testReq.ports);
588
+ this.queue.push(sidecar[0]);
589
+ return [Math.random(), argz];
590
+ }
591
+ }
592
+ else {
593
+ console.error("negative port makes no sense", sidecar[0]);
594
+ process.exit(-1);
595
+ }
596
+ };
597
+ this.stopPureSideCar = async (uid) => {
598
+ console.log(ansiC.green(ansiC.inverse(`stopPureSideCar ${uid}`)));
599
+ await this.sidecars[uid].shutdown();
600
+ return;
601
+ };
602
+ this.launchPureSideCar = async (sidecar) => {
603
+ console.log(ansiC.green(ansiC.inverse(`launchPureSideCar ${sidecar[0]}`)));
604
+ const r = Math.random();
605
+ const dest = process.cwd() + `/testeranto/bundles/pure/${this.name}/${sidecar[0]}`;
606
+ const builtfile = dest.split(".").slice(0, -1).concat("mjs").join(".");
640
607
  const destFolder = dest.replace(".mjs", "");
641
- let argz = "";
642
- const testConfigResource = testConfig[2];
643
- let portsToUse = [];
608
+ let argz;
609
+ const z = sidecar[2];
610
+ const testConfigResource = sidecar[2];
611
+ const src = sidecar[0];
612
+ const portsToUse = [];
644
613
  if (testConfigResource.ports === 0) {
645
- argz = JSON.stringify({
646
- scheduled: true,
614
+ argz = {
615
+ // scheduled: true,
647
616
  name: src,
648
617
  ports: portsToUse,
649
618
  fs: destFolder,
650
619
  browserWSEndpoint: this.browser.wsEndpoint(),
651
- });
620
+ };
652
621
  }
653
622
  else if (testConfigResource.ports > 0) {
654
623
  const openPorts = Object.entries(this.ports).filter(([portnumber, portopen]) => portopen);
@@ -658,14 +627,14 @@ ${addableFiles
658
627
  portsToUse.push(openPorts[i][0]);
659
628
  this.ports[openPorts[i][0]] = false; // port is now closed
660
629
  }
661
- argz = JSON.stringify({
662
- scheduled: true,
630
+ argz = {
631
+ // scheduled: true,
663
632
  name: src,
664
633
  // ports: [3333],
665
634
  ports: portsToUse,
666
635
  fs: ".",
667
636
  browserWSEndpoint: this.browser.wsEndpoint(),
668
- });
637
+ };
669
638
  }
670
639
  else {
671
640
  this.queue.push(src);
@@ -676,29 +645,17 @@ ${addableFiles
676
645
  console.error("negative port makes no sense", src);
677
646
  process.exit(-1);
678
647
  }
679
- const builtfile = dest + ".mjs";
648
+ // const builtfile = dest + ".mjs";
680
649
  await import(`${builtfile}?cacheBust=${Date.now()}`).then((module) => {
681
- return module.default.then((defaultModule) => {
682
- // console.log("defaultModule", defaultModule);
683
- const s = new defaultModule();
684
- s.receiveTestResourceConfig(argz);
685
- // Object.create(defaultModule);
686
- // defaultModule
687
- // .receiveTestResourceConfig(argz)
688
- // .then((x) => {
689
- // console.log("then", x);
690
- // return x;
691
- // })
692
- // .catch((e) => {
693
- // console.log("catch", e);
694
- // });
695
- });
650
+ this.pureSidecars[r] = module.default;
651
+ this.pureSidecars[r].start(argz);
696
652
  });
697
- for (let i = 0; i <= portsToUse.length; i++) {
698
- if (portsToUse[i]) {
699
- this.ports[portsToUse[i]] = "true"; //port is open again
700
- }
701
- }
653
+ return [r, argz];
654
+ // for (let i = 0; i <= portsToUse.length; i++) {
655
+ // if (portsToUse[i]) {
656
+ // this.ports[portsToUse[i]] = "true"; //port is open again
657
+ // }
658
+ // }
702
659
  };
703
660
  this.launchWeb = async (src, dest) => {
704
661
  console.log(ansiC.green(ansiC.inverse(`! web ${src}`)));
@@ -712,7 +669,7 @@ ${addableFiles
712
669
  }
713
670
  const destFolder = dest.replace(".mjs", "");
714
671
  const webArgz = JSON.stringify({
715
- name: dest,
672
+ name: src,
716
673
  ports: [].toString(),
717
674
  fs: reportDest,
718
675
  browserWSEndpoint: this.browser.wsEndpoint(),
@@ -732,9 +689,20 @@ ${addableFiles
732
689
  this.browser
733
690
  .newPage()
734
691
  .then((page) => {
735
- // set up the "node" listeners
736
692
  this.mapping().forEach(async ([command, func]) => {
737
- page.exposeFunction(command, func);
693
+ if (command === "page") {
694
+ page.exposeFunction(command, (x) => {
695
+ if (x) {
696
+ return func(x);
697
+ }
698
+ else {
699
+ return func(page.mainFrame()._id);
700
+ }
701
+ });
702
+ }
703
+ else {
704
+ return page.exposeFunction(command, func);
705
+ }
738
706
  });
739
707
  return page;
740
708
  })
@@ -744,7 +712,10 @@ ${addableFiles
744
712
  files[src] = new Set();
745
713
  }
746
714
  // files[t].add(filepath);
747
- fs.writeFileSync(destFolder + "/manifest.json", JSON.stringify(Array.from(files[src])));
715
+ // fs.writeFileSync(
716
+ // destFolder + "/manifest.json",
717
+ // JSON.stringify(Array.from(files[src]))
718
+ // );
748
719
  delete files[src];
749
720
  Promise.all(screenshots[src] || []).then(() => {
750
721
  delete screenshots[src];
@@ -774,48 +745,55 @@ ${addableFiles
774
745
  });
775
746
  page.on("console", (log) => {
776
747
  oStream.write(log.text());
748
+ oStream.write("\n");
777
749
  oStream.write(JSON.stringify(log.location()));
750
+ oStream.write("\n");
778
751
  oStream.write(JSON.stringify(log.stackTrace()));
779
752
  oStream.write("\n");
780
753
  });
781
754
  await page.goto(`file://${`${destFolder}.html`}`, {});
755
+ this.webSidecars[Math.random()] = page.mainFrame()._id;
782
756
  await page
783
757
  .evaluate(evaluation)
784
758
  .then(async ({ fails, failed, features }) => {
785
- this.receiveFeatures(features, destFolder, src, "web");
759
+ // this.receiveFeatures(features, destFolder, src, "web");
760
+ // this.receiveFeaturesV2(reportDest, src, "web");
786
761
  statusMessagePretty(fails, src);
787
762
  this.bddTestIsNowDone(src, fails);
788
763
  })
789
764
  .catch((e) => {
790
- console.log(ansiC.red(ansiC.inverse(`${src} errored with: ${e}`)));
765
+ console.log(ansiC.red(ansiC.inverse(`launchweb - ${src} errored with: ${e}`)));
791
766
  })
792
767
  .finally(() => {
793
768
  this.bddTestIsNowDone(src, -1);
769
+ // process.exit(-1);
794
770
  close();
795
771
  });
796
772
  return page;
797
773
  });
798
774
  };
799
- this.receiveFeatures = (features, destFolder, srcTest, platform) => {
775
+ this.receiveFeaturesV2 = (reportDest, srcTest, platform) => {
800
776
  const featureDestination = path.resolve(process.cwd(), "reports", "features", "strings", srcTest.split(".").slice(0, -1).join(".") + ".features.txt");
801
- features
777
+ const testReport = JSON.parse(fs.readFileSync(`${reportDest}/tests.json`).toString());
778
+ // console.log("mark2", testReport);
779
+ testReport.features
802
780
  .reduce(async (mm, featureStringKey) => {
781
+ // console.log("mark4", featureStringKey);
803
782
  const accum = await mm;
804
783
  const isUrl = isValidUrl(featureStringKey);
805
784
  if (isUrl) {
806
785
  const u = new URL(featureStringKey);
807
786
  if (u.protocol === "file:") {
808
787
  const newPath = `${process.cwd()}/testeranto/features/internal/${path.relative(process.cwd(), u.pathname)}`;
809
- await fs.promises.mkdir(path.dirname(newPath), { recursive: true });
810
- try {
811
- await fs.unlinkSync(newPath);
812
- // console.log(`Removed existing link at ${newPath}`);
813
- }
814
- catch (error) {
815
- if (error.code !== "ENOENT") {
816
- // throw error;
817
- }
818
- }
788
+ // await fs.promises.mkdir(path.dirname(newPath), { recursive: true });
789
+ // try {
790
+ // await fs.unlinkSync(newPath);
791
+ // // console.log(`Removed existing link at ${newPath}`);
792
+ // } catch (error) {
793
+ // if (error.code !== "ENOENT") {
794
+ // // throw error;
795
+ // }
796
+ // }
819
797
  // fs.symlink(u.pathname, newPath, (err) => {
820
798
  // if (err) {
821
799
  // // console.error("Error creating symlink:", err);
@@ -823,10 +801,10 @@ ${addableFiles
823
801
  // // console.log("Symlink created successfully");
824
802
  // }
825
803
  // });
826
- accum.files.push(newPath);
804
+ accum.files.push(u.pathname);
827
805
  }
828
806
  else if (u.protocol === "http:" || u.protocol === "https:") {
829
- const newPath = `${process.cwd()}/testeranto/features/external${u.hostname}${u.pathname}`;
807
+ const newPath = `${process.cwd()}/testeranto/features/external/${u.hostname}${u.pathname}`;
830
808
  const body = await this.configs.featureIngestor(featureStringKey);
831
809
  writeFileAndCreateDir(newPath, body);
832
810
  accum.files.push(newPath);
@@ -841,6 +819,7 @@ ${addableFiles
841
819
  return accum;
842
820
  }, Promise.resolve({ files: [], strings: [] }))
843
821
  .then(({ files, strings }) => {
822
+ // Markdown files must be referenced in the prompt but string style features are already present in the test.json file
844
823
  fs.writeFileSync(`testeranto/reports/${this.name}/${srcTest
845
824
  .split(".")
846
825
  .slice(0, -1)
@@ -850,24 +829,68 @@ ${addableFiles
850
829
  })
851
830
  .join("\n"));
852
831
  });
832
+ // const f: Record<string, string> = {};
833
+ testReport.givens.forEach((g) => {
834
+ if (g.failed === true) {
835
+ this.summary[srcTest].failingFeatures[g.key] = g.features;
836
+ }
837
+ });
838
+ // this.summary[srcTest].failingFeatures = f;
839
+ this.writeBigBoard();
853
840
  };
854
- this.writeBigBoard = () => {
855
- fs.writeFileSync(`./testeranto/reports/${this.name}/summary.json`, JSON.stringify(this.bigBoard, null, 2));
856
- };
857
- this.name = name;
858
- this.mode = mode;
859
841
  this.ports = {};
860
- this.configs.tests.forEach(([t]) => {
861
- this.bigBoard[t] = {
862
- runTimeError: "?",
863
- typeErrors: "?",
864
- staticErrors: "?",
865
- prompt: "?",
866
- };
867
- });
842
+ this.queue = [];
843
+ this.nodeSidecars = {};
844
+ this.webSidecars = {};
845
+ this.pureSidecars = {};
868
846
  this.configs.ports.forEach((element) => {
869
- this.ports[element] = "true"; // set ports as open
847
+ this.ports[element] = true; // set ports as open
848
+ });
849
+ }
850
+ async stopSideCar(uid) {
851
+ console.log(ansiC.green(ansiC.inverse(`stopSideCar ${uid}`)));
852
+ Object.entries(this.pureSidecars).forEach(async ([k, v]) => {
853
+ if (Number(k) === uid) {
854
+ await this.pureSidecars[Number(k)].stop();
855
+ delete this.pureSidecars[Number(k)];
856
+ }
857
+ });
858
+ Object.entries(this.nodeSidecars).forEach(async ([k, v]) => {
859
+ if (Number(k) === uid) {
860
+ await this.nodeSidecars[Number(k)].send("stop");
861
+ delete this.nodeSidecars[Number(k)];
862
+ }
863
+ });
864
+ Object.entries(this.webSidecars).forEach(async ([k, v]) => {
865
+ if (Number(k) === uid) {
866
+ (await this.browser.pages()).forEach(async (p) => {
867
+ if (p.mainFrame()._id === k) {
868
+ await this.webSidecars[Number(k)].close();
869
+ delete this.webSidecars[Number(k)];
870
+ }
871
+ });
872
+ }
870
873
  });
874
+ return;
875
+ }
876
+ async launchSideCar(n, name) {
877
+ const c = this.configs.tests.find(([v, r]) => {
878
+ return v === name;
879
+ });
880
+ const s = c[3][n];
881
+ const r = s[1];
882
+ if (r === "node") {
883
+ return this.launchNodeSideCar(s);
884
+ }
885
+ else if (r === "web") {
886
+ return this.launchWebSideCar(s);
887
+ }
888
+ else if (r === "pure") {
889
+ return this.launchPureSideCar(s);
890
+ }
891
+ else {
892
+ throw `unknown runtime ${r}`;
893
+ }
871
894
  }
872
895
  mapping() {
873
896
  return [
@@ -876,20 +899,23 @@ ${addableFiles
876
899
  ["closePage", this.closePage],
877
900
  ["createWriteStream", this.createWriteStream],
878
901
  ["customclose", this.customclose],
879
- ["customScreenShot", this.customScreenShot],
902
+ ["customScreenShot", this.customScreenShot.bind(this)],
880
903
  ["end", this.end],
881
904
  ["existsSync", this.existsSync],
882
905
  ["focusOn", this.focusOn],
883
906
  ["getAttribute", this.getAttribute],
884
- ["getValue", this.getValue],
885
- ["goto", this.goto],
907
+ ["getInnerHtml", this.getInnerHtml],
908
+ // ["setValue", this.setValue],
909
+ ["goto", this.goto.bind(this)],
886
910
  ["isDisabled", this.isDisabled],
911
+ ["launchSideCar", this.launchSideCar.bind(this)],
887
912
  ["mkdirSync", this.mkdirSync],
888
913
  ["newPage", this.newPage],
889
914
  ["page", this.page],
890
915
  ["pages", this.pages],
891
916
  ["screencast", this.screencast],
892
917
  ["screencastStop", this.screencastStop],
918
+ ["stopSideCar", this.stopSideCar.bind(this)],
893
919
  ["typeInto", this.typeInto],
894
920
  ["waitForSelector", this.waitForSelector],
895
921
  ["write", this.write],
@@ -899,54 +925,57 @@ ${addableFiles
899
925
  async start() {
900
926
  // set up the "pure" listeners
901
927
  this.mapping().forEach(async ([command, func]) => {
902
- // page.exposeFunction(command, func);
903
928
  globalThis[command] = func;
904
929
  });
905
930
  if (!fs.existsSync(`testeranto/reports/${this.name}`)) {
906
931
  fs.mkdirSync(`testeranto/reports/${this.name}`);
907
932
  }
908
- // await pollForFile();
909
- this.browser = (await puppeteer.launch({
910
- slowMo: 1,
911
- waitForInitialPage: false,
912
- executablePath:
913
- // process.env.CHROMIUM_PATH || "/opt/homebrew/bin/chromium",
914
- "/opt/homebrew/bin/chromium",
915
- headless: true,
916
- dumpio: false,
917
- devtools: false,
918
- args: [
919
- "--allow-file-access-from-files",
920
- "--allow-insecure-localhost",
921
- "--allow-running-insecure-content",
922
- "--auto-open-devtools-for-tabs",
923
- "--disable-dev-shm-usage",
924
- "--disable-extensions",
925
- "--disable-gpu",
926
- "--disable-setuid-sandbox",
927
- "--disable-site-isolation-trials",
928
- "--disable-site-isolation-trials",
929
- "--disable-web-security",
930
- "--no-first-run",
931
- "--no-sandbox",
932
- "--no-startup-window",
933
- "--reduce-security-for-testing",
934
- "--remote-allow-origins=*",
935
- `--remote-debugging-port=3234`,
936
- "--unsafely-treat-insecure-origin-as-secure=*",
937
- // "--disable-features=IsolateOrigins,site-per-process",
938
- // "--disable-features=IsolateOrigins",
939
- // "--disk-cache-dir=/dev/null",
940
- // "--disk-cache-size=1",
941
- // "--no-zygote",
942
- // "--remote-allow-origins=ws://localhost:3234",
943
- // "--single-process",
944
- // "--start-maximized",
945
- // "--unsafely-treat-insecure-origin-as-secure",
946
- // "--unsafely-treat-insecure-origin-as-secure=ws://192.168.0.101:3234",
947
- ],
948
- }));
949
- const { nodeEntryPoints, webEntryPoints, importEntryPoints } = this.getRunnables(this.configs.tests, this.name);
933
+ const executablePath = "/opt/homebrew/bin/chromium";
934
+ try {
935
+ this.browser = await puppeteer.launch({
936
+ slowMo: 1,
937
+ waitForInitialPage: false,
938
+ executablePath,
939
+ headless: true,
940
+ dumpio: false,
941
+ devtools: false,
942
+ args: [
943
+ "--disable-features=site-per-process",
944
+ "--allow-file-access-from-files",
945
+ "--allow-insecure-localhost",
946
+ "--allow-running-insecure-content",
947
+ "--auto-open-devtools-for-tabs",
948
+ "--disable-dev-shm-usage",
949
+ "--disable-extensions",
950
+ "--disable-gpu",
951
+ "--disable-setuid-sandbox",
952
+ "--disable-site-isolation-trials",
953
+ "--disable-web-security",
954
+ "--no-first-run",
955
+ "--no-sandbox",
956
+ "--no-startup-window",
957
+ "--reduce-security-for-testing",
958
+ "--remote-allow-origins=*",
959
+ "--unsafely-treat-insecure-origin-as-secure=*",
960
+ `--remote-debugging-port=3234`,
961
+ // "--disable-features=IsolateOrigins,site-per-process",
962
+ // "--disable-features=IsolateOrigins",
963
+ // "--disk-cache-dir=/dev/null",
964
+ // "--disk-cache-size=1",
965
+ // "--no-zygote",
966
+ // "--remote-allow-origins=ws://localhost:3234",
967
+ // "--single-process",
968
+ // "--start-maximized",
969
+ // "--unsafely-treat-insecure-origin-as-secure",
970
+ // "--unsafely-treat-insecure-origin-as-secure=ws://192.168.0.101:3234",
971
+ ],
972
+ });
973
+ }
974
+ catch (e) {
975
+ console.error(e);
976
+ console.error("could not start chrome via puppeter. Check this path: ", executablePath);
977
+ }
978
+ const { nodeEntryPoints, webEntryPoints, pureEntryPoints } = this.getRunnables(this.configs.tests, this.name);
950
979
  [
951
980
  [
952
981
  nodeEntryPoints,
@@ -965,7 +994,7 @@ ${addableFiles
965
994
  },
966
995
  ],
967
996
  [
968
- importEntryPoints,
997
+ pureEntryPoints,
969
998
  this.launchPure,
970
999
  "pure",
971
1000
  (w) => {
@@ -998,6 +1027,35 @@ ${addableFiles
998
1027
  this.metafileOutputs(runtime);
999
1028
  }));
1000
1029
  });
1030
+ // Object.keys(this.configs.externalTests).forEach((et) => {
1031
+ // this.launchExternalTest(et, this.configs.externalTests[et]);
1032
+ // });
1033
+ }
1034
+ async launchExternalTest(externalTestName, externalTest) {
1035
+ // fs.mkdirSync(`testeranto/externalTests/${externalTestName}`);
1036
+ // exec(externalTest.exec, (error, stdout, stderr) => {
1037
+ // if (error) {
1038
+ // fs.writeFileSync(
1039
+ // `testeranto/externalTests/${externalTestName}/exitcode.txt`,
1040
+ // `${error.name}\n${error.message}\n${error.code}\n`
1041
+ // );
1042
+ // } else {
1043
+ // fs.writeFileSync(
1044
+ // `testeranto/externalTests/${externalTestName}/exitcode.txt`,
1045
+ // `0`
1046
+ // );
1047
+ // }
1048
+ // fs.writeFileSync(
1049
+ // `testeranto/externalTests/${externalTestName}/stdout.txt`,
1050
+ // stdout
1051
+ // );
1052
+ // fs.writeFileSync(
1053
+ // `testeranto/externalTests/${externalTestName}/stderr.txt`,
1054
+ // stderr
1055
+ // );
1056
+ // // console.log(`externalTest stdout: ${stdout}`);
1057
+ // // console.error(`externalTest stderr: ${stderr}`);
1058
+ // });
1001
1059
  }
1002
1060
  async stop() {
1003
1061
  console.log(ansiC.inverse("Testeranto-Run is shutting down gracefully..."));
@@ -1015,11 +1073,17 @@ ${addableFiles
1015
1073
  return;
1016
1074
  const outputs = metafile.outputs;
1017
1075
  Object.keys(outputs).forEach(async (k) => {
1076
+ const pattern = `testeranto/bundles/${platform}/${this.name}/${this.configs.src}`;
1077
+ if (!k.startsWith(pattern)) {
1078
+ return false;
1079
+ }
1018
1080
  const addableFiles = Object.keys(outputs[k].inputs).filter((i) => {
1019
1081
  if (!fs.existsSync(i))
1020
1082
  return false;
1021
1083
  if (i.startsWith("node_modules"))
1022
1084
  return false;
1085
+ if (i.startsWith("./node_modules"))
1086
+ return false;
1023
1087
  return true;
1024
1088
  });
1025
1089
  const f = `${k.split(".").slice(0, -1).join(".")}/`;