@contentful/experience-design-system-extraction 2.36.2-dev-build-c4497102.0 → 2.36.2-dev-build-a6f80ae6.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/{framework-adapters/astro/extractor.d.ts → astro.d.ts} +1 -1
- package/dist/src/extract/astro.js +226 -0
- package/dist/src/extract/{framework-adapters/shared/helpers/file-processing/file-workers.d.ts → file-extraction-workers.d.ts} +13 -1
- package/dist/src/extract/{framework-adapters/shared/helpers/file-processing/file-workers.js → file-extraction-workers.js} +19 -0
- package/dist/src/extract/non-authorable-filter.d.ts +17 -0
- package/dist/src/extract/non-authorable-filter.js +60 -0
- package/dist/src/extract/pipeline.d.ts +7 -0
- package/dist/src/extract/pipeline.js +343 -0
- package/dist/src/extract/{framework-adapters/react/extractor.d.ts → react.d.ts} +1 -1
- package/dist/src/extract/react.js +2069 -0
- package/dist/src/extract/scoring.d.ts +12 -0
- package/dist/src/extract/{services/quality/helpers/scoring/collect-scoring-inputs.js → scoring.js} +24 -10
- package/dist/src/extract/slot-detection.d.ts +35 -0
- package/dist/src/extract/slot-detection.js +98 -0
- package/dist/src/extract/{services/quality/helpers/inspection/inspect-component-source.d.ts → source-inspection.d.ts} +6 -3
- package/dist/src/extract/{services/quality/helpers/inspection/inspect-component-source.js → source-inspection.js} +65 -5
- package/dist/src/extract/{framework-adapters/shared/helpers/get-node-source-lines.d.ts → source-line-metadata.d.ts} +1 -1
- package/dist/src/extract/{framework-adapters/stencil/extractor.d.ts → stencil.d.ts} +1 -1
- package/dist/src/extract/stencil.js +312 -0
- package/dist/src/extract/structural-slot-evidence.d.ts +63 -0
- package/dist/src/extract/structural-slot-evidence.js +278 -0
- package/dist/src/extract/{framework-adapters/svelte/extractor.d.ts → svelte.d.ts} +1 -2
- package/dist/src/extract/svelte.js +1309 -0
- package/dist/src/extract/tsx-shared.d.ts +37 -0
- package/dist/src/extract/tsx-shared.js +368 -0
- package/dist/src/extract/{services/quality/helpers/inspection/validate-extracted-components.d.ts → validate.d.ts} +1 -1
- package/dist/src/extract/{framework-adapters/vue-tsx/extractor.d.ts → vue-tsx.d.ts} +1 -1
- package/dist/src/extract/vue-tsx.js +449 -0
- package/dist/src/extract/{framework-adapters/vue/extractor.d.ts → vue.d.ts} +1 -1
- package/dist/src/extract/vue.js +605 -0
- package/dist/src/extract/{framework-adapters/web-components/extractor.d.ts → web-components.d.ts} +1 -1
- package/dist/src/extract/web-components.js +863 -0
- package/dist/src/index.d.ts +21 -27
- package/dist/src/index.js +17 -21
- package/dist/src/{extract/services/classification/classify-component-props.d.ts → pre-classify.d.ts} +5 -3
- package/dist/src/{extract/services/classification/classify-component-props.js → pre-classify.js} +100 -8
- package/dist/src/{extract/types/component.d.ts → types.d.ts} +22 -0
- package/dist/src/{extract/types/display.js → types.js} +1 -1
- package/package.json +1 -1
- package/dist/src/extract/controller/extract-controller.d.ts +0 -10
- package/dist/src/extract/controller/extract-controller.js +0 -33
- package/dist/src/extract/controller/helpers/validate-endpoint-request.d.ts +0 -2
- package/dist/src/extract/controller/helpers/validate-endpoint-request.js +0 -24
- package/dist/src/extract/framework-adapters/astro/extractor.js +0 -45
- package/dist/src/extract/framework-adapters/astro/frontmatter.d.ts +0 -11
- package/dist/src/extract/framework-adapters/astro/frontmatter.js +0 -96
- package/dist/src/extract/framework-adapters/astro/helpers/collect-astro-props-bindings.d.ts +0 -4
- package/dist/src/extract/framework-adapters/astro/helpers/collect-astro-props-bindings.js +0 -47
- package/dist/src/extract/framework-adapters/astro/slots.d.ts +0 -7
- package/dist/src/extract/framework-adapters/astro/slots.js +0 -44
- package/dist/src/extract/framework-adapters/react/extractor.js +0 -31
- package/dist/src/extract/framework-adapters/react/helpers/collect-dom-wrapper-contexts.d.ts +0 -4
- package/dist/src/extract/framework-adapters/react/helpers/collect-dom-wrapper-contexts.js +0 -73
- package/dist/src/extract/framework-adapters/react/helpers/collect-prop-dataflow.d.ts +0 -14
- package/dist/src/extract/framework-adapters/react/helpers/collect-prop-dataflow.js +0 -220
- package/dist/src/extract/framework-adapters/react/helpers/collect-react-impl-hints.d.ts +0 -5
- package/dist/src/extract/framework-adapters/react/helpers/collect-react-impl-hints.js +0 -32
- package/dist/src/extract/framework-adapters/react/helpers/detect-dom-is-pure-wrapper.d.ts +0 -2
- package/dist/src/extract/framework-adapters/react/helpers/detect-dom-is-pure-wrapper.js +0 -59
- package/dist/src/extract/framework-adapters/react/helpers/detect-dom-type-patterns.d.ts +0 -8
- package/dist/src/extract/framework-adapters/react/helpers/detect-dom-type-patterns.js +0 -29
- package/dist/src/extract/framework-adapters/react/helpers/detect-omit-wrapped-custom-props.d.ts +0 -2
- package/dist/src/extract/framework-adapters/react/helpers/detect-omit-wrapped-custom-props.js +0 -64
- package/dist/src/extract/framework-adapters/react/helpers/detect-pick-type-patterns.d.ts +0 -4
- package/dist/src/extract/framework-adapters/react/helpers/detect-pick-type-patterns.js +0 -64
- package/dist/src/extract/framework-adapters/react/helpers/detect-react-polymorphic.d.ts +0 -5
- package/dist/src/extract/framework-adapters/react/helpers/detect-react-polymorphic.js +0 -170
- package/dist/src/extract/framework-adapters/react/helpers/dom-attribute-surfaces.d.ts +0 -15
- package/dist/src/extract/framework-adapters/react/helpers/dom-attribute-surfaces.js +0 -231
- package/dist/src/extract/framework-adapters/react/helpers/extract-binding-fallback-props.d.ts +0 -4
- package/dist/src/extract/framework-adapters/react/helpers/extract-binding-fallback-props.js +0 -50
- package/dist/src/extract/framework-adapters/react/helpers/extract-from-react-source-file.d.ts +0 -5
- package/dist/src/extract/framework-adapters/react/helpers/extract-from-react-source-file.js +0 -23
- package/dist/src/extract/framework-adapters/react/helpers/extract-react-allowed-components.d.ts +0 -2
- package/dist/src/extract/framework-adapters/react/helpers/extract-react-allowed-components.js +0 -25
- package/dist/src/extract/framework-adapters/react/helpers/extract-react-binding-defaults.d.ts +0 -6
- package/dist/src/extract/framework-adapters/react/helpers/extract-react-binding-defaults.js +0 -48
- package/dist/src/extract/framework-adapters/react/helpers/extract-react-component-from-export.d.ts +0 -15
- package/dist/src/extract/framework-adapters/react/helpers/extract-react-component-from-export.js +0 -106
- package/dist/src/extract/framework-adapters/react/helpers/extract-react-prop-types.d.ts +0 -3
- package/dist/src/extract/framework-adapters/react/helpers/extract-react-prop-types.js +0 -64
- package/dist/src/extract/framework-adapters/react/helpers/extract-react-props-from-type.d.ts +0 -15
- package/dist/src/extract/framework-adapters/react/helpers/extract-react-props-from-type.js +0 -318
- package/dist/src/extract/framework-adapters/react/helpers/extract-react-slots.d.ts +0 -6
- package/dist/src/extract/framework-adapters/react/helpers/extract-react-slots.js +0 -44
- package/dist/src/extract/framework-adapters/react/helpers/filter-impl-alias-props.d.ts +0 -4
- package/dist/src/extract/framework-adapters/react/helpers/filter-impl-alias-props.js +0 -52
- package/dist/src/extract/framework-adapters/react/helpers/infer-primitive-dom-props.d.ts +0 -6
- package/dist/src/extract/framework-adapters/react/helpers/infer-primitive-dom-props.js +0 -69
- package/dist/src/extract/framework-adapters/react/helpers/resolve-component-function.d.ts +0 -4
- package/dist/src/extract/framework-adapters/react/helpers/resolve-component-function.js +0 -131
- package/dist/src/extract/framework-adapters/react/helpers/resolve-react-prop-forwarding.d.ts +0 -8
- package/dist/src/extract/framework-adapters/react/helpers/resolve-react-prop-forwarding.js +0 -22
- package/dist/src/extract/framework-adapters/react/helpers/resolve-react-props-type.d.ts +0 -14
- package/dist/src/extract/framework-adapters/react/helpers/resolve-react-props-type.js +0 -86
- package/dist/src/extract/framework-adapters/react/helpers/synthesize-react-structural-slots.d.ts +0 -8
- package/dist/src/extract/framework-adapters/react/helpers/synthesize-react-structural-slots.js +0 -44
- package/dist/src/extract/framework-adapters/shared/helpers/build-component-lookup-maps.d.ts +0 -5
- package/dist/src/extract/framework-adapters/shared/helpers/build-component-lookup-maps.js +0 -10
- package/dist/src/extract/framework-adapters/shared/helpers/collect-jsdoc-slot-comments.d.ts +0 -2
- package/dist/src/extract/framework-adapters/shared/helpers/collect-jsdoc-slot-comments.js +0 -13
- package/dist/src/extract/framework-adapters/shared/helpers/file-processing/project-source-files.d.ts +0 -5
- package/dist/src/extract/framework-adapters/shared/helpers/file-processing/project-source-files.js +0 -13
- package/dist/src/extract/framework-adapters/shared/helpers/file-processing/result-normalizer.d.ts +0 -6
- package/dist/src/extract/framework-adapters/shared/helpers/file-processing/result-normalizer.js +0 -6
- package/dist/src/extract/framework-adapters/shared/helpers/find-tsx-workspace-package.d.ts +0 -2
- package/dist/src/extract/framework-adapters/shared/helpers/find-tsx-workspace-package.js +0 -62
- package/dist/src/extract/framework-adapters/shared/helpers/resolve-tsx-tsconfig-path.d.ts +0 -7
- package/dist/src/extract/framework-adapters/shared/helpers/resolve-tsx-tsconfig-path.js +0 -93
- package/dist/src/extract/framework-adapters/shared/helpers/resolve-tsx-workspace-imports.d.ts +0 -6
- package/dist/src/extract/framework-adapters/shared/helpers/resolve-tsx-workspace-imports.js +0 -58
- package/dist/src/extract/framework-adapters/shared/helpers/tsx-node-utils.d.ts +0 -13
- package/dist/src/extract/framework-adapters/shared/helpers/tsx-node-utils.js +0 -76
- package/dist/src/extract/framework-adapters/shared/helpers/tsx-renderable-exports.d.ts +0 -12
- package/dist/src/extract/framework-adapters/shared/helpers/tsx-renderable-exports.js +0 -35
- package/dist/src/extract/framework-adapters/shared/helpers/tsx-shared.d.ts +0 -14
- package/dist/src/extract/framework-adapters/shared/helpers/tsx-shared.js +0 -54
- package/dist/src/extract/framework-adapters/stencil/extractor.js +0 -82
- package/dist/src/extract/framework-adapters/stencil/helpers/detect-stencil-class.d.ts +0 -7
- package/dist/src/extract/framework-adapters/stencil/helpers/detect-stencil-class.js +0 -32
- package/dist/src/extract/framework-adapters/stencil/helpers/extract-stencil-props.d.ts +0 -5
- package/dist/src/extract/framework-adapters/stencil/helpers/extract-stencil-props.js +0 -62
- package/dist/src/extract/framework-adapters/stencil/helpers/extract-stencil-slots.d.ts +0 -6
- package/dist/src/extract/framework-adapters/stencil/helpers/extract-stencil-slots.js +0 -87
- package/dist/src/extract/framework-adapters/stencil/helpers/stencil-prop-helpers.d.ts +0 -5
- package/dist/src/extract/framework-adapters/stencil/helpers/stencil-prop-helpers.js +0 -39
- package/dist/src/extract/framework-adapters/svelte/extractor.js +0 -27
- package/dist/src/extract/framework-adapters/svelte/helpers/classify-svelte-props-annotation.d.ts +0 -6
- package/dist/src/extract/framework-adapters/svelte/helpers/classify-svelte-props-annotation.js +0 -51
- package/dist/src/extract/framework-adapters/svelte/helpers/collect-svelte-type-references.d.ts +0 -3
- package/dist/src/extract/framework-adapters/svelte/helpers/collect-svelte-type-references.js +0 -52
- package/dist/src/extract/framework-adapters/svelte/helpers/extract-from-svelte-file.d.ts +0 -7
- package/dist/src/extract/framework-adapters/svelte/helpers/extract-from-svelte-file.js +0 -90
- package/dist/src/extract/framework-adapters/svelte/helpers/extract-svelte-ast-type-members.d.ts +0 -15
- package/dist/src/extract/framework-adapters/svelte/helpers/extract-svelte-ast-type-members.js +0 -46
- package/dist/src/extract/framework-adapters/svelte/helpers/extract-svelte-declaration-data.d.ts +0 -7
- package/dist/src/extract/framework-adapters/svelte/helpers/extract-svelte-declaration-data.js +0 -64
- package/dist/src/extract/framework-adapters/svelte/helpers/extract-svelte-external-type-members.d.ts +0 -4
- package/dist/src/extract/framework-adapters/svelte/helpers/extract-svelte-external-type-members.js +0 -58
- package/dist/src/extract/framework-adapters/svelte/helpers/extract-svelte-from-destructure.d.ts +0 -4
- package/dist/src/extract/framework-adapters/svelte/helpers/extract-svelte-from-destructure.js +0 -85
- package/dist/src/extract/framework-adapters/svelte/helpers/extract-svelte-props.d.ts +0 -22
- package/dist/src/extract/framework-adapters/svelte/helpers/extract-svelte-props.js +0 -55
- package/dist/src/extract/framework-adapters/svelte/helpers/extract-svelte-template-slots.d.ts +0 -7
- package/dist/src/extract/framework-adapters/svelte/helpers/extract-svelte-template-slots.js +0 -63
- package/dist/src/extract/framework-adapters/svelte/helpers/extract-svelte-type-member-props.d.ts +0 -3
- package/dist/src/extract/framework-adapters/svelte/helpers/extract-svelte-type-member-props.js +0 -31
- package/dist/src/extract/framework-adapters/svelte/helpers/find-svelte-script-declarations.d.ts +0 -8
- package/dist/src/extract/framework-adapters/svelte/helpers/find-svelte-script-declarations.js +0 -91
- package/dist/src/extract/framework-adapters/svelte/helpers/get-svelte-component-name.d.ts +0 -1
- package/dist/src/extract/framework-adapters/svelte/helpers/get-svelte-component-name.js +0 -26
- package/dist/src/extract/framework-adapters/svelte/helpers/render-svelte-type-strings.d.ts +0 -3
- package/dist/src/extract/framework-adapters/svelte/helpers/render-svelte-type-strings.js +0 -91
- package/dist/src/extract/framework-adapters/svelte/helpers/render-svelte-type.d.ts +0 -11
- package/dist/src/extract/framework-adapters/svelte/helpers/render-svelte-type.js +0 -68
- package/dist/src/extract/framework-adapters/svelte/helpers/resolve-dts-location.d.ts +0 -1
- package/dist/src/extract/framework-adapters/svelte/helpers/resolve-dts-location.js +0 -90
- package/dist/src/extract/framework-adapters/svelte/helpers/resolve-svelte-allowed-components.d.ts +0 -2
- package/dist/src/extract/framework-adapters/svelte/helpers/resolve-svelte-allowed-components.js +0 -20
- package/dist/src/extract/framework-adapters/svelte/helpers/resolve-svelte-external-type-readers.d.ts +0 -3
- package/dist/src/extract/framework-adapters/svelte/helpers/resolve-svelte-external-type-readers.js +0 -68
- package/dist/src/extract/framework-adapters/svelte/helpers/resolve-svelte-type-checker.d.ts +0 -4
- package/dist/src/extract/framework-adapters/svelte/helpers/resolve-svelte-type-checker.js +0 -68
- package/dist/src/extract/framework-adapters/svelte/helpers/resolve-svelte-type-members.d.ts +0 -6
- package/dist/src/extract/framework-adapters/svelte/helpers/resolve-svelte-type-members.js +0 -30
- package/dist/src/extract/framework-adapters/svelte/helpers/resolve-svelte-unresolved-retry.d.ts +0 -13
- package/dist/src/extract/framework-adapters/svelte/helpers/resolve-svelte-unresolved-retry.js +0 -192
- package/dist/src/extract/framework-adapters/svelte/types/svelte-ast-node.d.ts +0 -12
- package/dist/src/extract/framework-adapters/svelte/types/svelte-ast-node.js +0 -1
- package/dist/src/extract/framework-adapters/vue/extractor.js +0 -61
- package/dist/src/extract/framework-adapters/vue/helpers/extract-vue-object-props.d.ts +0 -3
- package/dist/src/extract/framework-adapters/vue/helpers/extract-vue-object-props.js +0 -67
- package/dist/src/extract/framework-adapters/vue/helpers/extract-vue-options-props.d.ts +0 -4
- package/dist/src/extract/framework-adapters/vue/helpers/extract-vue-options-props.js +0 -72
- package/dist/src/extract/framework-adapters/vue/helpers/extract-vue-setup-object-props.d.ts +0 -8
- package/dist/src/extract/framework-adapters/vue/helpers/extract-vue-setup-object-props.js +0 -64
- package/dist/src/extract/framework-adapters/vue/helpers/extract-vue-setup-props.d.ts +0 -2
- package/dist/src/extract/framework-adapters/vue/helpers/extract-vue-setup-props.js +0 -66
- package/dist/src/extract/framework-adapters/vue/helpers/extract-vue-slots.d.ts +0 -24
- package/dist/src/extract/framework-adapters/vue/helpers/extract-vue-slots.js +0 -56
- package/dist/src/extract/framework-adapters/vue/helpers/resolve-vue-component-name.d.ts +0 -2
- package/dist/src/extract/framework-adapters/vue/helpers/resolve-vue-component-name.js +0 -9
- package/dist/src/extract/framework-adapters/vue/helpers/resolve-workspace-module.d.ts +0 -1
- package/dist/src/extract/framework-adapters/vue/helpers/resolve-workspace-module.js +0 -76
- package/dist/src/extract/framework-adapters/vue/helpers/workspace-package-dirs.d.ts +0 -2
- package/dist/src/extract/framework-adapters/vue/helpers/workspace-package-dirs.js +0 -77
- package/dist/src/extract/framework-adapters/vue-tsx/extractor.js +0 -82
- package/dist/src/extract/framework-adapters/vue-tsx/helpers/extract-vue-tsx-props.d.ts +0 -5
- package/dist/src/extract/framework-adapters/vue-tsx/helpers/extract-vue-tsx-props.js +0 -189
- package/dist/src/extract/framework-adapters/vue-tsx/helpers/extract-vue-tsx-slots.d.ts +0 -4
- package/dist/src/extract/framework-adapters/vue-tsx/helpers/extract-vue-tsx-slots.js +0 -91
- package/dist/src/extract/framework-adapters/vue-tsx/helpers/resolve-ast-object.d.ts +0 -11
- package/dist/src/extract/framework-adapters/vue-tsx/helpers/resolve-ast-object.js +0 -95
- package/dist/src/extract/framework-adapters/web-components/extractor.js +0 -55
- package/dist/src/extract/framework-adapters/web-components/helpers/collect-wc-html-templates.d.ts +0 -4
- package/dist/src/extract/framework-adapters/web-components/helpers/collect-wc-html-templates.js +0 -67
- package/dist/src/extract/framework-adapters/web-components/helpers/detect-wc-non-public-members.d.ts +0 -9
- package/dist/src/extract/framework-adapters/web-components/helpers/detect-wc-non-public-members.js +0 -11
- package/dist/src/extract/framework-adapters/web-components/helpers/extract-wc-accessor-props.d.ts +0 -3
- package/dist/src/extract/framework-adapters/web-components/helpers/extract-wc-accessor-props.js +0 -65
- package/dist/src/extract/framework-adapters/web-components/helpers/extract-wc-class-properties.d.ts +0 -3
- package/dist/src/extract/framework-adapters/web-components/helpers/extract-wc-class-properties.js +0 -60
- package/dist/src/extract/framework-adapters/web-components/helpers/extract-wc-inheritance.d.ts +0 -4
- package/dist/src/extract/framework-adapters/web-components/helpers/extract-wc-inheritance.js +0 -16
- package/dist/src/extract/framework-adapters/web-components/helpers/extract-wc-jsdoc-attr-props.d.ts +0 -3
- package/dist/src/extract/framework-adapters/web-components/helpers/extract-wc-jsdoc-attr-props.js +0 -24
- package/dist/src/extract/framework-adapters/web-components/helpers/extract-wc-observed-attrs.d.ts +0 -3
- package/dist/src/extract/framework-adapters/web-components/helpers/extract-wc-observed-attrs.js +0 -27
- package/dist/src/extract/framework-adapters/web-components/helpers/extract-wc-slots.d.ts +0 -6
- package/dist/src/extract/framework-adapters/web-components/helpers/extract-wc-slots.js +0 -56
- package/dist/src/extract/framework-adapters/web-components/helpers/extract-wc-template-content.d.ts +0 -4
- package/dist/src/extract/framework-adapters/web-components/helpers/extract-wc-template-content.js +0 -49
- package/dist/src/extract/framework-adapters/web-components/helpers/merge-wc-prop-lists.d.ts +0 -9
- package/dist/src/extract/framework-adapters/web-components/helpers/merge-wc-prop-lists.js +0 -19
- package/dist/src/extract/framework-adapters/web-components/helpers/resolve-wc-base-class.d.ts +0 -2
- package/dist/src/extract/framework-adapters/web-components/helpers/resolve-wc-base-class.js +0 -59
- package/dist/src/extract/framework-adapters/web-components/helpers/resolve-wc-decorator-tag.d.ts +0 -2
- package/dist/src/extract/framework-adapters/web-components/helpers/resolve-wc-decorator-tag.js +0 -54
- package/dist/src/extract/framework-adapters/web-components/helpers/resolve-wc-import-source.d.ts +0 -7
- package/dist/src/extract/framework-adapters/web-components/helpers/resolve-wc-import-source.js +0 -47
- package/dist/src/extract/framework-adapters/web-components/helpers/resolve-wc-import.d.ts +0 -4
- package/dist/src/extract/framework-adapters/web-components/helpers/resolve-wc-import.js +0 -93
- package/dist/src/extract/framework-adapters/web-components/helpers/resolve-wc-sibling-definition.d.ts +0 -4
- package/dist/src/extract/framework-adapters/web-components/helpers/resolve-wc-sibling-definition.js +0 -79
- package/dist/src/extract/framework-adapters/web-components/helpers/resolve-wc-tag-name.d.ts +0 -7
- package/dist/src/extract/framework-adapters/web-components/helpers/resolve-wc-tag-name.js +0 -62
- package/dist/src/extract/helpers/evidence/ast/collect-structural-jsx-evidence.d.ts +0 -5
- package/dist/src/extract/helpers/evidence/ast/collect-structural-jsx-evidence.js +0 -63
- package/dist/src/extract/helpers/evidence/ast/detect-react-node-types.d.ts +0 -2
- package/dist/src/extract/helpers/evidence/ast/detect-react-node-types.js +0 -24
- package/dist/src/extract/helpers/evidence/ast/get-jsx-ast-data.d.ts +0 -14
- package/dist/src/extract/helpers/evidence/ast/get-jsx-ast-data.js +0 -85
- package/dist/src/extract/helpers/evidence/collect-jsx-component-references.d.ts +0 -5
- package/dist/src/extract/helpers/evidence/collect-jsx-component-references.js +0 -52
- package/dist/src/extract/helpers/evidence/detect-slot-from-prop.d.ts +0 -16
- package/dist/src/extract/helpers/evidence/detect-slot-from-prop.js +0 -39
- package/dist/src/extract/orchestrator/execute-extraction-orchestrator.d.ts +0 -13
- package/dist/src/extract/orchestrator/execute-extraction-orchestrator.js +0 -17
- package/dist/src/extract/services/classification/helpers/check-prop-types.d.ts +0 -7
- package/dist/src/extract/services/classification/helpers/check-prop-types.js +0 -22
- package/dist/src/extract/services/classification/helpers/detect-dom-props.d.ts +0 -2
- package/dist/src/extract/services/classification/helpers/detect-dom-props.js +0 -63
- package/dist/src/extract/services/deduplication/deduplicate-components.d.ts +0 -2
- package/dist/src/extract/services/deduplication/deduplicate-components.js +0 -58
- package/dist/src/extract/services/deduplication/helpers/component-path-analysis.d.ts +0 -10
- package/dist/src/extract/services/deduplication/helpers/component-path-analysis.js +0 -85
- package/dist/src/extract/services/deduplication/helpers/component-path-scoring.d.ts +0 -10
- package/dist/src/extract/services/deduplication/helpers/component-path-scoring.js +0 -73
- package/dist/src/extract/services/extraction/extract-components.d.ts +0 -3
- package/dist/src/extract/services/extraction/extract-components.js +0 -19
- package/dist/src/extract/services/extraction/helpers/collect-sveltekit-route-exclusions.d.ts +0 -2
- package/dist/src/extract/services/extraction/helpers/collect-sveltekit-route-exclusions.js +0 -18
- package/dist/src/extract/services/extraction/helpers/filter-hook-components.d.ts +0 -6
- package/dist/src/extract/services/extraction/helpers/filter-hook-components.js +0 -18
- package/dist/src/extract/services/extraction/helpers/register-extractors.d.ts +0 -8
- package/dist/src/extract/services/extraction/helpers/register-extractors.js +0 -71
- package/dist/src/extract/services/extraction/helpers/run-extractor-batches.d.ts +0 -4
- package/dist/src/extract/services/extraction/helpers/run-extractor-batches.js +0 -24
- package/dist/src/extract/services/quality/evaluate-extraction-quality.d.ts +0 -4
- package/dist/src/extract/services/quality/evaluate-extraction-quality.js +0 -61
- package/dist/src/extract/services/quality/helpers/authorability/evaluate-authorability.d.ts +0 -28
- package/dist/src/extract/services/quality/helpers/authorability/evaluate-authorability.js +0 -67
- package/dist/src/extract/services/quality/helpers/inspection/detect-data-wrapper-patterns.d.ts +0 -16
- package/dist/src/extract/services/quality/helpers/inspection/detect-data-wrapper-patterns.js +0 -63
- package/dist/src/extract/services/quality/helpers/scoring/collect-scoring-inputs.d.ts +0 -14
- package/dist/src/extract/services/quality/helpers/scoring/compute-extraction-score.d.ts +0 -6
- package/dist/src/extract/services/quality/helpers/scoring/compute-extraction-score.js +0 -12
- package/dist/src/extract/types/classification.d.ts +0 -4
- package/dist/src/extract/types/classification.js +0 -1
- package/dist/src/extract/types/component-extractor.d.ts +0 -7
- package/dist/src/extract/types/component-extractor.js +0 -1
- package/dist/src/extract/types/component.js +0 -1
- package/dist/src/extract/types/contract.d.ts +0 -16
- package/dist/src/extract/types/contract.js +0 -1
- package/dist/src/extract/types/display.d.ts +0 -3
- package/dist/src/extract/types/options.d.ts +0 -15
- package/dist/src/extract/types/options.js +0 -1
- package/dist/src/extract/types/scoring.d.ts +0 -9
- package/dist/src/extract/types/scoring.js +0 -1
- package/dist/src/extract/types/source-inspection.d.ts +0 -5
- package/dist/src/extract/types/source-inspection.js +0 -1
- /package/dist/src/extract/{helpers/evidence/parse-source-imports.d.ts → parse-imported-names.d.ts} +0 -0
- /package/dist/src/extract/{helpers/evidence/parse-source-imports.js → parse-imported-names.js} +0 -0
- /package/dist/src/extract/{framework-adapters/shared/helpers/resolve-import-file-path.d.ts → resolve-local-module.d.ts} +0 -0
- /package/dist/src/extract/{framework-adapters/shared/helpers/resolve-import-file-path.js → resolve-local-module.js} +0 -0
- /package/dist/src/extract/{framework-adapters/shared/helpers/resolve-type-symbol.d.ts → resolve-type-property.d.ts} +0 -0
- /package/dist/src/extract/{framework-adapters/shared/helpers/resolve-type-symbol.js → resolve-type-property.js} +0 -0
- /package/dist/src/extract/{helpers/evidence/collect-allowed-component-names.d.ts → slot-allowed-components.d.ts} +0 -0
- /package/dist/src/extract/{helpers/evidence/collect-allowed-component-names.js → slot-allowed-components.js} +0 -0
- /package/dist/src/extract/{framework-adapters/shared/helpers/get-node-source-lines.js → source-line-metadata.js} +0 -0
- /package/dist/src/extract/{services/quality/helpers/inspection/validate-extracted-components.js → validate.js} +0 -0
package/dist/src/extract/framework-adapters/svelte/helpers/resolve-svelte-unresolved-retry.js
DELETED
|
@@ -1,192 +0,0 @@
|
|
|
1
|
-
import { dirname, join } from 'node:path';
|
|
2
|
-
import { existsSync } from 'node:fs';
|
|
3
|
-
import { createRequire } from 'node:module';
|
|
4
|
-
import { Project, ScriptTarget, ModuleKind, ts } from 'ts-morph';
|
|
5
|
-
import { computeExtractionScore, deriveNeedsReview, } from '../../../services/quality/helpers/scoring/compute-extraction-score.js';
|
|
6
|
-
import { mergeSlots } from './extract-svelte-template-slots.js';
|
|
7
|
-
import { collectSnippetImportLocals, mergeSets, findLocalTypeDeclaration, collectReferencedTypeNames, collectImportSpecifiersForNames, } from './find-svelte-script-declarations.js';
|
|
8
|
-
import { resolveViaTypeChecker } from './resolve-svelte-type-members.js';
|
|
9
|
-
import { extractFromTypeMembersOnly } from './extract-svelte-props.js';
|
|
10
|
-
import { locateDtsForSpecifier } from './resolve-dts-location.js';
|
|
11
|
-
async function retryComponentWithProject(component, ctx, project, warnings) {
|
|
12
|
-
const snippetLocals = mergeSets(collectSnippetImportLocals(ctx.instance), ctx.moduleScript ? collectSnippetImportLocals(ctx.moduleScript) : new Set());
|
|
13
|
-
let members = null;
|
|
14
|
-
try {
|
|
15
|
-
members = await resolveViaTypeChecker(ctx.annotation, ctx.instance, ctx.moduleScript, ctx.filePath, ctx.source, snippetLocals, project);
|
|
16
|
-
}
|
|
17
|
-
catch {
|
|
18
|
-
members = null;
|
|
19
|
-
}
|
|
20
|
-
if (!members || members.length === 0)
|
|
21
|
-
return false;
|
|
22
|
-
const { props, snippetSlots } = extractFromTypeMembersOnly(members);
|
|
23
|
-
const templateSlots = component.slots.filter((s) => !snippetSlots.some((ss) => ss.name === s.name));
|
|
24
|
-
const finalSlots = mergeSlots(snippetSlots, templateSlots).slots;
|
|
25
|
-
const slotNames = new Set(finalSlots.map((s) => s.name));
|
|
26
|
-
component.props = props.filter((p) => !slotNames.has(p.name));
|
|
27
|
-
component.slots = finalSlots;
|
|
28
|
-
const remainingReasons = (component.reviewReasons ?? []).filter((r) => r !== 'props-type-unresolved');
|
|
29
|
-
const score = computeExtractionScore(component, {
|
|
30
|
-
additionalIssueCount: remainingReasons.length,
|
|
31
|
-
additionalReasons: remainingReasons,
|
|
32
|
-
});
|
|
33
|
-
component.extractionConfidence = score.confidence;
|
|
34
|
-
component.reviewReasons = score.reasons;
|
|
35
|
-
component.needsReview = deriveNeedsReview(score.confidence);
|
|
36
|
-
const componentName = component.name;
|
|
37
|
-
const idx = warnings.findIndex((w) => w.startsWith(`${componentName}: declared Props type `) && /resolved to /.test(w));
|
|
38
|
-
if (idx >= 0)
|
|
39
|
-
warnings.splice(idx, 1);
|
|
40
|
-
return true;
|
|
41
|
-
}
|
|
42
|
-
function addImportedDeclarationsToProject(project, ctx) {
|
|
43
|
-
const importedNames = collectReferencedTypeNames(ctx.annotation);
|
|
44
|
-
for (const name of [...importedNames]) {
|
|
45
|
-
const localDecl = findLocalTypeDeclaration(ctx.instance, name, ctx.moduleScript) ??
|
|
46
|
-
(ctx.moduleScript ? findLocalTypeDeclaration(ctx.moduleScript, name, ctx.instance) : null);
|
|
47
|
-
if (localDecl) {
|
|
48
|
-
for (const referenced of collectReferencedTypeNames(localDecl))
|
|
49
|
-
importedNames.add(referenced);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
if (importedNames.size === 0)
|
|
53
|
-
return 0;
|
|
54
|
-
const imports = collectImportSpecifiersForNames(ctx.instance, importedNames);
|
|
55
|
-
if (ctx.moduleScript) {
|
|
56
|
-
for (const [k, v] of collectImportSpecifiersForNames(ctx.moduleScript, importedNames))
|
|
57
|
-
imports.set(k, v);
|
|
58
|
-
}
|
|
59
|
-
if (imports.size === 0)
|
|
60
|
-
return 0;
|
|
61
|
-
const req = createRequire(ctx.filePath);
|
|
62
|
-
let added = 0;
|
|
63
|
-
for (const specifier of imports.values()) {
|
|
64
|
-
if (specifier.startsWith('.'))
|
|
65
|
-
continue;
|
|
66
|
-
const dtsPath = locateDtsForSpecifier(req, specifier, ctx.filePath);
|
|
67
|
-
if (!dtsPath)
|
|
68
|
-
continue;
|
|
69
|
-
try {
|
|
70
|
-
const sf = project.addSourceFileAtPathIfExists(dtsPath);
|
|
71
|
-
if (sf)
|
|
72
|
-
added++;
|
|
73
|
-
}
|
|
74
|
-
catch { }
|
|
75
|
-
}
|
|
76
|
-
return added;
|
|
77
|
-
}
|
|
78
|
-
export async function maybeRunResolveUnreachableRetry(components, warnings, retryContexts, opts) {
|
|
79
|
-
const mode = opts?.resolveUnreachable ?? 'auto';
|
|
80
|
-
if (mode === 'never')
|
|
81
|
-
return warnings;
|
|
82
|
-
const isUnresolved = (c) => (c.reviewReasons ?? []).includes('props-type-unresolved') && !!retryContexts.get(c.source);
|
|
83
|
-
const unresolvedCount = components.filter(isUnresolved).length;
|
|
84
|
-
if (unresolvedCount === 0)
|
|
85
|
-
return warnings;
|
|
86
|
-
if (mode === 'auto') {
|
|
87
|
-
const ratio = unresolvedCount / components.length;
|
|
88
|
-
if (ratio < 0.2)
|
|
89
|
-
return warnings;
|
|
90
|
-
}
|
|
91
|
-
const projectRoot = opts?.projectRoot;
|
|
92
|
-
let project = null;
|
|
93
|
-
let tsconfigPath = null;
|
|
94
|
-
if (projectRoot) {
|
|
95
|
-
tsconfigPath = findNearestTsconfig(projectRoot);
|
|
96
|
-
}
|
|
97
|
-
if (tsconfigPath) {
|
|
98
|
-
try {
|
|
99
|
-
project = new Project({
|
|
100
|
-
tsConfigFilePath: tsconfigPath,
|
|
101
|
-
skipAddingFilesFromTsConfig: false,
|
|
102
|
-
compilerOptions: {
|
|
103
|
-
allowJs: true,
|
|
104
|
-
jsx: ts.JsxEmit.Preserve,
|
|
105
|
-
},
|
|
106
|
-
});
|
|
107
|
-
}
|
|
108
|
-
catch {
|
|
109
|
-
project = null;
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
let recoveredViaTsconfig = 0;
|
|
113
|
-
if (project) {
|
|
114
|
-
for (const component of components) {
|
|
115
|
-
if (!isUnresolved(component))
|
|
116
|
-
continue;
|
|
117
|
-
const ctx = retryContexts.get(component.source);
|
|
118
|
-
if (!ctx)
|
|
119
|
-
continue;
|
|
120
|
-
const recovered = await retryComponentWithProject(component, ctx, project, warnings);
|
|
121
|
-
if (recovered)
|
|
122
|
-
recoveredViaTsconfig++;
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
let recoveredViaNodeModules = 0;
|
|
126
|
-
const stillUnresolved = components.filter(isUnresolved);
|
|
127
|
-
if (stillUnresolved.length > 0) {
|
|
128
|
-
if (!project) {
|
|
129
|
-
project = new Project({
|
|
130
|
-
compilerOptions: {
|
|
131
|
-
strict: false,
|
|
132
|
-
target: ScriptTarget.ESNext,
|
|
133
|
-
module: ModuleKind.ESNext,
|
|
134
|
-
moduleResolution: ts.ModuleResolutionKind.NodeJs,
|
|
135
|
-
allowJs: true,
|
|
136
|
-
jsx: ts.JsxEmit.Preserve,
|
|
137
|
-
},
|
|
138
|
-
useInMemoryFileSystem: false,
|
|
139
|
-
skipAddingFilesFromTsConfig: true,
|
|
140
|
-
});
|
|
141
|
-
}
|
|
142
|
-
for (const component of stillUnresolved) {
|
|
143
|
-
const ctx = retryContexts.get(component.source);
|
|
144
|
-
if (!ctx)
|
|
145
|
-
continue;
|
|
146
|
-
const added = addImportedDeclarationsToProject(project, ctx);
|
|
147
|
-
if (added === 0)
|
|
148
|
-
continue;
|
|
149
|
-
const recovered = await retryComponentWithProject(component, ctx, project, warnings);
|
|
150
|
-
if (recovered)
|
|
151
|
-
recoveredViaNodeModules++;
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
const didMeaningfulWork = !!tsconfigPath || recoveredViaNodeModules > 0;
|
|
155
|
-
if (didMeaningfulWork) {
|
|
156
|
-
const remaining = components.filter(isUnresolved).length;
|
|
157
|
-
const parts = [];
|
|
158
|
-
if (tsconfigPath) {
|
|
159
|
-
parts.push(`tsconfig at ${tsconfigPath} recovered ${recoveredViaTsconfig} component(s)`);
|
|
160
|
-
}
|
|
161
|
-
parts.push(`node_modules pass recovered ${recoveredViaNodeModules} more`);
|
|
162
|
-
parts.push(`${remaining} component(s) remain unresolved`);
|
|
163
|
-
warnings.push(`Unresolved-type retry pass (mode=${mode}): ${parts.join('; ')}.`);
|
|
164
|
-
}
|
|
165
|
-
return warnings;
|
|
166
|
-
}
|
|
167
|
-
function findNearestTsconfig(startDir) {
|
|
168
|
-
let dir = startDir;
|
|
169
|
-
for (let i = 0; i < 16; i++) {
|
|
170
|
-
const candidate = join(dir, 'tsconfig.json');
|
|
171
|
-
if (existsSync(candidate))
|
|
172
|
-
return candidate;
|
|
173
|
-
const parent = dirname(dir);
|
|
174
|
-
if (!parent || parent === dir)
|
|
175
|
-
return null;
|
|
176
|
-
dir = parent;
|
|
177
|
-
}
|
|
178
|
-
return null;
|
|
179
|
-
}
|
|
180
|
-
export function collapseUnresolvedTypeWarnings(warnings) {
|
|
181
|
-
const isUnresolvedWarning = (w) => /declared Props type .* resolved to/.test(w);
|
|
182
|
-
const unresolvedCount = warnings.filter(isUnresolvedWarning).length;
|
|
183
|
-
if (unresolvedCount < 3)
|
|
184
|
-
return warnings;
|
|
185
|
-
const others = warnings.filter((w) => !isUnresolvedWarning(w));
|
|
186
|
-
const summary = `Unresolved component types: ${unresolvedCount} components have a declared Props type the parser couldn't fully resolve — ` +
|
|
187
|
-
`most often a cross-package extends pattern (e.g. an interface that extends a type from a node_modules package). ` +
|
|
188
|
-
`Each affected component is flagged with reviewReasons: ['props-type-unresolved'] and needsReview = true; ` +
|
|
189
|
-
`select one in the TUI to drill in. ` +
|
|
190
|
-
`See https://github.com/contentful/experience-design-system-sdk-public/pull/44 for context and partner workarounds.`;
|
|
191
|
-
return [summary, ...others];
|
|
192
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import os from 'node:os';
|
|
2
|
-
import { runFileExtractionWorkers } from '../shared/helpers/file-processing/file-workers.js';
|
|
3
|
-
import { createSortedExtractionResult } from '../shared/helpers/file-processing/result-normalizer.js';
|
|
4
|
-
import { parse as parseSFC } from '@vue/compiler-sfc';
|
|
5
|
-
import { resolveVueComponentName } from './helpers/resolve-vue-component-name.js';
|
|
6
|
-
import { extractSlotsFromVueTemplate, collectRuntimeAccessSlots, mergeVueSlots } from './helpers/extract-vue-slots.js';
|
|
7
|
-
import { extractVueSetupProps } from './helpers/extract-vue-setup-props.js';
|
|
8
|
-
import { extractVueOptionsProps } from './helpers/extract-vue-options-props.js';
|
|
9
|
-
export async function extractVueComponents(filePaths, onProgress) {
|
|
10
|
-
const vueFiles = filePaths.filter((f) => f.endsWith('.vue'));
|
|
11
|
-
const { items: components, warnings } = await runFileExtractionWorkers(vueFiles, os.cpus().length, async (filePath, source) => {
|
|
12
|
-
const { component, warnings: fileWarnings } = await extractFromVueSFC(filePath, source);
|
|
13
|
-
return { item: component, warnings: fileWarnings };
|
|
14
|
-
}, (filePath, error) => `Failed to extract from ${filePath}: ${error instanceof Error ? error.message : String(error)}`, onProgress);
|
|
15
|
-
return createSortedExtractionResult(components, warnings);
|
|
16
|
-
}
|
|
17
|
-
async function extractFromVueSFC(filePath, source) {
|
|
18
|
-
const { descriptor, errors } = parseSFC(source);
|
|
19
|
-
const fileWarnings = errors.map((e) => `Parse error in ${filePath}: ${e instanceof Error ? e.message : String(e)}`);
|
|
20
|
-
const name = resolveVueComponentName(filePath);
|
|
21
|
-
let props = [];
|
|
22
|
-
const setupProps = descriptor.scriptSetup
|
|
23
|
-
? await extractVueSetupProps(filePath, descriptor.scriptSetup.content)
|
|
24
|
-
: null;
|
|
25
|
-
if (setupProps !== null) {
|
|
26
|
-
props = setupProps;
|
|
27
|
-
}
|
|
28
|
-
else if (descriptor.script) {
|
|
29
|
-
return extractOptionsApiComponent(filePath, descriptor.script.content, fileWarnings, name, descriptor.template?.ast, source);
|
|
30
|
-
}
|
|
31
|
-
const templateSlots = descriptor.template?.ast ? extractSlotsFromVueTemplate(descriptor.template.ast) : [];
|
|
32
|
-
const slots = mergeVueSlots(templateSlots, collectRuntimeAccessSlots(source));
|
|
33
|
-
return {
|
|
34
|
-
component: {
|
|
35
|
-
name,
|
|
36
|
-
source: filePath,
|
|
37
|
-
sourcePath: filePath,
|
|
38
|
-
framework: 'vue',
|
|
39
|
-
props,
|
|
40
|
-
slots,
|
|
41
|
-
},
|
|
42
|
-
warnings: fileWarnings,
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
async function extractOptionsApiComponent(filePath, scriptContent, fileWarnings, name, templateAst, sfcSource) {
|
|
46
|
-
const props = await extractVueOptionsProps(filePath, scriptContent);
|
|
47
|
-
const templateSlots = templateAst ? extractSlotsFromVueTemplate(templateAst) : [];
|
|
48
|
-
const runtimeSlots = sfcSource ? collectRuntimeAccessSlots(sfcSource) : [];
|
|
49
|
-
const slots = mergeVueSlots(templateSlots, runtimeSlots);
|
|
50
|
-
return {
|
|
51
|
-
component: {
|
|
52
|
-
name,
|
|
53
|
-
source: filePath,
|
|
54
|
-
sourcePath: filePath,
|
|
55
|
-
framework: 'vue',
|
|
56
|
-
props,
|
|
57
|
-
slots,
|
|
58
|
-
},
|
|
59
|
-
warnings: fileWarnings,
|
|
60
|
-
};
|
|
61
|
-
}
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import { Node } from 'ts-morph';
|
|
2
|
-
const VUE_TYPE_MAP = {
|
|
3
|
-
String: 'string',
|
|
4
|
-
Number: 'number',
|
|
5
|
-
Boolean: 'boolean',
|
|
6
|
-
Array: 'any[]',
|
|
7
|
-
Object: 'object',
|
|
8
|
-
Function: 'function',
|
|
9
|
-
Date: 'Date',
|
|
10
|
-
Symbol: 'symbol',
|
|
11
|
-
};
|
|
12
|
-
export function isPublicVuePropName(name) {
|
|
13
|
-
return !/^[_$]/.test(name);
|
|
14
|
-
}
|
|
15
|
-
export function parseVueObjectProps(obj) {
|
|
16
|
-
if (!Node.isObjectLiteralExpression(obj))
|
|
17
|
-
return [];
|
|
18
|
-
const result = [];
|
|
19
|
-
for (const prop of obj.getProperties()) {
|
|
20
|
-
if (!Node.isPropertyAssignment(prop))
|
|
21
|
-
continue;
|
|
22
|
-
const name = prop.getName();
|
|
23
|
-
if (!isPublicVuePropName(name))
|
|
24
|
-
continue;
|
|
25
|
-
const init = prop.getInitializer();
|
|
26
|
-
if (!init || !Node.isObjectLiteralExpression(init)) {
|
|
27
|
-
result.push({
|
|
28
|
-
name,
|
|
29
|
-
type: VUE_TYPE_MAP[init?.getText() ?? ''] ?? 'any',
|
|
30
|
-
required: false,
|
|
31
|
-
sourceStartLine: prop.getStartLineNumber(),
|
|
32
|
-
sourceEndLine: prop.getEndLineNumber(),
|
|
33
|
-
});
|
|
34
|
-
continue;
|
|
35
|
-
}
|
|
36
|
-
const typeProp = init.getProperty('type');
|
|
37
|
-
const requiredProp = init.getProperty('required');
|
|
38
|
-
const defaultProp = init.getProperty('default');
|
|
39
|
-
let type = 'any';
|
|
40
|
-
if (typeProp && Node.isPropertyAssignment(typeProp)) {
|
|
41
|
-
const typeInit = typeProp.getInitializer();
|
|
42
|
-
if (typeInit)
|
|
43
|
-
type = VUE_TYPE_MAP[typeInit.getText()] ?? 'any';
|
|
44
|
-
}
|
|
45
|
-
let required = false;
|
|
46
|
-
if (requiredProp && Node.isPropertyAssignment(requiredProp)) {
|
|
47
|
-
const reqInit = requiredProp.getInitializer();
|
|
48
|
-
if (reqInit)
|
|
49
|
-
required = reqInit.getText() === 'true';
|
|
50
|
-
}
|
|
51
|
-
let defaultValue;
|
|
52
|
-
if (defaultProp && Node.isPropertyAssignment(defaultProp)) {
|
|
53
|
-
const defInit = defaultProp.getInitializer();
|
|
54
|
-
if (defInit)
|
|
55
|
-
defaultValue = defInit.getText().replace(/^['"]|['"]$/g, '');
|
|
56
|
-
}
|
|
57
|
-
result.push({
|
|
58
|
-
name,
|
|
59
|
-
type,
|
|
60
|
-
required,
|
|
61
|
-
...(defaultValue !== undefined && { defaultValue }),
|
|
62
|
-
sourceStartLine: prop.getStartLineNumber(),
|
|
63
|
-
sourceEndLine: prop.getEndLineNumber(),
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
return result;
|
|
67
|
-
}
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import type { RawPropDefinition } from '../../../types/component.js';
|
|
2
|
-
export { isPublicVuePropName, parseVueObjectProps } from './extract-vue-object-props.js';
|
|
3
|
-
export declare function extractVueOptionsProps(filePath: string, scriptContent: string, visited?: Set<string>): Promise<RawPropDefinition[]>;
|
|
4
|
-
export declare function extractInheritedVueProps(filePath: string, visited: Set<string>): Promise<RawPropDefinition[]>;
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
import { resolve, dirname } from 'node:path';
|
|
2
|
-
import { readFile } from 'node:fs/promises';
|
|
3
|
-
import { parse as parseSFC } from '@vue/compiler-sfc';
|
|
4
|
-
import { Node, Project } from 'ts-morph';
|
|
5
|
-
import { resolveWorkspaceVueImport } from './resolve-workspace-module.js';
|
|
6
|
-
import { parseVueObjectProps } from './extract-vue-object-props.js';
|
|
7
|
-
export { isPublicVuePropName, parseVueObjectProps } from './extract-vue-object-props.js';
|
|
8
|
-
export async function extractVueOptionsProps(filePath, scriptContent, visited = new Set()) {
|
|
9
|
-
const resolvedFilePath = resolve(filePath);
|
|
10
|
-
if (visited.has(resolvedFilePath))
|
|
11
|
-
return [];
|
|
12
|
-
visited.add(resolvedFilePath);
|
|
13
|
-
const project = new Project({
|
|
14
|
-
compilerOptions: { strict: false, target: 99, module: 99, allowJs: true },
|
|
15
|
-
useInMemoryFileSystem: true,
|
|
16
|
-
skipAddingFilesFromTsConfig: true,
|
|
17
|
-
});
|
|
18
|
-
const sf = project.createSourceFile('__options__.ts', scriptContent);
|
|
19
|
-
const localImports = new Map();
|
|
20
|
-
for (const importDecl of sf.getImportDeclarations()) {
|
|
21
|
-
const specifier = importDecl.getModuleSpecifierValue();
|
|
22
|
-
const defaultImport = importDecl.getDefaultImport();
|
|
23
|
-
if (!defaultImport)
|
|
24
|
-
continue;
|
|
25
|
-
if (specifier.startsWith('.')) {
|
|
26
|
-
if (!specifier.endsWith('.vue'))
|
|
27
|
-
continue;
|
|
28
|
-
localImports.set(defaultImport.getText(), resolve(dirname(resolvedFilePath), specifier));
|
|
29
|
-
}
|
|
30
|
-
else {
|
|
31
|
-
const resolvedVuePath = resolveWorkspaceVueImport(specifier, resolvedFilePath);
|
|
32
|
-
if (resolvedVuePath)
|
|
33
|
-
localImports.set(defaultImport.getText(), resolvedVuePath);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
for (const node of sf.getDescendants()) {
|
|
37
|
-
if (!Node.isExportAssignment(node))
|
|
38
|
-
continue;
|
|
39
|
-
const expr = node.getExpression();
|
|
40
|
-
if (!Node.isObjectLiteralExpression(expr))
|
|
41
|
-
continue;
|
|
42
|
-
const mergedProps = new Map();
|
|
43
|
-
const extendsProp = expr.getProperty('extends');
|
|
44
|
-
if (extendsProp && Node.isPropertyAssignment(extendsProp)) {
|
|
45
|
-
const extendsInit = extendsProp.getInitializer();
|
|
46
|
-
if (extendsInit && Node.isIdentifier(extendsInit)) {
|
|
47
|
-
const extendsPath = localImports.get(extendsInit.getText());
|
|
48
|
-
if (extendsPath) {
|
|
49
|
-
for (const prop of await extractInheritedVueProps(extendsPath, visited))
|
|
50
|
-
mergedProps.set(prop.name, prop);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
const propsProp = expr.getProperty('props');
|
|
55
|
-
if (!propsProp || !Node.isPropertyAssignment(propsProp))
|
|
56
|
-
return [...mergedProps.values()].sort((a, b) => a.name.localeCompare(b.name));
|
|
57
|
-
const propsInit = propsProp.getInitializer();
|
|
58
|
-
if (!propsInit || !Node.isObjectLiteralExpression(propsInit))
|
|
59
|
-
return [...mergedProps.values()].sort((a, b) => a.name.localeCompare(b.name));
|
|
60
|
-
for (const prop of parseVueObjectProps(propsInit))
|
|
61
|
-
mergedProps.set(prop.name, prop);
|
|
62
|
-
return [...mergedProps.values()].sort((a, b) => a.name.localeCompare(b.name));
|
|
63
|
-
}
|
|
64
|
-
return [];
|
|
65
|
-
}
|
|
66
|
-
export async function extractInheritedVueProps(filePath, visited) {
|
|
67
|
-
const source = await readFile(filePath, 'utf-8');
|
|
68
|
-
const { descriptor } = parseSFC(source);
|
|
69
|
-
if (!descriptor.script)
|
|
70
|
-
return [];
|
|
71
|
-
return extractVueOptionsProps(filePath, descriptor.script.content, visited);
|
|
72
|
-
}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { RawPropDefinition } from '../../../types/component.js';
|
|
2
|
-
type SetupImportedObjectRef = {
|
|
3
|
-
filePath: string;
|
|
4
|
-
exportName: string;
|
|
5
|
-
};
|
|
6
|
-
export declare function collectSetupImportedObjectRefs(sf: import('ts-morph').SourceFile, filePath: string): Map<string, SetupImportedObjectRef>;
|
|
7
|
-
export declare function mergeSetupObjectProps(obj: import('ts-morph').ObjectLiteralExpression, importedObjectRefs: Map<string, SetupImportedObjectRef>, visitedImports: Set<string>): Promise<RawPropDefinition[]>;
|
|
8
|
-
export {};
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import { readFile } from 'node:fs/promises';
|
|
2
|
-
import { Project, Node } from 'ts-morph';
|
|
3
|
-
import { resolveLocalModule } from '../../shared/helpers/resolve-import-file-path.js';
|
|
4
|
-
import { parseVueObjectProps } from './extract-vue-object-props.js';
|
|
5
|
-
export function collectSetupImportedObjectRefs(sf, filePath) {
|
|
6
|
-
const refs = new Map();
|
|
7
|
-
for (const importDecl of sf.getImportDeclarations()) {
|
|
8
|
-
const specifier = importDecl.getModuleSpecifierValue();
|
|
9
|
-
if (!specifier.startsWith('.'))
|
|
10
|
-
continue;
|
|
11
|
-
const resolvedImportPath = resolveLocalModule(filePath, specifier);
|
|
12
|
-
if (!resolvedImportPath)
|
|
13
|
-
continue;
|
|
14
|
-
for (const namedImport of importDecl.getNamedImports()) {
|
|
15
|
-
refs.set(namedImport.getAliasNode()?.getText() ?? namedImport.getName(), {
|
|
16
|
-
filePath: resolvedImportPath,
|
|
17
|
-
exportName: namedImport.getName(),
|
|
18
|
-
});
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
return refs;
|
|
22
|
-
}
|
|
23
|
-
async function extractImportedObjectExportProps(importedRef, visitedImports) {
|
|
24
|
-
const visitKey = `${importedRef.filePath}:${importedRef.exportName}`;
|
|
25
|
-
if (visitedImports.has(visitKey))
|
|
26
|
-
return [];
|
|
27
|
-
visitedImports.add(visitKey);
|
|
28
|
-
const source = await readFile(importedRef.filePath, 'utf-8');
|
|
29
|
-
const project = new Project({
|
|
30
|
-
compilerOptions: { strict: false, target: 99, module: 99, allowJs: true },
|
|
31
|
-
useInMemoryFileSystem: true,
|
|
32
|
-
skipAddingFilesFromTsConfig: true,
|
|
33
|
-
});
|
|
34
|
-
const sf = project.createSourceFile('__imported_object__.ts', source);
|
|
35
|
-
for (const declaration of sf.getVariableDeclarations()) {
|
|
36
|
-
if (declaration.getName() !== importedRef.exportName)
|
|
37
|
-
continue;
|
|
38
|
-
const initializer = declaration.getInitializer();
|
|
39
|
-
if (!initializer || !Node.isObjectLiteralExpression(initializer))
|
|
40
|
-
continue;
|
|
41
|
-
return parseVueObjectProps(initializer);
|
|
42
|
-
}
|
|
43
|
-
return [];
|
|
44
|
-
}
|
|
45
|
-
export async function mergeSetupObjectProps(obj, importedObjectRefs, visitedImports) {
|
|
46
|
-
const mergedProps = new Map();
|
|
47
|
-
for (const prop of parseVueObjectProps(obj))
|
|
48
|
-
mergedProps.set(prop.name, prop);
|
|
49
|
-
for (const prop of obj.getProperties()) {
|
|
50
|
-
if (!Node.isSpreadAssignment(prop))
|
|
51
|
-
continue;
|
|
52
|
-
const expression = prop.getExpression();
|
|
53
|
-
if (!Node.isIdentifier(expression))
|
|
54
|
-
continue;
|
|
55
|
-
const importedRef = importedObjectRefs.get(expression.getText());
|
|
56
|
-
if (!importedRef)
|
|
57
|
-
continue;
|
|
58
|
-
for (const importedProp of await extractImportedObjectExportProps(importedRef, visitedImports)) {
|
|
59
|
-
if (!mergedProps.has(importedProp.name))
|
|
60
|
-
mergedProps.set(importedProp.name, importedProp);
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
return [...mergedProps.values()].sort((a, b) => a.name.localeCompare(b.name));
|
|
64
|
-
}
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import { Project, Node } from 'ts-morph';
|
|
2
|
-
import { resolveTypeProperty } from '../../shared/helpers/resolve-type-symbol.js';
|
|
3
|
-
import { collectSetupImportedObjectRefs, mergeSetupObjectProps } from './extract-vue-setup-object-props.js';
|
|
4
|
-
function extractGenericSetupProps(typeText) {
|
|
5
|
-
const project = new Project({
|
|
6
|
-
compilerOptions: { strict: true, target: 99, module: 99 },
|
|
7
|
-
useInMemoryFileSystem: true,
|
|
8
|
-
skipAddingFilesFromTsConfig: true,
|
|
9
|
-
});
|
|
10
|
-
const sf = project.createSourceFile('__props__.ts', `type __Props__ = ${typeText};`);
|
|
11
|
-
const typeAlias = sf.getTypeAlias('__Props__');
|
|
12
|
-
if (!typeAlias)
|
|
13
|
-
return [];
|
|
14
|
-
const props = [];
|
|
15
|
-
for (const property of typeAlias.getType().getProperties()) {
|
|
16
|
-
const resolved = resolveTypeProperty(property);
|
|
17
|
-
if (!resolved)
|
|
18
|
-
continue;
|
|
19
|
-
let { typeText: resolvedTypeText } = resolved;
|
|
20
|
-
if (!resolved.required) {
|
|
21
|
-
resolvedTypeText = resolvedTypeText.replace(/\s*\|\s*undefined$/, '').replace(/^undefined\s*\|\s*/, '');
|
|
22
|
-
}
|
|
23
|
-
props.push({
|
|
24
|
-
name: resolved.name,
|
|
25
|
-
type: resolvedTypeText,
|
|
26
|
-
required: resolved.required,
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
return props.sort((a, b) => a.name.localeCompare(b.name));
|
|
30
|
-
}
|
|
31
|
-
export async function extractVueSetupProps(filePath, scriptSetupContent) {
|
|
32
|
-
const project = new Project({
|
|
33
|
-
compilerOptions: { strict: false, target: 99, module: 99, allowJs: true },
|
|
34
|
-
useInMemoryFileSystem: true,
|
|
35
|
-
skipAddingFilesFromTsConfig: true,
|
|
36
|
-
});
|
|
37
|
-
const sf = project.createSourceFile('__setup__.ts', scriptSetupContent);
|
|
38
|
-
let genericTypeText = null;
|
|
39
|
-
sf.forEachDescendant((node) => {
|
|
40
|
-
if (genericTypeText !== null)
|
|
41
|
-
return;
|
|
42
|
-
if (Node.isCallExpression(node) &&
|
|
43
|
-
node.getExpression().getText() === 'defineProps' &&
|
|
44
|
-
node.getTypeArguments().length > 0) {
|
|
45
|
-
genericTypeText = node.getTypeArguments()[0].getText();
|
|
46
|
-
}
|
|
47
|
-
});
|
|
48
|
-
if (genericTypeText !== null)
|
|
49
|
-
return extractGenericSetupProps(genericTypeText);
|
|
50
|
-
const importedObjectRefs = collectSetupImportedObjectRefs(sf, filePath);
|
|
51
|
-
let objectProps = null;
|
|
52
|
-
const visitedImports = new Set();
|
|
53
|
-
for (const node of sf.getDescendants()) {
|
|
54
|
-
if (objectProps !== null)
|
|
55
|
-
break;
|
|
56
|
-
if (Node.isCallExpression(node) &&
|
|
57
|
-
node.getExpression().getText() === 'defineProps' &&
|
|
58
|
-
node.getTypeArguments().length === 0) {
|
|
59
|
-
const args = node.getArguments();
|
|
60
|
-
if (args.length > 0 && Node.isObjectLiteralExpression(args[0])) {
|
|
61
|
-
objectProps = await mergeSetupObjectProps(args[0], importedObjectRefs, visitedImports);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
return objectProps;
|
|
66
|
-
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import type { RawSlotDefinition } from '../../../types/component.js';
|
|
2
|
-
interface TemplateAttrNode {
|
|
3
|
-
type: number;
|
|
4
|
-
name?: string;
|
|
5
|
-
value?: {
|
|
6
|
-
content?: string;
|
|
7
|
-
};
|
|
8
|
-
}
|
|
9
|
-
interface TemplateAstNode {
|
|
10
|
-
type: number;
|
|
11
|
-
tag?: string;
|
|
12
|
-
props?: TemplateAttrNode[];
|
|
13
|
-
children?: (TemplateAstNode | unknown)[];
|
|
14
|
-
}
|
|
15
|
-
/** Walks the Vue template AST and collects all `<slot>` elements. */
|
|
16
|
-
export declare function extractSlotsFromVueTemplate(ast: TemplateAstNode): RawSlotDefinition[];
|
|
17
|
-
/**
|
|
18
|
-
* Detects slots referenced via `$slots.name` or `$slots['name']` in template or
|
|
19
|
-
* script content that aren't declared as `<slot>` tags.
|
|
20
|
-
*/
|
|
21
|
-
export declare function collectRuntimeAccessSlots(source: string): RawSlotDefinition[];
|
|
22
|
-
/** Merges two slot arrays, keeping the first occurrence of each slot name. */
|
|
23
|
-
export declare function mergeVueSlots(base: RawSlotDefinition[], extra: RawSlotDefinition[]): RawSlotDefinition[];
|
|
24
|
-
export {};
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
// @vue/compiler-core NodeTypes enum values (stable since Vue 3.0)
|
|
2
|
-
const ELEMENT_TYPE = 1;
|
|
3
|
-
const ATTRIBUTE_TYPE = 6;
|
|
4
|
-
/** Walks the Vue template AST and collects all `<slot>` elements. */
|
|
5
|
-
export function extractSlotsFromVueTemplate(ast) {
|
|
6
|
-
const slots = [];
|
|
7
|
-
function walk(node) {
|
|
8
|
-
if (node.type === ELEMENT_TYPE && node.tag === 'slot') {
|
|
9
|
-
const nameProp = node.props?.find((p) => p.type === ATTRIBUTE_TYPE && p.name === 'name');
|
|
10
|
-
const slotName = nameProp?.value?.content ?? 'default';
|
|
11
|
-
if (!slots.some((s) => s.name === slotName)) {
|
|
12
|
-
slots.push({ name: slotName, isDefault: slotName === 'default' });
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
if (node.children) {
|
|
16
|
-
for (const child of node.children) {
|
|
17
|
-
if (typeof child === 'object' && child !== null && 'type' in child) {
|
|
18
|
-
walk(child);
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
walk(ast);
|
|
24
|
-
return slots;
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Detects slots referenced via `$slots.name` or `$slots['name']` in template or
|
|
28
|
-
* script content that aren't declared as `<slot>` tags.
|
|
29
|
-
*/
|
|
30
|
-
export function collectRuntimeAccessSlots(source) {
|
|
31
|
-
const slots = [];
|
|
32
|
-
const seen = new Set();
|
|
33
|
-
const dotPattern = /\$slots\.([a-zA-Z_]\w*)/g;
|
|
34
|
-
const bracketPattern = /\$slots\[['"]([a-zA-Z_][\w-]*)['"]\]/g;
|
|
35
|
-
for (const pattern of [dotPattern, bracketPattern]) {
|
|
36
|
-
let match;
|
|
37
|
-
while ((match = pattern.exec(source)) !== null) {
|
|
38
|
-
const name = match[1];
|
|
39
|
-
if (!seen.has(name)) {
|
|
40
|
-
seen.add(name);
|
|
41
|
-
slots.push({ name, isDefault: name === 'default' });
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
return slots;
|
|
46
|
-
}
|
|
47
|
-
/** Merges two slot arrays, keeping the first occurrence of each slot name. */
|
|
48
|
-
export function mergeVueSlots(base, extra) {
|
|
49
|
-
const merged = [...base];
|
|
50
|
-
for (const slot of extra) {
|
|
51
|
-
if (!merged.some((s) => s.name === slot.name)) {
|
|
52
|
-
merged.push(slot);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
return merged;
|
|
56
|
-
}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { basename, dirname } from 'node:path';
|
|
2
|
-
/** Derives the component name from its .vue file path (uses parent directory name for index.vue files). */
|
|
3
|
-
export function resolveVueComponentName(filePath) {
|
|
4
|
-
const fileName = basename(filePath, '.vue');
|
|
5
|
-
if (fileName !== 'index') {
|
|
6
|
-
return fileName;
|
|
7
|
-
}
|
|
8
|
-
return basename(dirname(filePath)) || fileName;
|
|
9
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function resolveWorkspaceVueImport(specifier: string, importingFilePath: string): string | null;
|