@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,220 @@
|
|
|
1
|
+
import { Node, SyntaxKind } from 'ts-morph';
|
|
2
|
+
import { getJsxTagNameNode, getNodeDefinitions, getValueTargetDeclarations, isIntrinsicJsxElement, } from '../../shared/helpers/tsx-shared.js';
|
|
3
|
+
import { resolveFunctionNode } from './resolve-component-function.js';
|
|
4
|
+
function getDeclarationIdentity(node) {
|
|
5
|
+
if (Node.isIdentifier(node)) {
|
|
6
|
+
const parent = node.getParent();
|
|
7
|
+
if ((Node.isVariableDeclaration(parent) || Node.isBindingElement(parent) || Node.isParameterDeclaration(parent)) &&
|
|
8
|
+
parent.getNameNode() === node) {
|
|
9
|
+
return parent;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
return getNodeDefinitions(node)[0]?.getDeclarationNode() ?? node;
|
|
13
|
+
}
|
|
14
|
+
export function getComponentIdentity(func) {
|
|
15
|
+
return `${func.getSourceFile().getFilePath()}:${func.getStart()}`;
|
|
16
|
+
}
|
|
17
|
+
function resolveForwardedComponentIdentity(tagNameNode) {
|
|
18
|
+
if (!Node.isIdentifier(tagNameNode))
|
|
19
|
+
return undefined;
|
|
20
|
+
for (const declaration of getValueTargetDeclarations(tagNameNode)) {
|
|
21
|
+
const func = resolveFunctionNode(declaration);
|
|
22
|
+
if (func)
|
|
23
|
+
return getComponentIdentity(func);
|
|
24
|
+
}
|
|
25
|
+
return undefined;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Declarations that are rebound somewhere in the body, so their initializer no
|
|
29
|
+
* longer describes the value that reaches JSX.
|
|
30
|
+
*/
|
|
31
|
+
function collectReboundDeclarations(body) {
|
|
32
|
+
const rebound = new Set();
|
|
33
|
+
const recordTarget = (target) => {
|
|
34
|
+
if (Node.isIdentifier(target)) {
|
|
35
|
+
rebound.add(getDeclarationIdentity(target));
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
if ((Node.isPropertyAccessExpression(target) || Node.isElementAccessExpression(target)) &&
|
|
39
|
+
Node.isIdentifier(target.getExpression())) {
|
|
40
|
+
rebound.add(getDeclarationIdentity(target.getExpression()));
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
for (const assignment of body?.getDescendantsOfKind(SyntaxKind.BinaryExpression) ?? []) {
|
|
44
|
+
// Covers `=` and every compound form (`+=`, `??=`, `>>>=`, ...).
|
|
45
|
+
const operator = assignment.getOperatorToken().getKind();
|
|
46
|
+
if (operator < SyntaxKind.FirstAssignment || operator > SyntaxKind.LastAssignment)
|
|
47
|
+
continue;
|
|
48
|
+
recordTarget(assignment.getLeft());
|
|
49
|
+
}
|
|
50
|
+
// Only `++`/`--` rebind the operand. Reading a prop through `!`, `-`, `+`, or
|
|
51
|
+
// `~` leaves the alias intact, so those operators must not invalidate it.
|
|
52
|
+
for (const update of body?.getDescendantsOfKind(SyntaxKind.PrefixUnaryExpression) ?? []) {
|
|
53
|
+
const operator = update.getOperatorToken();
|
|
54
|
+
if (operator !== SyntaxKind.PlusPlusToken && operator !== SyntaxKind.MinusMinusToken)
|
|
55
|
+
continue;
|
|
56
|
+
recordTarget(update.getOperand());
|
|
57
|
+
}
|
|
58
|
+
for (const update of body?.getDescendantsOfKind(SyntaxKind.PostfixUnaryExpression) ?? []) {
|
|
59
|
+
recordTarget(update.getOperand());
|
|
60
|
+
}
|
|
61
|
+
return rebound;
|
|
62
|
+
}
|
|
63
|
+
/** Trace only statically resolvable, component-local prop dataflow into JSX. */
|
|
64
|
+
export function collectPropDataflow(func, param, availablePropNames) {
|
|
65
|
+
const valueAliases = new Map();
|
|
66
|
+
const objectAliases = new Map();
|
|
67
|
+
const fullPropsShape = new Map([...availablePropNames].map((name) => [name, name]));
|
|
68
|
+
const belongsToComponentFunction = (node) => node.getFirstAncestor((ancestor) => Node.isFunctionDeclaration(ancestor) || Node.isArrowFunction(ancestor) || Node.isFunctionExpression(ancestor)) === func;
|
|
69
|
+
const resolveValue = (expression) => {
|
|
70
|
+
if (!expression)
|
|
71
|
+
return undefined;
|
|
72
|
+
if (Node.isParenthesizedExpression(expression))
|
|
73
|
+
return resolveValue(expression.getExpression());
|
|
74
|
+
if (Node.isIdentifier(expression))
|
|
75
|
+
return valueAliases.get(getDeclarationIdentity(expression));
|
|
76
|
+
if (Node.isPropertyAccessExpression(expression)) {
|
|
77
|
+
const object = expression.getExpression();
|
|
78
|
+
return Node.isIdentifier(object)
|
|
79
|
+
? objectAliases.get(getDeclarationIdentity(object))?.get(expression.getName())
|
|
80
|
+
: undefined;
|
|
81
|
+
}
|
|
82
|
+
if (Node.isElementAccessExpression(expression)) {
|
|
83
|
+
const argument = expression.getArgumentExpression();
|
|
84
|
+
if (!argument || (!Node.isStringLiteral(argument) && !Node.isNoSubstitutionTemplateLiteral(argument))) {
|
|
85
|
+
return undefined;
|
|
86
|
+
}
|
|
87
|
+
const object = expression.getExpression();
|
|
88
|
+
return Node.isIdentifier(object)
|
|
89
|
+
? objectAliases.get(getDeclarationIdentity(object))?.get(argument.getLiteralText())
|
|
90
|
+
: undefined;
|
|
91
|
+
}
|
|
92
|
+
return undefined;
|
|
93
|
+
};
|
|
94
|
+
const resolveObject = (expression) => {
|
|
95
|
+
if (!expression)
|
|
96
|
+
return undefined;
|
|
97
|
+
if (Node.isParenthesizedExpression(expression))
|
|
98
|
+
return resolveObject(expression.getExpression());
|
|
99
|
+
if (Node.isIdentifier(expression))
|
|
100
|
+
return objectAliases.get(getDeclarationIdentity(expression));
|
|
101
|
+
if (!Node.isObjectLiteralExpression(expression))
|
|
102
|
+
return undefined;
|
|
103
|
+
const shape = new Map();
|
|
104
|
+
for (const property of expression.getProperties()) {
|
|
105
|
+
if (Node.isSpreadAssignment(property)) {
|
|
106
|
+
const spreadShape = resolveObject(property.getExpression());
|
|
107
|
+
for (const [targetProp, sourceProp] of spreadShape ?? [])
|
|
108
|
+
shape.set(targetProp, sourceProp);
|
|
109
|
+
}
|
|
110
|
+
else if (Node.isShorthandPropertyAssignment(property)) {
|
|
111
|
+
const sourceProp = resolveValue(property.getNameNode());
|
|
112
|
+
if (sourceProp)
|
|
113
|
+
shape.set(property.getName(), sourceProp);
|
|
114
|
+
}
|
|
115
|
+
else if (Node.isPropertyAssignment(property)) {
|
|
116
|
+
const propertyNameNode = property.getNameNode();
|
|
117
|
+
if (!Node.isIdentifier(propertyNameNode) && !Node.isStringLiteral(propertyNameNode))
|
|
118
|
+
continue;
|
|
119
|
+
const sourceProp = resolveValue(property.getInitializer());
|
|
120
|
+
if (sourceProp)
|
|
121
|
+
shape.set(property.getName(), sourceProp);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return shape;
|
|
125
|
+
};
|
|
126
|
+
const addBindings = (pattern, sourceShape) => {
|
|
127
|
+
const omittedProps = new Set(pattern
|
|
128
|
+
.getElements()
|
|
129
|
+
.filter((element) => !element.getDotDotDotToken())
|
|
130
|
+
.map((element) => element.getPropertyNameNode()?.getText() ?? element.getNameNode().getText()));
|
|
131
|
+
for (const element of pattern.getElements()) {
|
|
132
|
+
const localName = element.getNameNode();
|
|
133
|
+
if (!Node.isIdentifier(localName))
|
|
134
|
+
continue;
|
|
135
|
+
if (element.getDotDotDotToken()) {
|
|
136
|
+
objectAliases.set(getDeclarationIdentity(localName), new Map([...sourceShape].filter(([targetProp]) => !omittedProps.has(targetProp))));
|
|
137
|
+
continue;
|
|
138
|
+
}
|
|
139
|
+
const targetProp = element.getPropertyNameNode()?.getText() ?? localName.getText();
|
|
140
|
+
const sourceProp = sourceShape.get(targetProp);
|
|
141
|
+
if (sourceProp)
|
|
142
|
+
valueAliases.set(getDeclarationIdentity(localName), sourceProp);
|
|
143
|
+
}
|
|
144
|
+
};
|
|
145
|
+
const paramNameNode = param.getNameNode();
|
|
146
|
+
if (Node.isIdentifier(paramNameNode))
|
|
147
|
+
objectAliases.set(getDeclarationIdentity(paramNameNode), fullPropsShape);
|
|
148
|
+
else if (Node.isObjectBindingPattern(paramNameNode))
|
|
149
|
+
addBindings(paramNameNode, fullPropsShape);
|
|
150
|
+
const body = func.getBody();
|
|
151
|
+
const reboundDeclarations = collectReboundDeclarations(body);
|
|
152
|
+
for (const declaration of reboundDeclarations) {
|
|
153
|
+
valueAliases.delete(declaration);
|
|
154
|
+
objectAliases.delete(declaration);
|
|
155
|
+
}
|
|
156
|
+
for (const declaration of body?.getDescendantsOfKind(SyntaxKind.VariableDeclaration) ?? []) {
|
|
157
|
+
if (!belongsToComponentFunction(declaration))
|
|
158
|
+
continue;
|
|
159
|
+
const initializer = declaration.getInitializer();
|
|
160
|
+
const declarationName = declaration.getNameNode();
|
|
161
|
+
if (Node.isIdentifier(declarationName)) {
|
|
162
|
+
const aliasDeclaration = getDeclarationIdentity(declarationName);
|
|
163
|
+
if (reboundDeclarations.has(aliasDeclaration))
|
|
164
|
+
continue;
|
|
165
|
+
const sourceProp = resolveValue(initializer);
|
|
166
|
+
if (sourceProp)
|
|
167
|
+
valueAliases.set(aliasDeclaration, sourceProp);
|
|
168
|
+
const sourceShape = resolveObject(initializer);
|
|
169
|
+
if (sourceShape)
|
|
170
|
+
objectAliases.set(aliasDeclaration, new Map(sourceShape));
|
|
171
|
+
}
|
|
172
|
+
else if (Node.isObjectBindingPattern(declarationName)) {
|
|
173
|
+
const sourceShape = resolveObject(initializer);
|
|
174
|
+
if (sourceShape) {
|
|
175
|
+
const hasInvalidatedBinding = declarationName
|
|
176
|
+
.getElements()
|
|
177
|
+
.some((element) => reboundDeclarations.has(getDeclarationIdentity(element.getNameNode())));
|
|
178
|
+
if (!hasInvalidatedBinding)
|
|
179
|
+
addBindings(declarationName, sourceShape);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
const intrinsicDomProps = new Set();
|
|
184
|
+
const componentEdges = [];
|
|
185
|
+
const recordForwarding = (tagNameNode, targetProp, sourceProp) => {
|
|
186
|
+
const tagName = tagNameNode.getText();
|
|
187
|
+
if (isIntrinsicJsxElement(tagName)) {
|
|
188
|
+
if (targetProp === sourceProp)
|
|
189
|
+
intrinsicDomProps.add(sourceProp);
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
const targetComponentIdentity = resolveForwardedComponentIdentity(tagNameNode);
|
|
193
|
+
if (targetComponentIdentity)
|
|
194
|
+
componentEdges.push({ sourceProp, targetComponentIdentity, targetProp });
|
|
195
|
+
};
|
|
196
|
+
for (const attribute of func.getDescendantsOfKind(SyntaxKind.JsxAttribute)) {
|
|
197
|
+
if (!belongsToComponentFunction(attribute))
|
|
198
|
+
continue;
|
|
199
|
+
const tagNameNode = getJsxTagNameNode(attribute);
|
|
200
|
+
if (!tagNameNode)
|
|
201
|
+
continue;
|
|
202
|
+
const initializer = attribute.getInitializer();
|
|
203
|
+
if (!initializer || !Node.isJsxExpression(initializer))
|
|
204
|
+
continue;
|
|
205
|
+
const sourceProp = resolveValue(initializer.getExpression());
|
|
206
|
+
if (sourceProp)
|
|
207
|
+
recordForwarding(tagNameNode, attribute.getNameNode().getText(), sourceProp);
|
|
208
|
+
}
|
|
209
|
+
for (const spread of func.getDescendantsOfKind(SyntaxKind.JsxSpreadAttribute)) {
|
|
210
|
+
if (!belongsToComponentFunction(spread))
|
|
211
|
+
continue;
|
|
212
|
+
const tagNameNode = getJsxTagNameNode(spread);
|
|
213
|
+
if (!tagNameNode)
|
|
214
|
+
continue;
|
|
215
|
+
const shape = resolveObject(spread.getExpression());
|
|
216
|
+
for (const [targetProp, sourceProp] of shape ?? [])
|
|
217
|
+
recordForwarding(tagNameNode, targetProp, sourceProp);
|
|
218
|
+
}
|
|
219
|
+
return { intrinsicDomProps, componentEdges };
|
|
220
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type ParameterDeclaration } from 'ts-morph';
|
|
2
|
+
import type { FunctionLike } from './resolve-component-function.js';
|
|
3
|
+
import { collectRestBindingNames, isComponentSpreadAttribute, inferPrimitiveDomPropsFromImplementation } from './infer-primitive-dom-props.js';
|
|
4
|
+
export { collectRestBindingNames, isComponentSpreadAttribute, inferPrimitiveDomPropsFromImplementation };
|
|
5
|
+
export declare function hasImplementationChildrenHint(funcNode: FunctionLike, param: ParameterDeclaration): boolean;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Node, SyntaxKind } from 'ts-morph';
|
|
2
|
+
import { collectRestBindingNames, isComponentSpreadAttribute, inferPrimitiveDomPropsFromImplementation, } from './infer-primitive-dom-props.js';
|
|
3
|
+
export { collectRestBindingNames, isComponentSpreadAttribute, inferPrimitiveDomPropsFromImplementation };
|
|
4
|
+
export function hasImplementationChildrenHint(funcNode, param) {
|
|
5
|
+
const nameNode = param.getNameNode();
|
|
6
|
+
const body = funcNode.getBody();
|
|
7
|
+
if (!body)
|
|
8
|
+
return false;
|
|
9
|
+
if (Node.isObjectBindingPattern(nameNode)) {
|
|
10
|
+
for (const element of nameNode.getElements()) {
|
|
11
|
+
if (element.getNameNode().getText() === 'children')
|
|
12
|
+
return true;
|
|
13
|
+
}
|
|
14
|
+
const restBindingNames = collectRestBindingNames(nameNode);
|
|
15
|
+
if (restBindingNames.size === 0)
|
|
16
|
+
return false;
|
|
17
|
+
return body
|
|
18
|
+
.getDescendantsOfKind(SyntaxKind.JsxSpreadAttribute)
|
|
19
|
+
.some((attr) => isComponentSpreadAttribute(attr, restBindingNames));
|
|
20
|
+
}
|
|
21
|
+
if (!Node.isIdentifier(nameNode))
|
|
22
|
+
return false;
|
|
23
|
+
const paramName = nameNode.getText();
|
|
24
|
+
if (body
|
|
25
|
+
.getDescendantsOfKind(SyntaxKind.PropertyAccessExpression)
|
|
26
|
+
.some((expr) => expr.getExpression().getText() === paramName && expr.getName() === 'children')) {
|
|
27
|
+
return true;
|
|
28
|
+
}
|
|
29
|
+
return body
|
|
30
|
+
.getDescendantsOfKind(SyntaxKind.JsxSpreadAttribute)
|
|
31
|
+
.some((attr) => isComponentSpreadAttribute(attr, new Set([paramName])));
|
|
32
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { Node } from 'ts-morph';
|
|
2
|
+
import { getTypeReferenceName, getNodeDefinitions } from '../../shared/helpers/tsx-shared.js';
|
|
3
|
+
import { getTypeReferenceTargetNode, getTypeReferenceArguments } from '../../shared/helpers/tsx-node-utils.js';
|
|
4
|
+
import { isExpandableDomAttributeWrapperName } from './dom-attribute-surfaces.js';
|
|
5
|
+
function isPureExpandableDomAttributeWrapperTypeNode(typeNode, seen = new Set()) {
|
|
6
|
+
if (seen.has(typeNode))
|
|
7
|
+
return false;
|
|
8
|
+
seen.add(typeNode);
|
|
9
|
+
if (Node.isParenthesizedTypeNode(typeNode) || Node.isTypeOperatorTypeNode(typeNode)) {
|
|
10
|
+
return isPureExpandableDomAttributeWrapperTypeNode(typeNode.getTypeNode(), seen);
|
|
11
|
+
}
|
|
12
|
+
if (Node.isIntersectionTypeNode(typeNode) || Node.isUnionTypeNode(typeNode)) {
|
|
13
|
+
const childTypes = typeNode.getTypeNodes();
|
|
14
|
+
return (childTypes.length > 0 && childTypes.every((child) => isPureExpandableDomAttributeWrapperTypeNode(child, seen)));
|
|
15
|
+
}
|
|
16
|
+
const typeReferenceTarget = getTypeReferenceTargetNode(typeNode);
|
|
17
|
+
if (typeReferenceTarget) {
|
|
18
|
+
const typeName = getTypeReferenceName(typeNode);
|
|
19
|
+
if (!typeName)
|
|
20
|
+
return false;
|
|
21
|
+
const typeArguments = getTypeReferenceArguments(typeNode);
|
|
22
|
+
if (isExpandableDomAttributeWrapperName(typeName))
|
|
23
|
+
return true;
|
|
24
|
+
if (typeName === 'Omit' ||
|
|
25
|
+
typeName === 'Partial' ||
|
|
26
|
+
typeName === 'Readonly' ||
|
|
27
|
+
typeName === 'Required' ||
|
|
28
|
+
typeName === 'NonNullable') {
|
|
29
|
+
const wrappedType = typeArguments[0];
|
|
30
|
+
return wrappedType ? isPureExpandableDomAttributeWrapperTypeNode(wrappedType, seen) : false;
|
|
31
|
+
}
|
|
32
|
+
if (typeName === 'Pick')
|
|
33
|
+
return false;
|
|
34
|
+
for (const definition of getNodeDefinitions(typeReferenceTarget)) {
|
|
35
|
+
const declaration = definition.getDeclarationNode();
|
|
36
|
+
if (!declaration)
|
|
37
|
+
continue;
|
|
38
|
+
if (Node.isInterfaceDeclaration(declaration)) {
|
|
39
|
+
if (declaration.getMembers().length > 0)
|
|
40
|
+
return false;
|
|
41
|
+
const heritageClauses = declaration.getHeritageClauses();
|
|
42
|
+
return (heritageClauses.length > 0 &&
|
|
43
|
+
heritageClauses.every((clause) => clause
|
|
44
|
+
.getTypeNodes()
|
|
45
|
+
.every((heritageTypeNode) => isPureExpandableDomAttributeWrapperTypeNode(heritageTypeNode, seen))));
|
|
46
|
+
}
|
|
47
|
+
if (Node.isTypeAliasDeclaration(declaration)) {
|
|
48
|
+
const aliasedTypeNode = declaration.getTypeNode();
|
|
49
|
+
if (!aliasedTypeNode)
|
|
50
|
+
return false;
|
|
51
|
+
return isPureExpandableDomAttributeWrapperTypeNode(aliasedTypeNode, seen);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
export function isPureExpandableDomAttributeWrapperType(typeNode) {
|
|
58
|
+
return isPureExpandableDomAttributeWrapperTypeNode(typeNode);
|
|
59
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Node } from 'ts-morph';
|
|
2
|
+
import type { RawPropDefinition } from '../../../types/component.js';
|
|
3
|
+
export { isPureExpandableDomAttributeWrapperType } from './detect-dom-is-pure-wrapper.js';
|
|
4
|
+
export { containsImportedOmitWrappedCustomProps } from './detect-omit-wrapped-custom-props.js';
|
|
5
|
+
export { containsSupportedDomPickType, containsAnyPickType, shouldMergeDomSyntaxExtraction, } from './detect-pick-type-patterns.js';
|
|
6
|
+
export { collectExpandableDomAttributeWrapperContexts, getStringLiteralTypeValues, } from './collect-dom-wrapper-contexts.js';
|
|
7
|
+
export declare function getSyntheticDomAttributeProps(typeNode: Node | undefined): RawPropDefinition[];
|
|
8
|
+
export declare function hasSyntheticDomChildren(typeNode: Node | undefined): boolean;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { getDomAttributeSurface, DOM_ATTRIBUTE_WRAPPERS_WITH_SYNTHETIC_CHILDREN } from './dom-attribute-surfaces.js';
|
|
2
|
+
import { collectExpandableDomAttributeWrapperContexts } from './collect-dom-wrapper-contexts.js';
|
|
3
|
+
export { isPureExpandableDomAttributeWrapperType } from './detect-dom-is-pure-wrapper.js';
|
|
4
|
+
export { containsImportedOmitWrappedCustomProps } from './detect-omit-wrapped-custom-props.js';
|
|
5
|
+
export { containsSupportedDomPickType, containsAnyPickType, shouldMergeDomSyntaxExtraction, } from './detect-pick-type-patterns.js';
|
|
6
|
+
export { collectExpandableDomAttributeWrapperContexts, getStringLiteralTypeValues, } from './collect-dom-wrapper-contexts.js';
|
|
7
|
+
export function getSyntheticDomAttributeProps(typeNode) {
|
|
8
|
+
if (!typeNode)
|
|
9
|
+
return [];
|
|
10
|
+
const contexts = collectExpandableDomAttributeWrapperContexts(typeNode);
|
|
11
|
+
if (contexts.length === 0)
|
|
12
|
+
return [];
|
|
13
|
+
const propsByName = new Map();
|
|
14
|
+
for (const context of contexts) {
|
|
15
|
+
for (const prop of getDomAttributeSurface(context.name)) {
|
|
16
|
+
if (context.excludedProps.has(prop.name))
|
|
17
|
+
continue;
|
|
18
|
+
if (propsByName.has(prop.name))
|
|
19
|
+
continue;
|
|
20
|
+
propsByName.set(prop.name, prop);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return [...propsByName.values()].sort((a, b) => a.name.localeCompare(b.name));
|
|
24
|
+
}
|
|
25
|
+
export function hasSyntheticDomChildren(typeNode) {
|
|
26
|
+
if (!typeNode)
|
|
27
|
+
return false;
|
|
28
|
+
return collectExpandableDomAttributeWrapperContexts(typeNode).some((context) => DOM_ATTRIBUTE_WRAPPERS_WITH_SYNTHETIC_CHILDREN.has(context.name));
|
|
29
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { Node } from 'ts-morph';
|
|
2
|
+
import { getTypeReferenceName, getTypeTargetDeclarations } from '../../shared/helpers/tsx-shared.js';
|
|
3
|
+
import { getTypeReferenceTargetNode } from '../../shared/helpers/tsx-node-utils.js';
|
|
4
|
+
import { isPureExpandableDomAttributeWrapperType } from './detect-dom-is-pure-wrapper.js';
|
|
5
|
+
export function containsImportedOmitWrappedCustomProps(typeNode, seen = new Set(), originSourceFile = typeNode.getSourceFile(), sawOmit = false) {
|
|
6
|
+
if (seen.has(typeNode))
|
|
7
|
+
return false;
|
|
8
|
+
seen.add(typeNode);
|
|
9
|
+
if (Node.isParenthesizedTypeNode(typeNode) || Node.isTypeOperatorTypeNode(typeNode)) {
|
|
10
|
+
return containsImportedOmitWrappedCustomProps(typeNode.getTypeNode(), seen, originSourceFile, sawOmit);
|
|
11
|
+
}
|
|
12
|
+
if (Node.isIntersectionTypeNode(typeNode) || Node.isUnionTypeNode(typeNode)) {
|
|
13
|
+
return typeNode
|
|
14
|
+
.getTypeNodes()
|
|
15
|
+
.some((child) => containsImportedOmitWrappedCustomProps(child, seen, originSourceFile, sawOmit));
|
|
16
|
+
}
|
|
17
|
+
if (Node.isTypeReference(typeNode) || Node.isExpressionWithTypeArguments(typeNode)) {
|
|
18
|
+
const typeName = getTypeReferenceName(typeNode);
|
|
19
|
+
if (!typeName)
|
|
20
|
+
return false;
|
|
21
|
+
if (typeName === 'PropsWithChildren') {
|
|
22
|
+
const wrappedType = typeNode.getTypeArguments()[0];
|
|
23
|
+
return wrappedType ? containsImportedOmitWrappedCustomProps(wrappedType, seen, originSourceFile, sawOmit) : false;
|
|
24
|
+
}
|
|
25
|
+
if (typeName === 'Omit') {
|
|
26
|
+
const wrappedType = typeNode.getTypeArguments()[0];
|
|
27
|
+
return wrappedType ? containsImportedOmitWrappedCustomProps(wrappedType, seen, originSourceFile, true) : false;
|
|
28
|
+
}
|
|
29
|
+
if (typeName === 'Partial' || typeName === 'Readonly' || typeName === 'Required' || typeName === 'NonNullable') {
|
|
30
|
+
const wrappedType = typeNode.getTypeArguments()[0];
|
|
31
|
+
return wrappedType ? containsImportedOmitWrappedCustomProps(wrappedType, seen, originSourceFile, sawOmit) : false;
|
|
32
|
+
}
|
|
33
|
+
const targetNode = getTypeReferenceTargetNode(typeNode);
|
|
34
|
+
for (const declaration of getTypeTargetDeclarations(targetNode, sawOmit)) {
|
|
35
|
+
if (!declaration)
|
|
36
|
+
continue;
|
|
37
|
+
const declarationSourceFile = declaration.getSourceFile();
|
|
38
|
+
const isImportedDeclaration = declarationSourceFile.getFilePath() !== originSourceFile.getFilePath();
|
|
39
|
+
if (sawOmit && isImportedDeclaration) {
|
|
40
|
+
const declarationTypeNode = Node.isTypeAliasDeclaration(declaration) ? declaration.getTypeNode() : declaration;
|
|
41
|
+
if (!declarationTypeNode || !isPureExpandableDomAttributeWrapperType(declarationTypeNode)) {
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
if (Node.isInterfaceDeclaration(declaration)) {
|
|
46
|
+
if (declaration
|
|
47
|
+
.getHeritageClauses()
|
|
48
|
+
.some((clause) => clause
|
|
49
|
+
.getTypeNodes()
|
|
50
|
+
.some((heritageTypeNode) => containsImportedOmitWrappedCustomProps(heritageTypeNode, seen, originSourceFile, sawOmit)))) {
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
if (Node.isTypeAliasDeclaration(declaration)) {
|
|
55
|
+
const aliasedTypeNode = declaration.getTypeNode();
|
|
56
|
+
if (aliasedTypeNode &&
|
|
57
|
+
containsImportedOmitWrappedCustomProps(aliasedTypeNode, seen, originSourceFile, sawOmit)) {
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { Node } from 'ts-morph';
|
|
2
|
+
export declare function containsSupportedDomPickType(typeNode: Node, seen?: Set<Node<import("ts-morph").ts.Node>>): boolean;
|
|
3
|
+
export declare function containsAnyPickType(typeNode: Node, seen?: Set<Node<import("ts-morph").ts.Node>>): boolean;
|
|
4
|
+
export declare function shouldMergeDomSyntaxExtraction(typeNode: Node): boolean;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { Node } from 'ts-morph';
|
|
2
|
+
import { getTypeReferenceName, getTypeTargetDeclarations } from '../../shared/helpers/tsx-shared.js';
|
|
3
|
+
import { getTypeReferenceTargetNode, getTypeReferenceArguments } from '../../shared/helpers/tsx-node-utils.js';
|
|
4
|
+
import { collectExpandableDomAttributeWrapperContexts } from './detect-dom-type-patterns.js';
|
|
5
|
+
function containsPickType(typeNode, seen, mode) {
|
|
6
|
+
if (seen.has(typeNode))
|
|
7
|
+
return false;
|
|
8
|
+
seen.add(typeNode);
|
|
9
|
+
if (Node.isParenthesizedTypeNode(typeNode) || Node.isTypeOperatorTypeNode(typeNode)) {
|
|
10
|
+
return containsPickType(typeNode.getTypeNode(), seen, mode);
|
|
11
|
+
}
|
|
12
|
+
if (Node.isIntersectionTypeNode(typeNode) || Node.isUnionTypeNode(typeNode)) {
|
|
13
|
+
return typeNode.getTypeNodes().some((child) => containsPickType(child, seen, mode));
|
|
14
|
+
}
|
|
15
|
+
const typeReferenceTarget = getTypeReferenceTargetNode(typeNode);
|
|
16
|
+
if (!typeReferenceTarget)
|
|
17
|
+
return false;
|
|
18
|
+
const typeName = getTypeReferenceName(typeNode);
|
|
19
|
+
if (!typeName)
|
|
20
|
+
return false;
|
|
21
|
+
const typeArguments = getTypeReferenceArguments(typeNode);
|
|
22
|
+
if (typeName === 'Pick') {
|
|
23
|
+
if (mode === 'any')
|
|
24
|
+
return true;
|
|
25
|
+
const sourceTypeNode = typeArguments[0];
|
|
26
|
+
return sourceTypeNode
|
|
27
|
+
? collectExpandableDomAttributeWrapperContexts(sourceTypeNode).length > 0 ||
|
|
28
|
+
containsPickType(sourceTypeNode, seen, mode)
|
|
29
|
+
: false;
|
|
30
|
+
}
|
|
31
|
+
const wrappedTypeNames = mode === 'any'
|
|
32
|
+
? ['PropsWithChildren', 'Omit', 'Partial', 'Readonly', 'Required', 'NonNullable']
|
|
33
|
+
: ['Omit', 'Partial', 'Readonly', 'Required', 'NonNullable'];
|
|
34
|
+
if (wrappedTypeNames.includes(typeName)) {
|
|
35
|
+
const wrappedType = typeArguments[0];
|
|
36
|
+
return wrappedType ? containsPickType(wrappedType, seen, mode) : false;
|
|
37
|
+
}
|
|
38
|
+
for (const declaration of getTypeTargetDeclarations(typeReferenceTarget, mode === 'any')) {
|
|
39
|
+
if (!declaration)
|
|
40
|
+
continue;
|
|
41
|
+
if (Node.isInterfaceDeclaration(declaration)) {
|
|
42
|
+
if (declaration
|
|
43
|
+
.getHeritageClauses()
|
|
44
|
+
.some((clause) => clause.getTypeNodes().some((heritageTypeNode) => containsPickType(heritageTypeNode, seen, mode)))) {
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
if (Node.isTypeAliasDeclaration(declaration)) {
|
|
49
|
+
const aliasedTypeNode = declaration.getTypeNode();
|
|
50
|
+
if (aliasedTypeNode && containsPickType(aliasedTypeNode, seen, mode))
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
export function containsSupportedDomPickType(typeNode, seen = new Set()) {
|
|
57
|
+
return containsPickType(typeNode, seen, 'supported');
|
|
58
|
+
}
|
|
59
|
+
export function containsAnyPickType(typeNode, seen = new Set()) {
|
|
60
|
+
return containsPickType(typeNode, seen, 'any');
|
|
61
|
+
}
|
|
62
|
+
export function shouldMergeDomSyntaxExtraction(typeNode) {
|
|
63
|
+
return collectExpandableDomAttributeWrapperContexts(typeNode).length > 0 || containsSupportedDomPickType(typeNode);
|
|
64
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Node } from 'ts-morph';
|
|
2
|
+
export declare const TRANSPARENT_POLYMORPHIC_TYPE_NAMES: Set<string>;
|
|
3
|
+
export declare function isRepoLocalTransparentPolymorphicWrapperDeclaration(declaration: Node, typeName: string): boolean;
|
|
4
|
+
export declare function unwrapRepoLocalTransparentPolymorphicWrapper(typeNode: Node, allowWorkspaceImportFallback: boolean): Node | undefined;
|
|
5
|
+
export declare function isRepoLocalSupportedPolymorphicChain(typeNode: Node, seen?: Set<Node<import("ts-morph").ts.Node>>, allowWorkspaceImportFallback?: boolean): boolean;
|