@contentful/experience-design-system-extraction 2.36.2-dev-build-a6f80ae6.0 → 2.36.2-dev-build-450d231a.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/package.json +1 -1
- package/dist/src/extract/controller/extract-controller.d.ts +10 -0
- package/dist/src/extract/controller/extract-controller.js +33 -0
- package/dist/src/extract/controller/helpers/validate-endpoint-request.d.ts +2 -0
- package/dist/src/extract/controller/helpers/validate-endpoint-request.js +24 -0
- package/dist/src/extract/{astro.d.ts → framework-adapters/astro/extractor.d.ts} +1 -1
- package/dist/src/extract/framework-adapters/astro/extractor.js +45 -0
- package/dist/src/extract/framework-adapters/astro/frontmatter.d.ts +11 -0
- package/dist/src/extract/framework-adapters/astro/frontmatter.js +96 -0
- package/dist/src/extract/framework-adapters/astro/helpers/collect-astro-props-bindings.d.ts +4 -0
- package/dist/src/extract/framework-adapters/astro/helpers/collect-astro-props-bindings.js +47 -0
- package/dist/src/extract/framework-adapters/astro/slots.d.ts +7 -0
- package/dist/src/extract/framework-adapters/astro/slots.js +44 -0
- package/dist/src/extract/{react.d.ts → framework-adapters/react/extractor.d.ts} +1 -1
- package/dist/src/extract/framework-adapters/react/extractor.js +31 -0
- package/dist/src/extract/framework-adapters/react/helpers/collect-dom-wrapper-contexts.d.ts +4 -0
- package/dist/src/extract/framework-adapters/react/helpers/collect-dom-wrapper-contexts.js +73 -0
- package/dist/src/extract/framework-adapters/react/helpers/collect-prop-dataflow.d.ts +14 -0
- package/dist/src/extract/framework-adapters/react/helpers/collect-prop-dataflow.js +220 -0
- package/dist/src/extract/framework-adapters/react/helpers/collect-react-impl-hints.d.ts +5 -0
- package/dist/src/extract/framework-adapters/react/helpers/collect-react-impl-hints.js +32 -0
- package/dist/src/extract/framework-adapters/react/helpers/detect-dom-is-pure-wrapper.d.ts +2 -0
- package/dist/src/extract/framework-adapters/react/helpers/detect-dom-is-pure-wrapper.js +59 -0
- package/dist/src/extract/framework-adapters/react/helpers/detect-dom-type-patterns.d.ts +8 -0
- package/dist/src/extract/framework-adapters/react/helpers/detect-dom-type-patterns.js +29 -0
- package/dist/src/extract/framework-adapters/react/helpers/detect-omit-wrapped-custom-props.d.ts +2 -0
- package/dist/src/extract/framework-adapters/react/helpers/detect-omit-wrapped-custom-props.js +64 -0
- package/dist/src/extract/framework-adapters/react/helpers/detect-pick-type-patterns.d.ts +4 -0
- package/dist/src/extract/framework-adapters/react/helpers/detect-pick-type-patterns.js +64 -0
- package/dist/src/extract/framework-adapters/react/helpers/detect-react-polymorphic.d.ts +5 -0
- package/dist/src/extract/framework-adapters/react/helpers/detect-react-polymorphic.js +170 -0
- package/dist/src/extract/framework-adapters/react/helpers/dom-attribute-surfaces.d.ts +15 -0
- package/dist/src/extract/framework-adapters/react/helpers/dom-attribute-surfaces.js +231 -0
- package/dist/src/extract/framework-adapters/react/helpers/extract-binding-fallback-props.d.ts +4 -0
- package/dist/src/extract/framework-adapters/react/helpers/extract-binding-fallback-props.js +50 -0
- package/dist/src/extract/framework-adapters/react/helpers/extract-from-react-source-file.d.ts +5 -0
- package/dist/src/extract/framework-adapters/react/helpers/extract-from-react-source-file.js +23 -0
- package/dist/src/extract/framework-adapters/react/helpers/extract-react-allowed-components.d.ts +2 -0
- package/dist/src/extract/framework-adapters/react/helpers/extract-react-allowed-components.js +25 -0
- package/dist/src/extract/framework-adapters/react/helpers/extract-react-binding-defaults.d.ts +6 -0
- package/dist/src/extract/framework-adapters/react/helpers/extract-react-binding-defaults.js +48 -0
- package/dist/src/extract/framework-adapters/react/helpers/extract-react-component-from-export.d.ts +15 -0
- package/dist/src/extract/framework-adapters/react/helpers/extract-react-component-from-export.js +106 -0
- package/dist/src/extract/framework-adapters/react/helpers/extract-react-prop-types.d.ts +3 -0
- package/dist/src/extract/framework-adapters/react/helpers/extract-react-prop-types.js +64 -0
- package/dist/src/extract/framework-adapters/react/helpers/extract-react-props-from-type.d.ts +15 -0
- package/dist/src/extract/framework-adapters/react/helpers/extract-react-props-from-type.js +318 -0
- package/dist/src/extract/framework-adapters/react/helpers/extract-react-slots.d.ts +6 -0
- package/dist/src/extract/framework-adapters/react/helpers/extract-react-slots.js +44 -0
- package/dist/src/extract/framework-adapters/react/helpers/filter-impl-alias-props.d.ts +4 -0
- package/dist/src/extract/framework-adapters/react/helpers/filter-impl-alias-props.js +52 -0
- package/dist/src/extract/framework-adapters/react/helpers/infer-primitive-dom-props.d.ts +6 -0
- package/dist/src/extract/framework-adapters/react/helpers/infer-primitive-dom-props.js +69 -0
- package/dist/src/extract/framework-adapters/react/helpers/resolve-component-function.d.ts +4 -0
- package/dist/src/extract/framework-adapters/react/helpers/resolve-component-function.js +131 -0
- package/dist/src/extract/framework-adapters/react/helpers/resolve-react-prop-forwarding.d.ts +8 -0
- package/dist/src/extract/framework-adapters/react/helpers/resolve-react-prop-forwarding.js +22 -0
- package/dist/src/extract/framework-adapters/react/helpers/resolve-react-props-type.d.ts +14 -0
- package/dist/src/extract/framework-adapters/react/helpers/resolve-react-props-type.js +86 -0
- package/dist/src/extract/framework-adapters/react/helpers/synthesize-react-structural-slots.d.ts +8 -0
- package/dist/src/extract/framework-adapters/react/helpers/synthesize-react-structural-slots.js +44 -0
- package/dist/src/extract/framework-adapters/shared/helpers/build-component-lookup-maps.d.ts +5 -0
- package/dist/src/extract/framework-adapters/shared/helpers/build-component-lookup-maps.js +10 -0
- package/dist/src/extract/framework-adapters/shared/helpers/collect-jsdoc-slot-comments.d.ts +2 -0
- package/dist/src/extract/framework-adapters/shared/helpers/collect-jsdoc-slot-comments.js +13 -0
- package/dist/src/extract/{file-extraction-workers.d.ts → framework-adapters/shared/helpers/file-processing/file-workers.d.ts} +1 -13
- package/dist/src/extract/{file-extraction-workers.js → framework-adapters/shared/helpers/file-processing/file-workers.js} +0 -19
- package/dist/src/extract/framework-adapters/shared/helpers/file-processing/project-source-files.d.ts +5 -0
- package/dist/src/extract/framework-adapters/shared/helpers/file-processing/project-source-files.js +13 -0
- package/dist/src/extract/framework-adapters/shared/helpers/file-processing/result-normalizer.d.ts +6 -0
- package/dist/src/extract/framework-adapters/shared/helpers/file-processing/result-normalizer.js +6 -0
- package/dist/src/extract/framework-adapters/shared/helpers/find-tsx-workspace-package.d.ts +2 -0
- package/dist/src/extract/framework-adapters/shared/helpers/find-tsx-workspace-package.js +62 -0
- package/dist/src/extract/{source-line-metadata.d.ts → framework-adapters/shared/helpers/get-node-source-lines.d.ts} +1 -1
- package/dist/src/extract/framework-adapters/shared/helpers/resolve-tsx-tsconfig-path.d.ts +7 -0
- package/dist/src/extract/framework-adapters/shared/helpers/resolve-tsx-tsconfig-path.js +93 -0
- package/dist/src/extract/framework-adapters/shared/helpers/resolve-tsx-workspace-imports.d.ts +6 -0
- package/dist/src/extract/framework-adapters/shared/helpers/resolve-tsx-workspace-imports.js +58 -0
- package/dist/src/extract/framework-adapters/shared/helpers/tsx-node-utils.d.ts +13 -0
- package/dist/src/extract/framework-adapters/shared/helpers/tsx-node-utils.js +76 -0
- package/dist/src/extract/framework-adapters/shared/helpers/tsx-renderable-exports.d.ts +12 -0
- package/dist/src/extract/framework-adapters/shared/helpers/tsx-renderable-exports.js +35 -0
- package/dist/src/extract/framework-adapters/shared/helpers/tsx-shared.d.ts +14 -0
- package/dist/src/extract/framework-adapters/shared/helpers/tsx-shared.js +54 -0
- package/dist/src/extract/{stencil.d.ts → framework-adapters/stencil/extractor.d.ts} +1 -1
- package/dist/src/extract/framework-adapters/stencil/extractor.js +82 -0
- package/dist/src/extract/framework-adapters/stencil/helpers/detect-stencil-class.d.ts +7 -0
- package/dist/src/extract/framework-adapters/stencil/helpers/detect-stencil-class.js +32 -0
- package/dist/src/extract/framework-adapters/stencil/helpers/extract-stencil-props.d.ts +5 -0
- package/dist/src/extract/framework-adapters/stencil/helpers/extract-stencil-props.js +62 -0
- package/dist/src/extract/framework-adapters/stencil/helpers/extract-stencil-slots.d.ts +6 -0
- package/dist/src/extract/framework-adapters/stencil/helpers/extract-stencil-slots.js +87 -0
- package/dist/src/extract/framework-adapters/stencil/helpers/stencil-prop-helpers.d.ts +5 -0
- package/dist/src/extract/framework-adapters/stencil/helpers/stencil-prop-helpers.js +39 -0
- package/dist/src/extract/{svelte.d.ts → framework-adapters/svelte/extractor.d.ts} +2 -1
- package/dist/src/extract/framework-adapters/svelte/extractor.js +27 -0
- package/dist/src/extract/framework-adapters/svelte/helpers/classify-svelte-props-annotation.d.ts +6 -0
- package/dist/src/extract/framework-adapters/svelte/helpers/classify-svelte-props-annotation.js +51 -0
- package/dist/src/extract/framework-adapters/svelte/helpers/collect-svelte-type-references.d.ts +3 -0
- package/dist/src/extract/framework-adapters/svelte/helpers/collect-svelte-type-references.js +52 -0
- package/dist/src/extract/framework-adapters/svelte/helpers/extract-from-svelte-file.d.ts +7 -0
- package/dist/src/extract/framework-adapters/svelte/helpers/extract-from-svelte-file.js +90 -0
- package/dist/src/extract/framework-adapters/svelte/helpers/extract-svelte-ast-type-members.d.ts +15 -0
- package/dist/src/extract/framework-adapters/svelte/helpers/extract-svelte-ast-type-members.js +46 -0
- package/dist/src/extract/framework-adapters/svelte/helpers/extract-svelte-declaration-data.d.ts +7 -0
- package/dist/src/extract/framework-adapters/svelte/helpers/extract-svelte-declaration-data.js +64 -0
- package/dist/src/extract/framework-adapters/svelte/helpers/extract-svelte-external-type-members.d.ts +4 -0
- package/dist/src/extract/framework-adapters/svelte/helpers/extract-svelte-external-type-members.js +58 -0
- package/dist/src/extract/framework-adapters/svelte/helpers/extract-svelte-from-destructure.d.ts +4 -0
- package/dist/src/extract/framework-adapters/svelte/helpers/extract-svelte-from-destructure.js +85 -0
- package/dist/src/extract/framework-adapters/svelte/helpers/extract-svelte-props.d.ts +22 -0
- package/dist/src/extract/framework-adapters/svelte/helpers/extract-svelte-props.js +55 -0
- package/dist/src/extract/framework-adapters/svelte/helpers/extract-svelte-template-slots.d.ts +7 -0
- package/dist/src/extract/framework-adapters/svelte/helpers/extract-svelte-template-slots.js +63 -0
- package/dist/src/extract/framework-adapters/svelte/helpers/extract-svelte-type-member-props.d.ts +3 -0
- package/dist/src/extract/framework-adapters/svelte/helpers/extract-svelte-type-member-props.js +31 -0
- package/dist/src/extract/framework-adapters/svelte/helpers/find-svelte-script-declarations.d.ts +8 -0
- package/dist/src/extract/framework-adapters/svelte/helpers/find-svelte-script-declarations.js +91 -0
- package/dist/src/extract/framework-adapters/svelte/helpers/get-svelte-component-name.d.ts +1 -0
- package/dist/src/extract/framework-adapters/svelte/helpers/get-svelte-component-name.js +26 -0
- package/dist/src/extract/framework-adapters/svelte/helpers/render-svelte-type-strings.d.ts +3 -0
- package/dist/src/extract/framework-adapters/svelte/helpers/render-svelte-type-strings.js +91 -0
- package/dist/src/extract/framework-adapters/svelte/helpers/render-svelte-type.d.ts +11 -0
- package/dist/src/extract/framework-adapters/svelte/helpers/render-svelte-type.js +68 -0
- package/dist/src/extract/framework-adapters/svelte/helpers/resolve-dts-location.d.ts +1 -0
- package/dist/src/extract/framework-adapters/svelte/helpers/resolve-dts-location.js +90 -0
- package/dist/src/extract/framework-adapters/svelte/helpers/resolve-svelte-allowed-components.d.ts +2 -0
- package/dist/src/extract/framework-adapters/svelte/helpers/resolve-svelte-allowed-components.js +20 -0
- package/dist/src/extract/framework-adapters/svelte/helpers/resolve-svelte-external-type-readers.d.ts +3 -0
- package/dist/src/extract/framework-adapters/svelte/helpers/resolve-svelte-external-type-readers.js +68 -0
- package/dist/src/extract/framework-adapters/svelte/helpers/resolve-svelte-type-checker.d.ts +4 -0
- package/dist/src/extract/framework-adapters/svelte/helpers/resolve-svelte-type-checker.js +68 -0
- package/dist/src/extract/framework-adapters/svelte/helpers/resolve-svelte-type-members.d.ts +6 -0
- package/dist/src/extract/framework-adapters/svelte/helpers/resolve-svelte-type-members.js +30 -0
- package/dist/src/extract/framework-adapters/svelte/helpers/resolve-svelte-unresolved-retry.d.ts +13 -0
- package/dist/src/extract/framework-adapters/svelte/helpers/resolve-svelte-unresolved-retry.js +192 -0
- package/dist/src/extract/framework-adapters/svelte/types/svelte-ast-node.d.ts +12 -0
- package/dist/src/extract/framework-adapters/svelte/types/svelte-ast-node.js +1 -0
- package/dist/src/extract/{vue.d.ts → framework-adapters/vue/extractor.d.ts} +1 -1
- package/dist/src/extract/framework-adapters/vue/extractor.js +61 -0
- package/dist/src/extract/framework-adapters/vue/helpers/extract-vue-object-props.d.ts +3 -0
- package/dist/src/extract/framework-adapters/vue/helpers/extract-vue-object-props.js +67 -0
- package/dist/src/extract/framework-adapters/vue/helpers/extract-vue-options-props.d.ts +4 -0
- package/dist/src/extract/framework-adapters/vue/helpers/extract-vue-options-props.js +72 -0
- package/dist/src/extract/framework-adapters/vue/helpers/extract-vue-setup-object-props.d.ts +8 -0
- package/dist/src/extract/framework-adapters/vue/helpers/extract-vue-setup-object-props.js +64 -0
- package/dist/src/extract/framework-adapters/vue/helpers/extract-vue-setup-props.d.ts +2 -0
- package/dist/src/extract/framework-adapters/vue/helpers/extract-vue-setup-props.js +66 -0
- package/dist/src/extract/framework-adapters/vue/helpers/extract-vue-slots.d.ts +24 -0
- package/dist/src/extract/framework-adapters/vue/helpers/extract-vue-slots.js +56 -0
- package/dist/src/extract/framework-adapters/vue/helpers/resolve-vue-component-name.d.ts +2 -0
- package/dist/src/extract/framework-adapters/vue/helpers/resolve-vue-component-name.js +9 -0
- package/dist/src/extract/framework-adapters/vue/helpers/resolve-workspace-module.d.ts +1 -0
- package/dist/src/extract/framework-adapters/vue/helpers/resolve-workspace-module.js +76 -0
- package/dist/src/extract/framework-adapters/vue/helpers/workspace-package-dirs.d.ts +2 -0
- package/dist/src/extract/framework-adapters/vue/helpers/workspace-package-dirs.js +77 -0
- package/dist/src/extract/{vue-tsx.d.ts → framework-adapters/vue-tsx/extractor.d.ts} +1 -1
- package/dist/src/extract/framework-adapters/vue-tsx/extractor.js +82 -0
- package/dist/src/extract/framework-adapters/vue-tsx/helpers/extract-vue-tsx-props.d.ts +5 -0
- package/dist/src/extract/framework-adapters/vue-tsx/helpers/extract-vue-tsx-props.js +189 -0
- package/dist/src/extract/framework-adapters/vue-tsx/helpers/extract-vue-tsx-slots.d.ts +4 -0
- package/dist/src/extract/framework-adapters/vue-tsx/helpers/extract-vue-tsx-slots.js +91 -0
- package/dist/src/extract/framework-adapters/vue-tsx/helpers/resolve-ast-object.d.ts +11 -0
- package/dist/src/extract/framework-adapters/vue-tsx/helpers/resolve-ast-object.js +95 -0
- package/dist/src/extract/{web-components.d.ts → framework-adapters/web-components/extractor.d.ts} +1 -1
- package/dist/src/extract/framework-adapters/web-components/extractor.js +55 -0
- package/dist/src/extract/framework-adapters/web-components/helpers/collect-wc-html-templates.d.ts +4 -0
- package/dist/src/extract/framework-adapters/web-components/helpers/collect-wc-html-templates.js +67 -0
- package/dist/src/extract/framework-adapters/web-components/helpers/detect-wc-non-public-members.d.ts +9 -0
- package/dist/src/extract/framework-adapters/web-components/helpers/detect-wc-non-public-members.js +11 -0
- package/dist/src/extract/framework-adapters/web-components/helpers/extract-wc-accessor-props.d.ts +3 -0
- package/dist/src/extract/framework-adapters/web-components/helpers/extract-wc-accessor-props.js +65 -0
- package/dist/src/extract/framework-adapters/web-components/helpers/extract-wc-class-properties.d.ts +3 -0
- package/dist/src/extract/framework-adapters/web-components/helpers/extract-wc-class-properties.js +60 -0
- package/dist/src/extract/framework-adapters/web-components/helpers/extract-wc-inheritance.d.ts +4 -0
- package/dist/src/extract/framework-adapters/web-components/helpers/extract-wc-inheritance.js +16 -0
- package/dist/src/extract/framework-adapters/web-components/helpers/extract-wc-jsdoc-attr-props.d.ts +3 -0
- package/dist/src/extract/framework-adapters/web-components/helpers/extract-wc-jsdoc-attr-props.js +24 -0
- package/dist/src/extract/framework-adapters/web-components/helpers/extract-wc-observed-attrs.d.ts +3 -0
- package/dist/src/extract/framework-adapters/web-components/helpers/extract-wc-observed-attrs.js +27 -0
- package/dist/src/extract/framework-adapters/web-components/helpers/extract-wc-slots.d.ts +6 -0
- package/dist/src/extract/framework-adapters/web-components/helpers/extract-wc-slots.js +56 -0
- package/dist/src/extract/framework-adapters/web-components/helpers/extract-wc-template-content.d.ts +4 -0
- package/dist/src/extract/framework-adapters/web-components/helpers/extract-wc-template-content.js +49 -0
- package/dist/src/extract/framework-adapters/web-components/helpers/merge-wc-prop-lists.d.ts +9 -0
- package/dist/src/extract/framework-adapters/web-components/helpers/merge-wc-prop-lists.js +19 -0
- package/dist/src/extract/framework-adapters/web-components/helpers/resolve-wc-base-class.d.ts +2 -0
- package/dist/src/extract/framework-adapters/web-components/helpers/resolve-wc-base-class.js +59 -0
- package/dist/src/extract/framework-adapters/web-components/helpers/resolve-wc-decorator-tag.d.ts +2 -0
- package/dist/src/extract/framework-adapters/web-components/helpers/resolve-wc-decorator-tag.js +54 -0
- package/dist/src/extract/framework-adapters/web-components/helpers/resolve-wc-import-source.d.ts +7 -0
- package/dist/src/extract/framework-adapters/web-components/helpers/resolve-wc-import-source.js +47 -0
- package/dist/src/extract/framework-adapters/web-components/helpers/resolve-wc-import.d.ts +4 -0
- package/dist/src/extract/framework-adapters/web-components/helpers/resolve-wc-import.js +93 -0
- package/dist/src/extract/framework-adapters/web-components/helpers/resolve-wc-sibling-definition.d.ts +4 -0
- package/dist/src/extract/framework-adapters/web-components/helpers/resolve-wc-sibling-definition.js +79 -0
- package/dist/src/extract/framework-adapters/web-components/helpers/resolve-wc-tag-name.d.ts +7 -0
- package/dist/src/extract/framework-adapters/web-components/helpers/resolve-wc-tag-name.js +62 -0
- package/dist/src/extract/helpers/evidence/ast/collect-structural-jsx-evidence.d.ts +5 -0
- package/dist/src/extract/helpers/evidence/ast/collect-structural-jsx-evidence.js +63 -0
- package/dist/src/extract/helpers/evidence/ast/detect-react-node-types.d.ts +2 -0
- package/dist/src/extract/helpers/evidence/ast/detect-react-node-types.js +24 -0
- package/dist/src/extract/helpers/evidence/ast/get-jsx-ast-data.d.ts +14 -0
- package/dist/src/extract/helpers/evidence/ast/get-jsx-ast-data.js +85 -0
- package/dist/src/extract/helpers/evidence/collect-jsx-component-references.d.ts +5 -0
- package/dist/src/extract/helpers/evidence/collect-jsx-component-references.js +52 -0
- package/dist/src/extract/helpers/evidence/detect-slot-from-prop.d.ts +16 -0
- package/dist/src/extract/helpers/evidence/detect-slot-from-prop.js +39 -0
- package/dist/src/extract/orchestrator/execute-extraction-orchestrator.d.ts +13 -0
- package/dist/src/extract/orchestrator/execute-extraction-orchestrator.js +17 -0
- package/dist/src/{pre-classify.d.ts → extract/services/classification/classify-component-props.d.ts} +3 -5
- package/dist/src/{pre-classify.js → extract/services/classification/classify-component-props.js} +8 -100
- package/dist/src/extract/services/classification/helpers/check-prop-types.d.ts +7 -0
- package/dist/src/extract/services/classification/helpers/check-prop-types.js +22 -0
- package/dist/src/extract/services/classification/helpers/detect-dom-props.d.ts +2 -0
- package/dist/src/extract/services/classification/helpers/detect-dom-props.js +63 -0
- package/dist/src/extract/services/deduplication/deduplicate-components.d.ts +2 -0
- package/dist/src/extract/services/deduplication/deduplicate-components.js +58 -0
- package/dist/src/extract/services/deduplication/helpers/component-path-analysis.d.ts +10 -0
- package/dist/src/extract/services/deduplication/helpers/component-path-analysis.js +85 -0
- package/dist/src/extract/services/deduplication/helpers/component-path-scoring.d.ts +10 -0
- package/dist/src/extract/services/deduplication/helpers/component-path-scoring.js +73 -0
- package/dist/src/extract/services/extraction/extract-components.d.ts +3 -0
- package/dist/src/extract/services/extraction/extract-components.js +19 -0
- package/dist/src/extract/services/extraction/helpers/collect-sveltekit-route-exclusions.d.ts +2 -0
- package/dist/src/extract/services/extraction/helpers/collect-sveltekit-route-exclusions.js +18 -0
- package/dist/src/extract/services/extraction/helpers/filter-hook-components.d.ts +6 -0
- package/dist/src/extract/services/extraction/helpers/filter-hook-components.js +18 -0
- package/dist/src/extract/services/extraction/helpers/register-extractors.d.ts +8 -0
- package/dist/src/extract/services/extraction/helpers/register-extractors.js +71 -0
- package/dist/src/extract/services/extraction/helpers/run-extractor-batches.d.ts +4 -0
- package/dist/src/extract/services/extraction/helpers/run-extractor-batches.js +24 -0
- package/dist/src/extract/services/quality/evaluate-extraction-quality.d.ts +4 -0
- package/dist/src/extract/services/quality/evaluate-extraction-quality.js +61 -0
- package/dist/src/extract/services/quality/helpers/authorability/evaluate-authorability.d.ts +28 -0
- package/dist/src/extract/services/quality/helpers/authorability/evaluate-authorability.js +67 -0
- package/dist/src/extract/services/quality/helpers/inspection/detect-data-wrapper-patterns.d.ts +16 -0
- package/dist/src/extract/services/quality/helpers/inspection/detect-data-wrapper-patterns.js +63 -0
- package/dist/src/extract/{source-inspection.d.ts → services/quality/helpers/inspection/inspect-component-source.d.ts} +3 -6
- package/dist/src/extract/{source-inspection.js → services/quality/helpers/inspection/inspect-component-source.js} +5 -65
- package/dist/src/extract/{validate.d.ts → services/quality/helpers/inspection/validate-extracted-components.d.ts} +1 -1
- package/dist/src/extract/services/quality/helpers/scoring/collect-scoring-inputs.d.ts +14 -0
- package/dist/src/extract/{scoring.js → services/quality/helpers/scoring/collect-scoring-inputs.js} +10 -24
- package/dist/src/extract/services/quality/helpers/scoring/compute-extraction-score.d.ts +6 -0
- package/dist/src/extract/services/quality/helpers/scoring/compute-extraction-score.js +12 -0
- package/dist/src/extract/types/classification.d.ts +4 -0
- package/dist/src/extract/types/classification.js +1 -0
- package/dist/src/extract/types/component-extractor.d.ts +7 -0
- package/dist/src/extract/types/component-extractor.js +1 -0
- package/dist/src/{types.d.ts → extract/types/component.d.ts} +0 -22
- package/dist/src/extract/types/component.js +1 -0
- package/dist/src/extract/types/contract.d.ts +16 -0
- package/dist/src/extract/types/contract.js +1 -0
- package/dist/src/extract/types/display.d.ts +3 -0
- package/dist/src/{types.js → extract/types/display.js} +1 -1
- package/dist/src/extract/types/options.d.ts +15 -0
- package/dist/src/extract/types/options.js +1 -0
- package/dist/src/extract/types/scoring.d.ts +9 -0
- package/dist/src/extract/types/scoring.js +1 -0
- package/dist/src/extract/types/source-inspection.d.ts +5 -0
- package/dist/src/extract/types/source-inspection.js +1 -0
- package/dist/src/index.d.ts +27 -21
- package/dist/src/index.js +21 -17
- package/package.json +1 -1
- package/dist/src/extract/astro.js +0 -226
- package/dist/src/extract/non-authorable-filter.d.ts +0 -17
- package/dist/src/extract/non-authorable-filter.js +0 -60
- package/dist/src/extract/pipeline.d.ts +0 -7
- package/dist/src/extract/pipeline.js +0 -343
- package/dist/src/extract/react.js +0 -2069
- package/dist/src/extract/scoring.d.ts +0 -12
- package/dist/src/extract/slot-detection.d.ts +0 -35
- package/dist/src/extract/slot-detection.js +0 -98
- package/dist/src/extract/stencil.js +0 -312
- package/dist/src/extract/structural-slot-evidence.d.ts +0 -63
- package/dist/src/extract/structural-slot-evidence.js +0 -278
- package/dist/src/extract/svelte.js +0 -1309
- package/dist/src/extract/tsx-shared.d.ts +0 -37
- package/dist/src/extract/tsx-shared.js +0 -368
- package/dist/src/extract/vue-tsx.js +0 -449
- package/dist/src/extract/vue.js +0 -605
- package/dist/src/extract/web-components.js +0 -863
- /package/dist/src/extract/{source-line-metadata.js → framework-adapters/shared/helpers/get-node-source-lines.js} +0 -0
- /package/dist/src/extract/{resolve-local-module.d.ts → framework-adapters/shared/helpers/resolve-import-file-path.d.ts} +0 -0
- /package/dist/src/extract/{resolve-local-module.js → framework-adapters/shared/helpers/resolve-import-file-path.js} +0 -0
- /package/dist/src/extract/{resolve-type-property.d.ts → framework-adapters/shared/helpers/resolve-type-symbol.d.ts} +0 -0
- /package/dist/src/extract/{resolve-type-property.js → framework-adapters/shared/helpers/resolve-type-symbol.js} +0 -0
- /package/dist/src/extract/{slot-allowed-components.d.ts → helpers/evidence/collect-allowed-component-names.d.ts} +0 -0
- /package/dist/src/extract/{slot-allowed-components.js → helpers/evidence/collect-allowed-component-names.js} +0 -0
- /package/dist/src/extract/{parse-imported-names.d.ts → helpers/evidence/parse-source-imports.d.ts} +0 -0
- /package/dist/src/extract/{parse-imported-names.js → helpers/evidence/parse-source-imports.js} +0 -0
- /package/dist/src/extract/{validate.js → services/quality/helpers/inspection/validate-extracted-components.js} +0 -0
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { Node, SyntaxKind } from 'ts-morph';
|
|
2
|
+
import { getJsxTagNameNode } from '../../shared/helpers/tsx-shared.js';
|
|
3
|
+
import { getDomAttributeSurface, JSX_PRIMITIVE_DOM_ATTRIBUTE_SURFACES, getBoundedImportedJsxDomSurface, } from './dom-attribute-surfaces.js';
|
|
4
|
+
export function collectRestBindingNames(nameNode) {
|
|
5
|
+
const names = new Set();
|
|
6
|
+
if (!Node.isObjectBindingPattern(nameNode))
|
|
7
|
+
return names;
|
|
8
|
+
for (const element of nameNode.getElements()) {
|
|
9
|
+
if (!element.getDotDotDotToken())
|
|
10
|
+
continue;
|
|
11
|
+
const restNameNode = element.getNameNode();
|
|
12
|
+
if (Node.isIdentifier(restNameNode))
|
|
13
|
+
names.add(restNameNode.getText());
|
|
14
|
+
}
|
|
15
|
+
return names;
|
|
16
|
+
}
|
|
17
|
+
export function isComponentSpreadAttribute(attribute, bindingNames) {
|
|
18
|
+
if (!Node.isJsxSpreadAttribute(attribute))
|
|
19
|
+
return false;
|
|
20
|
+
const expression = attribute.getExpression();
|
|
21
|
+
if (!Node.isIdentifier(expression) || !bindingNames.has(expression.getText()))
|
|
22
|
+
return false;
|
|
23
|
+
const tagName = getJsxTagNameNode(attribute)?.getText();
|
|
24
|
+
return tagName ? /^[A-Z]/.test(tagName) : false;
|
|
25
|
+
}
|
|
26
|
+
export function inferPrimitiveDomPropsFromImplementation(funcNode, propsParam) {
|
|
27
|
+
const candidatePropNames = new Set();
|
|
28
|
+
const propsParamNameNode = propsParam.getNameNode();
|
|
29
|
+
if (Node.isIdentifier(propsParamNameNode))
|
|
30
|
+
candidatePropNames.add(propsParam.getName());
|
|
31
|
+
for (const restName of collectRestBindingNames(propsParamNameNode))
|
|
32
|
+
candidatePropNames.add(restName);
|
|
33
|
+
for (const variableDeclaration of funcNode.getDescendantsOfKind(SyntaxKind.VariableDeclaration)) {
|
|
34
|
+
const initializer = variableDeclaration.getInitializer();
|
|
35
|
+
if (!initializer || !Node.isIdentifier(initializer) || !candidatePropNames.has(initializer.getText()))
|
|
36
|
+
continue;
|
|
37
|
+
const nameNode = variableDeclaration.getNameNode();
|
|
38
|
+
if (!Node.isObjectBindingPattern(nameNode))
|
|
39
|
+
continue;
|
|
40
|
+
for (const restName of collectRestBindingNames(nameNode))
|
|
41
|
+
candidatePropNames.add(restName);
|
|
42
|
+
}
|
|
43
|
+
if (candidatePropNames.size === 0)
|
|
44
|
+
return [];
|
|
45
|
+
const inferredSurfaces = new Set();
|
|
46
|
+
const jsxElements = [
|
|
47
|
+
...funcNode.getDescendantsOfKind(SyntaxKind.JsxSelfClosingElement),
|
|
48
|
+
...funcNode.getDescendantsOfKind(SyntaxKind.JsxOpeningElement),
|
|
49
|
+
];
|
|
50
|
+
for (const jsxElement of jsxElements) {
|
|
51
|
+
const tagNameNode = jsxElement.getTagNameNode();
|
|
52
|
+
const domSurface = JSX_PRIMITIVE_DOM_ATTRIBUTE_SURFACES[tagNameNode.getText()] ?? getBoundedImportedJsxDomSurface(tagNameNode);
|
|
53
|
+
if (!domSurface)
|
|
54
|
+
continue;
|
|
55
|
+
const hasForwardedPropsSpread = jsxElement
|
|
56
|
+
.getAttributes()
|
|
57
|
+
.some((attribute) => Node.isJsxSpreadAttribute(attribute) &&
|
|
58
|
+
Node.isIdentifier(attribute.getExpression()) &&
|
|
59
|
+
candidatePropNames.has(attribute.getExpression().getText()));
|
|
60
|
+
if (hasForwardedPropsSpread)
|
|
61
|
+
inferredSurfaces.add(domSurface);
|
|
62
|
+
}
|
|
63
|
+
const propsByName = new Map();
|
|
64
|
+
for (const surface of inferredSurfaces) {
|
|
65
|
+
for (const prop of getDomAttributeSurface(surface))
|
|
66
|
+
propsByName.set(prop.name, prop);
|
|
67
|
+
}
|
|
68
|
+
return [...propsByName.values()].sort((a, b) => a.name.localeCompare(b.name));
|
|
69
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { Node, type ArrowFunction, type FunctionDeclaration, type FunctionExpression } from 'ts-morph';
|
|
2
|
+
export type FunctionLike = FunctionDeclaration | ArrowFunction | FunctionExpression;
|
|
3
|
+
export declare function resolveFunctionNode(decl: Node): FunctionLike | undefined;
|
|
4
|
+
export declare function resolveBestFunctionNode(declarations: Node[]): FunctionLike | undefined;
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { Node, } from 'ts-morph';
|
|
2
|
+
import { getNodeDefinitions } from '../../shared/helpers/tsx-shared.js';
|
|
3
|
+
export function resolveFunctionNode(decl) {
|
|
4
|
+
if (Node.isFunctionDeclaration(decl))
|
|
5
|
+
return decl;
|
|
6
|
+
if (Node.isArrowFunction(decl))
|
|
7
|
+
return decl;
|
|
8
|
+
if (Node.isFunctionExpression(decl))
|
|
9
|
+
return decl;
|
|
10
|
+
if (Node.isVariableDeclaration(decl)) {
|
|
11
|
+
const init = decl.getInitializer();
|
|
12
|
+
if (init && Node.isArrowFunction(init))
|
|
13
|
+
return init;
|
|
14
|
+
if (init && Node.isFunctionExpression(init))
|
|
15
|
+
return init;
|
|
16
|
+
if (init && Node.isCallExpression(init))
|
|
17
|
+
return resolveFunctionFromCallExpression(init, new Set());
|
|
18
|
+
}
|
|
19
|
+
return undefined;
|
|
20
|
+
}
|
|
21
|
+
export function resolveBestFunctionNode(declarations) {
|
|
22
|
+
const candidates = declarations
|
|
23
|
+
.map((decl) => resolveFunctionNode(decl))
|
|
24
|
+
.filter((candidate) => candidate !== undefined);
|
|
25
|
+
const implementation = candidates.find((candidate) => !Node.isFunctionDeclaration(candidate) || candidate.getBody() !== undefined);
|
|
26
|
+
return implementation ?? candidates[0];
|
|
27
|
+
}
|
|
28
|
+
function resolveForwardRefFunction(callExpr) {
|
|
29
|
+
if (!Node.isCallExpression(callExpr))
|
|
30
|
+
return undefined;
|
|
31
|
+
const expressionText = callExpr.getExpression().getText();
|
|
32
|
+
if (!/(^|\.)forwardRef$/.test(expressionText))
|
|
33
|
+
return undefined;
|
|
34
|
+
const firstArg = callExpr.getArguments()[0];
|
|
35
|
+
if (!firstArg)
|
|
36
|
+
return undefined;
|
|
37
|
+
if (Node.isArrowFunction(firstArg))
|
|
38
|
+
return firstArg;
|
|
39
|
+
if (Node.isFunctionExpression(firstArg))
|
|
40
|
+
return firstArg;
|
|
41
|
+
if (Node.isIdentifier(firstArg)) {
|
|
42
|
+
const declarations = getNodeDefinitions(firstArg).flatMap((definition) => {
|
|
43
|
+
const declarationNode = definition.getDeclarationNode();
|
|
44
|
+
return declarationNode ? [declarationNode] : [];
|
|
45
|
+
});
|
|
46
|
+
for (const declaration of declarations) {
|
|
47
|
+
const resolved = resolveFunctionNode(declaration);
|
|
48
|
+
if (resolved)
|
|
49
|
+
return resolved;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
54
|
+
function resolveFunctionFromCallExpression(callExpr, seen) {
|
|
55
|
+
return resolveForwardRefFunction(callExpr) ?? resolveReturnedFunctionFromFactoryCall(callExpr, seen);
|
|
56
|
+
}
|
|
57
|
+
function resolveReturnedFunctionFromFactoryCall(callExpr, seen) {
|
|
58
|
+
const expression = callExpr.getExpression();
|
|
59
|
+
if (!Node.isIdentifier(expression))
|
|
60
|
+
return undefined;
|
|
61
|
+
for (const definition of getNodeDefinitions(expression)) {
|
|
62
|
+
const declaration = definition.getDeclarationNode();
|
|
63
|
+
if (!declaration)
|
|
64
|
+
continue;
|
|
65
|
+
const resolved = resolveReturnedFunctionFromDeclaration(declaration, seen);
|
|
66
|
+
if (resolved)
|
|
67
|
+
return resolved;
|
|
68
|
+
}
|
|
69
|
+
return undefined;
|
|
70
|
+
}
|
|
71
|
+
function resolveReturnedFunctionFromDeclaration(node, seen) {
|
|
72
|
+
if (seen.has(node))
|
|
73
|
+
return undefined;
|
|
74
|
+
seen.add(node);
|
|
75
|
+
if (Node.isVariableDeclaration(node)) {
|
|
76
|
+
const initializer = node.getInitializer();
|
|
77
|
+
if (!initializer)
|
|
78
|
+
return undefined;
|
|
79
|
+
if (Node.isArrowFunction(initializer) || Node.isFunctionExpression(initializer)) {
|
|
80
|
+
return resolveReturnedFunctionFromCallable(initializer, seen);
|
|
81
|
+
}
|
|
82
|
+
if (Node.isCallExpression(initializer)) {
|
|
83
|
+
return resolveFunctionFromCallExpression(initializer, seen);
|
|
84
|
+
}
|
|
85
|
+
return undefined;
|
|
86
|
+
}
|
|
87
|
+
if (Node.isFunctionDeclaration(node) || Node.isFunctionExpression(node) || Node.isArrowFunction(node)) {
|
|
88
|
+
return resolveReturnedFunctionFromCallable(node, seen);
|
|
89
|
+
}
|
|
90
|
+
return undefined;
|
|
91
|
+
}
|
|
92
|
+
function resolveReturnedFunctionFromCallable(fn, seen) {
|
|
93
|
+
const body = fn.getBody();
|
|
94
|
+
if (!body)
|
|
95
|
+
return undefined;
|
|
96
|
+
if (!Node.isBlock(body)) {
|
|
97
|
+
return resolveReturnedFunctionFromExpression(body, seen);
|
|
98
|
+
}
|
|
99
|
+
for (const statement of body.getStatements()) {
|
|
100
|
+
if (!Node.isReturnStatement(statement))
|
|
101
|
+
continue;
|
|
102
|
+
const expression = statement.getExpression();
|
|
103
|
+
if (!expression)
|
|
104
|
+
continue;
|
|
105
|
+
const resolved = resolveReturnedFunctionFromExpression(expression, seen);
|
|
106
|
+
if (resolved)
|
|
107
|
+
return resolved;
|
|
108
|
+
}
|
|
109
|
+
return undefined;
|
|
110
|
+
}
|
|
111
|
+
function resolveReturnedFunctionFromExpression(node, seen) {
|
|
112
|
+
if (Node.isArrowFunction(node) || Node.isFunctionExpression(node))
|
|
113
|
+
return node;
|
|
114
|
+
if (Node.isParenthesizedExpression(node)) {
|
|
115
|
+
return resolveReturnedFunctionFromExpression(node.getExpression(), seen);
|
|
116
|
+
}
|
|
117
|
+
if (Node.isCallExpression(node)) {
|
|
118
|
+
return resolveFunctionFromCallExpression(node, seen);
|
|
119
|
+
}
|
|
120
|
+
if (Node.isIdentifier(node)) {
|
|
121
|
+
for (const definition of getNodeDefinitions(node)) {
|
|
122
|
+
const declaration = definition.getDeclarationNode();
|
|
123
|
+
if (!declaration)
|
|
124
|
+
continue;
|
|
125
|
+
const resolved = resolveReturnedFunctionFromDeclaration(declaration, seen);
|
|
126
|
+
if (resolved)
|
|
127
|
+
return resolved;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return undefined;
|
|
131
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { RawComponentDefinition } from '../../../types/component.js';
|
|
2
|
+
import type { PropForwardingEdge } from './collect-prop-dataflow.js';
|
|
3
|
+
type ComponentWithIdentity = RawComponentDefinition & {
|
|
4
|
+
_componentIdentity?: string;
|
|
5
|
+
_propForwardingEdges?: PropForwardingEdge[];
|
|
6
|
+
};
|
|
7
|
+
export declare function resolveReactPropForwarding(components: ComponentWithIdentity[]): void;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export function resolveReactPropForwarding(components) {
|
|
2
|
+
const componentsByIdentity = new Map(components.filter((c) => c._componentIdentity).map((c) => [c._componentIdentity, c]));
|
|
3
|
+
let changed = true;
|
|
4
|
+
while (changed) {
|
|
5
|
+
changed = false;
|
|
6
|
+
for (const component of components) {
|
|
7
|
+
for (const edge of component._propForwardingEdges ?? []) {
|
|
8
|
+
const target = componentsByIdentity.get(edge.targetComponentIdentity);
|
|
9
|
+
const targetProp = target?.props.find((prop) => prop.name === edge.targetProp);
|
|
10
|
+
const sourceProp = component.props.find((prop) => prop.name === edge.sourceProp);
|
|
11
|
+
if (targetProp?.domAttribute && sourceProp && !sourceProp.domAttribute) {
|
|
12
|
+
sourceProp.domAttribute = true;
|
|
13
|
+
changed = true;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
for (const component of components) {
|
|
19
|
+
delete component._componentIdentity;
|
|
20
|
+
delete component._propForwardingEdges;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Node, type ParameterDeclaration } from 'ts-morph';
|
|
2
|
+
export declare function normalizePropsTypeNode(typeNode: Node): {
|
|
3
|
+
typeNode: Node;
|
|
4
|
+
hasWrappedChildren: boolean;
|
|
5
|
+
suppressProps: boolean;
|
|
6
|
+
};
|
|
7
|
+
export declare function resolveForwardRefGenericPropsTypeNode(param: ParameterDeclaration): Node | undefined;
|
|
8
|
+
export declare function resolveFCGenericPropsTypeNode(param: ParameterDeclaration): Node | undefined;
|
|
9
|
+
export declare function resolvePropsType(param: ParameterDeclaration): {
|
|
10
|
+
type: import('ts-morph').Type;
|
|
11
|
+
typeNode: Node;
|
|
12
|
+
hasWrappedChildren: boolean;
|
|
13
|
+
suppressProps: boolean;
|
|
14
|
+
};
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { Node } from 'ts-morph';
|
|
2
|
+
import { getTypeReferenceName } from '../../shared/helpers/tsx-shared.js';
|
|
3
|
+
import { isPureExpandableDomAttributeWrapperType } from './detect-dom-type-patterns.js';
|
|
4
|
+
const PROP_WRAPPER_TYPE_NAMES = new Set(['ExpandProps']);
|
|
5
|
+
const CHILD_WRAPPER_TYPE_NAMES = new Set(['PropsWithChildren']);
|
|
6
|
+
const FC_TYPE_NAMES = new Set(['FC', 'FunctionComponent', 'VFC', 'VoidFunctionComponent']);
|
|
7
|
+
export function normalizePropsTypeNode(typeNode) {
|
|
8
|
+
if (!Node.isTypeReference(typeNode)) {
|
|
9
|
+
return { typeNode, hasWrappedChildren: false, suppressProps: false };
|
|
10
|
+
}
|
|
11
|
+
const typeName = getTypeReferenceName(typeNode);
|
|
12
|
+
if (!typeName) {
|
|
13
|
+
return { typeNode, hasWrappedChildren: false, suppressProps: false };
|
|
14
|
+
}
|
|
15
|
+
if (PROP_WRAPPER_TYPE_NAMES.has(typeName)) {
|
|
16
|
+
const firstTypeArg = typeNode.getTypeArguments()[0];
|
|
17
|
+
if (!firstTypeArg)
|
|
18
|
+
return { typeNode, hasWrappedChildren: false, suppressProps: false };
|
|
19
|
+
return normalizePropsTypeNode(firstTypeArg);
|
|
20
|
+
}
|
|
21
|
+
if (CHILD_WRAPPER_TYPE_NAMES.has(typeName)) {
|
|
22
|
+
const firstTypeArg = typeNode.getTypeArguments()[0];
|
|
23
|
+
if (!firstTypeArg)
|
|
24
|
+
return { typeNode, hasWrappedChildren: true, suppressProps: false };
|
|
25
|
+
if (isPureExpandableDomAttributeWrapperType(firstTypeArg)) {
|
|
26
|
+
return {
|
|
27
|
+
typeNode: firstTypeArg,
|
|
28
|
+
hasWrappedChildren: true,
|
|
29
|
+
suppressProps: true,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
const normalized = normalizePropsTypeNode(firstTypeArg);
|
|
33
|
+
return { ...normalized, hasWrappedChildren: true };
|
|
34
|
+
}
|
|
35
|
+
return { typeNode, hasWrappedChildren: false, suppressProps: false };
|
|
36
|
+
}
|
|
37
|
+
export function resolveForwardRefGenericPropsTypeNode(param) {
|
|
38
|
+
const parent = param.getParent();
|
|
39
|
+
if (!Node.isArrowFunction(parent) && !Node.isFunctionExpression(parent))
|
|
40
|
+
return undefined;
|
|
41
|
+
const callExpression = parent.getParent();
|
|
42
|
+
if (!Node.isCallExpression(callExpression))
|
|
43
|
+
return undefined;
|
|
44
|
+
const expressionText = callExpression.getExpression().getText();
|
|
45
|
+
if (!/(^|\.)forwardRef$/.test(expressionText))
|
|
46
|
+
return undefined;
|
|
47
|
+
const [, propsTypeNode] = callExpression.getTypeArguments();
|
|
48
|
+
return propsTypeNode;
|
|
49
|
+
}
|
|
50
|
+
export function resolveFCGenericPropsTypeNode(param) {
|
|
51
|
+
const funcNode = param.getParent();
|
|
52
|
+
if (!Node.isArrowFunction(funcNode) && !Node.isFunctionExpression(funcNode))
|
|
53
|
+
return undefined;
|
|
54
|
+
const varDecl = funcNode.getParent();
|
|
55
|
+
if (!Node.isVariableDeclaration(varDecl))
|
|
56
|
+
return undefined;
|
|
57
|
+
const typeNode = varDecl.getTypeNode();
|
|
58
|
+
if (!typeNode || !Node.isTypeReference(typeNode))
|
|
59
|
+
return undefined;
|
|
60
|
+
const typeName = typeNode.getTypeName().getText().split('.').pop();
|
|
61
|
+
if (!typeName || !FC_TYPE_NAMES.has(typeName))
|
|
62
|
+
return undefined;
|
|
63
|
+
const typeArgs = typeNode.getTypeArguments();
|
|
64
|
+
return typeArgs[0];
|
|
65
|
+
}
|
|
66
|
+
export function resolvePropsType(param) {
|
|
67
|
+
const typeNode = param.getTypeNode();
|
|
68
|
+
const fcGenericPropsTypeNode = resolveFCGenericPropsTypeNode(param);
|
|
69
|
+
const fallbackTypeNode = resolveForwardRefGenericPropsTypeNode(param) ?? fcGenericPropsTypeNode;
|
|
70
|
+
const effectiveTypeNode = typeNode ?? fallbackTypeNode;
|
|
71
|
+
if (!effectiveTypeNode) {
|
|
72
|
+
return {
|
|
73
|
+
type: param.getType(),
|
|
74
|
+
typeNode: param.getTypeNode() ?? param,
|
|
75
|
+
hasWrappedChildren: false,
|
|
76
|
+
suppressProps: false,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
const normalized = normalizePropsTypeNode(effectiveTypeNode);
|
|
80
|
+
return {
|
|
81
|
+
type: normalized.typeNode.getType(),
|
|
82
|
+
typeNode: normalized.typeNode,
|
|
83
|
+
hasWrappedChildren: normalized.hasWrappedChildren || fcGenericPropsTypeNode !== undefined,
|
|
84
|
+
suppressProps: normalized.suppressProps,
|
|
85
|
+
};
|
|
86
|
+
}
|
package/dist/src/extract/framework-adapters/react/helpers/synthesize-react-structural-slots.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { RawComponentDefinition } from '../../../types/component.js';
|
|
2
|
+
import type { FunctionLike } from './resolve-component-function.js';
|
|
3
|
+
import type { Project } from 'ts-morph';
|
|
4
|
+
type ComponentWithFuncNode = RawComponentDefinition & {
|
|
5
|
+
_funcNode?: FunctionLike;
|
|
6
|
+
};
|
|
7
|
+
export declare function synthesizeReactStructuralSlots(components: ComponentWithFuncNode[], project: Project | undefined): void;
|
|
8
|
+
export {};
|
package/dist/src/extract/framework-adapters/react/helpers/synthesize-react-structural-slots.js
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { collectTypePredicateComponentReferences, collectRuntimeTypeCheckComponentReferences, collectRenderedComponentReferences, collectArrayMapRenderComponentReferences, } from '../../../helpers/evidence/collect-jsx-component-references.js';
|
|
2
|
+
import { buildComponentLookupMaps } from '../../shared/helpers/build-component-lookup-maps.js';
|
|
3
|
+
export function synthesizeReactStructuralSlots(components, project) {
|
|
4
|
+
const { propsToComponent, componentNames } = buildComponentLookupMaps(components);
|
|
5
|
+
const structuralByFile = new Map();
|
|
6
|
+
const structuralNamesForFile = (filePath) => {
|
|
7
|
+
const cached = structuralByFile.get(filePath);
|
|
8
|
+
if (cached)
|
|
9
|
+
return cached;
|
|
10
|
+
const sourceFile = project?.getSourceFile(filePath);
|
|
11
|
+
if (!sourceFile)
|
|
12
|
+
return [];
|
|
13
|
+
const ctx = { propsToComponent, componentNames };
|
|
14
|
+
const found = new Set([
|
|
15
|
+
...collectTypePredicateComponentReferences(sourceFile, ctx),
|
|
16
|
+
...collectRuntimeTypeCheckComponentReferences(sourceFile, componentNames),
|
|
17
|
+
]);
|
|
18
|
+
const names = [...found].sort();
|
|
19
|
+
structuralByFile.set(filePath, names);
|
|
20
|
+
return names;
|
|
21
|
+
};
|
|
22
|
+
for (const c of components) {
|
|
23
|
+
const fromFile = structuralNamesForFile(c.source);
|
|
24
|
+
const fromRender = c._funcNode ? collectRenderedComponentReferences(c._funcNode, componentNames, c.name) : [];
|
|
25
|
+
const propTypesByName = new Map(c.props.map((p) => [p.name, p.type]));
|
|
26
|
+
const fromArrayMap = c._funcNode
|
|
27
|
+
? collectArrayMapRenderComponentReferences(c._funcNode, componentNames, c.name, propTypesByName)
|
|
28
|
+
: [];
|
|
29
|
+
const structural = new Set([...fromFile, ...fromRender, ...fromArrayMap]);
|
|
30
|
+
if (structural.size === 0)
|
|
31
|
+
continue;
|
|
32
|
+
const synthesisedSlot = fromArrayMap.length > 0 && c.slots.length === 0 ? { name: 'children', isDefault: true } : undefined;
|
|
33
|
+
if (synthesisedSlot)
|
|
34
|
+
c.slots.push(synthesisedSlot);
|
|
35
|
+
for (const slot of c.slots) {
|
|
36
|
+
if (slot.allowedComponents && slot.allowedComponents.length > 0)
|
|
37
|
+
continue;
|
|
38
|
+
slot.structuralAllowedComponents = slot === synthesisedSlot ? [...fromArrayMap].sort() : [...structural].sort();
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
for (const c of components) {
|
|
42
|
+
delete c._funcNode;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export function buildComponentLookupMaps(components) {
|
|
2
|
+
const propsToComponent = new Map();
|
|
3
|
+
const componentNames = new Set();
|
|
4
|
+
for (const c of components) {
|
|
5
|
+
componentNames.add(c.name);
|
|
6
|
+
if (c._propsTypeName)
|
|
7
|
+
propsToComponent.set(c._propsTypeName, c.name);
|
|
8
|
+
}
|
|
9
|
+
return { propsToComponent, componentNames };
|
|
10
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export function collectJsDocSlotComments(classDecl) {
|
|
2
|
+
const comments = [];
|
|
3
|
+
for (const jsDoc of classDecl.getJsDocs()) {
|
|
4
|
+
for (const tag of jsDoc.getTags()) {
|
|
5
|
+
if (tag.getTagName() !== 'slot')
|
|
6
|
+
continue;
|
|
7
|
+
const comment = tag.getCommentText()?.trim();
|
|
8
|
+
if (comment)
|
|
9
|
+
comments.push(comment);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
return comments;
|
|
13
|
+
}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import type { Project, SourceFile } from 'ts-morph';
|
|
2
1
|
export type FileExtractionOutcome<T, M = undefined> = {
|
|
3
2
|
item: T | null;
|
|
4
3
|
warnings?: string[];
|
|
5
4
|
metadata?: M;
|
|
6
5
|
};
|
|
7
|
-
type FileExtractionProgress = {
|
|
6
|
+
export type FileExtractionProgress = {
|
|
8
7
|
filesProcessed: number;
|
|
9
8
|
componentsFound: number;
|
|
10
9
|
};
|
|
@@ -12,14 +11,3 @@ export declare function runFileExtractionWorkers<T, M = undefined>(filePaths: st
|
|
|
12
11
|
items: T[];
|
|
13
12
|
warnings: string[];
|
|
14
13
|
}>;
|
|
15
|
-
export declare function createSortedExtractionResult<T extends {
|
|
16
|
-
name: string;
|
|
17
|
-
}>(components: T[], warnings: string[]): {
|
|
18
|
-
components: T[];
|
|
19
|
-
warnings: string[];
|
|
20
|
-
};
|
|
21
|
-
export declare function extractProjectSourceFiles<T>(project: Project, extractFile: (sourceFile: SourceFile, warnings: string[]) => T[]): {
|
|
22
|
-
items: T[];
|
|
23
|
-
warnings: string[];
|
|
24
|
-
};
|
|
25
|
-
export {};
|
|
@@ -27,22 +27,3 @@ export async function runFileExtractionWorkers(filePaths, concurrency, extractFi
|
|
|
27
27
|
await Promise.all(Array.from({ length: Math.min(concurrency, filePaths.length) }, worker));
|
|
28
28
|
return { items, warnings };
|
|
29
29
|
}
|
|
30
|
-
export function createSortedExtractionResult(components, warnings) {
|
|
31
|
-
return {
|
|
32
|
-
components: components.sort((a, b) => a.name.localeCompare(b.name)),
|
|
33
|
-
warnings,
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
export function extractProjectSourceFiles(project, extractFile) {
|
|
37
|
-
const warnings = [];
|
|
38
|
-
const items = [];
|
|
39
|
-
for (const sourceFile of project.getSourceFiles()) {
|
|
40
|
-
try {
|
|
41
|
-
items.push(...extractFile(sourceFile, warnings));
|
|
42
|
-
}
|
|
43
|
-
catch (error) {
|
|
44
|
-
warnings.push(`Failed to extract from ${sourceFile.getFilePath()}: ${error instanceof Error ? error.message : String(error)}`);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
return { items, warnings };
|
|
48
|
-
}
|
package/dist/src/extract/framework-adapters/shared/helpers/file-processing/project-source-files.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export function extractProjectSourceFiles(project, extractFile) {
|
|
2
|
+
const warnings = [];
|
|
3
|
+
const items = [];
|
|
4
|
+
for (const sourceFile of project.getSourceFiles()) {
|
|
5
|
+
try {
|
|
6
|
+
items.push(...extractFile(sourceFile, warnings));
|
|
7
|
+
}
|
|
8
|
+
catch (error) {
|
|
9
|
+
warnings.push(`Failed to extract from ${sourceFile.getFilePath()}: ${error instanceof Error ? error.message : String(error)}`);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
return { items, warnings };
|
|
13
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
2
|
+
import { dirname, join } from 'node:path';
|
|
3
|
+
const packageRootByFilePathCache = new Map();
|
|
4
|
+
const workspacePackageManifestCache = new Map();
|
|
5
|
+
function findNearestPackageRootDir(filePath) {
|
|
6
|
+
if (packageRootByFilePathCache.has(filePath))
|
|
7
|
+
return packageRootByFilePathCache.get(filePath) ?? undefined;
|
|
8
|
+
let currentDir = dirname(filePath);
|
|
9
|
+
while (true) {
|
|
10
|
+
if (existsSync(join(currentDir, 'package.json'))) {
|
|
11
|
+
packageRootByFilePathCache.set(filePath, currentDir);
|
|
12
|
+
return currentDir;
|
|
13
|
+
}
|
|
14
|
+
const parentDir = dirname(currentDir);
|
|
15
|
+
if (parentDir === currentDir) {
|
|
16
|
+
packageRootByFilePathCache.set(filePath, null);
|
|
17
|
+
return undefined;
|
|
18
|
+
}
|
|
19
|
+
currentDir = parentDir;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
function getWorkspacePackageManifestForSourceFile(sourceFile) {
|
|
23
|
+
const packageRootDir = findNearestPackageRootDir(sourceFile.getFilePath());
|
|
24
|
+
if (!packageRootDir)
|
|
25
|
+
return undefined;
|
|
26
|
+
if (workspacePackageManifestCache.has(packageRootDir))
|
|
27
|
+
return workspacePackageManifestCache.get(packageRootDir) ?? undefined;
|
|
28
|
+
const packageJsonPath = join(packageRootDir, 'package.json');
|
|
29
|
+
try {
|
|
30
|
+
const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf8'));
|
|
31
|
+
const manifest = typeof packageJson.name === 'string' ? { name: packageJson.name, rootDir: packageRootDir } : null;
|
|
32
|
+
workspacePackageManifestCache.set(packageRootDir, manifest);
|
|
33
|
+
return manifest ?? undefined;
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
workspacePackageManifestCache.set(packageRootDir, null);
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
export function findWorkspacePackageEntrySourceFile(originSourceFile, moduleSpecifier) {
|
|
41
|
+
const project = originSourceFile.getProject();
|
|
42
|
+
const candidateSourceFiles = project.getSourceFiles().filter((sourceFile) => {
|
|
43
|
+
const manifest = getWorkspacePackageManifestForSourceFile(sourceFile);
|
|
44
|
+
return manifest?.name === moduleSpecifier;
|
|
45
|
+
});
|
|
46
|
+
if (candidateSourceFiles.length === 0)
|
|
47
|
+
return undefined;
|
|
48
|
+
const packageRootDir = getWorkspacePackageManifestForSourceFile(candidateSourceFiles[0])?.rootDir;
|
|
49
|
+
if (!packageRootDir)
|
|
50
|
+
return undefined;
|
|
51
|
+
for (const entryPath of [
|
|
52
|
+
join(packageRootDir, 'src/index.ts'),
|
|
53
|
+
join(packageRootDir, 'src/index.tsx'),
|
|
54
|
+
join(packageRootDir, 'index.ts'),
|
|
55
|
+
join(packageRootDir, 'index.tsx'),
|
|
56
|
+
]) {
|
|
57
|
+
const entrySourceFile = project.getSourceFile(entryPath);
|
|
58
|
+
if (entrySourceFile)
|
|
59
|
+
return entrySourceFile;
|
|
60
|
+
}
|
|
61
|
+
return candidateSourceFiles.find((sourceFile) => sourceFile.getDirectoryPath() === join(packageRootDir, 'src'));
|
|
62
|
+
}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { Node } from 'ts-morph';
|
|
2
|
-
import type { RawPropDefinition } from '
|
|
2
|
+
import type { RawPropDefinition } from '../../../types/component.js';
|
|
3
3
|
export declare function getSourceLineMetadata(declaration: Node | undefined): Pick<RawPropDefinition, 'sourceStartLine' | 'sourceEndLine'>;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare function matchTsConfigPathPattern(pattern: string, specifier: string): {
|
|
2
|
+
matched: boolean;
|
|
3
|
+
wildcard?: string;
|
|
4
|
+
};
|
|
5
|
+
export declare function substituteTsConfigPathTarget(targetPattern: string, wildcard: string | undefined): string;
|
|
6
|
+
export declare function resolveImportSourcePath(basePath: string): string | undefined;
|
|
7
|
+
export declare function resolveRepoLocalAliasImportPath(importingFilePath: string, moduleSpecifier: string): string | undefined;
|