@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
|
@@ -39,6 +39,13 @@
|
|
|
39
39
|
* @returns {Record<string, string>} topic name → absolute doc path
|
|
40
40
|
*/
|
|
41
41
|
export function discoverBuiltinTopics(): Record<string, string>;
|
|
42
|
+
/**
|
|
43
|
+
* The CLI's own guide files: every flat topic and every doc in its docs tree,
|
|
44
|
+
* without the dense, translated, and draft variants.
|
|
45
|
+
*
|
|
46
|
+
* @returns {string[]}
|
|
47
|
+
*/
|
|
48
|
+
export function builtinGuideFiles(): string[];
|
|
42
49
|
/**
|
|
43
50
|
* Load a topic doc from disk. A `.ts` doc is loaded through jiti, the rest
|
|
44
51
|
* natively; both the historical `export const docs` and the stamped
|
|
@@ -132,6 +139,35 @@ export const GRAPH_BLOCK_TYPES: Set<string>;
|
|
|
132
139
|
* load; a guide the tree places may set `placement` (spec:AST-046).
|
|
133
140
|
*/
|
|
134
141
|
export const GRAPH_ONLY_FIELDS: string[];
|
|
142
|
+
/**
|
|
143
|
+
* A component a link can name: its owner's provider id, package, and name,
|
|
144
|
+
* and the doc file that describes it.
|
|
145
|
+
* @typedef {object} LinkableComponent
|
|
146
|
+
* @property {string} providerId
|
|
147
|
+
* @property {string} package
|
|
148
|
+
* @property {string} name
|
|
149
|
+
* @property {string | null} docPath
|
|
150
|
+
* @property {string} [replaces] the Core component whose name it answers to
|
|
151
|
+
* in unqualified lookups (spec:AST-035 FR11)
|
|
152
|
+
*/
|
|
153
|
+
/**
|
|
154
|
+
* A page or block template a link can name, by the id `astryx template` takes.
|
|
155
|
+
* @typedef {object} LinkableTemplate
|
|
156
|
+
* @property {string} providerId
|
|
157
|
+
* @property {string} package
|
|
158
|
+
* @property {'page' | 'block'} type
|
|
159
|
+
* @property {string} id
|
|
160
|
+
* @property {string} name
|
|
161
|
+
* @property {string} [displayName]
|
|
162
|
+
* @property {string} [description]
|
|
163
|
+
* @property {string} [replaces] the Core template id it answers to in
|
|
164
|
+
* unqualified lookups
|
|
165
|
+
*/
|
|
166
|
+
/**
|
|
167
|
+
* The component and template docs links can name (spec:AST-047 FR9). No docs
|
|
168
|
+
* tree holds them, so a catalog carries the records the project reads.
|
|
169
|
+
* @typedef {{components: LinkableComponent[], templates: LinkableTemplate[]}} LinkableContributions
|
|
170
|
+
*/
|
|
135
171
|
/**
|
|
136
172
|
* Every topic a project can read, and the relationships between them.
|
|
137
173
|
*
|
|
@@ -181,6 +217,18 @@ export class DocsCatalog {
|
|
|
181
217
|
namespaces: import("../doc-compiler/tree.mjs").TreeNamespaceInput[];
|
|
182
218
|
guides: import("../doc-compiler/tree.mjs").TreeDocInput[];
|
|
183
219
|
}>;
|
|
220
|
+
/**
|
|
221
|
+
* Say where links find component, page, and block docs: the records
|
|
222
|
+
* `astryx component` and `astryx template` read, loaded on first use.
|
|
223
|
+
* @param {() => Promise<LinkableContributions>} load
|
|
224
|
+
*/
|
|
225
|
+
setContributions(load: () => Promise<LinkableContributions>): void;
|
|
226
|
+
/**
|
|
227
|
+
* The component and template docs links can name, or null when nothing set
|
|
228
|
+
* them, so no link to one resolves.
|
|
229
|
+
* @returns {Promise<LinkableContributions | null>}
|
|
230
|
+
*/
|
|
231
|
+
contributions(): Promise<LinkableContributions | null>;
|
|
184
232
|
/**
|
|
185
233
|
* Add one integration-contributed doc, honoring what it declares. Returns
|
|
186
234
|
* the issue it caused, or null when it applied cleanly — the caller owns
|
|
@@ -290,4 +338,44 @@ export type DocsTopicEntry = {
|
|
|
290
338
|
*/
|
|
291
339
|
tree?: boolean | undefined;
|
|
292
340
|
};
|
|
341
|
+
/**
|
|
342
|
+
* A component a link can name: its owner's provider id, package, and name,
|
|
343
|
+
* and the doc file that describes it.
|
|
344
|
+
*/
|
|
345
|
+
export type LinkableComponent = {
|
|
346
|
+
providerId: string;
|
|
347
|
+
package: string;
|
|
348
|
+
name: string;
|
|
349
|
+
docPath: string | null;
|
|
350
|
+
/**
|
|
351
|
+
* the Core component whose name it answers to
|
|
352
|
+
* in unqualified lookups (spec:AST-035 FR11)
|
|
353
|
+
*/
|
|
354
|
+
replaces?: string | undefined;
|
|
355
|
+
};
|
|
356
|
+
/**
|
|
357
|
+
* A page or block template a link can name, by the id `astryx template` takes.
|
|
358
|
+
*/
|
|
359
|
+
export type LinkableTemplate = {
|
|
360
|
+
providerId: string;
|
|
361
|
+
package: string;
|
|
362
|
+
type: "page" | "block";
|
|
363
|
+
id: string;
|
|
364
|
+
name: string;
|
|
365
|
+
displayName?: string | undefined;
|
|
366
|
+
description?: string | undefined;
|
|
367
|
+
/**
|
|
368
|
+
* the Core template id it answers to in
|
|
369
|
+
* unqualified lookups
|
|
370
|
+
*/
|
|
371
|
+
replaces?: string | undefined;
|
|
372
|
+
};
|
|
373
|
+
/**
|
|
374
|
+
* The component and template docs links can name (spec:AST-047 FR9). No docs
|
|
375
|
+
* tree holds them, so a catalog carries the records the project reads.
|
|
376
|
+
*/
|
|
377
|
+
export type LinkableContributions = {
|
|
378
|
+
components: LinkableComponent[];
|
|
379
|
+
templates: LinkableTemplate[];
|
|
380
|
+
};
|
|
293
381
|
import { withSourceTitle } from './docs-section-key.mjs';
|
|
@@ -117,6 +117,23 @@ export function discoverBuiltinTopics() {
|
|
|
117
117
|
return topics;
|
|
118
118
|
}
|
|
119
119
|
|
|
120
|
+
/**
|
|
121
|
+
* The CLI's own guide files: every flat topic and every doc in its docs tree,
|
|
122
|
+
* without the dense, translated, and draft variants.
|
|
123
|
+
*
|
|
124
|
+
* @returns {string[]}
|
|
125
|
+
*/
|
|
126
|
+
export function builtinGuideFiles() {
|
|
127
|
+
const files = Object.values(discoverBuiltinTopics());
|
|
128
|
+
const tree = path.join(BUILTIN_DOCS_DIR, 'tree');
|
|
129
|
+
if (fs.existsSync(tree)) {
|
|
130
|
+
for (const file of fs.readdirSync(tree).sort()) {
|
|
131
|
+
if (BUILTIN_TOPIC_FILE_RE.test(file)) files.push(path.join(tree, file));
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return files;
|
|
135
|
+
}
|
|
136
|
+
|
|
120
137
|
/**
|
|
121
138
|
* Load a topic doc from disk. A `.ts` doc is loaded through jiti, the rest
|
|
122
139
|
* natively; both the historical `export const docs` and the stamped
|
|
@@ -384,7 +401,11 @@ export function problemsInNamespace(doc) {
|
|
|
384
401
|
}
|
|
385
402
|
}
|
|
386
403
|
const slots = doc?.slots;
|
|
387
|
-
if (
|
|
404
|
+
if (
|
|
405
|
+
slots == null ||
|
|
406
|
+
typeof slots !== 'object' ||
|
|
407
|
+
Object.keys(slots).length === 0
|
|
408
|
+
) {
|
|
388
409
|
problems.push('slots: expected at least one slot');
|
|
389
410
|
return problems;
|
|
390
411
|
}
|
|
@@ -392,7 +413,10 @@ export function problemsInNamespace(doc) {
|
|
|
392
413
|
if (typeof slot?.title !== 'string' || slot.title === '') {
|
|
393
414
|
problems.push(`slots.${name}.title: expected a non-empty string`);
|
|
394
415
|
}
|
|
395
|
-
if (
|
|
416
|
+
if (
|
|
417
|
+
!Array.isArray(slot?.accepts?.kinds) ||
|
|
418
|
+
slot.accepts.kinds.length === 0
|
|
419
|
+
) {
|
|
396
420
|
problems.push(`slots.${name}.accepts.kinds: expected at least one kind`);
|
|
397
421
|
}
|
|
398
422
|
}
|
|
@@ -633,6 +657,38 @@ function findMergeTarget(sections, section) {
|
|
|
633
657
|
return sections.findIndex(candidate => candidate.id === key);
|
|
634
658
|
}
|
|
635
659
|
|
|
660
|
+
/**
|
|
661
|
+
* A component a link can name: its owner's provider id, package, and name,
|
|
662
|
+
* and the doc file that describes it.
|
|
663
|
+
* @typedef {object} LinkableComponent
|
|
664
|
+
* @property {string} providerId
|
|
665
|
+
* @property {string} package
|
|
666
|
+
* @property {string} name
|
|
667
|
+
* @property {string | null} docPath
|
|
668
|
+
* @property {string} [replaces] the Core component whose name it answers to
|
|
669
|
+
* in unqualified lookups (spec:AST-035 FR11)
|
|
670
|
+
*/
|
|
671
|
+
|
|
672
|
+
/**
|
|
673
|
+
* A page or block template a link can name, by the id `astryx template` takes.
|
|
674
|
+
* @typedef {object} LinkableTemplate
|
|
675
|
+
* @property {string} providerId
|
|
676
|
+
* @property {string} package
|
|
677
|
+
* @property {'page' | 'block'} type
|
|
678
|
+
* @property {string} id
|
|
679
|
+
* @property {string} name
|
|
680
|
+
* @property {string} [displayName]
|
|
681
|
+
* @property {string} [description]
|
|
682
|
+
* @property {string} [replaces] the Core template id it answers to in
|
|
683
|
+
* unqualified lookups
|
|
684
|
+
*/
|
|
685
|
+
|
|
686
|
+
/**
|
|
687
|
+
* The component and template docs links can name (spec:AST-047 FR9). No docs
|
|
688
|
+
* tree holds them, so a catalog carries the records the project reads.
|
|
689
|
+
* @typedef {{components: LinkableComponent[], templates: LinkableTemplate[]}} LinkableContributions
|
|
690
|
+
*/
|
|
691
|
+
|
|
636
692
|
/**
|
|
637
693
|
* Every topic a project can read, and the relationships between them.
|
|
638
694
|
*
|
|
@@ -644,6 +700,10 @@ function findMergeTarget(sections, section) {
|
|
|
644
700
|
export class DocsCatalog {
|
|
645
701
|
/** @type {Map<string, DocsTopicEntry>} */
|
|
646
702
|
#topics = new Map();
|
|
703
|
+
/** @type {(() => Promise<LinkableContributions>) | null} */
|
|
704
|
+
#contributions = null;
|
|
705
|
+
/** @type {Promise<LinkableContributions> | null} */
|
|
706
|
+
#contributionsLoaded = null;
|
|
647
707
|
/** @type {Map<string, string>} old topic name → the name that replaced it */
|
|
648
708
|
#aliases = new Map();
|
|
649
709
|
/** @type {Array<{namespaces: import('../doc-compiler/tree.mjs').TreeNamespaceInput[], guides: import('../doc-compiler/tree.mjs').TreeDocInput[]}>} */
|
|
@@ -687,6 +747,27 @@ export class DocsCatalog {
|
|
|
687
747
|
return this.#treeInputs;
|
|
688
748
|
}
|
|
689
749
|
|
|
750
|
+
/**
|
|
751
|
+
* Say where links find component, page, and block docs: the records
|
|
752
|
+
* `astryx component` and `astryx template` read, loaded on first use.
|
|
753
|
+
* @param {() => Promise<LinkableContributions>} load
|
|
754
|
+
*/
|
|
755
|
+
setContributions(load) {
|
|
756
|
+
this.#contributions = load;
|
|
757
|
+
this.#contributionsLoaded = null;
|
|
758
|
+
}
|
|
759
|
+
|
|
760
|
+
/**
|
|
761
|
+
* The component and template docs links can name, or null when nothing set
|
|
762
|
+
* them, so no link to one resolves.
|
|
763
|
+
* @returns {Promise<LinkableContributions | null>}
|
|
764
|
+
*/
|
|
765
|
+
contributions() {
|
|
766
|
+
if (!this.#contributions) return Promise.resolve(null);
|
|
767
|
+
this.#contributionsLoaded ??= this.#contributions();
|
|
768
|
+
return this.#contributionsLoaded;
|
|
769
|
+
}
|
|
770
|
+
|
|
690
771
|
/**
|
|
691
772
|
* Seed a catalog with the CLI's own topics.
|
|
692
773
|
* @param {Record<string, string>} [builtins] topic name → absolute path
|
|
@@ -0,0 +1,22 @@
|
|
|
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
|
+
/** @typedef {import('./doc-types.mjs').DocFile} DocFile */
|
|
5
|
+
/** @typedef {import('./doc-types.mjs').DocRoot} DocRoot */
|
|
6
|
+
/**
|
|
7
|
+
* Every doc file an integration's roots hold, each assigned to the deepest
|
|
8
|
+
* root that holds it, each root a reader could not read, and how many test
|
|
9
|
+
* fixtures no reader serves.
|
|
10
|
+
* @param {any} integration a loaded integration
|
|
11
|
+
* @returns {Promise<{files: DocFile[], unread: Array<{path: string, reason: string}>, fixtures: number}>}
|
|
12
|
+
*/
|
|
13
|
+
export function integrationDocFiles(integration: any): Promise<{
|
|
14
|
+
files: DocFile[];
|
|
15
|
+
unread: Array<{
|
|
16
|
+
path: string;
|
|
17
|
+
reason: string;
|
|
18
|
+
}>;
|
|
19
|
+
fixtures: number;
|
|
20
|
+
}>;
|
|
21
|
+
export type DocFile = import("./doc-types.mjs").DocFile;
|
|
22
|
+
export type DocRoot = import("./doc-types.mjs").DocRoot;
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @file The doc files an integration package ships, by root: every doc its
|
|
5
|
+
* roots hold, so the doc type check covers each one an agent can open.
|
|
6
|
+
*
|
|
7
|
+
* Each root's reader names the docs it serves, with the kind it reads each
|
|
8
|
+
* as:
|
|
9
|
+
* - components: the doc each component discovery records;
|
|
10
|
+
* - templates: the doc of each template template discovery serves;
|
|
11
|
+
* - docs: the file of each topic, namespace and placed guide docs discovery
|
|
12
|
+
* serves, and each topic's and guide's `zh` and `dense` overlay that a docs
|
|
13
|
+
* read applies;
|
|
14
|
+
* - themes: each theme's descriptor, as theme discovery resolves it. A themes
|
|
15
|
+
* root that discovery cannot read serves no theme, and is listed with the
|
|
16
|
+
* reason.
|
|
17
|
+
* A doc no reader serves still ships: a `hidden` one, a second doc for one
|
|
18
|
+
* name, an overlay without its topic. It goes to its root's kind. A test
|
|
19
|
+
* fixture does not ship as a doc, and is only counted: a doc under
|
|
20
|
+
* `__tests__` in the components or docs root, which those readers skip.
|
|
21
|
+
* A file two roots hold goes to the deepest.
|
|
22
|
+
*
|
|
23
|
+
* @input A loaded integration and its resolved roots.
|
|
24
|
+
* @output DocFile entries for checkDocTypes, each with the root it belongs to,
|
|
25
|
+
* the roots a reader could not read, and how many test fixtures it left
|
|
26
|
+
* out.
|
|
27
|
+
* @position Read by `astryx doctor integration validate` before it checks
|
|
28
|
+
* each doc against its authoring type.
|
|
29
|
+
*/
|
|
30
|
+
|
|
31
|
+
import * as fs from 'node:fs';
|
|
32
|
+
import * as path from 'node:path';
|
|
33
|
+
import {OVERLAY_LANGUAGES, overlayPath} from '../doc-compiler/read.mjs';
|
|
34
|
+
import {discoverIntegrationComponents} from './component-discovery.mjs';
|
|
35
|
+
import {discoverIntegrationDocs} from './docs-discovery.mjs';
|
|
36
|
+
import {discoverIntegrationTemplatesForOne} from './template-adapter.mjs';
|
|
37
|
+
import {discoverThemeDirectory} from './theme-discovery.mjs';
|
|
38
|
+
import {rootProblem} from '../integrations/validate-contributions.mjs';
|
|
39
|
+
|
|
40
|
+
/** @typedef {import('./doc-types.mjs').DocFile} DocFile */
|
|
41
|
+
/** @typedef {import('./doc-types.mjs').DocRoot} DocRoot */
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Every doc file an integration's roots hold, each assigned to the deepest
|
|
45
|
+
* root that holds it, each root a reader could not read, and how many test
|
|
46
|
+
* fixtures no reader serves.
|
|
47
|
+
* @param {any} integration a loaded integration
|
|
48
|
+
* @returns {Promise<{files: DocFile[], unread: Array<{path: string, reason: string}>, fixtures: number}>}
|
|
49
|
+
*/
|
|
50
|
+
export async function integrationDocFiles(integration) {
|
|
51
|
+
const {components, templates, docs, themes} = integration ?? {};
|
|
52
|
+
/** @type {Array<[DocRoot, string, string[]]>} */
|
|
53
|
+
const read = [];
|
|
54
|
+
/** @type {Array<{path: string, reason: string}>} */
|
|
55
|
+
const unread = [];
|
|
56
|
+
// A root `validate` already reports (missing, a file, unreadable) is left
|
|
57
|
+
// to that issue. A reader that fails inside a root, such as on a folder it
|
|
58
|
+
// cannot read, leaves the root listed with the reason.
|
|
59
|
+
/** @type {(root: string | undefined, label: string, files: () => Promise<Array<[DocRoot, string[]]>>) => Promise<void>} */
|
|
60
|
+
const take = async (root, label, files) => {
|
|
61
|
+
if (!root || rootProblem(root)) return;
|
|
62
|
+
try {
|
|
63
|
+
for (const [kind, list] of await files()) read.push([kind, root, list]);
|
|
64
|
+
} catch (err) {
|
|
65
|
+
unread.push({
|
|
66
|
+
path: root,
|
|
67
|
+
reason: `the ${label} root does not load, so no doc in it was checked: ${err instanceof Error ? err.message : String(err)}`,
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
await take(components, 'components', async () => [
|
|
72
|
+
[
|
|
73
|
+
'components',
|
|
74
|
+
discoverIntegrationComponents(integration).map(c => c.docPath),
|
|
75
|
+
],
|
|
76
|
+
]);
|
|
77
|
+
await take(templates, 'templates', async () => [
|
|
78
|
+
[
|
|
79
|
+
'templates',
|
|
80
|
+
(await discoverIntegrationTemplatesForOne(integration)).templates.map(
|
|
81
|
+
t => t.docPath,
|
|
82
|
+
),
|
|
83
|
+
],
|
|
84
|
+
]);
|
|
85
|
+
await take(docs, 'docs', async () => {
|
|
86
|
+
const found = await discoverIntegrationDocs(integration);
|
|
87
|
+
// Topics and placed guides are read with their overlays; a namespace
|
|
88
|
+
// names its file `<package name>/<path in the root>`.
|
|
89
|
+
const withOverlays = [
|
|
90
|
+
...found.records.map(record => record.path),
|
|
91
|
+
...found.guides.map(guide => guide.ref.topicFile),
|
|
92
|
+
];
|
|
93
|
+
const prefix = `${integration.name}/`;
|
|
94
|
+
const namespaces = found.namespaces.map(entry =>
|
|
95
|
+
path.join(
|
|
96
|
+
/** @type {string} */ (docs),
|
|
97
|
+
...(entry.source.startsWith(prefix)
|
|
98
|
+
? entry.source.slice(prefix.length)
|
|
99
|
+
: entry.source
|
|
100
|
+
).split('/'),
|
|
101
|
+
),
|
|
102
|
+
);
|
|
103
|
+
return [
|
|
104
|
+
['docs', [...withOverlays, ...namespaces]],
|
|
105
|
+
[
|
|
106
|
+
'docs-overlay',
|
|
107
|
+
withOverlays.flatMap(file =>
|
|
108
|
+
OVERLAY_LANGUAGES.map(lang => overlayPath(file, lang)).filter(
|
|
109
|
+
overlay => fs.existsSync(overlay),
|
|
110
|
+
),
|
|
111
|
+
),
|
|
112
|
+
],
|
|
113
|
+
];
|
|
114
|
+
});
|
|
115
|
+
await take(themes, 'themes', async () => [
|
|
116
|
+
[
|
|
117
|
+
'themes',
|
|
118
|
+
discoverThemeDirectory(
|
|
119
|
+
/** @type {string} */ (themes),
|
|
120
|
+
integration?.name ?? 'the package',
|
|
121
|
+
).map(theme => theme.docPath),
|
|
122
|
+
],
|
|
123
|
+
]);
|
|
124
|
+
/** @type {Map<string, {root: DocRoot, dir: string}>} */
|
|
125
|
+
const owners = new Map();
|
|
126
|
+
/** @type {(table: Map<string, {root: DocRoot, dir: string}>, root: DocRoot, dir: string, file: string) => void} */
|
|
127
|
+
const own = (table, root, dir, file) => {
|
|
128
|
+
const owner = table.get(file);
|
|
129
|
+
if (!owner || dir.length > owner.dir.length) table.set(file, {root, dir});
|
|
130
|
+
};
|
|
131
|
+
for (const [root, dir, files] of read) {
|
|
132
|
+
for (const file of files) own(owners, root, dir, file);
|
|
133
|
+
}
|
|
134
|
+
// The docs no reader serves, in each root a reader could read.
|
|
135
|
+
/** @type {Map<string, {root: DocRoot, dir: string}>} */
|
|
136
|
+
const shipped = new Map();
|
|
137
|
+
const readable = new Set(read.map(([, dir]) => dir));
|
|
138
|
+
for (const [
|
|
139
|
+
kind,
|
|
140
|
+
dir,
|
|
141
|
+
] of /** @type {Array<[DocRoot, string | undefined]>} */ ([
|
|
142
|
+
['components', components],
|
|
143
|
+
['templates', templates],
|
|
144
|
+
['docs', docs],
|
|
145
|
+
['themes', themes],
|
|
146
|
+
])) {
|
|
147
|
+
if (!dir || !readable.has(dir)) continue;
|
|
148
|
+
for (const file of docFilesUnder(dir)) {
|
|
149
|
+
const overlay = OVERLAY_LANGUAGES.some(lang =>
|
|
150
|
+
file.endsWith(`.doc.${lang}.mjs`),
|
|
151
|
+
);
|
|
152
|
+
if (overlay && kind !== 'docs') continue;
|
|
153
|
+
own(shipped, overlay ? 'docs-overlay' : kind, dir, file);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
let fixtures = 0;
|
|
157
|
+
for (const [file, owner] of shipped) {
|
|
158
|
+
if (owners.has(file)) continue;
|
|
159
|
+
if (isFixture(path.relative(owner.dir, file), owner.root)) fixtures++;
|
|
160
|
+
else owners.set(file, owner);
|
|
161
|
+
}
|
|
162
|
+
return {
|
|
163
|
+
files: [...owners]
|
|
164
|
+
.map(([file, {root}]) => ({path: file, root}))
|
|
165
|
+
.sort((a, b) => a.path.localeCompare(b.path)),
|
|
166
|
+
unread,
|
|
167
|
+
fixtures,
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* Whether a doc file is a test fixture: under `__tests__` in a root whose
|
|
173
|
+
* reader skips that folder (components and docs). The template reader reads
|
|
174
|
+
* it, so a template doc there is the package's like any other.
|
|
175
|
+
* @param {string} file its path relative to its root
|
|
176
|
+
* @param {DocRoot} root
|
|
177
|
+
*/
|
|
178
|
+
function isFixture(file, root) {
|
|
179
|
+
return (
|
|
180
|
+
root !== 'templates' &&
|
|
181
|
+
root !== 'themes' &&
|
|
182
|
+
file.split(path.sep).includes('__tests__')
|
|
183
|
+
);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* Every doc file under a folder: a `.doc.ts`, `.doc.mjs` or `.doc.js` file,
|
|
188
|
+
* or a `zh` or `dense` overlay, through its folders and linked files, but not
|
|
189
|
+
* `node_modules`, `.git` or a linked folder.
|
|
190
|
+
* @param {string} dir
|
|
191
|
+
* @returns {string[]}
|
|
192
|
+
*/
|
|
193
|
+
function docFilesUnder(dir) {
|
|
194
|
+
/** @type {string[]} */
|
|
195
|
+
const found = [];
|
|
196
|
+
/** @type {(folder: string) => void} */
|
|
197
|
+
const walk = folder => {
|
|
198
|
+
/** @type {fs.Dirent[]} */
|
|
199
|
+
let entries;
|
|
200
|
+
try {
|
|
201
|
+
entries = fs.readdirSync(folder, {withFileTypes: true});
|
|
202
|
+
} catch {
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
for (const entry of entries) {
|
|
206
|
+
if (entry.name === 'node_modules' || entry.name === '.git') continue;
|
|
207
|
+
const full = path.join(folder, entry.name);
|
|
208
|
+
if (entry.isDirectory()) {
|
|
209
|
+
walk(full);
|
|
210
|
+
continue;
|
|
211
|
+
}
|
|
212
|
+
if (entry.isSymbolicLink()) {
|
|
213
|
+
try {
|
|
214
|
+
if (!fs.statSync(full).isFile()) continue;
|
|
215
|
+
} catch {
|
|
216
|
+
continue;
|
|
217
|
+
}
|
|
218
|
+
} else if (!entry.isFile()) {
|
|
219
|
+
continue;
|
|
220
|
+
}
|
|
221
|
+
if (
|
|
222
|
+
/\.doc\.(ts|mjs|js)$/.test(entry.name) ||
|
|
223
|
+
OVERLAY_LANGUAGES.some(lang => entry.name.endsWith(`.doc.${lang}.mjs`))
|
|
224
|
+
) {
|
|
225
|
+
found.push(full);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
};
|
|
229
|
+
walk(dir);
|
|
230
|
+
return found;
|
|
231
|
+
}
|