@astryxdesign/cli 0.6.3 → 0.6.4-canary.0e1fbdb
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 +152 -107
- 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 +22 -10
- package/api/build/build.test.mjs +219 -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 +208 -53
- package/api/build/kit/rank.d.mts +44 -0
- package/api/build/kit/rank.mjs +432 -0
- package/api/build/kit/rank.test.mjs +196 -0
- package/api/component/_adapter.d.mts +31 -12
- package/api/component/_adapter.mjs +79 -15
- package/api/component/component.d.mts +6 -3
- package/api/component/component.doc.mjs +49 -19
- package/api/component/component.mjs +339 -22
- package/api/component/component.test.mjs +38 -0
- package/api/component/component.type.d.mts +47 -11
- package/api/component/component.type.mjs +76 -24
- package/api/component/detail/blocks/blocks.d.mts +2 -1
- package/api/component/detail/blocks/blocks.mjs +4 -3
- package/api/component/list/list.d.mts +0 -5
- package/api/component/list/list.mjs +40 -11
- package/api/discover/_adapter.d.mts +114 -6
- package/api/discover/_adapter.mjs +372 -17
- package/api/discover/_adapter.test.mjs +215 -0
- package/api/discover/_catalog-view.d.mts +115 -0
- package/api/discover/_catalog-view.mjs +203 -0
- package/api/discover/_catalog-view.test.mjs +128 -0
- package/api/discover/detail/detail.d.mts +18 -6
- package/api/discover/detail/detail.mjs +67 -13
- package/api/discover/detail/detail.test.mjs +85 -0
- package/api/discover/detail/item/item.d.mts +26 -0
- package/api/discover/detail/item/item.mjs +78 -0
- package/api/discover/detail/item/item.test.mjs +73 -0
- package/api/discover/discover.d.mts +3 -9
- package/api/discover/discover.doc.mjs +62 -18
- package/api/discover/discover.mjs +220 -36
- package/api/discover/discover.test.mjs +11 -2
- package/api/discover/discover.type.d.mts +150 -11
- package/api/discover/discover.type.mjs +107 -17
- package/api/discover/list/list.d.mts +20 -6
- package/api/discover/list/list.mjs +45 -12
- package/api/discover/list/list.test.mjs +46 -0
- package/api/discover/search/search.d.mts +18 -16
- package/api/discover/search/search.mjs +102 -56
- package/api/discover/search/search.test.mjs +144 -10
- package/api/docs/_adapter.d.mts +277 -41
- package/api/docs/_adapter.mjs +993 -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/docOverlays.test.mjs +27 -1
- 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.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/list/list.mjs +28 -12
- package/api/docs/node/node.d.mts +43 -0
- package/api/docs/node/node.mjs +192 -0
- package/api/docs/reference-blocks.test.mjs +406 -0
- package/api/doctor/doctor.d.mts +104 -1
- package/api/doctor/doctor.doc.mjs +18 -8
- package/api/doctor/doctor.mjs +635 -7
- package/api/doctor/doctor.test.mjs +732 -11
- package/api/doctor/doctor.type.d.mts +1 -1
- package/api/doctor/doctor.type.mjs +1 -1
- package/api/gap-report/gap-report.doc.mjs +27 -14
- package/api/hook/_adapter.mjs +19 -5
- package/api/hook/hook.doc.mjs +7 -3
- package/api/hook/hook.type.d.mts +3 -3
- package/api/hook/hook.type.mjs +11 -11
- package/api/hook/list/list.d.mts +2 -2
- package/api/hook/list/list.mjs +69 -17
- package/api/index.d.mts +2 -1
- package/api/index.mjs +6 -3
- package/api/init/init.doc.mjs +22 -12
- 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 +56 -65
- package/api/integration/add-theme.test.mjs +139 -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 +5 -4
- package/api/integration/integrationTemplateConflicts.doc.d.mts +3 -0
- package/api/integration/integrationTemplateConflicts.doc.mjs +4 -0
- package/api/integration/pack-check.lifecycle-output.test.mjs +107 -0
- package/api/integration/pack-check.mjs +160 -11
- package/api/integration/pack-check.test.mjs +477 -47
- package/api/integration/pack-check.type.d.mts +26 -2
- package/api/integration/pack-check.type.mjs +15 -2
- 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 +2 -1
- package/api/json/envelope-types.test.mjs +76 -0
- package/api/json/index.ts +2 -0
- package/api/json/isError.doc.mjs +2 -1
- 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 +89 -12
- package/api/search/search.doc.mjs +8 -2
- package/api/search/search.mjs +697 -97
- 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 +8 -5
- package/api/swizzle/swizzle.type.d.mts +2 -2
- package/api/swizzle/swizzle.type.mjs +2 -2
- package/api/template/copy/copy.mjs +18 -24
- package/api/template/copy/copy.test.mjs +26 -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 +32 -9
- 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 +2 -2
- 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 +12 -12
- package/api/theme/themeBuild.doc.mjs +21 -17
- package/api/theme/themeList.doc.mjs +6 -3
- package/api/theme/themeListAvailable.doc.mjs +6 -3
- package/api/theme/themePaletteGenerate.doc.mjs +16 -8
- package/api/theme/themeTargets.doc.mjs +4 -2
- package/api/theme/themeTemplate.doc.mjs +8 -3
- package/api/upgrade/_adapter.d.mts +32 -5
- package/api/upgrade/_adapter.mjs +139 -22
- package/api/upgrade/list/list.mjs +2 -1
- package/api/upgrade/list/list.test.mjs +73 -0
- package/api/upgrade/project-context.test.mjs +272 -0
- package/api/upgrade/provider-agreement.test.mjs +152 -0
- package/api/upgrade/run/files-changed.test.mjs +111 -0
- package/api/upgrade/run/run.mjs +358 -59
- package/api/upgrade/status/status.mjs +2 -2
- package/api/upgrade/upgrade.doc.mjs +32 -23
- package/api/upgrade/upgrade.type.d.mts +43 -5
- package/api/upgrade/upgrade.type.mjs +29 -13
- package/assets/codemods/__tests__/registry.test.mjs +1 -0
- package/assets/codemods/__tests__/runner.test.mjs +332 -8
- package/assets/codemods/file-count.test.mjs +163 -0
- package/assets/codemods/integration-discovery.mjs +48 -4
- package/assets/codemods/integration-discovery.test.mjs +73 -0
- package/assets/codemods/integration-runner.mjs +59 -7
- package/assets/codemods/integration-runner.protection.test.mjs +153 -0
- package/assets/codemods/registry.mjs +1 -0
- package/assets/codemods/run-codemod.mjs +177 -34
- package/assets/codemods/runner.mjs +353 -104
- package/assets/codemods/term-log.mjs +32 -8
- package/assets/codemods/term-log.test.mjs +19 -1
- package/assets/codemods/transform-prop.mjs +109 -0
- package/assets/codemods/transform-prop.test.mjs +95 -0
- package/assets/codemods/transforms/v0.0.14/__tests__/rename-status-variants.test.mjs +86 -165
- package/assets/codemods/transforms/v0.0.14/rename-status-variants.mjs +72 -210
- package/assets/codemods/transforms/v0.1.8/__tests__/rename-avatar-size-scale.test.mjs +83 -115
- package/assets/codemods/transforms/v0.1.8/rename-avatar-size-scale.mjs +57 -186
- package/assets/codemods/transforms/v0.3.0/__tests__/unwrap-authoring-factories.test.mjs +27 -5
- package/assets/codemods/transforms/v0.3.0/unwrap-authoring-factories.mjs +20 -5
- package/assets/codemods/transforms/v0.6.0/__tests__/next-codemods.test.mjs +47 -0
- package/assets/codemods/transforms/v0.6.0/rename-resizable-pixel-bounds.mjs +57 -10
- package/assets/codemods/transforms/v0.6.4/__tests__/migrate-native-picker-to-presentation.test.mjs +63 -0
- package/assets/codemods/transforms/v0.6.4/__tests__/migrate-theme-catalog-to-descriptors.test.mjs +220 -0
- package/assets/codemods/transforms/v0.6.4/index.mjs +31 -0
- package/assets/codemods/transforms/v0.6.4/migrate-native-picker-to-presentation.mjs +148 -0
- package/assets/codemods/transforms/v0.6.4/migrate-theme-catalog-to-descriptors.mjs +141 -0
- package/assets/docs/README.md +12 -1
- package/assets/docs/authoring.doc.mjs +14 -0
- package/assets/docs/browser-support.doc.mjs +11 -11
- package/assets/docs/color.doc.mjs +8 -2
- package/assets/docs/elevation.doc.mjs +6 -4
- package/assets/docs/getting-started.doc.mjs +6 -17
- package/assets/docs/icons.doc.mjs +2 -21
- package/assets/docs/illustrations.doc.mjs +7 -15
- package/assets/docs/internationalization.doc.mjs +7 -5
- package/assets/docs/layout.doc.dense.mjs +132 -84
- package/assets/docs/layout.doc.mjs +134 -78
- package/assets/docs/migration.doc.mjs +19 -21
- package/assets/docs/motion.doc.mjs +16 -3
- package/assets/docs/principles.doc.dense.mjs +5 -5
- package/assets/docs/principles.doc.mjs +14 -6
- package/assets/docs/principles.doc.zh.mjs +6 -6
- package/assets/docs/shape.doc.mjs +8 -3
- package/assets/docs/spacing.doc.mjs +7 -2
- package/assets/docs/styling-libraries.doc.mjs +10 -6
- package/assets/docs/styling.doc.mjs +22 -26
- package/assets/docs/theme.doc.dense.mjs +58 -18
- package/assets/docs/theme.doc.mjs +60 -50
- package/assets/docs/theme.doc.zh.mjs +9 -8
- package/assets/docs/tokens.doc.dense.mjs +2 -2
- package/assets/docs/tokens.doc.mjs +390 -9
- package/assets/docs/tokens.doc.zh.mjs +2 -2
- package/assets/docs/tree/add-a-component.doc.mjs +75 -0
- package/assets/docs/tree/add-a-theme.doc.mjs +85 -0
- package/assets/docs/tree/add-a-topic.doc.mjs +144 -0
- package/assets/docs/tree/agent-guidance.doc.mjs +138 -0
- package/assets/docs/tree/api.doc.mjs +30 -0
- package/assets/docs/tree/block-template.doc.mjs +130 -0
- package/assets/docs/tree/build-the-template.doc.mjs +28 -0
- package/assets/docs/tree/building-blocks.doc.mjs +46 -0
- package/assets/docs/tree/check-your-docs.doc.mjs +137 -0
- package/assets/docs/tree/checks.doc.mjs +119 -0
- package/assets/docs/tree/cli.doc.mjs +23 -0
- package/assets/docs/tree/codemods.doc.mjs +147 -0
- package/assets/docs/tree/commands.doc.mjs +25 -0
- package/assets/docs/tree/component-family.doc.mjs +113 -0
- package/assets/docs/tree/component-imports.doc.mjs +69 -0
- package/assets/docs/tree/component-lookups.doc.mjs +149 -0
- package/assets/docs/tree/components.doc.mjs +23 -0
- package/assets/docs/tree/configuration.doc.mjs +23 -0
- package/assets/docs/tree/debug-and-gap-reports.doc.mjs +182 -0
- package/assets/docs/tree/define-the-theme.doc.mjs +118 -0
- package/assets/docs/tree/describe-the-component.doc.mjs +57 -0
- package/assets/docs/tree/docs.doc.mjs +21 -0
- package/assets/docs/tree/document-the-template.doc.mjs +28 -0
- package/assets/docs/tree/document-the-theme.doc.mjs +68 -0
- package/assets/docs/tree/export-template-assets.doc.mjs +147 -0
- package/assets/docs/tree/extend-or-replace.doc.mjs +103 -0
- package/assets/docs/tree/fonts-and-assets.doc.mjs +106 -0
- package/assets/docs/tree/generate-a-palette.doc.mjs +66 -0
- package/assets/docs/tree/grade-template-with-agent.doc.mjs +105 -0
- package/assets/docs/tree/help.doc.mjs +16 -0
- package/assets/docs/tree/integrations.doc.mjs +40 -0
- package/assets/docs/tree/links.doc.mjs +98 -0
- package/assets/docs/tree/package-and-test.doc.mjs +32 -0
- package/assets/docs/tree/page-template.doc.mjs +71 -0
- package/assets/docs/tree/publishing.doc.mjs +111 -0
- package/assets/docs/tree/quick-start.doc.mjs +272 -0
- package/assets/docs/tree/replace-a-core-component.doc.mjs +104 -0
- package/assets/docs/tree/replace-a-core-template.doc.mjs +172 -0
- package/assets/docs/tree/sections-and-placement.doc.mjs +108 -0
- package/assets/docs/tree/see-it-in-an-app.doc.mjs +59 -0
- package/assets/docs/tree/ship.doc.mjs +16 -0
- package/assets/docs/tree/short-and-findable.doc.mjs +108 -0
- package/assets/docs/tree/single-component.doc.mjs +165 -0
- package/assets/docs/tree/start-a-template.doc.mjs +143 -0
- package/assets/docs/tree/subcomponent.doc.mjs +115 -0
- package/assets/docs/tree/template-assets.doc.mjs +64 -0
- package/assets/docs/tree/template-doc-overview.doc.mjs +109 -0
- package/assets/docs/tree/template-fonts.doc.mjs +102 -0
- package/assets/docs/tree/template-grading-rubric.doc.mjs +452 -0
- package/assets/docs/tree/template-icons.doc.mjs +97 -0
- package/assets/docs/tree/template-images-media.doc.mjs +127 -0
- package/assets/docs/tree/template-styles.doc.mjs +93 -0
- package/assets/docs/tree/templates.doc.mjs +34 -0
- package/assets/docs/tree/test-in-an-app.doc.mjs +115 -0
- package/assets/docs/tree/test-template-in-app.doc.mjs +128 -0
- package/assets/docs/tree/themes.doc.mjs +39 -0
- package/assets/docs/tree/troubleshooting.doc.mjs +149 -0
- package/assets/docs/tree/upgrading.doc.mjs +103 -0
- package/assets/docs/tree/use-a-theme-in-an-app.doc.mjs +51 -0
- package/assets/docs/tree/verify-packed-template.doc.mjs +77 -0
- package/assets/docs/tree/versioning.doc.mjs +161 -0
- package/assets/docs/tree/write-good-templates.doc.mjs +64 -0
- package/assets/docs/tree/write-the-template-file.doc.mjs +154 -0
- package/assets/docs/typography.doc.mjs +24 -4
- package/assets/docs/working-with-ai.doc.mjs +34 -26
- package/assets/templates/blocks/components/CheckboxList/CheckboxListSelectAllPattern.doc.mjs +1 -1
- package/assets/templates/blocks/components/CheckboxList/CheckboxListSelectAllPattern.tsx +1 -3
- package/assets/templates/blocks/components/DateInput/DateInputDateRange.tsx +1 -1
- package/assets/templates/blocks/components/InternationalizationProvider/InternationalizationProvider01ShippedLocale.tsx +1 -1
- package/assets/templates/blocks/components/Item/ItemDocumentTabs.doc.mjs +14 -0
- package/assets/templates/blocks/components/Item/ItemDocumentTabs.tsx +100 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaInlineRail.doc.mjs +14 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaInlineRail.tsx +61 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaOverscrollChaining.doc.mjs +14 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaOverscrollChaining.tsx +126 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaShowcase.doc.mjs +15 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaShowcase.tsx +86 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyGroupHeaders.doc.mjs +14 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyGroupHeaders.tsx +99 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyPassthrough.doc.mjs +14 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyPassthrough.tsx +122 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaTwoAxisBoard.doc.mjs +14 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaTwoAxisBoard.tsx +95 -0
- package/assets/templates/blocks/components/Table/TableBulkActionsTable.doc.mjs +14 -0
- package/assets/templates/blocks/components/Table/TableBulkActionsTable.tsx +71 -0
- package/assets/templates/blocks/components/Table/TableFloatingBulkActionsTable.doc.mjs +19 -0
- package/assets/templates/blocks/components/Table/TableFloatingBulkActionsTable.tsx +139 -0
- package/assets/templates/blocks/components/TimeInput/TimeInputConstrained.tsx +1 -0
- package/assets/templates/blocks/components/Timer/TimerFormats.doc.mjs +14 -0
- package/assets/templates/blocks/components/Timer/TimerFormats.tsx +34 -0
- package/assets/templates/blocks/components/Timer/TimerInline.doc.mjs +14 -0
- package/assets/templates/blocks/components/Timer/TimerInline.tsx +14 -0
- package/assets/templates/blocks/components/Timer/TimerShowcase.doc.mjs +13 -0
- package/assets/templates/blocks/components/Timer/TimerShowcase.tsx +47 -0
- package/assets/templates/blocks/components/Timer/TimerTypography.doc.mjs +14 -0
- package/assets/templates/blocks/components/Timer/TimerTypography.tsx +31 -0
- package/assets/templates/blocks/components/Toolbar/ToolbarTableFilter.doc.mjs +19 -3
- package/assets/templates/blocks/components/Toolbar/ToolbarTableFilter.tsx +383 -65
- package/assets/templates/pages/table-tree/page.tsx +1704 -0
- package/assets/templates/pages/table-tree/template.doc.mjs +12 -0
- package/assets/templates/themes/butter/butterTheme.doc.mjs +11 -0
- package/assets/templates/themes/chocolate/chocolateTheme.doc.mjs +11 -0
- package/assets/templates/themes/gothic/gothicTheme.doc.mjs +11 -0
- package/assets/templates/themes/matcha/matchaTheme.doc.mjs +11 -0
- package/assets/templates/themes/neutral/neutralTheme.doc.mjs +11 -0
- package/assets/templates/themes/stone/stoneTheme.doc.mjs +11 -0
- package/assets/templates/themes/y2k/y2kTheme.doc.mjs +11 -0
- package/authoring/_shared/contract.ts +22 -0
- package/authoring/codemod/codemod.doc.mjs +7 -2
- package/authoring/codemod/parse.d.mts +8 -8
- package/authoring/codemod/parse.mjs +8 -6
- package/authoring/codemod/type.ts +12 -0
- package/authoring/config/config.doc.mjs +11 -3
- package/authoring/config/debug-composition.test.mjs +92 -0
- package/authoring/config/parse.d.mts +15 -13
- package/authoring/config/parse.mjs +27 -8
- package/authoring/config/parse.test.mjs +8 -0
- package/authoring/config/type.ts +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 +792 -24
- package/authoring/doctypes/_schema.mjs +549 -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 +43 -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 +12 -3
- package/authoring/doctypes/component/parse.d.mts +2 -2
- package/authoring/doctypes/component/parse.mjs +1 -1
- package/authoring/doctypes/component/type.ts +14 -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 +55 -6
- package/authoring/doctypes/reference/type.ts +75 -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 +2 -2
- 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 +22 -13
- 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 +153 -61
- package/clients/cli/commands/component-batch.test.mjs +341 -0
- package/clients/cli/commands/component-ownership.test.mjs +92 -3
- package/clients/cli/commands/component-package.test.mjs +46 -0
- package/clients/cli/commands/component-resolution.test.mjs +21 -0
- package/clients/cli/commands/component.doc.mjs +28 -10
- 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 +295 -38
- package/clients/cli/commands/doctor-integration-components.doc.mjs +1 -1
- package/clients/cli/commands/doctor-integration-docs.doc.mjs +6 -5
- 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 +143 -8
- package/clients/cli/commands/doctor.doc.mjs +4 -2
- package/clients/cli/commands/doctor.mjs +108 -37
- package/clients/cli/commands/doctor.test.mjs +42 -0
- package/clients/cli/commands/gap-report.doc.mjs +27 -15
- 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 +24 -10
- 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 +39 -13
- package/clients/cli/commands/integration-authoring.test.mjs +74 -19
- package/clients/cli/commands/integration-pack.doc.mjs +6 -10
- package/clients/cli/commands/integration-real-world.test.mjs +4 -10
- package/clients/cli/commands/integration-verify.doc.mjs +22 -0
- package/clients/cli/commands/integration.doc.mjs +5 -5
- package/clients/cli/commands/integration.mjs +75 -43
- 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 +2 -2
- package/clients/cli/commands/no-prompt-wording.test.mjs +94 -0
- package/clients/cli/commands/search.doc.mjs +16 -6
- package/clients/cli/commands/search.mjs +49 -11
- package/clients/cli/commands/search.test.mjs +92 -0
- package/clients/cli/commands/setup-nudge.test.mjs +6 -0
- package/clients/cli/commands/swizzle.doc.mjs +4 -3
- package/clients/cli/commands/swizzle.path-safety.test.mjs +42 -0
- package/clients/cli/commands/template.doc.mjs +53 -14
- 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 +725 -0
- package/clients/cli/commands/theme-add.doc.mjs +5 -4
- 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 +12 -7
- package/clients/cli/commands/theme-palette-generate.test.mjs +19 -0
- package/clients/cli/commands/theme-palette.doc.mjs +2 -3
- package/clients/cli/commands/theme-targets.behavior.test.mjs +4 -3
- package/clients/cli/commands/theme-targets.doc.mjs +3 -3
- 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 +3 -2
- package/clients/cli/commands/upgrade.ascii-output.test.mjs +87 -0
- package/clients/cli/commands/upgrade.doc.mjs +83 -12
- 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 +47 -34
- package/clients/cli/latest-version-env.test.mjs +50 -0
- package/clients/cli/lib/cli-error.test.mjs +7 -0
- package/clients/cli/lib/component-format.mjs +9 -9
- package/clients/cli/lib/component-format.test.mjs +1 -1
- package/clients/cli/lib/define-command.mjs +56 -6
- package/clients/cli/lib/define-command.test.mjs +54 -0
- package/clients/cli/lib/doc-text-ascii.test.mjs +82 -0
- package/clients/cli/lib/exit-codes.test.mjs +113 -0
- package/clients/cli/lib/hook-format.mjs +19 -10
- package/clients/cli/lib/json-shim.mjs +62 -16
- package/clients/cli/lib/json-shim.test.mjs +83 -0
- package/clients/cli/lib/manifest.d.ts +2 -0
- package/clients/cli/lib/manifest.mjs +53 -6
- package/clients/cli/lib/manifest.test.mjs +22 -2
- package/clients/cli/lib/parse-error-format.test.mjs +81 -0
- package/foundation/agent-docs/agent-docs.d.mts +7 -2
- package/foundation/agent-docs/agent-docs.mjs +83 -13
- package/foundation/agent-docs/agent-docs.path-safety.test.mjs +266 -4
- 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 +174 -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 +504 -0
- package/foundation/discovery/cli-self-docs.test.mjs +395 -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 +427 -108
- package/foundation/discovery/docs-discovery.test.mjs +386 -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 +1643 -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 +298 -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 +292 -0
- package/foundation/doc-compiler/tree.mjs +881 -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 +65 -0
- package/foundation/integrations/cli-requirement.mjs +189 -0
- package/foundation/integrations/cli-requirement.test.mjs +89 -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 +28 -25
- package/foundation/integrations/contribution-inventory.test.mjs +86 -27
- package/foundation/integrations/integration-warnings.d.mts +9 -2
- package/foundation/integrations/integration-warnings.mjs +52 -21
- package/foundation/integrations/integration-warnings.test.mjs +74 -1
- package/foundation/integrations/integrations.d.mts +63 -3
- package/foundation/integrations/integrations.mjs +122 -9
- package/foundation/integrations/integrations.test.mjs +415 -1
- package/foundation/integrations/provider-conflicts.test.mjs +125 -0
- package/foundation/integrations/provider-ledger.test.mjs +275 -0
- package/foundation/integrations/provider-resolution.d.mts +152 -0
- package/foundation/integrations/provider-resolution.mjs +576 -0
- package/foundation/integrations/provider-resolution.test.mjs +369 -0
- package/foundation/integrations/theme-descriptor.d.mts +8 -0
- package/foundation/integrations/theme-descriptor.mjs +44 -0
- package/foundation/integrations/validate-contributions.d.mts +2 -0
- package/foundation/integrations/validate-contributions.mjs +131 -29
- package/foundation/response/base.d.ts +8 -4
- package/foundation/response/batch.type.d.mts +33 -0
- package/foundation/response/batch.type.mjs +34 -0
- package/foundation/response/error-codes.d.mts +3 -1
- package/foundation/response/error-codes.d.ts +2 -0
- package/foundation/response/error-codes.doc.mjs +19 -12
- package/foundation/response/error-codes.mjs +8 -2
- package/foundation/response/error-codes.test.mjs +166 -14
- 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 +7 -2
- package/foundation/response/response-types.doc.mjs +69 -25
- package/foundation/response/response-types.doc.test.mjs +181 -0
- package/foundation/response/response.doc.mjs +12 -11
- 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/api/docs/docs.test.mjs +0 -83
- package/api/docs/integrationDocs.test.mjs +0 -208
- package/api/search/search.test.mjs +0 -389
- package/assets/docs/cli-integrations.doc.mjs +0 -367
- package/assets/templates/themes/manifest.json +0 -95
- package/clients/cli/commands/docs.test.mjs +0 -102
- 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
- package/foundation/agent-docs/agent-docs.test.mjs +0 -1141
|
@@ -3,19 +3,38 @@
|
|
|
3
3
|
/**
|
|
4
4
|
* @file docs command — Print Astryx reference docs
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
6
|
+
* In text, every read is one level: a topic lists its sections, so a reader can
|
|
7
|
+
* open one section by its key, and `--full` prints the whole topic. `--json`
|
|
8
|
+
* keeps the docs() contract: a topic returns its whole doc, and `--index` its
|
|
9
|
+
* sections.
|
|
10
|
+
* Supports --detail (full|compact|brief) and --lang (en|zh|dense). A code
|
|
11
|
+
* block's label prints above its fence, and table cells escape their pipes.
|
|
8
12
|
*
|
|
9
13
|
* Usage:
|
|
10
14
|
* astryx docs List available topics
|
|
11
|
-
* astryx docs <topic>
|
|
15
|
+
* astryx docs <topic> List the topic's sections (a topic
|
|
16
|
+
* with one section prints whole)
|
|
12
17
|
* astryx docs <topic> <section> Print one section
|
|
18
|
+
* astryx docs <topic> --full Print the whole topic
|
|
19
|
+
* astryx docs <route> Open a node of the docs tree, such as
|
|
20
|
+
* cli, cli/api, or cli/api/functions/search
|
|
13
21
|
*/
|
|
14
22
|
|
|
15
|
-
import {
|
|
23
|
+
import {
|
|
24
|
+
formatCliCommand,
|
|
25
|
+
getCliInvocation,
|
|
26
|
+
} from '../../../foundation/env/package-manager.mjs';
|
|
16
27
|
import {jsonOut} from '../../../foundation/response/json.mjs';
|
|
17
|
-
import {
|
|
28
|
+
import {
|
|
29
|
+
emit,
|
|
30
|
+
section,
|
|
31
|
+
records,
|
|
32
|
+
text,
|
|
33
|
+
code,
|
|
34
|
+
wrapText,
|
|
35
|
+
} from '../formatters/index.mjs';
|
|
18
36
|
import {cliError} from '../lib/cli-error.mjs';
|
|
37
|
+
import {ERROR_CODES} from '../../../foundation/response/error-codes.mjs';
|
|
19
38
|
import {defineCommand} from '../lib/define-command.mjs';
|
|
20
39
|
import {resultSet} from '../../../foundation/debug/index.mjs';
|
|
21
40
|
import {docs as docsApi} from '../../../api/docs/docs.mjs';
|
|
@@ -24,21 +43,35 @@ import {doc as docsFn} from '../../../api/docs/docs.doc.mjs';
|
|
|
24
43
|
|
|
25
44
|
// ─── Formatting ──────────────────────────────────────────────────────────────
|
|
26
45
|
|
|
46
|
+
/**
|
|
47
|
+
* A table cell with its pipes escaped. Columns are separated by ` | `, and a
|
|
48
|
+
* union type such as `'light' | 'dark'` is spelled with the same character,
|
|
49
|
+
* so an unescaped cell reads as extra columns. `astryx component` escapes its
|
|
50
|
+
* prop tables the same way.
|
|
51
|
+
* @param {string | undefined} cell
|
|
52
|
+
* @returns {string}
|
|
53
|
+
*/
|
|
54
|
+
function tableCell(cell) {
|
|
55
|
+
return (cell || '').replaceAll('|', '\\|');
|
|
56
|
+
}
|
|
57
|
+
|
|
27
58
|
/**
|
|
28
59
|
* @param {string[]} headers
|
|
29
60
|
* @param {string[][]} rows
|
|
30
61
|
* @returns {string}
|
|
31
62
|
*/
|
|
32
63
|
function formatTable(headers, rows) {
|
|
33
|
-
const
|
|
34
|
-
|
|
64
|
+
const head = headers.map(tableCell);
|
|
65
|
+
const cells = rows.map(r => r.map(tableCell));
|
|
66
|
+
const widths = head.map((h, i) =>
|
|
67
|
+
Math.max(h.length, ...cells.map(r => (r[i] || '').length)),
|
|
35
68
|
);
|
|
36
69
|
const sep = widths.map(w => '-'.repeat(w)).join(' | ');
|
|
37
|
-
const
|
|
38
|
-
const body =
|
|
39
|
-
.map(r => r.map((c, i) =>
|
|
70
|
+
const top = head.map((h, i) => h.padEnd(widths[i])).join(' | ');
|
|
71
|
+
const body = cells
|
|
72
|
+
.map(r => r.map((c, i) => c.padEnd(widths[i])).join(' | '))
|
|
40
73
|
.join('\n');
|
|
41
|
-
return `${
|
|
74
|
+
return `${top}\n${sep}\n${body}`;
|
|
42
75
|
}
|
|
43
76
|
|
|
44
77
|
/**
|
|
@@ -47,15 +80,19 @@ function formatTable(headers, rows) {
|
|
|
47
80
|
* @returns {string}
|
|
48
81
|
*/
|
|
49
82
|
function formatTableCompact(headers, rows) {
|
|
50
|
-
|
|
83
|
+
// An empty cell, such as a Default with none, adds nothing to the line.
|
|
84
|
+
return rows
|
|
85
|
+
.map(r => r.filter(cell => String(cell ?? '').trim() !== '').join(' = '))
|
|
86
|
+
.join('\n');
|
|
51
87
|
}
|
|
52
88
|
|
|
53
89
|
/**
|
|
90
|
+
* One content block as text. Exported for its tests.
|
|
54
91
|
* @param {import('@astryxdesign/cli/authoring').ReferenceContentBlock} block
|
|
55
92
|
* @param {'full' | 'compact' | 'brief'} detail
|
|
56
93
|
* @returns {string | null}
|
|
57
94
|
*/
|
|
58
|
-
function formatBlock(block, detail) {
|
|
95
|
+
export function formatBlock(block, detail) {
|
|
59
96
|
switch (block.type) {
|
|
60
97
|
case 'prose':
|
|
61
98
|
return block.text;
|
|
@@ -66,13 +103,20 @@ function formatBlock(block, detail) {
|
|
|
66
103
|
case 'code':
|
|
67
104
|
if (detail === 'compact' || detail === 'brief') return null;
|
|
68
105
|
{
|
|
69
|
-
|
|
70
|
-
|
|
106
|
+
// The label names the block, so it prints above the fence, not
|
|
107
|
+
// inside it: `// label` is not a comment in bash, CSS, JSON, or
|
|
108
|
+
// HTML, and a reader who copies the block would copy it too.
|
|
109
|
+
const label = block.label
|
|
110
|
+
? `${block.label.replace(/:\s*$/, '')}:\n`
|
|
111
|
+
: '';
|
|
112
|
+
return `${label}\`\`\`${block.lang}\n${block.code}\n\`\`\``;
|
|
71
113
|
}
|
|
72
114
|
|
|
73
115
|
case 'table':
|
|
74
116
|
if (detail === 'brief') {
|
|
75
|
-
return block.rows
|
|
117
|
+
return block.rows
|
|
118
|
+
.map(r => r.slice(0, 2).map(tableCell).join('='))
|
|
119
|
+
.join(' | ');
|
|
76
120
|
}
|
|
77
121
|
if (detail === 'compact') {
|
|
78
122
|
return formatTableCompact(block.headers, block.rows);
|
|
@@ -80,10 +124,14 @@ function formatBlock(block, detail) {
|
|
|
80
124
|
return formatTable(block.headers, block.rows);
|
|
81
125
|
|
|
82
126
|
case 'list': {
|
|
83
|
-
const prefix =
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
127
|
+
const prefix =
|
|
128
|
+
block.style === 'ordered'
|
|
129
|
+
? (/** @type {number} */ i) => `${i + 1}. `
|
|
130
|
+
: block.style === 'dont'
|
|
131
|
+
? () => 'x '
|
|
132
|
+
: block.style === 'do'
|
|
133
|
+
? () => '+ '
|
|
134
|
+
: () => '- ';
|
|
87
135
|
return block.items.map((item, i) => `${prefix(i)}${item}`).join('\n');
|
|
88
136
|
}
|
|
89
137
|
|
|
@@ -93,7 +141,7 @@ function formatBlock(block, detail) {
|
|
|
93
141
|
}
|
|
94
142
|
|
|
95
143
|
/**
|
|
96
|
-
* @param {import('
|
|
144
|
+
* @param {import('../../../api/docs/docs.type.mjs').DocsReadSection} section
|
|
97
145
|
* @param {'full' | 'compact' | 'brief'} detail
|
|
98
146
|
* @returns {string}
|
|
99
147
|
*/
|
|
@@ -107,12 +155,13 @@ function formatSection(section, detail) {
|
|
|
107
155
|
return `${section.title}: ${first.split('\n')[0]}`;
|
|
108
156
|
}
|
|
109
157
|
|
|
110
|
-
const heading =
|
|
158
|
+
const heading =
|
|
159
|
+
detail === 'compact' ? `[${section.title}]` : `## ${section.title}`;
|
|
111
160
|
return `${heading}\n\n${blocks.join('\n\n')}`;
|
|
112
161
|
}
|
|
113
162
|
|
|
114
163
|
/**
|
|
115
|
-
* @param {import('
|
|
164
|
+
* @param {import('../../../api/docs/docs.type.mjs').DocsReadDoc} docs
|
|
116
165
|
* @param {'full' | 'compact' | 'brief'} detail
|
|
117
166
|
* @returns {string}
|
|
118
167
|
*/
|
|
@@ -123,22 +172,146 @@ function formatReferenceFull(docs, detail) {
|
|
|
123
172
|
return `${header}\n${sections.join('\n')}`;
|
|
124
173
|
}
|
|
125
174
|
|
|
126
|
-
const header =
|
|
127
|
-
|
|
128
|
-
|
|
175
|
+
const header =
|
|
176
|
+
detail === 'compact'
|
|
177
|
+
? `# ${docs.title}\n${docs.description}`
|
|
178
|
+
: `# ${docs.title}\n\n${docs.description}`;
|
|
129
179
|
const sections = docs.sections.map(s => formatSection(s, detail));
|
|
130
180
|
const sep = detail === 'compact' ? '\n\n' : '\n\n';
|
|
131
181
|
return `${header}\n\n${sections.join(sep)}`;
|
|
132
182
|
}
|
|
133
183
|
|
|
184
|
+
/**
|
|
185
|
+
* The moves a read offers (spec:AST-047), one runnable command per line: up to
|
|
186
|
+
* the level it sits in, the item before and after it, and the docs it names.
|
|
187
|
+
* @param {import('../../../api/docs/docs.type.mjs').DocsLinks | undefined} links
|
|
188
|
+
* @returns {string[]}
|
|
189
|
+
*/
|
|
190
|
+
function linkLines(links) {
|
|
191
|
+
if (!links) return [];
|
|
192
|
+
return [
|
|
193
|
+
`Up: ${formatCliCommand(links.up)}`,
|
|
194
|
+
...(links.previous ? [`Previous: ${formatCliCommand(links.previous)}`] : []),
|
|
195
|
+
...(links.next ? [`Next: ${formatCliCommand(links.next)}`] : []),
|
|
196
|
+
...(links.related ?? []).map(
|
|
197
|
+
(command, i) => `${i === 0 ? 'Related: ' : ' '}${formatCliCommand(command)}`,
|
|
198
|
+
),
|
|
199
|
+
];
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* A topic's section index: what the topic is, one line per section with the
|
|
204
|
+
* key to read it by, and how to read further.
|
|
205
|
+
* @param {import('../../../api/docs/docs.type.mjs').DocsIndex} index
|
|
206
|
+
* @param {string} run
|
|
207
|
+
*/
|
|
208
|
+
function emitIndex(index, run) {
|
|
209
|
+
emit(
|
|
210
|
+
section(
|
|
211
|
+
index.title,
|
|
212
|
+
index.description ? wrapText(index.description) : undefined,
|
|
213
|
+
),
|
|
214
|
+
// Summaries wrap rather than being cut: the summary is how a reader picks
|
|
215
|
+
// the one section to open.
|
|
216
|
+
records(index.sections, {
|
|
217
|
+
fields: ['id', 'title', 'summary'],
|
|
218
|
+
layout: 'inline',
|
|
219
|
+
}),
|
|
220
|
+
text(
|
|
221
|
+
[
|
|
222
|
+
`Read one section: ${run} docs ${index.name} <section>`,
|
|
223
|
+
`Read everything: ${run} docs ${index.name} --full`,
|
|
224
|
+
...linkLines(index.links),
|
|
225
|
+
].join('\n'),
|
|
226
|
+
),
|
|
227
|
+
);
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
/**
|
|
231
|
+
* One child row of a namespace. Namespace and guide route names are already
|
|
232
|
+
* readable, so repeating their titles adds noise (`start-a-template Start a
|
|
233
|
+
* template`). Typed docs keep a distinct title when it carries the real symbol
|
|
234
|
+
* name (`assert-response assertResponse()`).
|
|
235
|
+
* @param {import('../../../api/docs/docs.type.mjs').DocsNodeChild} child
|
|
236
|
+
* @returns {{name: string, summary: string}}
|
|
237
|
+
*/
|
|
238
|
+
function childRow(child) {
|
|
239
|
+
const titleAddsIdentity =
|
|
240
|
+
child.kind !== 'namespace' &&
|
|
241
|
+
child.kind !== 'generic' &&
|
|
242
|
+
child.title !== child.name;
|
|
243
|
+
return {
|
|
244
|
+
name: child.name,
|
|
245
|
+
summary: titleAddsIdentity
|
|
246
|
+
? `${child.title}: ${child.summary}`
|
|
247
|
+
: child.summary,
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
/**
|
|
252
|
+
* One node of the docs tree. A namespace lists each slot's children, one level
|
|
253
|
+
* down, with the command to open one; a typed doc prints its content. Both end
|
|
254
|
+
* with the way back up.
|
|
255
|
+
* @param {import('../../../api/docs/docs.type.mjs').DocsNode} node
|
|
256
|
+
* @param {'full' | 'compact' | 'brief'} detail
|
|
257
|
+
* @param {string} run
|
|
258
|
+
*/
|
|
259
|
+
function emitNode(node, detail, run) {
|
|
260
|
+
if (node.kind === 'namespace') {
|
|
261
|
+
emit(
|
|
262
|
+
section(node.title, wrapText(node.summary)),
|
|
263
|
+
// A namespace may author intro `blocks`; they render above its children.
|
|
264
|
+
...(node.content?.length
|
|
265
|
+
? [
|
|
266
|
+
text(
|
|
267
|
+
node.content
|
|
268
|
+
.map(b => formatBlock(b, detail))
|
|
269
|
+
.filter(Boolean)
|
|
270
|
+
.join('\n\n'),
|
|
271
|
+
),
|
|
272
|
+
]
|
|
273
|
+
: []),
|
|
274
|
+
...node.slots.flatMap(slot => [
|
|
275
|
+
// A namespace with one slot titled like itself needs no second heading.
|
|
276
|
+
...(node.slots.length === 1 && slot.title === node.title
|
|
277
|
+
? []
|
|
278
|
+
: [section(slot.title)]),
|
|
279
|
+
records(slot.children.map(childRow), {
|
|
280
|
+
fields: ['name', 'summary'],
|
|
281
|
+
layout: 'inline',
|
|
282
|
+
}),
|
|
283
|
+
]),
|
|
284
|
+
text(
|
|
285
|
+
[
|
|
286
|
+
// A child's route is its parent's route and its name, except a flat
|
|
287
|
+
// topic in the Unorganized level, which keeps its own name.
|
|
288
|
+
node.slots.every(slot =>
|
|
289
|
+
slot.children.every(child => child.route.startsWith(`${node.route}/`)),
|
|
290
|
+
)
|
|
291
|
+
? `Open one: ${run} docs ${node.route}/<name>`
|
|
292
|
+
: `Open one: ${run} docs <name>`,
|
|
293
|
+
...linkLines(node.links),
|
|
294
|
+
].join('\n'),
|
|
295
|
+
),
|
|
296
|
+
);
|
|
297
|
+
return;
|
|
298
|
+
}
|
|
299
|
+
emit(
|
|
300
|
+
code(formatSection({title: node.title, content: node.content}, detail)),
|
|
301
|
+
text(linkLines(node.links).join('\n')),
|
|
302
|
+
);
|
|
303
|
+
}
|
|
304
|
+
|
|
134
305
|
/**
|
|
135
306
|
* What the run answered with. A named topic (or one of its sections) resolves
|
|
136
307
|
* or throws, so it is always a direct match of one doc; the bare form lists
|
|
137
308
|
* every topic there is.
|
|
138
309
|
*
|
|
139
310
|
* @param {import('../../../api/docs/docs.type.mjs').DocsListResponse
|
|
311
|
+
* | import('../../../api/docs/docs.type.mjs').DocsIndexResponse
|
|
140
312
|
* | import('../../../api/docs/docs.type.mjs').DocsDetailResponse
|
|
141
|
-
* | import('../../../api/docs/docs.type.mjs').DocsDetailSectionResponse
|
|
313
|
+
* | import('../../../api/docs/docs.type.mjs').DocsDetailSectionResponse
|
|
314
|
+
* | import('../../../api/docs/docs.type.mjs').DocsNodeResponse} result
|
|
142
315
|
* @returns {import('../../../foundation/debug/command-result.mjs').CommandResult}
|
|
143
316
|
*/
|
|
144
317
|
function summarize(result) {
|
|
@@ -155,7 +328,11 @@ function summarize(result) {
|
|
|
155
328
|
export function registerDocs(program) {
|
|
156
329
|
defineCommand(program, docsCommand, {
|
|
157
330
|
fn: docsFn,
|
|
158
|
-
action: async (
|
|
331
|
+
action: async (
|
|
332
|
+
/** @type {string | undefined} */ topic,
|
|
333
|
+
/** @type {string | undefined} */ sectionName,
|
|
334
|
+
/** @type {{index?: boolean, full?: boolean}} */ options = {},
|
|
335
|
+
) => {
|
|
159
336
|
const run = getCliInvocation();
|
|
160
337
|
const lang = program.opts().lang || null;
|
|
161
338
|
const zh = program.opts().zh || false;
|
|
@@ -163,13 +340,42 @@ export function registerDocs(program) {
|
|
|
163
340
|
const detail = program.opts().detail || 'full';
|
|
164
341
|
const json = program.opts().json || false;
|
|
165
342
|
|
|
343
|
+
if (options.index && options.full) {
|
|
344
|
+
return cliError(
|
|
345
|
+
'Ask for the section list or the whole topic, not both: --index and --full cannot both be set.',
|
|
346
|
+
{code: ERROR_CODES.ERR_INVALID_ARGUMENT},
|
|
347
|
+
);
|
|
348
|
+
}
|
|
349
|
+
// Text reads one level: a topic lists its sections (one with a single
|
|
350
|
+
// section prints whole). JSON keeps docs(): the whole topic unless
|
|
351
|
+
// --index. The dense variant is written to be read whole.
|
|
352
|
+
const listSections =
|
|
353
|
+
Boolean(options.index) ||
|
|
354
|
+
(!json &&
|
|
355
|
+
!options.full &&
|
|
356
|
+
!dense &&
|
|
357
|
+
lang !== 'dense' &&
|
|
358
|
+
sectionName == null);
|
|
166
359
|
let result;
|
|
167
360
|
try {
|
|
168
|
-
result = await docsApi(topic, sectionName, {
|
|
361
|
+
result = await docsApi(topic, sectionName, {
|
|
362
|
+
lang,
|
|
363
|
+
zh,
|
|
364
|
+
dense,
|
|
365
|
+
index: listSections,
|
|
366
|
+
});
|
|
367
|
+
if (
|
|
368
|
+
!options.index &&
|
|
369
|
+
result.type === 'docs.index' &&
|
|
370
|
+
result.data.sections.length <= 1
|
|
371
|
+
) {
|
|
372
|
+
result = await docsApi(topic, sectionName, {lang, zh, dense});
|
|
373
|
+
}
|
|
169
374
|
} catch (e) {
|
|
170
375
|
// docs API throws structured errors with {name, reason} suggestions —
|
|
171
376
|
// pass them through untouched so the CLI envelope matches the API.
|
|
172
|
-
const err =
|
|
377
|
+
const err =
|
|
378
|
+
/** @type {import('../../../api/error.mjs').AstryxError} */ (e);
|
|
173
379
|
return cliError(err.message, {
|
|
174
380
|
suggestions: err.suggestions || [],
|
|
175
381
|
code: err.code,
|
|
@@ -184,28 +390,79 @@ export function registerDocs(program) {
|
|
|
184
390
|
|
|
185
391
|
switch (result.type) {
|
|
186
392
|
case 'docs.list': {
|
|
187
|
-
// The text view mirrors the JSON list
|
|
188
|
-
//
|
|
393
|
+
// The text view mirrors the JSON list, with the docs tree's
|
|
394
|
+
// namespaces (`meta.namespaces`) first under their own heading: that
|
|
395
|
+
// is where the CLI's own docs start, and a namespace reads
|
|
396
|
+
// differently from a topic.
|
|
397
|
+
const namespaces = result.meta?.namespaces ?? [];
|
|
398
|
+
const topics = result.data;
|
|
189
399
|
emit(
|
|
190
|
-
|
|
191
|
-
|
|
400
|
+
...(namespaces.length > 0
|
|
401
|
+
? [
|
|
402
|
+
section('Docs tree'),
|
|
403
|
+
records(namespaces, {
|
|
404
|
+
fields: ['topic', 'description', 'package'],
|
|
405
|
+
layout: 'inline',
|
|
406
|
+
}),
|
|
407
|
+
]
|
|
408
|
+
: []),
|
|
409
|
+
section('Topics'),
|
|
410
|
+
records(topics, {
|
|
411
|
+
fields: ['topic', 'description', 'package'],
|
|
412
|
+
layout: 'inline',
|
|
413
|
+
}),
|
|
192
414
|
text(
|
|
193
415
|
[
|
|
194
|
-
`Usage: ${run} docs <topic
|
|
195
|
-
` ${run} docs <topic> <section
|
|
416
|
+
`Usage: ${run} docs <topic> list a topic's sections`,
|
|
417
|
+
` ${run} docs <topic> <section> read one section`,
|
|
418
|
+
` ${run} docs <topic> --full read the whole topic`,
|
|
419
|
+
` ${run} docs cli/api go down the docs tree one level at a time`,
|
|
420
|
+
`With --json, a topic returns its whole doc; add --index for its section list.`,
|
|
196
421
|
].join('\n'),
|
|
197
422
|
),
|
|
423
|
+
// A package whose doc files did not load has no topics here; say
|
|
424
|
+
// so, and where to look, instead of leaving them silently missing.
|
|
425
|
+
...(result.meta?.notLoaded?.length
|
|
426
|
+
? [
|
|
427
|
+
section('Not loaded'),
|
|
428
|
+
records(result.meta.notLoaded, {
|
|
429
|
+
fields: ['package', 'message'],
|
|
430
|
+
layout: 'inline',
|
|
431
|
+
}),
|
|
432
|
+
text(
|
|
433
|
+
`Run \`${run} doctor integration docs\` in that package to see every problem.`,
|
|
434
|
+
),
|
|
435
|
+
]
|
|
436
|
+
: []),
|
|
198
437
|
);
|
|
199
438
|
break;
|
|
200
439
|
}
|
|
201
440
|
|
|
441
|
+
case 'docs.index': {
|
|
442
|
+
emitIndex(result.data, run);
|
|
443
|
+
break;
|
|
444
|
+
}
|
|
445
|
+
|
|
202
446
|
case 'docs.detail': {
|
|
203
|
-
emit(
|
|
447
|
+
emit(
|
|
448
|
+
code(formatReferenceFull(result.data, detail)),
|
|
449
|
+
text(linkLines(result.data.links).join('\n')),
|
|
450
|
+
);
|
|
204
451
|
break;
|
|
205
452
|
}
|
|
206
453
|
|
|
207
454
|
case 'docs.detail.section': {
|
|
208
|
-
|
|
455
|
+
// One section ends with its moves: up to its topic's index, and to
|
|
456
|
+
// the sections before and after it.
|
|
457
|
+
emit(
|
|
458
|
+
code(formatSection(result.data, detail)),
|
|
459
|
+
text(linkLines(result.data.links).join('\n')),
|
|
460
|
+
);
|
|
461
|
+
break;
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
case 'docs.node': {
|
|
465
|
+
emitNode(result.data, detail, run);
|
|
209
466
|
break;
|
|
210
467
|
}
|
|
211
468
|
}
|
|
@@ -7,7 +7,7 @@ export const doc = {
|
|
|
7
7
|
type: 'command',
|
|
8
8
|
name: 'doctor integration components',
|
|
9
9
|
displayName: 'astryx doctor integration components',
|
|
10
|
-
namespace: 'cli',
|
|
10
|
+
namespace: 'cli/commands',
|
|
11
11
|
summary: 'Warn when integration component names conflict with Core',
|
|
12
12
|
description:
|
|
13
13
|
'Compares one local or installed integration with Core component names. A ' +
|
|
@@ -7,12 +7,13 @@ export const doc = {
|
|
|
7
7
|
type: 'command',
|
|
8
8
|
name: 'doctor integration docs',
|
|
9
9
|
displayName: 'astryx doctor integration docs',
|
|
10
|
-
namespace: 'cli',
|
|
11
|
-
summary: '
|
|
10
|
+
namespace: 'cli/commands',
|
|
11
|
+
summary: 'Check an integration\'s docs: the docs tree they add, every link, and overlaps with Core topics',
|
|
12
12
|
description:
|
|
13
|
-
'
|
|
13
|
+
'Checks the docs tree the package adds, every link in its docs, and overlaps with Core topics. ' +
|
|
14
|
+
'Intentional replacements and extensions are information. ' +
|
|
14
15
|
'A same-name topic without `replaces` or `extends` is an accidental conflict ' +
|
|
15
|
-
'and fails until the author declares the relationship or renames it.',
|
|
16
|
+
'and fails until the author declares the relationship or renames it. See {@link generic:check-your-docs}.',
|
|
16
17
|
fn: 'integrationDocConflicts',
|
|
17
18
|
args: [
|
|
18
19
|
{
|
|
@@ -32,7 +33,7 @@ export const doc = {
|
|
|
32
33
|
],
|
|
33
34
|
exitCodes: [
|
|
34
35
|
{code: 0, when: 'all Core overlaps are explicitly declared or no overlap exists'},
|
|
35
|
-
{code: 1, when: 'an overlap is accidental or
|
|
36
|
+
{code: 1, when: 'an overlap is accidental, a doc is invalid, a namespace or placement fails, or a reference block cannot include what it names. A link that names no doc is a warning, and does not change the exit code'},
|
|
36
37
|
],
|
|
37
38
|
related: ['doctor integration validate', 'docs'],
|
|
38
39
|
};
|
|
@@ -9,13 +9,14 @@ export const doc = {
|
|
|
9
9
|
type: 'command',
|
|
10
10
|
name: 'doctor integration templates',
|
|
11
11
|
displayName: 'astryx doctor integration templates',
|
|
12
|
-
namespace: 'cli',
|
|
13
|
-
summary: '
|
|
12
|
+
namespace: 'cli/commands',
|
|
13
|
+
summary: 'Validate integration template replacements and Core id overlaps',
|
|
14
14
|
description:
|
|
15
|
-
'
|
|
16
|
-
'block template ids.
|
|
17
|
-
'
|
|
18
|
-
'
|
|
15
|
+
'Validates one local or installed integration against the built-in Core page ' +
|
|
16
|
+
'and block template ids. Intentional replacements are informational and name ' +
|
|
17
|
+
'the command for selecting the Core original. Missing targets, ambiguous ' +
|
|
18
|
+
'replacements, and invalid declarations are errors; undeclared same-id overlaps ' +
|
|
19
|
+
'remain warnings that require package selection.',
|
|
19
20
|
fn: 'integrationTemplateConflicts',
|
|
20
21
|
args: [
|
|
21
22
|
{
|
|
@@ -37,8 +38,14 @@ export const doc = {
|
|
|
37
38
|
},
|
|
38
39
|
],
|
|
39
40
|
exitCodes: [
|
|
40
|
-
{
|
|
41
|
-
|
|
41
|
+
{
|
|
42
|
+
code: 0,
|
|
43
|
+
when: 'replacement declarations are valid; undeclared id conflicts are warnings',
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
code: 1,
|
|
47
|
+
when: 'the integration, a template, or a replacement declaration is invalid',
|
|
48
|
+
},
|
|
42
49
|
],
|
|
43
50
|
related: ['doctor integration validate', 'template'],
|
|
44
51
|
};
|
|
@@ -9,7 +9,7 @@ export const doc = {
|
|
|
9
9
|
type: 'command',
|
|
10
10
|
name: 'doctor integration validate',
|
|
11
11
|
displayName: 'astryx doctor integration validate',
|
|
12
|
-
namespace: 'cli',
|
|
12
|
+
namespace: 'cli/commands',
|
|
13
13
|
summary: 'Validate an integration manifest and its contributions',
|
|
14
14
|
description:
|
|
15
15
|
'Validates one integration at a time: the local package rooted at cwd, or an ' +
|
|
@@ -9,7 +9,7 @@ export const doc = {
|
|
|
9
9
|
type: 'command',
|
|
10
10
|
name: 'doctor integration',
|
|
11
11
|
displayName: 'astryx doctor integration',
|
|
12
|
-
namespace: 'cli',
|
|
12
|
+
namespace: 'cli/commands',
|
|
13
13
|
summary: 'Check an integration package while authoring it',
|
|
14
14
|
description:
|
|
15
15
|
'The integration-authoring diagnostics group. Validate a manifest and all ' +
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
import {afterEach, beforeEach, describe, expect, it} from 'vitest';
|
|
4
|
+
import * as fs from 'node:fs';
|
|
5
|
+
import * as path from 'node:path';
|
|
6
|
+
import {runCli} from '../../../test-utils/run-cli.mjs';
|
|
7
|
+
import {validateIntegration} from '../../../api/integration/validate-integration.mjs';
|
|
8
|
+
|
|
9
|
+
const NO_MANIFEST = 'No astryx.integration.* found next to package.json.';
|
|
10
|
+
|
|
11
|
+
let tmpDir;
|
|
12
|
+
|
|
13
|
+
beforeEach(() => {
|
|
14
|
+
tmpDir = fs.mkdtempSync(path.join(process.cwd(), '.astryx-doctor-pkgjson-'));
|
|
15
|
+
fs.writeFileSync(path.join(tmpDir, 'package.json'), '{"name": "@acme/widgets",}\n');
|
|
16
|
+
fs.writeFileSync(
|
|
17
|
+
path.join(tmpDir, 'astryx.integration.mjs'),
|
|
18
|
+
"export default {\n templates: './templates',\n};\n",
|
|
19
|
+
);
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
afterEach(() => {
|
|
23
|
+
fs.rmSync(tmpDir, {recursive: true, force: true});
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
describe('doctor integration with a malformed package.json', () => {
|
|
27
|
+
it('keeps a null name for the no-manifest case only', async () => {
|
|
28
|
+
const result = await validateIntegration(undefined, {cwd: tmpDir});
|
|
29
|
+
|
|
30
|
+
expect(result.data.name).toBe('(local package)');
|
|
31
|
+
expect(result.data.issues.map(issue => issue.code)).toEqual([
|
|
32
|
+
'invalid_package_json',
|
|
33
|
+
]);
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
for (const leaf of ['validate', 'templates', 'components', 'docs']) {
|
|
37
|
+
it(`${leaf} prints the package.json error instead of "no manifest"`, async () => {
|
|
38
|
+
const text = await runCli(['doctor', 'integration', leaf], tmpDir);
|
|
39
|
+
const json = await runCli(
|
|
40
|
+
['doctor', 'integration', leaf, '--json'],
|
|
41
|
+
tmpDir,
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
expect(text.status).toBe(1);
|
|
45
|
+
expect(json.status).toBe(1);
|
|
46
|
+
expect(text.stdout).not.toContain(NO_MANIFEST);
|
|
47
|
+
expect(text.stdout).toContain('invalid_package_json');
|
|
48
|
+
expect(JSON.parse(json.stdout).data.issues).toContainEqual(
|
|
49
|
+
expect.objectContaining({code: 'invalid_package_json'}),
|
|
50
|
+
);
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
});
|