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