@astryxdesign/cli 0.6.3-canary.db4e378 → 0.6.3-canary.db52d98
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 +38 -15
- 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 +14 -7
- package/api/build/build.test.mjs +184 -6
- package/api/build/build.type.d.mts +57 -2
- package/api/build/build.type.mjs +30 -7
- package/api/build/help/help.d.mts +4 -0
- package/api/build/help/help.mjs +24 -11
- 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 +1 -0
- package/api/component/component.mjs +60 -12
- package/api/component/list/list.mjs +3 -2
- package/api/discover/discover.doc.mjs +1 -0
- package/api/docs/_adapter.d.mts +252 -34
- package/api/docs/_adapter.mjs +923 -132
- package/api/docs/detail/detail.mjs +11 -3
- package/api/docs/detail/section/section.mjs +24 -13
- package/api/docs/detail/section/section.test.mjs +15 -6
- package/api/docs/docs.d.mts +5 -3
- package/api/docs/docs.doc.mjs +39 -17
- package/api/docs/docs.mjs +44 -8
- package/api/docs/docs.test.mjs +158 -4
- package/api/docs/docs.type.d.mts +181 -2
- package/api/docs/docs.type.mjs +117 -3
- package/api/docs/index/index.mjs +11 -3
- package/api/docs/index/index.test.mjs +1 -1
- package/api/docs/integration-tree.test.mjs +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 +331 -16
- package/api/doctor/doctor.test.mjs +420 -7
- package/api/gap-report/gap-report.doc.mjs +1 -0
- package/api/hook/_adapter.mjs +19 -5
- package/api/hook/hook.doc.mjs +1 -0
- package/api/hook/list/list.d.mts +1 -1
- package/api/hook/list/list.mjs +69 -17
- package/api/index.d.mts +1 -1
- package/api/index.mjs +1 -0
- package/api/init/init.doc.mjs +2 -1
- package/api/integration/add-contribution.d.mts +2 -1
- package/api/integration/add-contribution.mjs +114 -12
- package/api/integration/add-contribution.test.mjs +174 -3
- 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 +7 -0
- package/api/integration/integrationAddAgentDoc.doc.mjs +1 -0
- package/api/integration/integrationAddCodemod.doc.mjs +1 -0
- package/api/integration/integrationAddComponent.doc.mjs +1 -0
- 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 +34 -0
- package/api/integration/pack-check.test.mjs +138 -47
- package/api/integration/pack-check.type.d.mts +26 -2
- package/api/integration/pack-check.type.mjs +14 -1
- package/api/integration/summarizeIssues.doc.mjs +1 -0
- package/api/integration/template-conflict-compatibility.test.mjs +73 -0
- package/api/integration/validate-integration-fixes.test.mjs +1389 -0
- package/api/integration/validate-integration.mjs +50 -102
- package/api/integration/validate-integration.test.mjs +88 -26
- package/api/integration/validate-unread-theme-folders.test.mjs +110 -0
- package/api/integration/validateIntegration.doc.mjs +2 -1
- package/api/json/assertResponse.doc.mjs +1 -0
- package/api/json/index.ts +2 -0
- package/api/json/isError.doc.mjs +1 -0
- package/api/json/parseResponse.doc.mjs +1 -0
- package/api/layout/_adapter.mjs +20 -5
- package/api/layout/layoutCheck.doc.mjs +1 -0
- package/api/layout/layoutExpand.doc.mjs +1 -0
- package/api/layout/layoutGrammar.doc.mjs +1 -0
- package/api/search/search.d.mts +59 -1
- package/api/search/search.doc.mjs +5 -3
- package/api/search/search.mjs +458 -77
- package/api/search/search.test.mjs +91 -2
- package/api/search/search.type.d.mts +13 -1
- package/api/search/search.type.mjs +4 -1
- package/api/swizzle/swizzle.doc.mjs +1 -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 +28 -7
- package/api/template/template.mjs +45 -8
- package/api/template/template.type.d.mts +6 -8
- package/api/template/template.type.mjs +3 -2
- package/api/theme/_adapter.d.mts +2 -3
- package/api/theme/_adapter.mjs +4 -5
- package/api/theme/add/add.binary.test.mjs +10 -17
- package/api/theme/add/add.test.mjs +14 -1
- 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/template/template.test.mjs +5 -0
- package/api/theme/themeAdd.doc.mjs +4 -3
- package/api/theme/themeBuild.doc.mjs +1 -0
- 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 +2 -1
- package/api/upgrade/_adapter.d.mts +32 -5
- package/api/upgrade/_adapter.mjs +97 -69
- package/api/upgrade/provider-agreement.test.mjs +152 -0
- package/api/upgrade/run/run.mjs +356 -59
- package/api/upgrade/upgrade.doc.mjs +6 -1
- package/api/upgrade/upgrade.type.d.mts +34 -0
- package/api/upgrade/upgrade.type.mjs +15 -0
- package/assets/codemods/__tests__/runner.test.mjs +330 -8
- package/assets/codemods/integration-discovery.mjs +8 -2
- package/assets/codemods/integration-discovery.test.mjs +15 -0
- package/assets/codemods/integration-runner.mjs +56 -4
- package/assets/codemods/integration-runner.protection.test.mjs +153 -0
- package/assets/codemods/run-codemod.mjs +177 -34
- package/assets/codemods/runner.mjs +350 -102
- package/assets/codemods/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/docs/getting-started.doc.mjs +2 -2
- 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 +3 -3
- 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} +66 -38
- 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 +3 -3
- 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/Item/ItemDocumentTabs.doc.mjs +14 -0
- package/assets/templates/blocks/components/Item/ItemDocumentTabs.tsx +100 -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/themes/butter/butterTheme.doc.mjs +11 -0
- package/assets/templates/themes/chocolate/chocolateTheme.doc.mjs +11 -0
- package/assets/templates/themes/gothic/gothicTheme.doc.mjs +11 -0
- package/assets/templates/themes/matcha/matchaTheme.doc.mjs +11 -0
- package/assets/templates/themes/neutral/neutralTheme.doc.mjs +11 -0
- package/assets/templates/themes/stone/stoneTheme.doc.mjs +11 -0
- package/assets/templates/themes/y2k/y2kTheme.doc.mjs +11 -0
- package/authoring/codemod/codemod.doc.mjs +1 -1
- package/authoring/codemod/type.ts +12 -0
- package/authoring/config/config.doc.mjs +1 -1
- package/authoring/debug/debug.doc.d.mts +11 -0
- package/authoring/debug/debug.doc.mjs +182 -0
- package/authoring/debug/parse.d.mts +3 -3
- package/authoring/doctypes/_schema.d.mts +119 -117
- package/authoring/doctypes/_schema.mjs +54 -3
- package/authoring/doctypes/base/graph-fields.doc.mjs +8 -6
- package/authoring/doctypes/base/type.ts +6 -5
- package/authoring/doctypes/command/command.doc.mjs +1 -1
- package/authoring/doctypes/command/type.ts +2 -2
- package/authoring/doctypes/component/type.ts +2 -2
- package/authoring/doctypes/doctypes-new.test.mjs +48 -6
- package/authoring/doctypes/enum/enum.doc.mjs +1 -1
- package/authoring/doctypes/enum/type.ts +1 -1
- package/authoring/doctypes/function/function.doc.mjs +3 -2
- package/authoring/doctypes/function/type.ts +3 -2
- package/authoring/doctypes/hook/type.ts +2 -2
- package/authoring/doctypes/load-contract.test.mjs +28 -2
- package/authoring/doctypes/namespace/namespace.doc.mjs +6 -10
- package/authoring/doctypes/namespace/parse.test.mjs +23 -25
- package/authoring/doctypes/namespace/type.ts +5 -2
- package/authoring/doctypes/parse.d.mts +4 -2
- package/authoring/doctypes/parse.mjs +10 -5
- package/authoring/doctypes/reference/reference.doc.mjs +35 -6
- package/authoring/doctypes/reference/type.ts +30 -13
- package/authoring/doctypes/schema/schema.doc.mjs +1 -1
- package/authoring/doctypes/schema/type.ts +1 -2
- package/authoring/doctypes/template/parse.d.mts +2 -0
- package/authoring/doctypes/template/parse.mjs +4 -0
- package/authoring/doctypes/template/parse.test.mjs +18 -0
- package/authoring/doctypes/template/template.doc.mjs +9 -3
- package/authoring/doctypes/template/type.ts +8 -0
- package/authoring/doctypes/theme/parse.d.mts +35 -0
- package/authoring/doctypes/theme/parse.mjs +76 -0
- package/authoring/doctypes/theme/theme.doc.d.mts +9 -0
- package/authoring/doctypes/theme/theme.doc.mjs +79 -0
- package/authoring/doctypes/theme/type.ts +42 -0
- package/authoring/doctypes/types.ts +2 -1
- package/authoring/gap-report/gap-report.doc.d.mts +12 -0
- package/authoring/gap-report/gap-report.doc.mjs +183 -0
- package/authoring/identity/identity.doc.mjs +2 -2
- package/authoring/index.d.mts +1 -0
- package/authoring/index.d.ts +7 -4
- package/authoring/index.mjs +2 -1
- package/authoring/integration/integration.doc.mjs +2 -2
- package/authoring/integration/type.ts +4 -10
- package/clients/cli/__tests__/cliManifest.test.ts +27 -29
- package/clients/cli/commands/blog.doc.mjs +1 -1
- package/clients/cli/commands/build-theme.adaptations.test.mjs +100 -1
- package/clients/cli/commands/build-theme.mjs +11 -45
- package/clients/cli/commands/build.doc.mjs +12 -7
- package/clients/cli/commands/build.mjs +105 -67
- package/clients/cli/commands/build.text-fields.test.mjs +41 -0
- package/clients/cli/commands/component/index.mjs +1 -1
- package/clients/cli/commands/component-ownership.test.mjs +3 -3
- package/clients/cli/commands/component.doc.mjs +1 -1
- package/clients/cli/commands/discover.broken-integration.test.mjs +7 -8
- package/clients/cli/commands/discover.doc.mjs +1 -1
- package/clients/cli/commands/discover.mjs +1 -1
- 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.test.mjs +90 -8
- package/clients/cli/commands/doctor.doc.mjs +1 -1
- package/clients/cli/commands/doctor.mjs +53 -16
- package/clients/cli/commands/gap-report.doc.mjs +1 -1
- package/clients/cli/commands/hook.doc.mjs +1 -1
- package/clients/cli/commands/init.doc.mjs +1 -1
- package/clients/cli/commands/integration-add.controls.test.mjs +1 -1
- package/clients/cli/commands/integration-add.doc.mjs +11 -1
- 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/layout-check.doc.mjs +1 -1
- package/clients/cli/commands/layout-expand.doc.mjs +1 -1
- package/clients/cli/commands/layout-grammar.doc.mjs +1 -1
- package/clients/cli/commands/layout.doc.mjs +1 -1
- package/clients/cli/commands/manifest.doc.mjs +1 -1
- package/clients/cli/commands/search.doc.mjs +1 -1
- package/clients/cli/commands/search.mjs +11 -2
- package/clients/cli/commands/setup-nudge.test.mjs +6 -0
- package/clients/cli/commands/swizzle.doc.mjs +1 -1
- package/clients/cli/commands/template.doc.mjs +24 -7
- package/clients/cli/commands/template.mjs +4 -91
- package/clients/cli/commands/text-json-parity.test.mjs +719 -0
- package/clients/cli/commands/theme-add.doc.mjs +2 -2
- package/clients/cli/commands/theme-build.doc.mjs +1 -1
- 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.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.doc.mjs +1 -1
- package/clients/cli/commands/theme.doc.mjs +1 -1
- package/clients/cli/commands/upgrade.doc.mjs +3 -2
- package/clients/cli/commands/upgrade.file-protection.test.mjs +228 -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 +8 -0
- package/clients/cli/lib/hook-format.mjs +14 -5
- package/clients/cli/lib/manifest.mjs +9 -2
- package/foundation/agent-docs/agent-docs.d.mts +3 -2
- package/foundation/agent-docs/agent-docs.mjs +13 -9
- package/foundation/agent-docs/agent-docs.test.mjs +19 -1
- package/foundation/config/project-themes.test.mjs +11 -19
- package/foundation/config/project.d.mts +20 -11
- package/foundation/config/project.mjs +123 -80
- package/foundation/config/project.test.mjs +144 -21
- package/foundation/discovery/authoring-self-docs.d.mts +18 -0
- package/foundation/discovery/authoring-self-docs.mjs +37 -15
- package/foundation/discovery/authoring-self-docs.test.mjs +25 -9
- package/foundation/discovery/authoring-surface.d.mts +74 -0
- package/foundation/discovery/authoring-surface.mjs +525 -0
- package/foundation/discovery/authoring-surface.test.mjs +392 -0
- package/foundation/discovery/cli-self-docs.d.mts +119 -0
- package/foundation/discovery/cli-self-docs.mjs +490 -0
- package/foundation/discovery/cli-self-docs.test.mjs +375 -0
- package/foundation/discovery/component-discovery.d.mts +38 -0
- package/foundation/discovery/component-discovery.mjs +48 -0
- package/foundation/discovery/component-loader.d.mts +35 -38
- package/foundation/discovery/component-loader.mjs +53 -222
- package/foundation/discovery/docs-discovery.d.mts +112 -11
- package/foundation/discovery/docs-discovery.mjs +231 -36
- package/foundation/discovery/docs-discovery.test.mjs +111 -32
- package/foundation/discovery/docs-output-budget.d.mts +2 -2
- package/foundation/discovery/docs-output-budget.mjs +1 -1
- package/foundation/discovery/docs-section-key.d.mts +28 -10
- package/foundation/discovery/docs-section-key.mjs +134 -33
- package/foundation/discovery/docs-section-key.test.mjs +41 -19
- package/foundation/discovery/template-adapter.d.mts +99 -6
- package/foundation/discovery/template-adapter.mjs +480 -57
- 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/doc-compiler/bundle.d.mts +47 -0
- package/foundation/doc-compiler/bundle.mjs +278 -0
- package/foundation/doc-compiler/bundle.test.mjs +266 -0
- package/foundation/doc-compiler/compile.d.mts +220 -39
- package/foundation/doc-compiler/compile.mjs +311 -15
- package/foundation/doc-compiler/diagnostics.d.mts +126 -0
- package/foundation/doc-compiler/diagnostics.mjs +305 -0
- package/foundation/doc-compiler/doc-compiler.test.mjs +28 -1
- package/foundation/doc-compiler/doc-loads.test.mjs +1642 -0
- package/foundation/doc-compiler/import.d.mts +24 -0
- package/foundation/doc-compiler/import.mjs +59 -0
- package/foundation/doc-compiler/inputs.d.mts +102 -0
- package/foundation/doc-compiler/inputs.mjs +291 -0
- package/foundation/doc-compiler/inputs.test.mjs +299 -0
- package/foundation/doc-compiler/ir.d.mts +13 -0
- package/foundation/doc-compiler/ir.mjs +196 -12
- package/foundation/doc-compiler/lenses.d.mts +8 -5
- package/foundation/doc-compiler/lenses.mjs +50 -4
- 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/integrations/autolink.d.mts +58 -1
- package/foundation/integrations/autolink.mjs +143 -57
- 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 +3 -0
- package/foundation/integrations/integrations.mjs +11 -97
- package/foundation/integrations/provider-ledger.test.mjs +275 -0
- package/foundation/integrations/provider-resolution.d.mts +152 -0
- package/foundation/integrations/provider-resolution.mjs +576 -0
- package/foundation/integrations/provider-resolution.test.mjs +369 -0
- package/foundation/integrations/theme-descriptor.d.mts +8 -0
- package/foundation/integrations/theme-descriptor.mjs +44 -0
- package/foundation/integrations/validate-contributions.mjs +121 -29
- package/foundation/response/error-codes.d.mts +3 -1
- package/foundation/response/error-codes.d.ts +2 -0
- package/foundation/response/error-codes.doc.mjs +12 -2
- package/foundation/response/error-codes.mjs +7 -1
- package/foundation/response/error-codes.test.mjs +55 -11
- package/foundation/response/response-types.doc.d.mts +5 -1
- package/foundation/response/response-types.doc.mjs +20 -11
- 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.mjs +1 -1
- package/foundation/xle/xle.test.mjs +13 -0
- package/package.json +10 -9
- package/assets/templates/themes/manifest.json +0 -95
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @file Theme doc parser (stamped `type: 'theme'`). Zod is sealed here;
|
|
5
|
+
* theme discovery calls `parseTheme` at the descriptor load boundary.
|
|
6
|
+
*
|
|
7
|
+
* @input an unknown loaded or statically extracted theme descriptor
|
|
8
|
+
* @output a validated ThemeDoc or a readable schema error
|
|
9
|
+
* @position packages/cli/authoring/doctypes/theme — descriptor load boundary
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import {z} from 'zod';
|
|
13
|
+
import {formatZodError} from '../../_shared/errors.mjs';
|
|
14
|
+
|
|
15
|
+
/** @typedef {import('./type.js').ThemeDoc} ThemeDoc */
|
|
16
|
+
|
|
17
|
+
/** @param {string} field */
|
|
18
|
+
const nonBlank = field =>
|
|
19
|
+
z.string().refine(value => value.trim() !== '', {
|
|
20
|
+
message: `${field} must not be blank`,
|
|
21
|
+
abort: true,
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
const themeDocSchema = z
|
|
25
|
+
.object({
|
|
26
|
+
type: z.literal('theme'),
|
|
27
|
+
name: nonBlank('name').regex(
|
|
28
|
+
/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/u,
|
|
29
|
+
'name must be lowercase kebab-case starting with a letter',
|
|
30
|
+
),
|
|
31
|
+
displayName: nonBlank('displayName'),
|
|
32
|
+
// Blank is allowed, as the released catalog allowed it.
|
|
33
|
+
description: z.string(),
|
|
34
|
+
maintained: z.boolean(),
|
|
35
|
+
})
|
|
36
|
+
.strict();
|
|
37
|
+
|
|
38
|
+
/** Zod skips `__proto__` when it looks for unknown keys. */
|
|
39
|
+
const PROTO_KEY_ISSUE = {
|
|
40
|
+
code: /** @type {const} */ ('unrecognized_keys'),
|
|
41
|
+
keys: ['__proto__'],
|
|
42
|
+
path: [],
|
|
43
|
+
message: 'Unrecognized key: "__proto__"',
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Compile-time drift lock: the sealed schema must infer exactly ThemeDoc.
|
|
48
|
+
*
|
|
49
|
+
* @typedef {import('../../_shared/contract.js').Expect<
|
|
50
|
+
* import('../../_shared/contract.js').Equal<
|
|
51
|
+
* z.infer<typeof themeDocSchema>,
|
|
52
|
+
* ThemeDoc
|
|
53
|
+
* >
|
|
54
|
+
* >} _ThemeDocDriftLock
|
|
55
|
+
*/
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Validate an unknown value as a theme descriptor, or throw.
|
|
59
|
+
*
|
|
60
|
+
* @param {unknown} input
|
|
61
|
+
* @param {string} [label]
|
|
62
|
+
* @returns {ThemeDoc}
|
|
63
|
+
*/
|
|
64
|
+
export function parseTheme(input, label = 'theme') {
|
|
65
|
+
const result = themeDocSchema.safeParse(input);
|
|
66
|
+
const protoKey =
|
|
67
|
+
input !== null &&
|
|
68
|
+
typeof input === 'object' &&
|
|
69
|
+
Object.hasOwn(input, '__proto__');
|
|
70
|
+
if (result.success && !protoKey) return result.data;
|
|
71
|
+
const issues = [
|
|
72
|
+
...(result.error?.issues ?? []),
|
|
73
|
+
...(protoKey ? [PROTO_KEY_ISSUE] : []),
|
|
74
|
+
];
|
|
75
|
+
throw new Error(formatZodError(label, new z.ZodError(issues)));
|
|
76
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// @generated by scripts/sync-api-types.mjs from the JSDoc in authoring/**/*.mjs.
|
|
2
|
+
// DO NOT EDIT — run `pnpm sync:api-types` to regenerate.
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @file SchemaDoc for the ThemeDoc authoring type.
|
|
6
|
+
* @position packages/cli/authoring/doctypes/theme — doc-type documentation
|
|
7
|
+
*/
|
|
8
|
+
/** @type {import('@astryxdesign/cli/authoring').SchemaDoc} */
|
|
9
|
+
export const doc: import("@astryxdesign/cli/authoring").SchemaDoc;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @file SchemaDoc for the ThemeDoc authoring type.
|
|
5
|
+
* @position packages/cli/authoring/doctypes/theme — doc-type documentation
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/** @type {import('@astryxdesign/cli/authoring').SchemaDoc} */
|
|
9
|
+
export const doc = {
|
|
10
|
+
type: 'schema',
|
|
11
|
+
name: 'theme-doc',
|
|
12
|
+
displayName: 'ThemeDoc',
|
|
13
|
+
namespace: 'authoring',
|
|
14
|
+
description:
|
|
15
|
+
'The strongly typed descriptor for one integration or CLI-bundled source theme.',
|
|
16
|
+
appliesTo: '<theme-source-stem>.doc.mjs',
|
|
17
|
+
fields: [
|
|
18
|
+
{
|
|
19
|
+
name: 'type',
|
|
20
|
+
type: "'theme'",
|
|
21
|
+
description: 'Doc-kind discriminant.',
|
|
22
|
+
required: true,
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
name: 'name',
|
|
26
|
+
type: 'string',
|
|
27
|
+
description:
|
|
28
|
+
'Lower-kebab CLI theme identity. Must match the descriptor parent directory.',
|
|
29
|
+
required: true,
|
|
30
|
+
example: "'ocean'",
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
name: 'displayName',
|
|
34
|
+
type: 'string',
|
|
35
|
+
description: 'Human-readable name shown by theme listings.',
|
|
36
|
+
required: true,
|
|
37
|
+
example: "'Ocean'",
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
name: 'description',
|
|
41
|
+
type: 'string',
|
|
42
|
+
description: 'One-line summary shown by theme listings.',
|
|
43
|
+
required: true,
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
name: 'maintained',
|
|
47
|
+
type: 'boolean',
|
|
48
|
+
description: 'Whether the owning package actively maintains this theme.',
|
|
49
|
+
required: true,
|
|
50
|
+
},
|
|
51
|
+
],
|
|
52
|
+
examples: [
|
|
53
|
+
{
|
|
54
|
+
label: 'A theme descriptor beside oceanTheme.ts',
|
|
55
|
+
code: `/** @type {import('@astryxdesign/cli/authoring').ThemeDoc} */
|
|
56
|
+
export default {
|
|
57
|
+
type: 'theme',
|
|
58
|
+
name: 'ocean',
|
|
59
|
+
displayName: 'Ocean',
|
|
60
|
+
description: 'Cool blue surfaces with crisp contrast.',
|
|
61
|
+
maintained: true,
|
|
62
|
+
};`,
|
|
63
|
+
},
|
|
64
|
+
],
|
|
65
|
+
notes: [
|
|
66
|
+
{
|
|
67
|
+
type: 'prose',
|
|
68
|
+
text: 'ThemeDoc is static metadata. Default-export one object with literal string and boolean fields; discovery validates it without executing the descriptor or theme source.',
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
type: 'prose',
|
|
72
|
+
text: 'The descriptor and source share one stem. For oceanTheme.doc.mjs, discovery requires exactly one oceanTheme source module and a named oceanTheme runtime export.',
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
type: 'prose',
|
|
76
|
+
text: 'The parent theme directory, including this descriptor, is the complete copy and pack boundary. Nested source, palettes, assets, and receipts need no second file list.',
|
|
77
|
+
},
|
|
78
|
+
],
|
|
79
|
+
};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @file Theme contribution descriptor type.
|
|
5
|
+
*
|
|
6
|
+
* A theme descriptor is a strongly typed `.doc.mjs` beside its same-stem theme
|
|
7
|
+
* source. The shared stem identifies the source entry and required named runtime
|
|
8
|
+
* export. The lower-kebab parent directory and `name` identify the CLI theme.
|
|
9
|
+
*
|
|
10
|
+
* @input metadata authored beside one source theme
|
|
11
|
+
* @output the public ThemeDoc contract
|
|
12
|
+
* @position packages/cli/authoring/doctypes/theme — theme descriptor vocabulary
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* The descriptor for one source theme contributed by an integration or bundled
|
|
17
|
+
* with the CLI.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```
|
|
21
|
+
* /** @type {import('@astryxdesign/cli/authoring').ThemeDoc} *\/
|
|
22
|
+
* export default {
|
|
23
|
+
* type: 'theme',
|
|
24
|
+
* name: 'ocean',
|
|
25
|
+
* displayName: 'Ocean',
|
|
26
|
+
* description: 'Cool blue surfaces with crisp contrast.',
|
|
27
|
+
* maintained: true,
|
|
28
|
+
* };
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export interface ThemeDoc {
|
|
32
|
+
/** Doc-kind discriminant. */
|
|
33
|
+
type: 'theme';
|
|
34
|
+
/** Stable CLI identity. Must be lower-kebab and match the parent directory. */
|
|
35
|
+
name: string;
|
|
36
|
+
/** Human-readable name shown by theme listings. */
|
|
37
|
+
displayName: string;
|
|
38
|
+
/** One-line summary shown by theme listings. */
|
|
39
|
+
description: string;
|
|
40
|
+
/** Whether the owning package actively maintains this theme. */
|
|
41
|
+
maintained: boolean;
|
|
42
|
+
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
/**
|
|
4
4
|
* @file Doc-type vocabulary barrel. Each kind's types live in one `type.ts`
|
|
5
5
|
* under its folder (`base/` shared leaves, then `component/`, `hook/`,
|
|
6
|
-
* `reference/`, `template/`); this re-exports them as the full doc vocabulary
|
|
6
|
+
* `reference/`, `template/`, `theme/`); this re-exports them as the full doc vocabulary
|
|
7
7
|
* behind `@astryxdesign/cli/authoring`.
|
|
8
8
|
*/
|
|
9
9
|
|
|
@@ -17,3 +17,4 @@ export type * from './template/type.js';
|
|
|
17
17
|
export type * from './schema/type.js';
|
|
18
18
|
export type * from './command/type.js';
|
|
19
19
|
export type * from './enum/type.js';
|
|
20
|
+
export type * from './theme/type.js';
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// @generated by scripts/sync-api-types.mjs from the JSDoc in authoring/**/*.mjs.
|
|
2
|
+
// DO NOT EDIT — run `pnpm sync:api-types` to regenerate.
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @file SchemaDoc for GapReportHandler, the handler `astryx gap-report` calls.
|
|
6
|
+
* @input The GapReportHandler type beside it (`type.ts`), which `parse.mjs`
|
|
7
|
+
* validates.
|
|
8
|
+
* @output The `gap-report-handler` section of `astryx docs authoring`.
|
|
9
|
+
* @position packages/cli/authoring/gap-report — schema documentation
|
|
10
|
+
*/
|
|
11
|
+
/** @type {import('@astryxdesign/cli/authoring').SchemaDoc} */
|
|
12
|
+
export const doc: import("@astryxdesign/cli/authoring").SchemaDoc;
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @file SchemaDoc for GapReportHandler, the handler `astryx gap-report` calls.
|
|
5
|
+
* @input The GapReportHandler type beside it (`type.ts`), which `parse.mjs`
|
|
6
|
+
* validates.
|
|
7
|
+
* @output The `gap-report-handler` section of `astryx docs authoring`.
|
|
8
|
+
* @position packages/cli/authoring/gap-report — schema documentation
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/** @type {import('@astryxdesign/cli/authoring').SchemaDoc} */
|
|
12
|
+
export const doc = {
|
|
13
|
+
type: 'schema',
|
|
14
|
+
name: 'gap-report-handler',
|
|
15
|
+
displayName: 'GapReportHandler',
|
|
16
|
+
namespace: 'authoring',
|
|
17
|
+
description:
|
|
18
|
+
'A handler for `astryx gap-report`: a plain object with an `audience` and a `handle` function. Set it as `gapReport` in astryx.config, or export it as `gapReport` from an integration manifest. Every handler runs: the project handler first, then each integration handler in config order.',
|
|
19
|
+
appliesTo:
|
|
20
|
+
'`gapReport` in astryx.config.*, or the `gapReport` named export of astryx.integration.*',
|
|
21
|
+
fields: [
|
|
22
|
+
{
|
|
23
|
+
name: 'audience',
|
|
24
|
+
type: "'internal' | 'public'",
|
|
25
|
+
description:
|
|
26
|
+
'Whether the destination is internal to your organization or public. A public handler runs only when the caller agrees; an internal handler always runs.',
|
|
27
|
+
required: true,
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
name: 'handle',
|
|
31
|
+
type: '(report: GapReport, context: GapReportHandlerContext) => GapReportHandlerReceipt | Promise<GapReportHandlerReceipt>',
|
|
32
|
+
description:
|
|
33
|
+
'Gets the report and returns a receipt. It can be async, and the CLI waits at most 30 seconds for it. A throw, a timeout, or an invalid receipt is a failed delivery, and the other handlers still run.',
|
|
34
|
+
required: true,
|
|
35
|
+
fields: [
|
|
36
|
+
{
|
|
37
|
+
name: 'report',
|
|
38
|
+
type: 'GapReport',
|
|
39
|
+
description: 'The report. Each handler gets its own copy.',
|
|
40
|
+
required: true,
|
|
41
|
+
fields: [
|
|
42
|
+
{
|
|
43
|
+
name: 'report.schemaVersion',
|
|
44
|
+
type: '1',
|
|
45
|
+
description: 'Version of the report shape.',
|
|
46
|
+
required: true,
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
name: 'report.component',
|
|
50
|
+
type: 'string',
|
|
51
|
+
description: 'The component the gap is about.',
|
|
52
|
+
required: true,
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
name: 'report.category',
|
|
56
|
+
type: 'GapReportCategory',
|
|
57
|
+
description:
|
|
58
|
+
"The kind of gap: 'missing_component', 'missing_variant', 'layout_gap', 'styling_gap', 'a11y_gap', 'api_friction', 'docs_gap', or 'other'.",
|
|
59
|
+
required: true,
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
name: 'report.categoryLabel',
|
|
63
|
+
type: 'string',
|
|
64
|
+
description: 'A readable name for the category.',
|
|
65
|
+
required: true,
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
name: 'report.intention',
|
|
69
|
+
type: 'string',
|
|
70
|
+
description: 'What the caller was trying to do.',
|
|
71
|
+
required: true,
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
name: 'report.detail',
|
|
75
|
+
type: 'string',
|
|
76
|
+
description: 'More detail, when the caller gave some.',
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
name: 'report.source',
|
|
80
|
+
type: 'DebugInvocationSource',
|
|
81
|
+
description:
|
|
82
|
+
"Who sent the report: 'human', 'ai', 'automation', or 'unknown'.",
|
|
83
|
+
required: true,
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
name: 'report.timestamp',
|
|
87
|
+
type: 'string',
|
|
88
|
+
description: 'When the report was sent, as ISO 8601.',
|
|
89
|
+
required: true,
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
name: 'report.target',
|
|
93
|
+
type: 'GapReportTarget',
|
|
94
|
+
description: 'The package the report is about.',
|
|
95
|
+
required: true,
|
|
96
|
+
fields: [
|
|
97
|
+
{
|
|
98
|
+
name: 'report.target.package',
|
|
99
|
+
type: 'string',
|
|
100
|
+
description: 'The package name.',
|
|
101
|
+
required: true,
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
name: 'report.target.version',
|
|
105
|
+
type: 'string',
|
|
106
|
+
description:
|
|
107
|
+
'The installed version. Null when it is not known.',
|
|
108
|
+
required: true,
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
name: 'report.target.issuesUrl',
|
|
112
|
+
type: 'string',
|
|
113
|
+
description:
|
|
114
|
+
'Where the package takes issues. Null when it does not say.',
|
|
115
|
+
required: true,
|
|
116
|
+
},
|
|
117
|
+
],
|
|
118
|
+
},
|
|
119
|
+
],
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
name: 'context',
|
|
123
|
+
type: 'GapReportHandlerContext',
|
|
124
|
+
description: 'The context of this call.',
|
|
125
|
+
required: true,
|
|
126
|
+
fields: [
|
|
127
|
+
{
|
|
128
|
+
name: 'context.signal',
|
|
129
|
+
type: 'AbortSignal',
|
|
130
|
+
description: 'Aborted when the handler runs past 30 seconds.',
|
|
131
|
+
required: true,
|
|
132
|
+
},
|
|
133
|
+
],
|
|
134
|
+
},
|
|
135
|
+
],
|
|
136
|
+
},
|
|
137
|
+
],
|
|
138
|
+
examples: [
|
|
139
|
+
{
|
|
140
|
+
label: 'A project handler in astryx.config',
|
|
141
|
+
code:
|
|
142
|
+
'export default {\n' +
|
|
143
|
+
' gapReport: {\n' +
|
|
144
|
+
" audience: 'internal',\n" +
|
|
145
|
+
' async handle(report, {signal}) {\n' +
|
|
146
|
+
' const url = await fileIssue(report, {signal});\n' +
|
|
147
|
+
" return {status: 'filed', url};\n" +
|
|
148
|
+
' },\n' +
|
|
149
|
+
' },\n' +
|
|
150
|
+
'};',
|
|
151
|
+
},
|
|
152
|
+
],
|
|
153
|
+
notes: [
|
|
154
|
+
{
|
|
155
|
+
type: 'table',
|
|
156
|
+
headers: ['Receipt field', 'Type', 'Required', 'Description'],
|
|
157
|
+
rows: [
|
|
158
|
+
[
|
|
159
|
+
'status',
|
|
160
|
+
"'filed' | 'routed_only' | 'skipped'",
|
|
161
|
+
'yes',
|
|
162
|
+
"'filed': the handler created or queued the report. 'routed_only': it points to a place to file the report, and must return `url`. 'skipped': it chose not to act, for example on a duplicate.",
|
|
163
|
+
],
|
|
164
|
+
[
|
|
165
|
+
'url',
|
|
166
|
+
'string',
|
|
167
|
+
'no',
|
|
168
|
+
'An http or https URL. Required when status is routed_only.',
|
|
169
|
+
],
|
|
170
|
+
[
|
|
171
|
+
'message',
|
|
172
|
+
'string',
|
|
173
|
+
'no',
|
|
174
|
+
'A readable message of at most 2000 characters.',
|
|
175
|
+
],
|
|
176
|
+
],
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
type: 'prose',
|
|
180
|
+
text: 'The receipt is strict: an unknown field, a URL that is not http or https, or a filed or routed_only receipt with neither `url` nor `message` is invalid.',
|
|
181
|
+
},
|
|
182
|
+
],
|
|
183
|
+
};
|
|
@@ -12,9 +12,9 @@ export const doc = {
|
|
|
12
12
|
displayName: 'Provider and artifact identity',
|
|
13
13
|
namespace: 'authoring',
|
|
14
14
|
description:
|
|
15
|
-
'Separates stable provider/artifact identity from package instances and runtime lifecycle state.
|
|
15
|
+
'Separates stable provider/artifact identity from package instances and runtime lifecycle state. Provider identity names integration manifests and settles provider conflicts. Docs-tree nodes are identified by doc identity; the tree covers the CLI\'s own docs. Artifact, instance, and compiler-input identities are defined for every provider-owned artifact; no command reads them.',
|
|
16
16
|
appliesTo:
|
|
17
|
-
'Integration manifests
|
|
17
|
+
'Integration manifests, provider conflicts, and docs-tree node ids.',
|
|
18
18
|
fields: [
|
|
19
19
|
{
|
|
20
20
|
name: 'ProviderId',
|
package/authoring/index.d.mts
CHANGED
|
@@ -15,5 +15,6 @@ export { parseSchema } from "./doctypes/schema/parse.mjs";
|
|
|
15
15
|
export { parseCommand } from "./doctypes/command/parse.mjs";
|
|
16
16
|
export { parseEnum } from "./doctypes/enum/parse.mjs";
|
|
17
17
|
export { parseNamespace } from "./doctypes/namespace/parse.mjs";
|
|
18
|
+
export { parseTheme } from "./doctypes/theme/parse.mjs";
|
|
18
19
|
export { parseLegacyDoc } from "./doctypes/legacy.mjs";
|
|
19
20
|
export { parseGapReportHandler, parseGapReportReceipt } from "./gap-report/parse.mjs";
|
package/authoring/index.d.ts
CHANGED
|
@@ -23,15 +23,16 @@
|
|
|
23
23
|
// ═══════════════════════════════════════════════════════════════════════
|
|
24
24
|
// AUTHOR THESE — each is the default export of one authored file.
|
|
25
25
|
// ═══════════════════════════════════════════════════════════════════════
|
|
26
|
-
export type {ComponentDoc} from './doctypes/types.js'; // Button.doc.
|
|
27
|
-
export type {HookDoc} from './doctypes/types.js'; // useToast.doc.
|
|
26
|
+
export type {ComponentDoc} from './doctypes/types.js'; // Button.doc.mjs
|
|
27
|
+
export type {HookDoc} from './doctypes/types.js'; // useToast.doc.mjs
|
|
28
28
|
export type {FunctionDoc} from './doctypes/types.js'; // search.doc.mjs (hook | api)
|
|
29
|
-
export type {ReferenceDoc} from './doctypes/types.js'; // theming.doc.
|
|
30
|
-
export type {TemplateDoc} from './doctypes/types.js'; // Foo.
|
|
29
|
+
export type {ReferenceDoc} from './doctypes/types.js'; // theming.doc.mjs
|
|
30
|
+
export type {TemplateDoc} from './doctypes/types.js'; // Foo.doc.mjs
|
|
31
31
|
export type {SchemaDoc} from './doctypes/types.js'; // config.doc.mjs (object shape)
|
|
32
32
|
export type {CommandDoc} from './doctypes/types.js'; // search.doc.mjs (CLI command)
|
|
33
33
|
export type {EnumDoc} from './doctypes/types.js'; // error-codes.doc.mjs (vocabulary)
|
|
34
34
|
export type {NamespaceDoc} from './doctypes/types.js'; // cli.doc.mjs (hierarchy)
|
|
35
|
+
export type {ThemeDoc} from './doctypes/types.js'; // oceanTheme.doc.mjs
|
|
35
36
|
export type {AstryxConfig} from './config/type.js'; // astryx.config.{ts,mjs}
|
|
36
37
|
export type {DebugEvent} from './debug/type.js'; // one recorded CLI run
|
|
37
38
|
export type {AstryxIntegration} from './integration/type.js'; // astryx.integration.{ts,mjs}
|
|
@@ -58,6 +59,7 @@ export {parseSchema} from './doctypes/schema/parse.mjs';
|
|
|
58
59
|
export {parseCommand} from './doctypes/command/parse.mjs';
|
|
59
60
|
export {parseEnum} from './doctypes/enum/parse.mjs';
|
|
60
61
|
export {parseNamespace} from './doctypes/namespace/parse.mjs';
|
|
62
|
+
export {parseTheme} from './doctypes/theme/parse.mjs';
|
|
61
63
|
export {parseLegacyDoc} from './doctypes/legacy.mjs';
|
|
62
64
|
export {parseConfig} from './config/parse.mjs';
|
|
63
65
|
export {parseIntegration} from './integration/parse.mjs';
|
|
@@ -129,6 +131,7 @@ export type {
|
|
|
129
131
|
// reference
|
|
130
132
|
ReferenceSection,
|
|
131
133
|
ReferenceContentBlock,
|
|
134
|
+
GraphContentBlock,
|
|
132
135
|
ReferenceTokenPreviewType,
|
|
133
136
|
ReferenceTranslationDoc,
|
|
134
137
|
WorkflowStep,
|
package/authoring/index.mjs
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* `type` directly.
|
|
12
12
|
*
|
|
13
13
|
* Types (config, integration, codemod, and the doc vocabulary —
|
|
14
|
-
* component/hook/reference/template) are re-exported via `./index.ts`.
|
|
14
|
+
* component/hook/reference/template/theme) are re-exported via `./index.ts`.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
17
|
export {parseConfig} from './config/parse.mjs';
|
|
@@ -32,4 +32,5 @@ export {parseSchema} from './doctypes/schema/parse.mjs';
|
|
|
32
32
|
export {parseCommand} from './doctypes/command/parse.mjs';
|
|
33
33
|
export {parseEnum} from './doctypes/enum/parse.mjs';
|
|
34
34
|
export {parseNamespace} from './doctypes/namespace/parse.mjs';
|
|
35
|
+
export {parseTheme} from './doctypes/theme/parse.mjs';
|
|
35
36
|
export {parseLegacyDoc} from './doctypes/legacy.mjs';
|
|
@@ -11,7 +11,7 @@ export const doc = {
|
|
|
11
11
|
type: 'schema',
|
|
12
12
|
name: 'integration',
|
|
13
13
|
displayName: 'Astryx Integration',
|
|
14
|
-
namespace: '
|
|
14
|
+
namespace: 'authoring',
|
|
15
15
|
description:
|
|
16
16
|
'The astryx.integration.* manifest that sits beside an integration ' +
|
|
17
17
|
"package's package.json. It can preserve a stable provider identity across a package rename, " +
|
|
@@ -57,7 +57,7 @@ export const doc = {
|
|
|
57
57
|
name: 'themes',
|
|
58
58
|
type: 'string',
|
|
59
59
|
description:
|
|
60
|
-
'Relative path to a source-theme
|
|
60
|
+
'Relative path to a source-theme root with one directory per theme slug. Each directory contains a source module and mandatory same-stem, strongly typed .doc.mjs descriptor. Installed themes appear in `astryx theme list` and can be copied with `astryx theme add`.',
|
|
61
61
|
example: "'./themes'",
|
|
62
62
|
},
|
|
63
63
|
{
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* The manifest module may also carry `debug` and `gapReport` NAMED exports.
|
|
12
12
|
* They are not fields here on purpose: a CLI released before a given manifest
|
|
13
13
|
* field existed could reject it and lose every contribution, while an unknown
|
|
14
|
-
* named export is simply not read. See
|
|
14
|
+
* named export is simply not read. See `astryx docs cli/integrations`.
|
|
15
15
|
*/
|
|
16
16
|
export interface AstryxIntegration {
|
|
17
17
|
/** Stable logical provider ID. Omit to use package.json#name. Set this only
|
|
@@ -34,15 +34,9 @@ export interface AstryxIntegration {
|
|
|
34
34
|
* serves from `astryx docs`, alongside the built-in ones. A topic may also
|
|
35
35
|
* `replace` or `extend` a built-in topic; see the ReferenceDoc type. */
|
|
36
36
|
docs?: string;
|
|
37
|
-
/** Relative path to the source-theme
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
* entry requires `slug`, `displayName`, `description` (string),
|
|
41
|
-
* `maintained` (boolean), `entry` (source file relative to `themes/<slug>/`),
|
|
42
|
-
* `exportName` (a valid JS identifier naming the runtime export), and
|
|
43
|
-
* `files` (non-empty array of filenames relative to `themes/<slug>/`).
|
|
44
|
-
* Every file listed must exist on disk; the entry file must also appear
|
|
45
|
-
* in `files`. */
|
|
37
|
+
/** Relative path to the source-theme root (resolved to absolute). Each
|
|
38
|
+
* lower-kebab theme directory contains a source module and mandatory
|
|
39
|
+
* same-stem, strongly typed `.doc.mjs` descriptor. */
|
|
46
40
|
themes?: string;
|
|
47
41
|
/** Static package guidance appended to the CLI-owned managed agent block. */
|
|
48
42
|
agentDocs?: {
|
|
@@ -3,37 +3,35 @@
|
|
|
3
3
|
import fs from 'fs';
|
|
4
4
|
import path from 'path';
|
|
5
5
|
import {describe, it, expect} from 'vitest';
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
for (const theme of manifest.themes) {
|
|
26
|
-
expect(theme.slug).toBeDefined();
|
|
27
|
-
expect(theme.displayName).toBeDefined();
|
|
28
|
-
expect(theme.entry).toBeDefined();
|
|
29
|
-
|
|
30
|
-
const entryPath = path.join(themesDir, theme.slug, theme.entry);
|
|
31
|
-
expect(fs.existsSync(entryPath)).toBe(true);
|
|
32
|
-
|
|
6
|
+
import {discoverBundledThemes} from '../../../foundation/discovery/theme-discovery.mjs';
|
|
7
|
+
|
|
8
|
+
describe('@astryxdesign/cli bundled theme descriptor validation', () => {
|
|
9
|
+
it('discovers typed descriptors and their same-stem source files', () => {
|
|
10
|
+
const themes = discoverBundledThemes();
|
|
11
|
+
expect(themes.length).toBeGreaterThan(0);
|
|
12
|
+
|
|
13
|
+
for (const theme of themes) {
|
|
14
|
+
expect(theme.slug).toBeTruthy();
|
|
15
|
+
expect(theme.displayName).toBeTruthy();
|
|
16
|
+
expect(theme.docPath).toBe(
|
|
17
|
+
path.join(
|
|
18
|
+
theme.sourceDir,
|
|
19
|
+
`${path.basename(theme.entry, path.extname(theme.entry))}.doc.mjs`,
|
|
20
|
+
),
|
|
21
|
+
);
|
|
22
|
+
expect(fs.existsSync(theme.docPath)).toBe(true);
|
|
23
|
+
expect(fs.existsSync(path.join(theme.sourceDir, theme.entry))).toBe(true);
|
|
33
24
|
for (const file of theme.files) {
|
|
34
|
-
|
|
35
|
-
expect(fs.existsSync(filePath)).toBe(true);
|
|
25
|
+
expect(fs.existsSync(path.join(theme.sourceDir, file))).toBe(true);
|
|
36
26
|
}
|
|
37
27
|
}
|
|
38
28
|
});
|
|
29
|
+
|
|
30
|
+
it('does not ship the obsolete central theme catalog', () => {
|
|
31
|
+
expect(
|
|
32
|
+
fs.existsSync(
|
|
33
|
+
path.resolve('packages/cli/assets/templates/themes/manifest.json'),
|
|
34
|
+
),
|
|
35
|
+
).toBe(false);
|
|
36
|
+
});
|
|
39
37
|
});
|
|
@@ -12,7 +12,7 @@ export const doc = {
|
|
|
12
12
|
type: 'command',
|
|
13
13
|
name: 'blog',
|
|
14
14
|
displayName: 'astryx blog',
|
|
15
|
-
namespace: 'cli',
|
|
15
|
+
namespace: 'cli/commands',
|
|
16
16
|
summary: 'Read the Astryx blog from the published feed',
|
|
17
17
|
description:
|
|
18
18
|
'Reads the design-system blog over its published RSS feed (never the source ' +
|