@astryxdesign/cli 0.6.3 → 0.6.4-canary.10dd683
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 +117 -78
- 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 +6 -12
- package/api/component/_adapter.mjs +20 -10
- package/api/component/component.doc.mjs +13 -3
- package/api/component/component.mjs +91 -14
- package/api/component/component.test.mjs +38 -0
- package/api/component/component.type.d.mts +22 -11
- package/api/component/component.type.mjs +32 -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 +164 -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 +99 -1
- package/api/doctor/doctor.doc.mjs +1 -0
- package/api/doctor/doctor.mjs +548 -1
- package/api/doctor/doctor.test.mjs +610 -1
- 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 +1 -1
- package/api/index.mjs +1 -0
- 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.mjs +83 -7
- 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 -0
- package/api/json/isError.doc.mjs +1 -0
- package/api/json/parseResponse.doc.mjs +3 -2
- package/api/layout/_adapter.mjs +20 -5
- package/api/layout/expand/expand.mjs +7 -5
- package/api/layout/expand/expand.path-safety.test.mjs +53 -0
- package/api/layout/grammar/grammar.mjs +2 -1
- package/api/layout/layoutCheck.doc.mjs +1 -0
- package/api/layout/layoutExpand.doc.mjs +2 -1
- package/api/layout/layoutGrammar.doc.mjs +1 -0
- 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 +124 -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 +1072 -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 +45 -8
- 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/run.mjs +356 -59
- 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 +27 -11
- package/assets/codemods/__tests__/registry.test.mjs +1 -0
- package/assets/codemods/__tests__/runner.test.mjs +330 -8
- package/assets/codemods/integration-discovery.mjs +48 -4
- package/assets/codemods/integration-discovery.test.mjs +73 -0
- package/assets/codemods/integration-runner.mjs +56 -4
- 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 +350 -102
- 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/{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 +10 -2
- 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 +29 -6
- 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 +4 -3
- package/authoring/doctypes/command/parse.d.mts +2 -2
- package/authoring/doctypes/command/parse.mjs +1 -1
- package/authoring/doctypes/command/type.ts +5 -4
- 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/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 +3 -8
- package/clients/cli/commands/component-ownership.test.mjs +3 -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 +1 -1
- package/clients/cli/commands/component.test.mjs +19 -0
- 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 +193 -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/layout-check.doc.mjs +15 -4
- package/clients/cli/commands/layout-expand.doc.mjs +22 -5
- package/clients/cli/commands/layout-grammar.doc.mjs +1 -1
- package/clients/cli/commands/layout.doc.mjs +3 -3
- package/clients/cli/commands/layout.mjs +21 -9
- package/clients/cli/commands/layout.path-help.test.mjs +33 -0
- package/clients/cli/commands/layout.stdin-cap.test.mjs +47 -0
- package/clients/cli/commands/layout.text-fields.test.mjs +39 -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 +719 -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 -30
- 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 +97 -0
- package/clients/cli/lib/hook-format.mjs +19 -10
- package/clients/cli/lib/json-shim.mjs +38 -2
- package/clients/cli/lib/json-shim.test.mjs +83 -0
- package/clients/cli/lib/manifest.d.ts +2 -0
- package/clients/cli/lib/manifest.mjs +37 -2
- package/clients/cli/lib/manifest.test.mjs +17 -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 +774 -83
- 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 +1642 -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 +598 -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/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 +41 -21
- package/foundation/response/response-types.doc.test.mjs +158 -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/expand.d.mts +2 -0
- package/foundation/xle/expand.mjs +4 -3
- package/foundation/xle/expand.test.mjs +54 -0
- package/foundation/xle/xle.test.mjs +13 -0
- package/package.json +10 -11
- package/assets/templates/themes/manifest.json +0 -95
- 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
|
@@ -35,16 +35,15 @@ import {
|
|
|
35
35
|
resolveIntegrationImportPath as resolveIntegrationImport,
|
|
36
36
|
} from '../../foundation/discovery/component-discovery.mjs';
|
|
37
37
|
import {Project} from '../../foundation/config/project.mjs';
|
|
38
|
-
import {
|
|
38
|
+
import {loadComponentDoc as loadValidatedComponentDoc} from '../../foundation/discovery/component-loader.mjs';
|
|
39
39
|
import {searchComponents} from '../../foundation/text/string-utils.mjs';
|
|
40
40
|
import {AstryxError} from '../error.mjs';
|
|
41
41
|
|
|
42
42
|
export {CORE_PACKAGE};
|
|
43
43
|
|
|
44
44
|
/**
|
|
45
|
-
* A loaded component doc.
|
|
46
|
-
*
|
|
47
|
-
* captures the fields the API reads across both forms.
|
|
45
|
+
* A loaded component doc. The shared validated loader accepts stamped and legacy
|
|
46
|
+
* component docs; this loose view captures the fields the API reads across both.
|
|
48
47
|
* @typedef {object} LoadedComponentDoc
|
|
49
48
|
* @property {string} [name]
|
|
50
49
|
* @property {string} [description]
|
|
@@ -56,9 +55,7 @@ export {CORE_PACKAGE};
|
|
|
56
55
|
*/
|
|
57
56
|
|
|
58
57
|
/**
|
|
59
|
-
* Options object for
|
|
60
|
-
* as a cast target so `lang` (which the API may hold as `string|null`) type
|
|
61
|
-
* checks against `loadDocs`'s `lang?: string`).
|
|
58
|
+
* Options object for the shared component-doc loader.
|
|
62
59
|
* @typedef {{zh?: boolean, dense?: boolean, lang?: string}} LoadDocsOpts
|
|
63
60
|
*/
|
|
64
61
|
|
|
@@ -381,9 +378,22 @@ export async function resolveUnscopedDoc(dirName, {coreDir, cwd, name}) {
|
|
|
381
378
|
*/
|
|
382
379
|
export async function loadComponentDoc(docPath, opts = {}) {
|
|
383
380
|
const {zh = false, dense = false, lang = null} = opts;
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
381
|
+
try {
|
|
382
|
+
return /** @type {LoadedComponentDoc} */ (
|
|
383
|
+
await loadValidatedComponentDoc(
|
|
384
|
+
docPath,
|
|
385
|
+
/** @type {LoadDocsOpts} */ ({zh, dense, lang}),
|
|
386
|
+
)
|
|
387
|
+
);
|
|
388
|
+
} catch (err) {
|
|
389
|
+
throw new AstryxError(
|
|
390
|
+
`Cannot load component metadata: ${
|
|
391
|
+
err instanceof Error ? err.message : String(err)
|
|
392
|
+
}`,
|
|
393
|
+
undefined,
|
|
394
|
+
ERROR_CODES.ERR_INVALID_DOC,
|
|
395
|
+
);
|
|
396
|
+
}
|
|
387
397
|
}
|
|
388
398
|
|
|
389
399
|
/**
|
|
@@ -12,6 +12,7 @@ export const doc = {
|
|
|
12
12
|
type: 'function',
|
|
13
13
|
kind: 'api',
|
|
14
14
|
name: 'component',
|
|
15
|
+
namespace: 'cli/api',
|
|
15
16
|
displayName: 'component()',
|
|
16
17
|
summary:
|
|
17
18
|
'Resolve a component by name, or list the catalog, with optional focused slices (props, source, showcase, blocks).',
|
|
@@ -91,7 +92,8 @@ export const doc = {
|
|
|
91
92
|
{
|
|
92
93
|
name: 'options.lang',
|
|
93
94
|
type: 'string',
|
|
94
|
-
description:
|
|
95
|
+
description:
|
|
96
|
+
"Language code for localized doc content: 'en', 'zh', or 'dense'.",
|
|
95
97
|
},
|
|
96
98
|
{
|
|
97
99
|
name: 'options.zh',
|
|
@@ -108,12 +110,12 @@ export const doc = {
|
|
|
108
110
|
{
|
|
109
111
|
type: 'component.list',
|
|
110
112
|
description:
|
|
111
|
-
"The catalog grouped by category. data.detail is the level ('names' | 'compact' | 'full') and data.components is the grouped map: names entries with name, package, and an optional canonical import for
|
|
113
|
+
"The catalog grouped by category. data.detail is the level ('names' | 'compact' | 'full') and data.components is the grouped map: names entries with name, package, and an optional canonical import for integration and legacy package components; brief entries; or full ComponentDoc entries.",
|
|
112
114
|
},
|
|
113
115
|
{
|
|
114
116
|
type: 'component.detail',
|
|
115
117
|
description:
|
|
116
|
-
"One component's authored ComponentDoc plus ownership metadata (owner package, import specifier, whether source is available).",
|
|
118
|
+
"One component's authored ComponentDoc plus ownership metadata (owner package, import specifier, whether source is available). When the name is a sub-component documented in a parent's doc, the payload is scoped to it and parentDoc names that parent.",
|
|
117
119
|
},
|
|
118
120
|
{
|
|
119
121
|
type: 'component.detail.props',
|
|
@@ -135,6 +137,14 @@ export const doc = {
|
|
|
135
137
|
},
|
|
136
138
|
],
|
|
137
139
|
throws: [
|
|
140
|
+
{
|
|
141
|
+
code: 'ERR_INVALID_DETAIL',
|
|
142
|
+
when: "options.detail is not 'full', 'compact', or 'brief'",
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
code: 'ERR_INVALID_LANG',
|
|
146
|
+
when: "options.lang is set to anything other than 'en', 'zh', or 'dense'",
|
|
147
|
+
},
|
|
138
148
|
{
|
|
139
149
|
code: 'ERR_CORE_NOT_FOUND',
|
|
140
150
|
when: '@astryxdesign/core cannot be resolved from cwd',
|
|
@@ -34,6 +34,11 @@ import {componentDetailSource} from './detail/source/source.mjs';
|
|
|
34
34
|
import {componentDetailShowcase} from './detail/showcase/showcase.mjs';
|
|
35
35
|
import {componentDetailBlocks} from './detail/blocks/blocks.mjs';
|
|
36
36
|
|
|
37
|
+
/** @type {ReadonlyArray<string>} */
|
|
38
|
+
const DETAIL_LEVELS = ['full', 'compact', 'brief'];
|
|
39
|
+
/** @type {ReadonlyArray<string>} */
|
|
40
|
+
const LANGS = ['en', 'zh', 'dense'];
|
|
41
|
+
|
|
37
42
|
/**
|
|
38
43
|
* @param {string} [name]
|
|
39
44
|
* @param {object} [options]
|
|
@@ -81,6 +86,23 @@ export async function component(name, options = {}) {
|
|
|
81
86
|
const isListView = list || category != null || !name;
|
|
82
87
|
const detail = detailOption ?? (isListView ? 'brief' : 'full');
|
|
83
88
|
|
|
89
|
+
// Same accepted values and codes as the CLI's --detail and --lang, checked
|
|
90
|
+
// first as the CLI parser does.
|
|
91
|
+
if (!DETAIL_LEVELS.includes(detail)) {
|
|
92
|
+
throw new AstryxError(
|
|
93
|
+
`Invalid detail "${String(detail)}". Valid levels: ${DETAIL_LEVELS.join(', ')}`,
|
|
94
|
+
undefined,
|
|
95
|
+
ERROR_CODES.ERR_INVALID_DETAIL,
|
|
96
|
+
);
|
|
97
|
+
}
|
|
98
|
+
if (lang != null && !LANGS.includes(lang)) {
|
|
99
|
+
throw new AstryxError(
|
|
100
|
+
`Invalid lang "${String(lang)}". Valid values: ${LANGS.join(', ')}`,
|
|
101
|
+
undefined,
|
|
102
|
+
ERROR_CODES.ERR_INVALID_LANG,
|
|
103
|
+
);
|
|
104
|
+
}
|
|
105
|
+
|
|
84
106
|
const coreDir = requireCoreDir(cwd);
|
|
85
107
|
|
|
86
108
|
// A public API caller could pass a non-string category; the list leaf does
|
|
@@ -121,14 +143,20 @@ export async function component(name, options = {}) {
|
|
|
121
143
|
// Searches that package first — critical for names that exist in both core
|
|
122
144
|
// and an external package (AppShell, Button, SideNav).
|
|
123
145
|
if (packageScope) {
|
|
124
|
-
const scoped = classifyScope(packageScope, {
|
|
146
|
+
const scoped = classifyScope(packageScope, {
|
|
147
|
+
owners,
|
|
148
|
+
loadedIntegrations,
|
|
149
|
+
cwd,
|
|
150
|
+
name,
|
|
151
|
+
});
|
|
125
152
|
|
|
126
153
|
if (scoped.kind === 'core' || scoped.kind === 'integration') {
|
|
127
154
|
const owner = scoped.owner;
|
|
128
155
|
if (source) {
|
|
129
156
|
return componentDetailSource(dirName, owner.sourcePath, {
|
|
130
157
|
name,
|
|
131
|
-
notFoundInPackage:
|
|
158
|
+
notFoundInPackage:
|
|
159
|
+
scoped.kind === 'integration' ? packageScope : null,
|
|
132
160
|
});
|
|
133
161
|
}
|
|
134
162
|
// showcase/blocks were previously dropped on the scoped path — a
|
|
@@ -143,7 +171,7 @@ export async function component(name, options = {}) {
|
|
|
143
171
|
: componentDetailShowcase(dirName, {cwd, name, resolve: false});
|
|
144
172
|
}
|
|
145
173
|
if (blocks) {
|
|
146
|
-
return componentDetailBlocks(dirName);
|
|
174
|
+
return componentDetailBlocks(dirName, cwd);
|
|
147
175
|
}
|
|
148
176
|
const docs = await loadComponentDoc(owner.docPath, docOpts);
|
|
149
177
|
if (props) return componentDetailProps(docs);
|
|
@@ -156,19 +184,57 @@ export async function component(name, options = {}) {
|
|
|
156
184
|
}
|
|
157
185
|
const extDocPath = resolveLegacyExternalDoc(scoped.ext, dirName);
|
|
158
186
|
if (extDocPath) {
|
|
187
|
+
// Legacy packages ship docs, never source.
|
|
188
|
+
if (source) {
|
|
189
|
+
return componentDetailSource(dirName, null, {name, notFoundInPackage: packageScope});
|
|
190
|
+
}
|
|
191
|
+
if (blocks) {
|
|
192
|
+
return componentDetailBlocks(dirName, cwd);
|
|
193
|
+
}
|
|
159
194
|
const docs = await loadComponentDoc(extDocPath, docOpts);
|
|
160
195
|
if (props) return componentDetailProps(docs);
|
|
161
|
-
return componentDetail(
|
|
196
|
+
return componentDetail(
|
|
197
|
+
docs,
|
|
198
|
+
{package: scoped.ext.name, sourcePath: null},
|
|
199
|
+
dirName,
|
|
200
|
+
coreDir,
|
|
201
|
+
);
|
|
202
|
+
}
|
|
203
|
+
throw new AstryxError(
|
|
204
|
+
`No component "${name}" in package "${packageScope}"`,
|
|
205
|
+
undefined,
|
|
206
|
+
ERROR_CODES.ERR_UNKNOWN_COMPONENT,
|
|
207
|
+
);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
// Invalid integration metadata does not create ambiguity against a valid
|
|
211
|
+
// owner. Keep raw owners only when no doc owner is valid, so an integration-
|
|
212
|
+
// only component still exposes its source and returns ERR_INVALID_DOC for
|
|
213
|
+
// detail instead of degrading to an unrelated unknown-component error.
|
|
214
|
+
const validOwners = [];
|
|
215
|
+
for (const owner of owners) {
|
|
216
|
+
if (owner.package === CORE_PACKAGE) {
|
|
217
|
+
validOwners.push(owner);
|
|
218
|
+
continue;
|
|
219
|
+
}
|
|
220
|
+
try {
|
|
221
|
+
await loadComponentDoc(owner.docPath);
|
|
222
|
+
validOwners.push(owner);
|
|
223
|
+
} catch {
|
|
224
|
+
// Project/Doctor report invalid metadata; it is not an effective owner.
|
|
162
225
|
}
|
|
163
|
-
throw new AstryxError(`No component "${name}" in package "${packageScope}"`, undefined, ERROR_CODES.ERR_UNKNOWN_COMPONENT);
|
|
164
226
|
}
|
|
227
|
+
const effectiveOwners = validOwners.length > 0 ? validOwners : owners;
|
|
165
228
|
|
|
166
|
-
// ── Ambiguity: owned by MORE THAN ONE package, no --package
|
|
167
|
-
assertUnambiguousOwners(
|
|
229
|
+
// ── Ambiguity: owned by MORE THAN ONE valid package, no --package ──
|
|
230
|
+
assertUnambiguousOwners(effectiveOwners, dirName);
|
|
168
231
|
|
|
169
232
|
// ── Single non-core owner (an integration provides it, core does not) ──
|
|
170
|
-
if (
|
|
171
|
-
|
|
233
|
+
if (
|
|
234
|
+
effectiveOwners.length === 1 &&
|
|
235
|
+
effectiveOwners[0].package !== CORE_PACKAGE
|
|
236
|
+
) {
|
|
237
|
+
const owner = effectiveOwners[0];
|
|
172
238
|
if (source) {
|
|
173
239
|
return componentDetailSource(dirName, owner.sourcePath, {name});
|
|
174
240
|
}
|
|
@@ -184,7 +250,11 @@ export async function component(name, options = {}) {
|
|
|
184
250
|
// ── No-scope core path ─────────────────────────────────────────
|
|
185
251
|
// `--source` reads core directly (no external/fuzzy fallback).
|
|
186
252
|
if (source) {
|
|
187
|
-
return componentDetailSource(
|
|
253
|
+
return componentDetailSource(
|
|
254
|
+
dirName,
|
|
255
|
+
resolveCoreSourcePath(coreDir, dirName),
|
|
256
|
+
{name},
|
|
257
|
+
);
|
|
188
258
|
}
|
|
189
259
|
if (showcase) {
|
|
190
260
|
return componentDetailShowcase(dirName, {cwd, name});
|
|
@@ -195,7 +265,7 @@ export async function component(name, options = {}) {
|
|
|
195
265
|
|
|
196
266
|
// ── Blocks mode ──────────────────────────────────────────────
|
|
197
267
|
if (blocks) {
|
|
198
|
-
return componentDetailBlocks(dirName);
|
|
268
|
+
return componentDetailBlocks(dirName, cwd);
|
|
199
269
|
}
|
|
200
270
|
|
|
201
271
|
// ── Sub-component scoping ────────────────────────────────────
|
|
@@ -203,10 +273,14 @@ export async function component(name, options = {}) {
|
|
|
203
273
|
// scope the response to just the matching sub-component.
|
|
204
274
|
const sub = scopeSubComponent(docs, dirName, coreDir);
|
|
205
275
|
if (sub) {
|
|
206
|
-
if (props)
|
|
276
|
+
if (props)
|
|
277
|
+
return componentDetailProps({props: sub.matchingComponent.props});
|
|
207
278
|
return componentDetail(
|
|
208
279
|
sub.scoped,
|
|
209
|
-
{
|
|
280
|
+
{
|
|
281
|
+
package: resolved.resolvedOwnerPackage,
|
|
282
|
+
sourcePath: resolved.resolvedSourcePath,
|
|
283
|
+
},
|
|
210
284
|
dirName,
|
|
211
285
|
coreDir,
|
|
212
286
|
);
|
|
@@ -215,7 +289,10 @@ export async function component(name, options = {}) {
|
|
|
215
289
|
if (props) return componentDetailProps(docs);
|
|
216
290
|
return componentDetail(
|
|
217
291
|
docs,
|
|
218
|
-
{
|
|
292
|
+
{
|
|
293
|
+
package: resolved.resolvedOwnerPackage,
|
|
294
|
+
sourcePath: resolved.resolvedSourcePath,
|
|
295
|
+
},
|
|
219
296
|
resolved.resolvedName,
|
|
220
297
|
coreDir,
|
|
221
298
|
);
|
|
@@ -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
|
|
@@ -31,9 +31,10 @@ export type ComponentListData = ({
|
|
|
31
31
|
/**
|
|
32
32
|
* A single entry in a `component.list` group at `detail: 'names'`. Pre-1.0 the
|
|
33
33
|
* 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
|
-
*
|
|
34
|
+
* disambiguate ownership (core vs. an integration package). Integration and
|
|
35
|
+
* legacy `astryx.docs` package entries carry `import` — the same specifier their
|
|
36
|
+
* `component.detail` reports; core entries omit it (the specifier is derived
|
|
37
|
+
* from the component name by the renderer).
|
|
37
38
|
*/
|
|
38
39
|
export type ComponentListEntry = {
|
|
39
40
|
name: string;
|
|
@@ -42,7 +43,7 @@ export type ComponentListEntry = {
|
|
|
42
43
|
*/
|
|
43
44
|
package: string;
|
|
44
45
|
/**
|
|
45
|
-
* - Import specifier; present for integration components, absent for core.
|
|
46
|
+
* - Import specifier; present for integration and legacy package components, absent for core.
|
|
46
47
|
*/
|
|
47
48
|
import?: string | undefined;
|
|
48
49
|
};
|
|
@@ -55,11 +56,21 @@ export type ComponentBriefEntry = {
|
|
|
55
56
|
import: string;
|
|
56
57
|
};
|
|
57
58
|
/**
|
|
58
|
-
*
|
|
59
|
+
* astryx --json component <name>
|
|
59
60
|
*/
|
|
60
61
|
export type ComponentDetailResponse = {
|
|
61
62
|
type: "component.detail";
|
|
62
|
-
data: import("@astryxdesign/cli/authoring").ComponentDoc & ComponentOwnership;
|
|
63
|
+
data: import("@astryxdesign/cli/authoring").ComponentDoc & ComponentOwnership & ComponentDetailScope;
|
|
64
|
+
};
|
|
65
|
+
/**
|
|
66
|
+
* Present only when the requested name is a sub-component documented inside a
|
|
67
|
+
* parent's doc (e.g. `HStack` in the `Stack` doc); the payload is scoped to it.
|
|
68
|
+
*/
|
|
69
|
+
export type ComponentDetailScope = {
|
|
70
|
+
/**
|
|
71
|
+
* - Name of the parent doc the payload was scoped from, e.g. 'Stack'.
|
|
72
|
+
*/
|
|
73
|
+
parentDoc?: string | undefined;
|
|
63
74
|
};
|
|
64
75
|
/**
|
|
65
76
|
* Ownership metadata attached to every `component.detail` payload. Exposes the
|
|
@@ -81,14 +92,14 @@ export type ComponentOwnership = {
|
|
|
81
92
|
sourceAvailable: boolean;
|
|
82
93
|
};
|
|
83
94
|
/**
|
|
84
|
-
*
|
|
95
|
+
* astryx --json component <name> --props
|
|
85
96
|
*/
|
|
86
97
|
export type ComponentDetailPropsResponse = {
|
|
87
98
|
type: "component.detail.props";
|
|
88
99
|
data: import("@astryxdesign/cli/authoring").ComponentPropDoc[];
|
|
89
100
|
};
|
|
90
101
|
/**
|
|
91
|
-
*
|
|
102
|
+
* astryx --json component <name> --source
|
|
92
103
|
*/
|
|
93
104
|
export type ComponentDetailSourceResponse = {
|
|
94
105
|
type: "component.detail.source";
|
|
@@ -98,7 +109,7 @@ export type ComponentDetailSourceResponse = {
|
|
|
98
109
|
};
|
|
99
110
|
};
|
|
100
111
|
/**
|
|
101
|
-
*
|
|
112
|
+
* astryx --json component <name> --showcase
|
|
102
113
|
*/
|
|
103
114
|
export type ComponentDetailShowcaseResponse = {
|
|
104
115
|
type: "component.detail.showcase";
|
|
@@ -109,7 +120,7 @@ export type ComponentDetailShowcaseResponse = {
|
|
|
109
120
|
};
|
|
110
121
|
};
|
|
111
122
|
/**
|
|
112
|
-
*
|
|
123
|
+
* astryx --json component <name> --blocks
|
|
113
124
|
*/
|
|
114
125
|
export type ComponentDetailBlocksResponse = {
|
|
115
126
|
type: "component.detail.blocks";
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
/**
|
|
4
4
|
* @file Colocated types for the `component` command — source of truth for the
|
|
5
5
|
* component command's JSON responses. These typedefs describe the `{type, data}`
|
|
6
|
-
* envelopes emitted by `
|
|
6
|
+
* envelopes emitted by `astryx --json component` and returned by the `component()`
|
|
7
7
|
* API; the `types/component.d.ts` barrel re-exports them for consumers.
|
|
8
8
|
*
|
|
9
9
|
* Detail-level contract for list views (brief < compact < full):
|
|
@@ -11,23 +11,23 @@
|
|
|
11
11
|
* --detail compact Names + 1-line description + import path.
|
|
12
12
|
* --detail full Full ComponentDoc per entry (props, theming, examples, etc.).
|
|
13
13
|
*
|
|
14
|
-
* Invocation
|
|
14
|
+
* Invocation -> type discriminator
|
|
15
15
|
* ------------------------------------------------------------------
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
* (not found)
|
|
16
|
+
* astryx --json component -> component.list (data.detail='names')
|
|
17
|
+
* astryx --json component --list -> component.list (data.detail='names')
|
|
18
|
+
* astryx --json component --category Form -> component.list (filtered)
|
|
19
|
+
* astryx --json component --list --detail compact -> component.list (data.detail='compact')
|
|
20
|
+
* astryx --json component --list --detail full -> component.list (data.detail='full')
|
|
21
|
+
* astryx --json component Button -> component.detail
|
|
22
|
+
* astryx --json component Button --props -> component.detail.props
|
|
23
|
+
* astryx --json component Button --source -> component.detail.source
|
|
24
|
+
* astryx --json component Button --showcase -> component.detail.showcase
|
|
25
|
+
* astryx --json component Button --blocks -> component.detail.blocks
|
|
26
|
+
* (not found) -> CLIError
|
|
27
27
|
*/
|
|
28
28
|
|
|
29
29
|
/**
|
|
30
|
-
*
|
|
30
|
+
* astryx --json component [--list] [--category X] [--detail names|compact|full]
|
|
31
31
|
*
|
|
32
32
|
* The list view emits ONE `component.list` type across all three detail levels;
|
|
33
33
|
* the depth is carried in `data.detail` and `data.components` holds the grouped
|
|
@@ -52,13 +52,14 @@
|
|
|
52
52
|
/**
|
|
53
53
|
* A single entry in a `component.list` group at `detail: 'names'`. Pre-1.0 the
|
|
54
54
|
* list moved from bare strings to package-qualified objects so consumers can
|
|
55
|
-
* disambiguate ownership (core vs. an integration package). Integration
|
|
56
|
-
* carry `import` — the
|
|
57
|
-
*
|
|
55
|
+
* disambiguate ownership (core vs. an integration package). Integration and
|
|
56
|
+
* legacy `astryx.docs` package entries carry `import` — the same specifier their
|
|
57
|
+
* `component.detail` reports; core entries omit it (the specifier is derived
|
|
58
|
+
* from the component name by the renderer).
|
|
58
59
|
* @typedef {object} ComponentListEntry
|
|
59
60
|
* @property {string} name
|
|
60
61
|
* @property {string} package - Owner package, e.g. '@astryxdesign/core' or '@acme/astryx-meta'.
|
|
61
|
-
* @property {string} [import] - Import specifier; present for integration components, absent for core.
|
|
62
|
+
* @property {string} [import] - Import specifier; present for integration and legacy package components, absent for core.
|
|
62
63
|
*/
|
|
63
64
|
|
|
64
65
|
/**
|
|
@@ -70,10 +71,17 @@
|
|
|
70
71
|
*/
|
|
71
72
|
|
|
72
73
|
/**
|
|
73
|
-
*
|
|
74
|
+
* astryx --json component <name>
|
|
74
75
|
* @typedef {object} ComponentDetailResponse
|
|
75
76
|
* @property {'component.detail'} type
|
|
76
|
-
* @property {import('@astryxdesign/cli/authoring').ComponentDoc & ComponentOwnership} data
|
|
77
|
+
* @property {import('@astryxdesign/cli/authoring').ComponentDoc & ComponentOwnership & ComponentDetailScope} data
|
|
78
|
+
*/
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Present only when the requested name is a sub-component documented inside a
|
|
82
|
+
* parent's doc (e.g. `HStack` in the `Stack` doc); the payload is scoped to it.
|
|
83
|
+
* @typedef {object} ComponentDetailScope
|
|
84
|
+
* @property {string} [parentDoc] - Name of the parent doc the payload was scoped from, e.g. 'Stack'.
|
|
77
85
|
*/
|
|
78
86
|
|
|
79
87
|
/**
|
|
@@ -87,28 +95,28 @@
|
|
|
87
95
|
*/
|
|
88
96
|
|
|
89
97
|
/**
|
|
90
|
-
*
|
|
98
|
+
* astryx --json component <name> --props
|
|
91
99
|
* @typedef {object} ComponentDetailPropsResponse
|
|
92
100
|
* @property {'component.detail.props'} type
|
|
93
101
|
* @property {import('@astryxdesign/cli/authoring').ComponentPropDoc[]} data
|
|
94
102
|
*/
|
|
95
103
|
|
|
96
104
|
/**
|
|
97
|
-
*
|
|
105
|
+
* astryx --json component <name> --source
|
|
98
106
|
* @typedef {object} ComponentDetailSourceResponse
|
|
99
107
|
* @property {'component.detail.source'} type
|
|
100
108
|
* @property {{component: string; source: string}} data
|
|
101
109
|
*/
|
|
102
110
|
|
|
103
111
|
/**
|
|
104
|
-
*
|
|
112
|
+
* astryx --json component <name> --showcase
|
|
105
113
|
* @typedef {object} ComponentDetailShowcaseResponse
|
|
106
114
|
* @property {'component.detail.showcase'} type
|
|
107
115
|
* @property {{component: string; aspectRatio: number; source: string}} data
|
|
108
116
|
*/
|
|
109
117
|
|
|
110
118
|
/**
|
|
111
|
-
*
|
|
119
|
+
* astryx --json component <name> --blocks
|
|
112
120
|
* @typedef {object} ComponentDetailBlocksResponse
|
|
113
121
|
* @property {'component.detail.blocks'} type
|
|
114
122
|
* @property {{component: string; showcase: BlockEntry | null; examples: BlockEntry[]; related: BlockEntry[]}} data
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
* envelope, splitting them into the hero showcase, component-specific examples,
|
|
7
7
|
* and broader related blocks.
|
|
8
8
|
* @param {string} componentName
|
|
9
|
+
* @param {string} cwd - project to discover blocks from; never the process cwd
|
|
9
10
|
* @returns {Promise<import('../../component.type.mjs').ComponentDetailBlocksResponse>}
|
|
10
11
|
*/
|
|
11
|
-
export function componentDetailBlocks(componentName: string): Promise<import("../../component.type.mjs").ComponentDetailBlocksResponse>;
|
|
12
|
+
export function componentDetailBlocks(componentName: string, cwd: string): Promise<import("../../component.type.mjs").ComponentDetailBlocksResponse>;
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
/**
|
|
4
4
|
* @file `component.detail.blocks` leaf — a component's example/related blocks.
|
|
5
5
|
*
|
|
6
|
-
* @input a component name
|
|
6
|
+
* @input a component name + the project cwd
|
|
7
7
|
* @output the `component.detail.blocks` envelope (showcase, examples, related)
|
|
8
8
|
* @position api/component/detail/blocks (projection leaf; routed by component.mjs)
|
|
9
9
|
*/
|
|
@@ -16,10 +16,11 @@ import {findRelatedBlocks} from '../../../template/template.mjs';
|
|
|
16
16
|
* envelope, splitting them into the hero showcase, component-specific examples,
|
|
17
17
|
* and broader related blocks.
|
|
18
18
|
* @param {string} componentName
|
|
19
|
+
* @param {string} cwd - project to discover blocks from; never the process cwd
|
|
19
20
|
* @returns {Promise<import('../../component.type.mjs').ComponentDetailBlocksResponse>}
|
|
20
21
|
*/
|
|
21
|
-
export async function componentDetailBlocks(componentName) {
|
|
22
|
-
const allBlocks = await findRelatedBlocks(componentName);
|
|
22
|
+
export async function componentDetailBlocks(componentName, cwd) {
|
|
23
|
+
const allBlocks = await findRelatedBlocks(componentName, cwd);
|
|
23
24
|
const toEntry = (/** @type {any} */ b) => ({
|
|
24
25
|
name: b.dirName,
|
|
25
26
|
displayName: b.name,
|
|
@@ -1,11 +1,6 @@
|
|
|
1
1
|
// @generated by scripts/sync-api-types.mjs from the JSDoc in api/**/*.mjs.
|
|
2
2
|
// DO NOT EDIT — run `pnpm sync:api-types` to regenerate.
|
|
3
3
|
|
|
4
|
-
/**
|
|
5
|
-
* @typedef {import('../component.type.mjs').ComponentListResponse} ComponentListResponse
|
|
6
|
-
* @typedef {import('../component.type.mjs').ComponentListEntry} ComponentListEntry
|
|
7
|
-
* @typedef {import('../component.type.mjs').ComponentBriefEntry} ComponentBriefEntry
|
|
8
|
-
*/
|
|
9
4
|
/**
|
|
10
5
|
* Build the `component.list` envelope. The list taxonomy is collapsed: all
|
|
11
6
|
* three detail levels emit ONE `component.list` type; the depth rides in
|