@astryxdesign/cli 0.6.3-canary.98a2e4e → 0.6.3-canary.9dbb6c1
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 +106 -73
- 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 +36 -2
- package/api/build/build.type.mjs +25 -4
- package/api/build/help/help.d.mts +8 -5
- package/api/build/help/help.mjs +56 -6
- package/api/component/component.doc.mjs +13 -3
- package/api/component/component.mjs +31 -2
- package/api/component/component.test.mjs +38 -0
- package/api/component/component.type.d.mts +22 -11
- package/api/component/component.type.mjs +32 -24
- package/api/component/detail/blocks/blocks.d.mts +2 -1
- package/api/component/detail/blocks/blocks.mjs +4 -3
- package/api/component/list/list.d.mts +0 -5
- package/api/component/list/list.mjs +37 -9
- package/api/discover/discover.doc.mjs +2 -1
- package/api/discover/discover.type.d.mts +4 -4
- package/api/discover/discover.type.mjs +10 -10
- package/api/docs/_adapter.d.mts +28 -30
- package/api/docs/_adapter.mjs +73 -135
- package/api/docs/compiled-topics.test.mjs +78 -0
- package/api/docs/detail/detail.d.mts +0 -15
- package/api/docs/detail/detail.mjs +14 -78
- package/api/docs/detail/section/section.mjs +22 -18
- package/api/docs/detail/section/section.test.mjs +4 -3
- package/api/docs/docs.doc.mjs +1 -0
- package/api/docs/docs.type.d.mts +4 -4
- package/api/docs/docs.type.mjs +10 -10
- package/api/docs/index/index.mjs +6 -5
- package/api/docs/list/list.mjs +3 -7
- package/api/doctor/doctor.d.mts +25 -3
- package/api/doctor/doctor.doc.mjs +1 -0
- package/api/doctor/doctor.mjs +186 -18
- package/api/doctor/doctor.test.mjs +326 -1
- package/api/gap-report/gap-report.doc.mjs +8 -4
- package/api/hook/_adapter.mjs +19 -5
- package/api/hook/hook.doc.mjs +1 -0
- package/api/hook/hook.type.d.mts +3 -3
- package/api/hook/hook.type.mjs +11 -11
- package/api/hook/list/list.d.mts +1 -1
- package/api/hook/list/list.mjs +69 -17
- package/api/init/init.doc.mjs +5 -0
- 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.mjs +23 -10
- package/api/integration/add-contribution.test.mjs +121 -7
- package/api/integration/add-theme.mjs +34 -64
- package/api/integration/add-theme.test.mjs +105 -21
- package/api/integration/authoring-checks.test.mjs +8 -4
- package/api/integration/integration-block-exports.test.mjs +10 -6
- package/api/integration/integrationAdd.doc.mjs +8 -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 +1 -0
- 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 +1 -0
- package/api/integration/integrationPackCheck.doc.mjs +1 -0
- package/api/integration/integrationTemplateConflicts.doc.mjs +1 -0
- package/api/integration/pack-check.mjs +49 -7
- package/api/integration/pack-check.test.mjs +266 -47
- 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 +176 -23
- package/api/integration/validate-unread-theme-folders.test.mjs +110 -0
- package/api/integration/validateIntegration.doc.mjs +2 -1
- package/api/json/assertResponse.doc.mjs +1 -0
- package/api/json/envelope-types.test.mjs +76 -0
- package/api/json/isError.doc.mjs +1 -0
- package/api/json/parseResponse.doc.mjs +3 -2
- 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 +2 -9
- package/api/search/search.doc.mjs +6 -1
- package/api/search/search.mjs +31 -14
- package/api/search/search.test.mjs +34 -0
- package/api/search/search.type.d.mts +1 -1
- package/api/search/search.type.mjs +1 -1
- package/api/swizzle/copy/copy.mjs +28 -11
- package/api/swizzle/swizzle.doc.mjs +2 -1
- package/api/swizzle/swizzle.type.d.mts +2 -2
- package/api/swizzle/swizzle.type.mjs +2 -2
- package/api/template/copy/copy.mjs +17 -23
- package/api/template/copy/copy.test.mjs +17 -0
- package/api/template/template-suffix.test.mjs +41 -21
- package/api/template/template.doc.mjs +3 -1
- package/api/template/template.type.d.mts +5 -5
- package/api/template/template.type.mjs +12 -12
- 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 +133 -42
- 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.test.mjs +127 -0
- package/api/theme/build/font-warning.mjs +3 -3
- package/api/theme/build/font-warning.test.mjs +5 -2
- package/api/theme/generateTonalPalette.doc.mjs +1 -0
- package/api/theme/integration-themes.test.mjs +39 -28
- package/api/theme/list/list.test.mjs +19 -20
- package/api/theme/listThemes.doc.mjs +6 -5
- package/api/theme/palette/generate/generate.mjs +8 -3
- package/api/theme/palette/generate/generate.test.mjs +96 -0
- package/api/theme/palette/generate/generator.d.mts +10 -13
- package/api/theme/palette/generate/generator.mjs +15 -4
- package/api/theme/palette/generate/generator.test.mjs +10 -0
- package/api/theme/template/template.mjs +11 -2
- package/api/theme/template/template.test.mjs +15 -0
- package/api/theme/theme.type.d.mts +170 -11
- package/api/theme/theme.type.mjs +94 -27
- package/api/theme/themeAdd.doc.mjs +4 -3
- package/api/theme/themeBuild.doc.mjs +8 -4
- package/api/theme/themeList.doc.mjs +6 -3
- package/api/theme/themeListAvailable.doc.mjs +5 -3
- package/api/theme/themePaletteGenerate.doc.mjs +1 -0
- package/api/theme/themeTargets.doc.mjs +1 -0
- package/api/theme/themeTemplate.doc.mjs +5 -1
- package/api/upgrade/_adapter.d.mts +12 -3
- package/api/upgrade/_adapter.mjs +108 -70
- 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 +1 -0
- package/api/upgrade/status/status.mjs +2 -2
- package/api/upgrade/upgrade.doc.mjs +3 -1
- package/api/upgrade/upgrade.type.d.mts +8 -4
- package/api/upgrade/upgrade.type.mjs +11 -10
- package/assets/codemods/integration-discovery.mjs +48 -4
- package/assets/codemods/integration-discovery.test.mjs +73 -0
- package/assets/codemods/runner.mjs +115 -5
- 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-theme-catalog-to-descriptors.test.mjs +216 -0
- package/assets/codemods/transforms/next/index.mjs +11 -1
- 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.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/docs/cli-integrations.doc.mjs +26 -30
- package/assets/docs/cli.doc.mjs +15 -0
- package/assets/docs/styling-libraries.doc.mjs +1 -1
- package/assets/docs/theme.doc.mjs +1 -1
- package/assets/docs/working-with-ai.doc.mjs +1 -1
- 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/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/config/config.doc.mjs +2 -2
- package/authoring/config/debug-composition.test.mjs +92 -0
- package/authoring/config/parse.d.mts +13 -13
- package/authoring/config/parse.mjs +8 -8
- package/authoring/config/type.ts +18 -6
- package/authoring/debug/debug.doc.d.mts +11 -0
- package/authoring/debug/debug.doc.mjs +182 -0
- package/authoring/debug/parse.d.mts +4 -4
- package/authoring/debug/parse.mjs +3 -3
- package/authoring/doctypes/_schema.d.mts +121 -11
- package/authoring/doctypes/_schema.mjs +144 -13
- package/authoring/doctypes/base/graph-fields.doc.mjs +11 -4
- package/authoring/doctypes/base/type.ts +8 -4
- 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 +3 -3
- package/authoring/doctypes/component/component.doc.mjs +5 -2
- package/authoring/doctypes/component/parse.d.mts +2 -2
- package/authoring/doctypes/component/parse.mjs +1 -1
- package/authoring/doctypes/component/type.ts +3 -3
- 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 +2 -2
- package/authoring/doctypes/function/function.doc.mjs +5 -1
- package/authoring/doctypes/function/parse.d.mts +2 -2
- package/authoring/doctypes/function/parse.mjs +1 -1
- package/authoring/doctypes/function/type.ts +2 -2
- 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 +3 -3
- package/authoring/doctypes/legacy.d.mts +6 -6
- package/authoring/doctypes/legacy.mjs +3 -3
- package/authoring/doctypes/load-contract.test.mjs +208 -0
- package/authoring/doctypes/namespace/namespace.doc.mjs +7 -3
- package/authoring/doctypes/namespace/parse.d.mts +2 -2
- package/authoring/doctypes/namespace/parse.mjs +1 -1
- package/authoring/doctypes/namespace/type.ts +2 -2
- package/authoring/doctypes/parse.d.mts +22 -20
- package/authoring/doctypes/parse.mjs +16 -12
- package/authoring/doctypes/reference/parse.d.mts +2 -2
- package/authoring/doctypes/reference/parse.mjs +1 -1
- package/authoring/doctypes/reference/reference.doc.mjs +7 -3
- package/authoring/doctypes/reference/type.ts +3 -3
- package/authoring/doctypes/schema/parse.d.mts +2 -2
- package/authoring/doctypes/schema/parse.mjs +1 -1
- package/authoring/doctypes/schema/schema.doc.mjs +1 -1
- package/authoring/doctypes/schema/type.ts +3 -4
- package/authoring/doctypes/template/parse.d.mts +92 -1
- package/authoring/doctypes/template/parse.mjs +33 -1
- package/authoring/doctypes/template/template.doc.mjs +7 -3
- package/authoring/doctypes/template/type.ts +4 -1
- 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 -11
- 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 +9 -9
- package/authoring/gap-report/parse.mjs +6 -6
- package/authoring/gap-report/type.ts +1 -1
- package/authoring/identity/identity.doc.mjs +3 -2
- package/authoring/identity/type.ts +10 -10
- package/authoring/index.d.mts +1 -0
- package/authoring/index.d.ts +21 -19
- package/authoring/index.mjs +2 -1
- package/authoring/integration/integration.doc.mjs +2 -2
- package/authoring/integration/parse.d.mts +2 -2
- package/authoring/integration/parse.mjs +1 -1
- package/authoring/integration/schema.d.mts +4 -4
- package/authoring/integration/schema.mjs +3 -3
- 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.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 +5 -5
- 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 +32 -47
- 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 +2 -7
- 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 +48 -0
- 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 +3 -3
- package/clients/cli/commands/discover.text-projection.test.mjs +103 -0
- package/clients/cli/commands/docs.doc.mjs +1 -1
- package/clients/cli/commands/doctor-integration-components.doc.mjs +1 -1
- package/clients/cli/commands/doctor-integration-docs.doc.mjs +1 -1
- package/clients/cli/commands/doctor-integration-templates.doc.mjs +1 -1
- 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 +15 -7
- package/clients/cli/commands/doctor.doc.mjs +1 -1
- package/clients/cli/commands/doctor.mjs +6 -16
- 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 +22 -6
- package/clients/cli/commands/integration-authoring.test.mjs +13 -9
- package/clients/cli/commands/integration-pack.doc.mjs +1 -1
- package/clients/cli/commands/integration-real-world.test.mjs +3 -9
- package/clients/cli/commands/integration.doc.mjs +1 -1
- package/clients/cli/commands/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 +17 -7
- package/clients/cli/commands/search.test.mjs +75 -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 +29 -7
- package/clients/cli/commands/template.flag-help.test.mjs +117 -0
- package/clients/cli/commands/template.path-help.test.mjs +40 -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.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 +18 -7
- 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/index.mjs +13 -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 +22 -0
- 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 +69 -3
- 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 +8 -0
- package/foundation/config/project.mjs +173 -30
- package/foundation/config/project.test.mjs +129 -16
- 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 +71 -12
- 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 +113 -0
- package/foundation/discovery/cli-self-docs.mjs +514 -0
- package/foundation/discovery/cli-self-docs.test.mjs +437 -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 +7 -2
- package/foundation/discovery/docs-discovery.mjs +24 -14
- package/foundation/discovery/docs-discovery.test.mjs +55 -16
- package/foundation/discovery/template-adapter.d.mts +21 -5
- 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 +319 -65
- package/foundation/discovery/template-adapter.test.mjs +15 -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 +218 -0
- package/foundation/doc-compiler/bundle.test.mjs +255 -0
- package/foundation/doc-compiler/compile.d.mts +362 -0
- package/foundation/doc-compiler/compile.mjs +511 -0
- package/foundation/doc-compiler/diagnostics.d.mts +126 -0
- package/foundation/doc-compiler/diagnostics.mjs +277 -0
- package/foundation/doc-compiler/doc-compiler.test.mjs +714 -0
- package/foundation/doc-compiler/doc-loads.test.mjs +1642 -0
- package/foundation/doc-compiler/import.d.mts +24 -0
- package/foundation/doc-compiler/import.mjs +59 -0
- package/foundation/doc-compiler/inputs.d.mts +102 -0
- package/foundation/doc-compiler/inputs.mjs +286 -0
- package/foundation/doc-compiler/inputs.test.mjs +299 -0
- package/foundation/doc-compiler/ir.d.mts +22 -0
- package/foundation/doc-compiler/ir.mjs +464 -0
- package/foundation/doc-compiler/lenses.d.mts +33 -0
- package/foundation/doc-compiler/lenses.mjs +127 -0
- package/foundation/doc-compiler/lower-doc.test.mjs +492 -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 +126 -0
- package/foundation/doc-compiler/read.mjs +320 -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/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/contribution-fixes.d.mts +145 -0
- package/foundation/integrations/contribution-fixes.mjs +1284 -0
- package/foundation/integrations/contribution-inventory.d.mts +1 -1
- package/foundation/integrations/contribution-inventory.mjs +17 -20
- package/foundation/integrations/contribution-inventory.test.mjs +67 -27
- 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 +104 -10
- package/foundation/response/base.d.ts +8 -4
- package/foundation/response/error-codes.doc.mjs +3 -4
- package/foundation/response/error-codes.mjs +2 -2
- package/foundation/response/error-codes.test.mjs +83 -0
- 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 +11 -11
- 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 +3 -2
- package/foundation/xle/expand.test.mjs +54 -0
- package/package.json +9 -11
- package/assets/templates/themes/manifest.json +0 -95
- package/clients/cli/lib/update-check.mjs +0 -83
- package/clients/cli/lib/update-check.test.mjs +0 -137
- package/clients/cli/update-hint-commands.test.mjs +0 -54
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
import {describe, it, expect} from 'vitest';
|
|
11
11
|
import {section} from './section.mjs';
|
|
12
12
|
import {AstryxError} from '../../../error.mjs';
|
|
13
|
-
import {loadDocsCatalog,
|
|
13
|
+
import {loadDocsCatalog, lowerTopic} from '../../_adapter.mjs';
|
|
14
14
|
|
|
15
15
|
const SLOW = 30_000;
|
|
16
16
|
|
|
@@ -42,7 +42,8 @@ describe('docs.detail.section leaf', () => {
|
|
|
42
42
|
}, SLOW);
|
|
43
43
|
|
|
44
44
|
it('reads a section by its stable key', async () => {
|
|
45
|
-
const
|
|
45
|
+
const catalog = await loadDocsCatalog();
|
|
46
|
+
const {doc} = await lowerTopic(catalog, catalog.resolve('theme'));
|
|
46
47
|
const target = doc.sections[doc.sections.length - 1];
|
|
47
48
|
const res = await section('theme', target.id);
|
|
48
49
|
expect(res.data.title).toBe(target.title);
|
|
@@ -63,7 +64,7 @@ describe('docs.detail.section leaf', () => {
|
|
|
63
64
|
const catalog = await loadDocsCatalog();
|
|
64
65
|
let checked = 0;
|
|
65
66
|
for (const entry of catalog.entries()) {
|
|
66
|
-
const doc = await
|
|
67
|
+
const {doc} = await lowerTopic(catalog, entry);
|
|
67
68
|
for (const own of doc.sections) {
|
|
68
69
|
if (!own.content.some(block => block.type === 'token-ref')) continue;
|
|
69
70
|
const res = await section(entry.name, own.id, lang ? {lang} : {});
|
package/api/docs/docs.doc.mjs
CHANGED
package/api/docs/docs.type.d.mts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// DO NOT EDIT — run `pnpm sync:api-types` to regenerate.
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
5
|
+
* astryx --json docs
|
|
6
6
|
*/
|
|
7
7
|
export type DocsListResponse = {
|
|
8
8
|
type: "docs.list";
|
|
@@ -23,14 +23,14 @@ export type DocsListEntry = {
|
|
|
23
23
|
replaces?: string | undefined;
|
|
24
24
|
};
|
|
25
25
|
/**
|
|
26
|
-
*
|
|
26
|
+
* astryx --json docs <topic> --index
|
|
27
27
|
*/
|
|
28
28
|
export type DocsIndexResponse = {
|
|
29
29
|
type: "docs.index";
|
|
30
30
|
data: DocsIndex;
|
|
31
31
|
};
|
|
32
32
|
/**
|
|
33
|
-
*
|
|
33
|
+
* astryx --json docs <topic>
|
|
34
34
|
*/
|
|
35
35
|
export type DocsDetailResponse = {
|
|
36
36
|
type: "docs.detail";
|
|
@@ -62,7 +62,7 @@ export type DocsIndexSection = {
|
|
|
62
62
|
summary: string;
|
|
63
63
|
};
|
|
64
64
|
/**
|
|
65
|
-
*
|
|
65
|
+
* astryx --json docs <topic> <section>
|
|
66
66
|
*/
|
|
67
67
|
export type DocsDetailSectionResponse = {
|
|
68
68
|
type: "docs.detail.section";
|
package/api/docs/docs.type.mjs
CHANGED
|
@@ -4,17 +4,17 @@
|
|
|
4
4
|
* @file Colocated types for the `docs` command — source of truth for the docs
|
|
5
5
|
* command JSON responses. `types/docs.d.ts` re-exports these.
|
|
6
6
|
*
|
|
7
|
-
* Invocation
|
|
7
|
+
* Invocation -> type discriminator
|
|
8
8
|
* ------------------------------------------------------------
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
* (unknown topic/section)
|
|
9
|
+
* astryx --json docs -> docs.list
|
|
10
|
+
* astryx --json docs <topic> -> docs.detail
|
|
11
|
+
* astryx --json docs <topic> --index -> docs.index
|
|
12
|
+
* astryx --json docs <topic> <section> -> docs.detail.section
|
|
13
|
+
* (unknown topic/section) -> CLIError
|
|
14
14
|
*/
|
|
15
15
|
|
|
16
16
|
/**
|
|
17
|
-
*
|
|
17
|
+
* astryx --json docs
|
|
18
18
|
* @typedef {object} DocsListResponse
|
|
19
19
|
* @property {'docs.list'} type
|
|
20
20
|
* @property {DocsListEntry[]} data
|
|
@@ -31,14 +31,14 @@
|
|
|
31
31
|
*/
|
|
32
32
|
|
|
33
33
|
/**
|
|
34
|
-
*
|
|
34
|
+
* astryx --json docs <topic> --index
|
|
35
35
|
* @typedef {object} DocsIndexResponse
|
|
36
36
|
* @property {'docs.index'} type
|
|
37
37
|
* @property {DocsIndex} data
|
|
38
38
|
*/
|
|
39
39
|
|
|
40
40
|
/**
|
|
41
|
-
*
|
|
41
|
+
* astryx --json docs <topic>
|
|
42
42
|
* @typedef {object} DocsDetailResponse
|
|
43
43
|
* @property {'docs.detail'} type
|
|
44
44
|
* @property {import('@astryxdesign/cli/authoring').ReferenceDoc} data
|
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
*/
|
|
64
64
|
|
|
65
65
|
/**
|
|
66
|
-
*
|
|
66
|
+
* astryx --json docs <topic> <section>
|
|
67
67
|
* @typedef {object} DocsDetailSectionResponse
|
|
68
68
|
* @property {'docs.detail.section'} type
|
|
69
69
|
* @property {import('@astryxdesign/cli/authoring').ReferenceSection} data
|
package/api/docs/index/index.mjs
CHANGED
|
@@ -3,8 +3,9 @@
|
|
|
3
3
|
/**
|
|
4
4
|
* @file docs.index leaf — the section index of one topic.
|
|
5
5
|
*
|
|
6
|
-
* @input A topic name plus optional {lang, zh, dense, cwd}. Resolves
|
|
7
|
-
*
|
|
6
|
+
* @input A topic name plus optional {lang, zh, dense, cwd}. Resolves the topic
|
|
7
|
+
* via the shared adapter and reads its lowered compiled node; nothing is
|
|
8
|
+
* linked, since the index never inlines a token reference.
|
|
8
9
|
* @output { type: 'docs.index', data: DocsIndex } — the topic's name, title and
|
|
9
10
|
* description and, for each section, the key it is read by, its title, and a
|
|
10
11
|
* one-line summary. Matches `astryx --json docs <topic> --index`.
|
|
@@ -13,7 +14,7 @@
|
|
|
13
14
|
* read, is the detail leaf.
|
|
14
15
|
*/
|
|
15
16
|
|
|
16
|
-
import {
|
|
17
|
+
import {indexView} from '../../../foundation/doc-compiler/lenses.mjs';
|
|
17
18
|
import {resolveTopicDocs} from '../_adapter.mjs';
|
|
18
19
|
|
|
19
20
|
/**
|
|
@@ -26,6 +27,6 @@ import {resolveTopicDocs} from '../_adapter.mjs';
|
|
|
26
27
|
* @returns {Promise<import('../docs.type.mjs').DocsIndexResponse>}
|
|
27
28
|
*/
|
|
28
29
|
export async function index(topic, options = {}) {
|
|
29
|
-
const {
|
|
30
|
-
return {type: 'docs.index', data:
|
|
30
|
+
const {node} = await resolveTopicDocs(topic, options);
|
|
31
|
+
return {type: 'docs.index', data: indexView(node)};
|
|
31
32
|
}
|
package/api/docs/list/list.mjs
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* @position Leaf under api/docs. Sibling of detail; both share _adapter.mjs.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
import {
|
|
17
|
+
import {loadTopicFile} from '../../../foundation/doc-compiler/read.mjs';
|
|
18
18
|
import {loadDocsCatalog} from '../_adapter.mjs';
|
|
19
19
|
|
|
20
20
|
/**
|
|
@@ -29,12 +29,8 @@ export async function list({cwd} = {}) {
|
|
|
29
29
|
for (const entry of catalog.entries()) {
|
|
30
30
|
let description = entry.description ?? '';
|
|
31
31
|
if (entry.description == null) {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
description = (mod.docs ?? mod.default)?.description ?? '';
|
|
35
|
-
} catch {
|
|
36
|
-
description = '';
|
|
37
|
-
}
|
|
32
|
+
const file = await loadTopicFile(entry.path, null);
|
|
33
|
+
description = file.doc?.description ?? '';
|
|
38
34
|
}
|
|
39
35
|
/** @type {import('../docs.type.mjs').DocsListEntry} */
|
|
40
36
|
const listed = {
|
package/api/doctor/doctor.d.mts
CHANGED
|
@@ -100,12 +100,34 @@ export function checkPackageManager(ctx: DoctorContext): DoctorCheck;
|
|
|
100
100
|
export function checkProviderIdentity(ctx: DoctorContext): DoctorCheck;
|
|
101
101
|
/**
|
|
102
102
|
* Every authoring self-doc is reachable from `astryx docs authoring`, loads,
|
|
103
|
-
* and fits in one read
|
|
104
|
-
*
|
|
103
|
+
* and fits in one read, and every type `@astryxdesign/cli/authoring` exports
|
|
104
|
+
* has its doc there: the self-doc beside the module that declares it. The
|
|
105
|
+
* audits are imported here, inside the try, so a malformed self-doc is
|
|
106
|
+
* reported rather than taking Doctor down.
|
|
105
107
|
* @param {DoctorContext} [_ctx]
|
|
108
|
+
* @param {{root?: string, sources?: string[], topicKeys?: Set<string> | null}} [options]
|
|
109
|
+
* Another authoring tree, list, or topic index to audit (for tests).
|
|
106
110
|
* @returns {Promise<DoctorCheck>}
|
|
107
111
|
*/
|
|
108
|
-
export function checkAuthoringDocs(_ctx?: DoctorContext
|
|
112
|
+
export function checkAuthoringDocs(_ctx?: DoctorContext, options?: {
|
|
113
|
+
root?: string;
|
|
114
|
+
sources?: string[];
|
|
115
|
+
topicKeys?: Set<string> | null;
|
|
116
|
+
}): Promise<DoctorCheck>;
|
|
117
|
+
/**
|
|
118
|
+
* Every command, API function, schema, and enum doc the CLI ships declares a
|
|
119
|
+
* namespace, and the topic that namespace names reads it: `astryx docs cli`
|
|
120
|
+
* for `cli/commands` and `cli/api`, `astryx docs authoring` for `authoring`.
|
|
121
|
+
* @param {DoctorContext | Partial<DoctorContext>} _ctx
|
|
122
|
+
* @param {{root?: string, sources?: string[], authoringSources?: string[]}} [options]
|
|
123
|
+
* test seams: the CLI root, the docs to audit, and the authoring topic's list
|
|
124
|
+
* @returns {Promise<DoctorCheck>}
|
|
125
|
+
*/
|
|
126
|
+
export function checkCliDocs(_ctx: DoctorContext | Partial<DoctorContext>, options?: {
|
|
127
|
+
root?: string;
|
|
128
|
+
sources?: string[];
|
|
129
|
+
authoringSources?: string[];
|
|
130
|
+
}): Promise<DoctorCheck>;
|
|
109
131
|
/**
|
|
110
132
|
* Every topic reads progressively, in every language it ships: it loads, its
|
|
111
133
|
* section index and each of its sections fit in one read, and no contributed
|
package/api/doctor/doctor.mjs
CHANGED
|
@@ -34,8 +34,8 @@ import {
|
|
|
34
34
|
docsIndexBytes,
|
|
35
35
|
oversizedDocSections,
|
|
36
36
|
} from '../../foundation/discovery/docs-output-budget.mjs';
|
|
37
|
-
import {
|
|
38
|
-
import {
|
|
37
|
+
import {compileTopic, lowerTopic, overlayLanguages} from '../docs/_adapter.mjs';
|
|
38
|
+
import {detailView, indexView} from '../../foundation/doc-compiler/lenses.mjs';
|
|
39
39
|
import {semverCompare, isValidSemver, satisfiesRange} from '../../foundation/env/semver.mjs';
|
|
40
40
|
|
|
41
41
|
/**
|
|
@@ -721,38 +721,144 @@ function joinProblems(problems) {
|
|
|
721
721
|
: `${problems.length} problems: ${problems.join('; ')}`;
|
|
722
722
|
}
|
|
723
723
|
|
|
724
|
+
/** How the self-doc audit's problems are fixed. */
|
|
725
|
+
const AUTHORING_DOCS_FIX =
|
|
726
|
+
'List every authoring self-doc in AUTHORING_SELF_DOCS, fix the one that fails to load, and split a section that is too large.';
|
|
727
|
+
|
|
728
|
+
/** How the public-surface audit's problems are fixed. */
|
|
729
|
+
const AUTHORING_SURFACE_FIX =
|
|
730
|
+
'Put a self-doc beside each module whose types @astryxdesign/cli/authoring exports and list it in AUTHORING_SELF_DOCS; export what each listed self-doc documents, or remove that self-doc.';
|
|
731
|
+
|
|
732
|
+
/** Types one problem names before it counts the rest. */
|
|
733
|
+
const NAMED_TYPES = 40;
|
|
734
|
+
|
|
735
|
+
/**
|
|
736
|
+
* @param {string[]} names
|
|
737
|
+
* @returns {string}
|
|
738
|
+
*/
|
|
739
|
+
function nameTypes(names) {
|
|
740
|
+
return names.length <= NAMED_TYPES
|
|
741
|
+
? names.join(', ')
|
|
742
|
+
: `${names.slice(0, NAMED_TYPES).join(', ')} and ${names.length - NAMED_TYPES} more`;
|
|
743
|
+
}
|
|
744
|
+
|
|
745
|
+
/**
|
|
746
|
+
* The section keys `astryx docs authoring --index` lists, read the way that
|
|
747
|
+
* command reads them.
|
|
748
|
+
* @returns {Promise<{keys: Set<string>} | {keys: null, error: string}>}
|
|
749
|
+
*/
|
|
750
|
+
async function authoringTopicKeys() {
|
|
751
|
+
try {
|
|
752
|
+
const catalog = DocsCatalog.fromBuiltins();
|
|
753
|
+
const entry = catalog.resolve('authoring');
|
|
754
|
+
if (!entry) return {keys: null, error: 'it is not a built-in topic'};
|
|
755
|
+
const index = indexView(await lowerTopic(catalog, entry));
|
|
756
|
+
return {keys: new Set(index.sections.map(section => section.id))};
|
|
757
|
+
} catch (err) {
|
|
758
|
+
return {
|
|
759
|
+
keys: null,
|
|
760
|
+
error: err instanceof Error ? err.message : String(err),
|
|
761
|
+
};
|
|
762
|
+
}
|
|
763
|
+
}
|
|
764
|
+
|
|
765
|
+
/**
|
|
766
|
+
* @param {Awaited<ReturnType<typeof import('../../foundation/discovery/authoring-surface.mjs').auditAuthoringSurface>>} surface
|
|
767
|
+
* @returns {string[]}
|
|
768
|
+
*/
|
|
769
|
+
function surfaceProblems(surface) {
|
|
770
|
+
/** @type {string[]} */
|
|
771
|
+
const problems = [];
|
|
772
|
+
if (surface.types === 0 && surface.untraced.length === 0) {
|
|
773
|
+
problems.push(
|
|
774
|
+
'@astryxdesign/cli/authoring exports no types, so nothing was compared with `astryx docs authoring`',
|
|
775
|
+
);
|
|
776
|
+
}
|
|
777
|
+
for (const {module, names, reason, source, key} of surface.unreadable) {
|
|
778
|
+
const why =
|
|
779
|
+
reason === 'no-self-doc'
|
|
780
|
+
? `no self-doc sits beside ${module}`
|
|
781
|
+
: reason === 'unregistered'
|
|
782
|
+
? `${source} is not listed in AUTHORING_SELF_DOCS`
|
|
783
|
+
: reason === 'failed'
|
|
784
|
+
? `${source} does not load`
|
|
785
|
+
: `${source} renders section "${key}", which the topic's index does not list`;
|
|
786
|
+
problems.push(
|
|
787
|
+
`${nameTypes(names)} from ${module} ${names.length === 1 ? 'has' : 'have'} no doc in \`astryx docs authoring\`: ${why}`,
|
|
788
|
+
);
|
|
789
|
+
}
|
|
790
|
+
for (const {name, reason} of surface.untraced) {
|
|
791
|
+
problems.push(
|
|
792
|
+
`${name} cannot be traced to the module that declares it: ${reason}`,
|
|
793
|
+
);
|
|
794
|
+
}
|
|
795
|
+
for (const {source, subject} of surface.unmatched) {
|
|
796
|
+
problems.push(
|
|
797
|
+
subject
|
|
798
|
+
? `${source} documents ${subject}, which @astryxdesign/cli/authoring does not export`
|
|
799
|
+
: `${source} documents no type @astryxdesign/cli/authoring exports`,
|
|
800
|
+
);
|
|
801
|
+
}
|
|
802
|
+
return problems;
|
|
803
|
+
}
|
|
804
|
+
|
|
724
805
|
/**
|
|
725
806
|
* Every authoring self-doc is reachable from `astryx docs authoring`, loads,
|
|
726
|
-
* and fits in one read
|
|
727
|
-
*
|
|
807
|
+
* and fits in one read, and every type `@astryxdesign/cli/authoring` exports
|
|
808
|
+
* has its doc there: the self-doc beside the module that declares it. The
|
|
809
|
+
* audits are imported here, inside the try, so a malformed self-doc is
|
|
810
|
+
* reported rather than taking Doctor down.
|
|
728
811
|
* @param {DoctorContext} [_ctx]
|
|
812
|
+
* @param {{root?: string, sources?: string[], topicKeys?: Set<string> | null}} [options]
|
|
813
|
+
* Another authoring tree, list, or topic index to audit (for tests).
|
|
729
814
|
* @returns {Promise<DoctorCheck>}
|
|
730
815
|
*/
|
|
731
|
-
export async function checkAuthoringDocs(_ctx) {
|
|
816
|
+
export async function checkAuthoringDocs(_ctx, options = {}) {
|
|
732
817
|
const id = 'authoring-docs';
|
|
733
818
|
const label = 'Authoring docs';
|
|
734
819
|
try {
|
|
735
|
-
const {auditAuthoringSelfDocs} =
|
|
736
|
-
'../../foundation/discovery/authoring-self-docs.mjs'
|
|
737
|
-
|
|
738
|
-
|
|
820
|
+
const {auditAuthoringSelfDocs} =
|
|
821
|
+
await import('../../foundation/discovery/authoring-self-docs.mjs');
|
|
822
|
+
const {auditAuthoringSurface} =
|
|
823
|
+
await import('../../foundation/discovery/authoring-surface.mjs');
|
|
824
|
+
const {root, sources} = options;
|
|
825
|
+
const audit = await auditAuthoringSelfDocs({root, sources});
|
|
739
826
|
const problems = [
|
|
740
827
|
...audit.unreachable.map(
|
|
741
828
|
source => `${source} is not in \`astryx docs authoring\``,
|
|
742
829
|
),
|
|
743
|
-
...audit.failed.map(
|
|
830
|
+
...audit.failed.map(
|
|
831
|
+
({source, error}) => `${source} failed to load: ${error}`,
|
|
832
|
+
),
|
|
744
833
|
...audit.oversized.map(
|
|
745
834
|
({key, bytes}) =>
|
|
746
835
|
`authoring section "${key}" is ${kilobytes(bytes)}, over the ${kilobytes(DOC_OUTPUT_BUDGET_BYTES)} one read may return`,
|
|
747
836
|
),
|
|
748
837
|
];
|
|
749
|
-
|
|
838
|
+
const topic =
|
|
839
|
+
options.topicKeys === undefined
|
|
840
|
+
? await authoringTopicKeys()
|
|
841
|
+
: {keys: options.topicKeys};
|
|
842
|
+
const surface = [
|
|
843
|
+
...('error' in topic
|
|
844
|
+
? [`\`astryx docs authoring\` could not be read: ${topic.error}`]
|
|
845
|
+
: []),
|
|
846
|
+
...surfaceProblems(
|
|
847
|
+
await auditAuthoringSurface({root, sources, topicKeys: topic.keys}),
|
|
848
|
+
),
|
|
849
|
+
];
|
|
850
|
+
if (problems.length + surface.length > 0) {
|
|
750
851
|
return {
|
|
751
852
|
id,
|
|
752
853
|
label,
|
|
753
854
|
status: 'fail',
|
|
754
|
-
message: joinProblems(problems),
|
|
755
|
-
fix:
|
|
855
|
+
message: joinProblems([...problems, ...surface]),
|
|
856
|
+
fix: [
|
|
857
|
+
problems.length > 0 ? AUTHORING_DOCS_FIX : null,
|
|
858
|
+
surface.length > 0 ? AUTHORING_SURFACE_FIX : null,
|
|
859
|
+
]
|
|
860
|
+
.filter(Boolean)
|
|
861
|
+
.join(' '),
|
|
756
862
|
};
|
|
757
863
|
}
|
|
758
864
|
return {
|
|
@@ -772,6 +878,71 @@ export async function checkAuthoringDocs(_ctx) {
|
|
|
772
878
|
}
|
|
773
879
|
}
|
|
774
880
|
|
|
881
|
+
/** How the CLI-docs audit's problems are fixed. */
|
|
882
|
+
const CLI_DOCS_FIX =
|
|
883
|
+
"Set `namespace` on each CLI doc to the one that reads it: cli/commands for a command, cli/api for an API function or the output schema, error codes, and response types, and authoring for a file an author writes (and list it in AUTHORING_SELF_DOCS).";
|
|
884
|
+
|
|
885
|
+
/**
|
|
886
|
+
* Every command, API function, schema, and enum doc the CLI ships declares a
|
|
887
|
+
* namespace, and the topic that namespace names reads it: `astryx docs cli`
|
|
888
|
+
* for `cli/commands` and `cli/api`, `astryx docs authoring` for `authoring`.
|
|
889
|
+
* @param {DoctorContext | Partial<DoctorContext>} _ctx
|
|
890
|
+
* @param {{root?: string, sources?: string[], authoringSources?: string[]}} [options]
|
|
891
|
+
* test seams: the CLI root, the docs to audit, and the authoring topic's list
|
|
892
|
+
* @returns {Promise<DoctorCheck>}
|
|
893
|
+
*/
|
|
894
|
+
export async function checkCliDocs(_ctx, options = {}) {
|
|
895
|
+
const id = 'cli-docs';
|
|
896
|
+
const label = 'CLI docs';
|
|
897
|
+
try {
|
|
898
|
+
const {auditCliSelfDocs} =
|
|
899
|
+
await import('../../foundation/discovery/cli-self-docs.mjs');
|
|
900
|
+
const audit = await auditCliSelfDocs(options);
|
|
901
|
+
const problems = [
|
|
902
|
+
...audit.missing.map(
|
|
903
|
+
source =>
|
|
904
|
+
`${source} has no namespace, so no \`astryx docs\` topic reads it`,
|
|
905
|
+
),
|
|
906
|
+
...audit.unknown.map(
|
|
907
|
+
({source, namespace}) =>
|
|
908
|
+
`${source} has namespace "${namespace}", which no \`astryx docs\` topic reads`,
|
|
909
|
+
),
|
|
910
|
+
...audit.misfiled.map(({message}) => message),
|
|
911
|
+
...audit.failed.map(
|
|
912
|
+
({source, error}) => `${source} failed to load: ${error}`,
|
|
913
|
+
),
|
|
914
|
+
...audit.keyProblems.map(problem => `\`astryx docs cli\`: ${problem}`),
|
|
915
|
+
...audit.oversized.map(
|
|
916
|
+
({key, bytes}) =>
|
|
917
|
+
`cli section "${key}" is ${kilobytes(bytes)}, over the ${kilobytes(DOC_OUTPUT_BUDGET_BYTES)} one read may return`,
|
|
918
|
+
),
|
|
919
|
+
];
|
|
920
|
+
if (problems.length > 0) {
|
|
921
|
+
return {
|
|
922
|
+
id,
|
|
923
|
+
label,
|
|
924
|
+
status: 'fail',
|
|
925
|
+
message: joinProblems(problems),
|
|
926
|
+
fix: CLI_DOCS_FIX,
|
|
927
|
+
};
|
|
928
|
+
}
|
|
929
|
+
return {
|
|
930
|
+
id,
|
|
931
|
+
label,
|
|
932
|
+
status: 'pass',
|
|
933
|
+
message: `All ${audit.docs} CLI docs are readable: ${audit.sections} in \`astryx docs cli\` and ${audit.authoring} in \`astryx docs authoring\`.`,
|
|
934
|
+
};
|
|
935
|
+
} catch (err) {
|
|
936
|
+
return {
|
|
937
|
+
id,
|
|
938
|
+
label,
|
|
939
|
+
status: 'fail',
|
|
940
|
+
message: `The CLI docs could not be audited: ${err instanceof Error ? err.message : String(err)}`,
|
|
941
|
+
fix: 'Reinstall @astryxdesign/cli.',
|
|
942
|
+
};
|
|
943
|
+
}
|
|
944
|
+
}
|
|
945
|
+
|
|
775
946
|
/**
|
|
776
947
|
* Every topic reads progressively, in every language it ships: it loads, its
|
|
777
948
|
* section index and each of its sections fit in one read, and no contributed
|
|
@@ -798,11 +969,7 @@ export async function checkDocsProgressiveDisclosure(ctx) {
|
|
|
798
969
|
for (const lang of [null, ...overlayLanguages(entry)]) {
|
|
799
970
|
const where = lang ? `${entry.name} [${lang}]` : entry.name;
|
|
800
971
|
try {
|
|
801
|
-
const doc = await
|
|
802
|
-
await loadTopicDoc(entry, {lang}),
|
|
803
|
-
catalog,
|
|
804
|
-
{lang},
|
|
805
|
-
);
|
|
972
|
+
const doc = detailView(await compileTopic(catalog, entry, lang));
|
|
806
973
|
if (lang == null) topics += 1;
|
|
807
974
|
const indexBytes = docsIndexBytes(buildDocsIndexData(doc));
|
|
808
975
|
if (indexBytes > DOC_OUTPUT_BUDGET_BYTES) {
|
|
@@ -933,6 +1100,7 @@ export async function runChecks(options = {}) {
|
|
|
933
1100
|
}
|
|
934
1101
|
}
|
|
935
1102
|
checks.push(await checkAuthoringDocs(ctx));
|
|
1103
|
+
checks.push(await checkCliDocs(ctx));
|
|
936
1104
|
checks.push(await checkDocsProgressiveDisclosure(ctx));
|
|
937
1105
|
|
|
938
1106
|
const summary = {pass: 0, warn: 0, fail: 0, info: 0};
|