@memberjunction/react-test-harness 5.29.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 -8
  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 +7 -18
  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 -12
  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,630 @@
1
+ /**
2
+ * Component Prop Rule - Unified component property validation
3
+ *
4
+ * This rule consolidates all component prop validation:
5
+ * 1. Prop existence (from dependency-prop-validation)
6
+ * 2. Required props checking
7
+ * 3. Prop type validation (via TypeContext)
8
+ * 4. Semantic constraint validation (via SemanticValidators)
9
+ * 5. Unknown props warning
10
+ *
11
+ * @category schema
12
+ * @severity high
13
+ *
14
+ * ## Rationale
15
+ * Component props are the contract between components. This rule ensures:
16
+ * - All required props are provided
17
+ * - Prop types match expected types
18
+ * - Prop values meet semantic constraints
19
+ * - Unknown props are flagged (may be typos)
20
+ *
21
+ * ## Integration
22
+ * - Uses SemanticValidatorRegistry for constraint validation
23
+ * - Uses TypeInferenceEngine for type checking
24
+ * - Uses ComponentMetadataEngine for dependency specs
25
+ *
26
+ * ## Phase 3 Consolidation
27
+ * This rule merges:
28
+ * - dependency-prop-validation (prop existence, required, types, unknown)
29
+ * - validate-component-props (semantic constraint validation)
30
+ */
31
+ import _traverse from '@babel/traverse';
32
+ const traverse = ((_traverse.default) ?? _traverse);
33
+ import * as t from '@babel/types';
34
+ import { ComponentMetadataEngine } from '@memberjunction/core-entities';
35
+ import { PropValueExtractor } from '../prop-value-extractor.js';
36
+ import { SemanticValidatorRegistry } from './semantic-validators/semantic-validator-registry.js';
37
+ /**
38
+ * ComponentPropRule - Validates all aspects of component property usage
39
+ *
40
+ * Validates:
41
+ * 1. Props exist in component spec (schema validation)
42
+ * 2. Required props are provided
43
+ * 3. Prop types match expected types (via TypeContext)
44
+ * 4. Semantic constraints are met (via SemanticValidators)
45
+ * 5. Unknown props warning
46
+ */
47
+ export class ComponentPropRule {
48
+ constructor() {
49
+ this.name = 'component-props';
50
+ this.appliesTo = 'all';
51
+ // Standard props that are always allowed on any component
52
+ this.standardProps = new Set([
53
+ 'key',
54
+ 'ref',
55
+ 'className',
56
+ 'style',
57
+ 'id',
58
+ 'data-testid',
59
+ 'aria-label',
60
+ 'aria-describedby',
61
+ 'title',
62
+ // Runtime props passed through to all components
63
+ 'utilities',
64
+ 'styles',
65
+ 'components',
66
+ 'callbacks',
67
+ 'savedUserSettings',
68
+ 'onSaveUserSettings',
69
+ ]);
70
+ // React special props
71
+ this.reactSpecialProps = new Set(['children', 'dangerouslySetInnerHTML']);
72
+ }
73
+ /**
74
+ * Validate component props
75
+ */
76
+ validate(ast, context) {
77
+ this._sqlDialect = context.sqlDialect;
78
+ const violations = [];
79
+ // Skip if no dependencies
80
+ if (!context.componentSpec?.dependencies || context.componentSpec.dependencies.length === 0) {
81
+ return violations;
82
+ }
83
+ // Build a map of dependency components to their full specs
84
+ const dependencySpecs = this.buildDependencySpecs(context.componentSpec);
85
+ // Build validation context helpers from parent spec's dataRequirements
86
+ const validationHelpers = this.buildValidationHelpers(context.componentSpec);
87
+ // Traverse AST and validate each component usage
88
+ traverse(ast, {
89
+ JSXElement: (path) => {
90
+ const openingElement = path.node.openingElement;
91
+ const elementName = this.getElementName(openingElement);
92
+ if (!elementName)
93
+ return;
94
+ // Get the spec for this dependency component
95
+ const depSpec = dependencySpecs.get(elementName);
96
+ if (!depSpec)
97
+ return; // Not a dependency, skip
98
+ // Get provided props
99
+ const providedProps = this.getProvidedProps(openingElement);
100
+ const providedPropNodes = this.getProvidedPropNodes(openingElement);
101
+ // 1. Check required props
102
+ violations.push(...this.validateRequiredProps(elementName, providedProps, depSpec, openingElement, path.node));
103
+ // 2. Check prop types
104
+ violations.push(...this.validatePropTypes(elementName, providedPropNodes, depSpec, context, openingElement));
105
+ // 3. Check unknown props
106
+ violations.push(...this.validateUnknownProps(elementName, providedProps, providedPropNodes, depSpec, openingElement));
107
+ // 4. Run semantic validators (if component has constraints)
108
+ violations.push(...this.validateSemanticConstraints(elementName, depSpec, openingElement, path, validationHelpers));
109
+ },
110
+ });
111
+ return violations;
112
+ }
113
+ /**
114
+ * Build map of dependency components to their full specs
115
+ */
116
+ buildDependencySpecs(componentSpec) {
117
+ const dependencySpecs = new Map();
118
+ for (const dep of componentSpec.dependencies || []) {
119
+ if (dep && dep.name) {
120
+ if (dep.location === 'registry') {
121
+ // Try to load from registry
122
+ let match;
123
+ if (dep.registry) {
124
+ match = ComponentMetadataEngine.Instance.FindComponent(dep.name, dep.namespace, dep.registry);
125
+ }
126
+ else {
127
+ match = ComponentMetadataEngine.Instance.FindComponent(dep.name, dep.namespace);
128
+ }
129
+ if (!match) {
130
+ console.warn(`Dependency component not found in registry: ${dep.name} (${dep.namespace || 'no namespace'})`);
131
+ }
132
+ else {
133
+ dependencySpecs.set(dep.name, match.spec);
134
+ }
135
+ }
136
+ else {
137
+ // Embedded dependencies have their spec inline
138
+ dependencySpecs.set(dep.name, dep);
139
+ }
140
+ }
141
+ else {
142
+ console.warn(`Invalid dependency in component spec: ${dep?.name || 'unknown'}`);
143
+ }
144
+ }
145
+ return dependencySpecs;
146
+ }
147
+ /**
148
+ * Build validation context helpers from parent spec's dataRequirements
149
+ */
150
+ buildValidationHelpers(componentSpec) {
151
+ const getEntityFields = (entityName) => {
152
+ if (!componentSpec.dataRequirements?.entities)
153
+ return [];
154
+ const entity = componentSpec.dataRequirements.entities.find((e) => e.name === entityName);
155
+ if (!entity)
156
+ return [];
157
+ // Prefer fieldMetadata if available (provides type info, allowsNull, isPrimaryKey, etc.)
158
+ if (entity.fieldMetadata && Array.isArray(entity.fieldMetadata) && entity.fieldMetadata.length > 0) {
159
+ return entity.fieldMetadata.map((f) => ({
160
+ name: f.name,
161
+ type: f.type || 'string',
162
+ required: !f.allowsNull,
163
+ allowedValues: f.possibleValues || undefined,
164
+ isPrimaryKey: f.isPrimaryKey || false,
165
+ }));
166
+ }
167
+ // Fallback: Collect all field names from display/filter/sort arrays
168
+ const allFieldNames = new Set();
169
+ if (entity.displayFields)
170
+ entity.displayFields.forEach((f) => allFieldNames.add(f));
171
+ if (entity.filterFields)
172
+ entity.filterFields.forEach((f) => allFieldNames.add(f));
173
+ if (entity.sortFields)
174
+ entity.sortFields.forEach((f) => allFieldNames.add(f));
175
+ // Convert to EntityFieldInfo format (we don't have type info from field name lists)
176
+ return Array.from(allFieldNames).map((name) => ({
177
+ name,
178
+ type: 'string', // Unknown type from field name lists
179
+ required: false,
180
+ allowedValues: undefined,
181
+ }));
182
+ };
183
+ const getEntityFieldType = (entityName, fieldName) => {
184
+ const fields = getEntityFields(entityName);
185
+ const field = fields.find((f) => f.name === fieldName);
186
+ return field?.type || null;
187
+ };
188
+ const hasEntity = (entityName) => {
189
+ if (!componentSpec.dataRequirements?.entities)
190
+ return false;
191
+ return componentSpec.dataRequirements.entities.some((e) => e.name === entityName);
192
+ };
193
+ const findSimilarFieldNames = (fieldName, entityName, maxResults) => {
194
+ const fields = getEntityFields(entityName);
195
+ const fieldNames = fields.map((f) => f.name);
196
+ const similar = [];
197
+ // Simple Levenshtein distance calculation
198
+ const levenshtein = (a, b) => {
199
+ const matrix = [];
200
+ for (let i = 0; i <= b.length; i++)
201
+ matrix[i] = [i];
202
+ for (let j = 0; j <= a.length; j++)
203
+ matrix[0][j] = j;
204
+ for (let i = 1; i <= b.length; i++) {
205
+ for (let j = 1; j <= a.length; j++) {
206
+ if (b.charAt(i - 1) === a.charAt(j - 1)) {
207
+ matrix[i][j] = matrix[i - 1][j - 1];
208
+ }
209
+ else {
210
+ matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, matrix[i][j - 1] + 1, matrix[i - 1][j] + 1);
211
+ }
212
+ }
213
+ }
214
+ return matrix[b.length][a.length];
215
+ };
216
+ for (const fn of fieldNames) {
217
+ const distance = levenshtein(fieldName.toLowerCase(), fn.toLowerCase());
218
+ if (distance <= 3) {
219
+ similar.push({ name: fn, distance });
220
+ }
221
+ }
222
+ similar.sort((a, b) => a.distance - b.distance);
223
+ return similar.slice(0, maxResults || 3).map((s) => s.name);
224
+ };
225
+ return {
226
+ getEntityFields,
227
+ getEntityFieldType,
228
+ hasEntity,
229
+ findSimilarFieldNames,
230
+ getQueryParameters: () => [],
231
+ hasQuery: () => false,
232
+ };
233
+ }
234
+ /**
235
+ * Get element name from JSX opening element
236
+ */
237
+ getElementName(element) {
238
+ if (t.isJSXIdentifier(element.name)) {
239
+ return element.name.name;
240
+ }
241
+ else if (t.isJSXMemberExpression(element.name)) {
242
+ // Handle cases like <components.EntityDataGrid> - skip for now
243
+ return null;
244
+ }
245
+ return null;
246
+ }
247
+ /**
248
+ * Get set of provided prop names
249
+ */
250
+ getProvidedProps(element) {
251
+ const props = new Set();
252
+ for (const attr of element.attributes) {
253
+ if (t.isJSXAttribute(attr) && t.isJSXIdentifier(attr.name)) {
254
+ props.add(attr.name.name);
255
+ }
256
+ }
257
+ return props;
258
+ }
259
+ /**
260
+ * Get map of provided prop names to their JSXAttribute nodes
261
+ */
262
+ getProvidedPropNodes(element) {
263
+ const propNodes = new Map();
264
+ for (const attr of element.attributes) {
265
+ if (t.isJSXAttribute(attr) && t.isJSXIdentifier(attr.name)) {
266
+ propNodes.set(attr.name.name, attr);
267
+ }
268
+ }
269
+ return propNodes;
270
+ }
271
+ /**
272
+ * Validate required props are provided
273
+ */
274
+ validateRequiredProps(elementName, providedProps, depSpec, openingElement, jsxElement) {
275
+ const violations = [];
276
+ // Get required props
277
+ const requiredProps = [];
278
+ if (depSpec.properties && Array.isArray(depSpec.properties)) {
279
+ for (const prop of depSpec.properties) {
280
+ if (prop && prop.name && prop.required === true) {
281
+ requiredProps.push(prop.name);
282
+ }
283
+ }
284
+ }
285
+ // Check missing required props
286
+ const missingRequired = requiredProps.filter((prop) => {
287
+ // Special handling for 'children' prop
288
+ if (prop === 'children') {
289
+ // Check if JSX element has children nodes
290
+ const hasChildren = jsxElement.children &&
291
+ jsxElement.children.length > 0 &&
292
+ jsxElement.children.some((child) => !t.isJSXText(child) || (t.isJSXText(child) && child.value.trim() !== ''));
293
+ return !providedProps.has(prop) && !hasChildren;
294
+ }
295
+ return !providedProps.has(prop) && !this.standardProps.has(prop);
296
+ });
297
+ // Separate children warnings from other critical props
298
+ const missingChildren = missingRequired.filter((prop) => prop === 'children');
299
+ const missingOtherProps = missingRequired.filter((prop) => prop !== 'children');
300
+ // Critical violation for non-children required props
301
+ if (missingOtherProps.length > 0) {
302
+ violations.push({
303
+ rule: 'component-props',
304
+ severity: 'critical',
305
+ line: openingElement.loc?.start.line || 0,
306
+ column: openingElement.loc?.start.column || 0,
307
+ message: `Dependency component "${elementName}" is missing required props: ${missingOtherProps.join(', ')}. These props are marked as required in the component's specification.`,
308
+ code: `<${elementName} ... />`,
309
+ });
310
+ }
311
+ // Medium severity warning for missing children when required
312
+ if (missingChildren.length > 0) {
313
+ violations.push({
314
+ rule: 'component-props',
315
+ severity: 'medium',
316
+ line: openingElement.loc?.start.line || 0,
317
+ column: openingElement.loc?.start.column || 0,
318
+ message: `Component "${elementName}" expects children but none were provided. The 'children' prop is marked as required in the component's specification.`,
319
+ code: `<${elementName} ... />`,
320
+ });
321
+ }
322
+ return violations;
323
+ }
324
+ /**
325
+ * Validate prop types match expected types
326
+ */
327
+ validatePropTypes(elementName, providedPropNodes, depSpec, context, openingElement) {
328
+ const violations = [];
329
+ if (!depSpec.properties || !Array.isArray(depSpec.properties)) {
330
+ return violations;
331
+ }
332
+ for (const [propName, attrNode] of providedPropNodes) {
333
+ const propSpec = depSpec.properties.find((p) => p.name === propName);
334
+ if (propSpec && propSpec.type) {
335
+ const value = attrNode.value;
336
+ if (value && t.isJSXExpressionContainer(value)) {
337
+ const expr = value.expression;
338
+ if (t.isJSXEmptyExpression(expr))
339
+ continue;
340
+ // Use type inference to get the actual type (works for literals AND variables)
341
+ const actualType = this.getExpressionType(expr, context);
342
+ // Skip if type is unknown (we can't prove it's wrong)
343
+ if (actualType === 'unknown')
344
+ continue;
345
+ // Get the expected type (normalize it)
346
+ const expectedType = propSpec.type.toLowerCase();
347
+ // Check type compatibility
348
+ const compatibility = this.checkTypeCompatibility(actualType, expectedType);
349
+ if (!compatibility.compatible) {
350
+ // Generate helpful message with variable name if it's an identifier
351
+ let valueDesc = actualType;
352
+ if (t.isIdentifier(expr)) {
353
+ valueDesc = `variable "${expr.name}" (${actualType})`;
354
+ }
355
+ violations.push({
356
+ rule: 'component-props',
357
+ severity: 'high',
358
+ line: attrNode.loc?.start.line || 0,
359
+ column: attrNode.loc?.start.column || 0,
360
+ message: `Prop "${propName}" on component "${elementName}" expects type "${compatibility.normalizedExpected}" but received ${valueDesc}.`,
361
+ code: `${propName}={<${compatibility.normalizedExpected} value>}`,
362
+ });
363
+ }
364
+ }
365
+ }
366
+ }
367
+ return violations;
368
+ }
369
+ /**
370
+ * Get the type of an expression
371
+ */
372
+ getExpressionType(expr, context) {
373
+ // Try to infer type from literal values first
374
+ if (t.isStringLiteral(expr) || t.isTemplateLiteral(expr)) {
375
+ return 'string';
376
+ }
377
+ else if (t.isNumericLiteral(expr)) {
378
+ return 'number';
379
+ }
380
+ else if (t.isBooleanLiteral(expr)) {
381
+ return 'boolean';
382
+ }
383
+ else if (t.isArrayExpression(expr)) {
384
+ return 'array';
385
+ }
386
+ else if (t.isObjectExpression(expr)) {
387
+ return 'object';
388
+ }
389
+ else if (t.isArrowFunctionExpression(expr) || t.isFunctionExpression(expr)) {
390
+ return 'function';
391
+ }
392
+ else if (t.isIdentifier(expr)) {
393
+ // Try to get type from type engine
394
+ if (context.typeEngine && context.typeEngine.getType) {
395
+ const inferredType = context.typeEngine.getType(expr);
396
+ if (inferredType && inferredType.kind) {
397
+ return inferredType.kind;
398
+ }
399
+ }
400
+ // Fallback to unknown
401
+ return 'unknown';
402
+ }
403
+ else if (t.isMemberExpression(expr)) {
404
+ // Try to get type from type engine
405
+ if (context.typeEngine && context.typeEngine.getType) {
406
+ const inferredType = context.typeEngine.getType(expr);
407
+ if (inferredType && inferredType.kind) {
408
+ return inferredType.kind;
409
+ }
410
+ }
411
+ return 'unknown';
412
+ }
413
+ return 'unknown';
414
+ }
415
+ /**
416
+ * Check if actual type is compatible with expected type
417
+ */
418
+ checkTypeCompatibility(actualType, expectedType) {
419
+ let isCompatible = true;
420
+ let normalizedExpected = expectedType;
421
+ if (expectedType === 'string') {
422
+ isCompatible = actualType === 'string';
423
+ }
424
+ else if (expectedType === 'number' || expectedType === 'int' || expectedType === 'integer' || expectedType === 'float') {
425
+ isCompatible = actualType === 'number';
426
+ normalizedExpected = 'number';
427
+ }
428
+ else if (expectedType === 'boolean' || expectedType === 'bool') {
429
+ isCompatible = actualType === 'boolean';
430
+ normalizedExpected = 'boolean';
431
+ }
432
+ else if (expectedType === 'array' || expectedType.startsWith('array<')) {
433
+ isCompatible = actualType === 'array';
434
+ normalizedExpected = 'array';
435
+ }
436
+ else if (expectedType === 'object') {
437
+ // Objects, entity-rows, query-rows are all compatible with 'object'
438
+ isCompatible = ['object', 'entity-row', 'query-row'].includes(actualType);
439
+ }
440
+ else if (expectedType === 'function') {
441
+ isCompatible = actualType === 'function';
442
+ }
443
+ return { compatible: isCompatible, normalizedExpected };
444
+ }
445
+ /**
446
+ * Validate unknown props (may be typos)
447
+ */
448
+ validateUnknownProps(elementName, providedProps, providedPropNodes, depSpec, openingElement) {
449
+ const violations = [];
450
+ // Build lists of valid props and events
451
+ const specPropNames = depSpec.properties?.map((p) => p.name).filter(Boolean) || [];
452
+ // Convert event names to their callback prop form (e.g., "dataPointClick" -> "onDataPointClick")
453
+ const specEventNames = depSpec.events?.map((e) => e.name).filter(Boolean) || [];
454
+ const specEventPropNames = specEventNames.map((name) => {
455
+ // If the event already starts with "on", use it as-is
456
+ if (name.startsWith('on') && name.length > 2 && name[2] === name[2].toUpperCase()) {
457
+ return name;
458
+ }
459
+ // Otherwise, convert to "onEventName" format
460
+ return `on${name.charAt(0).toUpperCase()}${name.slice(1)}`;
461
+ });
462
+ const allValidProps = [...specPropNames, ...specEventPropNames];
463
+ // Check unknown props
464
+ for (const passedProp of providedProps) {
465
+ // Skip standard props and React special props
466
+ if (this.standardProps.has(passedProp) || this.reactSpecialProps.has(passedProp)) {
467
+ continue;
468
+ }
469
+ // Check if prop is valid (in properties or events)
470
+ if (!allValidProps.includes(passedProp)) {
471
+ // Try to find a close match using Levenshtein distance
472
+ const suggestion = this.findClosestMatch(passedProp, allValidProps);
473
+ const loc = providedPropNodes.get(passedProp);
474
+ // Build informative message showing props and event handlers separately
475
+ const propsListStr = specPropNames.length > 0 ? `Properties: ${specPropNames.join(', ')}` : '';
476
+ const eventsListStr = specEventPropNames.length > 0 ? `Event handlers: ${specEventPropNames.join(', ')}` : '';
477
+ const expectedListStr = [propsListStr, eventsListStr].filter(Boolean).join('. ') || 'none';
478
+ if (suggestion) {
479
+ violations.push({
480
+ rule: 'component-props',
481
+ severity: 'high',
482
+ line: loc?.loc?.start.line || openingElement.loc?.start.line || 0,
483
+ column: loc?.loc?.start.column || openingElement.loc?.start.column || 0,
484
+ message: `Unknown prop '${passedProp}' passed to dependency component '${elementName}'. Did you mean '${suggestion}'?`,
485
+ code: `${passedProp}={...}`,
486
+ });
487
+ }
488
+ else {
489
+ violations.push({
490
+ rule: 'component-props',
491
+ severity: 'medium',
492
+ line: loc?.loc?.start.line || openingElement.loc?.start.line || 0,
493
+ column: loc?.loc?.start.column || openingElement.loc?.start.column || 0,
494
+ message: `Unknown prop '${passedProp}' passed to dependency component '${elementName}'. ${expectedListStr}.`,
495
+ code: `${passedProp}={...}`,
496
+ });
497
+ }
498
+ }
499
+ }
500
+ return violations;
501
+ }
502
+ /**
503
+ * Find closest matching prop name using Levenshtein distance
504
+ */
505
+ findClosestMatch(target, candidates) {
506
+ if (candidates.length === 0)
507
+ return null;
508
+ // Simple Levenshtein distance implementation
509
+ function levenshtein(a, b) {
510
+ const matrix = [];
511
+ for (let i = 0; i <= b.length; i++) {
512
+ matrix[i] = [i];
513
+ }
514
+ for (let j = 0; j <= a.length; j++) {
515
+ matrix[0][j] = j;
516
+ }
517
+ for (let i = 1; i <= b.length; i++) {
518
+ for (let j = 1; j <= a.length; j++) {
519
+ if (b.charAt(i - 1) === a.charAt(j - 1)) {
520
+ matrix[i][j] = matrix[i - 1][j - 1];
521
+ }
522
+ else {
523
+ matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, // substitution
524
+ matrix[i][j - 1] + 1, // insertion
525
+ matrix[i - 1][j] + 1);
526
+ }
527
+ }
528
+ }
529
+ return matrix[b.length][a.length];
530
+ }
531
+ let bestMatch = null;
532
+ let bestDistance = Infinity;
533
+ for (const candidate of candidates) {
534
+ const distance = levenshtein(target.toLowerCase(), candidate.toLowerCase());
535
+ // Only suggest if distance is reasonable (not too far off)
536
+ if (distance < bestDistance && distance <= 3) {
537
+ bestMatch = candidate;
538
+ bestDistance = distance;
539
+ }
540
+ }
541
+ return bestMatch;
542
+ }
543
+ /**
544
+ * Validate semantic constraints on props
545
+ */
546
+ validateSemanticConstraints(elementName, depSpec, openingElement, path, validationHelpers) {
547
+ const violations = [];
548
+ // Check if this component has any properties with constraints
549
+ if (!depSpec.properties)
550
+ return violations;
551
+ const hasConstraints = depSpec.properties.some((p) => p.constraints && p.constraints.length > 0);
552
+ if (!hasConstraints)
553
+ return violations;
554
+ // Extract all props into a map for sibling prop lookups
555
+ const siblingProps = new Map();
556
+ for (const attr of openingElement.attributes) {
557
+ if (t.isJSXAttribute(attr) && t.isJSXIdentifier(attr.name)) {
558
+ const extractedValue = PropValueExtractor.extract(attr);
559
+ siblingProps.set(attr.name.name, extractedValue);
560
+ }
561
+ }
562
+ // Iterate through all properties with constraints
563
+ for (const property of depSpec.properties) {
564
+ if (!property.constraints || property.constraints.length === 0) {
565
+ continue;
566
+ }
567
+ // Find the JSX attribute for this property
568
+ const propAttr = openingElement.attributes.find((attr) => t.isJSXAttribute(attr) && t.isJSXIdentifier(attr.name) && attr.name.name === property.name);
569
+ if (!propAttr || !t.isJSXAttribute(propAttr)) {
570
+ continue;
571
+ }
572
+ // Extract the property value
573
+ const propValue = PropValueExtractor.extract(propAttr);
574
+ // Skip dynamic values
575
+ if (PropValueExtractor.isDynamicValue(propValue)) {
576
+ continue;
577
+ }
578
+ // Run all validators for this property's constraints
579
+ for (const constraint of property.constraints) {
580
+ // Get validator from registry
581
+ const registry = SemanticValidatorRegistry.getInstance();
582
+ const validator = registry.get(constraint.type);
583
+ if (!validator) {
584
+ // Validator not registered for this constraint type
585
+ console.warn(`No validator registered for constraint type: ${constraint.type}`);
586
+ continue;
587
+ }
588
+ // Build ValidationContext
589
+ const validationCtx = {
590
+ node: propAttr,
591
+ path: path,
592
+ componentName: elementName,
593
+ componentSpec: depSpec,
594
+ propertyName: property.name,
595
+ propertyValue: propValue,
596
+ siblingProps,
597
+ entities: new Map(),
598
+ queries: new Map(),
599
+ typeEngine: null,
600
+ dialect: this._sqlDialect,
601
+ getEntityFields: validationHelpers.getEntityFields,
602
+ getEntityFieldType: validationHelpers.getEntityFieldType,
603
+ findSimilarFieldNames: validationHelpers.findSimilarFieldNames,
604
+ getQueryParameters: validationHelpers.getQueryParameters,
605
+ hasQuery: validationHelpers.hasQuery,
606
+ hasEntity: validationHelpers.hasEntity,
607
+ };
608
+ // Run the validator
609
+ try {
610
+ const constraintViolations = validator.validate(validationCtx, constraint);
611
+ for (const cv of constraintViolations) {
612
+ violations.push({
613
+ rule: 'component-props',
614
+ severity: cv.severity,
615
+ line: propAttr.loc?.start.line || 0,
616
+ column: propAttr.loc?.start.column || 0,
617
+ message: cv.message,
618
+ code: cv.suggestion || '',
619
+ });
620
+ }
621
+ }
622
+ catch (error) {
623
+ console.error(`Error validating ${property.name} constraint (${constraint.type}):`, error);
624
+ }
625
+ }
626
+ }
627
+ return violations;
628
+ }
629
+ }
630
+ //# sourceMappingURL=component-prop-rule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"component-prop-rule.js","sourceRoot":"","sources":["../../../src/lib/schema-validation/component-prop-rule.ts"],"names":[],"mappings":"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"}