@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
package/api/build/_adapter.d.mts
CHANGED
|
@@ -66,6 +66,14 @@ export function isWeightsFile(file: any): file is import("./kit/weights.mjs").We
|
|
|
66
66
|
* @returns {string[]} Setup notes (empty when the template needs nothing).
|
|
67
67
|
*/
|
|
68
68
|
export function templateSetupNotes(template: PageTemplate, cwd: string): string[];
|
|
69
|
+
/**
|
|
70
|
+
* The Core a build answers from: the project's, else the release's own,
|
|
71
|
+
* installed into the per-user cache first when needed (a network install
|
|
72
|
+
* and an npm subprocess; spec AST-081 FR3). Throws as requireCoreDir does.
|
|
73
|
+
* @param {string} cwd
|
|
74
|
+
* @returns {string}
|
|
75
|
+
*/
|
|
76
|
+
export function requireBuildCoreDir(cwd: string): string;
|
|
69
77
|
export { withListingCache } from "../../foundation/fs/listing-cache.mjs";
|
|
70
78
|
/**
|
|
71
79
|
* A page template the kit can recommend starting from.
|
package/api/build/_adapter.mjs
CHANGED
|
@@ -20,7 +20,7 @@ import fs from 'node:fs';
|
|
|
20
20
|
|
|
21
21
|
import {discoverTemplates} from '../template/template.mjs';
|
|
22
22
|
import {componentKeywords} from '../search/search.mjs';
|
|
23
|
-
import {findCoreDir} from '../../foundation/fs/paths.mjs';
|
|
23
|
+
import {findCoreDir, requireCoreDir} from '../../foundation/fs/paths.mjs';
|
|
24
24
|
import {analyzeTemplateNeeds} from '../../foundation/discovery/template-needs.mjs';
|
|
25
25
|
|
|
26
26
|
/**
|
|
@@ -177,3 +177,14 @@ export function templateSetupNotes(template, cwd) {
|
|
|
177
177
|
return [];
|
|
178
178
|
}
|
|
179
179
|
}
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* The Core a build answers from: the project's, else the release's own,
|
|
183
|
+
* installed into the per-user cache first when needed (a network install
|
|
184
|
+
* and an npm subprocess; spec AST-081 FR3). Throws as requireCoreDir does.
|
|
185
|
+
* @param {string} cwd
|
|
186
|
+
* @returns {string}
|
|
187
|
+
*/
|
|
188
|
+
export function requireBuildCoreDir(cwd) {
|
|
189
|
+
return requireCoreDir(cwd);
|
|
190
|
+
}
|
package/api/build/build.doc.mjs
CHANGED
|
@@ -76,6 +76,10 @@ export const doc = {
|
|
|
76
76
|
code: 'ERR_CORE_NOT_FOUND',
|
|
77
77
|
when: 'a query is given and @astryxdesign/core cannot be found from cwd',
|
|
78
78
|
},
|
|
79
|
+
{
|
|
80
|
+
code: 'ERR_VERSIONS_UNAVAILABLE',
|
|
81
|
+
when: 'a query is given outside a project, or in a project with nothing installed, and the Core of the release that answers is not beside it or cached, and cannot be installed into the per-user cache (offline, a registry without it, or an unwritable cache)',
|
|
82
|
+
},
|
|
79
83
|
],
|
|
80
84
|
examples: [
|
|
81
85
|
{label: 'Get the playbook', code: 'const r = await build();'},
|
package/api/build/help/help.mjs
CHANGED
|
@@ -63,7 +63,7 @@ export function buildHelp() {
|
|
|
63
63
|
"Keep the template's page frame, gap, and padding values. Replace its data, copy, and sections.",
|
|
64
64
|
'No <div>/raw HTML for layout — use VStack/HStack/Grid/Stack/Card etc.',
|
|
65
65
|
'No style={{}} — use component props, and design tokens for values.',
|
|
66
|
-
"Wrap the app in <Theme theme={...}> (import {Theme} from '@astryxdesign/core') and import core reset.css + astryx.css.",
|
|
66
|
+
"Wrap the app in <Theme theme={...}> (import {Theme} from '@astryxdesign/core/theme') and import core reset.css + astryx.css.",
|
|
67
67
|
],
|
|
68
68
|
related: [
|
|
69
69
|
{
|
package/api/build/kit/kit.mjs
CHANGED
|
@@ -28,11 +28,9 @@
|
|
|
28
28
|
*/
|
|
29
29
|
|
|
30
30
|
import {search, searchedComponents} from '../../search/search.mjs';
|
|
31
|
-
import {
|
|
32
|
-
import {AstryxError} from '../../error.mjs';
|
|
33
|
-
import {ERROR_CODES} from '../../../foundation/response/error-codes.mjs';
|
|
31
|
+
import {coreDirOrThrow} from '../../error.mjs';
|
|
34
32
|
import {getResultCoverage} from '../../search/coverage.mjs';
|
|
35
|
-
import {loadComponents, loadPageTemplates, loadWeights, templateSetupNotes} from '../_adapter.mjs';
|
|
33
|
+
import {loadComponents, loadPageTemplates, loadWeights, requireBuildCoreDir, templateSetupNotes} from '../_adapter.mjs';
|
|
36
34
|
import {
|
|
37
35
|
asksForNewPage,
|
|
38
36
|
ideaKind,
|
|
@@ -260,13 +258,7 @@ export async function buildKit(query, options = {}) {
|
|
|
260
258
|
const {cwd = process.cwd(), type, limit = 60} = options;
|
|
261
259
|
// A kit is built from Core's components, hooks, and templates. An open
|
|
262
260
|
// search without core covers the docs alone, so the kit asks for core here.
|
|
263
|
-
if (type !== 'doc'
|
|
264
|
-
throw new AstryxError(
|
|
265
|
-
'Could not find @astryxdesign/core package',
|
|
266
|
-
undefined,
|
|
267
|
-
ERROR_CODES.ERR_CORE_NOT_FOUND,
|
|
268
|
-
);
|
|
269
|
-
}
|
|
261
|
+
if (type !== 'doc') coreDirOrThrow(requireBuildCoreDir, cwd);
|
|
270
262
|
// search()'s JSDoc @returns widens results to object[]; the SearchResponse
|
|
271
263
|
// shape is the contract (api/search/search.type.mjs). Cast locally rather than
|
|
272
264
|
// tightening the search @returns (a separate follow-up).
|
|
@@ -26,6 +26,8 @@
|
|
|
26
26
|
* @property {string|null} sourcePath
|
|
27
27
|
* @property {string|undefined} issuesUrl
|
|
28
28
|
* @property {import('../../foundation/integrations/integrations.mjs').LoadedIntegration|null} integration
|
|
29
|
+
* @property {import('../../foundation/discovery/component-discovery.mjs').NameHold} hold
|
|
30
|
+
* how the owner holds the name, for the owner rule
|
|
29
31
|
*/
|
|
30
32
|
/**
|
|
31
33
|
* What ownership shaping needs from an owner. The core and legacy-external
|
|
@@ -138,6 +140,25 @@ export function assertUnambiguousOwners(owners: ComponentOwner[], dirName: strin
|
|
|
138
140
|
* @returns {string | null}
|
|
139
141
|
*/
|
|
140
142
|
export function resolveLegacyExternalDoc(ext: ExternalPackageRef, dirName: string): string | null;
|
|
143
|
+
/**
|
|
144
|
+
* Whether a legacy external package documents `dirName`.
|
|
145
|
+
* @param {string} cwd
|
|
146
|
+
* @param {string} dirName
|
|
147
|
+
* @returns {boolean}
|
|
148
|
+
*/
|
|
149
|
+
export function legacyExternalDocuments(cwd: string, dirName: string): boolean;
|
|
150
|
+
/**
|
|
151
|
+
* Whether a legacy docs package keeps `dirName` over these owners, each of which
|
|
152
|
+
* holds it only as an export a doc records.
|
|
153
|
+
* @param {string} cwd
|
|
154
|
+
* @param {string} dirName
|
|
155
|
+
* @param {Array<{hold?: string, docPath?: string | null}>} owners
|
|
156
|
+
* @returns {boolean}
|
|
157
|
+
*/
|
|
158
|
+
export function legacyExternalKeeps(cwd: string, dirName: string, owners: Array<{
|
|
159
|
+
hold?: string;
|
|
160
|
+
docPath?: string | null;
|
|
161
|
+
}>): boolean;
|
|
141
162
|
/**
|
|
142
163
|
* The core source file for `dirName` (the no-scope `--source` path reads core
|
|
143
164
|
* directly — it does NOT fall back to externals or fuzzy search).
|
|
@@ -210,7 +231,51 @@ export function scopeSubComponent(docs: LoadedComponentDoc, dirName: string, cor
|
|
|
210
231
|
};
|
|
211
232
|
matchingComponent: any;
|
|
212
233
|
} | null;
|
|
213
|
-
|
|
234
|
+
/**
|
|
235
|
+
* The doc an integration owner shows for `dirName`: when `dirName` is a member
|
|
236
|
+
* its family doc lists under its own name (`AcmeSlide` in an `AcmeCarousel`
|
|
237
|
+
* doc), the doc scoped to that member as {@link scopeSubComponent} scopes
|
|
238
|
+
* Core's, keeping the import the family doc states; otherwise `docs` itself.
|
|
239
|
+
* @param {LoadedComponentDoc} docs
|
|
240
|
+
* @param {OwnershipSubject} owner
|
|
241
|
+
* @param {string} dirName
|
|
242
|
+
* @returns {LoadedComponentDoc & {parentDoc?: string, import?: string}}
|
|
243
|
+
*/
|
|
244
|
+
export function scopeIntegrationMember(docs: LoadedComponentDoc, owner: OwnershipSubject, dirName: string): LoadedComponentDoc & {
|
|
245
|
+
parentDoc?: string;
|
|
246
|
+
import?: string;
|
|
247
|
+
};
|
|
248
|
+
/**
|
|
249
|
+
* A search response with every inline `{@link <target>}` in a component
|
|
250
|
+
* result's description resolved to the command that opens the doc it names,
|
|
251
|
+
* as `astryx component` prints it (spec:AST-047 FR9). The response object is
|
|
252
|
+
* kept, with its results replaced.
|
|
253
|
+
* @template {{data: {results: any[]}}} R
|
|
254
|
+
* @param {R} response
|
|
255
|
+
* @param {string} cwd
|
|
256
|
+
* @returns {Promise<R>}
|
|
257
|
+
*/
|
|
258
|
+
export function linkSearchResponse<R extends {
|
|
259
|
+
data: {
|
|
260
|
+
results: any[];
|
|
261
|
+
};
|
|
262
|
+
}>(response: R, cwd: string): Promise<R>;
|
|
263
|
+
/**
|
|
264
|
+
* A component read with every inline `{@link <target>}` in its doc text
|
|
265
|
+
* resolved to the command that opens the doc it names (spec:AST-047 FR9), in
|
|
266
|
+
* the detail, its props projection, and each list entry. A Core component's
|
|
267
|
+
* links resolve against the CLI's own docs; an integration's against that
|
|
268
|
+
* integration's. A link that names no doc prints as written.
|
|
269
|
+
* @template {{type: string, package?: string, data?: any}} R
|
|
270
|
+
* @param {R} response
|
|
271
|
+
* @param {string} cwd
|
|
272
|
+
* @returns {Promise<R>}
|
|
273
|
+
*/
|
|
274
|
+
export function linkComponentResponse<R extends {
|
|
275
|
+
type: string;
|
|
276
|
+
package?: string;
|
|
277
|
+
data?: any;
|
|
278
|
+
}>(response: R, cwd: string): Promise<R>;
|
|
214
279
|
/**
|
|
215
280
|
* Internal ambiguity marker. Single-component callers still receive the same
|
|
216
281
|
* AstryxError code, message, and suggestions; batch callers can additionally
|
|
@@ -261,6 +326,10 @@ export type ComponentOwner = {
|
|
|
261
326
|
sourcePath: string | null;
|
|
262
327
|
issuesUrl: string | undefined;
|
|
263
328
|
integration: import("../../foundation/integrations/integrations.mjs").LoadedIntegration | null;
|
|
329
|
+
/**
|
|
330
|
+
* how the owner holds the name, for the owner rule
|
|
331
|
+
*/
|
|
332
|
+
hold: import("../../foundation/discovery/component-discovery.mjs").NameHold;
|
|
264
333
|
};
|
|
265
334
|
/**
|
|
266
335
|
* What ownership shaping needs from an owner. The core and legacy-external
|
|
@@ -303,4 +372,6 @@ export type ResolvedUnscopedDoc = {
|
|
|
303
372
|
resolvedSourcePath: string | null;
|
|
304
373
|
};
|
|
305
374
|
import { CORE_PACKAGE } from '../../foundation/discovery/component-discovery.mjs';
|
|
375
|
+
import { unscopedComponentOwners } from '../../foundation/discovery/component-discovery.mjs';
|
|
306
376
|
import { AstryxError } from '../error.mjs';
|
|
377
|
+
export { CORE_PACKAGE, unscopedComponentOwners };
|
|
@@ -22,27 +22,36 @@ import * as fs from 'node:fs';
|
|
|
22
22
|
import * as path from 'node:path';
|
|
23
23
|
import {ERROR_CODES} from '../../foundation/response/error-codes.mjs';
|
|
24
24
|
import {
|
|
25
|
-
|
|
25
|
+
requireCoreDir as requireAnswerCoreDir,
|
|
26
26
|
discoverExternalPackages,
|
|
27
27
|
} from '../../foundation/fs/paths.mjs';
|
|
28
28
|
import {
|
|
29
29
|
CORE_PACKAGE,
|
|
30
30
|
discoverComponents,
|
|
31
|
+
docStem,
|
|
31
32
|
findComponentReadme,
|
|
32
33
|
findComponentSource,
|
|
33
34
|
findExternalComponentDoc,
|
|
34
|
-
|
|
35
|
-
|
|
35
|
+
findIntegrationComponent,
|
|
36
|
+
integrationMemberEntry,
|
|
37
|
+
isIntegrationMember,
|
|
38
|
+
recordedDocName,
|
|
36
39
|
resolveImportPath,
|
|
37
40
|
resolveIntegrationImportPath as resolveIntegrationImport,
|
|
41
|
+
unscopedComponentOwners,
|
|
38
42
|
} from '../../foundation/discovery/component-discovery.mjs';
|
|
39
43
|
import {Project} from '../../foundation/config/project.mjs';
|
|
40
44
|
import {loadComponentDoc as loadValidatedComponentDoc} from '../../foundation/discovery/component-loader.mjs';
|
|
41
45
|
import {resolveComponentReplacements} from '../../foundation/discovery/component-replacement.mjs';
|
|
42
46
|
import {searchComponents} from '../../foundation/text/string-utils.mjs';
|
|
43
|
-
import {AstryxError} from '../error.mjs';
|
|
47
|
+
import {AstryxError, coreDirOrThrow} from '../error.mjs';
|
|
48
|
+
import {
|
|
49
|
+
componentLinkProvider,
|
|
50
|
+
linkComponentDoc,
|
|
51
|
+
loadDocsCatalog,
|
|
52
|
+
} from '../docs/_adapter.mjs';
|
|
44
53
|
|
|
45
|
-
export {CORE_PACKAGE};
|
|
54
|
+
export {CORE_PACKAGE, unscopedComponentOwners};
|
|
46
55
|
|
|
47
56
|
/**
|
|
48
57
|
* A loaded component doc. The shared validated loader accepts stamped and legacy
|
|
@@ -71,6 +80,8 @@ export {CORE_PACKAGE};
|
|
|
71
80
|
* @property {string|null} sourcePath
|
|
72
81
|
* @property {string|undefined} issuesUrl
|
|
73
82
|
* @property {import('../../foundation/integrations/integrations.mjs').LoadedIntegration|null} integration
|
|
83
|
+
* @property {import('../../foundation/discovery/component-discovery.mjs').NameHold} hold
|
|
84
|
+
* how the owner holds the name, for the owner rule
|
|
74
85
|
*/
|
|
75
86
|
|
|
76
87
|
/**
|
|
@@ -110,15 +121,7 @@ export {CORE_PACKAGE};
|
|
|
110
121
|
* @returns {string}
|
|
111
122
|
*/
|
|
112
123
|
export function requireCoreDir(cwd) {
|
|
113
|
-
|
|
114
|
-
if (!coreDir) {
|
|
115
|
-
throw new AstryxError(
|
|
116
|
-
'Could not find @astryxdesign/core package',
|
|
117
|
-
undefined,
|
|
118
|
-
ERROR_CODES.ERR_CORE_NOT_FOUND,
|
|
119
|
-
);
|
|
120
|
-
}
|
|
121
|
-
return coreDir;
|
|
124
|
+
return coreDirOrThrow(requireAnswerCoreDir, cwd);
|
|
122
125
|
}
|
|
123
126
|
|
|
124
127
|
/**
|
|
@@ -240,17 +243,19 @@ export function resolveOwners(coreDir, dirName, loadedIntegrations) {
|
|
|
240
243
|
sourcePath: findComponentSource(coreDir, dirName),
|
|
241
244
|
issuesUrl: undefined,
|
|
242
245
|
integration: null,
|
|
246
|
+
hold: 'core',
|
|
243
247
|
});
|
|
244
248
|
}
|
|
245
249
|
for (const integration of loadedIntegrations) {
|
|
246
|
-
const
|
|
247
|
-
if (!
|
|
250
|
+
const found = findIntegrationComponent(integration, dirName);
|
|
251
|
+
if (!found) continue;
|
|
248
252
|
owners.push({
|
|
249
253
|
package: integration.name,
|
|
250
|
-
docPath,
|
|
251
|
-
sourcePath:
|
|
254
|
+
docPath: found.docPath,
|
|
255
|
+
sourcePath: found.sourcePath,
|
|
252
256
|
issuesUrl: integration.issuesUrl,
|
|
253
257
|
integration,
|
|
258
|
+
hold: found.hold,
|
|
254
259
|
});
|
|
255
260
|
}
|
|
256
261
|
return owners;
|
|
@@ -361,6 +366,39 @@ export function resolveLegacyExternalDoc(ext, dirName) {
|
|
|
361
366
|
return extDocPath && extDocPath.endsWith('.doc.mjs') ? extDocPath : null;
|
|
362
367
|
}
|
|
363
368
|
|
|
369
|
+
/**
|
|
370
|
+
* Whether a legacy external package documents `dirName`.
|
|
371
|
+
* @param {string} cwd
|
|
372
|
+
* @param {string} dirName
|
|
373
|
+
* @returns {boolean}
|
|
374
|
+
*/
|
|
375
|
+
export function legacyExternalDocuments(cwd, dirName) {
|
|
376
|
+
return discoverExternalPackages(cwd).some(
|
|
377
|
+
ext => resolveLegacyExternalDoc(ext, dirName) != null,
|
|
378
|
+
);
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
/**
|
|
382
|
+
* Whether a legacy docs package keeps `dirName` over these owners, each of which
|
|
383
|
+
* holds it only as an export a doc records.
|
|
384
|
+
* @param {string} cwd
|
|
385
|
+
* @param {string} dirName
|
|
386
|
+
* @param {Array<{hold?: string, docPath?: string | null}>} owners
|
|
387
|
+
* @returns {boolean}
|
|
388
|
+
*/
|
|
389
|
+
export function legacyExternalKeeps(cwd, dirName, owners) {
|
|
390
|
+
return (
|
|
391
|
+
owners.length > 0 &&
|
|
392
|
+
owners.every(
|
|
393
|
+
owner =>
|
|
394
|
+
owner.hold === 'doc' &&
|
|
395
|
+
owner.docPath != null &&
|
|
396
|
+
docStem(owner.docPath).toLowerCase() !== dirName.toLowerCase(),
|
|
397
|
+
) &&
|
|
398
|
+
legacyExternalDocuments(cwd, dirName)
|
|
399
|
+
);
|
|
400
|
+
}
|
|
401
|
+
|
|
364
402
|
/**
|
|
365
403
|
* The core source file for `dirName` (the no-scope `--source` path reads core
|
|
366
404
|
* directly — it does NOT fall back to externals or fuzzy search).
|
|
@@ -583,3 +621,159 @@ export function scopeSubComponent(docs, dirName, coreDir) {
|
|
|
583
621
|
|
|
584
622
|
return {scoped, matchingComponent};
|
|
585
623
|
}
|
|
624
|
+
|
|
625
|
+
/**
|
|
626
|
+
* The doc an integration owner shows for `dirName`: when `dirName` is a member
|
|
627
|
+
* its family doc lists under its own name (`AcmeSlide` in an `AcmeCarousel`
|
|
628
|
+
* doc), the doc scoped to that member as {@link scopeSubComponent} scopes
|
|
629
|
+
* Core's, keeping the import the family doc states; otherwise `docs` itself.
|
|
630
|
+
* @param {LoadedComponentDoc} docs
|
|
631
|
+
* @param {OwnershipSubject} owner
|
|
632
|
+
* @param {string} dirName
|
|
633
|
+
* @returns {LoadedComponentDoc & {parentDoc?: string, import?: string}}
|
|
634
|
+
*/
|
|
635
|
+
export function scopeIntegrationMember(docs, owner, dirName) {
|
|
636
|
+
const record = {name: dirName, docPath: owner.docPath ?? null};
|
|
637
|
+
if (!isIntegrationMember(record)) return docs;
|
|
638
|
+
const entry = integrationMemberEntry(docs, record);
|
|
639
|
+
// The files list the member but the doc this process loaded has no entry
|
|
640
|
+
// for it (the doc changed after it loaded): never answer with the family.
|
|
641
|
+
if (entry == null) {
|
|
642
|
+
throw new AstryxError(
|
|
643
|
+
`No component named "${dirName}": its family doc changed after this process loaded it.`,
|
|
644
|
+
undefined,
|
|
645
|
+
ERROR_CODES.ERR_UNKNOWN_COMPONENT,
|
|
646
|
+
);
|
|
647
|
+
}
|
|
648
|
+
// Built from the entry, as scopeSubComponent scopes Core's, so a member that
|
|
649
|
+
// shares the doc's own `name` is scoped too.
|
|
650
|
+
/** @type {LoadedComponentDoc & {parentDoc?: string, import?: string}} */
|
|
651
|
+
const scoped = {
|
|
652
|
+
name: dirName,
|
|
653
|
+
description: entry.description,
|
|
654
|
+
props: entry.props,
|
|
655
|
+
components: [entry],
|
|
656
|
+
// The name the family doc opens under, for every member.
|
|
657
|
+
parentDoc:
|
|
658
|
+
owner.integration && record.docPath
|
|
659
|
+
? recordedDocName(owner.integration, record.docPath)
|
|
660
|
+
: docs.name === dirName && record.docPath
|
|
661
|
+
? docStem(record.docPath)
|
|
662
|
+
: docs.name,
|
|
663
|
+
};
|
|
664
|
+
if (docs.usage) scoped.usage = docs.usage;
|
|
665
|
+
if (docs.theming) scoped.theming = docs.theming;
|
|
666
|
+
if (docs.import) scoped.import = docs.import;
|
|
667
|
+
return scoped;
|
|
668
|
+
}
|
|
669
|
+
|
|
670
|
+
/**
|
|
671
|
+
* A search response with every inline `{@link <target>}` in a component
|
|
672
|
+
* result's description resolved to the command that opens the doc it names,
|
|
673
|
+
* as `astryx component` prints it (spec:AST-047 FR9). The response object is
|
|
674
|
+
* kept, with its results replaced.
|
|
675
|
+
* @template {{data: {results: any[]}}} R
|
|
676
|
+
* @param {R} response
|
|
677
|
+
* @param {string} cwd
|
|
678
|
+
* @returns {Promise<R>}
|
|
679
|
+
*/
|
|
680
|
+
export async function linkSearchResponse(response, cwd) {
|
|
681
|
+
const results = response.data.results;
|
|
682
|
+
if (
|
|
683
|
+
!results.some(
|
|
684
|
+
result =>
|
|
685
|
+
result?.domain === 'component' &&
|
|
686
|
+
typeof result.description === 'string' &&
|
|
687
|
+
result.description.includes('{@link'),
|
|
688
|
+
)
|
|
689
|
+
) {
|
|
690
|
+
return response;
|
|
691
|
+
}
|
|
692
|
+
const linked = [];
|
|
693
|
+
for (const result of results) {
|
|
694
|
+
if (
|
|
695
|
+
result?.domain !== 'component' ||
|
|
696
|
+
typeof result.description !== 'string' ||
|
|
697
|
+
!result.description.includes('{@link')
|
|
698
|
+
) {
|
|
699
|
+
linked.push(result);
|
|
700
|
+
continue;
|
|
701
|
+
}
|
|
702
|
+
const read = await linkComponentResponse(
|
|
703
|
+
{
|
|
704
|
+
type: 'component.detail',
|
|
705
|
+
package: result.package,
|
|
706
|
+
data: {description: result.description},
|
|
707
|
+
},
|
|
708
|
+
cwd,
|
|
709
|
+
);
|
|
710
|
+
linked.push({...result, description: read.data.description});
|
|
711
|
+
}
|
|
712
|
+
response.data = {...response.data, results: linked};
|
|
713
|
+
return response;
|
|
714
|
+
}
|
|
715
|
+
|
|
716
|
+
/**
|
|
717
|
+
* A component read with every inline `{@link <target>}` in its doc text
|
|
718
|
+
* resolved to the command that opens the doc it names (spec:AST-047 FR9), in
|
|
719
|
+
* the detail, its props projection, and each list entry. A Core component's
|
|
720
|
+
* links resolve against the CLI's own docs; an integration's against that
|
|
721
|
+
* integration's. A link that names no doc prints as written.
|
|
722
|
+
* @template {{type: string, package?: string, data?: any}} R
|
|
723
|
+
* @param {R} response
|
|
724
|
+
* @param {string} cwd
|
|
725
|
+
* @returns {Promise<R>}
|
|
726
|
+
*/
|
|
727
|
+
export async function linkComponentResponse(response, cwd) {
|
|
728
|
+
const {type} = response;
|
|
729
|
+
if (
|
|
730
|
+
type !== 'component.detail' &&
|
|
731
|
+
type !== 'component.detail.props' &&
|
|
732
|
+
type !== 'component.list'
|
|
733
|
+
) {
|
|
734
|
+
return response;
|
|
735
|
+
}
|
|
736
|
+
if (!JSON.stringify(response.data ?? null).includes('{@link')) {
|
|
737
|
+
return response;
|
|
738
|
+
}
|
|
739
|
+
const catalog = await loadDocsCatalog(cwd);
|
|
740
|
+
/** @type {Map<string, string>} */
|
|
741
|
+
const declared = new Map();
|
|
742
|
+
for (const integration of await loadIntegrationsSafely(cwd)) {
|
|
743
|
+
const id = /** @type {any} */ (integration).providerId;
|
|
744
|
+
if (typeof id === 'string') declared.set(integration.name, id);
|
|
745
|
+
}
|
|
746
|
+
/**
|
|
747
|
+
* @param {any} doc
|
|
748
|
+
* @param {string | undefined} owner
|
|
749
|
+
*/
|
|
750
|
+
const link = async (doc, owner) => {
|
|
751
|
+
if (typeof owner !== 'string') return doc;
|
|
752
|
+
try {
|
|
753
|
+
return (
|
|
754
|
+
await linkComponentDoc(
|
|
755
|
+
catalog,
|
|
756
|
+
componentLinkProvider(owner, declared.get(owner)),
|
|
757
|
+
doc,
|
|
758
|
+
)
|
|
759
|
+
).doc;
|
|
760
|
+
} catch {
|
|
761
|
+
// An owner that is not a provider id links nothing; its text reads as
|
|
762
|
+
// written.
|
|
763
|
+
return doc;
|
|
764
|
+
}
|
|
765
|
+
};
|
|
766
|
+
if (type !== 'component.list') {
|
|
767
|
+
return {...response, data: await link(response.data, response.package)};
|
|
768
|
+
}
|
|
769
|
+
/** @type {Record<string, any[]>} */
|
|
770
|
+
const components = {};
|
|
771
|
+
for (const [group, entries] of Object.entries(
|
|
772
|
+
response.data.components ?? {},
|
|
773
|
+
)) {
|
|
774
|
+
const linked = [];
|
|
775
|
+
for (const entry of entries) linked.push(await link(entry, entry?.package));
|
|
776
|
+
components[group] = linked;
|
|
777
|
+
}
|
|
778
|
+
return {...response, data: {...response.data, components}};
|
|
779
|
+
}
|
|
@@ -24,7 +24,8 @@ export const doc = {
|
|
|
24
24
|
'showcase, or example blocks. An integration component that replaces a Core ' +
|
|
25
25
|
'component (its doc sets replaces, and its package declares the CLI range that ' +
|
|
26
26
|
'turns replacement on) answers to the Core name in detail, batch, and list ' +
|
|
27
|
-
"results; use options.package '@astryxdesign/core' for the original."
|
|
27
|
+
"results; use options.package '@astryxdesign/core' for the original." +
|
|
28
|
+
" In global mode: with `cwd` outside a project, components from integrations installed next to this CLI package globally resolve too; inside a project, only the project's own integrations count. See {@link namespace:global} and {@link generic:computer-integrations}.",
|
|
28
29
|
importPath: '@astryxdesign/cli/api',
|
|
29
30
|
signature:
|
|
30
31
|
'component(name?: string | string[], options?: ComponentOptions): Promise<ComponentListResponse | ComponentBatchResponse | ComponentDetailResponse | ComponentDetailPropsResponse | ComponentDetailSourceResponse | ComponentDetailShowcaseResponse | ComponentDetailBlocksResponse>',
|
|
@@ -164,6 +165,10 @@ export const doc = {
|
|
|
164
165
|
code: 'ERR_CORE_NOT_FOUND',
|
|
165
166
|
when: '@astryxdesign/core cannot be resolved from cwd',
|
|
166
167
|
},
|
|
168
|
+
{
|
|
169
|
+
code: 'ERR_VERSIONS_UNAVAILABLE',
|
|
170
|
+
when: 'outside a project, or in a project with nothing installed, the Core of the release that answers is not beside it or cached, and cannot be installed into the per-user cache (offline, a registry without it, or an unwritable cache)',
|
|
171
|
+
},
|
|
167
172
|
{
|
|
168
173
|
code: 'ERR_UNKNOWN_CATEGORY',
|
|
169
174
|
when: 'options.category is not a string or matches no component group',
|