@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,91 @@
1
+ import { Node, SyntaxKind } from 'ts-morph';
2
+ import { getTypeTargetDeclarations } from '../../shared/helpers/tsx-shared.js';
3
+ function extractTypeMemberSlots(members, allowMethods) {
4
+ return members
5
+ .flatMap((member) => {
6
+ if (!Node.isPropertySignature(member) && (!allowMethods || !Node.isMethodSignature(member)))
7
+ return [];
8
+ const slotName = member.getName();
9
+ return [{ name: slotName, isDefault: slotName === 'default' }];
10
+ })
11
+ .sort((a, b) => a.name.localeCompare(b.name));
12
+ }
13
+ function extractSlotsFromTypeNode(typeNode, seen) {
14
+ if (!typeNode || seen.has(typeNode))
15
+ return [];
16
+ seen.add(typeNode);
17
+ if (Node.isTypeLiteral(typeNode)) {
18
+ return extractTypeMemberSlots(typeNode.getMembers(), false);
19
+ }
20
+ if (Node.isTypeReference(typeNode)) {
21
+ for (const declaration of getTypeTargetDeclarations(typeNode.getTypeName(), false)) {
22
+ if (Node.isTypeAliasDeclaration(declaration)) {
23
+ return extractSlotsFromTypeNode(declaration.getTypeNode(), seen);
24
+ }
25
+ if (Node.isInterfaceDeclaration(declaration)) {
26
+ return extractTypeMemberSlots(declaration.getMembers(), true);
27
+ }
28
+ }
29
+ }
30
+ return [];
31
+ }
32
+ function extractSlotsFromSetupFunction(options) {
33
+ const setupProp = options.getProperty('setup');
34
+ if (!setupProp)
35
+ return [];
36
+ const setupFunction = Node.isMethodDeclaration(setupProp)
37
+ ? setupProp
38
+ : Node.isPropertyAssignment(setupProp)
39
+ ? setupProp.getInitializer()
40
+ : undefined;
41
+ if (!setupFunction)
42
+ return [];
43
+ if (!Node.isMethodDeclaration(setupFunction) &&
44
+ !Node.isArrowFunction(setupFunction) &&
45
+ !Node.isFunctionExpression(setupFunction)) {
46
+ return [];
47
+ }
48
+ const params = setupFunction.getParameters();
49
+ if (params.length < 2)
50
+ return [];
51
+ const contextParam = params[1];
52
+ const nameNode = contextParam.getNameNode();
53
+ if (!Node.isObjectBindingPattern(nameNode))
54
+ return [];
55
+ const slotsBinding = nameNode
56
+ .getElements()
57
+ .find((el) => el.getPropertyNameNode()?.getText() === 'slots' || el.getName() === 'slots');
58
+ if (!slotsBinding)
59
+ return [];
60
+ const slotsName = slotsBinding.getName();
61
+ const body = setupFunction.getBody();
62
+ if (!body)
63
+ return [];
64
+ const slotsByName = new Map();
65
+ for (const access of body.getDescendantsOfKind(SyntaxKind.PropertyAccessExpression)) {
66
+ if (access.getExpression().getText() !== slotsName)
67
+ continue;
68
+ const slotName = access.getName();
69
+ if (!slotsByName.has(slotName)) {
70
+ slotsByName.set(slotName, {
71
+ name: slotName,
72
+ isDefault: slotName === 'default',
73
+ });
74
+ }
75
+ }
76
+ return [...slotsByName.values()].sort((a, b) => a.name.localeCompare(b.name));
77
+ }
78
+ /** Extracts slots from a `defineComponent` options object, preferring type-level declarations over setup access. */
79
+ export function extractVueTsxComponentSlots(options, slotsTypeNode) {
80
+ const slotsByName = new Map();
81
+ if (slotsTypeNode) {
82
+ for (const slot of extractSlotsFromTypeNode(slotsTypeNode, new Set())) {
83
+ slotsByName.set(slot.name, slot);
84
+ }
85
+ }
86
+ for (const slot of extractSlotsFromSetupFunction(options)) {
87
+ if (!slotsByName.has(slot.name))
88
+ slotsByName.set(slot.name, slot);
89
+ }
90
+ return [...slotsByName.values()].sort((a, b) => a.name.localeCompare(b.name));
91
+ }
@@ -0,0 +1,11 @@
1
+ import { Node } from 'ts-morph';
2
+ /** Recursively resolves a node to the object literal it represents or returns, or undefined. */
3
+ export declare function resolveReturnedObjectLiteral(node: Node, seen: Set<Node>): import('ts-morph').ObjectLiteralExpression | undefined;
4
+ /** Scans a list of statements for a `return <object literal>` and resolves it. */
5
+ export declare function resolveObjectLiteralFromStatements(statements: import('ts-morph').Statement[], seen: Set<Node>): import('ts-morph').ObjectLiteralExpression | undefined;
6
+ /** Resolves a call expression's callee to an object literal it returns. */
7
+ export declare function resolveObjectLiteralFromCallExpression(callExpression: import('ts-morph').CallExpression, seen: Set<Node>): import('ts-morph').ObjectLiteralExpression | undefined;
8
+ /** Returns the trailing identifier name from an expression (e.g. `foo.bar` → `'bar'`). */
9
+ export declare function getExpressionTerminalName(node: Node): string | undefined;
10
+ /** Extracts an array of string literal values, or returns undefined if any element is not a string literal. */
11
+ export declare function extractStringArrayLiteralValues(node: Node): string[] | undefined;
@@ -0,0 +1,95 @@
1
+ import { Node, SyntaxKind } from 'ts-morph';
2
+ import { getValueTargetDeclarations } from '../../shared/helpers/tsx-shared.js';
3
+ /** Recursively resolves a node to the object literal it represents or returns, or undefined. */
4
+ export function resolveReturnedObjectLiteral(node, seen) {
5
+ if (seen.has(node))
6
+ return undefined;
7
+ seen.add(node);
8
+ if (Node.isObjectLiteralExpression(node))
9
+ return node;
10
+ if (Node.isParenthesizedExpression(node)) {
11
+ return resolveReturnedObjectLiteral(node.getExpression(), seen);
12
+ }
13
+ if (Node.isVariableDeclaration(node)) {
14
+ const initializer = node.getInitializer();
15
+ if (!initializer)
16
+ return undefined;
17
+ return resolveReturnedObjectLiteral(initializer, seen);
18
+ }
19
+ if (Node.isArrowFunction(node)) {
20
+ const body = node.getBody();
21
+ if (Node.isObjectLiteralExpression(body))
22
+ return body;
23
+ const block = body.asKind(SyntaxKind.Block);
24
+ if (block)
25
+ return resolveObjectLiteralFromStatements(block.getStatements(), seen);
26
+ return resolveReturnedObjectLiteral(body, seen);
27
+ }
28
+ if (Node.isFunctionDeclaration(node) || Node.isFunctionExpression(node)) {
29
+ const body = node.getBody();
30
+ if (!body)
31
+ return undefined;
32
+ const block = body.asKind(SyntaxKind.Block);
33
+ if (!block)
34
+ return undefined;
35
+ return resolveObjectLiteralFromStatements(block.getStatements(), seen);
36
+ }
37
+ if (Node.isCallExpression(node)) {
38
+ return resolveObjectLiteralFromCallExpression(node, seen);
39
+ }
40
+ if (Node.isIdentifier(node)) {
41
+ for (const declaration of getValueTargetDeclarations(node)) {
42
+ const resolved = resolveReturnedObjectLiteral(declaration, seen);
43
+ if (resolved)
44
+ return resolved;
45
+ }
46
+ }
47
+ return undefined;
48
+ }
49
+ /** Scans a list of statements for a `return <object literal>` and resolves it. */
50
+ export function resolveObjectLiteralFromStatements(statements, seen) {
51
+ for (const statement of statements) {
52
+ if (!Node.isReturnStatement(statement))
53
+ continue;
54
+ const expression = statement.getExpression();
55
+ if (!expression)
56
+ continue;
57
+ const resolved = resolveReturnedObjectLiteral(expression, seen);
58
+ if (resolved)
59
+ return resolved;
60
+ }
61
+ return undefined;
62
+ }
63
+ /** Resolves a call expression's callee to an object literal it returns. */
64
+ export function resolveObjectLiteralFromCallExpression(callExpression, seen) {
65
+ const expression = callExpression.getExpression();
66
+ if (!Node.isIdentifier(expression))
67
+ return undefined;
68
+ for (const declaration of getValueTargetDeclarations(expression)) {
69
+ const resolved = resolveReturnedObjectLiteral(declaration, seen);
70
+ if (resolved)
71
+ return resolved;
72
+ }
73
+ return undefined;
74
+ }
75
+ /** Returns the trailing identifier name from an expression (e.g. `foo.bar` → `'bar'`). */
76
+ export function getExpressionTerminalName(node) {
77
+ if (Node.isIdentifier(node))
78
+ return node.getText();
79
+ if (Node.isPropertyAccessExpression(node))
80
+ return node.getName();
81
+ return undefined;
82
+ }
83
+ /** Extracts an array of string literal values, or returns undefined if any element is not a string literal. */
84
+ export function extractStringArrayLiteralValues(node) {
85
+ if (!Node.isArrayLiteralExpression(node))
86
+ return undefined;
87
+ const keys = [];
88
+ for (const element of node.getElements()) {
89
+ if (!Node.isStringLiteral(element) && !Node.isNoSubstitutionTemplateLiteral(element)) {
90
+ return undefined;
91
+ }
92
+ keys.push(element.getLiteralText());
93
+ }
94
+ return keys;
95
+ }
@@ -1,2 +1,2 @@
1
- import type { ComponentExtractionResult } from '../types.js';
1
+ import type { ComponentExtractionResult } from '../../types/component.js';
2
2
  export declare function extractWebComponentDefinitions(filePaths: string[]): Promise<ComponentExtractionResult>;
@@ -0,0 +1,55 @@
1
+ import { Project } from 'ts-morph';
2
+ import { createSortedExtractionResult } from '../shared/helpers/file-processing/result-normalizer.js';
3
+ import { extractProjectSourceFiles } from '../shared/helpers/file-processing/project-source-files.js';
4
+ import { extractAccessorProperties, extractClassProperties, extractJsDocAttributeProps, extractObservedAttributes, mergePropLists, mergeProps, } from './helpers/merge-wc-prop-lists.js';
5
+ import { buildTagNameMap, chooseComponentName, resolveWcTagName } from './helpers/resolve-wc-tag-name.js';
6
+ import { extractSlotsFromTemplate, mergeSlotLists, extractJsDocSlots, extractTemplateContent, extractFastTemplateSlots, } from './helpers/extract-wc-slots.js';
7
+ import { extractInheritedClassProperties, extractInheritedSlots } from './helpers/extract-wc-inheritance.js';
8
+ function extractFromSourceFile(sourceFile, project) {
9
+ const components = [];
10
+ const tagNameMap = buildTagNameMap(sourceFile);
11
+ for (const classDecl of sourceFile.getClasses()) {
12
+ const className = classDecl.getName();
13
+ if (!className)
14
+ continue;
15
+ const tagName = resolveWcTagName(classDecl, tagNameMap, project);
16
+ if (!tagName)
17
+ continue;
18
+ const name = chooseComponentName(classDecl, className, tagName);
19
+ const observedAttrs = extractObservedAttributes(classDecl);
20
+ const inheritedProps = extractInheritedClassProperties(classDecl, project);
21
+ const classProps = mergePropLists(extractJsDocAttributeProps(classDecl), extractAccessorProperties(classDecl), extractClassProperties(classDecl));
22
+ const props = mergeProps(observedAttrs, mergePropLists(inheritedProps, classProps));
23
+ const templateContent = extractTemplateContent(classDecl, project);
24
+ const slots = mergeSlotLists(extractInheritedSlots(classDecl, project), extractJsDocSlots(classDecl), extractSlotsFromTemplate(templateContent), extractFastTemplateSlots(classDecl, project));
25
+ components.push({
26
+ name,
27
+ source: sourceFile.getFilePath(),
28
+ sourcePath: sourceFile.getFilePath(),
29
+ framework: 'web-component',
30
+ props,
31
+ slots,
32
+ });
33
+ }
34
+ return components;
35
+ }
36
+ export async function extractWebComponentDefinitions(filePaths) {
37
+ const tsFiles = filePaths.filter((f) => /\.[jt]s$/.test(f) && !f.endsWith('.d.ts'));
38
+ if (tsFiles.length === 0) {
39
+ return { components: [], warnings: [] };
40
+ }
41
+ const project = new Project({
42
+ compilerOptions: {
43
+ target: 99,
44
+ module: 99,
45
+ moduleResolution: 100,
46
+ skipLibCheck: true,
47
+ },
48
+ skipAddingFilesFromTsConfig: true,
49
+ });
50
+ for (const filePath of tsFiles) {
51
+ project.addSourceFileAtPath(filePath);
52
+ }
53
+ const { items: components, warnings } = extractProjectSourceFiles(project, (sourceFile) => extractFromSourceFile(sourceFile, project));
54
+ return createSortedExtractionResult(components, warnings);
55
+ }
@@ -0,0 +1,4 @@
1
+ import { Node, type Project } from 'ts-morph';
2
+ export declare function collectHtmlTaggedTemplates(root: Node): string[];
3
+ export declare function resolveTemplateHelperDeclarations(callExpression: import('ts-morph').CallExpression, project: Project): Node[];
4
+ export declare function collectHtmlTaggedTemplatesWithHelpers(root: Node, project: Project): string[];
@@ -0,0 +1,67 @@
1
+ import { Node } from 'ts-morph';
2
+ import { loadSourceFile, resolveImportSourcePath } from './resolve-wc-import.js';
3
+ export function collectHtmlTaggedTemplates(root) {
4
+ const templates = [];
5
+ root.forEachDescendant((node) => {
6
+ if (!Node.isTaggedTemplateExpression(node))
7
+ return;
8
+ const tag = node.getTag();
9
+ if (tag.getText() !== 'html')
10
+ return;
11
+ const template = node.getTemplate();
12
+ if (Node.isNoSubstitutionTemplateLiteral(template) || Node.isTemplateExpression(template)) {
13
+ templates.push(template.getText().slice(1, -1));
14
+ }
15
+ });
16
+ return templates;
17
+ }
18
+ export function resolveTemplateHelperDeclarations(callExpression, project) {
19
+ const expression = callExpression.getExpression();
20
+ if (!Node.isIdentifier(expression))
21
+ return [];
22
+ const declarations = [];
23
+ for (const definition of expression.getDefinitions()) {
24
+ const declarationNode = definition.getDeclarationNode();
25
+ if (!declarationNode)
26
+ continue;
27
+ if (Node.isFunctionDeclaration(declarationNode) || Node.isVariableDeclaration(declarationNode)) {
28
+ declarations.push(declarationNode);
29
+ continue;
30
+ }
31
+ if (!Node.isImportSpecifier(declarationNode))
32
+ continue;
33
+ const importDecl = declarationNode.getImportDeclaration();
34
+ const resolvedImportPath = resolveImportSourcePath(callExpression.getSourceFile().getFilePath(), importDecl.getModuleSpecifierValue());
35
+ if (!resolvedImportPath)
36
+ continue;
37
+ const importedFile = loadSourceFile(project, resolvedImportPath);
38
+ if (!importedFile)
39
+ continue;
40
+ const importedName = declarationNode.getNameNode().getText();
41
+ const importedFunction = importedFile.getFunction(importedName);
42
+ if (importedFunction) {
43
+ declarations.push(importedFunction);
44
+ continue;
45
+ }
46
+ const importedVariable = importedFile.getVariableDeclaration(importedName);
47
+ if (importedVariable)
48
+ declarations.push(importedVariable);
49
+ }
50
+ return declarations;
51
+ }
52
+ export function collectHtmlTaggedTemplatesWithHelpers(root, project) {
53
+ const templates = [...collectHtmlTaggedTemplates(root)];
54
+ const seenTemplateHelpers = new Set();
55
+ root.forEachDescendant((node) => {
56
+ if (!Node.isCallExpression(node))
57
+ return;
58
+ for (const declaration of resolveTemplateHelperDeclarations(node, project)) {
59
+ const helperKey = `${declaration.getSourceFile().getFilePath()}:${declaration.getStart()}`;
60
+ if (seenTemplateHelpers.has(helperKey))
61
+ continue;
62
+ seenTemplateHelpers.add(helperKey);
63
+ templates.push(...collectHtmlTaggedTemplates(declaration));
64
+ }
65
+ });
66
+ return templates;
67
+ }
@@ -0,0 +1,9 @@
1
+ export declare function hasInternalJsDocTag(member: {
2
+ getJsDocs(): import('ts-morph').JSDoc[];
3
+ }): boolean;
4
+ export declare const NON_PUBLIC_LIT_DECORATORS: Set<string>;
5
+ export declare const INTERNAL_RUNTIME_FIELD_NAMES: Set<string>;
6
+ export declare function isNonPublicLitMember(member: {
7
+ getDecorators(): import('ts-morph').Decorator[];
8
+ }): boolean;
9
+ export declare function isInternalRuntimeField(name: string, applyRuntimeFieldDenylist: boolean): boolean;
@@ -0,0 +1,11 @@
1
+ export function hasInternalJsDocTag(member) {
2
+ return member.getJsDocs().some((doc) => doc.getTags().some((tag) => tag.getTagName() === 'internal'));
3
+ }
4
+ export const NON_PUBLIC_LIT_DECORATORS = new Set(['consume', 'provide', 'query', 'queryAsync', 'state']);
5
+ export const INTERNAL_RUNTIME_FIELD_NAMES = new Set(['dir', 'initialReflectedProperties', 'lang']);
6
+ export function isNonPublicLitMember(member) {
7
+ return member.getDecorators().some((decorator) => NON_PUBLIC_LIT_DECORATORS.has(decorator.getName()));
8
+ }
9
+ export function isInternalRuntimeField(name, applyRuntimeFieldDenylist) {
10
+ return applyRuntimeFieldDenylist && INTERNAL_RUNTIME_FIELD_NAMES.has(name);
11
+ }
@@ -0,0 +1,3 @@
1
+ import { type ClassDeclaration } from 'ts-morph';
2
+ import type { RawPropDefinition } from '../../../types/component.js';
3
+ export declare function extractAccessorProperties(classDecl: ClassDeclaration, applyRuntimeFieldDenylist?: boolean): RawPropDefinition[];
@@ -0,0 +1,65 @@
1
+ import { hasInternalJsDocTag, isNonPublicLitMember, isInternalRuntimeField } from './detect-wc-non-public-members.js';
2
+ export function extractAccessorProperties(classDecl, applyRuntimeFieldDenylist = false) {
3
+ const props = [];
4
+ const accessors = new Map();
5
+ for (const getter of classDecl.getGetAccessors()) {
6
+ if (getter.isStatic())
7
+ continue;
8
+ if (hasInternalJsDocTag(getter))
9
+ continue;
10
+ if (isNonPublicLitMember(getter))
11
+ continue;
12
+ const name = getter.getName();
13
+ if (name === 'observedAttributes' ||
14
+ name === 'template' ||
15
+ name.startsWith('#') ||
16
+ isInternalRuntimeField(name, applyRuntimeFieldDenylist))
17
+ continue;
18
+ const scope = getter.getScope();
19
+ if (scope === 'private' || scope === 'protected')
20
+ continue;
21
+ const entry = accessors.get(name) ?? {};
22
+ entry.getter = getter;
23
+ accessors.set(name, entry);
24
+ }
25
+ for (const setter of classDecl.getSetAccessors()) {
26
+ if (setter.isStatic())
27
+ continue;
28
+ if (hasInternalJsDocTag(setter))
29
+ continue;
30
+ if (isNonPublicLitMember(setter))
31
+ continue;
32
+ const name = setter.getName();
33
+ if (name === 'observedAttributes' ||
34
+ name === 'template' ||
35
+ name.startsWith('#') ||
36
+ isInternalRuntimeField(name, applyRuntimeFieldDenylist))
37
+ continue;
38
+ const scope = setter.getScope();
39
+ if (scope === 'private' || scope === 'protected')
40
+ continue;
41
+ const entry = accessors.get(name) ?? {};
42
+ entry.setter = setter;
43
+ accessors.set(name, entry);
44
+ }
45
+ for (const [name, { getter, setter }] of accessors) {
46
+ const hasPropertyDecorator = getter?.getDecorators().some((decorator) => decorator.getName() === 'property') ||
47
+ setter?.getDecorators().some((decorator) => decorator.getName() === 'property');
48
+ if (!hasPropertyDecorator && !(getter && setter))
49
+ continue;
50
+ const type = getter?.getReturnTypeNode()?.getText() ?? setter?.getParameters()[0]?.getTypeNode()?.getText() ?? 'any';
51
+ const accessorNode = getter ?? setter;
52
+ props.push({
53
+ name,
54
+ type,
55
+ required: false,
56
+ ...(accessorNode
57
+ ? {
58
+ sourceStartLine: accessorNode.getStartLineNumber(),
59
+ sourceEndLine: accessorNode.getEndLineNumber(),
60
+ }
61
+ : {}),
62
+ });
63
+ }
64
+ return props;
65
+ }
@@ -0,0 +1,3 @@
1
+ import { type ClassDeclaration } from 'ts-morph';
2
+ import type { RawPropDefinition } from '../../../types/component.js';
3
+ export declare function extractClassProperties(classDecl: ClassDeclaration, applyRuntimeFieldDenylist?: boolean): RawPropDefinition[];
@@ -0,0 +1,60 @@
1
+ import { Node } from 'ts-morph';
2
+ import { hasInternalJsDocTag, isNonPublicLitMember, isInternalRuntimeField } from './detect-wc-non-public-members.js';
3
+ function kebabToCamel(input) {
4
+ return input.replace(/-([a-z0-9])/gi, (_, char) => char.toUpperCase());
5
+ }
6
+ function getExplicitLitPropertyAttributeName(property) {
7
+ const decorator = property.getDecorators().find((candidate) => candidate.getName() === 'property');
8
+ const firstArg = decorator?.getArguments()[0];
9
+ if (!firstArg || !Node.isObjectLiteralExpression(firstArg))
10
+ return null;
11
+ const attributeProp = firstArg.getProperty('attribute');
12
+ if (!attributeProp || !Node.isPropertyAssignment(attributeProp))
13
+ return null;
14
+ const initializer = attributeProp.getInitializer();
15
+ if (!initializer || !Node.isStringLiteral(initializer))
16
+ return null;
17
+ return initializer.getLiteralValue();
18
+ }
19
+ export function extractClassProperties(classDecl, applyRuntimeFieldDenylist = false) {
20
+ const props = [];
21
+ for (const property of classDecl.getProperties()) {
22
+ if (property.isStatic())
23
+ continue;
24
+ if (hasInternalJsDocTag(property))
25
+ continue;
26
+ if (isNonPublicLitMember(property))
27
+ continue;
28
+ const name = property.getName();
29
+ if (name.startsWith('#') || isInternalRuntimeField(name, applyRuntimeFieldDenylist))
30
+ continue;
31
+ const scope = property.getScope();
32
+ if (scope === 'private' || scope === 'protected')
33
+ continue;
34
+ const initializer = property.getInitializer();
35
+ const hasDecorators = property.getDecorators().length > 0;
36
+ if (!hasDecorators && initializer && Node.isArrowFunction(initializer))
37
+ continue;
38
+ if (initializer &&
39
+ Node.isCallExpression(initializer) &&
40
+ initializer.getExpression().getText() === 'this.attachInternals') {
41
+ continue;
42
+ }
43
+ const typeNode = property.getTypeNode();
44
+ const type = typeNode ? typeNode.getText() : 'any';
45
+ const publicName = name.startsWith('_') && hasDecorators ? getExplicitLitPropertyAttributeName(property) : null;
46
+ let defaultValue;
47
+ if (initializer) {
48
+ defaultValue = Node.isStringLiteral(initializer) ? initializer.getLiteralValue() : initializer.getText();
49
+ }
50
+ props.push({
51
+ name: publicName ? kebabToCamel(publicName) : name,
52
+ type,
53
+ required: false,
54
+ ...(defaultValue !== undefined && { defaultValue }),
55
+ sourceStartLine: property.getStartLineNumber(),
56
+ sourceEndLine: property.getEndLineNumber(),
57
+ });
58
+ }
59
+ return props;
60
+ }
@@ -0,0 +1,4 @@
1
+ import { type ClassDeclaration, type Project } from 'ts-morph';
2
+ import type { RawPropDefinition, RawSlotDefinition } from '../../../types/component.js';
3
+ export declare function extractInheritedClassProperties(classDecl: ClassDeclaration, project: Project, visitedFiles?: Set<string>, applyRuntimeFieldDenylist?: boolean): RawPropDefinition[];
4
+ export declare function extractInheritedSlots(classDecl: ClassDeclaration, project: Project, visitedFiles?: Set<string>): RawSlotDefinition[];
@@ -0,0 +1,16 @@
1
+ import { extractAccessorProperties, extractClassProperties, extractJsDocAttributeProps, hasShoelaceRuntimeBookkeepingField, mergePropLists, } from './merge-wc-prop-lists.js';
2
+ import { mergeSlotLists, extractJsDocSlots } from './extract-wc-slots.js';
3
+ import { getImportedBaseClass } from './resolve-wc-base-class.js';
4
+ export function extractInheritedClassProperties(classDecl, project, visitedFiles = new Set(), applyRuntimeFieldDenylist = false) {
5
+ const baseClass = getImportedBaseClass(classDecl, project, visitedFiles);
6
+ if (!baseClass)
7
+ return [];
8
+ const nextApplyRuntimeFieldDenylist = applyRuntimeFieldDenylist || hasShoelaceRuntimeBookkeepingField(baseClass);
9
+ return mergePropLists(extractInheritedClassProperties(baseClass, project, visitedFiles, nextApplyRuntimeFieldDenylist), extractJsDocAttributeProps(baseClass), extractAccessorProperties(baseClass, nextApplyRuntimeFieldDenylist), extractClassProperties(baseClass, nextApplyRuntimeFieldDenylist));
10
+ }
11
+ export function extractInheritedSlots(classDecl, project, visitedFiles = new Set()) {
12
+ const baseClass = getImportedBaseClass(classDecl, project, visitedFiles);
13
+ if (!baseClass)
14
+ return [];
15
+ return mergeSlotLists(extractInheritedSlots(baseClass, project, visitedFiles), extractJsDocSlots(baseClass));
16
+ }
@@ -0,0 +1,3 @@
1
+ import type { ClassDeclaration } from 'ts-morph';
2
+ import type { RawPropDefinition } from '../../../types/component.js';
3
+ export declare function extractJsDocAttributeProps(classDecl: ClassDeclaration): RawPropDefinition[];
@@ -0,0 +1,24 @@
1
+ export function extractJsDocAttributeProps(classDecl) {
2
+ const props = [];
3
+ for (const doc of classDecl.getJsDocs()) {
4
+ for (const tag of doc.getTags()) {
5
+ if (tag.getTagName() !== 'attribute')
6
+ continue;
7
+ const tagComment = tag.getCommentText();
8
+ const normalizedComment = Array.isArray(tagComment) ? tagComment.join(' ') : tagComment;
9
+ const match = normalizedComment?.match(/(?:\{([^}]+)\}\s+)?([^\s]+)(?:\s*-\s*([\s\S]*))?/);
10
+ if (!match)
11
+ continue;
12
+ const [, type, name, description] = match;
13
+ if (!name || name.startsWith('#'))
14
+ continue;
15
+ props.push({
16
+ name,
17
+ type: type?.trim() || 'any',
18
+ required: false,
19
+ ...(description ? { description: description.replace(/\s+/g, ' ').trim() } : {}),
20
+ });
21
+ }
22
+ }
23
+ return props;
24
+ }
@@ -0,0 +1,3 @@
1
+ import { type ClassDeclaration } from 'ts-morph';
2
+ import type { RawPropDefinition } from '../../../types/component.js';
3
+ export declare function extractObservedAttributes(classDecl: ClassDeclaration): RawPropDefinition[];
@@ -0,0 +1,27 @@
1
+ import { Node } from 'ts-morph';
2
+ export function extractObservedAttributes(classDecl) {
3
+ const props = [];
4
+ const getter = classDecl.getGetAccessor('observedAttributes');
5
+ if (!getter || !getter.isStatic())
6
+ return props;
7
+ const body = getter.getBody();
8
+ if (!body)
9
+ return props;
10
+ body.forEachDescendant((node) => {
11
+ if (!Node.isReturnStatement(node))
12
+ return;
13
+ const expression = node.getExpression();
14
+ if (!expression || !Node.isArrayLiteralExpression(expression))
15
+ return;
16
+ for (const element of expression.getElements()) {
17
+ if (Node.isStringLiteral(element)) {
18
+ props.push({
19
+ name: element.getLiteralValue(),
20
+ type: 'string',
21
+ required: false,
22
+ });
23
+ }
24
+ }
25
+ });
26
+ return props;
27
+ }
@@ -0,0 +1,6 @@
1
+ import { type ClassDeclaration } from 'ts-morph';
2
+ import type { RawSlotDefinition } from '../../../types/component.js';
3
+ export { extractTemplateContent, extractFastTemplateSlots } from './extract-wc-template-content.js';
4
+ export declare function extractSlotsFromTemplate(templateContent: string): RawSlotDefinition[];
5
+ export declare function mergeSlotLists(...slotLists: RawSlotDefinition[][]): RawSlotDefinition[];
6
+ export declare function extractJsDocSlots(classDecl: ClassDeclaration): RawSlotDefinition[];
@@ -0,0 +1,56 @@
1
+ import { collectJsDocSlotComments } from '../../shared/helpers/collect-jsdoc-slot-comments.js';
2
+ export { extractTemplateContent, extractFastTemplateSlots } from './extract-wc-template-content.js';
3
+ export function extractSlotsFromTemplate(templateContent) {
4
+ const slots = new Map();
5
+ const slotRegex = /<slot\b([^>]*)>/g;
6
+ for (const match of templateContent.matchAll(slotRegex)) {
7
+ const attrs = match[1] ?? '';
8
+ const nameMatch = attrs.match(/\bname=["']([^"']+)["']/);
9
+ const name = nameMatch?.[1] ?? 'default';
10
+ slots.set(name, name === 'default');
11
+ }
12
+ return [...slots.entries()]
13
+ .map(([name, isDefault]) => ({ name, isDefault }))
14
+ .sort((a, b) => a.name.localeCompare(b.name));
15
+ }
16
+ export function mergeSlotLists(...slotLists) {
17
+ const merged = new Map();
18
+ for (const slotList of slotLists) {
19
+ for (const slot of slotList) {
20
+ const existing = merged.get(slot.name);
21
+ if (!existing) {
22
+ merged.set(slot.name, slot);
23
+ continue;
24
+ }
25
+ merged.set(slot.name, {
26
+ ...existing,
27
+ ...slot,
28
+ description: existing.description ?? slot.description,
29
+ });
30
+ }
31
+ }
32
+ return [...merged.values()].sort((a, b) => a.name.localeCompare(b.name));
33
+ }
34
+ export function extractJsDocSlots(classDecl) {
35
+ const slots = [];
36
+ for (const comment of collectJsDocSlotComments(classDecl)) {
37
+ let name = 'default';
38
+ let description = comment;
39
+ if (comment.startsWith('-')) {
40
+ description = comment.slice(1).trim();
41
+ }
42
+ else {
43
+ const match = comment.match(/^(\S+)\s*-\s*(.*)$/s);
44
+ if (match) {
45
+ name = match[1];
46
+ description = match[2].trim();
47
+ }
48
+ }
49
+ slots.push({
50
+ name,
51
+ isDefault: name === 'default',
52
+ ...(description && { description }),
53
+ });
54
+ }
55
+ return mergeSlotLists(slots);
56
+ }
@@ -0,0 +1,4 @@
1
+ import { type ClassDeclaration, type Project } from 'ts-morph';
2
+ import type { RawSlotDefinition } from '../../../types/component.js';
3
+ export declare function extractTemplateContent(classDecl: ClassDeclaration, project: Project): string;
4
+ export declare function extractFastTemplateSlots(classDecl: ClassDeclaration, project: Project): RawSlotDefinition[];