@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,106 @@
1
+ import { Node } from 'ts-morph';
2
+ import { shouldBeSlot } from '../../../helpers/evidence/detect-slot-from-prop.js';
3
+ import { collectPropDataflow, getComponentIdentity } from './collect-prop-dataflow.js';
4
+ import { resolveBestFunctionNode } from './resolve-component-function.js';
5
+ import { collectRenderPropSlotNames, extractSlots } from './extract-react-slots.js';
6
+ import { extractPropsFromType } from './extract-react-props-from-type.js';
7
+ import { getSyntheticDomAttributeProps, hasSyntheticDomChildren, containsImportedOmitWrappedCustomProps, containsAnyPickType, } from './detect-dom-type-patterns.js';
8
+ import { resolvePropsType } from './resolve-react-props-type.js';
9
+ import { extractDefaultValues, filterImplementationOnlyAliasProps, extractDestructuredBindingFallbackProps, } from './extract-react-binding-defaults.js';
10
+ import { inferPrimitiveDomPropsFromImplementation, hasImplementationChildrenHint } from './collect-react-impl-hints.js';
11
+ import { extractPropTypes } from './extract-react-prop-types.js';
12
+ const REACT_ELEMENT_GENERIC_TEST = /(?:React\.)?ReactElement\s*<\s*[A-Za-z_$][\w$.]*/;
13
+ export function extractReactComponentFromExport(name, declarations, sourceFile, isNext, usesCreateContext) {
14
+ const funcNode = resolveBestFunctionNode(declarations);
15
+ if (!funcNode)
16
+ return null;
17
+ if (funcNode.getSourceFile().getFilePath() !== sourceFile.getFilePath())
18
+ return null;
19
+ const framework = isNext ? 'next' : 'react';
20
+ const source = sourceFile.getFilePath();
21
+ const base = {
22
+ name,
23
+ source,
24
+ sourcePath: source,
25
+ framework,
26
+ ...(usesCreateContext && { usesCreateContext: true }),
27
+ };
28
+ const params = funcNode.getParameters();
29
+ if (params.length === 0) {
30
+ return { ...base, props: [], slots: [] };
31
+ }
32
+ const resolvedPropsType = resolvePropsType(params[0]);
33
+ const firstParamType = resolvedPropsType.type;
34
+ const firstParamTypeNode = resolvedPropsType.typeNode;
35
+ const renderPropSlotNames = resolvedPropsType.suppressProps
36
+ ? new Set()
37
+ : collectRenderPropSlotNames(firstParamType);
38
+ const { props, hasChildren } = resolvedPropsType.suppressProps
39
+ ? { props: [], hasChildren: false }
40
+ : extractPropsFromType(firstParamType, renderPropSlotNames, firstParamTypeNode);
41
+ const hasMeaningfulExtractedProps = props.some((prop) => !prop.name.startsWith('__scope'));
42
+ const defaults = extractDefaultValues(funcNode);
43
+ const hasImplementationChildren = hasImplementationChildrenHint(funcNode, params[0]);
44
+ const slots = extractSlots(firstParamType, hasChildren ||
45
+ resolvedPropsType.hasWrappedChildren ||
46
+ hasSyntheticDomChildren(resolvedPropsType.typeNode) ||
47
+ hasImplementationChildren);
48
+ const syntheticDomProps = resolvedPropsType.suppressProps
49
+ ? []
50
+ : getSyntheticDomAttributeProps(resolvedPropsType.typeNode);
51
+ const implementationPrimitiveDomProps = !resolvedPropsType.suppressProps && !hasMeaningfulExtractedProps && syntheticDomProps.length === 0
52
+ ? inferPrimitiveDomPropsFromImplementation(funcNode, params[0])
53
+ : [];
54
+ const shouldTryBindingFallback = !resolvedPropsType.suppressProps &&
55
+ (containsImportedOmitWrappedCustomProps(firstParamTypeNode) ||
56
+ containsAnyPickType(firstParamTypeNode) ||
57
+ (!hasMeaningfulExtractedProps && Node.isObjectBindingPattern(params[0].getNameNode())));
58
+ const bindingFallbackProps = shouldTryBindingFallback
59
+ ? extractDestructuredBindingFallbackProps(funcNode, params[0], new Set(props.map((p) => p.name)), renderPropSlotNames)
60
+ : [];
61
+ const mergedPropsByName = new Map();
62
+ for (const prop of props)
63
+ mergedPropsByName.set(prop.name, prop);
64
+ for (const prop of syntheticDomProps)
65
+ if (!mergedPropsByName.has(prop.name))
66
+ mergedPropsByName.set(prop.name, prop);
67
+ for (const prop of implementationPrimitiveDomProps)
68
+ if (!mergedPropsByName.has(prop.name))
69
+ mergedPropsByName.set(prop.name, prop);
70
+ for (const prop of bindingFallbackProps)
71
+ if (!mergedPropsByName.has(prop.name))
72
+ mergedPropsByName.set(prop.name, prop);
73
+ const resolvedProps = [...mergedPropsByName.values()];
74
+ const noUsefulTypes = resolvedProps.length === 0 || resolvedProps.every((p) => p.type === 'any');
75
+ const finalProps = noUsefulTypes ? (extractPropTypes(sourceFile, name) ?? resolvedProps) : resolvedProps;
76
+ const propsWithDefaults = finalProps.map((p) => defaults.has(p.name) ? { ...p, required: false, defaultValue: defaults.get(p.name) } : p);
77
+ const propDataflow = collectPropDataflow(funcNode, params[0], new Set(propsWithDefaults.map((p) => p.name)));
78
+ const filteredProps = filterImplementationOnlyAliasProps(propsWithDefaults, funcNode).map((prop) => propDataflow.intrinsicDomProps.has(prop.name) ? { ...prop, domAttribute: true } : prop);
79
+ const existingSlotNames = new Set(slots.map((s) => s.name));
80
+ const expandedSlots = [];
81
+ const propsAfterSlotExpansion = filteredProps.filter((prop) => {
82
+ if (existingSlotNames.has(prop.name))
83
+ return true;
84
+ const isElementSlot = REACT_ELEMENT_GENERIC_TEST.test(prop.type);
85
+ if (shouldBeSlot(prop.name, prop.type) || isElementSlot) {
86
+ expandedSlots.push({
87
+ name: prop.name,
88
+ isDefault: false,
89
+ ...(isElementSlot ? { _rawTypeText: prop.type } : {}),
90
+ });
91
+ return false;
92
+ }
93
+ return true;
94
+ });
95
+ const propsTypeName = firstParamTypeNode?.getText?.().trim();
96
+ const propsTypeNameCapture = propsTypeName && /^[A-Za-z_$][\w$]*$/.test(propsTypeName) ? propsTypeName : undefined;
97
+ return {
98
+ ...base,
99
+ props: propsAfterSlotExpansion,
100
+ slots: [...slots, ...expandedSlots],
101
+ _componentIdentity: getComponentIdentity(funcNode),
102
+ _funcNode: funcNode,
103
+ ...(propsTypeNameCapture ? { _propsTypeName: propsTypeNameCapture } : {}),
104
+ ...(propDataflow.componentEdges.length > 0 ? { _propForwardingEdges: propDataflow.componentEdges } : {}),
105
+ };
106
+ }
@@ -0,0 +1,3 @@
1
+ import { type SourceFile } from 'ts-morph';
2
+ import type { RawPropDefinition } from '../../../types/component.js';
3
+ export declare function extractPropTypes(sourceFile: SourceFile, componentName: string): RawPropDefinition[] | undefined;
@@ -0,0 +1,64 @@
1
+ import { Node } from 'ts-morph';
2
+ const PROP_TYPES_MAP = {
3
+ string: 'string',
4
+ number: 'number',
5
+ bool: 'boolean',
6
+ func: 'function',
7
+ node: 'ReactNode',
8
+ element: 'ReactElement',
9
+ any: 'any',
10
+ array: 'any[]',
11
+ object: 'object',
12
+ symbol: 'symbol',
13
+ };
14
+ export function extractPropTypes(sourceFile, componentName) {
15
+ const props = [];
16
+ for (const statement of sourceFile.getStatements()) {
17
+ if (!Node.isExpressionStatement(statement))
18
+ continue;
19
+ const expr = statement.getExpression();
20
+ if (!Node.isBinaryExpression(expr))
21
+ continue;
22
+ const left = expr.getLeft().getText();
23
+ if (left !== `${componentName}.propTypes`)
24
+ continue;
25
+ const right = expr.getRight();
26
+ if (!Node.isObjectLiteralExpression(right))
27
+ continue;
28
+ for (const property of right.getProperties()) {
29
+ if (!Node.isPropertyAssignment(property))
30
+ continue;
31
+ const propName = property.getName();
32
+ const initText = property.getInitializer()?.getText() ?? '';
33
+ let type = 'any';
34
+ let required = false;
35
+ let allowedValues;
36
+ if (initText.includes('.isRequired'))
37
+ required = true;
38
+ const oneOfMatch = initText.match(/PropTypes\.oneOf\(\[([^\]]+)\]\)/);
39
+ if (oneOfMatch) {
40
+ allowedValues = oneOfMatch[1]
41
+ .split(',')
42
+ .map((v) => v.trim().replace(/^['"]|['"]$/g, ''))
43
+ .filter(Boolean)
44
+ .sort();
45
+ }
46
+ for (const [ptKey, tsType] of Object.entries(PROP_TYPES_MAP)) {
47
+ if (initText.includes(`PropTypes.${ptKey}`)) {
48
+ type = tsType;
49
+ break;
50
+ }
51
+ }
52
+ props.push({
53
+ name: propName,
54
+ type,
55
+ required,
56
+ ...(allowedValues && { allowedValues }),
57
+ sourceStartLine: property.getStartLineNumber(),
58
+ sourceEndLine: property.getEndLineNumber(),
59
+ });
60
+ }
61
+ return props.sort((a, b) => a.name.localeCompare(b.name));
62
+ }
63
+ return undefined;
64
+ }
@@ -0,0 +1,15 @@
1
+ import { Node, type Type } from 'ts-morph';
2
+ import type { RawPropDefinition } from '../../../types/component.js';
3
+ export declare function extractPropsFromTypeSymbols(type: Type, slotNames: Set<string>, suppressNeverChildrenSlot?: boolean): {
4
+ props: RawPropDefinition[];
5
+ hasChildren: boolean;
6
+ };
7
+ export declare function extractPropsFromTypeNode(typeNode: Node, slotNames: Set<string>, seen?: Set<Node<import("ts-morph").ts.Node>>, excludedProps?: Set<string>, allowImportedOmitWorkspaceFallback?: boolean, suppressNeverChildrenSlot?: boolean): {
8
+ props: RawPropDefinition[];
9
+ hasChildren: boolean;
10
+ };
11
+ export declare function extractPickedPropsFromTypeNode(typeNode: Node, slotNames: Set<string>, excludedProps?: Set<string>): RawPropDefinition[];
12
+ export declare function extractPropsFromType(type: Type, slotNames: Set<string>, typeNode?: Node): {
13
+ props: RawPropDefinition[];
14
+ hasChildren: boolean;
15
+ };
@@ -0,0 +1,318 @@
1
+ import { Node } from 'ts-morph';
2
+ import { extractAllowedValues, getTypeReferenceName, getTypeTargetDeclarations, } from '../../shared/helpers/tsx-shared.js';
3
+ import { getSourceLineMetadata } from '../../shared/helpers/get-node-source-lines.js';
4
+ import { collectExpandableDomAttributeWrapperContexts, isPureExpandableDomAttributeWrapperType, shouldMergeDomSyntaxExtraction, containsImportedOmitWrappedCustomProps, getStringLiteralTypeValues, getSyntheticDomAttributeProps, } from './detect-dom-type-patterns.js';
5
+ import { TRANSPARENT_POLYMORPHIC_TYPE_NAMES, isRepoLocalSupportedPolymorphicChain, unwrapRepoLocalTransparentPolymorphicWrapper, } from './detect-react-polymorphic.js';
6
+ import { isExpandableDomAttributeWrapperName } from './dom-attribute-surfaces.js';
7
+ function getTypeReferenceTargetNode(typeNode) {
8
+ if (Node.isTypeReference(typeNode))
9
+ return typeNode.getTypeName();
10
+ if (Node.isExpressionWithTypeArguments(typeNode))
11
+ return typeNode.getExpression();
12
+ return undefined;
13
+ }
14
+ function getTypeReferenceArguments(typeNode) {
15
+ if (Node.isTypeReference(typeNode) || Node.isExpressionWithTypeArguments(typeNode)) {
16
+ return typeNode.getTypeArguments();
17
+ }
18
+ return [];
19
+ }
20
+ function filterExcludedSyntaxProps(extraction, excludedProps) {
21
+ if (excludedProps.size === 0)
22
+ return extraction;
23
+ return {
24
+ ...extraction,
25
+ props: extraction.props.filter((prop) => !excludedProps.has(prop.name)),
26
+ };
27
+ }
28
+ export function extractPropsFromTypeSymbols(type, slotNames, suppressNeverChildrenSlot = false) {
29
+ const props = [];
30
+ let hasChildren = false;
31
+ for (const property of type.getProperties()) {
32
+ const name = property.getName();
33
+ if (name === 'children') {
34
+ if (suppressNeverChildrenSlot) {
35
+ const declaration = property.getValueDeclaration() ?? property.getDeclarations()[0];
36
+ if (declaration && property.getTypeAtLocation(declaration).isNever())
37
+ continue;
38
+ }
39
+ hasChildren = true;
40
+ continue;
41
+ }
42
+ if (slotNames.has(name))
43
+ continue;
44
+ const declaration = property.getValueDeclaration() ?? property.getDeclarations()[0];
45
+ if (!declaration)
46
+ continue;
47
+ const propType = property.getTypeAtLocation(declaration);
48
+ const declarationTypeText = 'getTypeNode' in declaration && typeof declaration.getTypeNode === 'function'
49
+ ? declaration.getTypeNode()?.getText()
50
+ : undefined;
51
+ const typeText = propType.isAny() && declarationTypeText ? declarationTypeText : propType.getText(declaration);
52
+ const required = !property.isOptional();
53
+ const allowedValues = extractAllowedValues(propType);
54
+ props.push({
55
+ name,
56
+ type: typeText,
57
+ required,
58
+ ...(allowedValues && { allowedValues }),
59
+ ...getSourceLineMetadata(declaration),
60
+ });
61
+ }
62
+ return {
63
+ props: props.sort((a, b) => a.name.localeCompare(b.name)),
64
+ hasChildren,
65
+ };
66
+ }
67
+ function extractPropsFromInterfaceDeclaration(declaration, slotNames, seen, excludedProps, allowImportedOmitWorkspaceFallback, suppressNeverChildrenSlot) {
68
+ const hasExpandableDomHeritage = declaration
69
+ .getHeritageClauses()
70
+ .some((clause) => clause.getTypeNodes().some((typeNode) => collectExpandableDomAttributeWrapperContexts(typeNode).length > 0));
71
+ const symbolType = hasExpandableDomHeritage
72
+ ? declaration
73
+ .getType()
74
+ .getProperties()
75
+ .filter((symbol) => {
76
+ const decl = symbol.getValueDeclaration() ?? symbol.getDeclarations()[0];
77
+ return decl?.getParent() === declaration;
78
+ })
79
+ .reduce((acc, symbol) => {
80
+ const decl = symbol.getValueDeclaration() ?? symbol.getDeclarations()[0];
81
+ if (!decl)
82
+ return acc;
83
+ const propType = symbol.getTypeAtLocation(decl);
84
+ const typeText = propType.isAny()
85
+ ? (('getTypeNode' in decl &&
86
+ typeof decl.getTypeNode === 'function'
87
+ ? decl.getTypeNode()?.getText()
88
+ : undefined) ?? propType.getText(decl))
89
+ : propType.getText(decl);
90
+ const name = symbol.getName();
91
+ if (name === 'children') {
92
+ if (suppressNeverChildrenSlot && propType.isNever())
93
+ return acc;
94
+ acc.hasChildren = true;
95
+ return acc;
96
+ }
97
+ if (slotNames.has(name))
98
+ return acc;
99
+ const required = !symbol.isOptional();
100
+ const allowedValues = extractAllowedValues(propType);
101
+ acc.props.push({
102
+ name,
103
+ type: typeText,
104
+ required,
105
+ ...(allowedValues && { allowedValues }),
106
+ ...getSourceLineMetadata(decl),
107
+ });
108
+ return acc;
109
+ }, { props: [], hasChildren: false })
110
+ : extractPropsFromTypeSymbols(declaration.getType(), slotNames, suppressNeverChildrenSlot);
111
+ const ownProps = filterExcludedSyntaxProps(symbolType, excludedProps);
112
+ const inheritedProps = declaration
113
+ .getHeritageClauses()
114
+ .flatMap((clause) => clause
115
+ .getTypeNodes()
116
+ .flatMap((heritageTypeNode) => extractPropsFromTypeNode(heritageTypeNode, slotNames, seen, excludedProps, allowImportedOmitWorkspaceFallback, suppressNeverChildrenSlot).props));
117
+ return {
118
+ props: [...ownProps.props, ...inheritedProps].sort((a, b) => a.name.localeCompare(b.name)),
119
+ hasChildren: ownProps.hasChildren,
120
+ };
121
+ }
122
+ function getMappedOmitEquivalentArgs(typeNode) {
123
+ if (!Node.isTypeReference(typeNode) && !Node.isExpressionWithTypeArguments(typeNode))
124
+ return undefined;
125
+ const [wrappedType, omittedProps] = typeNode.getTypeArguments();
126
+ if (!wrappedType || !omittedProps)
127
+ return undefined;
128
+ const targetNode = Node.isTypeReference(typeNode) ? typeNode.getTypeName() : typeNode.getExpression();
129
+ for (const declaration of getTypeTargetDeclarations(targetNode, true)) {
130
+ if (!Node.isTypeAliasDeclaration(declaration))
131
+ continue;
132
+ if (declaration.getTypeParameters().length !== 2)
133
+ continue;
134
+ const mappedTypeNode = declaration.getTypeNode();
135
+ const [sourceTypeParameter, excludedKeysParameter] = declaration.getTypeParameters();
136
+ const sourceTypeParameterName = sourceTypeParameter.getName();
137
+ const excludedKeysParameterName = excludedKeysParameter.getName();
138
+ if (!mappedTypeNode)
139
+ continue;
140
+ if (Node.isTypeReference(mappedTypeNode) || Node.isExpressionWithTypeArguments(mappedTypeNode)) {
141
+ if (getTypeReferenceName(mappedTypeNode) !== 'Omit')
142
+ continue;
143
+ const [innerWrappedType, innerOmittedProps] = mappedTypeNode.getTypeArguments();
144
+ if (!innerWrappedType || !innerOmittedProps)
145
+ continue;
146
+ if (innerWrappedType.getText() !== sourceTypeParameterName)
147
+ continue;
148
+ if (innerOmittedProps.getText() !== excludedKeysParameterName)
149
+ continue;
150
+ return { wrappedType, omittedProps };
151
+ }
152
+ if (!Node.isMappedTypeNode(mappedTypeNode))
153
+ continue;
154
+ const iterationParameter = mappedTypeNode.getTypeParameter();
155
+ const iterationParameterName = iterationParameter.getName();
156
+ if (iterationParameter.getConstraint()?.getText() !== `keyof ${sourceTypeParameterName}`)
157
+ continue;
158
+ if (mappedTypeNode.getNameTypeNode()?.getText() !==
159
+ `${iterationParameterName} extends ${excludedKeysParameterName} ? never : ${iterationParameterName}`) {
160
+ continue;
161
+ }
162
+ if (mappedTypeNode.getTypeNode()?.getText() !== `${sourceTypeParameterName}[${iterationParameterName}]`)
163
+ continue;
164
+ return { wrappedType, omittedProps };
165
+ }
166
+ return undefined;
167
+ }
168
+ export function extractPropsFromTypeNode(typeNode, slotNames, seen = new Set(), excludedProps = new Set(), allowImportedOmitWorkspaceFallback = false, suppressNeverChildrenSlot = false) {
169
+ if (seen.has(typeNode))
170
+ return { props: [], hasChildren: false };
171
+ seen.add(typeNode);
172
+ if (Node.isParenthesizedTypeNode(typeNode) || Node.isTypeOperatorTypeNode(typeNode)) {
173
+ return extractPropsFromTypeNode(typeNode.getTypeNode(), slotNames, seen, excludedProps, allowImportedOmitWorkspaceFallback, suppressNeverChildrenSlot);
174
+ }
175
+ if (Node.isIntersectionTypeNode(typeNode) || Node.isUnionTypeNode(typeNode)) {
176
+ const propsByName = new Map();
177
+ let hasChildren = false;
178
+ for (const childTypeNode of typeNode.getTypeNodes()) {
179
+ const extracted = extractPropsFromTypeNode(childTypeNode, slotNames, seen, excludedProps, allowImportedOmitWorkspaceFallback, suppressNeverChildrenSlot);
180
+ hasChildren ||= extracted.hasChildren;
181
+ for (const prop of extracted.props) {
182
+ propsByName.set(prop.name, prop);
183
+ }
184
+ }
185
+ return { props: [...propsByName.values()], hasChildren };
186
+ }
187
+ if (Node.isTypeLiteral(typeNode)) {
188
+ return filterExcludedSyntaxProps(extractPropsFromTypeSymbols(typeNode.getType(), slotNames, suppressNeverChildrenSlot), excludedProps);
189
+ }
190
+ if (Node.isInterfaceDeclaration(typeNode)) {
191
+ return extractPropsFromInterfaceDeclaration(typeNode, slotNames, seen, excludedProps, allowImportedOmitWorkspaceFallback, suppressNeverChildrenSlot);
192
+ }
193
+ const typeReferenceTarget = getTypeReferenceTargetNode(typeNode);
194
+ if (typeReferenceTarget) {
195
+ const typeName = getTypeReferenceName(typeNode);
196
+ if (!typeName)
197
+ return { props: [], hasChildren: false };
198
+ const typeArguments = getTypeReferenceArguments(typeNode);
199
+ if (typeName === 'PropsWithChildren') {
200
+ const wrappedType = typeArguments[0];
201
+ if (!wrappedType)
202
+ return { props: [], hasChildren: true };
203
+ const extracted = extractPropsFromTypeNode(wrappedType, slotNames, seen, excludedProps, allowImportedOmitWorkspaceFallback, suppressNeverChildrenSlot);
204
+ return { props: extracted.props, hasChildren: true };
205
+ }
206
+ if (isExpandableDomAttributeWrapperName(typeName) || typeName === 'Pick') {
207
+ return typeName === 'Pick'
208
+ ? {
209
+ props: extractPickedPropsFromTypeNode(typeNode, slotNames, excludedProps),
210
+ hasChildren: false,
211
+ }
212
+ : { props: [], hasChildren: false };
213
+ }
214
+ if (typeName === 'Omit' ||
215
+ typeName === 'Partial' ||
216
+ typeName === 'Readonly' ||
217
+ typeName === 'Required' ||
218
+ typeName === 'NonNullable') {
219
+ const wrappedType = typeArguments[0];
220
+ if (!wrappedType)
221
+ return { props: [], hasChildren: false };
222
+ const nextExcludedProps = new Set(excludedProps);
223
+ if (typeName === 'Omit') {
224
+ const omittedProps = typeArguments[1];
225
+ if (omittedProps) {
226
+ for (const value of getStringLiteralTypeValues(omittedProps)) {
227
+ nextExcludedProps.add(value);
228
+ }
229
+ }
230
+ }
231
+ return extractPropsFromTypeNode(wrappedType, slotNames, seen, nextExcludedProps, allowImportedOmitWorkspaceFallback || typeName === 'Omit', suppressNeverChildrenSlot);
232
+ }
233
+ const mappedOmitArgs = allowImportedOmitWorkspaceFallback ? getMappedOmitEquivalentArgs(typeNode) : undefined;
234
+ if (mappedOmitArgs) {
235
+ const nextExcludedProps = new Set(excludedProps);
236
+ for (const value of getStringLiteralTypeValues(mappedOmitArgs.omittedProps)) {
237
+ nextExcludedProps.add(value);
238
+ }
239
+ return extractPropsFromTypeNode(mappedOmitArgs.wrappedType, slotNames, seen, nextExcludedProps, true, suppressNeverChildrenSlot);
240
+ }
241
+ const wrappedTypeNode = unwrapRepoLocalTransparentPolymorphicWrapper(typeNode, allowImportedOmitWorkspaceFallback) ??
242
+ (!allowImportedOmitWorkspaceFallback ? unwrapRepoLocalTransparentPolymorphicWrapper(typeNode, true) : undefined);
243
+ if (wrappedTypeNode) {
244
+ return extractPropsFromTypeNode(wrappedTypeNode, slotNames, seen, excludedProps, allowImportedOmitWorkspaceFallback, true);
245
+ }
246
+ if (TRANSPARENT_POLYMORPHIC_TYPE_NAMES.has(typeName))
247
+ return { props: [], hasChildren: false };
248
+ for (const declaration of getTypeTargetDeclarations(typeReferenceTarget, allowImportedOmitWorkspaceFallback)) {
249
+ if (!declaration)
250
+ continue;
251
+ if (Node.isInterfaceDeclaration(declaration)) {
252
+ return extractPropsFromInterfaceDeclaration(declaration, slotNames, seen, excludedProps, allowImportedOmitWorkspaceFallback, suppressNeverChildrenSlot);
253
+ }
254
+ if (Node.isTypeAliasDeclaration(declaration)) {
255
+ const aliasedTypeNode = declaration.getTypeNode();
256
+ if (!aliasedTypeNode)
257
+ continue;
258
+ return extractPropsFromTypeNode(aliasedTypeNode, slotNames, seen, excludedProps, allowImportedOmitWorkspaceFallback, suppressNeverChildrenSlot);
259
+ }
260
+ }
261
+ }
262
+ return { props: [], hasChildren: false };
263
+ }
264
+ export function extractPickedPropsFromTypeNode(typeNode, slotNames, excludedProps = new Set()) {
265
+ if (!Node.isTypeReference(typeNode) && !Node.isExpressionWithTypeArguments(typeNode))
266
+ return [];
267
+ const [sourceTypeNode, pickedKeysNode] = typeNode.getTypeArguments();
268
+ if (!sourceTypeNode || !pickedKeysNode)
269
+ return [];
270
+ const sourcePropsByName = new Map();
271
+ for (const prop of getSyntheticDomAttributeProps(sourceTypeNode)) {
272
+ sourcePropsByName.set(prop.name, prop);
273
+ }
274
+ for (const prop of extractPropsFromTypeNode(sourceTypeNode, slotNames, undefined, excludedProps).props) {
275
+ if (!sourcePropsByName.has(prop.name))
276
+ sourcePropsByName.set(prop.name, prop);
277
+ }
278
+ const pickedKeys = getStringLiteralTypeValues(pickedKeysNode);
279
+ const props = [];
280
+ for (const name of pickedKeys) {
281
+ if (slotNames.has(name))
282
+ continue;
283
+ if (excludedProps.has(name))
284
+ continue;
285
+ const pickedProp = sourcePropsByName.get(name);
286
+ if (pickedProp)
287
+ props.push(pickedProp);
288
+ }
289
+ return props.sort((a, b) => a.name.localeCompare(b.name));
290
+ }
291
+ export function extractPropsFromType(type, slotNames, typeNode) {
292
+ const supportsRepoLocalPolymorphicAlias = typeNode !== undefined && isRepoLocalSupportedPolymorphicChain(typeNode, new Set(), true);
293
+ const suppressNeverChildrenSlot = supportsRepoLocalPolymorphicAlias;
294
+ const isPureDomWrapper = typeNode !== undefined && isPureExpandableDomAttributeWrapperType(typeNode);
295
+ const symbolExtraction = supportsRepoLocalPolymorphicAlias || isPureDomWrapper
296
+ ? { props: [], hasChildren: false }
297
+ : extractPropsFromTypeSymbols(type, slotNames, suppressNeverChildrenSlot);
298
+ const syntaxExtraction = typeNode &&
299
+ (symbolExtraction.props.length === 0 ||
300
+ shouldMergeDomSyntaxExtraction(typeNode) ||
301
+ containsImportedOmitWrappedCustomProps(typeNode))
302
+ ? extractPropsFromTypeNode(typeNode, slotNames, undefined, new Set(), false, suppressNeverChildrenSlot)
303
+ : { props: [], hasChildren: false };
304
+ const propsByName = new Map();
305
+ const useSyntaxOnly = typeNode !== undefined && shouldMergeDomSyntaxExtraction(typeNode);
306
+ if (!useSyntaxOnly) {
307
+ for (const prop of symbolExtraction.props) {
308
+ propsByName.set(prop.name, prop);
309
+ }
310
+ }
311
+ for (const prop of syntaxExtraction.props) {
312
+ propsByName.set(prop.name, prop);
313
+ }
314
+ return {
315
+ props: [...propsByName.values()].sort((a, b) => a.name.localeCompare(b.name)),
316
+ hasChildren: symbolExtraction.hasChildren || syntaxExtraction.hasChildren,
317
+ };
318
+ }
@@ -0,0 +1,6 @@
1
+ import { type Type, type Symbol as MorphSymbol } from 'ts-morph';
2
+ import type { RawSlotDefinition } from '../../../types/component.js';
3
+ export declare function isRenderPropType(type: Type): boolean;
4
+ export declare function getRenderPropType(property: MorphSymbol): Type | undefined;
5
+ export declare function collectRenderPropSlotNames(type: Type): Set<string>;
6
+ export declare function extractSlots(type: Type, hasChildren: boolean): RawSlotDefinition[];
@@ -0,0 +1,44 @@
1
+ export function isRenderPropType(type) {
2
+ const callSignatures = type.getCallSignatures();
3
+ if (callSignatures.length === 0)
4
+ return false;
5
+ const returnType = callSignatures[0].getReturnType();
6
+ const returnText = returnType.getText();
7
+ return /ReactNode|ReactElement|JSX\.Element|Element/.test(returnText);
8
+ }
9
+ export function getRenderPropType(property) {
10
+ if (!property.getName().startsWith('render'))
11
+ return undefined;
12
+ const declaration = property.getValueDeclaration() ?? property.getDeclarations()[0];
13
+ if (!declaration)
14
+ return undefined;
15
+ const propType = property.getTypeAtLocation(declaration);
16
+ return isRenderPropType(propType) ? propType : undefined;
17
+ }
18
+ export function collectRenderPropSlotNames(type) {
19
+ const names = new Set();
20
+ for (const property of type.getProperties()) {
21
+ if (getRenderPropType(property))
22
+ names.add(property.getName());
23
+ }
24
+ return names;
25
+ }
26
+ export function extractSlots(type, hasChildren) {
27
+ const slots = [];
28
+ if (hasChildren) {
29
+ slots.push({ name: 'children', isDefault: true });
30
+ }
31
+ for (const property of type.getProperties()) {
32
+ const name = property.getName();
33
+ if (name === 'children')
34
+ continue;
35
+ if (!getRenderPropType(property))
36
+ continue;
37
+ const slotName = name.replace(/^render/, '');
38
+ slots.push({
39
+ name: slotName.charAt(0).toLowerCase() + slotName.slice(1),
40
+ isDefault: false,
41
+ });
42
+ }
43
+ return slots.sort((a, b) => a.name.localeCompare(b.name));
44
+ }
@@ -0,0 +1,4 @@
1
+ import type { RawPropDefinition } from '../../../types/component.js';
2
+ import type { FunctionLike } from './resolve-component-function.js';
3
+ export declare function isImplementationOnlyAliasProp(func: FunctionLike, propName: string): boolean;
4
+ export declare function filterImplementationOnlyAliasProps(props: RawPropDefinition[], func: FunctionLike): RawPropDefinition[];
@@ -0,0 +1,52 @@
1
+ import { Node } from 'ts-morph';
2
+ export function isImplementationOnlyAliasProp(func, propName) {
3
+ if (!propName.startsWith('_'))
4
+ return false;
5
+ const allowedJsxAttributes = new Set([
6
+ 'id',
7
+ 'htmlFor',
8
+ 'aria-activedescendant',
9
+ 'aria-controls',
10
+ 'aria-describedby',
11
+ 'aria-labelledby',
12
+ 'aria-owns',
13
+ ]);
14
+ let sawRuntimeUsage = false;
15
+ for (const node of func.getDescendants()) {
16
+ if (!Node.isIdentifier(node) || node.getText() !== propName)
17
+ continue;
18
+ const bindingElement = node.getFirstAncestor((ancestor) => Node.isBindingElement(ancestor));
19
+ if (bindingElement?.getNameNode() === node)
20
+ continue;
21
+ const jsxAttribute = node.getFirstAncestor((ancestor) => Node.isJsxAttribute(ancestor));
22
+ if (jsxAttribute) {
23
+ const attributeName = jsxAttribute.getNameNode().getText();
24
+ if (allowedJsxAttributes.has(attributeName)) {
25
+ sawRuntimeUsage = true;
26
+ continue;
27
+ }
28
+ return false;
29
+ }
30
+ const propertyAssignment = node.getFirstAncestor((ancestor) => Node.isPropertyAssignment(ancestor));
31
+ if (propertyAssignment) {
32
+ const propertyName = propertyAssignment.getName();
33
+ if (propertyName === propName) {
34
+ sawRuntimeUsage = true;
35
+ continue;
36
+ }
37
+ return false;
38
+ }
39
+ return false;
40
+ }
41
+ return sawRuntimeUsage;
42
+ }
43
+ export function filterImplementationOnlyAliasProps(props, func) {
44
+ const publicPropNames = new Set(props.filter((prop) => !prop.name.startsWith('_')).map((prop) => prop.name));
45
+ return props.filter((prop) => {
46
+ if (/^__scope[A-Z]/.test(prop.name))
47
+ return false;
48
+ if (prop.name.startsWith('_') && publicPropNames.has(prop.name.slice(1)))
49
+ return false;
50
+ return !isImplementationOnlyAliasProp(func, prop.name);
51
+ });
52
+ }
@@ -0,0 +1,6 @@
1
+ import { Node, 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 collectRestBindingNames(nameNode: Node): Set<string>;
5
+ export declare function isComponentSpreadAttribute(attribute: Node, bindingNames: Set<string>): boolean;
6
+ export declare function inferPrimitiveDomPropsFromImplementation(funcNode: FunctionLike, propsParam: ParameterDeclaration): RawPropDefinition[];