@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
|
@@ -6,6 +6,7 @@ import * as path from 'node:path';
|
|
|
6
6
|
import {Project, DEFAULT_ISSUES_URL, findConfigPath} from './project.mjs';
|
|
7
7
|
import {InMemoryConfigCache} from './config-cache.mjs';
|
|
8
8
|
import * as componentDiscovery from '../discovery/component-discovery.mjs';
|
|
9
|
+
import {discoverCoreTemplates} from '../discovery/template-adapter.mjs';
|
|
9
10
|
|
|
10
11
|
let tmpDir;
|
|
11
12
|
let originalCwd;
|
|
@@ -21,6 +22,9 @@ function scaffold({
|
|
|
21
22
|
issuesUrl,
|
|
22
23
|
withComponents = true,
|
|
23
24
|
withTemplates = true,
|
|
25
|
+
templateId = 'hero',
|
|
26
|
+
templateType = 'block',
|
|
27
|
+
templateReplaces = null,
|
|
24
28
|
withCodemods = true,
|
|
25
29
|
brokenComponent = false,
|
|
26
30
|
brokenCodemod = false,
|
|
@@ -65,7 +69,7 @@ function scaffold({
|
|
|
65
69
|
fs.mkdirSync(compDir, {recursive: true});
|
|
66
70
|
fs.writeFileSync(
|
|
67
71
|
path.join(compDir, 'Widget.doc.mjs'),
|
|
68
|
-
`export const docs = { name: 'Widget', usage: {description: 'A widget'} };\n`,
|
|
72
|
+
`export const docs = { name: 'Widget', usage: {description: 'A widget'}, props: [] };\n`,
|
|
69
73
|
);
|
|
70
74
|
if (!brokenComponent) {
|
|
71
75
|
fs.writeFileSync(
|
|
@@ -80,12 +84,12 @@ function scaffold({
|
|
|
80
84
|
const tDir = path.join(pkgDir, 'templates');
|
|
81
85
|
fs.mkdirSync(tDir, {recursive: true});
|
|
82
86
|
fs.writeFileSync(
|
|
83
|
-
path.join(tDir,
|
|
84
|
-
`export default { type: '
|
|
87
|
+
path.join(tDir, `${templateId}.doc.mjs`),
|
|
88
|
+
`export default { type: '${templateType}', name: 'Fixture template', description: 'A fixture template'${templateReplaces == null ? '' : `, replaces: ${JSON.stringify(templateReplaces)}`} };\n`,
|
|
85
89
|
);
|
|
86
90
|
fs.writeFileSync(
|
|
87
|
-
path.join(tDir,
|
|
88
|
-
`export default function
|
|
91
|
+
path.join(tDir, `${templateId}.tsx`),
|
|
92
|
+
`export default function FixtureTemplate() { return null; }\n`,
|
|
89
93
|
);
|
|
90
94
|
}
|
|
91
95
|
|
|
@@ -163,7 +167,7 @@ function scaffoldLocalPackage({name = '@acme/local'} = {}) {
|
|
|
163
167
|
|
|
164
168
|
fs.mkdirSync(path.join(tmpDir, 'templates'));
|
|
165
169
|
fs.writeFileSync(
|
|
166
|
-
path.join(tmpDir, 'templates', 'local-page.
|
|
170
|
+
path.join(tmpDir, 'templates', 'local-page.doc.mjs'),
|
|
167
171
|
`export default {type: 'page', name: 'Local page', description: 'Local page.'};\n`,
|
|
168
172
|
);
|
|
169
173
|
fs.writeFileSync(
|
|
@@ -181,21 +185,8 @@ function scaffoldLocalPackage({name = '@acme/local'} = {}) {
|
|
|
181
185
|
|
|
182
186
|
fs.mkdirSync(path.join(tmpDir, 'themes', 'ocean'), {recursive: true});
|
|
183
187
|
fs.writeFileSync(
|
|
184
|
-
path.join(tmpDir, 'themes', '
|
|
185
|
-
|
|
186
|
-
version: 1,
|
|
187
|
-
themes: [
|
|
188
|
-
{
|
|
189
|
-
slug: 'ocean',
|
|
190
|
-
displayName: 'Ocean',
|
|
191
|
-
description: 'Ocean theme.',
|
|
192
|
-
maintained: true,
|
|
193
|
-
entry: 'oceanTheme.ts',
|
|
194
|
-
exportName: 'oceanTheme',
|
|
195
|
-
files: ['oceanTheme.ts'],
|
|
196
|
-
},
|
|
197
|
-
],
|
|
198
|
-
}),
|
|
188
|
+
path.join(tmpDir, 'themes', 'ocean', 'oceanTheme.doc.mjs'),
|
|
189
|
+
`/** @type {import('@astryxdesign/cli/authoring').ThemeDoc} */\nexport default {type: 'theme', name: 'ocean', displayName: 'Ocean', description: 'Ocean theme.', maintained: true};\n`,
|
|
199
190
|
);
|
|
200
191
|
fs.writeFileSync(
|
|
201
192
|
path.join(tmpDir, 'themes', 'ocean', 'oceanTheme.ts'),
|
|
@@ -337,6 +328,91 @@ describe('Project discovery', () => {
|
|
|
337
328
|
expect(hero.type).toBe('block');
|
|
338
329
|
});
|
|
339
330
|
|
|
331
|
+
it('templates() projects a valid integration replacement instead of its Core target', async () => {
|
|
332
|
+
const corePage = (await discoverCoreTemplates()).find(
|
|
333
|
+
template => template.type === 'page',
|
|
334
|
+
);
|
|
335
|
+
expect(corePage).toBeDefined();
|
|
336
|
+
scaffold({
|
|
337
|
+
templateId: 'acme-app-shell',
|
|
338
|
+
templateType: 'page',
|
|
339
|
+
templateReplaces: corePage.dirName,
|
|
340
|
+
});
|
|
341
|
+
const project = await Project.load(tmpDir);
|
|
342
|
+
|
|
343
|
+
const templates = await project.templates();
|
|
344
|
+
|
|
345
|
+
expect(
|
|
346
|
+
templates.find(template => template.dirName === 'acme-app-shell'),
|
|
347
|
+
).toMatchObject({
|
|
348
|
+
package: '@acme/widgets',
|
|
349
|
+
replaces: corePage.dirName,
|
|
350
|
+
});
|
|
351
|
+
expect(
|
|
352
|
+
templates.find(
|
|
353
|
+
template =>
|
|
354
|
+
template.dirName === corePage.dirName &&
|
|
355
|
+
template.package !== '@acme/widgets',
|
|
356
|
+
),
|
|
357
|
+
).toBeUndefined();
|
|
358
|
+
expect(await project.issues()).toEqual([]);
|
|
359
|
+
});
|
|
360
|
+
|
|
361
|
+
it('reports replacement issues regardless of discovery call order without hiding other contributions', async () => {
|
|
362
|
+
scaffold({
|
|
363
|
+
templateReplaces: 'missing-core-template',
|
|
364
|
+
});
|
|
365
|
+
|
|
366
|
+
const componentsFirst = await Project.load(tmpDir);
|
|
367
|
+
expect(
|
|
368
|
+
(await componentsFirst.components()).some(
|
|
369
|
+
component => component.package === '@acme/widgets',
|
|
370
|
+
),
|
|
371
|
+
).toBe(true);
|
|
372
|
+
expect(await componentsFirst.issues()).toEqual(
|
|
373
|
+
expect.arrayContaining([
|
|
374
|
+
expect.objectContaining({
|
|
375
|
+
code: 'missing_template_replacement_target',
|
|
376
|
+
package: '@acme/widgets',
|
|
377
|
+
}),
|
|
378
|
+
]),
|
|
379
|
+
);
|
|
380
|
+
|
|
381
|
+
const issuesFirst = await Project.load(tmpDir, {fresh: true});
|
|
382
|
+
expect(await issuesFirst.issues()).toEqual(
|
|
383
|
+
expect.arrayContaining([
|
|
384
|
+
expect.objectContaining({
|
|
385
|
+
code: 'missing_template_replacement_target',
|
|
386
|
+
package: '@acme/widgets',
|
|
387
|
+
}),
|
|
388
|
+
]),
|
|
389
|
+
);
|
|
390
|
+
expect(
|
|
391
|
+
(await issuesFirst.components()).some(
|
|
392
|
+
component => component.package === '@acme/widgets',
|
|
393
|
+
),
|
|
394
|
+
).toBe(true);
|
|
395
|
+
const ownTemplate = (await issuesFirst.templates()).find(
|
|
396
|
+
template =>
|
|
397
|
+
template.package === '@acme/widgets' && template.dirName === 'hero',
|
|
398
|
+
);
|
|
399
|
+
expect(ownTemplate).toBeDefined();
|
|
400
|
+
expect(ownTemplate).not.toHaveProperty('replaces');
|
|
401
|
+
|
|
402
|
+
const sharedCache = new InMemoryConfigCache();
|
|
403
|
+
const warm = await Project.load(tmpDir, {cache: sharedCache});
|
|
404
|
+
await warm.templates();
|
|
405
|
+
const cached = await Project.load(tmpDir, {cache: sharedCache});
|
|
406
|
+
expect(await cached.issues()).toEqual(
|
|
407
|
+
expect.arrayContaining([
|
|
408
|
+
expect.objectContaining({
|
|
409
|
+
code: 'missing_template_replacement_target',
|
|
410
|
+
package: '@acme/widgets',
|
|
411
|
+
}),
|
|
412
|
+
]),
|
|
413
|
+
);
|
|
414
|
+
});
|
|
415
|
+
|
|
340
416
|
it('codemods() returns core registry groups + integration groups', async () => {
|
|
341
417
|
scaffold();
|
|
342
418
|
const project = await Project.load(tmpDir);
|
|
@@ -481,6 +557,53 @@ describe('Project issues (skip + warn)', () => {
|
|
|
481
557
|
expect(issues.some(i => i.package === '@acme/widgets')).toBe(true);
|
|
482
558
|
});
|
|
483
559
|
|
|
560
|
+
it('keeps valid contribution kinds and siblings when others are broken', async () => {
|
|
561
|
+
const pkgDir = scaffold({brokenComponent: true});
|
|
562
|
+
fs.writeFileSync(
|
|
563
|
+
path.join(pkgDir, 'templates', 'broken.template.mjs'),
|
|
564
|
+
`export default {type: 'block', name: 'Broken', description: 'Missing source'};\n`,
|
|
565
|
+
);
|
|
566
|
+
fs.writeFileSync(
|
|
567
|
+
path.join(pkgDir, 'components', 'ValidWidget.doc.mjs'),
|
|
568
|
+
`export default {type: 'component', name: 'ValidWidget', props: []};\n`,
|
|
569
|
+
);
|
|
570
|
+
fs.writeFileSync(
|
|
571
|
+
path.join(pkgDir, 'components', 'ValidWidget.tsx'),
|
|
572
|
+
`export function ValidWidget() { return null; }\n`,
|
|
573
|
+
);
|
|
574
|
+
const project = await Project.load(tmpDir);
|
|
575
|
+
|
|
576
|
+
const templates = await project.templates();
|
|
577
|
+
const components = await project.components();
|
|
578
|
+
const issues = await project.issues();
|
|
579
|
+
|
|
580
|
+
expect(
|
|
581
|
+
templates.find(
|
|
582
|
+
template =>
|
|
583
|
+
template.dirName === 'hero' && template.package === '@acme/widgets',
|
|
584
|
+
),
|
|
585
|
+
).toBeDefined();
|
|
586
|
+
expect(
|
|
587
|
+
components.find(
|
|
588
|
+
component =>
|
|
589
|
+
component.name === 'ValidWidget' &&
|
|
590
|
+
component.package === '@acme/widgets',
|
|
591
|
+
),
|
|
592
|
+
).toBeDefined();
|
|
593
|
+
expect(
|
|
594
|
+
components.find(
|
|
595
|
+
component =>
|
|
596
|
+
component.name === 'Widget' && component.package === '@acme/widgets',
|
|
597
|
+
),
|
|
598
|
+
).toBeUndefined();
|
|
599
|
+
expect(issues).toEqual(
|
|
600
|
+
expect.arrayContaining([
|
|
601
|
+
expect.objectContaining({code: 'invalid_component'}),
|
|
602
|
+
expect.objectContaining({code: 'invalid_template'}),
|
|
603
|
+
]),
|
|
604
|
+
);
|
|
605
|
+
});
|
|
606
|
+
|
|
484
607
|
it('does not throw when an integration codemod is broken', async () => {
|
|
485
608
|
scaffold({brokenCodemod: true});
|
|
486
609
|
const project = await Project.load(tmpDir);
|
|
@@ -515,6 +638,132 @@ describe('Project issues (skip + warn)', () => {
|
|
|
515
638
|
});
|
|
516
639
|
});
|
|
517
640
|
|
|
641
|
+
describe('Project loads each integration in isolation', () => {
|
|
642
|
+
/**
|
|
643
|
+
* Install a package under node_modules with the given root files.
|
|
644
|
+
* @param {string} name
|
|
645
|
+
* @param {string[]} manifests manifest basenames to write
|
|
646
|
+
*/
|
|
647
|
+
function installPackage(name, manifests) {
|
|
648
|
+
const dir = path.join(tmpDir, 'node_modules', ...name.split('/'));
|
|
649
|
+
fs.mkdirSync(dir, {recursive: true});
|
|
650
|
+
fs.writeFileSync(
|
|
651
|
+
path.join(dir, 'package.json'),
|
|
652
|
+
JSON.stringify({name, version: '1.0.0'}),
|
|
653
|
+
);
|
|
654
|
+
for (const file of manifests) {
|
|
655
|
+
fs.writeFileSync(path.join(dir, file), 'export default {};\n');
|
|
656
|
+
}
|
|
657
|
+
}
|
|
658
|
+
|
|
659
|
+
/** @param {string[]} integrations */
|
|
660
|
+
function writeConfig(integrations) {
|
|
661
|
+
fs.writeFileSync(
|
|
662
|
+
path.join(tmpDir, 'astryx.config.mjs'),
|
|
663
|
+
`export default ${JSON.stringify({integrations})};\n`,
|
|
664
|
+
);
|
|
665
|
+
}
|
|
666
|
+
|
|
667
|
+
/** @param {Project} project */
|
|
668
|
+
async function widgetComponents(project) {
|
|
669
|
+
return (await project.components())
|
|
670
|
+
.filter(component => component.package === '@acme/widgets')
|
|
671
|
+
.map(component => component.name);
|
|
672
|
+
}
|
|
673
|
+
|
|
674
|
+
it.each([
|
|
675
|
+
['is not installed', '@acme/broken', () => {}, /Install it first/],
|
|
676
|
+
[
|
|
677
|
+
'has no root manifest',
|
|
678
|
+
'@acme/broken',
|
|
679
|
+
() => installPackage('@acme/broken', []),
|
|
680
|
+
/no conventional root manifest/,
|
|
681
|
+
],
|
|
682
|
+
[
|
|
683
|
+
'has two root manifests',
|
|
684
|
+
'@acme/broken',
|
|
685
|
+
() =>
|
|
686
|
+
installPackage('@acme/broken', [
|
|
687
|
+
'astryx.integration.mjs',
|
|
688
|
+
'astryx.integration.js',
|
|
689
|
+
]),
|
|
690
|
+
/multiple root manifests/,
|
|
691
|
+
],
|
|
692
|
+
[
|
|
693
|
+
'is not a bare package name',
|
|
694
|
+
'../escape',
|
|
695
|
+
() => {},
|
|
696
|
+
/Invalid integration package name/,
|
|
697
|
+
],
|
|
698
|
+
])(
|
|
699
|
+
'keeps the others when a configured package %s',
|
|
700
|
+
async (_label, spec, install, message) => {
|
|
701
|
+
scaffold();
|
|
702
|
+
install();
|
|
703
|
+
writeConfig([spec, '@acme/widgets']);
|
|
704
|
+
|
|
705
|
+
const project = await Project.load(tmpDir);
|
|
706
|
+
|
|
707
|
+
expect(await widgetComponents(project)).toEqual(['Widget']);
|
|
708
|
+
expect(await project.issues()).toContainEqual(
|
|
709
|
+
expect.objectContaining({
|
|
710
|
+
package: spec,
|
|
711
|
+
code: 'integration_error',
|
|
712
|
+
message: expect.stringMatching(message),
|
|
713
|
+
}),
|
|
714
|
+
);
|
|
715
|
+
},
|
|
716
|
+
);
|
|
717
|
+
|
|
718
|
+
it('keeps configured integrations when the package being authored has two root manifests', async () => {
|
|
719
|
+
scaffold();
|
|
720
|
+
fs.writeFileSync(
|
|
721
|
+
path.join(tmpDir, 'package.json'),
|
|
722
|
+
JSON.stringify({name: '@acme/local', version: '1.0.0'}),
|
|
723
|
+
);
|
|
724
|
+
fs.writeFileSync(
|
|
725
|
+
path.join(tmpDir, 'astryx.integration.mjs'),
|
|
726
|
+
'export default {};\n',
|
|
727
|
+
);
|
|
728
|
+
fs.writeFileSync(
|
|
729
|
+
path.join(tmpDir, 'astryx.integration.js'),
|
|
730
|
+
'export default {};\n',
|
|
731
|
+
);
|
|
732
|
+
|
|
733
|
+
const project = await Project.load(tmpDir);
|
|
734
|
+
|
|
735
|
+
expect(await widgetComponents(project)).toEqual(['Widget']);
|
|
736
|
+
expect(await project.issues()).toContainEqual(
|
|
737
|
+
expect.objectContaining({
|
|
738
|
+
package: '@acme/local',
|
|
739
|
+
code: 'integration_error',
|
|
740
|
+
message: expect.stringMatching(/multiple root manifests/),
|
|
741
|
+
}),
|
|
742
|
+
);
|
|
743
|
+
});
|
|
744
|
+
|
|
745
|
+
it('puts the package being authored at its configured position when the config names it', async () => {
|
|
746
|
+
scaffold();
|
|
747
|
+
scaffoldLocalPackage({name: '@acme/local'});
|
|
748
|
+
writeConfig(['@acme/local', '@acme/widgets']);
|
|
749
|
+
|
|
750
|
+
const project = await Project.load(tmpDir);
|
|
751
|
+
|
|
752
|
+
expect(
|
|
753
|
+
project.loadedIntegrations.map(integration => [
|
|
754
|
+
integration.name,
|
|
755
|
+
Boolean(integration.__local),
|
|
756
|
+
]),
|
|
757
|
+
).toEqual([
|
|
758
|
+
['@acme/local', true],
|
|
759
|
+
['@acme/widgets', false],
|
|
760
|
+
]);
|
|
761
|
+
expect(await project.issues()).not.toContainEqual(
|
|
762
|
+
expect.objectContaining({package: '@acme/local', code: 'integration_error'}),
|
|
763
|
+
);
|
|
764
|
+
});
|
|
765
|
+
});
|
|
766
|
+
|
|
518
767
|
describe('Project.issuesUrl routing', () => {
|
|
519
768
|
it('routes core to config.issuesUrl, falling back to the default', async () => {
|
|
520
769
|
scaffold({issuesUrl: 'https://example.com/core'});
|
|
@@ -24,6 +24,24 @@ export function loadAuthoringSelfDocs(sources?: string[], root?: string): Promis
|
|
|
24
24
|
error: string;
|
|
25
25
|
}[];
|
|
26
26
|
}>;
|
|
27
|
+
/**
|
|
28
|
+
* A schema's fields as the table its section prints, each nested field on the
|
|
29
|
+
* row after its parent; null when there are none. A reference block that
|
|
30
|
+
* names some of a schema's fields includes this table of just those.
|
|
31
|
+
* @param {any[]} fields
|
|
32
|
+
* @returns {{type: 'table', headers: string[], rows: string[][]} | null}
|
|
33
|
+
*/
|
|
34
|
+
export function schemaFieldTable(fields: any[]): {
|
|
35
|
+
type: "table";
|
|
36
|
+
headers: string[];
|
|
37
|
+
rows: string[][];
|
|
38
|
+
} | null;
|
|
39
|
+
/**
|
|
40
|
+
* One self-doc as a topic section, keyed by the doc's own name.
|
|
41
|
+
* @param {any} doc
|
|
42
|
+
* @returns {import('../../authoring/doctypes/reference/type').ReferenceSection}
|
|
43
|
+
*/
|
|
44
|
+
export function selfDocSection(doc: any): import("../../authoring/doctypes/reference/type").ReferenceSection;
|
|
27
45
|
/**
|
|
28
46
|
* The `authoring` topic: one section per self-doc, in the order given.
|
|
29
47
|
* @param {any[]} docs
|
|
@@ -17,8 +17,8 @@
|
|
|
17
17
|
|
|
18
18
|
import * as fs from 'node:fs';
|
|
19
19
|
import * as path from 'node:path';
|
|
20
|
-
import {pathToFileURL} from 'node:url';
|
|
21
20
|
import {CLI_ROOT} from '../fs/paths.mjs';
|
|
21
|
+
import {readDocView} from '../doc-compiler/read.mjs';
|
|
22
22
|
import {
|
|
23
23
|
DOC_OUTPUT_BUDGET_BYTES,
|
|
24
24
|
oversizedDocSections,
|
|
@@ -31,6 +31,9 @@ export const AUTHORING_ROOT = path.join(CLI_ROOT, 'authoring');
|
|
|
31
31
|
export const AUTHORING_SELF_DOCS = [
|
|
32
32
|
'integration/integration.doc.mjs',
|
|
33
33
|
'config/config.doc.mjs',
|
|
34
|
+
'debug/debug.doc.mjs',
|
|
35
|
+
'gap-report/gap-report.doc.mjs',
|
|
36
|
+
'discover/discover.doc.mjs',
|
|
34
37
|
'codemod/codemod.doc.mjs',
|
|
35
38
|
'identity/identity.doc.mjs',
|
|
36
39
|
'doctypes/base/graph-fields.doc.mjs',
|
|
@@ -43,6 +46,7 @@ export const AUTHORING_SELF_DOCS = [
|
|
|
43
46
|
'doctypes/reference/reference.doc.mjs',
|
|
44
47
|
'doctypes/schema/schema.doc.mjs',
|
|
45
48
|
'doctypes/template/template.doc.mjs',
|
|
49
|
+
'doctypes/theme/theme.doc.mjs',
|
|
46
50
|
];
|
|
47
51
|
|
|
48
52
|
/** Blocks a self-doc note may carry that a topic section can render. */
|
|
@@ -59,7 +63,8 @@ export function discoverAuthoringSelfDocSources(root = AUTHORING_ROOT) {
|
|
|
59
63
|
/** @param {string} dir */
|
|
60
64
|
const walk = dir => {
|
|
61
65
|
for (const entry of fs.readdirSync(dir, {withFileTypes: true})) {
|
|
62
|
-
if (entry.name === 'node_modules' || entry.name.startsWith('__'))
|
|
66
|
+
if (entry.name === 'node_modules' || entry.name.startsWith('__'))
|
|
67
|
+
continue;
|
|
63
68
|
const full = path.join(dir, entry.name);
|
|
64
69
|
if (entry.isDirectory()) walk(full);
|
|
65
70
|
else if (entry.name.endsWith('.doc.mjs')) {
|
|
@@ -86,9 +91,14 @@ export async function loadAuthoringSelfDocs(
|
|
|
86
91
|
const failed = [];
|
|
87
92
|
for (const source of sources) {
|
|
88
93
|
try {
|
|
89
|
-
const
|
|
90
|
-
|
|
91
|
-
|
|
94
|
+
const doc = await readDocView(path.join(root, source), {
|
|
95
|
+
root: 'self-docs',
|
|
96
|
+
loader: 'native',
|
|
97
|
+
});
|
|
98
|
+
if (
|
|
99
|
+
typeof doc?.name !== 'string' ||
|
|
100
|
+
typeof doc?.description !== 'string'
|
|
101
|
+
) {
|
|
92
102
|
throw new Error('exports no doc with a name and a description');
|
|
93
103
|
}
|
|
94
104
|
loaded.push({source, doc});
|
|
@@ -124,27 +134,40 @@ function fieldRows(fields) {
|
|
|
124
134
|
]);
|
|
125
135
|
}
|
|
126
136
|
|
|
137
|
+
/**
|
|
138
|
+
* A schema's fields as the table its section prints, each nested field on the
|
|
139
|
+
* row after its parent; null when there are none. A reference block that
|
|
140
|
+
* names some of a schema's fields includes this table of just those.
|
|
141
|
+
* @param {any[]} fields
|
|
142
|
+
* @returns {{type: 'table', headers: string[], rows: string[][]} | null}
|
|
143
|
+
*/
|
|
144
|
+
export function schemaFieldTable(fields) {
|
|
145
|
+
const rows = fieldRows(fields);
|
|
146
|
+
return rows.length > 0
|
|
147
|
+
? {
|
|
148
|
+
type: 'table',
|
|
149
|
+
headers: ['Field', 'Type', 'Required', 'Description'],
|
|
150
|
+
rows,
|
|
151
|
+
}
|
|
152
|
+
: null;
|
|
153
|
+
}
|
|
154
|
+
|
|
127
155
|
/**
|
|
128
156
|
* One self-doc as a topic section, keyed by the doc's own name.
|
|
129
157
|
* @param {any} doc
|
|
130
158
|
* @returns {import('../../authoring/doctypes/reference/type').ReferenceSection}
|
|
131
159
|
*/
|
|
132
|
-
function selfDocSection(doc) {
|
|
160
|
+
export function selfDocSection(doc) {
|
|
133
161
|
/** @type {any[]} */
|
|
134
162
|
const content = [{type: 'prose', text: doc.description}];
|
|
135
163
|
if (doc.appliesTo) {
|
|
136
164
|
content.push({type: 'prose', text: `Applies to: ${doc.appliesTo}`});
|
|
137
165
|
}
|
|
138
|
-
const
|
|
139
|
-
if (
|
|
140
|
-
content.push({
|
|
141
|
-
type: 'table',
|
|
142
|
-
headers: ['Field', 'Type', 'Required', 'Description'],
|
|
143
|
-
rows,
|
|
144
|
-
});
|
|
145
|
-
}
|
|
166
|
+
const table = schemaFieldTable(doc.fields ?? []);
|
|
167
|
+
if (table) content.push(table);
|
|
146
168
|
for (const example of doc.examples ?? []) {
|
|
147
|
-
if (typeof example?.code !== 'string' || example.code.trim() === '')
|
|
169
|
+
if (typeof example?.code !== 'string' || example.code.trim() === '')
|
|
170
|
+
continue;
|
|
148
171
|
content.push({
|
|
149
172
|
type: 'code',
|
|
150
173
|
lang: example.lang ?? 'js',
|
|
@@ -9,7 +9,14 @@ import {
|
|
|
9
9
|
buildAuthoringTopic,
|
|
10
10
|
discoverAuthoringSelfDocSources,
|
|
11
11
|
} from './authoring-self-docs.mjs';
|
|
12
|
-
import {
|
|
12
|
+
import {
|
|
13
|
+
GRAPH_BLOCK_TYPES,
|
|
14
|
+
GRAPH_ONLY_FIELDS,
|
|
15
|
+
problemsInTopic,
|
|
16
|
+
} from './docs-discovery.mjs';
|
|
17
|
+
import {doc as graphFieldsDoc} from '../../authoring/doctypes/base/graph-fields.doc.mjs';
|
|
18
|
+
import {doc as namespaceDoc} from '../../authoring/doctypes/namespace/namespace.doc.mjs';
|
|
19
|
+
import {doc as referenceDoc} from '../../authoring/doctypes/reference/reference.doc.mjs';
|
|
13
20
|
import {docs} from '../../api/docs/docs.mjs';
|
|
14
21
|
|
|
15
22
|
const SLOW = 60_000;
|
|
@@ -37,14 +44,74 @@ describe('authoring self-docs', () => {
|
|
|
37
44
|
expect(topic.sections).toHaveLength(AUTHORING_SELF_DOCS.length);
|
|
38
45
|
});
|
|
39
46
|
|
|
40
|
-
it(
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
47
|
+
it(
|
|
48
|
+
'is readable progressively through the docs API',
|
|
49
|
+
async () => {
|
|
50
|
+
const index = await docs('authoring', undefined, {index: true});
|
|
51
|
+
expect(index.type).toBe('docs.index');
|
|
52
|
+
expect(index.data.sections.map(s => s.id)).toContain('integration');
|
|
53
|
+
const section = await docs('authoring', 'integration');
|
|
54
|
+
expect(section.data.title).toBe('Astryx Integration');
|
|
55
|
+
expect(section.data.content.some(block => block.type === 'table')).toBe(
|
|
56
|
+
true,
|
|
57
|
+
);
|
|
58
|
+
},
|
|
59
|
+
SLOW,
|
|
60
|
+
);
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
describe('what the authoring docs say about the docs tree', () => {
|
|
64
|
+
it('marks exactly the fields the docs tree does not read yet', () => {
|
|
65
|
+
const notReadYet = graphFieldsDoc.fields
|
|
66
|
+
.filter(field => /Not read yet/.test(field.description))
|
|
67
|
+
.map(field => field.name);
|
|
68
|
+
// The tree reads `placement` for every guide (spec:AST-046); the other
|
|
69
|
+
// graph fields are still refused by every topic reader.
|
|
70
|
+
expect(notReadYet.sort()).toEqual(
|
|
71
|
+
GRAPH_ONLY_FIELDS.filter(field => field !== 'placement').sort(),
|
|
72
|
+
);
|
|
73
|
+
for (const field of graphFieldsDoc.fields) {
|
|
74
|
+
if (GRAPH_ONLY_FIELDS.includes(field.name)) {
|
|
75
|
+
expect(field.description).toMatch(/fails to load/);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
const placement = graphFieldsDoc.fields.find(f => f.name === 'placement');
|
|
79
|
+
expect(placement.description).toMatch(
|
|
80
|
+
/Read for every guide, the CLI's and each integration's/,
|
|
81
|
+
);
|
|
82
|
+
expect(graphFieldsDoc.description).toMatch(/not built yet/);
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
it('keeps graph blocks behind the separate GraphContentBlock type, and a section takes a reference block', () => {
|
|
86
|
+
const content = referenceDoc.fields
|
|
87
|
+
.flatMap(field => [field, ...(field.fields ?? [])])
|
|
88
|
+
.find(field => field.name === 'sections[].content');
|
|
89
|
+
expect(content.type).toBe('(ReferenceContentBlock | ReferenceDocBlock)[]');
|
|
90
|
+
expect(content.description).toContain('GraphContentBlock');
|
|
91
|
+
for (const type of GRAPH_BLOCK_TYPES) {
|
|
92
|
+
expect(content.description).toContain(type);
|
|
93
|
+
}
|
|
94
|
+
// A section's reference block reads as the doc it includes.
|
|
95
|
+
expect(GRAPH_BLOCK_TYPES.has('reference')).toBe(false);
|
|
96
|
+
expect(content.description).toMatch(
|
|
97
|
+
/A `reference` block .* includes another doc/,
|
|
98
|
+
);
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
it('says where namespace docs live: the CLI tree, and each integration', () => {
|
|
102
|
+
expect(namespaceDoc.description).toMatch(
|
|
103
|
+
/an integration ships its own in its docs directory/,
|
|
104
|
+
);
|
|
105
|
+
expect(
|
|
106
|
+
problemsInTopic({
|
|
107
|
+
...namespaceDoc.examples?.[0],
|
|
108
|
+
type: 'namespace',
|
|
109
|
+
name: 'x',
|
|
110
|
+
}),
|
|
111
|
+
).toEqual([
|
|
112
|
+
'"x" 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.',
|
|
113
|
+
]);
|
|
114
|
+
});
|
|
48
115
|
});
|
|
49
116
|
|
|
50
117
|
describe('auditAuthoringSelfDocs', () => {
|
|
@@ -68,17 +135,25 @@ describe('auditAuthoringSelfDocs', () => {
|
|
|
68
135
|
path.join(root, 'kept', 'forgotten.doc.mjs'),
|
|
69
136
|
"export const doc = {name: 'forgotten', description: 'Not listed.'};\n",
|
|
70
137
|
);
|
|
71
|
-
const audit = await auditAuthoringSelfDocs({
|
|
138
|
+
const audit = await auditAuthoringSelfDocs({
|
|
139
|
+
root,
|
|
140
|
+
sources: ['kept/kept.doc.mjs'],
|
|
141
|
+
});
|
|
72
142
|
expect(audit.unreachable).toEqual(['kept/forgotten.doc.mjs']);
|
|
73
143
|
});
|
|
74
144
|
|
|
75
145
|
it('reports a self-doc that fails to load instead of throwing', async () => {
|
|
76
|
-
fs.writeFileSync(
|
|
146
|
+
fs.writeFileSync(
|
|
147
|
+
path.join(root, 'kept', 'broken.doc.mjs'),
|
|
148
|
+
'export const doc = {;\n',
|
|
149
|
+
);
|
|
77
150
|
const audit = await auditAuthoringSelfDocs({
|
|
78
151
|
root,
|
|
79
152
|
sources: ['kept/kept.doc.mjs', 'kept/broken.doc.mjs'],
|
|
80
153
|
});
|
|
81
|
-
expect(audit.failed.map(entry => entry.source)).toEqual([
|
|
154
|
+
expect(audit.failed.map(entry => entry.source)).toEqual([
|
|
155
|
+
'kept/broken.doc.mjs',
|
|
156
|
+
]);
|
|
82
157
|
expect(audit.sections).toBe(1);
|
|
83
158
|
});
|
|
84
159
|
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
// @generated by scripts/sync-api-types.mjs from the JSDoc in foundation/**/*.mjs.
|
|
2
|
+
// DO NOT EDIT — run `pnpm sync:api-types` to regenerate.
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Every type `@astryxdesign/cli/authoring` exports, in the order index.d.ts
|
|
6
|
+
* lists them, each traced to the module that declares it. A value export that
|
|
7
|
+
* traces to a JavaScript module (a parser) is not a type and is left out;
|
|
8
|
+
* anything else that cannot be traced is reported, never dropped.
|
|
9
|
+
* @param {string} [root]
|
|
10
|
+
* @returns {{
|
|
11
|
+
* types: {name: string, module: string}[],
|
|
12
|
+
* untraced: {name: string, reason: string}[],
|
|
13
|
+
* }} `module` is relative to `root`
|
|
14
|
+
*/
|
|
15
|
+
export function tracePublicAuthoringTypes(root?: string): {
|
|
16
|
+
types: {
|
|
17
|
+
name: string;
|
|
18
|
+
module: string;
|
|
19
|
+
}[];
|
|
20
|
+
untraced: {
|
|
21
|
+
name: string;
|
|
22
|
+
reason: string;
|
|
23
|
+
}[];
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* What stands between each type `@astryxdesign/cli/authoring` exports and a
|
|
27
|
+
* reader of `astryx docs authoring`. A type is readable when a self-doc beside
|
|
28
|
+
* the module that declares it is listed in AUTHORING_SELF_DOCS, loads, and
|
|
29
|
+
* renders a section the topic's index lists. A registered self-doc must
|
|
30
|
+
* document something public: a public type declared beside it, and, when its
|
|
31
|
+
* title is the name of a type declared beside it, that type.
|
|
32
|
+
* @param {{root?: string, sources?: string[], topicKeys?: Set<string> | null}} [options]
|
|
33
|
+
* `topicKeys` are the keys `astryx docs authoring --index` lists; null skips
|
|
34
|
+
* that comparison.
|
|
35
|
+
* @returns {Promise<{
|
|
36
|
+
* types: number,
|
|
37
|
+
* unreadable: {module: string, names: string[], reason: UnreadableReason, source?: string, key?: string}[],
|
|
38
|
+
* untraced: {name: string, reason: string}[],
|
|
39
|
+
* unmatched: {source: string, key?: string, subject?: string}[],
|
|
40
|
+
* }>}
|
|
41
|
+
*/
|
|
42
|
+
export function auditAuthoringSurface({ root, sources, topicKeys, }?: {
|
|
43
|
+
root?: string;
|
|
44
|
+
sources?: string[];
|
|
45
|
+
topicKeys?: Set<string> | null;
|
|
46
|
+
}): Promise<{
|
|
47
|
+
types: number;
|
|
48
|
+
unreadable: {
|
|
49
|
+
module: string;
|
|
50
|
+
names: string[];
|
|
51
|
+
reason: UnreadableReason;
|
|
52
|
+
source?: string;
|
|
53
|
+
key?: string;
|
|
54
|
+
}[];
|
|
55
|
+
untraced: {
|
|
56
|
+
name: string;
|
|
57
|
+
reason: string;
|
|
58
|
+
}[];
|
|
59
|
+
unmatched: {
|
|
60
|
+
source: string;
|
|
61
|
+
key?: string;
|
|
62
|
+
subject?: string;
|
|
63
|
+
}[];
|
|
64
|
+
}>;
|
|
65
|
+
/** The barrel the `types` condition of `@astryxdesign/cli/authoring` names. */
|
|
66
|
+
export const AUTHORING_SURFACE: "index.d.ts";
|
|
67
|
+
export type Tracer = {
|
|
68
|
+
root: string;
|
|
69
|
+
/**
|
|
70
|
+
* top-level statements by absolute path
|
|
71
|
+
*/
|
|
72
|
+
parsed: Map<string, any[]>;
|
|
73
|
+
};
|
|
74
|
+
export type UnreadableReason = "no-self-doc" | "unregistered" | "failed" | "missing-section";
|