@astryxdesign/cli 0.6.4 → 0.6.5-canary.01972bc
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/CHANGELOG.md +56 -0
- package/README.md +103 -95
- package/api/build/_adapter.d.mts +36 -2
- package/api/build/_adapter.mjs +41 -10
- package/api/build/build.doc.mjs +8 -3
- package/api/build/build.test.mjs +60 -2
- package/api/build/kit/kit.mjs +109 -26
- package/api/build/kit/rank.d.mts +24 -8
- package/api/build/kit/rank.mjs +277 -97
- package/api/build/kit/rank.test.mjs +231 -48
- package/api/component/_adapter.d.mts +25 -0
- package/api/component/_adapter.mjs +59 -5
- package/api/component/component.d.mts +6 -3
- package/api/component/component.doc.mjs +37 -17
- package/api/component/component.mjs +249 -9
- package/api/component/component.type.d.mts +25 -0
- package/api/component/component.type.mjs +44 -0
- package/api/discover/_adapter.d.mts +114 -6
- package/api/discover/_adapter.mjs +372 -17
- package/api/discover/_adapter.test.mjs +215 -0
- package/api/discover/_catalog-view.d.mts +115 -0
- package/api/discover/_catalog-view.mjs +203 -0
- package/api/discover/_catalog-view.test.mjs +128 -0
- package/api/discover/detail/detail.d.mts +18 -6
- package/api/discover/detail/detail.mjs +67 -13
- package/api/discover/detail/detail.test.mjs +85 -0
- package/api/discover/detail/item/item.d.mts +26 -0
- package/api/discover/detail/item/item.mjs +78 -0
- package/api/discover/detail/item/item.test.mjs +73 -0
- package/api/discover/discover.d.mts +3 -9
- package/api/discover/discover.doc.mjs +61 -18
- package/api/discover/discover.mjs +220 -36
- package/api/discover/discover.test.mjs +11 -2
- package/api/discover/discover.type.d.mts +147 -8
- package/api/discover/discover.type.mjs +102 -12
- package/api/discover/list/list.d.mts +20 -6
- package/api/discover/list/list.mjs +45 -12
- package/api/discover/list/list.test.mjs +46 -0
- package/api/discover/search/search.d.mts +18 -16
- package/api/discover/search/search.mjs +102 -56
- package/api/discover/search/search.test.mjs +144 -10
- package/api/docs/_adapter.d.mts +8 -3
- package/api/docs/_adapter.mjs +14 -6
- package/api/docs/docOverlays.test.mjs +27 -1
- package/api/docs/docs.doc.mjs +2 -2
- package/api/docs/docs.test.mjs +54 -18
- package/api/docs/integration-tree.test.mjs +17 -0
- package/api/docs/integrationDocs.test.mjs +27 -5
- package/api/doctor/doctor.d.mts +8 -3
- package/api/doctor/doctor.doc.mjs +17 -8
- package/api/doctor/doctor.mjs +90 -9
- package/api/doctor/doctor.test.mjs +122 -10
- package/api/doctor/doctor.type.d.mts +1 -1
- package/api/doctor/doctor.type.mjs +1 -1
- package/api/error.d.mts +22 -0
- package/api/error.mjs +42 -0
- package/api/gap-report/gap-report.doc.mjs +19 -10
- package/api/hook/hook.doc.mjs +6 -3
- package/api/index.d.mts +1 -0
- package/api/index.mjs +5 -3
- package/api/init/init.doc.mjs +17 -12
- package/api/integration/add-contribution.d.mts +2 -1
- package/api/integration/add-contribution.mjs +7 -3
- package/api/integration/add-contribution.test.mjs +3 -3
- package/api/integration/add-helpers.d.mts +5 -2
- package/api/integration/add-helpers.mjs +36 -9
- package/api/integration/add-theme.mjs +266 -23
- package/api/integration/add-theme.test.mjs +247 -0
- package/api/integration/authoring-checks.mjs +12 -9
- package/api/integration/authoring-checks.type.d.mts +8 -0
- package/api/integration/authoring-checks.type.mjs +7 -3
- package/api/integration/integration-authoring.type.d.mts +4 -1
- package/api/integration/integration-authoring.type.mjs +6 -1
- package/api/integration/integrationAdd.doc.mjs +6 -0
- package/api/integration/integrationAddTheme.doc.mjs +10 -0
- package/api/integration/integrationComponentConflicts.doc.mjs +1 -1
- package/api/integration/integrationDocConflicts.doc.mjs +1 -1
- package/api/integration/integrationPackCheck.doc.mjs +3 -3
- package/api/integration/integrationTemplateConflicts.doc.mjs +1 -1
- package/api/integration/pack-check.lifecycle-output.test.mjs +107 -0
- package/api/integration/pack-check.mjs +92 -10
- package/api/integration/pack-check.test.mjs +140 -1
- package/api/integration/pack-check.type.mjs +1 -1
- package/api/integration/validate-integration.d.mts +4 -2
- package/api/integration/validate-integration.mjs +7 -2
- package/api/integration/validate-integration.test.mjs +55 -0
- package/api/integration/validate-integration.type.d.mts +5 -0
- package/api/integration/validate-integration.type.mjs +5 -1
- package/api/integration/validateIntegration.doc.mjs +1 -1
- package/api/json/assertResponse.doc.mjs +1 -1
- package/api/json/isError.doc.mjs +1 -1
- package/api/layout/expand/expand.mjs +12 -7
- package/api/layout/expand/expand.receipt.test.mjs +74 -0
- package/api/layout/layout.type.d.mts +1 -0
- package/api/layout/layout.type.mjs +1 -0
- package/api/layout/layoutExpand.doc.mjs +1 -1
- package/api/search/search.d.mts +51 -1
- package/api/search/search.doc.mjs +2 -2
- package/api/search/search.mjs +299 -17
- package/api/search/search.test.mjs +216 -18
- package/api/swizzle/copy/copy.mjs +66 -3
- package/api/swizzle/swizzle.doc.mjs +11 -5
- package/api/template/copy/copy.mjs +15 -9
- package/api/template/copy/copy.receipt.test.mjs +77 -0
- package/api/template/copy/copy.test.mjs +9 -0
- package/api/template/show/show.mjs +15 -4
- package/api/template/show/show.test.mjs +76 -0
- package/api/template/template-integration.test.mjs +14 -0
- package/api/template/template.d.mts +1 -1
- package/api/template/template.doc.mjs +8 -3
- package/api/template/template.mjs +1 -0
- package/api/template/template.type.d.mts +2 -0
- package/api/template/template.type.mjs +2 -0
- package/api/theme/add/add.mjs +17 -25
- package/api/theme/add/add.rollback.test.mjs +158 -0
- package/api/theme/add/add.staging.test.mjs +40 -23
- package/api/theme/build/build.d.mts +24 -0
- package/api/theme/build/build.family.test.mjs +7 -12
- package/api/theme/build/build.mjs +243 -26
- package/api/theme/build/build.project-core.test.mjs +165 -0
- package/api/theme/build/build.rollback.test.mjs +148 -0
- package/api/theme/generateTonalPalette.doc.mjs +1 -2
- package/api/theme/listThemes.doc.mjs +1 -1
- package/api/theme/themeAdd.doc.mjs +9 -10
- package/api/theme/themeBuild.doc.mjs +13 -13
- package/api/theme/themeList.doc.mjs +1 -1
- package/api/theme/themeListAvailable.doc.mjs +2 -1
- package/api/theme/themePaletteGenerate.doc.mjs +15 -8
- package/api/theme/themeTargets.doc.mjs +3 -2
- package/api/theme/themeTemplate.doc.mjs +2 -1
- package/api/upgrade/run/files-changed.test.mjs +111 -0
- package/api/upgrade/run/run.mjs +25 -6
- package/api/upgrade/run/run.test.mjs +45 -1
- package/api/upgrade/upgrade.doc.mjs +24 -22
- package/api/upgrade/upgrade.type.d.mts +1 -0
- package/api/upgrade/upgrade.type.mjs +3 -2
- package/assets/codemods/__tests__/runner.test.mjs +3 -1
- package/assets/codemods/file-count.test.mjs +163 -0
- package/assets/codemods/integration-runner.mjs +3 -3
- package/assets/codemods/runner.mjs +5 -4
- package/assets/docs/README.md +4 -2
- package/assets/docs/browser-support.doc.mjs +11 -11
- package/assets/docs/color.doc.mjs +8 -2
- package/assets/docs/elevation.doc.mjs +6 -4
- package/assets/docs/getting-started.doc.mjs +5 -16
- package/assets/docs/icons.doc.mjs +3 -21
- package/assets/docs/illustrations.doc.mjs +7 -15
- package/assets/docs/internationalization.doc.mjs +7 -5
- package/assets/docs/layout.doc.dense.mjs +130 -82
- package/assets/docs/layout.doc.mjs +133 -77
- package/assets/docs/migration.doc.mjs +19 -21
- package/assets/docs/motion.doc.mjs +16 -3
- package/assets/docs/principles.doc.dense.mjs +5 -5
- package/assets/docs/principles.doc.mjs +8 -0
- package/assets/docs/principles.doc.zh.mjs +6 -6
- package/assets/docs/shape.doc.mjs +8 -3
- package/assets/docs/spacing.doc.mjs +7 -2
- package/assets/docs/styling-libraries.doc.mjs +6 -2
- package/assets/docs/styling.doc.mjs +19 -23
- package/assets/docs/theme.doc.dense.mjs +58 -18
- package/assets/docs/theme.doc.mjs +57 -47
- package/assets/docs/theme.doc.zh.mjs +9 -8
- package/assets/docs/tokens.doc.dense.mjs +2 -2
- package/assets/docs/tokens.doc.mjs +389 -8
- package/assets/docs/tokens.doc.zh.mjs +2 -2
- package/assets/docs/tree/add-a-component.doc.mjs +75 -0
- package/assets/docs/tree/add-a-theme.doc.mjs +85 -0
- package/assets/docs/tree/add-a-topic.doc.mjs +144 -0
- package/assets/docs/tree/agent-guidance.doc.mjs +138 -0
- package/assets/docs/tree/block-template.doc.mjs +130 -0
- package/assets/docs/tree/build-the-template.doc.mjs +28 -0
- package/assets/docs/tree/building-blocks.doc.mjs +46 -0
- package/assets/docs/tree/check-your-docs.doc.mjs +137 -0
- package/assets/docs/tree/checks.doc.mjs +119 -0
- package/assets/docs/tree/codemods.doc.mjs +147 -0
- package/assets/docs/tree/component-family.doc.mjs +113 -0
- package/assets/docs/tree/component-imports.doc.mjs +69 -0
- package/assets/docs/tree/component-lookups.doc.mjs +149 -0
- package/assets/docs/tree/components.doc.mjs +23 -0
- package/assets/docs/tree/configuration.doc.mjs +23 -0
- package/assets/docs/tree/debug-and-gap-reports.doc.mjs +182 -0
- package/assets/docs/tree/define-the-theme.doc.mjs +118 -0
- package/assets/docs/tree/describe-the-component.doc.mjs +57 -0
- package/assets/docs/tree/docs.doc.mjs +21 -0
- package/assets/docs/tree/document-the-template.doc.mjs +28 -0
- package/assets/docs/tree/document-the-theme.doc.mjs +68 -0
- package/assets/docs/tree/export-template-assets.doc.mjs +147 -0
- package/assets/docs/tree/extend-or-replace.doc.mjs +103 -0
- package/assets/docs/tree/fonts-and-assets.doc.mjs +106 -0
- package/assets/docs/tree/generate-a-palette.doc.mjs +66 -0
- package/assets/docs/tree/grade-template-with-agent.doc.mjs +105 -0
- package/assets/docs/tree/help.doc.mjs +16 -0
- package/assets/docs/tree/integrations.doc.mjs +25 -451
- package/assets/docs/tree/links.doc.mjs +98 -0
- package/assets/docs/tree/package-and-test.doc.mjs +32 -0
- package/assets/docs/tree/page-template.doc.mjs +71 -0
- package/assets/docs/tree/publishing.doc.mjs +111 -0
- package/assets/docs/tree/quick-start.doc.mjs +272 -0
- package/assets/docs/tree/replace-a-core-component.doc.mjs +104 -0
- package/assets/docs/tree/replace-a-core-template.doc.mjs +172 -0
- package/assets/docs/tree/sections-and-placement.doc.mjs +108 -0
- package/assets/docs/tree/see-it-in-an-app.doc.mjs +59 -0
- package/assets/docs/tree/ship.doc.mjs +16 -0
- package/assets/docs/tree/short-and-findable.doc.mjs +108 -0
- package/assets/docs/tree/single-component.doc.mjs +165 -0
- package/assets/docs/tree/start-a-template.doc.mjs +143 -0
- package/assets/docs/tree/subcomponent.doc.mjs +115 -0
- package/assets/docs/tree/template-assets.doc.mjs +64 -0
- package/assets/docs/tree/template-doc-overview.doc.mjs +121 -0
- package/assets/docs/tree/template-fonts.doc.mjs +102 -0
- package/assets/docs/tree/template-grading-rubric.doc.mjs +452 -0
- package/assets/docs/tree/template-icons.doc.mjs +97 -0
- package/assets/docs/tree/template-images-media.doc.mjs +127 -0
- package/assets/docs/tree/template-styles.doc.mjs +93 -0
- package/assets/docs/tree/templates.doc.mjs +34 -0
- package/assets/docs/tree/test-in-an-app.doc.mjs +115 -0
- package/assets/docs/tree/test-template-in-app.doc.mjs +128 -0
- package/assets/docs/tree/themes.doc.mjs +39 -0
- package/assets/docs/tree/troubleshooting.doc.mjs +153 -0
- package/assets/docs/tree/upgrading.doc.mjs +103 -0
- package/assets/docs/tree/use-a-theme-in-an-app.doc.mjs +51 -0
- package/assets/docs/tree/verify-packed-template.doc.mjs +77 -0
- package/assets/docs/tree/versioning.doc.mjs +162 -0
- package/assets/docs/tree/write-good-templates.doc.mjs +64 -0
- package/assets/docs/tree/write-the-template-file.doc.mjs +154 -0
- package/assets/docs/typography.doc.mjs +24 -4
- package/assets/docs/working-with-ai.doc.mjs +30 -22
- package/assets/templates/blocks/components/InternationalizationProvider/InternationalizationProvider01ShippedLocale.tsx +1 -1
- package/assets/templates/pages/ai-chat/template.doc.mjs +16 -1
- package/assets/templates/pages/ai-chat-landing/template.doc.mjs +9 -1
- package/assets/templates/pages/blank/template.doc.mjs +3 -1
- package/assets/templates/pages/canvas-editor/template.doc.mjs +9 -1
- package/assets/templates/pages/centered-hero/template.doc.mjs +3 -1
- package/assets/templates/pages/checkout-wizard/template.doc.mjs +1 -0
- package/assets/templates/pages/classic-gallery/template.doc.mjs +3 -1
- package/assets/templates/pages/contact-form/template.doc.mjs +16 -1
- package/assets/templates/pages/dashboard/template.doc.mjs +15 -1
- package/assets/templates/pages/dashboard-alert-rail/template.doc.mjs +23 -1
- package/assets/templates/pages/dashboard-cohort-funnel/template.doc.mjs +10 -1
- package/assets/templates/pages/dashboard-comparison/template.doc.mjs +9 -1
- package/assets/templates/pages/dashboard-composition/template.doc.mjs +10 -1
- package/assets/templates/pages/dashboard-progress/template.doc.mjs +17 -1
- package/assets/templates/pages/dashboard-scorecard/template.doc.mjs +2 -1
- package/assets/templates/pages/detail-page/template.doc.mjs +8 -0
- package/assets/templates/pages/documentation/template.doc.mjs +10 -1
- package/assets/templates/pages/documentation-design/template.doc.mjs +10 -1
- package/assets/templates/pages/documentation-technical/template.doc.mjs +10 -1
- package/assets/templates/pages/editor/template.doc.mjs +9 -1
- package/assets/templates/pages/file-explorer/template.doc.mjs +3 -1
- package/assets/templates/pages/form-two-column/template.doc.mjs +17 -1
- package/assets/templates/pages/form-wizard/template.doc.mjs +14 -1
- package/assets/templates/pages/form-wizard-dialog/template.doc.mjs +1 -0
- package/assets/templates/pages/gallery-hero/template.doc.mjs +10 -1
- package/assets/templates/pages/ide/template.doc.mjs +9 -1
- package/assets/templates/pages/incident-console/template.doc.mjs +10 -1
- package/assets/templates/pages/kanban-board/template.doc.mjs +11 -1
- package/assets/templates/pages/library/template.doc.mjs +15 -1
- package/assets/templates/pages/login/template.doc.mjs +10 -1
- package/assets/templates/pages/login-card/template.doc.mjs +11 -1
- package/assets/templates/pages/login-split/template.doc.mjs +10 -1
- package/assets/templates/pages/login-sso/template.doc.mjs +10 -1
- package/assets/templates/pages/messaging-shell/template.doc.mjs +11 -1
- package/assets/templates/pages/mixed-gallery/template.doc.mjs +10 -1
- package/assets/templates/pages/payment-form/template.doc.mjs +3 -1
- package/assets/templates/pages/product-detail/template.doc.mjs +9 -1
- package/assets/templates/pages/product-gallery/template.doc.mjs +10 -1
- package/assets/templates/pages/settings/template.doc.mjs +3 -1
- package/assets/templates/pages/settings-dialog/template.doc.mjs +9 -1
- package/assets/templates/pages/settings-sidebar/template.doc.mjs +9 -1
- package/assets/templates/pages/shell-nav/template.doc.mjs +10 -1
- package/assets/templates/pages/shell-side-nav/template.doc.mjs +14 -1
- package/assets/templates/pages/shell-top-nav/template.doc.mjs +11 -1
- package/assets/templates/pages/side-gallery/template.doc.mjs +3 -1
- package/assets/templates/pages/table/template.doc.mjs +11 -1
- package/assets/templates/pages/table-filter/template.doc.mjs +21 -1
- package/assets/templates/pages/table-grouped/template.doc.mjs +15 -1
- package/assets/templates/pages/table-inbox/template.doc.mjs +18 -6
- package/assets/templates/pages/table-page/template.doc.mjs +20 -1
- package/assets/templates/pages/table-tree/template.doc.mjs +14 -1
- package/assets/templates/pages/theme-showcase/template.doc.mjs +10 -1
- package/assets/templates/pages/work-item-detail/template.doc.mjs +10 -0
- package/assets/templates/themes/butter/icons.tsx +2 -0
- package/assets/templates/themes/chocolate/icons.tsx +2 -0
- package/assets/templates/themes/gothic/icons.tsx +2 -0
- package/assets/templates/themes/matcha/icons.tsx +2 -0
- package/assets/templates/themes/neutral/icons.tsx +2 -0
- package/assets/templates/themes/stone/icons.tsx +2 -0
- package/assets/templates/themes/y2k/icons.tsx +2 -0
- package/authoring/config/config.doc.mjs +9 -1
- package/authoring/config/parse.d.mts +2 -0
- package/authoring/config/parse.mjs +19 -0
- package/authoring/config/parse.test.mjs +8 -0
- package/authoring/config/type.ts +11 -0
- package/authoring/discover/discover.doc.d.mts +13 -0
- package/authoring/discover/discover.doc.mjs +138 -0
- package/authoring/discover/parse.d.mts +24 -0
- package/authoring/discover/parse.mjs +128 -0
- package/authoring/discover/parse.test.mjs +124 -0
- package/authoring/discover/type.ts +87 -0
- package/authoring/doctypes/_schema.d.mts +3 -2
- package/authoring/doctypes/_schema.mjs +6 -0
- package/authoring/doctypes/base/graph-fields.doc.mjs +3 -3
- package/authoring/doctypes/base/type.ts +4 -2
- package/authoring/doctypes/component/component.doc.mjs +6 -0
- package/authoring/doctypes/component/type.ts +8 -0
- package/authoring/doctypes/reference/reference.doc.mjs +7 -0
- package/authoring/doctypes/reference/type.ts +5 -0
- package/authoring/doctypes/schema/schema.doc.mjs +2 -2
- package/authoring/doctypes/template/parse.d.mts +2 -0
- package/authoring/doctypes/template/parse.mjs +1 -0
- package/authoring/doctypes/template/parse.test.mjs +21 -0
- package/authoring/doctypes/template/template.doc.mjs +7 -1
- package/authoring/doctypes/template/type.ts +12 -2
- package/authoring/index.d.mts +1 -0
- package/authoring/index.d.ts +10 -0
- package/authoring/index.mjs +1 -0
- package/authoring/integration/integration.doc.mjs +12 -10
- package/clients/cli/commands/component/index.mjs +152 -55
- package/clients/cli/commands/component-batch.test.mjs +341 -0
- package/clients/cli/commands/component-ownership.test.mjs +89 -0
- package/clients/cli/commands/component.doc.mjs +27 -9
- package/clients/cli/commands/discover.doc.mjs +53 -9
- package/clients/cli/commands/discover.mjs +393 -118
- package/clients/cli/commands/discover.sources.test.mjs +267 -0
- package/clients/cli/commands/docs.doc.mjs +1 -1
- package/clients/cli/commands/docs.mjs +60 -17
- package/clients/cli/commands/docs.test.mjs +113 -24
- package/clients/cli/commands/doctor-integration-docs.doc.mjs +3 -2
- package/clients/cli/commands/doctor-integration.test.mjs +53 -0
- package/clients/cli/commands/doctor.doc.mjs +3 -1
- package/clients/cli/commands/doctor.mjs +53 -9
- package/clients/cli/commands/gap-report.doc.mjs +10 -9
- package/clients/cli/commands/init.doc.mjs +9 -6
- package/clients/cli/commands/integration-add.doc.mjs +17 -7
- package/clients/cli/commands/integration-authoring.test.mjs +70 -9
- package/clients/cli/commands/integration-pack.doc.mjs +5 -9
- package/clients/cli/commands/integration-real-world.test.mjs +1 -1
- package/clients/cli/commands/integration-verify.doc.mjs +22 -0
- package/clients/cli/commands/integration.doc.mjs +4 -4
- package/clients/cli/commands/integration.mjs +76 -43
- package/clients/cli/commands/layout-expand.doc.mjs +3 -1
- package/clients/cli/commands/layout.expand-receipt.test.mjs +94 -0
- package/clients/cli/commands/layout.mjs +16 -0
- package/clients/cli/commands/manifest.doc.mjs +1 -1
- package/clients/cli/commands/search.doc.mjs +10 -3
- package/clients/cli/commands/search.mjs +21 -2
- package/clients/cli/commands/search.test.mjs +21 -4
- package/clients/cli/commands/swizzle.doc.mjs +1 -1
- package/clients/cli/commands/template.copy-receipt.test.mjs +60 -0
- package/clients/cli/commands/template.doc.mjs +1 -1
- package/clients/cli/commands/template.mjs +19 -5
- package/clients/cli/commands/template.show-media.test.mjs +62 -0
- package/clients/cli/commands/text-json-parity.test.mjs +7 -1
- package/clients/cli/commands/theme-add.doc.mjs +1 -1
- package/clients/cli/commands/theme-palette-generate.doc.mjs +3 -2
- package/clients/cli/commands/theme-palette.doc.mjs +1 -2
- package/clients/cli/commands/theme-targets.doc.mjs +2 -2
- package/clients/cli/commands/theme.doc.mjs +2 -1
- package/clients/cli/commands/upgrade.ascii-output.test.mjs +14 -0
- package/clients/cli/commands/upgrade.doc.mjs +62 -3
- package/clients/cli/commands/write-failure.test.mjs +175 -0
- package/clients/cli/index.mjs +28 -6
- package/clients/cli/lib/define-command.mjs +28 -4
- package/clients/cli/lib/define-command.test.mjs +54 -0
- package/clients/cli/lib/exit-codes.test.mjs +17 -1
- package/clients/cli/lib/json-shim.mjs +24 -14
- package/clients/cli/lib/manifest.mjs +48 -156
- package/clients/cli/lib/manifest.test.mjs +103 -9
- package/clients/cli/lib/parse-error-format.test.mjs +81 -0
- package/foundation/agent-docs/agent-docs.mjs +1 -1
- package/foundation/agent-docs/agent-docs.test.mjs +3 -2
- package/foundation/discovery/authoring-self-docs.mjs +1 -0
- package/foundation/discovery/authoring-self-docs.test.mjs +6 -2
- package/foundation/discovery/cli-self-docs.mjs +16 -2
- package/foundation/discovery/cli-self-docs.test.mjs +20 -0
- package/foundation/discovery/docs-discovery.mjs +5 -1
- package/foundation/discovery/docs-discovery.test.mjs +21 -0
- package/foundation/discovery/docs-section-key.d.mts +1 -1
- package/foundation/discovery/docs-section-key.mjs +1 -1
- package/foundation/discovery/template-adapter.d.mts +14 -0
- package/foundation/discovery/template-adapter.fixture-refs.test.mjs +37 -1
- package/foundation/discovery/template-adapter.mjs +21 -1
- package/foundation/doc-compiler/doc-loads.test.mjs +5 -4
- package/foundation/doc-compiler/inputs.test.mjs +0 -1
- package/foundation/doc-compiler/tree.d.mts +4 -0
- package/foundation/doc-compiler/tree.mjs +6 -1
- package/foundation/doc-compiler/tree.test.mjs +65 -14
- package/foundation/integrations/cli-requirement.d.mts +75 -11
- package/foundation/integrations/cli-requirement.mjs +120 -23
- package/foundation/integrations/cli-requirement.test.mjs +141 -9
- package/foundation/integrations/contribution-inventory.mjs +1 -1
- package/foundation/integrations/integrations.d.mts +14 -1
- package/foundation/integrations/integrations.mjs +41 -1
- package/foundation/integrations/integrations.test.mjs +31 -0
- package/foundation/response/batch.type.d.mts +33 -0
- package/foundation/response/batch.type.mjs +34 -0
- package/foundation/response/error-codes.doc.mjs +6 -8
- package/foundation/response/error-codes.test.mjs +30 -5
- package/foundation/response/response-types.doc.d.mts +5 -4
- package/foundation/response/response-types.doc.mjs +49 -19
- package/foundation/response/response-types.doc.test.mjs +23 -0
- package/foundation/response/response.doc.mjs +11 -10
- package/package.json +9 -9
- package/assets/docs/tree/integrations.test.mjs +0 -62
- package/assets/docs/tree/writing-docs.doc.mjs +0 -286
package/api/hook/hook.doc.mjs
CHANGED
|
@@ -34,6 +34,7 @@ export const doc = {
|
|
|
34
34
|
name: 'options.cwd',
|
|
35
35
|
type: 'string',
|
|
36
36
|
description: 'Directory to resolve @astryxdesign/core from.',
|
|
37
|
+
default: 'process.cwd()',
|
|
37
38
|
},
|
|
38
39
|
{
|
|
39
40
|
name: 'options.list',
|
|
@@ -43,7 +44,8 @@ export const doc = {
|
|
|
43
44
|
{
|
|
44
45
|
name: 'options.category',
|
|
45
46
|
type: 'string',
|
|
46
|
-
description:
|
|
47
|
+
description:
|
|
48
|
+
"List only the hooks in this category, a key of the unfiltered list such as 'Media' or 'Focus'.",
|
|
47
49
|
},
|
|
48
50
|
{
|
|
49
51
|
name: 'options.params',
|
|
@@ -54,7 +56,8 @@ export const doc = {
|
|
|
54
56
|
name: 'options.detail',
|
|
55
57
|
type: "'full' | 'compact' | 'brief'",
|
|
56
58
|
description: 'Detail level for list views.',
|
|
57
|
-
default:
|
|
59
|
+
default:
|
|
60
|
+
"'full' for a named hook; 'brief' for lists (returned as data.detail: 'names')",
|
|
58
61
|
},
|
|
59
62
|
{
|
|
60
63
|
name: 'options.lang',
|
|
@@ -104,7 +107,7 @@ export const doc = {
|
|
|
104
107
|
},
|
|
105
108
|
{
|
|
106
109
|
label: 'Browse a category',
|
|
107
|
-
code: "await hook(undefined, {category: '
|
|
110
|
+
code: "await hook(undefined, {category: 'Media', detail: 'compact'});",
|
|
108
111
|
},
|
|
109
112
|
],
|
|
110
113
|
command: 'hook',
|
package/api/index.d.mts
CHANGED
|
@@ -18,6 +18,7 @@ export { integrationAddTheme } from "./integration/add-theme.mjs";
|
|
|
18
18
|
export { integrationPackCheck } from "./integration/pack-check.mjs";
|
|
19
19
|
export { AstryxError } from "./error.mjs";
|
|
20
20
|
export { logger } from "./logger.mjs";
|
|
21
|
+
export * from "../foundation/response/batch.type.mjs";
|
|
21
22
|
export * from "./component/component.type.mjs";
|
|
22
23
|
export * from "./docs/docs.type.mjs";
|
|
23
24
|
export * from "./blog/blog.type.mjs";
|
package/api/index.mjs
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
/**
|
|
4
4
|
* @file Programmatic API for the Astryx CLI.
|
|
5
5
|
*
|
|
6
|
-
* Every function returns the same { type, data } envelope that `
|
|
6
|
+
* Every function returns the same { type, data } envelope that `astryx --json` outputs.
|
|
7
7
|
* Errors throw AstryxError (with optional .suggestions).
|
|
8
8
|
*
|
|
9
9
|
* @example
|
|
@@ -73,10 +73,12 @@ export {logger} from './logger.mjs';
|
|
|
73
73
|
* @typedef {import('./logger.mjs').Logger} Logger
|
|
74
74
|
*/
|
|
75
75
|
|
|
76
|
-
// ── Types (re-exported from each command's
|
|
76
|
+
// ── Types (re-exported from the shared response foundation and each command's
|
|
77
|
+
// colocated `.type.mjs`) ──────────────────────────────────────────────────
|
|
77
78
|
// Runtime no-ops (the .type.mjs files are `export {}`); tsc carries these
|
|
78
79
|
// through to the generated api/index.d.mts so the public type surface exposes
|
|
79
|
-
// every command's Options + response types
|
|
80
|
+
// the shared receipt vocabulary and every command's Options + response types.
|
|
81
|
+
export * from '../foundation/response/batch.type.mjs';
|
|
80
82
|
export * from './component/component.type.mjs';
|
|
81
83
|
export * from './docs/docs.type.mjs';
|
|
82
84
|
export * from './blog/blog.type.mjs';
|
package/api/init/init.doc.mjs
CHANGED
|
@@ -19,10 +19,9 @@ export const doc = {
|
|
|
19
19
|
'Sets a project up with NO prompts, so it behaves identically for humans, ' +
|
|
20
20
|
'agents, CI, and piped I/O. By default it installs the AGENTS.md/CLAUDE.md ' +
|
|
21
21
|
'agent-docs cheat sheet, including guidance from configured integrations, and ' +
|
|
22
|
-
|
|
23
|
-
'
|
|
24
|
-
'
|
|
25
|
-
'instead of installing.',
|
|
22
|
+
"prints getting-started guidance; `features` / `all` print only the chosen features' " +
|
|
23
|
+
'guidance instead (the theme feature also writes the annotated theme template). ' +
|
|
24
|
+
'With `removeAgents` it removes the managed agent-docs block instead of installing.',
|
|
26
25
|
importPath: '@astryxdesign/cli/api',
|
|
27
26
|
signature:
|
|
28
27
|
'init(options?: InitOptions, ctx?: {cwd?: string}): Promise<InitRunResponse | InitRemoveResponse>',
|
|
@@ -32,7 +31,7 @@ export const doc = {
|
|
|
32
31
|
name: 'options.features',
|
|
33
32
|
type: 'string',
|
|
34
33
|
description:
|
|
35
|
-
'Comma-separated features to install: agents (agent docs), theme (writes the annotated theme.template.ts), template (page-
|
|
34
|
+
'Comma-separated features to install: agents (agent docs), theme (writes the annotated theme.template.ts), template (the page-building commands; writes a page only with templateName).',
|
|
36
35
|
},
|
|
37
36
|
{
|
|
38
37
|
name: 'options.all',
|
|
@@ -47,7 +46,8 @@ export const doc = {
|
|
|
47
46
|
{
|
|
48
47
|
name: 'options.agent',
|
|
49
48
|
type: 'string',
|
|
50
|
-
description:
|
|
49
|
+
description:
|
|
50
|
+
'Agent preset: claude, cursor, codex, hermes, muse, all. Used only when the agents feature runs.',
|
|
51
51
|
},
|
|
52
52
|
{
|
|
53
53
|
name: 'options.agentDocsPath',
|
|
@@ -58,9 +58,14 @@ export const doc = {
|
|
|
58
58
|
name: 'options.templateName',
|
|
59
59
|
type: 'string',
|
|
60
60
|
description:
|
|
61
|
-
'Scaffold
|
|
61
|
+
'Scaffold this page template to src/pages/<name>/page.tsx. Used only when the template feature runs (features includes template, or all); otherwise ignored. Programmatic only; the CLI never sets it.',
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
name: 'ctx.cwd',
|
|
65
|
+
type: 'string',
|
|
66
|
+
description: 'Directory to set up.',
|
|
67
|
+
default: 'process.cwd()',
|
|
62
68
|
},
|
|
63
|
-
{name: 'ctx.cwd', type: 'string', description: 'Directory to set up.'},
|
|
64
69
|
],
|
|
65
70
|
returns: [
|
|
66
71
|
{
|
|
@@ -71,13 +76,13 @@ export const doc = {
|
|
|
71
76
|
{
|
|
72
77
|
type: 'init.remove',
|
|
73
78
|
description:
|
|
74
|
-
'
|
|
79
|
+
'Returned when `removeAgents` is set. `data.removed` is always true, even when no managed block was found.',
|
|
75
80
|
},
|
|
76
81
|
],
|
|
77
82
|
throws: [
|
|
78
83
|
{
|
|
79
84
|
code: 'ERR_UNKNOWN_AGENT',
|
|
80
|
-
when: '`agent` is not one of claude, cursor, codex, hermes, muse, all',
|
|
85
|
+
when: 'the agents feature runs (default mode, features includes agents, or all) and `agent` is not one of claude, cursor, codex, hermes, muse, all',
|
|
81
86
|
},
|
|
82
87
|
{
|
|
83
88
|
code: 'ERR_UNKNOWN_FEATURE',
|
|
@@ -85,7 +90,7 @@ export const doc = {
|
|
|
85
90
|
},
|
|
86
91
|
{
|
|
87
92
|
code: 'ERR_UNKNOWN_TEMPLATE',
|
|
88
|
-
when: '`templateName` matches no bundled template',
|
|
93
|
+
when: 'the template feature runs and `templateName` matches no bundled template',
|
|
89
94
|
},
|
|
90
95
|
{
|
|
91
96
|
code: 'ERR_FILE_EXISTS',
|
|
@@ -93,7 +98,7 @@ export const doc = {
|
|
|
93
98
|
},
|
|
94
99
|
{
|
|
95
100
|
code: 'ERR_PATH_TRAVERSAL',
|
|
96
|
-
when: 'the template output path resolves outside cwd
|
|
101
|
+
when: 'the template output path resolves outside cwd (for example through a symlinked src directory), or, with removeAgents, a managed agent-docs file resolves outside cwd through a symlink',
|
|
97
102
|
},
|
|
98
103
|
],
|
|
99
104
|
examples: [
|
|
@@ -31,7 +31,7 @@ export function integrationAddAgentDoc(line: string, options?: import("./integra
|
|
|
31
31
|
*
|
|
32
32
|
* @param {'component'|'doc'|'template'|'codemod'|'agent-doc'|'theme'} kind
|
|
33
33
|
* @param {string} name
|
|
34
|
-
* @param {{cwd?: string, dryRun?: boolean, templateType?: 'page'|'block', to?: string, replaces?: string, extends?: string, parent?: string}} [options]
|
|
34
|
+
* @param {{cwd?: string, dryRun?: boolean, templateType?: 'page'|'block', to?: string, replaces?: string, extends?: string, parent?: string, from?: string}} [options]
|
|
35
35
|
* @returns {Promise<import('./integration-authoring.type.mjs').IntegrationAddResponse>}
|
|
36
36
|
*/
|
|
37
37
|
export function integrationAdd(kind: "component" | "doc" | "template" | "codemod" | "agent-doc" | "theme", name: string, options?: {
|
|
@@ -42,4 +42,5 @@ export function integrationAdd(kind: "component" | "doc" | "template" | "codemod
|
|
|
42
42
|
replaces?: string;
|
|
43
43
|
extends?: string;
|
|
44
44
|
parent?: string;
|
|
45
|
+
from?: string;
|
|
45
46
|
}): Promise<import("./integration-authoring.type.mjs").IntegrationAddResponse>;
|
|
@@ -1211,7 +1211,7 @@ const KIND_OPTIONS = {
|
|
|
1211
1211
|
template: new Set(['cwd', 'dryRun', 'templateType']),
|
|
1212
1212
|
codemod: new Set(['cwd', 'dryRun', 'to']),
|
|
1213
1213
|
'agent-doc': new Set(['cwd', 'dryRun']),
|
|
1214
|
-
theme: new Set(['cwd', 'dryRun']),
|
|
1214
|
+
theme: new Set(['cwd', 'dryRun', 'from']),
|
|
1215
1215
|
};
|
|
1216
1216
|
|
|
1217
1217
|
/**
|
|
@@ -1238,7 +1238,7 @@ function validateKindOptions(kind, options) {
|
|
|
1238
1238
|
*
|
|
1239
1239
|
* @param {'component'|'doc'|'template'|'codemod'|'agent-doc'|'theme'} kind
|
|
1240
1240
|
* @param {string} name
|
|
1241
|
-
* @param {{cwd?: string, dryRun?: boolean, templateType?: 'page'|'block', to?: string, replaces?: string, extends?: string, parent?: string}} [options]
|
|
1241
|
+
* @param {{cwd?: string, dryRun?: boolean, templateType?: 'page'|'block', to?: string, replaces?: string, extends?: string, parent?: string, from?: string}} [options]
|
|
1242
1242
|
* @returns {Promise<import('./integration-authoring.type.mjs').IntegrationAddResponse>}
|
|
1243
1243
|
*/
|
|
1244
1244
|
export async function integrationAdd(kind, name, options = {}) {
|
|
@@ -1270,6 +1270,10 @@ export async function integrationAdd(kind, name, options = {}) {
|
|
|
1270
1270
|
case 'agent-doc':
|
|
1271
1271
|
return integrationAddAgentDoc(name, options);
|
|
1272
1272
|
case 'theme':
|
|
1273
|
-
return integrationAddTheme(name,
|
|
1273
|
+
return integrationAddTheme(name, {
|
|
1274
|
+
cwd: options.cwd,
|
|
1275
|
+
dryRun: options.dryRun,
|
|
1276
|
+
from: options.from,
|
|
1277
|
+
});
|
|
1274
1278
|
}
|
|
1275
1279
|
}
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
integrationAddTemplate,
|
|
13
13
|
} from './add-contribution.mjs';
|
|
14
14
|
import {validateLocalIntegration} from './validate-integration.mjs';
|
|
15
|
-
import {
|
|
15
|
+
import {NAMESPACE_DOCS_CLI} from '../../foundation/integrations/cli-requirement.mjs';
|
|
16
16
|
|
|
17
17
|
let tmpDir;
|
|
18
18
|
|
|
@@ -355,7 +355,7 @@ describe('integrationAdd doc', () => {
|
|
|
355
355
|
|
|
356
356
|
// The namespace doc needs a CLI that reads it, declared as an optional peer.
|
|
357
357
|
const pkg = JSON.parse(fs.readFileSync(path.join(tmpDir, 'package.json'), 'utf-8'));
|
|
358
|
-
expect(pkg.peerDependencies).toEqual({'@astryxdesign/cli':
|
|
358
|
+
expect(pkg.peerDependencies).toEqual({'@astryxdesign/cli': '>=0.6.4'});
|
|
359
359
|
expect(pkg.peerDependenciesMeta).toEqual({'@astryxdesign/cli': {optional: true}});
|
|
360
360
|
|
|
361
361
|
const second = await integrationAdd('doc', 'upgrading', {
|
|
@@ -429,7 +429,7 @@ describe('integrationAdd doc', () => {
|
|
|
429
429
|
write('^0.6.0');
|
|
430
430
|
await integrationAdd('doc', 'deploying', {cwd: tmpDir, parent: 'acme'});
|
|
431
431
|
expect(JSON.parse(fs.readFileSync(file, 'utf-8')).peerDependencies).toEqual({
|
|
432
|
-
'@astryxdesign/cli': `>=${
|
|
432
|
+
'@astryxdesign/cli': `>=${NAMESPACE_DOCS_CLI}`,
|
|
433
433
|
});
|
|
434
434
|
write('^9.1.0');
|
|
435
435
|
await integrationAdd('doc', 'upgrading', {cwd: tmpDir, parent: 'acme'});
|
|
@@ -8,7 +8,7 @@ export function findPackageDir(startDir: string): string;
|
|
|
8
8
|
/**
|
|
9
9
|
* @typedef {object} WritePlan
|
|
10
10
|
* @property {string} path
|
|
11
|
-
* @property {string} contents
|
|
11
|
+
* @property {string | Buffer} contents a Buffer is written byte for byte
|
|
12
12
|
* @property {boolean} createOnly
|
|
13
13
|
* @property {Buffer} [expectedOriginal] bytes captured before validation;
|
|
14
14
|
* a different current file is a concurrent edit and must never be overwritten
|
|
@@ -56,7 +56,10 @@ export function packageJsonUpdate(packageFile: string, rootPath: string, manifes
|
|
|
56
56
|
export function applyWrites(plans: WritePlan[]): () => void;
|
|
57
57
|
export type WritePlan = {
|
|
58
58
|
path: string;
|
|
59
|
-
|
|
59
|
+
/**
|
|
60
|
+
* a Buffer is written byte for byte
|
|
61
|
+
*/
|
|
62
|
+
contents: string | Buffer;
|
|
60
63
|
createOnly: boolean;
|
|
61
64
|
/**
|
|
62
65
|
* bytes captured before validation;
|
|
@@ -5,7 +5,8 @@
|
|
|
5
5
|
*
|
|
6
6
|
* Hosts the atomic staged-write transaction, package.json files-array
|
|
7
7
|
* maintenance, package-dir resolution, and project-path normalization that
|
|
8
|
-
* every `integration add <kind>` command needs.
|
|
8
|
+
* every `integration add <kind>` command needs. `theme add` and `theme build`
|
|
9
|
+
* write through the same transaction. Stateless and side-effect-free
|
|
9
10
|
* outside of {@link applyWrites}.
|
|
10
11
|
*/
|
|
11
12
|
|
|
@@ -40,7 +41,7 @@ export function findPackageDir(startDir) {
|
|
|
40
41
|
/**
|
|
41
42
|
* @typedef {object} WritePlan
|
|
42
43
|
* @property {string} path
|
|
43
|
-
* @property {string} contents
|
|
44
|
+
* @property {string | Buffer} contents a Buffer is written byte for byte
|
|
44
45
|
* @property {boolean} createOnly
|
|
45
46
|
* @property {Buffer} [expectedOriginal] bytes captured before validation;
|
|
46
47
|
* a different current file is a concurrent edit and must never be overwritten
|
|
@@ -192,21 +193,29 @@ export function packageJsonUpdate(
|
|
|
192
193
|
|
|
193
194
|
// ── Atomic staged-write transaction ─────────────────────────────────
|
|
194
195
|
|
|
195
|
-
/**
|
|
196
|
+
/**
|
|
197
|
+
* @param {string} file
|
|
198
|
+
* @returns {boolean} false when the file is still there
|
|
199
|
+
*/
|
|
196
200
|
function removeTemporary(file) {
|
|
197
201
|
try {
|
|
198
202
|
fs.rmSync(file, {force: true});
|
|
203
|
+
return true;
|
|
199
204
|
} catch {
|
|
200
205
|
// Best effort. The transaction error remains the actionable failure.
|
|
206
|
+
return false;
|
|
201
207
|
}
|
|
202
208
|
}
|
|
203
209
|
|
|
204
210
|
/**
|
|
205
211
|
* Restore writes that already published. Best-effort so callers preserve
|
|
206
|
-
* the original actionable error.
|
|
212
|
+
* the original actionable error; returns every path it could not put back.
|
|
207
213
|
* @param {Array<WritePlan & {temporary: string, original: Buffer|null, mode: number}>} published
|
|
214
|
+
* @returns {string[]}
|
|
208
215
|
*/
|
|
209
216
|
function rollbackWrites(published) {
|
|
217
|
+
/** @type {string[]} */
|
|
218
|
+
const unrestored = [];
|
|
210
219
|
for (const plan of [...published].reverse()) {
|
|
211
220
|
let restore = null;
|
|
212
221
|
try {
|
|
@@ -225,12 +234,18 @@ function rollbackWrites(published) {
|
|
|
225
234
|
fs.renameSync(restore, plan.path);
|
|
226
235
|
restore = null;
|
|
227
236
|
}
|
|
228
|
-
} catch {
|
|
229
|
-
//
|
|
237
|
+
} catch (error) {
|
|
238
|
+
// A created file that is already gone needs nothing. Any other failure
|
|
239
|
+
// leaves this call's bytes, or no bytes, where the original was.
|
|
240
|
+
const gone =
|
|
241
|
+
error instanceof Error &&
|
|
242
|
+
/** @type {NodeJS.ErrnoException} */ (error).code === 'ENOENT';
|
|
243
|
+
if (!(gone && plan.original == null)) unrestored.push(plan.path);
|
|
230
244
|
} finally {
|
|
231
245
|
if (restore != null) removeTemporary(restore);
|
|
232
246
|
}
|
|
233
247
|
}
|
|
248
|
+
return unrestored;
|
|
234
249
|
}
|
|
235
250
|
|
|
236
251
|
/** @param {string} file */
|
|
@@ -325,10 +340,22 @@ export function applyWrites(plans) {
|
|
|
325
340
|
}
|
|
326
341
|
published.push(plan);
|
|
327
342
|
}
|
|
328
|
-
return () =>
|
|
343
|
+
return () => {
|
|
344
|
+
rollbackWrites(published);
|
|
345
|
+
};
|
|
329
346
|
} catch (error) {
|
|
330
|
-
|
|
331
|
-
|
|
347
|
+
const leftovers = staged
|
|
348
|
+
.filter(plan => !removeTemporary(plan.temporary))
|
|
349
|
+
.map(plan => plan.temporary);
|
|
350
|
+
const unrestored = rollbackWrites(published);
|
|
351
|
+
if (error instanceof Error) {
|
|
352
|
+
if (unrestored.length > 0) {
|
|
353
|
+
error.message += ` Could not restore: ${unrestored.join(', ')}.`;
|
|
354
|
+
}
|
|
355
|
+
if (leftovers.length > 0) {
|
|
356
|
+
error.message += ` Could not remove temporary files: ${leftovers.join(', ')}.`;
|
|
357
|
+
}
|
|
358
|
+
}
|
|
332
359
|
throw error;
|
|
333
360
|
}
|
|
334
361
|
}
|