@astryxdesign/cli 0.6.3 → 0.6.4-canary.06c8fa3
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/CHANGELOG.md +194 -0
- package/README.md +121 -85
- package/api/blog/blog.doc.mjs +1 -0
- package/api/build/_adapter.d.mts +50 -0
- package/api/build/_adapter.mjs +60 -0
- package/api/build/build.doc.mjs +16 -9
- package/api/build/build.test.mjs +197 -8
- package/api/build/build.type.d.mts +91 -2
- package/api/build/build.type.mjs +52 -8
- package/api/build/help/help.d.mts +12 -5
- package/api/build/help/help.mjs +69 -6
- package/api/build/kit/kit.d.mts +4 -1
- package/api/build/kit/kit.mjs +165 -49
- package/api/build/kit/rank.d.mts +44 -0
- package/api/build/kit/rank.mjs +432 -0
- package/api/build/kit/rank.test.mjs +196 -0
- package/api/component/_adapter.d.mts +31 -12
- package/api/component/_adapter.mjs +79 -15
- package/api/component/component.d.mts +6 -3
- package/api/component/component.doc.mjs +36 -13
- package/api/component/component.mjs +339 -22
- package/api/component/component.test.mjs +38 -0
- package/api/component/component.type.d.mts +47 -11
- package/api/component/component.type.mjs +76 -24
- package/api/component/detail/blocks/blocks.d.mts +2 -1
- package/api/component/detail/blocks/blocks.mjs +4 -3
- package/api/component/list/list.d.mts +0 -5
- package/api/component/list/list.mjs +40 -11
- package/api/discover/_adapter.d.mts +114 -6
- package/api/discover/_adapter.mjs +372 -17
- package/api/discover/_adapter.test.mjs +215 -0
- package/api/discover/_catalog-view.d.mts +115 -0
- package/api/discover/_catalog-view.mjs +203 -0
- package/api/discover/_catalog-view.test.mjs +128 -0
- package/api/discover/detail/detail.d.mts +18 -6
- package/api/discover/detail/detail.mjs +67 -13
- package/api/discover/detail/detail.test.mjs +85 -0
- package/api/discover/detail/item/item.d.mts +26 -0
- package/api/discover/detail/item/item.mjs +78 -0
- package/api/discover/detail/item/item.test.mjs +73 -0
- package/api/discover/discover.d.mts +3 -9
- package/api/discover/discover.doc.mjs +62 -18
- package/api/discover/discover.mjs +220 -36
- package/api/discover/discover.test.mjs +11 -2
- package/api/discover/discover.type.d.mts +150 -11
- package/api/discover/discover.type.mjs +107 -17
- package/api/discover/list/list.d.mts +20 -6
- package/api/discover/list/list.mjs +45 -12
- package/api/discover/list/list.test.mjs +46 -0
- package/api/discover/search/search.d.mts +18 -16
- package/api/discover/search/search.mjs +102 -56
- package/api/discover/search/search.test.mjs +144 -10
- package/api/docs/_adapter.d.mts +272 -41
- package/api/docs/_adapter.mjs +985 -108
- package/api/docs/compiled-topics.test.mjs +78 -0
- package/api/docs/detail/detail.mjs +22 -63
- package/api/docs/detail/section/section.d.mts +1 -1
- package/api/docs/detail/section/section.mjs +54 -19
- package/api/docs/detail/section/section.test.mjs +50 -0
- package/api/docs/docs.d.mts +10 -3
- package/api/docs/docs.doc.mjs +55 -16
- package/api/docs/docs.mjs +53 -10
- package/api/docs/docs.test.mjs +166 -4
- package/api/docs/docs.type.d.mts +221 -5
- package/api/docs/docs.type.mjs +153 -11
- package/api/docs/index/index.d.mts +18 -0
- package/api/docs/index/index.mjs +40 -0
- package/api/docs/index/index.test.mjs +62 -0
- package/api/docs/integration-tree.test.mjs +555 -0
- package/api/docs/integrationDocs.test.mjs +114 -8
- package/api/docs/list/list.mjs +28 -12
- package/api/docs/node/node.d.mts +43 -0
- package/api/docs/node/node.mjs +192 -0
- package/api/docs/reference-blocks.test.mjs +406 -0
- package/api/doctor/doctor.d.mts +104 -1
- package/api/doctor/doctor.doc.mjs +1 -0
- package/api/doctor/doctor.mjs +635 -7
- package/api/doctor/doctor.test.mjs +732 -11
- package/api/gap-report/gap-report.doc.mjs +8 -4
- package/api/hook/_adapter.mjs +19 -5
- package/api/hook/hook.doc.mjs +1 -0
- package/api/hook/hook.type.d.mts +3 -3
- package/api/hook/hook.type.mjs +11 -11
- package/api/hook/list/list.d.mts +2 -2
- package/api/hook/list/list.mjs +69 -17
- package/api/index.d.mts +2 -3
- package/api/index.mjs +5 -4
- package/api/init/init.doc.mjs +6 -1
- package/api/init/init.test.mjs +41 -1
- package/api/init/remove/remove.mjs +1 -1
- package/api/init/run/run.mjs +20 -10
- package/api/integration/add-contribution.component-names.test.mjs +120 -0
- package/api/integration/add-contribution.d.mts +2 -1
- package/api/integration/add-contribution.mjs +130 -15
- package/api/integration/add-contribution.test.mjs +258 -7
- package/api/integration/add-helpers.d.mts +5 -2
- package/api/integration/add-helpers.mjs +36 -9
- package/api/integration/add-theme.mjs +34 -64
- package/api/integration/add-theme.test.mjs +105 -21
- package/api/integration/authoring-checks.mjs +138 -28
- package/api/integration/authoring-checks.test.mjs +179 -7
- package/api/integration/authoring-checks.type.mjs +6 -1
- package/api/integration/integration-authoring.type.d.mts +3 -1
- package/api/integration/integration-authoring.type.mjs +2 -0
- package/api/integration/integration-block-exports.test.mjs +10 -6
- package/api/integration/integrationAdd.doc.mjs +14 -4
- package/api/integration/integrationAddAgentDoc.doc.mjs +1 -0
- package/api/integration/integrationAddCodemod.doc.mjs +1 -0
- package/api/integration/integrationAddComponent.doc.mjs +2 -1
- package/api/integration/integrationAddDoc.doc.mjs +8 -1
- package/api/integration/integrationAddTemplate.doc.mjs +1 -0
- package/api/integration/integrationAddTheme.doc.mjs +6 -5
- package/api/integration/integrationComponentConflicts.doc.mjs +1 -0
- package/api/integration/integrationDocConflicts.doc.mjs +2 -1
- package/api/integration/integrationPackCheck.doc.mjs +2 -1
- package/api/integration/integrationTemplateConflicts.doc.d.mts +3 -0
- package/api/integration/integrationTemplateConflicts.doc.mjs +4 -0
- package/api/integration/pack-check.lifecycle-output.test.mjs +105 -0
- package/api/integration/pack-check.mjs +111 -10
- package/api/integration/pack-check.test.mjs +387 -47
- package/api/integration/pack-check.type.d.mts +26 -2
- package/api/integration/pack-check.type.mjs +14 -1
- package/api/integration/summarizeIssues.doc.mjs +1 -0
- package/api/integration/template-conflict-compatibility.test.mjs +73 -0
- package/api/integration/validate-integration-fixes.test.mjs +1389 -0
- package/api/integration/validate-integration.mjs +52 -102
- package/api/integration/validate-integration.test.mjs +179 -26
- package/api/integration/validate-unread-theme-folders.test.mjs +110 -0
- package/api/integration/validateIntegration.doc.mjs +3 -2
- package/api/json/assertResponse.doc.mjs +1 -0
- package/api/json/envelope-types.test.mjs +76 -0
- package/api/json/index.ts +2 -1
- package/api/json/isError.doc.mjs +1 -0
- package/api/json/parseResponse.doc.mjs +3 -2
- package/api/search/search-return-type.test.mjs +54 -0
- package/api/search/search.d.mts +62 -11
- package/api/search/search.doc.mjs +8 -2
- package/api/search/search.mjs +471 -83
- package/api/search/search.test.mjs +142 -1
- package/api/search/search.type.d.mts +15 -3
- package/api/search/search.type.mjs +5 -2
- package/api/swizzle/copy/copy.mjs +28 -11
- package/api/swizzle/swizzle.doc.mjs +2 -1
- package/api/swizzle/swizzle.type.d.mts +2 -2
- package/api/swizzle/swizzle.type.mjs +2 -2
- package/api/template/copy/copy.mjs +17 -23
- package/api/template/copy/copy.test.mjs +17 -0
- package/api/template/list/list.mjs +1 -0
- package/api/template/table-floating-bulk-actions.test.mjs +66 -0
- package/api/template/template-integration.test.mjs +1008 -3
- package/api/template/template-suffix.test.mjs +41 -21
- package/api/template/template.d.mts +1 -1
- package/api/template/template.doc.mjs +30 -8
- package/api/template/template.mjs +46 -9
- package/api/template/template.type.d.mts +12 -14
- package/api/template/template.type.mjs +15 -14
- package/api/theme/_adapter.d.mts +2 -3
- package/api/theme/_adapter.mjs +4 -5
- package/api/theme/add/add.binary.test.mjs +84 -0
- package/api/theme/add/add.mjs +31 -22
- package/api/theme/add/add.rollback.test.mjs +158 -0
- package/api/theme/add/add.staging.test.mjs +83 -0
- package/api/theme/add/add.test.mjs +14 -1
- package/api/theme/build/build.family.test.mjs +7 -12
- package/api/theme/build/build.mjs +140 -59
- package/api/theme/build/build.public-component-vars.test.mjs +1 -1
- package/api/theme/build/build.receipt-doc.test.mjs +111 -0
- package/api/theme/build/build.rollback.test.mjs +148 -0
- package/api/theme/build/build.test.mjs +127 -0
- package/api/theme/build/font-warning.mjs +3 -3
- package/api/theme/build/font-warning.test.mjs +5 -2
- package/api/theme/generateTonalPalette.doc.mjs +1 -0
- package/api/theme/integration-themes.test.mjs +39 -28
- package/api/theme/list/list.test.mjs +19 -20
- package/api/theme/listThemes.doc.mjs +6 -5
- package/api/theme/palette/generate/generate.mjs +8 -3
- package/api/theme/palette/generate/generate.test.mjs +96 -0
- package/api/theme/palette/generate/generator.d.mts +10 -13
- package/api/theme/palette/generate/generator.mjs +15 -4
- package/api/theme/palette/generate/generator.test.mjs +10 -0
- package/api/theme/template/template.mjs +11 -2
- package/api/theme/template/template.test.mjs +20 -0
- package/api/theme/theme.type.d.mts +170 -11
- package/api/theme/theme.type.mjs +94 -27
- package/api/theme/themeAdd.doc.mjs +4 -3
- package/api/theme/themeBuild.doc.mjs +8 -4
- package/api/theme/themeList.doc.mjs +6 -3
- package/api/theme/themeListAvailable.doc.mjs +5 -3
- package/api/theme/themePaletteGenerate.doc.mjs +1 -0
- package/api/theme/themeTargets.doc.mjs +1 -0
- package/api/theme/themeTemplate.doc.mjs +6 -2
- package/api/upgrade/_adapter.d.mts +32 -5
- package/api/upgrade/_adapter.mjs +139 -22
- package/api/upgrade/list/list.mjs +2 -1
- package/api/upgrade/list/list.test.mjs +73 -0
- package/api/upgrade/project-context.test.mjs +272 -0
- package/api/upgrade/provider-agreement.test.mjs +152 -0
- package/api/upgrade/run/files-changed.test.mjs +111 -0
- package/api/upgrade/run/run.mjs +359 -60
- package/api/upgrade/status/status.mjs +2 -2
- package/api/upgrade/upgrade.doc.mjs +12 -5
- package/api/upgrade/upgrade.type.d.mts +43 -5
- package/api/upgrade/upgrade.type.mjs +29 -13
- package/assets/codemods/__tests__/registry.test.mjs +1 -0
- package/assets/codemods/__tests__/runner.test.mjs +332 -8
- package/assets/codemods/file-count.test.mjs +163 -0
- package/assets/codemods/integration-discovery.mjs +48 -4
- package/assets/codemods/integration-discovery.test.mjs +73 -0
- package/assets/codemods/integration-runner.mjs +59 -7
- package/assets/codemods/integration-runner.protection.test.mjs +153 -0
- package/assets/codemods/registry.mjs +1 -0
- package/assets/codemods/run-codemod.mjs +177 -34
- package/assets/codemods/runner.mjs +353 -104
- package/assets/codemods/term-log.mjs +32 -8
- package/assets/codemods/term-log.test.mjs +19 -1
- package/assets/codemods/transform-prop.mjs +109 -0
- package/assets/codemods/transform-prop.test.mjs +95 -0
- package/assets/codemods/transforms/v0.0.14/__tests__/rename-status-variants.test.mjs +86 -165
- package/assets/codemods/transforms/v0.0.14/rename-status-variants.mjs +72 -210
- package/assets/codemods/transforms/v0.1.8/__tests__/rename-avatar-size-scale.test.mjs +83 -115
- package/assets/codemods/transforms/v0.1.8/rename-avatar-size-scale.mjs +57 -186
- package/assets/codemods/transforms/v0.3.0/__tests__/unwrap-authoring-factories.test.mjs +27 -5
- package/assets/codemods/transforms/v0.3.0/unwrap-authoring-factories.mjs +20 -5
- package/assets/codemods/transforms/v0.6.0/__tests__/next-codemods.test.mjs +47 -0
- package/assets/codemods/transforms/v0.6.0/rename-resizable-pixel-bounds.mjs +57 -10
- package/assets/codemods/transforms/v0.6.4/__tests__/migrate-native-picker-to-presentation.test.mjs +63 -0
- package/assets/codemods/transforms/v0.6.4/__tests__/migrate-theme-catalog-to-descriptors.test.mjs +220 -0
- package/assets/codemods/transforms/v0.6.4/index.mjs +31 -0
- package/assets/codemods/transforms/v0.6.4/migrate-native-picker-to-presentation.mjs +148 -0
- package/assets/codemods/transforms/v0.6.4/migrate-theme-catalog-to-descriptors.mjs +141 -0
- package/assets/docs/README.md +9 -0
- package/assets/docs/authoring.doc.mjs +14 -0
- package/assets/docs/getting-started.doc.mjs +2 -2
- package/assets/docs/internationalization.doc.mjs +7 -5
- package/assets/docs/layout.doc.dense.mjs +2 -2
- package/assets/docs/layout.doc.mjs +1 -1
- package/assets/docs/principles.doc.mjs +6 -6
- package/assets/docs/styling-libraries.doc.mjs +4 -4
- package/assets/docs/styling.doc.mjs +4 -4
- package/assets/docs/theme.doc.mjs +5 -5
- package/assets/docs/tokens.doc.mjs +1 -1
- package/assets/docs/tree/api.doc.mjs +30 -0
- package/assets/docs/tree/cli.doc.mjs +23 -0
- package/assets/docs/tree/commands.doc.mjs +25 -0
- package/assets/docs/tree/component-lookups.doc.mjs +149 -0
- package/assets/docs/{cli-integrations.doc.mjs → tree/integrations.doc.mjs} +144 -26
- package/assets/docs/tree/integrations.test.mjs +62 -0
- package/assets/docs/tree/writing-docs.doc.mjs +286 -0
- package/assets/docs/working-with-ai.doc.mjs +4 -4
- package/assets/templates/blocks/components/CheckboxList/CheckboxListSelectAllPattern.doc.mjs +1 -1
- package/assets/templates/blocks/components/CheckboxList/CheckboxListSelectAllPattern.tsx +1 -3
- package/assets/templates/blocks/components/DateInput/DateInputDateRange.tsx +1 -1
- package/assets/templates/blocks/components/InternationalizationProvider/InternationalizationProvider01ShippedLocale.tsx +1 -1
- package/assets/templates/blocks/components/Item/ItemDocumentTabs.doc.mjs +14 -0
- package/assets/templates/blocks/components/Item/ItemDocumentTabs.tsx +100 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaInlineRail.doc.mjs +14 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaInlineRail.tsx +61 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaOverscrollChaining.doc.mjs +14 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaOverscrollChaining.tsx +126 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaShowcase.doc.mjs +15 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaShowcase.tsx +86 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyGroupHeaders.doc.mjs +14 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyGroupHeaders.tsx +99 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyPassthrough.doc.mjs +14 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyPassthrough.tsx +122 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaTwoAxisBoard.doc.mjs +14 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaTwoAxisBoard.tsx +95 -0
- package/assets/templates/blocks/components/Table/TableBulkActionsTable.doc.mjs +14 -0
- package/assets/templates/blocks/components/Table/TableBulkActionsTable.tsx +71 -0
- package/assets/templates/blocks/components/Table/TableFloatingBulkActionsTable.doc.mjs +19 -0
- package/assets/templates/blocks/components/Table/TableFloatingBulkActionsTable.tsx +139 -0
- package/assets/templates/blocks/components/TimeInput/TimeInputConstrained.tsx +1 -0
- package/assets/templates/blocks/components/Timer/TimerFormats.doc.mjs +14 -0
- package/assets/templates/blocks/components/Timer/TimerFormats.tsx +34 -0
- package/assets/templates/blocks/components/Timer/TimerInline.doc.mjs +14 -0
- package/assets/templates/blocks/components/Timer/TimerInline.tsx +14 -0
- package/assets/templates/blocks/components/Timer/TimerShowcase.doc.mjs +13 -0
- package/assets/templates/blocks/components/Timer/TimerShowcase.tsx +47 -0
- package/assets/templates/blocks/components/Timer/TimerTypography.doc.mjs +14 -0
- package/assets/templates/blocks/components/Timer/TimerTypography.tsx +31 -0
- package/assets/templates/blocks/components/Toolbar/ToolbarTableFilter.doc.mjs +19 -3
- package/assets/templates/blocks/components/Toolbar/ToolbarTableFilter.tsx +383 -65
- package/assets/templates/pages/table-tree/page.tsx +1704 -0
- package/assets/templates/pages/table-tree/template.doc.mjs +12 -0
- package/assets/templates/themes/butter/butterTheme.doc.mjs +11 -0
- package/assets/templates/themes/chocolate/chocolateTheme.doc.mjs +11 -0
- package/assets/templates/themes/gothic/gothicTheme.doc.mjs +11 -0
- package/assets/templates/themes/matcha/matchaTheme.doc.mjs +11 -0
- package/assets/templates/themes/neutral/neutralTheme.doc.mjs +11 -0
- package/assets/templates/themes/stone/stoneTheme.doc.mjs +11 -0
- package/assets/templates/themes/y2k/y2kTheme.doc.mjs +11 -0
- package/authoring/_shared/contract.ts +22 -0
- package/authoring/codemod/codemod.doc.mjs +7 -2
- package/authoring/codemod/parse.d.mts +8 -8
- package/authoring/codemod/parse.mjs +8 -6
- package/authoring/codemod/type.ts +12 -0
- package/authoring/config/config.doc.mjs +11 -3
- package/authoring/config/debug-composition.test.mjs +92 -0
- package/authoring/config/parse.d.mts +15 -13
- package/authoring/config/parse.mjs +27 -8
- package/authoring/config/parse.test.mjs +8 -0
- package/authoring/config/type.ts +31 -8
- package/authoring/debug/debug.doc.d.mts +11 -0
- package/authoring/debug/debug.doc.mjs +182 -0
- package/authoring/debug/parse.d.mts +8 -8
- package/authoring/debug/parse.mjs +3 -3
- package/authoring/discover/discover.doc.d.mts +13 -0
- package/authoring/discover/discover.doc.mjs +138 -0
- package/authoring/discover/parse.d.mts +24 -0
- package/authoring/discover/parse.mjs +128 -0
- package/authoring/discover/parse.test.mjs +124 -0
- package/authoring/discover/type.ts +87 -0
- package/authoring/doctypes/_schema.d.mts +790 -23
- package/authoring/doctypes/_schema.mjs +543 -39
- package/authoring/doctypes/base/graph-fields.doc.d.mts +9 -0
- package/authoring/doctypes/base/graph-fields.doc.mjs +64 -0
- package/authoring/doctypes/base/type.ts +41 -0
- package/authoring/doctypes/command/command.doc.mjs +5 -4
- package/authoring/doctypes/command/parse.d.mts +2 -2
- package/authoring/doctypes/command/parse.mjs +1 -1
- package/authoring/doctypes/command/type.ts +6 -5
- package/authoring/doctypes/component/component.doc.mjs +6 -3
- package/authoring/doctypes/component/parse.d.mts +2 -2
- package/authoring/doctypes/component/parse.mjs +1 -1
- package/authoring/doctypes/component/type.ts +6 -5
- package/authoring/doctypes/doctypes-new.test.mjs +48 -6
- package/authoring/doctypes/enum/enum.doc.mjs +1 -1
- package/authoring/doctypes/enum/parse.d.mts +2 -2
- package/authoring/doctypes/enum/parse.mjs +1 -1
- package/authoring/doctypes/enum/type.ts +4 -2
- package/authoring/doctypes/function/function.doc.mjs +7 -2
- package/authoring/doctypes/function/parse.d.mts +2 -2
- package/authoring/doctypes/function/parse.mjs +1 -1
- package/authoring/doctypes/function/type.ts +9 -4
- package/authoring/doctypes/hook/hook.doc.mjs +4 -0
- package/authoring/doctypes/hook/parse.d.mts +2 -2
- package/authoring/doctypes/hook/parse.mjs +1 -1
- package/authoring/doctypes/hook/type.ts +5 -4
- package/authoring/doctypes/legacy.d.mts +8 -6
- package/authoring/doctypes/legacy.mjs +5 -4
- package/authoring/doctypes/load-contract.test.mjs +233 -0
- package/authoring/doctypes/namespace/namespace.doc.d.mts +9 -0
- package/authoring/doctypes/namespace/namespace.doc.mjs +128 -0
- package/authoring/doctypes/namespace/parse.d.mts +12 -0
- package/authoring/doctypes/namespace/parse.mjs +25 -0
- package/authoring/doctypes/namespace/parse.test.mjs +163 -0
- package/authoring/doctypes/namespace/type.ts +74 -0
- package/authoring/doctypes/parse.d.mts +22 -18
- package/authoring/doctypes/parse.mjs +22 -11
- package/authoring/doctypes/parse.test.mjs +77 -3
- package/authoring/doctypes/reference/parse.d.mts +2 -2
- package/authoring/doctypes/reference/parse.mjs +8 -5
- package/authoring/doctypes/reference/reference.doc.mjs +48 -6
- package/authoring/doctypes/reference/type.ts +70 -7
- package/authoring/doctypes/schema/parse.d.mts +2 -2
- package/authoring/doctypes/schema/parse.mjs +1 -1
- package/authoring/doctypes/schema/schema.doc.mjs +1 -1
- package/authoring/doctypes/schema/type.ts +4 -4
- package/authoring/doctypes/template/parse.d.mts +94 -1
- package/authoring/doctypes/template/parse.mjs +40 -2
- package/authoring/doctypes/template/parse.test.mjs +26 -2
- package/authoring/doctypes/template/template.doc.mjs +13 -3
- package/authoring/doctypes/template/type.ts +13 -2
- package/authoring/doctypes/theme/parse.d.mts +35 -0
- package/authoring/doctypes/theme/parse.mjs +76 -0
- package/authoring/doctypes/theme/theme.doc.d.mts +9 -0
- package/authoring/doctypes/theme/theme.doc.mjs +79 -0
- package/authoring/doctypes/theme/type.ts +42 -0
- package/authoring/doctypes/types.ts +12 -10
- package/authoring/gap-report/gap-report.doc.d.mts +12 -0
- package/authoring/gap-report/gap-report.doc.mjs +183 -0
- package/authoring/gap-report/parse.d.mts +10 -10
- package/authoring/gap-report/parse.mjs +6 -6
- package/authoring/gap-report/type.ts +1 -1
- package/authoring/identity/identity.doc.d.mts +9 -0
- package/authoring/identity/identity.doc.mjs +61 -0
- package/authoring/identity/type.ts +132 -0
- package/authoring/index.d.mts +3 -0
- package/authoring/index.d.ts +62 -17
- package/authoring/index.mjs +4 -1
- package/authoring/integration/integration.doc.mjs +15 -8
- package/authoring/integration/parse.d.mts +2 -2
- package/authoring/integration/parse.mjs +1 -1
- package/authoring/integration/parse.test.mjs +10 -1
- package/authoring/integration/schema.d.mts +6 -4
- package/authoring/integration/schema.mjs +9 -3
- package/authoring/integration/type.ts +19 -8
- package/authoring/shadcn/receipt.d.mts +6 -6
- package/clients/cli/__tests__/cliManifest.test.ts +27 -29
- package/clients/cli/command-load-failure.test.mjs +83 -0
- package/clients/cli/command-result-coverage.test.mjs +7 -7
- package/clients/cli/commands/blog.doc.mjs +1 -1
- package/clients/cli/commands/blog.mjs +23 -8
- package/clients/cli/commands/blog.test.mjs +42 -1
- package/clients/cli/commands/build-theme.adaptations.test.mjs +100 -1
- package/clients/cli/commands/build-theme.ascii-output.test.mjs +161 -0
- package/clients/cli/commands/build-theme.flag-docs.test.mjs +110 -0
- package/clients/cli/commands/build-theme.mjs +16 -50
- package/clients/cli/commands/build-theme.path-safety.test.mjs +86 -1
- package/clients/cli/commands/build-theme.variants.test.mjs +76 -0
- package/clients/cli/commands/build.doc.mjs +16 -8
- package/clients/cli/commands/build.exit-codes-doc.test.mjs +50 -0
- package/clients/cli/commands/build.mjs +137 -114
- package/clients/cli/commands/build.playbook.test.mjs +75 -0
- package/clients/cli/commands/build.text-fields.test.mjs +81 -0
- package/clients/cli/commands/component/index.mjs +153 -61
- package/clients/cli/commands/component-batch.test.mjs +341 -0
- package/clients/cli/commands/component-ownership.test.mjs +92 -3
- package/clients/cli/commands/component-package.test.mjs +46 -0
- package/clients/cli/commands/component-resolution.test.mjs +21 -0
- package/clients/cli/commands/component.doc.mjs +24 -7
- package/clients/cli/commands/component.test.mjs +19 -0
- package/clients/cli/commands/debug-result-summary.test.mjs +2 -2
- package/clients/cli/commands/detail-levels.test.mjs +2 -2
- package/clients/cli/commands/discover.broken-integration.test.mjs +52 -5
- package/clients/cli/commands/discover.components-flag.test.mjs +97 -0
- package/clients/cli/commands/discover.doc.mjs +55 -9
- package/clients/cli/commands/discover.mjs +393 -118
- package/clients/cli/commands/discover.sources.test.mjs +267 -0
- package/clients/cli/commands/discover.text-projection.test.mjs +103 -0
- package/clients/cli/commands/docs.doc.mjs +28 -6
- package/clients/cli/commands/docs.mjs +240 -26
- package/clients/cli/commands/docs.test.mjs +222 -1
- package/clients/cli/commands/doctor-integration-components.doc.mjs +1 -1
- package/clients/cli/commands/doctor-integration-docs.doc.mjs +3 -3
- package/clients/cli/commands/doctor-integration-templates.doc.mjs +15 -8
- package/clients/cli/commands/doctor-integration-validate.doc.mjs +1 -1
- package/clients/cli/commands/doctor-integration.doc.mjs +1 -1
- package/clients/cli/commands/doctor-integration.package-json.test.mjs +53 -0
- package/clients/cli/commands/doctor-integration.test.mjs +90 -8
- package/clients/cli/commands/doctor.doc.mjs +1 -1
- package/clients/cli/commands/doctor.mjs +59 -32
- package/clients/cli/commands/doctor.test.mjs +42 -0
- package/clients/cli/commands/gap-report.doc.mjs +17 -6
- package/clients/cli/commands/gap-report.test.mjs +72 -0
- package/clients/cli/commands/hook/index.mjs +7 -17
- package/clients/cli/commands/hook.doc.mjs +1 -1
- package/clients/cli/commands/hook.text-projection.test.mjs +45 -0
- package/clients/cli/commands/init.doc.mjs +20 -9
- package/clients/cli/commands/init.flag-help.test.mjs +153 -0
- package/clients/cli/commands/integration-add.controls.test.mjs +132 -0
- package/clients/cli/commands/integration-add.doc.mjs +32 -6
- package/clients/cli/commands/integration-authoring.test.mjs +13 -9
- package/clients/cli/commands/integration-pack.doc.mjs +1 -1
- package/clients/cli/commands/integration-real-world.test.mjs +3 -9
- package/clients/cli/commands/integration.doc.mjs +1 -1
- package/clients/cli/commands/integration.mjs +1 -0
- package/clients/cli/commands/interactive-guard.test.mjs +101 -24
- package/clients/cli/commands/json-contract.test.mjs +33 -0
- package/clients/cli/commands/manifest.doc.mjs +1 -1
- package/clients/cli/commands/no-prompt-wording.test.mjs +94 -0
- package/clients/cli/commands/search.doc.mjs +7 -4
- package/clients/cli/commands/search.mjs +28 -9
- package/clients/cli/commands/search.test.mjs +75 -0
- package/clients/cli/commands/setup-nudge.test.mjs +6 -0
- package/clients/cli/commands/swizzle.doc.mjs +3 -2
- package/clients/cli/commands/swizzle.path-safety.test.mjs +42 -0
- package/clients/cli/commands/template.doc.mjs +52 -13
- package/clients/cli/commands/template.flag-help.test.mjs +117 -0
- package/clients/cli/commands/template.mjs +4 -91
- package/clients/cli/commands/template.path-help.test.mjs +40 -0
- package/clients/cli/commands/text-json-parity.test.mjs +702 -0
- package/clients/cli/commands/theme-add.doc.mjs +4 -3
- package/clients/cli/commands/theme-build.doc.mjs +8 -7
- package/clients/cli/commands/theme-list.doc.mjs +2 -2
- package/clients/cli/commands/theme-palette-generate.doc.mjs +9 -5
- package/clients/cli/commands/theme-palette-generate.test.mjs +19 -0
- package/clients/cli/commands/theme-palette.doc.mjs +1 -1
- package/clients/cli/commands/theme-targets.behavior.test.mjs +4 -3
- package/clients/cli/commands/theme-targets.doc.mjs +1 -1
- package/clients/cli/commands/theme-template.behavior.test.mjs +12 -0
- package/clients/cli/commands/theme-template.doc.mjs +2 -2
- package/clients/cli/commands/theme.doc.mjs +1 -1
- package/clients/cli/commands/upgrade.ascii-output.test.mjs +87 -0
- package/clients/cli/commands/upgrade.doc.mjs +22 -10
- package/clients/cli/commands/upgrade.file-protection.test.mjs +228 -0
- package/clients/cli/commands/upgrade.flag-help.test.mjs +188 -0
- package/clients/cli/commands/upgrade.hook-output.test.mjs +88 -0
- package/clients/cli/commands/upgrade.mjs +29 -7
- package/clients/cli/formatters/index.mjs +164 -1
- package/clients/cli/formatters/index.test.mjs +97 -0
- package/clients/cli/index.mjs +21 -34
- package/clients/cli/latest-version-env.test.mjs +50 -0
- package/clients/cli/lib/cli-error.test.mjs +7 -0
- package/clients/cli/lib/component-format.mjs +9 -9
- package/clients/cli/lib/component-format.test.mjs +1 -1
- package/clients/cli/lib/define-command.mjs +32 -6
- package/clients/cli/lib/doc-text-ascii.test.mjs +82 -0
- package/clients/cli/lib/exit-codes.test.mjs +90 -0
- package/clients/cli/lib/hook-format.mjs +19 -10
- package/clients/cli/lib/json-shim.mjs +62 -16
- package/clients/cli/lib/json-shim.test.mjs +69 -0
- package/clients/cli/lib/manifest.d.ts +2 -0
- package/clients/cli/lib/manifest.mjs +39 -10
- package/clients/cli/lib/manifest.test.mjs +22 -2
- package/clients/cli/lib/parse-error-format.test.mjs +81 -0
- package/foundation/agent-docs/agent-docs.d.mts +7 -2
- package/foundation/agent-docs/agent-docs.mjs +82 -12
- package/foundation/agent-docs/agent-docs.path-safety.test.mjs +266 -4
- package/foundation/agent-docs/agent-docs.test.mjs +19 -1
- package/foundation/config/integration-debug.test.mjs +28 -3
- package/foundation/config/project-themes.test.mjs +11 -19
- package/foundation/config/project.d.mts +20 -11
- package/foundation/config/project.mjs +263 -91
- package/foundation/config/project.test.mjs +270 -21
- package/foundation/discovery/authoring-self-docs.d.mts +87 -0
- package/foundation/discovery/authoring-self-docs.mjs +237 -0
- package/foundation/discovery/authoring-self-docs.test.mjs +170 -0
- package/foundation/discovery/authoring-surface.d.mts +74 -0
- package/foundation/discovery/authoring-surface.mjs +525 -0
- package/foundation/discovery/authoring-surface.test.mjs +392 -0
- package/foundation/discovery/cli-self-docs.d.mts +119 -0
- package/foundation/discovery/cli-self-docs.mjs +490 -0
- package/foundation/discovery/cli-self-docs.test.mjs +375 -0
- package/foundation/discovery/component-discovery.d.mts +39 -1
- package/foundation/discovery/component-discovery.mjs +50 -1
- package/foundation/discovery/component-loader.d.mts +35 -38
- package/foundation/discovery/component-loader.mjs +53 -222
- package/foundation/discovery/docs-discovery.d.mts +119 -11
- package/foundation/discovery/docs-discovery.mjs +423 -108
- package/foundation/discovery/docs-discovery.test.mjs +365 -20
- package/foundation/discovery/docs-output-budget.d.mts +28 -0
- package/foundation/discovery/docs-output-budget.mjs +50 -0
- package/foundation/discovery/docs-section-key.d.mts +116 -0
- package/foundation/discovery/docs-section-key.mjs +322 -0
- package/foundation/discovery/docs-section-key.test.mjs +246 -0
- package/foundation/discovery/template-adapter.d.mts +113 -11
- package/foundation/discovery/template-adapter.fixture-refs.test.mjs +248 -0
- package/foundation/discovery/template-adapter.integration-isolation.test.mjs +94 -0
- package/foundation/discovery/template-adapter.mjs +775 -84
- package/foundation/discovery/template-adapter.test.mjs +57 -0
- package/foundation/discovery/template-conflict-release.d.mts +13 -0
- package/foundation/discovery/template-conflict-release.mjs +40 -0
- package/foundation/discovery/template-conflict-release.test.mjs +40 -0
- package/foundation/discovery/theme-discovery.d.mts +67 -7
- package/foundation/discovery/theme-discovery.mjs +916 -186
- package/foundation/discovery/theme-discovery.test.mjs +613 -219
- package/foundation/discovery/theming-targets.test.mjs +4 -0
- package/foundation/doc-compiler/bundle.d.mts +47 -0
- package/foundation/doc-compiler/bundle.mjs +278 -0
- package/foundation/doc-compiler/bundle.test.mjs +266 -0
- package/foundation/doc-compiler/compile.d.mts +343 -0
- package/foundation/doc-compiler/compile.mjs +558 -0
- package/foundation/doc-compiler/diagnostics.d.mts +126 -0
- package/foundation/doc-compiler/diagnostics.mjs +305 -0
- package/foundation/doc-compiler/doc-compiler.test.mjs +714 -0
- package/foundation/doc-compiler/doc-loads.test.mjs +1630 -0
- package/foundation/doc-compiler/import.d.mts +24 -0
- package/foundation/doc-compiler/import.mjs +59 -0
- package/foundation/doc-compiler/inputs.d.mts +102 -0
- package/foundation/doc-compiler/inputs.mjs +291 -0
- package/foundation/doc-compiler/inputs.test.mjs +299 -0
- package/foundation/doc-compiler/ir.d.mts +22 -0
- package/foundation/doc-compiler/ir.mjs +471 -0
- package/foundation/doc-compiler/lenses.d.mts +36 -0
- package/foundation/doc-compiler/lenses.mjs +173 -0
- package/foundation/doc-compiler/links.d.mts +162 -0
- package/foundation/doc-compiler/links.mjs +294 -0
- package/foundation/doc-compiler/links.test.mjs +192 -0
- package/foundation/doc-compiler/lower-doc.test.mjs +495 -0
- package/foundation/doc-compiler/overlays.d.mts +37 -0
- package/foundation/doc-compiler/overlays.mjs +206 -0
- package/foundation/doc-compiler/parse-readable.d.mts +9 -0
- package/foundation/doc-compiler/parse-readable.mjs +29 -0
- package/foundation/doc-compiler/read.d.mts +127 -0
- package/foundation/doc-compiler/read.mjs +325 -0
- package/foundation/doc-compiler/read.test.mjs +313 -0
- package/foundation/doc-compiler/source.d.mts +33 -0
- package/foundation/doc-compiler/source.mjs +128 -0
- package/foundation/doc-compiler/tree.d.mts +288 -0
- package/foundation/doc-compiler/tree.mjs +876 -0
- package/foundation/doc-compiler/tree.test.mjs +606 -0
- package/foundation/fs/file-protection.d.mts +33 -0
- package/foundation/fs/file-protection.mjs +825 -0
- package/foundation/fs/file-protection.test.mjs +250 -0
- package/foundation/fs/module-loader.d.mts +1 -0
- package/foundation/fs/module-loader.mjs +50 -1
- package/foundation/fs/module-loader.stdout.test.mjs +332 -0
- package/foundation/fs/path-safety.d.mts +3 -2
- package/foundation/fs/path-safety.mjs +49 -19
- package/foundation/fs/path-safety.test.mjs +50 -0
- package/foundation/fs/publish-file-hardlink-unavailable.test.mjs +129 -94
- package/foundation/identity/provider-identity.d.mts +90 -0
- package/foundation/identity/provider-identity.mjs +320 -0
- package/foundation/identity/provider-identity.test.mjs +254 -0
- package/foundation/identity/providers.d.mts +7 -0
- package/foundation/identity/providers.mjs +16 -0
- package/foundation/integrations/autolink.d.mts +58 -1
- package/foundation/integrations/autolink.mjs +143 -45
- package/foundation/integrations/autolink.test.mjs +1 -1
- package/foundation/integrations/cli-requirement.d.mts +45 -0
- package/foundation/integrations/cli-requirement.mjs +154 -0
- package/foundation/integrations/cli-requirement.test.mjs +84 -0
- package/foundation/integrations/contribution-fixes.d.mts +145 -0
- package/foundation/integrations/contribution-fixes.mjs +1284 -0
- package/foundation/integrations/contribution-inventory.d.mts +3 -2
- package/foundation/integrations/contribution-inventory.mjs +27 -24
- package/foundation/integrations/contribution-inventory.test.mjs +86 -27
- package/foundation/integrations/integration-warnings.d.mts +9 -2
- package/foundation/integrations/integration-warnings.mjs +52 -21
- package/foundation/integrations/integration-warnings.test.mjs +74 -1
- package/foundation/integrations/integrations.d.mts +63 -3
- package/foundation/integrations/integrations.mjs +122 -9
- package/foundation/integrations/integrations.test.mjs +415 -1
- package/foundation/integrations/provider-conflicts.test.mjs +125 -0
- package/foundation/integrations/provider-ledger.test.mjs +275 -0
- package/foundation/integrations/provider-resolution.d.mts +152 -0
- package/foundation/integrations/provider-resolution.mjs +576 -0
- package/foundation/integrations/provider-resolution.test.mjs +369 -0
- package/foundation/integrations/theme-descriptor.d.mts +8 -0
- package/foundation/integrations/theme-descriptor.mjs +44 -0
- package/foundation/integrations/validate-contributions.d.mts +2 -0
- package/foundation/integrations/validate-contributions.mjs +131 -29
- package/foundation/response/base.d.ts +8 -4
- package/foundation/response/batch.type.d.mts +33 -0
- package/foundation/response/batch.type.mjs +34 -0
- package/foundation/response/error-codes.d.mts +3 -1
- package/foundation/response/error-codes.d.ts +2 -0
- package/foundation/response/error-codes.doc.mjs +13 -4
- package/foundation/response/error-codes.mjs +8 -2
- package/foundation/response/error-codes.test.mjs +137 -10
- package/foundation/response/json-contract.test.mjs +57 -17
- package/foundation/response/json.d.mts +4 -2
- package/foundation/response/json.mjs +8 -10
- package/foundation/response/response-types.doc.d.mts +5 -1
- package/foundation/response/response-types.doc.mjs +46 -38
- package/foundation/response/response-types.doc.test.mjs +181 -0
- package/foundation/response/response.doc.mjs +1 -1
- package/foundation/text/string-utils.d.mts +8 -0
- package/foundation/text/string-utils.mjs +40 -10
- package/foundation/xle/browser.d.mts +3 -3
- package/foundation/xle/browser.mjs +3 -3
- package/foundation/xle/expand.d.mts +2 -0
- package/foundation/xle/expand.mjs +6 -5
- package/foundation/xle/expand.test.mjs +54 -0
- package/foundation/xle/parse.mjs +1 -1
- package/foundation/xle/print.mjs +2 -2
- package/foundation/xle/splice.mjs +1 -1
- package/foundation/xle/xle.test.mjs +13 -0
- package/package.json +10 -11
- package/api/layout/_adapter.d.mts +0 -34
- package/api/layout/_adapter.mjs +0 -133
- package/api/layout/check/check.d.mts +0 -16
- package/api/layout/check/check.mjs +0 -40
- package/api/layout/expand/expand.d.mts +0 -22
- package/api/layout/expand/expand.mjs +0 -153
- package/api/layout/grammar/grammar.d.mts +0 -13
- package/api/layout/grammar/grammar.mjs +0 -86
- package/api/layout/layout.d.mts +0 -6
- package/api/layout/layout.mjs +0 -17
- package/api/layout/layout.test.mjs +0 -297
- package/api/layout/layout.type.d.mts +0 -89
- package/api/layout/layout.type.mjs +0 -103
- package/api/layout/layoutCheck.doc.d.mts +0 -11
- package/api/layout/layoutCheck.doc.mjs +0 -84
- package/api/layout/layoutExpand.doc.d.mts +0 -11
- package/api/layout/layoutExpand.doc.mjs +0 -106
- package/api/layout/layoutGrammar.doc.d.mts +0 -11
- package/api/layout/layoutGrammar.doc.mjs +0 -56
- package/assets/templates/themes/manifest.json +0 -95
- package/clients/cli/commands/layout-check.doc.mjs +0 -54
- package/clients/cli/commands/layout-expand.doc.mjs +0 -66
- package/clients/cli/commands/layout-grammar.doc.mjs +0 -30
- package/clients/cli/commands/layout.doc.mjs +0 -34
- package/clients/cli/commands/layout.error-codes.test.mjs +0 -66
- package/clients/cli/commands/layout.exit-parity.test.mjs +0 -41
- package/clients/cli/commands/layout.mjs +0 -263
- package/clients/cli/lib/update-check.mjs +0 -83
- package/clients/cli/lib/update-check.test.mjs +0 -137
- package/clients/cli/update-hint-commands.test.mjs +0 -54
|
@@ -4,10 +4,10 @@
|
|
|
4
4
|
* @file Programmatic API for the component command — DISPATCHER + BARREL.
|
|
5
5
|
*
|
|
6
6
|
* Returns the same typed envelope { type, data } that `astryx --json component`
|
|
7
|
-
* outputs. `component(name, opts)` parses
|
|
8
|
-
* subject
|
|
9
|
-
* (list · detail · detail.props/source/showcase/blocks)
|
|
10
|
-
*
|
|
7
|
+
* outputs. `component(name, opts)` parses one selector or an ordered selector
|
|
8
|
+
* list, resolves each subject through `_adapter`, and routes to the correct leaf
|
|
9
|
+
* (list · detail · detail.props/source/showcase/blocks). The CLI command handler
|
|
10
|
+
* is a thin wrapper around this function.
|
|
11
11
|
*
|
|
12
12
|
* Every leaf is also re-exported for direct scripting use.
|
|
13
13
|
*/
|
|
@@ -26,6 +26,8 @@ import {
|
|
|
26
26
|
resolveUnscopedDoc,
|
|
27
27
|
loadComponentDoc,
|
|
28
28
|
scopeSubComponent,
|
|
29
|
+
ComponentAmbiguityError,
|
|
30
|
+
installedComponentPackageVersion,
|
|
29
31
|
} from './_adapter.mjs';
|
|
30
32
|
import {componentList} from './list/list.mjs';
|
|
31
33
|
import {componentDetail} from './detail/detail.mjs';
|
|
@@ -34,8 +36,199 @@ import {componentDetailSource} from './detail/source/source.mjs';
|
|
|
34
36
|
import {componentDetailShowcase} from './detail/showcase/showcase.mjs';
|
|
35
37
|
import {componentDetailBlocks} from './detail/blocks/blocks.mjs';
|
|
36
38
|
|
|
39
|
+
/** Maximum selectors accepted before any component resolution starts. */
|
|
40
|
+
export const COMPONENT_BATCH_SELECTOR_LIMIT = 100;
|
|
41
|
+
|
|
42
|
+
/** @type {ReadonlyArray<string>} */
|
|
43
|
+
const DETAIL_LEVELS = ['full', 'compact', 'brief'];
|
|
44
|
+
/** @type {ReadonlyArray<string>} */
|
|
45
|
+
const LANGS = ['en', 'zh', 'dense'];
|
|
46
|
+
/** @type {Set<string>} */
|
|
47
|
+
const NOT_FOUND_CODES = new Set([
|
|
48
|
+
ERROR_CODES.ERR_UNKNOWN_COMPONENT,
|
|
49
|
+
ERROR_CODES.ERR_UNKNOWN_PACKAGE,
|
|
50
|
+
ERROR_CODES.ERR_NOT_FOUND,
|
|
51
|
+
]);
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Discover-compatible package target grammar. Versions belong to the package
|
|
55
|
+
* head, never the item after the package slash.
|
|
56
|
+
* @param {string} selector
|
|
57
|
+
* @returns {{scoped: boolean, name: string, version?: string, item?: string}}
|
|
58
|
+
*/
|
|
59
|
+
function splitSelector(selector) {
|
|
60
|
+
const scoped = selector.startsWith('@');
|
|
61
|
+
const firstSlash = selector.indexOf('/');
|
|
62
|
+
let head = selector;
|
|
63
|
+
/** @type {string | undefined} */
|
|
64
|
+
let rest;
|
|
65
|
+
const split = scoped
|
|
66
|
+
? firstSlash < 0
|
|
67
|
+
? -1
|
|
68
|
+
: selector.indexOf('/', firstSlash + 1)
|
|
69
|
+
: firstSlash;
|
|
70
|
+
if (split > 0) {
|
|
71
|
+
head = selector.slice(0, split);
|
|
72
|
+
rest = selector.slice(split + 1) || undefined;
|
|
73
|
+
}
|
|
74
|
+
const at = head.indexOf('@', 1);
|
|
75
|
+
return {
|
|
76
|
+
scoped,
|
|
77
|
+
name: at > 0 ? head.slice(0, at) : head,
|
|
78
|
+
...(at > 0 && head.slice(at + 1) ? {version: head.slice(at + 1)} : {}),
|
|
79
|
+
...(rest ? {item: rest} : {}),
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Resolve one component selector into the existing single-component API inputs.
|
|
85
|
+
* @param {unknown} value
|
|
86
|
+
* @param {string|undefined} packageScope
|
|
87
|
+
* @returns {{selector: string, name: string, package?: string, version?: string}}
|
|
88
|
+
*/
|
|
89
|
+
function parseComponentSelector(value, packageScope) {
|
|
90
|
+
if (typeof value !== 'string' || value.length === 0) {
|
|
91
|
+
throw new AstryxError(
|
|
92
|
+
`Invalid component selector "${String(value)}"`,
|
|
93
|
+
undefined,
|
|
94
|
+
ERROR_CODES.ERR_INVALID_ARGUMENT,
|
|
95
|
+
);
|
|
96
|
+
}
|
|
97
|
+
const target = splitSelector(value);
|
|
98
|
+
const packageShaped =
|
|
99
|
+
target.scoped || target.item != null || target.version != null;
|
|
100
|
+
if (!packageShaped) {
|
|
101
|
+
return {selector: value, name: target.name, package: packageScope};
|
|
102
|
+
}
|
|
103
|
+
if (!target.item) {
|
|
104
|
+
throw new AstryxError(
|
|
105
|
+
`Component selector "${value}" names a package but no component`,
|
|
106
|
+
undefined,
|
|
107
|
+
ERROR_CODES.ERR_INVALID_ARGUMENT,
|
|
108
|
+
);
|
|
109
|
+
}
|
|
110
|
+
if (packageScope && packageScope !== target.name) {
|
|
111
|
+
throw new AstryxError(
|
|
112
|
+
`Component selector "${value}" conflicts with --package "${packageScope}"`,
|
|
113
|
+
undefined,
|
|
114
|
+
ERROR_CODES.ERR_INVALID_ARGUMENT,
|
|
115
|
+
);
|
|
116
|
+
}
|
|
117
|
+
return {
|
|
118
|
+
selector: value,
|
|
119
|
+
name: target.item,
|
|
120
|
+
package: target.name,
|
|
121
|
+
...(target.version ? {version: target.version} : {}),
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* A version-qualified selector never falls through to another installed
|
|
127
|
+
* version. Its structured suggestion points at the command that can discover
|
|
128
|
+
* the requested package release.
|
|
129
|
+
* @param {{package?: string, version?: string}} target
|
|
130
|
+
* @param {string} coreDir
|
|
131
|
+
* @param {import('../../foundation/integrations/integrations.mjs').LoadedIntegration[]} loadedIntegrations
|
|
132
|
+
* @returns {void}
|
|
133
|
+
*/
|
|
134
|
+
function requireInstalledSelectorVersion(target, coreDir, loadedIntegrations) {
|
|
135
|
+
if (!target.version) return;
|
|
136
|
+
const packageName = /** @type {string} */ (target.package);
|
|
137
|
+
const installed = installedComponentPackageVersion(
|
|
138
|
+
coreDir,
|
|
139
|
+
loadedIntegrations,
|
|
140
|
+
packageName,
|
|
141
|
+
);
|
|
142
|
+
if (installed === target.version) return;
|
|
143
|
+
const exact = `${packageName}@${target.version}`;
|
|
144
|
+
throw new AstryxError(
|
|
145
|
+
`Package "${exact}" is not installed`,
|
|
146
|
+
[
|
|
147
|
+
{
|
|
148
|
+
name: `astryx discover ${exact}`,
|
|
149
|
+
reason: 'look up this package version',
|
|
150
|
+
},
|
|
151
|
+
],
|
|
152
|
+
ERROR_CODES.ERR_UNKNOWN_PACKAGE,
|
|
153
|
+
);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Turn a single-lookup failure into one complete batch row.
|
|
158
|
+
* @param {string} selector
|
|
159
|
+
* @param {unknown} error
|
|
160
|
+
* @returns {import('./component.type.mjs').ComponentBatchResult}
|
|
161
|
+
*/
|
|
162
|
+
function batchFailure(selector, error) {
|
|
163
|
+
const err =
|
|
164
|
+
error instanceof AstryxError
|
|
165
|
+
? error
|
|
166
|
+
: new AstryxError(
|
|
167
|
+
error instanceof Error ? error.message : String(error),
|
|
168
|
+
undefined,
|
|
169
|
+
ERROR_CODES.ERR_UNKNOWN,
|
|
170
|
+
);
|
|
171
|
+
if (err instanceof ComponentAmbiguityError) {
|
|
172
|
+
return {
|
|
173
|
+
selector,
|
|
174
|
+
status: 'ambiguous',
|
|
175
|
+
code: err.code,
|
|
176
|
+
error: err.message,
|
|
177
|
+
candidates: err.candidates,
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
return {
|
|
181
|
+
selector,
|
|
182
|
+
status: NOT_FOUND_CODES.has(err.code) ? 'not_found' : 'error',
|
|
183
|
+
code: err.code,
|
|
184
|
+
error: err.message,
|
|
185
|
+
...(err.suggestions ? {suggestions: err.suggestions} : {}),
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
|
|
37
189
|
/**
|
|
38
|
-
* @param {
|
|
190
|
+
* @param {unknown[]} selectors
|
|
191
|
+
* @param {object} options
|
|
192
|
+
* @param {string} options.cwd
|
|
193
|
+
* @param {string} [options.package]
|
|
194
|
+
* @param {boolean} [options.props]
|
|
195
|
+
* @param {boolean} [options.source]
|
|
196
|
+
* @param {boolean} [options.showcase]
|
|
197
|
+
* @param {boolean} [options.blocks]
|
|
198
|
+
* @param {'full'|'compact'|'brief'} [options.detail]
|
|
199
|
+
* @param {string|null} [options.lang]
|
|
200
|
+
* @param {boolean} [options.zh]
|
|
201
|
+
* @param {boolean} [options.dense]
|
|
202
|
+
* @param {string} coreDir
|
|
203
|
+
* @returns {Promise<import('./component.type.mjs').ComponentBatchResponse>}
|
|
204
|
+
*/
|
|
205
|
+
async function componentBatch(selectors, options, coreDir) {
|
|
206
|
+
const loadedIntegrations = await loadIntegrationsSafely(options.cwd);
|
|
207
|
+
/** @type {import('./component.type.mjs').ComponentBatchResult[]} */
|
|
208
|
+
const results = [];
|
|
209
|
+
for (const value of selectors) {
|
|
210
|
+
const selector = typeof value === 'string' ? value : String(value);
|
|
211
|
+
try {
|
|
212
|
+
const target = parseComponentSelector(value, options.package);
|
|
213
|
+
requireInstalledSelectorVersion(target, coreDir, loadedIntegrations);
|
|
214
|
+
const result =
|
|
215
|
+
/** @type {import('./component.type.mjs').ComponentSingleResponse} */ (
|
|
216
|
+
await component(target.name, {
|
|
217
|
+
...options,
|
|
218
|
+
lang: options.lang ?? undefined,
|
|
219
|
+
package: target.package,
|
|
220
|
+
})
|
|
221
|
+
);
|
|
222
|
+
results.push({selector, status: 'found', result});
|
|
223
|
+
} catch (error) {
|
|
224
|
+
results.push(batchFailure(selector, error));
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
return {type: 'component.batch', data: {count: results.length, results}};
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
/**
|
|
231
|
+
* @param {string|string[]} [name]
|
|
39
232
|
* @param {object} [options]
|
|
40
233
|
* @param {string} [options.cwd]
|
|
41
234
|
* @param {boolean} [options.list]
|
|
@@ -51,6 +244,7 @@ import {componentDetailBlocks} from './detail/blocks/blocks.mjs';
|
|
|
51
244
|
* @param {boolean} [options.dense]
|
|
52
245
|
* @returns {Promise<(
|
|
53
246
|
* import('./component.type.mjs').ComponentListResponse
|
|
247
|
+
* | import('./component.type.mjs').ComponentBatchResponse
|
|
54
248
|
* | import('./component.type.mjs').ComponentDetailResponse
|
|
55
249
|
* | import('./component.type.mjs').ComponentDetailPropsResponse
|
|
56
250
|
* | import('./component.type.mjs').ComponentDetailSourceResponse
|
|
@@ -74,13 +268,43 @@ export async function component(name, options = {}) {
|
|
|
74
268
|
dense = false,
|
|
75
269
|
} = options;
|
|
76
270
|
|
|
271
|
+
const selectorList = Array.isArray(name) ? name : null;
|
|
272
|
+
const noName = selectorList == null && !name;
|
|
273
|
+
|
|
77
274
|
// Default detail level mirrors the CLI (see commands/component/index.mjs):
|
|
78
275
|
// single-component views default to 'full', list-style views (--list,
|
|
79
276
|
// --category, or no name) default to 'brief' (scannable name lists).
|
|
80
|
-
//
|
|
81
|
-
|
|
277
|
+
// An explicit array remains a batch even when it is empty or a caller also
|
|
278
|
+
// passes a list-only option.
|
|
279
|
+
const isListView =
|
|
280
|
+
selectorList == null && (list || category != null || noName);
|
|
82
281
|
const detail = detailOption ?? (isListView ? 'brief' : 'full');
|
|
83
282
|
|
|
283
|
+
// Same accepted values and codes as the CLI's --detail and --lang, checked
|
|
284
|
+
// first as the CLI parser does.
|
|
285
|
+
if (!DETAIL_LEVELS.includes(detail)) {
|
|
286
|
+
throw new AstryxError(
|
|
287
|
+
`Invalid detail "${String(detail)}". Valid levels: ${DETAIL_LEVELS.join(', ')}`,
|
|
288
|
+
undefined,
|
|
289
|
+
ERROR_CODES.ERR_INVALID_DETAIL,
|
|
290
|
+
);
|
|
291
|
+
}
|
|
292
|
+
if (lang != null && !LANGS.includes(lang)) {
|
|
293
|
+
throw new AstryxError(
|
|
294
|
+
`Invalid lang "${String(lang)}". Valid values: ${LANGS.join(', ')}`,
|
|
295
|
+
undefined,
|
|
296
|
+
ERROR_CODES.ERR_INVALID_LANG,
|
|
297
|
+
);
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
if (selectorList && selectorList.length > COMPONENT_BATCH_SELECTOR_LIMIT) {
|
|
301
|
+
throw new AstryxError(
|
|
302
|
+
`Component batch accepts at most ${COMPONENT_BATCH_SELECTOR_LIMIT} selectors; received ${selectorList.length}`,
|
|
303
|
+
undefined,
|
|
304
|
+
ERROR_CODES.ERR_INVALID_ARGUMENT,
|
|
305
|
+
);
|
|
306
|
+
}
|
|
307
|
+
|
|
84
308
|
const coreDir = requireCoreDir(cwd);
|
|
85
309
|
|
|
86
310
|
// A public API caller could pass a non-string category; the list leaf does
|
|
@@ -94,11 +318,46 @@ export async function component(name, options = {}) {
|
|
|
94
318
|
);
|
|
95
319
|
}
|
|
96
320
|
|
|
321
|
+
// ── Explicit batch selector list ─────────────────────────────────
|
|
322
|
+
// Array shape owns cardinality even if a caller also supplies a list-only
|
|
323
|
+
// option. The aggregate limit above is checked before core or integrations
|
|
324
|
+
// are resolved, so an oversized request can never emit a partial receipt.
|
|
325
|
+
if (selectorList) {
|
|
326
|
+
return componentBatch(
|
|
327
|
+
selectorList,
|
|
328
|
+
{
|
|
329
|
+
cwd,
|
|
330
|
+
package: packageScope,
|
|
331
|
+
props,
|
|
332
|
+
source,
|
|
333
|
+
showcase,
|
|
334
|
+
blocks,
|
|
335
|
+
detail,
|
|
336
|
+
lang,
|
|
337
|
+
zh,
|
|
338
|
+
dense,
|
|
339
|
+
},
|
|
340
|
+
coreDir,
|
|
341
|
+
);
|
|
342
|
+
}
|
|
343
|
+
|
|
97
344
|
// ── List mode ──────────────────────────────────────────────────
|
|
98
|
-
if (category || list ||
|
|
345
|
+
if (category || list || noName) {
|
|
99
346
|
return componentList(coreDir, {cwd, category, detail, zh, dense, lang});
|
|
100
347
|
}
|
|
101
348
|
|
|
349
|
+
if (typeof name === 'string') {
|
|
350
|
+
const target = parseComponentSelector(name, packageScope);
|
|
351
|
+
if (target.version) {
|
|
352
|
+
const loadedIntegrations = await loadIntegrationsSafely(cwd);
|
|
353
|
+
requireInstalledSelectorVersion(target, coreDir, loadedIntegrations);
|
|
354
|
+
}
|
|
355
|
+
if (target.name !== name || target.package !== packageScope) {
|
|
356
|
+
return component(target.name, {...options, package: target.package});
|
|
357
|
+
}
|
|
358
|
+
name = target.name;
|
|
359
|
+
}
|
|
360
|
+
|
|
102
361
|
// ── Single component ───────────────────────────────────────────
|
|
103
362
|
if (typeof name !== 'string') {
|
|
104
363
|
throw new AstryxError(
|
|
@@ -121,14 +380,20 @@ export async function component(name, options = {}) {
|
|
|
121
380
|
// Searches that package first — critical for names that exist in both core
|
|
122
381
|
// and an external package (AppShell, Button, SideNav).
|
|
123
382
|
if (packageScope) {
|
|
124
|
-
const scoped = classifyScope(packageScope, {
|
|
383
|
+
const scoped = classifyScope(packageScope, {
|
|
384
|
+
owners,
|
|
385
|
+
loadedIntegrations,
|
|
386
|
+
cwd,
|
|
387
|
+
name,
|
|
388
|
+
});
|
|
125
389
|
|
|
126
390
|
if (scoped.kind === 'core' || scoped.kind === 'integration') {
|
|
127
391
|
const owner = scoped.owner;
|
|
128
392
|
if (source) {
|
|
129
393
|
return componentDetailSource(dirName, owner.sourcePath, {
|
|
130
394
|
name,
|
|
131
|
-
notFoundInPackage:
|
|
395
|
+
notFoundInPackage:
|
|
396
|
+
scoped.kind === 'integration' ? packageScope : null,
|
|
132
397
|
});
|
|
133
398
|
}
|
|
134
399
|
// showcase/blocks were previously dropped on the scoped path — a
|
|
@@ -143,7 +408,7 @@ export async function component(name, options = {}) {
|
|
|
143
408
|
: componentDetailShowcase(dirName, {cwd, name, resolve: false});
|
|
144
409
|
}
|
|
145
410
|
if (blocks) {
|
|
146
|
-
return componentDetailBlocks(dirName);
|
|
411
|
+
return componentDetailBlocks(dirName, cwd);
|
|
147
412
|
}
|
|
148
413
|
const docs = await loadComponentDoc(owner.docPath, docOpts);
|
|
149
414
|
if (props) return componentDetailProps(docs);
|
|
@@ -156,19 +421,60 @@ export async function component(name, options = {}) {
|
|
|
156
421
|
}
|
|
157
422
|
const extDocPath = resolveLegacyExternalDoc(scoped.ext, dirName);
|
|
158
423
|
if (extDocPath) {
|
|
424
|
+
// Legacy packages ship docs, never source.
|
|
425
|
+
if (source) {
|
|
426
|
+
return componentDetailSource(dirName, null, {
|
|
427
|
+
name,
|
|
428
|
+
notFoundInPackage: packageScope,
|
|
429
|
+
});
|
|
430
|
+
}
|
|
431
|
+
if (blocks) {
|
|
432
|
+
return componentDetailBlocks(dirName, cwd);
|
|
433
|
+
}
|
|
159
434
|
const docs = await loadComponentDoc(extDocPath, docOpts);
|
|
160
435
|
if (props) return componentDetailProps(docs);
|
|
161
|
-
return componentDetail(
|
|
436
|
+
return componentDetail(
|
|
437
|
+
docs,
|
|
438
|
+
{package: scoped.ext.name, sourcePath: null},
|
|
439
|
+
dirName,
|
|
440
|
+
coreDir,
|
|
441
|
+
);
|
|
442
|
+
}
|
|
443
|
+
throw new AstryxError(
|
|
444
|
+
`No component "${name}" in package "${packageScope}"`,
|
|
445
|
+
undefined,
|
|
446
|
+
ERROR_CODES.ERR_UNKNOWN_COMPONENT,
|
|
447
|
+
);
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
// Invalid integration metadata does not create ambiguity against a valid
|
|
451
|
+
// owner. Keep raw owners only when no doc owner is valid, so an integration-
|
|
452
|
+
// only component still exposes its source and returns ERR_INVALID_DOC for
|
|
453
|
+
// detail instead of degrading to an unrelated unknown-component error.
|
|
454
|
+
const validOwners = [];
|
|
455
|
+
for (const owner of owners) {
|
|
456
|
+
if (owner.package === CORE_PACKAGE) {
|
|
457
|
+
validOwners.push(owner);
|
|
458
|
+
continue;
|
|
459
|
+
}
|
|
460
|
+
try {
|
|
461
|
+
await loadComponentDoc(owner.docPath);
|
|
462
|
+
validOwners.push(owner);
|
|
463
|
+
} catch {
|
|
464
|
+
// Project/Doctor report invalid metadata; it is not an effective owner.
|
|
162
465
|
}
|
|
163
|
-
throw new AstryxError(`No component "${name}" in package "${packageScope}"`, undefined, ERROR_CODES.ERR_UNKNOWN_COMPONENT);
|
|
164
466
|
}
|
|
467
|
+
const effectiveOwners = validOwners.length > 0 ? validOwners : owners;
|
|
165
468
|
|
|
166
|
-
// ── Ambiguity: owned by MORE THAN ONE package, no --package
|
|
167
|
-
assertUnambiguousOwners(
|
|
469
|
+
// ── Ambiguity: owned by MORE THAN ONE valid package, no --package ──
|
|
470
|
+
assertUnambiguousOwners(effectiveOwners, dirName);
|
|
168
471
|
|
|
169
472
|
// ── Single non-core owner (an integration provides it, core does not) ──
|
|
170
|
-
if (
|
|
171
|
-
|
|
473
|
+
if (
|
|
474
|
+
effectiveOwners.length === 1 &&
|
|
475
|
+
effectiveOwners[0].package !== CORE_PACKAGE
|
|
476
|
+
) {
|
|
477
|
+
const owner = effectiveOwners[0];
|
|
172
478
|
if (source) {
|
|
173
479
|
return componentDetailSource(dirName, owner.sourcePath, {name});
|
|
174
480
|
}
|
|
@@ -184,7 +490,11 @@ export async function component(name, options = {}) {
|
|
|
184
490
|
// ── No-scope core path ─────────────────────────────────────────
|
|
185
491
|
// `--source` reads core directly (no external/fuzzy fallback).
|
|
186
492
|
if (source) {
|
|
187
|
-
return componentDetailSource(
|
|
493
|
+
return componentDetailSource(
|
|
494
|
+
dirName,
|
|
495
|
+
resolveCoreSourcePath(coreDir, dirName),
|
|
496
|
+
{name},
|
|
497
|
+
);
|
|
188
498
|
}
|
|
189
499
|
if (showcase) {
|
|
190
500
|
return componentDetailShowcase(dirName, {cwd, name});
|
|
@@ -195,7 +505,7 @@ export async function component(name, options = {}) {
|
|
|
195
505
|
|
|
196
506
|
// ── Blocks mode ──────────────────────────────────────────────
|
|
197
507
|
if (blocks) {
|
|
198
|
-
return componentDetailBlocks(dirName);
|
|
508
|
+
return componentDetailBlocks(dirName, cwd);
|
|
199
509
|
}
|
|
200
510
|
|
|
201
511
|
// ── Sub-component scoping ────────────────────────────────────
|
|
@@ -203,10 +513,14 @@ export async function component(name, options = {}) {
|
|
|
203
513
|
// scope the response to just the matching sub-component.
|
|
204
514
|
const sub = scopeSubComponent(docs, dirName, coreDir);
|
|
205
515
|
if (sub) {
|
|
206
|
-
if (props)
|
|
516
|
+
if (props)
|
|
517
|
+
return componentDetailProps({props: sub.matchingComponent.props});
|
|
207
518
|
return componentDetail(
|
|
208
519
|
sub.scoped,
|
|
209
|
-
{
|
|
520
|
+
{
|
|
521
|
+
package: resolved.resolvedOwnerPackage,
|
|
522
|
+
sourcePath: resolved.resolvedSourcePath,
|
|
523
|
+
},
|
|
210
524
|
dirName,
|
|
211
525
|
coreDir,
|
|
212
526
|
);
|
|
@@ -215,7 +529,10 @@ export async function component(name, options = {}) {
|
|
|
215
529
|
if (props) return componentDetailProps(docs);
|
|
216
530
|
return componentDetail(
|
|
217
531
|
docs,
|
|
218
|
-
{
|
|
532
|
+
{
|
|
533
|
+
package: resolved.resolvedOwnerPackage,
|
|
534
|
+
sourcePath: resolved.resolvedSourcePath,
|
|
535
|
+
},
|
|
219
536
|
resolved.resolvedName,
|
|
220
537
|
coreDir,
|
|
221
538
|
);
|
|
@@ -14,6 +14,7 @@ import * as path from 'node:path';
|
|
|
14
14
|
import {fileURLToPath} from 'node:url';
|
|
15
15
|
import {component} from './component.mjs';
|
|
16
16
|
import {AstryxError} from '../error.mjs';
|
|
17
|
+
import {runCli} from '../../test-utils/run-cli.mjs';
|
|
17
18
|
|
|
18
19
|
// api/component/ -> up 4 = repo root (has packages/core, which findCoreDir walks to).
|
|
19
20
|
const REPO = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../../../..');
|
|
@@ -161,3 +162,40 @@ describe('component dispatcher — category guard', () => {
|
|
|
161
162
|
}
|
|
162
163
|
}, SLOW);
|
|
163
164
|
});
|
|
165
|
+
|
|
166
|
+
describe('component dispatcher — detail and lang guards', () => {
|
|
167
|
+
// `detail` and `lang` are the same controls as the CLI's --detail and --lang:
|
|
168
|
+
// same accepted values, same error codes.
|
|
169
|
+
it('rejects a detail level the CLI rejects, with the same code', async () => {
|
|
170
|
+
const cliRun = await runCli(['--json', 'component', '--list', '--detail', 'bogus'], cwd);
|
|
171
|
+
expect(cliRun.code).toBe(1);
|
|
172
|
+
expect(JSON.parse(cliRun.stdout).code).toBe('ERR_INVALID_DETAIL');
|
|
173
|
+
|
|
174
|
+
const bogus = /** @type {any} */ ('bogus');
|
|
175
|
+
for (const call of [
|
|
176
|
+
() => component(undefined, {cwd, list: true, detail: bogus}),
|
|
177
|
+
() => component('Button', {cwd, detail: bogus}),
|
|
178
|
+
]) {
|
|
179
|
+
const err = await call().catch(e => e);
|
|
180
|
+
expect(err).toBeInstanceOf(AstryxError);
|
|
181
|
+
expect(err.code).toBe('ERR_INVALID_DETAIL');
|
|
182
|
+
}
|
|
183
|
+
}, SLOW);
|
|
184
|
+
|
|
185
|
+
it('rejects a lang the CLI rejects, with the same code', async () => {
|
|
186
|
+
const cliRun = await runCli(['--json', 'component', 'Button', '--lang', 'fr'], cwd);
|
|
187
|
+
expect(cliRun.code).toBe(1);
|
|
188
|
+
expect(JSON.parse(cliRun.stdout).code).toBe('ERR_INVALID_LANG');
|
|
189
|
+
|
|
190
|
+
for (const call of [
|
|
191
|
+
() => component('Button', {cwd, lang: 'fr'}),
|
|
192
|
+
() => component(undefined, {cwd, list: true, detail: 'compact', lang: 'fr'}),
|
|
193
|
+
]) {
|
|
194
|
+
const err = await call().catch(e => e);
|
|
195
|
+
expect(err).toBeInstanceOf(AstryxError);
|
|
196
|
+
expect(err.code).toBe('ERR_INVALID_LANG');
|
|
197
|
+
}
|
|
198
|
+
const zh = await component('Button', {cwd, lang: 'zh'});
|
|
199
|
+
expect(zh.type).toBe('component.detail');
|
|
200
|
+
}, SLOW);
|
|
201
|
+
});
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// DO NOT EDIT — run `pnpm sync:api-types` to regenerate.
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
5
|
+
* astryx --json component [--list] [--category X] [--detail names|compact|full]
|
|
6
6
|
*
|
|
7
7
|
* The list view emits ONE `component.list` type across all three detail levels;
|
|
8
8
|
* the depth is carried in `data.detail` and `data.components` holds the grouped
|
|
@@ -28,12 +28,38 @@ export type ComponentListData = ({
|
|
|
28
28
|
detail: "full";
|
|
29
29
|
components: Record<string, import("@astryxdesign/cli/authoring").ComponentDoc[]>;
|
|
30
30
|
});
|
|
31
|
+
/**
|
|
32
|
+
* `component(string[])` always returns this type, including empty and one-item
|
|
33
|
+
* arrays. The CLI returns it for two or more positional selectors.
|
|
34
|
+
*/
|
|
35
|
+
export type ComponentBatchResponse = import("../../foundation/response/batch.type.mjs").BatchResponse<"component.batch", ComponentSingleResponse, ComponentBatchCandidate>;
|
|
36
|
+
/**
|
|
37
|
+
* One installed component that makes an unqualified selector ambiguous.
|
|
38
|
+
* Keys match a component row in `discover.search` so a caller does not learn a
|
|
39
|
+
* second candidate shape.
|
|
40
|
+
*/
|
|
41
|
+
export type ComponentBatchCandidate = {
|
|
42
|
+
package: string;
|
|
43
|
+
component: string;
|
|
44
|
+
kind: "component";
|
|
45
|
+
installed: true;
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* The response a successful single selector would have returned.
|
|
49
|
+
*/
|
|
50
|
+
export type ComponentSingleResponse = (ComponentDetailResponse | ComponentDetailPropsResponse | ComponentDetailSourceResponse | ComponentDetailShowcaseResponse | ComponentDetailBlocksResponse);
|
|
51
|
+
/**
|
|
52
|
+
* One row per requested selector, in argument order. Duplicate selectors keep
|
|
53
|
+
* duplicate rows.
|
|
54
|
+
*/
|
|
55
|
+
export type ComponentBatchResult = import("../../foundation/response/batch.type.mjs").BatchRow<ComponentSingleResponse, ComponentBatchCandidate>;
|
|
31
56
|
/**
|
|
32
57
|
* A single entry in a `component.list` group at `detail: 'names'`. Pre-1.0 the
|
|
33
58
|
* list moved from bare strings to package-qualified objects so consumers can
|
|
34
|
-
* disambiguate ownership (core vs. an integration package). Integration
|
|
35
|
-
* carry `import` — the
|
|
36
|
-
*
|
|
59
|
+
* disambiguate ownership (core vs. an integration package). Integration and
|
|
60
|
+
* legacy `astryx.docs` package entries carry `import` — the same specifier their
|
|
61
|
+
* `component.detail` reports; core entries omit it (the specifier is derived
|
|
62
|
+
* from the component name by the renderer).
|
|
37
63
|
*/
|
|
38
64
|
export type ComponentListEntry = {
|
|
39
65
|
name: string;
|
|
@@ -42,7 +68,7 @@ export type ComponentListEntry = {
|
|
|
42
68
|
*/
|
|
43
69
|
package: string;
|
|
44
70
|
/**
|
|
45
|
-
* - Import specifier; present for integration components, absent for core.
|
|
71
|
+
* - Import specifier; present for integration and legacy package components, absent for core.
|
|
46
72
|
*/
|
|
47
73
|
import?: string | undefined;
|
|
48
74
|
};
|
|
@@ -55,11 +81,21 @@ export type ComponentBriefEntry = {
|
|
|
55
81
|
import: string;
|
|
56
82
|
};
|
|
57
83
|
/**
|
|
58
|
-
*
|
|
84
|
+
* astryx --json component <name>
|
|
59
85
|
*/
|
|
60
86
|
export type ComponentDetailResponse = {
|
|
61
87
|
type: "component.detail";
|
|
62
|
-
data: import("@astryxdesign/cli/authoring").ComponentDoc & ComponentOwnership;
|
|
88
|
+
data: import("@astryxdesign/cli/authoring").ComponentDoc & ComponentOwnership & ComponentDetailScope;
|
|
89
|
+
};
|
|
90
|
+
/**
|
|
91
|
+
* Present only when the requested name is a sub-component documented inside a
|
|
92
|
+
* parent's doc (e.g. `HStack` in the `Stack` doc); the payload is scoped to it.
|
|
93
|
+
*/
|
|
94
|
+
export type ComponentDetailScope = {
|
|
95
|
+
/**
|
|
96
|
+
* - Name of the parent doc the payload was scoped from, e.g. 'Stack'.
|
|
97
|
+
*/
|
|
98
|
+
parentDoc?: string | undefined;
|
|
63
99
|
};
|
|
64
100
|
/**
|
|
65
101
|
* Ownership metadata attached to every `component.detail` payload. Exposes the
|
|
@@ -81,14 +117,14 @@ export type ComponentOwnership = {
|
|
|
81
117
|
sourceAvailable: boolean;
|
|
82
118
|
};
|
|
83
119
|
/**
|
|
84
|
-
*
|
|
120
|
+
* astryx --json component <name> --props
|
|
85
121
|
*/
|
|
86
122
|
export type ComponentDetailPropsResponse = {
|
|
87
123
|
type: "component.detail.props";
|
|
88
124
|
data: import("@astryxdesign/cli/authoring").ComponentPropDoc[];
|
|
89
125
|
};
|
|
90
126
|
/**
|
|
91
|
-
*
|
|
127
|
+
* astryx --json component <name> --source
|
|
92
128
|
*/
|
|
93
129
|
export type ComponentDetailSourceResponse = {
|
|
94
130
|
type: "component.detail.source";
|
|
@@ -98,7 +134,7 @@ export type ComponentDetailSourceResponse = {
|
|
|
98
134
|
};
|
|
99
135
|
};
|
|
100
136
|
/**
|
|
101
|
-
*
|
|
137
|
+
* astryx --json component <name> --showcase
|
|
102
138
|
*/
|
|
103
139
|
export type ComponentDetailShowcaseResponse = {
|
|
104
140
|
type: "component.detail.showcase";
|
|
@@ -109,7 +145,7 @@ export type ComponentDetailShowcaseResponse = {
|
|
|
109
145
|
};
|
|
110
146
|
};
|
|
111
147
|
/**
|
|
112
|
-
*
|
|
148
|
+
* astryx --json component <name> --blocks
|
|
113
149
|
*/
|
|
114
150
|
export type ComponentDetailBlocksResponse = {
|
|
115
151
|
type: "component.detail.blocks";
|