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