@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/index.d.ts
CHANGED
|
@@ -1,27 +1,21 @@
|
|
|
1
|
-
export type { RawComponentDefinition, RawPropDefinition, RawSlotDefinition, ComponentExtractionResult, ExtractionExclusion, ExtractorProgress, ExtractionValidationIssue, ExtractionValidationIssueCode, } from './
|
|
2
|
-
export { stripScoringFields } from './
|
|
3
|
-
export
|
|
4
|
-
export
|
|
5
|
-
export {
|
|
6
|
-
export {
|
|
7
|
-
export
|
|
8
|
-
export {
|
|
9
|
-
export {
|
|
10
|
-
export {
|
|
11
|
-
export {
|
|
12
|
-
export {
|
|
13
|
-
export {
|
|
14
|
-
export {
|
|
15
|
-
export {
|
|
16
|
-
export {
|
|
17
|
-
export {
|
|
18
|
-
export {
|
|
19
|
-
export {
|
|
20
|
-
export
|
|
21
|
-
export {
|
|
22
|
-
export type { ComponentSourceInspection } from './extract/types/source-inspection.js';
|
|
23
|
-
export { validateExtractedComponents, shouldExcludeDueToValidation, formatExclusionWarning, formatExcludedComponentLines, } from './extract/services/quality/helpers/inspection/validate-extracted-components.js';
|
|
24
|
-
export { parseImportedNames } from './extract/helpers/evidence/parse-source-imports.js';
|
|
25
|
-
export { CONTENT_NAME_EXCEPTIONS, isReactNodeType, isArrayReactNodeType, shouldBeSlot, } from './extract/helpers/evidence/detect-slot-from-prop.js';
|
|
26
|
-
export { preClassifyProp, preClassifyComponent } from './extract/services/classification/classify-component-props.js';
|
|
27
|
-
export type { PreClassification } from './extract/types/classification.js';
|
|
1
|
+
export type { RawComponentDefinition, RawPropDefinition, RawSlotDefinition, ComponentExtractionResult, ExtractionExclusion, ExtractorProgress, ExtractorOptions, ComponentExtractor, ExtractionValidationIssue, ExtractionValidationIssueCode, } from './types.js';
|
|
2
|
+
export { stripScoringFields } from './types.js';
|
|
3
|
+
export { extractComponents } from './extract/pipeline.js';
|
|
4
|
+
export { extractReactComponents } from './extract/react.js';
|
|
5
|
+
export { extractVueComponents } from './extract/vue.js';
|
|
6
|
+
export { extractVueTsxComponents } from './extract/vue-tsx.js';
|
|
7
|
+
export { extractStencilComponents } from './extract/stencil.js';
|
|
8
|
+
export { extractAstroComponents } from './extract/astro.js';
|
|
9
|
+
export { extractWebComponentDefinitions } from './extract/web-components.js';
|
|
10
|
+
export { extractSvelteComponents } from './extract/svelte.js';
|
|
11
|
+
export { extractAllowedComponentsFromTypeText, extractAllowedComponentsFromJsdoc, } from './extract/slot-allowed-components.js';
|
|
12
|
+
export { isNonAuthorableComponent } from './extract/non-authorable-filter.js';
|
|
13
|
+
export { computeExtractionScore, deriveNeedsReview } from './extract/scoring.js';
|
|
14
|
+
export type { ExtractionScore, ExtractionScoreOptions, ExtractionConfidence } from './extract/scoring.js';
|
|
15
|
+
export { inspectComponentSource, describeReviewReasons, describeReviewReason, isDataWrapperReviewReason, HIGH_CONFIDENCE_DATA_FETCH_WRAPPER_REASON, POSSIBLE_DATA_FETCH_WRAPPER_REASON, ZERO_SURFACE_RENDERED_UI_REASON, } from './extract/source-inspection.js';
|
|
16
|
+
export type { ComponentSourceInspection } from './extract/source-inspection.js';
|
|
17
|
+
export { validateExtractedComponents, shouldExcludeDueToValidation, formatExclusionWarning, formatExcludedComponentLines, } from './extract/validate.js';
|
|
18
|
+
export { parseImportedNames } from './extract/parse-imported-names.js';
|
|
19
|
+
export { CONTENT_NAME_EXCEPTIONS, isReactNodeType, isArrayReactNodeType, shouldBeSlot, } from './extract/slot-detection.js';
|
|
20
|
+
export { preClassifyProp, preClassifyComponent } from './pre-classify.js';
|
|
21
|
+
export type { PreClassification } from './pre-classify.js';
|
package/dist/src/index.js
CHANGED
|
@@ -1,27 +1,23 @@
|
|
|
1
|
-
export { stripScoringFields } from './
|
|
1
|
+
export { stripScoringFields } from './types.js';
|
|
2
2
|
// Core extraction pipeline
|
|
3
|
-
export { extractComponents } from './extract/
|
|
4
|
-
export { extractEndpoint } from './extract/controller/extract-controller.js';
|
|
3
|
+
export { extractComponents } from './extract/pipeline.js';
|
|
5
4
|
// Framework-specific extractors
|
|
6
|
-
export { extractReactComponents } from './extract/
|
|
7
|
-
export { extractVueComponents } from './extract/
|
|
8
|
-
export { extractVueTsxComponents } from './extract/
|
|
9
|
-
export { extractStencilComponents } from './extract/
|
|
10
|
-
export { extractAstroComponents } from './extract/
|
|
11
|
-
export { extractWebComponentDefinitions } from './extract/
|
|
12
|
-
export { extractSvelteComponents } from './extract/
|
|
13
|
-
export { extractAllowedComponentsFromTypeText, extractAllowedComponentsFromJsdoc, } from './extract/
|
|
5
|
+
export { extractReactComponents } from './extract/react.js';
|
|
6
|
+
export { extractVueComponents } from './extract/vue.js';
|
|
7
|
+
export { extractVueTsxComponents } from './extract/vue-tsx.js';
|
|
8
|
+
export { extractStencilComponents } from './extract/stencil.js';
|
|
9
|
+
export { extractAstroComponents } from './extract/astro.js';
|
|
10
|
+
export { extractWebComponentDefinitions } from './extract/web-components.js';
|
|
11
|
+
export { extractSvelteComponents } from './extract/svelte.js';
|
|
12
|
+
export { extractAllowedComponentsFromTypeText, extractAllowedComponentsFromJsdoc, } from './extract/slot-allowed-components.js';
|
|
14
13
|
// Post-extraction filtering and scoring
|
|
15
|
-
export {
|
|
16
|
-
export {
|
|
17
|
-
|
|
18
|
-
export { hasNoAuthoringSurface as isNonAuthorableComponent } from './extract/services/quality/helpers/authorability/evaluate-authorability.js';
|
|
19
|
-
export { computeExtractionScore, deriveNeedsReview, } from './extract/services/quality/helpers/scoring/compute-extraction-score.js';
|
|
20
|
-
export { inspectComponentSource, describeReviewReasons, describeReviewReason, isDataWrapperReviewReason, HIGH_CONFIDENCE_DATA_FETCH_WRAPPER_REASON, POSSIBLE_DATA_FETCH_WRAPPER_REASON, ZERO_SURFACE_RENDERED_UI_REASON, } from './extract/services/quality/helpers/inspection/inspect-component-source.js';
|
|
14
|
+
export { isNonAuthorableComponent } from './extract/non-authorable-filter.js';
|
|
15
|
+
export { computeExtractionScore, deriveNeedsReview } from './extract/scoring.js';
|
|
16
|
+
export { inspectComponentSource, describeReviewReasons, describeReviewReason, isDataWrapperReviewReason, HIGH_CONFIDENCE_DATA_FETCH_WRAPPER_REASON, POSSIBLE_DATA_FETCH_WRAPPER_REASON, ZERO_SURFACE_RENDERED_UI_REASON, } from './extract/source-inspection.js';
|
|
21
17
|
// Validation
|
|
22
|
-
export { validateExtractedComponents, shouldExcludeDueToValidation, formatExclusionWarning, formatExcludedComponentLines, } from './extract/
|
|
23
|
-
export { parseImportedNames } from './extract/
|
|
18
|
+
export { validateExtractedComponents, shouldExcludeDueToValidation, formatExclusionWarning, formatExcludedComponentLines, } from './extract/validate.js';
|
|
19
|
+
export { parseImportedNames } from './extract/parse-imported-names.js';
|
|
24
20
|
// Slot detection helpers
|
|
25
|
-
export { CONTENT_NAME_EXCEPTIONS, isReactNodeType, isArrayReactNodeType, shouldBeSlot, } from './extract/
|
|
21
|
+
export { CONTENT_NAME_EXCEPTIONS, isReactNodeType, isArrayReactNodeType, shouldBeSlot, } from './extract/slot-detection.js';
|
|
26
22
|
// Pre-classification
|
|
27
|
-
export { preClassifyProp, preClassifyComponent } from './
|
|
23
|
+
export { preClassifyProp, preClassifyComponent } from './pre-classify.js';
|
package/dist/src/{extract/services/classification/classify-component-props.d.ts → pre-classify.d.ts}
RENAMED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import type { RawPropDefinition, RawComponentDefinition } from '
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import type { RawPropDefinition, RawComponentDefinition } from './types.js';
|
|
2
|
+
export interface PreClassification {
|
|
3
|
+
category: 'content' | 'design' | 'state' | 'exclude';
|
|
4
|
+
cdfTypeHint?: 'string' | 'enum' | 'richtext' | 'media' | 'boolean';
|
|
5
|
+
}
|
|
4
6
|
/**
|
|
5
7
|
* Deterministic pre-classification rule engine.
|
|
6
8
|
* Applies rules in priority order and returns on the first match.
|
package/dist/src/{extract/services/classification/classify-component-props.js → pre-classify.js}
RENAMED
|
@@ -1,5 +1,96 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Determines whether a type string represents a simple/primitive type
|
|
3
|
+
* (string, boolean, number, or string literal union) vs a complex type
|
|
4
|
+
* (object, function, array, generic, etc.).
|
|
5
|
+
*/
|
|
6
|
+
function isSimpleType(type) {
|
|
7
|
+
const t = type.trim();
|
|
8
|
+
if (t === 'string' || t === 'boolean' || t === 'number')
|
|
9
|
+
return true;
|
|
10
|
+
// String literal union (e.g., "'a' | 'b'")
|
|
11
|
+
if (isStringLiteralUnion(t))
|
|
12
|
+
return true;
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
function isStringLiteralUnion(type) {
|
|
16
|
+
return type.includes('|') && type.includes("'");
|
|
17
|
+
}
|
|
18
|
+
function isBooleanType(type) {
|
|
19
|
+
return type.trim() === 'boolean';
|
|
20
|
+
}
|
|
21
|
+
function isStringType(type) {
|
|
22
|
+
return type.trim() === 'string';
|
|
23
|
+
}
|
|
24
|
+
function isNumberType(type) {
|
|
25
|
+
return type.trim() === 'number';
|
|
26
|
+
}
|
|
27
|
+
function isComplexType(type) {
|
|
28
|
+
return !isSimpleType(type);
|
|
29
|
+
}
|
|
30
|
+
const DOM_PASS_THROUGH_PROPS = new Set([
|
|
31
|
+
// Bare HTML / framework styling pass-through
|
|
32
|
+
'className',
|
|
33
|
+
'class',
|
|
34
|
+
'classes',
|
|
35
|
+
'classNames',
|
|
36
|
+
'rootClassName',
|
|
37
|
+
'prefixCls',
|
|
38
|
+
'style',
|
|
39
|
+
'styles',
|
|
40
|
+
// Bare HTML attributes
|
|
41
|
+
'id',
|
|
42
|
+
'role',
|
|
43
|
+
'tabIndex',
|
|
44
|
+
'tabindex',
|
|
45
|
+
'htmlFor',
|
|
46
|
+
'for',
|
|
47
|
+
'slot',
|
|
48
|
+
'is',
|
|
49
|
+
'lang',
|
|
50
|
+
'dir',
|
|
51
|
+
'hidden',
|
|
52
|
+
'draggable',
|
|
53
|
+
'spellCheck',
|
|
54
|
+
'spellcheck',
|
|
55
|
+
'contentEditable',
|
|
56
|
+
'contenteditable',
|
|
57
|
+
'inputMode',
|
|
58
|
+
'inputmode',
|
|
59
|
+
'autoComplete',
|
|
60
|
+
'autocomplete',
|
|
61
|
+
'autoFocus',
|
|
62
|
+
'autofocus',
|
|
63
|
+
'translate',
|
|
64
|
+
'part',
|
|
65
|
+
'exportparts',
|
|
66
|
+
'aria',
|
|
67
|
+
// Framework theming / pass-through escape hatches — dev-facing, never marketer-configurable
|
|
68
|
+
'dt',
|
|
69
|
+
'pt',
|
|
70
|
+
'ptOptions',
|
|
71
|
+
'unstyled',
|
|
72
|
+
'sx',
|
|
73
|
+
// Polymorphic component props — change rendered HTML/component, not marketer-visible behavior
|
|
74
|
+
'as',
|
|
75
|
+
'element',
|
|
76
|
+
'component',
|
|
77
|
+
// QA / vendor test attributes
|
|
78
|
+
'dataQa',
|
|
79
|
+
'data-qa',
|
|
80
|
+
// Vue v-model internals — framework wiring, never marketer-configurable
|
|
81
|
+
'modelValue',
|
|
82
|
+
'modelModifiers',
|
|
83
|
+
]);
|
|
84
|
+
function isDomPassThroughProp(name) {
|
|
85
|
+
if (DOM_PASS_THROUGH_PROPS.has(name))
|
|
86
|
+
return true;
|
|
87
|
+
// aria-label, aria-hidden, ariaLabel, ariaHidden — both kebab and camel forms
|
|
88
|
+
if (/^aria[-A-Z]/.test(name))
|
|
89
|
+
return true;
|
|
90
|
+
if (name.startsWith('data-'))
|
|
91
|
+
return true;
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
3
94
|
/**
|
|
4
95
|
* Deterministic pre-classification rule engine.
|
|
5
96
|
* Applies rules in priority order and returns on the first match.
|
|
@@ -7,6 +98,7 @@ import { isDomPassThroughProp } from './helpers/detect-dom-props.js';
|
|
|
7
98
|
export function preClassifyProp(prop) {
|
|
8
99
|
const { name, type } = prop;
|
|
9
100
|
// Rule 1: Event handlers
|
|
101
|
+
// name starts with `on` + uppercase, OR type contains `=> void` or `EventHandler`
|
|
10
102
|
if (/^on[A-Z]/.test(name) || type.includes('=> void') || type.includes('EventHandler')) {
|
|
11
103
|
return { category: 'exclude' };
|
|
12
104
|
}
|
|
@@ -27,6 +119,9 @@ export function preClassifyProp(prop) {
|
|
|
27
119
|
return { category: 'exclude' };
|
|
28
120
|
}
|
|
29
121
|
// Rule 6: DOM / a11y / framework pass-through props
|
|
122
|
+
// These are escape hatches developers use to wire components into the DOM.
|
|
123
|
+
// Marketers should never configure them in the ExO editor; exposing them
|
|
124
|
+
// generates noise that obscures the props that actually carry intent.
|
|
30
125
|
if (isDomPassThroughProp(name)) {
|
|
31
126
|
return { category: 'exclude' };
|
|
32
127
|
}
|
|
@@ -116,18 +211,15 @@ export function preClassifyComponent(component) {
|
|
|
116
211
|
// Provenance is extraction-only evidence. Do not add it to the payload
|
|
117
212
|
// presented to downstream agents.
|
|
118
213
|
const { domAttribute: _domAttribute, ...authorableProp } = prop;
|
|
214
|
+
// If category is already set, leave unchanged
|
|
119
215
|
if (prop.category) {
|
|
120
216
|
return [authorableProp];
|
|
121
217
|
}
|
|
122
218
|
if (!result) {
|
|
123
219
|
return [authorableProp];
|
|
124
220
|
}
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
...authorableProp,
|
|
128
|
-
category: result.category,
|
|
129
|
-
},
|
|
130
|
-
];
|
|
221
|
+
// Set category hint
|
|
222
|
+
return [{ ...authorableProp, category: result.category }];
|
|
131
223
|
});
|
|
132
224
|
return { ...component, props };
|
|
133
225
|
}
|
|
@@ -76,3 +76,25 @@ export type ExtractorProgress = {
|
|
|
76
76
|
filesProcessed: number;
|
|
77
77
|
componentsFound: number;
|
|
78
78
|
};
|
|
79
|
+
/**
|
|
80
|
+
* Optional extraction-time settings forwarded from the CLI through the
|
|
81
|
+
* pipeline to each extractor. Only the Svelte extractor currently consumes
|
|
82
|
+
* any of these; other extractors ignore the value.
|
|
83
|
+
*/
|
|
84
|
+
export interface ExtractorOptions {
|
|
85
|
+
/**
|
|
86
|
+
* Whether the Svelte extractor should run a retry pass for components whose
|
|
87
|
+
* declared Props type couldn't be resolved on the first pass (cross-package
|
|
88
|
+
* extends, path-alias-only types, etc.). See svelte.ts for the policy.
|
|
89
|
+
*/
|
|
90
|
+
resolveUnreachable?: 'auto' | 'always' | 'never';
|
|
91
|
+
/** Absolute project root — used by the retry pass to locate tsconfig.json and node_modules. */
|
|
92
|
+
projectRoot?: string;
|
|
93
|
+
}
|
|
94
|
+
export interface ComponentExtractor {
|
|
95
|
+
name: string;
|
|
96
|
+
fileFilter: (filePath: string) => boolean;
|
|
97
|
+
extract(filePaths: string[], onProgress?: (p: ExtractorProgress) => void, opts?: ExtractorOptions): Promise<ComponentExtractionResult>;
|
|
98
|
+
}
|
|
99
|
+
/** Strip internal scoring fields before serialising a RawComponentDefinition for display or editing. */
|
|
100
|
+
export declare function stripScoringFields({ extractionConfidence: _c, reviewReasons: _r, needsReview: _n, ...rest }: RawComponentDefinition): Omit<RawComponentDefinition, 'extractionConfidence' | 'reviewReasons' | 'needsReview'>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/** Strip internal scoring fields before serialising a RawComponentDefinition for display or editing. */
|
|
2
2
|
export function stripScoringFields({ extractionConfidence: _c, reviewReasons: _r, needsReview: _n, ...rest }) {
|
|
3
3
|
return rest;
|
|
4
4
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@contentful/experience-design-system-extraction",
|
|
3
|
-
"version": "2.36.2-dev-build-
|
|
3
|
+
"version": "2.36.2-dev-build-a6f80ae6.0",
|
|
4
4
|
"description": "Component extraction engine for the Contentful Experience Design System SDK",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type { ExtractionEndpointRequest, ExtractionEndpointResponse } from '../types/contract.js';
|
|
2
|
-
export type { ExtractionEndpointProgress, ExtractionEndpointRequest, ExtractionEndpointResponse, } from '../types/contract.js';
|
|
3
|
-
/**
|
|
4
|
-
* Stable in-process extraction contract.
|
|
5
|
-
*
|
|
6
|
-
* The controller owns public request validation and progress translation. The
|
|
7
|
-
* extraction service owns source analysis and quality policy; neither layer
|
|
8
|
-
* scans directories, invokes agents, or persists sessions.
|
|
9
|
-
*/
|
|
10
|
-
export declare function extractEndpoint(request: ExtractionEndpointRequest): Promise<ExtractionEndpointResponse>;
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { executeExtractionOrchestrator } from '../orchestrator/execute-extraction-orchestrator.js';
|
|
2
|
-
import { validateRequest } from './helpers/validate-endpoint-request.js';
|
|
3
|
-
/**
|
|
4
|
-
* Stable in-process extraction contract.
|
|
5
|
-
*
|
|
6
|
-
* The controller owns public request validation and progress translation. The
|
|
7
|
-
* extraction service owns source analysis and quality policy; neither layer
|
|
8
|
-
* scans directories, invokes agents, or persists sessions.
|
|
9
|
-
*/
|
|
10
|
-
export async function extractEndpoint(request) {
|
|
11
|
-
validateRequest(request);
|
|
12
|
-
const filePaths = [...request.filePaths];
|
|
13
|
-
const result = await executeExtractionOrchestrator({
|
|
14
|
-
filePaths,
|
|
15
|
-
...(request.resolveUnreachable !== undefined ? { resolveUnreachable: request.resolveUnreachable } : {}),
|
|
16
|
-
...(request.projectRoot !== undefined ? { projectRoot: request.projectRoot } : {}),
|
|
17
|
-
onProgress: ({ filesProcessed, componentsFound }) => {
|
|
18
|
-
request.onProgress?.({
|
|
19
|
-
phase: 'extract',
|
|
20
|
-
filesProcessed,
|
|
21
|
-
totalFiles: filePaths.length,
|
|
22
|
-
componentsFound,
|
|
23
|
-
});
|
|
24
|
-
},
|
|
25
|
-
});
|
|
26
|
-
request.onProgress?.({
|
|
27
|
-
phase: 'extract',
|
|
28
|
-
filesProcessed: filePaths.length,
|
|
29
|
-
totalFiles: filePaths.length,
|
|
30
|
-
componentsFound: result.components.length,
|
|
31
|
-
});
|
|
32
|
-
return result;
|
|
33
|
-
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
export function validateRequest(request) {
|
|
2
|
-
if (request === null || typeof request !== 'object') {
|
|
3
|
-
throw new TypeError('extractEndpoint requires a request object');
|
|
4
|
-
}
|
|
5
|
-
if (!Array.isArray(request.filePaths)) {
|
|
6
|
-
throw new TypeError('extractEndpoint requires filePaths to be an array');
|
|
7
|
-
}
|
|
8
|
-
if (request.filePaths.some((filePath) => typeof filePath !== 'string' || filePath.trim().length === 0)) {
|
|
9
|
-
throw new TypeError('extractEndpoint requires filePaths to contain non-empty strings');
|
|
10
|
-
}
|
|
11
|
-
if (request.projectRoot !== undefined &&
|
|
12
|
-
(typeof request.projectRoot !== 'string' || request.projectRoot.trim().length === 0)) {
|
|
13
|
-
throw new TypeError('extractEndpoint requires projectRoot to be a non-empty string when provided');
|
|
14
|
-
}
|
|
15
|
-
if (request.resolveUnreachable !== undefined &&
|
|
16
|
-
request.resolveUnreachable !== 'auto' &&
|
|
17
|
-
request.resolveUnreachable !== 'always' &&
|
|
18
|
-
request.resolveUnreachable !== 'never') {
|
|
19
|
-
throw new TypeError("extractEndpoint requires resolveUnreachable to be 'auto', 'always', or 'never'");
|
|
20
|
-
}
|
|
21
|
-
if (request.onProgress !== undefined && typeof request.onProgress !== 'function') {
|
|
22
|
-
throw new TypeError('extractEndpoint requires onProgress to be a function when provided');
|
|
23
|
-
}
|
|
24
|
-
}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import os from 'node:os';
|
|
2
|
-
import { basename } from 'node:path';
|
|
3
|
-
import { runFileExtractionWorkers } from '../shared/helpers/file-processing/file-workers.js';
|
|
4
|
-
import { createSortedExtractionResult } from '../shared/helpers/file-processing/result-normalizer.js';
|
|
5
|
-
import { extractFallbackPropsFromFrontmatter, extractPropsFromFrontmatter, extractDefaultsFromFrontmatter, mergeProps, } from './frontmatter.js';
|
|
6
|
-
import { extractSlotsFromTemplate, extractSlotsFromFrontmatter, mergeSlots } from './slots.js';
|
|
7
|
-
function extractFromAstroFile(filePath, source) {
|
|
8
|
-
const name = basename(filePath, '.astro');
|
|
9
|
-
// Split on `---` fences: frontmatter is between first and second `---`.
|
|
10
|
-
// If there is no `---`, the entire file is a template-only component.
|
|
11
|
-
const fenceIndex = source.startsWith('---') ? 0 : -1;
|
|
12
|
-
let frontmatter = '';
|
|
13
|
-
let template = source;
|
|
14
|
-
if (fenceIndex !== -1) {
|
|
15
|
-
const endFenceIndex = source.indexOf('---', fenceIndex + 3);
|
|
16
|
-
if (endFenceIndex !== -1) {
|
|
17
|
-
frontmatter = source.slice(fenceIndex + 3, endFenceIndex);
|
|
18
|
-
template = source.slice(endFenceIndex + 3);
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
const props = frontmatter
|
|
22
|
-
? mergeProps(extractFallbackPropsFromFrontmatter(frontmatter), extractPropsFromFrontmatter(frontmatter))
|
|
23
|
-
: [];
|
|
24
|
-
const defaults = frontmatter ? extractDefaultsFromFrontmatter(frontmatter) : new Map();
|
|
25
|
-
const propsWithDefaults = props.map((p) => {
|
|
26
|
-
const defaultValue = defaults.get(p.name);
|
|
27
|
-
return defaultValue ? { ...p, defaultValue } : p;
|
|
28
|
-
});
|
|
29
|
-
const slots = mergeSlots(extractSlotsFromTemplate(template), extractSlotsFromFrontmatter(frontmatter));
|
|
30
|
-
return {
|
|
31
|
-
name,
|
|
32
|
-
source: filePath,
|
|
33
|
-
sourcePath: filePath,
|
|
34
|
-
framework: 'astro',
|
|
35
|
-
props: propsWithDefaults,
|
|
36
|
-
slots,
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
export async function extractAstroComponents(filePaths, onProgress) {
|
|
40
|
-
const astroFiles = filePaths.filter((f) => f.endsWith('.astro'));
|
|
41
|
-
const { items: components, warnings } = await runFileExtractionWorkers(astroFiles, os.cpus().length, async (filePath, source) => ({
|
|
42
|
-
item: extractFromAstroFile(filePath, source),
|
|
43
|
-
}), (filePath, error) => `Failed to extract from ${filePath}: ${error instanceof Error ? error.message : String(error)}`, onProgress);
|
|
44
|
-
return createSortedExtractionResult(components, warnings);
|
|
45
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { RawPropDefinition } from '../../types/component.js';
|
|
2
|
-
/** Returns the string literals from a union type like `'a' | 'b' | 'c'`, or undefined if fewer than two are found. */
|
|
3
|
-
export declare function extractAllowedValues(typeText: string): string[] | undefined;
|
|
4
|
-
/** Reads prop names and requiredness from destructured `Astro.props` bindings when no typed Props interface exists. */
|
|
5
|
-
export declare function extractFallbackPropsFromFrontmatter(frontmatter: string): RawPropDefinition[];
|
|
6
|
-
/** Reads typed props from an `interface Props` or `type Props = ...` declaration in the frontmatter. */
|
|
7
|
-
export declare function extractPropsFromFrontmatter(frontmatter: string): RawPropDefinition[];
|
|
8
|
-
/** Reads default values from destructuring initializers in `const { foo = 'bar' } = Astro.props`. */
|
|
9
|
-
export declare function extractDefaultsFromFrontmatter(frontmatter: string): Map<string, string>;
|
|
10
|
-
/** Merges multiple prop arrays, preferring later entries on name collision and treating a prop as required only if all sources require it. */
|
|
11
|
-
export declare function mergeProps(...propGroups: RawPropDefinition[][]): RawPropDefinition[];
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
import { resolveTypeProperty } from '../shared/helpers/resolve-type-symbol.js';
|
|
2
|
-
import { getSourceLineMetadata } from '../shared/helpers/get-node-source-lines.js';
|
|
3
|
-
import { createAstroFrontmatterProject, collectAstroPropsBindings, extractBindingPropName, } from './helpers/collect-astro-props-bindings.js';
|
|
4
|
-
/** Returns the string literals from a union type like `'a' | 'b' | 'c'`, or undefined if fewer than two are found. */
|
|
5
|
-
export function extractAllowedValues(typeText) {
|
|
6
|
-
const parts = typeText.split('|').map((p) => p.trim());
|
|
7
|
-
const literals = parts.filter((p) => /^['"]/.test(p)).map((p) => p.replace(/^['"]|['"]$/g, ''));
|
|
8
|
-
return literals.length >= 2 ? literals.sort() : undefined;
|
|
9
|
-
}
|
|
10
|
-
/** Reads prop names and requiredness from destructured `Astro.props` bindings when no typed Props interface exists. */
|
|
11
|
-
export function extractFallbackPropsFromFrontmatter(frontmatter) {
|
|
12
|
-
const props = new Map();
|
|
13
|
-
for (const element of collectAstroPropsBindings(frontmatter)) {
|
|
14
|
-
const propName = extractBindingPropName(element);
|
|
15
|
-
if (!propName)
|
|
16
|
-
continue;
|
|
17
|
-
props.set(propName, {
|
|
18
|
-
name: propName,
|
|
19
|
-
type: 'any',
|
|
20
|
-
required: !element.getInitializer(),
|
|
21
|
-
});
|
|
22
|
-
}
|
|
23
|
-
return [...props.values()].sort((a, b) => a.name.localeCompare(b.name));
|
|
24
|
-
}
|
|
25
|
-
/** Reads typed props from an `interface Props` or `type Props = ...` declaration in the frontmatter. */
|
|
26
|
-
export function extractPropsFromFrontmatter(frontmatter) {
|
|
27
|
-
const sf = createAstroFrontmatterProject().createSourceFile('__frontmatter__.ts', frontmatter);
|
|
28
|
-
const props = [];
|
|
29
|
-
const propsInterface = sf.getInterface('Props');
|
|
30
|
-
const propsTypeAlias = sf.getTypeAlias('Props');
|
|
31
|
-
if (propsInterface) {
|
|
32
|
-
for (const member of propsInterface.getProperties()) {
|
|
33
|
-
const name = member.getName();
|
|
34
|
-
const typeText = member.getTypeNode()?.getText() ?? 'any';
|
|
35
|
-
const required = !member.hasQuestionToken();
|
|
36
|
-
const allowedValues = extractAllowedValues(typeText);
|
|
37
|
-
props.push({
|
|
38
|
-
name,
|
|
39
|
-
type: typeText,
|
|
40
|
-
required,
|
|
41
|
-
...(allowedValues && { allowedValues }),
|
|
42
|
-
sourceStartLine: member.getStartLineNumber(),
|
|
43
|
-
sourceEndLine: member.getEndLineNumber(),
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
else if (propsTypeAlias) {
|
|
48
|
-
const type = propsTypeAlias.getType();
|
|
49
|
-
for (const property of type.getProperties()) {
|
|
50
|
-
const resolved = resolveTypeProperty(property);
|
|
51
|
-
if (!resolved)
|
|
52
|
-
continue;
|
|
53
|
-
const { name, declaration: decl, typeText, required } = resolved;
|
|
54
|
-
const allowedValues = extractAllowedValues(typeText);
|
|
55
|
-
props.push({
|
|
56
|
-
name,
|
|
57
|
-
type: typeText,
|
|
58
|
-
required,
|
|
59
|
-
...(allowedValues && { allowedValues }),
|
|
60
|
-
...getSourceLineMetadata(decl),
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
return props.sort((a, b) => a.name.localeCompare(b.name));
|
|
65
|
-
}
|
|
66
|
-
/** Reads default values from destructuring initializers in `const { foo = 'bar' } = Astro.props`. */
|
|
67
|
-
export function extractDefaultsFromFrontmatter(frontmatter) {
|
|
68
|
-
const defaults = new Map();
|
|
69
|
-
for (const element of collectAstroPropsBindings(frontmatter)) {
|
|
70
|
-
const propName = extractBindingPropName(element);
|
|
71
|
-
if (!propName)
|
|
72
|
-
continue;
|
|
73
|
-
const elementInitializer = element.getInitializer();
|
|
74
|
-
if (!elementInitializer)
|
|
75
|
-
continue;
|
|
76
|
-
defaults.set(propName, elementInitializer.getText().replace(/^['"]|['"]$/g, ''));
|
|
77
|
-
}
|
|
78
|
-
return defaults;
|
|
79
|
-
}
|
|
80
|
-
/** Merges multiple prop arrays, preferring later entries on name collision and treating a prop as required only if all sources require it. */
|
|
81
|
-
export function mergeProps(...propGroups) {
|
|
82
|
-
const merged = new Map();
|
|
83
|
-
for (const props of propGroups) {
|
|
84
|
-
for (const prop of props) {
|
|
85
|
-
const existing = merged.get(prop.name);
|
|
86
|
-
merged.set(prop.name, existing
|
|
87
|
-
? {
|
|
88
|
-
...existing,
|
|
89
|
-
...prop,
|
|
90
|
-
required: existing.required && prop.required,
|
|
91
|
-
}
|
|
92
|
-
: prop);
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
return [...merged.values()].sort((a, b) => a.name.localeCompare(b.name));
|
|
96
|
-
}
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import { Project } from 'ts-morph';
|
|
2
|
-
export declare function createAstroFrontmatterProject(): Project;
|
|
3
|
-
export declare function extractBindingPropName(element: import('ts-morph').BindingElement): string | null;
|
|
4
|
-
export declare function collectAstroPropsBindings(frontmatter: string): import('ts-morph').BindingElement[];
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import { Node, Project } from 'ts-morph';
|
|
2
|
-
export function createAstroFrontmatterProject() {
|
|
3
|
-
return new Project({
|
|
4
|
-
compilerOptions: { strict: false, target: 99, module: 99, allowJs: true },
|
|
5
|
-
useInMemoryFileSystem: true,
|
|
6
|
-
skipAddingFilesFromTsConfig: true,
|
|
7
|
-
});
|
|
8
|
-
}
|
|
9
|
-
function usesAstroProps(initializer) {
|
|
10
|
-
if (!initializer)
|
|
11
|
-
return false;
|
|
12
|
-
if (initializer.getText() === 'Astro.props')
|
|
13
|
-
return true;
|
|
14
|
-
let found = false;
|
|
15
|
-
initializer.forEachDescendant((node) => {
|
|
16
|
-
if (found)
|
|
17
|
-
return false;
|
|
18
|
-
if (Node.isPropertyAccessExpression(node) && node.getText() === 'Astro.props') {
|
|
19
|
-
found = true;
|
|
20
|
-
return false;
|
|
21
|
-
}
|
|
22
|
-
return undefined;
|
|
23
|
-
});
|
|
24
|
-
return found;
|
|
25
|
-
}
|
|
26
|
-
export function extractBindingPropName(element) {
|
|
27
|
-
if (element.getText().startsWith('...'))
|
|
28
|
-
return null;
|
|
29
|
-
return element.getPropertyNameNode()?.getText() ?? element.getNameNode().getText();
|
|
30
|
-
}
|
|
31
|
-
export function collectAstroPropsBindings(frontmatter) {
|
|
32
|
-
const elements = [];
|
|
33
|
-
const sf = createAstroFrontmatterProject().createSourceFile('__frontmatter__.ts', frontmatter);
|
|
34
|
-
sf.forEachDescendant((node) => {
|
|
35
|
-
if (!Node.isVariableDeclaration(node))
|
|
36
|
-
return;
|
|
37
|
-
const initializer = node.getInitializer();
|
|
38
|
-
if (!initializer || !usesAstroProps(initializer))
|
|
39
|
-
return;
|
|
40
|
-
const nameNode = node.getNameNode();
|
|
41
|
-
if (!Node.isObjectBindingPattern(nameNode))
|
|
42
|
-
return;
|
|
43
|
-
for (const element of nameNode.getElements())
|
|
44
|
-
elements.push(element);
|
|
45
|
-
});
|
|
46
|
-
return elements;
|
|
47
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { RawSlotDefinition } from '../../types/component.js';
|
|
2
|
-
/** Finds `<slot name="...">` tags in the Astro template section. */
|
|
3
|
-
export declare function extractSlotsFromTemplate(template: string): RawSlotDefinition[];
|
|
4
|
-
/** Finds `Astro.slots.render('name')` calls in the frontmatter to detect programmatically-rendered slots. */
|
|
5
|
-
export declare function extractSlotsFromFrontmatter(frontmatter: string): RawSlotDefinition[];
|
|
6
|
-
/** Merges slot arrays, keeping the first occurrence of each name. */
|
|
7
|
-
export declare function mergeSlots(...slotGroups: RawSlotDefinition[][]): RawSlotDefinition[];
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
/** Finds `<slot name="...">` tags in the Astro template section. */
|
|
2
|
-
export function extractSlotsFromTemplate(template) {
|
|
3
|
-
const slots = [];
|
|
4
|
-
const seen = new Set();
|
|
5
|
-
const slotRegex = /<slot(?:\s+name=["']([^"']+)["'])?\s*\/?>/g;
|
|
6
|
-
let match;
|
|
7
|
-
while ((match = slotRegex.exec(template)) !== null) {
|
|
8
|
-
const slotName = match[1] ?? 'default';
|
|
9
|
-
if (!seen.has(slotName)) {
|
|
10
|
-
seen.add(slotName);
|
|
11
|
-
slots.push({ name: slotName, isDefault: slotName === 'default' });
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
return slots;
|
|
15
|
-
}
|
|
16
|
-
/** Finds `Astro.slots.render('name')` calls in the frontmatter to detect programmatically-rendered slots. */
|
|
17
|
-
export function extractSlotsFromFrontmatter(frontmatter) {
|
|
18
|
-
const slots = [];
|
|
19
|
-
const seen = new Set();
|
|
20
|
-
const slotRenderRegex = /Astro\.slots\.render\(\s*['"]([^'"]+)['"]\s*\)/g;
|
|
21
|
-
let match;
|
|
22
|
-
while ((match = slotRenderRegex.exec(frontmatter)) !== null) {
|
|
23
|
-
const slotName = match[1];
|
|
24
|
-
if (!seen.has(slotName)) {
|
|
25
|
-
seen.add(slotName);
|
|
26
|
-
slots.push({ name: slotName, isDefault: slotName === 'default' });
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
return slots;
|
|
30
|
-
}
|
|
31
|
-
/** Merges slot arrays, keeping the first occurrence of each name. */
|
|
32
|
-
export function mergeSlots(...slotGroups) {
|
|
33
|
-
const merged = [];
|
|
34
|
-
const seen = new Set();
|
|
35
|
-
for (const slots of slotGroups) {
|
|
36
|
-
for (const slot of slots) {
|
|
37
|
-
if (seen.has(slot.name))
|
|
38
|
-
continue;
|
|
39
|
-
seen.add(slot.name);
|
|
40
|
-
merged.push(slot);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
return merged;
|
|
44
|
-
}
|