@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
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @file `build "<idea>"` text output names only fields the `build.kit`
|
|
5
|
+
* envelope carries — on the kit itself or on its entries.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import {describe, it, expect} from 'vitest';
|
|
9
|
+
import * as path from 'node:path';
|
|
10
|
+
import {fileURLToPath} from 'node:url';
|
|
11
|
+
import {runCli} from '../../../test-utils/run-cli.mjs';
|
|
12
|
+
|
|
13
|
+
// Run against the monorepo root so @astryxdesign/core is discoverable.
|
|
14
|
+
const REPO = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../../../..');
|
|
15
|
+
const SLOW = 60_000;
|
|
16
|
+
|
|
17
|
+
describe('build kit text fields mirror the JSON keys', () => {
|
|
18
|
+
it('prints no field the envelope lacks', async () => {
|
|
19
|
+
const json = await runCli(['build', 'analytics dashboard', '--json', '--verbose'], REPO);
|
|
20
|
+
expect(json.status).toBe(0);
|
|
21
|
+
const {data} = JSON.parse(json.stdout);
|
|
22
|
+
const keys = new Set([
|
|
23
|
+
...Object.keys(data),
|
|
24
|
+
...Object.keys(data.start ?? {}),
|
|
25
|
+
...(data.start?.alternatives ?? []).flatMap(a => Object.keys(a)),
|
|
26
|
+
...[...data.pages, ...data.blocks, ...data.domain].flatMap(e => Object.keys(e)),
|
|
27
|
+
]);
|
|
28
|
+
|
|
29
|
+
const human = await runCli(['build', 'analytics dashboard', '--verbose'], REPO);
|
|
30
|
+
expect(human.status).toBe(0);
|
|
31
|
+
const fields = [
|
|
32
|
+
...new Set(
|
|
33
|
+
human.stdout
|
|
34
|
+
.split('\n')
|
|
35
|
+
.map(line => /^([A-Za-z]+):\s/.exec(line)?.[1])
|
|
36
|
+
.filter(Boolean),
|
|
37
|
+
),
|
|
38
|
+
];
|
|
39
|
+
expect(fields).toContain('frame');
|
|
40
|
+
// The start is printed as a record, so its fields are checked too.
|
|
41
|
+
expect(fields).toContain('command');
|
|
42
|
+
expect(fields).toContain('displayName');
|
|
43
|
+
for (const field of fields) expect(keys).toContain(field);
|
|
44
|
+
}, SLOW);
|
|
45
|
+
|
|
46
|
+
it('leads with the start, then the alternatives, blocks and components', async () => {
|
|
47
|
+
const human = await runCli(['build', 'analytics dashboard'], REPO);
|
|
48
|
+
expect(human.status).toBe(0);
|
|
49
|
+
const headings = human.stdout
|
|
50
|
+
.split('\n')
|
|
51
|
+
.filter(line => /^(TEMPLATE|OTHER TEMPLATES|BLOCKS|COMPONENTS)$/.test(line));
|
|
52
|
+
expect(headings).toEqual(['TEMPLATE', 'OTHER TEMPLATES', 'BLOCKS', 'COMPONENTS']);
|
|
53
|
+
// A builder changing a page they already have keeps it.
|
|
54
|
+
expect(human.stdout).toContain(
|
|
55
|
+
'Changing a page you already have? Keep it, and use only the blocks and components.',
|
|
56
|
+
);
|
|
57
|
+
}, SLOW);
|
|
58
|
+
|
|
59
|
+
it("shortens the start's description by default and prints it whole under --verbose", async () => {
|
|
60
|
+
const json = await runCli(['build', 'quarterly revenue dashboard', '--json'], REPO);
|
|
61
|
+
const {start} = JSON.parse(json.stdout).data;
|
|
62
|
+
const first = start.description.slice(0, start.description.indexOf('. ') + 1);
|
|
63
|
+
expect(first.length).toBeGreaterThan(0);
|
|
64
|
+
expect(first.length).toBeLessThan(start.description.length);
|
|
65
|
+
const line = out => out.split('\n').find(l => l.startsWith('description:'));
|
|
66
|
+
const brief = await runCli(['build', 'quarterly revenue dashboard'], REPO);
|
|
67
|
+
expect(line(brief.stdout)).toBe(`description: ${first}`);
|
|
68
|
+
const whole = await runCli(['build', 'quarterly revenue dashboard', '--verbose'], REPO);
|
|
69
|
+
expect(whole.stdout).toContain(start.description);
|
|
70
|
+
}, SLOW);
|
|
71
|
+
|
|
72
|
+
it("names search's page matches in the default text", async () => {
|
|
73
|
+
const json = await runCli(['build', 'contact form', '--json'], REPO);
|
|
74
|
+
const {data} = JSON.parse(json.stdout);
|
|
75
|
+
expect(data.pages.length).toBeGreaterThan(0);
|
|
76
|
+
const human = await runCli(['build', 'contact form'], REPO);
|
|
77
|
+
expect(human.stdout).toContain(
|
|
78
|
+
`Keyword search matched these page templates: ${data.pages.map(p => p.name).join(', ')}.`,
|
|
79
|
+
);
|
|
80
|
+
}, SLOW);
|
|
81
|
+
});
|
|
@@ -26,7 +26,6 @@ import {defineCommand} from '../../lib/define-command.mjs';
|
|
|
26
26
|
import {resultSet} from '../../../../foundation/debug/index.mjs';
|
|
27
27
|
import {ERROR_CODES} from '../../../../foundation/response/error-codes.mjs';
|
|
28
28
|
import {component as componentApi} from '../../../../api/component/component.mjs';
|
|
29
|
-
import {findRelatedBlocks} from '../../../../api/template/template.mjs';
|
|
30
29
|
import {Project} from '../../../../foundation/config/project.mjs';
|
|
31
30
|
import {warnOnIntegrationIssues} from '../../../../foundation/integrations/integration-warnings.mjs';
|
|
32
31
|
import {doc as componentCommand} from '../component.doc.mjs';
|
|
@@ -112,7 +111,7 @@ export function registerComponent(program) {
|
|
|
112
111
|
// doctor integration validate. Best-effort; suppressed in --json mode.
|
|
113
112
|
try {
|
|
114
113
|
const project = await Project.load(process.cwd());
|
|
115
|
-
await warnOnIntegrationIssues(project
|
|
114
|
+
await warnOnIntegrationIssues(project, {json});
|
|
116
115
|
} catch {
|
|
117
116
|
// Never let the nudge break the command.
|
|
118
117
|
}
|
|
@@ -235,18 +234,14 @@ export function registerComponent(program) {
|
|
|
235
234
|
case 'component.detail': {
|
|
236
235
|
const resolvedName = (name || '').replace(/^XDS/, '');
|
|
237
236
|
const importHint = result.data.import;
|
|
237
|
+
if (result.data.parentDoc) emit(record(result.data, {fields: ['parentDoc']}));
|
|
238
238
|
const doc =
|
|
239
239
|
detail === 'brief'
|
|
240
240
|
? code(formatBrief(result.data, resolvedName, importHint, {themeData}))
|
|
241
241
|
: detail === 'compact'
|
|
242
242
|
? code(formatCompact(result.data, resolvedName, importHint))
|
|
243
243
|
: code(formatFull(result.data, {themeData, importHint}));
|
|
244
|
-
|
|
245
|
-
emit(
|
|
246
|
-
doc,
|
|
247
|
-
related.length > 0 && section('Related block templates'),
|
|
248
|
-
related.length > 0 && records(related, {fields: ['dirName', 'description']}),
|
|
249
|
-
);
|
|
244
|
+
emit(doc);
|
|
250
245
|
break;
|
|
251
246
|
}
|
|
252
247
|
|
|
@@ -71,7 +71,7 @@ function createFixture({
|
|
|
71
71
|
);
|
|
72
72
|
fs.writeFileSync(
|
|
73
73
|
path.join(compDir, 'MetaAppShell.doc.mjs'),
|
|
74
|
-
`export
|
|
74
|
+
`export default {\n type: 'component',\n name: 'MetaAppShell',\n usage: { description: 'Meta-flavored app shell.' },\n props: [{ name: 'title', type: 'string', description: 'Header title' }],\n};\n`,
|
|
75
75
|
);
|
|
76
76
|
if (withSource) {
|
|
77
77
|
fs.writeFileSync(
|
|
@@ -82,7 +82,7 @@ function createFixture({
|
|
|
82
82
|
if (extraComponent) {
|
|
83
83
|
fs.writeFileSync(
|
|
84
84
|
path.join(compDir, `${extraComponent}.doc.mjs`),
|
|
85
|
-
`export
|
|
85
|
+
`export default {\n type: 'component',\n name: '${extraComponent}',\n usage: { description: '${extraComponent} from meta.' },\n props: [],\n};\n`,
|
|
86
86
|
);
|
|
87
87
|
fs.writeFileSync(
|
|
88
88
|
path.join(compDir, `${extraComponent}.tsx`),
|
|
@@ -100,7 +100,7 @@ function createFixture({
|
|
|
100
100
|
: '';
|
|
101
101
|
fs.writeFileSync(
|
|
102
102
|
path.join(entryDir, `${entryPoint.component}.doc.mjs`),
|
|
103
|
-
`export
|
|
103
|
+
`export default {\n type: 'component',\n name: '${entryPoint.component}',${ownSpecifier}\n usage: { description: '${entryPoint.component} from an entry point.' },\n props: [],\n};\n`,
|
|
104
104
|
);
|
|
105
105
|
}
|
|
106
106
|
|
|
@@ -5,6 +5,7 @@ import * as fs from 'node:fs';
|
|
|
5
5
|
import * as path from 'node:path';
|
|
6
6
|
import * as os from 'node:os';
|
|
7
7
|
import {component} from '../../../api/component/component.mjs';
|
|
8
|
+
import {runCli} from '../../../test-utils/run-cli.mjs';
|
|
8
9
|
|
|
9
10
|
// These tests create a minimal monorepo fixture with:
|
|
10
11
|
// - packages/core (symlinked to real @astryxdesign/core for loadDocs compatibility)
|
|
@@ -120,4 +121,49 @@ describe('component() with --package option', () => {
|
|
|
120
121
|
expect(result.data.source).toContain('ProfileCardShowcase');
|
|
121
122
|
expect(result.data.aspectRatio).toBeCloseTo(16 / 9);
|
|
122
123
|
});
|
|
124
|
+
|
|
125
|
+
// A legacy package ships docs only: --source and --blocks answer the same
|
|
126
|
+
// way scoped as unscoped, never falling back to the plain doc.
|
|
127
|
+
it('--package + --source reports the missing source, like the unscoped lookup', async () => {
|
|
128
|
+
await expect(
|
|
129
|
+
component('ProfileCard', {cwd: tmpDir, source: true}),
|
|
130
|
+
).rejects.toMatchObject({code: 'ERR_NO_SOURCE'});
|
|
131
|
+
await expect(
|
|
132
|
+
component('ProfileCard', {cwd: tmpDir, package: '@test/ext', source: true}),
|
|
133
|
+
).rejects.toMatchObject({code: 'ERR_NO_SOURCE'});
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
it('--package + --blocks returns the blocks, like the unscoped lookup', async () => {
|
|
137
|
+
const unscoped = await component('ProfileCard', {cwd: tmpDir, blocks: true});
|
|
138
|
+
const scoped = await component('ProfileCard', {cwd: tmpDir, package: '@test/ext', blocks: true});
|
|
139
|
+
expect(scoped.type).toBe('component.detail.blocks');
|
|
140
|
+
expect(scoped.data).toEqual(unscoped.data);
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
// `cwd` is an explicit API input: --blocks must discover from it, as
|
|
144
|
+
// --showcase does, not from the process working directory.
|
|
145
|
+
it('--blocks discovers blocks from options.cwd, like --showcase', async () => {
|
|
146
|
+
const showcase = await component('ProfileCard', {cwd: tmpDir, showcase: true});
|
|
147
|
+
expect(showcase.data.source).toContain('ProfileCardShowcase');
|
|
148
|
+
|
|
149
|
+
const blocks = await component('ProfileCard', {cwd: tmpDir, blocks: true});
|
|
150
|
+
expect(blocks.type).toBe('component.detail.blocks');
|
|
151
|
+
expect(blocks.data.showcase?.name).toBe('ProfileCardShowcase');
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
// List and detail report one import for a legacy package component; the
|
|
155
|
+
// text list projects the JSON value instead of deriving a Core path.
|
|
156
|
+
it('the names list gives a legacy package component the import its detail reports', async () => {
|
|
157
|
+
const detail = await component('ProfileCard', {cwd: tmpDir});
|
|
158
|
+
const list = await component(undefined, {cwd: tmpDir, list: true});
|
|
159
|
+
const entry = Object.values(list.data.components)
|
|
160
|
+
.flat()
|
|
161
|
+
.find(e => e.name === 'ProfileCard' && e.package === '@test/ext');
|
|
162
|
+
expect(entry?.import).toBe(detail.data.import);
|
|
163
|
+
|
|
164
|
+
const text = await runCli(['component', '--list'], tmpDir);
|
|
165
|
+
expect(text.code).toBe(0);
|
|
166
|
+
expect(text.stdout).toContain(`name: ProfileCard\nimport: ${detail.data.import} [@test/ext]`);
|
|
167
|
+
expect(text.stdout).not.toMatch(/^import: +@astryxdesign\/core\S* +\[@test\/ext\]$/m);
|
|
168
|
+
});
|
|
123
169
|
});
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
import {describe, it, expect} from 'vitest';
|
|
4
4
|
import {component} from '../../../api/component/component.mjs';
|
|
5
5
|
import {findShowcase, findRelatedBlocks} from '../../../api/template/template.mjs';
|
|
6
|
+
import {runCli} from '../../../test-utils/run-cli.mjs';
|
|
6
7
|
|
|
7
8
|
const CWD = {cwd: '.'};
|
|
8
9
|
|
|
@@ -74,6 +75,26 @@ describe('component() sub-component scoping', () => {
|
|
|
74
75
|
const result = await component('SideNav', CWD);
|
|
75
76
|
expect(result.data.name).toBe('SideNav');
|
|
76
77
|
});
|
|
78
|
+
|
|
79
|
+
// `parentDoc` is part of the component.detail schema: the text view
|
|
80
|
+
// projects it under the same key.
|
|
81
|
+
it('component("HStack") names its parent doc in JSON and text', async () => {
|
|
82
|
+
const result = await component('HStack', CWD);
|
|
83
|
+
expect(result.data.parentDoc).toBe('Stack');
|
|
84
|
+
|
|
85
|
+
const text = await runCli(['component', 'HStack'], process.cwd());
|
|
86
|
+
expect(text.code).toBe(0);
|
|
87
|
+
expect(text.stdout).toMatch(/^parentDoc: +Stack$/m);
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
it('component("Stack") carries no parentDoc in JSON or text', async () => {
|
|
91
|
+
const result = await component('Stack', CWD);
|
|
92
|
+
expect(result.data).not.toHaveProperty('parentDoc');
|
|
93
|
+
|
|
94
|
+
const text = await runCli(['component', 'Stack'], process.cwd());
|
|
95
|
+
expect(text.code).toBe(0);
|
|
96
|
+
expect(text.stdout).not.toMatch(/^parentDoc:/m);
|
|
97
|
+
});
|
|
77
98
|
}, SCAN_TIMEOUT);
|
|
78
99
|
|
|
79
100
|
// ─── Bug: findShowcase priority ─────────────────────────────────
|
|
@@ -13,7 +13,7 @@ export const doc = {
|
|
|
13
13
|
type: 'command',
|
|
14
14
|
name: 'component',
|
|
15
15
|
displayName: 'astryx component',
|
|
16
|
-
namespace: 'cli',
|
|
16
|
+
namespace: 'cli/commands',
|
|
17
17
|
summary: 'List components or print component docs',
|
|
18
18
|
description:
|
|
19
19
|
'Resolves a component by name across core and integration packages and prints ' +
|
|
@@ -13,6 +13,9 @@ import {
|
|
|
13
13
|
levenshteinDistance,
|
|
14
14
|
findClosestComponents,
|
|
15
15
|
} from './component/index.mjs';
|
|
16
|
+
import {runCli} from '../../../test-utils/run-cli.mjs';
|
|
17
|
+
|
|
18
|
+
const REPO_ROOT = path.resolve(import.meta.dirname, '../../../../..');
|
|
16
19
|
|
|
17
20
|
let tmpDir;
|
|
18
21
|
|
|
@@ -591,3 +594,19 @@ describe('searchComponents', () => {
|
|
|
591
594
|
expect(results.length).toBe(0);
|
|
592
595
|
});
|
|
593
596
|
});
|
|
597
|
+
|
|
598
|
+
describe('component <Name> text output', () => {
|
|
599
|
+
// The text is a projection of the JSON envelope: it may show less, never
|
|
600
|
+
// data the envelope does not carry.
|
|
601
|
+
it('shows no related-block records that the JSON lacks', async () => {
|
|
602
|
+
const json = await runCli(['--json', 'component', 'Button'], REPO_ROOT);
|
|
603
|
+
expect(json.code).toBe(0);
|
|
604
|
+
expect(JSON.stringify(JSON.parse(json.stdout).data)).not.toContain('dirName');
|
|
605
|
+
|
|
606
|
+
const text = await runCli(['component', 'Button'], REPO_ROOT);
|
|
607
|
+
expect(text.code).toBe(0);
|
|
608
|
+
expect(text.stdout).toContain('# Button');
|
|
609
|
+
expect(text.stdout).not.toMatch(/^dirName:/m);
|
|
610
|
+
expect(text.stdout).not.toContain('Related block templates');
|
|
611
|
+
}, 30_000);
|
|
612
|
+
});
|
|
@@ -52,7 +52,7 @@ describe('--detail level ordering: component --list', () => {
|
|
|
52
52
|
|
|
53
53
|
it('brief is names-only (no targets, import hints, or prose descriptions)', () => {
|
|
54
54
|
expect(brief).not.toMatch(/Targets:/);
|
|
55
|
-
expect(brief).not.toMatch(
|
|
55
|
+
expect(brief).not.toMatch(/<- from/);
|
|
56
56
|
// Names only — should contain XDS component names but no " — " desc separator.
|
|
57
57
|
expect(brief).toMatch(/Button/);
|
|
58
58
|
expect(brief).not.toMatch(/ \u2014 /);
|
|
@@ -66,7 +66,7 @@ describe('--detail level ordering: component --list', () => {
|
|
|
66
66
|
|
|
67
67
|
it('full has dense per-entry docs (props, targets, and import hints)', () => {
|
|
68
68
|
expect(full).toMatch(/Targets:/);
|
|
69
|
-
expect(full).toMatch(
|
|
69
|
+
expect(full).toMatch(/<- from/);
|
|
70
70
|
// Prop name lists appear in the dense brief-all rendering.
|
|
71
71
|
expect(full).toMatch(/children/);
|
|
72
72
|
});
|
|
@@ -69,11 +69,12 @@ describe('astryx discover with a manifest that fails to load', () => {
|
|
|
69
69
|
|
|
70
70
|
expect(status).toBe(0);
|
|
71
71
|
expect(stderr).toContain(
|
|
72
|
-
'Warning: @test/broken has 1 integration issue(s). '
|
|
73
|
-
'Run: astryx doctor integration validate @test/broken',
|
|
72
|
+
'Warning: @test/broken has 1 integration issue(s). Run: astryx doctor',
|
|
74
73
|
);
|
|
75
74
|
expect(stdout).not.toContain('No integrations configured.');
|
|
76
|
-
expect(stdout).toContain(
|
|
75
|
+
expect(stdout).toContain(
|
|
76
|
+
'No external components found in configured integrations.',
|
|
77
|
+
);
|
|
77
78
|
});
|
|
78
79
|
|
|
79
80
|
it('reports meta.configured=true in --json, with the nudge suppressed', async () => {
|
|
@@ -87,6 +88,53 @@ describe('astryx discover with a manifest that fails to load', () => {
|
|
|
87
88
|
});
|
|
88
89
|
});
|
|
89
90
|
|
|
91
|
+
describe('astryx discover with a configured package that is not installed', () => {
|
|
92
|
+
beforeEach(() => {
|
|
93
|
+
const healthy = path.join(project, 'node_modules', '@test', 'healthy');
|
|
94
|
+
fs.mkdirSync(path.join(healthy, 'components'), {recursive: true});
|
|
95
|
+
fs.writeFileSync(
|
|
96
|
+
path.join(healthy, 'package.json'),
|
|
97
|
+
JSON.stringify({name: '@test/healthy', version: '2.0.0'}),
|
|
98
|
+
);
|
|
99
|
+
fs.writeFileSync(
|
|
100
|
+
path.join(healthy, 'astryx.integration.mjs'),
|
|
101
|
+
`export default {components: './components'};\n`,
|
|
102
|
+
);
|
|
103
|
+
fs.writeFileSync(
|
|
104
|
+
path.join(healthy, 'components', 'Widget.doc.mjs'),
|
|
105
|
+
`export const docs = {name: 'Widget', usage: {description: 'A widget.'}, props: []};\n`,
|
|
106
|
+
);
|
|
107
|
+
fs.writeFileSync(
|
|
108
|
+
path.join(healthy, 'components', 'Widget.tsx'),
|
|
109
|
+
`export function Widget() { return null; }\n`,
|
|
110
|
+
);
|
|
111
|
+
fs.writeFileSync(
|
|
112
|
+
path.join(project, 'astryx.config.mjs'),
|
|
113
|
+
`export default {integrations: ['@test/missing', '@test/healthy']};\n`,
|
|
114
|
+
);
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
it('still lists the healthy package and exits 0', async () => {
|
|
118
|
+
const {status, stdout} = await runCli(['discover', '--json'], {
|
|
119
|
+
cwd: project,
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
expect(status).toBe(0);
|
|
123
|
+
expect(JSON.parse(stdout).data).toEqual([
|
|
124
|
+
expect.objectContaining({name: '@test/healthy', components: ['Widget']}),
|
|
125
|
+
]);
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
it('names the missing package in the stderr nudge', async () => {
|
|
129
|
+
const {status, stderr} = await runCli(['discover'], {cwd: project});
|
|
130
|
+
|
|
131
|
+
expect(status).toBe(0);
|
|
132
|
+
expect(stderr).toContain(
|
|
133
|
+
'Warning: @test/missing has 1 integration issue(s). Run: astryx doctor\n',
|
|
134
|
+
);
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
|
|
90
138
|
describe('astryx search with a manifest that fails to load', () => {
|
|
91
139
|
// search needs a resolvable @astryxdesign/core; without one it errors out
|
|
92
140
|
// before it can list anything, which is not the case under test.
|
|
@@ -101,8 +149,7 @@ describe('astryx search with a manifest that fails to load', () => {
|
|
|
101
149
|
|
|
102
150
|
expect(status).toBe(0);
|
|
103
151
|
expect(stderr).toContain(
|
|
104
|
-
'Warning: @test/broken has 1 integration issue(s). '
|
|
105
|
-
'Run: astryx doctor integration validate @test/broken',
|
|
152
|
+
'Warning: @test/broken has 1 integration issue(s). Run: astryx doctor',
|
|
106
153
|
);
|
|
107
154
|
|
|
108
155
|
const asJson = await runCli(['search', 'button', '--json'], {cwd: project});
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @file `astryx discover --components` does what its doc says.
|
|
5
|
+
*
|
|
6
|
+
* The flag only lifts the package list's component summary (the first 10
|
|
7
|
+
* names plus "+N more") so every component prints. It changes nothing in
|
|
8
|
+
* `--json`, whose entries always carry the full array.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import {describe, it, expect, beforeEach, afterEach} from 'vitest';
|
|
12
|
+
import * as fs from 'node:fs';
|
|
13
|
+
import * as path from 'node:path';
|
|
14
|
+
import * as os from 'node:os';
|
|
15
|
+
import {runCli} from '../../../test-utils/run-cli.mjs';
|
|
16
|
+
import {doc} from './discover.doc.mjs';
|
|
17
|
+
import {doc as discoverFn} from '../../../api/discover/discover.doc.mjs';
|
|
18
|
+
|
|
19
|
+
const NAMES = Array.from({length: 12}, (_, i) => `Part${String(i).padStart(2, '0')}`);
|
|
20
|
+
|
|
21
|
+
let tmpDir;
|
|
22
|
+
let project;
|
|
23
|
+
|
|
24
|
+
beforeEach(() => {
|
|
25
|
+
tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'astryx-discover-components-'));
|
|
26
|
+
project = path.join(tmpDir, 'project');
|
|
27
|
+
const pkgDir = path.join(project, 'node_modules', '@test', 'kit');
|
|
28
|
+
fs.mkdirSync(path.join(pkgDir, 'components'), {recursive: true});
|
|
29
|
+
fs.writeFileSync(
|
|
30
|
+
path.join(project, 'package.json'),
|
|
31
|
+
JSON.stringify({name: 'proj', version: '1.0.0'}),
|
|
32
|
+
);
|
|
33
|
+
fs.writeFileSync(
|
|
34
|
+
path.join(project, 'astryx.config.mjs'),
|
|
35
|
+
`export default {integrations: ['@test/kit']};\n`,
|
|
36
|
+
);
|
|
37
|
+
fs.writeFileSync(
|
|
38
|
+
path.join(pkgDir, 'package.json'),
|
|
39
|
+
JSON.stringify({name: '@test/kit', version: '1.0.0'}),
|
|
40
|
+
);
|
|
41
|
+
fs.writeFileSync(
|
|
42
|
+
path.join(pkgDir, 'astryx.integration.mjs'),
|
|
43
|
+
`export default {components: './components'};\n`,
|
|
44
|
+
);
|
|
45
|
+
for (const name of NAMES) {
|
|
46
|
+
fs.writeFileSync(
|
|
47
|
+
path.join(pkgDir, 'components', `${name}.doc.mjs`),
|
|
48
|
+
`export const docs = {name: '${name}', usage: {description: 'A part.'}};\n`,
|
|
49
|
+
);
|
|
50
|
+
fs.writeFileSync(
|
|
51
|
+
path.join(pkgDir, 'components', `${name}.tsx`),
|
|
52
|
+
`export function ${name}() { return null; }\n`,
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
afterEach(() => {
|
|
58
|
+
fs.rmSync(tmpDir, {recursive: true, force: true});
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
/** @param {string} stdout */
|
|
62
|
+
function componentsLine(stdout) {
|
|
63
|
+
return stdout.split('\n').find(line => line.startsWith('components:'));
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
describe('astryx discover --components', () => {
|
|
67
|
+
it('lists every component where the default list shows the first 10', async () => {
|
|
68
|
+
const summary = await runCli(['discover'], {cwd: project});
|
|
69
|
+
const full = await runCli(['discover', '--components'], {cwd: project});
|
|
70
|
+
|
|
71
|
+
expect(componentsLine(summary.stdout)).toMatch(
|
|
72
|
+
new RegExp(`${NAMES[9]}, \\+2 more$`),
|
|
73
|
+
);
|
|
74
|
+
expect(componentsLine(full.stdout)).toMatch(new RegExp(`${NAMES.join(', ')}$`));
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
it('leaves the --json response unchanged', async () => {
|
|
78
|
+
const plain = await runCli(['discover', '--json'], {cwd: project});
|
|
79
|
+
const flagged = await runCli(['discover', '--components', '--json'], {
|
|
80
|
+
cwd: project,
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
expect(JSON.parse(flagged.stdout)).toEqual(JSON.parse(plain.stdout));
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
it('is documented as that behavior, with an example', () => {
|
|
87
|
+
const option = doc.options?.find(o => o.flag === '--components');
|
|
88
|
+
const param = discoverFn.params?.find(p => p.name === 'options.components');
|
|
89
|
+
|
|
90
|
+
for (const description of [option?.description, param?.description]) {
|
|
91
|
+
expect(description).toMatch(/every component/i);
|
|
92
|
+
expect(description).toMatch(/first 10/);
|
|
93
|
+
expect(description).not.toMatch(/components only/i);
|
|
94
|
+
}
|
|
95
|
+
expect(doc.examples?.some(e => /\s--components\b/.test(e.cli))).toBe(true);
|
|
96
|
+
});
|
|
97
|
+
});
|
|
@@ -13,30 +13,76 @@ export const doc = {
|
|
|
13
13
|
type: 'command',
|
|
14
14
|
name: 'discover',
|
|
15
15
|
displayName: 'astryx discover',
|
|
16
|
-
namespace: 'cli',
|
|
17
|
-
summary:
|
|
16
|
+
namespace: 'cli/commands',
|
|
17
|
+
summary:
|
|
18
|
+
'Browse and search integrations: the ones you have and the ones you could add',
|
|
18
19
|
description:
|
|
19
|
-
'
|
|
20
|
-
'
|
|
21
|
-
|
|
20
|
+
'Lists the integrations this project loads and, when it has a discover source, the ones it could add, with what each one adds. ' +
|
|
21
|
+
'A package query shows one package: what it adds, every version a source knows, and the command that adds it. ' +
|
|
22
|
+
"An @scope/name/Component path prints an installed component's doc; any other item path shows that item. " +
|
|
23
|
+
'Anything else, even an exact component name, searches every item and package and lists the matches. Discover only reads: your package manager installs, updates, and removes packages.',
|
|
22
24
|
fn: 'discover',
|
|
23
25
|
args: [{name: 'query', param: 'query', required: false}],
|
|
24
26
|
options: [
|
|
25
27
|
{
|
|
26
28
|
flag: '--components',
|
|
27
29
|
param: 'options.components',
|
|
28
|
-
description:
|
|
30
|
+
description:
|
|
31
|
+
'In the package list, print every component, and every other item, of each package instead of the first 10 and a "+N more" count. No effect on --json output or on a package, component, or search query.',
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
flag: '--type <kind>',
|
|
35
|
+
param: 'options.type',
|
|
36
|
+
description:
|
|
37
|
+
'Only one kind: component, template, doc, theme, codemod, or agent-doc. In the list, only packages that add it; in a search, only items of that kind.',
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
flag: '--installed',
|
|
41
|
+
param: 'options.installed',
|
|
42
|
+
description:
|
|
43
|
+
'Only what this project has. Cannot be set with --available.',
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
flag: '--available',
|
|
47
|
+
param: 'options.available',
|
|
48
|
+
description:
|
|
49
|
+
'Only what this project could add. Cannot be set with --installed.',
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
flag: '--limit <n>',
|
|
53
|
+
param: 'options.limit',
|
|
54
|
+
description:
|
|
55
|
+
'Max number of search results, a positive integer (default 20).',
|
|
29
56
|
},
|
|
30
57
|
],
|
|
31
58
|
examples: [
|
|
32
|
-
{
|
|
33
|
-
|
|
59
|
+
{
|
|
60
|
+
label: 'List what you have and what you could add',
|
|
61
|
+
cli: 'astryx discover',
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
label: 'List every component of each package',
|
|
65
|
+
cli: 'astryx discover --components',
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
label: 'Only packages that add themes',
|
|
69
|
+
cli: 'astryx discover --type theme',
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
label: 'Browse a package and its versions',
|
|
73
|
+
cli: 'astryx discover @acme/ui',
|
|
74
|
+
},
|
|
75
|
+
{label: 'See one version', cli: 'astryx discover @acme/ui@2.1.0'},
|
|
76
|
+
{
|
|
77
|
+
label: 'Search templates you could add',
|
|
78
|
+
cli: 'astryx discover dashboard --type template --available',
|
|
79
|
+
},
|
|
34
80
|
],
|
|
35
81
|
exitCodes: [
|
|
36
82
|
{code: 0, when: 'success'},
|
|
37
83
|
{
|
|
38
84
|
code: 1,
|
|
39
|
-
when: 'unknown package
|
|
85
|
+
when: 'unknown package, version, component, or item; a malformed doc; an invalid --type or --limit; --installed with --available; or a blank query when packages are discovered',
|
|
40
86
|
},
|
|
41
87
|
],
|
|
42
88
|
related: ['component', 'search', 'template'],
|