@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
|
@@ -7,8 +7,8 @@ export const doc = {
|
|
|
7
7
|
type: 'command',
|
|
8
8
|
name: 'doctor integration docs',
|
|
9
9
|
displayName: 'astryx doctor integration docs',
|
|
10
|
-
namespace: 'cli',
|
|
11
|
-
summary: '
|
|
10
|
+
namespace: 'cli/commands',
|
|
11
|
+
summary: 'Check an integration\'s docs: the docs tree they add, every link, and overlaps with Core topics',
|
|
12
12
|
description:
|
|
13
13
|
'Reports intentional Core topic replacements and extensions as information. ' +
|
|
14
14
|
'A same-name topic without `replaces` or `extends` is an accidental conflict ' +
|
|
@@ -32,7 +32,7 @@ export const doc = {
|
|
|
32
32
|
],
|
|
33
33
|
exitCodes: [
|
|
34
34
|
{code: 0, when: 'all Core overlaps are explicitly declared or no overlap exists'},
|
|
35
|
-
{code: 1, when: 'an overlap is accidental or
|
|
35
|
+
{code: 1, when: 'an overlap is accidental, a doc is invalid, a namespace or placement fails, or a reference block cannot include what it names. A link that names no doc is a warning, and does not change the exit code'},
|
|
36
36
|
],
|
|
37
37
|
related: ['doctor integration validate', 'docs'],
|
|
38
38
|
};
|
|
@@ -9,13 +9,14 @@ export const doc = {
|
|
|
9
9
|
type: 'command',
|
|
10
10
|
name: 'doctor integration templates',
|
|
11
11
|
displayName: 'astryx doctor integration templates',
|
|
12
|
-
namespace: 'cli',
|
|
13
|
-
summary: '
|
|
12
|
+
namespace: 'cli/commands',
|
|
13
|
+
summary: 'Validate integration template replacements and Core id overlaps',
|
|
14
14
|
description:
|
|
15
|
-
'
|
|
16
|
-
'block template ids.
|
|
17
|
-
'
|
|
18
|
-
'
|
|
15
|
+
'Validates one local or installed integration against the built-in Core page ' +
|
|
16
|
+
'and block template ids. Intentional replacements are informational and name ' +
|
|
17
|
+
'the command for selecting the Core original. Missing targets, ambiguous ' +
|
|
18
|
+
'replacements, and invalid declarations are errors; undeclared same-id overlaps ' +
|
|
19
|
+
'remain warnings that require package selection.',
|
|
19
20
|
fn: 'integrationTemplateConflicts',
|
|
20
21
|
args: [
|
|
21
22
|
{
|
|
@@ -37,8 +38,14 @@ export const doc = {
|
|
|
37
38
|
},
|
|
38
39
|
],
|
|
39
40
|
exitCodes: [
|
|
40
|
-
{
|
|
41
|
-
|
|
41
|
+
{
|
|
42
|
+
code: 0,
|
|
43
|
+
when: 'replacement declarations are valid; undeclared id conflicts are warnings',
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
code: 1,
|
|
47
|
+
when: 'the integration, a template, or a replacement declaration is invalid',
|
|
48
|
+
},
|
|
42
49
|
],
|
|
43
50
|
related: ['doctor integration validate', 'template'],
|
|
44
51
|
};
|
|
@@ -9,7 +9,7 @@ export const doc = {
|
|
|
9
9
|
type: 'command',
|
|
10
10
|
name: 'doctor integration validate',
|
|
11
11
|
displayName: 'astryx doctor integration validate',
|
|
12
|
-
namespace: 'cli',
|
|
12
|
+
namespace: 'cli/commands',
|
|
13
13
|
summary: 'Validate an integration manifest and its contributions',
|
|
14
14
|
description:
|
|
15
15
|
'Validates one integration at a time: the local package rooted at cwd, or an ' +
|
|
@@ -9,7 +9,7 @@ export const doc = {
|
|
|
9
9
|
type: 'command',
|
|
10
10
|
name: 'doctor integration',
|
|
11
11
|
displayName: 'astryx doctor integration',
|
|
12
|
-
namespace: 'cli',
|
|
12
|
+
namespace: 'cli/commands',
|
|
13
13
|
summary: 'Check an integration package while authoring it',
|
|
14
14
|
description:
|
|
15
15
|
'The integration-authoring diagnostics group. Validate a manifest and all ' +
|
|
@@ -2,9 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* @file Command-level coverage for `astryx doctor integration` authoring checks.
|
|
5
|
+
* @input Integration fixtures and the post-0.7 conflict projection.
|
|
6
|
+
* @output Assertions for human and typed command responses.
|
|
7
|
+
* @position CLI adapter coverage; 0.6.x API shape is verified separately.
|
|
5
8
|
*/
|
|
6
9
|
|
|
7
10
|
import {afterEach, beforeEach, describe, expect, it, vi} from 'vitest';
|
|
11
|
+
|
|
12
|
+
vi.mock('../../../foundation/discovery/template-conflict-release.mjs', () => ({
|
|
13
|
+
expandedTemplateConflictSchemaActive: () => true,
|
|
14
|
+
}));
|
|
8
15
|
import * as fs from 'node:fs';
|
|
9
16
|
import * as path from 'node:path';
|
|
10
17
|
import {Command} from 'commander';
|
|
@@ -31,6 +38,8 @@ function writeIntegration({
|
|
|
31
38
|
id,
|
|
32
39
|
name = 'Integration template',
|
|
33
40
|
missingRoot = false,
|
|
41
|
+
replacements,
|
|
42
|
+
type = 'page',
|
|
34
43
|
}) {
|
|
35
44
|
fs.writeFileSync(
|
|
36
45
|
path.join(tmpDir, 'package.json'),
|
|
@@ -44,8 +53,8 @@ function writeIntegration({
|
|
|
44
53
|
const stem = path.join(tmpDir, 'templates', id);
|
|
45
54
|
fs.mkdirSync(path.dirname(stem), {recursive: true});
|
|
46
55
|
fs.writeFileSync(
|
|
47
|
-
`${stem}.
|
|
48
|
-
`export default {type: '
|
|
56
|
+
`${stem}.doc.mjs`,
|
|
57
|
+
`export default {type: '${type}', name: ${JSON.stringify(name)}, description: 'fixture'${replacements?.[id] == null ? '' : `, replaces: ${JSON.stringify(replacements[id])}`}};\n`,
|
|
49
58
|
);
|
|
50
59
|
fs.writeFileSync(
|
|
51
60
|
`${stem}.tsx`,
|
|
@@ -124,7 +133,12 @@ describe('doctor integration — command', () => {
|
|
|
124
133
|
return true;
|
|
125
134
|
});
|
|
126
135
|
|
|
127
|
-
await createProgram().parseAsync([
|
|
136
|
+
await createProgram().parseAsync([
|
|
137
|
+
'node',
|
|
138
|
+
'astryx',
|
|
139
|
+
'doctor',
|
|
140
|
+
'integration',
|
|
141
|
+
]);
|
|
128
142
|
|
|
129
143
|
const output = writes.join('');
|
|
130
144
|
expect(output).toContain('validate [package]');
|
|
@@ -136,7 +150,9 @@ describe('doctor integration — command', () => {
|
|
|
136
150
|
|
|
137
151
|
it('explains the optional package argument in every leaf help', () => {
|
|
138
152
|
const program = createProgram();
|
|
139
|
-
const doctor = program.commands.find(
|
|
153
|
+
const doctor = program.commands.find(
|
|
154
|
+
command => command.name() === 'doctor',
|
|
155
|
+
);
|
|
140
156
|
const integration = doctor?.commands.find(
|
|
141
157
|
command => command.name() === 'integration',
|
|
142
158
|
);
|
|
@@ -152,7 +168,10 @@ describe('doctor integration — command', () => {
|
|
|
152
168
|
});
|
|
153
169
|
|
|
154
170
|
it('templates explains how to check an installed package when no local manifest exists', async () => {
|
|
155
|
-
fs.writeFileSync(
|
|
171
|
+
fs.writeFileSync(
|
|
172
|
+
path.join(tmpDir, 'package.json'),
|
|
173
|
+
JSON.stringify({name: 'plain'}),
|
|
174
|
+
);
|
|
156
175
|
process.chdir(tmpDir);
|
|
157
176
|
|
|
158
177
|
await createProgram().parseAsync([
|
|
@@ -239,6 +258,71 @@ describe('doctor integration — command', () => {
|
|
|
239
258
|
expect(process.exitCode).toBeUndefined();
|
|
240
259
|
});
|
|
241
260
|
|
|
261
|
+
it('templates reports an intentional replacement and the Core-original command', async () => {
|
|
262
|
+
const core = (await discoverCoreTemplates()).find(
|
|
263
|
+
template => template.type === 'page',
|
|
264
|
+
);
|
|
265
|
+
expect(core).toBeDefined();
|
|
266
|
+
writeIntegration({
|
|
267
|
+
id: 'acme-app-shell',
|
|
268
|
+
type: core.type,
|
|
269
|
+
replacements: {'acme-app-shell': core.dirName},
|
|
270
|
+
});
|
|
271
|
+
process.chdir(tmpDir);
|
|
272
|
+
|
|
273
|
+
await createProgram().parseAsync([
|
|
274
|
+
'node',
|
|
275
|
+
'astryx',
|
|
276
|
+
'--json',
|
|
277
|
+
'doctor',
|
|
278
|
+
'integration',
|
|
279
|
+
'templates',
|
|
280
|
+
]);
|
|
281
|
+
|
|
282
|
+
const parsed = JSON.parse(logCalls.join('\n'));
|
|
283
|
+
expect(parsed.data.issues).toEqual([]);
|
|
284
|
+
expect(parsed.data.conflicts).toEqual([
|
|
285
|
+
expect.objectContaining({
|
|
286
|
+
id: 'acme-app-shell',
|
|
287
|
+
relationship: 'replaces',
|
|
288
|
+
replaces: core.dirName,
|
|
289
|
+
severity: 'info',
|
|
290
|
+
}),
|
|
291
|
+
]);
|
|
292
|
+
expect(parsed.data.conflicts[0].command).toContain(
|
|
293
|
+
`--package @astryxdesign/core`,
|
|
294
|
+
);
|
|
295
|
+
expect(process.exitCode).toBeUndefined();
|
|
296
|
+
});
|
|
297
|
+
|
|
298
|
+
it('templates exits 1 for a missing replacement target', async () => {
|
|
299
|
+
writeIntegration({
|
|
300
|
+
id: 'acme-app-shell',
|
|
301
|
+
replacements: {'acme-app-shell': 'missing-core-shell'},
|
|
302
|
+
});
|
|
303
|
+
process.chdir(tmpDir);
|
|
304
|
+
|
|
305
|
+
await createProgram().parseAsync([
|
|
306
|
+
'node',
|
|
307
|
+
'astryx',
|
|
308
|
+
'--json',
|
|
309
|
+
'doctor',
|
|
310
|
+
'integration',
|
|
311
|
+
'templates',
|
|
312
|
+
]);
|
|
313
|
+
|
|
314
|
+
const parsed = JSON.parse(logCalls.join('\n'));
|
|
315
|
+
expect(parsed.data.issues).toEqual(
|
|
316
|
+
expect.arrayContaining([
|
|
317
|
+
expect.objectContaining({
|
|
318
|
+
code: 'missing_template_replacement_target',
|
|
319
|
+
severity: 'error',
|
|
320
|
+
}),
|
|
321
|
+
]),
|
|
322
|
+
);
|
|
323
|
+
expect(process.exitCode).toBe(1);
|
|
324
|
+
});
|
|
325
|
+
|
|
242
326
|
it('templates exits 1 when structural errors prevent a trustworthy check', async () => {
|
|
243
327
|
writeIntegration({missingRoot: true});
|
|
244
328
|
process.chdir(tmpDir);
|
|
@@ -278,9 +362,7 @@ describe('doctor integration — command', () => {
|
|
|
278
362
|
const output = logCalls.join('\n');
|
|
279
363
|
expect(output).toContain('[warn]');
|
|
280
364
|
expect(output).toContain(core.name);
|
|
281
|
-
expect(output).toContain(
|
|
282
|
-
`component ${core.name} --package @acme/widgets`,
|
|
283
|
-
);
|
|
365
|
+
expect(output).toContain(`component ${core.name} --package @acme/widgets`);
|
|
284
366
|
expect(process.exitCode).toBeUndefined();
|
|
285
367
|
});
|
|
286
368
|
|
|
@@ -12,7 +12,7 @@ export const doc = {
|
|
|
12
12
|
type: 'command',
|
|
13
13
|
name: 'doctor',
|
|
14
14
|
displayName: 'astryx doctor',
|
|
15
|
-
namespace: 'cli',
|
|
15
|
+
namespace: 'cli/commands',
|
|
16
16
|
summary: 'Diagnose Astryx projects and integration packages',
|
|
17
17
|
description:
|
|
18
18
|
'Runs read-only project health diagnostics by default: Node version, @astryxdesign/core ' +
|
|
@@ -3,7 +3,12 @@
|
|
|
3
3
|
/**
|
|
4
4
|
* @file `astryx doctor` project health and integration-authoring diagnostics.
|
|
5
5
|
* Human output uses plain stable tokens; every leaf also has a typed JSON
|
|
6
|
-
* response.
|
|
6
|
+
* response. Template-conflict fields follow the package release boundary.
|
|
7
|
+
* Exit 1 means a check found an error, while warnings remain exit 0.
|
|
8
|
+
*
|
|
9
|
+
* @input Typed Doctor and integration-authoring API responses.
|
|
10
|
+
* @output Human-readable records or pass-through typed JSON.
|
|
11
|
+
* @position CLI presentation adapter for project and integration health.
|
|
7
12
|
*/
|
|
8
13
|
|
|
9
14
|
import {runChecks} from '../../../api/doctor/doctor.mjs';
|
|
@@ -125,25 +130,41 @@ function printTemplateConflicts(data) {
|
|
|
125
130
|
),
|
|
126
131
|
...issueBlocks(data.issues),
|
|
127
132
|
];
|
|
128
|
-
if (data.conflicts.length === 0) {
|
|
133
|
+
if (data.conflicts.length === 0 && data.issues.length === 0) {
|
|
129
134
|
output.push(text('[ok] No template ids conflict with Core.'));
|
|
130
|
-
} else {
|
|
135
|
+
} else if (data.conflicts.length > 0) {
|
|
136
|
+
const expanded = data.conflicts.some(
|
|
137
|
+
conflict => 'relationship' in conflict,
|
|
138
|
+
);
|
|
131
139
|
output.push(
|
|
132
140
|
records(data.conflicts, {
|
|
133
|
-
fields:
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
141
|
+
fields: expanded
|
|
142
|
+
? [
|
|
143
|
+
'severity',
|
|
144
|
+
'relationship',
|
|
145
|
+
'id',
|
|
146
|
+
'replaces',
|
|
147
|
+
'integrationPackage',
|
|
148
|
+
'integrationType',
|
|
149
|
+
'integrationName',
|
|
150
|
+
'message',
|
|
151
|
+
'command',
|
|
152
|
+
]
|
|
153
|
+
: [
|
|
154
|
+
'severity',
|
|
155
|
+
'id',
|
|
156
|
+
'integrationPackage',
|
|
157
|
+
'integrationType',
|
|
158
|
+
'integrationName',
|
|
159
|
+
'message',
|
|
160
|
+
'command',
|
|
161
|
+
],
|
|
142
162
|
format: {severity: statusToken},
|
|
143
163
|
}),
|
|
144
164
|
text(
|
|
145
|
-
|
|
146
|
-
|
|
165
|
+
expanded
|
|
166
|
+
? `${data.conflicts.length} Core template relationship(s).`
|
|
167
|
+
: `${data.conflicts.length} Core template conflict(s). Renaming is recommended but optional; keep the package-qualified command if the overlap is intentional.`,
|
|
147
168
|
),
|
|
148
169
|
);
|
|
149
170
|
}
|
|
@@ -165,7 +186,13 @@ function printComponentConflicts(data) {
|
|
|
165
186
|
} else {
|
|
166
187
|
output.push(
|
|
167
188
|
records(data.conflicts, {
|
|
168
|
-
fields: [
|
|
189
|
+
fields: [
|
|
190
|
+
'severity',
|
|
191
|
+
'name',
|
|
192
|
+
'integrationPackage',
|
|
193
|
+
'message',
|
|
194
|
+
'command',
|
|
195
|
+
],
|
|
169
196
|
format: {severity: statusToken},
|
|
170
197
|
}),
|
|
171
198
|
text(
|
|
@@ -187,6 +214,15 @@ function printDocConflicts(data) {
|
|
|
187
214
|
),
|
|
188
215
|
...issueBlocks(data.issues),
|
|
189
216
|
];
|
|
217
|
+
if (
|
|
218
|
+
!data.issues.some(
|
|
219
|
+
issue => issue.severity === 'error' || issue.code === 'invalid_doc_graph',
|
|
220
|
+
)
|
|
221
|
+
) {
|
|
222
|
+
output.push(
|
|
223
|
+
text('[ok] The docs tree and every link in these docs check out.'),
|
|
224
|
+
);
|
|
225
|
+
}
|
|
190
226
|
if (data.findings.length === 0) {
|
|
191
227
|
output.push(text('[ok] No doc topics overlap with Core.'));
|
|
192
228
|
} else {
|
|
@@ -272,7 +308,8 @@ async function runAuthoringCheck(program, pkg, kind) {
|
|
|
272
308
|
const structuralErrors = summarizeIssues(result.data.issues).errors;
|
|
273
309
|
const docErrors =
|
|
274
310
|
result.type === 'integration.doc-conflicts'
|
|
275
|
-
? result.data.findings.filter(finding => finding.severity === 'error')
|
|
311
|
+
? result.data.findings.filter(finding => finding.severity === 'error')
|
|
312
|
+
.length
|
|
276
313
|
: 0;
|
|
277
314
|
if (structuralErrors > 0 || docErrors > 0) process.exitCode = 1;
|
|
278
315
|
return NO_RESULT_SET;
|
|
@@ -10,7 +10,7 @@ export const doc = {
|
|
|
10
10
|
type: 'command',
|
|
11
11
|
name: 'gap-report',
|
|
12
12
|
displayName: 'astryx gap-report',
|
|
13
|
-
namespace: 'cli',
|
|
13
|
+
namespace: 'cli/commands',
|
|
14
14
|
summary: 'Route a design-system gap to its owning package',
|
|
15
15
|
description:
|
|
16
16
|
'Reports a missing component, variant, layout, styling, accessibility, API, or documentation capability. The command selects an explicit package first, then a unique component owner, then Core. The report fans out to every effective handler: project config first, then each loaded integration in config order. Public handlers require --confirm-public per handler; internal handlers always run. A handler failure is isolated and does not prevent later handlers.',
|
|
@@ -12,7 +12,7 @@ export const doc = {
|
|
|
12
12
|
type: 'command',
|
|
13
13
|
name: 'hook',
|
|
14
14
|
displayName: 'astryx hook',
|
|
15
|
-
namespace: 'cli',
|
|
15
|
+
namespace: 'cli/commands',
|
|
16
16
|
summary: 'List hooks or print hook docs',
|
|
17
17
|
description:
|
|
18
18
|
'Resolves a hook by name and prints its authored doc, or lists the catalog grouped ' +
|
|
@@ -12,7 +12,7 @@ export const doc = {
|
|
|
12
12
|
type: 'command',
|
|
13
13
|
name: 'init',
|
|
14
14
|
displayName: 'astryx init',
|
|
15
|
-
namespace: 'cli',
|
|
15
|
+
namespace: 'cli/commands',
|
|
16
16
|
summary: 'Initialize the design system in your project',
|
|
17
17
|
description:
|
|
18
18
|
'Non-interactive project setup (no prompts, so it behaves the same for humans, ' +
|
|
@@ -126,7 +126,7 @@ describe('integration add control definitions', () => {
|
|
|
126
126
|
);
|
|
127
127
|
expect(page.status).toBe(0);
|
|
128
128
|
expect(
|
|
129
|
-
fs.readFileSync(path.join(tmpDir, 'templates', 'acme-page.
|
|
129
|
+
fs.readFileSync(path.join(tmpDir, 'templates', 'acme-page.doc.mjs'), 'utf-8'),
|
|
130
130
|
).toContain("type: 'page'");
|
|
131
131
|
});
|
|
132
132
|
});
|
|
@@ -5,7 +5,7 @@ export const doc = {
|
|
|
5
5
|
type: 'command',
|
|
6
6
|
name: 'integration add',
|
|
7
7
|
displayName: 'astryx integration add',
|
|
8
|
-
namespace: 'cli',
|
|
8
|
+
namespace: 'cli/commands',
|
|
9
9
|
summary: 'Add one working contribution to an integration package',
|
|
10
10
|
description:
|
|
11
11
|
'Writes the complete minimum shape the selected contribution needs, creates the integration manifest on first use, declares the root only after a valid contribution exists, and verifies the result through the same discovery contract the packed-package check uses.',
|
|
@@ -50,6 +50,12 @@ export const doc = {
|
|
|
50
50
|
description:
|
|
51
51
|
'Existing doc topic this one extends (letters, digits, _ and -); only valid for doc and not with --replaces',
|
|
52
52
|
},
|
|
53
|
+
{
|
|
54
|
+
flag: '--parent <namespace>',
|
|
55
|
+
param: 'options.parent',
|
|
56
|
+
description:
|
|
57
|
+
"Namespace of this package to place the doc in, as a guide in its `guides` slot; writes the namespace doc when it is missing, and declares the CLI that reads it as an optional `@astryxdesign/cli` peer. Only valid for doc, and not with --replaces or --extends",
|
|
58
|
+
},
|
|
53
59
|
{
|
|
54
60
|
flag: '--to <version>',
|
|
55
61
|
param: 'options.to',
|
|
@@ -79,6 +85,10 @@ export const doc = {
|
|
|
79
85
|
label: 'Extend a doc topic',
|
|
80
86
|
cli: 'astryx integration add doc acme-theming --extends theme',
|
|
81
87
|
},
|
|
88
|
+
{
|
|
89
|
+
label: 'Add a guide to the package\'s own docs section',
|
|
90
|
+
cli: 'astryx integration add doc deploying --parent acme',
|
|
91
|
+
},
|
|
82
92
|
{
|
|
83
93
|
label: 'Add a codemod',
|
|
84
94
|
cli: 'astryx integration add codemod rename-widget --to 1.2.0',
|
|
@@ -5,7 +5,7 @@ export const doc = {
|
|
|
5
5
|
type: 'command',
|
|
6
6
|
name: 'integration pack',
|
|
7
7
|
displayName: 'astryx integration pack',
|
|
8
|
-
namespace: 'cli',
|
|
8
|
+
namespace: 'cli/commands',
|
|
9
9
|
summary: 'Prove the packed integration is what consumers receive',
|
|
10
10
|
description:
|
|
11
11
|
'Runs the package lifecycle, packs with npm, checks every required contribution file against the real tarball, extracts it into a scratch consumer, and compares the local and packed contribution inventories through one shared contract.',
|
|
@@ -201,13 +201,6 @@ export const oceanTheme = defineTheme({
|
|
|
201
201
|
});
|
|
202
202
|
`,
|
|
203
203
|
);
|
|
204
|
-
const catalogFile = path.join(providerDir, 'themes', 'manifest.json');
|
|
205
|
-
const catalog = JSON.parse(fs.readFileSync(catalogFile, 'utf-8'));
|
|
206
|
-
catalog.themes[0].files.push(
|
|
207
|
-
'tokens/ocean.palette.ts',
|
|
208
|
-
'tokens/ocean.palette.receipt.json',
|
|
209
|
-
);
|
|
210
|
-
writeJson(catalogFile, catalog);
|
|
211
204
|
|
|
212
205
|
const providerPackage = JSON.parse(
|
|
213
206
|
fs.readFileSync(path.join(providerDir, 'package.json'), 'utf-8'),
|
|
@@ -464,8 +457,9 @@ export const oceanTheme = defineTheme({
|
|
|
464
457
|
outputDir: target,
|
|
465
458
|
files: [
|
|
466
459
|
'oceanTheme.ts',
|
|
467
|
-
'
|
|
460
|
+
'oceanTheme.doc.mjs',
|
|
468
461
|
'tokens/ocean.palette.receipt.json',
|
|
462
|
+
'tokens/ocean.palette.ts',
|
|
469
463
|
],
|
|
470
464
|
},
|
|
471
465
|
});
|
|
@@ -612,7 +606,7 @@ export const oceanTheme = defineTheme({
|
|
|
612
606
|
expect(corruptedInstall.status).not.toBe(0);
|
|
613
607
|
expect(parseEnvelope(corruptedInstall.stdout)).toMatchObject({
|
|
614
608
|
code: 'ERR_THEME_INVALID',
|
|
615
|
-
error: expect.stringContaining('ocean.palette
|
|
609
|
+
error: expect.stringContaining('./tokens/ocean.palette'),
|
|
616
610
|
});
|
|
617
611
|
}, 120_000);
|
|
618
612
|
});
|
|
@@ -5,7 +5,7 @@ export const doc = {
|
|
|
5
5
|
type: 'command',
|
|
6
6
|
name: 'integration',
|
|
7
7
|
displayName: 'astryx integration',
|
|
8
|
-
namespace: 'cli',
|
|
8
|
+
namespace: 'cli/commands',
|
|
9
9
|
summary: 'Author and verify an Astryx integration package',
|
|
10
10
|
description:
|
|
11
11
|
'Add contributions that are valid on arrival, then prove the packed package exposes the same contributions a consumer will receive.',
|
|
@@ -13,7 +13,7 @@ export const doc = {
|
|
|
13
13
|
type: 'command',
|
|
14
14
|
name: 'layout expand',
|
|
15
15
|
displayName: 'astryx layout expand',
|
|
16
|
-
namespace: 'cli',
|
|
16
|
+
namespace: 'cli/commands',
|
|
17
17
|
summary: 'Expand a layout expression into validated XDS TSX',
|
|
18
18
|
description:
|
|
19
19
|
'Parses and validates a compressed XLE/XLO expression, then expands it into ' +
|
|
@@ -13,7 +13,7 @@ export const doc = {
|
|
|
13
13
|
type: 'command',
|
|
14
14
|
name: 'layout grammar',
|
|
15
15
|
displayName: 'astryx layout grammar',
|
|
16
|
-
namespace: 'cli',
|
|
16
|
+
namespace: 'cli/commands',
|
|
17
17
|
summary:
|
|
18
18
|
'Print the XLE/XLO cheatsheet (alias table generated from this branch)',
|
|
19
19
|
description:
|
|
@@ -12,7 +12,7 @@ export const doc = {
|
|
|
12
12
|
type: 'command',
|
|
13
13
|
name: 'layout',
|
|
14
14
|
displayName: 'astryx layout',
|
|
15
|
-
namespace: 'cli',
|
|
15
|
+
namespace: 'cli/commands',
|
|
16
16
|
summary: 'Generate XDS layouts from compressed expressions (XLE/XLO)',
|
|
17
17
|
description:
|
|
18
18
|
'The layout command group. Running astryx layout with no subcommand prints the ' +
|
|
@@ -12,7 +12,7 @@ export const doc = {
|
|
|
12
12
|
type: 'command',
|
|
13
13
|
name: 'manifest',
|
|
14
14
|
displayName: 'astryx manifest',
|
|
15
|
-
namespace: 'cli',
|
|
15
|
+
namespace: 'cli/commands',
|
|
16
16
|
summary: 'Print the full CLI capability manifest (use with --json).',
|
|
17
17
|
description:
|
|
18
18
|
'Emits the complete CLI surface: every command with its arguments, options, ' +
|
|
@@ -12,7 +12,7 @@ export const doc = {
|
|
|
12
12
|
type: 'command',
|
|
13
13
|
name: 'search',
|
|
14
14
|
displayName: 'astryx search',
|
|
15
|
-
namespace: 'cli',
|
|
15
|
+
namespace: 'cli/commands',
|
|
16
16
|
summary: 'Search components, hooks, docs, and templates in one ranked list',
|
|
17
17
|
description:
|
|
18
18
|
'Terminal front-end to search(): prints one ranked, greppable list across ' +
|
|
@@ -49,7 +49,7 @@ export function registerSearch(program) {
|
|
|
49
49
|
|
|
50
50
|
try {
|
|
51
51
|
const project = await Project.load(process.cwd());
|
|
52
|
-
await warnOnIntegrationIssues(project
|
|
52
|
+
await warnOnIntegrationIssues(project, {json});
|
|
53
53
|
} catch {
|
|
54
54
|
// Never let the nudge break the command.
|
|
55
55
|
}
|
|
@@ -115,7 +115,9 @@ export function registerSearch(program) {
|
|
|
115
115
|
const fields = options.verbose
|
|
116
116
|
? [
|
|
117
117
|
'name',
|
|
118
|
+
'section',
|
|
118
119
|
'domain',
|
|
120
|
+
'package',
|
|
119
121
|
'title',
|
|
120
122
|
'displayName',
|
|
121
123
|
'kind',
|
|
@@ -124,16 +126,20 @@ export function registerSearch(program) {
|
|
|
124
126
|
'import',
|
|
125
127
|
'description',
|
|
126
128
|
'command',
|
|
129
|
+
'parent',
|
|
127
130
|
]
|
|
128
131
|
: [
|
|
129
132
|
'name',
|
|
133
|
+
'section',
|
|
130
134
|
'domain',
|
|
135
|
+
'package',
|
|
131
136
|
'title',
|
|
132
137
|
'displayName',
|
|
133
138
|
'kind',
|
|
134
139
|
'import',
|
|
135
140
|
'description',
|
|
136
141
|
'command',
|
|
142
|
+
'parent',
|
|
137
143
|
];
|
|
138
144
|
|
|
139
145
|
// The heading mirrors the JSON: `matchCount` is what matched, and the
|
|
@@ -145,7 +151,10 @@ export function registerSearch(program) {
|
|
|
145
151
|
? `Results for "${q}" (${results.length} of ${matchCount})`
|
|
146
152
|
: `Results for "${q}" (${results.length})`,
|
|
147
153
|
),
|
|
148
|
-
records(results, {
|
|
154
|
+
records(results, {
|
|
155
|
+
fields,
|
|
156
|
+
format: {command: formatCliCommand, parent: formatCliCommand},
|
|
157
|
+
}),
|
|
149
158
|
);
|
|
150
159
|
return answered;
|
|
151
160
|
},
|
|
@@ -89,6 +89,12 @@ describe('enforcement layer 3 — per-command setup nudge', () => {
|
|
|
89
89
|
expect((await runCli(['docs', 'tokens'], tmp)).stderr).not.toMatch(NUDGE);
|
|
90
90
|
});
|
|
91
91
|
|
|
92
|
+
it('is quiet in an integration package, which is not an app', async () => {
|
|
93
|
+
asProject();
|
|
94
|
+
write('astryx.integration.mjs', 'export default {};\n');
|
|
95
|
+
expect((await runCli(['docs', 'tokens'], tmp)).stderr).not.toMatch(NUDGE);
|
|
96
|
+
});
|
|
97
|
+
|
|
92
98
|
it('does not nudge for the installer command itself', async () => {
|
|
93
99
|
asProject();
|
|
94
100
|
expect((await runCli(['init'], tmp)).stderr).not.toMatch(NUDGE);
|
|
@@ -12,7 +12,7 @@ export const doc = {
|
|
|
12
12
|
type: 'command',
|
|
13
13
|
name: 'swizzle',
|
|
14
14
|
displayName: 'astryx swizzle',
|
|
15
|
-
namespace: 'cli',
|
|
15
|
+
namespace: 'cli/commands',
|
|
16
16
|
summary: 'Copy component source for customization',
|
|
17
17
|
description:
|
|
18
18
|
"Ejects a component's source from the resolved @astryxdesign/core (or its owning " +
|