@contentful/experience-design-system-extraction 2.36.2-dev-build-3425e8d3.0 → 2.36.2-dev-build-3b8c3735.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
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@contentful/experience-design-system-extraction",
3
- "version": "2.36.2-dev-build-3425e8d3.0",
3
+ "version": "2.36.2-dev-build-3b8c3735.0",
4
4
  "description": "Component extraction engine for the Contentful Experience Design System SDK",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -0,0 +1,10 @@
1
+ import type { ExtractionEndpointRequest, ExtractionEndpointResponse } from '../types/contract.js';
2
+ export type { ExtractionEndpointProgress, ExtractionEndpointRequest, ExtractionEndpointResponse, } from '../types/contract.js';
3
+ /**
4
+ * Stable in-process extraction contract.
5
+ *
6
+ * The controller owns public request validation and progress translation. The
7
+ * extraction service owns source analysis and quality policy; neither layer
8
+ * scans directories, invokes agents, or persists sessions.
9
+ */
10
+ export declare function extractEndpoint(request: ExtractionEndpointRequest): Promise<ExtractionEndpointResponse>;
@@ -0,0 +1,33 @@
1
+ import { executeExtractionOrchestrator } from '../orchestrator/execute-extraction-orchestrator.js';
2
+ import { validateRequest } from './helpers/validate-endpoint-request.js';
3
+ /**
4
+ * Stable in-process extraction contract.
5
+ *
6
+ * The controller owns public request validation and progress translation. The
7
+ * extraction service owns source analysis and quality policy; neither layer
8
+ * scans directories, invokes agents, or persists sessions.
9
+ */
10
+ export async function extractEndpoint(request) {
11
+ validateRequest(request);
12
+ const filePaths = [...request.filePaths];
13
+ const result = await executeExtractionOrchestrator({
14
+ filePaths,
15
+ ...(request.resolveUnreachable !== undefined ? { resolveUnreachable: request.resolveUnreachable } : {}),
16
+ ...(request.projectRoot !== undefined ? { projectRoot: request.projectRoot } : {}),
17
+ onProgress: ({ filesProcessed, componentsFound }) => {
18
+ request.onProgress?.({
19
+ phase: 'extract',
20
+ filesProcessed,
21
+ totalFiles: filePaths.length,
22
+ componentsFound,
23
+ });
24
+ },
25
+ });
26
+ request.onProgress?.({
27
+ phase: 'extract',
28
+ filesProcessed: filePaths.length,
29
+ totalFiles: filePaths.length,
30
+ componentsFound: result.components.length,
31
+ });
32
+ return result;
33
+ }
@@ -0,0 +1,2 @@
1
+ import type { ExtractionEndpointRequest } from '../../types/contract.js';
2
+ export declare function validateRequest(request: ExtractionEndpointRequest): void;
@@ -0,0 +1,24 @@
1
+ export function validateRequest(request) {
2
+ if (request === null || typeof request !== 'object') {
3
+ throw new TypeError('extractEndpoint requires a request object');
4
+ }
5
+ if (!Array.isArray(request.filePaths)) {
6
+ throw new TypeError('extractEndpoint requires filePaths to be an array');
7
+ }
8
+ if (request.filePaths.some((filePath) => typeof filePath !== 'string' || filePath.trim().length === 0)) {
9
+ throw new TypeError('extractEndpoint requires filePaths to contain non-empty strings');
10
+ }
11
+ if (request.projectRoot !== undefined &&
12
+ (typeof request.projectRoot !== 'string' || request.projectRoot.trim().length === 0)) {
13
+ throw new TypeError('extractEndpoint requires projectRoot to be a non-empty string when provided');
14
+ }
15
+ if (request.resolveUnreachable !== undefined &&
16
+ request.resolveUnreachable !== 'auto' &&
17
+ request.resolveUnreachable !== 'always' &&
18
+ request.resolveUnreachable !== 'never') {
19
+ throw new TypeError("extractEndpoint requires resolveUnreachable to be 'auto', 'always', or 'never'");
20
+ }
21
+ if (request.onProgress !== undefined && typeof request.onProgress !== 'function') {
22
+ throw new TypeError('extractEndpoint requires onProgress to be a function when provided');
23
+ }
24
+ }
@@ -1,4 +1,4 @@
1
- import type { ComponentExtractionResult } from '../types.js';
1
+ import type { ComponentExtractionResult } from '../../types/component.js';
2
2
  export declare function extractAstroComponents(filePaths: string[], onProgress?: (p: {
3
3
  filesProcessed: number;
4
4
  componentsFound: number;
@@ -0,0 +1,45 @@
1
+ import os from 'node:os';
2
+ import { basename } from 'node:path';
3
+ import { runFileExtractionWorkers } from '../shared/helpers/file-processing/file-workers.js';
4
+ import { createSortedExtractionResult } from '../shared/helpers/file-processing/result-normalizer.js';
5
+ import { extractFallbackPropsFromFrontmatter, extractPropsFromFrontmatter, extractDefaultsFromFrontmatter, mergeProps, } from './frontmatter.js';
6
+ import { extractSlotsFromTemplate, extractSlotsFromFrontmatter, mergeSlots } from './slots.js';
7
+ function extractFromAstroFile(filePath, source) {
8
+ const name = basename(filePath, '.astro');
9
+ // Split on `---` fences: frontmatter is between first and second `---`.
10
+ // If there is no `---`, the entire file is a template-only component.
11
+ const fenceIndex = source.startsWith('---') ? 0 : -1;
12
+ let frontmatter = '';
13
+ let template = source;
14
+ if (fenceIndex !== -1) {
15
+ const endFenceIndex = source.indexOf('---', fenceIndex + 3);
16
+ if (endFenceIndex !== -1) {
17
+ frontmatter = source.slice(fenceIndex + 3, endFenceIndex);
18
+ template = source.slice(endFenceIndex + 3);
19
+ }
20
+ }
21
+ const props = frontmatter
22
+ ? mergeProps(extractFallbackPropsFromFrontmatter(frontmatter), extractPropsFromFrontmatter(frontmatter))
23
+ : [];
24
+ const defaults = frontmatter ? extractDefaultsFromFrontmatter(frontmatter) : new Map();
25
+ const propsWithDefaults = props.map((p) => {
26
+ const defaultValue = defaults.get(p.name);
27
+ return defaultValue ? { ...p, defaultValue } : p;
28
+ });
29
+ const slots = mergeSlots(extractSlotsFromTemplate(template), extractSlotsFromFrontmatter(frontmatter));
30
+ return {
31
+ name,
32
+ source: filePath,
33
+ sourcePath: filePath,
34
+ framework: 'astro',
35
+ props: propsWithDefaults,
36
+ slots,
37
+ };
38
+ }
39
+ export async function extractAstroComponents(filePaths, onProgress) {
40
+ const astroFiles = filePaths.filter((f) => f.endsWith('.astro'));
41
+ const { items: components, warnings } = await runFileExtractionWorkers(astroFiles, os.cpus().length, async (filePath, source) => ({
42
+ item: extractFromAstroFile(filePath, source),
43
+ }), (filePath, error) => `Failed to extract from ${filePath}: ${error instanceof Error ? error.message : String(error)}`, onProgress);
44
+ return createSortedExtractionResult(components, warnings);
45
+ }
@@ -0,0 +1,11 @@
1
+ import type { RawPropDefinition } from '../../types/component.js';
2
+ /** Returns the string literals from a union type like `'a' | 'b' | 'c'`, or undefined if fewer than two are found. */
3
+ export declare function extractAllowedValues(typeText: string): string[] | undefined;
4
+ /** Reads prop names and requiredness from destructured `Astro.props` bindings when no typed Props interface exists. */
5
+ export declare function extractFallbackPropsFromFrontmatter(frontmatter: string): RawPropDefinition[];
6
+ /** Reads typed props from an `interface Props` or `type Props = ...` declaration in the frontmatter. */
7
+ export declare function extractPropsFromFrontmatter(frontmatter: string): RawPropDefinition[];
8
+ /** Reads default values from destructuring initializers in `const { foo = 'bar' } = Astro.props`. */
9
+ export declare function extractDefaultsFromFrontmatter(frontmatter: string): Map<string, string>;
10
+ /** Merges multiple prop arrays, preferring later entries on name collision and treating a prop as required only if all sources require it. */
11
+ export declare function mergeProps(...propGroups: RawPropDefinition[][]): RawPropDefinition[];
@@ -0,0 +1,96 @@
1
+ import { resolveTypeProperty } from '../shared/helpers/resolve-type-symbol.js';
2
+ import { getSourceLineMetadata } from '../shared/helpers/get-node-source-lines.js';
3
+ import { createAstroFrontmatterProject, collectAstroPropsBindings, extractBindingPropName, } from './helpers/collect-astro-props-bindings.js';
4
+ /** Returns the string literals from a union type like `'a' | 'b' | 'c'`, or undefined if fewer than two are found. */
5
+ export function extractAllowedValues(typeText) {
6
+ const parts = typeText.split('|').map((p) => p.trim());
7
+ const literals = parts.filter((p) => /^['"]/.test(p)).map((p) => p.replace(/^['"]|['"]$/g, ''));
8
+ return literals.length >= 2 ? literals.sort() : undefined;
9
+ }
10
+ /** Reads prop names and requiredness from destructured `Astro.props` bindings when no typed Props interface exists. */
11
+ export function extractFallbackPropsFromFrontmatter(frontmatter) {
12
+ const props = new Map();
13
+ for (const element of collectAstroPropsBindings(frontmatter)) {
14
+ const propName = extractBindingPropName(element);
15
+ if (!propName)
16
+ continue;
17
+ props.set(propName, {
18
+ name: propName,
19
+ type: 'any',
20
+ required: !element.getInitializer(),
21
+ });
22
+ }
23
+ return [...props.values()].sort((a, b) => a.name.localeCompare(b.name));
24
+ }
25
+ /** Reads typed props from an `interface Props` or `type Props = ...` declaration in the frontmatter. */
26
+ export function extractPropsFromFrontmatter(frontmatter) {
27
+ const sf = createAstroFrontmatterProject().createSourceFile('__frontmatter__.ts', frontmatter);
28
+ const props = [];
29
+ const propsInterface = sf.getInterface('Props');
30
+ const propsTypeAlias = sf.getTypeAlias('Props');
31
+ if (propsInterface) {
32
+ for (const member of propsInterface.getProperties()) {
33
+ const name = member.getName();
34
+ const typeText = member.getTypeNode()?.getText() ?? 'any';
35
+ const required = !member.hasQuestionToken();
36
+ const allowedValues = extractAllowedValues(typeText);
37
+ props.push({
38
+ name,
39
+ type: typeText,
40
+ required,
41
+ ...(allowedValues && { allowedValues }),
42
+ sourceStartLine: member.getStartLineNumber(),
43
+ sourceEndLine: member.getEndLineNumber(),
44
+ });
45
+ }
46
+ }
47
+ else if (propsTypeAlias) {
48
+ const type = propsTypeAlias.getType();
49
+ for (const property of type.getProperties()) {
50
+ const resolved = resolveTypeProperty(property);
51
+ if (!resolved)
52
+ continue;
53
+ const { name, declaration: decl, typeText, required } = resolved;
54
+ const allowedValues = extractAllowedValues(typeText);
55
+ props.push({
56
+ name,
57
+ type: typeText,
58
+ required,
59
+ ...(allowedValues && { allowedValues }),
60
+ ...getSourceLineMetadata(decl),
61
+ });
62
+ }
63
+ }
64
+ return props.sort((a, b) => a.name.localeCompare(b.name));
65
+ }
66
+ /** Reads default values from destructuring initializers in `const { foo = 'bar' } = Astro.props`. */
67
+ export function extractDefaultsFromFrontmatter(frontmatter) {
68
+ const defaults = new Map();
69
+ for (const element of collectAstroPropsBindings(frontmatter)) {
70
+ const propName = extractBindingPropName(element);
71
+ if (!propName)
72
+ continue;
73
+ const elementInitializer = element.getInitializer();
74
+ if (!elementInitializer)
75
+ continue;
76
+ defaults.set(propName, elementInitializer.getText().replace(/^['"]|['"]$/g, ''));
77
+ }
78
+ return defaults;
79
+ }
80
+ /** Merges multiple prop arrays, preferring later entries on name collision and treating a prop as required only if all sources require it. */
81
+ export function mergeProps(...propGroups) {
82
+ const merged = new Map();
83
+ for (const props of propGroups) {
84
+ for (const prop of props) {
85
+ const existing = merged.get(prop.name);
86
+ merged.set(prop.name, existing
87
+ ? {
88
+ ...existing,
89
+ ...prop,
90
+ required: existing.required && prop.required,
91
+ }
92
+ : prop);
93
+ }
94
+ }
95
+ return [...merged.values()].sort((a, b) => a.name.localeCompare(b.name));
96
+ }
@@ -0,0 +1,4 @@
1
+ import { Project } from 'ts-morph';
2
+ export declare function createAstroFrontmatterProject(): Project;
3
+ export declare function extractBindingPropName(element: import('ts-morph').BindingElement): string | null;
4
+ export declare function collectAstroPropsBindings(frontmatter: string): import('ts-morph').BindingElement[];
@@ -0,0 +1,47 @@
1
+ import { Node, Project } from 'ts-morph';
2
+ export function createAstroFrontmatterProject() {
3
+ return new Project({
4
+ compilerOptions: { strict: false, target: 99, module: 99, allowJs: true },
5
+ useInMemoryFileSystem: true,
6
+ skipAddingFilesFromTsConfig: true,
7
+ });
8
+ }
9
+ function usesAstroProps(initializer) {
10
+ if (!initializer)
11
+ return false;
12
+ if (initializer.getText() === 'Astro.props')
13
+ return true;
14
+ let found = false;
15
+ initializer.forEachDescendant((node) => {
16
+ if (found)
17
+ return false;
18
+ if (Node.isPropertyAccessExpression(node) && node.getText() === 'Astro.props') {
19
+ found = true;
20
+ return false;
21
+ }
22
+ return undefined;
23
+ });
24
+ return found;
25
+ }
26
+ export function extractBindingPropName(element) {
27
+ if (element.getText().startsWith('...'))
28
+ return null;
29
+ return element.getPropertyNameNode()?.getText() ?? element.getNameNode().getText();
30
+ }
31
+ export function collectAstroPropsBindings(frontmatter) {
32
+ const elements = [];
33
+ const sf = createAstroFrontmatterProject().createSourceFile('__frontmatter__.ts', frontmatter);
34
+ sf.forEachDescendant((node) => {
35
+ if (!Node.isVariableDeclaration(node))
36
+ return;
37
+ const initializer = node.getInitializer();
38
+ if (!initializer || !usesAstroProps(initializer))
39
+ return;
40
+ const nameNode = node.getNameNode();
41
+ if (!Node.isObjectBindingPattern(nameNode))
42
+ return;
43
+ for (const element of nameNode.getElements())
44
+ elements.push(element);
45
+ });
46
+ return elements;
47
+ }
@@ -0,0 +1,7 @@
1
+ import type { RawSlotDefinition } from '../../types/component.js';
2
+ /** Finds `<slot name="...">` tags in the Astro template section. */
3
+ export declare function extractSlotsFromTemplate(template: string): RawSlotDefinition[];
4
+ /** Finds `Astro.slots.render('name')` calls in the frontmatter to detect programmatically-rendered slots. */
5
+ export declare function extractSlotsFromFrontmatter(frontmatter: string): RawSlotDefinition[];
6
+ /** Merges slot arrays, keeping the first occurrence of each name. */
7
+ export declare function mergeSlots(...slotGroups: RawSlotDefinition[][]): RawSlotDefinition[];
@@ -0,0 +1,44 @@
1
+ /** Finds `<slot name="...">` tags in the Astro template section. */
2
+ export function extractSlotsFromTemplate(template) {
3
+ const slots = [];
4
+ const seen = new Set();
5
+ const slotRegex = /<slot(?:\s+name=["']([^"']+)["'])?\s*\/?>/g;
6
+ let match;
7
+ while ((match = slotRegex.exec(template)) !== null) {
8
+ const slotName = match[1] ?? 'default';
9
+ if (!seen.has(slotName)) {
10
+ seen.add(slotName);
11
+ slots.push({ name: slotName, isDefault: slotName === 'default' });
12
+ }
13
+ }
14
+ return slots;
15
+ }
16
+ /** Finds `Astro.slots.render('name')` calls in the frontmatter to detect programmatically-rendered slots. */
17
+ export function extractSlotsFromFrontmatter(frontmatter) {
18
+ const slots = [];
19
+ const seen = new Set();
20
+ const slotRenderRegex = /Astro\.slots\.render\(\s*['"]([^'"]+)['"]\s*\)/g;
21
+ let match;
22
+ while ((match = slotRenderRegex.exec(frontmatter)) !== null) {
23
+ const slotName = match[1];
24
+ if (!seen.has(slotName)) {
25
+ seen.add(slotName);
26
+ slots.push({ name: slotName, isDefault: slotName === 'default' });
27
+ }
28
+ }
29
+ return slots;
30
+ }
31
+ /** Merges slot arrays, keeping the first occurrence of each name. */
32
+ export function mergeSlots(...slotGroups) {
33
+ const merged = [];
34
+ const seen = new Set();
35
+ for (const slots of slotGroups) {
36
+ for (const slot of slots) {
37
+ if (seen.has(slot.name))
38
+ continue;
39
+ seen.add(slot.name);
40
+ merged.push(slot);
41
+ }
42
+ }
43
+ return merged;
44
+ }
@@ -1,2 +1,2 @@
1
- import type { ComponentExtractionResult } from '../types.js';
1
+ import type { ComponentExtractionResult } from '../../types/component.js';
2
2
  export declare function extractReactComponents(filePaths: string[]): Promise<ComponentExtractionResult>;
@@ -0,0 +1,31 @@
1
+ import { extractTsxComponents } from '../shared/helpers/tsx-shared.js';
2
+ import { resolveReactAllowedComponents } from './helpers/extract-react-allowed-components.js';
3
+ import { synthesizeReactStructuralSlots } from './helpers/synthesize-react-structural-slots.js';
4
+ import { resolveReactPropForwarding } from './helpers/resolve-react-prop-forwarding.js';
5
+ import { extractFromReactSourceFile } from './helpers/extract-from-react-source-file.js';
6
+ function isStencilFile(sourceFile) {
7
+ return sourceFile.getImportDeclarations().some((imp) => imp.getModuleSpecifierValue() === '@stencil/core');
8
+ }
9
+ function isNextJsComponent(filePath, exportedNames) {
10
+ const normalized = filePath.replace(/\\/g, '/');
11
+ const isAppRouterFile = /\/app\/.*\/(page|layout)\.[jt]sx?$/.test(normalized);
12
+ const hasNextExports = exportedNames.some((name) => name === 'generateMetadata' || name === 'generateStaticParams');
13
+ return isAppRouterFile || hasNextExports;
14
+ }
15
+ export async function extractReactComponents(filePaths) {
16
+ const { components, warnings, exclusions, project } = extractTsxComponents(filePaths, /\.[jt]sx$/, (sourceFile, exclusions) => {
17
+ if (isStencilFile(sourceFile))
18
+ return [];
19
+ const fileExports = [...sourceFile.getExportedDeclarations().keys()];
20
+ const isNext = isNextJsComponent(sourceFile.getFilePath(), fileExports);
21
+ return extractFromReactSourceFile(sourceFile, isNext, exclusions);
22
+ });
23
+ resolveReactAllowedComponents(components);
24
+ synthesizeReactStructuralSlots(components, project);
25
+ resolveReactPropForwarding(components);
26
+ return {
27
+ components: components.sort((a, b) => a.name.localeCompare(b.name)),
28
+ warnings,
29
+ exclusions,
30
+ };
31
+ }
@@ -0,0 +1,4 @@
1
+ import { Node } from 'ts-morph';
2
+ import { type ExpandableDomAttributeWrapperContext } from './dom-attribute-surfaces.js';
3
+ export declare function getStringLiteralTypeValues(typeNode: Node): string[];
4
+ export declare function collectExpandableDomAttributeWrapperContexts(typeNode: Node, seen?: Set<Node<import("ts-morph").ts.Node>>, excludedProps?: Set<string>): ExpandableDomAttributeWrapperContext[];
@@ -0,0 +1,73 @@
1
+ import { Node } from 'ts-morph';
2
+ import { getTypeReferenceName, getNodeDefinitions } from '../../shared/helpers/tsx-shared.js';
3
+ import { getTypeReferenceTargetNode, getTypeReferenceArguments } from '../../shared/helpers/tsx-node-utils.js';
4
+ import { isExpandableDomAttributeWrapperName, } from './dom-attribute-surfaces.js';
5
+ export function getStringLiteralTypeValues(typeNode) {
6
+ if (Node.isLiteralTypeNode(typeNode)) {
7
+ const literal = typeNode.getLiteral();
8
+ if (Node.isStringLiteral(literal))
9
+ return [literal.getLiteralText()];
10
+ }
11
+ if (!Node.isUnionTypeNode(typeNode))
12
+ return [];
13
+ return typeNode.getTypeNodes().flatMap((n) => getStringLiteralTypeValues(n));
14
+ }
15
+ export function collectExpandableDomAttributeWrapperContexts(typeNode, seen = new Set(), excludedProps = new Set()) {
16
+ if (seen.has(typeNode))
17
+ return [];
18
+ seen.add(typeNode);
19
+ if (Node.isParenthesizedTypeNode(typeNode) || Node.isTypeOperatorTypeNode(typeNode)) {
20
+ return collectExpandableDomAttributeWrapperContexts(typeNode.getTypeNode(), seen, excludedProps);
21
+ }
22
+ if (Node.isIntersectionTypeNode(typeNode) || Node.isUnionTypeNode(typeNode)) {
23
+ return typeNode
24
+ .getTypeNodes()
25
+ .flatMap((child) => collectExpandableDomAttributeWrapperContexts(child, seen, excludedProps));
26
+ }
27
+ const typeReferenceTarget = getTypeReferenceTargetNode(typeNode);
28
+ if (typeReferenceTarget) {
29
+ const typeName = getTypeReferenceName(typeNode);
30
+ if (!typeName)
31
+ return [];
32
+ const typeArguments = getTypeReferenceArguments(typeNode);
33
+ if (isExpandableDomAttributeWrapperName(typeName)) {
34
+ return [{ name: typeName, excludedProps: new Set(excludedProps) }];
35
+ }
36
+ if (typeName === 'Omit') {
37
+ const [wrappedType, omittedProps] = typeArguments;
38
+ if (!wrappedType)
39
+ return [];
40
+ const nextExcludedProps = new Set(excludedProps);
41
+ if (omittedProps) {
42
+ for (const value of getStringLiteralTypeValues(omittedProps))
43
+ nextExcludedProps.add(value);
44
+ }
45
+ return collectExpandableDomAttributeWrapperContexts(wrappedType, seen, nextExcludedProps);
46
+ }
47
+ if (typeName === 'Partial' || typeName === 'Readonly' || typeName === 'Required' || typeName === 'NonNullable') {
48
+ const wrappedType = typeArguments[0];
49
+ if (!wrappedType)
50
+ return [];
51
+ return collectExpandableDomAttributeWrapperContexts(wrappedType, seen, excludedProps);
52
+ }
53
+ for (const definition of getNodeDefinitions(typeReferenceTarget)) {
54
+ const declaration = definition.getDeclarationNode();
55
+ if (!declaration)
56
+ continue;
57
+ if (Node.isInterfaceDeclaration(declaration)) {
58
+ return declaration
59
+ .getHeritageClauses()
60
+ .flatMap((clause) => clause
61
+ .getTypeNodes()
62
+ .flatMap((heritageTypeNode) => collectExpandableDomAttributeWrapperContexts(heritageTypeNode, seen, excludedProps)));
63
+ }
64
+ if (Node.isTypeAliasDeclaration(declaration)) {
65
+ const aliasedTypeNode = declaration.getTypeNode();
66
+ if (!aliasedTypeNode)
67
+ return [];
68
+ return collectExpandableDomAttributeWrapperContexts(aliasedTypeNode, seen, excludedProps);
69
+ }
70
+ }
71
+ }
72
+ return [];
73
+ }
@@ -0,0 +1,14 @@
1
+ import { type ParameterDeclaration } from 'ts-morph';
2
+ import { type FunctionLike } from './resolve-component-function.js';
3
+ export type PropForwardingEdge = {
4
+ sourceProp: string;
5
+ targetComponentIdentity: string;
6
+ targetProp: string;
7
+ };
8
+ export type PropDataflow = {
9
+ intrinsicDomProps: Set<string>;
10
+ componentEdges: PropForwardingEdge[];
11
+ };
12
+ export declare function getComponentIdentity(func: FunctionLike): string;
13
+ /** Trace only statically resolvable, component-local prop dataflow into JSX. */
14
+ export declare function collectPropDataflow(func: FunctionLike, param: ParameterDeclaration, availablePropNames: Set<string>): PropDataflow;