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