@memberjunction/react-test-harness 5.28.0 → 5.30.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 (324) hide show
  1. package/README.md +140 -153
  2. package/dist/__tests__/setup/vitest-setup.d.ts +11 -0
  3. package/dist/__tests__/setup/vitest-setup.d.ts.map +1 -0
  4. package/dist/__tests__/setup/vitest-setup.js +73 -0
  5. package/dist/__tests__/setup/vitest-setup.js.map +1 -0
  6. package/dist/index.d.ts +1 -0
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +1 -0
  9. package/dist/index.js.map +1 -1
  10. package/dist/lib/component-linter.d.ts +10 -13
  11. package/dist/lib/component-linter.d.ts.map +1 -1
  12. package/dist/lib/component-linter.js +96 -8552
  13. package/dist/lib/component-linter.js.map +1 -1
  14. package/dist/lib/component-runner.d.ts.map +1 -1
  15. package/dist/lib/component-runner.js +34 -10
  16. package/dist/lib/component-runner.js.map +1 -1
  17. package/dist/lib/lint-rule.d.ts +70 -0
  18. package/dist/lib/lint-rule.d.ts.map +1 -0
  19. package/dist/lib/lint-rule.js +41 -0
  20. package/dist/lib/lint-rule.js.map +1 -0
  21. package/dist/lib/lint-utils.d.ts +131 -0
  22. package/dist/lib/lint-utils.d.ts.map +1 -0
  23. package/dist/lib/lint-utils.js +358 -0
  24. package/dist/lib/lint-utils.js.map +1 -0
  25. package/dist/lib/prop-value-extractor.d.ts +2 -2
  26. package/dist/lib/prop-value-extractor.js +2 -2
  27. package/dist/lib/runtime-rules/ai-tools-availability-check.d.ts +9 -0
  28. package/dist/lib/runtime-rules/ai-tools-availability-check.d.ts.map +1 -0
  29. package/dist/lib/runtime-rules/ai-tools-availability-check.js +223 -0
  30. package/dist/lib/runtime-rules/ai-tools-availability-check.js.map +1 -0
  31. package/dist/lib/runtime-rules/callback-event-validation.d.ts +22 -0
  32. package/dist/lib/runtime-rules/callback-event-validation.d.ts.map +1 -0
  33. package/dist/lib/runtime-rules/callback-event-validation.js +561 -0
  34. package/dist/lib/runtime-rules/callback-event-validation.js.map +1 -0
  35. package/dist/lib/runtime-rules/chart-field-validation.d.ts +10 -0
  36. package/dist/lib/runtime-rules/chart-field-validation.d.ts.map +1 -0
  37. package/dist/lib/runtime-rules/chart-field-validation.js +270 -0
  38. package/dist/lib/runtime-rules/chart-field-validation.js.map +1 -0
  39. package/dist/lib/runtime-rules/child-component-prop-validation.d.ts +10 -0
  40. package/dist/lib/runtime-rules/child-component-prop-validation.d.ts.map +1 -0
  41. package/dist/lib/runtime-rules/child-component-prop-validation.js +447 -0
  42. package/dist/lib/runtime-rules/child-component-prop-validation.js.map +1 -0
  43. package/dist/lib/runtime-rules/component-name-mismatch.d.ts +19 -0
  44. package/dist/lib/runtime-rules/component-name-mismatch.d.ts.map +1 -0
  45. package/dist/lib/runtime-rules/component-name-mismatch.js +82 -0
  46. package/dist/lib/runtime-rules/component-name-mismatch.js.map +1 -0
  47. package/dist/lib/runtime-rules/component-not-in-dependencies.d.ts +20 -0
  48. package/dist/lib/runtime-rules/component-not-in-dependencies.d.ts.map +1 -0
  49. package/dist/lib/runtime-rules/component-not-in-dependencies.js +92 -0
  50. package/dist/lib/runtime-rules/component-not-in-dependencies.js.map +1 -0
  51. package/dist/lib/runtime-rules/component-props-validation.d.ts +25 -0
  52. package/dist/lib/runtime-rules/component-props-validation.d.ts.map +1 -0
  53. package/dist/lib/runtime-rules/component-props-validation.js +228 -0
  54. package/dist/lib/runtime-rules/component-props-validation.js.map +1 -0
  55. package/dist/lib/runtime-rules/component-usage-without-destructuring.d.ts +20 -0
  56. package/dist/lib/runtime-rules/component-usage-without-destructuring.d.ts.map +1 -0
  57. package/dist/lib/runtime-rules/component-usage-without-destructuring.js +124 -0
  58. package/dist/lib/runtime-rules/component-usage-without-destructuring.js.map +1 -0
  59. package/dist/lib/runtime-rules/data-result-validation.d.ts +9 -0
  60. package/dist/lib/runtime-rules/data-result-validation.d.ts.map +1 -0
  61. package/dist/lib/runtime-rules/data-result-validation.js +763 -0
  62. package/dist/lib/runtime-rules/data-result-validation.js.map +1 -0
  63. package/dist/lib/runtime-rules/datagrid-field-validation.d.ts +10 -0
  64. package/dist/lib/runtime-rules/datagrid-field-validation.d.ts.map +1 -0
  65. package/dist/lib/runtime-rules/datagrid-field-validation.js +245 -0
  66. package/dist/lib/runtime-rules/datagrid-field-validation.js.map +1 -0
  67. package/dist/lib/runtime-rules/dependency-shadowing.d.ts +20 -0
  68. package/dist/lib/runtime-rules/dependency-shadowing.d.ts.map +1 -0
  69. package/dist/lib/runtime-rules/dependency-shadowing.js +147 -0
  70. package/dist/lib/runtime-rules/dependency-shadowing.js.map +1 -0
  71. package/dist/lib/runtime-rules/entity-field-access-validation.d.ts +12 -0
  72. package/dist/lib/runtime-rules/entity-field-access-validation.d.ts.map +1 -0
  73. package/dist/lib/runtime-rules/entity-field-access-validation.js +304 -0
  74. package/dist/lib/runtime-rules/entity-field-access-validation.js.map +1 -0
  75. package/dist/lib/runtime-rules/event-parameter-validation.d.ts +22 -0
  76. package/dist/lib/runtime-rules/event-parameter-validation.d.ts.map +1 -0
  77. package/dist/lib/runtime-rules/event-parameter-validation.js +406 -0
  78. package/dist/lib/runtime-rules/event-parameter-validation.js.map +1 -0
  79. package/dist/lib/runtime-rules/index.d.ts +59 -0
  80. package/dist/lib/runtime-rules/index.d.ts.map +1 -0
  81. package/dist/lib/runtime-rules/index.js +60 -0
  82. package/dist/lib/runtime-rules/index.js.map +1 -0
  83. package/dist/lib/runtime-rules/library-variable-names.d.ts +24 -0
  84. package/dist/lib/runtime-rules/library-variable-names.d.ts.map +1 -0
  85. package/dist/lib/runtime-rules/library-variable-names.js +88 -0
  86. package/dist/lib/runtime-rules/library-variable-names.js.map +1 -0
  87. package/dist/lib/runtime-rules/no-child-implementation.d.ts +18 -0
  88. package/dist/lib/runtime-rules/no-child-implementation.d.ts.map +1 -0
  89. package/dist/lib/runtime-rules/no-child-implementation.js +57 -0
  90. package/dist/lib/runtime-rules/no-child-implementation.js.map +1 -0
  91. package/dist/lib/runtime-rules/no-data-prop.d.ts +22 -0
  92. package/dist/lib/runtime-rules/no-data-prop.d.ts.map +1 -0
  93. package/dist/lib/runtime-rules/no-data-prop.js +111 -0
  94. package/dist/lib/runtime-rules/no-data-prop.js.map +1 -0
  95. package/dist/lib/runtime-rules/no-export-statements.d.ts +18 -0
  96. package/dist/lib/runtime-rules/no-export-statements.d.ts.map +1 -0
  97. package/dist/lib/runtime-rules/no-export-statements.js +143 -0
  98. package/dist/lib/runtime-rules/no-export-statements.js.map +1 -0
  99. package/dist/lib/runtime-rules/no-iife-wrapper.d.ts +18 -0
  100. package/dist/lib/runtime-rules/no-iife-wrapper.d.ts.map +1 -0
  101. package/dist/lib/runtime-rules/no-iife-wrapper.js +217 -0
  102. package/dist/lib/runtime-rules/no-iife-wrapper.js.map +1 -0
  103. package/dist/lib/runtime-rules/no-import-statements.d.ts +18 -0
  104. package/dist/lib/runtime-rules/no-import-statements.d.ts.map +1 -0
  105. package/dist/lib/runtime-rules/no-import-statements.js +65 -0
  106. package/dist/lib/runtime-rules/no-import-statements.js.map +1 -0
  107. package/dist/lib/runtime-rules/no-react-destructuring.d.ts +18 -0
  108. package/dist/lib/runtime-rules/no-react-destructuring.d.ts.map +1 -0
  109. package/dist/lib/runtime-rules/no-react-destructuring.js +60 -0
  110. package/dist/lib/runtime-rules/no-react-destructuring.js.map +1 -0
  111. package/dist/lib/runtime-rules/no-require-statements.d.ts +18 -0
  112. package/dist/lib/runtime-rules/no-require-statements.d.ts.map +1 -0
  113. package/dist/lib/runtime-rules/no-require-statements.js +109 -0
  114. package/dist/lib/runtime-rules/no-require-statements.js.map +1 -0
  115. package/dist/lib/runtime-rules/no-return-component.d.ts +18 -0
  116. package/dist/lib/runtime-rules/no-return-component.d.ts.map +1 -0
  117. package/dist/lib/runtime-rules/no-return-component.js +106 -0
  118. package/dist/lib/runtime-rules/no-return-component.js.map +1 -0
  119. package/dist/lib/runtime-rules/no-use-reducer.d.ts +19 -0
  120. package/dist/lib/runtime-rules/no-use-reducer.d.ts.map +1 -0
  121. package/dist/lib/runtime-rules/no-use-reducer.js +78 -0
  122. package/dist/lib/runtime-rules/no-use-reducer.js.map +1 -0
  123. package/dist/lib/runtime-rules/no-window-access.d.ts +23 -0
  124. package/dist/lib/runtime-rules/no-window-access.d.ts.map +1 -0
  125. package/dist/lib/runtime-rules/no-window-access.js +136 -0
  126. package/dist/lib/runtime-rules/no-window-access.js.map +1 -0
  127. package/dist/lib/runtime-rules/noisy-settings-updates.d.ts +18 -0
  128. package/dist/lib/runtime-rules/noisy-settings-updates.d.ts.map +1 -0
  129. package/dist/lib/runtime-rules/noisy-settings-updates.js +110 -0
  130. package/dist/lib/runtime-rules/noisy-settings-updates.js.map +1 -0
  131. package/dist/lib/runtime-rules/pass-standard-props.d.ts +19 -0
  132. package/dist/lib/runtime-rules/pass-standard-props.d.ts.map +1 -0
  133. package/dist/lib/runtime-rules/pass-standard-props.js +82 -0
  134. package/dist/lib/runtime-rules/pass-standard-props.js.map +1 -0
  135. package/dist/lib/runtime-rules/prefer-async-await.d.ts +17 -0
  136. package/dist/lib/runtime-rules/prefer-async-await.d.ts.map +1 -0
  137. package/dist/lib/runtime-rules/prefer-async-await.js +52 -0
  138. package/dist/lib/runtime-rules/prefer-async-await.js.map +1 -0
  139. package/dist/lib/runtime-rules/prefer-jsx-syntax.d.ts +17 -0
  140. package/dist/lib/runtime-rules/prefer-jsx-syntax.d.ts.map +1 -0
  141. package/dist/lib/runtime-rules/prefer-jsx-syntax.js +51 -0
  142. package/dist/lib/runtime-rules/prefer-jsx-syntax.js.map +1 -0
  143. package/dist/lib/runtime-rules/prop-state-sync.d.ts +19 -0
  144. package/dist/lib/runtime-rules/prop-state-sync.d.ts.map +1 -0
  145. package/dist/lib/runtime-rules/prop-state-sync.js +76 -0
  146. package/dist/lib/runtime-rules/prop-state-sync.js.map +1 -0
  147. package/dist/lib/runtime-rules/property-name-consistency.d.ts +20 -0
  148. package/dist/lib/runtime-rules/property-name-consistency.d.ts.map +1 -0
  149. package/dist/lib/runtime-rules/property-name-consistency.js +172 -0
  150. package/dist/lib/runtime-rules/property-name-consistency.js.map +1 -0
  151. package/dist/lib/runtime-rules/query-result-field-access-validation.d.ts +10 -0
  152. package/dist/lib/runtime-rules/query-result-field-access-validation.d.ts.map +1 -0
  153. package/dist/lib/runtime-rules/query-result-field-access-validation.js +304 -0
  154. package/dist/lib/runtime-rules/query-result-field-access-validation.js.map +1 -0
  155. package/dist/lib/runtime-rules/react-component-naming.d.ts +19 -0
  156. package/dist/lib/runtime-rules/react-component-naming.d.ts.map +1 -0
  157. package/dist/lib/runtime-rules/react-component-naming.js +72 -0
  158. package/dist/lib/runtime-rules/react-component-naming.js.map +1 -0
  159. package/dist/lib/runtime-rules/react-hooks-rules.d.ts +27 -0
  160. package/dist/lib/runtime-rules/react-hooks-rules.d.ts.map +1 -0
  161. package/dist/lib/runtime-rules/react-hooks-rules.js +223 -0
  162. package/dist/lib/runtime-rules/react-hooks-rules.js.map +1 -0
  163. package/dist/lib/runtime-rules/required-queries-not-called.d.ts +19 -0
  164. package/dist/lib/runtime-rules/required-queries-not-called.d.ts.map +1 -0
  165. package/dist/lib/runtime-rules/required-queries-not-called.js +146 -0
  166. package/dist/lib/runtime-rules/required-queries-not-called.js.map +1 -0
  167. package/dist/lib/runtime-rules/runquery-call-validation.d.ts +11 -0
  168. package/dist/lib/runtime-rules/runquery-call-validation.d.ts.map +1 -0
  169. package/dist/lib/runtime-rules/runquery-call-validation.js +886 -0
  170. package/dist/lib/runtime-rules/runquery-call-validation.js.map +1 -0
  171. package/dist/lib/runtime-rules/runview-call-validation.d.ts +10 -0
  172. package/dist/lib/runtime-rules/runview-call-validation.d.ts.map +1 -0
  173. package/dist/lib/runtime-rules/runview-call-validation.js +336 -0
  174. package/dist/lib/runtime-rules/runview-call-validation.js.map +1 -0
  175. package/dist/lib/runtime-rules/saved-user-settings-pattern.d.ts +19 -0
  176. package/dist/lib/runtime-rules/saved-user-settings-pattern.d.ts.map +1 -0
  177. package/dist/lib/runtime-rules/saved-user-settings-pattern.js +90 -0
  178. package/dist/lib/runtime-rules/saved-user-settings-pattern.js.map +1 -0
  179. package/dist/lib/runtime-rules/search-availability-check.d.ts +9 -0
  180. package/dist/lib/runtime-rules/search-availability-check.d.ts.map +1 -0
  181. package/dist/lib/runtime-rules/search-availability-check.js +220 -0
  182. package/dist/lib/runtime-rules/search-availability-check.js.map +1 -0
  183. package/dist/lib/runtime-rules/search-call-validation.d.ts +9 -0
  184. package/dist/lib/runtime-rules/search-call-validation.d.ts.map +1 -0
  185. package/dist/lib/runtime-rules/search-call-validation.js +336 -0
  186. package/dist/lib/runtime-rules/search-call-validation.js.map +1 -0
  187. package/dist/lib/runtime-rules/server-reload-on-client-operation.d.ts +18 -0
  188. package/dist/lib/runtime-rules/server-reload-on-client-operation.d.ts.map +1 -0
  189. package/dist/lib/runtime-rules/server-reload-on-client-operation.js +107 -0
  190. package/dist/lib/runtime-rules/server-reload-on-client-operation.js.map +1 -0
  191. package/dist/lib/runtime-rules/single-function-only.d.ts +18 -0
  192. package/dist/lib/runtime-rules/single-function-only.d.ts.map +1 -0
  193. package/dist/lib/runtime-rules/single-function-only.js +103 -0
  194. package/dist/lib/runtime-rules/single-function-only.js.map +1 -0
  195. package/dist/lib/runtime-rules/string-replace-all-occurrences.d.ts +19 -0
  196. package/dist/lib/runtime-rules/string-replace-all-occurrences.d.ts.map +1 -0
  197. package/dist/lib/runtime-rules/string-replace-all-occurrences.js +109 -0
  198. package/dist/lib/runtime-rules/string-replace-all-occurrences.js.map +1 -0
  199. package/dist/lib/runtime-rules/string-template-validation.d.ts +22 -0
  200. package/dist/lib/runtime-rules/string-template-validation.d.ts.map +1 -0
  201. package/dist/lib/runtime-rules/string-template-validation.js +163 -0
  202. package/dist/lib/runtime-rules/string-template-validation.js.map +1 -0
  203. package/dist/lib/runtime-rules/styles-validation.d.ts +10 -0
  204. package/dist/lib/runtime-rules/styles-validation.d.ts.map +1 -0
  205. package/dist/lib/runtime-rules/styles-validation.js +153 -0
  206. package/dist/lib/runtime-rules/styles-validation.js.map +1 -0
  207. package/dist/lib/runtime-rules/type-inference-errors.d.ts +23 -0
  208. package/dist/lib/runtime-rules/type-inference-errors.d.ts.map +1 -0
  209. package/dist/lib/runtime-rules/type-inference-errors.js +53 -0
  210. package/dist/lib/runtime-rules/type-inference-errors.js.map +1 -0
  211. package/dist/lib/runtime-rules/type-mismatch-operation.d.ts +23 -0
  212. package/dist/lib/runtime-rules/type-mismatch-operation.d.ts.map +1 -0
  213. package/dist/lib/runtime-rules/type-mismatch-operation.js +141 -0
  214. package/dist/lib/runtime-rules/type-mismatch-operation.js.map +1 -0
  215. package/dist/lib/runtime-rules/undefined-component-usage.d.ts +20 -0
  216. package/dist/lib/runtime-rules/undefined-component-usage.d.ts.map +1 -0
  217. package/dist/lib/runtime-rules/undefined-component-usage.js +138 -0
  218. package/dist/lib/runtime-rules/undefined-component-usage.js.map +1 -0
  219. package/dist/lib/runtime-rules/undefined-jsx-component.d.ts +25 -0
  220. package/dist/lib/runtime-rules/undefined-jsx-component.d.ts.map +1 -0
  221. package/dist/lib/runtime-rules/undefined-jsx-component.js +269 -0
  222. package/dist/lib/runtime-rules/undefined-jsx-component.js.map +1 -0
  223. package/dist/lib/runtime-rules/unsafe-array-operations.d.ts +25 -0
  224. package/dist/lib/runtime-rules/unsafe-array-operations.d.ts.map +1 -0
  225. package/dist/lib/runtime-rules/unsafe-array-operations.js +347 -0
  226. package/dist/lib/runtime-rules/unsafe-array-operations.js.map +1 -0
  227. package/dist/lib/runtime-rules/unsafe-formatting-methods.d.ts +24 -0
  228. package/dist/lib/runtime-rules/unsafe-formatting-methods.d.ts.map +1 -0
  229. package/dist/lib/runtime-rules/unsafe-formatting-methods.js +277 -0
  230. package/dist/lib/runtime-rules/unsafe-formatting-methods.js.map +1 -0
  231. package/dist/lib/runtime-rules/unused-component-dependencies.d.ts +19 -0
  232. package/dist/lib/runtime-rules/unused-component-dependencies.d.ts.map +1 -0
  233. package/dist/lib/runtime-rules/unused-component-dependencies.js +90 -0
  234. package/dist/lib/runtime-rules/unused-component-dependencies.js.map +1 -0
  235. package/dist/lib/runtime-rules/unused-libraries.d.ts +19 -0
  236. package/dist/lib/runtime-rules/unused-libraries.d.ts.map +1 -0
  237. package/dist/lib/runtime-rules/unused-libraries.js +127 -0
  238. package/dist/lib/runtime-rules/unused-libraries.js.map +1 -0
  239. package/dist/lib/runtime-rules/use-function-declaration.d.ts +18 -0
  240. package/dist/lib/runtime-rules/use-function-declaration.d.ts.map +1 -0
  241. package/dist/lib/runtime-rules/use-function-declaration.js +127 -0
  242. package/dist/lib/runtime-rules/use-function-declaration.js.map +1 -0
  243. package/dist/lib/runtime-rules/use-unwrap-components.d.ts +19 -0
  244. package/dist/lib/runtime-rules/use-unwrap-components.d.ts.map +1 -0
  245. package/dist/lib/runtime-rules/use-unwrap-components.js +84 -0
  246. package/dist/lib/runtime-rules/use-unwrap-components.js.map +1 -0
  247. package/dist/lib/runtime-rules/useeffect-unstable-dependencies.d.ts +23 -0
  248. package/dist/lib/runtime-rules/useeffect-unstable-dependencies.d.ts.map +1 -0
  249. package/dist/lib/runtime-rules/useeffect-unstable-dependencies.js +215 -0
  250. package/dist/lib/runtime-rules/useeffect-unstable-dependencies.js.map +1 -0
  251. package/dist/lib/runtime-rules/utilities-api-validation.d.ts +24 -0
  252. package/dist/lib/runtime-rules/utilities-api-validation.d.ts.map +1 -0
  253. package/dist/lib/runtime-rules/utilities-api-validation.js +121 -0
  254. package/dist/lib/runtime-rules/utilities-api-validation.js.map +1 -0
  255. package/dist/lib/runtime-rules/utilities-no-direct-instantiation.d.ts +20 -0
  256. package/dist/lib/runtime-rules/utilities-no-direct-instantiation.d.ts.map +1 -0
  257. package/dist/lib/runtime-rules/utilities-no-direct-instantiation.js +58 -0
  258. package/dist/lib/runtime-rules/utilities-no-direct-instantiation.js.map +1 -0
  259. package/dist/lib/runtime-rules/validate-component-references.d.ts +19 -0
  260. package/dist/lib/runtime-rules/validate-component-references.d.ts.map +1 -0
  261. package/dist/lib/runtime-rules/validate-component-references.js +255 -0
  262. package/dist/lib/runtime-rules/validate-component-references.js.map +1 -0
  263. package/dist/lib/schema-validation/component-prop-rule.d.ts +125 -0
  264. package/dist/lib/schema-validation/component-prop-rule.d.ts.map +1 -0
  265. package/dist/lib/schema-validation/component-prop-rule.js +630 -0
  266. package/dist/lib/schema-validation/component-prop-rule.js.map +1 -0
  267. package/dist/lib/schema-validation/index.d.ts +26 -0
  268. package/dist/lib/schema-validation/index.d.ts.map +1 -0
  269. package/dist/lib/schema-validation/index.js +26 -0
  270. package/dist/lib/schema-validation/index.js.map +1 -0
  271. package/dist/lib/schema-validation/semantic-validators/index.d.ts +23 -0
  272. package/dist/lib/schema-validation/semantic-validators/index.d.ts.map +1 -0
  273. package/dist/lib/schema-validation/semantic-validators/index.js +23 -0
  274. package/dist/lib/schema-validation/semantic-validators/index.js.map +1 -0
  275. package/dist/lib/{constraint-validators → schema-validation/semantic-validators}/required-when-validator.d.ts +2 -2
  276. package/dist/lib/schema-validation/semantic-validators/required-when-validator.d.ts.map +1 -0
  277. package/dist/lib/{constraint-validators → schema-validation/semantic-validators}/required-when-validator.js +3 -3
  278. package/dist/lib/schema-validation/semantic-validators/required-when-validator.js.map +1 -0
  279. package/dist/lib/schema-validation/semantic-validators/semantic-validator-registry.d.ts +122 -0
  280. package/dist/lib/schema-validation/semantic-validators/semantic-validator-registry.d.ts.map +1 -0
  281. package/dist/lib/schema-validation/semantic-validators/semantic-validator-registry.js +166 -0
  282. package/dist/lib/schema-validation/semantic-validators/semantic-validator-registry.js.map +1 -0
  283. package/dist/lib/{constraint-validators/base-constraint-validator.d.ts → schema-validation/semantic-validators/semantic-validator.d.ts} +12 -11
  284. package/dist/lib/schema-validation/semantic-validators/semantic-validator.d.ts.map +1 -0
  285. package/dist/lib/{constraint-validators/base-constraint-validator.js → schema-validation/semantic-validators/semantic-validator.js} +11 -10
  286. package/dist/lib/schema-validation/semantic-validators/semantic-validator.js.map +1 -0
  287. package/dist/lib/{constraint-validators → schema-validation/semantic-validators}/sql-where-clause-validator.d.ts +2 -2
  288. package/dist/lib/schema-validation/semantic-validators/sql-where-clause-validator.d.ts.map +1 -0
  289. package/dist/lib/{constraint-validators → schema-validation/semantic-validators}/sql-where-clause-validator.js +8 -4
  290. package/dist/lib/schema-validation/semantic-validators/sql-where-clause-validator.js.map +1 -0
  291. package/dist/lib/{constraint-validators → schema-validation/semantic-validators}/subset-of-entity-fields-validator.d.ts +2 -2
  292. package/dist/lib/schema-validation/semantic-validators/subset-of-entity-fields-validator.d.ts.map +1 -0
  293. package/dist/lib/{constraint-validators → schema-validation/semantic-validators}/subset-of-entity-fields-validator.js +3 -3
  294. package/dist/lib/schema-validation/semantic-validators/subset-of-entity-fields-validator.js.map +1 -0
  295. package/dist/lib/{constraint-validators → schema-validation/semantic-validators}/validation-context.d.ts +14 -5
  296. package/dist/lib/schema-validation/semantic-validators/validation-context.d.ts.map +1 -0
  297. package/dist/lib/{constraint-validators → schema-validation/semantic-validators}/validation-context.js +1 -1
  298. package/dist/lib/schema-validation/semantic-validators/validation-context.js.map +1 -0
  299. package/dist/lib/type-context.d.ts.map +1 -1
  300. package/dist/lib/type-context.js +16 -1
  301. package/dist/lib/type-context.js.map +1 -1
  302. package/dist/lib/type-inference-engine.d.ts +13 -0
  303. package/dist/lib/type-inference-engine.d.ts.map +1 -1
  304. package/dist/lib/type-inference-engine.js +144 -22
  305. package/dist/lib/type-inference-engine.js.map +1 -1
  306. package/dist/lib/type-rules/type-compatibility-rule.d.ts +79 -0
  307. package/dist/lib/type-rules/type-compatibility-rule.d.ts.map +1 -0
  308. package/dist/lib/type-rules/type-compatibility-rule.js +211 -0
  309. package/dist/lib/type-rules/type-compatibility-rule.js.map +1 -0
  310. package/package.json +15 -11
  311. package/dist/lib/constraint-validators/base-constraint-validator.d.ts.map +0 -1
  312. package/dist/lib/constraint-validators/base-constraint-validator.js.map +0 -1
  313. package/dist/lib/constraint-validators/index.d.ts +0 -21
  314. package/dist/lib/constraint-validators/index.d.ts.map +0 -1
  315. package/dist/lib/constraint-validators/index.js +0 -21
  316. package/dist/lib/constraint-validators/index.js.map +0 -1
  317. package/dist/lib/constraint-validators/required-when-validator.d.ts.map +0 -1
  318. package/dist/lib/constraint-validators/required-when-validator.js.map +0 -1
  319. package/dist/lib/constraint-validators/sql-where-clause-validator.d.ts.map +0 -1
  320. package/dist/lib/constraint-validators/sql-where-clause-validator.js.map +0 -1
  321. package/dist/lib/constraint-validators/subset-of-entity-fields-validator.d.ts.map +0 -1
  322. package/dist/lib/constraint-validators/subset-of-entity-fields-validator.js.map +0 -1
  323. package/dist/lib/constraint-validators/validation-context.d.ts.map +0 -1
  324. package/dist/lib/constraint-validators/validation-context.js.map +0 -1
@@ -0,0 +1,131 @@
1
+ /**
2
+ * Shared utility functions and constants for component linter rules.
3
+ *
4
+ * All commonly-used patterns are consolidated here to avoid duplication
5
+ * across rule files. Rules should import from this module rather than
6
+ * reimplementing these helpers.
7
+ */
8
+ import _traverse, { NodePath } from '@babel/traverse';
9
+ import * as t from '@babel/types';
10
+ import { Violation } from './component-linter.js';
11
+ export declare const traverse: typeof _traverse;
12
+ /** Re-export NodePath for convenience so rules don't need a separate @babel/traverse import */
13
+ export type { NodePath };
14
+ /**
15
+ * Creates a violation object with consistent structure.
16
+ */
17
+ export declare function createViolation(rule: string, severity: 'critical' | 'high' | 'medium' | 'low', node: t.Node | null | undefined, message: string, code?: string, suggestion?: {
18
+ text: string;
19
+ example?: string;
20
+ }): Violation;
21
+ /**
22
+ * Truncates code to a maximum length for display in violations.
23
+ */
24
+ export declare function truncateCode(code: string, maxLength?: number): string;
25
+ /**
26
+ * Levenshtein distance between two strings (case-insensitive).
27
+ */
28
+ export declare function levenshteinDistance(a: string, b: string): number;
29
+ /**
30
+ * Find the closest matching string from a list of candidates using Levenshtein distance.
31
+ * Returns null if no match is within the maximum allowed distance.
32
+ */
33
+ export declare function findClosestMatch(target: string, candidates: string[] | Set<string>, maxDistance?: number): string | null;
34
+ /**
35
+ * Find a case-insensitive match that differs only in casing.
36
+ */
37
+ export declare function findCaseMismatch(target: string, candidates: string[] | Set<string>): string | null;
38
+ /** Checks if a node is null or undefined literal */
39
+ export declare function isNullOrUndefined(node: t.Node): boolean;
40
+ /** Checks if a node is likely a string value (literal, template, identifier, call, etc.) */
41
+ export declare function isStringLike(node: t.Node, depth?: number): boolean;
42
+ /** Checks if a node is likely a number value */
43
+ export declare function isNumberLike(node: t.Node): boolean;
44
+ /** Checks if a node is likely an array value */
45
+ export declare function isArrayLike(node: t.Node): boolean;
46
+ /** Checks if a node is likely an object value (not array) */
47
+ export declare function isObjectLike(node: t.Node): boolean;
48
+ /**
49
+ * Extract a string literal value from an ObjectExpression property by key name.
50
+ * Returns null if the property doesn't exist or its value isn't a string literal.
51
+ *
52
+ * @example
53
+ * ```typescript
54
+ * // For: { QueryName: 'My Query', MaxRows: 100 }
55
+ * getStringProperty(objectExpr, 'QueryName') // → 'My Query'
56
+ * getStringProperty(objectExpr, 'MaxRows') // → null (not a string)
57
+ * ```
58
+ */
59
+ export declare function getStringProperty(objectExpr: t.ObjectExpression, propName: string): string | null;
60
+ /**
61
+ * Get the AST node for a specific property value in an ObjectExpression.
62
+ * Returns the ObjectProperty if found, null otherwise.
63
+ */
64
+ export declare function getObjectProperty(objectExpr: t.ObjectExpression, propName: string): t.ObjectProperty | null;
65
+ /**
66
+ * Get all property names from an ObjectExpression.
67
+ */
68
+ export declare function getPropertyNames(objectExpr: t.ObjectExpression): string[];
69
+ /**
70
+ * Check if a CallExpression callee matches the pattern `utilities.<service>.<method>`.
71
+ * Returns the service and method names if matched, null otherwise.
72
+ *
73
+ * @example
74
+ * ```typescript
75
+ * // For: utilities.rv.RunView(...)
76
+ * getUtilitiesCallInfo(callee) // → { service: 'rv', method: 'RunView' }
77
+ *
78
+ * // For: utilities.rq.RunQuery(...)
79
+ * getUtilitiesCallInfo(callee) // → { service: 'rq', method: 'RunQuery' }
80
+ *
81
+ * // For: utilities.search?.Search(...)
82
+ * getUtilitiesCallInfo(callee) // → { service: 'search', method: 'Search' }
83
+ * ```
84
+ */
85
+ export declare function getUtilitiesCallInfo(callee: t.Node): {
86
+ service: string;
87
+ method: string;
88
+ } | null;
89
+ /** Check if a CallExpression callee is `utilities.rv.RunView` or `utilities.rv.RunViews` */
90
+ export declare function isRunViewCall(callee: t.Node): boolean;
91
+ /** Check if a CallExpression callee is `utilities.rq.RunQuery` */
92
+ export declare function isRunQueryCall(callee: t.Node): boolean;
93
+ /** Check if a CallExpression callee is `utilities.search.Search` or `PreviewSearch` */
94
+ export declare function isSearchCall(callee: t.Node): boolean;
95
+ /**
96
+ * Parse component code and extract QueryName values from RunQuery calls.
97
+ * Uses full AST analysis to avoid false positives from comments or string literals.
98
+ */
99
+ export declare function extractRunQueryNamesFromCode(code: string): Set<string>;
100
+ /** Standard array iteration method names */
101
+ export declare const ARRAY_METHODS: Set<string>;
102
+ /** Functions that expect array arguments */
103
+ export declare const ARRAY_EXPECTING_FUNCS: Set<string>;
104
+ /** Functions that coerce values to numbers */
105
+ export declare const NUMERIC_COERCION_FUNCTIONS: Set<string>;
106
+ /**
107
+ * Common DOM/React/JS properties that should never be validated as entity fields.
108
+ * Used to prevent false positives when scope resolution picks up a variable name
109
+ * collision (e.g., `e` used as both a .map() callback param and an onChange event param).
110
+ */
111
+ export declare const NON_ENTITY_PROPERTIES: Set<string>;
112
+ /** Extracts the name of a JSX element (handles member expressions like Antd.Button) */
113
+ export declare function getJSXElementName(node: t.JSXOpeningElement): string | null;
114
+ /** Checks if a JSX element has a specific attribute */
115
+ export declare function hasJSXAttribute(element: t.JSXOpeningElement, attributeName: string): boolean;
116
+ /** Gets a JSX attribute by name */
117
+ export declare function getJSXAttribute(element: t.JSXOpeningElement, attributeName: string): t.JSXAttribute | null;
118
+ /** Checks if a function parameter is destructuring props */
119
+ export declare function isPropsDestructuring(param: t.LVal): boolean;
120
+ /** Extracts property names from an object pattern (destructuring) */
121
+ export declare function extractDestructuredProps(pattern: t.ObjectPattern): string[];
122
+ /** Checks if a node is at the top level of the program */
123
+ export declare function isTopLevel(path: {
124
+ getFunctionParent: () => unknown;
125
+ scope: {
126
+ path: {
127
+ type: string;
128
+ };
129
+ };
130
+ }): boolean;
131
+ //# sourceMappingURL=lint-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lint-utils.d.ts","sourceRoot":"","sources":["../../src/lib/lint-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,358 @@
1
+ /**
2
+ * Shared utility functions and constants for component linter rules.
3
+ *
4
+ * All commonly-used patterns are consolidated here to avoid duplication
5
+ * across rule files. Rules should import from this module rather than
6
+ * reimplementing these helpers.
7
+ */
8
+ import _traverse from '@babel/traverse';
9
+ import * as t from '@babel/types';
10
+ import * as parser from '@babel/parser';
11
+ export const traverse = ((_traverse.default) ?? _traverse);
12
+ // ═══════════════════════════════════════════════════════════════════════════
13
+ // Violation Helpers
14
+ // ═══════════════════════════════════════════════════════════════════════════
15
+ /**
16
+ * Creates a violation object with consistent structure.
17
+ */
18
+ export function createViolation(rule, severity, node, message, code, suggestion) {
19
+ return {
20
+ rule,
21
+ severity,
22
+ line: node?.loc?.start.line || 0,
23
+ column: node?.loc?.start.column || 0,
24
+ message,
25
+ code,
26
+ suggestion,
27
+ };
28
+ }
29
+ /**
30
+ * Truncates code to a maximum length for display in violations.
31
+ */
32
+ export function truncateCode(code, maxLength = 100) {
33
+ if (code.length <= maxLength)
34
+ return code;
35
+ return code.substring(0, maxLength) + '...';
36
+ }
37
+ // ═══════════════════════════════════════════════════════════════════════════
38
+ // String Similarity
39
+ // ═══════════════════════════════════════════════════════════════════════════
40
+ /**
41
+ * Levenshtein distance between two strings (case-insensitive).
42
+ */
43
+ export function levenshteinDistance(a, b) {
44
+ const al = a.toLowerCase();
45
+ const bl = b.toLowerCase();
46
+ const m = al.length;
47
+ const n = bl.length;
48
+ const dp = Array.from({ length: m + 1 }, () => Array(n + 1).fill(0));
49
+ for (let i = 0; i <= m; i++)
50
+ dp[i][0] = i;
51
+ for (let j = 0; j <= n; j++)
52
+ dp[0][j] = j;
53
+ for (let i = 1; i <= m; i++) {
54
+ for (let j = 1; j <= n; j++) {
55
+ const cost = al[i - 1] === bl[j - 1] ? 0 : 1;
56
+ dp[i][j] = Math.min(dp[i - 1][j] + 1, dp[i][j - 1] + 1, dp[i - 1][j - 1] + cost);
57
+ }
58
+ }
59
+ return dp[m][n];
60
+ }
61
+ /**
62
+ * Find the closest matching string from a list of candidates using Levenshtein distance.
63
+ * Returns null if no match is within the maximum allowed distance.
64
+ */
65
+ export function findClosestMatch(target, candidates, maxDistance) {
66
+ let bestMatch = null;
67
+ let bestDistance = Infinity;
68
+ const max = maxDistance ?? Math.max(3, Math.floor(target.length * 0.5));
69
+ for (const candidate of candidates) {
70
+ const dist = levenshteinDistance(target, candidate);
71
+ if (dist < bestDistance && dist > 0 && dist <= max) {
72
+ bestDistance = dist;
73
+ bestMatch = candidate;
74
+ }
75
+ }
76
+ return bestMatch;
77
+ }
78
+ /**
79
+ * Find a case-insensitive match that differs only in casing.
80
+ */
81
+ export function findCaseMismatch(target, candidates) {
82
+ for (const candidate of candidates) {
83
+ if (candidate.toLowerCase() === target.toLowerCase() && candidate !== target) {
84
+ return candidate;
85
+ }
86
+ }
87
+ return null;
88
+ }
89
+ // ═══════════════════════════════════════════════════════════════════════════
90
+ // AST Type Checking Helpers
91
+ // ═══════════════════════════════════════════════════════════════════════════
92
+ /** Checks if a node is null or undefined literal */
93
+ export function isNullOrUndefined(node) {
94
+ return t.isNullLiteral(node) || (t.isIdentifier(node) && node.name === 'undefined');
95
+ }
96
+ /** Checks if a node is likely a string value (literal, template, identifier, call, etc.) */
97
+ export function isStringLike(node, depth = 0) {
98
+ if (depth > 3)
99
+ return false;
100
+ if (t.isConditionalExpression(node)) {
101
+ const consequentOk = isStringLike(node.consequent, depth + 1) || isNullOrUndefined(node.consequent);
102
+ const alternateOk = isStringLike(node.alternate, depth + 1) || isNullOrUndefined(node.alternate);
103
+ return consequentOk && alternateOk;
104
+ }
105
+ if (t.isObjectExpression(node) || t.isArrayExpression(node))
106
+ return false;
107
+ return (t.isStringLiteral(node) ||
108
+ t.isTemplateLiteral(node) ||
109
+ t.isBinaryExpression(node) ||
110
+ t.isIdentifier(node) ||
111
+ t.isCallExpression(node) ||
112
+ t.isMemberExpression(node));
113
+ }
114
+ /** Checks if a node is likely a number value */
115
+ export function isNumberLike(node) {
116
+ return (t.isNumericLiteral(node) ||
117
+ t.isBinaryExpression(node) ||
118
+ t.isUnaryExpression(node) ||
119
+ t.isConditionalExpression(node) ||
120
+ t.isIdentifier(node) ||
121
+ t.isCallExpression(node) ||
122
+ t.isMemberExpression(node));
123
+ }
124
+ /** Checks if a node is likely an array value */
125
+ export function isArrayLike(node) {
126
+ return (t.isArrayExpression(node) ||
127
+ t.isIdentifier(node) ||
128
+ t.isCallExpression(node) ||
129
+ t.isMemberExpression(node) ||
130
+ t.isConditionalExpression(node));
131
+ }
132
+ /** Checks if a node is likely an object value (not array) */
133
+ export function isObjectLike(node) {
134
+ if (t.isArrayExpression(node))
135
+ return false;
136
+ return (t.isObjectExpression(node) ||
137
+ t.isIdentifier(node) ||
138
+ t.isCallExpression(node) ||
139
+ t.isMemberExpression(node) ||
140
+ t.isConditionalExpression(node) ||
141
+ t.isSpreadElement(node));
142
+ }
143
+ // ═══════════════════════════════════════════════════════════════════════════
144
+ // Object Property Extraction
145
+ // ═══════════════════════════════════════════════════════════════════════════
146
+ /**
147
+ * Extract a string literal value from an ObjectExpression property by key name.
148
+ * Returns null if the property doesn't exist or its value isn't a string literal.
149
+ *
150
+ * @example
151
+ * ```typescript
152
+ * // For: { QueryName: 'My Query', MaxRows: 100 }
153
+ * getStringProperty(objectExpr, 'QueryName') // → 'My Query'
154
+ * getStringProperty(objectExpr, 'MaxRows') // → null (not a string)
155
+ * ```
156
+ */
157
+ export function getStringProperty(objectExpr, propName) {
158
+ for (const prop of objectExpr.properties) {
159
+ if (t.isObjectProperty(prop) && t.isIdentifier(prop.key) &&
160
+ prop.key.name === propName && t.isStringLiteral(prop.value)) {
161
+ return prop.value.value;
162
+ }
163
+ }
164
+ return null;
165
+ }
166
+ /**
167
+ * Get the AST node for a specific property value in an ObjectExpression.
168
+ * Returns the ObjectProperty if found, null otherwise.
169
+ */
170
+ export function getObjectProperty(objectExpr, propName) {
171
+ for (const prop of objectExpr.properties) {
172
+ if (t.isObjectProperty(prop) && t.isIdentifier(prop.key) && prop.key.name === propName) {
173
+ return prop;
174
+ }
175
+ }
176
+ return null;
177
+ }
178
+ /**
179
+ * Get all property names from an ObjectExpression.
180
+ */
181
+ export function getPropertyNames(objectExpr) {
182
+ return objectExpr.properties
183
+ .filter((prop) => t.isObjectProperty(prop) && t.isIdentifier(prop.key))
184
+ .map((prop) => prop.key.name);
185
+ }
186
+ // ═══════════════════════════════════════════════════════════════════════════
187
+ // Utility Method Call Detection
188
+ // ═══════════════════════════════════════════════════════════════════════════
189
+ /**
190
+ * Check if a CallExpression callee matches the pattern `utilities.<service>.<method>`.
191
+ * Returns the service and method names if matched, null otherwise.
192
+ *
193
+ * @example
194
+ * ```typescript
195
+ * // For: utilities.rv.RunView(...)
196
+ * getUtilitiesCallInfo(callee) // → { service: 'rv', method: 'RunView' }
197
+ *
198
+ * // For: utilities.rq.RunQuery(...)
199
+ * getUtilitiesCallInfo(callee) // → { service: 'rq', method: 'RunQuery' }
200
+ *
201
+ * // For: utilities.search?.Search(...)
202
+ * getUtilitiesCallInfo(callee) // → { service: 'search', method: 'Search' }
203
+ * ```
204
+ */
205
+ export function getUtilitiesCallInfo(callee) {
206
+ // Standard: utilities.rv.RunView(...)
207
+ if (t.isMemberExpression(callee) &&
208
+ t.isMemberExpression(callee.object) &&
209
+ t.isIdentifier(callee.object.object) &&
210
+ callee.object.object.name === 'utilities' &&
211
+ t.isIdentifier(callee.object.property) &&
212
+ t.isIdentifier(callee.property)) {
213
+ return { service: callee.object.property.name, method: callee.property.name };
214
+ }
215
+ // Optional chaining: utilities.search?.Search(...)
216
+ if (t.isMemberExpression(callee) &&
217
+ t.isOptionalMemberExpression(callee.object) &&
218
+ t.isIdentifier(callee.object.object) &&
219
+ callee.object.object.name === 'utilities' &&
220
+ t.isIdentifier(callee.object.property) &&
221
+ t.isIdentifier(callee.property)) {
222
+ return {
223
+ service: callee.object.property.name,
224
+ method: callee.property.name,
225
+ };
226
+ }
227
+ return null;
228
+ }
229
+ /** Check if a CallExpression callee is `utilities.rv.RunView` or `utilities.rv.RunViews` */
230
+ export function isRunViewCall(callee) {
231
+ const info = getUtilitiesCallInfo(callee);
232
+ return info !== null && info.service === 'rv' && (info.method === 'RunView' || info.method === 'RunViews');
233
+ }
234
+ /** Check if a CallExpression callee is `utilities.rq.RunQuery` */
235
+ export function isRunQueryCall(callee) {
236
+ const info = getUtilitiesCallInfo(callee);
237
+ return info !== null && info.service === 'rq' && info.method === 'RunQuery';
238
+ }
239
+ /** Check if a CallExpression callee is `utilities.search.Search` or `PreviewSearch` */
240
+ export function isSearchCall(callee) {
241
+ const info = getUtilitiesCallInfo(callee);
242
+ return info !== null && info.service === 'search' && (info.method === 'Search' || info.method === 'PreviewSearch');
243
+ }
244
+ // ═══════════════════════════════════════════════════════════════════════════
245
+ // Child Component Code Analysis
246
+ // ═══════════════════════════════════════════════════════════════════════════
247
+ /**
248
+ * Parse component code and extract QueryName values from RunQuery calls.
249
+ * Uses full AST analysis to avoid false positives from comments or string literals.
250
+ */
251
+ export function extractRunQueryNamesFromCode(code) {
252
+ const queryNames = new Set();
253
+ try {
254
+ const ast = parser.parse(code, {
255
+ sourceType: 'module',
256
+ plugins: ['jsx', 'typescript'],
257
+ errorRecovery: true,
258
+ });
259
+ traverse(ast, {
260
+ CallExpression(path) {
261
+ if (isRunQueryCall(path.node.callee)) {
262
+ const arg = path.node.arguments[0];
263
+ if (t.isObjectExpression(arg)) {
264
+ const queryName = getStringProperty(arg, 'QueryName');
265
+ if (queryName)
266
+ queryNames.add(queryName);
267
+ }
268
+ }
269
+ },
270
+ });
271
+ }
272
+ catch {
273
+ // If parsing fails, return empty set
274
+ }
275
+ return queryNames;
276
+ }
277
+ // ═══════════════════════════════════════════════════════════════════════════
278
+ // Shared Constants
279
+ // ═══════════════════════════════════════════════════════════════════════════
280
+ /** Standard array iteration method names */
281
+ export const ARRAY_METHODS = new Set([
282
+ 'map', 'filter', 'forEach', 'reduce', 'find', 'some', 'every',
283
+ 'sort', 'concat', 'flatMap', 'flat', 'slice', 'reverse',
284
+ ]);
285
+ /** Functions that expect array arguments */
286
+ export const ARRAY_EXPECTING_FUNCS = new Set([
287
+ 'map', 'filter', 'forEach', 'reduce', 'sort', 'concat',
288
+ 'processChartData', 'processData', 'transformData',
289
+ 'setData', 'setItems', 'setResults', 'setRows',
290
+ ]);
291
+ /** Functions that coerce values to numbers */
292
+ export const NUMERIC_COERCION_FUNCTIONS = new Set(['parseInt', 'parseFloat', 'Number']);
293
+ /**
294
+ * Common DOM/React/JS properties that should never be validated as entity fields.
295
+ * Used to prevent false positives when scope resolution picks up a variable name
296
+ * collision (e.g., `e` used as both a .map() callback param and an onChange event param).
297
+ */
298
+ export const NON_ENTITY_PROPERTIES = new Set([
299
+ // DOM event properties
300
+ 'target', 'currentTarget', 'preventDefault', 'stopPropagation', 'nativeEvent',
301
+ 'type', 'bubbles', 'cancelable', 'defaultPrevented', 'eventPhase', 'isTrusted',
302
+ // DOM element properties
303
+ 'value', 'checked', 'selectedIndex', 'innerHTML', 'textContent', 'className',
304
+ 'style', 'classList', 'dataset', 'children', 'parentNode', 'parentElement',
305
+ 'offsetWidth', 'offsetHeight', 'scrollTop', 'scrollLeft', 'clientWidth', 'clientHeight',
306
+ // React/JS common
307
+ 'current', 'then', 'catch', 'finally', 'prototype', 'constructor', 'length',
308
+ 'map', 'filter', 'reduce', 'forEach', 'find', 'some', 'every', 'includes',
309
+ 'push', 'pop', 'shift', 'unshift', 'splice', 'slice', 'concat', 'join',
310
+ 'keys', 'values', 'entries', 'toString', 'valueOf', 'hasOwnProperty',
311
+ ]);
312
+ // ═══════════════════════════════════════════════════════════════════════════
313
+ // JSX Helpers
314
+ // ═══════════════════════════════════════════════════════════════════════════
315
+ /** Extracts the name of a JSX element (handles member expressions like Antd.Button) */
316
+ export function getJSXElementName(node) {
317
+ if (t.isJSXIdentifier(node.name)) {
318
+ return node.name.name;
319
+ }
320
+ else if (t.isJSXMemberExpression(node.name)) {
321
+ const parts = [];
322
+ let current = node.name;
323
+ while (t.isJSXMemberExpression(current)) {
324
+ if (t.isJSXIdentifier(current.property))
325
+ parts.unshift(current.property.name);
326
+ current = current.object;
327
+ }
328
+ if (t.isJSXIdentifier(current))
329
+ parts.unshift(current.name);
330
+ return parts.join('.');
331
+ }
332
+ return null;
333
+ }
334
+ /** Checks if a JSX element has a specific attribute */
335
+ export function hasJSXAttribute(element, attributeName) {
336
+ return element.attributes.some((attr) => t.isJSXAttribute(attr) && t.isJSXIdentifier(attr.name) && attr.name.name === attributeName);
337
+ }
338
+ /** Gets a JSX attribute by name */
339
+ export function getJSXAttribute(element, attributeName) {
340
+ const attr = element.attributes.find((a) => t.isJSXAttribute(a) && t.isJSXIdentifier(a.name) && a.name.name === attributeName);
341
+ return t.isJSXAttribute(attr) ? attr : null;
342
+ }
343
+ /** Checks if a function parameter is destructuring props */
344
+ export function isPropsDestructuring(param) {
345
+ return t.isObjectPattern(param);
346
+ }
347
+ /** Extracts property names from an object pattern (destructuring) */
348
+ export function extractDestructuredProps(pattern) {
349
+ return pattern.properties
350
+ .filter((prop) => t.isObjectProperty(prop))
351
+ .filter((prop) => t.isIdentifier(prop.key))
352
+ .map((prop) => prop.key.name);
353
+ }
354
+ /** Checks if a node is at the top level of the program */
355
+ export function isTopLevel(path) {
356
+ return path.getFunctionParent() === null || path.scope.path.type === 'Program';
357
+ }
358
+ //# sourceMappingURL=lint-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lint-utils.js","sourceRoot":"","sources":["../../src/lib/lint-utils.ts"],"names":[],"mappings":"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"}
@@ -2,8 +2,8 @@
2
2
  * Prop Value Extractor Utility
3
3
  *
4
4
  * Extracts static values from JSX attribute AST nodes for validation purposes.
5
- * This utility is foundational for constraint validation - it converts AST nodes
6
- * into analyzable values that constraint validators can work with.
5
+ * This utility is foundational for semantic validation - it converts AST nodes
6
+ * into analyzable values that semantic validators can work with.
7
7
  *
8
8
  * Supported Extractions:
9
9
  * - Literal values: strings, numbers, booleans, null
@@ -2,8 +2,8 @@
2
2
  * Prop Value Extractor Utility
3
3
  *
4
4
  * Extracts static values from JSX attribute AST nodes for validation purposes.
5
- * This utility is foundational for constraint validation - it converts AST nodes
6
- * into analyzable values that constraint validators can work with.
5
+ * This utility is foundational for semantic validation - it converts AST nodes
6
+ * into analyzable values that semantic validators can work with.
7
7
  *
8
8
  * Supported Extractions:
9
9
  * - Literal values: strings, numbers, booleans, null
@@ -0,0 +1,9 @@
1
+ import * as t from '@babel/types';
2
+ import { BaseLintRule } from '../lint-rule.js';
3
+ import { Violation } from '../component-linter.js';
4
+ export declare class AiToolsAvailabilityCheckRule extends BaseLintRule {
5
+ get Name(): string;
6
+ get AppliesTo(): 'all' | 'child' | 'root';
7
+ Test(ast: t.File): Violation[];
8
+ }
9
+ //# sourceMappingURL=ai-tools-availability-check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-tools-availability-check.d.ts","sourceRoot":"","sources":["../../../src/lib/runtime-rules/ai-tools-availability-check.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,cAAc,CAAC;AAElC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAsLhD,qBACa,4BAA6B,SAAQ,YAAY;IAC5D,IAAI,IAAI,WAA4C;IACpD,IAAI,SAAS,IAAI,KAAK,GAAG,OAAO,GAAG,MAAM,CAAkB;IAE3D,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,GAAG,SAAS,EAAE;CAmD/B"}