testeranto 0.129.0 → 0.134.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 (386) hide show
  1. package/.aider.chat.history.md +137197 -0
  2. package/.aider.input.history +334 -0
  3. package/.aider.tags.cache.v3/18/8b/7dfca822129dad10b5cacadf7728.val +0 -0
  4. package/.aider.tags.cache.v3/{ec/c0/161c249c35be853cc40cf11f9267.val → 62/f5/8af72140d93c58db2f6aa5bf3f1f.val} +0 -0
  5. package/.aider.tags.cache.v3/8d/fa/12860238755bcfab9af8a93c52ab.val +0 -0
  6. package/.aider.tags.cache.v3/{b7/e6/5be87b62aeaf2bc244ff41c1b61a.val → a7/97/6d37fce350ad2d588f36729db0cd.val} +0 -0
  7. package/.aider.tags.cache.v3/{e3/e6/3501625caf5d5eb171f0d248462e.val → ad/3c/10f2ab1397f6d544e613d2a6acaf.val} +0 -0
  8. package/.aider.tags.cache.v3/cache.db +0 -0
  9. package/.aider.tags.cache.v3/cache.db-shm +0 -0
  10. package/.aider.tags.cache.v3/cache.db-wal +0 -0
  11. package/.aider.tags.cache.v3/dd/5b/0ade824b0841c7c11e9352c5d2ca.val +0 -0
  12. package/README.md +333 -34
  13. package/bundle.js +8 -75
  14. package/dist/common/src/Init.js +6 -1
  15. package/dist/common/src/Node.js +6 -4
  16. package/dist/common/src/NodeSidecar.js +15 -0
  17. package/dist/common/src/PM/PM_WithEslintAndTsc.js +187 -0
  18. package/dist/common/src/PM/__tests__/nodeSidecar.testeranto.js +109 -0
  19. package/dist/common/src/PM/__tests__/pureSidecar.testeranto.js +94 -0
  20. package/dist/common/src/PM/__tests__/webSidecar.testeranto.js +94 -0
  21. package/dist/common/src/PM/base.js +33 -16
  22. package/dist/common/src/PM/main.js +484 -425
  23. package/dist/common/src/PM/node.js +44 -19
  24. package/dist/common/src/PM/nodeSidecar.js +65 -0
  25. package/dist/common/src/PM/pure.js +55 -47
  26. package/dist/common/src/PM/pureSidecar.js +48 -0
  27. package/dist/common/src/PM/sidecar.js +11 -0
  28. package/dist/common/src/PM/web.js +24 -6
  29. package/dist/common/src/PM/webSidecar.js +47 -0
  30. package/dist/common/src/PureSidecar.js +13 -0
  31. package/dist/common/src/SP__Polygon.test.js +10 -0
  32. package/dist/common/src/WebSidecar.js +14 -0
  33. package/dist/common/src/build.js +63 -10
  34. package/dist/common/src/defaultConfig.js +1 -0
  35. package/dist/common/src/esbuildConfigs/consoleDetectorPlugin.js +27 -0
  36. package/dist/common/src/esbuildConfigs/pure.js +15 -1
  37. package/dist/common/src/esbuildConfigs/web.js +10 -1
  38. package/dist/common/src/{SubPackages/react-dom/jsx/index.js → lib/Sidecar.js} +4 -0
  39. package/dist/common/src/lib/abstractBase.js +7 -5
  40. package/dist/common/src/lib/basebuilder.js +1 -3
  41. package/dist/common/src/lib/classBuilder.js +4 -17
  42. package/dist/common/src/lib/core.js +11 -6
  43. package/dist/common/src/lib/index.js +13 -4
  44. package/dist/common/src/lib/pmProxy.js +1 -1
  45. package/dist/common/src/mothership/index.js +16 -0
  46. package/dist/common/src/mothership/test.js +65 -0
  47. package/dist/common/src/utils/queue.js +36 -0
  48. package/dist/common/src/utils.js +34 -5
  49. package/dist/common/testeranto.config.js +77 -39
  50. package/dist/common/tsconfig.common.tsbuildinfo +1 -1
  51. package/dist/module/src/Init.js +6 -1
  52. package/dist/module/src/Node.js +6 -4
  53. package/dist/module/src/NodeSidecar.js +11 -0
  54. package/dist/module/src/PM/PM_WithEslintAndTsc.js +180 -0
  55. package/dist/module/src/PM/__tests__/nodeSidecar.testeranto.js +104 -0
  56. package/dist/module/src/PM/__tests__/pureSidecar.testeranto.js +89 -0
  57. package/dist/module/src/PM/__tests__/webSidecar.testeranto.js +89 -0
  58. package/dist/module/src/PM/base.js +33 -16
  59. package/dist/module/src/PM/main.js +485 -426
  60. package/dist/module/src/PM/node.js +44 -19
  61. package/dist/module/src/PM/nodeSidecar.js +58 -0
  62. package/dist/module/src/PM/pure.js +55 -44
  63. package/dist/module/src/PM/pureSidecar.js +41 -0
  64. package/dist/module/src/PM/sidecar.js +7 -0
  65. package/dist/module/src/PM/web.js +24 -6
  66. package/dist/module/src/PM/webSidecar.js +40 -0
  67. package/dist/module/src/Project.js +154 -75
  68. package/dist/module/src/PureSidecar.js +9 -0
  69. package/dist/module/src/ReportClient.js +132 -97
  70. package/dist/module/src/SP__Polygon.test.js +8 -0
  71. package/dist/module/src/TestReport.js +32 -14
  72. package/dist/module/src/WebSidecar.js +10 -0
  73. package/dist/module/src/build.js +63 -10
  74. package/dist/module/src/defaultConfig.js +1 -0
  75. package/dist/module/src/esbuildConfigs/consoleDetectorPlugin.js +24 -0
  76. package/dist/module/src/esbuildConfigs/pure.js +15 -1
  77. package/dist/module/src/esbuildConfigs/web.js +10 -1
  78. package/dist/module/src/lib/Sidecar.js +2 -0
  79. package/dist/module/src/lib/abstractBase.js +7 -5
  80. package/dist/module/src/lib/basebuilder.js +1 -3
  81. package/dist/module/src/lib/classBuilder.js +4 -17
  82. package/dist/module/src/lib/core.js +11 -6
  83. package/dist/module/src/lib/index.js +12 -4
  84. package/dist/module/src/lib/pmProxy.js +1 -1
  85. package/dist/module/src/mothership/index.js +11 -0
  86. package/dist/module/src/mothership/test.js +60 -0
  87. package/dist/module/src/utils/queue.js +32 -0
  88. package/dist/module/src/utils.js +34 -5
  89. package/dist/module/testeranto.config.js +77 -36
  90. package/dist/module/tsconfig.module.tsbuildinfo +1 -1
  91. package/dist/prebuild/Project.js +3288 -385
  92. package/dist/prebuild/ReportClient.js +0 -24638
  93. package/dist/prebuild/TestReport.js +14 -8
  94. package/dist/prebuild/build.mjs +159 -15
  95. package/dist/prebuild/init-docs.mjs +2 -5
  96. package/dist/prebuild/mothership/index.mjs +17 -0
  97. package/dist/prebuild/run.mjs +693 -412
  98. package/dist/types/src/NodeSidecar.d.ts +6 -0
  99. package/dist/types/src/PM/PM_WithEslintAndTsc.d.ts +23 -0
  100. package/dist/types/src/PM/__tests__/nodeSidecar.testeranto.d.ts +20 -0
  101. package/dist/types/src/PM/__tests__/pureSidecar.testeranto.d.ts +20 -0
  102. package/dist/types/src/PM/__tests__/webSidecar.testeranto.d.ts +20 -0
  103. package/dist/types/src/PM/base.d.ts +6 -5
  104. package/dist/types/src/PM/index.d.ts +5 -3
  105. package/dist/types/src/PM/main.d.ts +23 -26
  106. package/dist/types/src/PM/node.d.ts +8 -6
  107. package/dist/types/src/PM/nodeSidecar.d.ts +13 -0
  108. package/dist/types/src/PM/pure.d.ts +4 -3
  109. package/dist/types/src/PM/pureSidecar.d.ts +11 -0
  110. package/dist/types/src/PM/sidecar.d.ts +8 -0
  111. package/dist/types/src/PM/web.d.ts +18 -8
  112. package/dist/types/src/PM/webSidecar.d.ts +11 -0
  113. package/dist/types/src/PureSidecar.d.ts +8 -0
  114. package/dist/types/src/Types.d.ts +109 -43
  115. package/dist/types/src/WebSidecar.d.ts +8 -0
  116. package/dist/types/src/esbuildConfigs/consoleDetectorPlugin.d.ts +2 -0
  117. package/dist/types/src/lib/Sidecar.d.ts +5 -0
  118. package/dist/types/src/lib/abstractBase.d.ts +6 -6
  119. package/dist/types/src/lib/classBuilder.d.ts +7 -1
  120. package/dist/types/src/lib/core.d.ts +7 -1
  121. package/dist/types/src/lib/index.d.ts +10 -4
  122. package/dist/types/src/lib/types.d.ts +12 -2
  123. package/dist/types/src/mothership/index.d.ts +2 -0
  124. package/dist/types/src/mothership/test.d.ts +21 -0
  125. package/dist/types/src/utils/queue.d.ts +11 -0
  126. package/dist/types/src/utils.d.ts +4 -7
  127. package/dist/types/tsconfig.types.tsbuildinfo +1 -1
  128. package/package.json +19 -105
  129. package/src/Init.ts +6 -5
  130. package/src/Node.ts +7 -4
  131. package/src/NodeSidecar.ts +22 -0
  132. package/src/PM/PM_WithEslintAndTsc.ts +284 -0
  133. package/src/PM/__tests__/nodeSidecar.testeranto.ts +173 -0
  134. package/src/PM/__tests__/pureSidecar.testeranto.ts +157 -0
  135. package/src/PM/__tests__/webSidecar.testeranto.ts +157 -0
  136. package/src/PM/base.ts +38 -17
  137. package/src/PM/index.ts +9 -3
  138. package/src/PM/main.ts +608 -582
  139. package/src/PM/node.ts +67 -23
  140. package/src/PM/nodeSidecar.ts +73 -0
  141. package/src/PM/pure.ts +68 -58
  142. package/src/PM/pureSidecar.ts +56 -0
  143. package/src/PM/sidecar.ts +48 -0
  144. package/src/PM/web.ts +42 -11
  145. package/src/PM/webSidecar.ts +55 -0
  146. package/src/Project.tsx +312 -109
  147. package/src/Pure.ts +0 -2
  148. package/src/PureSidecar.ts +14 -0
  149. package/src/ReportClient.tsx +164 -170
  150. package/src/SP__Polygon.test.ts +13 -0
  151. package/src/TestReport.tsx +77 -6
  152. package/src/Types.ts +227 -122
  153. package/src/WebSidecar.ts +14 -0
  154. package/src/build.ts +101 -14
  155. package/src/defaultConfig.ts +1 -0
  156. package/src/esbuildConfigs/README.md +46 -0
  157. package/src/esbuildConfigs/consoleDetectorPlugin.ts +29 -0
  158. package/src/esbuildConfigs/pure.ts +22 -1
  159. package/src/esbuildConfigs/web.ts +13 -0
  160. package/src/lib/Sidecar.ts +6 -0
  161. package/src/lib/TEST_ADAPTER_RENAME.md +48 -0
  162. package/src/lib/abstractBase.ts +12 -9
  163. package/src/lib/basebuilder.ts +5 -4
  164. package/src/lib/classBuilder.ts +15 -18
  165. package/src/lib/core.ts +24 -11
  166. package/src/lib/index.ts +38 -18
  167. package/src/lib/pmProxy.ts +3 -1
  168. package/src/lib/types.ts +15 -2
  169. package/src/mothership/index.ts +15 -0
  170. package/src/mothership/test.ts +137 -0
  171. package/src/run.ts +0 -1
  172. package/src/utils/queue.ts +41 -0
  173. package/src/utils.ts +41 -15
  174. package/testeranto/bundles/node/mothership/chunk-PG6KUKNP.mjs +44 -0
  175. package/testeranto/bundles/node/mothership/chunk-V2EQEXU2.mjs +1032 -0
  176. package/testeranto/bundles/node/mothership/metafile.json +389 -0
  177. package/testeranto/bundles/node/mothership/src/PM/__tests__/nodeSidecar.testeranto.mjs +1219 -0
  178. package/testeranto/bundles/node/mothership/src/PM/__tests__/pureSidecar.testeranto.mjs +156 -0
  179. package/testeranto/bundles/node/mothership/src/PM/__tests__/sidecar.testeranto.mjs +1199 -0
  180. package/testeranto/bundles/node/mothership/src/PM/__tests__/webSidecar.testeranto.mjs +156 -0
  181. package/testeranto/bundles/node/mothership/src/mothership/test.mjs +24411 -0
  182. package/testeranto/bundles/pure/mothership/metafile.json +8 -0
  183. package/testeranto/bundles/web/mothership/metafile.json +8 -0
  184. package/testeranto/index.html +4 -4
  185. package/testeranto/reports/mothership/config.json +25 -0
  186. package/testeranto/reports/{redux → mothership}/index.html +8 -8
  187. package/testeranto/reports/mothership/src/PM/__tests__/nodeSidecar.testeranto/node/console_log.txt +0 -0
  188. package/testeranto/reports/mothership/src/PM/__tests__/nodeSidecar.testeranto/node/index.html +20 -0
  189. package/testeranto/reports/mothership/src/PM/__tests__/nodeSidecar.testeranto/node/lint_errors.json +1564 -0
  190. package/testeranto/reports/mothership/src/PM/__tests__/nodeSidecar.testeranto/node/log.txt +0 -0
  191. package/testeranto/reports/mothership/src/PM/__tests__/nodeSidecar.testeranto/node/prompt.txt +22 -0
  192. package/testeranto/reports/mothership/src/PM/__tests__/nodeSidecar.testeranto/node/type_errors.txt +35 -0
  193. package/testeranto/reports/mothership/src/PM/__tests__/pureSidecar.testeranto/node/index.html +20 -0
  194. package/testeranto/reports/mothership/src/PM/__tests__/pureSidecar.testeranto/node/lint_errors.json +80 -0
  195. package/testeranto/reports/mothership/src/PM/__tests__/pureSidecar.testeranto/node/prompt.txt +12 -0
  196. package/testeranto/reports/mothership/src/PM/__tests__/pureSidecar.testeranto/node/type_errors.txt +26 -0
  197. package/testeranto/reports/mothership/src/PM/__tests__/sidecar.testeranto/node/bdd_errors.txt +1 -0
  198. package/testeranto/reports/mothership/src/PM/__tests__/sidecar.testeranto/node/console_log.txt +0 -0
  199. package/testeranto/reports/mothership/src/PM/__tests__/sidecar.testeranto/node/index.html +20 -0
  200. package/testeranto/reports/mothership/src/PM/__tests__/sidecar.testeranto/node/lint_errors.json +1564 -0
  201. package/testeranto/reports/mothership/src/PM/__tests__/sidecar.testeranto/node/log.txt +0 -0
  202. package/testeranto/reports/mothership/src/PM/__tests__/sidecar.testeranto/node/prompt.txt +22 -0
  203. package/testeranto/reports/mothership/src/PM/__tests__/sidecar.testeranto/node/tests.json +56 -0
  204. package/testeranto/reports/mothership/src/PM/__tests__/sidecar.testeranto/node/type_errors.txt +29 -0
  205. package/testeranto/reports/mothership/src/PM/__tests__/webSidecar.testeranto/node/index.html +20 -0
  206. package/testeranto/reports/mothership/src/PM/__tests__/webSidecar.testeranto/node/lint_errors.json +80 -0
  207. package/testeranto/reports/mothership/src/PM/__tests__/webSidecar.testeranto/node/prompt.txt +12 -0
  208. package/testeranto/reports/mothership/src/PM/__tests__/webSidecar.testeranto/node/type_errors.txt +26 -0
  209. package/testeranto/reports/mothership/src/mothership/test/node/bdd_errors.txt +1 -0
  210. package/testeranto/reports/mothership/src/mothership/test/node/console_log.txt +4 -0
  211. package/testeranto/reports/mothership/src/mothership/test/node/index.html +20 -0
  212. package/testeranto/reports/mothership/src/mothership/test/node/lint_errors.json +1 -0
  213. package/testeranto/reports/mothership/src/mothership/test/node/log.txt +0 -0
  214. package/testeranto/reports/mothership/src/mothership/test/node/prompt.txt +12 -0
  215. package/testeranto/reports/mothership/src/mothership/test/node/tests.json +24 -0
  216. package/testeranto/reports/mothership/src/mothership/test/node/type_errors.txt +18 -0
  217. package/testeranto/reports/mothership/summary.json +9 -0
  218. package/testeranto.config.ts +82 -44
  219. package/tsc.log +78 -81
  220. package/dist/common/src/SubPackages/react/component/index.js +0 -20
  221. package/dist/common/src/SubPackages/react/component/node.js +0 -10
  222. package/dist/common/src/SubPackages/react/component/pure.js +0 -10
  223. package/dist/common/src/SubPackages/react/component/web.js +0 -10
  224. package/dist/common/src/SubPackages/react/jsx/index.js +0 -64
  225. package/dist/common/src/SubPackages/react/jsx/node.js +0 -10
  226. package/dist/common/src/SubPackages/react/jsx/pure.js +0 -10
  227. package/dist/common/src/SubPackages/react/jsx/web.js +0 -10
  228. package/dist/common/src/SubPackages/react-dom/component/dynamic.js +0 -61
  229. package/dist/common/src/SubPackages/react-dom/component/node.js +0 -10
  230. package/dist/common/src/SubPackages/react-dom/component/pure.js +0 -10
  231. package/dist/common/src/SubPackages/react-dom/component/static.js +0 -26
  232. package/dist/common/src/SubPackages/react-dom/component/web.js +0 -16
  233. package/dist/common/src/SubPackages/react-dom/jsx/dynamic.js +0 -31
  234. package/dist/common/src/SubPackages/react-dom/jsx/node.js +0 -10
  235. package/dist/common/src/SubPackages/react-dom/jsx/pure.js +0 -10
  236. package/dist/common/src/SubPackages/react-dom/jsx/static.js +0 -59
  237. package/dist/common/src/SubPackages/react-dom/jsx/web.js +0 -16
  238. package/dist/common/src/SubPackages/react-test-renderer/MemoExoticComponent/node.js +0 -54
  239. package/dist/common/src/SubPackages/react-test-renderer/component/index.js +0 -15
  240. package/dist/common/src/SubPackages/react-test-renderer/component/interface.js +0 -70
  241. package/dist/common/src/SubPackages/react-test-renderer/component/node.js +0 -8
  242. package/dist/common/src/SubPackages/react-test-renderer/component/pure.js +0 -8
  243. package/dist/common/src/SubPackages/react-test-renderer/component/test/implementation.js +0 -57
  244. package/dist/common/src/SubPackages/react-test-renderer/component/test/node.js +0 -10
  245. package/dist/common/src/SubPackages/react-test-renderer/component/test/pure.js +0 -10
  246. package/dist/common/src/SubPackages/react-test-renderer/component/test/web.js +0 -10
  247. package/dist/common/src/SubPackages/react-test-renderer/component/web.js +0 -8
  248. package/dist/common/src/SubPackages/react-test-renderer/fc/node.js +0 -60
  249. package/dist/common/src/SubPackages/react-test-renderer/fc/web.js +0 -60
  250. package/dist/common/src/SubPackages/react-test-renderer/jsx/index.js +0 -67
  251. package/dist/common/src/SubPackages/react-test-renderer/jsx/node.js +0 -10
  252. package/dist/common/src/SubPackages/react-test-renderer/jsx/pure.js +0 -10
  253. package/dist/common/src/SubPackages/react-test-renderer/jsx/web.js +0 -10
  254. package/dist/common/src/SubPackages/react-test-renderer/jsx-promised/index.js +0 -52
  255. package/dist/common/src/SubPackages/react-test-renderer/jsx-promised/node.js +0 -10
  256. package/dist/common/src/SubPackages/react-test-renderer/jsx-promised/web.js +0 -10
  257. package/dist/common/src/examples/react/component/index.js +0 -33
  258. package/dist/common/src/examples/react/component/test.js +0 -36
  259. package/dist/module/src/SubPackages/react/component/index.js +0 -13
  260. package/dist/module/src/SubPackages/react/component/node.js +0 -5
  261. package/dist/module/src/SubPackages/react/component/pure.js +0 -5
  262. package/dist/module/src/SubPackages/react/component/web.js +0 -5
  263. package/dist/module/src/SubPackages/react/jsx/index.js +0 -58
  264. package/dist/module/src/SubPackages/react/jsx/node.js +0 -5
  265. package/dist/module/src/SubPackages/react/jsx/pure.js +0 -5
  266. package/dist/module/src/SubPackages/react/jsx/web.js +0 -5
  267. package/dist/module/src/SubPackages/react-dom/component/dynamic.js +0 -54
  268. package/dist/module/src/SubPackages/react-dom/component/node.js +0 -5
  269. package/dist/module/src/SubPackages/react-dom/component/pure.js +0 -5
  270. package/dist/module/src/SubPackages/react-dom/component/static.js +0 -22
  271. package/dist/module/src/SubPackages/react-dom/component/web.js +0 -11
  272. package/dist/module/src/SubPackages/react-dom/jsx/dynamic.js +0 -27
  273. package/dist/module/src/SubPackages/react-dom/jsx/node.js +0 -5
  274. package/dist/module/src/SubPackages/react-dom/jsx/pure.js +0 -5
  275. package/dist/module/src/SubPackages/react-dom/jsx/static.js +0 -53
  276. package/dist/module/src/SubPackages/react-dom/jsx/web.js +0 -11
  277. package/dist/module/src/SubPackages/react-test-renderer/MemoExoticComponent/node.js +0 -16
  278. package/dist/module/src/SubPackages/react-test-renderer/component/index.js +0 -14
  279. package/dist/module/src/SubPackages/react-test-renderer/component/interface.js +0 -31
  280. package/dist/module/src/SubPackages/react-test-renderer/component/node.js +0 -3
  281. package/dist/module/src/SubPackages/react-test-renderer/component/pure.js +0 -3
  282. package/dist/module/src/SubPackages/react-test-renderer/component/test/implementation.js +0 -54
  283. package/dist/module/src/SubPackages/react-test-renderer/component/test/node.js +0 -5
  284. package/dist/module/src/SubPackages/react-test-renderer/component/test/pure.js +0 -5
  285. package/dist/module/src/SubPackages/react-test-renderer/component/test/web.js +0 -5
  286. package/dist/module/src/SubPackages/react-test-renderer/component/web.js +0 -3
  287. package/dist/module/src/SubPackages/react-test-renderer/fc/node.js +0 -22
  288. package/dist/module/src/SubPackages/react-test-renderer/fc/web.js +0 -22
  289. package/dist/module/src/SubPackages/react-test-renderer/jsx/index.js +0 -28
  290. package/dist/module/src/SubPackages/react-test-renderer/jsx/node.js +0 -5
  291. package/dist/module/src/SubPackages/react-test-renderer/jsx/pure.js +0 -5
  292. package/dist/module/src/SubPackages/react-test-renderer/jsx/web.js +0 -5
  293. package/dist/module/src/SubPackages/react-test-renderer/jsx-promised/index.js +0 -16
  294. package/dist/module/src/SubPackages/react-test-renderer/jsx-promised/node.js +0 -5
  295. package/dist/module/src/SubPackages/react-test-renderer/jsx-promised/web.js +0 -5
  296. package/dist/module/src/examples/react/component/index.js +0 -26
  297. package/dist/module/src/examples/react/component/test.js +0 -32
  298. package/dist/prebuild/ReportClient.css +0 -11342
  299. package/dist/tsconfig.tsbuildinfo +0 -1
  300. package/dist/types/src/SubPackages/react/component/index.d.ts +0 -4
  301. package/dist/types/src/SubPackages/react/component/node.d.ts +0 -4
  302. package/dist/types/src/SubPackages/react/component/pure.d.ts +0 -4
  303. package/dist/types/src/SubPackages/react/component/web.d.ts +0 -4
  304. package/dist/types/src/SubPackages/react/jsx/index.d.ts +0 -5
  305. package/dist/types/src/SubPackages/react/jsx/node.d.ts +0 -4
  306. package/dist/types/src/SubPackages/react/jsx/pure.d.ts +0 -4
  307. package/dist/types/src/SubPackages/react/jsx/web.d.ts +0 -4
  308. package/dist/types/src/SubPackages/react-dom/component/dynamic.d.ts +0 -20
  309. package/dist/types/src/SubPackages/react-dom/component/node.d.ts +0 -4
  310. package/dist/types/src/SubPackages/react-dom/component/pure.d.ts +0 -4
  311. package/dist/types/src/SubPackages/react-dom/component/static.d.ts +0 -9
  312. package/dist/types/src/SubPackages/react-dom/component/web.d.ts +0 -4
  313. package/dist/types/src/SubPackages/react-dom/jsx/dynamic.d.ts +0 -5
  314. package/dist/types/src/SubPackages/react-dom/jsx/index.d.ts +0 -6
  315. package/dist/types/src/SubPackages/react-dom/jsx/node.d.ts +0 -4
  316. package/dist/types/src/SubPackages/react-dom/jsx/pure.d.ts +0 -4
  317. package/dist/types/src/SubPackages/react-dom/jsx/static.d.ts +0 -5
  318. package/dist/types/src/SubPackages/react-dom/jsx/web.d.ts +0 -5
  319. package/dist/types/src/SubPackages/react-test-renderer/MemoExoticComponent/node.d.ts +0 -6
  320. package/dist/types/src/SubPackages/react-test-renderer/component/index.d.ts +0 -5
  321. package/dist/types/src/SubPackages/react-test-renderer/component/interface.d.ts +0 -3
  322. package/dist/types/src/SubPackages/react-test-renderer/component/node.d.ts +0 -4
  323. package/dist/types/src/SubPackages/react-test-renderer/component/pure.d.ts +0 -4
  324. package/dist/types/src/SubPackages/react-test-renderer/component/test/implementation.d.ts +0 -4
  325. package/dist/types/src/SubPackages/react-test-renderer/component/test/node.d.ts +0 -3
  326. package/dist/types/src/SubPackages/react-test-renderer/component/test/pure.d.ts +0 -4
  327. package/dist/types/src/SubPackages/react-test-renderer/component/test/web.d.ts +0 -3
  328. package/dist/types/src/SubPackages/react-test-renderer/component/web.d.ts +0 -4
  329. package/dist/types/src/SubPackages/react-test-renderer/fc/node.d.ts +0 -8
  330. package/dist/types/src/SubPackages/react-test-renderer/fc/web.d.ts +0 -9
  331. package/dist/types/src/SubPackages/react-test-renderer/jsx/index.d.ts +0 -11
  332. package/dist/types/src/SubPackages/react-test-renderer/jsx/node.d.ts +0 -4
  333. package/dist/types/src/SubPackages/react-test-renderer/jsx/pure.d.ts +0 -4
  334. package/dist/types/src/SubPackages/react-test-renderer/jsx/web.d.ts +0 -4
  335. package/dist/types/src/SubPackages/react-test-renderer/jsx-promised/index.d.ts +0 -15
  336. package/dist/types/src/SubPackages/react-test-renderer/jsx-promised/node.d.ts +0 -5
  337. package/dist/types/src/SubPackages/react-test-renderer/jsx-promised/web.d.ts +0 -5
  338. package/dist/types/src/examples/react/component/index.d.ts +0 -13
  339. package/dist/types/src/examples/react/component/test.d.ts +0 -17
  340. package/src/SubPackages/react/component/index.ts +0 -28
  341. package/src/SubPackages/react/component/node.ts +0 -17
  342. package/src/SubPackages/react/component/pure.ts +0 -17
  343. package/src/SubPackages/react/component/web.ts +0 -17
  344. package/src/SubPackages/react/jsx/index.ts +0 -75
  345. package/src/SubPackages/react/jsx/node.ts +0 -23
  346. package/src/SubPackages/react/jsx/pure.ts +0 -23
  347. package/src/SubPackages/react/jsx/web.ts +0 -24
  348. package/src/SubPackages/react-dom/component/dynamic.ts +0 -107
  349. package/src/SubPackages/react-dom/component/node.ts +0 -17
  350. package/src/SubPackages/react-dom/component/pure.ts +0 -17
  351. package/src/SubPackages/react-dom/component/static.ts +0 -41
  352. package/src/SubPackages/react-dom/component/web.ts +0 -32
  353. package/src/SubPackages/react-dom/jsx/dynamic.ts +0 -46
  354. package/src/SubPackages/react-dom/jsx/index.ts +0 -6
  355. package/src/SubPackages/react-dom/jsx/node.ts +0 -18
  356. package/src/SubPackages/react-dom/jsx/pure.ts +0 -18
  357. package/src/SubPackages/react-dom/jsx/static.ts +0 -87
  358. package/src/SubPackages/react-dom/jsx/web.ts +0 -26
  359. package/src/SubPackages/react-test-renderer/MemoExoticComponent/node.ts +0 -54
  360. package/src/SubPackages/react-test-renderer/component/index.ts +0 -32
  361. package/src/SubPackages/react-test-renderer/component/interface.ts +0 -43
  362. package/src/SubPackages/react-test-renderer/component/node.ts +0 -18
  363. package/src/SubPackages/react-test-renderer/component/pure.ts +0 -18
  364. package/src/SubPackages/react-test-renderer/component/test/implementation.ts +0 -63
  365. package/src/SubPackages/react-test-renderer/component/test/node.ts +0 -14
  366. package/src/SubPackages/react-test-renderer/component/test/pure.ts +0 -14
  367. package/src/SubPackages/react-test-renderer/component/test/web.ts +0 -14
  368. package/src/SubPackages/react-test-renderer/component/web.ts +0 -18
  369. package/src/SubPackages/react-test-renderer/fc/node.ts +0 -83
  370. package/src/SubPackages/react-test-renderer/fc/web.ts +0 -80
  371. package/src/SubPackages/react-test-renderer/jsx/index.ts +0 -61
  372. package/src/SubPackages/react-test-renderer/jsx/node.ts +0 -31
  373. package/src/SubPackages/react-test-renderer/jsx/pure.ts +0 -31
  374. package/src/SubPackages/react-test-renderer/jsx/web.ts +0 -32
  375. package/src/SubPackages/react-test-renderer/jsx-promised/index.ts +0 -73
  376. package/src/SubPackages/react-test-renderer/jsx-promised/node.ts +0 -36
  377. package/src/SubPackages/react-test-renderer/jsx-promised/web.ts +0 -36
  378. package/src/examples/react/component/index.tsx +0 -35
  379. package/src/examples/react/component/test.ts +0 -83
  380. package/testeranto/bundles/node/redux/metafile.json +0 -559
  381. package/testeranto/bundles/pure/redux/metafile.json +0 -554
  382. package/testeranto/bundles/web/redux/metafile.json +0 -504
  383. package/testeranto/bundles/web/redux/test/web.html +0 -19
  384. package/testeranto/reports/redux/config.json +0 -38
  385. package/testeranto/reports/redux/summary.json +0 -20
  386. /package/dist/{module/src/SubPackages/react-dom/jsx/index.js → types/src/SP__Polygon.test.d.ts} +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: false,
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,28 @@ ${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("node", [builtfile, testResources, ipcfile], {
707
+ stdio: ["pipe", "pipe", "pipe", "ipc"],
708
+ });
709
+
844
710
  let buffer: Buffer<ArrayBufferLike> = new Buffer("");
845
711
 
846
712
  const server = net.createServer((socket) => {
713
+ const queue = new Queue<string[]>();
714
+
847
715
  socket.on("data", (data) => {
848
716
  buffer = Buffer.concat([buffer, data]);
849
717
 
850
- let messages: string[][] = [];
851
718
  for (let b = 0; b < buffer.length + 1; b++) {
852
- let c = buffer.slice(0, b);
719
+ const c = buffer.slice(0, b);
853
720
  let d;
854
721
  try {
855
722
  d = JSON.parse(c.toString());
856
723
 
857
- messages.push(d);
724
+ queue.enqueue(d);
858
725
  buffer = buffer.slice(b, buffer.length + 1);
859
726
  b = 0;
860
727
  } catch (e) {
@@ -862,82 +729,53 @@ ${addableFiles
862
729
  }
863
730
  }
864
731
 
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
- );
732
+ while (queue.size() > 0) {
733
+ const message = queue.dequeue();
734
+
735
+ if (message) {
736
+ // set up the "node" listeners
737
+ this.mapping().forEach(async ([command, func]) => {
738
+ if (message[0] === command) {
739
+ const x = message.slice(1, -1);
740
+ const r = await this[command](...x);
741
+
742
+ if (!haltReturns) {
743
+ child.send(
744
+ JSON.stringify({
745
+ payload: r,
746
+ key: message[message.length - 1],
747
+ })
748
+ );
749
+ }
879
750
  }
880
- }
881
- });
882
- });
751
+ });
752
+ }
753
+ }
883
754
  });
884
755
  });
885
756
 
886
757
  const oStream = fs.createWriteStream(`${reportDest}/console_log.txt`);
887
758
 
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
759
  const errFile = `${reportDest}/error.txt`;
907
760
 
908
761
  if (fs.existsSync(errFile)) {
909
762
  fs.rmSync(errFile);
910
763
  }
911
764
 
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, () => {
765
+ server.listen(ipcfile, () => {
925
766
  child.stderr?.on("data", (data) => {
926
- oStream.write(`stderr data ${data}`);
767
+ oStream.write(`stderr > ${data}`);
927
768
  });
928
769
  child.stdout?.on("data", (data) => {
929
- oStream.write(`stdout data ${data}`);
770
+ oStream.write(`stdout > ${data}`);
930
771
  });
931
772
  child.on("close", (code) => {
932
773
  console.log("close");
933
- console.log("deleting", p);
934
- if (fs.existsSync(p)) {
935
- fs.rmSync(p);
936
- }
937
-
938
774
  oStream.close();
939
775
  server.close();
940
776
 
777
+ // this.receiveFeaturesV2(reportDest, src, "node");
778
+
941
779
  if (code === null) {
942
780
  this.bddTestIsNowDone(src, -1);
943
781
  statusMessagePretty(-1, src);
@@ -953,19 +791,18 @@ ${addableFiles
953
791
  });
954
792
  child.on("exit", (code) => {
955
793
  console.log("exit");
956
- console.log("deleting", p);
957
- if (fs.existsSync(p)) {
958
- fs.rmSync(p);
794
+ haltReturns = true;
795
+
796
+ for (let i = 0; i <= portsToUse.length; i++) {
797
+ if (portsToUse[i]) {
798
+ this.ports[portsToUse[i]] = true; //port is open again
799
+ }
959
800
  }
960
801
 
961
- haltReturns = true;
802
+ console.log("exitthis.ports", this.ports);
962
803
  });
963
804
  child.on("error", (e) => {
964
805
  console.log("error");
965
- console.log("deleting", p);
966
- if (fs.existsSync(p)) {
967
- fs.rmSync(p);
968
- }
969
806
 
970
807
  haltReturns = true;
971
808
 
@@ -979,170 +816,338 @@ ${addableFiles
979
816
  this.writeFileSync(`${reportDest}/error.txt`, e.toString(), src);
980
817
  this.bddTestIsNowDone(src, -1);
981
818
  statusMessagePretty(-1, src);
982
-
983
- // this.bddTestIsNowDone(src, -1);
984
- // statusMessagePretty(-1, src);
985
819
  });
986
820
  });
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
821
  };
996
822
 
997
823
  launchWebSideCar = async (
998
- src: string,
999
- dest: string,
824
+ // src: string,
825
+ // dest: string,
1000
826
  testConfig: ITestTypes
1001
- ): Promise<Page> => {
1002
- const d = dest + ".mjs";
827
+ ): Promise<[number, ITTestResourceConfiguration]> => {
828
+ const src = testConfig[0];
829
+ const dest = src.split(".").slice(0, -1).join(".");
830
+ // const d = dest + ".mjs";
831
+
832
+ const destFolder = dest.replace(".mjs", "");
1003
833
 
1004
834
  console.log(ansiC.green(ansiC.inverse(`launchWebSideCar ${src}`)));
1005
835
 
1006
836
  const fileStreams2: fs.WriteStream[] = [];
1007
837
  const doneFileStream2: Promise<any>[] = [];
1008
838
 
839
+ const oStream = fs.createWriteStream(`${destFolder}/console_log.txt`);
840
+
1009
841
  return new Promise((res, rej) => {
1010
842
  this.browser
1011
843
  .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
- });
844
+ .then(async (page) => {
845
+ this.mapping().forEach(async ([command, func]) => {
846
+ page.exposeFunction(command, func);
847
+ });
1033
848
 
1034
- if (!screenshots[testName]) {
1035
- screenshots[testName] = [];
1036
- }
1037
- screenshots[testName].push(sPromise);
1038
- await sPromise;
1039
- return sPromise;
849
+ const close = () => {
850
+ if (!files[src]) {
851
+ files[src] = new Set();
1040
852
  }
1041
- );
1042
-
1043
- page.exposeFunction(
1044
- "writeFileSync",
1045
- (fp: string, contents: string, testName: string) => {
1046
- const dir = path.dirname(fp);
853
+ // files[t].add(filepath);
1047
854
 
1048
- fs.mkdirSync(dir, {
1049
- recursive: true,
1050
- });
855
+ fs.writeFileSync(
856
+ destFolder + "/manifest.json",
857
+ JSON.stringify(Array.from(files[src]))
858
+ );
859
+ delete files[src];
860
+
861
+ Promise.all(screenshots[src] || []).then(() => {
862
+ delete screenshots[src];
863
+ page.close();
864
+ oStream.close();
865
+ });
866
+ };
867
+
868
+ page.on("pageerror", (err: Error) => {
869
+ console.debug(`Error from ${src}: [${err.name}] `);
870
+ oStream.write(err.name);
871
+ oStream.write("\n");
1051
872
 
1052
- const p = new Promise<string>(async (res, rej) => {
1053
- fs.writeFileSync(fp, contents);
1054
- res(fp);
1055
- });
1056
- doneFileStream2.push(p);
873
+ if (err.cause) {
874
+ console.debug(`Error from ${src} cause: [${err.cause}] `);
875
+ oStream.write(err.cause);
876
+ oStream.write("\n");
877
+ }
1057
878
 
1058
- if (!files[testName]) {
1059
- files[testName] = new Set();
1060
- }
1061
- files[testName].add(fp);
1062
- return p;
879
+ if (err.stack) {
880
+ console.debug(`Error from stack ${src}: [${err.stack}] `);
881
+ oStream.write(err.stack);
882
+ oStream.write("\n");
1063
883
  }
1064
- );
1065
884
 
1066
- page.exposeFunction("existsSync", (fp: string, contents: string) => {
1067
- return fs.existsSync(fp);
885
+ console.debug(`Error from message ${src}: [${err.message}] `);
886
+ oStream.write(err.message);
887
+ oStream.write("\n");
888
+
889
+ this.bddTestIsNowDone(src, -1);
890
+ close();
1068
891
  });
1069
892
 
1070
- page.exposeFunction("mkdirSync", (fp: string) => {
1071
- if (!fs.existsSync(fp)) {
1072
- return fs.mkdirSync(fp, {
1073
- recursive: true,
1074
- });
1075
- }
1076
- return false;
893
+ page.on("console", (log: ConsoleMessage) => {
894
+ oStream.write(log.text());
895
+ oStream.write(JSON.stringify(log.location()));
896
+ oStream.write(JSON.stringify(log.stackTrace()));
897
+ oStream.write("\n");
1077
898
  });
1078
899
 
1079
- page.exposeFunction(
1080
- "createWriteStream",
1081
- (fp: string, testName: string) => {
1082
- const f = fs.createWriteStream(fp);
900
+ await page.goto(`file://${`${destFolder}.html`}`, {});
1083
901
 
1084
- files[testName].add(fp);
902
+ const webArgz = JSON.stringify({
903
+ name: dest,
904
+ ports: [].toString(),
905
+ fs: dest,
906
+ browserWSEndpoint: this.browser.wsEndpoint(),
907
+ });
1085
908
 
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
- );
909
+ const d = `${dest}?cacheBust=${Date.now()}`;
1100
910
 
1101
- page.exposeFunction(
1102
- "write",
1103
- async (uid: number, contents: string) => {
1104
- return fileStreams2[uid].write(contents);
1105
- }
1106
- );
911
+ const evaluation = `
912
+ import('${d}').then(async (x) => {
1107
913
 
1108
- page.exposeFunction("end", async (uid: number) => {
1109
- return fileStreams2[uid].end();
1110
- });
914
+ try {
915
+ return await (await x.default).receiveTestResourceConfig(${webArgz})
916
+ } catch (e) {
917
+ console.log("fail", e.toString())
918
+ }
919
+ })`;
920
+
921
+ await page
922
+ .evaluate(evaluation)
923
+ .then(async ({ fails, failed, features }: IFinalResults) => {
924
+ // this.receiveFeatures(features, destFolder, src, "web");
925
+ // this.receiveFeaturesV2(reportDest, src, "web");
926
+
927
+ statusMessagePretty(fails, src);
928
+ this.bddTestIsNowDone(src, fails);
929
+ })
930
+ .catch((e) => {
931
+ console.log(
932
+ ansiC.red(
933
+ ansiC.inverse(`launchWebSidecar - ${src} errored with: ${e}`)
934
+ )
935
+ );
936
+ })
937
+ .finally(() => {
938
+ this.bddTestIsNowDone(src, -1);
939
+ close();
940
+ });
1111
941
 
1112
942
  return page;
943
+
944
+ // return page;
1113
945
  })
1114
946
  .then(async (page) => {
1115
947
  await page.goto(`file://${`${dest}.html`}`, {});
1116
948
 
1117
949
  /* @ts-ignore:next-line */
1118
- res(page);
950
+ res([Math.random(), page]);
1119
951
  });
1120
952
  });
1121
953
  };
1122
954
 
1123
955
  launchNodeSideCar = async (
1124
- src: string,
1125
- dest: string,
1126
- testConfig: ITestTypes
1127
- ) => {
956
+ sidecar: ITestTypes
957
+ ): Promise<[number, ITTestResourceConfiguration]> => {
958
+ const src = sidecar[0];
959
+ const dest =
960
+ process.cwd() + `/testeranto/bundles/node/${this.name}/${sidecar[0]}`;
1128
961
  const d = dest + ".mjs";
1129
- console.log(ansiC.green(ansiC.inverse(`launchNodeSideCar ${src}`)));
962
+ console.log(ansiC.green(ansiC.inverse(`launchNodeSideCar ${sidecar[0]}`)));
963
+
964
+ const destFolder = dest.replace(".ts", "");
965
+
966
+ const reportDest = `testeranto/reports/${this.name}/${src
967
+ .split(".")
968
+ .slice(0, -1)
969
+ .join(".")}/node`;
970
+
971
+ const argz: ITTestResourceConfiguration = {
972
+ name: sidecar[0],
973
+ ports: [],
974
+ fs: destFolder,
975
+ browserWSEndpoint: this.browser.wsEndpoint(),
976
+ };
977
+
978
+ const testReq: { ports: number } = sidecar[2];
979
+
980
+ const portsToUse: number[] = [];
981
+ if (testReq.ports === 0) {
982
+ // argz = {
983
+ // name: sidecar[0],
984
+ // ports: portsToUse,
985
+ // fs: destFolder,
986
+ // browserWSEndpoint: this.browser.wsEndpoint(),
987
+ // };
988
+ } else if (testReq.ports > 0) {
989
+ const openPorts = Object.entries(this.ports).filter(
990
+ ([portnumber, portopen]) => portopen
991
+ );
992
+
993
+ if (openPorts.length >= testReq.ports) {
994
+ for (let i = 0; i < testReq.ports; i++) {
995
+ portsToUse.push(openPorts[i][0]);
996
+
997
+ this.ports[openPorts[i][0]] = false; // port is now closed
998
+ }
999
+
1000
+ console.log("nodeSideCar portsToUse", portsToUse);
1001
+ argz.ports = portsToUse;
1002
+
1003
+ const builtfile = destFolder + ".mjs";
1004
+
1005
+ let haltReturns = false;
1006
+
1007
+ let buffer: Buffer<ArrayBufferLike> = new Buffer("");
1008
+
1009
+ const server = net.createServer((socket) => {
1010
+ socket.on("data", (data) => {
1011
+ buffer = Buffer.concat([buffer, data]);
1012
+
1013
+ const messages: string[][] = [];
1014
+ for (let b = 0; b < buffer.length + 1; b++) {
1015
+ const c = buffer.slice(0, b);
1016
+ let d;
1017
+ try {
1018
+ d = JSON.parse(c.toString());
1019
+
1020
+ messages.push(d);
1021
+ buffer = buffer.slice(b, buffer.length + 1);
1022
+ b = 0;
1023
+ } catch (e) {
1024
+ // b++;
1025
+ }
1026
+ }
1027
+
1028
+ messages.forEach(async (payload) => {
1029
+ this.mapping().forEach(async ([command, func]) => {
1030
+ if (payload[0] === command) {
1031
+ const x = payload.slice(1, -1);
1032
+ const r = await this[command](...x);
1033
+
1034
+ if (!haltReturns) {
1035
+ child.send(
1036
+ JSON.stringify({
1037
+ payload: r,
1038
+ key: payload[payload.length - 1],
1039
+ })
1040
+ );
1041
+ }
1042
+ }
1043
+ });
1044
+ });
1045
+ });
1046
+ });
1047
+
1048
+ const oStream = fs.createWriteStream(`${reportDest}/console_log.txt`);
1049
+
1050
+ const child = spawn("node", [builtfile, JSON.stringify(argz)], {
1051
+ stdio: ["pipe", "pipe", "pipe", "ipc"],
1052
+ // silent: true
1053
+ });
1054
+
1055
+ const p = "/tmp/tpipe" + Math.random();
1056
+
1057
+ const errFile = `${reportDest}/error.txt`;
1058
+
1059
+ server.listen(p, () => {
1060
+ child.stderr?.on("data", (data) => {
1061
+ oStream.write(`stderr > ${data}`);
1062
+ });
1063
+ child.stdout?.on("data", (data) => {
1064
+ oStream.write(`stdout > ${data}`);
1065
+ });
1066
+ child.on("close", (code) => {
1067
+ oStream.close();
1068
+ server.close();
1069
+
1070
+ haltReturns = true;
1071
+ });
1072
+ child.on("exit", (code) => {
1073
+ haltReturns = true;
1074
+
1075
+ for (let i = 0; i <= portsToUse.length; i++) {
1076
+ if (portsToUse[i]) {
1077
+ this.ports[portsToUse[i]] = true; //port is open again
1078
+ }
1079
+ }
1080
+ });
1081
+ child.on("error", (e) => {
1082
+ if (fs.existsSync(p)) {
1083
+ fs.rmSync(p);
1084
+ }
1085
+
1086
+ haltReturns = true;
1087
+
1088
+ console.log(
1089
+ ansiC.red(
1090
+ ansiC.inverse(
1091
+ `launchNodeSideCar - ${src} errored with: ${e.name}. Check ${errFile}for more info`
1092
+ )
1093
+ )
1094
+ );
1095
+ this.writeFileSync(`${reportDest}/error.txt`, e.toString(), src);
1096
+ // this.bddTestIsNowDone(src, -1);
1097
+ // statusMessagePretty(-1, src);
1098
+ });
1099
+ });
1100
+
1101
+ child.send({ path: p });
1102
+
1103
+ const r = Math.random();
1104
+ this.nodeSidecars[r] = child;
1105
+ return [r, argz];
1106
+ } else {
1107
+ console.log("Not enough open ports!", openPorts, testReq.ports);
1108
+ this.queue.push(sidecar[0]);
1109
+ return [Math.random(), argz];
1110
+ }
1111
+ } else {
1112
+ console.error("negative port makes no sense", sidecar[0]);
1113
+ process.exit(-1);
1114
+ }
1115
+ };
1116
+
1117
+ stopPureSideCar = async (uid: number) => {
1118
+ console.log(ansiC.green(ansiC.inverse(`stopPureSideCar ${uid}`)));
1119
+ await this.sidecars[uid].shutdown();
1120
+ return;
1121
+ };
1122
+
1123
+ launchPureSideCar = async (
1124
+ sidecar: ITestTypes
1125
+ ): Promise<[number, ITTestResourceConfiguration]> => {
1126
+ console.log(ansiC.green(ansiC.inverse(`launchPureSideCar ${sidecar[0]}`)));
1127
+
1128
+ const r = Math.random();
1129
+
1130
+ const dest =
1131
+ process.cwd() + `/testeranto/bundles/pure/${this.name}/${sidecar[0]}`;
1132
+ const builtfile = dest.split(".").slice(0, -1).concat("mjs").join(".");
1130
1133
 
1131
1134
  const destFolder = dest.replace(".mjs", "");
1132
1135
 
1133
- let argz = "";
1136
+ let argz: ITTestResourceConfiguration;
1134
1137
 
1135
- const testConfigResource = testConfig[2];
1138
+ const z = sidecar[2];
1139
+ const testConfigResource: { ports: number } = sidecar[2];
1140
+ const src = sidecar[0];
1136
1141
 
1137
- let portsToUse: string[] = [];
1142
+ const portsToUse: number[] = [];
1138
1143
  if (testConfigResource.ports === 0) {
1139
- argz = JSON.stringify({
1140
- scheduled: true,
1144
+ argz = {
1145
+ // scheduled: true,
1141
1146
  name: src,
1142
1147
  ports: portsToUse,
1143
1148
  fs: destFolder,
1144
1149
  browserWSEndpoint: this.browser.wsEndpoint(),
1145
- });
1150
+ };
1146
1151
  } else if (testConfigResource.ports > 0) {
1147
1152
  const openPorts = Object.entries(this.ports).filter(
1148
1153
  ([portnumber, portopen]) => portopen
@@ -1155,14 +1160,14 @@ ${addableFiles
1155
1160
  this.ports[openPorts[i][0]] = false; // port is now closed
1156
1161
  }
1157
1162
 
1158
- argz = JSON.stringify({
1159
- scheduled: true,
1163
+ argz = {
1164
+ // scheduled: true,
1160
1165
  name: src,
1161
1166
  // ports: [3333],
1162
1167
  ports: portsToUse,
1163
1168
  fs: ".",
1164
1169
  browserWSEndpoint: this.browser.wsEndpoint(),
1165
- });
1170
+ };
1166
1171
  } else {
1167
1172
  this.queue.push(src);
1168
1173
  return;
@@ -1172,32 +1177,19 @@ ${addableFiles
1172
1177
  process.exit(-1);
1173
1178
  }
1174
1179
 
1175
- const builtfile = dest + ".mjs";
1180
+ // const builtfile = dest + ".mjs";
1176
1181
 
1177
1182
  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
- });
1183
+ this.pureSidecars[r] = module.default;
1184
+ this.pureSidecars[r].start(argz);
1194
1185
  });
1195
1186
 
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
- }
1187
+ return [r, argz];
1188
+ // for (let i = 0; i <= portsToUse.length; i++) {
1189
+ // if (portsToUse[i]) {
1190
+ // this.ports[portsToUse[i]] = "true"; //port is open again
1191
+ // }
1192
+ // }
1201
1193
  };
1202
1194
 
1203
1195
  launchWeb = async (src: string, dest: string) => {
@@ -1215,7 +1207,7 @@ ${addableFiles
1215
1207
  const destFolder = dest.replace(".mjs", "");
1216
1208
 
1217
1209
  const webArgz = JSON.stringify({
1218
- name: dest,
1210
+ name: src,
1219
1211
  ports: [].toString(),
1220
1212
  fs: reportDest,
1221
1213
  browserWSEndpoint: this.browser.wsEndpoint(),
@@ -1239,9 +1231,18 @@ ${addableFiles
1239
1231
  this.browser
1240
1232
  .newPage()
1241
1233
  .then((page) => {
1242
- // set up the "node" listeners
1243
1234
  this.mapping().forEach(async ([command, func]) => {
1244
- page.exposeFunction(command, func);
1235
+ if (command === "page") {
1236
+ page.exposeFunction(command, (x?) => {
1237
+ if (x) {
1238
+ return func(x);
1239
+ } else {
1240
+ return func(page.mainFrame()._id);
1241
+ }
1242
+ });
1243
+ } else {
1244
+ return page.exposeFunction(command, func);
1245
+ }
1245
1246
  });
1246
1247
 
1247
1248
  return page;
@@ -1292,24 +1293,34 @@ ${addableFiles
1292
1293
  });
1293
1294
  page.on("console", (log: ConsoleMessage) => {
1294
1295
  oStream.write(log.text());
1296
+ oStream.write("\n");
1295
1297
  oStream.write(JSON.stringify(log.location()));
1298
+ oStream.write("\n");
1296
1299
  oStream.write(JSON.stringify(log.stackTrace()));
1297
1300
  oStream.write("\n");
1298
1301
  });
1302
+
1299
1303
  await page.goto(`file://${`${destFolder}.html`}`, {});
1300
1304
 
1305
+ this.webSidecars[Math.random()] = page.mainFrame()._id;
1306
+
1301
1307
  await page
1302
1308
  .evaluate(evaluation)
1303
1309
  .then(async ({ fails, failed, features }: IFinalResults) => {
1304
- this.receiveFeatures(features, destFolder, src, "web");
1310
+ // this.receiveFeatures(features, destFolder, src, "web");
1311
+ // this.receiveFeaturesV2(reportDest, src, "web");
1312
+
1305
1313
  statusMessagePretty(fails, src);
1306
1314
  this.bddTestIsNowDone(src, fails);
1307
1315
  })
1308
1316
  .catch((e) => {
1309
- console.log(ansiC.red(ansiC.inverse(`${src} errored with: ${e}`)));
1317
+ console.log(
1318
+ ansiC.red(ansiC.inverse(`launchweb - ${src} errored with: ${e}`))
1319
+ );
1310
1320
  })
1311
1321
  .finally(() => {
1312
1322
  this.bddTestIsNowDone(src, -1);
1323
+ // process.exit(-1);
1313
1324
  close();
1314
1325
  });
1315
1326
 
@@ -1317,9 +1328,8 @@ ${addableFiles
1317
1328
  });
1318
1329
  };
1319
1330
 
1320
- receiveFeatures = (
1321
- features: string[],
1322
- destFolder: string,
1331
+ receiveFeaturesV2 = (
1332
+ reportDest: string,
1323
1333
  srcTest: string,
1324
1334
  platform: IRunTime
1325
1335
  ) => {
@@ -1331,8 +1341,16 @@ ${addableFiles
1331
1341
  srcTest.split(".").slice(0, -1).join(".") + ".features.txt"
1332
1342
  );
1333
1343
 
1334
- features
1344
+ const testReport = JSON.parse(
1345
+ fs.readFileSync(`${reportDest}/tests.json`).toString()
1346
+ );
1347
+
1348
+ // console.log("mark2", testReport);
1349
+
1350
+ testReport.features
1335
1351
  .reduce(async (mm, featureStringKey) => {
1352
+ // console.log("mark4", featureStringKey);
1353
+
1336
1354
  const accum = await mm;
1337
1355
 
1338
1356
  const isUrl = isValidUrl(featureStringKey);
@@ -1346,16 +1364,16 @@ ${addableFiles
1346
1364
  u.pathname
1347
1365
  )}`;
1348
1366
 
1349
- await fs.promises.mkdir(path.dirname(newPath), { recursive: true });
1367
+ // await fs.promises.mkdir(path.dirname(newPath), { recursive: true });
1350
1368
 
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
- }
1369
+ // try {
1370
+ // await fs.unlinkSync(newPath);
1371
+ // // console.log(`Removed existing link at ${newPath}`);
1372
+ // } catch (error) {
1373
+ // if (error.code !== "ENOENT") {
1374
+ // // throw error;
1375
+ // }
1376
+ // }
1359
1377
 
1360
1378
  // fs.symlink(u.pathname, newPath, (err) => {
1361
1379
  // if (err) {
@@ -1364,12 +1382,14 @@ ${addableFiles
1364
1382
  // // console.log("Symlink created successfully");
1365
1383
  // }
1366
1384
  // });
1367
- accum.files.push(newPath);
1385
+ accum.files.push(u.pathname);
1368
1386
  } else if (u.protocol === "http:" || u.protocol === "https:") {
1369
- const newPath = `${process.cwd()}/testeranto/features/external${
1387
+ const newPath = `${process.cwd()}/testeranto/features/external/${
1370
1388
  u.hostname
1371
1389
  }${u.pathname}`;
1390
+
1372
1391
  const body = await this.configs.featureIngestor(featureStringKey);
1392
+
1373
1393
  writeFileAndCreateDir(newPath, body);
1374
1394
  accum.files.push(newPath);
1375
1395
  }
@@ -1385,6 +1405,8 @@ ${addableFiles
1385
1405
  }, Promise.resolve({ files: [] as string[], strings: [] as string[] }))
1386
1406
 
1387
1407
  .then(({ files, strings }: { files: string[]; strings: string[] }) => {
1408
+ // Markdown files must be referenced in the prompt but string style features are already present in the test.json file
1409
+
1388
1410
  fs.writeFileSync(
1389
1411
  `testeranto/reports/${this.name}/${srcTest
1390
1412
  .split(".")
@@ -1397,12 +1419,16 @@ ${addableFiles
1397
1419
  .join("\n")
1398
1420
  );
1399
1421
  });
1400
- };
1401
1422
 
1402
- writeBigBoard = () => {
1403
- fs.writeFileSync(
1404
- `./testeranto/reports/${this.name}/summary.json`,
1405
- JSON.stringify(this.bigBoard, null, 2)
1406
- );
1423
+ // const f: Record<string, string> = {};
1424
+
1425
+ testReport.givens.forEach((g) => {
1426
+ if (g.failed === true) {
1427
+ this.summary[srcTest].failingFeatures[g.key] = g.features;
1428
+ }
1429
+ });
1430
+
1431
+ // this.summary[srcTest].failingFeatures = f;
1432
+ this.writeBigBoard();
1407
1433
  };
1408
1434
  }