@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,304 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { traverse, createViolation, truncateCode, findClosestMatch, findCaseMismatch, NUMERIC_COERCION_FUNCTIONS, NON_ENTITY_PROPERTIES } from '../lint-utils.js';
8
+ import * as t from '@babel/types';
9
+ import { RegisterClass } from '@memberjunction/global';
10
+ import { BaseLintRule } from '../lint-rule.js';
11
+ import { TypeContext } from '../type-context.js';
12
+ /**
13
+ * Rule: entity-field-access-validation
14
+ *
15
+ * Validates field access on entity row variables using the shared TypeContext.
16
+ * The TypeInferenceEngine populates variable types (including callback parameters
17
+ * in .map/.filter/.reduce), so this rule simply checks every MemberExpression
18
+ * whose object is typed as 'entity-row' and validates the property name.
19
+ *
20
+ * Catches:
21
+ * - Nonexistent fields (high severity, with closest-match suggestion)
22
+ * - Field name typos via Levenshtein distance (high severity)
23
+ * - Case mismatches like `m.email` vs `m.Email` (medium severity)
24
+ * - Type coercion on GUID fields like `parseInt(m.ID)` (medium severity)
25
+ * - Optional chaining expressions like `m?.FieldName`
26
+ *
27
+ * Severity: high (nonexistent/typo), medium (case mismatch, type coercion)
28
+ * Applies to: all components
29
+ */
30
+ /**
31
+ * Looks up a variable's TypeInfo from the TypeContext, including scoped lookups.
32
+ */
33
+ function lookupVariableTypeInfo(varName, typeContext, path) {
34
+ let varType = typeContext.getVariableType(varName);
35
+ if (!varType || varType.type === 'unknown') {
36
+ // Try with scope prefix from the path
37
+ let current = path;
38
+ while (current) {
39
+ if (current.isFunction()) {
40
+ let fnName;
41
+ const node = current.node;
42
+ if (t.isFunctionDeclaration(node) && node.id) {
43
+ fnName = node.id.name;
44
+ }
45
+ else if (t.isArrowFunctionExpression(node) || t.isFunctionExpression(node)) {
46
+ const parent = current.parent;
47
+ if (t.isVariableDeclarator(parent) && t.isIdentifier(parent.id)) {
48
+ fnName = parent.id.name;
49
+ }
50
+ }
51
+ if (fnName) {
52
+ varType = typeContext.getVariableType(`${fnName}:${varName}`);
53
+ if (varType && varType.type !== 'unknown')
54
+ break;
55
+ }
56
+ }
57
+ current = current.parentPath;
58
+ }
59
+ }
60
+ return varType ?? null;
61
+ }
62
+ /**
63
+ * Resolves the variable name from a MemberExpression or OptionalMemberExpression.
64
+ * Handles:
65
+ * - Simple identifiers: `variable.Field`
66
+ * - Scoped names: callback params in `.map()`, etc.
67
+ * - Inline indexed access: `result.Results?.[0]?.Field` where [0] yields an entity/query row
68
+ */
69
+ function resolveVariableType(objectNode, typeContext, path) {
70
+ // Case 1: Simple identifier — `variable.Field`
71
+ if (t.isIdentifier(objectNode)) {
72
+ const varType = lookupVariableTypeInfo(objectNode.name, typeContext, path);
73
+ if (!varType)
74
+ return null;
75
+ if (varType.type === 'entity-row' && varType.entityName) {
76
+ let fields = varType.fields;
77
+ // If fields are missing (DB unavailable during type inference), try to
78
+ // load from TypeContext cache or spec fieldMetadata
79
+ if (!fields || fields.size === 0) {
80
+ fields = typeContext.getEntityFieldTypesSync(varType.entityName);
81
+ }
82
+ if (fields && fields.size > 0) {
83
+ return { entityName: varType.entityName, fields };
84
+ }
85
+ // Fields still empty — will be handled by the fieldMetadata fallback in the main rule logic
86
+ return null;
87
+ }
88
+ if (varType.type === 'query-row' && varType.queryName) {
89
+ let fields = varType.fields;
90
+ if (!fields || fields.size === 0) {
91
+ fields = typeContext.getQueryFieldTypes(varType.queryName) ?? undefined;
92
+ }
93
+ if (fields && fields.size > 0) {
94
+ return { queryName: varType.queryName, entityName: varType.queryName, fields };
95
+ }
96
+ return null;
97
+ }
98
+ return null;
99
+ }
100
+ // Case 2: Indexed access on .Results — `result.Results?.[0]?.Field` or `result.Results[0].Field`
101
+ // The object is a computed member/optional-member expression like `result.Results?.[0]`
102
+ if ((t.isMemberExpression(objectNode) || t.isOptionalMemberExpression(objectNode)) && objectNode.computed) {
103
+ const arrayExpr = objectNode.object;
104
+ // arrayExpr should be `result.Results` or `result.Results?`
105
+ if ((t.isMemberExpression(arrayExpr) || t.isOptionalMemberExpression(arrayExpr)) &&
106
+ t.isIdentifier(arrayExpr.property) && arrayExpr.property.name === 'Results' &&
107
+ t.isIdentifier(arrayExpr.object)) {
108
+ const resultVarType = lookupVariableTypeInfo(arrayExpr.object.name, typeContext, path);
109
+ if (resultVarType?.type === 'object') {
110
+ // The .Results array's element type carries the entity/query row info
111
+ if (resultVarType.entityName) {
112
+ const entityFields = typeContext.getEntityFieldTypesSync(resultVarType.entityName);
113
+ if (entityFields.size > 0) {
114
+ return { entityName: resultVarType.entityName, fields: entityFields };
115
+ }
116
+ }
117
+ if (resultVarType.queryName) {
118
+ const queryFields = typeContext.getQueryFieldTypes(resultVarType.queryName);
119
+ if (queryFields && queryFields.size > 0) {
120
+ return { queryName: resultVarType.queryName, entityName: resultVarType.queryName, fields: queryFields };
121
+ }
122
+ }
123
+ }
124
+ }
125
+ }
126
+ return null;
127
+ }
128
+ let EntityFieldAccessValidationRule = class EntityFieldAccessValidationRule extends BaseLintRule {
129
+ get Name() { return 'entity-field-access-validation'; }
130
+ get AppliesTo() { return 'all'; }
131
+ Test(ast, _componentName, componentSpec, _options, sharedTypeContext) {
132
+ const violations = [];
133
+ // Use shared TypeContext if available, otherwise create own (backward compat)
134
+ const typeContext = sharedTypeContext ?? new TypeContext(componentSpec);
135
+ // Pre-load entity field sets for validation.
136
+ // Sources: 1) componentSpec.dataRequirements.entities, 2) entity names discovered
137
+ // by the TypeInferenceEngine from RunView({ EntityName: '...' }) calls in code.
138
+ const entityFieldSets = new Map();
139
+ // Track entity names discovered in RunView calls for skip-with-warning
140
+ const discoveredEntityNames = new Set();
141
+ function ensureEntityFields(entityName) {
142
+ if (entityFieldSets.has(entityName))
143
+ return;
144
+ const fields = typeContext.getEntityFieldTypesSync(entityName);
145
+ if (fields.size > 0) {
146
+ entityFieldSets.set(entityName, Array.from(fields.keys()));
147
+ }
148
+ }
149
+ // Check if spec has fieldMetadata for a given entity
150
+ function specHasFieldMetadata(entityName) {
151
+ if (!componentSpec?.dataRequirements?.entities)
152
+ return false;
153
+ return componentSpec.dataRequirements.entities.some(e => e.name === entityName && e.fieldMetadata && e.fieldMetadata.length > 0);
154
+ }
155
+ // Load from spec if available
156
+ if (componentSpec?.dataRequirements?.entities) {
157
+ for (const entityReq of componentSpec.dataRequirements.entities) {
158
+ ensureEntityFields(entityReq.name);
159
+ if (!entityFieldSets.has(entityReq.name) && entityReq.fieldMetadata?.length) {
160
+ entityFieldSets.set(entityReq.name, entityReq.fieldMetadata.map(f => f.name));
161
+ }
162
+ }
163
+ }
164
+ // Also discover entity names from RunView calls in the AST
165
+ // (handles fixtures that don't have dataRequirements but do call RunView)
166
+ traverse(ast, {
167
+ CallExpression(p) {
168
+ const callee = p.node.callee;
169
+ if (t.isMemberExpression(callee) && t.isIdentifier(callee.property) && callee.property.name === 'RunView') {
170
+ if (p.node.arguments.length > 0 && t.isObjectExpression(p.node.arguments[0])) {
171
+ for (const prop of p.node.arguments[0].properties) {
172
+ if (t.isObjectProperty(prop) && t.isIdentifier(prop.key) && prop.key.name === 'EntityName' && t.isStringLiteral(prop.value)) {
173
+ discoveredEntityNames.add(prop.value.value);
174
+ ensureEntityFields(prop.value.value);
175
+ }
176
+ }
177
+ }
178
+ }
179
+ },
180
+ noScope: true,
181
+ });
182
+ // Emit skip-with-warning for entities discovered in RunView calls but lacking metadata
183
+ for (const entityName of discoveredEntityNames) {
184
+ if (!entityFieldSets.has(entityName) && !specHasFieldMetadata(entityName)) {
185
+ violations.push(createViolation('entity-field-access-validation', 'low', null, `Unable to validate field access on entity '${entityName}' — entity metadata not available. Ensure database connection or add fieldMetadata to dataRequirements for accurate validation.`, entityName));
186
+ }
187
+ }
188
+ // Skip traversal only if there are no entity fields loaded AND no query fields
189
+ // in the spec that could be resolved through inline expression type resolution
190
+ const hasQueryFields = componentSpec?.dataRequirements?.queries?.some(q => (q.fields && q.fields.length > 0)) ?? false;
191
+ if (entityFieldSets.size === 0 && !hasQueryFields)
192
+ return violations;
193
+ function validateFieldAccess(node, entityName, validFields, objectName, propertyName) {
194
+ if (validFields.includes(propertyName))
195
+ return;
196
+ // Skip common DOM/React/JS properties — these are never entity fields
197
+ // and would indicate a scope mismatch (variable shadowed by a different context)
198
+ if (NON_ENTITY_PROPERTIES.has(propertyName))
199
+ return;
200
+ const caseFix = findCaseMismatch(propertyName, validFields);
201
+ if (caseFix) {
202
+ violations.push(createViolation('entity-field-access-validation', 'medium', node, `Field "${propertyName}" on entity "${entityName}" has incorrect casing. Did you mean "${caseFix}"?`, `${objectName}.${propertyName}`, { text: `Use the correct casing: "${caseFix}". MemberJunction entity fields use PascalCase.`,
203
+ example: `// Change:\n${objectName}.${propertyName}\n// To:\n${objectName}.${caseFix}` }));
204
+ return;
205
+ }
206
+ const closest = findClosestMatch(propertyName, validFields);
207
+ const preview = validFields.slice(0, 10).join(', ');
208
+ const more = validFields.length > 10 ? ` and ${validFields.length - 10} more` : '';
209
+ violations.push(createViolation('entity-field-access-validation', 'high', node, closest
210
+ ? `Field "${propertyName}" does not exist on entity "${entityName}". Did you mean "${closest}"? Available fields: ${preview}${more}`
211
+ : `Field "${propertyName}" does not exist on entity "${entityName}". Available fields: ${preview}${more}`, `${objectName}.${propertyName}`, closest
212
+ ? { text: `Replace "${propertyName}" with "${closest}".`, example: `${objectName}.${closest}` }
213
+ : { text: `Use one of the valid fields from the "${entityName}" entity.` }));
214
+ }
215
+ /**
216
+ * Gets the valid fields for a resolved entity/query, populating entityFieldSets
217
+ * on-demand from resolved.fields when not already loaded (e.g., for query-row types
218
+ * discovered via inline expressions).
219
+ */
220
+ function getValidFields(resolved) {
221
+ let validFields = entityFieldSets.get(resolved.entityName);
222
+ if (!validFields && resolved.fields.size > 0) {
223
+ const fieldNames = Array.from(resolved.fields.keys());
224
+ entityFieldSets.set(resolved.entityName, fieldNames);
225
+ validFields = fieldNames;
226
+ }
227
+ return validFields;
228
+ }
229
+ // Traverse all member expressions and check entity-row typed variables
230
+ traverse(ast, {
231
+ MemberExpression(path) {
232
+ if (path.node.computed || !t.isIdentifier(path.node.property))
233
+ return;
234
+ const propertyName = path.node.property.name;
235
+ let resolved = resolveVariableType(path.node.object, typeContext, path);
236
+ // Fallback: if we have an entity-row variable but resolveVariableType returned null
237
+ // (fields unavailable from DB), try to get fields from entityFieldSets (populated from spec fieldMetadata)
238
+ if (!resolved && t.isIdentifier(path.node.object)) {
239
+ const varType = lookupVariableTypeInfo(path.node.object.name, typeContext, path);
240
+ if (varType?.type === 'entity-row' && varType.entityName && entityFieldSets.has(varType.entityName)) {
241
+ const fieldNames = entityFieldSets.get(varType.entityName);
242
+ const fields = new Map(fieldNames.map(n => [n, { type: 'string', fromMetadata: false }]));
243
+ resolved = { entityName: varType.entityName, fields };
244
+ }
245
+ }
246
+ if (!resolved)
247
+ return;
248
+ const validFields = getValidFields(resolved);
249
+ if (!validFields)
250
+ return;
251
+ const objectName = t.isIdentifier(path.node.object) ? path.node.object.name : '(expr)';
252
+ validateFieldAccess(path.node, resolved.entityName, validFields, objectName, propertyName);
253
+ },
254
+ OptionalMemberExpression(path) {
255
+ if (path.node.computed || !t.isIdentifier(path.node.property))
256
+ return;
257
+ const propertyName = path.node.property.name;
258
+ let resolved = resolveVariableType(path.node.object, typeContext, path);
259
+ // Same fallback for optional chaining
260
+ if (!resolved && t.isIdentifier(path.node.object)) {
261
+ const varType = lookupVariableTypeInfo(path.node.object.name, typeContext, path);
262
+ if (varType?.type === 'entity-row' && varType.entityName && entityFieldSets.has(varType.entityName)) {
263
+ const fieldNames = entityFieldSets.get(varType.entityName);
264
+ const fields = new Map(fieldNames.map(n => [n, { type: 'string', fromMetadata: false }]));
265
+ resolved = { entityName: varType.entityName, fields };
266
+ }
267
+ }
268
+ if (!resolved)
269
+ return;
270
+ const validFields = getValidFields(resolved);
271
+ if (!validFields)
272
+ return;
273
+ const objectName = t.isIdentifier(path.node.object) ? path.node.object.name : '(expr)';
274
+ validateFieldAccess(path.node, resolved.entityName, validFields, objectName, propertyName);
275
+ },
276
+ // Check for numeric coercion on GUID fields
277
+ CallExpression(path) {
278
+ if (!t.isIdentifier(path.node.callee) || !NUMERIC_COERCION_FUNCTIONS.has(path.node.callee.name))
279
+ return;
280
+ if (path.node.arguments.length === 0)
281
+ return;
282
+ const arg = path.node.arguments[0];
283
+ if (!t.isMemberExpression(arg) && !t.isOptionalMemberExpression(arg))
284
+ return;
285
+ if (arg.computed || !t.isIdentifier(arg.property) || !t.isIdentifier(arg.object))
286
+ return;
287
+ const resolved = resolveVariableType(arg.object, typeContext, path);
288
+ if (!resolved)
289
+ return;
290
+ const fieldInfo = resolved.fields.get(arg.property.name);
291
+ if (fieldInfo?.sqlType?.toLowerCase() === 'uniqueidentifier') {
292
+ violations.push(createViolation('entity-field-access-validation', 'medium', path.node, `${path.node.callee.name}(${arg.object.name}.${arg.property.name}) coerces a uniqueidentifier (GUID) to a number. GUIDs are strings, not numeric values.`, truncateCode(`${path.node.callee.name}(${arg.object.name}.${arg.property.name})`), { text: `"${arg.property.name}" is a uniqueidentifier field. Use it as a string directly.`,
293
+ example: `${arg.object.name}.${arg.property.name} // Already a string` }));
294
+ }
295
+ },
296
+ });
297
+ return violations;
298
+ }
299
+ };
300
+ EntityFieldAccessValidationRule = __decorate([
301
+ RegisterClass(BaseLintRule, 'entity-field-access-validation')
302
+ ], EntityFieldAccessValidationRule);
303
+ export { EntityFieldAccessValidationRule };
304
+ //# sourceMappingURL=entity-field-access-validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-field-access-validation.js","sourceRoot":"","sources":["../../src/runtime-rules/entity-field-access-validation.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,QAAQ,EAAY,eAAe,EAAE,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACzK,OAAO,KAAK,CAAC,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAI5C,OAAO,EAAE,WAAW,EAAiB,MAAM,iBAAiB,CAAC;AAE7D;;;;;;;;;;;;;;;;;GAiBG;AAGH;;GAEG;AACH,SAAS,sBAAsB,CAC7B,OAAe,EACf,WAAwB,EACxB,IAAc;IAEd,IAAI,OAAO,GAAG,WAAW,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IAEnD,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC3C,sCAAsC;QACtC,IAAI,OAAO,GAAoB,IAAI,CAAC;QACpC,OAAO,OAAO,EAAE,CAAC;YACf,IAAI,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;gBACzB,IAAI,MAA0B,CAAC;gBAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;gBAC1B,IAAI,CAAC,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;oBAC7C,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;gBACxB,CAAC;qBAAM,IAAI,CAAC,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC7E,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;oBAC9B,IAAI,CAAC,CAAC,oBAAoB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;wBAChE,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC;oBAC1B,CAAC;gBACH,CAAC;gBACD,IAAI,MAAM,EAAE,CAAC;oBACX,OAAO,GAAG,WAAW,CAAC,eAAe,CAAC,GAAG,MAAM,IAAI,OAAO,EAAE,CAAC,CAAC;oBAC9D,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS;wBAAE,MAAM;gBACnD,CAAC;YACH,CAAC;YACD,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,OAAO,OAAO,IAAI,IAAI,CAAC;AACzB,CAAC;AAED;;;;;;GAMG;AACH,SAAS,mBAAmB,CAC1B,UAAkB,EAClB,WAAwB,EACxB,IAAc;IAEd,+CAA+C;IAC/C,IAAI,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,sBAAsB,CAAC,UAAU,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;QAC3E,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAE1B,IAAI,OAAO,CAAC,IAAI,KAAK,YAAY,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACxD,IAAI,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YAC5B,uEAAuE;YACvE,oDAAoD;YACpD,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;gBACjC,MAAM,GAAG,WAAW,CAAC,uBAAuB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YACnE,CAAC;YACD,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;gBAC9B,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;YACpD,CAAC;YACD,4FAA4F;YAC5F,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtD,IAAI,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YAC5B,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;gBACjC,MAAM,GAAG,WAAW,CAAC,kBAAkB,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC;YAC1E,CAAC;YACD,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;gBAC9B,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,UAAU,EAAE,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;YACjF,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,iGAAiG;IACjG,wFAAwF;IACxF,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,0BAA0B,CAAC,UAAU,CAAC,CAAC,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;QAC1G,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC;QACpC,4DAA4D;QAC5D,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,0BAA0B,CAAC,SAAS,CAAC,CAAC;YAC5E,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,KAAK,SAAS;YAC3E,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;YACrC,MAAM,aAAa,GAAG,sBAAsB,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;YACvF,IAAI,aAAa,EAAE,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACrC,sEAAsE;gBACtE,IAAI,aAAa,CAAC,UAAU,EAAE,CAAC;oBAC7B,MAAM,YAAY,GAAG,WAAW,CAAC,uBAAuB,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;oBACnF,IAAI,YAAY,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;wBAC1B,OAAO,EAAE,UAAU,EAAE,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;oBACxE,CAAC;gBACH,CAAC;gBACD,IAAI,aAAa,CAAC,SAAS,EAAE,CAAC;oBAC5B,MAAM,WAAW,GAAG,WAAW,CAAC,kBAAkB,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;oBAC5E,IAAI,WAAW,IAAI,WAAW,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;wBACxC,OAAO,EAAE,SAAS,EAAE,aAAa,CAAC,SAAS,EAAE,UAAU,EAAE,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;oBAC1G,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAGM,IAAM,+BAA+B,GAArC,MAAM,+BAAgC,SAAQ,YAAY;IAC/D,IAAI,IAAI,KAAK,OAAO,gCAAgC,CAAC,CAAC,CAAC;IACvD,IAAI,SAAS,KAA+B,OAAO,KAAK,CAAC,CAAC,CAAC;IAE3D,IAAI,CAAC,GAAW,EAAE,cAAsB,EAAE,aAA6B,EAAE,QAAwB,EAAE,iBAA+B;QAChI,MAAM,UAAU,GAAgB,EAAE,CAAC;QAEnC,8EAA8E;QAC9E,MAAM,WAAW,GAAG,iBAAiB,IAAI,IAAI,WAAW,CAAC,aAAa,CAAC,CAAC;QAExE,6CAA6C;QAC7C,kFAAkF;QAClF,gFAAgF;QAChF,MAAM,eAAe,GAAG,IAAI,GAAG,EAAoB,CAAC;QACpD,uEAAuE;QACvE,MAAM,qBAAqB,GAAG,IAAI,GAAG,EAAU,CAAC;QAEhD,SAAS,kBAAkB,CAAC,UAAkB;YAC5C,IAAI,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC;gBAAE,OAAO;YAC5C,MAAM,MAAM,GAAG,WAAW,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAC;YAC/D,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;gBACpB,eAAe,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;QAED,qDAAqD;QACrD,SAAS,oBAAoB,CAAC,UAAkB;YAC9C,IAAI,CAAC,aAAa,EAAE,gBAAgB,EAAE,QAAQ;gBAAE,OAAO,KAAK,CAAC;YAC7D,OAAO,aAAa,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CACjD,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAC5E,CAAC;QACJ,CAAC;QAED,8BAA8B;QAC9B,IAAI,aAAa,EAAE,gBAAgB,EAAE,QAAQ,EAAE,CAAC;YAC9C,KAAK,MAAM,SAAS,IAAI,aAAa,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC;gBAChE,kBAAkB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBACnC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,aAAa,EAAE,MAAM,EAAE,CAAC;oBAC5E,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;gBAChF,CAAC;YACH,CAAC;QACH,CAAC;QAED,2DAA2D;QAC3D,0EAA0E;QAC1E,QAAQ,CAAC,GAAG,EAAE;YACZ,cAAc,CAAC,CAA6B;gBAC1C,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;gBAC7B,IAAI,CAAC,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;oBAC1G,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;wBAC7E,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;4BAClD,IAAI,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,YAAY,IAAI,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gCAC5H,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gCAC5C,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;4BACvC,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YACD,OAAO,EAAE,IAAI;SACoB,CAAC,CAAC;QAErC,uFAAuF;QACvF,KAAK,MAAM,UAAU,IAAI,qBAAqB,EAAE,CAAC;YAC/C,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC1E,UAAU,CAAC,IAAI,CAAC,eAAe,CAC7B,gCAAgC,EAAE,KAAK,EAAE,IAAI,EAC7C,8CAA8C,UAAU,iIAAiI,EACzL,UAAU,CACX,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,+EAA+E;QAC/E,+EAA+E;QAC/E,MAAM,cAAc,GAAG,aAAa,EAAE,gBAAgB,EAAE,OAAO,EAAE,IAAI,CACnE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CACvC,IAAI,KAAK,CAAC;QACX,IAAI,eAAe,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,cAAc;YAAE,OAAO,UAAU,CAAC;QAErE,SAAS,mBAAmB,CAC1B,IAAqD,EACrD,UAAkB,EAClB,WAAqB,EACrB,UAAkB,EAClB,YAAoB;YAEpB,IAAI,WAAW,CAAC,QAAQ,CAAC,YAAY,CAAC;gBAAE,OAAO;YAE/C,sEAAsE;YACtE,iFAAiF;YACjF,IAAI,qBAAqB,CAAC,GAAG,CAAC,YAAY,CAAC;gBAAE,OAAO;YAEpD,MAAM,OAAO,GAAG,gBAAgB,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;YAC5D,IAAI,OAAO,EAAE,CAAC;gBACZ,UAAU,CAAC,IAAI,CAAC,eAAe,CAC7B,gCAAgC,EAAE,QAAQ,EAAE,IAAI,EAChD,UAAU,YAAY,gBAAgB,UAAU,yCAAyC,OAAO,IAAI,EACpG,GAAG,UAAU,IAAI,YAAY,EAAE,EAC/B,EAAE,IAAI,EAAE,4BAA4B,OAAO,iDAAiD;oBAC1F,OAAO,EAAE,eAAe,UAAU,IAAI,YAAY,aAAa,UAAU,IAAI,OAAO,EAAE,EAAE,CAC3F,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YAED,MAAM,OAAO,GAAG,gBAAgB,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;YAC5D,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpD,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,WAAW,CAAC,MAAM,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YAEnF,UAAU,CAAC,IAAI,CAAC,eAAe,CAC7B,gCAAgC,EAAE,MAAM,EAAE,IAAI,EAC9C,OAAO;gBACL,CAAC,CAAC,UAAU,YAAY,+BAA+B,UAAU,oBAAoB,OAAO,wBAAwB,OAAO,GAAG,IAAI,EAAE;gBACpI,CAAC,CAAC,UAAU,YAAY,+BAA+B,UAAU,wBAAwB,OAAO,GAAG,IAAI,EAAE,EAC3G,GAAG,UAAU,IAAI,YAAY,EAAE,EAC/B,OAAO;gBACL,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,YAAY,WAAW,OAAO,IAAI,EAAE,OAAO,EAAE,GAAG,UAAU,IAAI,OAAO,EAAE,EAAE;gBAC/F,CAAC,CAAC,EAAE,IAAI,EAAE,yCAAyC,UAAU,WAAW,EAAE,CAC7E,CAAC,CAAC;QACL,CAAC;QAED;;;;WAIG;QACH,SAAS,cAAc,CAAC,QAAoE;YAC1F,IAAI,WAAW,GAAG,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YAC3D,IAAI,CAAC,WAAW,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;gBAC7C,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;gBACtD,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;gBACrD,WAAW,GAAG,UAAU,CAAC;YAC3B,CAAC;YACD,OAAO,WAAW,CAAC;QACrB,CAAC;QAED,uEAAuE;QACvE,QAAQ,CAAC,GAAG,EAAE;YACZ,gBAAgB,CAAC,IAAkC;gBACjD,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;oBAAE,OAAO;gBACtE,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAE7C,IAAI,QAAQ,GAAG,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;gBACxE,oFAAoF;gBACpF,2GAA2G;gBAC3G,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;oBAClD,MAAM,OAAO,GAAG,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;oBACjF,IAAI,OAAO,EAAE,IAAI,KAAK,YAAY,IAAI,OAAO,CAAC,UAAU,IAAI,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;wBACpG,MAAM,UAAU,GAAG,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAE,CAAC;wBAC5D,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAmB,CAAC,CAAC,CAAC,CAAC;wBAC3G,QAAQ,GAAG,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;oBACxD,CAAC;gBACH,CAAC;gBACD,IAAI,CAAC,QAAQ;oBAAE,OAAO;gBAEtB,MAAM,WAAW,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;gBAC7C,IAAI,CAAC,WAAW;oBAAE,OAAO;gBAEzB,MAAM,UAAU,GAAG,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;gBACvF,mBAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;YAC7F,CAAC;YAED,wBAAwB,CAAC,IAA0C;gBACjE,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;oBAAE,OAAO;gBACtE,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAE7C,IAAI,QAAQ,GAAG,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;gBACxE,sCAAsC;gBACtC,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;oBAClD,MAAM,OAAO,GAAG,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;oBACjF,IAAI,OAAO,EAAE,IAAI,KAAK,YAAY,IAAI,OAAO,CAAC,UAAU,IAAI,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;wBACpG,MAAM,UAAU,GAAG,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAE,CAAC;wBAC5D,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAmB,CAAC,CAAC,CAAC,CAAC;wBAC3G,QAAQ,GAAG,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;oBACxD,CAAC;gBACH,CAAC;gBACD,IAAI,CAAC,QAAQ;oBAAE,OAAO;gBAEtB,MAAM,WAAW,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;gBAC7C,IAAI,CAAC,WAAW;oBAAE,OAAO;gBAEzB,MAAM,UAAU,GAAG,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;gBACvF,mBAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;YAC7F,CAAC;YAED,4CAA4C;YAC5C,cAAc,CAAC,IAAgC;gBAC7C,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;oBAAE,OAAO;gBACxG,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;oBAAE,OAAO;gBAE7C,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBACnC,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,0BAA0B,CAAC,GAAG,CAAC;oBAAE,OAAO;gBAC7E,IAAI,GAAG,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC;oBAAE,OAAO;gBAEzF,MAAM,QAAQ,GAAG,mBAAmB,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;gBACpE,IAAI,CAAC,QAAQ;oBAAE,OAAO;gBAEtB,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACzD,IAAI,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,kBAAkB,EAAE,CAAC;oBAC7D,UAAU,CAAC,IAAI,CAAC,eAAe,CAC7B,gCAAgC,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EACrD,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,yFAAyF,EACzJ,YAAY,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,EACjF,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,6DAA6D;wBACxF,OAAO,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,uBAAuB,EAAE,CAC5E,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;SACF,CAAC,CAAC;QAEH,OAAO,UAAU,CAAC;IACpB,CAAC;CACF,CAAA;AApNY,+BAA+B;IAD3C,aAAa,CAAC,YAAY,EAAE,gCAAgC,CAAC;GACjD,+BAA+B,CAoN3C"}
@@ -0,0 +1,22 @@
1
+ import * as t from '@babel/types';
2
+ import { BaseLintRule } from '../lint-rule.js';
3
+ import { Violation } from '../component-linter.js';
4
+ import { ComponentSpec } from '@memberjunction/interactive-component-types';
5
+ /**
6
+ * Rule: event-parameter-validation
7
+ *
8
+ * Validates that event callback handlers access the correct properties from the
9
+ * event object, as defined by the component spec's event parameter types.
10
+ *
11
+ * Catches LLM mistakes like using `e.data` (AG Grid convention) instead of
12
+ * `e.record` (MJ DataGrid convention).
13
+ *
14
+ * Severity: high
15
+ * Applies to: all components
16
+ */
17
+ export declare class EventParameterValidationRule extends BaseLintRule {
18
+ get Name(): string;
19
+ get AppliesTo(): 'all' | 'child' | 'root';
20
+ Test(ast: t.File, _componentName: string, componentSpec?: ComponentSpec): Violation[];
21
+ }
22
+ //# sourceMappingURL=event-parameter-validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-parameter-validation.d.ts","sourceRoot":"","sources":["../../src/runtime-rules/event-parameter-validation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,cAAc,CAAC;AAElC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAkB,MAAM,6CAA6C,CAAC;AAI5F;;;;;;;;;;;GAWG;AACH,qBACa,4BAA6B,SAAQ,YAAY;IAC5D,IAAI,IAAI,WAAwB;IAChC,IAAI,SAAS,IAAI,KAAK,GAAG,OAAO,GAAG,MAAM,CAAkB;IAE3D,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,aAAa,GAAG,SAAS,EAAE;CAiBtF"}