@memberjunction/react-test-harness 5.37.0 → 5.39.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 (342) hide show
  1. package/README.md +30 -0
  2. package/dist/cli/index.js +5 -1
  3. package/dist/cli/index.js.map +1 -1
  4. package/dist/index.d.ts +1 -5
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/index.js +10 -5
  7. package/dist/index.js.map +1 -1
  8. package/dist/lib/browser-context.d.ts +43 -0
  9. package/dist/lib/browser-context.d.ts.map +1 -1
  10. package/dist/lib/browser-context.js +87 -12
  11. package/dist/lib/browser-context.js.map +1 -1
  12. package/dist/lib/component-runner.d.ts +17 -22
  13. package/dist/lib/component-runner.d.ts.map +1 -1
  14. package/dist/lib/component-runner.js +46 -4
  15. package/dist/lib/component-runner.js.map +1 -1
  16. package/dist/lib/linter-test-tool.js +1 -1
  17. package/dist/lib/linter-test-tool.js.map +1 -1
  18. package/dist/lib/test-harness.d.ts +10 -0
  19. package/dist/lib/test-harness.d.ts.map +1 -1
  20. package/dist/lib/test-harness.js +10 -0
  21. package/dist/lib/test-harness.js.map +1 -1
  22. package/package.json +14 -13
  23. package/dist/lib/component-linter.d.ts +0 -77
  24. package/dist/lib/component-linter.d.ts.map +0 -1
  25. package/dist/lib/component-linter.js +0 -1205
  26. package/dist/lib/component-linter.js.map +0 -1
  27. package/dist/lib/control-flow-analyzer.d.ts +0 -184
  28. package/dist/lib/control-flow-analyzer.d.ts.map +0 -1
  29. package/dist/lib/control-flow-analyzer.js +0 -798
  30. package/dist/lib/control-flow-analyzer.js.map +0 -1
  31. package/dist/lib/library-lint-cache.d.ts +0 -50
  32. package/dist/lib/library-lint-cache.d.ts.map +0 -1
  33. package/dist/lib/library-lint-cache.js +0 -173
  34. package/dist/lib/library-lint-cache.js.map +0 -1
  35. package/dist/lib/lint-rule.d.ts +0 -70
  36. package/dist/lib/lint-rule.d.ts.map +0 -1
  37. package/dist/lib/lint-rule.js +0 -41
  38. package/dist/lib/lint-rule.js.map +0 -1
  39. package/dist/lib/lint-utils.d.ts +0 -131
  40. package/dist/lib/lint-utils.d.ts.map +0 -1
  41. package/dist/lib/lint-utils.js +0 -358
  42. package/dist/lib/lint-utils.js.map +0 -1
  43. package/dist/lib/prop-value-extractor.d.ts +0 -147
  44. package/dist/lib/prop-value-extractor.d.ts.map +0 -1
  45. package/dist/lib/prop-value-extractor.js +0 -472
  46. package/dist/lib/prop-value-extractor.js.map +0 -1
  47. package/dist/lib/runtime-rules/ai-tools-availability-check.d.ts +0 -9
  48. package/dist/lib/runtime-rules/ai-tools-availability-check.d.ts.map +0 -1
  49. package/dist/lib/runtime-rules/ai-tools-availability-check.js +0 -223
  50. package/dist/lib/runtime-rules/ai-tools-availability-check.js.map +0 -1
  51. package/dist/lib/runtime-rules/callback-event-validation.d.ts +0 -22
  52. package/dist/lib/runtime-rules/callback-event-validation.d.ts.map +0 -1
  53. package/dist/lib/runtime-rules/callback-event-validation.js +0 -561
  54. package/dist/lib/runtime-rules/callback-event-validation.js.map +0 -1
  55. package/dist/lib/runtime-rules/chart-field-validation.d.ts +0 -10
  56. package/dist/lib/runtime-rules/chart-field-validation.d.ts.map +0 -1
  57. package/dist/lib/runtime-rules/chart-field-validation.js +0 -270
  58. package/dist/lib/runtime-rules/chart-field-validation.js.map +0 -1
  59. package/dist/lib/runtime-rules/child-component-prop-validation.d.ts +0 -10
  60. package/dist/lib/runtime-rules/child-component-prop-validation.d.ts.map +0 -1
  61. package/dist/lib/runtime-rules/child-component-prop-validation.js +0 -443
  62. package/dist/lib/runtime-rules/child-component-prop-validation.js.map +0 -1
  63. package/dist/lib/runtime-rules/component-name-mismatch.d.ts +0 -19
  64. package/dist/lib/runtime-rules/component-name-mismatch.d.ts.map +0 -1
  65. package/dist/lib/runtime-rules/component-name-mismatch.js +0 -82
  66. package/dist/lib/runtime-rules/component-name-mismatch.js.map +0 -1
  67. package/dist/lib/runtime-rules/component-not-in-dependencies.d.ts +0 -20
  68. package/dist/lib/runtime-rules/component-not-in-dependencies.d.ts.map +0 -1
  69. package/dist/lib/runtime-rules/component-not-in-dependencies.js +0 -92
  70. package/dist/lib/runtime-rules/component-not-in-dependencies.js.map +0 -1
  71. package/dist/lib/runtime-rules/component-props-validation.d.ts +0 -25
  72. package/dist/lib/runtime-rules/component-props-validation.d.ts.map +0 -1
  73. package/dist/lib/runtime-rules/component-props-validation.js +0 -228
  74. package/dist/lib/runtime-rules/component-props-validation.js.map +0 -1
  75. package/dist/lib/runtime-rules/component-usage-without-destructuring.d.ts +0 -20
  76. package/dist/lib/runtime-rules/component-usage-without-destructuring.d.ts.map +0 -1
  77. package/dist/lib/runtime-rules/component-usage-without-destructuring.js +0 -124
  78. package/dist/lib/runtime-rules/component-usage-without-destructuring.js.map +0 -1
  79. package/dist/lib/runtime-rules/data-result-validation.d.ts +0 -9
  80. package/dist/lib/runtime-rules/data-result-validation.d.ts.map +0 -1
  81. package/dist/lib/runtime-rules/data-result-validation.js +0 -763
  82. package/dist/lib/runtime-rules/data-result-validation.js.map +0 -1
  83. package/dist/lib/runtime-rules/datagrid-field-validation.d.ts +0 -10
  84. package/dist/lib/runtime-rules/datagrid-field-validation.d.ts.map +0 -1
  85. package/dist/lib/runtime-rules/datagrid-field-validation.js +0 -249
  86. package/dist/lib/runtime-rules/datagrid-field-validation.js.map +0 -1
  87. package/dist/lib/runtime-rules/dependency-shadowing.d.ts +0 -20
  88. package/dist/lib/runtime-rules/dependency-shadowing.d.ts.map +0 -1
  89. package/dist/lib/runtime-rules/dependency-shadowing.js +0 -147
  90. package/dist/lib/runtime-rules/dependency-shadowing.js.map +0 -1
  91. package/dist/lib/runtime-rules/entity-field-access-validation.d.ts +0 -12
  92. package/dist/lib/runtime-rules/entity-field-access-validation.d.ts.map +0 -1
  93. package/dist/lib/runtime-rules/entity-field-access-validation.js +0 -304
  94. package/dist/lib/runtime-rules/entity-field-access-validation.js.map +0 -1
  95. package/dist/lib/runtime-rules/event-parameter-validation.d.ts +0 -22
  96. package/dist/lib/runtime-rules/event-parameter-validation.d.ts.map +0 -1
  97. package/dist/lib/runtime-rules/event-parameter-validation.js +0 -406
  98. package/dist/lib/runtime-rules/event-parameter-validation.js.map +0 -1
  99. package/dist/lib/runtime-rules/index.d.ts +0 -61
  100. package/dist/lib/runtime-rules/index.d.ts.map +0 -1
  101. package/dist/lib/runtime-rules/index.js +0 -62
  102. package/dist/lib/runtime-rules/index.js.map +0 -1
  103. package/dist/lib/runtime-rules/library-variable-names.d.ts +0 -24
  104. package/dist/lib/runtime-rules/library-variable-names.d.ts.map +0 -1
  105. package/dist/lib/runtime-rules/library-variable-names.js +0 -88
  106. package/dist/lib/runtime-rules/library-variable-names.js.map +0 -1
  107. package/dist/lib/runtime-rules/no-child-implementation.d.ts +0 -18
  108. package/dist/lib/runtime-rules/no-child-implementation.d.ts.map +0 -1
  109. package/dist/lib/runtime-rules/no-child-implementation.js +0 -57
  110. package/dist/lib/runtime-rules/no-child-implementation.js.map +0 -1
  111. package/dist/lib/runtime-rules/no-data-prop.d.ts +0 -22
  112. package/dist/lib/runtime-rules/no-data-prop.d.ts.map +0 -1
  113. package/dist/lib/runtime-rules/no-data-prop.js +0 -111
  114. package/dist/lib/runtime-rules/no-data-prop.js.map +0 -1
  115. package/dist/lib/runtime-rules/no-export-statements.d.ts +0 -18
  116. package/dist/lib/runtime-rules/no-export-statements.d.ts.map +0 -1
  117. package/dist/lib/runtime-rules/no-export-statements.js +0 -143
  118. package/dist/lib/runtime-rules/no-export-statements.js.map +0 -1
  119. package/dist/lib/runtime-rules/no-iife-wrapper.d.ts +0 -18
  120. package/dist/lib/runtime-rules/no-iife-wrapper.d.ts.map +0 -1
  121. package/dist/lib/runtime-rules/no-iife-wrapper.js +0 -217
  122. package/dist/lib/runtime-rules/no-iife-wrapper.js.map +0 -1
  123. package/dist/lib/runtime-rules/no-import-statements.d.ts +0 -18
  124. package/dist/lib/runtime-rules/no-import-statements.d.ts.map +0 -1
  125. package/dist/lib/runtime-rules/no-import-statements.js +0 -65
  126. package/dist/lib/runtime-rules/no-import-statements.js.map +0 -1
  127. package/dist/lib/runtime-rules/no-react-destructuring.d.ts +0 -18
  128. package/dist/lib/runtime-rules/no-react-destructuring.d.ts.map +0 -1
  129. package/dist/lib/runtime-rules/no-react-destructuring.js +0 -60
  130. package/dist/lib/runtime-rules/no-react-destructuring.js.map +0 -1
  131. package/dist/lib/runtime-rules/no-require-statements.d.ts +0 -18
  132. package/dist/lib/runtime-rules/no-require-statements.d.ts.map +0 -1
  133. package/dist/lib/runtime-rules/no-require-statements.js +0 -109
  134. package/dist/lib/runtime-rules/no-require-statements.js.map +0 -1
  135. package/dist/lib/runtime-rules/no-return-component.d.ts +0 -18
  136. package/dist/lib/runtime-rules/no-return-component.d.ts.map +0 -1
  137. package/dist/lib/runtime-rules/no-return-component.js +0 -106
  138. package/dist/lib/runtime-rules/no-return-component.js.map +0 -1
  139. package/dist/lib/runtime-rules/no-unwrap-utility-libs.d.ts +0 -20
  140. package/dist/lib/runtime-rules/no-unwrap-utility-libs.d.ts.map +0 -1
  141. package/dist/lib/runtime-rules/no-unwrap-utility-libs.js +0 -75
  142. package/dist/lib/runtime-rules/no-unwrap-utility-libs.js.map +0 -1
  143. package/dist/lib/runtime-rules/no-use-reducer.d.ts +0 -19
  144. package/dist/lib/runtime-rules/no-use-reducer.d.ts.map +0 -1
  145. package/dist/lib/runtime-rules/no-use-reducer.js +0 -78
  146. package/dist/lib/runtime-rules/no-use-reducer.js.map +0 -1
  147. package/dist/lib/runtime-rules/no-window-access.d.ts +0 -23
  148. package/dist/lib/runtime-rules/no-window-access.d.ts.map +0 -1
  149. package/dist/lib/runtime-rules/no-window-access.js +0 -136
  150. package/dist/lib/runtime-rules/no-window-access.js.map +0 -1
  151. package/dist/lib/runtime-rules/noisy-settings-updates.d.ts +0 -18
  152. package/dist/lib/runtime-rules/noisy-settings-updates.d.ts.map +0 -1
  153. package/dist/lib/runtime-rules/noisy-settings-updates.js +0 -110
  154. package/dist/lib/runtime-rules/noisy-settings-updates.js.map +0 -1
  155. package/dist/lib/runtime-rules/overflow-hidden-on-layout-container.d.ts +0 -30
  156. package/dist/lib/runtime-rules/overflow-hidden-on-layout-container.d.ts.map +0 -1
  157. package/dist/lib/runtime-rules/overflow-hidden-on-layout-container.js +0 -220
  158. package/dist/lib/runtime-rules/overflow-hidden-on-layout-container.js.map +0 -1
  159. package/dist/lib/runtime-rules/pass-standard-props.d.ts +0 -19
  160. package/dist/lib/runtime-rules/pass-standard-props.d.ts.map +0 -1
  161. package/dist/lib/runtime-rules/pass-standard-props.js +0 -82
  162. package/dist/lib/runtime-rules/pass-standard-props.js.map +0 -1
  163. package/dist/lib/runtime-rules/prefer-async-await.d.ts +0 -17
  164. package/dist/lib/runtime-rules/prefer-async-await.d.ts.map +0 -1
  165. package/dist/lib/runtime-rules/prefer-async-await.js +0 -52
  166. package/dist/lib/runtime-rules/prefer-async-await.js.map +0 -1
  167. package/dist/lib/runtime-rules/prefer-jsx-syntax.d.ts +0 -17
  168. package/dist/lib/runtime-rules/prefer-jsx-syntax.d.ts.map +0 -1
  169. package/dist/lib/runtime-rules/prefer-jsx-syntax.js +0 -51
  170. package/dist/lib/runtime-rules/prefer-jsx-syntax.js.map +0 -1
  171. package/dist/lib/runtime-rules/prop-state-sync.d.ts +0 -19
  172. package/dist/lib/runtime-rules/prop-state-sync.d.ts.map +0 -1
  173. package/dist/lib/runtime-rules/prop-state-sync.js +0 -76
  174. package/dist/lib/runtime-rules/prop-state-sync.js.map +0 -1
  175. package/dist/lib/runtime-rules/property-name-consistency.d.ts +0 -20
  176. package/dist/lib/runtime-rules/property-name-consistency.d.ts.map +0 -1
  177. package/dist/lib/runtime-rules/property-name-consistency.js +0 -172
  178. package/dist/lib/runtime-rules/property-name-consistency.js.map +0 -1
  179. package/dist/lib/runtime-rules/query-result-field-access-validation.d.ts +0 -10
  180. package/dist/lib/runtime-rules/query-result-field-access-validation.d.ts.map +0 -1
  181. package/dist/lib/runtime-rules/query-result-field-access-validation.js +0 -304
  182. package/dist/lib/runtime-rules/query-result-field-access-validation.js.map +0 -1
  183. package/dist/lib/runtime-rules/react-component-naming.d.ts +0 -19
  184. package/dist/lib/runtime-rules/react-component-naming.d.ts.map +0 -1
  185. package/dist/lib/runtime-rules/react-component-naming.js +0 -72
  186. package/dist/lib/runtime-rules/react-component-naming.js.map +0 -1
  187. package/dist/lib/runtime-rules/react-hooks-rules.d.ts +0 -27
  188. package/dist/lib/runtime-rules/react-hooks-rules.d.ts.map +0 -1
  189. package/dist/lib/runtime-rules/react-hooks-rules.js +0 -223
  190. package/dist/lib/runtime-rules/react-hooks-rules.js.map +0 -1
  191. package/dist/lib/runtime-rules/required-queries-not-called.d.ts +0 -19
  192. package/dist/lib/runtime-rules/required-queries-not-called.d.ts.map +0 -1
  193. package/dist/lib/runtime-rules/required-queries-not-called.js +0 -146
  194. package/dist/lib/runtime-rules/required-queries-not-called.js.map +0 -1
  195. package/dist/lib/runtime-rules/runquery-call-validation.d.ts +0 -11
  196. package/dist/lib/runtime-rules/runquery-call-validation.d.ts.map +0 -1
  197. package/dist/lib/runtime-rules/runquery-call-validation.js +0 -886
  198. package/dist/lib/runtime-rules/runquery-call-validation.js.map +0 -1
  199. package/dist/lib/runtime-rules/runview-call-validation.d.ts +0 -10
  200. package/dist/lib/runtime-rules/runview-call-validation.d.ts.map +0 -1
  201. package/dist/lib/runtime-rules/runview-call-validation.js +0 -336
  202. package/dist/lib/runtime-rules/runview-call-validation.js.map +0 -1
  203. package/dist/lib/runtime-rules/saved-user-settings-pattern.d.ts +0 -19
  204. package/dist/lib/runtime-rules/saved-user-settings-pattern.d.ts.map +0 -1
  205. package/dist/lib/runtime-rules/saved-user-settings-pattern.js +0 -90
  206. package/dist/lib/runtime-rules/saved-user-settings-pattern.js.map +0 -1
  207. package/dist/lib/runtime-rules/search-availability-check.d.ts +0 -9
  208. package/dist/lib/runtime-rules/search-availability-check.d.ts.map +0 -1
  209. package/dist/lib/runtime-rules/search-availability-check.js +0 -220
  210. package/dist/lib/runtime-rules/search-availability-check.js.map +0 -1
  211. package/dist/lib/runtime-rules/search-call-validation.d.ts +0 -9
  212. package/dist/lib/runtime-rules/search-call-validation.d.ts.map +0 -1
  213. package/dist/lib/runtime-rules/search-call-validation.js +0 -336
  214. package/dist/lib/runtime-rules/search-call-validation.js.map +0 -1
  215. package/dist/lib/runtime-rules/server-reload-on-client-operation.d.ts +0 -18
  216. package/dist/lib/runtime-rules/server-reload-on-client-operation.d.ts.map +0 -1
  217. package/dist/lib/runtime-rules/server-reload-on-client-operation.js +0 -107
  218. package/dist/lib/runtime-rules/server-reload-on-client-operation.js.map +0 -1
  219. package/dist/lib/runtime-rules/single-function-only.d.ts +0 -18
  220. package/dist/lib/runtime-rules/single-function-only.d.ts.map +0 -1
  221. package/dist/lib/runtime-rules/single-function-only.js +0 -103
  222. package/dist/lib/runtime-rules/single-function-only.js.map +0 -1
  223. package/dist/lib/runtime-rules/string-replace-all-occurrences.d.ts +0 -19
  224. package/dist/lib/runtime-rules/string-replace-all-occurrences.d.ts.map +0 -1
  225. package/dist/lib/runtime-rules/string-replace-all-occurrences.js +0 -109
  226. package/dist/lib/runtime-rules/string-replace-all-occurrences.js.map +0 -1
  227. package/dist/lib/runtime-rules/string-template-validation.d.ts +0 -22
  228. package/dist/lib/runtime-rules/string-template-validation.d.ts.map +0 -1
  229. package/dist/lib/runtime-rules/string-template-validation.js +0 -163
  230. package/dist/lib/runtime-rules/string-template-validation.js.map +0 -1
  231. package/dist/lib/runtime-rules/styles-validation.d.ts +0 -10
  232. package/dist/lib/runtime-rules/styles-validation.d.ts.map +0 -1
  233. package/dist/lib/runtime-rules/styles-validation.js +0 -153
  234. package/dist/lib/runtime-rules/styles-validation.js.map +0 -1
  235. package/dist/lib/runtime-rules/type-inference-errors.d.ts +0 -23
  236. package/dist/lib/runtime-rules/type-inference-errors.d.ts.map +0 -1
  237. package/dist/lib/runtime-rules/type-inference-errors.js +0 -53
  238. package/dist/lib/runtime-rules/type-inference-errors.js.map +0 -1
  239. package/dist/lib/runtime-rules/type-mismatch-operation.d.ts +0 -23
  240. package/dist/lib/runtime-rules/type-mismatch-operation.d.ts.map +0 -1
  241. package/dist/lib/runtime-rules/type-mismatch-operation.js +0 -141
  242. package/dist/lib/runtime-rules/type-mismatch-operation.js.map +0 -1
  243. package/dist/lib/runtime-rules/undefined-component-usage.d.ts +0 -20
  244. package/dist/lib/runtime-rules/undefined-component-usage.d.ts.map +0 -1
  245. package/dist/lib/runtime-rules/undefined-component-usage.js +0 -138
  246. package/dist/lib/runtime-rules/undefined-component-usage.js.map +0 -1
  247. package/dist/lib/runtime-rules/undefined-jsx-component.d.ts +0 -25
  248. package/dist/lib/runtime-rules/undefined-jsx-component.d.ts.map +0 -1
  249. package/dist/lib/runtime-rules/undefined-jsx-component.js +0 -269
  250. package/dist/lib/runtime-rules/undefined-jsx-component.js.map +0 -1
  251. package/dist/lib/runtime-rules/unsafe-array-operations.d.ts +0 -25
  252. package/dist/lib/runtime-rules/unsafe-array-operations.d.ts.map +0 -1
  253. package/dist/lib/runtime-rules/unsafe-array-operations.js +0 -347
  254. package/dist/lib/runtime-rules/unsafe-array-operations.js.map +0 -1
  255. package/dist/lib/runtime-rules/unsafe-formatting-methods.d.ts +0 -24
  256. package/dist/lib/runtime-rules/unsafe-formatting-methods.d.ts.map +0 -1
  257. package/dist/lib/runtime-rules/unsafe-formatting-methods.js +0 -277
  258. package/dist/lib/runtime-rules/unsafe-formatting-methods.js.map +0 -1
  259. package/dist/lib/runtime-rules/unused-component-dependencies.d.ts +0 -19
  260. package/dist/lib/runtime-rules/unused-component-dependencies.d.ts.map +0 -1
  261. package/dist/lib/runtime-rules/unused-component-dependencies.js +0 -90
  262. package/dist/lib/runtime-rules/unused-component-dependencies.js.map +0 -1
  263. package/dist/lib/runtime-rules/unused-libraries.d.ts +0 -19
  264. package/dist/lib/runtime-rules/unused-libraries.d.ts.map +0 -1
  265. package/dist/lib/runtime-rules/unused-libraries.js +0 -127
  266. package/dist/lib/runtime-rules/unused-libraries.js.map +0 -1
  267. package/dist/lib/runtime-rules/use-function-declaration.d.ts +0 -18
  268. package/dist/lib/runtime-rules/use-function-declaration.d.ts.map +0 -1
  269. package/dist/lib/runtime-rules/use-function-declaration.js +0 -127
  270. package/dist/lib/runtime-rules/use-function-declaration.js.map +0 -1
  271. package/dist/lib/runtime-rules/use-unwrap-components.d.ts +0 -19
  272. package/dist/lib/runtime-rules/use-unwrap-components.d.ts.map +0 -1
  273. package/dist/lib/runtime-rules/use-unwrap-components.js +0 -84
  274. package/dist/lib/runtime-rules/use-unwrap-components.js.map +0 -1
  275. package/dist/lib/runtime-rules/useeffect-unstable-dependencies.d.ts +0 -23
  276. package/dist/lib/runtime-rules/useeffect-unstable-dependencies.d.ts.map +0 -1
  277. package/dist/lib/runtime-rules/useeffect-unstable-dependencies.js +0 -215
  278. package/dist/lib/runtime-rules/useeffect-unstable-dependencies.js.map +0 -1
  279. package/dist/lib/runtime-rules/utilities-api-validation.d.ts +0 -24
  280. package/dist/lib/runtime-rules/utilities-api-validation.d.ts.map +0 -1
  281. package/dist/lib/runtime-rules/utilities-api-validation.js +0 -121
  282. package/dist/lib/runtime-rules/utilities-api-validation.js.map +0 -1
  283. package/dist/lib/runtime-rules/utilities-no-direct-instantiation.d.ts +0 -20
  284. package/dist/lib/runtime-rules/utilities-no-direct-instantiation.d.ts.map +0 -1
  285. package/dist/lib/runtime-rules/utilities-no-direct-instantiation.js +0 -58
  286. package/dist/lib/runtime-rules/utilities-no-direct-instantiation.js.map +0 -1
  287. package/dist/lib/runtime-rules/validate-component-references.d.ts +0 -19
  288. package/dist/lib/runtime-rules/validate-component-references.d.ts.map +0 -1
  289. package/dist/lib/runtime-rules/validate-component-references.js +0 -255
  290. package/dist/lib/runtime-rules/validate-component-references.js.map +0 -1
  291. package/dist/lib/schema-validation/component-prop-rule.d.ts +0 -125
  292. package/dist/lib/schema-validation/component-prop-rule.d.ts.map +0 -1
  293. package/dist/lib/schema-validation/component-prop-rule.js +0 -624
  294. package/dist/lib/schema-validation/component-prop-rule.js.map +0 -1
  295. package/dist/lib/schema-validation/index.d.ts +0 -26
  296. package/dist/lib/schema-validation/index.d.ts.map +0 -1
  297. package/dist/lib/schema-validation/index.js +0 -26
  298. package/dist/lib/schema-validation/index.js.map +0 -1
  299. package/dist/lib/schema-validation/semantic-validators/index.d.ts +0 -23
  300. package/dist/lib/schema-validation/semantic-validators/index.d.ts.map +0 -1
  301. package/dist/lib/schema-validation/semantic-validators/index.js +0 -23
  302. package/dist/lib/schema-validation/semantic-validators/index.js.map +0 -1
  303. package/dist/lib/schema-validation/semantic-validators/required-when-validator.d.ts +0 -43
  304. package/dist/lib/schema-validation/semantic-validators/required-when-validator.d.ts.map +0 -1
  305. package/dist/lib/schema-validation/semantic-validators/required-when-validator.js +0 -94
  306. package/dist/lib/schema-validation/semantic-validators/required-when-validator.js.map +0 -1
  307. package/dist/lib/schema-validation/semantic-validators/semantic-validator-registry.d.ts +0 -122
  308. package/dist/lib/schema-validation/semantic-validators/semantic-validator-registry.d.ts.map +0 -1
  309. package/dist/lib/schema-validation/semantic-validators/semantic-validator-registry.js +0 -166
  310. package/dist/lib/schema-validation/semantic-validators/semantic-validator-registry.js.map +0 -1
  311. package/dist/lib/schema-validation/semantic-validators/semantic-validator.d.ts +0 -260
  312. package/dist/lib/schema-validation/semantic-validators/semantic-validator.d.ts.map +0 -1
  313. package/dist/lib/schema-validation/semantic-validators/semantic-validator.js +0 -301
  314. package/dist/lib/schema-validation/semantic-validators/semantic-validator.js.map +0 -1
  315. package/dist/lib/schema-validation/semantic-validators/sql-where-clause-validator.d.ts +0 -115
  316. package/dist/lib/schema-validation/semantic-validators/sql-where-clause-validator.d.ts.map +0 -1
  317. package/dist/lib/schema-validation/semantic-validators/sql-where-clause-validator.js +0 -381
  318. package/dist/lib/schema-validation/semantic-validators/sql-where-clause-validator.js.map +0 -1
  319. package/dist/lib/schema-validation/semantic-validators/subset-of-entity-fields-validator.d.ts +0 -60
  320. package/dist/lib/schema-validation/semantic-validators/subset-of-entity-fields-validator.d.ts.map +0 -1
  321. package/dist/lib/schema-validation/semantic-validators/subset-of-entity-fields-validator.js +0 -195
  322. package/dist/lib/schema-validation/semantic-validators/subset-of-entity-fields-validator.js.map +0 -1
  323. package/dist/lib/schema-validation/semantic-validators/validation-context.d.ts +0 -335
  324. package/dist/lib/schema-validation/semantic-validators/validation-context.d.ts.map +0 -1
  325. package/dist/lib/schema-validation/semantic-validators/validation-context.js +0 -13
  326. package/dist/lib/schema-validation/semantic-validators/validation-context.js.map +0 -1
  327. package/dist/lib/styles-type-analyzer.d.ts +0 -64
  328. package/dist/lib/styles-type-analyzer.d.ts.map +0 -1
  329. package/dist/lib/styles-type-analyzer.js +0 -242
  330. package/dist/lib/styles-type-analyzer.js.map +0 -1
  331. package/dist/lib/type-context.d.ts +0 -184
  332. package/dist/lib/type-context.d.ts.map +0 -1
  333. package/dist/lib/type-context.js +0 -415
  334. package/dist/lib/type-context.js.map +0 -1
  335. package/dist/lib/type-inference-engine.d.ts +0 -181
  336. package/dist/lib/type-inference-engine.d.ts.map +0 -1
  337. package/dist/lib/type-inference-engine.js +0 -1151
  338. package/dist/lib/type-inference-engine.js.map +0 -1
  339. package/dist/lib/type-rules/type-compatibility-rule.d.ts +0 -79
  340. package/dist/lib/type-rules/type-compatibility-rule.d.ts.map +0 -1
  341. package/dist/lib/type-rules/type-compatibility-rule.js +0 -211
  342. package/dist/lib/type-rules/type-compatibility-rule.js.map +0 -1
package/README.md CHANGED
@@ -38,6 +38,36 @@ console.log('Rendered:', result.success);
38
38
  console.log('Errors:', result.errors);
39
39
  ```
40
40
 
41
+ ### Connecting to an existing browser
42
+
43
+ By default the harness launches its own throwaway Chromium. You can instead attach
44
+ to an already-running browser — useful for watching component runs in a browser you
45
+ control, or for reusing a warm/remote browser (pool, Docker) instead of paying a
46
+ cold launch each run.
47
+
48
+ ```typescript
49
+ // Attach to a real Chrome started with --remote-debugging-port=9222 (CDP)
50
+ const harness = new ReactTestHarness({ connect: 'http://localhost:9222' });
51
+
52
+ // Attach to a Playwright server started via chromium.launchServer() (ws endpoint)
53
+ const harness = new ReactTestHarness({ connect: 'ws://localhost:55001/<id>' });
54
+ ```
55
+
56
+ - **Auto-detect:** `http(s)://` endpoints use CDP (`connectOverCDP`); `ws(s)://`
57
+ endpoints use a Playwright server (`connect`). A raw CDP websocket also starts
58
+ with `ws://` — pass `connectType: 'cdp'` to force CDP in that case.
59
+ - **Env-var fallback:** set `MJ_REACT_TEST_HARNESS_CONNECT` to the endpoint instead
60
+ of passing `connect` (so the `mj-react-test` CLI can attach without a new flag).
61
+ - **Session reuse:** by default a fresh isolated context is created inside the
62
+ attached browser. Set `reuseExistingContext: true` (or
63
+ `MJ_REACT_TEST_HARNESS_REUSE_CONTEXT=true`) to reuse the browser's existing
64
+ default context and share its cookies/auth/session. This breaks per-test
65
+ isolation, so keep the default for parallel runs.
66
+ - **Lifecycle safety:** when attached, `harness.close()` only closes the pages and
67
+ contexts the harness created — it never closes a browser it did not launch, nor a
68
+ reused/shared context. The external browser's lifecycle is the caller's.
69
+ - `headless` is ignored when attaching (the external browser already decided).
70
+
41
71
  ### Writing Custom Rules
42
72
 
43
73
  Rules extend `BaseLintRule` and auto-register via `@RegisterClass`:
package/dist/cli/index.js CHANGED
@@ -8,7 +8,11 @@ import { ReactTestHarness } from '../lib/test-harness.js';
8
8
  const program = new Command();
9
9
  program
10
10
  .name('mj-react-test')
11
- .description('React component test harness for MemberJunction')
11
+ .description('React component test harness for MemberJunction.\n' +
12
+ 'To attach to an existing browser instead of launching one, set ' +
13
+ 'MJ_REACT_TEST_HARNESS_CONNECT (http(s)://… for CDP, ws(s)://… for a ' +
14
+ 'Playwright server); optionally MJ_REACT_TEST_HARNESS_REUSE_CONTEXT=true ' +
15
+ 'to reuse its session.')
12
16
  .version('2.69.1');
13
17
  program
14
18
  .command('run <componentFile>')
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,9 +1,5 @@
1
1
  export { ReactTestHarness, TestHarnessOptions } from './lib/test-harness.js';
2
- export { BrowserManager, BrowserContextOptions } from './lib/browser-context.js';
2
+ export { BrowserManager, BrowserContextOptions, ClassifyConnectEndpoint } from './lib/browser-context.js';
3
3
  export { ComponentRunner, ComponentExecutionOptions, ComponentExecutionResult } from './lib/component-runner.js';
4
4
  export { AssertionHelpers } from './lib/assertion-helpers.js';
5
- export { ComponentLinter, LintResult, Violation } from './lib/component-linter.js';
6
- export { BaseLintRule } from './lib/lint-rule.js';
7
- export { LibraryLintCache, CompiledLibraryRules, CompiledValidator } from './lib/library-lint-cache.js';
8
- export { ComponentSpec } from '@memberjunction/interactive-component-types';
9
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9E,OAAO,EAAE,eAAe,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAC9G,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AACrG,OAAO,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAEvG,OAAO,EAAE,eAAe,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAC9G,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC"}
package/dist/index.js CHANGED
@@ -1,10 +1,15 @@
1
1
  export { ReactTestHarness } from './lib/test-harness.js';
2
- export { BrowserManager } from './lib/browser-context.js';
2
+ export { BrowserManager, ClassifyConnectEndpoint } from './lib/browser-context.js';
3
3
  // Export the component runner that uses the real React runtime UMD bundle
4
4
  export { ComponentRunner } from './lib/component-runner.js';
5
5
  export { AssertionHelpers } from './lib/assertion-helpers.js';
6
- export { ComponentLinter } from './lib/component-linter.js';
7
- export { BaseLintRule } from './lib/lint-rule.js';
8
- export { LibraryLintCache } from './lib/library-lint-cache.js';
9
- export { ComponentSpec } from '@memberjunction/interactive-component-types';
6
+ // NOTE: The lint engine API (ComponentLinter, LintResult, Violation, BaseLintRule,
7
+ // LibraryLintCache, CompiledLibraryRules, CompiledValidator, LinterOptions) was
8
+ // previously re-exported here for back-compat after the 5.37 extraction. Those
9
+ // re-exports were removed in 5.38 per the project's no-re-exports-between-packages
10
+ // rule.
11
+ //
12
+ // Import directly from the source packages:
13
+ // import { ComponentLinter, LintResult, Violation } from '@memberjunction/react-linter';
14
+ // import { ComponentSpec } from '@memberjunction/interactive-component-types';
10
15
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAsB,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAyB,MAAM,uBAAuB,CAAC;AAC9E,0EAA0E;AAC1E,OAAO,EAAE,eAAe,EAAuD,MAAM,wBAAwB,CAAC;AAC9G,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAyB,MAAM,wBAAwB,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAA2C,MAAM,0BAA0B,CAAC;AACrG,OAAO,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAsB,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAyB,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AACvG,0EAA0E;AAC1E,OAAO,EAAE,eAAe,EAAuD,MAAM,wBAAwB,CAAC;AAC9G,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,mFAAmF;AACnF,gFAAgF;AAChF,+EAA+E;AAC/E,mFAAmF;AACnF,QAAQ;AACR,EAAE;AACF,4CAA4C;AAC5C,2FAA2F;AAC3F,iFAAiF"}
@@ -9,13 +9,56 @@ export interface BrowserContextOptions {
9
9
  deviceScaleFactor?: number;
10
10
  locale?: string;
11
11
  timezoneId?: string;
12
+ /**
13
+ * Attach to an already-running browser instead of launching a new one.
14
+ * The connect method is auto-detected from the endpoint scheme:
15
+ * - `http(s)://…` → Chrome DevTools Protocol (`chromium.connectOverCDP`),
16
+ * e.g. a real Chrome started with `--remote-debugging-port=9222`.
17
+ * - `ws(s)://…` → a Playwright browser server (`chromium.connect`),
18
+ * e.g. one started via `chromium.launchServer()` (local pool / Docker / remote).
19
+ * Falls back to the `MJ_REACT_TEST_HARNESS_CONNECT` env var when unset.
20
+ * When attaching, `headless` is ignored — the external browser already decided.
21
+ */
22
+ connect?: string;
23
+ /**
24
+ * Disambiguate the connect method. A raw CDP websocket also uses `ws://`, which
25
+ * auto-detect would treat as a Playwright server; set `'cdp'` to force CDP.
26
+ * Defaults to `'auto'` (scheme-based detection).
27
+ */
28
+ connectType?: 'cdp' | 'server' | 'auto';
29
+ /**
30
+ * When attached, reuse the running browser's existing default context so its
31
+ * cookies / auth / session are shared (the point of attaching to YOUR browser),
32
+ * instead of creating a fresh isolated context. Defaults to false. Falls back to
33
+ * the `MJ_REACT_TEST_HARNESS_REUSE_CONTEXT` env var (`1`/`true`/`yes`).
34
+ *
35
+ * Note: this breaks per-test isolation — parallel harness instances would share
36
+ * one context. Viewport/locale/userAgent options are ignored when reusing a
37
+ * context (they only apply to contexts the harness creates).
38
+ */
39
+ reuseExistingContext?: boolean;
12
40
  }
41
+ /**
42
+ * Decide whether a connect endpoint refers to a CDP browser or a Playwright server.
43
+ * Pure (no I/O) so it can be unit-tested without launching a browser.
44
+ *
45
+ * @throws if the scheme is unrecognized and no explicit `hint` is given.
46
+ */
47
+ export declare function ClassifyConnectEndpoint(endpoint: string, hint?: 'cdp' | 'server' | 'auto'): 'cdp' | 'server';
13
48
  export declare class BrowserManager {
14
49
  private options;
15
50
  private browser;
16
51
  private context;
17
52
  private page;
53
+ /** True when we attached to an external browser rather than launching one. */
54
+ private connected;
55
+ /** True when WE created the context (so close() is allowed to close it). */
56
+ private ownsContext;
18
57
  constructor(options?: BrowserContextOptions);
58
+ /** Options applied when the harness creates its own browser context. */
59
+ private contextOptions;
60
+ /** Resolve whether to reuse the existing context (option → env-var fallback). */
61
+ private shouldReuseExistingContext;
19
62
  initialize(): Promise<void>;
20
63
  getPage(): Promise<Page>;
21
64
  navigateTo(url: string): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"browser-context.d.ts","sourceRoot":"","sources":["../../src/lib/browser-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqC,IAAI,EAAE,MAAM,YAAY,CAAC;AAErE,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,cAAc;IAKb,OAAO,CAAC,OAAO;IAJ3B,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,IAAI,CAAqB;gBAEb,OAAO,GAAE,qBAA0B;IAQjD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAoB3B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAWxB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKtC,cAAc,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;IAKxE,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAKhF,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAK1C,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAK7B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAetB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAKvB,gBAAgB,CAAC,KAAK,GAAE,MAAM,GAAG,kBAAkB,GAAG,aAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;CAInG"}
1
+ {"version":3,"file":"browser-context.d.ts","sourceRoot":"","sources":["../../src/lib/browser-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqC,IAAI,EAAE,MAAM,YAAY,CAAC;AAMrE,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;;;;;;;OASG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;;OAIG;IACH,WAAW,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IAExC;;;;;;;;;OASG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE,KAAK,GAAG,QAAQ,GAAG,MAAe,GACvC,KAAK,GAAG,QAAQ,CAclB;AAED,qBAAa,cAAc;IASb,OAAO,CAAC,OAAO;IAR3B,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,IAAI,CAAqB;IACjC,8EAA8E;IAC9E,OAAO,CAAC,SAAS,CAAS;IAC1B,4EAA4E;IAC5E,OAAO,CAAC,WAAW,CAAS;gBAER,OAAO,GAAE,qBAA0B;IAQvD,wEAAwE;IACxE,OAAO,CAAC,cAAc;IAUtB,iFAAiF;IACjF,OAAO,CAAC,0BAA0B;IAQ5B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAqC3B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAWxB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKtC,cAAc,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;IAKxE,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAKhF,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAK1C,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAK7B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA2BtB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAKvB,gBAAgB,CAAC,KAAK,GAAE,MAAM,GAAG,kBAAkB,GAAG,aAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;CAInG"}
@@ -1,30 +1,93 @@
1
1
  import { chromium } from 'playwright';
2
+ /** Environment-variable fallbacks for attaching to an existing browser. */
3
+ const CONNECT_ENV_VAR = 'MJ_REACT_TEST_HARNESS_CONNECT';
4
+ const REUSE_CONTEXT_ENV_VAR = 'MJ_REACT_TEST_HARNESS_REUSE_CONTEXT';
5
+ /**
6
+ * Decide whether a connect endpoint refers to a CDP browser or a Playwright server.
7
+ * Pure (no I/O) so it can be unit-tested without launching a browser.
8
+ *
9
+ * @throws if the scheme is unrecognized and no explicit `hint` is given.
10
+ */
11
+ export function ClassifyConnectEndpoint(endpoint, hint = 'auto') {
12
+ if (hint !== 'auto') {
13
+ return hint;
14
+ }
15
+ if (/^wss?:\/\//i.test(endpoint)) {
16
+ return 'server';
17
+ }
18
+ if (/^https?:\/\//i.test(endpoint)) {
19
+ return 'cdp';
20
+ }
21
+ throw new Error(`Unrecognized connect endpoint "${endpoint}". Use http(s):// for CDP ` +
22
+ `or ws(s):// for a Playwright server, or set connectType explicitly.`);
23
+ }
2
24
  export class BrowserManager {
3
25
  constructor(options = {}) {
4
26
  this.options = options;
5
27
  this.browser = null;
6
28
  this.context = null;
7
29
  this.page = null;
30
+ /** True when we attached to an external browser rather than launching one. */
31
+ this.connected = false;
32
+ /** True when WE created the context (so close() is allowed to close it). */
33
+ this.ownsContext = false;
8
34
  this.options = {
9
35
  headless: true,
10
36
  viewport: { width: 1280, height: 720 },
11
37
  ...options
12
38
  };
13
39
  }
14
- async initialize() {
15
- if (this.browser) {
16
- return;
17
- }
18
- this.browser = await chromium.launch({
19
- headless: this.options.headless
20
- });
21
- this.context = await this.browser.newContext({
40
+ /** Options applied when the harness creates its own browser context. */
41
+ contextOptions() {
42
+ return {
22
43
  viewport: this.options.viewport,
23
44
  userAgent: this.options.userAgent,
24
45
  deviceScaleFactor: this.options.deviceScaleFactor,
25
46
  locale: this.options.locale,
26
47
  timezoneId: this.options.timezoneId
27
- });
48
+ };
49
+ }
50
+ /** Resolve whether to reuse the existing context (option → env-var fallback). */
51
+ shouldReuseExistingContext() {
52
+ if (this.options.reuseExistingContext !== undefined) {
53
+ return this.options.reuseExistingContext;
54
+ }
55
+ const raw = (process.env[REUSE_CONTEXT_ENV_VAR] ?? '').toLowerCase();
56
+ return raw === '1' || raw === 'true' || raw === 'yes';
57
+ }
58
+ async initialize() {
59
+ if (this.browser) {
60
+ return;
61
+ }
62
+ const endpoint = this.options.connect ?? process.env[CONNECT_ENV_VAR];
63
+ if (endpoint) {
64
+ const method = ClassifyConnectEndpoint(endpoint, this.options.connectType);
65
+ this.browser = method === 'server'
66
+ ? await chromium.connect(endpoint)
67
+ : await chromium.connectOverCDP(endpoint);
68
+ this.connected = true;
69
+ }
70
+ else {
71
+ this.browser = await chromium.launch({ headless: this.options.headless });
72
+ this.connected = false;
73
+ }
74
+ if (this.connected && this.shouldReuseExistingContext()) {
75
+ // CDP connections always expose at least the default context; a freshly
76
+ // started Playwright server has none, so fall back to creating one.
77
+ const existing = this.browser.contexts();
78
+ if (existing.length > 0) {
79
+ this.context = existing[0];
80
+ this.ownsContext = false;
81
+ }
82
+ else {
83
+ this.context = await this.browser.newContext(this.contextOptions());
84
+ this.ownsContext = true;
85
+ }
86
+ }
87
+ else {
88
+ this.context = await this.browser.newContext(this.contextOptions());
89
+ this.ownsContext = true;
90
+ }
28
91
  this.page = await this.context.newPage();
29
92
  }
30
93
  async getPage() {
@@ -59,15 +122,27 @@ export class BrowserManager {
59
122
  }
60
123
  async close() {
61
124
  if (this.page) {
62
- await this.page.close();
125
+ // Always close pages we opened. Swallow errors — the page may already be
126
+ // gone (e.g. the external browser closed it) and that must not mask cleanup.
127
+ await this.page.close().catch(() => { });
63
128
  this.page = null;
64
129
  }
65
130
  if (this.context) {
66
- await this.context.close();
131
+ // Only close a context WE created. Never tear down a reused/shared context
132
+ // belonging to the attached browser (it may hold the user's other tabs).
133
+ if (this.ownsContext) {
134
+ await this.context.close().catch(() => { });
135
+ }
67
136
  this.context = null;
68
137
  }
69
138
  if (this.browser) {
70
- await this.browser.close();
139
+ // Only close browsers WE launched. When attached, leave the external
140
+ // browser/server running — its lifecycle belongs to whoever started it.
141
+ // The Playwright client connection is released on process exit or when
142
+ // the caller drops this harness.
143
+ if (!this.connected) {
144
+ await this.browser.close().catch(() => { });
145
+ }
71
146
  this.browser = null;
72
147
  }
73
148
  }
@@ -1 +1 @@
1
- {"version":3,"file":"browser-context.js","sourceRoot":"","sources":["../../src/lib/browser-context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"browser-context.js","sourceRoot":"","sources":["../../src/lib/browser-context.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,16 @@
1
1
  import { BrowserManager } from './browser-context.js';
2
2
  import type { UserInfo } from '@memberjunction/core';
3
- import { Violation } from './component-linter.js';
4
- import { ComponentSpec, ComponentUtilities, SimpleAITools, SimpleEntityInfo } from '@memberjunction/interactive-component-types';
5
- export interface ComponentExecutionOptions {
3
+ import { Violation, type LinterOptions } from '@memberjunction/react-linter';
4
+ import { ComponentSpec, SimpleAITools } from '@memberjunction/interactive-component-types';
5
+ /**
6
+ * Browser-execution options for {@link ComponentRunner}. Extends {@link LinterOptions}
7
+ * (which carries `componentSpec`, `contextUser`, `entityMetadata`, `utilities` —
8
+ * the fields the static linter reads) with Playwright-specific runtime fields
9
+ * (timeouts, page-ready hooks, screenshot mode). The browser harness happens
10
+ * to run the linter as a prelude, so accepting a superset keeps the call sites
11
+ * tidy without leaking browser concerns into the linter package.
12
+ */
13
+ export interface ComponentExecutionOptions extends LinterOptions {
6
14
  componentSpec: ComponentSpec;
7
15
  props?: Record<string, any>;
8
16
  setupCode?: string;
@@ -14,25 +22,6 @@ export interface ComponentExecutionOptions {
14
22
  contextUser: UserInfo;
15
23
  isRootComponent?: boolean;
16
24
  debug?: boolean;
17
- utilities?: ComponentUtilities;
18
- /**
19
- * Optional array of entity metadata providing complete field lists per entity.
20
- * Used by the linter to validate field usage with two-tier severity:
21
- * - Medium: Field exists in entity but not declared in dataRequirements
22
- * - Critical: Field does not exist in entity at all
23
- *
24
- * If not provided, linter only checks against dataRequirements.fieldMetadata
25
- * which may cause false-positive critical errors for valid but undeclared fields.
26
- *
27
- * @example
28
- * // Caller provides metadata for entities used in component
29
- * const md = new Metadata();
30
- * const entityNames = spec.dataRequirements.entities.map(e => e.name);
31
- * const entityMetadata = md.Entities
32
- * .filter(e => entityNames.includes(e.Name))
33
- * .map(e => SimpleEntityInfo.FromEntityInfo(e));
34
- */
35
- entityMetadata?: SimpleEntityInfo[];
36
25
  /**
37
26
  * Optional callback invoked with the live Playwright page after the component
38
27
  * has rendered successfully. The page remains open until this callback resolves,
@@ -79,6 +68,12 @@ export interface ComponentExecutionResult {
79
68
  executionTime: number;
80
69
  renderCount?: number;
81
70
  lintViolations?: Violation[];
71
+ /**
72
+ * Raw Babel sourcemaps keyed by component name. Populated when `debug: true`
73
+ * (which enables Babel sourcemap generation in the compiler). Used by callers
74
+ * to translate runtime stack frame line numbers back to original JSX positions.
75
+ */
76
+ sourceMaps?: Record<string, any>;
82
77
  /**
83
78
  * If true, the browser/page crashed during execution or cleanup.
84
79
  * This is an infrastructure issue, not a code issue.
@@ -1 +1 @@
1
- {"version":3,"file":"component-runner.d.ts","sourceRoot":"","sources":["../../src/lib/component-runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"component-runner.d.ts","sourceRoot":"","sources":["../../src/lib/component-runner.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@ import { Metadata, RunView, RunQuery, LogError } from '@memberjunction/core';
3
3
  // ESM compatibility: require is not available in ESM, use createRequire
4
4
  // See: https://nodejs.org/api/module.html#modulecreaterequirefilename
5
5
  const _require = createRequire(import.meta.url);
6
- import { ComponentLinter } from './component-linter.js';
6
+ import { ComponentLinter } from '@memberjunction/react-linter';
7
7
  import { ComponentMetadataEngine } from '@memberjunction/core-entities';
8
8
  import { SimpleVectorService } from '@memberjunction/ai-vectors-memory';
9
9
  import { AIEngine } from '@memberjunction/aiengine';
@@ -387,6 +387,16 @@ export class ComponentRunner {
387
387
  warnings: [],
388
388
  resolvedSpec: loadResult.resolvedSpec
389
389
  };
390
+ // Stash each compiled component's sourcemap so the Node-side error
391
+ // formatter can translate runtime stack frames back to original JSX lines.
392
+ window.__testHarnessSourceMaps = window.__testHarnessSourceMaps || {};
393
+ if (loadResult.loadedComponents) {
394
+ for (const c of loadResult.loadedComponents) {
395
+ if (c?.name && c?.sourceMap) {
396
+ window.__testHarnessSourceMaps[c.name] = c.sourceMap;
397
+ }
398
+ }
399
+ }
390
400
  }
391
401
  catch (registrationError) {
392
402
  // Capture the actual error before it gets obscured
@@ -913,7 +923,9 @@ export class ComponentRunner {
913
923
  rule: e.rule || 'runtime-error', // Use specific rule from collectRuntimeErrors
914
924
  line: 0,
915
925
  column: 0,
916
- source: e.source
926
+ source: e.source,
927
+ stack: e.stack,
928
+ componentStack: e.componentStack,
917
929
  }));
918
930
  // Add timeout error if detected
919
931
  if (hasTimeout) {
@@ -992,7 +1004,8 @@ export class ComponentRunner {
992
1004
  screenshot,
993
1005
  executionTime: Date.now() - startTime,
994
1006
  renderCount,
995
- codeExecutionSuccess
1007
+ codeExecutionSuccess,
1008
+ sourceMaps: this._lastSourceMaps,
996
1009
  };
997
1010
  if (debug) {
998
1011
  this.dumpDebugInfo(result);
@@ -1356,6 +1369,27 @@ export class ComponentRunner {
1356
1369
  const originalConsoleError = console.error;
1357
1370
  console.error = function (...args) {
1358
1371
  const errorText = args.map(arg => typeof arg === 'object' ? JSON.stringify(arg) : String(arg)).join(' ');
1372
+ // React dev-mode emits Rules-of-Hooks violations as "Warning:" messages.
1373
+ // Promote these to test-failing errors so the Code Fixer sees them directly.
1374
+ const hookRuleMessages = [
1375
+ 'Rendered more hooks than during the previous render',
1376
+ 'Rendered fewer hooks than expected',
1377
+ 'change in the order of Hooks called',
1378
+ 'Hooks can only be called inside the body of a function component',
1379
+ ];
1380
+ const isHookRuleViolation = hookRuleMessages.some(m => errorText.includes(m));
1381
+ if (isHookRuleViolation) {
1382
+ window.__testHarnessRuntimeErrors = window.__testHarnessRuntimeErrors || [];
1383
+ window.__testHarnessRuntimeErrors.push({
1384
+ message: errorText,
1385
+ stack: new Error().stack,
1386
+ type: 'react-hooks-rules',
1387
+ source: 'react-framework',
1388
+ });
1389
+ window.__testHarnessTestFailed = true;
1390
+ originalConsoleError.apply(console, args);
1391
+ return;
1392
+ }
1359
1393
  // Check if this is a warning rather than an error
1360
1394
  // React warnings typically start with "Warning:" or contain warning-related text
1361
1395
  const isWarning = errorText.includes('Warning:') ||
@@ -1487,9 +1521,12 @@ export class ComponentRunner {
1487
1521
  return {
1488
1522
  runtimeErrors: window.__testHarnessRuntimeErrors || [],
1489
1523
  consoleErrors: window.__testHarnessConsoleErrors || [],
1490
- testFailed: window.__testHarnessTestFailed || false
1524
+ testFailed: window.__testHarnessTestFailed || false,
1525
+ sourceMaps: window.__testHarnessSourceMaps || {}
1491
1526
  };
1492
1527
  });
1528
+ // Store sourcemaps on the instance so executeComponent can attach them to the result.
1529
+ this._lastSourceMaps = errorData.sourceMaps;
1493
1530
  // Track unique errors and their counts
1494
1531
  const errorMap = new Map();
1495
1532
  // Check if we have any specific React render errors
@@ -1518,6 +1555,9 @@ export class ComponentRunner {
1518
1555
  case 'react-render-error':
1519
1556
  rule = 'react-render-error';
1520
1557
  break;
1558
+ case 'react-hooks-rules':
1559
+ rule = 'react-hooks-rules';
1560
+ break;
1521
1561
  case 'render-loop':
1522
1562
  rule = 'infinite-render-loop';
1523
1563
  break;
@@ -1545,6 +1585,8 @@ export class ComponentRunner {
1545
1585
  errorMap.set(key, {
1546
1586
  error: {
1547
1587
  message: error.message,
1588
+ stack: error.stack,
1589
+ componentStack: error.componentStack,
1548
1590
  source: error.source,
1549
1591
  type: error.type,
1550
1592
  rule: rule