@contentful/experience-design-system-extraction 2.36.2-dev-build-a6f80ae6.0 → 2.36.2-dev-build-7907fec3.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,49 @@
1
+ import { Node } from 'ts-morph';
2
+ import { loadSourceFile } from './resolve-wc-import.js';
3
+ import { extractSlotsFromTemplate } from './extract-wc-slots.js';
4
+ import { collectHtmlTaggedTemplatesWithHelpers } from './collect-wc-html-templates.js';
5
+ export function extractTemplateContent(classDecl, project) {
6
+ const templates = [];
7
+ classDecl.forEachDescendant((node) => {
8
+ if (!Node.isBinaryExpression(node))
9
+ return;
10
+ const leftText = node.getLeft().getText();
11
+ if (!leftText.includes('.innerHTML'))
12
+ return;
13
+ const right = node.getRight();
14
+ if (Node.isTemplateExpression(right) || Node.isNoSubstitutionTemplateLiteral(right)) {
15
+ templates.push(right.getText().slice(1, -1));
16
+ }
17
+ });
18
+ const renderMethod = classDecl.getMethod('render');
19
+ if (renderMethod && !renderMethod.isStatic()) {
20
+ templates.push(...collectHtmlTaggedTemplatesWithHelpers(renderMethod, project));
21
+ }
22
+ const templateGetter = classDecl.getGetAccessor('template');
23
+ if (templateGetter?.isStatic()) {
24
+ templateGetter.forEachDescendant((node) => {
25
+ if (Node.isTaggedTemplateExpression(node)) {
26
+ const tag = node.getTag();
27
+ if (tag.getText() === 'html') {
28
+ const template = node.getTemplate();
29
+ if (Node.isNoSubstitutionTemplateLiteral(template) || Node.isTemplateExpression(template)) {
30
+ templates.push(template.getText().slice(1, -1));
31
+ }
32
+ }
33
+ }
34
+ });
35
+ }
36
+ return templates.join('\n');
37
+ }
38
+ export function extractFastTemplateSlots(classDecl, project) {
39
+ const sourceFilePath = classDecl.getSourceFile().getFilePath();
40
+ if (!sourceFilePath.endsWith('.ts') || sourceFilePath.endsWith('.template.ts'))
41
+ return [];
42
+ const templatePath = `${sourceFilePath.slice(0, -'.ts'.length)}.template.ts`;
43
+ const templateFile = loadSourceFile(project, templatePath);
44
+ if (!templateFile)
45
+ return [];
46
+ const fragments = [];
47
+ fragments.push(...collectHtmlTaggedTemplatesWithHelpers(templateFile, project));
48
+ return extractSlotsFromTemplate(fragments.join('\n'));
49
+ }
@@ -0,0 +1,9 @@
1
+ import type { RawPropDefinition } from '../../../types/component.js';
2
+ import type { ClassDeclaration } from 'ts-morph';
3
+ export { extractObservedAttributes } from './extract-wc-observed-attrs.js';
4
+ export { extractAccessorProperties } from './extract-wc-accessor-props.js';
5
+ export { extractJsDocAttributeProps } from './extract-wc-jsdoc-attr-props.js';
6
+ export { extractClassProperties } from './extract-wc-class-properties.js';
7
+ export declare function hasShoelaceRuntimeBookkeepingField(classDecl: ClassDeclaration): boolean;
8
+ export declare function mergePropLists(...propLists: RawPropDefinition[][]): RawPropDefinition[];
9
+ export declare function mergeProps(observed: RawPropDefinition[], classProps: RawPropDefinition[]): RawPropDefinition[];
@@ -0,0 +1,19 @@
1
+ export { extractObservedAttributes } from './extract-wc-observed-attrs.js';
2
+ export { extractAccessorProperties } from './extract-wc-accessor-props.js';
3
+ export { extractJsDocAttributeProps } from './extract-wc-jsdoc-attr-props.js';
4
+ export { extractClassProperties } from './extract-wc-class-properties.js';
5
+ export function hasShoelaceRuntimeBookkeepingField(classDecl) {
6
+ return classDecl.getProperties().some((property) => property.getName() === 'initialReflectedProperties');
7
+ }
8
+ export function mergePropLists(...propLists) {
9
+ const merged = new Map();
10
+ for (const propList of propLists) {
11
+ for (const prop of propList) {
12
+ merged.set(prop.name, prop);
13
+ }
14
+ }
15
+ return [...merged.values()].sort((a, b) => a.name.localeCompare(b.name));
16
+ }
17
+ export function mergeProps(observed, classProps) {
18
+ return mergePropLists(observed, classProps);
19
+ }
@@ -0,0 +1,2 @@
1
+ import { type ClassDeclaration, type Project } from 'ts-morph';
2
+ export declare function getImportedBaseClass(classDecl: ClassDeclaration, project: Project, visitedFiles: Set<string>): ClassDeclaration | null;
@@ -0,0 +1,59 @@
1
+ import { Node, SyntaxKind } from 'ts-morph';
2
+ import { resolveImportSourcePath } from './resolve-wc-import.js';
3
+ export function getImportedBaseClass(classDecl, project, visitedFiles) {
4
+ const extendsClause = classDecl
5
+ .getHeritageClauses()
6
+ .find((clause) => clause.getToken() === SyntaxKind.ExtendsKeyword);
7
+ const typeNode = extendsClause?.getTypeNodes()[0];
8
+ if (!typeNode)
9
+ return null;
10
+ const expression = typeNode.getExpression();
11
+ if (!Node.isIdentifier(expression))
12
+ return null;
13
+ const baseName = expression.getText();
14
+ const importDecl = classDecl
15
+ .getSourceFile()
16
+ .getImportDeclarations()
17
+ .find((decl) => decl.getNamedImports().some((namedImport) => namedImport.getName() === baseName) ||
18
+ decl.getDefaultImport()?.getText() === baseName);
19
+ if (!importDecl)
20
+ return null;
21
+ const resolvedImportPath = resolveImportSourcePath(classDecl.getSourceFile().getFilePath(), importDecl.getModuleSpecifierValue());
22
+ if (!resolvedImportPath || visitedFiles.has(resolvedImportPath))
23
+ return null;
24
+ visitedFiles.add(resolvedImportPath);
25
+ let sourceFile = project.getSourceFile(resolvedImportPath);
26
+ if (!sourceFile) {
27
+ try {
28
+ sourceFile = project.addSourceFileAtPath(resolvedImportPath);
29
+ }
30
+ catch {
31
+ return null;
32
+ }
33
+ }
34
+ const directClass = sourceFile.getClass(baseName);
35
+ if (directClass)
36
+ return directClass;
37
+ for (const exportDecl of sourceFile.getExportDeclarations()) {
38
+ const moduleSpecifier = exportDecl.getModuleSpecifierValue();
39
+ if (!moduleSpecifier)
40
+ continue;
41
+ const reexportPath = resolveImportSourcePath(sourceFile.getFilePath(), moduleSpecifier);
42
+ if (!reexportPath || visitedFiles.has(reexportPath))
43
+ continue;
44
+ visitedFiles.add(reexportPath);
45
+ let reexportFile = project.getSourceFile(reexportPath);
46
+ if (!reexportFile) {
47
+ try {
48
+ reexportFile = project.addSourceFileAtPath(reexportPath);
49
+ }
50
+ catch {
51
+ continue;
52
+ }
53
+ }
54
+ const reexportedClass = reexportFile.getClass(baseName);
55
+ if (reexportedClass)
56
+ return reexportedClass;
57
+ }
58
+ return null;
59
+ }
@@ -0,0 +1,2 @@
1
+ import { type ClassDeclaration } from 'ts-morph';
2
+ export declare function getElementTagNameFromDecorator(classDecl: ClassDeclaration): string | null;
@@ -0,0 +1,54 @@
1
+ import { Node } from 'ts-morph';
2
+ function camelToKebab(input) {
3
+ return input
4
+ .replace(/([a-z0-9])([A-Z])/g, '$1-$2')
5
+ .replace(/([A-Z]+)([A-Z][a-z])/g, '$1-$2')
6
+ .toLowerCase();
7
+ }
8
+ function resolveDecoratorInterpolation(node) {
9
+ if (Node.isIdentifier(node)) {
10
+ const definitions = node.getDefinitions();
11
+ for (const definition of definitions) {
12
+ const declarationNode = definition.getDeclarationNode();
13
+ if (!declarationNode)
14
+ continue;
15
+ if (Node.isVariableDeclaration(declarationNode)) {
16
+ const initializer = declarationNode.getInitializer();
17
+ if (initializer && Node.isStringLiteral(initializer))
18
+ return initializer.getLiteralValue();
19
+ }
20
+ }
21
+ const text = node.getText();
22
+ if (/Prefix$/.test(text))
23
+ return camelToKebab(text.replace(/Prefix$/, ''));
24
+ }
25
+ return null;
26
+ }
27
+ function resolveDecoratorTagArgument(node) {
28
+ if (Node.isStringLiteral(node) || Node.isNoSubstitutionTemplateLiteral(node))
29
+ return node.getLiteralValue();
30
+ if (!Node.isTemplateExpression(node))
31
+ return null;
32
+ let resolved = node.getHead().getLiteralText();
33
+ for (const span of node.getTemplateSpans()) {
34
+ const interpolation = resolveDecoratorInterpolation(span.getExpression());
35
+ if (!interpolation)
36
+ return null;
37
+ resolved += interpolation;
38
+ resolved += span.getLiteral().getLiteralText();
39
+ }
40
+ return resolved;
41
+ }
42
+ export function getElementTagNameFromDecorator(classDecl) {
43
+ for (const decorator of classDecl.getDecorators()) {
44
+ if (decorator.getName() !== 'customElement')
45
+ continue;
46
+ const firstArg = decorator.getArguments()[0];
47
+ if (!firstArg)
48
+ continue;
49
+ const resolved = resolveDecoratorTagArgument(firstArg);
50
+ if (resolved)
51
+ return resolved;
52
+ }
53
+ return null;
54
+ }
@@ -0,0 +1,7 @@
1
+ import { Node, type Project, type SourceFile } from 'ts-morph';
2
+ export declare function loadSourceFile(project: Project, filePath: string): SourceFile | null;
3
+ export declare function resolveImportSourcePath(fromFilePath: string, specifier: string): string | null;
4
+ export declare function resolveImportSpecifierSource(declarationNode: Node, sourceFile: SourceFile, project: Project): {
5
+ sourceFile: SourceFile;
6
+ importedName: string;
7
+ } | undefined;
@@ -0,0 +1,47 @@
1
+ import { dirname, resolve } from 'node:path';
2
+ import { Node } from 'ts-morph';
3
+ export function loadSourceFile(project, filePath) {
4
+ let sourceFile = project.getSourceFile(filePath);
5
+ if (sourceFile)
6
+ return sourceFile;
7
+ try {
8
+ sourceFile = project.addSourceFileAtPath(filePath);
9
+ return sourceFile;
10
+ }
11
+ catch {
12
+ return null;
13
+ }
14
+ }
15
+ export function resolveImportSourcePath(fromFilePath, specifier) {
16
+ if (specifier.startsWith('.')) {
17
+ const resolvedPath = resolve(dirname(fromFilePath), specifier);
18
+ if (resolvedPath.endsWith('.js'))
19
+ return `${resolvedPath.slice(0, -3)}.ts`;
20
+ return resolvedPath;
21
+ }
22
+ const spectrumPrefix = '@spectrum-web-components/core/components/';
23
+ if (!specifier.startsWith(spectrumPrefix))
24
+ return null;
25
+ const packagesMarker = `${'2nd-gen/packages'}${fromFilePath.includes('\\') ? '\\' : '/'}`;
26
+ const markerIndex = fromFilePath.lastIndexOf(packagesMarker);
27
+ if (markerIndex === -1)
28
+ return null;
29
+ const packagesRoot = fromFilePath.slice(0, markerIndex + packagesMarker.length - 1);
30
+ const componentPath = specifier.slice(spectrumPrefix.length);
31
+ return `${packagesRoot}/core/components/${componentPath}/index.ts`;
32
+ }
33
+ export function resolveImportSpecifierSource(declarationNode, sourceFile, project) {
34
+ if (!Node.isImportSpecifier(declarationNode))
35
+ return undefined;
36
+ const importDecl = declarationNode.getImportDeclaration();
37
+ const resolvedImportPath = resolveImportSourcePath(sourceFile.getFilePath(), importDecl.getModuleSpecifierValue());
38
+ if (!resolvedImportPath)
39
+ return undefined;
40
+ const importedFile = loadSourceFile(project, resolvedImportPath);
41
+ if (!importedFile)
42
+ return undefined;
43
+ return {
44
+ sourceFile: importedFile,
45
+ importedName: declarationNode.getNameNode().getText(),
46
+ };
47
+ }
@@ -0,0 +1,4 @@
1
+ import { Node, type Project, type SourceFile } from 'ts-morph';
2
+ import { loadSourceFile, resolveImportSourcePath, resolveImportSpecifierSource } from './resolve-wc-import-source.js';
3
+ export { loadSourceFile, resolveImportSourcePath, resolveImportSpecifierSource };
4
+ export declare function resolveStaticStringExpression(node: Node | undefined, sourceFile: SourceFile, project: Project): string | null;
@@ -0,0 +1,93 @@
1
+ import { Node, SyntaxKind } from 'ts-morph';
2
+ import { loadSourceFile, resolveImportSourcePath, resolveImportSpecifierSource } from './resolve-wc-import-source.js';
3
+ export { loadSourceFile, resolveImportSourcePath, resolveImportSpecifierSource };
4
+ export function resolveStaticStringExpression(node, sourceFile, project) {
5
+ if (!node)
6
+ return null;
7
+ if (Node.isStringLiteral(node) || Node.isNoSubstitutionTemplateLiteral(node))
8
+ return node.getLiteralValue();
9
+ if (Node.isTemplateExpression(node)) {
10
+ let resolved = node.getHead().getLiteralText();
11
+ for (const span of node.getTemplateSpans()) {
12
+ const interpolation = resolveStaticStringExpression(span.getExpression(), sourceFile, project);
13
+ if (!interpolation)
14
+ return null;
15
+ resolved += interpolation;
16
+ resolved += span.getLiteral().getLiteralText();
17
+ }
18
+ return resolved;
19
+ }
20
+ if (Node.isIdentifier(node)) {
21
+ for (const definition of node.getDefinitions()) {
22
+ const declarationNode = definition.getDeclarationNode();
23
+ if (!declarationNode)
24
+ continue;
25
+ if (Node.isVariableDeclaration(declarationNode)) {
26
+ const resolved = resolveStaticStringExpression(declarationNode.getInitializer(), declarationNode.getSourceFile(), project);
27
+ if (resolved)
28
+ return resolved;
29
+ }
30
+ if (Node.isImportSpecifier(declarationNode)) {
31
+ const importedSource = resolveImportSpecifierSource(declarationNode, sourceFile, project);
32
+ if (!importedSource)
33
+ continue;
34
+ const importedDeclaration = importedSource.sourceFile.getVariableDeclaration(importedSource.importedName);
35
+ if (!importedDeclaration)
36
+ continue;
37
+ const resolved = resolveStaticStringExpression(importedDeclaration.getInitializer(), importedSource.sourceFile, project);
38
+ if (resolved)
39
+ return resolved;
40
+ }
41
+ }
42
+ const text = node.getText();
43
+ if (/Prefix$/.test(text))
44
+ return camelToKebab(text.replace(/Prefix$/, ''));
45
+ return null;
46
+ }
47
+ if (Node.isPropertyAccessExpression(node)) {
48
+ const target = node.getExpression();
49
+ if (!Node.isIdentifier(target))
50
+ return null;
51
+ const propertyName = node.getName();
52
+ for (const definition of target.getDefinitions()) {
53
+ const declarationNode = definition.getDeclarationNode();
54
+ if (!declarationNode)
55
+ continue;
56
+ let variableDeclaration;
57
+ if (Node.isVariableDeclaration(declarationNode)) {
58
+ variableDeclaration = declarationNode;
59
+ }
60
+ else if (Node.isImportSpecifier(declarationNode)) {
61
+ const importedSource = resolveImportSpecifierSource(declarationNode, sourceFile, project);
62
+ if (!importedSource)
63
+ continue;
64
+ variableDeclaration = importedSource.sourceFile.getVariableDeclaration(importedSource.importedName);
65
+ }
66
+ if (!variableDeclaration)
67
+ continue;
68
+ let objectLiteral = variableDeclaration.getInitializerIfKind(SyntaxKind.ObjectLiteralExpression);
69
+ const initializer = variableDeclaration.getInitializer();
70
+ if (!objectLiteral &&
71
+ initializer &&
72
+ Node.isCallExpression(initializer) &&
73
+ initializer.getExpression().getText() === 'Object.freeze') {
74
+ objectLiteral = initializer.getArguments()[0]?.asKind(SyntaxKind.ObjectLiteralExpression) ?? undefined;
75
+ }
76
+ const property = objectLiteral
77
+ ?.getProperties()
78
+ .find((prop) => Node.isPropertyAssignment(prop) && prop.getName() === propertyName);
79
+ if (!property)
80
+ continue;
81
+ const resolved = resolveStaticStringExpression(property.getInitializer(), variableDeclaration.getSourceFile(), project);
82
+ if (resolved)
83
+ return resolved;
84
+ }
85
+ }
86
+ return null;
87
+ }
88
+ function camelToKebab(input) {
89
+ return input
90
+ .replace(/([a-z0-9])([A-Z])/g, '$1-$2')
91
+ .replace(/([A-Z]+)([A-Z][a-z])/g, '$1-$2')
92
+ .toLowerCase();
93
+ }
@@ -0,0 +1,4 @@
1
+ import { type ClassDeclaration, type Project, type SourceFile } from 'ts-morph';
2
+ export declare function buildTagNameMap(sourceFile: SourceFile): Map<string, string>;
3
+ export declare function getElementTagNameFromSiblingDefine(classDecl: ClassDeclaration, project: Project): string | null;
4
+ export declare function getElementTagNameFromFastDefinition(classDecl: ClassDeclaration, project: Project): string | null;
@@ -0,0 +1,79 @@
1
+ import { Node, SyntaxKind } from 'ts-morph';
2
+ import { resolveStaticStringExpression, loadSourceFile } from './resolve-wc-import.js';
3
+ export function buildTagNameMap(sourceFile) {
4
+ const tagNameMap = new Map();
5
+ sourceFile.forEachDescendant((node) => {
6
+ if (!Node.isCallExpression(node))
7
+ return;
8
+ const expr = node.getExpression();
9
+ if (!Node.isPropertyAccessExpression(expr) || expr.getName() !== 'define')
10
+ return;
11
+ if (expr.getExpression().getText() !== 'customElements')
12
+ return;
13
+ const args = node.getArguments();
14
+ if (args.length < 2)
15
+ return;
16
+ const tagArg = args[0];
17
+ const classArg = args[1];
18
+ if (!Node.isStringLiteral(tagArg))
19
+ return;
20
+ tagNameMap.set(classArg.getText(), tagArg.getLiteralValue());
21
+ });
22
+ return tagNameMap;
23
+ }
24
+ export function getElementTagNameFromSiblingDefine(classDecl, project) {
25
+ const sourceFilePath = classDecl.getSourceFile().getFilePath();
26
+ if (!sourceFilePath.endsWith('.component.ts'))
27
+ return null;
28
+ const siblingPath = `${sourceFilePath.slice(0, -'.component.ts'.length)}.ts`;
29
+ let siblingFile = project.getSourceFile(siblingPath);
30
+ if (!siblingFile) {
31
+ try {
32
+ siblingFile = project.addSourceFileAtPath(siblingPath);
33
+ }
34
+ catch {
35
+ return null;
36
+ }
37
+ }
38
+ const className = classDecl.getName();
39
+ if (!className)
40
+ return null;
41
+ for (const node of siblingFile.getDescendantsOfKind(SyntaxKind.CallExpression)) {
42
+ const expression = node.getExpression();
43
+ if (!Node.isPropertyAccessExpression(expression) || expression.getName() !== 'define')
44
+ continue;
45
+ if (expression.getExpression().getText() !== className)
46
+ continue;
47
+ const tagArg = node.getArguments()[0];
48
+ if (!tagArg || !Node.isStringLiteral(tagArg))
49
+ continue;
50
+ return tagArg.getLiteralValue();
51
+ }
52
+ return null;
53
+ }
54
+ export function getElementTagNameFromFastDefinition(classDecl, project) {
55
+ const sourceFilePath = classDecl.getSourceFile().getFilePath();
56
+ if (!sourceFilePath.endsWith('.ts') || sourceFilePath.endsWith('.definition.ts'))
57
+ return null;
58
+ const definitionPath = `${sourceFilePath.slice(0, -'.ts'.length)}.definition.ts`;
59
+ const definitionFile = loadSourceFile(project, definitionPath);
60
+ if (!definitionFile)
61
+ return null;
62
+ for (const callExpr of definitionFile.getDescendantsOfKind(SyntaxKind.CallExpression)) {
63
+ const expression = callExpr.getExpression();
64
+ if (!Node.isPropertyAccessExpression(expression) || expression.getName() !== 'compose')
65
+ continue;
66
+ const options = callExpr.getArguments()[0];
67
+ if (!options || !Node.isObjectLiteralExpression(options))
68
+ continue;
69
+ const nameProperty = options
70
+ .getProperties()
71
+ .find((prop) => Node.isPropertyAssignment(prop) && (prop.getName() === 'name' || prop.getName() === 'baseName'));
72
+ if (!nameProperty)
73
+ continue;
74
+ const resolved = resolveStaticStringExpression(nameProperty.getInitializer(), definitionFile, project);
75
+ if (resolved)
76
+ return resolved;
77
+ }
78
+ return null;
79
+ }
@@ -0,0 +1,7 @@
1
+ import { type ClassDeclaration, type Project } from 'ts-morph';
2
+ import { getElementTagNameFromDecorator } from './resolve-wc-decorator-tag.js';
3
+ import { buildTagNameMap, getElementTagNameFromSiblingDefine, getElementTagNameFromFastDefinition } from './resolve-wc-sibling-definition.js';
4
+ export { buildTagNameMap, getElementTagNameFromDecorator, getElementTagNameFromSiblingDefine, getElementTagNameFromFastDefinition, };
5
+ export declare function chooseComponentName(classDecl: ClassDeclaration, className: string, tagName: string | undefined): string;
6
+ export declare function getElementTagNameFromJsDoc(classDecl: ClassDeclaration): string | null;
7
+ export declare function resolveWcTagName(classDecl: ClassDeclaration, tagNameMap: Map<string, string>, project: Project): string | undefined;
@@ -0,0 +1,62 @@
1
+ import { basename } from 'node:path';
2
+ import { kebabToPascal } from '../../shared/helpers/tsx-shared.js';
3
+ import { getElementTagNameFromDecorator } from './resolve-wc-decorator-tag.js';
4
+ import { buildTagNameMap, getElementTagNameFromSiblingDefine, getElementTagNameFromFastDefinition, } from './resolve-wc-sibling-definition.js';
5
+ export { buildTagNameMap, getElementTagNameFromDecorator, getElementTagNameFromSiblingDefine, getElementTagNameFromFastDefinition, };
6
+ function normalizeComponentName(input) {
7
+ return input.replace(/[^a-zA-Z0-9]/g, '').toLowerCase();
8
+ }
9
+ function shouldPreferTagName(className, tagName) {
10
+ const pascalTagName = kebabToPascal(tagName);
11
+ if (className.startsWith('HTML') && className.endsWith('Element'))
12
+ return true;
13
+ if (className.endsWith('Element'))
14
+ return true;
15
+ if (normalizeComponentName(className) === normalizeComponentName(pascalTagName))
16
+ return false;
17
+ return false;
18
+ }
19
+ function getFileDerivedComponentName(sourceFile) {
20
+ const baseName = basename(sourceFile.getFilePath())
21
+ .replace(/\.[^.]+$/, '')
22
+ .replace(/\.component$/, '');
23
+ return kebabToPascal(baseName);
24
+ }
25
+ export function chooseComponentName(classDecl, className, tagName) {
26
+ if (!tagName)
27
+ return className;
28
+ const tagDerivedName = kebabToPascal(tagName);
29
+ const fileDerivedName = getFileDerivedComponentName(classDecl.getSourceFile());
30
+ if (normalizeComponentName(className) === normalizeComponentName(tagDerivedName))
31
+ return className;
32
+ if (normalizeComponentName(className) === normalizeComponentName(fileDerivedName))
33
+ return className;
34
+ if (fileDerivedName && tagDerivedName.endsWith(fileDerivedName))
35
+ return fileDerivedName;
36
+ if (shouldPreferTagName(className, tagName))
37
+ return tagDerivedName;
38
+ return className;
39
+ }
40
+ export function getElementTagNameFromJsDoc(classDecl) {
41
+ for (const doc of classDecl.getJsDocs()) {
42
+ for (const tag of doc.getTags()) {
43
+ if (tag.getTagName() !== 'element')
44
+ continue;
45
+ const comment = tag.getCommentText();
46
+ if (comment)
47
+ return comment.trim();
48
+ }
49
+ }
50
+ return null;
51
+ }
52
+ export function resolveWcTagName(classDecl, tagNameMap, project) {
53
+ const className = classDecl.getName();
54
+ if (!className)
55
+ return undefined;
56
+ return (tagNameMap.get(className) ??
57
+ getElementTagNameFromSiblingDefine(classDecl, project) ??
58
+ getElementTagNameFromDecorator(classDecl) ??
59
+ getElementTagNameFromJsDoc(classDecl) ??
60
+ getElementTagNameFromFastDefinition(classDecl, project) ??
61
+ undefined);
62
+ }
@@ -0,0 +1,5 @@
1
+ import { type FunctionDeclaration, type ArrowFunction, type FunctionExpression } from 'ts-morph';
2
+ type FunctionLike = FunctionDeclaration | ArrowFunction | FunctionExpression;
3
+ export declare function collectRenderedComponentReferences(funcNode: FunctionLike, componentNames: ReadonlySet<string>, ownComponentName: string): string[];
4
+ export declare function collectArrayMapRenderComponentReferences(funcNode: FunctionLike, componentNames: ReadonlySet<string>, ownComponentName: string, propTypesByName: ReadonlyMap<string, string>): string[];
5
+ export {};
@@ -0,0 +1,63 @@
1
+ import { SyntaxKind } from 'ts-morph';
2
+ import { isIntrinsicJsxElement } from '../../../framework-adapters/shared/helpers/tsx-shared.js';
3
+ import { getReturnedJsxTagName, isJsxCarryingTypeText } from './get-jsx-ast-data.js';
4
+ export function collectRenderedComponentReferences(funcNode, componentNames, ownComponentName) {
5
+ const found = new Set();
6
+ const jsxElements = [
7
+ ...funcNode.getDescendantsOfKind(SyntaxKind.JsxSelfClosingElement),
8
+ ...funcNode.getDescendantsOfKind(SyntaxKind.JsxOpeningElement),
9
+ ];
10
+ for (const jsxElement of jsxElements) {
11
+ const tagName = jsxElement.getTagNameNode().getText();
12
+ if (isIntrinsicJsxElement(tagName))
13
+ continue;
14
+ if (tagName === ownComponentName)
15
+ continue;
16
+ if (!componentNames.has(tagName))
17
+ continue;
18
+ found.add(tagName);
19
+ }
20
+ return [...found].sort();
21
+ }
22
+ export function collectArrayMapRenderComponentReferences(funcNode, componentNames, ownComponentName, propTypesByName) {
23
+ const found = new Set();
24
+ const propNames = new Set(propTypesByName.keys());
25
+ const renderCountByComponent = new Map();
26
+ for (const jsxElement of [
27
+ ...funcNode.getDescendantsOfKind(SyntaxKind.JsxSelfClosingElement),
28
+ ...funcNode.getDescendantsOfKind(SyntaxKind.JsxOpeningElement),
29
+ ]) {
30
+ const tagName = jsxElement.getTagNameNode().getText();
31
+ if (isIntrinsicJsxElement(tagName) || tagName === ownComponentName || !componentNames.has(tagName))
32
+ continue;
33
+ renderCountByComponent.set(tagName, (renderCountByComponent.get(tagName) ?? 0) + 1);
34
+ }
35
+ for (const callExpr of funcNode.getDescendantsOfKind(SyntaxKind.CallExpression)) {
36
+ const callee = callExpr.getExpression();
37
+ if (!callee.isKind(SyntaxKind.PropertyAccessExpression))
38
+ continue;
39
+ if (callee.getName() !== 'map')
40
+ continue;
41
+ const receiver = callee.getExpression();
42
+ if (!receiver.isKind(SyntaxKind.Identifier))
43
+ continue;
44
+ const propName = receiver.getText();
45
+ if (!propNames.has(propName))
46
+ continue;
47
+ const propTypeText = propTypesByName.get(propName) ?? '';
48
+ if (isJsxCarryingTypeText(propTypeText))
49
+ continue;
50
+ const [callbackArg] = callExpr.getArguments();
51
+ if (!callbackArg)
52
+ continue;
53
+ if (!callbackArg.isKind(SyntaxKind.ArrowFunction) && !callbackArg.isKind(SyntaxKind.FunctionExpression))
54
+ continue;
55
+ const returnedJsxTag = getReturnedJsxTagName(callbackArg);
56
+ if (!returnedJsxTag || returnedJsxTag === ownComponentName || !componentNames.has(returnedJsxTag))
57
+ continue;
58
+ if ((renderCountByComponent.get(returnedJsxTag) ?? 0) !== 1)
59
+ continue;
60
+ found.add(returnedJsxTag);
61
+ }
62
+ return [...found].sort();
63
+ }
@@ -0,0 +1,2 @@
1
+ export declare function isArrayReactNodeType(typeText: string): boolean;
2
+ export declare function isReactNodeType(typeText: string): boolean;
@@ -0,0 +1,24 @@
1
+ const REACT_NODE_EXACT_PATTERNS = ['ReactNode', 'React.ReactNode', 'ReactElement', 'React.ReactElement', 'JSX.Element'];
2
+ function normalizeReactNodeType(typeText) {
3
+ return typeText
4
+ .replace(/\s+/g, ' ')
5
+ .trim()
6
+ .split('|')
7
+ .map((part) => part.trim())
8
+ .filter((part) => part !== 'null' && part !== 'undefined')
9
+ .join(' | ');
10
+ }
11
+ export function isArrayReactNodeType(typeText) {
12
+ const stripped = normalizeReactNodeType(typeText);
13
+ for (const pattern of REACT_NODE_EXACT_PATTERNS) {
14
+ if (stripped === `${pattern}[]` || stripped === `Array<${pattern}>`)
15
+ return true;
16
+ }
17
+ return false;
18
+ }
19
+ export function isReactNodeType(typeText) {
20
+ const stripped = normalizeReactNodeType(typeText);
21
+ if (REACT_NODE_EXACT_PATTERNS.includes(stripped))
22
+ return true;
23
+ return isArrayReactNodeType(typeText);
24
+ }
@@ -0,0 +1,14 @@
1
+ import { Node, type ArrowFunction, type FunctionExpression, type SourceFile } from 'ts-morph';
2
+ /** Collects all names bound in the file via imports or top-level declarations. */
3
+ export declare function collectLocallyBoundNames(sourceFile: SourceFile): Set<string>;
4
+ /**
5
+ * Returns the tag identifier of the JSX element a callback returns, or
6
+ * `undefined` if the callback doesn't return exactly one identifier-tagged JSX element.
7
+ */
8
+ export declare function getReturnedJsxTagName(callback: ArrowFunction | FunctionExpression): string | undefined;
9
+ /** Unwraps a JSX node from an expression body, block body return, or parenthesized expression. */
10
+ export declare function unwrapReturnedJsx(bodyOrExpr: Node): Node | undefined;
11
+ /** Returns the single JSX child of a fragment, or undefined if the fragment has 0 or 2+ children. */
12
+ export declare function unwrapSingleJsxChildOfFragment(fragment: Node): Node | undefined;
13
+ /** Returns true when the type text refers to a React JSX-carrying type (ReactNode, ReactElement, JSX.Element). */
14
+ export declare function isJsxCarryingTypeText(typeText: string): boolean;