@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
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* @file `astryx docs cli/integrations/docs/add-a-topic`: add a
|
|
5
|
-
* integration package, write its sections, and pick the doc
|
|
6
|
-
* thing the package ships.
|
|
4
|
+
* @file `astryx docs cli/integrations/building-blocks/docs/add-a-topic`: add a
|
|
5
|
+
* doc topic to an integration package, write its sections, and pick the doc
|
|
6
|
+
* kind for each thing the package ships.
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
/** @type {import('@astryxdesign/cli/authoring').ReferenceDoc} */
|
|
@@ -27,7 +27,7 @@ export const docs = {
|
|
|
27
27
|
{
|
|
28
28
|
type: 'code',
|
|
29
29
|
lang: 'bash',
|
|
30
|
-
code: '
|
|
30
|
+
code: 'astryx integration add doc deploying\n# Read it the way an app will\nastryx docs deploying',
|
|
31
31
|
},
|
|
32
32
|
{
|
|
33
33
|
type: 'code',
|
|
@@ -40,7 +40,7 @@ export const docs = {
|
|
|
40
40
|
items: [
|
|
41
41
|
'Name the topic in lowercase kebab-case, such as `deploying`. Readers type the name as a command argument, so it holds only letters, digits, `_`, and `-`.',
|
|
42
42
|
'Keep the name stable: readers and links find the topic by it.',
|
|
43
|
-
'Pick a name no Core topic
|
|
43
|
+
'Pick a name `astryx docs` does not already list: no Core topic, and no section such as `tokens` or `layout`. To take over or add to a Core topic, see {@link generic:extend-or-replace}.',
|
|
44
44
|
],
|
|
45
45
|
},
|
|
46
46
|
],
|
|
@@ -59,13 +59,48 @@ export const docs = {
|
|
|
59
59
|
label: 'docs/deploying.doc.mjs',
|
|
60
60
|
code: "/** @type {import('@astryxdesign/cli/authoring').ReferenceDoc} */\nexport default {\n type: 'generic',\n name: 'deploying',\n title: 'Deploying',\n description: 'Ship an app built with Acme widgets.',\n sections: [{\n id: 'build-before-you-ship',\n title: 'Build before you ship',\n content: [\n {type: 'prose', text: 'Build the app, then upload the `dist` folder.'},\n {type: 'code', lang: 'bash', code: 'npm run build'},\n {type: 'list', style: 'unordered', items: ['Keep `dist` out of git.']},\n {type: 'table', headers: ['Variable', 'Value'], rows: [['`NODE_ENV`', '`production`']]},\n ],\n }],\n};",
|
|
61
61
|
},
|
|
62
|
+
{
|
|
63
|
+
type: 'prose',
|
|
64
|
+
text: 'The sample sets a section `id`, so `package.json` needs the CLI peer `"@astryxdesign/cli": ">=0.6.4"`. Published 0.6.3 and earlier reject `id` and hide every doc topic your package ships, and `integration verify` fails without that peer; see {@link generic:versioning}.',
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
type: 'list',
|
|
68
|
+
style: 'unordered',
|
|
69
|
+
items: [
|
|
70
|
+
'Replace the `Overview` placeholder `integration add` writes.',
|
|
71
|
+
'Every field is in {@link schema:reference-doc}.',
|
|
72
|
+
],
|
|
73
|
+
},
|
|
74
|
+
],
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
id: 'write-commands-without-a-runner',
|
|
78
|
+
title: 'Write commands without a runner',
|
|
79
|
+
content: [
|
|
80
|
+
{
|
|
81
|
+
type: 'prose',
|
|
82
|
+
text: 'Start every CLI command in a doc with the word astryx alone, with no runner such as npx or pnpm exec in front. The CLI prefixes each one when it prints the doc, with the command the reader runs: `pnpm exec astryx` or `yarn astryx` from their package manager, or the `cliCommand` an integration sets. See {@link generic:cli-command}.',
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
type: 'code',
|
|
86
|
+
lang: 'javascript',
|
|
87
|
+
label: 'docs/deploying.doc.mjs',
|
|
88
|
+
code: "{type: 'prose', text: 'Check the app with `astryx doctor` before you ship.'},\n{type: 'code', lang: 'bash', code: 'astryx doctor'},",
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
type: 'code',
|
|
92
|
+
lang: 'text',
|
|
93
|
+
label:
|
|
94
|
+
"Read in an app whose integration sets cliCommand: 'acme astryx'",
|
|
95
|
+
code: 'Check the app with `acme astryx doctor` before you ship.\n\n```bash\nacme astryx doctor\n```',
|
|
96
|
+
},
|
|
62
97
|
{
|
|
63
98
|
type: 'list',
|
|
64
99
|
style: 'unordered',
|
|
65
100
|
items: [
|
|
66
|
-
'
|
|
67
|
-
'
|
|
68
|
-
'
|
|
101
|
+
'The CLI prefixes an inline code span that starts with the word astryx, a command at the start of a line, or after `&&`, `||`, `;` or `|`, in a `bash`, `sh`, `shell`, `zsh`, `console`, `text` or `markdown` code block or one with no language, and a table cell that holds only a command.',
|
|
102
|
+
'Code in other languages, such as a `js` example, and the word astryx in plain prose stay as written.',
|
|
103
|
+
'`--json` returns the doc as written, so a reader that shows it prefixes the commands itself.',
|
|
69
104
|
],
|
|
70
105
|
},
|
|
71
106
|
],
|
|
@@ -135,10 +170,20 @@ export const docs = {
|
|
|
135
170
|
items: [
|
|
136
171
|
'Readers open a topic by its `name`, not its file name. Name the file after the doc, `<name>.doc.mjs`, so each one is easy to find.',
|
|
137
172
|
'A topic with no `placement` is a flat topic: the docs list shows it under Topics, and readers open it by its name.',
|
|
138
|
-
'
|
|
173
|
+
'For a section of your own in the docs tree, see {@link generic:sections-and-placement}.',
|
|
139
174
|
],
|
|
140
175
|
},
|
|
141
176
|
],
|
|
142
177
|
},
|
|
178
|
+
{
|
|
179
|
+
id: 'global-mode',
|
|
180
|
+
title: 'In global mode',
|
|
181
|
+
content: [
|
|
182
|
+
{
|
|
183
|
+
type: 'prose',
|
|
184
|
+
text: 'In global mode: when users install your package for their computer, beside the global CLI, your doc topics show up in folders outside any project; inside a project, only if the project installs your package. See {@link namespace:global} and {@link generic:global-integrations}.',
|
|
185
|
+
},
|
|
186
|
+
],
|
|
187
|
+
},
|
|
143
188
|
],
|
|
144
189
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* @file `astryx docs cli/integrations/agent-guidance`: add short lines of
|
|
4
|
+
* @file `astryx docs cli/integrations/building-blocks/configuration/agent-guidance`: add short lines of
|
|
5
5
|
* guidance that apps put in front of their AI agents, within the limits.
|
|
6
6
|
*/
|
|
7
7
|
|
|
@@ -27,7 +27,7 @@ export const docs = {
|
|
|
27
27
|
{
|
|
28
28
|
type: 'code',
|
|
29
29
|
lang: 'bash',
|
|
30
|
-
code: "
|
|
30
|
+
code: "astryx integration add agent-doc 'Use AcmeCarousel for rotating content.'",
|
|
31
31
|
},
|
|
32
32
|
{
|
|
33
33
|
type: 'prose',
|
|
@@ -80,6 +80,10 @@ export default {
|
|
|
80
80
|
type: 'prose',
|
|
81
81
|
text: 'A line is one line of plain text. Line breaks, control characters, spaces at either end, and managed-block markers such as `<!-- ASTRYX:START -->` are rejected.',
|
|
82
82
|
},
|
|
83
|
+
{
|
|
84
|
+
type: 'prose',
|
|
85
|
+
text: 'Start a command in a line with the word astryx alone, with no runner in front, as in: Run astryx doctor before finishing. The block names the command the app runs once, at its top, for every command below it, so your line works in every app. See {@link generic:cli-command}.',
|
|
86
|
+
},
|
|
83
87
|
],
|
|
84
88
|
},
|
|
85
89
|
{
|
|
@@ -93,7 +97,7 @@ export default {
|
|
|
93
97
|
{
|
|
94
98
|
type: 'code',
|
|
95
99
|
lang: 'bash',
|
|
96
|
-
code: '
|
|
100
|
+
code: 'astryx init --features agents',
|
|
97
101
|
},
|
|
98
102
|
{
|
|
99
103
|
type: 'code',
|
|
@@ -119,9 +123,9 @@ export default {
|
|
|
119
123
|
{
|
|
120
124
|
type: 'code',
|
|
121
125
|
lang: 'bash',
|
|
122
|
-
code: `
|
|
126
|
+
code: `astryx init --features agents
|
|
123
127
|
# Or: --from takes the Core version the app had before
|
|
124
|
-
|
|
128
|
+
astryx upgrade --from <version> --apply`,
|
|
125
129
|
},
|
|
126
130
|
{
|
|
127
131
|
type: 'code',
|
|
@@ -134,5 +138,15 @@ npx astryx upgrade --from 0.7.0 --apply`,
|
|
|
134
138
|
},
|
|
135
139
|
],
|
|
136
140
|
},
|
|
141
|
+
{
|
|
142
|
+
id: 'global-mode',
|
|
143
|
+
title: 'In global mode',
|
|
144
|
+
content: [
|
|
145
|
+
{
|
|
146
|
+
type: 'prose',
|
|
147
|
+
text: "In global mode: the agent guide the CLI keeps for the computer carries no integration's guidance, because it serves every folder; your guidance reaches agents through the agent docs `init` writes in an app that installs your package. See {@link namespace:global} and {@link generic:computer-agent-guide}.",
|
|
148
|
+
},
|
|
149
|
+
],
|
|
150
|
+
},
|
|
137
151
|
],
|
|
138
152
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* @file `astryx docs cli/integrations/templates/document-the-template/block-template`:
|
|
4
|
+
* @file `astryx docs cli/integrations/building-blocks/templates/document-the-template/block-template`:
|
|
5
5
|
* the block-only fields: component relationships and the preview shape.
|
|
6
6
|
*/
|
|
7
7
|
|
|
@@ -31,7 +31,7 @@ export const docs = {
|
|
|
31
31
|
type: 'code',
|
|
32
32
|
lang: 'javascript',
|
|
33
33
|
label: 'templates/acme-stat-card.doc.mjs',
|
|
34
|
-
code: `/** @type {import('@astryxdesign/cli/authoring').
|
|
34
|
+
code: `/** @type {import('@astryxdesign/cli/authoring').IntegrationTemplateDoc} */
|
|
35
35
|
export default {
|
|
36
36
|
type: 'block',
|
|
37
37
|
name: 'acme-stat-card',
|
|
@@ -54,18 +54,8 @@ export default {
|
|
|
54
54
|
title: 'Choose the component relationship',
|
|
55
55
|
content: [
|
|
56
56
|
{
|
|
57
|
-
type: '
|
|
58
|
-
|
|
59
|
-
projection: {
|
|
60
|
-
fields: [
|
|
61
|
-
'exampleFor',
|
|
62
|
-
'alsoExampleFor',
|
|
63
|
-
'alsoShowcaseFor',
|
|
64
|
-
'componentsUsed',
|
|
65
|
-
'isShowcase',
|
|
66
|
-
],
|
|
67
|
-
},
|
|
68
|
-
presentation: 'full',
|
|
57
|
+
type: 'prose',
|
|
58
|
+
text: 'Every field is in {@link schema:template-doc}.',
|
|
69
59
|
},
|
|
70
60
|
{
|
|
71
61
|
type: 'prose',
|
|
@@ -75,7 +65,7 @@ export default {
|
|
|
75
65
|
type: 'code',
|
|
76
66
|
lang: 'javascript',
|
|
77
67
|
label: 'templates/acme-status-card-showcase.doc.mjs',
|
|
78
|
-
code: `/** @type {import('@astryxdesign/cli/authoring').
|
|
68
|
+
code: `/** @type {import('@astryxdesign/cli/authoring').IntegrationTemplateDoc} */
|
|
79
69
|
export default {
|
|
80
70
|
type: 'block',
|
|
81
71
|
name: 'acme-status-card-showcase',
|
|
@@ -101,14 +91,12 @@ export default {
|
|
|
101
91
|
title: 'Choose a useful preview',
|
|
102
92
|
content: [
|
|
103
93
|
{
|
|
104
|
-
type: '
|
|
105
|
-
|
|
106
|
-
projection: {fields: ['aspectRatio']},
|
|
107
|
-
presentation: 'full',
|
|
94
|
+
type: 'prose',
|
|
95
|
+
text: 'Every field is in {@link schema:template-doc}.',
|
|
108
96
|
},
|
|
109
97
|
{
|
|
110
98
|
type: 'prose',
|
|
111
|
-
text: '
|
|
99
|
+
text: 'Set `aspectRatio` from the value for the closest shape below, render the block at that ratio, and adjust it until it neither clips nor leaves large empty space. These are starting points, not contract defaults.',
|
|
112
100
|
},
|
|
113
101
|
{
|
|
114
102
|
type: 'table',
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* @file `astryx docs cli/integrations/templates/build-the-template`:
|
|
4
|
+
* @file `astryx docs cli/integrations/building-blocks/templates/build-the-template`:
|
|
5
5
|
* author portable template source and every asset that source needs.
|
|
6
6
|
*/
|
|
7
7
|
|
|
@@ -23,6 +23,10 @@ export const docs = {
|
|
|
23
23
|
},
|
|
24
24
|
},
|
|
25
25
|
blocks: [
|
|
26
|
+
{
|
|
27
|
+
type: 'prose',
|
|
28
|
+
text: 'In global mode: every kind your package adds also applies outside projects when users install it for their computer, beside the global CLI; inside a project, only if the project installs it. See {@link namespace:global} and {@link generic:global-integrations}.',
|
|
29
|
+
},
|
|
26
30
|
{
|
|
27
31
|
type: 'prose',
|
|
28
32
|
text: 'These are everything you can add to an integration. Mix them however you like. You are not limited to any one thing.',
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @file `astryx docs cli/integrations/building-blocks/components/describe-the-component/check-the-props`:
|
|
5
|
+
* compare each component doc's props table with the component's TypeScript
|
|
6
|
+
* props, read each finding, and fix the doc or the code.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/** @type {import('@astryxdesign/cli/authoring').ReferenceDoc} */
|
|
10
|
+
export const docs = {
|
|
11
|
+
type: 'generic',
|
|
12
|
+
name: 'check-the-props',
|
|
13
|
+
placement: {
|
|
14
|
+
parent: 'namespace:describe-the-component',
|
|
15
|
+
slot: 'guides',
|
|
16
|
+
order: 50,
|
|
17
|
+
},
|
|
18
|
+
title: 'Check the props table',
|
|
19
|
+
category: 'guide',
|
|
20
|
+
keywords: [
|
|
21
|
+
'props table',
|
|
22
|
+
'documented props',
|
|
23
|
+
'prop drift',
|
|
24
|
+
'props not compared',
|
|
25
|
+
],
|
|
26
|
+
description:
|
|
27
|
+
"Compare each props table with the component's TypeScript props, then fix the doc or the code.",
|
|
28
|
+
sections: [
|
|
29
|
+
{
|
|
30
|
+
id: 'run-the-props-check',
|
|
31
|
+
title: 'Run the props check',
|
|
32
|
+
content: [
|
|
33
|
+
{
|
|
34
|
+
type: 'prose',
|
|
35
|
+
text: "`doctor integration components` compares every props table in your component docs, hidden docs and every family entry included, with the props the component's TypeScript declares. Run it in your package after you change a component or its doc.",
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
type: 'code',
|
|
39
|
+
lang: 'bash',
|
|
40
|
+
code: 'astryx doctor integration components',
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
type: 'code',
|
|
44
|
+
lang: 'text',
|
|
45
|
+
code: `severity: [warn]
|
|
46
|
+
component: AcmeCarousel
|
|
47
|
+
prop: loop
|
|
48
|
+
kind: not_in_code
|
|
49
|
+
message: "loop" is documented, but AcmeCarousel's props have no "loop".
|
|
50
|
+
doc: components/AcmeCarousel.doc.mjs
|
|
51
|
+
source: components/AcmeCarousel.tsx
|
|
52
|
+
docType: boolean
|
|
53
|
+
|
|
54
|
+
1 prop(s) differ between the docs and the code in 1 of 1 component(s) compared (TypeScript 6.0.3). These are warnings: update the doc, or the code if the doc is right.`,
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
type: 'list',
|
|
58
|
+
style: 'unordered',
|
|
59
|
+
items: [
|
|
60
|
+
"A doc's own `props` describe the export its `name` names. In a family doc, each entry describes its own export. A hook entry documents parameters and returns, so it is not compared.",
|
|
61
|
+
"It reads props with the `typescript` your package installs, and reads your package's `tsconfig.json` the way `tsc -p` does. It finds TypeScript the way the docs check does, TypeScript 7 included ({@link generic:check-your-docs}). Without a usable one it prints `[skip] Props not compared` and the reason.",
|
|
62
|
+
'Findings are warnings and leave the exit code at 0. Read them before you publish. With `--json`, they are in `data.propDrift.findings`.',
|
|
63
|
+
],
|
|
64
|
+
},
|
|
65
|
+
],
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
id: 'fix-each-finding',
|
|
69
|
+
title: 'Fix each finding',
|
|
70
|
+
content: [
|
|
71
|
+
{
|
|
72
|
+
type: 'prose',
|
|
73
|
+
text: "Each finding's `kind` says what differs. Fix the doc, or the code if the doc is right.",
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
type: 'table',
|
|
77
|
+
headers: ['Kind', 'Means', 'Fix'],
|
|
78
|
+
rows: [
|
|
79
|
+
[
|
|
80
|
+
'`not_in_code`',
|
|
81
|
+
"The doc lists a prop the component's props do not have",
|
|
82
|
+
'Remove it from the doc, or add it to the code. A name an index signature takes, such as `data-*`, counts as present',
|
|
83
|
+
],
|
|
84
|
+
[
|
|
85
|
+
'`not_in_doc`',
|
|
86
|
+
"Your package declares a prop the doc does not list, or builds one with a mapped type, such as `Partial<Record<'sm' | 'md', string>>`",
|
|
87
|
+
'Document it. Props from React, the DOM, or another package are never asked for, and neither are props whose keys another package defines (`keyof CSSProperties`, behind an alias or not), `className`, `style`, `xstyle`, `data-testid`, `ref`, `key`, or a prop whose JSDoc has `@internal`. A deprecated prop is still a prop: document it until you remove it. A prop a mapped type builds from keys the check cannot trace (a template literal, say) is listed under `[info] Props not checked for a doc entry` instead',
|
|
88
|
+
],
|
|
89
|
+
[
|
|
90
|
+
'`required_mismatch`',
|
|
91
|
+
'`required` disagrees with the code',
|
|
92
|
+
'Set `required: true` exactly when every caller must pass the prop. One your `defaultProps` fills counts as optional, as it is to JSX callers, and so does one only some members of a union require, since a caller can leave it out: say in its description which variants need it. An entry that names several props (`value / onChange`) makes the same claim about each: give them separate entries when they differ',
|
|
93
|
+
],
|
|
94
|
+
[
|
|
95
|
+
'`type_mismatch`',
|
|
96
|
+
"The documented `type` differs from the code's, where both read exactly",
|
|
97
|
+
'Copy the type from the source, or fix the code. The next section says which types are judged',
|
|
98
|
+
],
|
|
99
|
+
[
|
|
100
|
+
'`default_mismatch`',
|
|
101
|
+
"The documented `default` differs from the literal default the component writes in its props destructuring, such as `size = 'md'`",
|
|
102
|
+
'Copy the default from the source, quoted as code: `default: "\'md\'"`. Quotes and spacing are ignored, and a default that is not a literal on either side (a constant, a call, prose) is not compared',
|
|
103
|
+
],
|
|
104
|
+
],
|
|
105
|
+
},
|
|
106
|
+
],
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
id: 'write-types-the-check-can-judge',
|
|
110
|
+
title: 'Write types the check can judge',
|
|
111
|
+
content: [
|
|
112
|
+
{
|
|
113
|
+
type: 'prose',
|
|
114
|
+
text: 'For a prop your package declares, the check also compares the documented `type`, but only where both sides read exactly. It never guesses, so a type it cannot judge is listed, not reported. It needs TypeScript 4.8 or later: with an older one it prints `[skip] Prop types not judged` and judges none.',
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
type: 'code',
|
|
118
|
+
lang: 'text',
|
|
119
|
+
code: `severity: [warn]
|
|
120
|
+
component: AcmeCarousel
|
|
121
|
+
prop: interval
|
|
122
|
+
kind: type_mismatch
|
|
123
|
+
message: "interval" is documented as string, but the code declares number.
|
|
124
|
+
doc: components/AcmeCarousel.doc.mjs
|
|
125
|
+
source: components/AcmeCarousel.tsx
|
|
126
|
+
docType: string
|
|
127
|
+
codeType: number`,
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
type: 'list',
|
|
131
|
+
style: 'unordered',
|
|
132
|
+
items: [
|
|
133
|
+
"Write the type as the source writes it, such as `ReactNode[]` or `(index: number) => void`. Parameter names, member order, quotes and whitespace may differ. Text that writes `readonly` must match exactly, parameter names included; only whitespace may differ. `React.X` names React's own `X` where the prop is declared, so it matches a bare `X` only where that name is React's: `React.KeyboardEvent` is not the DOM's `KeyboardEvent`.",
|
|
134
|
+
"Name a type as the file that declares the prop names it, so an import renamed there (`Item as BaseItem`) is written as that file writes it. A field (`cfg.level`) takes its prop's file, even when the field's own type is declared in another file.",
|
|
135
|
+
'A type written another way is judged only when both sides are built from exact parts: primitives such as `string` and `number`, string, number and boolean literals, string enum members, arrays and unions of these, and type names that stand for them. Union members may come in any order, and a member another covers adds nothing, as TypeScript passes it there: `undefined` beside `void`, or `string[]` beside `(string | number)[]`.',
|
|
136
|
+
'A mutable array type matches a readonly one, because callers can pass it. A readonly one documented for a mutable array is a mismatch.',
|
|
137
|
+
"When a prop's variants give a field different types, as `{value: string} | {value: number}` does, document every variant's type (`string | number`). The types of only some variants are listed: the prop's variants give this field different types. With more than six variant types, any other type is listed too.",
|
|
138
|
+
"To name an alias and show its values, write `AcmeSize = 'sm' | 'md'` or `AcmeSize ('sm' | 'md')`. Both parts must match.",
|
|
139
|
+
"An optional prop's `undefined` is set aside on both sides. With `exactOptionalPropertyTypes`, the doc shows `undefined` exactly when the code declares it.",
|
|
140
|
+
'Anything else, such as an object, a tuple, a generic with arguments, `keyof`, an intersection, or a mapped or conditional type written another way, is not compared.',
|
|
141
|
+
],
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
type: 'prose',
|
|
145
|
+
text: "The check prints how many documented types it judged, then lists the rest by reason: not a form the check judges exactly, a field the prop's variants give different types, a standard prop, or a prop declared outside the package. With `--json`, they are in `data.propDrift.typesNotCompared`.",
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
type: 'code',
|
|
149
|
+
lang: 'text',
|
|
150
|
+
code: '[info] Documented prop types judged: 2; not compared: 0. A type is judged when the doc writes it the same as the source (exactly, if it contains `readonly`), or when both are primitives, literals, arrays and unions of those, or names for them.',
|
|
151
|
+
},
|
|
152
|
+
],
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
id: 'when-a-component-is-not-compared',
|
|
156
|
+
title: 'When a component is not compared',
|
|
157
|
+
content: [
|
|
158
|
+
{
|
|
159
|
+
type: 'prose',
|
|
160
|
+
text: "When the check cannot read a component's props exactly, it lists the component under `[info] Props not compared`, with the reason, instead of reporting findings that might be wrong.",
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
type: 'code',
|
|
164
|
+
lang: 'text',
|
|
165
|
+
code: `[info] Props not compared for 1 documented component(s):
|
|
166
|
+
|
|
167
|
+
component: AcmeCarousel
|
|
168
|
+
doc: components/AcmeCarousel.doc.mjs
|
|
169
|
+
reason: AcmeCarousel depends on \`@acme/motion\` (imported in AcmeCarousel.tsx), which the compiler could not resolve, usually a dependency that is not installed. Install the package's dependencies and run this check again`,
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
type: 'table',
|
|
173
|
+
headers: ['Reason', 'Fix'],
|
|
174
|
+
rows: [
|
|
175
|
+
[
|
|
176
|
+
'It depends on a package or file the compiler could not resolve',
|
|
177
|
+
"Install the package's dependencies, then run the check again",
|
|
178
|
+
],
|
|
179
|
+
[
|
|
180
|
+
"It depends on a type the compiler can't work out",
|
|
181
|
+
'Make the types compile with `npx tsc --noEmit`, then run the check again',
|
|
182
|
+
],
|
|
183
|
+
[
|
|
184
|
+
"The package's TypeScript config has an error",
|
|
185
|
+
'Fix `tsconfig.json` until `npx tsc -p .` reads it',
|
|
186
|
+
],
|
|
187
|
+
['Its props are typed `any`', 'Give the component a props type'],
|
|
188
|
+
[
|
|
189
|
+
'Some prop names come from a type parameter',
|
|
190
|
+
'Nothing to fix: a component that renders an element the caller picks takes props known only where it is used',
|
|
191
|
+
],
|
|
192
|
+
[
|
|
193
|
+
"The file has no export named by the doc's `name`",
|
|
194
|
+
'Change `name` or the export so they agree',
|
|
195
|
+
],
|
|
196
|
+
],
|
|
197
|
+
},
|
|
198
|
+
],
|
|
199
|
+
},
|
|
200
|
+
],
|
|
201
|
+
};
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* @file `astryx docs cli/integrations/docs/check-your-docs`:
|
|
5
|
-
* proves about an integration's docs: the docs check,
|
|
6
|
-
* CLI peer.
|
|
4
|
+
* @file `astryx docs cli/integrations/building-blocks/docs/check-your-docs`:
|
|
5
|
+
* what each check proves about an integration's docs: the docs check, each
|
|
6
|
+
* doc's fields, the read size, and the CLI peer.
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
/** @type {import('@astryxdesign/cli/authoring').ReferenceDoc} */
|
|
@@ -13,7 +13,8 @@ export const docs = {
|
|
|
13
13
|
placement: {parent: 'namespace:docs', slot: 'guides', order: 60},
|
|
14
14
|
title: 'Check your docs',
|
|
15
15
|
category: 'guide',
|
|
16
|
-
description:
|
|
16
|
+
description:
|
|
17
|
+
'Check the docs tree, links, overlaps, doc fields, read size, and CLI peer.',
|
|
17
18
|
sections: [
|
|
18
19
|
{
|
|
19
20
|
id: 'run-the-docs-check',
|
|
@@ -21,17 +22,29 @@ export const docs = {
|
|
|
21
22
|
content: [
|
|
22
23
|
{
|
|
23
24
|
type: 'prose',
|
|
24
|
-
text: 'Run `doctor integration docs` in your package to check the docs tree, every link, and overlaps with Core topics. Pass a package name to check an installed package.',
|
|
25
|
+
text: 'Run `doctor integration docs` in your package to check the docs tree, every link, and overlaps with Core topics, and to list any passage two topics repeat. Pass a package name to check an installed package.',
|
|
25
26
|
},
|
|
26
27
|
{
|
|
27
28
|
type: 'code',
|
|
28
29
|
lang: 'bash',
|
|
29
|
-
code: '
|
|
30
|
+
code: 'astryx doctor integration docs\n# In an app, check an installed package\nastryx doctor integration docs @acme/astryx-widgets',
|
|
30
31
|
},
|
|
31
32
|
{
|
|
32
33
|
type: 'code',
|
|
33
34
|
lang: 'text',
|
|
34
|
-
code: 'Checking integration docs: @acme/astryx-widgets@1.0.0\n\n[ok] The docs tree and every link in these docs check out.\n\n[ok] No doc topics overlap with Core.',
|
|
35
|
+
code: 'Checking integration docs: @acme/astryx-widgets@1.0.0\n\n[ok] The docs tree and every link in these docs check out.\n\n[ok] No doc topics overlap with Core.\n[ok] No topic copies a passage from another.\n[ok] No filler phrases or low-density topics.',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
type: 'prose',
|
|
39
|
+
text: 'Write each fact in one topic. When two of your topics, or one of yours and a Core topic, repeat 10 or more words of prose word for word, the check lists the pair as a `copied_passage` warning. It names the topic that keeps the text (a Core topic, or of your two the one the passage fits) and the line in the other where to put the link instead ({@link generic:links}). Code and examples are not compared, and a topic may carry the text of the Core topic it replaces. A run with fewer than 4 distinct content words (words other than function words such as \"the\", \"in\" or \"it\"), or one that three or more topics share (a series lead-in), is not listed. Each listed pair is also a warning (`copied_passage`): `doctor integration docs` still exits 0, and `integration check --strict` fails until you fix it.',
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
type: 'prose',
|
|
43
|
+
text: "Keep docs dense. The check lists, as a `doc_fluff` warning, each padding phrase in your prose, with its file line and what to write instead, and each topic of 80 or more prose words in which fewer than half the words carry content (words other than function words such as the, and, in), with its measured share and the floor of 0.5. `doctor integration docs` still exits 0, and `integration check --strict` fails until you cut it. Code, examples, and quoted text are not read. The phrases: `it\'s important to note`, `it is important to note`, `important to note that`, `it\'s worth noting`, `it is worth noting`, `worth noting that`, `it should be noted`, `please note`, `note that` (opening a sentence), `as mentioned above`, `as mentioned earlier`, `as mentioned before`, `as noted above`, `as you can see`, `needless to say`, `in order to`, `due to the fact that`, `for the purpose of`, `at this point in time`, `in other words`, `basically`, `essentially`, `obviously`.",
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
type: 'prose',
|
|
47
|
+
text: "Point at another doc with a link, never by writing `astryx docs <name>` in prose: `{@link generic:<name>}` for one of your package's topics, or `{@link @astryxdesign/cli:generic:<name>}` for a Core doc (`namespace:` for a Core namespace). The CLI prints the link as the command that opens the doc, and doctor checks that the doc exists. The check lists each written pointer to a doc that exists as a `stray_doc_pointer` warning, with the link to write instead. A command with more words, or one in a code block, is a walkthrough and is not listed.",
|
|
35
48
|
},
|
|
36
49
|
{
|
|
37
50
|
type: 'prose',
|
|
@@ -45,7 +58,7 @@ export const docs = {
|
|
|
45
58
|
content: [
|
|
46
59
|
{
|
|
47
60
|
type: 'prose',
|
|
48
|
-
text: 'A doc that does not load, an accidental Core overlap, or a failed namespace or placement fails the check with exit code 1. A link that names no doc only warns, and the exit code stays 0.',
|
|
61
|
+
text: 'A doc that does not load, an accidental Core overlap, a `reference` block that names no doc, or a failed namespace or placement fails the check with exit code 1. A link that names no doc only warns, and the exit code stays 0.',
|
|
49
62
|
},
|
|
50
63
|
{
|
|
51
64
|
type: 'table',
|
|
@@ -66,6 +79,11 @@ export const docs = {
|
|
|
66
79
|
'`[fail]` `invalid_doc_graph`',
|
|
67
80
|
'1',
|
|
68
81
|
],
|
|
82
|
+
[
|
|
83
|
+
'A `reference` block whose target names no doc',
|
|
84
|
+
'`[fail]` `invalid_doc_reference`',
|
|
85
|
+
'1',
|
|
86
|
+
],
|
|
69
87
|
['A link that names no doc', '`[warn]` `invalid_doc_graph`', '0'],
|
|
70
88
|
[
|
|
71
89
|
'A topic that sets `replaces` or `extends`',
|
|
@@ -80,18 +98,58 @@ export const docs = {
|
|
|
80
98
|
},
|
|
81
99
|
],
|
|
82
100
|
},
|
|
101
|
+
{
|
|
102
|
+
id: 'check-each-doc-against-its-type',
|
|
103
|
+
title: 'Check each doc against its type',
|
|
104
|
+
content: [
|
|
105
|
+
{
|
|
106
|
+
type: 'prose',
|
|
107
|
+
text: "`doctor integration validate` reads every doc your package ships against the type `@astryxdesign/cli/authoring` publishes for its kind, the way `tsc` would: a `hidden` doc and a second doc for one name too. Test fixtures under `__tests__` in the components or docs root, which those readers skip, are counted, not checked. It reports a field the type does not have (`unknown_field`), a missing required field (`missing_field`), and a value outside the field's type (`wrong_type`).",
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
type: 'code',
|
|
111
|
+
lang: 'bash',
|
|
112
|
+
code: 'astryx doctor integration validate',
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
type: 'code',
|
|
116
|
+
lang: 'text',
|
|
117
|
+
code: `Checking 1 doc(s) against the authoring types (TypeScript 6.0.3)
|
|
118
|
+
|
|
119
|
+
severity: [warn]
|
|
120
|
+
doc: components/AcmeCarousel.doc.mjs
|
|
121
|
+
line: 7
|
|
122
|
+
export: default
|
|
123
|
+
type: ComponentDoc
|
|
124
|
+
field: summary
|
|
125
|
+
problem: unknown_field
|
|
126
|
+
message: Object literal may only specify known properties, and 'summary' does not exist in type 'SingleComponentDoc'.
|
|
127
|
+
fix: Remove \`summary\`: SingleComponentDoc has no field \`summary\`.`,
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
type: 'list',
|
|
131
|
+
style: 'unordered',
|
|
132
|
+
items: [
|
|
133
|
+
"The folder decides the type: `ComponentDoc` in your components root, `IntegrationTemplateDoc` in your templates root, `ThemeDoc` in your themes root, and in your docs root the type the doc's `type` names. Keep the `@type` comment above each doc's export too, so your editor shows the same problems as you type.",
|
|
134
|
+
'Every finding is a warning, so the exit code stays 0. With `--json`, they are in `data.docTypes.findings`.',
|
|
135
|
+
'It uses the `typescript` your package installs. Where `typescript` is missing or has no JavaScript compiler API, as TypeScript 7 does, it uses `@typescript/typescript6`, the TypeScript 6 API package, if your package installs it. Without either, it prints `[skip] Docs not type-checked` and the reason.',
|
|
136
|
+
'Every field of every doc type is in {@link generic:authoring}.',
|
|
137
|
+
],
|
|
138
|
+
},
|
|
139
|
+
],
|
|
140
|
+
},
|
|
83
141
|
{
|
|
84
142
|
id: 'check-read-size',
|
|
85
143
|
title: 'Check read size',
|
|
86
144
|
content: [
|
|
87
145
|
{
|
|
88
146
|
type: 'prose',
|
|
89
|
-
text: '`
|
|
147
|
+
text: '`astryx doctor` also measures every read and warns on one over 32 KB. Run it in your package or in an app that installs it; `doctor integration docs` does not check size.',
|
|
90
148
|
},
|
|
91
149
|
{
|
|
92
150
|
type: 'code',
|
|
93
151
|
lang: 'bash',
|
|
94
|
-
code: '
|
|
152
|
+
code: 'astryx doctor',
|
|
95
153
|
},
|
|
96
154
|
{
|
|
97
155
|
type: 'code',
|
|
@@ -115,7 +173,7 @@ export const docs = {
|
|
|
115
173
|
{
|
|
116
174
|
type: 'code',
|
|
117
175
|
lang: 'bash',
|
|
118
|
-
code: '
|
|
176
|
+
code: 'astryx integration verify',
|
|
119
177
|
},
|
|
120
178
|
{
|
|
121
179
|
type: 'code',
|