@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,5 @@
1
+ import { type ClassDeclaration } from 'ts-morph';
2
+ /** Parses string literal union type text and returns the sorted values, or undefined if not a literal union. */
3
+ export declare function parseAllowedValues(typeText: string): string[] | undefined;
4
+ /** Finds @Prop-decorated properties that are forwarded directly to intrinsic DOM attributes. */
5
+ export declare function collectDomAttributePropNames(classDecl: ClassDeclaration, propNames: Set<string>): Set<string>;
@@ -0,0 +1,39 @@
1
+ import { Node, SyntaxKind } from 'ts-morph';
2
+ import { getJsxTagNameNode, isIntrinsicJsxElement } from '../../shared/helpers/tsx-shared.js';
3
+ /** Parses string literal union type text and returns the sorted values, or undefined if not a literal union. */
4
+ export function parseAllowedValues(typeText) {
5
+ const literalPattern = /^'[^']*'(?:\s*\|\s*'[^']*')+$/;
6
+ if (!literalPattern.test(typeText.trim()))
7
+ return undefined;
8
+ const values = typeText
9
+ .split('|')
10
+ .map((v) => v.trim().replace(/^'|'$/g, ''))
11
+ .filter(Boolean)
12
+ .sort();
13
+ return values.length >= 2 ? values : undefined;
14
+ }
15
+ /** Finds @Prop-decorated properties that are forwarded directly to intrinsic DOM attributes. */
16
+ export function collectDomAttributePropNames(classDecl, propNames) {
17
+ const domAttributeProps = new Set();
18
+ const renderMethod = classDecl.getMethod('render');
19
+ if (!renderMethod)
20
+ return domAttributeProps;
21
+ for (const attribute of renderMethod.getDescendantsOfKind(SyntaxKind.JsxAttribute)) {
22
+ const tagName = getJsxTagNameNode(attribute)?.getText();
23
+ const attributeName = attribute.getNameNode().getText();
24
+ if (!tagName || !propNames.has(attributeName) || !isIntrinsicJsxElement(tagName))
25
+ continue;
26
+ const initializer = attribute.getInitializer();
27
+ if (!initializer || !Node.isJsxExpression(initializer))
28
+ continue;
29
+ const expression = initializer.getExpression();
30
+ if (!expression || !Node.isPropertyAccessExpression(expression))
31
+ continue;
32
+ if (!Node.isThisExpression(expression.getExpression()))
33
+ continue;
34
+ if (expression.getName() !== attributeName)
35
+ continue;
36
+ domAttributeProps.add(attributeName);
37
+ }
38
+ return domAttributeProps;
39
+ }
@@ -1,4 +1,5 @@
1
- import type { ComponentExtractionResult, ExtractorOptions } from '../types.js';
1
+ import type { ComponentExtractionResult } from '../../types/component.js';
2
+ import type { ExtractorOptions } from '../../types/options.js';
2
3
  export declare function extractSvelteComponents(filePaths: string[], onProgress?: (p: {
3
4
  filesProcessed: number;
4
5
  componentsFound: number;
@@ -0,0 +1,27 @@
1
+ import os from 'node:os';
2
+ import { runFileExtractionWorkers } from '../shared/helpers/file-processing/file-workers.js';
3
+ import { getSvelteComponentName } from './helpers/get-svelte-component-name.js';
4
+ import { maybeRunResolveUnreachableRetry, collapseUnresolvedTypeWarnings, } from './helpers/resolve-svelte-unresolved-retry.js';
5
+ import { resolveAllowedComponents } from './helpers/resolve-svelte-allowed-components.js';
6
+ import { extractFromSvelteFile } from './helpers/extract-from-svelte-file.js';
7
+ export async function extractSvelteComponents(filePaths, onProgress, opts) {
8
+ const svelteFiles = filePaths.filter((f) => f.endsWith('.svelte'));
9
+ const retryContexts = new Map();
10
+ const { items: components, warnings } = await runFileExtractionWorkers(svelteFiles, os.cpus().length, async (filePath, source) => {
11
+ const { component, warnings: fileWarnings, retryContext } = await extractFromSvelteFile(filePath, source);
12
+ return {
13
+ item: component,
14
+ warnings: fileWarnings,
15
+ metadata: retryContext,
16
+ };
17
+ }, (filePath, error) => `${getSvelteComponentName(filePath)}: failed to extract from ${filePath} — ${error instanceof Error ? error.message : String(error)}`, onProgress, (filePath, outcome) => {
18
+ if (outcome.metadata)
19
+ retryContexts.set(filePath, outcome.metadata);
20
+ });
21
+ const finalWarnings = await maybeRunResolveUnreachableRetry(components, warnings, retryContexts, opts);
22
+ resolveAllowedComponents(components);
23
+ return {
24
+ components: components.sort((a, b) => a.name.localeCompare(b.name)),
25
+ warnings: collapseUnresolvedTypeWarnings(finalWarnings),
26
+ };
27
+ }
@@ -0,0 +1,6 @@
1
+ import type { AstNode } from '../types/svelte-ast-node.js';
2
+ import type { ResolvedTypeMember } from './resolve-svelte-type-members.js';
3
+ export declare function formatAnnotation(annotation: AstNode | undefined): string;
4
+ export declare function classifyUnresolved(annotation: AstNode | undefined, members: ResolvedTypeMember[] | null, instance: AstNode, moduleScript: AstNode | undefined): 'empty' | 'partial-heritage' | null;
5
+ export declare function getPropsTypeName(propsCall: AstNode): string | undefined;
6
+ export declare function getRetryAnnotation(propsCall: AstNode): AstNode | undefined;
@@ -0,0 +1,51 @@
1
+ import { findLocalTypeDeclaration, declarationHasHeritage } from './find-svelte-script-declarations.js';
2
+ export function formatAnnotation(annotation) {
3
+ if (!annotation)
4
+ return '<unknown>';
5
+ if (annotation.type === 'TSTypeReference') {
6
+ const name = annotation['typeName']?.['name'] ?? null;
7
+ return name ? `'${name}'` : '<unnamed reference>';
8
+ }
9
+ if (annotation.type === 'TSIntersectionType')
10
+ return '<intersection>';
11
+ if (annotation.type === 'TSUnionType')
12
+ return '<union>';
13
+ if (annotation.type === 'TSTypeLiteral')
14
+ return '<inline literal>';
15
+ return `<${annotation.type}>`;
16
+ }
17
+ export function classifyUnresolved(annotation, members, instance, moduleScript) {
18
+ if (!annotation)
19
+ return null;
20
+ if (annotation.type === 'TSTypeLiteral') {
21
+ const litMembers = annotation['members'] ?? [];
22
+ if (litMembers.length === 0)
23
+ return null;
24
+ }
25
+ if (members === null || members.length === 0)
26
+ return 'empty';
27
+ if (annotation.type === 'TSTypeReference') {
28
+ const refName = annotation['typeName']?.['name'] ?? null;
29
+ if (refName) {
30
+ const decl = findLocalTypeDeclaration(instance, refName, moduleScript);
31
+ if (decl && declarationHasHeritage(decl) && members.every((m) => m.isSnippet)) {
32
+ return 'partial-heritage';
33
+ }
34
+ }
35
+ }
36
+ return null;
37
+ }
38
+ export function getPropsTypeName(propsCall) {
39
+ const id = propsCall['id'];
40
+ const annotation = id?.['typeAnnotation']?.['typeAnnotation'];
41
+ if (annotation?.type === 'TSTypeReference') {
42
+ const tn = annotation['typeName']?.['name'];
43
+ if (tn && /^[A-Za-z_$][\w$]*$/.test(tn))
44
+ return tn;
45
+ }
46
+ return undefined;
47
+ }
48
+ export function getRetryAnnotation(propsCall) {
49
+ const id = propsCall['id'];
50
+ return id?.['typeAnnotation']?.['typeAnnotation'];
51
+ }
@@ -0,0 +1,3 @@
1
+ import type { AstNode } from '../types/svelte-ast-node.js';
2
+ export declare function collectReferencedTypeNames(node: AstNode): Set<string>;
3
+ export declare function collectImportSpecifiersForNames(script: AstNode, names: Set<string>): Map<string, string>;
@@ -0,0 +1,52 @@
1
+ export function collectReferencedTypeNames(node) {
2
+ const names = new Set();
3
+ walk(node);
4
+ return names;
5
+ function walk(n) {
6
+ if (!n || typeof n !== 'object')
7
+ return;
8
+ if (n.type === 'TSTypeReference') {
9
+ const tn = n['typeName']?.['name'];
10
+ if (tn)
11
+ names.add(tn);
12
+ }
13
+ if (n.type === 'TSExpressionWithTypeArguments') {
14
+ const exprName = n['expression']?.['name'];
15
+ if (exprName)
16
+ names.add(exprName);
17
+ }
18
+ for (const value of Object.values(n)) {
19
+ if (Array.isArray(value)) {
20
+ for (const v of value) {
21
+ if (v && typeof v === 'object')
22
+ walk(v);
23
+ }
24
+ }
25
+ else if (value && typeof value === 'object' && value.type) {
26
+ walk(value);
27
+ }
28
+ }
29
+ }
30
+ }
31
+ export function collectImportSpecifiersForNames(script, names) {
32
+ const out = new Map();
33
+ const body = script['content']?.['body'];
34
+ if (!body)
35
+ return out;
36
+ for (const stmt of body) {
37
+ if (stmt.type !== 'ImportDeclaration')
38
+ continue;
39
+ const specifierValue = stmt['source']?.['value'];
40
+ if (!specifierValue)
41
+ continue;
42
+ const specifiers = stmt['specifiers'] ?? [];
43
+ for (const spec of specifiers) {
44
+ if (spec.type !== 'ImportSpecifier' && spec.type !== 'ImportDefaultSpecifier')
45
+ continue;
46
+ const localName = spec['local']?.['name'];
47
+ if (localName && names.has(localName))
48
+ out.set(localName, specifierValue);
49
+ }
50
+ }
51
+ return out;
52
+ }
@@ -0,0 +1,7 @@
1
+ import type { RawComponentDefinition } from '../../../types/component.js';
2
+ import type { RetryContext } from './resolve-svelte-unresolved-retry.js';
3
+ export declare function extractFromSvelteFile(filePath: string, source: string): Promise<{
4
+ component: RawComponentDefinition | null;
5
+ warnings: string[];
6
+ retryContext?: RetryContext;
7
+ }>;
@@ -0,0 +1,90 @@
1
+ import { parse as parseSvelte } from 'svelte/compiler';
2
+ import { computeExtractionScore, deriveNeedsReview, } from '../../../services/quality/helpers/scoring/compute-extraction-score.js';
3
+ import { getSvelteComponentName } from './get-svelte-component-name.js';
4
+ import { extractTemplateSlots, mergeSlots } from './extract-svelte-template-slots.js';
5
+ import { hasV4ExportLetProps, findPropsCall, collectSnippetImportLocals } from './find-svelte-script-declarations.js';
6
+ import { extractPropsFromCall, getPropsTypeName, getRetryAnnotation } from './extract-svelte-props.js';
7
+ export async function extractFromSvelteFile(filePath, source) {
8
+ const warnings = [];
9
+ const name = getSvelteComponentName(filePath);
10
+ let ast;
11
+ try {
12
+ ast = parseSvelte(source, { modern: true });
13
+ }
14
+ catch (e) {
15
+ return {
16
+ component: null,
17
+ warnings: [`${name}: parse error in ${filePath}: ${e instanceof Error ? e.message : String(e)}`],
18
+ };
19
+ }
20
+ const instance = ast['instance'];
21
+ const moduleScript = ast['module'];
22
+ const fragment = ast['fragment'];
23
+ if (instance && hasV4ExportLetProps(instance)) {
24
+ warnings.push(`${name}: Svelte 4 export let syntax not yet supported (${filePath}); see INTEG-4267 for v5-only scope and follow-up`);
25
+ return { component: null, warnings };
26
+ }
27
+ const propsCall = instance ? findPropsCall(instance) : null;
28
+ const snippetLocals = instance ? collectSnippetImportLocals(instance) : new Set();
29
+ let props = [];
30
+ let propNamesTreatedAsSnippet = new Set();
31
+ let snippetSlotsFromProps = [];
32
+ const extractionReasons = [];
33
+ if (propsCall) {
34
+ const result = await extractPropsFromCall({
35
+ propsCall,
36
+ instance: instance,
37
+ moduleScript,
38
+ filePath,
39
+ componentName: name,
40
+ source,
41
+ snippetLocals,
42
+ });
43
+ props = result.props;
44
+ propNamesTreatedAsSnippet = result.snippetNames;
45
+ snippetSlotsFromProps = result.snippetSlots;
46
+ warnings.push(...result.warnings);
47
+ if (result.additionalReasons)
48
+ extractionReasons.push(...result.additionalReasons);
49
+ }
50
+ else if (!instance) {
51
+ warnings.push(`${name}: no instance script block (${filePath}); no props extracted`);
52
+ }
53
+ const templateSlots = fragment ? extractTemplateSlots(fragment) : [];
54
+ const { slots, mixedWarning } = mergeSlots(snippetSlotsFromProps, templateSlots);
55
+ if (mixedWarning) {
56
+ warnings.push(`${name}: mixed Snippet and <slot> usage detected (${filePath}); preferring Snippet entries`);
57
+ }
58
+ const propsTypeNameCapture = propsCall ? getPropsTypeName(propsCall) : undefined;
59
+ const component = {
60
+ name,
61
+ source: filePath,
62
+ framework: 'svelte',
63
+ props,
64
+ slots,
65
+ ...(propsTypeNameCapture ? { _propsTypeName: propsTypeNameCapture } : {}),
66
+ };
67
+ const score = computeExtractionScore(component, {
68
+ additionalIssueCount: extractionReasons.length,
69
+ additionalReasons: extractionReasons,
70
+ });
71
+ component.extractionConfidence = score.confidence;
72
+ component.reviewReasons = score.reasons;
73
+ component.needsReview = deriveNeedsReview(score.confidence) || extractionReasons.includes('props-type-unresolved');
74
+ void propNamesTreatedAsSnippet;
75
+ let retryContext;
76
+ if (extractionReasons.includes('props-type-unresolved') && propsCall && instance) {
77
+ const annotation = getRetryAnnotation(propsCall);
78
+ if (annotation) {
79
+ retryContext = {
80
+ filePath,
81
+ source,
82
+ instance,
83
+ moduleScript,
84
+ annotation,
85
+ componentName: name,
86
+ };
87
+ }
88
+ }
89
+ return { component, warnings, ...(retryContext ? { retryContext } : {}) };
90
+ }
@@ -0,0 +1,15 @@
1
+ import type { AstNode } from '../types/svelte-ast-node.js';
2
+ export interface ResolvedTypeMember {
3
+ name: string;
4
+ optional: boolean;
5
+ typeText: string;
6
+ declaredTypeText?: string;
7
+ isSnippet: boolean;
8
+ allowedValues?: string[];
9
+ description?: string;
10
+ line?: number;
11
+ endLine?: number;
12
+ }
13
+ export declare function readPropertySignature(member: AstNode, snippetLocals: Set<string>): ResolvedTypeMember | null;
14
+ export declare function readMembersFromTypeLiteral(literal: AstNode, snippetLocals: Set<string>): ResolvedTypeMember[];
15
+ export declare function readMembersFromInterfaceOrAlias(decl: AstNode, snippetLocals: Set<string>): ResolvedTypeMember[];
@@ -0,0 +1,46 @@
1
+ import { isSnippetType, renderType, collectStringLiteralUnion, extractJsdocText } from './render-svelte-type.js';
2
+ export function readPropertySignature(member, snippetLocals) {
3
+ if (member.type !== 'TSPropertySignature')
4
+ return null;
5
+ const key = member['key'];
6
+ const name = key?.['name'] ?? null;
7
+ if (!name)
8
+ return null;
9
+ const optional = !!member['optional'];
10
+ const typeNode = member['typeAnnotation']?.['typeAnnotation'];
11
+ const typeText = renderType(typeNode);
12
+ const isSnippet = isSnippetType(typeNode, snippetLocals);
13
+ const allowedValues = collectStringLiteralUnion(typeNode);
14
+ const leading = member['leadingComments'] ?? [];
15
+ const description = extractJsdocText(leading);
16
+ return {
17
+ name,
18
+ optional,
19
+ typeText,
20
+ isSnippet,
21
+ allowedValues,
22
+ description,
23
+ line: member.loc?.start?.line,
24
+ endLine: member.loc?.end?.line,
25
+ };
26
+ }
27
+ export function readMembersFromTypeLiteral(literal, snippetLocals) {
28
+ const members = literal['members'];
29
+ if (!members)
30
+ return [];
31
+ return members.map((m) => readPropertySignature(m, snippetLocals)).filter((m) => !!m);
32
+ }
33
+ export function readMembersFromInterfaceOrAlias(decl, snippetLocals) {
34
+ if (decl.type === 'TSInterfaceDeclaration') {
35
+ const body = decl['body']?.['body'];
36
+ if (!body)
37
+ return [];
38
+ return body.map((m) => readPropertySignature(m, snippetLocals)).filter((m) => !!m);
39
+ }
40
+ if (decl.type === 'TSTypeAliasDeclaration') {
41
+ const ann = decl['typeAnnotation'];
42
+ if (ann?.type === 'TSTypeLiteral')
43
+ return readMembersFromTypeLiteral(ann, snippetLocals);
44
+ }
45
+ return [];
46
+ }
@@ -0,0 +1,7 @@
1
+ import type { AstNode } from '../types/svelte-ast-node.js';
2
+ export declare function getSourceText(source: string, node: AstNode): string | null;
3
+ export declare function getScriptText(source: string, script: AstNode | undefined): string | null;
4
+ export declare function extractAllowedValuesFromType(type: import('ts-morph').Type): string[] | undefined;
5
+ export declare function readJsDocFromDeclaration(decl: import('ts-morph').Node): string | undefined;
6
+ export declare function readDeclaredTypeNodeText(decl: import('ts-morph').Node): string | null;
7
+ export declare function typeRefersToSnippet(propType: import('ts-morph').Type): boolean;
@@ -0,0 +1,64 @@
1
+ import { Node } from 'ts-morph';
2
+ export function getSourceText(source, node) {
3
+ const start = node['start'] ?? null;
4
+ const end = node['end'] ?? null;
5
+ if (start == null || end == null)
6
+ return null;
7
+ return source.slice(start, end);
8
+ }
9
+ export function getScriptText(source, script) {
10
+ if (!script)
11
+ return null;
12
+ const content = script['content'];
13
+ if (!content)
14
+ return null;
15
+ return getSourceText(source, content);
16
+ }
17
+ export function extractAllowedValuesFromType(type) {
18
+ if (!type.isUnion())
19
+ return undefined;
20
+ const out = [];
21
+ for (const t of type.getUnionTypes()) {
22
+ if (!t.isStringLiteral())
23
+ return undefined;
24
+ out.push(t.getLiteralValueOrThrow());
25
+ }
26
+ return out.length > 0 ? out : undefined;
27
+ }
28
+ export function readJsDocFromDeclaration(decl) {
29
+ if (Node.isPropertySignature(decl) || Node.isInterfaceDeclaration(decl) || Node.isTypeAliasDeclaration(decl)) {
30
+ const jsdocs = decl.getJsDocs();
31
+ if (jsdocs.length > 0)
32
+ return jsdocs[0].getDescription().trim() || undefined;
33
+ }
34
+ return undefined;
35
+ }
36
+ export function readDeclaredTypeNodeText(decl) {
37
+ if (Node.isPropertySignature(decl))
38
+ return decl.getTypeNode()?.getText() ?? null;
39
+ return null;
40
+ }
41
+ export function typeRefersToSnippet(propType) {
42
+ const seen = new Set();
43
+ let cursor = propType;
44
+ while (cursor && !seen.has(cursor)) {
45
+ seen.add(cursor);
46
+ const aliasName = cursor.getAliasSymbol()?.getName();
47
+ const symName = cursor.getSymbol()?.getName();
48
+ if (aliasName === 'Snippet' || symName === 'Snippet') {
49
+ const decl = cursor.getAliasSymbol()?.getDeclarations()[0] ?? cursor.getSymbol()?.getDeclarations()[0];
50
+ const file = decl?.getSourceFile().getFilePath() ?? '';
51
+ if (file.includes('/svelte/') || file.includes('\\svelte\\') || file === '')
52
+ return true;
53
+ }
54
+ if (cursor.isUnion()) {
55
+ const nonUndef = cursor.getUnionTypes().filter((t) => !t.isUndefined() && !t.isNull());
56
+ if (nonUndef.length === 1) {
57
+ cursor = nonUndef[0];
58
+ continue;
59
+ }
60
+ }
61
+ break;
62
+ }
63
+ return false;
64
+ }
@@ -0,0 +1,4 @@
1
+ import type { ResolvedTypeMember } from './extract-svelte-ast-type-members.js';
2
+ export declare function collectSnippetLocalsFromSourceFile(sf: import('ts-morph').SourceFile): Set<string>;
3
+ export declare function readInterfaceMembers(iface: import('ts-morph').InterfaceDeclaration, snippetLocals: Set<string>): ResolvedTypeMember[];
4
+ export declare function readTypeLiteralMembers(typeNode: import('ts-morph').TypeLiteralNode, snippetLocals: Set<string>): ResolvedTypeMember[];
@@ -0,0 +1,58 @@
1
+ import { Node } from 'ts-morph';
2
+ import { isSnippetTypeText, extractAllowedValuesFromText } from './render-svelte-type.js';
3
+ export function collectSnippetLocalsFromSourceFile(sf) {
4
+ const locals = new Set();
5
+ for (const importDecl of sf.getImportDeclarations()) {
6
+ if (importDecl.getModuleSpecifierValue() !== 'svelte')
7
+ continue;
8
+ for (const named of importDecl.getNamedImports()) {
9
+ if (named.getName() === 'Snippet') {
10
+ const aliasNode = named.getAliasNode();
11
+ locals.add(aliasNode ? aliasNode.getText() : named.getName());
12
+ }
13
+ }
14
+ }
15
+ return locals;
16
+ }
17
+ export function readInterfaceMembers(iface, snippetLocals) {
18
+ return iface.getProperties().map((prop) => {
19
+ const typeNode = prop.getTypeNode();
20
+ const typeText = typeNode ? typeNode.getText() : prop.getType().getText(prop);
21
+ const allowed = extractAllowedValuesFromText(typeText);
22
+ const jsdocs = prop.getJsDocs();
23
+ const description = jsdocs.length > 0 ? jsdocs[0].getDescription().trim() : undefined;
24
+ return {
25
+ name: prop.getName(),
26
+ optional: prop.hasQuestionToken(),
27
+ typeText,
28
+ isSnippet: isSnippetTypeText(typeText, snippetLocals),
29
+ ...(allowed ? { allowedValues: allowed } : {}),
30
+ ...(description ? { description } : {}),
31
+ line: prop.getStartLineNumber(),
32
+ endLine: prop.getEndLineNumber(),
33
+ };
34
+ });
35
+ }
36
+ export function readTypeLiteralMembers(typeNode, snippetLocals) {
37
+ return typeNode.getMembers().flatMap((m) => {
38
+ if (!Node.isPropertySignature(m))
39
+ return [];
40
+ const tn = m.getTypeNode();
41
+ const typeText = tn ? tn.getText() : 'unknown';
42
+ const allowed = extractAllowedValuesFromText(typeText);
43
+ const jsdocs = m.getJsDocs();
44
+ const description = jsdocs.length > 0 ? jsdocs[0].getDescription().trim() : undefined;
45
+ return [
46
+ {
47
+ name: m.getName(),
48
+ optional: m.hasQuestionToken(),
49
+ typeText,
50
+ isSnippet: isSnippetTypeText(typeText, snippetLocals),
51
+ ...(allowed ? { allowedValues: allowed } : {}),
52
+ ...(description ? { description } : {}),
53
+ line: m.getStartLineNumber(),
54
+ endLine: m.getEndLineNumber(),
55
+ },
56
+ ];
57
+ });
58
+ }
@@ -0,0 +1,4 @@
1
+ import type { AstNode } from '../types/svelte-ast-node.js';
2
+ import type { ResolvedTypeMember } from './resolve-svelte-type-members.js';
3
+ import type { PropsExtractionResult } from './extract-svelte-props.js';
4
+ export declare function extractFromDestructure(propsCall: AstNode, typeMembers: ResolvedTypeMember[] | null, warnings: string[], additionalReasons?: string[]): PropsExtractionResult;
@@ -0,0 +1,85 @@
1
+ import { renderLiteral } from './render-svelte-type.js';
2
+ function propertyOrder(properties) {
3
+ const m = new Map();
4
+ let i = 0;
5
+ for (const p of properties) {
6
+ if (p.type !== 'Property')
7
+ continue;
8
+ const name = p['key']?.['name'] ?? null;
9
+ if (name)
10
+ m.set(name, i++);
11
+ }
12
+ return m;
13
+ }
14
+ function sortStable(a, b, order) {
15
+ const ai = order.get(a) ?? Infinity;
16
+ const bi = order.get(b) ?? Infinity;
17
+ if (ai !== bi)
18
+ return ai - bi;
19
+ return a.localeCompare(b);
20
+ }
21
+ export function extractFromDestructure(propsCall, typeMembers, warnings, additionalReasons) {
22
+ const id = propsCall['id'];
23
+ const properties = id['properties'] ?? [];
24
+ const typeByName = new Map();
25
+ if (typeMembers)
26
+ for (const m of typeMembers)
27
+ typeByName.set(m.name, m);
28
+ const props = [];
29
+ const snippetNames = new Set();
30
+ const snippetSlots = [];
31
+ const seenInDestructure = new Set();
32
+ let dropsRest = false;
33
+ for (const p of properties) {
34
+ if (p.type === 'RestElement') {
35
+ dropsRest = true;
36
+ continue;
37
+ }
38
+ if (p.type !== 'Property')
39
+ continue;
40
+ const key = p['key'];
41
+ const name = key?.['name'] ?? null;
42
+ if (!name)
43
+ continue;
44
+ seenInDestructure.add(name);
45
+ const value = p['value'];
46
+ const hasDefault = value?.type === 'AssignmentPattern';
47
+ const defaultValueRaw = hasDefault ? renderLiteral(value['right']) : undefined;
48
+ const typeMember = typeByName.get(name);
49
+ if (typeMember?.isSnippet) {
50
+ snippetNames.add(name);
51
+ const slot = {
52
+ name,
53
+ isDefault: name === 'children',
54
+ ...(typeMember.description ? { description: typeMember.description } : {}),
55
+ };
56
+ const authorText = typeMember.declaredTypeText ?? typeMember.typeText;
57
+ if (authorText)
58
+ slot._rawTypeText = authorText;
59
+ snippetSlots.push(slot);
60
+ continue;
61
+ }
62
+ const required = typeMember ? !typeMember.optional && !hasDefault : !hasDefault;
63
+ const propDef = {
64
+ name,
65
+ type: typeMember?.typeText ?? 'unknown',
66
+ required,
67
+ };
68
+ if (defaultValueRaw !== undefined)
69
+ propDef.defaultValue = defaultValueRaw;
70
+ if (typeMember?.allowedValues)
71
+ propDef.allowedValues = typeMember.allowedValues;
72
+ if (typeMember?.description)
73
+ propDef.description = typeMember.description;
74
+ props.push(propDef);
75
+ }
76
+ void dropsRest;
77
+ void seenInDestructure;
78
+ return {
79
+ props: props.sort((a, b) => sortStable(a.name, b.name, propertyOrder(properties))),
80
+ snippetNames,
81
+ snippetSlots,
82
+ warnings,
83
+ ...(additionalReasons && additionalReasons.length > 0 ? { additionalReasons } : {}),
84
+ };
85
+ }
@@ -0,0 +1,22 @@
1
+ import type { RawSlotDefinition } from '../../../types/component.js';
2
+ import type { AstNode } from '../types/svelte-ast-node.js';
3
+ import { extractFromTypeMembersOnly } from './extract-svelte-type-member-props.js';
4
+ export { extractFromTypeMembersOnly };
5
+ export { getPropsTypeName, getRetryAnnotation } from './classify-svelte-props-annotation.js';
6
+ export interface PropsCallContext {
7
+ propsCall: AstNode;
8
+ instance: AstNode;
9
+ moduleScript?: AstNode;
10
+ filePath: string;
11
+ componentName: string;
12
+ source: string;
13
+ snippetLocals: Set<string>;
14
+ }
15
+ export interface PropsExtractionResult {
16
+ props: import('../../../types/component.js').RawPropDefinition[];
17
+ snippetNames: Set<string>;
18
+ snippetSlots: RawSlotDefinition[];
19
+ warnings: string[];
20
+ additionalReasons?: string[];
21
+ }
22
+ export declare function extractPropsFromCall(ctx: PropsCallContext): Promise<PropsExtractionResult>;