@astryxdesign/cli 0.7.2-canary.fe2c655 → 0.7.3-canary.02f5fe4
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 +216 -162
- package/api/build/_adapter.d.mts +66 -0
- package/api/build/_adapter.mjs +139 -4
- package/api/build/blocks/blocks.d.mts +92 -0
- package/api/build/blocks/blocks.mjs +528 -0
- package/api/build/blocks/blocks.test.mjs +238 -0
- package/api/build/blocks/blocks.weights.json +1 -0
- package/api/build/build.doc.mjs +4 -0
- package/api/build/build.mjs +25 -6
- package/api/build/build.type.mjs +1 -1
- package/api/build/help/help.mjs +1 -1
- package/api/build/kit/answer.d.mts +18 -0
- package/api/build/kit/answer.mjs +195 -0
- package/api/build/kit/answer.test.mjs +108 -0
- package/api/build/kit/kind.d.mts +25 -0
- package/api/build/kit/kind.mjs +170 -0
- package/api/build/kit/kit.d.mts +2 -4
- package/api/build/kit/kit.mjs +8 -406
- package/api/build/kit/rank.d.mts +3 -32
- package/api/build/kit/rank.mjs +25 -342
- package/api/build/kit/rank.test.mjs +2 -1
- package/api/build/kit/signals.d.mts +79 -0
- package/api/build/kit/signals.mjs +295 -0
- package/api/build/kit/start.d.mts +32 -0
- package/api/build/kit/start.mjs +163 -0
- package/api/build/kit/words.d.mts +72 -0
- package/api/build/kit/words.mjs +202 -0
- package/api/build/tree.d.mts +20 -0
- package/api/build/tree.mjs +53 -0
- package/api/build/tree.test.mjs +185 -0
- package/api/build/tree.weights.json +1 -0
- package/api/component/_adapter.d.mts +72 -1
- package/api/component/_adapter.mjs +251 -23
- package/api/component/component-replacement.test.mjs +1 -0
- package/api/component/component.doc.mjs +6 -1
- package/api/component/component.mjs +97 -16
- package/api/component/component.test.mjs +95 -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 +131 -12
- package/api/discover/_adapter.mjs +520 -34
- package/api/discover/_adapter.test.mjs +641 -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 +120 -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 +76 -2
- package/api/docs/_adapter.mjs +630 -34
- package/api/docs/docs-homes.test.mjs +127 -0
- package/api/docs/docs.doc.mjs +5 -4
- package/api/docs/docs.mjs +2 -1
- package/api/docs/docs.test.mjs +39 -20
- package/api/docs/integration-tree.test.mjs +42 -20
- package/api/docs/integrationDocs.test.mjs +125 -1
- package/api/docs/list/list.mjs +12 -2
- package/api/docs/namespace-section.test.mjs +6 -6
- package/api/docs/reference-blocks.test.mjs +3 -5
- package/api/doctor/_adapter.d.mts +128 -0
- package/api/doctor/_adapter.mjs +253 -4
- package/api/doctor/doctor.d.mts +217 -0
- package/api/doctor/doctor.doc.mjs +3 -2
- package/api/doctor/doctor.mjs +691 -52
- package/api/doctor/doctor.test.mjs +267 -18
- 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/hook.mjs +1 -1
- 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 +45 -10
- package/api/init/init.mjs +28 -4
- package/api/init/init.test.mjs +18 -2
- package/api/init/init.type.d.mts +50 -5
- package/api/init/init.type.mjs +39 -5
- package/api/init/remove/remove.mjs +17 -4
- package/api/init/remove/remove.test.mjs +114 -2
- package/api/init/run/run.d.mts +1 -1
- package/api/init/run/run.mjs +86 -12
- 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 +53 -0
- package/api/integration/_adapter.mjs +132 -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 +192 -14
- package/api/integration/authoring-checks.test.mjs +1028 -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 +486 -123
- package/api/integration/pack-check.test.mjs +817 -10
- package/api/integration/validate-integration-case-disk.test.mjs +111 -0
- package/api/integration/validate-integration-fixes.test.mjs +73 -5
- package/api/integration/validate-integration-gaps.test.mjs +1975 -0
- package/api/integration/validate-integration.d.mts +23 -2
- package/api/integration/validate-integration.mjs +358 -45
- package/api/integration/validate-integration.test.mjs +88 -8
- package/api/integration/validate-integration.type.d.mts +105 -0
- package/api/integration/validate-integration.type.mjs +79 -1
- package/api/integration/validate-unread-theme-folders.test.mjs +3 -2
- package/api/integration/validateIntegration.doc.mjs +19 -3
- package/api/search/ORDERING.md +28 -0
- package/api/search/_adapter.d.mts +91 -0
- package/api/search/_adapter.mjs +172 -0
- package/api/search/_adapter.test.mjs +173 -0
- package/api/search/_candidate-score.d.mts +40 -0
- package/api/search/_candidate-score.mjs +238 -0
- package/api/search/_cards.json +6098 -0
- package/api/search/_compound.d.mts +50 -0
- package/api/search/_compound.mjs +170 -0
- package/api/search/_doc-searcher.d.mts +4 -0
- package/api/search/_doc-searcher.mjs +23 -0
- package/api/search/_doc-searcher.test.mjs +36 -0
- package/api/search/_doc-searcher.weights.json +1 -0
- package/api/search/_doc-text.d.mts +30 -0
- package/api/search/_doc-text.mjs +87 -0
- package/api/search/_entries.d.mts +63 -0
- package/api/search/_entries.mjs +232 -0
- package/api/search/_entries.test.mjs +48 -0
- package/api/search/_features.d.mts +35 -0
- package/api/search/_features.mjs +155 -0
- package/api/search/_gather-components.d.mts +26 -0
- package/api/search/_gather-components.mjs +284 -0
- package/api/search/_gather-docs.d.mts +20 -0
- package/api/search/_gather-docs.mjs +254 -0
- package/api/search/_gather-hooks.d.mts +12 -0
- package/api/search/_gather-hooks.mjs +52 -0
- package/api/search/_gather-templates.d.mts +25 -0
- package/api/search/_gather-templates.mjs +107 -0
- package/api/search/_lexical.d.mts +135 -0
- package/api/search/_lexical.mjs +351 -0
- package/api/search/_main-searcher.d.mts +19 -0
- package/api/search/_main-searcher.mjs +115 -0
- package/api/search/_main-searcher.test.mjs +106 -0
- package/api/search/_main-searcher.weights.json +1 -0
- package/api/search/_module-doc.d.mts +32 -0
- package/api/search/_module-doc.mjs +78 -0
- package/api/search/_order.d.mts +32 -0
- package/api/search/_order.mjs +162 -0
- package/api/search/_order.test.mjs +72 -0
- package/api/search/_priority.d.mts +50 -0
- package/api/search/_priority.mjs +139 -0
- package/api/search/_query-words.d.mts +25 -0
- package/api/search/_query-words.mjs +92 -0
- package/api/search/_query.d.mts +65 -0
- package/api/search/_query.mjs +176 -0
- package/api/search/_result.d.mts +97 -0
- package/api/search/_result.mjs +150 -0
- package/api/search/_score.d.mts +60 -0
- package/api/search/_score.mjs +283 -0
- package/api/search/_synonyms.d.mts +21 -0
- package/api/search/_synonyms.mjs +67 -0
- package/api/search/_template-searcher.d.mts +4 -0
- package/api/search/_template-searcher.mjs +23 -0
- package/api/search/_template-searcher.test.mjs +40 -0
- package/api/search/_template-searcher.weights.json +1 -0
- package/api/search/_titles.d.mts +33 -0
- package/api/search/_titles.mjs +65 -0
- package/api/search/_words.d.mts +64 -0
- package/api/search/_words.mjs +157 -0
- package/api/search/search.d.mts +22 -236
- package/api/search/search.doc.mjs +14 -7
- 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 +59 -1904
- package/api/search/search.test.mjs +193 -15
- package/api/search/search.type.d.mts +20 -2
- package/api/search/search.type.mjs +12 -2
- package/api/search/tree.d.mts +15 -0
- package/api/search/tree.mjs +40 -0
- package/api/search/tree.test.mjs +66 -0
- package/api/search/tree.weights.json +1 -0
- 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.mjs +5 -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 +21 -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 +97 -11
- package/api/upgrade/_adapter.mjs +315 -32
- package/api/upgrade/registry/registry.d.mts +10 -4
- package/api/upgrade/registry/registry.mjs +33 -16
- package/api/upgrade/registry/registry.test.mjs +85 -0
- package/api/upgrade/run/cli-behind-core.test.mjs +438 -0
- package/api/upgrade/run/run.d.mts +4 -2
- package/api/upgrade/run/run.mjs +48 -4
- package/api/upgrade/run/run.test.mjs +417 -3
- package/api/upgrade/status/status.d.mts +21 -5
- package/api/upgrade/status/status.mjs +45 -8
- package/api/upgrade/upgrade.doc.mjs +16 -8
- package/api/upgrade/upgrade.mjs +18 -3
- package/api/upgrade/upgrade.test.mjs +194 -0
- package/api/upgrade/upgrade.type.d.mts +28 -3
- package/api/upgrade/upgrade.type.mjs +24 -7
- 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.0/__tests__/validate-data-token-ownership.test.mjs +11 -0
- package/assets/codemods/transforms/v0.7.0/validate-data-token-ownership.mjs +3 -3
- 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 +5 -5
- package/assets/docs/browser-support.doc.mjs +1 -1
- package/assets/docs/getting-started.doc.mjs +26 -6
- package/assets/docs/is-my-code-good.doc.mjs +287 -0
- 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 +14 -4
- 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/api.doc.mjs +6 -0
- package/assets/docs/tree/authoring.doc.mjs +61 -0
- 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 +6 -2
- 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 +101 -0
- package/assets/docs/tree/cli-command.doc.mjs +142 -0
- package/assets/docs/tree/cli.doc.mjs +7 -1
- 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 +8 -4
- package/assets/docs/tree/debug-and-gap-reports.doc.mjs +41 -22
- package/assets/docs/tree/define-the-theme.doc.mjs +7 -6
- 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 +4 -4
- 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/{authoring.doc.mjs → tree/field-reference.doc.mjs} +4 -3
- package/assets/docs/tree/fonts-and-assets.doc.mjs +3 -3
- package/assets/docs/tree/generate-a-palette.doc.mjs +8 -6
- 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/help.doc.mjs +2 -2
- package/assets/docs/tree/host-entry.doc.mjs +128 -0
- package/assets/docs/tree/install-once.doc.mjs +105 -0
- 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 +54 -28
- 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/ship.doc.mjs +2 -2
- 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-grading-rubric.doc.mjs +17 -38
- 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 +5 -1
- package/assets/docs/tree/tokens-and-setup.doc.mjs +19 -15
- package/assets/docs/tree/tokens-data.doc.mjs +2 -2
- 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 +15 -3
- package/assets/docs/tree/verify-packed-template.doc.mjs +3 -3
- package/assets/docs/tree/versioning.doc.mjs +14 -9
- package/assets/docs/tree/who-answers.doc.mjs +119 -0
- package/assets/docs/tree/write-good-templates.doc.mjs +1 -1
- 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/use-integrations.doc.mjs +120 -0
- package/assets/docs/working-with-ai.doc.mjs +70 -13
- package/assets/templates/themes/butter/butterTheme.ts +4 -2
- package/assets/templates/themes/stone/stoneTheme.ts +4 -2
- package/assets/templates/themes/y2k/y2kTheme.ts +4 -2
- 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 +10 -10
- 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 +13 -1
- package/clients/cli/bin/astryx.mjs +11 -65
- package/clients/cli/cli-command.test.mjs +166 -0
- package/clients/cli/command-result-coverage.test.mjs +6 -5
- 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.color-scheme.test.mjs +1 -1
- package/clients/cli/commands/build-theme.font-warning.test.mjs +3 -3
- 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/{component/index.mjs → component.mjs} +37 -37
- package/clients/cli/commands/component.test.mjs +6 -6
- 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 +3 -2
- package/clients/cli/commands/docs.mjs +50 -20
- package/clients/cli/commands/docs.test.mjs +16 -16
- 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 +936 -3
- package/clients/cli/commands/doctor.doc.mjs +12 -2
- package/clients/cli/commands/doctor.mjs +332 -7
- package/clients/cli/commands/doctor.test.mjs +75 -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/{hook/index.mjs → hook.mjs} +22 -22
- package/clients/cli/commands/import-hint-correctness.test.mjs +1 -1
- package/clients/cli/commands/init.behavior.test.mjs +235 -1
- package/clients/cli/commands/init.doc.mjs +55 -10
- package/clients/cli/commands/init.flag-help.test.mjs +1 -0
- package/clients/cli/commands/init.mjs +2 -2
- 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 +489 -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 +2 -1
- package/clients/cli/commands/manifest.mjs +67 -0
- package/clients/cli/commands/outside-project.test.mjs +874 -0
- package/clients/cli/commands/postinstall.doc.mjs +23 -0
- package/clients/cli/commands/postinstall.mjs +31 -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 +180 -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/{build-theme.mjs → theme.mjs} +27 -14
- package/clients/cli/commands/upgrade.config-ordering.test.mjs +2 -1
- package/clients/cli/commands/upgrade.doc.mjs +26 -3
- 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.mjs +9 -2
- package/clients/cli/commands/upgrade.older-cli.test.mjs +160 -0
- package/clients/cli/commands/upgrade.subfolder-path.test.mjs +97 -0
- package/clients/cli/index.mjs +156 -100
- package/clients/cli/lib/cli-error.mjs +4 -1
- package/clients/cli/lib/component-format.mjs +1 -1
- package/clients/cli/lib/component-format.test.mjs +1 -1
- package/clients/cli/lib/define-command.mjs +14 -9
- package/clients/cli/lib/exit-codes.test.mjs +5 -0
- 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 +37 -0
- package/clients/cli/lib/welcome-box.mjs +50 -0
- package/clients/cli/run.mjs +108 -0
- package/foundation/agent-docs/agent-doc-state.d.mts +67 -13
- package/foundation/agent-docs/agent-doc-state.mjs +123 -14
- package/foundation/agent-docs/agent-docs.d.mts +104 -15
- package/foundation/agent-docs/agent-docs.mjs +1028 -114
- package/foundation/agent-docs/agent-docs.path-safety.test.mjs +1239 -17
- package/foundation/agent-docs/agent-docs.test.mjs +683 -39
- package/foundation/agent-docs/computer-agent-text.d.mts +170 -0
- package/foundation/agent-docs/computer-agent-text.mjs +750 -0
- package/foundation/agent-docs/computer-agent-text.test.mjs +699 -0
- package/foundation/config/project.d.mts +35 -3
- package/foundation/config/project.mjs +243 -26
- package/foundation/config/project.test.mjs +122 -0
- package/foundation/config/theme-state.mjs +5 -4
- package/foundation/discovery/authoring-self-docs.d.mts +7 -0
- package/foundation/discovery/authoring-self-docs.mjs +17 -4
- package/foundation/discovery/authoring-self-docs.test.mjs +15 -3
- package/foundation/discovery/authoring-surface.d.mts +1 -1
- package/foundation/discovery/authoring-surface.mjs +2 -2
- package/foundation/discovery/authoring-surface.test.mjs +1 -1
- package/foundation/discovery/cli-self-docs.d.mts +2 -1
- package/foundation/discovery/cli-self-docs.mjs +22 -4
- package/foundation/discovery/cli-self-docs.test.mjs +3 -2
- package/foundation/discovery/component-discovery.d.mts +227 -10
- package/foundation/discovery/component-discovery.export-names.test.mjs +760 -0
- package/foundation/discovery/component-discovery.mjs +940 -57
- package/foundation/discovery/component-discovery.test.mjs +96 -0
- package/foundation/discovery/component-loader.d.mts +1 -1
- 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 +97 -3
- 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 +68 -0
- package/foundation/discovery/module-exports.mjs +609 -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 +38 -0
- package/foundation/discovery/runner-allowlist.mjs +51 -0
- package/foundation/discovery/runner-commands.d.mts +77 -0
- package/foundation/discovery/runner-commands.mjs +294 -0
- package/foundation/discovery/runner-commands.test.mjs +128 -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 +92 -6
- package/foundation/discovery/template-needs.mjs +6 -46
- package/foundation/discovery/theme-discovery.mjs +147 -3
- 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 +84 -10
- 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/read.mjs +59 -1
- package/foundation/doc-compiler/read.test.mjs +11 -2
- package/foundation/doc-compiler/split-topic-keywords.test.mjs +3 -2
- package/foundation/doc-compiler/tree.d.mts +32 -6
- package/foundation/doc-compiler/tree.mjs +107 -44
- package/foundation/doc-compiler/tree.test.mjs +14 -7
- 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 +122 -4
- package/foundation/fs/paths.mjs +675 -29
- package/foundation/fs/paths.test.mjs +439 -54
- package/foundation/fs/read-record.d.mts +18 -0
- package/foundation/fs/read-record.mjs +131 -0
- package/foundation/fs/read-record.test.mjs +77 -0
- package/foundation/integrations/autolink.d.mts +2 -1
- package/foundation/integrations/autolink.mjs +4 -13
- package/foundation/integrations/cli-peer-version.d.mts +36 -0
- package/foundation/integrations/cli-peer-version.mjs +132 -0
- package/foundation/integrations/cli-peer-version.test.mjs +354 -0
- package/foundation/integrations/computer-integrations.d.mts +81 -0
- package/foundation/integrations/computer-integrations.mjs +345 -0
- package/foundation/integrations/computer-integrations.test.mjs +292 -0
- package/foundation/integrations/contribution-inventory.d.mts +26 -20
- package/foundation/integrations/contribution-inventory.mjs +97 -8
- package/foundation/integrations/exports-subpaths.d.mts +57 -0
- package/foundation/integrations/exports-subpaths.mjs +113 -0
- package/foundation/integrations/integration-warnings.mjs +3 -2
- package/foundation/integrations/integration-warnings.test.mjs +8 -9
- package/foundation/integrations/integrations.d.mts +51 -1
- package/foundation/integrations/integrations.mjs +106 -4
- package/foundation/integrations/issue.ts +6 -0
- package/foundation/integrations/public-imports.d.mts +118 -0
- package/foundation/integrations/public-imports.mjs +1769 -0
- package/foundation/integrations/public-imports.test.mjs +1793 -0
- package/foundation/integrations/validate-contributions.d.mts +117 -0
- package/foundation/integrations/validate-contributions.mjs +1209 -14
- 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 +923 -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 +263 -0
- package/foundation/release/global-state.mjs +474 -0
- package/foundation/release/global-state.test.mjs +381 -0
- package/foundation/release/handoff.d.mts +79 -0
- package/foundation/release/handoff.e2e.test.mjs +278 -0
- package/foundation/release/handoff.mjs +524 -0
- package/foundation/release/lock-lease.d.mts +23 -0
- package/foundation/release/lock-lease.mjs +80 -0
- package/foundation/release/notices.d.mts +307 -0
- package/foundation/release/notices.mjs +707 -0
- package/foundation/release/notices.test.mjs +586 -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 +163 -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/route/route.d.mts +285 -0
- package/foundation/route/route.mjs +324 -0
- package/foundation/route/route.test.mjs +153 -0
- package/foundation/runtime/hosted-runtime.test.mjs +403 -0
- package/foundation/runtime/locked-versions.d.mts +32 -0
- package/foundation/runtime/locked-versions.mjs +65 -0
- package/foundation/runtime/package-root.d.mts +91 -0
- package/foundation/runtime/package-root.mjs +174 -0
- package/foundation/runtime/package-set.d.mts +62 -0
- package/foundation/runtime/package-set.mjs +130 -0
- package/foundation/runtime/package-set.test.mjs +432 -0
- package/foundation/text/string-utils.d.mts +2 -1
- package/foundation/text/string-utils.mjs +16 -5
- package/foundation/text/suggest-order.d.mts +72 -0
- package/foundation/text/suggest-order.mjs +363 -0
- package/foundation/text/suggest-order.test.mjs +259 -0
- 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/host/door-conformance.test.mjs +274 -0
- package/host/index.d.ts +116 -0
- package/host/index.mjs +295 -0
- package/host/index.test.mjs +302 -0
- package/package.json +16 -11
- package/scripts/postinstall.mjs +24 -5
- package/assets/docs/tree/integrations.doc.mjs +0 -40
|
@@ -10,7 +10,8 @@
|
|
|
10
10
|
*/
|
|
11
11
|
export function validateLocalIntegration(cwd?: string): Promise<ValidateResult>;
|
|
12
12
|
/**
|
|
13
|
-
* Validate an INSTALLED integration package
|
|
13
|
+
* Validate an INSTALLED integration package: the nearest `node_modules/<spec>`
|
|
14
|
+
* at or above `cwd`, resolved the way the project loads it.
|
|
14
15
|
* @param {string} spec package name
|
|
15
16
|
* @param {string} [cwd]
|
|
16
17
|
* @returns {Promise<ValidateResult>}
|
|
@@ -43,7 +44,6 @@ export function summarizeIssues(issues: Issue[]): {
|
|
|
43
44
|
errors: number;
|
|
44
45
|
warnings: number;
|
|
45
46
|
};
|
|
46
|
-
export { validateLoadedIntegration };
|
|
47
47
|
export type Issue = import("../../foundation/integrations/issue").AstryxIntegrationIssue;
|
|
48
48
|
export type ValidateResult = {
|
|
49
49
|
/**
|
|
@@ -67,6 +67,27 @@ export type ValidateResult = {
|
|
|
67
67
|
*/
|
|
68
68
|
reason?: "no_package_json" | undefined;
|
|
69
69
|
issues: Issue[];
|
|
70
|
+
/**
|
|
71
|
+
* Information that
|
|
72
|
+
* fails nothing, such as `invalid_cli_command` (a malformed `cliCommand`).
|
|
73
|
+
*/
|
|
74
|
+
notes?: {
|
|
75
|
+
code: string;
|
|
76
|
+
message: string;
|
|
77
|
+
}[] | undefined;
|
|
78
|
+
/**
|
|
79
|
+
* Layout findings added after the last minor
|
|
80
|
+
* release: validate lists them as notes, which count nowhere, since they
|
|
81
|
+
* may not fail `--strict` until the next (architecture:cli-surface INV35);
|
|
82
|
+
* `integration verify` still fails on a package.json npm cannot pack.
|
|
83
|
+
*/
|
|
84
|
+
listed?: import("../../foundation/integrations/issue").AstryxIntegrationIssue[] | undefined;
|
|
70
85
|
integration?: import("../../foundation/integrations/integrations.mjs").LoadedIntegration | undefined;
|
|
86
|
+
/**
|
|
87
|
+
* what the public-import check could not judge
|
|
88
|
+
*/
|
|
89
|
+
publicImports?: import("./validate-integration.type.mjs").PublicImportsReport | undefined;
|
|
71
90
|
};
|
|
72
91
|
import { validateLoadedIntegration } from '../../foundation/integrations/validate-contributions.mjs';
|
|
92
|
+
import { isListedIssue } from '../../foundation/integrations/validate-contributions.mjs';
|
|
93
|
+
export { validateLoadedIntegration, isListedIssue };
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* - validateLocalIntegration(cwd) — the package rooted at `cwd` (nearest
|
|
13
13
|
* package.json + sibling astryx.integration.{ts,mjs,js}).
|
|
14
14
|
* - validateInstalledIntegration(spec, cwd) — an installed package resolved
|
|
15
|
-
* from `cwd
|
|
15
|
+
* from the node_modules chain at or above `cwd`.
|
|
16
16
|
*
|
|
17
17
|
* Both return a { found, name, version, manifestFile, issues } result. `found`
|
|
18
18
|
* is false only for the no-manifest local case, which is guidance (not an
|
|
@@ -34,6 +34,10 @@
|
|
|
34
34
|
import * as fs from 'node:fs';
|
|
35
35
|
import * as path from 'node:path';
|
|
36
36
|
import {assertWithin} from '../../foundation/fs/path-safety.mjs';
|
|
37
|
+
import {normalizeProviderId} from '../../foundation/identity/provider-identity.mjs';
|
|
38
|
+
import {integrationDocTypes} from '../docs/_adapter.mjs';
|
|
39
|
+
import {integrationDocConsistency} from '../../foundation/discovery/doc-consistency.mjs';
|
|
40
|
+
import {integrationRunnerCommands} from './_adapter.mjs';
|
|
37
41
|
import {
|
|
38
42
|
THEME_SLUG_RE,
|
|
39
43
|
unreadThemeFolders,
|
|
@@ -49,18 +53,31 @@ import {
|
|
|
49
53
|
import {
|
|
50
54
|
findManifestPaths,
|
|
51
55
|
loadManifest,
|
|
52
|
-
|
|
56
|
+
resolveInstalledIntegrationDir,
|
|
53
57
|
} from '../../foundation/integrations/integrations.mjs';
|
|
54
58
|
// The on-disk contribution validators live in foundation: Project and
|
|
55
59
|
// integration-warnings need them too, and foundation must not depend on api.
|
|
56
60
|
import {
|
|
61
|
+
blockComponentsCheck,
|
|
62
|
+
componentDocNamesCheck,
|
|
63
|
+
INVALID_CLI_COMMAND,
|
|
64
|
+
isListedIssue,
|
|
65
|
+
issueListed as listed,
|
|
57
66
|
validateLoadedIntegration,
|
|
67
|
+
validateLoadedIntegrationListed,
|
|
58
68
|
issueError as error,
|
|
59
69
|
issueWarning as warning,
|
|
60
70
|
rootProblem,
|
|
61
71
|
} from '../../foundation/integrations/validate-contributions.mjs';
|
|
72
|
+
import {formatCliCommand} from '../../foundation/env/package-manager.mjs';
|
|
73
|
+
import {cliPeerVersionProblem} from '../../foundation/integrations/cli-peer-version.mjs';
|
|
74
|
+
import {publicImportIssues} from '../../foundation/integrations/public-imports.mjs';
|
|
75
|
+
import {runChoice} from '../../foundation/release/run-context.mjs';
|
|
62
76
|
|
|
63
|
-
|
|
77
|
+
/** The running CLI is outside the package's `@astryxdesign/cli` peer range. */
|
|
78
|
+
const CLI_PEER_VERSION = 'cli_peer_version';
|
|
79
|
+
|
|
80
|
+
export {validateLoadedIntegration, isListedIssue};
|
|
64
81
|
|
|
65
82
|
/**
|
|
66
83
|
* @typedef {import('../../foundation/integrations/issue').AstryxIntegrationIssue} Issue
|
|
@@ -74,7 +91,15 @@ export {validateLoadedIntegration};
|
|
|
74
91
|
* @property {string} [manifestFile] Absolute path to the loaded manifest.
|
|
75
92
|
* @property {'no_package_json'} [reason] Why nothing was validated (internal).
|
|
76
93
|
* @property {Issue[]} issues
|
|
94
|
+
* @property {Array<{code: string, message: string}>} [notes] Information that
|
|
95
|
+
* fails nothing, such as `invalid_cli_command` (a malformed `cliCommand`).
|
|
96
|
+
* @property {Issue[]} [listed] Layout findings added after the last minor
|
|
97
|
+
* release: validate lists them as notes, which count nowhere, since they
|
|
98
|
+
* may not fail `--strict` until the next (architecture:cli-surface INV35);
|
|
99
|
+
* `integration verify` still fails on a package.json npm cannot pack.
|
|
77
100
|
* @property {import('../../foundation/integrations/integrations.mjs').LoadedIntegration} [integration]
|
|
101
|
+
* @property {import('./validate-integration.type.mjs').PublicImportsReport} [publicImports]
|
|
102
|
+
* what the public-import check could not judge
|
|
78
103
|
*/
|
|
79
104
|
|
|
80
105
|
/**
|
|
@@ -93,6 +118,14 @@ function findNearestPackageJson(cwd) {
|
|
|
93
118
|
}
|
|
94
119
|
}
|
|
95
120
|
|
|
121
|
+
const ROOT_KINDS = /** @type {const} */ ([
|
|
122
|
+
'components',
|
|
123
|
+
'templates',
|
|
124
|
+
'codemods',
|
|
125
|
+
'docs',
|
|
126
|
+
'themes',
|
|
127
|
+
]);
|
|
128
|
+
|
|
96
129
|
const UNREACHABLE_SCAN_LIMIT = 5_000;
|
|
97
130
|
const UNREACHABLE_SKIP_DIRS = new Set([
|
|
98
131
|
'node_modules',
|
|
@@ -123,7 +156,7 @@ function unreadThemeFolderIssues(packageDir, loaded) {
|
|
|
123
156
|
let fix;
|
|
124
157
|
if (THEME_SLUG_RE.test(name)) {
|
|
125
158
|
const stem = `${name.replace(/-([a-z0-9])/gu, (_, character) => character.toUpperCase())}Theme`;
|
|
126
|
-
fix = `if it is a theme, add ${stem}.ts and ${stem}.doc.mjs to it (
|
|
159
|
+
fix = `if it is a theme, add ${stem}.ts and ${stem}.doc.mjs to it (\`${formatCliCommand(`integration add theme ${name}`, packageDir)}\` writes both) and move its code into ${stem}.ts; if not, ${hide}.`;
|
|
127
160
|
} else {
|
|
128
161
|
fix = `${hide}; a theme folder needs a lower-kebab name.`;
|
|
129
162
|
}
|
|
@@ -142,27 +175,51 @@ function unreadThemeFolderIssues(packageDir, loaded) {
|
|
|
142
175
|
*
|
|
143
176
|
* @param {string} packageDir
|
|
144
177
|
* @param {import('../../foundation/integrations/integrations.mjs').LoadedIntegration} loaded
|
|
178
|
+
* @param {string[]} [reported] folders whose files another issue already covers
|
|
145
179
|
* @returns {Promise<Issue[]>}
|
|
146
180
|
*/
|
|
147
|
-
async function findUnreachableContributionIssues(
|
|
181
|
+
async function findUnreachableContributionIssues(
|
|
182
|
+
packageDir,
|
|
183
|
+
loaded,
|
|
184
|
+
reported = [],
|
|
185
|
+
) {
|
|
186
|
+
// A root that is not a readable folder holds nothing: a fix must never
|
|
187
|
+
// send a file into it.
|
|
188
|
+
const usable = {...loaded};
|
|
189
|
+
for (const kind of ROOT_KINDS) {
|
|
190
|
+
const root = usable[kind];
|
|
191
|
+
if (root != null && rootProblem(root)) usable[kind] = undefined;
|
|
192
|
+
}
|
|
193
|
+
// Every declared root is skipped, readable or not: one that cannot be read
|
|
194
|
+
// has its own issue.
|
|
148
195
|
const roots = /** @type {string[]} */ (
|
|
149
|
-
[
|
|
150
|
-
loaded.components,
|
|
151
|
-
loaded.templates,
|
|
152
|
-
loaded.codemods,
|
|
153
|
-
loaded.docs,
|
|
154
|
-
loaded.themes,
|
|
155
|
-
].filter(Boolean)
|
|
196
|
+
ROOT_KINDS.map(kind => loaded[kind]).filter(Boolean)
|
|
156
197
|
);
|
|
198
|
+
// A folder a symlinked root points at is read through that root.
|
|
199
|
+
const realRoots = roots.map(root => {
|
|
200
|
+
try {
|
|
201
|
+
return fs.realpathSync(root);
|
|
202
|
+
} catch {
|
|
203
|
+
return root;
|
|
204
|
+
}
|
|
205
|
+
});
|
|
157
206
|
/** @type {Issue[]} */
|
|
158
207
|
const issues = [];
|
|
159
|
-
const context = createFixContext(packageDir,
|
|
208
|
+
const context = createFixContext(packageDir, usable);
|
|
160
209
|
let scanned = 0;
|
|
161
210
|
let truncated = false;
|
|
162
211
|
|
|
163
212
|
/** @param {string} dir */
|
|
164
213
|
async function walk(dir) {
|
|
165
214
|
if (roots.some(root => pathIsInside(dir, root))) return;
|
|
215
|
+
if (reported.some(folder => pathIsInside(dir, folder))) return;
|
|
216
|
+
let realDir = dir;
|
|
217
|
+
try {
|
|
218
|
+
realDir = fs.realpathSync(dir);
|
|
219
|
+
} catch {
|
|
220
|
+
// Unreadable: reported below.
|
|
221
|
+
}
|
|
222
|
+
if (realRoots.some(root => pathIsInside(realDir, root))) return;
|
|
166
223
|
let entries;
|
|
167
224
|
try {
|
|
168
225
|
entries = fs
|
|
@@ -229,13 +286,15 @@ async function findUnreachableContributionIssues(packageDir, loaded) {
|
|
|
229
286
|
* Shared core for the local and installed entry points.
|
|
230
287
|
* @param {string} packageDir
|
|
231
288
|
* @param {{name: string, version?: string}} identity
|
|
232
|
-
* @param {{scanUnreachable?: boolean}} [options]
|
|
289
|
+
* @param {{scanUnreachable?: boolean, own?: boolean, cwd?: string}} [options]
|
|
290
|
+
* `own`: the package is the one being authored in the current folder;
|
|
291
|
+
* `cwd`: the folder whose package manager an install command names
|
|
233
292
|
* @returns {Promise<ValidateResult>}
|
|
234
293
|
*/
|
|
235
294
|
async function validateAtPackageDir(
|
|
236
295
|
packageDir,
|
|
237
296
|
identity,
|
|
238
|
-
{scanUnreachable = false} = {},
|
|
297
|
+
{scanUnreachable = false, own = false, cwd = packageDir} = {},
|
|
239
298
|
) {
|
|
240
299
|
/** @type {Issue[]} */
|
|
241
300
|
const issues = [];
|
|
@@ -280,21 +339,53 @@ async function validateAtPackageDir(
|
|
|
280
339
|
let manifest;
|
|
281
340
|
/** @type {string[]} */
|
|
282
341
|
let unknownKeys;
|
|
342
|
+
/** @type {string[]} */
|
|
343
|
+
let declaredKeys;
|
|
283
344
|
/** @type {string | undefined} */
|
|
284
345
|
let agentDocsError;
|
|
346
|
+
/** @type {string | undefined} */
|
|
347
|
+
let cliCommandError;
|
|
285
348
|
try {
|
|
286
|
-
({manifest, unknownKeys, agentDocsError} =
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
349
|
+
({manifest, unknownKeys, declaredKeys, agentDocsError, cliCommandError} =
|
|
350
|
+
await loadManifest(
|
|
351
|
+
manifestFile,
|
|
352
|
+
`Integration manifest (${path.basename(manifestFile)})`,
|
|
353
|
+
));
|
|
290
354
|
} catch (err) {
|
|
291
355
|
issues.push(error('invalid_manifest', /** @type {any} */ (err).message));
|
|
292
356
|
return result;
|
|
293
357
|
}
|
|
294
358
|
|
|
295
|
-
/** @
|
|
296
|
-
const
|
|
359
|
+
/** @type {string[]} absolute roots inside the package */
|
|
360
|
+
const absoluteRoots = [];
|
|
361
|
+
/**
|
|
362
|
+
* @param {string | null | undefined} value
|
|
363
|
+
* @param {string} key the manifest key that declares it
|
|
364
|
+
*/
|
|
365
|
+
const resolveRoot = (value, key, kind = 'contribution root') => {
|
|
297
366
|
if (value == null) return undefined;
|
|
367
|
+
if (path.isAbsolute(value)) {
|
|
368
|
+
// An absolute root names this machine's disk, which no install shares,
|
|
369
|
+
// even when it happens to point inside the package.
|
|
370
|
+
const inside = path.relative(packageDir, value);
|
|
371
|
+
const relative =
|
|
372
|
+
inside === '' || (!inside.startsWith('..') && !path.isAbsolute(inside))
|
|
373
|
+
? `./${inside.split(path.sep).join('/')}`.replace(/\/$/u, '')
|
|
374
|
+
: null;
|
|
375
|
+
// The code an absolute root has always carried, reworded.
|
|
376
|
+
result.issues.push(
|
|
377
|
+
error(
|
|
378
|
+
'root_outside_package',
|
|
379
|
+
`The ${key} root "${value}" is an absolute path, so Astryx reads nothing from it: a root is relative to the package, so it resolves the same wherever the package is installed.` +
|
|
380
|
+
(relative
|
|
381
|
+
? ` Fix: set \`${key}: '${relative === './' ? '.' : relative}'\` in ${path.basename(manifestFile)}.`
|
|
382
|
+
: ` It also points outside the package. Fix: move the files into the package and set \`${key}\` to their folder relative to package.json, such as './${key}'.`),
|
|
383
|
+
),
|
|
384
|
+
);
|
|
385
|
+
// Its files are reported through this issue, not one by one.
|
|
386
|
+
if (relative) absoluteRoots.push(path.resolve(value));
|
|
387
|
+
return undefined;
|
|
388
|
+
}
|
|
298
389
|
try {
|
|
299
390
|
return assertWithin(value, packageDir, {label: kind});
|
|
300
391
|
} catch {
|
|
@@ -311,16 +402,20 @@ async function validateAtPackageDir(
|
|
|
311
402
|
const loaded = {
|
|
312
403
|
name: identity.name,
|
|
313
404
|
version: identity.version,
|
|
314
|
-
components: resolveRoot(manifest.components),
|
|
315
|
-
templates: resolveRoot(manifest.templates),
|
|
316
|
-
codemods: resolveRoot(manifest.codemods),
|
|
317
|
-
docs: resolveRoot(manifest.docs),
|
|
318
|
-
themes: resolveRoot(manifest.themes),
|
|
405
|
+
components: resolveRoot(manifest.components, 'components'),
|
|
406
|
+
templates: resolveRoot(manifest.templates, 'templates'),
|
|
407
|
+
codemods: resolveRoot(manifest.codemods, 'codemods'),
|
|
408
|
+
docs: resolveRoot(manifest.docs, 'docs'),
|
|
409
|
+
themes: resolveRoot(manifest.themes, 'themes'),
|
|
319
410
|
issuesUrl: manifest.issuesUrl,
|
|
320
411
|
agentDocs: manifest.agentDocs,
|
|
412
|
+
cliCommand: manifest.cliCommand,
|
|
413
|
+
__cliCommandError: cliCommandError,
|
|
321
414
|
__agentDocsError: agentDocsError,
|
|
322
415
|
__unknownKeys: unknownKeys,
|
|
416
|
+
__declaredKeys: declaredKeys,
|
|
323
417
|
__spec: identity.name,
|
|
418
|
+
__declaredProviderId: manifest.providerId,
|
|
324
419
|
__packageDir: packageDir,
|
|
325
420
|
__manifestFile: manifestFile,
|
|
326
421
|
};
|
|
@@ -328,12 +423,70 @@ async function validateAtPackageDir(
|
|
|
328
423
|
|
|
329
424
|
// Roots + contribution checks are shared with validateLoadedIntegration so
|
|
330
425
|
// the everyday-command nudge runs the exact same validators.
|
|
331
|
-
issues
|
|
426
|
+
// A malformed `cliCommand` is an info note beside the issues, not an issue:
|
|
427
|
+
// `integration check --strict` fails on any warning, and a new failure code
|
|
428
|
+
// joins only in a minor release (architecture:cli-surface INV35). Doctor's
|
|
429
|
+
// project check still warns about it.
|
|
430
|
+
const contribution = await validateLoadedIntegrationListed(loaded);
|
|
431
|
+
(result.listed ??= []).push(...contribution.listed);
|
|
432
|
+
for (const issue of contribution.issues) {
|
|
433
|
+
if (issue.code === INVALID_CLI_COMMAND) {
|
|
434
|
+
(result.notes ??= []).push({code: issue.code, message: issue.message});
|
|
435
|
+
} else {
|
|
436
|
+
issues.push(issue);
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
// The running CLI outside the package's `@astryxdesign/cli` peer range is a
|
|
440
|
+
// note for the same reason. It is built here, not among the contribution
|
|
441
|
+
// checks, so `integration verify` (which reports their layout findings)
|
|
442
|
+
// does not see it.
|
|
443
|
+
// The version an upgrade starts from is the project's: its own CLI's, or,
|
|
444
|
+
// with none, its Core's, as the project-upgrade notice takes it.
|
|
445
|
+
const choice = runChoice(cwd);
|
|
446
|
+
const from =
|
|
447
|
+
choice.inProject && choice.copy === 'starting' && choice.coreVersion
|
|
448
|
+
? choice.coreVersion
|
|
449
|
+
: undefined;
|
|
450
|
+
const peerProblem = cliPeerVersionProblem(loaded, undefined, cwd, {
|
|
451
|
+
own,
|
|
452
|
+
from,
|
|
453
|
+
});
|
|
454
|
+
if (peerProblem) {
|
|
455
|
+
(result.notes ??= []).push({code: CLI_PEER_VERSION, message: peerProblem});
|
|
456
|
+
}
|
|
332
457
|
if (loaded.themes && !rootProblem(loaded.themes))
|
|
333
458
|
issues.push(...unreadThemeFolderIssues(packageDir, loaded));
|
|
459
|
+
// What the docs say that no reader serves: a prop listed twice, an
|
|
460
|
+
// overlay's text for a prop the doc lacks, an empty or unreachable section,
|
|
461
|
+
// and an overlay of no topic.
|
|
462
|
+
issues.push(
|
|
463
|
+
...(await integrationDocConsistency(
|
|
464
|
+
{
|
|
465
|
+
components:
|
|
466
|
+
loaded.components && !rootProblem(loaded.components)
|
|
467
|
+
? loaded.components
|
|
468
|
+
: undefined,
|
|
469
|
+
docs:
|
|
470
|
+
loaded.docs && !rootProblem(loaded.docs) ? loaded.docs : undefined,
|
|
471
|
+
},
|
|
472
|
+
packageDir,
|
|
473
|
+
)),
|
|
474
|
+
);
|
|
475
|
+
// What the package tells apps to import, read from source: package.json
|
|
476
|
+
// `exports`, docs, examples and template imports.
|
|
477
|
+
const publicImports = await publicImportIssues(packageDir, loaded);
|
|
478
|
+
issues.push(...publicImports.issues);
|
|
479
|
+
// Each finding is a note until the next minor makes it a warning.
|
|
480
|
+
if (publicImports.notes.length > 0)
|
|
481
|
+
(result.notes ??= []).push(...publicImports.notes);
|
|
482
|
+
result.publicImports = publicImports.report;
|
|
334
483
|
if (scanUnreachable) {
|
|
335
484
|
issues.push(
|
|
336
|
-
...(await findUnreachableContributionIssues(
|
|
485
|
+
...(await findUnreachableContributionIssues(
|
|
486
|
+
packageDir,
|
|
487
|
+
loaded,
|
|
488
|
+
absoluteRoots,
|
|
489
|
+
)),
|
|
337
490
|
);
|
|
338
491
|
}
|
|
339
492
|
|
|
@@ -360,7 +513,7 @@ export async function validateLocalIntegration(cwd = process.cwd()) {
|
|
|
360
513
|
return {found: false, issues: []};
|
|
361
514
|
}
|
|
362
515
|
|
|
363
|
-
/** @type {{name?: string, version?: string}} */
|
|
516
|
+
/** @type {{name?: string, version?: string, private?: boolean}} */
|
|
364
517
|
let pkg;
|
|
365
518
|
try {
|
|
366
519
|
pkg = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf-8'));
|
|
@@ -379,31 +532,121 @@ export async function validateLocalIntegration(cwd = process.cwd()) {
|
|
|
379
532
|
};
|
|
380
533
|
}
|
|
381
534
|
|
|
382
|
-
|
|
535
|
+
// npm publishes nothing without a name and a version, and the name is the
|
|
536
|
+
// provider ID every reader keys the package's contributions on.
|
|
537
|
+
// A package without one is still checked, under a placeholder name.
|
|
538
|
+
const fields = packageJsonFieldIssues(pkg, pkgJsonPath);
|
|
539
|
+
const name =
|
|
540
|
+
typeof pkg.name === 'string' && pkg.name !== ''
|
|
541
|
+
? pkg.name
|
|
542
|
+
: '(local package)';
|
|
543
|
+
const result = await validateAtPackageDir(
|
|
383
544
|
packageDir,
|
|
384
|
-
{
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
545
|
+
{name, version: pkg.version},
|
|
546
|
+
{scanUnreachable: true, own: true},
|
|
547
|
+
);
|
|
548
|
+
(result.listed ??= []).unshift(
|
|
549
|
+
...fields,
|
|
550
|
+
// Only a manifest that loaded says whether it declares a providerId; one
|
|
551
|
+
// that did not is reported as invalid_manifest.
|
|
552
|
+
...(result.integration
|
|
553
|
+
? providerIdIssues(
|
|
554
|
+
pkg.name,
|
|
555
|
+
result.integration.__declaredProviderId,
|
|
556
|
+
result.integration.__manifestFile,
|
|
557
|
+
)
|
|
558
|
+
: []),
|
|
389
559
|
);
|
|
560
|
+
return result;
|
|
390
561
|
}
|
|
391
562
|
|
|
392
563
|
/**
|
|
393
|
-
*
|
|
564
|
+
* Whether `name` is a bare npm package name, the form a provider ID takes.
|
|
565
|
+
* @param {string} name
|
|
566
|
+
*/
|
|
567
|
+
function isPackageName(name) {
|
|
568
|
+
try {
|
|
569
|
+
normalizeProviderId(name);
|
|
570
|
+
return true;
|
|
571
|
+
} catch {
|
|
572
|
+
return false;
|
|
573
|
+
}
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
/**
|
|
577
|
+
* A warning when no provider ID can be derived for the package: its
|
|
578
|
+
* package.json `name` is not a bare package name and its manifest declares
|
|
579
|
+
* no `providerId` that is one. Readers key the package's contributions on
|
|
580
|
+
* that ID; a missing name is its own warning.
|
|
581
|
+
* @param {unknown} name package.json `name`
|
|
582
|
+
* @param {unknown} declared the manifest's `providerId`
|
|
583
|
+
* @param {string} manifestFile
|
|
584
|
+
* @returns {Issue[]}
|
|
585
|
+
*/
|
|
586
|
+
function providerIdIssues(name, declared, manifestFile) {
|
|
587
|
+
if (typeof name !== 'string' || name === '') return [];
|
|
588
|
+
if (isPackageName(name)) return [];
|
|
589
|
+
if (typeof declared === 'string' && isPackageName(declared)) return [];
|
|
590
|
+
const manifest = path.basename(manifestFile);
|
|
591
|
+
return [
|
|
592
|
+
listed(
|
|
593
|
+
'no_provider_id',
|
|
594
|
+
`No provider ID can be derived for this package: package.json "name" ${JSON.stringify(name)} is not a bare package name (an optional @scope/ and a name, each starting with a lowercase letter or digit and holding only lowercase letters, digits, "-", ".", "_" and "~"), and ${manifest} declares no providerId that is one. Astryx files the package's components, templates and docs under that ID, so links to them and selecting the package cannot work. Fix: rename the package, such as "@your-scope/your-package", or set \`providerId: '@your-scope/your-package'\` in ${manifest}.`,
|
|
595
|
+
),
|
|
596
|
+
];
|
|
597
|
+
}
|
|
598
|
+
|
|
599
|
+
/**
|
|
600
|
+
* A warning for each field npm needs that package.json lacks.
|
|
601
|
+
* @param {{name?: unknown, version?: unknown, private?: unknown}} pkg
|
|
602
|
+
* @param {string} pkgJsonPath
|
|
603
|
+
* @returns {Issue[]}
|
|
604
|
+
*/
|
|
605
|
+
function packageJsonFieldIssues(pkg, pkgJsonPath) {
|
|
606
|
+
/** @type {Issue[]} */
|
|
607
|
+
const issues = [];
|
|
608
|
+
const shown = path.basename(pkgJsonPath);
|
|
609
|
+
// Listed, so validate and `--strict` keep the result they had for these
|
|
610
|
+
// packages; `integration verify`, which packs, reports them as errors.
|
|
611
|
+
if (typeof pkg.name !== 'string' || pkg.name === '') {
|
|
612
|
+
issues.push(
|
|
613
|
+
listed(
|
|
614
|
+
'invalid_package_json',
|
|
615
|
+
`${shown} has no "name", so npm cannot pack or publish the package, and a project that installs it has no name to select it by. Fix: add "name": "@your-scope/your-package" to ${shown}.`,
|
|
616
|
+
),
|
|
617
|
+
);
|
|
618
|
+
}
|
|
619
|
+
// A private package is never published, so it needs no version.
|
|
620
|
+
if (
|
|
621
|
+
pkg.private !== true &&
|
|
622
|
+
(typeof pkg.version !== 'string' || pkg.version === '')
|
|
623
|
+
) {
|
|
624
|
+
issues.push(
|
|
625
|
+
listed(
|
|
626
|
+
'invalid_package_json',
|
|
627
|
+
`${shown} has no "version", so npm cannot pack or publish the package. Fix: add "version": "0.1.0" to ${shown}.`,
|
|
628
|
+
),
|
|
629
|
+
);
|
|
630
|
+
}
|
|
631
|
+
return issues;
|
|
632
|
+
}
|
|
633
|
+
|
|
634
|
+
/**
|
|
635
|
+
* Validate an INSTALLED integration package: the nearest `node_modules/<spec>`
|
|
636
|
+
* at or above `cwd`, resolved the way the project loads it.
|
|
394
637
|
* @param {string} spec package name
|
|
395
638
|
* @param {string} [cwd]
|
|
396
639
|
* @returns {Promise<ValidateResult>}
|
|
397
640
|
*/
|
|
398
641
|
export async function validateInstalledIntegration(spec, cwd = process.cwd()) {
|
|
399
|
-
//
|
|
642
|
+
// The resolver throws (path-safety guard) on a spec with path segments,
|
|
400
643
|
// `..`, or an absolute path. Every other malformed input to this command
|
|
401
644
|
// degrades into a diagnostic — so catch it here and return an issue instead
|
|
402
645
|
// of letting the throw escape to a raw stack (human) / generic ERR_UNKNOWN
|
|
403
646
|
// (--json).
|
|
404
647
|
let packageDir;
|
|
405
648
|
try {
|
|
406
|
-
packageDir =
|
|
649
|
+
packageDir = resolveInstalledIntegrationDir(spec, cwd);
|
|
407
650
|
} catch (err) {
|
|
408
651
|
return {
|
|
409
652
|
found: true,
|
|
@@ -435,10 +678,29 @@ export async function validateInstalledIntegration(spec, cwd = process.cwd()) {
|
|
|
435
678
|
};
|
|
436
679
|
}
|
|
437
680
|
|
|
438
|
-
return validateAtPackageDir(
|
|
439
|
-
|
|
440
|
-
version: pkg.version,
|
|
441
|
-
|
|
681
|
+
return validateAtPackageDir(
|
|
682
|
+
packageDir,
|
|
683
|
+
{name: pkg.name ?? spec, version: pkg.version},
|
|
684
|
+
{cwd},
|
|
685
|
+
);
|
|
686
|
+
}
|
|
687
|
+
|
|
688
|
+
/**
|
|
689
|
+
* The runner-command notes for a package's topics: each Astryx command a topic
|
|
690
|
+
* writes with a package runner, where the doc file is, and the bare command to
|
|
691
|
+
* write.
|
|
692
|
+
* @param {any} integration a loaded integration
|
|
693
|
+
* @returns {Promise<Array<{code: string, message: string}>>}
|
|
694
|
+
*/
|
|
695
|
+
async function runnerCommandNotes(integration) {
|
|
696
|
+
const packageDir = integration.__packageDir;
|
|
697
|
+
return (await integrationRunnerCommands(integration)).map(each => ({
|
|
698
|
+
code: 'runner_command',
|
|
699
|
+
message:
|
|
700
|
+
typeof packageDir === 'string'
|
|
701
|
+
? `${path.relative(packageDir, each.file).split(path.sep).join('/')}: ${each.message}`
|
|
702
|
+
: each.message,
|
|
703
|
+
}));
|
|
442
704
|
}
|
|
443
705
|
|
|
444
706
|
/**
|
|
@@ -461,6 +723,41 @@ export async function validateIntegration(pkg, options = {}) {
|
|
|
461
723
|
const result = pkg
|
|
462
724
|
? await validateInstalledIntegration(pkg, cwd)
|
|
463
725
|
: await validateLocalIntegration(cwd);
|
|
726
|
+
// Each doc the package ships, against the published authoring type for its
|
|
727
|
+
// kind, read with the project's own compiler. Findings are warnings only.
|
|
728
|
+
const integration = result.found ? result.integration : undefined;
|
|
729
|
+
const docTypes = integration
|
|
730
|
+
? await integrationDocTypes(integration, cwd)
|
|
731
|
+
: undefined;
|
|
732
|
+
// The component names docs and blocks give: those that cannot be judged
|
|
733
|
+
// are listed in their reports, and those judged wrong are notes.
|
|
734
|
+
const names = integration
|
|
735
|
+
? [
|
|
736
|
+
await componentDocNamesCheck(integration),
|
|
737
|
+
await blockComponentsCheck(integration),
|
|
738
|
+
]
|
|
739
|
+
: undefined;
|
|
740
|
+
const docNames = names?.[0].report;
|
|
741
|
+
const blockComponents = names?.[1].report;
|
|
742
|
+
// Notes fail nothing: a malformed `cliCommand`, and the findings added
|
|
743
|
+
// after the last minor release, each with its fix in the message, which
|
|
744
|
+
// may not fail `--strict` until the next (architecture:cli-surface INV35):
|
|
745
|
+
// the layout findings and the component names judged wrong.
|
|
746
|
+
const notes = result.found
|
|
747
|
+
? [
|
|
748
|
+
...(result.notes ?? []),
|
|
749
|
+
...(result.listed ?? []).map(issue => ({
|
|
750
|
+
code: issue.code,
|
|
751
|
+
message: issue.message,
|
|
752
|
+
})),
|
|
753
|
+
...(names ?? []).flatMap(each => each.notes),
|
|
754
|
+
]
|
|
755
|
+
: [];
|
|
756
|
+
// Each Astryx command a topic writes with a package runner, as a
|
|
757
|
+
// `runner_command` note with its fix, the same way.
|
|
758
|
+
if (integration?.docs) {
|
|
759
|
+
notes.push(...(await runnerCommandNotes(integration)));
|
|
760
|
+
}
|
|
464
761
|
return {
|
|
465
762
|
type: 'integration.validate',
|
|
466
763
|
data: {
|
|
@@ -469,9 +766,25 @@ export async function validateIntegration(pkg, options = {}) {
|
|
|
469
766
|
validated: result.found,
|
|
470
767
|
name: result.found ? (result.name ?? null) : null,
|
|
471
768
|
version: result.found ? (result.version ?? null) : null,
|
|
472
|
-
issues:
|
|
473
|
-
|
|
474
|
-
|
|
769
|
+
issues:
|
|
770
|
+
result.reason === 'no_package_json'
|
|
771
|
+
? [
|
|
772
|
+
{
|
|
773
|
+
code: 'no_package',
|
|
774
|
+
severity: 'error',
|
|
775
|
+
message:
|
|
776
|
+
'No package.json found. Run this command inside a package directory.',
|
|
777
|
+
},
|
|
778
|
+
]
|
|
779
|
+
: result.issues,
|
|
780
|
+
...(notes.length > 0 ? {notes} : {}),
|
|
781
|
+
...(docTypes ? {docTypes} : {}),
|
|
782
|
+
...(docNames ? {docNames} : {}),
|
|
783
|
+
...(blockComponents ? {blockComponents} : {}),
|
|
784
|
+
// What the public-import check could not judge: listed, never failed on.
|
|
785
|
+
...(result.found && result.publicImports
|
|
786
|
+
? {publicImports: result.publicImports}
|
|
787
|
+
: {}),
|
|
475
788
|
},
|
|
476
789
|
};
|
|
477
790
|
}
|