@astryxdesign/cli 0.6.3-canary.ebaebc4 → 0.6.3-canary.ee13359
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/README.md +114 -77
- package/api/blog/blog.doc.mjs +1 -0
- package/api/build/build.doc.mjs +4 -3
- package/api/build/build.test.mjs +14 -3
- package/api/build/build.type.d.mts +35 -1
- package/api/build/build.type.mjs +24 -3
- package/api/build/help/help.d.mts +8 -5
- package/api/build/help/help.mjs +56 -6
- 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 +16 -5
- package/api/component/component.type.mjs +13 -5
- 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/discover.doc.mjs +2 -1
- package/api/docs/_adapter.d.mts +210 -34
- package/api/docs/_adapter.mjs +674 -134
- package/api/docs/detail/detail.mjs +11 -3
- package/api/docs/detail/section/section.mjs +24 -13
- package/api/docs/detail/section/section.test.mjs +15 -6
- package/api/docs/docs.d.mts +5 -3
- package/api/docs/docs.doc.mjs +36 -15
- package/api/docs/docs.mjs +44 -8
- package/api/docs/docs.test.mjs +158 -4
- package/api/docs/docs.type.d.mts +165 -2
- package/api/docs/docs.type.mjs +101 -3
- package/api/docs/index/index.mjs +11 -3
- package/api/docs/index/index.test.mjs +1 -1
- package/api/docs/integration-tree.test.mjs +547 -0
- package/api/docs/integrationDocs.test.mjs +14 -14
- 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/doctor/doctor.d.mts +54 -4
- package/api/doctor/doctor.doc.mjs +1 -0
- package/api/doctor/doctor.mjs +327 -16
- package/api/doctor/doctor.test.mjs +420 -7
- 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/list/list.d.mts +1 -1
- 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 +125 -12
- package/api/integration/add-contribution.test.mjs +254 -3
- package/api/integration/add-theme.mjs +34 -64
- package/api/integration/add-theme.test.mjs +105 -21
- package/api/integration/authoring-checks.mjs +108 -31
- package/api/integration/authoring-checks.test.mjs +171 -6
- package/api/integration/authoring-checks.type.d.mts +3 -1
- package/api/integration/authoring-checks.type.mjs +3 -1
- package/api/integration/integration-authoring.type.d.mts +2 -0
- 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.mjs +7 -5
- package/api/integration/pack-check.mjs +34 -0
- package/api/integration/pack-check.test.mjs +138 -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/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 +28 -10
- package/api/search/search.doc.mjs +8 -2
- package/api/search/search.mjs +334 -38
- package/api/search/search.test.mjs +124 -1
- package/api/search/search.type.d.mts +13 -1
- package/api/search/search.type.mjs +4 -1
- package/api/swizzle/copy/copy.mjs +28 -11
- package/api/swizzle/swizzle.doc.mjs +2 -1
- 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/template-integration.test.mjs +1022 -3
- package/api/template/template-suffix.test.mjs +41 -21
- package/api/template/template.doc.mjs +30 -8
- package/api/template/template.mjs +45 -8
- package/api/template/template.type.d.mts +6 -8
- package/api/template/template.type.mjs +3 -2
- 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 +20 -3
- package/api/theme/add/add.staging.test.mjs +66 -0
- package/api/theme/add/add.test.mjs +14 -1
- package/api/theme/build/build.mjs +114 -37
- 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/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 +7 -2
- package/api/theme/palette/generate/generate.test.mjs +96 -0
- package/api/theme/palette/generate/generator.mjs +8 -1
- 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/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 +124 -73
- package/api/upgrade/list/list.mjs +2 -1
- package/api/upgrade/list/list.test.mjs +73 -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 +8 -2
- package/api/upgrade/upgrade.type.d.mts +38 -0
- package/api/upgrade/upgrade.type.mjs +16 -0
- package/assets/codemods/__tests__/runner.test.mjs +330 -8
- package/assets/codemods/integration-discovery.mjs +8 -2
- package/assets/codemods/integration-discovery.test.mjs +15 -0
- package/assets/codemods/integration-runner.mjs +56 -4
- package/assets/codemods/integration-runner.protection.test.mjs +153 -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/next/__tests__/migrate-native-picker-to-presentation.test.mjs +63 -0
- package/assets/codemods/transforms/next/__tests__/migrate-theme-catalog-to-descriptors.test.mjs +220 -0
- package/assets/codemods/transforms/next/index.mjs +19 -1
- package/assets/codemods/transforms/next/migrate-native-picker-to-presentation.mjs +148 -0
- package/assets/codemods/transforms/next/migrate-theme-catalog-to-descriptors.mjs +141 -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.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/docs/getting-started.doc.mjs +2 -2
- package/assets/docs/principles.doc.mjs +6 -6
- package/assets/docs/styling-libraries.doc.mjs +2 -2
- package/assets/docs/styling.doc.mjs +4 -4
- package/assets/docs/theme.doc.mjs +4 -4
- 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} +66 -38
- package/assets/docs/tree/integrations.test.mjs +62 -0
- package/assets/docs/tree/writing-docs.doc.mjs +286 -0
- package/assets/templates/blocks/components/DateInput/DateInputDateRange.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/TimeInput/TimeInputConstrained.tsx +1 -0
- 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/codemod/codemod.doc.mjs +1 -1
- package/authoring/codemod/type.ts +12 -0
- package/authoring/config/config.doc.mjs +2 -2
- package/authoring/config/debug-composition.test.mjs +92 -0
- package/authoring/config/type.ts +15 -3
- package/authoring/debug/debug.doc.d.mts +11 -0
- package/authoring/debug/debug.doc.mjs +182 -0
- package/authoring/debug/parse.d.mts +3 -3
- package/authoring/doctypes/_schema.d.mts +71 -141
- package/authoring/doctypes/_schema.mjs +29 -2
- package/authoring/doctypes/base/graph-fields.doc.mjs +8 -6
- package/authoring/doctypes/base/type.ts +6 -5
- package/authoring/doctypes/command/command.doc.mjs +1 -1
- package/authoring/doctypes/command/type.ts +2 -2
- package/authoring/doctypes/component/type.ts +2 -2
- package/authoring/doctypes/doctypes-new.test.mjs +48 -6
- package/authoring/doctypes/enum/enum.doc.mjs +1 -1
- package/authoring/doctypes/enum/type.ts +1 -1
- package/authoring/doctypes/function/function.doc.mjs +3 -2
- package/authoring/doctypes/function/type.ts +3 -2
- package/authoring/doctypes/hook/type.ts +2 -2
- package/authoring/doctypes/load-contract.test.mjs +3 -2
- package/authoring/doctypes/namespace/namespace.doc.mjs +6 -10
- package/authoring/doctypes/namespace/parse.test.mjs +23 -25
- package/authoring/doctypes/namespace/type.ts +5 -2
- package/authoring/doctypes/parse.d.mts +4 -2
- package/authoring/doctypes/parse.mjs +10 -5
- package/authoring/doctypes/reference/reference.doc.mjs +7 -5
- package/authoring/doctypes/reference/type.ts +12 -10
- package/authoring/doctypes/schema/schema.doc.mjs +1 -1
- package/authoring/doctypes/schema/type.ts +1 -2
- package/authoring/doctypes/template/parse.d.mts +2 -0
- package/authoring/doctypes/template/parse.mjs +4 -0
- package/authoring/doctypes/template/parse.test.mjs +18 -0
- package/authoring/doctypes/template/template.doc.mjs +9 -3
- package/authoring/doctypes/template/type.ts +8 -0
- 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 +2 -1
- package/authoring/gap-report/gap-report.doc.d.mts +12 -0
- package/authoring/gap-report/gap-report.doc.mjs +183 -0
- package/authoring/identity/identity.doc.mjs +2 -2
- package/authoring/index.d.mts +1 -0
- package/authoring/index.d.ts +7 -4
- package/authoring/index.mjs +2 -1
- package/authoring/integration/integration.doc.mjs +2 -2
- package/authoring/integration/type.ts +4 -10
- 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 +5 -2
- package/clients/cli/commands/build.exit-codes-doc.test.mjs +50 -0
- package/clients/cli/commands/build.mjs +37 -49
- package/clients/cli/commands/build.playbook.test.mjs +75 -0
- package/clients/cli/commands/build.text-fields.test.mjs +40 -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 +5 -3
- package/clients/cli/commands/discover.mjs +4 -4
- package/clients/cli/commands/discover.text-projection.test.mjs +103 -0
- package/clients/cli/commands/docs.doc.mjs +21 -9
- package/clients/cli/commands/docs.mjs +182 -68
- package/clients/cli/commands/docs.test.mjs +120 -16
- 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 +83 -8
- package/clients/cli/commands/doctor.doc.mjs +1 -1
- package/clients/cli/commands/doctor.mjs +30 -25
- 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-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 +3 -3
- 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 +20 -8
- 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 +2 -0
- package/clients/cli/formatters/index.test.mjs +6 -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 +31 -2
- package/clients/cli/lib/manifest.test.mjs +17 -0
- package/foundation/agent-docs/agent-docs.d.mts +4 -0
- package/foundation/agent-docs/agent-docs.mjs +70 -3
- package/foundation/agent-docs/agent-docs.path-safety.test.mjs +266 -4
- package/foundation/agent-docs/agent-docs.test.mjs +10 -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 +246 -89
- package/foundation/config/project.test.mjs +270 -21
- package/foundation/discovery/authoring-self-docs.d.mts +6 -0
- package/foundation/discovery/authoring-self-docs.mjs +17 -7
- package/foundation/discovery/authoring-self-docs.test.mjs +20 -9
- 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 +38 -0
- package/foundation/discovery/component-discovery.mjs +48 -0
- package/foundation/discovery/component-loader.d.mts +35 -38
- package/foundation/discovery/component-loader.mjs +53 -222
- package/foundation/discovery/docs-discovery.d.mts +108 -10
- package/foundation/discovery/docs-discovery.mjs +191 -30
- package/foundation/discovery/docs-discovery.test.mjs +71 -32
- package/foundation/discovery/docs-output-budget.d.mts +2 -2
- package/foundation/discovery/docs-output-budget.mjs +1 -1
- package/foundation/discovery/docs-section-key.d.mts +28 -10
- package/foundation/discovery/docs-section-key.mjs +134 -33
- package/foundation/discovery/docs-section-key.test.mjs +41 -19
- 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 +772 -82
- package/foundation/discovery/template-adapter.test.mjs +57 -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/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 +220 -39
- package/foundation/doc-compiler/compile.mjs +311 -15
- 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 +28 -1
- 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 +13 -0
- package/foundation/doc-compiler/ir.mjs +196 -12
- package/foundation/doc-compiler/lenses.d.mts +3 -2
- package/foundation/doc-compiler/lenses.mjs +2 -1
- package/foundation/doc-compiler/links.d.mts +135 -0
- package/foundation/doc-compiler/links.mjs +253 -0
- package/foundation/doc-compiler/links.test.mjs +139 -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/integrations/autolink.d.mts +58 -1
- package/foundation/integrations/autolink.mjs +143 -52
- 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 +109 -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 +51 -26
- package/foundation/integrations/integration-warnings.test.mjs +74 -1
- package/foundation/integrations/integrations.d.mts +3 -0
- package/foundation/integrations/integrations.mjs +11 -97
- 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.mjs +121 -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 +11 -0
- package/foundation/response/json.d.mts +4 -2
- package/foundation/response/json.mjs +8 -10
- package/foundation/response/response-types.doc.mjs +22 -17
- package/foundation/response/response-types.doc.test.mjs +158 -0
- package/foundation/response/response.doc.mjs +1 -1
- package/foundation/text/string-utils.mjs +22 -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 -9
- 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
|
@@ -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,7 +13,7 @@ export const doc = {
|
|
|
13
13
|
type: 'command',
|
|
14
14
|
name: 'discover',
|
|
15
15
|
displayName: 'astryx discover',
|
|
16
|
-
namespace: 'cli',
|
|
16
|
+
namespace: 'cli/commands',
|
|
17
17
|
summary: 'Discover external packages and components',
|
|
18
18
|
description:
|
|
19
19
|
'Explores components contributed by configured external packages and integrations. ' +
|
|
@@ -25,18 +25,20 @@ export const doc = {
|
|
|
25
25
|
{
|
|
26
26
|
flag: '--components',
|
|
27
27
|
param: 'options.components',
|
|
28
|
-
description:
|
|
28
|
+
description:
|
|
29
|
+
'In the package list, print every component 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.',
|
|
29
30
|
},
|
|
30
31
|
],
|
|
31
32
|
examples: [
|
|
32
33
|
{label: 'List packages', cli: 'astryx discover --json'},
|
|
34
|
+
{label: 'List every component of each package', cli: 'astryx discover --components'},
|
|
33
35
|
{label: 'Browse a package', cli: 'astryx discover @acme/ui'},
|
|
34
36
|
],
|
|
35
37
|
exitCodes: [
|
|
36
38
|
{code: 0, when: 'success'},
|
|
37
39
|
{
|
|
38
40
|
code: 1,
|
|
39
|
-
when: 'unknown package or component, a malformed doc, or
|
|
41
|
+
when: 'unknown package or component, a malformed doc, or a blank query when packages are discovered',
|
|
40
42
|
},
|
|
41
43
|
],
|
|
42
44
|
related: ['component', 'search', 'template'],
|
|
@@ -83,7 +83,7 @@ export function registerDiscover(program) {
|
|
|
83
83
|
// doctor integration validate. Best-effort; suppressed in --json mode.
|
|
84
84
|
try {
|
|
85
85
|
const project = await Project.load(process.cwd());
|
|
86
|
-
await warnOnIntegrationIssues(project
|
|
86
|
+
await warnOnIntegrationIssues(project, {json});
|
|
87
87
|
} catch {
|
|
88
88
|
// Never let the nudge break the command.
|
|
89
89
|
}
|
|
@@ -122,11 +122,11 @@ export function registerDiscover(program) {
|
|
|
122
122
|
break;
|
|
123
123
|
}
|
|
124
124
|
|
|
125
|
-
// One record per package
|
|
125
|
+
// One record per package, every field of the JSON entry. The default
|
|
126
126
|
// view summarizes each package's components (first N + "+N more");
|
|
127
127
|
// --components lists them all (record comma-joins the full array).
|
|
128
128
|
/** @type {import('../formatters/index.mjs').RecordOptions} */
|
|
129
|
-
const listOpts = {
|
|
129
|
+
const listOpts = {};
|
|
130
130
|
if (!options.components) {
|
|
131
131
|
listOpts.format = {
|
|
132
132
|
components: (/** @type {string[]} */ comps) => {
|
|
@@ -155,7 +155,7 @@ export function registerDiscover(program) {
|
|
|
155
155
|
case 'discover.detail': {
|
|
156
156
|
const d = result.data;
|
|
157
157
|
emit(
|
|
158
|
-
record(d
|
|
158
|
+
record(d),
|
|
159
159
|
text(`Usage: ${run} discover ${d.name}/<ComponentName>`),
|
|
160
160
|
);
|
|
161
161
|
break;
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @file `astryx discover` text output projects every field of its JSON entry.
|
|
5
|
+
*
|
|
6
|
+
* The text views of `discover.list` and `discover.detail` are renderings of the
|
|
7
|
+
* same entries `--json` returns, so each entry key must appear as a `key:` line
|
|
8
|
+
* carrying the same value.
|
|
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
|
+
|
|
17
|
+
let tmpDir;
|
|
18
|
+
let project;
|
|
19
|
+
|
|
20
|
+
beforeEach(() => {
|
|
21
|
+
tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'astryx-discover-text-'));
|
|
22
|
+
project = path.join(tmpDir, 'project');
|
|
23
|
+
const pkgDir = path.join(project, 'node_modules', '@test', 'kit');
|
|
24
|
+
fs.mkdirSync(path.join(pkgDir, 'components'), {recursive: true});
|
|
25
|
+
fs.writeFileSync(
|
|
26
|
+
path.join(project, 'package.json'),
|
|
27
|
+
JSON.stringify({name: 'proj', version: '1.0.0'}),
|
|
28
|
+
);
|
|
29
|
+
fs.writeFileSync(
|
|
30
|
+
path.join(project, 'astryx.config.mjs'),
|
|
31
|
+
`export default {integrations: ['@test/kit']};\n`,
|
|
32
|
+
);
|
|
33
|
+
fs.writeFileSync(
|
|
34
|
+
path.join(pkgDir, 'package.json'),
|
|
35
|
+
JSON.stringify({name: '@test/kit', version: '3.1.4'}),
|
|
36
|
+
);
|
|
37
|
+
fs.writeFileSync(
|
|
38
|
+
path.join(pkgDir, 'astryx.integration.mjs'),
|
|
39
|
+
`export default {components: './components'};\n`,
|
|
40
|
+
);
|
|
41
|
+
for (const name of ['Dial', 'Gauge']) {
|
|
42
|
+
fs.writeFileSync(
|
|
43
|
+
path.join(pkgDir, 'components', `${name}.doc.mjs`),
|
|
44
|
+
`export const docs = {name: '${name}', usage: {description: 'A ${name}.'}};\n`,
|
|
45
|
+
);
|
|
46
|
+
fs.writeFileSync(
|
|
47
|
+
path.join(pkgDir, 'components', `${name}.tsx`),
|
|
48
|
+
`export function ${name}() { return null; }\n`,
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
afterEach(() => {
|
|
54
|
+
fs.rmSync(tmpDir, {recursive: true, force: true});
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* @param {Record<string, unknown>} entry
|
|
59
|
+
* @param {string} text
|
|
60
|
+
*/
|
|
61
|
+
function expectEveryField(entry, text) {
|
|
62
|
+
const lines = text.split('\n');
|
|
63
|
+
for (const [key, value] of Object.entries(entry)) {
|
|
64
|
+
const rendered = Array.isArray(value) ? value.join(', ') : String(value);
|
|
65
|
+
expect(lines).toContainEqual(
|
|
66
|
+
expect.stringMatching(new RegExp(`^${key}:\\s+${escape(rendered)}$`)),
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/** @param {string} s */
|
|
72
|
+
function escape(s) {
|
|
73
|
+
return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
describe('astryx discover text output', () => {
|
|
77
|
+
it('lists every field of each discover.list entry', async () => {
|
|
78
|
+
const asJson = await runCli(['discover', '--json'], {cwd: project});
|
|
79
|
+
const [entry] = JSON.parse(asJson.stdout).data;
|
|
80
|
+
expect(Object.keys(entry)).toEqual(
|
|
81
|
+
expect.arrayContaining(['name', 'category', 'components', 'version']),
|
|
82
|
+
);
|
|
83
|
+
|
|
84
|
+
const {status, stdout} = await runCli(['discover'], {cwd: project});
|
|
85
|
+
|
|
86
|
+
expect(status).toBe(0);
|
|
87
|
+
expectEveryField(entry, stdout);
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
it('shows every field of the discover.detail entry', async () => {
|
|
91
|
+
const asJson = await runCli(['discover', '@test/kit', '--json'], {
|
|
92
|
+
cwd: project,
|
|
93
|
+
});
|
|
94
|
+
const {data} = JSON.parse(asJson.stdout);
|
|
95
|
+
|
|
96
|
+
const {status, stdout} = await runCli(['discover', '@test/kit'], {
|
|
97
|
+
cwd: project,
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
expect(status).toBe(0);
|
|
101
|
+
expectEveryField(data, stdout);
|
|
102
|
+
});
|
|
103
|
+
});
|
|
@@ -12,13 +12,17 @@ export const doc = {
|
|
|
12
12
|
type: 'command',
|
|
13
13
|
name: 'docs',
|
|
14
14
|
displayName: 'astryx docs',
|
|
15
|
-
namespace: 'cli',
|
|
15
|
+
namespace: 'cli/commands',
|
|
16
16
|
summary: 'Print reference docs',
|
|
17
17
|
description:
|
|
18
|
-
'Reads the reference docs: with no topic it lists every topic; a
|
|
19
|
-
'
|
|
20
|
-
'topic plus a section prints that section
|
|
21
|
-
'a
|
|
18
|
+
'Reads the reference docs one level at a time: with no topic it lists every topic; a ' +
|
|
19
|
+
'topic lists its sections, each with the key to read it by (a topic with one section ' +
|
|
20
|
+
'prints whole); a topic plus a section prints that section; `--full` prints the whole ' +
|
|
21
|
+
'topic, as does `--dense`. With `--json`, a topic returns its whole doc, as docs() ' +
|
|
22
|
+
'does, and `--index` its section index. A route ' +
|
|
23
|
+
'opens a node of the docs tree: `cli` lists its guides and reference, ' +
|
|
24
|
+
'`cli/api/functions` lists every API function, and `cli/api/functions/search` prints ' +
|
|
25
|
+
'one.',
|
|
22
26
|
fn: 'docs',
|
|
23
27
|
args: [
|
|
24
28
|
{name: 'topic', param: 'topic', required: false},
|
|
@@ -28,20 +32,28 @@ export const doc = {
|
|
|
28
32
|
{
|
|
29
33
|
flag: '--index',
|
|
30
34
|
param: 'options.index',
|
|
31
|
-
description: "List the topic's sections and their keys
|
|
35
|
+
description: "List the topic's sections and their keys, even for a topic with one section",
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
flag: '--full',
|
|
39
|
+
description:
|
|
40
|
+
'Print the whole topic instead of its sections (text; `--json` returns the whole topic unless --index). Cannot be set with --index',
|
|
32
41
|
},
|
|
33
42
|
],
|
|
34
43
|
examples: [
|
|
35
44
|
{label: 'List topics', cli: 'astryx docs'},
|
|
36
|
-
{label:
|
|
37
|
-
{label:
|
|
45
|
+
{label: "A topic's sections", cli: 'astryx docs theme'},
|
|
46
|
+
{label: 'A whole topic as JSON', cli: 'astryx docs spacing --json'},
|
|
38
47
|
{label: 'One section', cli: 'astryx docs theme quick-start'},
|
|
48
|
+
{label: 'The CLI docs tree', cli: 'astryx docs cli'},
|
|
49
|
+
{label: 'One API function', cli: 'astryx docs cli/api/functions/search'},
|
|
50
|
+
{label: 'A whole guide', cli: 'astryx docs cli/integrations --full'},
|
|
39
51
|
],
|
|
40
52
|
exitCodes: [
|
|
41
53
|
{code: 0, when: 'success'},
|
|
42
54
|
{
|
|
43
55
|
code: 1,
|
|
44
|
-
when: 'unknown topic, or a section that matches no section or more than one',
|
|
56
|
+
when: 'unknown topic or route, or a section that matches no section or more than one',
|
|
45
57
|
},
|
|
46
58
|
],
|
|
47
59
|
related: ['search', 'component', 'hook', 'template'],
|