@astryxdesign/cli 0.6.3-canary.98a2e4e → 0.6.3-canary.9c4d44d
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 +117 -79
- package/api/blog/blog.doc.mjs +1 -0
- package/api/build/_adapter.d.mts +50 -0
- package/api/build/_adapter.mjs +60 -0
- package/api/build/build.doc.mjs +16 -9
- package/api/build/build.test.mjs +197 -8
- package/api/build/build.type.d.mts +91 -2
- package/api/build/build.type.mjs +52 -8
- package/api/build/help/help.d.mts +12 -5
- package/api/build/help/help.mjs +69 -6
- package/api/build/kit/kit.d.mts +4 -1
- package/api/build/kit/kit.mjs +165 -49
- package/api/build/kit/rank.d.mts +44 -0
- package/api/build/kit/rank.mjs +432 -0
- package/api/build/kit/rank.test.mjs +196 -0
- package/api/component/_adapter.d.mts +6 -12
- package/api/component/_adapter.mjs +20 -10
- package/api/component/component.doc.mjs +13 -3
- package/api/component/component.mjs +91 -14
- package/api/component/component.test.mjs +38 -0
- package/api/component/component.type.d.mts +22 -11
- package/api/component/component.type.mjs +32 -24
- package/api/component/detail/blocks/blocks.d.mts +2 -1
- package/api/component/detail/blocks/blocks.mjs +4 -3
- package/api/component/list/list.d.mts +0 -5
- package/api/component/list/list.mjs +40 -11
- package/api/discover/_adapter.d.mts +114 -6
- package/api/discover/_adapter.mjs +372 -17
- package/api/discover/_adapter.test.mjs +215 -0
- package/api/discover/_catalog-view.d.mts +115 -0
- package/api/discover/_catalog-view.mjs +203 -0
- package/api/discover/_catalog-view.test.mjs +128 -0
- package/api/discover/detail/detail.d.mts +18 -6
- package/api/discover/detail/detail.mjs +67 -13
- package/api/discover/detail/detail.test.mjs +85 -0
- package/api/discover/detail/item/item.d.mts +26 -0
- package/api/discover/detail/item/item.mjs +78 -0
- package/api/discover/detail/item/item.test.mjs +73 -0
- package/api/discover/discover.d.mts +3 -9
- package/api/discover/discover.doc.mjs +62 -18
- package/api/discover/discover.mjs +220 -36
- package/api/discover/discover.test.mjs +11 -2
- package/api/discover/discover.type.d.mts +150 -11
- package/api/discover/discover.type.mjs +107 -17
- package/api/discover/list/list.d.mts +20 -6
- package/api/discover/list/list.mjs +45 -12
- package/api/discover/list/list.test.mjs +46 -0
- package/api/discover/search/search.d.mts +18 -16
- package/api/discover/search/search.mjs +102 -56
- package/api/discover/search/search.test.mjs +144 -10
- package/api/docs/_adapter.d.mts +268 -47
- package/api/docs/_adapter.mjs +970 -149
- package/api/docs/compiled-topics.test.mjs +78 -0
- package/api/docs/detail/detail.d.mts +0 -15
- package/api/docs/detail/detail.mjs +22 -78
- package/api/docs/detail/section/section.mjs +39 -24
- package/api/docs/detail/section/section.test.mjs +19 -9
- package/api/docs/docs.d.mts +5 -3
- package/api/docs/docs.doc.mjs +39 -17
- package/api/docs/docs.mjs +44 -8
- package/api/docs/docs.test.mjs +158 -4
- package/api/docs/docs.type.d.mts +185 -6
- package/api/docs/docs.type.mjs +127 -13
- package/api/docs/index/index.mjs +15 -6
- package/api/docs/index/index.test.mjs +1 -1
- package/api/docs/integration-tree.test.mjs +555 -0
- package/api/docs/integrationDocs.test.mjs +14 -14
- package/api/docs/list/list.mjs +28 -12
- package/api/docs/node/node.d.mts +43 -0
- package/api/docs/node/node.mjs +192 -0
- package/api/docs/reference-blocks.test.mjs +406 -0
- package/api/doctor/doctor.d.mts +54 -4
- package/api/doctor/doctor.doc.mjs +1 -0
- package/api/doctor/doctor.mjs +332 -21
- package/api/doctor/doctor.test.mjs +420 -7
- package/api/gap-report/gap-report.doc.mjs +8 -4
- package/api/hook/_adapter.mjs +19 -5
- package/api/hook/hook.doc.mjs +1 -0
- package/api/hook/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/index.d.mts +1 -1
- package/api/index.mjs +1 -0
- package/api/init/init.doc.mjs +6 -1
- package/api/init/init.test.mjs +41 -1
- package/api/init/remove/remove.mjs +1 -1
- package/api/init/run/run.mjs +20 -10
- package/api/integration/add-contribution.component-names.test.mjs +120 -0
- package/api/integration/add-contribution.d.mts +2 -1
- package/api/integration/add-contribution.mjs +130 -15
- package/api/integration/add-contribution.test.mjs +258 -7
- package/api/integration/add-helpers.d.mts +5 -2
- package/api/integration/add-helpers.mjs +36 -9
- package/api/integration/add-theme.mjs +34 -64
- package/api/integration/add-theme.test.mjs +105 -21
- package/api/integration/authoring-checks.mjs +138 -28
- package/api/integration/authoring-checks.test.mjs +179 -7
- package/api/integration/authoring-checks.type.mjs +6 -1
- package/api/integration/integration-authoring.type.d.mts +2 -0
- package/api/integration/integration-authoring.type.mjs +2 -0
- package/api/integration/integration-block-exports.test.mjs +10 -6
- package/api/integration/integrationAdd.doc.mjs +14 -4
- package/api/integration/integrationAddAgentDoc.doc.mjs +1 -0
- package/api/integration/integrationAddCodemod.doc.mjs +1 -0
- package/api/integration/integrationAddComponent.doc.mjs +2 -1
- package/api/integration/integrationAddDoc.doc.mjs +8 -1
- package/api/integration/integrationAddTemplate.doc.mjs +1 -0
- package/api/integration/integrationAddTheme.doc.mjs +6 -5
- package/api/integration/integrationComponentConflicts.doc.mjs +1 -0
- package/api/integration/integrationDocConflicts.doc.mjs +2 -1
- package/api/integration/integrationPackCheck.doc.mjs +2 -1
- package/api/integration/integrationTemplateConflicts.doc.d.mts +3 -0
- package/api/integration/integrationTemplateConflicts.doc.mjs +4 -0
- package/api/integration/pack-check.mjs +83 -7
- package/api/integration/pack-check.test.mjs +387 -47
- package/api/integration/pack-check.type.d.mts +26 -2
- package/api/integration/pack-check.type.mjs +14 -1
- package/api/integration/summarizeIssues.doc.mjs +1 -0
- package/api/integration/template-conflict-compatibility.test.mjs +73 -0
- package/api/integration/validate-integration-fixes.test.mjs +1389 -0
- package/api/integration/validate-integration.mjs +52 -102
- package/api/integration/validate-integration.test.mjs +179 -26
- package/api/integration/validate-unread-theme-folders.test.mjs +110 -0
- package/api/integration/validateIntegration.doc.mjs +3 -2
- package/api/json/assertResponse.doc.mjs +1 -0
- package/api/json/envelope-types.test.mjs +76 -0
- package/api/json/index.ts +2 -0
- package/api/json/isError.doc.mjs +1 -0
- package/api/json/parseResponse.doc.mjs +3 -2
- package/api/layout/_adapter.mjs +20 -5
- package/api/layout/expand/expand.mjs +7 -5
- package/api/layout/expand/expand.path-safety.test.mjs +53 -0
- package/api/layout/grammar/grammar.mjs +2 -1
- package/api/layout/layoutCheck.doc.mjs +1 -0
- package/api/layout/layoutExpand.doc.mjs +2 -1
- package/api/layout/layoutGrammar.doc.mjs +1 -0
- package/api/search/search-return-type.test.mjs +54 -0
- package/api/search/search.d.mts +61 -10
- package/api/search/search.doc.mjs +8 -2
- package/api/search/search.mjs +471 -83
- package/api/search/search.test.mjs +124 -1
- package/api/search/search.type.d.mts +14 -2
- package/api/search/search.type.mjs +5 -2
- package/api/swizzle/copy/copy.mjs +28 -11
- package/api/swizzle/swizzle.doc.mjs +2 -1
- package/api/swizzle/swizzle.type.d.mts +2 -2
- package/api/swizzle/swizzle.type.mjs +2 -2
- package/api/template/copy/copy.mjs +17 -23
- package/api/template/copy/copy.test.mjs +17 -0
- package/api/template/list/list.mjs +1 -0
- package/api/template/table-floating-bulk-actions.test.mjs +66 -0
- package/api/template/template-integration.test.mjs +1072 -3
- package/api/template/template-suffix.test.mjs +41 -21
- package/api/template/template.doc.mjs +30 -8
- package/api/template/template.mjs +45 -8
- package/api/template/template.type.d.mts +11 -13
- package/api/template/template.type.mjs +15 -14
- package/api/theme/_adapter.d.mts +2 -3
- package/api/theme/_adapter.mjs +4 -5
- package/api/theme/add/add.binary.test.mjs +84 -0
- package/api/theme/add/add.mjs +31 -22
- package/api/theme/add/add.rollback.test.mjs +158 -0
- package/api/theme/add/add.staging.test.mjs +83 -0
- package/api/theme/add/add.test.mjs +14 -1
- package/api/theme/build/build.family.test.mjs +7 -12
- package/api/theme/build/build.mjs +140 -59
- package/api/theme/build/build.public-component-vars.test.mjs +1 -1
- package/api/theme/build/build.receipt-doc.test.mjs +111 -0
- package/api/theme/build/build.rollback.test.mjs +148 -0
- package/api/theme/build/build.test.mjs +127 -0
- package/api/theme/build/font-warning.mjs +3 -3
- package/api/theme/build/font-warning.test.mjs +5 -2
- package/api/theme/generateTonalPalette.doc.mjs +1 -0
- package/api/theme/integration-themes.test.mjs +39 -28
- package/api/theme/list/list.test.mjs +19 -20
- package/api/theme/listThemes.doc.mjs +6 -5
- package/api/theme/palette/generate/generate.mjs +8 -3
- package/api/theme/palette/generate/generate.test.mjs +96 -0
- package/api/theme/palette/generate/generator.d.mts +10 -13
- package/api/theme/palette/generate/generator.mjs +15 -4
- package/api/theme/palette/generate/generator.test.mjs +10 -0
- package/api/theme/template/template.mjs +11 -2
- package/api/theme/template/template.test.mjs +20 -0
- package/api/theme/theme.type.d.mts +170 -11
- package/api/theme/theme.type.mjs +94 -27
- package/api/theme/themeAdd.doc.mjs +4 -3
- package/api/theme/themeBuild.doc.mjs +8 -4
- package/api/theme/themeList.doc.mjs +6 -3
- package/api/theme/themeListAvailable.doc.mjs +5 -3
- package/api/theme/themePaletteGenerate.doc.mjs +1 -0
- package/api/theme/themeTargets.doc.mjs +1 -0
- package/api/theme/themeTemplate.doc.mjs +6 -2
- package/api/upgrade/_adapter.d.mts +32 -5
- package/api/upgrade/_adapter.mjs +124 -73
- package/api/upgrade/list/list.mjs +2 -1
- package/api/upgrade/list/list.test.mjs +73 -0
- package/api/upgrade/provider-agreement.test.mjs +152 -0
- package/api/upgrade/run/run.mjs +356 -59
- package/api/upgrade/status/status.mjs +2 -2
- package/api/upgrade/upgrade.doc.mjs +8 -2
- package/api/upgrade/upgrade.type.d.mts +42 -4
- package/api/upgrade/upgrade.type.mjs +26 -10
- package/assets/codemods/__tests__/runner.test.mjs +330 -8
- package/assets/codemods/integration-discovery.mjs +48 -4
- package/assets/codemods/integration-discovery.test.mjs +73 -0
- package/assets/codemods/integration-runner.mjs +56 -4
- package/assets/codemods/integration-runner.protection.test.mjs +153 -0
- package/assets/codemods/run-codemod.mjs +177 -34
- package/assets/codemods/runner.mjs +350 -102
- package/assets/codemods/term-log.mjs +32 -8
- package/assets/codemods/term-log.test.mjs +19 -1
- package/assets/codemods/transform-prop.mjs +109 -0
- package/assets/codemods/transform-prop.test.mjs +95 -0
- package/assets/codemods/transforms/next/__tests__/migrate-native-picker-to-presentation.test.mjs +63 -0
- package/assets/codemods/transforms/next/__tests__/migrate-theme-catalog-to-descriptors.test.mjs +220 -0
- package/assets/codemods/transforms/next/index.mjs +19 -1
- package/assets/codemods/transforms/next/migrate-native-picker-to-presentation.mjs +148 -0
- package/assets/codemods/transforms/next/migrate-theme-catalog-to-descriptors.mjs +141 -0
- package/assets/codemods/transforms/v0.0.14/__tests__/rename-status-variants.test.mjs +86 -165
- package/assets/codemods/transforms/v0.0.14/rename-status-variants.mjs +72 -210
- package/assets/codemods/transforms/v0.1.8/__tests__/rename-avatar-size-scale.test.mjs +83 -115
- package/assets/codemods/transforms/v0.1.8/rename-avatar-size-scale.mjs +57 -186
- package/assets/codemods/transforms/v0.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/getting-started.doc.mjs +2 -2
- package/assets/docs/internationalization.doc.mjs +7 -5
- package/assets/docs/layout.doc.dense.mjs +2 -2
- package/assets/docs/layout.doc.mjs +1 -1
- package/assets/docs/principles.doc.mjs +6 -6
- package/assets/docs/styling-libraries.doc.mjs +4 -4
- package/assets/docs/styling.doc.mjs +4 -4
- package/assets/docs/theme.doc.mjs +5 -5
- package/assets/docs/tokens.doc.mjs +1 -1
- package/assets/docs/tree/api.doc.mjs +30 -0
- package/assets/docs/tree/cli.doc.mjs +23 -0
- package/assets/docs/tree/commands.doc.mjs +25 -0
- package/assets/docs/{cli-integrations.doc.mjs → tree/integrations.doc.mjs} +95 -39
- package/assets/docs/tree/integrations.test.mjs +62 -0
- package/assets/docs/tree/writing-docs.doc.mjs +286 -0
- package/assets/docs/working-with-ai.doc.mjs +4 -4
- package/assets/templates/blocks/components/CheckboxList/CheckboxListSelectAllPattern.doc.mjs +1 -1
- package/assets/templates/blocks/components/CheckboxList/CheckboxListSelectAllPattern.tsx +1 -3
- package/assets/templates/blocks/components/DateInput/DateInputDateRange.tsx +1 -1
- package/assets/templates/blocks/components/InternationalizationProvider/InternationalizationProvider01ShippedLocale.tsx +1 -1
- package/assets/templates/blocks/components/Item/ItemDocumentTabs.doc.mjs +14 -0
- package/assets/templates/blocks/components/Item/ItemDocumentTabs.tsx +100 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaInlineRail.doc.mjs +14 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaInlineRail.tsx +61 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaOverscrollChaining.doc.mjs +14 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaOverscrollChaining.tsx +126 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaShowcase.doc.mjs +15 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaShowcase.tsx +86 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyGroupHeaders.doc.mjs +14 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyGroupHeaders.tsx +99 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyPassthrough.doc.mjs +14 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyPassthrough.tsx +122 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaTwoAxisBoard.doc.mjs +14 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaTwoAxisBoard.tsx +95 -0
- package/assets/templates/blocks/components/Table/TableBulkActionsTable.doc.mjs +14 -0
- package/assets/templates/blocks/components/Table/TableBulkActionsTable.tsx +71 -0
- package/assets/templates/blocks/components/Table/TableFloatingBulkActionsTable.doc.mjs +19 -0
- package/assets/templates/blocks/components/Table/TableFloatingBulkActionsTable.tsx +139 -0
- package/assets/templates/blocks/components/TimeInput/TimeInputConstrained.tsx +1 -0
- package/assets/templates/pages/table-tree/page.tsx +1704 -0
- package/assets/templates/pages/table-tree/template.doc.mjs +12 -0
- package/assets/templates/themes/butter/butterTheme.doc.mjs +11 -0
- package/assets/templates/themes/chocolate/chocolateTheme.doc.mjs +11 -0
- package/assets/templates/themes/gothic/gothicTheme.doc.mjs +11 -0
- package/assets/templates/themes/matcha/matchaTheme.doc.mjs +11 -0
- package/assets/templates/themes/neutral/neutralTheme.doc.mjs +11 -0
- package/assets/templates/themes/stone/stoneTheme.doc.mjs +11 -0
- package/assets/templates/themes/y2k/y2kTheme.doc.mjs +11 -0
- package/authoring/_shared/contract.ts +22 -0
- package/authoring/codemod/codemod.doc.mjs +7 -2
- package/authoring/codemod/parse.d.mts +8 -8
- package/authoring/codemod/parse.mjs +8 -6
- package/authoring/codemod/type.ts +12 -0
- package/authoring/config/config.doc.mjs +10 -2
- package/authoring/config/debug-composition.test.mjs +92 -0
- package/authoring/config/parse.d.mts +15 -13
- package/authoring/config/parse.mjs +27 -8
- package/authoring/config/parse.test.mjs +8 -0
- package/authoring/config/type.ts +29 -6
- package/authoring/debug/debug.doc.d.mts +11 -0
- package/authoring/debug/debug.doc.mjs +182 -0
- package/authoring/debug/parse.d.mts +7 -7
- 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 +240 -128
- package/authoring/doctypes/_schema.mjs +198 -16
- package/authoring/doctypes/base/graph-fields.doc.mjs +15 -6
- package/authoring/doctypes/base/type.ts +9 -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 +4 -4
- 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 +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 +4 -3
- 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 +233 -0
- package/authoring/doctypes/namespace/namespace.doc.mjs +9 -9
- package/authoring/doctypes/namespace/parse.d.mts +2 -2
- package/authoring/doctypes/namespace/parse.mjs +1 -1
- package/authoring/doctypes/namespace/parse.test.mjs +23 -25
- package/authoring/doctypes/namespace/type.ts +6 -3
- package/authoring/doctypes/parse.d.mts +22 -20
- package/authoring/doctypes/parse.mjs +19 -14
- package/authoring/doctypes/reference/parse.d.mts +2 -2
- package/authoring/doctypes/reference/parse.mjs +1 -1
- package/authoring/doctypes/reference/reference.doc.mjs +39 -6
- package/authoring/doctypes/reference/type.ts +31 -14
- 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 +94 -1
- package/authoring/doctypes/template/parse.mjs +37 -1
- package/authoring/doctypes/template/parse.test.mjs +18 -0
- package/authoring/doctypes/template/template.doc.mjs +13 -3
- package/authoring/doctypes/template/type.ts +12 -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 +2 -0
- package/authoring/index.d.ts +32 -19
- package/authoring/index.mjs +3 -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 +5 -11
- package/clients/cli/__tests__/cliManifest.test.ts +27 -29
- package/clients/cli/command-load-failure.test.mjs +83 -0
- package/clients/cli/commands/blog.doc.mjs +1 -1
- package/clients/cli/commands/blog.mjs +23 -8
- package/clients/cli/commands/blog.test.mjs +42 -1
- package/clients/cli/commands/build-theme.adaptations.test.mjs +100 -1
- package/clients/cli/commands/build-theme.ascii-output.test.mjs +161 -0
- package/clients/cli/commands/build-theme.flag-docs.test.mjs +110 -0
- package/clients/cli/commands/build-theme.mjs +16 -50
- package/clients/cli/commands/build-theme.path-safety.test.mjs +86 -1
- package/clients/cli/commands/build-theme.variants.test.mjs +76 -0
- package/clients/cli/commands/build.doc.mjs +16 -8
- package/clients/cli/commands/build.exit-codes-doc.test.mjs +50 -0
- package/clients/cli/commands/build.mjs +137 -114
- package/clients/cli/commands/build.playbook.test.mjs +75 -0
- package/clients/cli/commands/build.text-fields.test.mjs +81 -0
- package/clients/cli/commands/component/index.mjs +3 -8
- package/clients/cli/commands/component-ownership.test.mjs +3 -3
- package/clients/cli/commands/component-package.test.mjs +46 -0
- package/clients/cli/commands/component-resolution.test.mjs +21 -0
- package/clients/cli/commands/component.doc.mjs +1 -1
- package/clients/cli/commands/component.test.mjs +19 -0
- package/clients/cli/commands/detail-levels.test.mjs +2 -2
- package/clients/cli/commands/discover.broken-integration.test.mjs +52 -5
- package/clients/cli/commands/discover.components-flag.test.mjs +97 -0
- package/clients/cli/commands/discover.doc.mjs +55 -9
- package/clients/cli/commands/discover.mjs +393 -118
- package/clients/cli/commands/discover.sources.test.mjs +267 -0
- package/clients/cli/commands/discover.text-projection.test.mjs +103 -0
- package/clients/cli/commands/docs.doc.mjs +21 -9
- package/clients/cli/commands/docs.mjs +184 -70
- package/clients/cli/commands/docs.test.mjs +120 -16
- package/clients/cli/commands/doctor-integration-components.doc.mjs +1 -1
- package/clients/cli/commands/doctor-integration-docs.doc.mjs +3 -3
- package/clients/cli/commands/doctor-integration-templates.doc.mjs +15 -8
- package/clients/cli/commands/doctor-integration-validate.doc.mjs +1 -1
- package/clients/cli/commands/doctor-integration.doc.mjs +1 -1
- package/clients/cli/commands/doctor-integration.package-json.test.mjs +53 -0
- package/clients/cli/commands/doctor-integration.test.mjs +90 -8
- package/clients/cli/commands/doctor.doc.mjs +1 -1
- package/clients/cli/commands/doctor.mjs +59 -32
- package/clients/cli/commands/doctor.test.mjs +42 -0
- package/clients/cli/commands/gap-report.doc.mjs +17 -6
- package/clients/cli/commands/gap-report.test.mjs +72 -0
- package/clients/cli/commands/hook/index.mjs +7 -17
- package/clients/cli/commands/hook.doc.mjs +1 -1
- package/clients/cli/commands/hook.text-projection.test.mjs +45 -0
- package/clients/cli/commands/init.doc.mjs +20 -9
- package/clients/cli/commands/init.flag-help.test.mjs +153 -0
- package/clients/cli/commands/integration-add.controls.test.mjs +132 -0
- package/clients/cli/commands/integration-add.doc.mjs +32 -6
- package/clients/cli/commands/integration-authoring.test.mjs +13 -9
- package/clients/cli/commands/integration-pack.doc.mjs +1 -1
- package/clients/cli/commands/integration-real-world.test.mjs +3 -9
- package/clients/cli/commands/integration.doc.mjs +1 -1
- package/clients/cli/commands/integration.mjs +1 -0
- package/clients/cli/commands/interactive-guard.test.mjs +101 -24
- package/clients/cli/commands/json-contract.test.mjs +33 -0
- package/clients/cli/commands/layout-check.doc.mjs +15 -4
- package/clients/cli/commands/layout-expand.doc.mjs +22 -5
- package/clients/cli/commands/layout-grammar.doc.mjs +1 -1
- package/clients/cli/commands/layout.doc.mjs +3 -3
- package/clients/cli/commands/layout.mjs +21 -9
- package/clients/cli/commands/layout.path-help.test.mjs +33 -0
- package/clients/cli/commands/layout.stdin-cap.test.mjs +47 -0
- package/clients/cli/commands/layout.text-fields.test.mjs +39 -0
- package/clients/cli/commands/manifest.doc.mjs +1 -1
- package/clients/cli/commands/no-prompt-wording.test.mjs +94 -0
- package/clients/cli/commands/search.doc.mjs +7 -4
- package/clients/cli/commands/search.mjs +28 -9
- package/clients/cli/commands/search.test.mjs +75 -0
- package/clients/cli/commands/setup-nudge.test.mjs +6 -0
- package/clients/cli/commands/swizzle.doc.mjs +3 -2
- package/clients/cli/commands/swizzle.path-safety.test.mjs +42 -0
- package/clients/cli/commands/template.doc.mjs +52 -13
- package/clients/cli/commands/template.flag-help.test.mjs +117 -0
- package/clients/cli/commands/template.mjs +4 -91
- package/clients/cli/commands/template.path-help.test.mjs +40 -0
- package/clients/cli/commands/text-json-parity.test.mjs +719 -0
- package/clients/cli/commands/theme-add.doc.mjs +4 -3
- package/clients/cli/commands/theme-build.doc.mjs +8 -7
- package/clients/cli/commands/theme-list.doc.mjs +2 -2
- package/clients/cli/commands/theme-palette-generate.doc.mjs +3 -3
- package/clients/cli/commands/theme-palette-generate.test.mjs +19 -0
- package/clients/cli/commands/theme-palette.doc.mjs +1 -1
- package/clients/cli/commands/theme-targets.behavior.test.mjs +4 -3
- package/clients/cli/commands/theme-targets.doc.mjs +1 -1
- package/clients/cli/commands/theme-template.behavior.test.mjs +12 -0
- package/clients/cli/commands/theme-template.doc.mjs +2 -2
- package/clients/cli/commands/theme.doc.mjs +1 -1
- package/clients/cli/commands/upgrade.ascii-output.test.mjs +87 -0
- package/clients/cli/commands/upgrade.doc.mjs +20 -8
- package/clients/cli/commands/upgrade.file-protection.test.mjs +228 -0
- package/clients/cli/commands/upgrade.flag-help.test.mjs +188 -0
- package/clients/cli/commands/upgrade.hook-output.test.mjs +88 -0
- package/clients/cli/commands/upgrade.mjs +29 -7
- package/clients/cli/formatters/index.mjs +2 -0
- package/clients/cli/formatters/index.test.mjs +6 -0
- package/clients/cli/index.mjs +21 -30
- package/clients/cli/latest-version-env.test.mjs +50 -0
- package/clients/cli/lib/cli-error.test.mjs +7 -0
- package/clients/cli/lib/component-format.mjs +9 -9
- package/clients/cli/lib/component-format.test.mjs +1 -1
- package/clients/cli/lib/define-command.mjs +32 -6
- package/clients/cli/lib/doc-text-ascii.test.mjs +82 -0
- package/clients/cli/lib/exit-codes.test.mjs +97 -0
- package/clients/cli/lib/hook-format.mjs +19 -10
- package/clients/cli/lib/json-shim.mjs +38 -2
- package/clients/cli/lib/json-shim.test.mjs +83 -0
- package/clients/cli/lib/manifest.d.ts +2 -0
- package/clients/cli/lib/manifest.mjs +32 -2
- package/clients/cli/lib/manifest.test.mjs +17 -0
- package/foundation/agent-docs/agent-docs.d.mts +7 -2
- package/foundation/agent-docs/agent-docs.mjs +82 -12
- package/foundation/agent-docs/agent-docs.path-safety.test.mjs +266 -4
- package/foundation/agent-docs/agent-docs.test.mjs +19 -1
- package/foundation/config/integration-debug.test.mjs +28 -3
- package/foundation/config/project-themes.test.mjs +11 -19
- package/foundation/config/project.d.mts +20 -11
- package/foundation/config/project.mjs +246 -89
- package/foundation/config/project.test.mjs +270 -21
- package/foundation/discovery/authoring-self-docs.d.mts +18 -0
- package/foundation/discovery/authoring-self-docs.mjs +38 -15
- package/foundation/discovery/authoring-self-docs.test.mjs +87 -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 +119 -0
- package/foundation/discovery/cli-self-docs.mjs +490 -0
- package/foundation/discovery/cli-self-docs.test.mjs +375 -0
- package/foundation/discovery/component-discovery.d.mts +38 -0
- package/foundation/discovery/component-discovery.mjs +48 -0
- package/foundation/discovery/component-loader.d.mts +35 -38
- package/foundation/discovery/component-loader.mjs +53 -222
- package/foundation/discovery/docs-discovery.d.mts +114 -9
- package/foundation/discovery/docs-discovery.mjs +239 -30
- package/foundation/discovery/docs-discovery.test.mjs +150 -35
- package/foundation/discovery/docs-output-budget.d.mts +2 -2
- package/foundation/discovery/docs-output-budget.mjs +1 -1
- package/foundation/discovery/docs-section-key.d.mts +28 -10
- package/foundation/discovery/docs-section-key.mjs +134 -33
- package/foundation/discovery/docs-section-key.test.mjs +41 -19
- package/foundation/discovery/template-adapter.d.mts +113 -11
- package/foundation/discovery/template-adapter.fixture-refs.test.mjs +248 -0
- package/foundation/discovery/template-adapter.integration-isolation.test.mjs +94 -0
- package/foundation/discovery/template-adapter.mjs +772 -82
- package/foundation/discovery/template-adapter.test.mjs +57 -0
- package/foundation/discovery/template-conflict-release.d.mts +13 -0
- package/foundation/discovery/template-conflict-release.mjs +40 -0
- package/foundation/discovery/template-conflict-release.test.mjs +40 -0
- package/foundation/discovery/theme-discovery.d.mts +67 -7
- package/foundation/discovery/theme-discovery.mjs +916 -186
- package/foundation/discovery/theme-discovery.test.mjs +613 -219
- package/foundation/discovery/theming-targets.test.mjs +4 -0
- package/foundation/doc-compiler/bundle.d.mts +47 -0
- package/foundation/doc-compiler/bundle.mjs +278 -0
- package/foundation/doc-compiler/bundle.test.mjs +266 -0
- package/foundation/doc-compiler/compile.d.mts +343 -0
- package/foundation/doc-compiler/compile.mjs +558 -0
- package/foundation/doc-compiler/diagnostics.d.mts +126 -0
- package/foundation/doc-compiler/diagnostics.mjs +305 -0
- package/foundation/doc-compiler/doc-compiler.test.mjs +714 -0
- package/foundation/doc-compiler/doc-loads.test.mjs +1642 -0
- package/foundation/doc-compiler/import.d.mts +24 -0
- package/foundation/doc-compiler/import.mjs +59 -0
- package/foundation/doc-compiler/inputs.d.mts +102 -0
- package/foundation/doc-compiler/inputs.mjs +291 -0
- package/foundation/doc-compiler/inputs.test.mjs +299 -0
- package/foundation/doc-compiler/ir.d.mts +22 -0
- package/foundation/doc-compiler/ir.mjs +471 -0
- package/foundation/doc-compiler/lenses.d.mts +36 -0
- package/foundation/doc-compiler/lenses.mjs +173 -0
- package/foundation/doc-compiler/links.d.mts +162 -0
- package/foundation/doc-compiler/links.mjs +294 -0
- package/foundation/doc-compiler/links.test.mjs +192 -0
- package/foundation/doc-compiler/lower-doc.test.mjs +495 -0
- package/foundation/doc-compiler/overlays.d.mts +37 -0
- package/foundation/doc-compiler/overlays.mjs +206 -0
- package/foundation/doc-compiler/parse-readable.d.mts +9 -0
- package/foundation/doc-compiler/parse-readable.mjs +29 -0
- package/foundation/doc-compiler/read.d.mts +127 -0
- package/foundation/doc-compiler/read.mjs +325 -0
- package/foundation/doc-compiler/read.test.mjs +313 -0
- package/foundation/doc-compiler/source.d.mts +33 -0
- package/foundation/doc-compiler/source.mjs +128 -0
- package/foundation/doc-compiler/tree.d.mts +288 -0
- package/foundation/doc-compiler/tree.mjs +876 -0
- package/foundation/doc-compiler/tree.test.mjs +598 -0
- package/foundation/fs/file-protection.d.mts +33 -0
- package/foundation/fs/file-protection.mjs +825 -0
- package/foundation/fs/file-protection.test.mjs +250 -0
- package/foundation/fs/module-loader.d.mts +1 -0
- package/foundation/fs/module-loader.mjs +50 -1
- package/foundation/fs/module-loader.stdout.test.mjs +332 -0
- package/foundation/fs/path-safety.d.mts +3 -2
- package/foundation/fs/path-safety.mjs +49 -19
- package/foundation/fs/path-safety.test.mjs +50 -0
- package/foundation/fs/publish-file-hardlink-unavailable.test.mjs +129 -94
- package/foundation/integrations/autolink.d.mts +58 -1
- package/foundation/integrations/autolink.mjs +143 -52
- package/foundation/integrations/autolink.test.mjs +1 -1
- package/foundation/integrations/cli-requirement.d.mts +45 -0
- package/foundation/integrations/cli-requirement.mjs +154 -0
- package/foundation/integrations/cli-requirement.test.mjs +84 -0
- package/foundation/integrations/contribution-fixes.d.mts +145 -0
- package/foundation/integrations/contribution-fixes.mjs +1284 -0
- package/foundation/integrations/contribution-inventory.d.mts +3 -2
- package/foundation/integrations/contribution-inventory.mjs +27 -24
- package/foundation/integrations/contribution-inventory.test.mjs +86 -27
- package/foundation/integrations/integration-warnings.d.mts +9 -2
- package/foundation/integrations/integration-warnings.mjs +51 -26
- package/foundation/integrations/integration-warnings.test.mjs +74 -1
- package/foundation/integrations/integrations.d.mts +17 -1
- package/foundation/integrations/integrations.mjs +52 -98
- package/foundation/integrations/integrations.test.mjs +31 -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.mjs +121 -29
- package/foundation/response/base.d.ts +8 -4
- package/foundation/response/error-codes.d.mts +3 -1
- package/foundation/response/error-codes.d.ts +2 -0
- package/foundation/response/error-codes.doc.mjs +13 -4
- package/foundation/response/error-codes.mjs +8 -2
- package/foundation/response/error-codes.test.mjs +137 -10
- package/foundation/response/json-contract.test.mjs +11 -0
- package/foundation/response/json.d.mts +4 -2
- package/foundation/response/json.mjs +8 -10
- package/foundation/response/response-types.doc.d.mts +5 -1
- package/foundation/response/response-types.doc.mjs +37 -22
- package/foundation/response/response-types.doc.test.mjs +158 -0
- package/foundation/response/response.doc.mjs +1 -1
- package/foundation/text/string-utils.d.mts +8 -0
- package/foundation/text/string-utils.mjs +40 -10
- package/foundation/xle/expand.d.mts +2 -0
- package/foundation/xle/expand.mjs +4 -3
- package/foundation/xle/expand.test.mjs +54 -0
- package/foundation/xle/xle.test.mjs +13 -0
- package/package.json +10 -11
- package/assets/templates/themes/manifest.json +0 -95
- package/clients/cli/lib/update-check.mjs +0 -83
- package/clients/cli/lib/update-check.test.mjs +0 -137
- package/clients/cli/update-hint-commands.test.mjs +0 -54
|
@@ -32,12 +32,12 @@
|
|
|
32
32
|
import * as fs from 'node:fs';
|
|
33
33
|
import * as path from 'node:path';
|
|
34
34
|
import {CLI_ROOT} from '../fs/paths.mjs';
|
|
35
|
-
import {
|
|
35
|
+
import {importDocModule} from '../doc-compiler/import.mjs';
|
|
36
36
|
import {CLI_PROVIDER_ID} from '../identity/providers.mjs';
|
|
37
|
-
import {
|
|
37
|
+
import {parseReadableDoc} from '../doc-compiler/parse-readable.mjs';
|
|
38
38
|
import {
|
|
39
39
|
sectionKey,
|
|
40
|
-
|
|
40
|
+
sectionKeyErrors,
|
|
41
41
|
sourceTitle,
|
|
42
42
|
withSourceTitle,
|
|
43
43
|
} from './docs-section-key.mjs';
|
|
@@ -71,6 +71,8 @@ const TOPIC_NAME_RE = /^[\w-]+$/;
|
|
|
71
71
|
* @typedef {object} DocsTopicRecord A doc file discovered under a docs root.
|
|
72
72
|
* @property {string} name
|
|
73
73
|
* @property {string} package owner package
|
|
74
|
+
* @property {string} [providerId] the owner's ProviderId, when it differs from
|
|
75
|
+
* the package name
|
|
74
76
|
* @property {string} path absolute path to the doc file
|
|
75
77
|
* @property {string} [title]
|
|
76
78
|
* @property {string} [description]
|
|
@@ -83,13 +85,21 @@ const TOPIC_NAME_RE = /^[\w-]+$/;
|
|
|
83
85
|
* @typedef {object} DocsTopicEntry A resolved topic in the catalog.
|
|
84
86
|
* @property {string} name
|
|
85
87
|
* @property {string} package owner package
|
|
88
|
+
* @property {string} [providerId] the owner's ProviderId; the package name when
|
|
89
|
+
* absent. Links in the topic resolve against it.
|
|
86
90
|
* @property {string} path absolute path to the doc file
|
|
87
91
|
* @property {string} [title]
|
|
88
92
|
* @property {string} [description]
|
|
89
93
|
* @property {string|null} [category]
|
|
90
94
|
* @property {string} [replaces] the topic this one took the place of
|
|
91
|
-
* @property {Array<{package: string, path: string}>} extensions
|
|
92
|
-
* merge onto the base doc, in the order their integrations were
|
|
95
|
+
* @property {Array<{package: string, path: string, providerId?: string}>} extensions
|
|
96
|
+
* overlays to merge onto the base doc, in the order their integrations were
|
|
97
|
+
* configured; each section an extension adds resolves its links against the
|
|
98
|
+
* extension's provider id (its package name when absent)
|
|
99
|
+
* @property {string} [parent] the route of the namespace a tree guide sits in
|
|
100
|
+
* @property {string} [route] a tree guide's route
|
|
101
|
+
* @property {boolean} [tree] a guide that only the docs tree reads, by its
|
|
102
|
+
* route; never a flat topic
|
|
93
103
|
*/
|
|
94
104
|
|
|
95
105
|
/**
|
|
@@ -117,7 +127,7 @@ export function discoverBuiltinTopics() {
|
|
|
117
127
|
* @returns {Promise<unknown>} the authored doc value
|
|
118
128
|
*/
|
|
119
129
|
export async function loadTopicModule(file) {
|
|
120
|
-
const mod = await
|
|
130
|
+
const mod = await importDocModule(file);
|
|
121
131
|
const doc = mod?.docs ?? mod?.default;
|
|
122
132
|
if (doc == null) {
|
|
123
133
|
throw new Error(
|
|
@@ -135,10 +145,21 @@ const BLOCK_FIELDS = {
|
|
|
135
145
|
table: ['headers', 'rows'],
|
|
136
146
|
list: ['style', 'items'],
|
|
137
147
|
'token-ref': ['topic', 'section'],
|
|
148
|
+
// A read inlines it as the doc it names includes (spec:AST-047 FR9).
|
|
149
|
+
reference: ['target'],
|
|
138
150
|
};
|
|
139
151
|
|
|
140
|
-
/**
|
|
141
|
-
|
|
152
|
+
/**
|
|
153
|
+
* Blocks that are valid authoring but require the compiled graph renderer: a
|
|
154
|
+
* namespace doc's `blocks` hold them, a topic section does not.
|
|
155
|
+
*/
|
|
156
|
+
export const GRAPH_BLOCK_TYPES = new Set(['workflow', 'collection']);
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Doc fields only the docs tree reads. A flat topic that sets one fails to
|
|
160
|
+
* load; a guide the tree places may set `placement` (spec:AST-046).
|
|
161
|
+
*/
|
|
162
|
+
export const GRAPH_ONLY_FIELDS = ['placement', 'aliases', 'audience'];
|
|
142
163
|
|
|
143
164
|
/**
|
|
144
165
|
* Fields a block kind may carry but does not need. Kept per kind rather than
|
|
@@ -148,6 +169,7 @@ const GRAPH_BLOCK_TYPES = new Set(['workflow', 'collection', 'reference']);
|
|
|
148
169
|
/** @type {Record<string, string[]>} */
|
|
149
170
|
const OPTIONAL_BLOCK_FIELDS = {
|
|
150
171
|
code: ['label'],
|
|
172
|
+
reference: ['projection', 'presentation'],
|
|
151
173
|
};
|
|
152
174
|
|
|
153
175
|
/**
|
|
@@ -159,8 +181,12 @@ const OPTIONAL_BLOCK_FIELDS = {
|
|
|
159
181
|
const BLOCK_FIELD_VALUES = {
|
|
160
182
|
heading: {level: [3, 4, 5, 6]},
|
|
161
183
|
list: {style: ['ordered', 'unordered', 'do', 'dont']},
|
|
184
|
+
reference: {presentation: ['summary', 'compact', 'full']},
|
|
162
185
|
};
|
|
163
186
|
|
|
187
|
+
/** The parts of a doc a reference block's `projection` may select. */
|
|
188
|
+
const PROJECTION_FIELDS = ['fields', 'sections'];
|
|
189
|
+
|
|
164
190
|
/** Keys a section may carry. */
|
|
165
191
|
const SECTION_FIELDS = ['id', 'title', 'category', 'content', 'previewType'];
|
|
166
192
|
|
|
@@ -173,9 +199,18 @@ const SECTION_FIELDS = ['id', 'title', 'category', 'content', 'previewType'];
|
|
|
173
199
|
* where the file that needs fixing can be named.
|
|
174
200
|
*
|
|
175
201
|
* @param {any} doc a parsed doc
|
|
202
|
+
* @param {{placement?: boolean}} [options] `placement`: the doc is a guide the
|
|
203
|
+
* docs tree places, so its `placement` field is read, not rejected
|
|
176
204
|
* @returns {string[]} problems, each already pointed at a place in the doc
|
|
177
205
|
*/
|
|
178
|
-
export function problemsInTopic(doc) {
|
|
206
|
+
export function problemsInTopic(doc, {placement = false} = {}) {
|
|
207
|
+
// A namespace doc is valid authoring that only the docs tree reads. Said
|
|
208
|
+
// plainly, instead of as the topic fields it does not have.
|
|
209
|
+
if (doc?.type === 'namespace') {
|
|
210
|
+
return [
|
|
211
|
+
`"${doc.name}" is a namespace doc, which the docs tree reads, not the topic list. The CLI keeps its own in assets/docs/tree; an integration ships its namespace docs in its docs directory.`,
|
|
212
|
+
];
|
|
213
|
+
}
|
|
179
214
|
/** @type {string[]} */
|
|
180
215
|
const problems = [];
|
|
181
216
|
for (const field of ['name', 'title', 'description']) {
|
|
@@ -188,7 +223,9 @@ export function problemsInTopic(doc) {
|
|
|
188
223
|
`name: "${doc.name}" is not URL-safe. A topic name is its CLI argument and its docsite path, so it may hold only letters, digits, "_" and "-".`,
|
|
189
224
|
);
|
|
190
225
|
}
|
|
191
|
-
for (const field of
|
|
226
|
+
for (const field of GRAPH_ONLY_FIELDS) {
|
|
227
|
+
// A guide the docs tree places carries `placement`; the tree reads it.
|
|
228
|
+
if (field === 'placement' && placement) continue;
|
|
192
229
|
if (doc?.[field] != null) {
|
|
193
230
|
problems.push(
|
|
194
231
|
`${field}: requires the compiled graph reader and is not supported by legacy topic readers`,
|
|
@@ -294,13 +331,71 @@ export function problemsInTopic(doc) {
|
|
|
294
331
|
);
|
|
295
332
|
}
|
|
296
333
|
}
|
|
334
|
+
// A projection names the parts of the doc to include, so each part
|
|
335
|
+
// it names is a non-empty list of names.
|
|
336
|
+
if (block.type === 'reference' && block.projection != null) {
|
|
337
|
+
const projection = block.projection;
|
|
338
|
+
if (typeof projection !== 'object' || Array.isArray(projection)) {
|
|
339
|
+
problems.push(
|
|
340
|
+
`${blockAt}.projection: expected {fields?, sections?}, naming the parts of the doc to include`,
|
|
341
|
+
);
|
|
342
|
+
} else {
|
|
343
|
+
for (const [key, names] of Object.entries(projection)) {
|
|
344
|
+
if (!PROJECTION_FIELDS.includes(key)) {
|
|
345
|
+
problems.push(
|
|
346
|
+
`${blockAt}.projection.${key}: not a field of a projection`,
|
|
347
|
+
);
|
|
348
|
+
} else if (
|
|
349
|
+
!Array.isArray(names) ||
|
|
350
|
+
names.length === 0 ||
|
|
351
|
+
names.some(
|
|
352
|
+
name => typeof name !== 'string' || name.trim() === '',
|
|
353
|
+
)
|
|
354
|
+
) {
|
|
355
|
+
problems.push(
|
|
356
|
+
`${blockAt}.projection.${key}: expected a non-empty array of names`,
|
|
357
|
+
);
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
}
|
|
297
362
|
},
|
|
298
363
|
);
|
|
299
364
|
},
|
|
300
365
|
);
|
|
301
|
-
//
|
|
302
|
-
//
|
|
303
|
-
|
|
366
|
+
// Explicit authored IDs are a new opt-in contract and remain strict. Topics
|
|
367
|
+
// that relied on 0.6.x title-only sections keep loading; the compiler assigns
|
|
368
|
+
// deterministic fallback/suffixed keys for the additive index API.
|
|
369
|
+
problems.push(...sectionKeyErrors(doc.sections));
|
|
370
|
+
return problems;
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
/**
|
|
374
|
+
* The fields the docs tree reads from a namespace doc an integration ships.
|
|
375
|
+
* @param {any} doc
|
|
376
|
+
* @returns {string[]}
|
|
377
|
+
*/
|
|
378
|
+
export function problemsInNamespace(doc) {
|
|
379
|
+
/** @type {string[]} */
|
|
380
|
+
const problems = [];
|
|
381
|
+
for (const field of ['name', 'title', 'summary']) {
|
|
382
|
+
if (typeof doc?.[field] !== 'string' || doc[field] === '') {
|
|
383
|
+
problems.push(`${field}: expected a non-empty string`);
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
const slots = doc?.slots;
|
|
387
|
+
if (slots == null || typeof slots !== 'object' || Object.keys(slots).length === 0) {
|
|
388
|
+
problems.push('slots: expected at least one slot');
|
|
389
|
+
return problems;
|
|
390
|
+
}
|
|
391
|
+
for (const [name, slot] of Object.entries(slots)) {
|
|
392
|
+
if (typeof slot?.title !== 'string' || slot.title === '') {
|
|
393
|
+
problems.push(`slots.${name}.title: expected a non-empty string`);
|
|
394
|
+
}
|
|
395
|
+
if (!Array.isArray(slot?.accepts?.kinds) || slot.accepts.kinds.length === 0) {
|
|
396
|
+
problems.push(`slots.${name}.accepts.kinds: expected at least one kind`);
|
|
397
|
+
}
|
|
398
|
+
}
|
|
304
399
|
return problems;
|
|
305
400
|
}
|
|
306
401
|
|
|
@@ -311,11 +406,15 @@ export function problemsInTopic(doc) {
|
|
|
311
406
|
* discovery this loads each doc, because a topic's name and its relationship
|
|
312
407
|
* to an existing topic are fields inside the file.
|
|
313
408
|
*
|
|
409
|
+
* A namespace doc and a guide with `placement` go to the docs tree instead of
|
|
410
|
+
* the topic list (spec:AST-046): they come back in `namespaces` and `guides`,
|
|
411
|
+
* named by the integration's provider id.
|
|
412
|
+
*
|
|
314
413
|
* Errors are returned, not thrown: one unusable doc is reported as an issue
|
|
315
414
|
* against its package while the rest of the CLI keeps working.
|
|
316
415
|
*
|
|
317
|
-
* @param {{name: string, docs?: string}} integration a loaded integration
|
|
318
|
-
* @returns {Promise<{records: DocsTopicRecord[], errors: Error[]}>}
|
|
416
|
+
* @param {{name: string, docs?: string, providerId?: string}} integration a loaded integration
|
|
417
|
+
* @returns {Promise<{records: DocsTopicRecord[], errors: Error[], namespaces: import('../doc-compiler/tree.mjs').TreeNamespaceInput[], guides: import('../doc-compiler/tree.mjs').TreeDocInput[]}>}
|
|
319
418
|
*/
|
|
320
419
|
export async function discoverIntegrationDocs(integration) {
|
|
321
420
|
const docsDir = integration?.docs;
|
|
@@ -323,7 +422,14 @@ export async function discoverIntegrationDocs(integration) {
|
|
|
323
422
|
const records = [];
|
|
324
423
|
/** @type {Error[]} */
|
|
325
424
|
const errors = [];
|
|
326
|
-
|
|
425
|
+
/** @type {import('../doc-compiler/tree.mjs').TreeNamespaceInput[]} */
|
|
426
|
+
const namespaces = [];
|
|
427
|
+
/** @type {import('../doc-compiler/tree.mjs').TreeDocInput[]} */
|
|
428
|
+
const guides = [];
|
|
429
|
+
if (!docsDir || !fs.existsSync(docsDir)) {
|
|
430
|
+
return {records, errors, namespaces, guides};
|
|
431
|
+
}
|
|
432
|
+
const providerId = integration.providerId ?? integration.name;
|
|
327
433
|
|
|
328
434
|
/** @type {string[]} */
|
|
329
435
|
const files = [];
|
|
@@ -349,7 +455,7 @@ export async function discoverIntegrationDocs(integration) {
|
|
|
349
455
|
for (const file of files) {
|
|
350
456
|
let doc;
|
|
351
457
|
try {
|
|
352
|
-
doc =
|
|
458
|
+
doc = parseReadableDoc(await loadTopicModule(file), path.basename(file));
|
|
353
459
|
} catch (err) {
|
|
354
460
|
errors.push(
|
|
355
461
|
new Error(
|
|
@@ -358,11 +464,34 @@ export async function discoverIntegrationDocs(integration) {
|
|
|
358
464
|
);
|
|
359
465
|
continue;
|
|
360
466
|
}
|
|
361
|
-
const
|
|
467
|
+
const relative = path.relative(docsDir, file);
|
|
468
|
+
const source = `${integration.name}/${relative.split(path.sep).join('/')}`;
|
|
469
|
+
if (/** @type {any} */ (doc)?.type === 'namespace') {
|
|
470
|
+
const problems = problemsInNamespace(doc);
|
|
471
|
+
if (problems.length > 0) {
|
|
472
|
+
errors.push(
|
|
473
|
+
new Error(
|
|
474
|
+
`${relative} is not a usable namespace doc:\n${problems
|
|
475
|
+
.map(problem => ` ${problem}`)
|
|
476
|
+
.join('\n')}`,
|
|
477
|
+
),
|
|
478
|
+
);
|
|
479
|
+
continue;
|
|
480
|
+
}
|
|
481
|
+
namespaces.push({
|
|
482
|
+
provider: integration.name,
|
|
483
|
+
providerId,
|
|
484
|
+
source,
|
|
485
|
+
doc: /** @type {any} */ (doc),
|
|
486
|
+
});
|
|
487
|
+
continue;
|
|
488
|
+
}
|
|
489
|
+
const placed = /** @type {any} */ (doc)?.placement != null;
|
|
490
|
+
const problems = problemsInTopic(doc, {placement: placed});
|
|
362
491
|
if (problems.length > 0) {
|
|
363
492
|
errors.push(
|
|
364
493
|
new Error(
|
|
365
|
-
`${
|
|
494
|
+
`${relative} is not a usable topic:\n${problems
|
|
366
495
|
.map(problem => ` ${problem}`)
|
|
367
496
|
.join('\n')}`,
|
|
368
497
|
),
|
|
@@ -383,6 +512,29 @@ export async function discoverIntegrationDocs(integration) {
|
|
|
383
512
|
continue;
|
|
384
513
|
}
|
|
385
514
|
seen.set(topicKey, path.relative(docsDir, file));
|
|
515
|
+
if (placed) {
|
|
516
|
+
if (parsed.replaces != null || parsed.extends != null) {
|
|
517
|
+
errors.push(
|
|
518
|
+
new Error(
|
|
519
|
+
`${relative} is placed in the docs tree and also declares \`${parsed.replaces != null ? 'replaces' : 'extends'}\`. A placed guide has its own route; only a flat topic takes over or extends another.`,
|
|
520
|
+
),
|
|
521
|
+
);
|
|
522
|
+
continue;
|
|
523
|
+
}
|
|
524
|
+
guides.push({
|
|
525
|
+
provider: integration.name,
|
|
526
|
+
providerId,
|
|
527
|
+
source,
|
|
528
|
+
kind: 'generic',
|
|
529
|
+
name: parsed.name,
|
|
530
|
+
title: parsed.title,
|
|
531
|
+
summary: parsed.description,
|
|
532
|
+
group: null,
|
|
533
|
+
placement: parsed.placement,
|
|
534
|
+
ref: {topicFile: file},
|
|
535
|
+
});
|
|
536
|
+
continue;
|
|
537
|
+
}
|
|
386
538
|
if (parsed.replaces != null && parsed.extends != null) {
|
|
387
539
|
errors.push(
|
|
388
540
|
new Error(
|
|
@@ -400,17 +552,19 @@ export async function discoverIntegrationDocs(integration) {
|
|
|
400
552
|
category: parsed.category ?? null,
|
|
401
553
|
replaces: parsed.replaces,
|
|
402
554
|
extendsTopic: parsed.extends,
|
|
555
|
+
...(providerId === integration.name ? {} : {providerId}),
|
|
403
556
|
});
|
|
404
557
|
}
|
|
405
558
|
|
|
406
|
-
return {records, errors};
|
|
559
|
+
return {records, errors, namespaces, guides};
|
|
407
560
|
}
|
|
408
561
|
|
|
409
562
|
/**
|
|
410
563
|
* Merge an extension onto a base topic: a section with a stable `id` replaces
|
|
411
564
|
* the base section with the same `id`; legacy sections without IDs fall back to
|
|
412
|
-
* title matching. A section with no match is appended
|
|
413
|
-
*
|
|
565
|
+
* title matching. A section with no match is appended. The title and
|
|
566
|
+
* description stay the base topic's: an extension adds to a topic, it never
|
|
567
|
+
* renames it. A topic that `replaces` another is the one that renames.
|
|
414
568
|
*
|
|
415
569
|
* Keyed by section TITLE rather than by position, the way the localization
|
|
416
570
|
* overlays are — position keying grafts an overlay onto whichever section
|
|
@@ -437,12 +591,7 @@ export function mergeTopic(base, overlay) {
|
|
|
437
591
|
: section;
|
|
438
592
|
}
|
|
439
593
|
}
|
|
440
|
-
return {
|
|
441
|
-
...base,
|
|
442
|
-
title: overlay.title || base.title,
|
|
443
|
-
description: overlay.description || base.description,
|
|
444
|
-
sections,
|
|
445
|
-
};
|
|
594
|
+
return {...base, sections};
|
|
446
595
|
}
|
|
447
596
|
|
|
448
597
|
/**
|
|
@@ -477,7 +626,7 @@ function findMergeTarget(sections, section) {
|
|
|
477
626
|
const sameTitle = sections.findIndex(
|
|
478
627
|
candidate => sourceTitle(candidate) === title,
|
|
479
628
|
);
|
|
480
|
-
return sameTitle
|
|
629
|
+
return sameTitle;
|
|
481
630
|
}
|
|
482
631
|
|
|
483
632
|
/**
|
|
@@ -493,6 +642,46 @@ export class DocsCatalog {
|
|
|
493
642
|
#topics = new Map();
|
|
494
643
|
/** @type {Map<string, string>} old topic name → the name that replaced it */
|
|
495
644
|
#aliases = new Map();
|
|
645
|
+
/** @type {Array<{namespaces: import('../doc-compiler/tree.mjs').TreeNamespaceInput[], guides: import('../doc-compiler/tree.mjs').TreeDocInput[]}>} */
|
|
646
|
+
#treeInputs = [];
|
|
647
|
+
/** @type {Array<{package: string, message: string}>} */
|
|
648
|
+
#issues = [];
|
|
649
|
+
|
|
650
|
+
/**
|
|
651
|
+
* Record a doc file a package ships that did not load. Its package's docs
|
|
652
|
+
* are withdrawn; readers name the package so an author knows where to look.
|
|
653
|
+
* @param {{package: string, message: string}} issue
|
|
654
|
+
*/
|
|
655
|
+
addIssue(issue) {
|
|
656
|
+
this.#issues.push(issue);
|
|
657
|
+
}
|
|
658
|
+
|
|
659
|
+
/**
|
|
660
|
+
* The doc files that did not load, by package.
|
|
661
|
+
* @returns {ReadonlyArray<{package: string, message: string}>}
|
|
662
|
+
*/
|
|
663
|
+
get issues() {
|
|
664
|
+
return this.#issues;
|
|
665
|
+
}
|
|
666
|
+
|
|
667
|
+
/**
|
|
668
|
+
* Add the namespace docs and placed guides one integration ships to the
|
|
669
|
+
* docs tree (spec:AST-046).
|
|
670
|
+
* @param {{namespaces: import('../doc-compiler/tree.mjs').TreeNamespaceInput[], guides: import('../doc-compiler/tree.mjs').TreeDocInput[]}} inputs
|
|
671
|
+
*/
|
|
672
|
+
addTreeInputs(inputs) {
|
|
673
|
+
if (inputs.namespaces.length > 0 || inputs.guides.length > 0) {
|
|
674
|
+
this.#treeInputs.push(inputs);
|
|
675
|
+
}
|
|
676
|
+
}
|
|
677
|
+
|
|
678
|
+
/**
|
|
679
|
+
* What the integrations add to the docs tree, in configured order.
|
|
680
|
+
* @returns {ReadonlyArray<{namespaces: import('../doc-compiler/tree.mjs').TreeNamespaceInput[], guides: import('../doc-compiler/tree.mjs').TreeDocInput[]}>}
|
|
681
|
+
*/
|
|
682
|
+
get treeInputs() {
|
|
683
|
+
return this.#treeInputs;
|
|
684
|
+
}
|
|
496
685
|
|
|
497
686
|
/**
|
|
498
687
|
* Seed a catalog with the CLI's own topics.
|
|
@@ -530,7 +719,11 @@ export class DocsCatalog {
|
|
|
530
719
|
message: `"${record.name}" extends "${record.extendsTopic}", which is not a topic in this project.`,
|
|
531
720
|
};
|
|
532
721
|
}
|
|
533
|
-
target.extensions.push({
|
|
722
|
+
target.extensions.push({
|
|
723
|
+
package: record.package,
|
|
724
|
+
path: record.path,
|
|
725
|
+
...(record.providerId ? {providerId: record.providerId} : {}),
|
|
726
|
+
});
|
|
534
727
|
return null;
|
|
535
728
|
}
|
|
536
729
|
|
|
@@ -568,6 +761,7 @@ export class DocsCatalog {
|
|
|
568
761
|
description: record.description,
|
|
569
762
|
category: record.category,
|
|
570
763
|
replaces: replaced,
|
|
764
|
+
...(record.providerId ? {providerId: record.providerId} : {}),
|
|
571
765
|
// Extensions were authored against the content that just went away.
|
|
572
766
|
extensions: [],
|
|
573
767
|
});
|
|
@@ -597,11 +791,26 @@ export class DocsCatalog {
|
|
|
597
791
|
title: record.title,
|
|
598
792
|
description: record.description,
|
|
599
793
|
category: record.category,
|
|
794
|
+
...(record.providerId ? {providerId: record.providerId} : {}),
|
|
600
795
|
extensions: [],
|
|
601
796
|
});
|
|
602
797
|
return null;
|
|
603
798
|
}
|
|
604
799
|
|
|
800
|
+
/**
|
|
801
|
+
* Every other name a topic answers to, lowercased: the names of the topics
|
|
802
|
+
* it replaced, directly or through a chain of replacements. `resolve` finds
|
|
803
|
+
* the topic by each of them.
|
|
804
|
+
* @param {DocsTopicEntry} entry
|
|
805
|
+
* @returns {string[]}
|
|
806
|
+
*/
|
|
807
|
+
aliasesOf(entry) {
|
|
808
|
+
const key = entry.name.toLowerCase();
|
|
809
|
+
return [...this.#aliases]
|
|
810
|
+
.filter(([, to]) => to === key)
|
|
811
|
+
.map(([from]) => from);
|
|
812
|
+
}
|
|
813
|
+
|
|
605
814
|
/**
|
|
606
815
|
* Look a topic up by name, case-insensitively, following the alias a renamed
|
|
607
816
|
* replacement left behind.
|