@contentful/experience-design-system-extraction 2.36.2-dev-build-a6f80ae6.0 → 2.36.2-dev-build-450d231a.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 (292) hide show
  1. package/dist/package.json +1 -1
  2. package/dist/src/extract/controller/extract-controller.d.ts +10 -0
  3. package/dist/src/extract/controller/extract-controller.js +33 -0
  4. package/dist/src/extract/controller/helpers/validate-endpoint-request.d.ts +2 -0
  5. package/dist/src/extract/controller/helpers/validate-endpoint-request.js +24 -0
  6. package/dist/src/extract/{astro.d.ts → framework-adapters/astro/extractor.d.ts} +1 -1
  7. package/dist/src/extract/framework-adapters/astro/extractor.js +45 -0
  8. package/dist/src/extract/framework-adapters/astro/frontmatter.d.ts +11 -0
  9. package/dist/src/extract/framework-adapters/astro/frontmatter.js +96 -0
  10. package/dist/src/extract/framework-adapters/astro/helpers/collect-astro-props-bindings.d.ts +4 -0
  11. package/dist/src/extract/framework-adapters/astro/helpers/collect-astro-props-bindings.js +47 -0
  12. package/dist/src/extract/framework-adapters/astro/slots.d.ts +7 -0
  13. package/dist/src/extract/framework-adapters/astro/slots.js +44 -0
  14. package/dist/src/extract/{react.d.ts → framework-adapters/react/extractor.d.ts} +1 -1
  15. package/dist/src/extract/framework-adapters/react/extractor.js +31 -0
  16. package/dist/src/extract/framework-adapters/react/helpers/collect-dom-wrapper-contexts.d.ts +4 -0
  17. package/dist/src/extract/framework-adapters/react/helpers/collect-dom-wrapper-contexts.js +73 -0
  18. package/dist/src/extract/framework-adapters/react/helpers/collect-prop-dataflow.d.ts +14 -0
  19. package/dist/src/extract/framework-adapters/react/helpers/collect-prop-dataflow.js +220 -0
  20. package/dist/src/extract/framework-adapters/react/helpers/collect-react-impl-hints.d.ts +5 -0
  21. package/dist/src/extract/framework-adapters/react/helpers/collect-react-impl-hints.js +32 -0
  22. package/dist/src/extract/framework-adapters/react/helpers/detect-dom-is-pure-wrapper.d.ts +2 -0
  23. package/dist/src/extract/framework-adapters/react/helpers/detect-dom-is-pure-wrapper.js +59 -0
  24. package/dist/src/extract/framework-adapters/react/helpers/detect-dom-type-patterns.d.ts +8 -0
  25. package/dist/src/extract/framework-adapters/react/helpers/detect-dom-type-patterns.js +29 -0
  26. package/dist/src/extract/framework-adapters/react/helpers/detect-omit-wrapped-custom-props.d.ts +2 -0
  27. package/dist/src/extract/framework-adapters/react/helpers/detect-omit-wrapped-custom-props.js +64 -0
  28. package/dist/src/extract/framework-adapters/react/helpers/detect-pick-type-patterns.d.ts +4 -0
  29. package/dist/src/extract/framework-adapters/react/helpers/detect-pick-type-patterns.js +64 -0
  30. package/dist/src/extract/framework-adapters/react/helpers/detect-react-polymorphic.d.ts +5 -0
  31. package/dist/src/extract/framework-adapters/react/helpers/detect-react-polymorphic.js +170 -0
  32. package/dist/src/extract/framework-adapters/react/helpers/dom-attribute-surfaces.d.ts +15 -0
  33. package/dist/src/extract/framework-adapters/react/helpers/dom-attribute-surfaces.js +231 -0
  34. package/dist/src/extract/framework-adapters/react/helpers/extract-binding-fallback-props.d.ts +4 -0
  35. package/dist/src/extract/framework-adapters/react/helpers/extract-binding-fallback-props.js +50 -0
  36. package/dist/src/extract/framework-adapters/react/helpers/extract-from-react-source-file.d.ts +5 -0
  37. package/dist/src/extract/framework-adapters/react/helpers/extract-from-react-source-file.js +23 -0
  38. package/dist/src/extract/framework-adapters/react/helpers/extract-react-allowed-components.d.ts +2 -0
  39. package/dist/src/extract/framework-adapters/react/helpers/extract-react-allowed-components.js +25 -0
  40. package/dist/src/extract/framework-adapters/react/helpers/extract-react-binding-defaults.d.ts +6 -0
  41. package/dist/src/extract/framework-adapters/react/helpers/extract-react-binding-defaults.js +48 -0
  42. package/dist/src/extract/framework-adapters/react/helpers/extract-react-component-from-export.d.ts +15 -0
  43. package/dist/src/extract/framework-adapters/react/helpers/extract-react-component-from-export.js +106 -0
  44. package/dist/src/extract/framework-adapters/react/helpers/extract-react-prop-types.d.ts +3 -0
  45. package/dist/src/extract/framework-adapters/react/helpers/extract-react-prop-types.js +64 -0
  46. package/dist/src/extract/framework-adapters/react/helpers/extract-react-props-from-type.d.ts +15 -0
  47. package/dist/src/extract/framework-adapters/react/helpers/extract-react-props-from-type.js +318 -0
  48. package/dist/src/extract/framework-adapters/react/helpers/extract-react-slots.d.ts +6 -0
  49. package/dist/src/extract/framework-adapters/react/helpers/extract-react-slots.js +44 -0
  50. package/dist/src/extract/framework-adapters/react/helpers/filter-impl-alias-props.d.ts +4 -0
  51. package/dist/src/extract/framework-adapters/react/helpers/filter-impl-alias-props.js +52 -0
  52. package/dist/src/extract/framework-adapters/react/helpers/infer-primitive-dom-props.d.ts +6 -0
  53. package/dist/src/extract/framework-adapters/react/helpers/infer-primitive-dom-props.js +69 -0
  54. package/dist/src/extract/framework-adapters/react/helpers/resolve-component-function.d.ts +4 -0
  55. package/dist/src/extract/framework-adapters/react/helpers/resolve-component-function.js +131 -0
  56. package/dist/src/extract/framework-adapters/react/helpers/resolve-react-prop-forwarding.d.ts +8 -0
  57. package/dist/src/extract/framework-adapters/react/helpers/resolve-react-prop-forwarding.js +22 -0
  58. package/dist/src/extract/framework-adapters/react/helpers/resolve-react-props-type.d.ts +14 -0
  59. package/dist/src/extract/framework-adapters/react/helpers/resolve-react-props-type.js +86 -0
  60. package/dist/src/extract/framework-adapters/react/helpers/synthesize-react-structural-slots.d.ts +8 -0
  61. package/dist/src/extract/framework-adapters/react/helpers/synthesize-react-structural-slots.js +44 -0
  62. package/dist/src/extract/framework-adapters/shared/helpers/build-component-lookup-maps.d.ts +5 -0
  63. package/dist/src/extract/framework-adapters/shared/helpers/build-component-lookup-maps.js +10 -0
  64. package/dist/src/extract/framework-adapters/shared/helpers/collect-jsdoc-slot-comments.d.ts +2 -0
  65. package/dist/src/extract/framework-adapters/shared/helpers/collect-jsdoc-slot-comments.js +13 -0
  66. package/dist/src/extract/{file-extraction-workers.d.ts → framework-adapters/shared/helpers/file-processing/file-workers.d.ts} +1 -13
  67. package/dist/src/extract/{file-extraction-workers.js → framework-adapters/shared/helpers/file-processing/file-workers.js} +0 -19
  68. package/dist/src/extract/framework-adapters/shared/helpers/file-processing/project-source-files.d.ts +5 -0
  69. package/dist/src/extract/framework-adapters/shared/helpers/file-processing/project-source-files.js +13 -0
  70. package/dist/src/extract/framework-adapters/shared/helpers/file-processing/result-normalizer.d.ts +6 -0
  71. package/dist/src/extract/framework-adapters/shared/helpers/file-processing/result-normalizer.js +6 -0
  72. package/dist/src/extract/framework-adapters/shared/helpers/find-tsx-workspace-package.d.ts +2 -0
  73. package/dist/src/extract/framework-adapters/shared/helpers/find-tsx-workspace-package.js +62 -0
  74. package/dist/src/extract/{source-line-metadata.d.ts → framework-adapters/shared/helpers/get-node-source-lines.d.ts} +1 -1
  75. package/dist/src/extract/framework-adapters/shared/helpers/resolve-tsx-tsconfig-path.d.ts +7 -0
  76. package/dist/src/extract/framework-adapters/shared/helpers/resolve-tsx-tsconfig-path.js +93 -0
  77. package/dist/src/extract/framework-adapters/shared/helpers/resolve-tsx-workspace-imports.d.ts +6 -0
  78. package/dist/src/extract/framework-adapters/shared/helpers/resolve-tsx-workspace-imports.js +58 -0
  79. package/dist/src/extract/framework-adapters/shared/helpers/tsx-node-utils.d.ts +13 -0
  80. package/dist/src/extract/framework-adapters/shared/helpers/tsx-node-utils.js +76 -0
  81. package/dist/src/extract/framework-adapters/shared/helpers/tsx-renderable-exports.d.ts +12 -0
  82. package/dist/src/extract/framework-adapters/shared/helpers/tsx-renderable-exports.js +35 -0
  83. package/dist/src/extract/framework-adapters/shared/helpers/tsx-shared.d.ts +14 -0
  84. package/dist/src/extract/framework-adapters/shared/helpers/tsx-shared.js +54 -0
  85. package/dist/src/extract/{stencil.d.ts → framework-adapters/stencil/extractor.d.ts} +1 -1
  86. package/dist/src/extract/framework-adapters/stencil/extractor.js +82 -0
  87. package/dist/src/extract/framework-adapters/stencil/helpers/detect-stencil-class.d.ts +7 -0
  88. package/dist/src/extract/framework-adapters/stencil/helpers/detect-stencil-class.js +32 -0
  89. package/dist/src/extract/framework-adapters/stencil/helpers/extract-stencil-props.d.ts +5 -0
  90. package/dist/src/extract/framework-adapters/stencil/helpers/extract-stencil-props.js +62 -0
  91. package/dist/src/extract/framework-adapters/stencil/helpers/extract-stencil-slots.d.ts +6 -0
  92. package/dist/src/extract/framework-adapters/stencil/helpers/extract-stencil-slots.js +87 -0
  93. package/dist/src/extract/framework-adapters/stencil/helpers/stencil-prop-helpers.d.ts +5 -0
  94. package/dist/src/extract/framework-adapters/stencil/helpers/stencil-prop-helpers.js +39 -0
  95. package/dist/src/extract/{svelte.d.ts → framework-adapters/svelte/extractor.d.ts} +2 -1
  96. package/dist/src/extract/framework-adapters/svelte/extractor.js +27 -0
  97. package/dist/src/extract/framework-adapters/svelte/helpers/classify-svelte-props-annotation.d.ts +6 -0
  98. package/dist/src/extract/framework-adapters/svelte/helpers/classify-svelte-props-annotation.js +51 -0
  99. package/dist/src/extract/framework-adapters/svelte/helpers/collect-svelte-type-references.d.ts +3 -0
  100. package/dist/src/extract/framework-adapters/svelte/helpers/collect-svelte-type-references.js +52 -0
  101. package/dist/src/extract/framework-adapters/svelte/helpers/extract-from-svelte-file.d.ts +7 -0
  102. package/dist/src/extract/framework-adapters/svelte/helpers/extract-from-svelte-file.js +90 -0
  103. package/dist/src/extract/framework-adapters/svelte/helpers/extract-svelte-ast-type-members.d.ts +15 -0
  104. package/dist/src/extract/framework-adapters/svelte/helpers/extract-svelte-ast-type-members.js +46 -0
  105. package/dist/src/extract/framework-adapters/svelte/helpers/extract-svelte-declaration-data.d.ts +7 -0
  106. package/dist/src/extract/framework-adapters/svelte/helpers/extract-svelte-declaration-data.js +64 -0
  107. package/dist/src/extract/framework-adapters/svelte/helpers/extract-svelte-external-type-members.d.ts +4 -0
  108. package/dist/src/extract/framework-adapters/svelte/helpers/extract-svelte-external-type-members.js +58 -0
  109. package/dist/src/extract/framework-adapters/svelte/helpers/extract-svelte-from-destructure.d.ts +4 -0
  110. package/dist/src/extract/framework-adapters/svelte/helpers/extract-svelte-from-destructure.js +85 -0
  111. package/dist/src/extract/framework-adapters/svelte/helpers/extract-svelte-props.d.ts +22 -0
  112. package/dist/src/extract/framework-adapters/svelte/helpers/extract-svelte-props.js +55 -0
  113. package/dist/src/extract/framework-adapters/svelte/helpers/extract-svelte-template-slots.d.ts +7 -0
  114. package/dist/src/extract/framework-adapters/svelte/helpers/extract-svelte-template-slots.js +63 -0
  115. package/dist/src/extract/framework-adapters/svelte/helpers/extract-svelte-type-member-props.d.ts +3 -0
  116. package/dist/src/extract/framework-adapters/svelte/helpers/extract-svelte-type-member-props.js +31 -0
  117. package/dist/src/extract/framework-adapters/svelte/helpers/find-svelte-script-declarations.d.ts +8 -0
  118. package/dist/src/extract/framework-adapters/svelte/helpers/find-svelte-script-declarations.js +91 -0
  119. package/dist/src/extract/framework-adapters/svelte/helpers/get-svelte-component-name.d.ts +1 -0
  120. package/dist/src/extract/framework-adapters/svelte/helpers/get-svelte-component-name.js +26 -0
  121. package/dist/src/extract/framework-adapters/svelte/helpers/render-svelte-type-strings.d.ts +3 -0
  122. package/dist/src/extract/framework-adapters/svelte/helpers/render-svelte-type-strings.js +91 -0
  123. package/dist/src/extract/framework-adapters/svelte/helpers/render-svelte-type.d.ts +11 -0
  124. package/dist/src/extract/framework-adapters/svelte/helpers/render-svelte-type.js +68 -0
  125. package/dist/src/extract/framework-adapters/svelte/helpers/resolve-dts-location.d.ts +1 -0
  126. package/dist/src/extract/framework-adapters/svelte/helpers/resolve-dts-location.js +90 -0
  127. package/dist/src/extract/framework-adapters/svelte/helpers/resolve-svelte-allowed-components.d.ts +2 -0
  128. package/dist/src/extract/framework-adapters/svelte/helpers/resolve-svelte-allowed-components.js +20 -0
  129. package/dist/src/extract/framework-adapters/svelte/helpers/resolve-svelte-external-type-readers.d.ts +3 -0
  130. package/dist/src/extract/framework-adapters/svelte/helpers/resolve-svelte-external-type-readers.js +68 -0
  131. package/dist/src/extract/framework-adapters/svelte/helpers/resolve-svelte-type-checker.d.ts +4 -0
  132. package/dist/src/extract/framework-adapters/svelte/helpers/resolve-svelte-type-checker.js +68 -0
  133. package/dist/src/extract/framework-adapters/svelte/helpers/resolve-svelte-type-members.d.ts +6 -0
  134. package/dist/src/extract/framework-adapters/svelte/helpers/resolve-svelte-type-members.js +30 -0
  135. package/dist/src/extract/framework-adapters/svelte/helpers/resolve-svelte-unresolved-retry.d.ts +13 -0
  136. package/dist/src/extract/framework-adapters/svelte/helpers/resolve-svelte-unresolved-retry.js +192 -0
  137. package/dist/src/extract/framework-adapters/svelte/types/svelte-ast-node.d.ts +12 -0
  138. package/dist/src/extract/framework-adapters/svelte/types/svelte-ast-node.js +1 -0
  139. package/dist/src/extract/{vue.d.ts → framework-adapters/vue/extractor.d.ts} +1 -1
  140. package/dist/src/extract/framework-adapters/vue/extractor.js +61 -0
  141. package/dist/src/extract/framework-adapters/vue/helpers/extract-vue-object-props.d.ts +3 -0
  142. package/dist/src/extract/framework-adapters/vue/helpers/extract-vue-object-props.js +67 -0
  143. package/dist/src/extract/framework-adapters/vue/helpers/extract-vue-options-props.d.ts +4 -0
  144. package/dist/src/extract/framework-adapters/vue/helpers/extract-vue-options-props.js +72 -0
  145. package/dist/src/extract/framework-adapters/vue/helpers/extract-vue-setup-object-props.d.ts +8 -0
  146. package/dist/src/extract/framework-adapters/vue/helpers/extract-vue-setup-object-props.js +64 -0
  147. package/dist/src/extract/framework-adapters/vue/helpers/extract-vue-setup-props.d.ts +2 -0
  148. package/dist/src/extract/framework-adapters/vue/helpers/extract-vue-setup-props.js +66 -0
  149. package/dist/src/extract/framework-adapters/vue/helpers/extract-vue-slots.d.ts +24 -0
  150. package/dist/src/extract/framework-adapters/vue/helpers/extract-vue-slots.js +56 -0
  151. package/dist/src/extract/framework-adapters/vue/helpers/resolve-vue-component-name.d.ts +2 -0
  152. package/dist/src/extract/framework-adapters/vue/helpers/resolve-vue-component-name.js +9 -0
  153. package/dist/src/extract/framework-adapters/vue/helpers/resolve-workspace-module.d.ts +1 -0
  154. package/dist/src/extract/framework-adapters/vue/helpers/resolve-workspace-module.js +76 -0
  155. package/dist/src/extract/framework-adapters/vue/helpers/workspace-package-dirs.d.ts +2 -0
  156. package/dist/src/extract/framework-adapters/vue/helpers/workspace-package-dirs.js +77 -0
  157. package/dist/src/extract/{vue-tsx.d.ts → framework-adapters/vue-tsx/extractor.d.ts} +1 -1
  158. package/dist/src/extract/framework-adapters/vue-tsx/extractor.js +82 -0
  159. package/dist/src/extract/framework-adapters/vue-tsx/helpers/extract-vue-tsx-props.d.ts +5 -0
  160. package/dist/src/extract/framework-adapters/vue-tsx/helpers/extract-vue-tsx-props.js +189 -0
  161. package/dist/src/extract/framework-adapters/vue-tsx/helpers/extract-vue-tsx-slots.d.ts +4 -0
  162. package/dist/src/extract/framework-adapters/vue-tsx/helpers/extract-vue-tsx-slots.js +91 -0
  163. package/dist/src/extract/framework-adapters/vue-tsx/helpers/resolve-ast-object.d.ts +11 -0
  164. package/dist/src/extract/framework-adapters/vue-tsx/helpers/resolve-ast-object.js +95 -0
  165. package/dist/src/extract/{web-components.d.ts → framework-adapters/web-components/extractor.d.ts} +1 -1
  166. package/dist/src/extract/framework-adapters/web-components/extractor.js +55 -0
  167. package/dist/src/extract/framework-adapters/web-components/helpers/collect-wc-html-templates.d.ts +4 -0
  168. package/dist/src/extract/framework-adapters/web-components/helpers/collect-wc-html-templates.js +67 -0
  169. package/dist/src/extract/framework-adapters/web-components/helpers/detect-wc-non-public-members.d.ts +9 -0
  170. package/dist/src/extract/framework-adapters/web-components/helpers/detect-wc-non-public-members.js +11 -0
  171. package/dist/src/extract/framework-adapters/web-components/helpers/extract-wc-accessor-props.d.ts +3 -0
  172. package/dist/src/extract/framework-adapters/web-components/helpers/extract-wc-accessor-props.js +65 -0
  173. package/dist/src/extract/framework-adapters/web-components/helpers/extract-wc-class-properties.d.ts +3 -0
  174. package/dist/src/extract/framework-adapters/web-components/helpers/extract-wc-class-properties.js +60 -0
  175. package/dist/src/extract/framework-adapters/web-components/helpers/extract-wc-inheritance.d.ts +4 -0
  176. package/dist/src/extract/framework-adapters/web-components/helpers/extract-wc-inheritance.js +16 -0
  177. package/dist/src/extract/framework-adapters/web-components/helpers/extract-wc-jsdoc-attr-props.d.ts +3 -0
  178. package/dist/src/extract/framework-adapters/web-components/helpers/extract-wc-jsdoc-attr-props.js +24 -0
  179. package/dist/src/extract/framework-adapters/web-components/helpers/extract-wc-observed-attrs.d.ts +3 -0
  180. package/dist/src/extract/framework-adapters/web-components/helpers/extract-wc-observed-attrs.js +27 -0
  181. package/dist/src/extract/framework-adapters/web-components/helpers/extract-wc-slots.d.ts +6 -0
  182. package/dist/src/extract/framework-adapters/web-components/helpers/extract-wc-slots.js +56 -0
  183. package/dist/src/extract/framework-adapters/web-components/helpers/extract-wc-template-content.d.ts +4 -0
  184. package/dist/src/extract/framework-adapters/web-components/helpers/extract-wc-template-content.js +49 -0
  185. package/dist/src/extract/framework-adapters/web-components/helpers/merge-wc-prop-lists.d.ts +9 -0
  186. package/dist/src/extract/framework-adapters/web-components/helpers/merge-wc-prop-lists.js +19 -0
  187. package/dist/src/extract/framework-adapters/web-components/helpers/resolve-wc-base-class.d.ts +2 -0
  188. package/dist/src/extract/framework-adapters/web-components/helpers/resolve-wc-base-class.js +59 -0
  189. package/dist/src/extract/framework-adapters/web-components/helpers/resolve-wc-decorator-tag.d.ts +2 -0
  190. package/dist/src/extract/framework-adapters/web-components/helpers/resolve-wc-decorator-tag.js +54 -0
  191. package/dist/src/extract/framework-adapters/web-components/helpers/resolve-wc-import-source.d.ts +7 -0
  192. package/dist/src/extract/framework-adapters/web-components/helpers/resolve-wc-import-source.js +47 -0
  193. package/dist/src/extract/framework-adapters/web-components/helpers/resolve-wc-import.d.ts +4 -0
  194. package/dist/src/extract/framework-adapters/web-components/helpers/resolve-wc-import.js +93 -0
  195. package/dist/src/extract/framework-adapters/web-components/helpers/resolve-wc-sibling-definition.d.ts +4 -0
  196. package/dist/src/extract/framework-adapters/web-components/helpers/resolve-wc-sibling-definition.js +79 -0
  197. package/dist/src/extract/framework-adapters/web-components/helpers/resolve-wc-tag-name.d.ts +7 -0
  198. package/dist/src/extract/framework-adapters/web-components/helpers/resolve-wc-tag-name.js +62 -0
  199. package/dist/src/extract/helpers/evidence/ast/collect-structural-jsx-evidence.d.ts +5 -0
  200. package/dist/src/extract/helpers/evidence/ast/collect-structural-jsx-evidence.js +63 -0
  201. package/dist/src/extract/helpers/evidence/ast/detect-react-node-types.d.ts +2 -0
  202. package/dist/src/extract/helpers/evidence/ast/detect-react-node-types.js +24 -0
  203. package/dist/src/extract/helpers/evidence/ast/get-jsx-ast-data.d.ts +14 -0
  204. package/dist/src/extract/helpers/evidence/ast/get-jsx-ast-data.js +85 -0
  205. package/dist/src/extract/helpers/evidence/collect-jsx-component-references.d.ts +5 -0
  206. package/dist/src/extract/helpers/evidence/collect-jsx-component-references.js +52 -0
  207. package/dist/src/extract/helpers/evidence/detect-slot-from-prop.d.ts +16 -0
  208. package/dist/src/extract/helpers/evidence/detect-slot-from-prop.js +39 -0
  209. package/dist/src/extract/orchestrator/execute-extraction-orchestrator.d.ts +13 -0
  210. package/dist/src/extract/orchestrator/execute-extraction-orchestrator.js +17 -0
  211. package/dist/src/{pre-classify.d.ts → extract/services/classification/classify-component-props.d.ts} +3 -5
  212. package/dist/src/{pre-classify.js → extract/services/classification/classify-component-props.js} +8 -100
  213. package/dist/src/extract/services/classification/helpers/check-prop-types.d.ts +7 -0
  214. package/dist/src/extract/services/classification/helpers/check-prop-types.js +22 -0
  215. package/dist/src/extract/services/classification/helpers/detect-dom-props.d.ts +2 -0
  216. package/dist/src/extract/services/classification/helpers/detect-dom-props.js +63 -0
  217. package/dist/src/extract/services/deduplication/deduplicate-components.d.ts +2 -0
  218. package/dist/src/extract/services/deduplication/deduplicate-components.js +58 -0
  219. package/dist/src/extract/services/deduplication/helpers/component-path-analysis.d.ts +10 -0
  220. package/dist/src/extract/services/deduplication/helpers/component-path-analysis.js +85 -0
  221. package/dist/src/extract/services/deduplication/helpers/component-path-scoring.d.ts +10 -0
  222. package/dist/src/extract/services/deduplication/helpers/component-path-scoring.js +73 -0
  223. package/dist/src/extract/services/extraction/extract-components.d.ts +3 -0
  224. package/dist/src/extract/services/extraction/extract-components.js +19 -0
  225. package/dist/src/extract/services/extraction/helpers/collect-sveltekit-route-exclusions.d.ts +2 -0
  226. package/dist/src/extract/services/extraction/helpers/collect-sveltekit-route-exclusions.js +18 -0
  227. package/dist/src/extract/services/extraction/helpers/filter-hook-components.d.ts +6 -0
  228. package/dist/src/extract/services/extraction/helpers/filter-hook-components.js +18 -0
  229. package/dist/src/extract/services/extraction/helpers/register-extractors.d.ts +8 -0
  230. package/dist/src/extract/services/extraction/helpers/register-extractors.js +71 -0
  231. package/dist/src/extract/services/extraction/helpers/run-extractor-batches.d.ts +4 -0
  232. package/dist/src/extract/services/extraction/helpers/run-extractor-batches.js +24 -0
  233. package/dist/src/extract/services/quality/evaluate-extraction-quality.d.ts +4 -0
  234. package/dist/src/extract/services/quality/evaluate-extraction-quality.js +61 -0
  235. package/dist/src/extract/services/quality/helpers/authorability/evaluate-authorability.d.ts +28 -0
  236. package/dist/src/extract/services/quality/helpers/authorability/evaluate-authorability.js +67 -0
  237. package/dist/src/extract/services/quality/helpers/inspection/detect-data-wrapper-patterns.d.ts +16 -0
  238. package/dist/src/extract/services/quality/helpers/inspection/detect-data-wrapper-patterns.js +63 -0
  239. package/dist/src/extract/{source-inspection.d.ts → services/quality/helpers/inspection/inspect-component-source.d.ts} +3 -6
  240. package/dist/src/extract/{source-inspection.js → services/quality/helpers/inspection/inspect-component-source.js} +5 -65
  241. package/dist/src/extract/{validate.d.ts → services/quality/helpers/inspection/validate-extracted-components.d.ts} +1 -1
  242. package/dist/src/extract/services/quality/helpers/scoring/collect-scoring-inputs.d.ts +14 -0
  243. package/dist/src/extract/{scoring.js → services/quality/helpers/scoring/collect-scoring-inputs.js} +10 -24
  244. package/dist/src/extract/services/quality/helpers/scoring/compute-extraction-score.d.ts +6 -0
  245. package/dist/src/extract/services/quality/helpers/scoring/compute-extraction-score.js +12 -0
  246. package/dist/src/extract/types/classification.d.ts +4 -0
  247. package/dist/src/extract/types/classification.js +1 -0
  248. package/dist/src/extract/types/component-extractor.d.ts +7 -0
  249. package/dist/src/extract/types/component-extractor.js +1 -0
  250. package/dist/src/{types.d.ts → extract/types/component.d.ts} +0 -22
  251. package/dist/src/extract/types/component.js +1 -0
  252. package/dist/src/extract/types/contract.d.ts +16 -0
  253. package/dist/src/extract/types/contract.js +1 -0
  254. package/dist/src/extract/types/display.d.ts +3 -0
  255. package/dist/src/{types.js → extract/types/display.js} +1 -1
  256. package/dist/src/extract/types/options.d.ts +15 -0
  257. package/dist/src/extract/types/options.js +1 -0
  258. package/dist/src/extract/types/scoring.d.ts +9 -0
  259. package/dist/src/extract/types/scoring.js +1 -0
  260. package/dist/src/extract/types/source-inspection.d.ts +5 -0
  261. package/dist/src/extract/types/source-inspection.js +1 -0
  262. package/dist/src/index.d.ts +27 -21
  263. package/dist/src/index.js +21 -17
  264. package/package.json +1 -1
  265. package/dist/src/extract/astro.js +0 -226
  266. package/dist/src/extract/non-authorable-filter.d.ts +0 -17
  267. package/dist/src/extract/non-authorable-filter.js +0 -60
  268. package/dist/src/extract/pipeline.d.ts +0 -7
  269. package/dist/src/extract/pipeline.js +0 -343
  270. package/dist/src/extract/react.js +0 -2069
  271. package/dist/src/extract/scoring.d.ts +0 -12
  272. package/dist/src/extract/slot-detection.d.ts +0 -35
  273. package/dist/src/extract/slot-detection.js +0 -98
  274. package/dist/src/extract/stencil.js +0 -312
  275. package/dist/src/extract/structural-slot-evidence.d.ts +0 -63
  276. package/dist/src/extract/structural-slot-evidence.js +0 -278
  277. package/dist/src/extract/svelte.js +0 -1309
  278. package/dist/src/extract/tsx-shared.d.ts +0 -37
  279. package/dist/src/extract/tsx-shared.js +0 -368
  280. package/dist/src/extract/vue-tsx.js +0 -449
  281. package/dist/src/extract/vue.js +0 -605
  282. package/dist/src/extract/web-components.js +0 -863
  283. /package/dist/src/extract/{source-line-metadata.js → framework-adapters/shared/helpers/get-node-source-lines.js} +0 -0
  284. /package/dist/src/extract/{resolve-local-module.d.ts → framework-adapters/shared/helpers/resolve-import-file-path.d.ts} +0 -0
  285. /package/dist/src/extract/{resolve-local-module.js → framework-adapters/shared/helpers/resolve-import-file-path.js} +0 -0
  286. /package/dist/src/extract/{resolve-type-property.d.ts → framework-adapters/shared/helpers/resolve-type-symbol.d.ts} +0 -0
  287. /package/dist/src/extract/{resolve-type-property.js → framework-adapters/shared/helpers/resolve-type-symbol.js} +0 -0
  288. /package/dist/src/extract/{slot-allowed-components.d.ts → helpers/evidence/collect-allowed-component-names.d.ts} +0 -0
  289. /package/dist/src/extract/{slot-allowed-components.js → helpers/evidence/collect-allowed-component-names.js} +0 -0
  290. /package/dist/src/extract/{parse-imported-names.d.ts → helpers/evidence/parse-source-imports.d.ts} +0 -0
  291. /package/dist/src/extract/{parse-imported-names.js → helpers/evidence/parse-source-imports.js} +0 -0
  292. /package/dist/src/extract/{validate.js → services/quality/helpers/inspection/validate-extracted-components.js} +0 -0
@@ -0,0 +1,170 @@
1
+ import { Node } from 'ts-morph';
2
+ import { getTypeReferenceName, getTypeTargetDeclarations } from '../../shared/helpers/tsx-shared.js';
3
+ import { getTypeReferenceTargetNode, getTypeReferenceArguments } from '../../shared/helpers/tsx-node-utils.js';
4
+ export const TRANSPARENT_POLYMORPHIC_TYPE_NAMES = new Set(['PolymorphicProps', 'PropsWithAs', 'PropsWithHTMLElement']);
5
+ export function isRepoLocalTransparentPolymorphicWrapperDeclaration(declaration, typeName) {
6
+ if (!Node.isTypeAliasDeclaration(declaration))
7
+ return false;
8
+ if (declaration.getSourceFile().getFilePath().includes('/node_modules/'))
9
+ return false;
10
+ if (!TRANSPARENT_POLYMORPHIC_TYPE_NAMES.has(typeName))
11
+ return false;
12
+ const typeParameters = declaration.getTypeParameters();
13
+ const typeNode = declaration.getTypeNode();
14
+ if (!typeNode)
15
+ return false;
16
+ if (typeName === 'PropsWithAs') {
17
+ if (typeParameters.length !== 2 || !Node.isIntersectionTypeNode(typeNode))
18
+ return false;
19
+ const [propsTypeNode, wrapperTypeNode] = typeNode.getTypeNodes();
20
+ if (!propsTypeNode || !wrapperTypeNode)
21
+ return false;
22
+ if (propsTypeNode.getText() !== typeParameters[0].getName())
23
+ return false;
24
+ if (!Node.isTypeLiteral(wrapperTypeNode))
25
+ return false;
26
+ if (wrapperTypeNode.getMembers().length !== 1)
27
+ return false;
28
+ const asProperty = wrapperTypeNode.getProperty('as');
29
+ if (!asProperty || !asProperty.hasQuestionToken())
30
+ return false;
31
+ return asProperty.getTypeNode()?.getText() === typeParameters[1].getName();
32
+ }
33
+ if (typeName === 'PropsWithHTMLElement') {
34
+ if (typeParameters.length !== 3)
35
+ return false;
36
+ if (!Node.isTypeReference(typeNode) && !Node.isExpressionWithTypeArguments(typeNode))
37
+ return false;
38
+ if (getTypeReferenceName(typeNode) !== 'Overwrite')
39
+ return false;
40
+ const [omittedDomPropsTypeNode, propsTypeNode] = typeNode.getTypeArguments();
41
+ if (!omittedDomPropsTypeNode || !propsTypeNode)
42
+ return false;
43
+ if (!Node.isTypeReference(omittedDomPropsTypeNode) &&
44
+ !Node.isExpressionWithTypeArguments(omittedDomPropsTypeNode)) {
45
+ return false;
46
+ }
47
+ if (getTypeReferenceName(omittedDomPropsTypeNode) !== 'Omit')
48
+ return false;
49
+ const [componentPropsTypeNode, omittedAdditionalPropsTypeNode] = omittedDomPropsTypeNode.getTypeArguments();
50
+ if (!componentPropsTypeNode || !omittedAdditionalPropsTypeNode)
51
+ return false;
52
+ if (getTypeReferenceName(componentPropsTypeNode) !== 'ComponentPropsWithoutRef')
53
+ return false;
54
+ if (!Node.isTypeReference(componentPropsTypeNode) && !Node.isExpressionWithTypeArguments(componentPropsTypeNode)) {
55
+ return false;
56
+ }
57
+ if (componentPropsTypeNode.getTypeArguments()[0]?.getText() !== typeParameters[1].getName())
58
+ return false;
59
+ if (omittedAdditionalPropsTypeNode.getText() !== typeParameters[2].getName())
60
+ return false;
61
+ return propsTypeNode.getText() === typeParameters[0].getName();
62
+ }
63
+ if (typeName === 'PolymorphicProps') {
64
+ if (typeParameters.length !== 3)
65
+ return false;
66
+ if (!Node.isTypeReference(typeNode) && !Node.isExpressionWithTypeArguments(typeNode))
67
+ return false;
68
+ if (getTypeReferenceName(typeNode) !== 'PropsWithAs')
69
+ return false;
70
+ const [propsTypeNode, elementTypeNode] = typeNode.getTypeArguments();
71
+ if (!propsTypeNode || !elementTypeNode)
72
+ return false;
73
+ if (!Node.isTypeReference(propsTypeNode) && !Node.isExpressionWithTypeArguments(propsTypeNode))
74
+ return false;
75
+ if (getTypeReferenceName(propsTypeNode) !== 'PropsWithHTMLElement')
76
+ return false;
77
+ const propsTypeArgs = propsTypeNode.getTypeArguments();
78
+ const propsWithAsTargetNode = Node.isTypeReference(typeNode) ? typeNode.getTypeName() : typeNode.getExpression();
79
+ const propsWithHTMLElementTargetNode = Node.isTypeReference(propsTypeNode)
80
+ ? propsTypeNode.getTypeName()
81
+ : propsTypeNode.getExpression();
82
+ const hasExactPropsWithAsDeclaration = getTypeTargetDeclarations(propsWithAsTargetNode, true).some((declaration) => isRepoLocalTransparentPolymorphicWrapperDeclaration(declaration, 'PropsWithAs'));
83
+ const hasExactPropsWithHTMLElementDeclaration = getTypeTargetDeclarations(propsWithHTMLElementTargetNode, true).some((declaration) => isRepoLocalTransparentPolymorphicWrapperDeclaration(declaration, 'PropsWithHTMLElement'));
84
+ return (hasExactPropsWithAsDeclaration &&
85
+ hasExactPropsWithHTMLElementDeclaration &&
86
+ propsTypeArgs[0]?.getText() === typeParameters[0].getName() &&
87
+ propsTypeArgs[1]?.getText() === typeParameters[1].getName() &&
88
+ propsTypeArgs[2]?.getText() === typeParameters[2].getName() &&
89
+ elementTypeNode.getText() === typeParameters[1].getName());
90
+ }
91
+ return false;
92
+ }
93
+ export function unwrapRepoLocalTransparentPolymorphicWrapper(typeNode, allowWorkspaceImportFallback) {
94
+ if (!Node.isTypeReference(typeNode) && !Node.isExpressionWithTypeArguments(typeNode))
95
+ return undefined;
96
+ const typeName = getTypeReferenceName(typeNode);
97
+ if (!typeName || !TRANSPARENT_POLYMORPHIC_TYPE_NAMES.has(typeName))
98
+ return undefined;
99
+ const firstTypeArg = typeNode.getTypeArguments()[0];
100
+ if (!firstTypeArg)
101
+ return undefined;
102
+ const targetNode = Node.isTypeReference(typeNode) ? typeNode.getTypeName() : typeNode.getExpression();
103
+ const declarations = getTypeTargetDeclarations(targetNode, allowWorkspaceImportFallback);
104
+ if (!declarations.some((declaration) => isRepoLocalTransparentPolymorphicWrapperDeclaration(declaration, typeName))) {
105
+ return undefined;
106
+ }
107
+ return firstTypeArg;
108
+ }
109
+ export function isRepoLocalSupportedPolymorphicChain(typeNode, seen = new Set(), allowWorkspaceImportFallback = false) {
110
+ if (seen.has(typeNode))
111
+ return false;
112
+ seen.add(typeNode);
113
+ if (Node.isParenthesizedTypeNode(typeNode) || Node.isTypeOperatorTypeNode(typeNode)) {
114
+ return isRepoLocalSupportedPolymorphicChain(typeNode.getTypeNode(), seen, allowWorkspaceImportFallback);
115
+ }
116
+ if (Node.isIntersectionTypeNode(typeNode) || Node.isUnionTypeNode(typeNode)) {
117
+ const childTypes = typeNode.getTypeNodes();
118
+ return (childTypes.length > 0 &&
119
+ childTypes.every((child) => isRepoLocalSupportedPolymorphicChain(child, seen, allowWorkspaceImportFallback)));
120
+ }
121
+ if (Node.isTypeLiteral(typeNode) || Node.isInterfaceDeclaration(typeNode))
122
+ return true;
123
+ if (Node.isTypeReference(typeNode) || Node.isExpressionWithTypeArguments(typeNode)) {
124
+ const typeName = getTypeReferenceName(typeNode);
125
+ if (!typeName)
126
+ return false;
127
+ if (typeName === 'Omit' ||
128
+ typeName === 'Partial' ||
129
+ typeName === 'Readonly' ||
130
+ typeName === 'Required' ||
131
+ typeName === 'NonNullable' ||
132
+ typeName === 'MappedOmit') {
133
+ const wrappedType = getTypeReferenceArguments(typeNode)[0];
134
+ return wrappedType
135
+ ? isRepoLocalSupportedPolymorphicChain(wrappedType, seen, allowWorkspaceImportFallback)
136
+ : false;
137
+ }
138
+ if (!TRANSPARENT_POLYMORPHIC_TYPE_NAMES.has(typeName)) {
139
+ const targetNode = getTypeReferenceTargetNode(typeNode);
140
+ if (!targetNode)
141
+ return false;
142
+ for (const declaration of getTypeTargetDeclarations(targetNode, allowWorkspaceImportFallback)) {
143
+ if (!declaration)
144
+ continue;
145
+ if (Node.isInterfaceDeclaration(declaration)) {
146
+ if (declaration
147
+ .getHeritageClauses()
148
+ .some((clause) => clause
149
+ .getTypeNodes()
150
+ .every((heritageTypeNode) => isRepoLocalSupportedPolymorphicChain(heritageTypeNode, seen, allowWorkspaceImportFallback)))) {
151
+ return true;
152
+ }
153
+ }
154
+ if (Node.isTypeAliasDeclaration(declaration)) {
155
+ const aliasedTypeNode = declaration.getTypeNode();
156
+ if (aliasedTypeNode &&
157
+ isRepoLocalSupportedPolymorphicChain(aliasedTypeNode, seen, allowWorkspaceImportFallback)) {
158
+ return true;
159
+ }
160
+ }
161
+ }
162
+ return false;
163
+ }
164
+ const wrappedTypeNode = unwrapRepoLocalTransparentPolymorphicWrapper(typeNode, allowWorkspaceImportFallback);
165
+ return wrappedTypeNode
166
+ ? isRepoLocalSupportedPolymorphicChain(wrappedTypeNode, seen, allowWorkspaceImportFallback)
167
+ : false;
168
+ }
169
+ return false;
170
+ }
@@ -0,0 +1,15 @@
1
+ import { Node } from 'ts-morph';
2
+ import type { RawPropDefinition } from '../../../types/component.js';
3
+ export declare const EXPANDABLE_DOM_ATTRIBUTE_TYPE_NAMES: Set<string>;
4
+ export type ExpandableDomAttributeWrapperName = (typeof EXPANDABLE_DOM_ATTRIBUTE_TYPE_NAMES extends Set<infer T> ? T : never) & string;
5
+ export type ExpandableDomAttributeWrapperContext = {
6
+ name: ExpandableDomAttributeWrapperName;
7
+ excludedProps: Set<string>;
8
+ };
9
+ export declare const DOM_ATTRIBUTE_PROP_SURFACES: Record<ExpandableDomAttributeWrapperName, RawPropDefinition[]>;
10
+ export declare const DOM_ATTRIBUTE_WRAPPER_PARENTS: Partial<Record<ExpandableDomAttributeWrapperName, ExpandableDomAttributeWrapperName[]>>;
11
+ export declare const DOM_ATTRIBUTE_WRAPPERS_WITH_SYNTHETIC_CHILDREN: Set<string>;
12
+ export declare const JSX_PRIMITIVE_DOM_ATTRIBUTE_SURFACES: Partial<Record<string, ExpandableDomAttributeWrapperName>>;
13
+ export declare function isExpandableDomAttributeWrapperName(typeName: string): typeName is ExpandableDomAttributeWrapperName;
14
+ export declare function getDomAttributeSurface(name: ExpandableDomAttributeWrapperName, seen?: Set<string>): RawPropDefinition[];
15
+ export declare function getBoundedImportedJsxDomSurface(tagNameNode: Node): ExpandableDomAttributeWrapperName | undefined;
@@ -0,0 +1,231 @@
1
+ import { Node } from 'ts-morph';
2
+ export const EXPANDABLE_DOM_ATTRIBUTE_TYPE_NAMES = new Set([
3
+ 'HTMLProps',
4
+ 'HTMLAttributes',
5
+ 'ImgHTMLAttributes',
6
+ 'LiHTMLAttributes',
7
+ 'AnchorHTMLAttributes',
8
+ 'ButtonHTMLAttributes',
9
+ 'InputHTMLAttributes',
10
+ 'FieldsetHTMLAttributes',
11
+ 'LabelHTMLAttributes',
12
+ 'SelectHTMLAttributes',
13
+ 'SVGAttributes',
14
+ 'SVGProps',
15
+ 'TextareaHTMLAttributes',
16
+ 'TdHTMLAttributes',
17
+ ]);
18
+ function createTextControlSurface(onChangeType, specificProps) {
19
+ return [
20
+ { name: 'autoComplete', type: 'string', required: false },
21
+ ...specificProps,
22
+ { name: 'disabled', type: 'boolean', required: false },
23
+ { name: 'name', type: 'string', required: false },
24
+ { name: 'onChange', type: onChangeType, required: false },
25
+ { name: 'placeholder', type: 'string', required: false },
26
+ { name: 'readOnly', type: 'boolean', required: false },
27
+ { name: 'required', type: 'boolean', required: false },
28
+ {
29
+ name: 'value',
30
+ type: 'string | number | readonly string[]',
31
+ required: false,
32
+ },
33
+ ];
34
+ }
35
+ export const DOM_ATTRIBUTE_PROP_SURFACES = {
36
+ HTMLProps: [],
37
+ HTMLAttributes: [
38
+ { name: 'className', type: 'string', required: false },
39
+ { name: 'hidden', type: 'boolean', required: false },
40
+ { name: 'id', type: 'string', required: false },
41
+ {
42
+ name: 'onClick',
43
+ type: 'MouseEventHandler<HTMLElement>',
44
+ required: false,
45
+ },
46
+ { name: 'style', type: 'CSSProperties', required: false },
47
+ { name: 'tabIndex', type: 'number', required: false },
48
+ { name: 'title', type: 'string', required: false },
49
+ ],
50
+ ImgHTMLAttributes: [
51
+ { name: 'alt', type: 'string', required: false },
52
+ { name: 'crossOrigin', type: 'string', required: false },
53
+ { name: 'height', type: 'number | string', required: false },
54
+ {
55
+ name: 'loading',
56
+ type: 'string',
57
+ required: false,
58
+ allowedValues: ['eager', 'lazy'],
59
+ },
60
+ { name: 'sizes', type: 'string', required: false },
61
+ { name: 'src', type: 'string', required: false },
62
+ { name: 'srcSet', type: 'string', required: false },
63
+ { name: 'width', type: 'number | string', required: false },
64
+ ],
65
+ LiHTMLAttributes: [],
66
+ AnchorHTMLAttributes: [
67
+ { name: 'download', type: 'boolean | string', required: false },
68
+ { name: 'href', type: 'string', required: false },
69
+ { name: 'hrefLang', type: 'string', required: false },
70
+ { name: 'referrerPolicy', type: 'string', required: false },
71
+ { name: 'rel', type: 'string', required: false },
72
+ {
73
+ name: 'target',
74
+ type: 'string',
75
+ required: false,
76
+ allowedValues: ['_blank', '_parent', '_self', '_top'],
77
+ },
78
+ ],
79
+ ButtonHTMLAttributes: [
80
+ { name: 'autoFocus', type: 'boolean', required: false },
81
+ { name: 'disabled', type: 'boolean', required: false },
82
+ { name: 'form', type: 'string', required: false },
83
+ { name: 'formAction', type: 'string', required: false },
84
+ { name: 'formMethod', type: 'string', required: false },
85
+ { name: 'formNoValidate', type: 'boolean', required: false },
86
+ { name: 'formTarget', type: 'string', required: false },
87
+ { name: 'name', type: 'string', required: false },
88
+ {
89
+ name: 'type',
90
+ type: 'string',
91
+ required: false,
92
+ allowedValues: ['button', 'reset', 'submit'],
93
+ },
94
+ {
95
+ name: 'value',
96
+ type: 'string | number | readonly string[]',
97
+ required: false,
98
+ },
99
+ ],
100
+ InputHTMLAttributes: createTextControlSurface('ChangeEventHandler<HTMLInputElement>', [
101
+ { name: 'checked', type: 'boolean', required: false },
102
+ { name: 'max', type: 'number | string', required: false },
103
+ { name: 'maxLength', type: 'number', required: false },
104
+ { name: 'min', type: 'number | string', required: false },
105
+ { name: 'minLength', type: 'number', required: false },
106
+ { name: 'type', type: 'string', required: false },
107
+ ]),
108
+ FieldsetHTMLAttributes: [
109
+ { name: 'disabled', type: 'boolean', required: false },
110
+ { name: 'form', type: 'string', required: false },
111
+ { name: 'name', type: 'string', required: false },
112
+ ],
113
+ LabelHTMLAttributes: [
114
+ { name: 'form', type: 'string', required: false },
115
+ { name: 'htmlFor', type: 'string', required: false },
116
+ ],
117
+ SelectHTMLAttributes: [
118
+ { name: 'autoComplete', type: 'string', required: false },
119
+ { name: 'disabled', type: 'boolean', required: false },
120
+ { name: 'form', type: 'string', required: false },
121
+ { name: 'multiple', type: 'boolean', required: false },
122
+ { name: 'name', type: 'string', required: false },
123
+ {
124
+ name: 'onChange',
125
+ type: 'ChangeEventHandler<HTMLSelectElement>',
126
+ required: false,
127
+ },
128
+ { name: 'required', type: 'boolean', required: false },
129
+ { name: 'size', type: 'number', required: false },
130
+ {
131
+ name: 'value',
132
+ type: 'string | number | readonly string[]',
133
+ required: false,
134
+ },
135
+ ],
136
+ SVGAttributes: [
137
+ {
138
+ name: 'focusable',
139
+ type: 'boolean | "auto"',
140
+ required: false,
141
+ allowedValues: ['auto'],
142
+ },
143
+ { name: 'height', type: 'number | string', required: false },
144
+ { name: 'viewBox', type: 'string', required: false },
145
+ { name: 'width', type: 'number | string', required: false },
146
+ ],
147
+ SVGProps: [],
148
+ TextareaHTMLAttributes: createTextControlSurface('ChangeEventHandler<HTMLTextAreaElement>', [
149
+ { name: 'cols', type: 'number', required: false },
150
+ { name: 'rows', type: 'number', required: false },
151
+ { name: 'wrap', type: 'string', required: false },
152
+ ]),
153
+ TdHTMLAttributes: [
154
+ {
155
+ name: 'align',
156
+ type: 'string',
157
+ required: false,
158
+ allowedValues: ['center', 'char', 'justify', 'left', 'right'],
159
+ },
160
+ { name: 'colSpan', type: 'number', required: false },
161
+ { name: 'headers', type: 'string', required: false },
162
+ { name: 'rowSpan', type: 'number', required: false },
163
+ { name: 'scope', type: 'string', required: false },
164
+ ],
165
+ };
166
+ export const DOM_ATTRIBUTE_WRAPPER_PARENTS = {
167
+ HTMLProps: ['HTMLAttributes'],
168
+ AnchorHTMLAttributes: ['HTMLAttributes'],
169
+ ButtonHTMLAttributes: ['HTMLAttributes'],
170
+ ImgHTMLAttributes: ['HTMLAttributes'],
171
+ InputHTMLAttributes: ['HTMLAttributes'],
172
+ FieldsetHTMLAttributes: ['HTMLAttributes'],
173
+ LabelHTMLAttributes: ['HTMLAttributes'],
174
+ LiHTMLAttributes: ['HTMLAttributes'],
175
+ SelectHTMLAttributes: ['HTMLAttributes'],
176
+ SVGAttributes: ['HTMLAttributes'],
177
+ SVGProps: ['SVGAttributes'],
178
+ TdHTMLAttributes: ['HTMLAttributes'],
179
+ TextareaHTMLAttributes: ['HTMLAttributes'],
180
+ };
181
+ export const DOM_ATTRIBUTE_WRAPPERS_WITH_SYNTHETIC_CHILDREN = new Set([
182
+ 'LabelHTMLAttributes',
183
+ ]);
184
+ export const JSX_PRIMITIVE_DOM_ATTRIBUTE_SURFACES = {
185
+ 'Primitive.button': 'ButtonHTMLAttributes',
186
+ 'Primitive.input': 'InputHTMLAttributes',
187
+ 'Primitive.label': 'LabelHTMLAttributes',
188
+ };
189
+ export function isExpandableDomAttributeWrapperName(typeName) {
190
+ return EXPANDABLE_DOM_ATTRIBUTE_TYPE_NAMES.has(typeName);
191
+ }
192
+ export function getDomAttributeSurface(name, seen = new Set()) {
193
+ if (seen.has(name))
194
+ return [];
195
+ seen.add(name);
196
+ const propsByName = new Map();
197
+ for (const parentName of DOM_ATTRIBUTE_WRAPPER_PARENTS[name] ?? []) {
198
+ for (const prop of getDomAttributeSurface(parentName, seen)) {
199
+ propsByName.set(prop.name, prop);
200
+ }
201
+ }
202
+ for (const prop of DOM_ATTRIBUTE_PROP_SURFACES[name]) {
203
+ propsByName.set(prop.name, prop);
204
+ }
205
+ return [...propsByName.values()].map((prop) => ({
206
+ ...prop,
207
+ domAttribute: true,
208
+ }));
209
+ }
210
+ export function getBoundedImportedJsxDomSurface(tagNameNode) {
211
+ if (!Node.isIdentifier(tagNameNode))
212
+ return undefined;
213
+ const localName = tagNameNode.getText();
214
+ if (!/label/i.test(localName))
215
+ return undefined;
216
+ const declarations = tagNameNode.getSymbol()?.getDeclarations() ?? [];
217
+ for (const declaration of declarations) {
218
+ if (!Node.isImportSpecifier(declaration))
219
+ continue;
220
+ const importDeclaration = declaration.getImportDeclaration();
221
+ const moduleSpecifier = importDeclaration.getModuleSpecifierValue();
222
+ const importedName = declaration.getNameNode().getText();
223
+ const aliasName = declaration.getAliasNode()?.getText();
224
+ if (/label/i.test(moduleSpecifier) ||
225
+ /label/i.test(importedName) ||
226
+ (aliasName !== undefined && /label/i.test(aliasName))) {
227
+ return 'LabelHTMLAttributes';
228
+ }
229
+ }
230
+ return undefined;
231
+ }
@@ -0,0 +1,4 @@
1
+ import { type ParameterDeclaration } from 'ts-morph';
2
+ import type { RawPropDefinition } from '../../../types/component.js';
3
+ import type { FunctionLike } from './resolve-component-function.js';
4
+ export declare function extractDestructuredBindingFallbackProps(func: FunctionLike, param: ParameterDeclaration, existingPropNames: Set<string>, slotNames: Set<string>): RawPropDefinition[];
@@ -0,0 +1,50 @@
1
+ import { Node, SyntaxKind } from 'ts-morph';
2
+ import { getSourceLineMetadata } from '../../shared/helpers/get-node-source-lines.js';
3
+ export function extractDestructuredBindingFallbackProps(func, param, existingPropNames, slotNames) {
4
+ const nameNode = param.getNameNode();
5
+ const bindingPatterns = [];
6
+ if (Node.isObjectBindingPattern(nameNode)) {
7
+ bindingPatterns.push(nameNode);
8
+ }
9
+ else if (Node.isIdentifier(nameNode)) {
10
+ const body = func.getBody();
11
+ const paramName = nameNode.getText();
12
+ if (body) {
13
+ for (const declaration of body.getDescendantsOfKind(SyntaxKind.VariableDeclaration)) {
14
+ const declarationName = declaration.getNameNode();
15
+ const initializer = declaration.getInitializer();
16
+ if (!Node.isObjectBindingPattern(declarationName))
17
+ continue;
18
+ if (!initializer || !Node.isIdentifier(initializer) || initializer.getText() !== paramName)
19
+ continue;
20
+ bindingPatterns.push(declarationName);
21
+ }
22
+ }
23
+ }
24
+ else {
25
+ return [];
26
+ }
27
+ const propsByName = new Map();
28
+ const paramType = param.getType();
29
+ for (const bindingPattern of bindingPatterns) {
30
+ for (const element of bindingPattern.getElements()) {
31
+ if (element.getDotDotDotToken())
32
+ continue;
33
+ const propName = element.getPropertyNameNode()?.getText() ?? element.getNameNode().getText();
34
+ if (propName === 'children' || existingPropNames.has(propName) || slotNames.has(propName))
35
+ continue;
36
+ if (propsByName.has(propName))
37
+ continue;
38
+ const property = paramType.getProperty(propName);
39
+ const declaration = property?.getValueDeclaration() ?? property?.getDeclarations()[0];
40
+ const propertyType = property && declaration ? property.getTypeAtLocation(declaration).getText(declaration) : 'any';
41
+ propsByName.set(propName, {
42
+ name: propName,
43
+ type: propertyType === 'unknown' ? 'any' : propertyType,
44
+ required: property ? !property.isOptional() : false,
45
+ ...getSourceLineMetadata(declaration),
46
+ });
47
+ }
48
+ }
49
+ return [...propsByName.values()].sort((a, b) => a.name.localeCompare(b.name));
50
+ }
@@ -0,0 +1,5 @@
1
+ import { type SourceFile } from 'ts-morph';
2
+ import type { ExtractionExclusion } from '../../../types/component.js';
3
+ import { type RawComponentDefinitionInternal } from './extract-react-component-from-export.js';
4
+ export declare function sourceFileUsesCreateContext(sourceFile: SourceFile): boolean;
5
+ export declare function extractFromReactSourceFile(sourceFile: SourceFile, isNext: boolean, exclusions: ExtractionExclusion[]): RawComponentDefinitionInternal[];
@@ -0,0 +1,23 @@
1
+ import { SyntaxKind } from 'ts-morph';
2
+ import { getRenderableExports } from '../../shared/helpers/tsx-shared.js';
3
+ import { extractReactComponentFromExport, } from './extract-react-component-from-export.js';
4
+ export function sourceFileUsesCreateContext(sourceFile) {
5
+ return sourceFile.getDescendantsOfKind(SyntaxKind.CallExpression).some((call) => {
6
+ const expr = call.getExpression();
7
+ const text = expr.getText();
8
+ return text === 'createContext' || text === 'React.createContext';
9
+ });
10
+ }
11
+ export function extractFromReactSourceFile(sourceFile, isNext, exclusions) {
12
+ const components = [];
13
+ const usesCreateContext = sourceFileUsesCreateContext(sourceFile);
14
+ for (const { name, declarations } of getRenderableExports(sourceFile, exclusions, {
15
+ allowVariableDeclaration: true,
16
+ hookReason: 'React hook names are not renderable components',
17
+ })) {
18
+ const component = extractReactComponentFromExport(name, declarations, sourceFile, isNext, usesCreateContext);
19
+ if (component)
20
+ components.push(component);
21
+ }
22
+ return components;
23
+ }
@@ -0,0 +1,2 @@
1
+ import type { RawComponentDefinition } from '../../../types/component.js';
2
+ export declare function resolveReactAllowedComponents(components: RawComponentDefinition[]): void;
@@ -0,0 +1,25 @@
1
+ import { extractAllowedComponentsFromTypeText, extractAllowedComponentsFromJsdoc, } from '../../../helpers/evidence/collect-allowed-component-names.js';
2
+ import { buildComponentLookupMaps } from '../../shared/helpers/build-component-lookup-maps.js';
3
+ export function resolveReactAllowedComponents(components) {
4
+ const { propsToComponent, componentNames } = buildComponentLookupMaps(components);
5
+ for (const c of components) {
6
+ for (const slot of c.slots) {
7
+ const found = new Set();
8
+ if (slot._rawTypeText) {
9
+ for (const n of extractAllowedComponentsFromTypeText(slot._rawTypeText, { propsToComponent, componentNames })) {
10
+ found.add(n);
11
+ }
12
+ }
13
+ if (slot._rawJsdoc) {
14
+ for (const n of extractAllowedComponentsFromJsdoc(slot._rawJsdoc, componentNames)) {
15
+ found.add(n);
16
+ }
17
+ }
18
+ delete slot._rawTypeText;
19
+ delete slot._rawJsdoc;
20
+ if (found.size > 0)
21
+ slot.allowedComponents = [...found].sort();
22
+ }
23
+ delete c._propsTypeName;
24
+ }
25
+ }
@@ -0,0 +1,6 @@
1
+ import { Node } from 'ts-morph';
2
+ import type { FunctionLike } from './resolve-component-function.js';
3
+ export { isImplementationOnlyAliasProp, filterImplementationOnlyAliasProps } from './filter-impl-alias-props.js';
4
+ export { extractDestructuredBindingFallbackProps } from './extract-binding-fallback-props.js';
5
+ export declare function recordBindingPatternDefaults(nameNode: Node, defaults: Map<string, string>): void;
6
+ export declare function extractDefaultValues(func: FunctionLike): Map<string, string>;
@@ -0,0 +1,48 @@
1
+ import { Node } from 'ts-morph';
2
+ export { isImplementationOnlyAliasProp, filterImplementationOnlyAliasProps } from './filter-impl-alias-props.js';
3
+ export { extractDestructuredBindingFallbackProps } from './extract-binding-fallback-props.js';
4
+ export function recordBindingPatternDefaults(nameNode, defaults) {
5
+ if (!Node.isObjectBindingPattern(nameNode))
6
+ return;
7
+ for (const element of nameNode.getElements()) {
8
+ const initializer = element.getInitializer();
9
+ if (!initializer)
10
+ continue;
11
+ const propertyNameNode = element.getPropertyNameNode();
12
+ const propName = propertyNameNode?.getText().replace(/^['"]|['"]$/g, '') ?? element.getNameNode().getText();
13
+ const value = initializer.getText().replace(/^['"]|['"]$/g, '');
14
+ defaults.set(propName, value);
15
+ }
16
+ }
17
+ export function extractDefaultValues(func) {
18
+ const defaults = new Map();
19
+ const params = func.getParameters();
20
+ if (params.length === 0)
21
+ return defaults;
22
+ const firstParam = params[0];
23
+ const nameNode = firstParam.getNameNode();
24
+ if (Node.isObjectBindingPattern(nameNode)) {
25
+ recordBindingPatternDefaults(nameNode, defaults);
26
+ return defaults;
27
+ }
28
+ if (!Node.isIdentifier(nameNode))
29
+ return defaults;
30
+ const body = func.getBody();
31
+ if (!body || !Node.isBlock(body))
32
+ return defaults;
33
+ for (const statement of body.getStatements()) {
34
+ if (!Node.isVariableStatement(statement))
35
+ continue;
36
+ for (const declaration of statement.getDeclarationList().getDeclarations()) {
37
+ const declarationName = declaration.getNameNode();
38
+ const initializer = declaration.getInitializer();
39
+ if (!Node.isObjectBindingPattern(declarationName))
40
+ continue;
41
+ if (!initializer || !Node.isIdentifier(initializer) || initializer.getText() !== nameNode.getText())
42
+ continue;
43
+ recordBindingPatternDefaults(declarationName, defaults);
44
+ return defaults;
45
+ }
46
+ }
47
+ return defaults;
48
+ }
@@ -0,0 +1,15 @@
1
+ import { Node, type SourceFile } from 'ts-morph';
2
+ import type { RawComponentDefinition, RawSlotDefinition } from '../../../types/component.js';
3
+ import { type PropForwardingEdge } from './collect-prop-dataflow.js';
4
+ import { type FunctionLike } from './resolve-component-function.js';
5
+ export type RawSlotDefinitionInternal = RawSlotDefinition & {
6
+ _rawTypeText?: string;
7
+ _rawJsdoc?: string;
8
+ };
9
+ export type RawComponentDefinitionInternal = RawComponentDefinition & {
10
+ _componentIdentity?: string;
11
+ _propsTypeName?: string;
12
+ _propForwardingEdges?: PropForwardingEdge[];
13
+ _funcNode?: FunctionLike;
14
+ };
15
+ export declare function extractReactComponentFromExport(name: string, declarations: Node[], sourceFile: SourceFile, isNext: boolean, usesCreateContext: boolean): RawComponentDefinitionInternal | null;