@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,55 @@
1
+ import { resolveTypeMembers } from './resolve-svelte-type-members.js';
2
+ import { extractFromDestructure } from './extract-svelte-from-destructure.js';
3
+ import { extractFromTypeMembersOnly } from './extract-svelte-type-member-props.js';
4
+ import { formatAnnotation, classifyUnresolved } from './classify-svelte-props-annotation.js';
5
+ export { extractFromTypeMembersOnly };
6
+ export { getPropsTypeName, getRetryAnnotation } from './classify-svelte-props-annotation.js';
7
+ export async function extractPropsFromCall(ctx) {
8
+ const warnings = [];
9
+ const propsCall = ctx.propsCall;
10
+ const id = propsCall['id'];
11
+ const idType = id?.type;
12
+ const annotation = id?.['typeAnnotation']?.['typeAnnotation'];
13
+ const typeMembers = annotation
14
+ ? await resolveTypeMembers(annotation, ctx.instance, ctx.moduleScript, ctx.filePath, ctx.source)
15
+ : null;
16
+ const unresolved = classifyUnresolved(annotation, typeMembers, ctx.instance, ctx.moduleScript);
17
+ const additionalReasons = [];
18
+ if (unresolved) {
19
+ const refLabel = formatAnnotation(annotation);
20
+ const heritageNote = unresolved === 'partial-heritage' ? ' (heritage clauses extending unreachable types)' : '';
21
+ warnings.push(`${ctx.componentName}: declared Props type ${refLabel} resolved to ${unresolved === 'empty' ? '0' : 'only Snippet-typed'} properties${heritageNote} (${ctx.filePath}) — possible cross-package extends or unreachable type. ` +
22
+ `See https://github.com/contentful/experience-design-system-sdk-public/pull/44 for context and partner workarounds.`);
23
+ additionalReasons.push('props-type-unresolved');
24
+ }
25
+ if (idType === 'ObjectPattern') {
26
+ return extractFromDestructure(ctx.propsCall, typeMembers, warnings, additionalReasons);
27
+ }
28
+ if (idType === 'Identifier') {
29
+ if (typeMembers && typeMembers.length > 0) {
30
+ return {
31
+ ...extractFromTypeMembersOnly(typeMembers),
32
+ warnings,
33
+ additionalReasons,
34
+ };
35
+ }
36
+ if (!unresolved) {
37
+ warnings.push(`${ctx.componentName}: $props() called without destructuring (${ctx.filePath}); cannot extract individual props`);
38
+ }
39
+ return {
40
+ props: [],
41
+ snippetNames: new Set(),
42
+ snippetSlots: [],
43
+ warnings,
44
+ additionalReasons,
45
+ };
46
+ }
47
+ warnings.push(`${ctx.componentName}: unrecognized $props() binding pattern '${idType}' (${ctx.filePath})`);
48
+ return {
49
+ props: [],
50
+ snippetNames: new Set(),
51
+ snippetSlots: [],
52
+ warnings,
53
+ additionalReasons,
54
+ };
55
+ }
@@ -0,0 +1,7 @@
1
+ import type { RawSlotDefinition } from '../../../types/component.js';
2
+ import type { AstNode } from '../types/svelte-ast-node.js';
3
+ export declare function extractTemplateSlots(fragment: AstNode): RawSlotDefinition[];
4
+ export declare function mergeSlots(fromSnippetProps: RawSlotDefinition[], fromTemplate: RawSlotDefinition[]): {
5
+ slots: RawSlotDefinition[];
6
+ mixedWarning: boolean;
7
+ };
@@ -0,0 +1,63 @@
1
+ export function extractTemplateSlots(fragment) {
2
+ const slots = new Map();
3
+ const seen = new Set();
4
+ walk(fragment);
5
+ return [...slots.entries()]
6
+ .map(([name, isDefault]) => ({ name, isDefault }))
7
+ .sort((a, b) => a.name.localeCompare(b.name));
8
+ function walk(node) {
9
+ if (!node)
10
+ return;
11
+ if (node.type === 'SlotElement') {
12
+ const name = readSlotName(node);
13
+ if (!seen.has(name)) {
14
+ seen.add(name);
15
+ slots.set(name, name === 'default');
16
+ }
17
+ }
18
+ const children = node['nodes'] ?? node['children'] ?? [];
19
+ for (const child of children)
20
+ walk(child);
21
+ const fragmentChild = node['fragment'];
22
+ if (fragmentChild)
23
+ walk(fragmentChild);
24
+ }
25
+ }
26
+ function readSlotName(slotElement) {
27
+ const attrs = slotElement['attributes'] ?? [];
28
+ for (const attr of attrs) {
29
+ if (attr['name'] !== 'name')
30
+ continue;
31
+ const value = attr['value'];
32
+ if (Array.isArray(value)) {
33
+ for (const item of value) {
34
+ if (item.type === 'Text' && typeof item['data'] === 'string')
35
+ return item['data'];
36
+ }
37
+ }
38
+ }
39
+ return 'default';
40
+ }
41
+ export function mergeSlots(fromSnippetProps, fromTemplate) {
42
+ if (fromSnippetProps.length === 0)
43
+ return { slots: fromTemplate, mixedWarning: false };
44
+ if (fromTemplate.length === 0)
45
+ return { slots: fromSnippetProps, mixedWarning: false };
46
+ const byName = new Map();
47
+ for (const slot of fromSnippetProps)
48
+ byName.set(slot.name, slot);
49
+ const snippetHasDefault = fromSnippetProps.some((slot) => slot.isDefault);
50
+ let mixed = false;
51
+ for (const slot of fromTemplate) {
52
+ if (slot.isDefault && snippetHasDefault) {
53
+ mixed = true;
54
+ continue;
55
+ }
56
+ if (byName.has(slot.name)) {
57
+ mixed = true;
58
+ continue;
59
+ }
60
+ byName.set(slot.name, slot);
61
+ }
62
+ return { slots: [...byName.values()], mixedWarning: mixed };
63
+ }
@@ -0,0 +1,3 @@
1
+ import type { ResolvedTypeMember } from './resolve-svelte-type-members.js';
2
+ import type { PropsExtractionResult } from './extract-svelte-props.js';
3
+ export declare function extractFromTypeMembersOnly(typeMembers: ResolvedTypeMember[]): PropsExtractionResult;
@@ -0,0 +1,31 @@
1
+ export function extractFromTypeMembersOnly(typeMembers) {
2
+ const props = [];
3
+ const snippetNames = new Set();
4
+ const snippetSlots = [];
5
+ for (const m of typeMembers) {
6
+ if (m.isSnippet) {
7
+ snippetNames.add(m.name);
8
+ const slot = {
9
+ name: m.name,
10
+ isDefault: m.name === 'children',
11
+ ...(m.description ? { description: m.description } : {}),
12
+ };
13
+ const authorText = m.declaredTypeText ?? m.typeText;
14
+ if (authorText)
15
+ slot._rawTypeText = authorText;
16
+ snippetSlots.push(slot);
17
+ continue;
18
+ }
19
+ const propDef = {
20
+ name: m.name,
21
+ type: m.typeText,
22
+ required: !m.optional,
23
+ };
24
+ if (m.allowedValues)
25
+ propDef.allowedValues = m.allowedValues;
26
+ if (m.description)
27
+ propDef.description = m.description;
28
+ props.push(propDef);
29
+ }
30
+ return { props, snippetNames, snippetSlots, warnings: [] };
31
+ }
@@ -0,0 +1,8 @@
1
+ import type { AstNode } from '../types/svelte-ast-node.js';
2
+ export { collectReferencedTypeNames, collectImportSpecifiersForNames } from './collect-svelte-type-references.js';
3
+ export declare function hasV4ExportLetProps(instance: AstNode): boolean;
4
+ export declare function findPropsCall(instance: AstNode): AstNode | null;
5
+ export declare function collectSnippetImportLocals(instance: AstNode): Set<string>;
6
+ export declare function findLocalTypeDeclaration(instance: AstNode, name: string, module?: AstNode): AstNode | null;
7
+ export declare function declarationHasHeritage(decl: AstNode): boolean;
8
+ export declare function mergeSets<T>(a: Set<T>, b: Set<T>): Set<T>;
@@ -0,0 +1,91 @@
1
+ export { collectReferencedTypeNames, collectImportSpecifiersForNames } from './collect-svelte-type-references.js';
2
+ export function hasV4ExportLetProps(instance) {
3
+ const body = instance['content']?.['body'];
4
+ if (!body)
5
+ return false;
6
+ return body.some((stmt) => {
7
+ if (stmt.type !== 'ExportNamedDeclaration')
8
+ return false;
9
+ const decl = stmt['declaration'];
10
+ return decl?.type === 'VariableDeclaration' && decl['kind'] === 'let';
11
+ });
12
+ }
13
+ export function findPropsCall(instance) {
14
+ const body = instance['content']?.['body'];
15
+ if (!body)
16
+ return null;
17
+ let found = null;
18
+ for (const stmt of body) {
19
+ if (stmt.type !== 'VariableDeclaration')
20
+ continue;
21
+ const decls = stmt['declarations'];
22
+ if (!decls)
23
+ continue;
24
+ for (const d of decls) {
25
+ const init = d['init'];
26
+ if (!init || init.type !== 'CallExpression')
27
+ continue;
28
+ const callee = init['callee'];
29
+ if (callee?.type === 'Identifier' && callee['name'] === '$props') {
30
+ if (found === null)
31
+ found = d;
32
+ }
33
+ }
34
+ }
35
+ return found;
36
+ }
37
+ export function collectSnippetImportLocals(instance) {
38
+ const locals = new Set();
39
+ const body = instance['content']?.['body'];
40
+ if (!body)
41
+ return locals;
42
+ for (const stmt of body) {
43
+ if (stmt.type !== 'ImportDeclaration')
44
+ continue;
45
+ const sourceNode = stmt['source'];
46
+ if (sourceNode?.['value'] !== 'svelte')
47
+ continue;
48
+ const specs = stmt['specifiers'];
49
+ if (!specs)
50
+ continue;
51
+ for (const spec of specs) {
52
+ if (spec.type !== 'ImportSpecifier')
53
+ continue;
54
+ const imported = spec['imported'];
55
+ const local = spec['local'];
56
+ if (imported?.['name'] === 'Snippet' && typeof local?.['name'] === 'string') {
57
+ locals.add(local['name']);
58
+ }
59
+ }
60
+ }
61
+ return locals;
62
+ }
63
+ export function findLocalTypeDeclaration(instance, name, module) {
64
+ for (const script of [instance, module]) {
65
+ const body = script?.['content']?.['body'];
66
+ if (!body)
67
+ continue;
68
+ for (const stmt of body) {
69
+ const decl = stmt.type === 'ExportNamedDeclaration' ? (stmt['declaration'] ?? stmt) : stmt;
70
+ if (decl.type === 'TSInterfaceDeclaration' || decl.type === 'TSTypeAliasDeclaration') {
71
+ const id = decl['id'];
72
+ if (id?.['name'] === name)
73
+ return decl;
74
+ }
75
+ }
76
+ }
77
+ return null;
78
+ }
79
+ export function declarationHasHeritage(decl) {
80
+ if (decl.type === 'TSInterfaceDeclaration') {
81
+ const ext = decl['extends'];
82
+ return Array.isArray(ext) && ext.length > 0;
83
+ }
84
+ return false;
85
+ }
86
+ export function mergeSets(a, b) {
87
+ const out = new Set(a);
88
+ for (const v of b)
89
+ out.add(v);
90
+ return out;
91
+ }
@@ -0,0 +1 @@
1
+ export declare function getSvelteComponentName(filePath: string): string;
@@ -0,0 +1,26 @@
1
+ import { basename, dirname } from 'node:path';
2
+ const ANATOMY_FOLDERS = new Set(['anatomy', 'parts']);
3
+ export function getSvelteComponentName(filePath) {
4
+ const file = basename(filePath, '.svelte');
5
+ const parentDir = basename(dirname(filePath));
6
+ if (file === 'index')
7
+ return toPascalCase(parentDir);
8
+ if (ANATOMY_FOLDERS.has(parentDir)) {
9
+ const grandparent = basename(dirname(dirname(filePath)));
10
+ if (grandparent && grandparent !== '.' && grandparent !== '/') {
11
+ return `${toPascalCase(grandparent)}${toPascalCase(file)}`;
12
+ }
13
+ }
14
+ return toPascalCase(file);
15
+ }
16
+ function toPascalCase(s) {
17
+ if (!s)
18
+ return s;
19
+ if (/^[A-Z]/.test(s) && !s.includes('-') && !s.includes('_'))
20
+ return s;
21
+ return s
22
+ .split(/[-_]+/)
23
+ .filter(Boolean)
24
+ .map((part) => part[0].toUpperCase() + part.slice(1))
25
+ .join('');
26
+ }
@@ -0,0 +1,3 @@
1
+ import type { AstNode } from '../types/svelte-ast-node.js';
2
+ export declare function renderType(typeNode: AstNode | undefined): string;
3
+ export declare function renderLiteral(node: AstNode | undefined): string | undefined;
@@ -0,0 +1,91 @@
1
+ export function renderType(typeNode) {
2
+ if (!typeNode)
3
+ return 'unknown';
4
+ switch (typeNode.type) {
5
+ case 'TSStringKeyword':
6
+ return 'string';
7
+ case 'TSNumberKeyword':
8
+ return 'number';
9
+ case 'TSBooleanKeyword':
10
+ return 'boolean';
11
+ case 'TSAnyKeyword':
12
+ return 'any';
13
+ case 'TSUnknownKeyword':
14
+ return 'unknown';
15
+ case 'TSNullKeyword':
16
+ return 'null';
17
+ case 'TSUndefinedKeyword':
18
+ return 'undefined';
19
+ case 'TSVoidKeyword':
20
+ return 'void';
21
+ case 'TSArrayType':
22
+ return `${renderType(typeNode['elementType'])}[]`;
23
+ case 'TSTupleType': {
24
+ const elements = typeNode['elementTypes'] ?? [];
25
+ return `[${elements
26
+ .map((el) => {
27
+ if (el.type === 'TSNamedTupleMember')
28
+ return renderType(el['elementType']);
29
+ return renderType(el);
30
+ })
31
+ .join(', ')}]`;
32
+ }
33
+ case 'TSUnionType': {
34
+ const members = typeNode['types'] ?? [];
35
+ return members.map(renderType).join(' | ');
36
+ }
37
+ case 'TSLiteralType': {
38
+ const lit = typeNode['literal'];
39
+ const v = lit?.['value'];
40
+ if (typeof v === 'string')
41
+ return `'${v}'`;
42
+ if (typeof v === 'number' || typeof v === 'boolean')
43
+ return String(v);
44
+ return 'unknown';
45
+ }
46
+ case 'TSTypeReference': {
47
+ const tn = typeNode['typeName']?.['name'];
48
+ const args = typeNode['typeArguments'];
49
+ const base = tn ?? 'unknown';
50
+ const params = args?.['params'] ?? null;
51
+ if (params && params.length > 0)
52
+ return `${base}<${params.map(renderType).join(', ')}>`;
53
+ return base;
54
+ }
55
+ case 'TSFunctionType': {
56
+ const params = (typeNode['params'] ?? []).map((p) => {
57
+ const ann = p['typeAnnotation']?.['typeAnnotation'];
58
+ const pname = p['name'] ?? 'arg';
59
+ return `${pname}: ${renderType(ann)}`;
60
+ });
61
+ const ret = typeNode['returnType']?.['typeAnnotation'];
62
+ return `(${params.join(', ')}) => ${renderType(ret)}`;
63
+ }
64
+ default:
65
+ return 'unknown';
66
+ }
67
+ }
68
+ export function renderLiteral(node) {
69
+ if (!node)
70
+ return undefined;
71
+ if (node.type === 'Literal') {
72
+ const v = node['value'];
73
+ const raw = node['raw'];
74
+ if (typeof v === 'string')
75
+ return `'${v}'`;
76
+ if (typeof raw === 'string')
77
+ return raw;
78
+ if (v === null)
79
+ return 'null';
80
+ return String(v);
81
+ }
82
+ if (node.type === 'Identifier')
83
+ return node['name'] ?? undefined;
84
+ if (node.type === 'ArrayExpression') {
85
+ const els = node['elements'] ?? [];
86
+ return `[${els.map((e) => renderLiteral(e) ?? '').join(', ')}]`;
87
+ }
88
+ if (node.type === 'ObjectExpression')
89
+ return '{}';
90
+ return undefined;
91
+ }
@@ -0,0 +1,11 @@
1
+ import type { AstNode } from '../types/svelte-ast-node.js';
2
+ export { renderType, renderLiteral } from './render-svelte-type-strings.js';
3
+ interface Comment {
4
+ type: 'Line' | 'Block';
5
+ value: string;
6
+ }
7
+ export declare function isSnippetTypeText(typeText: string, snippetLocals: Set<string>): boolean;
8
+ export declare function isSnippetType(typeNode: AstNode | undefined, snippetLocals: Set<string>): boolean;
9
+ export declare function collectStringLiteralUnion(typeNode: AstNode | undefined): string[] | undefined;
10
+ export declare function extractAllowedValuesFromText(typeText: string): string[] | undefined;
11
+ export declare function extractJsdocText(comments: Comment[]): string | undefined;
@@ -0,0 +1,68 @@
1
+ export { renderType, renderLiteral } from './render-svelte-type-strings.js';
2
+ export function isSnippetTypeText(typeText, snippetLocals) {
3
+ for (const local of snippetLocals) {
4
+ if (typeText === local || typeText.startsWith(`${local}<`))
5
+ return true;
6
+ }
7
+ return typeText === 'Snippet' || typeText.startsWith('Snippet<');
8
+ }
9
+ export function isSnippetType(typeNode, snippetLocals) {
10
+ if (!typeNode)
11
+ return false;
12
+ if (typeNode.type !== 'TSTypeReference')
13
+ return false;
14
+ const tn = typeNode['typeName']?.['name'];
15
+ if (!tn)
16
+ return false;
17
+ return snippetLocals.has(tn);
18
+ }
19
+ export function collectStringLiteralUnion(typeNode) {
20
+ if (!typeNode)
21
+ return undefined;
22
+ if (typeNode.type !== 'TSUnionType')
23
+ return undefined;
24
+ const members = typeNode['types'];
25
+ if (!members)
26
+ return undefined;
27
+ const out = [];
28
+ for (const m of members) {
29
+ if (m.type !== 'TSLiteralType')
30
+ return undefined;
31
+ const lit = m['literal'];
32
+ const v = lit?.['value'];
33
+ if (typeof v !== 'string')
34
+ return undefined;
35
+ out.push(v);
36
+ }
37
+ return out.length > 0 ? out : undefined;
38
+ }
39
+ export function extractAllowedValuesFromText(typeText) {
40
+ const parts = typeText
41
+ .split('|')
42
+ .map((p) => p.trim())
43
+ .filter(Boolean);
44
+ if (parts.length < 2)
45
+ return undefined;
46
+ const out = [];
47
+ for (const p of parts) {
48
+ const m = p.match(/^'([^']*)'$/) ?? p.match(/^"([^"]*)"$/);
49
+ if (!m)
50
+ return undefined;
51
+ out.push(m[1]);
52
+ }
53
+ return out.length > 0 ? out : undefined;
54
+ }
55
+ export function extractJsdocText(comments) {
56
+ if (!comments.length)
57
+ return undefined;
58
+ const last = comments[comments.length - 1];
59
+ if (last.type !== 'Block')
60
+ return undefined;
61
+ const text = last.value
62
+ .split('\n')
63
+ .map((l) => l.replace(/^\s*\*\s?/, '').trim())
64
+ .filter(Boolean)
65
+ .join(' ')
66
+ .trim();
67
+ return text || undefined;
68
+ }
@@ -0,0 +1 @@
1
+ export declare function locateDtsForSpecifier(req: NodeJS.Require, specifier: string, parentFile: string): string | null;
@@ -0,0 +1,90 @@
1
+ import { dirname, join, resolve } from 'node:path';
2
+ import { existsSync, readFileSync } from 'node:fs';
3
+ function extractTypesFromExports(exportsField) {
4
+ if (!exportsField || typeof exportsField !== 'object')
5
+ return null;
6
+ const exp = exportsField;
7
+ const root = (exp['.'] ?? exp);
8
+ if (!root || typeof root !== 'object')
9
+ return null;
10
+ const r = root;
11
+ if (typeof r['types'] === 'string')
12
+ return r['types'];
13
+ for (const key of ['import', 'default', 'node']) {
14
+ const sub = r[key];
15
+ if (sub && typeof sub === 'object') {
16
+ const t = sub['types'];
17
+ if (typeof t === 'string')
18
+ return t;
19
+ }
20
+ }
21
+ return null;
22
+ }
23
+ function findPackageRootForSpecifier(seedDir, specifier) {
24
+ let dir = seedDir;
25
+ for (let i = 0; i < 32; i++) {
26
+ if (existsSync(join(dir, 'package.json'))) {
27
+ try {
28
+ const pkgRaw = readFileSync(join(dir, 'package.json'), 'utf-8');
29
+ const pkg = JSON.parse(pkgRaw);
30
+ if (pkg.name === specifier)
31
+ return dir;
32
+ if (pkg.name && specifier.startsWith(`${pkg.name}/`))
33
+ return dir;
34
+ }
35
+ catch { }
36
+ }
37
+ const parent = dirname(dir);
38
+ if (!parent || parent === dir)
39
+ return null;
40
+ dir = parent;
41
+ }
42
+ return null;
43
+ }
44
+ export function locateDtsForSpecifier(req, specifier, parentFile) {
45
+ let resolvedJs = null;
46
+ try {
47
+ resolvedJs = req.resolve(specifier);
48
+ }
49
+ catch {
50
+ resolvedJs = null;
51
+ }
52
+ const seedDir = resolvedJs ? dirname(resolvedJs) : dirname(parentFile);
53
+ const pkgRoot = findPackageRootForSpecifier(seedDir, specifier);
54
+ if (pkgRoot) {
55
+ const pkgJsonPath = join(pkgRoot, 'package.json');
56
+ if (existsSync(pkgJsonPath)) {
57
+ try {
58
+ const pkgRaw = readFileSync(pkgJsonPath, 'utf-8');
59
+ const pkg = JSON.parse(pkgRaw);
60
+ const typesField = pkg.types ?? pkg.typings;
61
+ if (typeof typesField === 'string') {
62
+ const candidate = resolve(pkgRoot, typesField);
63
+ if (existsSync(candidate))
64
+ return candidate;
65
+ }
66
+ const exportsTypes = extractTypesFromExports(pkg.exports);
67
+ if (exportsTypes) {
68
+ const candidate = resolve(pkgRoot, exportsTypes);
69
+ if (existsSync(candidate))
70
+ return candidate;
71
+ }
72
+ }
73
+ catch { }
74
+ }
75
+ for (const entry of ['index.d.ts', 'index.d.mts']) {
76
+ const candidate = join(pkgRoot, entry);
77
+ if (existsSync(candidate))
78
+ return candidate;
79
+ }
80
+ }
81
+ if (resolvedJs) {
82
+ const noExt = resolvedJs.replace(/\.(m?js|cjs)$/, '');
83
+ for (const ext of ['.d.ts', '.d.mts']) {
84
+ const candidate = `${noExt}${ext}`;
85
+ if (existsSync(candidate))
86
+ return candidate;
87
+ }
88
+ }
89
+ return null;
90
+ }
@@ -0,0 +1,2 @@
1
+ import type { RawComponentDefinition } from '../../../types/component.js';
2
+ export declare function resolveAllowedComponents(components: RawComponentDefinition[]): void;
@@ -0,0 +1,20 @@
1
+ import { extractAllowedComponentsFromTypeText } from '../../../helpers/evidence/collect-allowed-component-names.js';
2
+ import { buildComponentLookupMaps } from '../../shared/helpers/build-component-lookup-maps.js';
3
+ export function resolveAllowedComponents(components) {
4
+ const { propsToComponent, componentNames } = buildComponentLookupMaps(components);
5
+ for (const c of components) {
6
+ for (const slot of c.slots) {
7
+ const raw = slot._rawTypeText;
8
+ if (raw) {
9
+ const found = extractAllowedComponentsFromTypeText(raw, {
10
+ propsToComponent,
11
+ componentNames,
12
+ });
13
+ if (found.length > 0)
14
+ slot.allowedComponents = found;
15
+ }
16
+ delete slot._rawTypeText;
17
+ }
18
+ delete c._propsTypeName;
19
+ }
20
+ }
@@ -0,0 +1,3 @@
1
+ import type { AstNode } from '../types/svelte-ast-node.js';
2
+ import type { ResolvedTypeMember } from './extract-svelte-ast-type-members.js';
3
+ export declare function resolveImportedTypeMembers(typeName: string, instance: AstNode, filePath: string): Promise<ResolvedTypeMember[] | null>;
@@ -0,0 +1,68 @@
1
+ import { Node, Project, ScriptTarget, ModuleKind } from 'ts-morph';
2
+ import { resolveLocalModule } from '../../shared/helpers/resolve-import-file-path.js';
3
+ import { collectSnippetLocalsFromSourceFile, readInterfaceMembers, readTypeLiteralMembers, } from './extract-svelte-external-type-members.js';
4
+ function readMembersFromExternalFile(filePath, exportName) {
5
+ const project = new Project({
6
+ compilerOptions: {
7
+ strict: false,
8
+ target: ScriptTarget.ESNext,
9
+ module: ModuleKind.ESNext,
10
+ allowJs: true,
11
+ },
12
+ useInMemoryFileSystem: false,
13
+ skipAddingFilesFromTsConfig: true,
14
+ });
15
+ const sf = project.addSourceFileAtPathIfExists(filePath);
16
+ if (!sf)
17
+ return null;
18
+ const snippetLocals = collectSnippetLocalsFromSourceFile(sf);
19
+ const decls = sf.getExportedDeclarations().get(exportName);
20
+ if (!decls || decls.length === 0)
21
+ return null;
22
+ for (const decl of decls) {
23
+ if (Node.isInterfaceDeclaration(decl)) {
24
+ const declSf = decl.getSourceFile();
25
+ return readInterfaceMembers(decl, declSf === sf ? snippetLocals : collectSnippetLocalsFromSourceFile(declSf));
26
+ }
27
+ if (Node.isTypeAliasDeclaration(decl)) {
28
+ const typeNode = decl.getTypeNode();
29
+ if (typeNode && Node.isTypeLiteral(typeNode)) {
30
+ const declSf = decl.getSourceFile();
31
+ return readTypeLiteralMembers(typeNode, declSf === sf ? snippetLocals : collectSnippetLocalsFromSourceFile(declSf));
32
+ }
33
+ }
34
+ }
35
+ return null;
36
+ }
37
+ export async function resolveImportedTypeMembers(typeName, instance, filePath) {
38
+ const body = instance['content']?.['body'];
39
+ if (!body)
40
+ return null;
41
+ for (const stmt of body) {
42
+ if (stmt.type !== 'ImportDeclaration')
43
+ continue;
44
+ const specifierValue = stmt['source']?.['value'];
45
+ if (!specifierValue || !specifierValue.startsWith('.'))
46
+ continue;
47
+ const specifiers = stmt['specifiers'] ?? [];
48
+ let importedExport = null;
49
+ for (const spec of specifiers) {
50
+ if (spec.type !== 'ImportSpecifier')
51
+ continue;
52
+ const localName = spec['local']?.['name'];
53
+ if (localName === typeName) {
54
+ importedExport = spec['imported']?.['name'] ?? null;
55
+ break;
56
+ }
57
+ }
58
+ if (!importedExport)
59
+ continue;
60
+ const resolvedFile = resolveLocalModule(filePath, specifierValue, {
61
+ allowJavaScriptExtensionFallback: true,
62
+ });
63
+ if (!resolvedFile)
64
+ continue;
65
+ return readMembersFromExternalFile(resolvedFile, importedExport);
66
+ }
67
+ return null;
68
+ }