@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
@@ -1,72 +0,0 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- import { RegisterClass } from '@memberjunction/global';
8
- import * as t from '@babel/types';
9
- import { BaseLintRule } from '../lint-rule.js';
10
- import { traverse, createViolation } from '../lint-utils.js';
11
- /**
12
- * Rule: react-component-naming
13
- *
14
- * Ensures that React components follow naming conventions:
15
- * - Component names must start with an uppercase letter
16
- * - JSX treats lowercase as HTML elements
17
- *
18
- * Severity: critical
19
- * Applies to: all components
20
- */
21
- let ReactComponentNamingRule = class ReactComponentNamingRule extends BaseLintRule {
22
- get Name() { return 'react-component-naming'; }
23
- get AppliesTo() { return 'all'; }
24
- Test(ast, componentName) {
25
- const violations = [];
26
- traverse(ast, {
27
- FunctionDeclaration(path) {
28
- if (path.node.id && path.node.id.name === componentName) {
29
- // Check if it's the main component function
30
- const funcName = path.node.id.name;
31
- // Check if function has component-like parameters (props structure)
32
- const firstParam = path.node.params[0];
33
- const hasComponentProps = firstParam && (t.isObjectPattern(firstParam) || t.isIdentifier(firstParam));
34
- if (hasComponentProps && funcName[0] !== funcName[0].toUpperCase()) {
35
- violations.push(createViolation('react-component-naming', 'critical', path.node.id, `React component "${funcName}" must start with uppercase. JSX treats lowercase as HTML elements.`, `function ${funcName[0].toUpperCase()}${funcName.slice(1)}`));
36
- }
37
- }
38
- // Also check for any other component-like functions
39
- if (path.node.id && path.node.params[0]) {
40
- const funcName = path.node.id.name;
41
- const firstParam = path.node.params[0];
42
- // Check if it looks like a component (has props parameter and returns JSX)
43
- let returnsJSX = false;
44
- path.traverse({
45
- ReturnStatement(returnPath) {
46
- if (returnPath.node.argument && t.isJSXElement(returnPath.node.argument)) {
47
- returnsJSX = true;
48
- }
49
- },
50
- });
51
- if (returnsJSX && t.isObjectPattern(firstParam)) {
52
- // Check if any props match component prop pattern
53
- const propNames = firstParam.properties
54
- .filter((p) => t.isObjectProperty(p))
55
- .filter((p) => t.isIdentifier(p.key))
56
- .map((p) => p.key.name);
57
- const hasComponentLikeProps = propNames.some((name) => ['utilities', 'styles', 'components', 'callbacks', 'savedUserSettings', 'onSaveUserSettings'].includes(name));
58
- if (hasComponentLikeProps && funcName[0] !== funcName[0].toUpperCase()) {
59
- violations.push(createViolation('react-component-naming', 'critical', path.node.id, `Function "${funcName}" appears to be a React component and must start with uppercase.`, `function ${funcName[0].toUpperCase()}${funcName.slice(1)}`));
60
- }
61
- }
62
- }
63
- },
64
- });
65
- return violations;
66
- }
67
- };
68
- ReactComponentNamingRule = __decorate([
69
- RegisterClass(BaseLintRule, 'react-component-naming')
70
- ], ReactComponentNamingRule);
71
- export { ReactComponentNamingRule };
72
- //# sourceMappingURL=react-component-naming.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"react-component-naming.js","sourceRoot":"","sources":["../../../src/lib/runtime-rules/react-component-naming.ts"],"names":[],"mappings":"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"}
@@ -1,27 +0,0 @@
1
- import * as t from '@babel/types';
2
- import { BaseLintRule } from '../lint-rule.js';
3
- import { Violation } from '../component-linter.js';
4
- /**
5
- * Rule: react-hooks-rules
6
- *
7
- * Enforces the Rules of Hooks:
8
- * 1. Only call hooks at the top level (not inside loops, conditions, or nested functions)
9
- * 2. Only call hooks from React functions (components or custom hooks)
10
- * 3. Hooks must be called in the same order on every render
11
- *
12
- * Detects:
13
- * - Hooks called inside non-component/non-hook functions
14
- * - Hooks called conditionally (if statements, ternary, logical expressions)
15
- * - Hooks called inside loops
16
- * - Hooks called inside try/catch blocks (high severity warning)
17
- * - Hooks called after conditional early returns
18
- *
19
- * Severity: critical (most violations), high (try/catch blocks)
20
- * Applies to: all components
21
- */
22
- export declare class ReactHooksRulesRule extends BaseLintRule {
23
- get Name(): string;
24
- get AppliesTo(): 'all' | 'child' | 'root';
25
- Test(ast: t.File, componentName: string): Violation[];
26
- }
27
- //# sourceMappingURL=react-hooks-rules.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"react-hooks-rules.d.ts","sourceRoot":"","sources":["../../../src/lib/runtime-rules/react-hooks-rules.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,CAAC,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAgChD;;;;;;;;;;;;;;;;;GAiBG;AACH,qBACa,mBAAoB,SAAQ,YAAY;IACnD,IAAI,IAAI,WAAkC;IAC1C,IAAI,SAAS,IAAI,KAAK,GAAG,OAAO,GAAG,MAAM,CAAkB;IAE3D,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,aAAa,EAAE,MAAM,GAAG,SAAS,EAAE;CAqLtD"}
@@ -1,223 +0,0 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- import { traverse } from '../lint-utils.js';
8
- import { RegisterClass } from '@memberjunction/global';
9
- import * as t from '@babel/types';
10
- import { BaseLintRule } from '../lint-rule.js';
11
- /**
12
- * Helper function to extract function name from a NodePath
13
- */
14
- function getFunctionName(path) {
15
- const node = path.node;
16
- // Check for named function
17
- if (t.isFunctionDeclaration(node) && node.id) {
18
- return node.id.name;
19
- }
20
- // Check for arrow function assigned to variable
21
- if (t.isArrowFunctionExpression(node) || t.isFunctionExpression(node)) {
22
- const parent = path.parent;
23
- if (t.isVariableDeclarator(parent) && t.isIdentifier(parent.id)) {
24
- return parent.id.name;
25
- }
26
- }
27
- // Check for function assigned as property
28
- if (t.isArrowFunctionExpression(node) || t.isFunctionExpression(node)) {
29
- const parent = path.parent;
30
- if (t.isObjectProperty(parent) && t.isIdentifier(parent.key)) {
31
- return parent.key.name;
32
- }
33
- }
34
- return null;
35
- }
36
- /**
37
- * Rule: react-hooks-rules
38
- *
39
- * Enforces the Rules of Hooks:
40
- * 1. Only call hooks at the top level (not inside loops, conditions, or nested functions)
41
- * 2. Only call hooks from React functions (components or custom hooks)
42
- * 3. Hooks must be called in the same order on every render
43
- *
44
- * Detects:
45
- * - Hooks called inside non-component/non-hook functions
46
- * - Hooks called conditionally (if statements, ternary, logical expressions)
47
- * - Hooks called inside loops
48
- * - Hooks called inside try/catch blocks (high severity warning)
49
- * - Hooks called after conditional early returns
50
- *
51
- * Severity: critical (most violations), high (try/catch blocks)
52
- * Applies to: all components
53
- */
54
- let ReactHooksRulesRule = class ReactHooksRulesRule extends BaseLintRule {
55
- get Name() { return 'react-hooks-rules'; }
56
- get AppliesTo() { return 'all'; }
57
- Test(ast, componentName) {
58
- const violations = [];
59
- const hooks = ['useState', 'useEffect', 'useMemo', 'useCallback', 'useRef', 'useContext', 'useReducer', 'useLayoutEffect'];
60
- traverse(ast, {
61
- CallExpression(path) {
62
- if (t.isIdentifier(path.node.callee) && hooks.includes(path.node.callee.name)) {
63
- const hookName = path.node.callee.name;
64
- // Rule 1: Check if hook is inside the main component function or custom hook
65
- let funcParent = path.getFunctionParent();
66
- if (funcParent) {
67
- const funcName = getFunctionName(funcParent);
68
- // Violation: Hook not in component or custom hook
69
- if (funcName && funcName !== componentName && !funcName.startsWith('use')) {
70
- violations.push({
71
- rule: 'react-hooks-rules',
72
- severity: 'critical',
73
- line: path.node.loc?.start.line || 0,
74
- column: path.node.loc?.start.column || 0,
75
- message: `React Hook "${hookName}" cannot be called inside function "${funcName}". Hooks can only be called at the top level of React components or custom hooks.`,
76
- code: path.toString().substring(0, 100),
77
- });
78
- return; // Skip further checks for this hook
79
- }
80
- }
81
- // Rule 2: Check if hook is inside a conditional (if statement)
82
- let parent = path.parentPath;
83
- while (parent) {
84
- // Check if we've reached the component function - stop looking
85
- if (t.isFunctionDeclaration(parent.node) || t.isFunctionExpression(parent.node) || t.isArrowFunctionExpression(parent.node)) {
86
- const parentFuncName = getFunctionName(parent);
87
- if (parentFuncName === componentName || parentFuncName?.startsWith('use')) {
88
- break; // We've reached the component/hook boundary
89
- }
90
- }
91
- // Check for conditional statements
92
- if (t.isIfStatement(parent.node)) {
93
- violations.push({
94
- rule: 'react-hooks-rules',
95
- severity: 'critical',
96
- line: path.node.loc?.start.line || 0,
97
- column: path.node.loc?.start.column || 0,
98
- message: `React Hook "${hookName}" is called conditionally. Hooks must be called in the exact same order in every component render.`,
99
- code: path.toString().substring(0, 100),
100
- });
101
- break;
102
- }
103
- // Check for ternary expressions
104
- if (t.isConditionalExpression(parent.node)) {
105
- violations.push({
106
- rule: 'react-hooks-rules',
107
- severity: 'critical',
108
- line: path.node.loc?.start.line || 0,
109
- column: path.node.loc?.start.column || 0,
110
- message: `React Hook "${hookName}" is called conditionally in a ternary expression. Hooks must be called unconditionally.`,
111
- code: path.toString().substring(0, 100),
112
- });
113
- break;
114
- }
115
- // Check for logical expressions (&&, ||)
116
- if (t.isLogicalExpression(parent.node)) {
117
- violations.push({
118
- rule: 'react-hooks-rules',
119
- severity: 'critical',
120
- line: path.node.loc?.start.line || 0,
121
- column: path.node.loc?.start.column || 0,
122
- message: `React Hook "${hookName}" is called conditionally in a logical expression. Hooks must be called unconditionally.`,
123
- code: path.toString().substring(0, 100),
124
- });
125
- break;
126
- }
127
- // Check for switch statements
128
- if (t.isSwitchStatement(parent.node) || t.isSwitchCase(parent.node)) {
129
- violations.push({
130
- rule: 'react-hooks-rules',
131
- severity: 'critical',
132
- line: path.node.loc?.start.line || 0,
133
- column: path.node.loc?.start.column || 0,
134
- message: `React Hook "${hookName}" is called inside a switch statement. Hooks must be called at the top level.`,
135
- code: path.toString().substring(0, 100),
136
- });
137
- break;
138
- }
139
- // Rule 3: Check for loops
140
- if (t.isForStatement(parent.node) ||
141
- t.isForInStatement(parent.node) ||
142
- t.isForOfStatement(parent.node) ||
143
- t.isWhileStatement(parent.node) ||
144
- t.isDoWhileStatement(parent.node)) {
145
- violations.push({
146
- rule: 'react-hooks-rules',
147
- severity: 'critical',
148
- line: path.node.loc?.start.line || 0,
149
- column: path.node.loc?.start.column || 0,
150
- message: `React Hook "${hookName}" may not be called inside a loop. This can lead to hooks being called in different order between renders.`,
151
- code: path.toString().substring(0, 100),
152
- });
153
- break;
154
- }
155
- // Rule 4: Check for try/catch blocks
156
- if (t.isTryStatement(parent.node) || t.isCatchClause(parent.node)) {
157
- violations.push({
158
- rule: 'react-hooks-rules',
159
- severity: 'high', // Less severe as it might be intentional
160
- line: path.node.loc?.start.line || 0,
161
- column: path.node.loc?.start.column || 0,
162
- message: `React Hook "${hookName}" is called inside a try/catch block. While not strictly forbidden, this can lead to issues if the hook throws.`,
163
- code: path.toString().substring(0, 100),
164
- });
165
- break;
166
- }
167
- // Rule 5: Check for early returns before this hook
168
- // This is complex and would need to track control flow, so we'll do a simpler check
169
- if (t.isBlockStatement(parent.node)) {
170
- const statements = parent.node.body;
171
- // Find the statement that contains this hook by walking up the path
172
- let statementNode = path.parentPath;
173
- while (statementNode && !statements.includes(statementNode.node)) {
174
- statementNode = statementNode.parentPath;
175
- }
176
- if (statementNode) {
177
- const hookIndex = statements.indexOf(statementNode.node);
178
- // Check if there's a return statement before this hook
179
- for (let i = 0; i < hookIndex; i++) {
180
- const stmt = statements[i];
181
- if (t.isReturnStatement(stmt)) {
182
- violations.push({
183
- rule: 'react-hooks-rules',
184
- severity: 'critical',
185
- line: path.node.loc?.start.line || 0,
186
- column: path.node.loc?.start.column || 0,
187
- message: `React Hook "${hookName}" is called after a conditional early return. All hooks must be called before any conditional returns.`,
188
- code: path.toString().substring(0, 100),
189
- });
190
- break;
191
- }
192
- // Check for conditional returns
193
- // NOTE: This check is too aggressive and produces false positives
194
- // It triggers when ANY if statement exists before hooks, even if the early return
195
- // is in the render section (after hooks) or in nested callbacks
196
- // TODO: Improve this to only catch actual violations where hooks come after conditional returns
197
- // if (t.isIfStatement(stmt) && ComponentLinter.containsReturn(stmt)) {
198
- // violations.push({
199
- // rule: 'react-hooks-rules',
200
- // severity: 'critical',
201
- // line: path.node.loc?.start.line || 0,
202
- // column: path.node.loc?.start.column || 0,
203
- // message: `React Hook "${hookName}" is called after a possible early return. Move this hook before any conditional logic.`,
204
- // code: path.toString().substring(0, 100),
205
- // });
206
- // break;
207
- // }
208
- }
209
- }
210
- }
211
- parent = parent.parentPath;
212
- }
213
- }
214
- },
215
- });
216
- return violations;
217
- }
218
- };
219
- ReactHooksRulesRule = __decorate([
220
- RegisterClass(BaseLintRule, 'react-hooks-rules')
221
- ], ReactHooksRulesRule);
222
- export { ReactHooksRulesRule };
223
- //# sourceMappingURL=react-hooks-rules.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"react-hooks-rules.js","sourceRoot":"","sources":["../../../src/lib/runtime-rules/react-hooks-rules.ts"],"names":[],"mappings":"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"}
@@ -1,19 +0,0 @@
1
- import * as t from '@babel/types';
2
- import { BaseLintRule } from '../lint-rule.js';
3
- import { Violation } from '../component-linter.js';
4
- import { ComponentSpec } from '@memberjunction/interactive-component-types';
5
- /**
6
- * Rule: required-queries-not-called
7
- *
8
- * Ensures that components with dataRequirements in 'queries' or 'hybrid' mode
9
- * actually call RunQuery for queries that are not delegated to child components.
10
- *
11
- * Severity: critical
12
- * Applies to: root components only
13
- */
14
- export declare class RequiredQueriesNotCalledRule extends BaseLintRule {
15
- get Name(): string;
16
- get AppliesTo(): 'all' | 'child' | 'root';
17
- Test(ast: t.File, componentName: string, componentSpec?: ComponentSpec): Violation[];
18
- }
19
- //# sourceMappingURL=required-queries-not-called.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"required-queries-not-called.d.ts","sourceRoot":"","sources":["../../../src/lib/runtime-rules/required-queries-not-called.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,CAAC,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AAE5E;;;;;;;;GAQG;AACH,qBACa,4BAA6B,SAAQ,YAAY;IAC5D,IAAI,IAAI,WAA4C;IACpD,IAAI,SAAS,IAAI,KAAK,GAAG,OAAO,GAAG,MAAM,CAAmB;IAE5D,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,aAAa,GAAG,SAAS,EAAE;CAuIrF"}
@@ -1,146 +0,0 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- import { traverse, extractRunQueryNamesFromCode } from '../lint-utils.js';
8
- import { RegisterClass } from '@memberjunction/global';
9
- import * as t from '@babel/types';
10
- import { BaseLintRule } from '../lint-rule.js';
11
- /**
12
- * Rule: required-queries-not-called
13
- *
14
- * Ensures that components with dataRequirements in 'queries' or 'hybrid' mode
15
- * actually call RunQuery for queries that are not delegated to child components.
16
- *
17
- * Severity: critical
18
- * Applies to: root components only
19
- */
20
- let RequiredQueriesNotCalledRule = class RequiredQueriesNotCalledRule extends BaseLintRule {
21
- get Name() { return 'required-queries-not-called'; }
22
- get AppliesTo() { return 'root'; }
23
- Test(ast, componentName, componentSpec) {
24
- const violations = [];
25
- // Check the mode - only enforce for 'queries' or 'hybrid' mode
26
- const mode = componentSpec?.dataRequirements?.mode;
27
- if (mode !== 'queries' && mode !== 'hybrid') {
28
- // Mode is not 'queries' or 'hybrid', so this rule doesn't apply
29
- return violations;
30
- }
31
- // Check if there are any queries defined in dataRequirements
32
- const hasQueries = componentSpec?.dataRequirements?.queries && componentSpec.dataRequirements.queries.length > 0;
33
- if (!hasQueries) {
34
- // No queries defined, so no violation
35
- return violations;
36
- }
37
- const allQueryNames = componentSpec.dataRequirements.queries.map((q) => q.name).filter(Boolean);
38
- // In hierarchical components, the root's dataRequirements contains the complete
39
- // set of queries for the entire tree, but child components can own subsets and
40
- // call RunQuery themselves. Collect query names claimed by child dependencies
41
- // via two methods:
42
- // 1. Child spec has dataRequirements.queries (explicit delegation)
43
- // 2. Child spec has code that contains RunQuery + the query name (implicit delegation)
44
- const childClaimedQueries = new Set();
45
- if (componentSpec.dependencies) {
46
- for (const dep of componentSpec.dependencies) {
47
- // Method 1: Explicit dataRequirements on child
48
- if (dep.dataRequirements?.queries) {
49
- for (const q of dep.dataRequirements.queries) {
50
- if (q.name) {
51
- childClaimedQueries.add(q.name);
52
- }
53
- }
54
- }
55
- // Method 2: Parse child code AST and extract actual RunQuery QueryName values
56
- if (dep.code) {
57
- for (const name of extractRunQueryNamesFromCode(dep.code)) {
58
- childClaimedQueries.add(name);
59
- }
60
- }
61
- // Recurse into nested dependencies (grandchildren)
62
- if (dep.dependencies) {
63
- for (const grandchild of dep.dependencies) {
64
- if (grandchild.dataRequirements?.queries) {
65
- for (const q of grandchild.dataRequirements.queries) {
66
- if (q.name)
67
- childClaimedQueries.add(q.name);
68
- }
69
- }
70
- if (grandchild.code) {
71
- for (const name of extractRunQueryNamesFromCode(grandchild.code)) {
72
- childClaimedQueries.add(name);
73
- }
74
- }
75
- }
76
- }
77
- }
78
- }
79
- const unclaimedQueryNames = allQueryNames.filter((name) => !childClaimedQueries.has(name));
80
- // If all queries are delegated to child components, no violation for the root
81
- if (unclaimedQueryNames.length === 0) {
82
- return violations;
83
- }
84
- // Track whether RunQuery is called anywhere in the root component's code
85
- let hasRunQueryCall = false;
86
- traverse(ast, {
87
- CallExpression(path) {
88
- // Check for utilities.rq.RunQuery pattern
89
- if (t.isMemberExpression(path.node.callee) &&
90
- t.isMemberExpression(path.node.callee.object) &&
91
- t.isIdentifier(path.node.callee.object.object) &&
92
- path.node.callee.object.object.name === 'utilities' &&
93
- t.isIdentifier(path.node.callee.object.property) &&
94
- path.node.callee.object.property.name === 'rq' &&
95
- t.isIdentifier(path.node.callee.property) &&
96
- path.node.callee.property.name === 'RunQuery') {
97
- hasRunQueryCall = true;
98
- }
99
- // Also check for destructured pattern: rq.RunQuery
100
- if (t.isMemberExpression(path.node.callee) &&
101
- t.isIdentifier(path.node.callee.object) &&
102
- path.node.callee.object.name === 'rq' &&
103
- t.isIdentifier(path.node.callee.property) &&
104
- path.node.callee.property.name === 'RunQuery') {
105
- hasRunQueryCall = true;
106
- }
107
- },
108
- });
109
- // If unclaimed queries exist but RunQuery is never called, that's a critical violation
110
- if (!hasRunQueryCall) {
111
- violations.push({
112
- rule: 'required-queries-not-called',
113
- severity: 'critical',
114
- line: 1,
115
- column: 0,
116
- message: `Component has ${unclaimedQueryNames.length} defined ${unclaimedQueryNames.length === 1 ? 'query' : 'queries'} in dataRequirements (mode: '${mode}') but never calls RunQuery. Queries defined: ${unclaimedQueryNames.join(', ')}`,
117
- suggestion: {
118
- text: `When dataRequirements.mode is '${mode}' and includes queries, you must use utilities.rq.RunQuery to execute them, not RunView.`,
119
- example: `// Your dataRequirements defines these queries: ${unclaimedQueryNames.join(', ')}
120
- // Mode is set to: '${mode}'
121
-
122
- // ❌ WRONG - Using RunView for a query:
123
- const result = await utilities.rv.RunView({
124
- EntityName: '${unclaimedQueryNames[0] || 'QueryName'}'
125
- });
126
-
127
- // ✅ CORRECT - Using RunQuery for queries:
128
- const result = await utilities.rq.RunQuery({
129
- QueryName: '${unclaimedQueryNames[0] || 'QueryName'}'
130
- });
131
-
132
- // Key differences:
133
- // - RunView: For entity-based data access (uses EntityName)
134
- // - RunQuery: For pre-defined queries (uses QueryName)
135
- // - dataRequirements.mode: '${mode}' requires RunQuery for queries`,
136
- },
137
- });
138
- }
139
- return violations;
140
- }
141
- };
142
- RequiredQueriesNotCalledRule = __decorate([
143
- RegisterClass(BaseLintRule, 'required-queries-not-called')
144
- ], RequiredQueriesNotCalledRule);
145
- export { RequiredQueriesNotCalledRule };
146
- //# sourceMappingURL=required-queries-not-called.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"required-queries-not-called.js","sourceRoot":"","sources":["../../../src/lib/runtime-rules/required-queries-not-called.ts"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- import * as t from '@babel/types';
2
- import { BaseLintRule } from '../lint-rule.js';
3
- import { Violation } from '../component-linter.js';
4
- import { ComponentSpec } from '@memberjunction/interactive-component-types';
5
- import { TypeContext } from '../type-context.js';
6
- export declare class RunQueryCallValidationRule extends BaseLintRule {
7
- get Name(): string;
8
- get AppliesTo(): 'all' | 'child' | 'root';
9
- Test(ast: t.File, _componentName: string, componentSpec?: ComponentSpec, _options?: unknown, typeContext?: TypeContext): Violation[];
10
- }
11
- //# sourceMappingURL=runquery-call-validation.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runquery-call-validation.d.ts","sourceRoot":"","sources":["../../../src/lib/runtime-rules/runquery-call-validation.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,CAAC,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,aAAa,EAA+D,MAAM,6CAA6C,CAAC;AACzI,OAAO,EAAsB,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAwvBlE,qBACa,0BAA2B,SAAQ,YAAY;IAC1D,IAAI,IAAI,WAAyC;IACjD,IAAI,SAAS,IAAI,KAAK,GAAG,OAAO,GAAG,MAAM,CAAkB;IAE3D,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,aAAa,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,SAAS,EAAE;CA6MrI"}