@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,4 @@
1
+ import { Project } from 'ts-morph';
2
+ import type { AstNode } from '../types/svelte-ast-node.js';
3
+ import type { ResolvedTypeMember } from './extract-svelte-ast-type-members.js';
4
+ export declare function resolveViaTypeChecker(annotation: AstNode, instance: AstNode, moduleScript: AstNode | undefined, filePath: string, source: string, snippetLocals: Set<string>, externalProject?: Project): Promise<ResolvedTypeMember[] | null>;
@@ -0,0 +1,68 @@
1
+ import { Project, ScriptTarget, ModuleKind, ts } from 'ts-morph';
2
+ import { isSnippetTypeText } from './render-svelte-type.js';
3
+ import { getSourceText, getScriptText, extractAllowedValuesFromType, readJsDocFromDeclaration, readDeclaredTypeNodeText, typeRefersToSnippet, } from './extract-svelte-declaration-data.js';
4
+ export async function resolveViaTypeChecker(annotation, instance, moduleScript, filePath, source, snippetLocals, externalProject) {
5
+ const annotationText = getSourceText(source, annotation);
6
+ if (!annotationText)
7
+ return null;
8
+ const moduleText = getScriptText(source, moduleScript);
9
+ const instanceText = getScriptText(source, instance);
10
+ const synthetic = [moduleText, instanceText, `type __SveltePropsT__ = ${annotationText};`].filter(Boolean).join('\n');
11
+ const project = externalProject ??
12
+ new Project({
13
+ compilerOptions: {
14
+ strict: false,
15
+ target: ScriptTarget.ESNext,
16
+ module: ModuleKind.ESNext,
17
+ allowJs: true,
18
+ jsx: ts.JsxEmit.Preserve,
19
+ },
20
+ useInMemoryFileSystem: false,
21
+ skipAddingFilesFromTsConfig: true,
22
+ });
23
+ const syntheticPath = `${filePath}.__svelte-props__.ts`;
24
+ let sf;
25
+ try {
26
+ sf = project.createSourceFile(syntheticPath, synthetic, {
27
+ overwrite: true,
28
+ });
29
+ }
30
+ catch {
31
+ return null;
32
+ }
33
+ const alias = sf.getTypeAlias('__SveltePropsT__');
34
+ if (!alias)
35
+ return null;
36
+ const apparent = alias.getType().getApparentType();
37
+ const properties = apparent.getProperties();
38
+ if (properties.length === 0)
39
+ return null;
40
+ const members = [];
41
+ for (const symbol of properties) {
42
+ const name = symbol.getName();
43
+ const declaration = symbol.getValueDeclaration() ?? symbol.getDeclarations()[0];
44
+ if (!declaration)
45
+ continue;
46
+ const propType = symbol.getTypeAtLocation(declaration);
47
+ let typeText = propType.getText(declaration);
48
+ const optional = symbol.isOptional();
49
+ if (optional)
50
+ typeText = typeText.replace(/\s*\|\s*undefined$/, '').replace(/^undefined\s*\|\s*/, '');
51
+ const allowed = extractAllowedValuesFromType(propType);
52
+ const description = readJsDocFromDeclaration(declaration);
53
+ const declaredTypeText = readDeclaredTypeNodeText(declaration);
54
+ const isSnippet = (declaredTypeText !== null && isSnippetTypeText(declaredTypeText, snippetLocals)) ||
55
+ typeRefersToSnippet(propType) ||
56
+ isSnippetTypeText(typeText, snippetLocals);
57
+ members.push({
58
+ name,
59
+ optional,
60
+ typeText,
61
+ ...(declaredTypeText ? { declaredTypeText } : {}),
62
+ isSnippet,
63
+ ...(allowed ? { allowedValues: allowed } : {}),
64
+ ...(description ? { description } : {}),
65
+ });
66
+ }
67
+ return members;
68
+ }
@@ -0,0 +1,6 @@
1
+ import type { AstNode } from '../types/svelte-ast-node.js';
2
+ import { type ResolvedTypeMember } from './extract-svelte-ast-type-members.js';
3
+ export type { ResolvedTypeMember };
4
+ export { readPropertySignature, readMembersFromTypeLiteral, readMembersFromInterfaceOrAlias, } from './extract-svelte-ast-type-members.js';
5
+ export { resolveViaTypeChecker } from './resolve-svelte-type-checker.js';
6
+ export declare function resolveTypeMembers(annotation: AstNode, instance: AstNode, moduleScript: AstNode | undefined, filePath: string, source: string): Promise<ResolvedTypeMember[] | null>;
@@ -0,0 +1,30 @@
1
+ import { collectSnippetImportLocals, findLocalTypeDeclaration, declarationHasHeritage, mergeSets, } from './find-svelte-script-declarations.js';
2
+ import { readMembersFromTypeLiteral, readMembersFromInterfaceOrAlias, } from './extract-svelte-ast-type-members.js';
3
+ import { resolveViaTypeChecker } from './resolve-svelte-type-checker.js';
4
+ import { resolveImportedTypeMembers } from './resolve-svelte-external-type-readers.js';
5
+ export { readPropertySignature, readMembersFromTypeLiteral, readMembersFromInterfaceOrAlias, } from './extract-svelte-ast-type-members.js';
6
+ export { resolveViaTypeChecker } from './resolve-svelte-type-checker.js';
7
+ export async function resolveTypeMembers(annotation, instance, moduleScript, filePath, source) {
8
+ const snippetLocals = mergeSets(collectSnippetImportLocals(instance), moduleScript ? collectSnippetImportLocals(moduleScript) : new Set());
9
+ if (annotation.type === 'TSTypeLiteral') {
10
+ return readMembersFromTypeLiteral(annotation, snippetLocals);
11
+ }
12
+ if (annotation.type === 'TSTypeReference') {
13
+ const refName = annotation['typeName']?.['name'] ?? null;
14
+ if (refName) {
15
+ const local = findLocalTypeDeclaration(instance, refName, moduleScript);
16
+ if (local) {
17
+ const fastPathMembers = readMembersFromInterfaceOrAlias(local, snippetLocals);
18
+ if (fastPathMembers.length > 0 && !declarationHasHeritage(local))
19
+ return fastPathMembers;
20
+ }
21
+ else {
22
+ const imported = (await resolveImportedTypeMembers(refName, instance, filePath)) ??
23
+ (moduleScript ? await resolveImportedTypeMembers(refName, moduleScript, filePath) : null);
24
+ if (imported)
25
+ return imported;
26
+ }
27
+ }
28
+ }
29
+ return resolveViaTypeChecker(annotation, instance, moduleScript, filePath, source, snippetLocals);
30
+ }
@@ -0,0 +1,13 @@
1
+ import type { RawComponentDefinition } from '../../../types/component.js';
2
+ import type { ExtractorOptions } from '../../../types/options.js';
3
+ import type { AstNode } from '../types/svelte-ast-node.js';
4
+ export interface RetryContext {
5
+ filePath: string;
6
+ source: string;
7
+ instance: AstNode;
8
+ moduleScript: AstNode | undefined;
9
+ annotation: AstNode;
10
+ componentName: string;
11
+ }
12
+ export declare function maybeRunResolveUnreachableRetry(components: RawComponentDefinition[], warnings: string[], retryContexts: Map<string, RetryContext>, opts: ExtractorOptions | undefined): Promise<string[]>;
13
+ export declare function collapseUnresolvedTypeWarnings(warnings: string[]): string[];
@@ -0,0 +1,192 @@
1
+ import { dirname, join } from 'node:path';
2
+ import { existsSync } from 'node:fs';
3
+ import { createRequire } from 'node:module';
4
+ import { Project, ScriptTarget, ModuleKind, ts } from 'ts-morph';
5
+ import { computeExtractionScore, deriveNeedsReview, } from '../../../services/quality/helpers/scoring/compute-extraction-score.js';
6
+ import { mergeSlots } from './extract-svelte-template-slots.js';
7
+ import { collectSnippetImportLocals, mergeSets, findLocalTypeDeclaration, collectReferencedTypeNames, collectImportSpecifiersForNames, } from './find-svelte-script-declarations.js';
8
+ import { resolveViaTypeChecker } from './resolve-svelte-type-members.js';
9
+ import { extractFromTypeMembersOnly } from './extract-svelte-props.js';
10
+ import { locateDtsForSpecifier } from './resolve-dts-location.js';
11
+ async function retryComponentWithProject(component, ctx, project, warnings) {
12
+ const snippetLocals = mergeSets(collectSnippetImportLocals(ctx.instance), ctx.moduleScript ? collectSnippetImportLocals(ctx.moduleScript) : new Set());
13
+ let members = null;
14
+ try {
15
+ members = await resolveViaTypeChecker(ctx.annotation, ctx.instance, ctx.moduleScript, ctx.filePath, ctx.source, snippetLocals, project);
16
+ }
17
+ catch {
18
+ members = null;
19
+ }
20
+ if (!members || members.length === 0)
21
+ return false;
22
+ const { props, snippetSlots } = extractFromTypeMembersOnly(members);
23
+ const templateSlots = component.slots.filter((s) => !snippetSlots.some((ss) => ss.name === s.name));
24
+ const finalSlots = mergeSlots(snippetSlots, templateSlots).slots;
25
+ const slotNames = new Set(finalSlots.map((s) => s.name));
26
+ component.props = props.filter((p) => !slotNames.has(p.name));
27
+ component.slots = finalSlots;
28
+ const remainingReasons = (component.reviewReasons ?? []).filter((r) => r !== 'props-type-unresolved');
29
+ const score = computeExtractionScore(component, {
30
+ additionalIssueCount: remainingReasons.length,
31
+ additionalReasons: remainingReasons,
32
+ });
33
+ component.extractionConfidence = score.confidence;
34
+ component.reviewReasons = score.reasons;
35
+ component.needsReview = deriveNeedsReview(score.confidence);
36
+ const componentName = component.name;
37
+ const idx = warnings.findIndex((w) => w.startsWith(`${componentName}: declared Props type `) && /resolved to /.test(w));
38
+ if (idx >= 0)
39
+ warnings.splice(idx, 1);
40
+ return true;
41
+ }
42
+ function addImportedDeclarationsToProject(project, ctx) {
43
+ const importedNames = collectReferencedTypeNames(ctx.annotation);
44
+ for (const name of [...importedNames]) {
45
+ const localDecl = findLocalTypeDeclaration(ctx.instance, name, ctx.moduleScript) ??
46
+ (ctx.moduleScript ? findLocalTypeDeclaration(ctx.moduleScript, name, ctx.instance) : null);
47
+ if (localDecl) {
48
+ for (const referenced of collectReferencedTypeNames(localDecl))
49
+ importedNames.add(referenced);
50
+ }
51
+ }
52
+ if (importedNames.size === 0)
53
+ return 0;
54
+ const imports = collectImportSpecifiersForNames(ctx.instance, importedNames);
55
+ if (ctx.moduleScript) {
56
+ for (const [k, v] of collectImportSpecifiersForNames(ctx.moduleScript, importedNames))
57
+ imports.set(k, v);
58
+ }
59
+ if (imports.size === 0)
60
+ return 0;
61
+ const req = createRequire(ctx.filePath);
62
+ let added = 0;
63
+ for (const specifier of imports.values()) {
64
+ if (specifier.startsWith('.'))
65
+ continue;
66
+ const dtsPath = locateDtsForSpecifier(req, specifier, ctx.filePath);
67
+ if (!dtsPath)
68
+ continue;
69
+ try {
70
+ const sf = project.addSourceFileAtPathIfExists(dtsPath);
71
+ if (sf)
72
+ added++;
73
+ }
74
+ catch { }
75
+ }
76
+ return added;
77
+ }
78
+ export async function maybeRunResolveUnreachableRetry(components, warnings, retryContexts, opts) {
79
+ const mode = opts?.resolveUnreachable ?? 'auto';
80
+ if (mode === 'never')
81
+ return warnings;
82
+ const isUnresolved = (c) => (c.reviewReasons ?? []).includes('props-type-unresolved') && !!retryContexts.get(c.source);
83
+ const unresolvedCount = components.filter(isUnresolved).length;
84
+ if (unresolvedCount === 0)
85
+ return warnings;
86
+ if (mode === 'auto') {
87
+ const ratio = unresolvedCount / components.length;
88
+ if (ratio < 0.2)
89
+ return warnings;
90
+ }
91
+ const projectRoot = opts?.projectRoot;
92
+ let project = null;
93
+ let tsconfigPath = null;
94
+ if (projectRoot) {
95
+ tsconfigPath = findNearestTsconfig(projectRoot);
96
+ }
97
+ if (tsconfigPath) {
98
+ try {
99
+ project = new Project({
100
+ tsConfigFilePath: tsconfigPath,
101
+ skipAddingFilesFromTsConfig: false,
102
+ compilerOptions: {
103
+ allowJs: true,
104
+ jsx: ts.JsxEmit.Preserve,
105
+ },
106
+ });
107
+ }
108
+ catch {
109
+ project = null;
110
+ }
111
+ }
112
+ let recoveredViaTsconfig = 0;
113
+ if (project) {
114
+ for (const component of components) {
115
+ if (!isUnresolved(component))
116
+ continue;
117
+ const ctx = retryContexts.get(component.source);
118
+ if (!ctx)
119
+ continue;
120
+ const recovered = await retryComponentWithProject(component, ctx, project, warnings);
121
+ if (recovered)
122
+ recoveredViaTsconfig++;
123
+ }
124
+ }
125
+ let recoveredViaNodeModules = 0;
126
+ const stillUnresolved = components.filter(isUnresolved);
127
+ if (stillUnresolved.length > 0) {
128
+ if (!project) {
129
+ project = new Project({
130
+ compilerOptions: {
131
+ strict: false,
132
+ target: ScriptTarget.ESNext,
133
+ module: ModuleKind.ESNext,
134
+ moduleResolution: ts.ModuleResolutionKind.NodeJs,
135
+ allowJs: true,
136
+ jsx: ts.JsxEmit.Preserve,
137
+ },
138
+ useInMemoryFileSystem: false,
139
+ skipAddingFilesFromTsConfig: true,
140
+ });
141
+ }
142
+ for (const component of stillUnresolved) {
143
+ const ctx = retryContexts.get(component.source);
144
+ if (!ctx)
145
+ continue;
146
+ const added = addImportedDeclarationsToProject(project, ctx);
147
+ if (added === 0)
148
+ continue;
149
+ const recovered = await retryComponentWithProject(component, ctx, project, warnings);
150
+ if (recovered)
151
+ recoveredViaNodeModules++;
152
+ }
153
+ }
154
+ const didMeaningfulWork = !!tsconfigPath || recoveredViaNodeModules > 0;
155
+ if (didMeaningfulWork) {
156
+ const remaining = components.filter(isUnresolved).length;
157
+ const parts = [];
158
+ if (tsconfigPath) {
159
+ parts.push(`tsconfig at ${tsconfigPath} recovered ${recoveredViaTsconfig} component(s)`);
160
+ }
161
+ parts.push(`node_modules pass recovered ${recoveredViaNodeModules} more`);
162
+ parts.push(`${remaining} component(s) remain unresolved`);
163
+ warnings.push(`Unresolved-type retry pass (mode=${mode}): ${parts.join('; ')}.`);
164
+ }
165
+ return warnings;
166
+ }
167
+ function findNearestTsconfig(startDir) {
168
+ let dir = startDir;
169
+ for (let i = 0; i < 16; i++) {
170
+ const candidate = join(dir, 'tsconfig.json');
171
+ if (existsSync(candidate))
172
+ return candidate;
173
+ const parent = dirname(dir);
174
+ if (!parent || parent === dir)
175
+ return null;
176
+ dir = parent;
177
+ }
178
+ return null;
179
+ }
180
+ export function collapseUnresolvedTypeWarnings(warnings) {
181
+ const isUnresolvedWarning = (w) => /declared Props type .* resolved to/.test(w);
182
+ const unresolvedCount = warnings.filter(isUnresolvedWarning).length;
183
+ if (unresolvedCount < 3)
184
+ return warnings;
185
+ const others = warnings.filter((w) => !isUnresolvedWarning(w));
186
+ const summary = `Unresolved component types: ${unresolvedCount} components have a declared Props type the parser couldn't fully resolve — ` +
187
+ `most often a cross-package extends pattern (e.g. an interface that extends a type from a node_modules package). ` +
188
+ `Each affected component is flagged with reviewReasons: ['props-type-unresolved'] and needsReview = true; ` +
189
+ `select one in the TUI to drill in. ` +
190
+ `See https://github.com/contentful/experience-design-system-sdk-public/pull/44 for context and partner workarounds.`;
191
+ return [summary, ...others];
192
+ }
@@ -0,0 +1,12 @@
1
+ export interface AstNode {
2
+ type: string;
3
+ loc?: {
4
+ start?: {
5
+ line?: number;
6
+ };
7
+ end?: {
8
+ line?: number;
9
+ };
10
+ };
11
+ [key: string]: unknown;
12
+ }
@@ -1,4 +1,4 @@
1
- import type { ComponentExtractionResult } from '../types.js';
1
+ import type { ComponentExtractionResult } from '../../types/component.js';
2
2
  export declare function extractVueComponents(filePaths: string[], onProgress?: (p: {
3
3
  filesProcessed: number;
4
4
  componentsFound: number;
@@ -0,0 +1,61 @@
1
+ import os from 'node:os';
2
+ import { runFileExtractionWorkers } from '../shared/helpers/file-processing/file-workers.js';
3
+ import { createSortedExtractionResult } from '../shared/helpers/file-processing/result-normalizer.js';
4
+ import { parse as parseSFC } from '@vue/compiler-sfc';
5
+ import { resolveVueComponentName } from './helpers/resolve-vue-component-name.js';
6
+ import { extractSlotsFromVueTemplate, collectRuntimeAccessSlots, mergeVueSlots } from './helpers/extract-vue-slots.js';
7
+ import { extractVueSetupProps } from './helpers/extract-vue-setup-props.js';
8
+ import { extractVueOptionsProps } from './helpers/extract-vue-options-props.js';
9
+ export async function extractVueComponents(filePaths, onProgress) {
10
+ const vueFiles = filePaths.filter((f) => f.endsWith('.vue'));
11
+ const { items: components, warnings } = await runFileExtractionWorkers(vueFiles, os.cpus().length, async (filePath, source) => {
12
+ const { component, warnings: fileWarnings } = await extractFromVueSFC(filePath, source);
13
+ return { item: component, warnings: fileWarnings };
14
+ }, (filePath, error) => `Failed to extract from ${filePath}: ${error instanceof Error ? error.message : String(error)}`, onProgress);
15
+ return createSortedExtractionResult(components, warnings);
16
+ }
17
+ async function extractFromVueSFC(filePath, source) {
18
+ const { descriptor, errors } = parseSFC(source);
19
+ const fileWarnings = errors.map((e) => `Parse error in ${filePath}: ${e instanceof Error ? e.message : String(e)}`);
20
+ const name = resolveVueComponentName(filePath);
21
+ let props = [];
22
+ const setupProps = descriptor.scriptSetup
23
+ ? await extractVueSetupProps(filePath, descriptor.scriptSetup.content)
24
+ : null;
25
+ if (setupProps !== null) {
26
+ props = setupProps;
27
+ }
28
+ else if (descriptor.script) {
29
+ return extractOptionsApiComponent(filePath, descriptor.script.content, fileWarnings, name, descriptor.template?.ast, source);
30
+ }
31
+ const templateSlots = descriptor.template?.ast ? extractSlotsFromVueTemplate(descriptor.template.ast) : [];
32
+ const slots = mergeVueSlots(templateSlots, collectRuntimeAccessSlots(source));
33
+ return {
34
+ component: {
35
+ name,
36
+ source: filePath,
37
+ sourcePath: filePath,
38
+ framework: 'vue',
39
+ props,
40
+ slots,
41
+ },
42
+ warnings: fileWarnings,
43
+ };
44
+ }
45
+ async function extractOptionsApiComponent(filePath, scriptContent, fileWarnings, name, templateAst, sfcSource) {
46
+ const props = await extractVueOptionsProps(filePath, scriptContent);
47
+ const templateSlots = templateAst ? extractSlotsFromVueTemplate(templateAst) : [];
48
+ const runtimeSlots = sfcSource ? collectRuntimeAccessSlots(sfcSource) : [];
49
+ const slots = mergeVueSlots(templateSlots, runtimeSlots);
50
+ return {
51
+ component: {
52
+ name,
53
+ source: filePath,
54
+ sourcePath: filePath,
55
+ framework: 'vue',
56
+ props,
57
+ slots,
58
+ },
59
+ warnings: fileWarnings,
60
+ };
61
+ }
@@ -0,0 +1,3 @@
1
+ import type { RawPropDefinition } from '../../../types/component.js';
2
+ export declare function isPublicVuePropName(name: string): boolean;
3
+ export declare function parseVueObjectProps(obj: import('ts-morph').ObjectLiteralExpression): RawPropDefinition[];
@@ -0,0 +1,67 @@
1
+ import { Node } from 'ts-morph';
2
+ const VUE_TYPE_MAP = {
3
+ String: 'string',
4
+ Number: 'number',
5
+ Boolean: 'boolean',
6
+ Array: 'any[]',
7
+ Object: 'object',
8
+ Function: 'function',
9
+ Date: 'Date',
10
+ Symbol: 'symbol',
11
+ };
12
+ export function isPublicVuePropName(name) {
13
+ return !/^[_$]/.test(name);
14
+ }
15
+ export function parseVueObjectProps(obj) {
16
+ if (!Node.isObjectLiteralExpression(obj))
17
+ return [];
18
+ const result = [];
19
+ for (const prop of obj.getProperties()) {
20
+ if (!Node.isPropertyAssignment(prop))
21
+ continue;
22
+ const name = prop.getName();
23
+ if (!isPublicVuePropName(name))
24
+ continue;
25
+ const init = prop.getInitializer();
26
+ if (!init || !Node.isObjectLiteralExpression(init)) {
27
+ result.push({
28
+ name,
29
+ type: VUE_TYPE_MAP[init?.getText() ?? ''] ?? 'any',
30
+ required: false,
31
+ sourceStartLine: prop.getStartLineNumber(),
32
+ sourceEndLine: prop.getEndLineNumber(),
33
+ });
34
+ continue;
35
+ }
36
+ const typeProp = init.getProperty('type');
37
+ const requiredProp = init.getProperty('required');
38
+ const defaultProp = init.getProperty('default');
39
+ let type = 'any';
40
+ if (typeProp && Node.isPropertyAssignment(typeProp)) {
41
+ const typeInit = typeProp.getInitializer();
42
+ if (typeInit)
43
+ type = VUE_TYPE_MAP[typeInit.getText()] ?? 'any';
44
+ }
45
+ let required = false;
46
+ if (requiredProp && Node.isPropertyAssignment(requiredProp)) {
47
+ const reqInit = requiredProp.getInitializer();
48
+ if (reqInit)
49
+ required = reqInit.getText() === 'true';
50
+ }
51
+ let defaultValue;
52
+ if (defaultProp && Node.isPropertyAssignment(defaultProp)) {
53
+ const defInit = defaultProp.getInitializer();
54
+ if (defInit)
55
+ defaultValue = defInit.getText().replace(/^['"]|['"]$/g, '');
56
+ }
57
+ result.push({
58
+ name,
59
+ type,
60
+ required,
61
+ ...(defaultValue !== undefined && { defaultValue }),
62
+ sourceStartLine: prop.getStartLineNumber(),
63
+ sourceEndLine: prop.getEndLineNumber(),
64
+ });
65
+ }
66
+ return result;
67
+ }
@@ -0,0 +1,4 @@
1
+ import type { RawPropDefinition } from '../../../types/component.js';
2
+ export { isPublicVuePropName, parseVueObjectProps } from './extract-vue-object-props.js';
3
+ export declare function extractVueOptionsProps(filePath: string, scriptContent: string, visited?: Set<string>): Promise<RawPropDefinition[]>;
4
+ export declare function extractInheritedVueProps(filePath: string, visited: Set<string>): Promise<RawPropDefinition[]>;
@@ -0,0 +1,72 @@
1
+ import { resolve, dirname } from 'node:path';
2
+ import { readFile } from 'node:fs/promises';
3
+ import { parse as parseSFC } from '@vue/compiler-sfc';
4
+ import { Node, Project } from 'ts-morph';
5
+ import { resolveWorkspaceVueImport } from './resolve-workspace-module.js';
6
+ import { parseVueObjectProps } from './extract-vue-object-props.js';
7
+ export { isPublicVuePropName, parseVueObjectProps } from './extract-vue-object-props.js';
8
+ export async function extractVueOptionsProps(filePath, scriptContent, visited = new Set()) {
9
+ const resolvedFilePath = resolve(filePath);
10
+ if (visited.has(resolvedFilePath))
11
+ return [];
12
+ visited.add(resolvedFilePath);
13
+ const project = new Project({
14
+ compilerOptions: { strict: false, target: 99, module: 99, allowJs: true },
15
+ useInMemoryFileSystem: true,
16
+ skipAddingFilesFromTsConfig: true,
17
+ });
18
+ const sf = project.createSourceFile('__options__.ts', scriptContent);
19
+ const localImports = new Map();
20
+ for (const importDecl of sf.getImportDeclarations()) {
21
+ const specifier = importDecl.getModuleSpecifierValue();
22
+ const defaultImport = importDecl.getDefaultImport();
23
+ if (!defaultImport)
24
+ continue;
25
+ if (specifier.startsWith('.')) {
26
+ if (!specifier.endsWith('.vue'))
27
+ continue;
28
+ localImports.set(defaultImport.getText(), resolve(dirname(resolvedFilePath), specifier));
29
+ }
30
+ else {
31
+ const resolvedVuePath = resolveWorkspaceVueImport(specifier, resolvedFilePath);
32
+ if (resolvedVuePath)
33
+ localImports.set(defaultImport.getText(), resolvedVuePath);
34
+ }
35
+ }
36
+ for (const node of sf.getDescendants()) {
37
+ if (!Node.isExportAssignment(node))
38
+ continue;
39
+ const expr = node.getExpression();
40
+ if (!Node.isObjectLiteralExpression(expr))
41
+ continue;
42
+ const mergedProps = new Map();
43
+ const extendsProp = expr.getProperty('extends');
44
+ if (extendsProp && Node.isPropertyAssignment(extendsProp)) {
45
+ const extendsInit = extendsProp.getInitializer();
46
+ if (extendsInit && Node.isIdentifier(extendsInit)) {
47
+ const extendsPath = localImports.get(extendsInit.getText());
48
+ if (extendsPath) {
49
+ for (const prop of await extractInheritedVueProps(extendsPath, visited))
50
+ mergedProps.set(prop.name, prop);
51
+ }
52
+ }
53
+ }
54
+ const propsProp = expr.getProperty('props');
55
+ if (!propsProp || !Node.isPropertyAssignment(propsProp))
56
+ return [...mergedProps.values()].sort((a, b) => a.name.localeCompare(b.name));
57
+ const propsInit = propsProp.getInitializer();
58
+ if (!propsInit || !Node.isObjectLiteralExpression(propsInit))
59
+ return [...mergedProps.values()].sort((a, b) => a.name.localeCompare(b.name));
60
+ for (const prop of parseVueObjectProps(propsInit))
61
+ mergedProps.set(prop.name, prop);
62
+ return [...mergedProps.values()].sort((a, b) => a.name.localeCompare(b.name));
63
+ }
64
+ return [];
65
+ }
66
+ export async function extractInheritedVueProps(filePath, visited) {
67
+ const source = await readFile(filePath, 'utf-8');
68
+ const { descriptor } = parseSFC(source);
69
+ if (!descriptor.script)
70
+ return [];
71
+ return extractVueOptionsProps(filePath, descriptor.script.content, visited);
72
+ }
@@ -0,0 +1,8 @@
1
+ import type { RawPropDefinition } from '../../../types/component.js';
2
+ type SetupImportedObjectRef = {
3
+ filePath: string;
4
+ exportName: string;
5
+ };
6
+ export declare function collectSetupImportedObjectRefs(sf: import('ts-morph').SourceFile, filePath: string): Map<string, SetupImportedObjectRef>;
7
+ export declare function mergeSetupObjectProps(obj: import('ts-morph').ObjectLiteralExpression, importedObjectRefs: Map<string, SetupImportedObjectRef>, visitedImports: Set<string>): Promise<RawPropDefinition[]>;
8
+ export {};
@@ -0,0 +1,64 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import { Project, Node } from 'ts-morph';
3
+ import { resolveLocalModule } from '../../shared/helpers/resolve-import-file-path.js';
4
+ import { parseVueObjectProps } from './extract-vue-object-props.js';
5
+ export function collectSetupImportedObjectRefs(sf, filePath) {
6
+ const refs = new Map();
7
+ for (const importDecl of sf.getImportDeclarations()) {
8
+ const specifier = importDecl.getModuleSpecifierValue();
9
+ if (!specifier.startsWith('.'))
10
+ continue;
11
+ const resolvedImportPath = resolveLocalModule(filePath, specifier);
12
+ if (!resolvedImportPath)
13
+ continue;
14
+ for (const namedImport of importDecl.getNamedImports()) {
15
+ refs.set(namedImport.getAliasNode()?.getText() ?? namedImport.getName(), {
16
+ filePath: resolvedImportPath,
17
+ exportName: namedImport.getName(),
18
+ });
19
+ }
20
+ }
21
+ return refs;
22
+ }
23
+ async function extractImportedObjectExportProps(importedRef, visitedImports) {
24
+ const visitKey = `${importedRef.filePath}:${importedRef.exportName}`;
25
+ if (visitedImports.has(visitKey))
26
+ return [];
27
+ visitedImports.add(visitKey);
28
+ const source = await readFile(importedRef.filePath, 'utf-8');
29
+ const project = new Project({
30
+ compilerOptions: { strict: false, target: 99, module: 99, allowJs: true },
31
+ useInMemoryFileSystem: true,
32
+ skipAddingFilesFromTsConfig: true,
33
+ });
34
+ const sf = project.createSourceFile('__imported_object__.ts', source);
35
+ for (const declaration of sf.getVariableDeclarations()) {
36
+ if (declaration.getName() !== importedRef.exportName)
37
+ continue;
38
+ const initializer = declaration.getInitializer();
39
+ if (!initializer || !Node.isObjectLiteralExpression(initializer))
40
+ continue;
41
+ return parseVueObjectProps(initializer);
42
+ }
43
+ return [];
44
+ }
45
+ export async function mergeSetupObjectProps(obj, importedObjectRefs, visitedImports) {
46
+ const mergedProps = new Map();
47
+ for (const prop of parseVueObjectProps(obj))
48
+ mergedProps.set(prop.name, prop);
49
+ for (const prop of obj.getProperties()) {
50
+ if (!Node.isSpreadAssignment(prop))
51
+ continue;
52
+ const expression = prop.getExpression();
53
+ if (!Node.isIdentifier(expression))
54
+ continue;
55
+ const importedRef = importedObjectRefs.get(expression.getText());
56
+ if (!importedRef)
57
+ continue;
58
+ for (const importedProp of await extractImportedObjectExportProps(importedRef, visitedImports)) {
59
+ if (!mergedProps.has(importedProp.name))
60
+ mergedProps.set(importedProp.name, importedProp);
61
+ }
62
+ }
63
+ return [...mergedProps.values()].sort((a, b) => a.name.localeCompare(b.name));
64
+ }
@@ -0,0 +1,2 @@
1
+ import type { RawPropDefinition } from '../../../types/component.js';
2
+ export declare function extractVueSetupProps(filePath: string, scriptSetupContent: string): Promise<RawPropDefinition[] | null>;