@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
|
@@ -24,7 +24,10 @@
|
|
|
24
24
|
import * as fs from 'node:fs';
|
|
25
25
|
import * as path from 'node:path';
|
|
26
26
|
import {isValidSemver} from '../env/semver.mjs';
|
|
27
|
-
import {
|
|
27
|
+
import {
|
|
28
|
+
findSourceOnlyCandidates,
|
|
29
|
+
findTemplateSourceOnlyCandidates,
|
|
30
|
+
} from './contribution-inventory.mjs';
|
|
28
31
|
import {
|
|
29
32
|
CODEMOD_FILE_RE,
|
|
30
33
|
CODEMOD_SKIP_DIRS,
|
|
@@ -56,6 +59,9 @@ import {discoverIntegrationThemes} from '../discovery/theme-discovery.mjs';
|
|
|
56
59
|
/** Stable issue code for an invalid optional agent-doc contribution. */
|
|
57
60
|
export const INVALID_AGENT_DOCS = 'invalid_agent_docs';
|
|
58
61
|
|
|
62
|
+
/** Stable issue code for a `cliCommand` that was ignored as invalid. */
|
|
63
|
+
export const INVALID_CLI_COMMAND = 'invalid_cli_command';
|
|
64
|
+
|
|
59
65
|
/** Stable issue code for a package whose provider ID is already claimed. */
|
|
60
66
|
export const DUPLICATE_PROVIDER = 'duplicate_provider';
|
|
61
67
|
|
|
@@ -295,6 +301,32 @@ async function checkTemplates(integration, issues) {
|
|
|
295
301
|
issueError('invalid_template', /** @type {any} */ (err).message),
|
|
296
302
|
);
|
|
297
303
|
}
|
|
304
|
+
checkTemplateSourcesWithoutDoc(integration, issues);
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
/**
|
|
308
|
+
* Warn about a `.tsx` directly in the templates root with no same-stem template
|
|
309
|
+
* metadata: template discovery pairs sources with docs, so `astryx template`
|
|
310
|
+
* never lists it. A PascalCase file directly in a shared components root is
|
|
311
|
+
* left to the component check, which already warns about it.
|
|
312
|
+
* @param {LoadedIntegration} integration loaded-integration-shaped object
|
|
313
|
+
* @param {Issue[]} issues
|
|
314
|
+
*/
|
|
315
|
+
function checkTemplateSourcesWithoutDoc(integration, issues) {
|
|
316
|
+
const root = /** @type {string} */ (integration.templates);
|
|
317
|
+
const sharedComponents =
|
|
318
|
+
integration.components != null &&
|
|
319
|
+
path.resolve(integration.components) === path.resolve(root);
|
|
320
|
+
for (const file of findTemplateSourceOnlyCandidates(root)) {
|
|
321
|
+
if (sharedComponents && /^[A-Z]/u.test(file)) continue;
|
|
322
|
+
const stem = file.slice(0, -'.tsx'.length);
|
|
323
|
+
issues.push(
|
|
324
|
+
issueWarning(
|
|
325
|
+
'source_without_template_doc',
|
|
326
|
+
`Template source "${file}" has no same-stem metadata file ${stem}.doc.mjs, so \`astryx template\` never lists it. Fix: add ${stem}.doc.mjs beside it with type: 'page' or 'block'; \`astryx docs authoring integration-template-doc\` lists its fields. If it is not a template, move it out of the templates root.`,
|
|
327
|
+
),
|
|
328
|
+
);
|
|
329
|
+
}
|
|
298
330
|
}
|
|
299
331
|
|
|
300
332
|
/**
|
|
@@ -450,6 +482,14 @@ export async function validateLoadedIntegration(loaded) {
|
|
|
450
482
|
if (loaded.__agentDocsError) {
|
|
451
483
|
issues.push(issueError(INVALID_AGENT_DOCS, loaded.__agentDocsError));
|
|
452
484
|
}
|
|
485
|
+
if (loaded.__cliCommandError) {
|
|
486
|
+
issues.push(
|
|
487
|
+
issueWarning(
|
|
488
|
+
INVALID_CLI_COMMAND,
|
|
489
|
+
`${loaded.__cliCommandError}. The command is ignored; printed commands use the package-manager prefix.`,
|
|
490
|
+
),
|
|
491
|
+
);
|
|
492
|
+
}
|
|
453
493
|
checkRoots(
|
|
454
494
|
{
|
|
455
495
|
components: loaded.components,
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @file The global copy's background step that keeps the computer-level
|
|
5
|
+
* agent text installed (spec AST-081 FR8), as its own detached process.
|
|
6
|
+
*
|
|
7
|
+
* Started by `maybeKeepAgentText` (global-state.mjs) from the global copy,
|
|
8
|
+
* with one argument, the per-user configuration folder. It writes the files
|
|
9
|
+
* the person's settings choose, with this release's text and the plain `astryx` command, and keeps every file a
|
|
10
|
+
* person edited, every file without the Astryx markers, and every link, as
|
|
11
|
+
* `astryx init --user` does. It then records this release as the one that
|
|
12
|
+
* wrote the text. It writes nothing to any stream and never reaches a
|
|
13
|
+
* person: it is not a command and takes no options.
|
|
14
|
+
*
|
|
15
|
+
* @input argv[2]: the per-user configuration folder (the state file's); the
|
|
16
|
+
* settings file
|
|
17
|
+
* @output the computer-level agent text and the updated global state on disk
|
|
18
|
+
* @position foundation/release — one of the two detached processes the CLI
|
|
19
|
+
* starts; the other is refresh-worker.mjs.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
import {fileURLToPath} from 'node:url';
|
|
23
|
+
import {
|
|
24
|
+
COMPUTER_COMMAND,
|
|
25
|
+
writeComputerAgentText,
|
|
26
|
+
} from '../agent-docs/computer-agent-text.mjs';
|
|
27
|
+
import {
|
|
28
|
+
computerAgentTextSettings,
|
|
29
|
+
recordComputerAgentTextSettings,
|
|
30
|
+
} from '../env/user-settings.mjs';
|
|
31
|
+
import {recordAgentTextWritten} from './global-state.mjs';
|
|
32
|
+
import {readJson} from './project.mjs';
|
|
33
|
+
|
|
34
|
+
const stateDir = process.argv[2];
|
|
35
|
+
if (stateDir) {
|
|
36
|
+
try {
|
|
37
|
+
const settings = computerAgentTextSettings();
|
|
38
|
+
if (settings.install) {
|
|
39
|
+
const {links} = writeComputerAgentText({command: COMPUTER_COMMAND});
|
|
40
|
+
recordComputerAgentTextSettings({
|
|
41
|
+
install: true,
|
|
42
|
+
links: [...new Set([...settings.links, ...links])],
|
|
43
|
+
});
|
|
44
|
+
const pkg = readJson(
|
|
45
|
+
fileURLToPath(new URL('../../package.json', import.meta.url)),
|
|
46
|
+
);
|
|
47
|
+
recordAgentTextWritten(pkg?.version ?? null, stateDir);
|
|
48
|
+
}
|
|
49
|
+
} catch {
|
|
50
|
+
// A home folder that cannot be written is tried again later.
|
|
51
|
+
}
|
|
52
|
+
}
|
|
@@ -0,0 +1,310 @@
|
|
|
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
|
+
* The per-user cache directory every Astryx cache lives in, never inside a
|
|
6
|
+
* project (`foundation/env/user-dirs.mjs`).
|
|
7
|
+
* @returns {string}
|
|
8
|
+
*/
|
|
9
|
+
export function userCacheDir(): string;
|
|
10
|
+
/**
|
|
11
|
+
* The folder all cached releases live in.
|
|
12
|
+
* @param {string} [cacheDir]
|
|
13
|
+
* @returns {string}
|
|
14
|
+
*/
|
|
15
|
+
export function releasesDir(cacheDir?: string): string;
|
|
16
|
+
/**
|
|
17
|
+
* Is `version` a plain release version?
|
|
18
|
+
* @param {unknown} version
|
|
19
|
+
* @returns {version is string}
|
|
20
|
+
*/
|
|
21
|
+
export function isReleaseVersion(version: unknown): version is string;
|
|
22
|
+
/**
|
|
23
|
+
* A cached, verified release.
|
|
24
|
+
* @typedef {object} CachedRelease
|
|
25
|
+
* @property {string} version
|
|
26
|
+
* @property {string} dir the release folder
|
|
27
|
+
* @property {string} cliDir its `@astryxdesign/cli`
|
|
28
|
+
* @property {string} coreDir its `@astryxdesign/core`
|
|
29
|
+
* @property {string} bin the CLI's `astryx` entry file
|
|
30
|
+
*/
|
|
31
|
+
/**
|
|
32
|
+
* The entry file a CLI package's `astryx` bin points at.
|
|
33
|
+
* @param {string} cliDir
|
|
34
|
+
* @returns {string | null}
|
|
35
|
+
*/
|
|
36
|
+
export function cliBinOf(cliDir: string): string | null;
|
|
37
|
+
/**
|
|
38
|
+
* The cached release `version`, when it is installed and verified: its
|
|
39
|
+
* marker parses, names the version, and records the bytes of the CLI's and
|
|
40
|
+
* Core's package.json and the CLI's entry file, and those files still have
|
|
41
|
+
* them, and the number and total size of the two packages' files are the
|
|
42
|
+
* ones recorded. Anything else is a damaged release, which counts as absent and is
|
|
43
|
+
* replaced the next time a run needs it.
|
|
44
|
+
* @param {string} version
|
|
45
|
+
* @param {string} [cacheDir]
|
|
46
|
+
* @returns {CachedRelease | null}
|
|
47
|
+
*/
|
|
48
|
+
export function cachedRelease(version: string, cacheDir?: string): CachedRelease | null;
|
|
49
|
+
/** Forget which releases this process verified, so the next look checks again. */
|
|
50
|
+
export function forgetVerifiedReleases(): void;
|
|
51
|
+
/**
|
|
52
|
+
* The size record of a release's two packages.
|
|
53
|
+
* @param {string} dir the release folder
|
|
54
|
+
* @returns {{cli: {count: number, bytes: number}, core: {count: number, bytes: number}} | null}
|
|
55
|
+
*/
|
|
56
|
+
export function releaseTree(dir: string): {
|
|
57
|
+
cli: {
|
|
58
|
+
count: number;
|
|
59
|
+
bytes: number;
|
|
60
|
+
};
|
|
61
|
+
core: {
|
|
62
|
+
count: number;
|
|
63
|
+
bytes: number;
|
|
64
|
+
};
|
|
65
|
+
} | null;
|
|
66
|
+
/**
|
|
67
|
+
* Is `dir` inside the release cache? A copy that lives there was started by
|
|
68
|
+
* global mode, never installed by a person.
|
|
69
|
+
* @param {string} dir
|
|
70
|
+
* @param {string} [cacheDir]
|
|
71
|
+
* @returns {boolean}
|
|
72
|
+
*/
|
|
73
|
+
export function isInReleaseCache(dir: string, cacheDir?: string): boolean;
|
|
74
|
+
/**
|
|
75
|
+
* How to start npm, never through a shell, so nothing a project declares is
|
|
76
|
+
* read by one: npm's own entry file run with this Node, from beside the
|
|
77
|
+
* running Node, else from beside an `npm` on the PATH (on Windows, npm's
|
|
78
|
+
* `npm.cmd` shim sits next to its `node_modules`); else `npm` on the PATH,
|
|
79
|
+
* started directly. An `npm` beside the running Node or on the PATH that
|
|
80
|
+
* links to npm's entry file (as distribution packages install it, such as
|
|
81
|
+
* `/usr/bin/npm` to `/usr/lib/node_modules_22/npm/bin/npm-cli.js`) counts as
|
|
82
|
+
* that entry file.
|
|
83
|
+
* @param {{env?: NodeJS.ProcessEnv, platform?: NodeJS.Platform, execPath?: string}} [where]
|
|
84
|
+
* `execPath`: the Node that runs npm (default: this one)
|
|
85
|
+
* @returns {{command: string, prefix: string[], shell: false}}
|
|
86
|
+
*/
|
|
87
|
+
export function npmCommand(where?: {
|
|
88
|
+
env?: NodeJS.ProcessEnv;
|
|
89
|
+
platform?: NodeJS.Platform;
|
|
90
|
+
execPath?: string;
|
|
91
|
+
}): {
|
|
92
|
+
command: string;
|
|
93
|
+
prefix: string[];
|
|
94
|
+
shell: false;
|
|
95
|
+
};
|
|
96
|
+
/**
|
|
97
|
+
* Whether `spec` reads as an npm version range and nothing else: versions,
|
|
98
|
+
* `x`/`*` wildcards, prerelease tags, the range operators, `||`, and spaces.
|
|
99
|
+
* Anything a shell or npm would read as more, such as `&`, `;`, a lone `|`,
|
|
100
|
+
* quotes, or a URL, is refused.
|
|
101
|
+
* @param {string} spec
|
|
102
|
+
* @returns {boolean}
|
|
103
|
+
*/
|
|
104
|
+
export function isVersionRange(spec: string): boolean;
|
|
105
|
+
/**
|
|
106
|
+
* The result of running npm.
|
|
107
|
+
* @typedef {object} NpmResult
|
|
108
|
+
* @property {number | null} status
|
|
109
|
+
* @property {NodeJS.Signals | null} [signal] the signal that ended npm, such as Ctrl-C's
|
|
110
|
+
* @property {string} stdout
|
|
111
|
+
* @property {string} stderr
|
|
112
|
+
* @property {Error} [error]
|
|
113
|
+
*/
|
|
114
|
+
/**
|
|
115
|
+
* Run npm synchronously with no output on the caller's streams.
|
|
116
|
+
* @param {string[]} args
|
|
117
|
+
* npm runs under npm-guard.mjs, which gives it a process group of its own
|
|
118
|
+
* and ends that group when the time limit passes, when this run goes away
|
|
119
|
+
* (even killed outright), or when this run receives Ctrl-C. So no install
|
|
120
|
+
* outlives the run that started it.
|
|
121
|
+
*
|
|
122
|
+
* @param {string[]} args
|
|
123
|
+
* @param {{cwd?: string, timeoutMs?: number, pidFile?: string, npm?: {command: string, prefix: string[], shell?: false}}} [options]
|
|
124
|
+
* `pidFile` receives npm's process id while it runs (the release lock's
|
|
125
|
+
* record); `npm` replaces how npm is started (tests).
|
|
126
|
+
* @returns {NpmResult}
|
|
127
|
+
*/
|
|
128
|
+
export function runNpm(args: string[], options?: {
|
|
129
|
+
cwd?: string;
|
|
130
|
+
timeoutMs?: number;
|
|
131
|
+
pidFile?: string;
|
|
132
|
+
npm?: {
|
|
133
|
+
command: string;
|
|
134
|
+
prefix: string[];
|
|
135
|
+
shell?: false;
|
|
136
|
+
};
|
|
137
|
+
}): NpmResult;
|
|
138
|
+
/**
|
|
139
|
+
* The newest published version that `spec` (a dist-tag or a range) names,
|
|
140
|
+
* asked of the registry through npm.
|
|
141
|
+
* @param {string} name e.g. `@astryxdesign/core`
|
|
142
|
+
* @param {string} spec e.g. `latest`, `^0.6.8`
|
|
143
|
+
* @param {{run?: typeof runNpm}} [options]
|
|
144
|
+
* @returns {string | null}
|
|
145
|
+
*/
|
|
146
|
+
export function resolvePublishedVersion(name: string, spec: string, options?: {
|
|
147
|
+
run?: typeof runNpm;
|
|
148
|
+
}): string | null;
|
|
149
|
+
/**
|
|
150
|
+
* The release the registry tags `latest` for the CLI, and the Node range it
|
|
151
|
+
* declares; null when the registry cannot be asked, with the reason given to
|
|
152
|
+
* `onFailure`: `npm-missing` (npm cannot be started), `npm-failed: <npm's
|
|
153
|
+
* error code>` (npm ran and failed, such as on ECONNREFUSED or E404), or
|
|
154
|
+
* `bad-reply` (npm's answer names no release).
|
|
155
|
+
* @param {{run?: typeof runNpm, onFailure?: (reason: string) => void}} [options]
|
|
156
|
+
* @returns {{version: string, node: string | null} | null}
|
|
157
|
+
*/
|
|
158
|
+
export function resolveLatestRelease(options?: {
|
|
159
|
+
run?: typeof runNpm;
|
|
160
|
+
onFailure?: (reason: string) => void;
|
|
161
|
+
}): {
|
|
162
|
+
version: string;
|
|
163
|
+
node: string | null;
|
|
164
|
+
} | null;
|
|
165
|
+
/**
|
|
166
|
+
* How long a failed install of a release is remembered, so offline runs do
|
|
167
|
+
* not start npm again on every run (spec AST-081 FR2): 2 minutes after a
|
|
168
|
+
* first failure, so a passing registry hiccup is retried soon, and 10 minutes
|
|
169
|
+
* after a second failure in a row. A successful install forgets it.
|
|
170
|
+
* @param {number} failures the failures in a row, 1 or more
|
|
171
|
+
* @returns {number}
|
|
172
|
+
*/
|
|
173
|
+
export function failedInstallWaitMs(failures: number): number;
|
|
174
|
+
/**
|
|
175
|
+
* The recorded failed installs of `version` in a row, when the last was
|
|
176
|
+
* within its wait (failedInstallWaitMs), or null.
|
|
177
|
+
* @param {string} version
|
|
178
|
+
* @param {string} cacheDir
|
|
179
|
+
* @param {number} [now]
|
|
180
|
+
* @returns {{at: number, reason: string, failures: number, waitMs: number} | null}
|
|
181
|
+
*/
|
|
182
|
+
export function recentFailedInstall(version: string, cacheDir: string, now?: number): {
|
|
183
|
+
at: number;
|
|
184
|
+
reason: string;
|
|
185
|
+
failures: number;
|
|
186
|
+
waitMs: number;
|
|
187
|
+
} | null;
|
|
188
|
+
/**
|
|
189
|
+
* Take a lock folder, or return false when another live run holds it. A lock
|
|
190
|
+
* whose holder has gone, such as a run stopped with Ctrl-C or killed, is taken
|
|
191
|
+
* over at once, and one from another computer once its holder has stopped
|
|
192
|
+
* renewing it. Throws when the cache folder cannot be written.
|
|
193
|
+
* @param {string} lockDir
|
|
194
|
+
* @param {{now?: number}} [options] the clock, for tests
|
|
195
|
+
* @returns {boolean}
|
|
196
|
+
*/
|
|
197
|
+
export function tryLock(lockDir: string, { now }?: {
|
|
198
|
+
now?: number;
|
|
199
|
+
}): boolean;
|
|
200
|
+
/**
|
|
201
|
+
* Whether a process's arguments are this CLI's install of `version`, as
|
|
202
|
+
* runNpm starts it: the program (`argv[0]`) is npm, or node running npm's
|
|
203
|
+
* entry file `npm-cli.js` (`argv[1]`), each exactly by name, and the arguments
|
|
204
|
+
* include `install` and `@astryxdesign/cli@<version>`. A program that only has
|
|
205
|
+
* `npm` somewhere in its name or arguments is not.
|
|
206
|
+
* @param {string[]} argv
|
|
207
|
+
* @param {string} version
|
|
208
|
+
* @returns {boolean}
|
|
209
|
+
*/
|
|
210
|
+
export function isReleaseInstall(argv: string[], version: string): boolean;
|
|
211
|
+
/**
|
|
212
|
+
* End the npm process group a stale lock records, only when that process is
|
|
213
|
+
* surely the install the lock was taken for: its command line is this CLI's
|
|
214
|
+
* install of the lock's release (isReleaseInstall), the lock is younger than
|
|
215
|
+
* any install may take, and the process started no earlier than the lock.
|
|
216
|
+
* Anything less certain is left alone, and the lock is simply taken over,
|
|
217
|
+
* since a recorded process id can name an unrelated process once the install
|
|
218
|
+
* ended.
|
|
219
|
+
* @param {string} lockDir a `.lock-<version>` folder
|
|
220
|
+
* @param {{now?: number, procRoot?: string, factsOf?: (pid: number) => {argv: string[] | null, startedAt: number | null}}} [options]
|
|
221
|
+
* the clock, the process table's folder, and the fact reader, for tests
|
|
222
|
+
* @returns {'ended' | 'left'} whether a process group was ended
|
|
223
|
+
*/
|
|
224
|
+
export function endRecordedInstall(lockDir: string, { now, procRoot, factsOf }?: {
|
|
225
|
+
now?: number;
|
|
226
|
+
procRoot?: string;
|
|
227
|
+
factsOf?: (pid: number) => {
|
|
228
|
+
argv: string[] | null;
|
|
229
|
+
startedAt: number | null;
|
|
230
|
+
};
|
|
231
|
+
}): "ended" | "left";
|
|
232
|
+
/**
|
|
233
|
+
* Why a release could not be made available.
|
|
234
|
+
* @typedef {object} ReleaseUnavailable
|
|
235
|
+
* @property {string} version
|
|
236
|
+
* @property {string} reason one plain sentence
|
|
237
|
+
* @property {NodeJS.Signals} [signal] the install was stopped by this signal
|
|
238
|
+
*/
|
|
239
|
+
/**
|
|
240
|
+
* Install release `version` into the cache, verify it, and return it. A
|
|
241
|
+
* release already cached returns at once. When another run is installing the
|
|
242
|
+
* same release, this waits for it.
|
|
243
|
+
*
|
|
244
|
+
* @param {string} version
|
|
245
|
+
* @param {{cacheDir?: string, run?: typeof runNpm, nodeVersion?: string, waitMs?: number, onProgress?: (event: 'install' | 'wait', version: string) => void}} [options]
|
|
246
|
+
* `onProgress` hears once when an install starts and once when the run
|
|
247
|
+
* starts waiting for another run's install.
|
|
248
|
+
* @returns {CachedRelease | ReleaseUnavailable}
|
|
249
|
+
*/
|
|
250
|
+
export function ensureRelease(version: string, options?: {
|
|
251
|
+
cacheDir?: string;
|
|
252
|
+
run?: typeof runNpm;
|
|
253
|
+
nodeVersion?: string;
|
|
254
|
+
waitMs?: number;
|
|
255
|
+
onProgress?: (event: "install" | "wait", version: string) => void;
|
|
256
|
+
}): CachedRelease | ReleaseUnavailable;
|
|
257
|
+
/**
|
|
258
|
+
* The longest an install may take: generous, so a slow but moving download
|
|
259
|
+
* finishes, while a stalled one still ends in ERR_VERSIONS_UNAVAILABLE.
|
|
260
|
+
*/
|
|
261
|
+
export const INSTALL_TIMEOUT_MS: number;
|
|
262
|
+
/**
|
|
263
|
+
* A cached, verified release.
|
|
264
|
+
*/
|
|
265
|
+
export type CachedRelease = {
|
|
266
|
+
version: string;
|
|
267
|
+
/**
|
|
268
|
+
* the release folder
|
|
269
|
+
*/
|
|
270
|
+
dir: string;
|
|
271
|
+
/**
|
|
272
|
+
* its `@astryxdesign/cli`
|
|
273
|
+
*/
|
|
274
|
+
cliDir: string;
|
|
275
|
+
/**
|
|
276
|
+
* its `@astryxdesign/core`
|
|
277
|
+
*/
|
|
278
|
+
coreDir: string;
|
|
279
|
+
/**
|
|
280
|
+
* the CLI's `astryx` entry file
|
|
281
|
+
*/
|
|
282
|
+
bin: string;
|
|
283
|
+
};
|
|
284
|
+
/**
|
|
285
|
+
* The result of running npm.
|
|
286
|
+
*/
|
|
287
|
+
export type NpmResult = {
|
|
288
|
+
status: number | null;
|
|
289
|
+
/**
|
|
290
|
+
* the signal that ended npm, such as Ctrl-C's
|
|
291
|
+
*/
|
|
292
|
+
signal?: NodeJS.Signals | null | undefined;
|
|
293
|
+
stdout: string;
|
|
294
|
+
stderr: string;
|
|
295
|
+
error?: Error | undefined;
|
|
296
|
+
};
|
|
297
|
+
/**
|
|
298
|
+
* Why a release could not be made available.
|
|
299
|
+
*/
|
|
300
|
+
export type ReleaseUnavailable = {
|
|
301
|
+
version: string;
|
|
302
|
+
/**
|
|
303
|
+
* one plain sentence
|
|
304
|
+
*/
|
|
305
|
+
reason: string;
|
|
306
|
+
/**
|
|
307
|
+
* the install was stopped by this signal
|
|
308
|
+
*/
|
|
309
|
+
signal?: NodeJS.Signals | undefined;
|
|
310
|
+
};
|