@astryxdesign/cli 0.7.2-canary.fe2c655 → 0.7.2
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 +119 -0
- package/README.md +175 -154
- package/api/build/_adapter.d.mts +8 -0
- package/api/build/_adapter.mjs +12 -1
- package/api/build/build.doc.mjs +4 -0
- package/api/build/help/help.mjs +1 -1
- package/api/build/kit/kit.mjs +3 -11
- package/api/component/_adapter.d.mts +72 -1
- package/api/component/_adapter.mjs +212 -18
- package/api/component/component.doc.mjs +6 -1
- package/api/component/component.mjs +82 -15
- package/api/component/component.test.mjs +80 -0
- package/api/component/doc-links.test.mjs +386 -0
- package/api/component/integration-export-name.test.mjs +644 -0
- package/api/component/list/list.mjs +42 -4
- package/api/discover/_adapter.d.mts +132 -12
- package/api/discover/_adapter.mjs +488 -27
- package/api/discover/_adapter.test.mjs +599 -17
- package/api/discover/_catalog-view.d.mts +16 -5
- package/api/discover/_catalog-view.mjs +32 -8
- package/api/discover/detail/doc/doc.mjs +9 -1
- package/api/discover/discover.d.mts +11 -0
- package/api/discover/discover.doc.mjs +9 -7
- package/api/discover/discover.mjs +121 -19
- package/api/discover/discover.type.d.mts +20 -7
- package/api/discover/discover.type.mjs +17 -7
- package/api/discover/list/list.d.mts +4 -3
- package/api/discover/list/list.mjs +17 -10
- package/api/docs/_adapter.d.mts +74 -0
- package/api/docs/_adapter.mjs +553 -16
- package/api/docs/docs.doc.mjs +2 -1
- package/api/docs/docs.mjs +2 -1
- package/api/docs/docs.test.mjs +5 -2
- package/api/docs/integration-tree.test.mjs +22 -0
- package/api/docs/integrationDocs.test.mjs +124 -0
- package/api/docs/list/list.mjs +12 -2
- package/api/docs/reference-blocks.test.mjs +1 -3
- package/api/doctor/_adapter.d.mts +108 -0
- package/api/doctor/_adapter.mjs +223 -4
- package/api/doctor/doctor.d.mts +199 -0
- package/api/doctor/doctor.doc.mjs +3 -2
- package/api/doctor/doctor.mjs +530 -34
- package/api/doctor/doctor.test.mjs +180 -14
- package/api/doctor/release-checks.test.mjs +156 -0
- package/api/doctor/theme-checks.mjs +17 -4
- package/api/doctor/theme-checks.test.mjs +223 -7
- package/api/error.d.mts +10 -0
- package/api/error.mjs +25 -0
- package/api/gap-report/gap-report.d.mts +3 -0
- package/api/gap-report/gap-report.doc.mjs +11 -3
- package/api/gap-report/gap-report.mjs +219 -52
- package/api/gap-report/gap-report.test.mjs +233 -0
- package/api/gap-report/gap-report.type.d.mts +41 -0
- package/api/gap-report/gap-report.type.mjs +18 -0
- package/api/hook/_adapter.mjs +3 -11
- package/api/hook/hook.doc.mjs +4 -0
- package/api/hook/list/list.d.mts +1 -1
- package/api/index.d.mts +2 -0
- package/api/index.mjs +2 -0
- package/api/init/_adapter.d.mts +22 -0
- package/api/init/_adapter.mjs +59 -0
- package/api/init/init.d.mts +7 -5
- package/api/init/init.doc.mjs +28 -7
- package/api/init/init.mjs +28 -4
- package/api/init/init.type.d.mts +48 -3
- package/api/init/init.type.mjs +37 -3
- package/api/init/run/run.d.mts +1 -1
- package/api/init/run/run.mjs +17 -6
- package/api/init/user/user.d.mts +14 -0
- package/api/init/user/user.mjs +87 -0
- package/api/init/user/user.test.mjs +232 -0
- package/api/integration/_adapter.d.mts +45 -0
- package/api/integration/_adapter.mjs +112 -0
- package/api/integration/add-contribution.component-names.test.mjs +66 -0
- package/api/integration/add-contribution.mjs +8 -4
- package/api/integration/add-contribution.test.mjs +4 -2
- package/api/integration/authoring-checks.mjs +110 -6
- package/api/integration/authoring-checks.test.mjs +808 -0
- package/api/integration/authoring-checks.type.d.mts +143 -0
- package/api/integration/authoring-checks.type.mjs +74 -2
- package/api/integration/check/check.d.mts +96 -0
- package/api/integration/check/check.mjs +357 -0
- package/api/integration/check/check.test.mjs +489 -0
- package/api/integration/integration-check.type.d.mts +118 -0
- package/api/integration/integration-check.type.mjs +84 -0
- package/api/integration/integrationCheck.doc.d.mts +10 -0
- package/api/integration/integrationCheck.doc.mjs +73 -0
- package/api/integration/integrationComponentConflicts.doc.mjs +45 -6
- package/api/integration/integrationDocConflicts.doc.mjs +22 -5
- package/api/integration/pack-check.mjs +364 -120
- package/api/integration/pack-check.test.mjs +730 -10
- package/api/integration/validate-integration-fixes.test.mjs +67 -0
- package/api/integration/validate-integration.d.mts +8 -0
- package/api/integration/validate-integration.mjs +63 -9
- package/api/integration/validate-integration.test.mjs +88 -8
- package/api/integration/validate-integration.type.d.mts +16 -0
- package/api/integration/validate-integration.type.mjs +14 -1
- package/api/integration/validate-unread-theme-folders.test.mjs +3 -2
- package/api/integration/validateIntegration.doc.mjs +19 -3
- package/api/search/_adapter.d.mts +11 -0
- package/api/search/_adapter.mjs +25 -0
- package/api/search/search.d.mts +82 -13
- package/api/search/search.doc.mjs +8 -3
- package/api/search/search.domain-priority.test.mjs +108 -18
- package/api/search/search.integration-check.test.mjs +24 -0
- package/api/search/search.mjs +645 -64
- package/api/search/search.test.mjs +179 -1
- package/api/search/search.type.d.mts +14 -1
- package/api/search/search.type.mjs +6 -1
- package/api/swizzle/_adapter.mjs +2 -2
- package/api/swizzle/copy/copy.mjs +29 -15
- package/api/template/template-integration.test.mjs +1 -1
- package/api/template/template.test.mjs +120 -3
- package/api/theme/_adapter.d.mts +16 -0
- package/api/theme/_adapter.mjs +32 -5
- package/api/theme/build/build.d.mts +2 -1
- package/api/theme/build/build.family.test.mjs +64 -0
- package/api/theme/build/build.mjs +250 -38
- package/api/theme/build/build.packed-old-core.test.mjs +20 -3
- package/api/theme/build/font-warning.mjs +5 -3
- package/api/theme/build/font-warning.test.mjs +2 -1
- package/api/theme/remove/remove.test.mjs +2 -2
- package/api/theme/targets/targets.mjs +3 -10
- package/api/theme/themeBuild.doc.mjs +4 -4
- package/api/theme/themeTargets.doc.mjs +4 -0
- package/api/theme/use/use.test.mjs +1 -1
- package/api/upgrade/_adapter.d.mts +40 -2
- package/api/upgrade/_adapter.mjs +118 -5
- package/api/upgrade/run/cli-behind-core.test.mjs +438 -0
- package/api/upgrade/run/run.mjs +35 -2
- package/api/upgrade/status/status.d.mts +21 -5
- package/api/upgrade/status/status.mjs +45 -8
- package/api/upgrade/upgrade.doc.mjs +6 -3
- package/api/upgrade/upgrade.mjs +5 -1
- package/api/upgrade/upgrade.type.d.mts +23 -0
- package/api/upgrade/upgrade.type.mjs +16 -1
- package/assets/codemods/__tests__/registry.test.mjs +1 -0
- package/assets/codemods/registry.mjs +1 -0
- package/assets/codemods/runner.mjs +7 -1
- package/assets/codemods/transforms/v0.7.2/__tests__/migrate-list-edge-compensation-to-edge.test.mjs +120 -0
- package/assets/codemods/transforms/v0.7.2/index.mjs +20 -0
- package/assets/codemods/transforms/v0.7.2/migrate-list-edge-compensation-to-edge.mjs +198 -0
- package/assets/discover/official-packages.json +367 -0
- package/assets/docs/README.md +10 -0
- package/assets/docs/author-a-theme.doc.mjs +3 -3
- package/assets/docs/browser-support.doc.mjs +1 -1
- package/assets/docs/getting-started.doc.mjs +26 -6
- package/assets/docs/styling-overview.doc.mjs +1 -1
- package/assets/docs/theme.doc.dense.mjs +1 -1
- package/assets/docs/theme.doc.mjs +2 -2
- package/assets/docs/theme.doc.zh.mjs +1 -1
- package/assets/docs/tree/add-a-component.doc.mjs +22 -2
- package/assets/docs/tree/add-a-theme.doc.mjs +13 -3
- package/assets/docs/tree/add-a-topic.doc.mjs +54 -9
- package/assets/docs/tree/agent-guidance.doc.mjs +19 -5
- package/assets/docs/tree/block-template.doc.mjs +8 -20
- package/assets/docs/tree/build-the-template.doc.mjs +1 -1
- package/assets/docs/tree/building-blocks.doc.mjs +4 -0
- package/assets/docs/tree/check-the-props.doc.mjs +201 -0
- package/assets/docs/tree/check-your-docs.doc.mjs +69 -11
- package/assets/docs/tree/checks.doc.mjs +32 -24
- package/assets/docs/tree/ci-and-containers.doc.mjs +88 -0
- package/assets/docs/tree/cli-command.doc.mjs +142 -0
- package/assets/docs/tree/cli.doc.mjs +6 -0
- package/assets/docs/tree/codemods.doc.mjs +17 -7
- package/assets/docs/tree/commands.doc.mjs +7 -1
- package/assets/docs/tree/component-family.doc.mjs +8 -6
- package/assets/docs/tree/component-imports.doc.mjs +21 -3
- package/assets/docs/tree/components.doc.mjs +7 -1
- package/assets/docs/tree/computer-agent-guide.doc.mjs +160 -0
- package/assets/docs/tree/computer-integrations.doc.mjs +93 -0
- package/assets/docs/tree/configuration.doc.mjs +7 -3
- package/assets/docs/tree/debug-and-gap-reports.doc.mjs +41 -22
- package/assets/docs/tree/define-the-theme.doc.mjs +6 -5
- package/assets/docs/tree/describe-the-component.doc.mjs +3 -3
- package/assets/docs/tree/docs.doc.mjs +9 -3
- package/assets/docs/tree/document-the-template.doc.mjs +1 -1
- package/assets/docs/tree/document-the-theme.doc.mjs +3 -3
- package/assets/docs/tree/export-template-assets.doc.mjs +1 -1
- package/assets/docs/tree/extend-or-replace.doc.mjs +19 -9
- package/assets/docs/tree/fonts-and-assets.doc.mjs +2 -2
- package/assets/docs/tree/generate-a-palette.doc.mjs +7 -5
- package/assets/docs/tree/global-integrations.doc.mjs +124 -0
- package/assets/docs/tree/global.doc.mjs +131 -0
- package/assets/docs/tree/grade-template-with-agent.doc.mjs +5 -5
- package/assets/docs/tree/install-once.doc.mjs +105 -0
- package/assets/docs/tree/integrations.doc.mjs +13 -1
- package/assets/docs/tree/layout-spacing.doc.mjs +2 -3
- package/assets/docs/tree/layout.doc.mjs +6 -6
- package/assets/docs/tree/links.doc.mjs +7 -6
- package/assets/docs/tree/migration-setup.doc.mjs +3 -2
- package/assets/docs/tree/migration-verification.doc.mjs +0 -1
- package/assets/docs/tree/migration.doc.mjs +0 -1
- package/assets/docs/tree/monorepos.doc.mjs +84 -0
- package/assets/docs/tree/package-and-test.doc.mjs +1 -1
- package/assets/docs/tree/page-template.doc.mjs +4 -8
- package/assets/docs/tree/problems.doc.mjs +205 -0
- package/assets/docs/tree/project-global-or-both.doc.mjs +131 -0
- package/assets/docs/tree/publishing.doc.mjs +6 -6
- package/assets/docs/tree/quick-start.doc.mjs +53 -27
- package/assets/docs/tree/reference.doc.mjs +192 -0
- package/assets/docs/tree/replace-a-core-component.doc.mjs +15 -7
- package/assets/docs/tree/replace-a-core-template.doc.mjs +10 -12
- package/assets/docs/tree/scaffold.doc.mjs +1 -1
- package/assets/docs/tree/sections-and-placement.doc.mjs +9 -11
- package/assets/docs/tree/see-it-in-an-app.doc.mjs +17 -5
- package/assets/docs/tree/short-and-findable.doc.mjs +9 -8
- package/assets/docs/tree/single-component.doc.mjs +15 -6
- package/assets/docs/tree/start-a-template.doc.mjs +18 -8
- package/assets/docs/tree/subcomponent.doc.mjs +6 -6
- package/assets/docs/tree/template-assets.doc.mjs +2 -2
- package/assets/docs/tree/template-doc-overview.doc.mjs +6 -17
- package/assets/docs/tree/template-fonts.doc.mjs +1 -1
- package/assets/docs/tree/template-icons.doc.mjs +1 -1
- package/assets/docs/tree/template-images-media.doc.mjs +1 -1
- package/assets/docs/tree/template-styles.doc.mjs +2 -2
- package/assets/docs/tree/templates.doc.mjs +7 -1
- package/assets/docs/tree/test-in-an-app.doc.mjs +7 -7
- package/assets/docs/tree/test-template-in-app.doc.mjs +5 -5
- package/assets/docs/tree/themes.doc.mjs +4 -0
- package/assets/docs/tree/tokens-and-setup.doc.mjs +19 -15
- package/assets/docs/tree/troubleshooting.doc.mjs +29 -13
- package/assets/docs/tree/type-scale.doc.mjs +3 -3
- package/assets/docs/tree/uninstall.doc.mjs +109 -0
- package/assets/docs/tree/updates.doc.mjs +92 -0
- package/assets/docs/tree/upgrading.doc.mjs +6 -6
- package/assets/docs/tree/use-a-theme-in-an-app.doc.mjs +14 -2
- package/assets/docs/tree/verify-packed-template.doc.mjs +3 -3
- package/assets/docs/tree/versioning.doc.mjs +10 -9
- package/assets/docs/tree/who-answers.doc.mjs +119 -0
- package/assets/docs/tree/write-the-template-file.doc.mjs +7 -6
- package/assets/docs/use-a-theme.doc.mjs +2 -2
- package/assets/docs/working-with-ai.doc.mjs +66 -13
- package/assets/theme.template.ts +1 -1
- package/authoring/codemod/codemod.doc.mjs +7 -3
- package/authoring/config/config.doc.mjs +9 -6
- package/authoring/config/type.ts +4 -2
- package/authoring/debug/parse.d.mts +5 -5
- package/authoring/discover/discover.doc.mjs +7 -1
- package/authoring/doctypes/_schema.d.mts +8 -3
- package/authoring/doctypes/_schema.mjs +1 -0
- package/authoring/doctypes/base/graph-fields.doc.mjs +6 -4
- package/authoring/doctypes/command/command.doc.mjs +20 -12
- package/authoring/doctypes/command/type.ts +14 -0
- package/authoring/doctypes/component/component.doc.mjs +30 -27
- package/authoring/doctypes/component/type.ts +21 -8
- package/authoring/doctypes/enum/enum.doc.mjs +7 -4
- package/authoring/doctypes/function/function.doc.mjs +9 -8
- package/authoring/doctypes/hook/hook.doc.mjs +5 -4
- package/authoring/doctypes/hook/type.ts +4 -0
- package/authoring/doctypes/namespace/namespace.doc.mjs +7 -6
- package/authoring/doctypes/reference/reference.doc.mjs +12 -11
- package/authoring/doctypes/schema/schema.doc.mjs +9 -9
- package/authoring/doctypes/template/integration-template.doc.d.mts +11 -0
- package/authoring/doctypes/template/integration-template.doc.mjs +49 -0
- package/authoring/doctypes/template/parse.d.mts +6 -2
- package/authoring/doctypes/template/parse.mjs +3 -1
- package/authoring/doctypes/template/template.doc.mjs +3 -3
- package/authoring/doctypes/template/type.ts +22 -0
- package/authoring/doctypes/theme/theme.doc.mjs +2 -2
- package/authoring/gap-report/gap-report.doc.mjs +2 -2
- package/authoring/identity/identity.doc.mjs +3 -3
- package/authoring/index.d.ts +2 -0
- package/authoring/integration/integration.doc.mjs +30 -6
- package/authoring/integration/parse.test.mjs +21 -0
- package/authoring/integration/schema.d.mts +16 -3
- package/authoring/integration/schema.mjs +34 -2
- package/authoring/integration/type.ts +12 -0
- package/clients/cli/bin/astryx.mjs +20 -3
- package/clients/cli/cli-command.test.mjs +166 -0
- package/clients/cli/commands/blog.doc.mjs +1 -0
- package/clients/cli/commands/build-theme.batch-report.test.mjs +17 -3
- package/clients/cli/commands/build-theme.font-warning.test.mjs +3 -3
- package/clients/cli/commands/build-theme.mjs +26 -13
- package/clients/cli/commands/build-theme.path-safety.test.mjs +224 -6
- package/clients/cli/commands/build-theme.registry.test.mjs +5 -2
- package/clients/cli/commands/build.doc.mjs +1 -0
- package/clients/cli/commands/build.exit-codes-doc.test.mjs +4 -0
- package/clients/cli/commands/cli-postinstall.test.mjs +49 -1
- package/clients/cli/commands/component.doc.mjs +1 -0
- package/clients/cli/commands/discover.broken-integration.test.mjs +11 -7
- package/clients/cli/commands/discover.doc.mjs +9 -1
- package/clients/cli/commands/discover.mjs +144 -93
- package/clients/cli/commands/discover.no-source.test.mjs +448 -33
- package/clients/cli/commands/discover.sources.test.mjs +20 -1
- package/clients/cli/commands/docs.doc.mjs +1 -0
- package/clients/cli/commands/docs.mjs +49 -19
- package/clients/cli/commands/docs.test.mjs +2 -2
- package/clients/cli/commands/doctor-integration-components.doc.mjs +19 -4
- package/clients/cli/commands/doctor-integration-docs.doc.mjs +20 -5
- package/clients/cli/commands/doctor-integration-templates.doc.mjs +1 -0
- package/clients/cli/commands/doctor-integration-validate.doc.mjs +22 -2
- package/clients/cli/commands/doctor-integration.test.mjs +888 -3
- package/clients/cli/commands/doctor.doc.mjs +12 -2
- package/clients/cli/commands/doctor.mjs +292 -7
- package/clients/cli/commands/doctor.test.mjs +10 -4
- package/clients/cli/commands/gap-report.doc.mjs +15 -2
- package/clients/cli/commands/gap-report.mjs +24 -2
- package/clients/cli/commands/gap-report.test.mjs +79 -0
- package/clients/cli/commands/hook.doc.mjs +1 -0
- package/clients/cli/commands/init.behavior.test.mjs +5 -0
- package/clients/cli/commands/init.doc.mjs +29 -3
- package/clients/cli/commands/integration-add.doc.mjs +7 -0
- package/clients/cli/commands/integration-authoring.test.mjs +49 -3
- package/clients/cli/commands/integration-check.doc.mjs +93 -0
- package/clients/cli/commands/integration-check.test.mjs +441 -0
- package/clients/cli/commands/integration-pack.doc.mjs +8 -1
- package/clients/cli/commands/integration-verify.doc.mjs +8 -1
- package/clients/cli/commands/integration.doc.mjs +6 -2
- package/clients/cli/commands/integration.mjs +119 -7
- package/clients/cli/commands/json-contract.test.mjs +11 -2
- package/clients/cli/commands/manifest.doc.mjs +1 -0
- package/clients/cli/commands/outside-project.test.mjs +774 -0
- package/clients/cli/commands/search.doc.mjs +1 -0
- package/clients/cli/commands/search.mjs +16 -11
- package/clients/cli/commands/search.test.mjs +429 -296
- package/clients/cli/commands/setup-nudge.test.mjs +102 -2
- package/clients/cli/commands/swizzle.doc.mjs +7 -0
- package/clients/cli/commands/swizzle.mjs +5 -3
- package/clients/cli/commands/swizzle.routing.test.mjs +19 -2
- package/clients/cli/commands/template.doc.mjs +1 -0
- package/clients/cli/commands/text-json-parity.test.mjs +5 -0
- package/clients/cli/commands/theme-add-lifecycle.test.mjs +3 -3
- package/clients/cli/commands/theme-add.doc.mjs +8 -1
- package/clients/cli/commands/theme-build.doc.mjs +3 -2
- package/clients/cli/commands/theme-eject.doc.mjs +1 -0
- package/clients/cli/commands/theme-list.behavior.test.mjs +6 -0
- package/clients/cli/commands/theme-list.doc.mjs +1 -0
- package/clients/cli/commands/theme-palette-generate.doc.mjs +1 -0
- package/clients/cli/commands/theme-remove.doc.mjs +7 -0
- package/clients/cli/commands/theme-targets.doc.mjs +1 -0
- package/clients/cli/commands/theme-template.doc.mjs +1 -0
- package/clients/cli/commands/theme-use.doc.mjs +7 -0
- package/clients/cli/commands/upgrade.config-ordering.test.mjs +2 -1
- package/clients/cli/commands/upgrade.doc.mjs +22 -1
- package/clients/cli/commands/upgrade.file-protection.test.mjs +3 -2
- package/clients/cli/commands/upgrade.hook-output.test.mjs +2 -1
- package/clients/cli/commands/upgrade.older-cli.test.mjs +160 -0
- package/clients/cli/index.mjs +112 -16
- package/clients/cli/lib/cli-error.mjs +4 -1
- package/clients/cli/lib/component-format.test.mjs +1 -1
- package/clients/cli/lib/define-command.mjs +2 -2
- package/clients/cli/lib/json-shim.mjs +3 -1
- package/clients/cli/lib/manifest.d.ts +9 -0
- package/clients/cli/lib/manifest.mjs +17 -1
- package/clients/cli/lib/manifest.test.mjs +25 -0
- package/foundation/agent-docs/agent-doc-state.d.mts +35 -6
- package/foundation/agent-docs/agent-doc-state.mjs +66 -6
- package/foundation/agent-docs/agent-docs.d.mts +4 -3
- package/foundation/agent-docs/agent-docs.mjs +11 -9
- package/foundation/agent-docs/computer-agent-text.d.mts +133 -0
- package/foundation/agent-docs/computer-agent-text.mjs +623 -0
- package/foundation/agent-docs/computer-agent-text.test.mjs +602 -0
- package/foundation/config/project.d.mts +35 -3
- package/foundation/config/project.mjs +226 -7
- package/foundation/config/project.test.mjs +66 -0
- package/foundation/config/theme-state.mjs +5 -4
- package/foundation/discovery/authoring-self-docs.mjs +2 -1
- package/foundation/discovery/cli-self-docs.mjs +20 -3
- package/foundation/discovery/cli-self-docs.test.mjs +3 -2
- package/foundation/discovery/component-discovery.d.mts +190 -10
- package/foundation/discovery/component-discovery.export-names.test.mjs +760 -0
- package/foundation/discovery/component-discovery.mjs +864 -56
- package/foundation/discovery/component-discovery.test.mjs +96 -0
- package/foundation/discovery/component-replacement.mjs +20 -1
- package/foundation/discovery/component-replacement.test.mjs +40 -0
- package/foundation/discovery/copied-passages.d.mts +216 -0
- package/foundation/discovery/copied-passages.mjs +720 -0
- package/foundation/discovery/copied-passages.test.mjs +124 -0
- package/foundation/discovery/doc-consistency.d.mts +34 -0
- package/foundation/discovery/doc-consistency.mjs +513 -0
- package/foundation/discovery/doc-consistency.test.mjs +347 -0
- package/foundation/discovery/doc-fluff.d.mts +112 -0
- package/foundation/discovery/doc-fluff.mjs +328 -0
- package/foundation/discovery/doc-fluff.test.mjs +142 -0
- package/foundation/discovery/doc-types.d.mts +157 -0
- package/foundation/discovery/doc-types.mjs +1231 -0
- package/foundation/discovery/doc-types.test.mjs +744 -0
- package/foundation/discovery/docs-discovery.d.mts +88 -0
- package/foundation/discovery/docs-discovery.mjs +83 -2
- package/foundation/discovery/integration-doc-files.d.mts +22 -0
- package/foundation/discovery/integration-doc-files.mjs +231 -0
- package/foundation/discovery/integration-doc-files.test.mjs +246 -0
- package/foundation/discovery/module-exports.d.mts +27 -0
- package/foundation/discovery/module-exports.mjs +356 -31
- package/foundation/discovery/module-exports.test.mjs +172 -0
- package/foundation/discovery/package-tsconfig.d.mts +14 -0
- package/foundation/discovery/package-tsconfig.mjs +228 -0
- package/foundation/discovery/package-tsconfig.test.mjs +210 -0
- package/foundation/discovery/project-typescript.d.mts +32 -0
- package/foundation/discovery/project-typescript.mjs +89 -0
- package/foundation/discovery/prop-drift.d.mts +297 -0
- package/foundation/discovery/prop-drift.mjs +2428 -0
- package/foundation/discovery/prop-drift.test.mjs +2337 -0
- package/foundation/discovery/runner-allowlist.d.mts +40 -0
- package/foundation/discovery/runner-allowlist.mjs +53 -0
- package/foundation/discovery/stray-pointers.d.mts +52 -0
- package/foundation/discovery/stray-pointers.mjs +293 -0
- package/foundation/discovery/stray-pointers.test.mjs +86 -0
- package/foundation/discovery/template-adapter.mjs +74 -5
- package/foundation/discovery/template-needs.mjs +5 -2
- package/foundation/discovery/theme-imports.mjs +8 -4
- package/foundation/discovery/theme-imports.test.mjs +1 -1
- package/foundation/discovery/type-match.d.mts +53 -0
- package/foundation/discovery/type-match.mjs +660 -0
- package/foundation/discovery/type-match.test.mjs +169 -0
- package/foundation/discovery/type-text.d.mts +68 -0
- package/foundation/discovery/type-text.mjs +658 -0
- package/foundation/discovery/type-text.test.mjs +196 -0
- package/foundation/discovery/unresolved-references.d.mts +62 -0
- package/foundation/discovery/unresolved-references.mjs +790 -0
- package/foundation/discovery/unresolved-references.test.mjs +567 -0
- package/foundation/doc-compiler/doc-loads.test.mjs +51 -1
- package/foundation/doc-compiler/inputs.mjs +27 -1
- package/foundation/doc-compiler/inputs.test.mjs +0 -1
- package/foundation/doc-compiler/links.d.mts +41 -5
- package/foundation/doc-compiler/links.mjs +167 -28
- package/foundation/doc-compiler/links.test.mjs +97 -4
- package/foundation/doc-compiler/read.d.mts +1 -1
- package/foundation/doc-compiler/tree.mjs +30 -1
- package/foundation/doc-compiler/tree.test.mjs +8 -1
- package/foundation/env/cli-command.d.mts +83 -0
- package/foundation/env/cli-command.mjs +152 -0
- package/foundation/env/cli-command.test.mjs +129 -0
- package/foundation/env/node-version.test.mjs +15 -3
- package/foundation/env/package-manager.d.mts +93 -9
- package/foundation/env/package-manager.global.test.mjs +66 -0
- package/foundation/env/package-manager.mjs +184 -13
- package/foundation/env/package-manager.test.mjs +341 -15
- package/foundation/env/project-scope.d.mts +9 -0
- package/foundation/env/project-scope.mjs +33 -0
- package/foundation/env/search-path.d.mts +42 -0
- package/foundation/env/search-path.mjs +205 -0
- package/foundation/env/search-path.test.mjs +122 -0
- package/foundation/env/user-dirs.d.mts +39 -0
- package/foundation/env/user-dirs.mjs +93 -0
- package/foundation/env/user-dirs.test.mjs +72 -0
- package/foundation/env/user-settings.d.mts +46 -0
- package/foundation/env/user-settings.mjs +106 -0
- package/foundation/env/user-settings.test.mjs +64 -0
- package/foundation/fs/file-protection.mjs +15 -1
- package/foundation/fs/module-loader.d.mts +2 -1
- package/foundation/fs/module-loader.mjs +60 -4
- package/foundation/fs/module-loader.stdout.test.mjs +3 -2
- package/foundation/fs/module-loader.test.mjs +194 -0
- package/foundation/fs/path-compare.d.mts +33 -0
- package/foundation/fs/path-compare.mjs +73 -0
- package/foundation/fs/paths.d.mts +57 -1
- package/foundation/fs/paths.mjs +131 -3
- package/foundation/fs/paths.test.mjs +10 -1
- package/foundation/integrations/computer-integrations.d.mts +78 -0
- package/foundation/integrations/computer-integrations.mjs +316 -0
- package/foundation/integrations/computer-integrations.test.mjs +292 -0
- package/foundation/integrations/contribution-inventory.d.mts +11 -0
- package/foundation/integrations/contribution-inventory.mjs +56 -3
- package/foundation/integrations/integration-warnings.mjs +3 -2
- package/foundation/integrations/integration-warnings.test.mjs +8 -9
- package/foundation/integrations/integrations.d.mts +25 -1
- package/foundation/integrations/integrations.mjs +46 -3
- package/foundation/integrations/issue.ts +6 -0
- package/foundation/integrations/validate-contributions.d.mts +2 -0
- package/foundation/integrations/validate-contributions.mjs +41 -1
- package/foundation/release/agent-text-worker.d.mts +4 -0
- package/foundation/release/agent-text-worker.mjs +52 -0
- package/foundation/release/cache.d.mts +310 -0
- package/foundation/release/cache.mjs +1216 -0
- package/foundation/release/cache.test.mjs +920 -0
- package/foundation/release/choose.d.mts +207 -0
- package/foundation/release/choose.mjs +677 -0
- package/foundation/release/choose.test.mjs +427 -0
- package/foundation/release/core-worker.d.mts +4 -0
- package/foundation/release/core-worker.mjs +38 -0
- package/foundation/release/global-state.d.mts +259 -0
- package/foundation/release/global-state.mjs +472 -0
- package/foundation/release/global-state.test.mjs +381 -0
- package/foundation/release/handoff.d.mts +60 -0
- package/foundation/release/handoff.e2e.test.mjs +278 -0
- package/foundation/release/handoff.mjs +357 -0
- package/foundation/release/lock-lease.d.mts +23 -0
- package/foundation/release/lock-lease.mjs +80 -0
- package/foundation/release/notices.d.mts +253 -0
- package/foundation/release/notices.mjs +596 -0
- package/foundation/release/notices.test.mjs +565 -0
- package/foundation/release/npm-guard.d.mts +4 -0
- package/foundation/release/npm-guard.mjs +126 -0
- package/foundation/release/project.d.mts +141 -0
- package/foundation/release/project.mjs +466 -0
- package/foundation/release/project.test.mjs +288 -0
- package/foundation/release/refresh-worker.d.mts +4 -0
- package/foundation/release/refresh-worker.mjs +27 -0
- package/foundation/release/run-context.d.mts +47 -0
- package/foundation/release/run-context.mjs +149 -0
- package/foundation/release/update-notice-env.d.mts +28 -0
- package/foundation/release/update-notice-env.mjs +39 -0
- package/foundation/response/base.d.ts +26 -3
- package/foundation/response/error-codes.d.mts +3 -1
- package/foundation/response/error-codes.doc.mjs +12 -0
- package/foundation/response/error-codes.mjs +17 -0
- package/foundation/response/error-codes.test.mjs +2 -0
- package/foundation/response/json-contract.test.mjs +7 -2
- package/foundation/response/json.mjs +4 -1
- package/foundation/response/response-types.doc.mjs +22 -11
- package/foundation/response/response-types.doc.test.mjs +46 -0
- package/foundation/response/response.doc.mjs +3 -3
- package/foundation/xle/browser-imports.test.mjs +74 -0
- package/foundation/xle/registry.mjs +4 -0
- package/foundation/xle/registry.test.mjs +28 -0
- package/package.json +11 -11
- package/scripts/postinstall.mjs +24 -5
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
import {describe, it, expect, afterEach} from 'vitest';
|
|
4
|
+
import * as fs from 'node:fs';
|
|
5
|
+
import * as path from 'node:path';
|
|
6
|
+
import {
|
|
7
|
+
findDeclaringPackage,
|
|
8
|
+
findLockfile,
|
|
9
|
+
findProjectCli,
|
|
10
|
+
findReadCore,
|
|
11
|
+
lockedVersion,
|
|
12
|
+
readReleaseFacts,
|
|
13
|
+
} from './project.mjs';
|
|
14
|
+
import {
|
|
15
|
+
cleanupFixtures,
|
|
16
|
+
installCore,
|
|
17
|
+
installStandInCli,
|
|
18
|
+
project,
|
|
19
|
+
tempDir,
|
|
20
|
+
writeJson,
|
|
21
|
+
} from '../../test-utils/release-fixtures.mjs';
|
|
22
|
+
|
|
23
|
+
afterEach(cleanupFixtures);
|
|
24
|
+
|
|
25
|
+
describe('findReadCore', () => {
|
|
26
|
+
it('finds the installed Core in the folder or up to four above it, and from the declaring package.json at any depth (b30)', () => {
|
|
27
|
+
const root = project(tempDir(), {'@astryxdesign/core': '0.6.8'});
|
|
28
|
+
installCore(root, '0.6.8');
|
|
29
|
+
const deep = path.join(root, 'a', 'b', 'c', 'd');
|
|
30
|
+
fs.mkdirSync(deep, {recursive: true});
|
|
31
|
+
expect(findReadCore(deep)?.version).toBe('0.6.8');
|
|
32
|
+
const tooDeep = path.join(deep, 'e', 'f', 'g');
|
|
33
|
+
fs.mkdirSync(tooDeep, {recursive: true});
|
|
34
|
+
expect(findReadCore(tooDeep)?.version).toBe('0.6.8');
|
|
35
|
+
// With no package.json that declares Astryx, the reach stays four folders.
|
|
36
|
+
const plain = tempDir();
|
|
37
|
+
writeJson(path.join(plain, 'package.json'), {name: 'plain'});
|
|
38
|
+
installCore(plain, '0.6.8');
|
|
39
|
+
const plainDeep = path.join(plain, 'a', 'b', 'c', 'd', 'e');
|
|
40
|
+
fs.mkdirSync(plainDeep, {recursive: true});
|
|
41
|
+
expect(findReadCore(plainDeep)).toBeNull();
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
it("skips a workspace's packages/core that is another package", () => {
|
|
45
|
+
const root = tempDir();
|
|
46
|
+
writeJson(path.join(root, 'packages', 'core', 'package.json'), {
|
|
47
|
+
name: '@acme/core',
|
|
48
|
+
version: '1.0.0',
|
|
49
|
+
});
|
|
50
|
+
installCore(root, '0.7.1');
|
|
51
|
+
expect(findReadCore(root)?.version).toBe('0.7.1');
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
it("takes a workspace's own CLI package, at the root and inside it (b13)", () => {
|
|
55
|
+
const root = tempDir();
|
|
56
|
+
writeJson(path.join(root, 'package.json'), {name: 'repo', private: true});
|
|
57
|
+
writeJson(path.join(root, 'packages', 'core', 'package.json'), {
|
|
58
|
+
name: '@astryxdesign/core',
|
|
59
|
+
version: '0.7.4',
|
|
60
|
+
});
|
|
61
|
+
writeJson(path.join(root, 'packages', 'cli', 'package.json'), {
|
|
62
|
+
name: '@astryxdesign/cli',
|
|
63
|
+
version: '0.7.4',
|
|
64
|
+
});
|
|
65
|
+
const cliDir = path.join(root, 'packages', 'cli');
|
|
66
|
+
for (const dir of [root, cliDir, path.join(root, 'apps', 'site')]) {
|
|
67
|
+
fs.mkdirSync(dir, {recursive: true});
|
|
68
|
+
expect(findProjectCli(dir)).toEqual({dir: cliDir, version: '0.7.4'});
|
|
69
|
+
}
|
|
70
|
+
writeJson(path.join(root, 'packages', 'cli', 'package.json'), {
|
|
71
|
+
name: 'some-other-cli',
|
|
72
|
+
version: '1.0.0',
|
|
73
|
+
});
|
|
74
|
+
expect(findProjectCli(root)).toBeNull();
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
it("takes a workspace's own Core package", () => {
|
|
78
|
+
const root = tempDir();
|
|
79
|
+
writeJson(path.join(root, 'packages', 'core', 'package.json'), {
|
|
80
|
+
name: '@astryxdesign/core',
|
|
81
|
+
version: '0.7.2',
|
|
82
|
+
});
|
|
83
|
+
expect(findReadCore(root)?.dir).toBe(path.join(root, 'packages', 'core'));
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
describe('findDeclaringPackage', () => {
|
|
88
|
+
it('finds the nearest package.json that declares Core or the CLI', () => {
|
|
89
|
+
const root = project(tempDir(), {'@astryxdesign/core': '^0.6.8'});
|
|
90
|
+
const nested = path.join(root, 'tools', 'pkg');
|
|
91
|
+
writeJson(path.join(nested, 'package.json'), {
|
|
92
|
+
name: 'pkg',
|
|
93
|
+
dependencies: {'left-pad': '1'},
|
|
94
|
+
});
|
|
95
|
+
expect(findDeclaringPackage(nested)).toEqual({
|
|
96
|
+
dir: root,
|
|
97
|
+
core: '^0.6.8',
|
|
98
|
+
cli: null,
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
it('stops at the first folder with version-control metadata', () => {
|
|
103
|
+
const root = project(tempDir(), {'@astryxdesign/core': '0.6.8'});
|
|
104
|
+
const clone = path.join(root, 'vendor', 'repo');
|
|
105
|
+
fs.mkdirSync(path.join(clone, '.git'), {recursive: true});
|
|
106
|
+
expect(findDeclaringPackage(path.join(clone))).toBeNull();
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
it('reads peer and dev dependencies too', () => {
|
|
110
|
+
const root = tempDir();
|
|
111
|
+
writeJson(path.join(root, 'package.json'), {
|
|
112
|
+
name: 'lib',
|
|
113
|
+
peerDependencies: {'@astryxdesign/core': '>=0.7.0'},
|
|
114
|
+
devDependencies: {'@astryxdesign/cli': '0.7.1'},
|
|
115
|
+
});
|
|
116
|
+
expect(findDeclaringPackage(root)).toEqual({
|
|
117
|
+
dir: root,
|
|
118
|
+
core: '>=0.7.0',
|
|
119
|
+
cli: '0.7.1',
|
|
120
|
+
});
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
describe('lockedVersion', () => {
|
|
125
|
+
it('reads an npm lockfile, member entry first', () => {
|
|
126
|
+
const root = tempDir();
|
|
127
|
+
writeJson(path.join(root, 'package-lock.json'), {
|
|
128
|
+
lockfileVersion: 3,
|
|
129
|
+
packages: {
|
|
130
|
+
'node_modules/@astryxdesign/core': {version: '0.7.1'},
|
|
131
|
+
'apps/legacy/node_modules/@astryxdesign/core': {version: '0.6.8'},
|
|
132
|
+
},
|
|
133
|
+
});
|
|
134
|
+
const lock = path.join(root, 'package-lock.json');
|
|
135
|
+
expect(lockedVersion(lock, root, '@astryxdesign/core', '0.7.1')).toBe(
|
|
136
|
+
'0.7.1',
|
|
137
|
+
);
|
|
138
|
+
expect(
|
|
139
|
+
lockedVersion(
|
|
140
|
+
lock,
|
|
141
|
+
path.join(root, 'apps', 'legacy'),
|
|
142
|
+
'@astryxdesign/core',
|
|
143
|
+
'0.6.8',
|
|
144
|
+
),
|
|
145
|
+
).toBe('0.6.8');
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
it('reads a pnpm lockfile importer, dropping the peer suffix', () => {
|
|
149
|
+
const root = tempDir();
|
|
150
|
+
const lock = path.join(root, 'pnpm-lock.yaml');
|
|
151
|
+
fs.writeFileSync(
|
|
152
|
+
lock,
|
|
153
|
+
[
|
|
154
|
+
"lockfileVersion: '9.0'",
|
|
155
|
+
'',
|
|
156
|
+
'importers:',
|
|
157
|
+
'',
|
|
158
|
+
' .:',
|
|
159
|
+
' dependencies:',
|
|
160
|
+
" '@astryxdesign/core':",
|
|
161
|
+
' specifier: ^0.6.8',
|
|
162
|
+
' version: 0.6.8(react@19.0.0)',
|
|
163
|
+
'',
|
|
164
|
+
' apps/web:',
|
|
165
|
+
' dependencies:',
|
|
166
|
+
" '@astryxdesign/core':",
|
|
167
|
+
' specifier: 0.7.1',
|
|
168
|
+
' version: 0.7.1',
|
|
169
|
+
'',
|
|
170
|
+
'packages:',
|
|
171
|
+
'',
|
|
172
|
+
].join('\n'),
|
|
173
|
+
);
|
|
174
|
+
expect(lockedVersion(lock, root, '@astryxdesign/core', '^0.6.8')).toBe(
|
|
175
|
+
'0.6.8',
|
|
176
|
+
);
|
|
177
|
+
expect(
|
|
178
|
+
lockedVersion(
|
|
179
|
+
lock,
|
|
180
|
+
path.join(root, 'apps', 'web'),
|
|
181
|
+
'@astryxdesign/core',
|
|
182
|
+
'0.7.1',
|
|
183
|
+
),
|
|
184
|
+
).toBe('0.7.1');
|
|
185
|
+
});
|
|
186
|
+
|
|
187
|
+
it('reads classic and Berry yarn lockfiles by the declared range', () => {
|
|
188
|
+
const root = tempDir();
|
|
189
|
+
const classic = path.join(root, 'yarn.lock');
|
|
190
|
+
fs.writeFileSync(
|
|
191
|
+
classic,
|
|
192
|
+
[
|
|
193
|
+
'# yarn lockfile v1',
|
|
194
|
+
'',
|
|
195
|
+
'"@astryxdesign/core@^0.6.0":',
|
|
196
|
+
' version "0.6.8"',
|
|
197
|
+
'',
|
|
198
|
+
'"@astryxdesign/core@0.7.1":',
|
|
199
|
+
' version "0.7.1"',
|
|
200
|
+
'',
|
|
201
|
+
].join('\n'),
|
|
202
|
+
);
|
|
203
|
+
expect(lockedVersion(classic, root, '@astryxdesign/core', '^0.6.0')).toBe(
|
|
204
|
+
'0.6.8',
|
|
205
|
+
);
|
|
206
|
+
const berryDir = tempDir();
|
|
207
|
+
const berry = path.join(berryDir, 'yarn.lock');
|
|
208
|
+
fs.writeFileSync(
|
|
209
|
+
berry,
|
|
210
|
+
[
|
|
211
|
+
'__metadata:',
|
|
212
|
+
' version: 8',
|
|
213
|
+
'',
|
|
214
|
+
'"@astryxdesign/core@npm:^0.6.8":',
|
|
215
|
+
' version: 0.6.8',
|
|
216
|
+
' resolution: "@astryxdesign/core@npm:0.6.8"',
|
|
217
|
+
'',
|
|
218
|
+
].join('\n'),
|
|
219
|
+
);
|
|
220
|
+
expect(lockedVersion(berry, berryDir, '@astryxdesign/core', '^0.6.8')).toBe(
|
|
221
|
+
'0.6.8',
|
|
222
|
+
);
|
|
223
|
+
});
|
|
224
|
+
|
|
225
|
+
it('reads a bun lockfile', () => {
|
|
226
|
+
const root = tempDir();
|
|
227
|
+
const lock = path.join(root, 'bun.lock');
|
|
228
|
+
fs.writeFileSync(
|
|
229
|
+
lock,
|
|
230
|
+
'{\n "lockfileVersion": 1,\n "packages": {\n "@astryxdesign/core": ["@astryxdesign/core@0.6.8", "", {}, "sha512-x"],\n },\n}\n',
|
|
231
|
+
);
|
|
232
|
+
expect(lockedVersion(lock, root, '@astryxdesign/core', '^0.6.0')).toBe(
|
|
233
|
+
'0.6.8',
|
|
234
|
+
);
|
|
235
|
+
});
|
|
236
|
+
|
|
237
|
+
it('finds the lockfile above a workspace member', () => {
|
|
238
|
+
const root = tempDir();
|
|
239
|
+
fs.writeFileSync(
|
|
240
|
+
path.join(root, 'pnpm-lock.yaml'),
|
|
241
|
+
"lockfileVersion: '9.0'\n",
|
|
242
|
+
);
|
|
243
|
+
const member = path.join(root, 'apps', 'web');
|
|
244
|
+
fs.mkdirSync(member, {recursive: true});
|
|
245
|
+
expect(findLockfile(member)).toBe(path.join(root, 'pnpm-lock.yaml'));
|
|
246
|
+
});
|
|
247
|
+
});
|
|
248
|
+
|
|
249
|
+
describe('readReleaseFacts', () => {
|
|
250
|
+
it('reports a fresh clone from its package.json and lockfile', () => {
|
|
251
|
+
const root = project(tempDir(), {
|
|
252
|
+
'@astryxdesign/core': '^0.6.0',
|
|
253
|
+
'@astryxdesign/cli': '^0.6.0',
|
|
254
|
+
});
|
|
255
|
+
writeJson(path.join(root, 'package-lock.json'), {
|
|
256
|
+
lockfileVersion: 3,
|
|
257
|
+
packages: {
|
|
258
|
+
'node_modules/@astryxdesign/core': {version: '0.6.8'},
|
|
259
|
+
'node_modules/@astryxdesign/cli': {version: '0.6.8'},
|
|
260
|
+
},
|
|
261
|
+
});
|
|
262
|
+
expect(readReleaseFacts(root)).toMatchObject({
|
|
263
|
+
inProject: true,
|
|
264
|
+
core: null,
|
|
265
|
+
cli: null,
|
|
266
|
+
lockedCoreVersion: '0.6.8',
|
|
267
|
+
lockedCliVersion: '0.6.8',
|
|
268
|
+
});
|
|
269
|
+
});
|
|
270
|
+
|
|
271
|
+
it('reports the installed Core and CLI', () => {
|
|
272
|
+
const root = project(tempDir(), {'@astryxdesign/core': '0.7.1'});
|
|
273
|
+
installCore(root, '0.7.1');
|
|
274
|
+
installStandInCli(root, '0.6.8');
|
|
275
|
+
const facts = readReleaseFacts(root);
|
|
276
|
+
expect(facts.core?.version).toBe('0.7.1');
|
|
277
|
+
expect(facts.cli?.version).toBe('0.6.8');
|
|
278
|
+
});
|
|
279
|
+
|
|
280
|
+
it('reports a folder with no Astryx as outside a project', () => {
|
|
281
|
+
const root = tempDir();
|
|
282
|
+
writeJson(path.join(root, 'package.json'), {
|
|
283
|
+
name: 'x',
|
|
284
|
+
dependencies: {react: '19'},
|
|
285
|
+
});
|
|
286
|
+
expect(readReleaseFacts(root).inProject).toBe(false);
|
|
287
|
+
});
|
|
288
|
+
});
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @file The background update check, as its own detached process.
|
|
5
|
+
*
|
|
6
|
+
* Started by `maybeStartCheck` (global-state.mjs) with one argument, the
|
|
7
|
+
* per-user configuration folder. It writes nothing to any stream and never
|
|
8
|
+
* reaches a person: it is not a command and takes no options. Its whole job
|
|
9
|
+
* is `runCheck`, which asks the registry for the newest release and installs
|
|
10
|
+
* nothing.
|
|
11
|
+
*
|
|
12
|
+
* @input argv[2]: the per-user configuration folder
|
|
13
|
+
* @output the updated state on disk
|
|
14
|
+
* @position foundation/release — one of the two detached processes the CLI
|
|
15
|
+
* starts; the other is agent-text-worker.mjs.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import {runCheck} from './global-state.mjs';
|
|
19
|
+
|
|
20
|
+
const stateDir = process.argv[2];
|
|
21
|
+
if (stateDir) {
|
|
22
|
+
try {
|
|
23
|
+
runCheck({stateDir});
|
|
24
|
+
} catch {
|
|
25
|
+
// A failed check changes nothing.
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
// @generated by scripts/sync-api-types.mjs from the JSDoc in foundation/**/*.mjs.
|
|
2
|
+
// DO NOT EDIT — run `pnpm sync:api-types` to regenerate.
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Record the bin's choice for this process.
|
|
6
|
+
* @param {import('./choose.mjs').ReleaseChoice} choice
|
|
7
|
+
*/
|
|
8
|
+
export function recordRunChoice(choice: import("./choose.mjs").ReleaseChoice): void;
|
|
9
|
+
/**
|
|
10
|
+
* The choice that applies to `cwd`: the bin's, else one made now.
|
|
11
|
+
* @param {string} [cwd]
|
|
12
|
+
* @returns {import('./choose.mjs').ReleaseChoice}
|
|
13
|
+
*/
|
|
14
|
+
export function runChoice(cwd?: string): import("./choose.mjs").ReleaseChoice;
|
|
15
|
+
/** The running CLI's version. */
|
|
16
|
+
export function cliVersion(): string;
|
|
17
|
+
/**
|
|
18
|
+
* The Core a copy carries: the `@astryxdesign/core` of its own release, beside
|
|
19
|
+
* the CLI package (a release in the cache, or a package runner that fetched
|
|
20
|
+
* both), else the cached release of the same version. With `fetch`, a copy
|
|
21
|
+
* that carries none installs its release into the cache first.
|
|
22
|
+
*
|
|
23
|
+
* @param {{fetch?: boolean, cacheDir?: string}} [options]
|
|
24
|
+
* @returns {{dir: string | null, unavailable: string | null, version?: string, reason?: string}}
|
|
25
|
+
*/
|
|
26
|
+
export function carriedCore(options?: {
|
|
27
|
+
fetch?: boolean;
|
|
28
|
+
cacheDir?: string;
|
|
29
|
+
}): {
|
|
30
|
+
dir: string | null;
|
|
31
|
+
unavailable: string | null;
|
|
32
|
+
version?: string;
|
|
33
|
+
reason?: string;
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* `meta.answeredBy` for this run: the answering CLI's version, the Core the
|
|
37
|
+
* run pairs with (`null` when there is none), and which copy answered.
|
|
38
|
+
* @param {string} [cwd]
|
|
39
|
+
* @returns {{cli: string, core: string | null, copy: 'project' | 'starting' | 'matched' | 'carried' | 'fallback'}}
|
|
40
|
+
*/
|
|
41
|
+
export function answeredBy(cwd?: string): {
|
|
42
|
+
cli: string;
|
|
43
|
+
core: string | null;
|
|
44
|
+
copy: "project" | "starting" | "matched" | "carried" | "fallback";
|
|
45
|
+
};
|
|
46
|
+
/** Exported for tests: forget the recorded choice. */
|
|
47
|
+
export function _resetRunChoice(): void;
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @file Who answered this run: the record behind `meta.answeredBy` and the
|
|
5
|
+
* Core a copy carries for use outside a project (spec AST-081 FR3, FR5).
|
|
6
|
+
*
|
|
7
|
+
* The bin records the choice it made (handoff.mjs) before any command runs.
|
|
8
|
+
* A caller that drives the CLI in-process, such as the test harness or the
|
|
9
|
+
* programmatic API, never went through the bin, so the choice is made here on
|
|
10
|
+
* first use from the working folder, without asking the registry.
|
|
11
|
+
*
|
|
12
|
+
* @input the bin's choice, or the working folder
|
|
13
|
+
* @output `{cli, core, copy}`; the carried Core's folder
|
|
14
|
+
* @position foundation/release — read by jsonOut and by the Core lookups of
|
|
15
|
+
* commands that answer from Core outside a project.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import * as path from 'node:path';
|
|
19
|
+
import {fileURLToPath} from 'node:url';
|
|
20
|
+
import {chooseRelease, isComputerLevel, runningCopy} from './choose.mjs';
|
|
21
|
+
import {progressLine} from './handoff.mjs';
|
|
22
|
+
import {isJsonMode} from '../response/json.mjs';
|
|
23
|
+
import {cachedRelease, ensureRelease, userCacheDir} from './cache.mjs';
|
|
24
|
+
import {readJson, findReadCore, CORE_PACKAGE_NAME} from './project.mjs';
|
|
25
|
+
|
|
26
|
+
/** The running CLI package's folder. */
|
|
27
|
+
const CLI_ROOT = path.resolve(
|
|
28
|
+
path.dirname(fileURLToPath(import.meta.url)),
|
|
29
|
+
'..',
|
|
30
|
+
'..',
|
|
31
|
+
);
|
|
32
|
+
|
|
33
|
+
/** @type {import('./choose.mjs').ReleaseChoice | null} */
|
|
34
|
+
let recorded = null;
|
|
35
|
+
/** @type {string | null} */
|
|
36
|
+
let recordedFor = null;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Record the bin's choice for this process.
|
|
40
|
+
* @param {import('./choose.mjs').ReleaseChoice} choice
|
|
41
|
+
*/
|
|
42
|
+
export function recordRunChoice(choice) {
|
|
43
|
+
recorded = choice;
|
|
44
|
+
recordedFor = process.cwd();
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* The choice that applies to `cwd`: the bin's, else one made now.
|
|
49
|
+
* @param {string} [cwd]
|
|
50
|
+
* @returns {import('./choose.mjs').ReleaseChoice}
|
|
51
|
+
*/
|
|
52
|
+
export function runChoice(cwd = process.cwd()) {
|
|
53
|
+
if (recorded && recordedFor === path.resolve(cwd)) return recorded;
|
|
54
|
+
try {
|
|
55
|
+
const self = runningCopy(CLI_ROOT);
|
|
56
|
+
const choice = chooseRelease({
|
|
57
|
+
cwd,
|
|
58
|
+
self,
|
|
59
|
+
resolve: () => null,
|
|
60
|
+
computer: isComputerLevel(process.argv.slice(2)),
|
|
61
|
+
});
|
|
62
|
+
if (choice.answer === 'self') return choice;
|
|
63
|
+
// Driven in-process (the programmatic API, a test harness), nothing hands
|
|
64
|
+
// the run off: this copy answers, as the copy that started the run.
|
|
65
|
+
return {
|
|
66
|
+
...choice,
|
|
67
|
+
copy: choice.inProject ? 'starting' : 'carried',
|
|
68
|
+
answer: 'self',
|
|
69
|
+
version: self.version,
|
|
70
|
+
bin: null,
|
|
71
|
+
unavailable: null,
|
|
72
|
+
};
|
|
73
|
+
} catch {
|
|
74
|
+
return {
|
|
75
|
+
copy: 'carried',
|
|
76
|
+
answer: 'self',
|
|
77
|
+
version: runningCopy(CLI_ROOT).version,
|
|
78
|
+
bin: null,
|
|
79
|
+
coreVersion: null,
|
|
80
|
+
inProject: false,
|
|
81
|
+
unavailable: null,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/** The running CLI's version. */
|
|
87
|
+
export function cliVersion() {
|
|
88
|
+
return runningCopy(CLI_ROOT).version;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* The Core a copy carries: the `@astryxdesign/core` of its own release, beside
|
|
93
|
+
* the CLI package (a release in the cache, or a package runner that fetched
|
|
94
|
+
* both), else the cached release of the same version. With `fetch`, a copy
|
|
95
|
+
* that carries none installs its release into the cache first.
|
|
96
|
+
*
|
|
97
|
+
* @param {{fetch?: boolean, cacheDir?: string}} [options]
|
|
98
|
+
* @returns {{dir: string | null, unavailable: string | null, version?: string, reason?: string}}
|
|
99
|
+
*/
|
|
100
|
+
export function carriedCore(options = {}) {
|
|
101
|
+
const {fetch = false, cacheDir = userCacheDir()} = options;
|
|
102
|
+
const version = cliVersion();
|
|
103
|
+
const beside = path.resolve(CLI_ROOT, '..', 'core');
|
|
104
|
+
const besidePkg = readJson(path.join(beside, 'package.json'));
|
|
105
|
+
if (besidePkg?.name === CORE_PACKAGE_NAME && besidePkg.version === version) {
|
|
106
|
+
return {dir: beside, unavailable: null};
|
|
107
|
+
}
|
|
108
|
+
const cached = cachedRelease(version, cacheDir);
|
|
109
|
+
if (cached) return {dir: cached.coreDir, unavailable: null};
|
|
110
|
+
if (!fetch) return {dir: null, unavailable: null};
|
|
111
|
+
const json = isJsonMode() || process.argv.includes('--json');
|
|
112
|
+
const release = ensureRelease(version, {
|
|
113
|
+
cacheDir,
|
|
114
|
+
onProgress: json ? undefined : progressLine,
|
|
115
|
+
});
|
|
116
|
+
return 'coreDir' in release
|
|
117
|
+
? {dir: release.coreDir, unavailable: null}
|
|
118
|
+
: {
|
|
119
|
+
dir: null,
|
|
120
|
+
unavailable: `Core ${version} could not be installed: ${release.reason}`,
|
|
121
|
+
version,
|
|
122
|
+
reason: release.reason,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* `meta.answeredBy` for this run: the answering CLI's version, the Core the
|
|
128
|
+
* run pairs with (`null` when there is none), and which copy answered.
|
|
129
|
+
* @param {string} [cwd]
|
|
130
|
+
* @returns {{cli: string, core: string | null, copy: 'project' | 'starting' | 'matched' | 'carried' | 'fallback'}}
|
|
131
|
+
*/
|
|
132
|
+
export function answeredBy(cwd = process.cwd()) {
|
|
133
|
+
const choice = runChoice(cwd);
|
|
134
|
+
const read = findReadCore(cwd);
|
|
135
|
+
let core = read ? read.version : null;
|
|
136
|
+
if (!core && choice.copy !== 'project') {
|
|
137
|
+
const carried = carriedCore();
|
|
138
|
+
core = carried.dir
|
|
139
|
+
? (readJson(path.join(carried.dir, 'package.json'))?.version ?? null)
|
|
140
|
+
: null;
|
|
141
|
+
}
|
|
142
|
+
return {cli: cliVersion(), core, copy: choice.copy};
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/** Exported for tests: forget the recorded choice. */
|
|
146
|
+
export function _resetRunChoice() {
|
|
147
|
+
recorded = null;
|
|
148
|
+
recordedFor = null;
|
|
149
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// @generated by scripts/sync-api-types.mjs from the JSDoc in foundation/**/*.mjs.
|
|
2
|
+
// DO NOT EDIT — run `pnpm sync:api-types` to regenerate.
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @file When the environment turns update notices off (spec AST-081 FR6,
|
|
6
|
+
* FR10): the standard `CI` variable, which continuous integration services
|
|
7
|
+
* set, and `NO_UPDATE_NOTIFIER`, the variable command-line tools share to
|
|
8
|
+
* silence update notices (update-notifier, the Vercel CLI). Astryx defines
|
|
9
|
+
* neither; it reads each for its shared meaning only (`spec:AST-017` FR14).
|
|
10
|
+
*
|
|
11
|
+
* @input the environment
|
|
12
|
+
* @output whether to skip the update check and every update notice
|
|
13
|
+
* @position foundation/release — read by global-state.mjs and notices.mjs.
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Whether `CI` is set to a value that means yes: present, and not empty,
|
|
17
|
+
* `0`, or `false`, as continuous integration detection usually reads it.
|
|
18
|
+
* @param {Record<string, string | undefined>} env
|
|
19
|
+
* @returns {boolean}
|
|
20
|
+
*/
|
|
21
|
+
export function isCi(env: Record<string, string | undefined>): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Whether update checks and notices are off in this environment: in
|
|
24
|
+
* continuous integration, or with `NO_UPDATE_NOTIFIER` set to any value.
|
|
25
|
+
* @param {Record<string, string | undefined>} [env]
|
|
26
|
+
* @returns {boolean}
|
|
27
|
+
*/
|
|
28
|
+
export function updateNoticesOff(env?: Record<string, string | undefined>): boolean;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @file When the environment turns update notices off (spec AST-081 FR6,
|
|
5
|
+
* FR10): the standard `CI` variable, which continuous integration services
|
|
6
|
+
* set, and `NO_UPDATE_NOTIFIER`, the variable command-line tools share to
|
|
7
|
+
* silence update notices (update-notifier, the Vercel CLI). Astryx defines
|
|
8
|
+
* neither; it reads each for its shared meaning only (`spec:AST-017` FR14).
|
|
9
|
+
*
|
|
10
|
+
* @input the environment
|
|
11
|
+
* @output whether to skip the update check and every update notice
|
|
12
|
+
* @position foundation/release — read by global-state.mjs and notices.mjs.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Whether `CI` is set to a value that means yes: present, and not empty,
|
|
17
|
+
* `0`, or `false`, as continuous integration detection usually reads it.
|
|
18
|
+
* @param {Record<string, string | undefined>} env
|
|
19
|
+
* @returns {boolean}
|
|
20
|
+
*/
|
|
21
|
+
export function isCi(env) {
|
|
22
|
+
const value = env.CI;
|
|
23
|
+
return (
|
|
24
|
+
value !== undefined &&
|
|
25
|
+
value !== '' &&
|
|
26
|
+
value !== '0' &&
|
|
27
|
+
value.toLowerCase() !== 'false'
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Whether update checks and notices are off in this environment: in
|
|
33
|
+
* continuous integration, or with `NO_UPDATE_NOTIFIER` set to any value.
|
|
34
|
+
* @param {Record<string, string | undefined>} [env]
|
|
35
|
+
* @returns {boolean}
|
|
36
|
+
*/
|
|
37
|
+
export function updateNoticesOff(env = process.env) {
|
|
38
|
+
return isCi(env) || env.NO_UPDATE_NOTIFIER !== undefined;
|
|
39
|
+
}
|
|
@@ -45,8 +45,9 @@ export interface CLIUnsupportedError {
|
|
|
45
45
|
|
|
46
46
|
/**
|
|
47
47
|
* A success response: a `type` discriminator, the `package` that owns what the
|
|
48
|
-
* response is about, its `data` payload, and an optional `meta`
|
|
49
|
-
* (emitted as a sibling of `data`, never merged in)
|
|
48
|
+
* response is about, its `data` payload, and an optional `meta` object
|
|
49
|
+
* (emitted as a sibling of `data`, never merged in) that carries
|
|
50
|
+
* `answeredBy` and fields such as `deprecations`. `--json` prints it with
|
|
50
51
|
* `apiVersion` added (see `parseResponse`).
|
|
51
52
|
*
|
|
52
53
|
* `package` is present when the response is about one thing: one component,
|
|
@@ -56,11 +57,33 @@ export interface CLIUnsupportedError {
|
|
|
56
57
|
* Structural by design — there is no central union of every response `type`.
|
|
57
58
|
* A specific command narrows `data` via its own return type.
|
|
58
59
|
*/
|
|
60
|
+
/**
|
|
61
|
+
* Which copy of the CLI answered a run (spec AST-081 FR5): carried in `meta`
|
|
62
|
+
* on every successful machine-readable result of a release that has it.
|
|
63
|
+
* - `project`: the project's own CLI.
|
|
64
|
+
* - `starting`: the copy that started the run, in a project with no CLI of
|
|
65
|
+
* its own.
|
|
66
|
+
* - `matched`: the release equal to the project's Core, when the project's
|
|
67
|
+
* own CLI cannot start, from the per-user cache or the copy that started
|
|
68
|
+
* the run.
|
|
69
|
+
* - `carried`: outside a project, the copy that started the run, with the Core
|
|
70
|
+
* it carries.
|
|
71
|
+
* - `fallback`: the matched release could not be obtained, so the copy that
|
|
72
|
+
* started the run answered instead.
|
|
73
|
+
*/
|
|
74
|
+
export interface AnsweredBy {
|
|
75
|
+
/** The answering CLI's version. */
|
|
76
|
+
cli: string;
|
|
77
|
+
/** The Core the run pairs with, or `null` when there is none. */
|
|
78
|
+
core: string | null;
|
|
79
|
+
copy: 'project' | 'starting' | 'matched' | 'carried' | 'fallback';
|
|
80
|
+
}
|
|
81
|
+
|
|
59
82
|
export interface CLIResponse {
|
|
60
83
|
type: string;
|
|
61
84
|
package?: string;
|
|
62
85
|
data: unknown;
|
|
63
|
-
meta?: Record<string, unknown>;
|
|
86
|
+
meta?: {answeredBy?: AnsweredBy} & Record<string, unknown>;
|
|
64
87
|
}
|
|
65
88
|
|
|
66
89
|
/** Wrap any response type to include possible error shapes. */
|
|
@@ -99,6 +99,8 @@ export function allErrorCodes(): string[];
|
|
|
99
99
|
* | 'ERR_LAYOUT_INVALID'
|
|
100
100
|
* | 'ERR_UNCLASSIFIED_EXIT'
|
|
101
101
|
* | 'ERR_SIGNAL_TERMINATED'
|
|
102
|
+
* | 'ERR_VERSIONS_UNAVAILABLE'
|
|
103
|
+
* | 'ERR_PROJECT_REQUIRED'
|
|
102
104
|
* )} ErrorCode
|
|
103
105
|
*/
|
|
104
106
|
/**
|
|
@@ -109,4 +111,4 @@ export const ERROR_CODES: Readonly<Record<ErrorCode, ErrorCode>>;
|
|
|
109
111
|
/**
|
|
110
112
|
* Stable error-code string union. Append-only.
|
|
111
113
|
*/
|
|
112
|
-
export type ErrorCode = ("ERR_UNKNOWN" | "ERR_UNKNOWN_COMMAND" | "ERR_UNKNOWN_SUBCOMMAND" | "ERR_INVALID_OPTION" | "ERR_INVALID_ARGUMENT" | "ERR_MISSING_ARGUMENT" | "ERR_INVALID_LANG" | "ERR_INVALID_DETAIL" | "ERR_NODE_VERSION" | "ERR_CORE_NOT_FOUND" | "ERR_CORE_INCOMPATIBLE" | "ERR_UNKNOWN_COMPONENT" | "ERR_UNKNOWN_HOOK" | "ERR_UNKNOWN_TOPIC" | "ERR_UNKNOWN_SECTION" | "ERR_UNKNOWN_CATEGORY" | "ERR_UNKNOWN_TEMPLATE" | "ERR_AMBIGUOUS_TEMPLATE" | "ERR_AMBIGUOUS_COMPONENT" | "ERR_AMBIGUOUS_THEME" | "ERR_UNKNOWN_THEME" | "ERR_INTEGRATION_ROOT_CONFLICT" | "ERR_INTEGRATION_EXPORT_CONFLICT" | "ERR_UNKNOWN_PACKAGE" | "ERR_UNKNOWN_AGENT" | "ERR_UNKNOWN_FEATURE" | "ERR_UNKNOWN_CODEMOD" | "ERR_CODEMOD_FAILED" | "ERR_CODEMOD_PROTECTED" | "ERR_CODEMOD_PROTECTION_SOURCE" | "ERR_NOT_FOUND" | "ERR_NO_DOC" | "ERR_NO_SHOWCASE" | "ERR_NO_SOURCE" | "ERR_INVALID_DOC" | "ERR_FILE_NOT_FOUND" | "ERR_FILE_EXISTS" | "ERR_PATH_TRAVERSAL" | "ERR_WRITE_FAILED" | "ERR_THEME_INVALID" | "ERR_THEME_LOAD" | "ERR_PALETTE_GENERATION" | "ERR_VERSION_DETECT" | "ERR_INVALID_VERSION" | "ERR_DEP_MISSING" | "ERR_GH_CLI" | "ERR_UNKNOWN_POST" | "ERR_FETCH_FAILED" | "ERR_LAYOUT_PARSE" | "ERR_LAYOUT_INVALID" | "ERR_UNCLASSIFIED_EXIT" | "ERR_SIGNAL_TERMINATED");
|
|
114
|
+
export type ErrorCode = ("ERR_UNKNOWN" | "ERR_UNKNOWN_COMMAND" | "ERR_UNKNOWN_SUBCOMMAND" | "ERR_INVALID_OPTION" | "ERR_INVALID_ARGUMENT" | "ERR_MISSING_ARGUMENT" | "ERR_INVALID_LANG" | "ERR_INVALID_DETAIL" | "ERR_NODE_VERSION" | "ERR_CORE_NOT_FOUND" | "ERR_CORE_INCOMPATIBLE" | "ERR_UNKNOWN_COMPONENT" | "ERR_UNKNOWN_HOOK" | "ERR_UNKNOWN_TOPIC" | "ERR_UNKNOWN_SECTION" | "ERR_UNKNOWN_CATEGORY" | "ERR_UNKNOWN_TEMPLATE" | "ERR_AMBIGUOUS_TEMPLATE" | "ERR_AMBIGUOUS_COMPONENT" | "ERR_AMBIGUOUS_THEME" | "ERR_UNKNOWN_THEME" | "ERR_INTEGRATION_ROOT_CONFLICT" | "ERR_INTEGRATION_EXPORT_CONFLICT" | "ERR_UNKNOWN_PACKAGE" | "ERR_UNKNOWN_AGENT" | "ERR_UNKNOWN_FEATURE" | "ERR_UNKNOWN_CODEMOD" | "ERR_CODEMOD_FAILED" | "ERR_CODEMOD_PROTECTED" | "ERR_CODEMOD_PROTECTION_SOURCE" | "ERR_NOT_FOUND" | "ERR_NO_DOC" | "ERR_NO_SHOWCASE" | "ERR_NO_SOURCE" | "ERR_INVALID_DOC" | "ERR_FILE_NOT_FOUND" | "ERR_FILE_EXISTS" | "ERR_PATH_TRAVERSAL" | "ERR_WRITE_FAILED" | "ERR_THEME_INVALID" | "ERR_THEME_LOAD" | "ERR_PALETTE_GENERATION" | "ERR_VERSION_DETECT" | "ERR_INVALID_VERSION" | "ERR_DEP_MISSING" | "ERR_GH_CLI" | "ERR_UNKNOWN_POST" | "ERR_FETCH_FAILED" | "ERR_LAYOUT_PARSE" | "ERR_LAYOUT_INVALID" | "ERR_UNCLASSIFIED_EXIT" | "ERR_SIGNAL_TERMINATED" | "ERR_VERSIONS_UNAVAILABLE" | "ERR_PROJECT_REQUIRED");
|
|
@@ -277,5 +277,17 @@ export const doc = {
|
|
|
277
277
|
description:
|
|
278
278
|
'Recorded in the debug log, never printed: the process was ended by a signal (Ctrl-C, SIGTERM) before the command reached a terminal path.',
|
|
279
279
|
},
|
|
280
|
+
|
|
281
|
+
// Global mode
|
|
282
|
+
{
|
|
283
|
+
value: 'ERR_VERSIONS_UNAVAILABLE',
|
|
284
|
+
description:
|
|
285
|
+
'Nothing could answer this run, and nothing was written: the project\'s own CLI could not start and nothing else could answer, or the Core a command needs outside a project could not be installed.',
|
|
286
|
+
},
|
|
287
|
+
{
|
|
288
|
+
value: 'ERR_PROJECT_REQUIRED',
|
|
289
|
+
description:
|
|
290
|
+
'The command needs a project (an app with Astryx installed, or an integration package) and was run outside one. Nothing was written.',
|
|
291
|
+
},
|
|
280
292
|
],
|
|
281
293
|
};
|