testeranto 0.128.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 +560 -19
  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 +488 -422
  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 +489 -423
  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 +696 -404
  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 +617 -578
  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 { 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>> = {};
@@ -61,7 +58,9 @@ async function fileHash(filePath, algorithm = "md5") {
61
58
 
62
59
  const statusMessagePretty = (failures: number, test: string) => {
63
60
  if (failures === 0) {
64
- console.log(ansiC.green(ansiC.inverse(`> ${test} completed successfully`)));
61
+ console.log(
62
+ ansiC.green(ansiC.inverse(`> ${test} completed successfully?!?`))
63
+ );
65
64
  } else {
66
65
  console.log(ansiC.red(ansiC.inverse(`> ${test} failed ${failures} times`)));
67
66
  }
@@ -72,7 +71,7 @@ async function writeFileAndCreateDir(filePath, data) {
72
71
 
73
72
  try {
74
73
  await fs.promises.mkdir(dirPath, { recursive: true });
75
- await fs.appendFileSync(filePath, data);
74
+ await fs.writeFileSync(filePath, data);
76
75
  } catch (error) {
77
76
  console.error(`Error writing file: ${error}`);
78
77
  }
@@ -98,7 +97,7 @@ function isValidUrl(string) {
98
97
  }
99
98
 
100
99
  // Wait for file to exist, checks every 2 seconds by default
101
- function pollForFile(path, timeout = 2000) {
100
+ async function pollForFile(path, timeout = 2000) {
102
101
  const intervalObj = setInterval(function () {
103
102
  const file = path;
104
103
  const fileExists = fs.existsSync(file);
@@ -112,35 +111,82 @@ function pollForFile(path, timeout = 2000) {
112
111
  }, timeout);
113
112
  }
114
113
 
115
- export class PM_Main extends PM_Base {
116
- name: string;
114
+ export class PM_Main extends PM_WithEslintAndTsc {
117
115
  ports: Record<number, boolean>;
118
116
  queue: any[];
119
- mode: "once" | "dev";
120
- bigBoard: ISummary = {};
121
117
  webMetafileWatcher: fs.FSWatcher;
122
118
  nodeMetafileWatcher: fs.FSWatcher;
123
119
  importMetafileWatcher: fs.FSWatcher;
120
+ pureSidecars: Record<number, Sidecar>;
121
+ nodeSidecars: Record<number, ChildProcess>;
122
+ webSidecars: Record<number, Page>;
124
123
 
125
124
  constructor(configs: IBuiltConfig, name: string, mode: "once" | "dev") {
126
- super(configs);
125
+ super(configs, name, mode);
127
126
 
128
- this.name = name;
129
- this.mode = mode;
130
127
  this.ports = {};
128
+ this.queue = [];
131
129
 
132
- this.configs.tests.forEach(([t]) => {
133
- this.bigBoard[t] = {
134
- runTimeError: "?",
135
- typeErrors: "?",
136
- staticErrors: "?",
137
- prompt: "?",
138
- };
139
- });
130
+ this.nodeSidecars = {};
131
+ this.webSidecars = {};
132
+ this.pureSidecars = {};
140
133
 
141
134
  this.configs.ports.forEach((element) => {
142
- this.ports[element] = "true"; // set ports as open
135
+ this.ports[element] = true; // set ports as open
136
+ });
137
+ }
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
+ }
143
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
+ }
144
190
  }
145
191
 
146
192
  mapping(): [string, (...a) => any][] {
@@ -150,20 +196,23 @@ export class PM_Main extends PM_Base {
150
196
  ["closePage", this.closePage],
151
197
  ["createWriteStream", this.createWriteStream],
152
198
  ["customclose", this.customclose],
153
- ["customScreenShot", this.customScreenShot],
199
+ ["customScreenShot", this.customScreenShot.bind(this)],
154
200
  ["end", this.end],
155
201
  ["existsSync", this.existsSync],
156
202
  ["focusOn", this.focusOn],
157
203
  ["getAttribute", this.getAttribute],
158
- ["getValue", this.getValue],
159
- ["goto", this.goto],
204
+ ["getInnerHtml", this.getInnerHtml],
205
+ // ["setValue", this.setValue],
206
+ ["goto", this.goto.bind(this)],
160
207
  ["isDisabled", this.isDisabled],
208
+ ["launchSideCar", this.launchSideCar.bind(this)],
161
209
  ["mkdirSync", this.mkdirSync],
162
210
  ["newPage", this.newPage],
163
211
  ["page", this.page],
164
212
  ["pages", this.pages],
165
213
  ["screencast", this.screencast],
166
214
  ["screencastStop", this.screencastStop],
215
+ ["stopSideCar", this.stopSideCar.bind(this)],
167
216
  ["typeInto", this.typeInto],
168
217
  ["waitForSelector", this.waitForSelector],
169
218
  ["write", this.write],
@@ -174,7 +223,6 @@ export class PM_Main extends PM_Base {
174
223
  async start() {
175
224
  // set up the "pure" listeners
176
225
  this.mapping().forEach(async ([command, func]) => {
177
- // page.exposeFunction(command, func);
178
226
  globalThis[command] = func;
179
227
  });
180
228
 
@@ -182,51 +230,59 @@ export class PM_Main extends PM_Base {
182
230
  fs.mkdirSync(`testeranto/reports/${this.name}`);
183
231
  }
184
232
 
185
- // await pollForFile();
186
-
187
- this.browser = (await puppeteer.launch({
188
- slowMo: 1,
189
- waitForInitialPage: false,
190
- executablePath:
191
- // process.env.CHROMIUM_PATH || "/opt/homebrew/bin/chromium",
192
- "/opt/homebrew/bin/chromium",
193
- headless: true,
194
- dumpio: false,
195
- devtools: false,
196
-
197
- args: [
198
- "--allow-file-access-from-files",
199
- "--allow-insecure-localhost",
200
- "--allow-running-insecure-content",
201
- "--auto-open-devtools-for-tabs",
202
- "--disable-dev-shm-usage",
203
- "--disable-extensions",
204
- "--disable-gpu",
205
- "--disable-setuid-sandbox",
206
- "--disable-site-isolation-trials",
207
- "--disable-site-isolation-trials",
208
- "--disable-web-security",
209
- "--no-first-run",
210
- "--no-sandbox",
211
- "--no-startup-window",
212
- "--reduce-security-for-testing",
213
- "--remote-allow-origins=*",
214
- `--remote-debugging-port=3234`,
215
- "--unsafely-treat-insecure-origin-as-secure=*",
216
- // "--disable-features=IsolateOrigins,site-per-process",
217
- // "--disable-features=IsolateOrigins",
218
- // "--disk-cache-dir=/dev/null",
219
- // "--disk-cache-size=1",
220
- // "--no-zygote",
221
- // "--remote-allow-origins=ws://localhost:3234",
222
- // "--single-process",
223
- // "--start-maximized",
224
- // "--unsafely-treat-insecure-origin-as-secure",
225
- // "--unsafely-treat-insecure-origin-as-secure=ws://192.168.0.101:3234",
226
- ],
227
- })) as any;
233
+ const executablePath = "/opt/homebrew/bin/chromium";
228
234
 
229
- 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 } =
230
286
  this.getRunnables(this.configs.tests, this.name);
231
287
 
232
288
  [
@@ -247,7 +303,7 @@ export class PM_Main extends PM_Base {
247
303
  },
248
304
  ],
249
305
  [
250
- importEntryPoints,
306
+ pureEntryPoints,
251
307
  this.launchPure,
252
308
  "pure",
253
309
  (w) => {
@@ -299,6 +355,43 @@ export class PM_Main extends PM_Base {
299
355
  );
300
356
  }
301
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
+ // });
302
395
  }
303
396
 
304
397
  async stop() {
@@ -315,8 +408,11 @@ export class PM_Main extends PM_Base {
315
408
  testName: string,
316
409
  payload = {
317
410
  nodeEntryPoints: {},
411
+ nodeEntryPointSidecars: {},
318
412
  webEntryPoints: {},
319
- importEntryPoints: {},
413
+ webEntryPointSidecars: {},
414
+ pureEntryPoints: {},
415
+ pureEntryPointSidecars: {},
320
416
  }
321
417
  ): IRunnables => {
322
418
  return getRunnables(tests, testName, payload);
@@ -336,13 +432,21 @@ export class PM_Main extends PM_Base {
336
432
  const outputs: IOutputs = metafile.outputs;
337
433
 
338
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
+
339
440
  const addableFiles = Object.keys(outputs[k].inputs).filter((i) => {
340
441
  if (!fs.existsSync(i)) return false;
341
442
  if (i.startsWith("node_modules")) return false;
443
+ if (i.startsWith("./node_modules")) return false;
444
+
342
445
  return true;
343
446
  });
344
447
 
345
448
  const f = `${k.split(".").slice(0, -1).join(".")}/`;
449
+
346
450
  if (!fs.existsSync(f)) {
347
451
  fs.mkdirSync(f);
348
452
  }
@@ -368,228 +472,6 @@ export class PM_Main extends PM_Base {
368
472
  });
369
473
  }
370
474
 
371
- tscCheck = async ({
372
- entrypoint,
373
- addableFiles,
374
- platform,
375
- }: {
376
- platform: IRunTime;
377
- entrypoint: string;
378
- addableFiles: string[];
379
- }) => {
380
- console.log(ansiC.green(ansiC.inverse(`tsc < ${entrypoint}`)));
381
- this.typeCheckIsRunning(entrypoint);
382
-
383
- const program = tsc.createProgramFromConfig({
384
- basePath: process.cwd(), // always required, used for relative paths
385
- configFilePath: "tsconfig.json", // config to inherit from (optional)
386
- compilerOptions: {
387
- outDir: tscPather(entrypoint, platform, this.name),
388
- // declaration: true,
389
- // skipLibCheck: true,
390
- noEmit: true,
391
- },
392
- include: addableFiles, //["src/**/*"],
393
- // exclude: ["node_modules", "../testeranto"],
394
- // exclude: ["**/*.test.ts", "**/*.spec.ts"],
395
- });
396
- const tscPath = tscPather(entrypoint, platform, this.name);
397
-
398
- let allDiagnostics = program.getSemanticDiagnostics();
399
-
400
- const results: string[] = [];
401
- allDiagnostics.forEach((diagnostic) => {
402
- if (diagnostic.file) {
403
- let { line, character } = ts.getLineAndCharacterOfPosition(
404
- diagnostic.file,
405
- diagnostic.start!
406
- );
407
- let message = ts.flattenDiagnosticMessageText(
408
- diagnostic.messageText,
409
- "\n"
410
- );
411
- results.push(
412
- `${diagnostic.file.fileName} (${line + 1},${
413
- character + 1
414
- }): ${message}`
415
- );
416
- } else {
417
- results.push(
418
- ts.flattenDiagnosticMessageText(diagnostic.messageText, "\n")
419
- );
420
- }
421
- });
422
-
423
- fs.writeFileSync(tscPath, results.join("\n"));
424
-
425
- this.typeCheckIsNowDone(entrypoint, results.length);
426
- };
427
-
428
- eslintCheck = async (
429
- entrypoint: string,
430
- platform: IRunTime,
431
- addableFiles: string[]
432
- ) => {
433
- console.log(ansiC.green(ansiC.inverse(`eslint < ${entrypoint}`)));
434
- this.lintIsRunning(entrypoint);
435
-
436
- const results = (await eslint.lintFiles(addableFiles))
437
- .filter((r) => r.messages.length)
438
- .filter((r) => {
439
- return r.messages[0].ruleId !== null;
440
- })
441
- .map((r) => {
442
- delete r.source;
443
- return r;
444
- });
445
-
446
- fs.writeFileSync(
447
- lintPather(entrypoint, platform, this.name),
448
- await formatter.format(results)
449
- );
450
- this.lintIsNowDone(entrypoint, results.length);
451
- };
452
-
453
- makePrompt = async (
454
- entryPoint: string,
455
- addableFiles: string[],
456
- platform: IRunTime
457
- ) => {
458
- this.bigBoard[entryPoint].prompt = "?";
459
- const promptPath = promptPather(entryPoint, platform, this.name);
460
-
461
- const testPaths = path.join(
462
- "testeranto",
463
- "reports",
464
- this.name,
465
- platform,
466
- entryPoint.split(".").slice(0, -1).join("."),
467
- `tests.json`
468
- );
469
-
470
- const featuresPath = path.join(
471
- "testeranto",
472
- "reports",
473
- this.name,
474
- platform,
475
- entryPoint.split(".").slice(0, -1).join("."),
476
- `featurePrompt.txt`
477
- );
478
-
479
- fs.writeFileSync(
480
- promptPath,
481
- `
482
- ${addableFiles
483
- .map((x) => {
484
- return `/add ${x}`;
485
- })
486
- .join("\n")}
487
-
488
- /read ${lintPather(entryPoint, platform, this.name)}
489
- /read ${tscPather(entryPoint, platform, this.name)}
490
- /read ${testPaths}
491
-
492
- /load ${featuresPath}
493
-
494
- /code Fix the failing tests described in ${testPaths}. Correct any type signature errors described in the files ${tscPather(
495
- entryPoint,
496
- platform,
497
- this.name
498
- )}. Implement any method which throws "Function not implemented. Resolve the lint errors described in ${lintPather(
499
- entryPoint,
500
- platform,
501
- this.name
502
- )}"
503
- `
504
- );
505
- this.bigBoard[
506
- entryPoint
507
- ].prompt = `aider --model deepseek/deepseek-chat --load testeranto/${
508
- this.name
509
- }/reports/${platform}/${entryPoint
510
- .split(".")
511
- .slice(0, -1)
512
- .join(".")}/prompt.txt`;
513
- this.checkForShutdown();
514
- };
515
-
516
- checkForShutdown = () => {
517
- this.writeBigBoard();
518
-
519
- if (this.mode === "dev") return;
520
-
521
- let inflight = false;
522
-
523
- Object.keys(this.bigBoard).forEach((k) => {
524
- if (this.bigBoard[k].prompt === "?") {
525
- console.log(ansiC.blue(ansiC.inverse(`🕕 prompt ${k}`)));
526
- inflight = true;
527
- }
528
- });
529
-
530
- Object.keys(this.bigBoard).forEach((k) => {
531
- if (this.bigBoard[k].runTimeError === "?") {
532
- console.log(ansiC.blue(ansiC.inverse(`🕕 runTimeError ${k}`)));
533
- inflight = true;
534
- }
535
- });
536
-
537
- Object.keys(this.bigBoard).forEach((k) => {
538
- if (this.bigBoard[k].staticErrors === "?") {
539
- console.log(ansiC.blue(ansiC.inverse(`🕕 staticErrors ${k}`)));
540
- inflight = true;
541
- }
542
- });
543
-
544
- Object.keys(this.bigBoard).forEach((k) => {
545
- if (this.bigBoard[k].typeErrors === "?") {
546
- console.log(ansiC.blue(ansiC.inverse(`🕕 typeErrors ${k}`)));
547
- inflight = true;
548
- }
549
- });
550
-
551
- this.writeBigBoard();
552
-
553
- if (!inflight) {
554
- this.browser.disconnect().then(() => {
555
- console.log(ansiC.inverse(`${this.name} has been tested. Goodbye.`));
556
- process.exit();
557
- });
558
- }
559
- };
560
-
561
- typeCheckIsRunning = (src: string) => {
562
- this.bigBoard[src].typeErrors = "?";
563
- };
564
-
565
- typeCheckIsNowDone = (src: string, failures: number) => {
566
- this.bigBoard[src].typeErrors = failures;
567
- this.writeBigBoard();
568
- this.checkForShutdown();
569
- };
570
-
571
- lintIsRunning = (src: string) => {
572
- this.bigBoard[src].staticErrors = "?";
573
- this.writeBigBoard();
574
- };
575
-
576
- lintIsNowDone = (src: string, failures: number) => {
577
- this.bigBoard[src].staticErrors = failures;
578
- this.writeBigBoard();
579
- this.checkForShutdown();
580
- };
581
-
582
- bddTestIsRunning = (src: string) => {
583
- this.bigBoard[src].runTimeError = "?";
584
- this.writeBigBoard();
585
- };
586
-
587
- bddTestIsNowDone = (src: string, failures: number) => {
588
- this.bigBoard[src].runTimeError = failures;
589
- this.writeBigBoard();
590
- this.checkForShutdown();
591
- };
592
-
593
475
  launchPure = async (src: string, dest: string) => {
594
476
  console.log(ansiC.green(ansiC.inverse(`! pure, ${src}`)));
595
477
  this.bddTestIsRunning(src);
@@ -598,6 +480,7 @@ ${addableFiles
598
480
  .split(".")
599
481
  .slice(0, -1)
600
482
  .join(".")}/pure`;
483
+
601
484
  if (!fs.existsSync(reportDest)) {
602
485
  fs.mkdirSync(reportDest, { recursive: true });
603
486
  }
@@ -616,7 +499,7 @@ ${addableFiles
616
499
  }
617
500
  const testConfigResource = testConfig[2];
618
501
 
619
- let portsToUse: string[] = [];
502
+ const portsToUse: string[] = [];
620
503
  if (testConfigResource.ports === 0) {
621
504
  argz = JSON.stringify({
622
505
  scheduled: true,
@@ -691,19 +574,23 @@ ${addableFiles
691
574
  defaultModule
692
575
  .receiveTestResourceConfig(argz)
693
576
  .then(async (results: IFinalResults) => {
694
- this.receiveFeatures(results.features, destFolder, src, "pure");
577
+ // this.receiveFeatures(results.features, destFolder, src, "pure");
578
+ // this.receiveFeaturesV2(reportDest, src, "pure");
579
+
695
580
  statusMessagePretty(results.fails, src);
696
581
  this.bddTestIsNowDone(src, results.fails);
697
582
  })
698
583
  .catch((e) => {
699
584
  console.log(
700
- ansiC.red(ansiC.inverse(`${src} errored with: ${e}`))
585
+ ansiC.red(
586
+ ansiC.inverse(`launchPure - ${src} errored with: ${e}`)
587
+ )
701
588
  );
702
589
  this.bddTestIsNowDone(src, -1);
703
- })
704
- .finally(() => {
705
- webSideCares.forEach((webSideCar) => webSideCar.close());
706
590
  });
591
+ // .finally(() => {
592
+ // // webSideCares.forEach((webSideCar) => webSideCar.close());
593
+ // });
707
594
  })
708
595
  .catch((e) => {
709
596
  console.log(
@@ -732,10 +619,9 @@ ${addableFiles
732
619
  statusMessagePretty(-1, src);
733
620
  }
734
621
 
735
- // console.log("portsToUse", portsToUse);
736
622
  for (let i = 0; i <= portsToUse.length; i++) {
737
623
  if (portsToUse[i]) {
738
- this.ports[portsToUse[i]] = "true"; //port is open again
624
+ this.ports[portsToUse[i]] = true; //port is open again
739
625
  }
740
626
  }
741
627
  };
@@ -748,11 +634,12 @@ ${addableFiles
748
634
  .split(".")
749
635
  .slice(0, -1)
750
636
  .join(".")}/node`;
637
+
751
638
  if (!fs.existsSync(reportDest)) {
752
639
  fs.mkdirSync(reportDest, { recursive: true });
753
640
  }
754
641
 
755
- const destFolder = dest.replace(".mjs", "");
642
+ // const destFolder = dest.replace(".mjs", "");
756
643
 
757
644
  let testResources = "";
758
645
 
@@ -768,17 +655,20 @@ ${addableFiles
768
655
  }
769
656
  const testConfigResource = testConfig[2];
770
657
 
771
- let portsToUse: string[] = [];
658
+ const portsToUse: string[] = [];
772
659
  if (testConfigResource.ports === 0) {
773
- testResources = JSON.stringify({
774
- scheduled: true,
660
+ console.error("portsToUse?!", []);
661
+ const t: ITTestResourceConfiguration = {
775
662
  name: src,
776
- ports: portsToUse,
663
+ // ports: portsToUse.map((v) => Number(v)),
664
+ ports: [],
777
665
  fs: reportDest,
778
666
  browserWSEndpoint: this.browser.wsEndpoint(),
779
- });
667
+ };
668
+
669
+ testResources = JSON.stringify(t);
780
670
  } else if (testConfigResource.ports > 0) {
781
- const openPorts = Object.entries(this.ports).filter(
671
+ const openPorts: [string, boolean][] = Object.entries(this.ports).filter(
782
672
  ([portnumber, portopen]) => portopen
783
673
  );
784
674
 
@@ -789,14 +679,17 @@ ${addableFiles
789
679
  this.ports[openPorts[i][0]] = false; // port is now closed
790
680
  }
791
681
 
682
+ console.error("portsToUse", portsToUse);
683
+
792
684
  testResources = JSON.stringify({
793
685
  scheduled: true,
794
686
  name: src,
795
687
  ports: portsToUse,
796
- fs: destFolder,
688
+ fs: reportDest,
797
689
  browserWSEndpoint: this.browser.wsEndpoint(),
798
690
  });
799
691
  } else {
692
+ console.log("Not enough ports! Enqueuing test job...");
800
693
  this.queue.push(src);
801
694
  return;
802
695
  }
@@ -807,51 +700,28 @@ ${addableFiles
807
700
 
808
701
  const builtfile = dest;
809
702
 
810
- // const webSideCares: Page[] = [];
811
-
812
- // await Promise.all(
813
- // testConfig[3].map(async (sidecar) => {
814
- // if (sidecar[1] === "web") {
815
- // const s = await this.launchWebSideCar(
816
- // sidecar[0],
817
- // destinationOfRuntime(sidecar[0], "web", this.configs),
818
- // sidecar
819
- // );
820
- // webSideCares.push(s);
821
- // return s;
822
- // }
823
-
824
- // if (sidecar[1] === "node") {
825
- // return this.launchNodeSideCar(
826
- // sidecar[0],
827
- // destinationOfRuntime(sidecar[0], "node", this.configs),
828
- // sidecar
829
- // );
830
- // }
831
- // })
832
- // );
833
-
834
- // const f = fork(builtfile, [testResources], {
835
- // silent: true,
836
- // // detached: true,
837
- // // stdio: "ignore",
838
- // });
839
-
840
703
  let haltReturns = false;
841
704
 
705
+ const ipcfile = "/tmp/tpipe_" + Math.random();
706
+ const child = spawn("node", [builtfile, testResources, ipcfile], {
707
+ stdio: ["pipe", "pipe", "pipe", "ipc"],
708
+ });
709
+
842
710
  let buffer: Buffer<ArrayBufferLike> = new Buffer("");
711
+
843
712
  const server = net.createServer((socket) => {
713
+ const queue = new Queue<string[]>();
714
+
844
715
  socket.on("data", (data) => {
845
716
  buffer = Buffer.concat([buffer, data]);
846
717
 
847
- let messages: string[][] = [];
848
718
  for (let b = 0; b < buffer.length + 1; b++) {
849
- let c = buffer.slice(0, b);
719
+ const c = buffer.slice(0, b);
850
720
  let d;
851
721
  try {
852
722
  d = JSON.parse(c.toString());
853
723
 
854
- messages.push(d);
724
+ queue.enqueue(d);
855
725
  buffer = buffer.slice(b, buffer.length + 1);
856
726
  b = 0;
857
727
  } catch (e) {
@@ -859,77 +729,53 @@ ${addableFiles
859
729
  }
860
730
  }
861
731
 
862
- messages.forEach(async (payload) => {
863
- // set up the "node" listeners
864
- this.mapping().forEach(async ([command, func]) => {
865
- if (payload[0] === command) {
866
- const x = payload.slice(1, -1);
867
- const r = await this[command](...x);
868
-
869
- if (!haltReturns) {
870
- child.send(
871
- JSON.stringify({
872
- payload: r,
873
- key: payload[payload.length - 1],
874
- })
875
- );
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
+ }
876
750
  }
877
- }
878
- });
879
- });
751
+ });
752
+ }
753
+ }
880
754
  });
881
755
  });
882
756
 
883
757
  const oStream = fs.createWriteStream(`${reportDest}/console_log.txt`);
884
758
 
885
- const child = spawn(
886
- "node",
887
- [builtfile, testResources, "--trace-warnings"],
888
- {
889
- stdio: ["pipe", "pipe", "pipe", "ipc"],
890
- // silent: true
891
- }
892
- );
893
-
894
- // const child = spawn(
895
- // "node",
896
- // ["inspect", builtfile, testResources, "--trace-warnings"],
897
- // {
898
- // stdio: ["pipe", "pipe", "pipe", "ipc"],
899
- // env: {
900
- // // NODE_INSPECT_RESUME_ON_START: "1",
901
- // },
902
- // // silent: true
903
- // }
904
- // );
905
-
906
- // console.log(
907
- // "spawning",
908
- // "node",
909
- // ["inspect", builtfile, testResources, "--trace-warnings"],
910
- // {
911
- // NODE_INSPECT_RESUME_ON_START: "1",
912
- // }
913
- // );
914
-
915
- const p = destFolder + "/pipe";
916
759
  const errFile = `${reportDest}/error.txt`;
917
760
 
918
761
  if (fs.existsSync(errFile)) {
919
762
  fs.rmSync(errFile);
920
763
  }
921
764
 
922
- server.listen(p, () => {
765
+ server.listen(ipcfile, () => {
923
766
  child.stderr?.on("data", (data) => {
924
- oStream.write(`stderr data ${data}`);
767
+ oStream.write(`stderr > ${data}`);
925
768
  });
926
769
  child.stdout?.on("data", (data) => {
927
- oStream.write(`stdout data ${data}`);
770
+ oStream.write(`stdout > ${data}`);
928
771
  });
929
772
  child.on("close", (code) => {
773
+ console.log("close");
930
774
  oStream.close();
931
775
  server.close();
932
776
 
777
+ // this.receiveFeaturesV2(reportDest, src, "node");
778
+
933
779
  if (code === null) {
934
780
  this.bddTestIsNowDone(src, -1);
935
781
  statusMessagePretty(-1, src);
@@ -941,21 +787,25 @@ ${addableFiles
941
787
  statusMessagePretty(code, src);
942
788
  }
943
789
 
944
- if (fs.existsSync(p)) {
945
- fs.rmSync(p);
946
- }
947
-
948
790
  haltReturns = true;
949
791
  });
950
792
  child.on("exit", (code) => {
793
+ console.log("exit");
951
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
+ }
800
+ }
801
+
802
+ console.log("exitthis.ports", this.ports);
952
803
  });
953
804
  child.on("error", (e) => {
805
+ console.log("error");
806
+
954
807
  haltReturns = true;
955
808
 
956
- if (fs.existsSync(p)) {
957
- fs.rmSync(p);
958
- }
959
809
  console.log(
960
810
  ansiC.red(
961
811
  ansiC.inverse(
@@ -966,170 +816,338 @@ ${addableFiles
966
816
  this.writeFileSync(`${reportDest}/error.txt`, e.toString(), src);
967
817
  this.bddTestIsNowDone(src, -1);
968
818
  statusMessagePretty(-1, src);
969
-
970
- // this.bddTestIsNowDone(src, -1);
971
- // statusMessagePretty(-1, src);
972
819
  });
973
820
  });
974
-
975
- child.send({ path: p });
976
-
977
- for (let i = 0; i <= portsToUse.length; i++) {
978
- if (portsToUse[i]) {
979
- this.ports[portsToUse[i]] = "true"; //port is open again
980
- }
981
- }
982
821
  };
983
822
 
984
823
  launchWebSideCar = async (
985
- src: string,
986
- dest: string,
824
+ // src: string,
825
+ // dest: string,
987
826
  testConfig: ITestTypes
988
- ): Promise<Page> => {
989
- 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", "");
990
833
 
991
834
  console.log(ansiC.green(ansiC.inverse(`launchWebSideCar ${src}`)));
992
835
 
993
836
  const fileStreams2: fs.WriteStream[] = [];
994
837
  const doneFileStream2: Promise<any>[] = [];
995
838
 
839
+ const oStream = fs.createWriteStream(`${destFolder}/console_log.txt`);
840
+
996
841
  return new Promise((res, rej) => {
997
842
  this.browser
998
843
  .newPage()
999
- .then((page) => {
1000
- // page.on("console", (msg) => {
1001
- // console.log("web > ", msg.args(), msg.text());
1002
- // // for (let i = 0; i < msg._args.length; ++i)
1003
- // // console.log(`${i}: ${msg._args[i]}`);
1004
- // });
1005
-
1006
- page.exposeFunction(
1007
- "custom-screenshot",
1008
- async (ssOpts: ScreenshotOptions, testName: string) => {
1009
- const p = ssOpts.path as string;
1010
- const dir = path.dirname(p);
1011
- fs.mkdirSync(dir, {
1012
- recursive: true,
1013
- });
1014
- files[testName].add(ssOpts.path as string);
1015
-
1016
- const sPromise = page.screenshot({
1017
- ...ssOpts,
1018
- path: p,
1019
- });
844
+ .then(async (page) => {
845
+ this.mapping().forEach(async ([command, func]) => {
846
+ page.exposeFunction(command, func);
847
+ });
1020
848
 
1021
- if (!screenshots[testName]) {
1022
- screenshots[testName] = [];
1023
- }
1024
- screenshots[testName].push(sPromise);
1025
- await sPromise;
1026
- return sPromise;
849
+ const close = () => {
850
+ if (!files[src]) {
851
+ files[src] = new Set();
1027
852
  }
1028
- );
853
+ // files[t].add(filepath);
1029
854
 
1030
- page.exposeFunction(
1031
- "writeFileSync",
1032
- (fp: string, contents: string, testName: string) => {
1033
- const dir = path.dirname(fp);
1034
-
1035
- fs.mkdirSync(dir, {
1036
- recursive: true,
1037
- });
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");
1038
872
 
1039
- const p = new Promise<string>(async (res, rej) => {
1040
- fs.writeFileSync(fp, contents);
1041
- res(fp);
1042
- });
1043
- 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
+ }
1044
878
 
1045
- if (!files[testName]) {
1046
- files[testName] = new Set();
1047
- }
1048
- files[testName].add(fp);
1049
- return p;
879
+ if (err.stack) {
880
+ console.debug(`Error from stack ${src}: [${err.stack}] `);
881
+ oStream.write(err.stack);
882
+ oStream.write("\n");
1050
883
  }
1051
- );
1052
884
 
1053
- page.exposeFunction("existsSync", (fp: string, contents: string) => {
1054
- 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();
1055
891
  });
1056
892
 
1057
- page.exposeFunction("mkdirSync", (fp: string) => {
1058
- if (!fs.existsSync(fp)) {
1059
- return fs.mkdirSync(fp, {
1060
- recursive: true,
1061
- });
1062
- }
1063
- 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");
898
+ });
899
+
900
+ await page.goto(`file://${`${destFolder}.html`}`, {});
901
+
902
+ const webArgz = JSON.stringify({
903
+ name: dest,
904
+ ports: [].toString(),
905
+ fs: dest,
906
+ browserWSEndpoint: this.browser.wsEndpoint(),
1064
907
  });
1065
908
 
1066
- page.exposeFunction(
1067
- "createWriteStream",
1068
- (fp: string, testName: string) => {
1069
- const f = fs.createWriteStream(fp);
909
+ const d = `${dest}?cacheBust=${Date.now()}`;
1070
910
 
1071
- files[testName].add(fp);
911
+ const evaluation = `
912
+ import('${d}').then(async (x) => {
1072
913
 
1073
- const p = new Promise<string>((res, rej) => {
1074
- res(fp);
1075
- });
1076
- doneFileStream2.push(p);
1077
- f.on("close", async () => {
1078
- await p;
1079
- });
1080
- fileStreams2.push(f);
1081
- return {
1082
- ...JSON.parse(JSON.stringify(f)),
1083
- uid: fileStreams2.length - 1,
1084
- };
1085
- }
1086
- );
914
+ try {
915
+ return await (await x.default).receiveTestResourceConfig(${webArgz})
916
+ } catch (e) {
917
+ console.log("fail", e.toString())
918
+ }
919
+ })`;
1087
920
 
1088
- page.exposeFunction(
1089
- "write",
1090
- async (uid: number, contents: string) => {
1091
- return fileStreams2[uid].write(contents);
1092
- }
1093
- );
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");
1094
926
 
1095
- page.exposeFunction("end", async (uid: number) => {
1096
- return fileStreams2[uid].end();
1097
- });
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
+ });
1098
941
 
1099
942
  return page;
943
+
944
+ // return page;
1100
945
  })
1101
946
  .then(async (page) => {
1102
947
  await page.goto(`file://${`${dest}.html`}`, {});
1103
948
 
1104
949
  /* @ts-ignore:next-line */
1105
- res(page);
950
+ res([Math.random(), page]);
1106
951
  });
1107
952
  });
1108
953
  };
1109
954
 
1110
955
  launchNodeSideCar = async (
1111
- src: string,
1112
- dest: string,
1113
- testConfig: ITestTypes
1114
- ) => {
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]}`;
1115
961
  const d = dest + ".mjs";
1116
- 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(".");
1117
1133
 
1118
1134
  const destFolder = dest.replace(".mjs", "");
1119
1135
 
1120
- let argz = "";
1136
+ let argz: ITTestResourceConfiguration;
1121
1137
 
1122
- const testConfigResource = testConfig[2];
1138
+ const z = sidecar[2];
1139
+ const testConfigResource: { ports: number } = sidecar[2];
1140
+ const src = sidecar[0];
1123
1141
 
1124
- let portsToUse: string[] = [];
1142
+ const portsToUse: number[] = [];
1125
1143
  if (testConfigResource.ports === 0) {
1126
- argz = JSON.stringify({
1127
- scheduled: true,
1144
+ argz = {
1145
+ // scheduled: true,
1128
1146
  name: src,
1129
1147
  ports: portsToUse,
1130
1148
  fs: destFolder,
1131
1149
  browserWSEndpoint: this.browser.wsEndpoint(),
1132
- });
1150
+ };
1133
1151
  } else if (testConfigResource.ports > 0) {
1134
1152
  const openPorts = Object.entries(this.ports).filter(
1135
1153
  ([portnumber, portopen]) => portopen
@@ -1142,14 +1160,14 @@ ${addableFiles
1142
1160
  this.ports[openPorts[i][0]] = false; // port is now closed
1143
1161
  }
1144
1162
 
1145
- argz = JSON.stringify({
1146
- scheduled: true,
1163
+ argz = {
1164
+ // scheduled: true,
1147
1165
  name: src,
1148
1166
  // ports: [3333],
1149
1167
  ports: portsToUse,
1150
1168
  fs: ".",
1151
1169
  browserWSEndpoint: this.browser.wsEndpoint(),
1152
- });
1170
+ };
1153
1171
  } else {
1154
1172
  this.queue.push(src);
1155
1173
  return;
@@ -1159,32 +1177,19 @@ ${addableFiles
1159
1177
  process.exit(-1);
1160
1178
  }
1161
1179
 
1162
- const builtfile = dest + ".mjs";
1180
+ // const builtfile = dest + ".mjs";
1163
1181
 
1164
1182
  await import(`${builtfile}?cacheBust=${Date.now()}`).then((module) => {
1165
- return module.default.then((defaultModule) => {
1166
- // console.log("defaultModule", defaultModule);
1167
- const s = new defaultModule();
1168
- s.receiveTestResourceConfig(argz);
1169
- // Object.create(defaultModule);
1170
-
1171
- // defaultModule
1172
- // .receiveTestResourceConfig(argz)
1173
- // .then((x) => {
1174
- // console.log("then", x);
1175
- // return x;
1176
- // })
1177
- // .catch((e) => {
1178
- // console.log("catch", e);
1179
- // });
1180
- });
1183
+ this.pureSidecars[r] = module.default;
1184
+ this.pureSidecars[r].start(argz);
1181
1185
  });
1182
1186
 
1183
- for (let i = 0; i <= portsToUse.length; i++) {
1184
- if (portsToUse[i]) {
1185
- this.ports[portsToUse[i]] = "true"; //port is open again
1186
- }
1187
- }
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
+ // }
1188
1193
  };
1189
1194
 
1190
1195
  launchWeb = async (src: string, dest: string) => {
@@ -1202,7 +1207,7 @@ ${addableFiles
1202
1207
  const destFolder = dest.replace(".mjs", "");
1203
1208
 
1204
1209
  const webArgz = JSON.stringify({
1205
- name: dest,
1210
+ name: src,
1206
1211
  ports: [].toString(),
1207
1212
  fs: reportDest,
1208
1213
  browserWSEndpoint: this.browser.wsEndpoint(),
@@ -1226,9 +1231,18 @@ ${addableFiles
1226
1231
  this.browser
1227
1232
  .newPage()
1228
1233
  .then((page) => {
1229
- // set up the "node" listeners
1230
1234
  this.mapping().forEach(async ([command, func]) => {
1231
- 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
+ }
1232
1246
  });
1233
1247
 
1234
1248
  return page;
@@ -1279,24 +1293,34 @@ ${addableFiles
1279
1293
  });
1280
1294
  page.on("console", (log: ConsoleMessage) => {
1281
1295
  oStream.write(log.text());
1296
+ oStream.write("\n");
1282
1297
  oStream.write(JSON.stringify(log.location()));
1298
+ oStream.write("\n");
1283
1299
  oStream.write(JSON.stringify(log.stackTrace()));
1284
1300
  oStream.write("\n");
1285
1301
  });
1302
+
1286
1303
  await page.goto(`file://${`${destFolder}.html`}`, {});
1287
1304
 
1305
+ this.webSidecars[Math.random()] = page.mainFrame()._id;
1306
+
1288
1307
  await page
1289
1308
  .evaluate(evaluation)
1290
1309
  .then(async ({ fails, failed, features }: IFinalResults) => {
1291
- this.receiveFeatures(features, destFolder, src, "web");
1310
+ // this.receiveFeatures(features, destFolder, src, "web");
1311
+ // this.receiveFeaturesV2(reportDest, src, "web");
1312
+
1292
1313
  statusMessagePretty(fails, src);
1293
1314
  this.bddTestIsNowDone(src, fails);
1294
1315
  })
1295
1316
  .catch((e) => {
1296
- console.log(ansiC.red(ansiC.inverse(`${src} errored with: ${e}`)));
1317
+ console.log(
1318
+ ansiC.red(ansiC.inverse(`launchweb - ${src} errored with: ${e}`))
1319
+ );
1297
1320
  })
1298
1321
  .finally(() => {
1299
1322
  this.bddTestIsNowDone(src, -1);
1323
+ // process.exit(-1);
1300
1324
  close();
1301
1325
  });
1302
1326
 
@@ -1304,9 +1328,8 @@ ${addableFiles
1304
1328
  });
1305
1329
  };
1306
1330
 
1307
- receiveFeatures = (
1308
- features: string[],
1309
- destFolder: string,
1331
+ receiveFeaturesV2 = (
1332
+ reportDest: string,
1310
1333
  srcTest: string,
1311
1334
  platform: IRunTime
1312
1335
  ) => {
@@ -1318,8 +1341,16 @@ ${addableFiles
1318
1341
  srcTest.split(".").slice(0, -1).join(".") + ".features.txt"
1319
1342
  );
1320
1343
 
1321
- features
1344
+ const testReport = JSON.parse(
1345
+ fs.readFileSync(`${reportDest}/tests.json`).toString()
1346
+ );
1347
+
1348
+ // console.log("mark2", testReport);
1349
+
1350
+ testReport.features
1322
1351
  .reduce(async (mm, featureStringKey) => {
1352
+ // console.log("mark4", featureStringKey);
1353
+
1323
1354
  const accum = await mm;
1324
1355
 
1325
1356
  const isUrl = isValidUrl(featureStringKey);
@@ -1333,16 +1364,16 @@ ${addableFiles
1333
1364
  u.pathname
1334
1365
  )}`;
1335
1366
 
1336
- await fs.promises.mkdir(path.dirname(newPath), { recursive: true });
1367
+ // await fs.promises.mkdir(path.dirname(newPath), { recursive: true });
1337
1368
 
1338
- try {
1339
- await fs.unlinkSync(newPath);
1340
- // console.log(`Removed existing link at ${newPath}`);
1341
- } catch (error) {
1342
- if (error.code !== "ENOENT") {
1343
- // throw error;
1344
- }
1345
- }
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
+ // }
1346
1377
 
1347
1378
  // fs.symlink(u.pathname, newPath, (err) => {
1348
1379
  // if (err) {
@@ -1351,12 +1382,14 @@ ${addableFiles
1351
1382
  // // console.log("Symlink created successfully");
1352
1383
  // }
1353
1384
  // });
1354
- accum.files.push(newPath);
1385
+ accum.files.push(u.pathname);
1355
1386
  } else if (u.protocol === "http:" || u.protocol === "https:") {
1356
- const newPath = `${process.cwd()}/testeranto/features/external${
1387
+ const newPath = `${process.cwd()}/testeranto/features/external/${
1357
1388
  u.hostname
1358
1389
  }${u.pathname}`;
1390
+
1359
1391
  const body = await this.configs.featureIngestor(featureStringKey);
1392
+
1360
1393
  writeFileAndCreateDir(newPath, body);
1361
1394
  accum.files.push(newPath);
1362
1395
  }
@@ -1372,6 +1405,8 @@ ${addableFiles
1372
1405
  }, Promise.resolve({ files: [] as string[], strings: [] as string[] }))
1373
1406
 
1374
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
+
1375
1410
  fs.writeFileSync(
1376
1411
  `testeranto/reports/${this.name}/${srcTest
1377
1412
  .split(".")
@@ -1384,12 +1419,16 @@ ${addableFiles
1384
1419
  .join("\n")
1385
1420
  );
1386
1421
  });
1387
- };
1388
1422
 
1389
- writeBigBoard = () => {
1390
- fs.writeFileSync(
1391
- `./testeranto/reports/${this.name}/summary.json`,
1392
- JSON.stringify(this.bigBoard, null, 2)
1393
- );
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();
1394
1433
  };
1395
1434
  }