@astryxdesign/cli 0.6.3-canary.db4e378 → 0.6.3-canary.db52d98
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/README.md +38 -15
- package/api/blog/blog.doc.mjs +1 -0
- package/api/build/_adapter.d.mts +50 -0
- package/api/build/_adapter.mjs +60 -0
- package/api/build/build.doc.mjs +14 -7
- package/api/build/build.test.mjs +184 -6
- package/api/build/build.type.d.mts +57 -2
- package/api/build/build.type.mjs +30 -7
- package/api/build/help/help.d.mts +4 -0
- package/api/build/help/help.mjs +24 -11
- package/api/build/kit/kit.d.mts +4 -1
- package/api/build/kit/kit.mjs +165 -49
- package/api/build/kit/rank.d.mts +44 -0
- package/api/build/kit/rank.mjs +432 -0
- package/api/build/kit/rank.test.mjs +196 -0
- package/api/component/_adapter.d.mts +6 -12
- package/api/component/_adapter.mjs +20 -10
- package/api/component/component.doc.mjs +1 -0
- package/api/component/component.mjs +60 -12
- package/api/component/list/list.mjs +3 -2
- package/api/discover/discover.doc.mjs +1 -0
- package/api/docs/_adapter.d.mts +252 -34
- package/api/docs/_adapter.mjs +923 -132
- package/api/docs/detail/detail.mjs +11 -3
- package/api/docs/detail/section/section.mjs +24 -13
- package/api/docs/detail/section/section.test.mjs +15 -6
- package/api/docs/docs.d.mts +5 -3
- package/api/docs/docs.doc.mjs +39 -17
- package/api/docs/docs.mjs +44 -8
- package/api/docs/docs.test.mjs +158 -4
- package/api/docs/docs.type.d.mts +181 -2
- package/api/docs/docs.type.mjs +117 -3
- package/api/docs/index/index.mjs +11 -3
- package/api/docs/index/index.test.mjs +1 -1
- package/api/docs/integration-tree.test.mjs +555 -0
- package/api/docs/integrationDocs.test.mjs +14 -14
- package/api/docs/list/list.mjs +28 -12
- package/api/docs/node/node.d.mts +43 -0
- package/api/docs/node/node.mjs +192 -0
- package/api/docs/reference-blocks.test.mjs +406 -0
- package/api/doctor/doctor.d.mts +54 -4
- package/api/doctor/doctor.doc.mjs +1 -0
- package/api/doctor/doctor.mjs +331 -16
- package/api/doctor/doctor.test.mjs +420 -7
- package/api/gap-report/gap-report.doc.mjs +1 -0
- package/api/hook/_adapter.mjs +19 -5
- package/api/hook/hook.doc.mjs +1 -0
- package/api/hook/list/list.d.mts +1 -1
- package/api/hook/list/list.mjs +69 -17
- package/api/index.d.mts +1 -1
- package/api/index.mjs +1 -0
- package/api/init/init.doc.mjs +2 -1
- package/api/integration/add-contribution.d.mts +2 -1
- package/api/integration/add-contribution.mjs +114 -12
- package/api/integration/add-contribution.test.mjs +174 -3
- package/api/integration/add-theme.mjs +34 -64
- package/api/integration/add-theme.test.mjs +105 -21
- package/api/integration/authoring-checks.mjs +138 -28
- package/api/integration/authoring-checks.test.mjs +179 -7
- package/api/integration/authoring-checks.type.mjs +6 -1
- package/api/integration/integration-authoring.type.d.mts +2 -0
- package/api/integration/integration-authoring.type.mjs +2 -0
- package/api/integration/integration-block-exports.test.mjs +10 -6
- package/api/integration/integrationAdd.doc.mjs +7 -0
- package/api/integration/integrationAddAgentDoc.doc.mjs +1 -0
- package/api/integration/integrationAddCodemod.doc.mjs +1 -0
- package/api/integration/integrationAddComponent.doc.mjs +1 -0
- package/api/integration/integrationAddDoc.doc.mjs +8 -1
- package/api/integration/integrationAddTemplate.doc.mjs +1 -0
- package/api/integration/integrationAddTheme.doc.mjs +6 -5
- package/api/integration/integrationComponentConflicts.doc.mjs +1 -0
- package/api/integration/integrationDocConflicts.doc.mjs +2 -1
- package/api/integration/integrationPackCheck.doc.mjs +2 -1
- package/api/integration/integrationTemplateConflicts.doc.d.mts +3 -0
- package/api/integration/integrationTemplateConflicts.doc.mjs +4 -0
- package/api/integration/pack-check.mjs +34 -0
- package/api/integration/pack-check.test.mjs +138 -47
- package/api/integration/pack-check.type.d.mts +26 -2
- package/api/integration/pack-check.type.mjs +14 -1
- package/api/integration/summarizeIssues.doc.mjs +1 -0
- package/api/integration/template-conflict-compatibility.test.mjs +73 -0
- package/api/integration/validate-integration-fixes.test.mjs +1389 -0
- package/api/integration/validate-integration.mjs +50 -102
- package/api/integration/validate-integration.test.mjs +88 -26
- package/api/integration/validate-unread-theme-folders.test.mjs +110 -0
- package/api/integration/validateIntegration.doc.mjs +2 -1
- package/api/json/assertResponse.doc.mjs +1 -0
- package/api/json/index.ts +2 -0
- package/api/json/isError.doc.mjs +1 -0
- package/api/json/parseResponse.doc.mjs +1 -0
- package/api/layout/_adapter.mjs +20 -5
- package/api/layout/layoutCheck.doc.mjs +1 -0
- package/api/layout/layoutExpand.doc.mjs +1 -0
- package/api/layout/layoutGrammar.doc.mjs +1 -0
- package/api/search/search.d.mts +59 -1
- package/api/search/search.doc.mjs +5 -3
- package/api/search/search.mjs +458 -77
- package/api/search/search.test.mjs +91 -2
- package/api/search/search.type.d.mts +13 -1
- package/api/search/search.type.mjs +4 -1
- package/api/swizzle/swizzle.doc.mjs +1 -0
- package/api/template/list/list.mjs +1 -0
- package/api/template/table-floating-bulk-actions.test.mjs +66 -0
- package/api/template/template-integration.test.mjs +1072 -3
- package/api/template/template-suffix.test.mjs +41 -21
- package/api/template/template.doc.mjs +28 -7
- package/api/template/template.mjs +45 -8
- package/api/template/template.type.d.mts +6 -8
- package/api/template/template.type.mjs +3 -2
- package/api/theme/_adapter.d.mts +2 -3
- package/api/theme/_adapter.mjs +4 -5
- package/api/theme/add/add.binary.test.mjs +10 -17
- package/api/theme/add/add.test.mjs +14 -1
- package/api/theme/generateTonalPalette.doc.mjs +1 -0
- package/api/theme/integration-themes.test.mjs +39 -28
- package/api/theme/list/list.test.mjs +19 -20
- package/api/theme/listThemes.doc.mjs +6 -5
- package/api/theme/template/template.test.mjs +5 -0
- package/api/theme/themeAdd.doc.mjs +4 -3
- package/api/theme/themeBuild.doc.mjs +1 -0
- package/api/theme/themeList.doc.mjs +6 -3
- package/api/theme/themeListAvailable.doc.mjs +5 -3
- package/api/theme/themePaletteGenerate.doc.mjs +1 -0
- package/api/theme/themeTargets.doc.mjs +1 -0
- package/api/theme/themeTemplate.doc.mjs +2 -1
- package/api/upgrade/_adapter.d.mts +32 -5
- package/api/upgrade/_adapter.mjs +97 -69
- package/api/upgrade/provider-agreement.test.mjs +152 -0
- package/api/upgrade/run/run.mjs +356 -59
- package/api/upgrade/upgrade.doc.mjs +6 -1
- package/api/upgrade/upgrade.type.d.mts +34 -0
- package/api/upgrade/upgrade.type.mjs +15 -0
- package/assets/codemods/__tests__/runner.test.mjs +330 -8
- package/assets/codemods/integration-discovery.mjs +8 -2
- package/assets/codemods/integration-discovery.test.mjs +15 -0
- package/assets/codemods/integration-runner.mjs +56 -4
- package/assets/codemods/integration-runner.protection.test.mjs +153 -0
- package/assets/codemods/run-codemod.mjs +177 -34
- package/assets/codemods/runner.mjs +350 -102
- package/assets/codemods/transforms/next/__tests__/migrate-native-picker-to-presentation.test.mjs +63 -0
- package/assets/codemods/transforms/next/__tests__/migrate-theme-catalog-to-descriptors.test.mjs +220 -0
- package/assets/codemods/transforms/next/index.mjs +19 -1
- package/assets/codemods/transforms/next/migrate-native-picker-to-presentation.mjs +148 -0
- package/assets/codemods/transforms/next/migrate-theme-catalog-to-descriptors.mjs +141 -0
- package/assets/docs/getting-started.doc.mjs +2 -2
- package/assets/docs/layout.doc.dense.mjs +2 -2
- package/assets/docs/layout.doc.mjs +1 -1
- package/assets/docs/principles.doc.mjs +6 -6
- package/assets/docs/styling-libraries.doc.mjs +3 -3
- package/assets/docs/styling.doc.mjs +4 -4
- package/assets/docs/theme.doc.mjs +5 -5
- package/assets/docs/tokens.doc.mjs +1 -1
- package/assets/docs/tree/api.doc.mjs +30 -0
- package/assets/docs/tree/cli.doc.mjs +23 -0
- package/assets/docs/tree/commands.doc.mjs +25 -0
- package/assets/docs/{cli-integrations.doc.mjs → tree/integrations.doc.mjs} +66 -38
- package/assets/docs/tree/integrations.test.mjs +62 -0
- package/assets/docs/tree/writing-docs.doc.mjs +286 -0
- package/assets/docs/working-with-ai.doc.mjs +3 -3
- package/assets/templates/blocks/components/CheckboxList/CheckboxListSelectAllPattern.doc.mjs +1 -1
- package/assets/templates/blocks/components/CheckboxList/CheckboxListSelectAllPattern.tsx +1 -3
- package/assets/templates/blocks/components/DateInput/DateInputDateRange.tsx +1 -1
- package/assets/templates/blocks/components/Item/ItemDocumentTabs.doc.mjs +14 -0
- package/assets/templates/blocks/components/Item/ItemDocumentTabs.tsx +100 -0
- package/assets/templates/blocks/components/Table/TableBulkActionsTable.doc.mjs +14 -0
- package/assets/templates/blocks/components/Table/TableBulkActionsTable.tsx +71 -0
- package/assets/templates/blocks/components/Table/TableFloatingBulkActionsTable.doc.mjs +19 -0
- package/assets/templates/blocks/components/Table/TableFloatingBulkActionsTable.tsx +139 -0
- package/assets/templates/blocks/components/TimeInput/TimeInputConstrained.tsx +1 -0
- package/assets/templates/themes/butter/butterTheme.doc.mjs +11 -0
- package/assets/templates/themes/chocolate/chocolateTheme.doc.mjs +11 -0
- package/assets/templates/themes/gothic/gothicTheme.doc.mjs +11 -0
- package/assets/templates/themes/matcha/matchaTheme.doc.mjs +11 -0
- package/assets/templates/themes/neutral/neutralTheme.doc.mjs +11 -0
- package/assets/templates/themes/stone/stoneTheme.doc.mjs +11 -0
- package/assets/templates/themes/y2k/y2kTheme.doc.mjs +11 -0
- package/authoring/codemod/codemod.doc.mjs +1 -1
- package/authoring/codemod/type.ts +12 -0
- package/authoring/config/config.doc.mjs +1 -1
- package/authoring/debug/debug.doc.d.mts +11 -0
- package/authoring/debug/debug.doc.mjs +182 -0
- package/authoring/debug/parse.d.mts +3 -3
- package/authoring/doctypes/_schema.d.mts +119 -117
- package/authoring/doctypes/_schema.mjs +54 -3
- package/authoring/doctypes/base/graph-fields.doc.mjs +8 -6
- package/authoring/doctypes/base/type.ts +6 -5
- package/authoring/doctypes/command/command.doc.mjs +1 -1
- package/authoring/doctypes/command/type.ts +2 -2
- package/authoring/doctypes/component/type.ts +2 -2
- package/authoring/doctypes/doctypes-new.test.mjs +48 -6
- package/authoring/doctypes/enum/enum.doc.mjs +1 -1
- package/authoring/doctypes/enum/type.ts +1 -1
- package/authoring/doctypes/function/function.doc.mjs +3 -2
- package/authoring/doctypes/function/type.ts +3 -2
- package/authoring/doctypes/hook/type.ts +2 -2
- package/authoring/doctypes/load-contract.test.mjs +28 -2
- package/authoring/doctypes/namespace/namespace.doc.mjs +6 -10
- package/authoring/doctypes/namespace/parse.test.mjs +23 -25
- package/authoring/doctypes/namespace/type.ts +5 -2
- package/authoring/doctypes/parse.d.mts +4 -2
- package/authoring/doctypes/parse.mjs +10 -5
- package/authoring/doctypes/reference/reference.doc.mjs +35 -6
- package/authoring/doctypes/reference/type.ts +30 -13
- package/authoring/doctypes/schema/schema.doc.mjs +1 -1
- package/authoring/doctypes/schema/type.ts +1 -2
- package/authoring/doctypes/template/parse.d.mts +2 -0
- package/authoring/doctypes/template/parse.mjs +4 -0
- package/authoring/doctypes/template/parse.test.mjs +18 -0
- package/authoring/doctypes/template/template.doc.mjs +9 -3
- package/authoring/doctypes/template/type.ts +8 -0
- package/authoring/doctypes/theme/parse.d.mts +35 -0
- package/authoring/doctypes/theme/parse.mjs +76 -0
- package/authoring/doctypes/theme/theme.doc.d.mts +9 -0
- package/authoring/doctypes/theme/theme.doc.mjs +79 -0
- package/authoring/doctypes/theme/type.ts +42 -0
- package/authoring/doctypes/types.ts +2 -1
- package/authoring/gap-report/gap-report.doc.d.mts +12 -0
- package/authoring/gap-report/gap-report.doc.mjs +183 -0
- package/authoring/identity/identity.doc.mjs +2 -2
- package/authoring/index.d.mts +1 -0
- package/authoring/index.d.ts +7 -4
- package/authoring/index.mjs +2 -1
- package/authoring/integration/integration.doc.mjs +2 -2
- package/authoring/integration/type.ts +4 -10
- package/clients/cli/__tests__/cliManifest.test.ts +27 -29
- package/clients/cli/commands/blog.doc.mjs +1 -1
- package/clients/cli/commands/build-theme.adaptations.test.mjs +100 -1
- package/clients/cli/commands/build-theme.mjs +11 -45
- package/clients/cli/commands/build.doc.mjs +12 -7
- package/clients/cli/commands/build.mjs +105 -67
- package/clients/cli/commands/build.text-fields.test.mjs +41 -0
- package/clients/cli/commands/component/index.mjs +1 -1
- package/clients/cli/commands/component-ownership.test.mjs +3 -3
- package/clients/cli/commands/component.doc.mjs +1 -1
- package/clients/cli/commands/discover.broken-integration.test.mjs +7 -8
- package/clients/cli/commands/discover.doc.mjs +1 -1
- package/clients/cli/commands/discover.mjs +1 -1
- package/clients/cli/commands/docs.doc.mjs +21 -9
- package/clients/cli/commands/docs.mjs +184 -70
- package/clients/cli/commands/docs.test.mjs +120 -16
- package/clients/cli/commands/doctor-integration-components.doc.mjs +1 -1
- package/clients/cli/commands/doctor-integration-docs.doc.mjs +3 -3
- package/clients/cli/commands/doctor-integration-templates.doc.mjs +15 -8
- package/clients/cli/commands/doctor-integration-validate.doc.mjs +1 -1
- package/clients/cli/commands/doctor-integration.doc.mjs +1 -1
- package/clients/cli/commands/doctor-integration.test.mjs +90 -8
- package/clients/cli/commands/doctor.doc.mjs +1 -1
- package/clients/cli/commands/doctor.mjs +53 -16
- package/clients/cli/commands/gap-report.doc.mjs +1 -1
- package/clients/cli/commands/hook.doc.mjs +1 -1
- package/clients/cli/commands/init.doc.mjs +1 -1
- package/clients/cli/commands/integration-add.controls.test.mjs +1 -1
- package/clients/cli/commands/integration-add.doc.mjs +11 -1
- package/clients/cli/commands/integration-pack.doc.mjs +1 -1
- package/clients/cli/commands/integration-real-world.test.mjs +3 -9
- package/clients/cli/commands/integration.doc.mjs +1 -1
- package/clients/cli/commands/integration.mjs +1 -0
- package/clients/cli/commands/layout-check.doc.mjs +1 -1
- package/clients/cli/commands/layout-expand.doc.mjs +1 -1
- package/clients/cli/commands/layout-grammar.doc.mjs +1 -1
- package/clients/cli/commands/layout.doc.mjs +1 -1
- package/clients/cli/commands/manifest.doc.mjs +1 -1
- package/clients/cli/commands/search.doc.mjs +1 -1
- package/clients/cli/commands/search.mjs +11 -2
- package/clients/cli/commands/setup-nudge.test.mjs +6 -0
- package/clients/cli/commands/swizzle.doc.mjs +1 -1
- package/clients/cli/commands/template.doc.mjs +24 -7
- package/clients/cli/commands/template.mjs +4 -91
- package/clients/cli/commands/text-json-parity.test.mjs +719 -0
- package/clients/cli/commands/theme-add.doc.mjs +2 -2
- package/clients/cli/commands/theme-build.doc.mjs +1 -1
- package/clients/cli/commands/theme-list.doc.mjs +2 -2
- package/clients/cli/commands/theme-palette-generate.doc.mjs +3 -3
- package/clients/cli/commands/theme-palette.doc.mjs +1 -1
- package/clients/cli/commands/theme-targets.behavior.test.mjs +4 -3
- package/clients/cli/commands/theme-targets.doc.mjs +1 -1
- package/clients/cli/commands/theme-template.doc.mjs +1 -1
- package/clients/cli/commands/theme.doc.mjs +1 -1
- package/clients/cli/commands/upgrade.doc.mjs +3 -2
- package/clients/cli/commands/upgrade.file-protection.test.mjs +228 -0
- package/clients/cli/commands/upgrade.mjs +29 -7
- package/clients/cli/formatters/index.mjs +2 -0
- package/clients/cli/formatters/index.test.mjs +6 -0
- package/clients/cli/index.mjs +8 -0
- package/clients/cli/lib/hook-format.mjs +14 -5
- package/clients/cli/lib/manifest.mjs +9 -2
- package/foundation/agent-docs/agent-docs.d.mts +3 -2
- package/foundation/agent-docs/agent-docs.mjs +13 -9
- package/foundation/agent-docs/agent-docs.test.mjs +19 -1
- package/foundation/config/project-themes.test.mjs +11 -19
- package/foundation/config/project.d.mts +20 -11
- package/foundation/config/project.mjs +123 -80
- package/foundation/config/project.test.mjs +144 -21
- package/foundation/discovery/authoring-self-docs.d.mts +18 -0
- package/foundation/discovery/authoring-self-docs.mjs +37 -15
- package/foundation/discovery/authoring-self-docs.test.mjs +25 -9
- package/foundation/discovery/authoring-surface.d.mts +74 -0
- package/foundation/discovery/authoring-surface.mjs +525 -0
- package/foundation/discovery/authoring-surface.test.mjs +392 -0
- package/foundation/discovery/cli-self-docs.d.mts +119 -0
- package/foundation/discovery/cli-self-docs.mjs +490 -0
- package/foundation/discovery/cli-self-docs.test.mjs +375 -0
- package/foundation/discovery/component-discovery.d.mts +38 -0
- package/foundation/discovery/component-discovery.mjs +48 -0
- package/foundation/discovery/component-loader.d.mts +35 -38
- package/foundation/discovery/component-loader.mjs +53 -222
- package/foundation/discovery/docs-discovery.d.mts +112 -11
- package/foundation/discovery/docs-discovery.mjs +231 -36
- package/foundation/discovery/docs-discovery.test.mjs +111 -32
- package/foundation/discovery/docs-output-budget.d.mts +2 -2
- package/foundation/discovery/docs-output-budget.mjs +1 -1
- package/foundation/discovery/docs-section-key.d.mts +28 -10
- package/foundation/discovery/docs-section-key.mjs +134 -33
- package/foundation/discovery/docs-section-key.test.mjs +41 -19
- package/foundation/discovery/template-adapter.d.mts +99 -6
- package/foundation/discovery/template-adapter.mjs +480 -57
- package/foundation/discovery/template-adapter.test.mjs +57 -0
- package/foundation/discovery/template-conflict-release.d.mts +13 -0
- package/foundation/discovery/template-conflict-release.mjs +40 -0
- package/foundation/discovery/template-conflict-release.test.mjs +40 -0
- package/foundation/discovery/theme-discovery.d.mts +67 -7
- package/foundation/discovery/theme-discovery.mjs +916 -186
- package/foundation/discovery/theme-discovery.test.mjs +613 -219
- package/foundation/doc-compiler/bundle.d.mts +47 -0
- package/foundation/doc-compiler/bundle.mjs +278 -0
- package/foundation/doc-compiler/bundle.test.mjs +266 -0
- package/foundation/doc-compiler/compile.d.mts +220 -39
- package/foundation/doc-compiler/compile.mjs +311 -15
- package/foundation/doc-compiler/diagnostics.d.mts +126 -0
- package/foundation/doc-compiler/diagnostics.mjs +305 -0
- package/foundation/doc-compiler/doc-compiler.test.mjs +28 -1
- package/foundation/doc-compiler/doc-loads.test.mjs +1642 -0
- package/foundation/doc-compiler/import.d.mts +24 -0
- package/foundation/doc-compiler/import.mjs +59 -0
- package/foundation/doc-compiler/inputs.d.mts +102 -0
- package/foundation/doc-compiler/inputs.mjs +291 -0
- package/foundation/doc-compiler/inputs.test.mjs +299 -0
- package/foundation/doc-compiler/ir.d.mts +13 -0
- package/foundation/doc-compiler/ir.mjs +196 -12
- package/foundation/doc-compiler/lenses.d.mts +8 -5
- package/foundation/doc-compiler/lenses.mjs +50 -4
- package/foundation/doc-compiler/links.d.mts +162 -0
- package/foundation/doc-compiler/links.mjs +294 -0
- package/foundation/doc-compiler/links.test.mjs +192 -0
- package/foundation/doc-compiler/lower-doc.test.mjs +495 -0
- package/foundation/doc-compiler/overlays.d.mts +37 -0
- package/foundation/doc-compiler/overlays.mjs +206 -0
- package/foundation/doc-compiler/parse-readable.d.mts +9 -0
- package/foundation/doc-compiler/parse-readable.mjs +29 -0
- package/foundation/doc-compiler/read.d.mts +127 -0
- package/foundation/doc-compiler/read.mjs +325 -0
- package/foundation/doc-compiler/read.test.mjs +313 -0
- package/foundation/doc-compiler/source.d.mts +33 -0
- package/foundation/doc-compiler/source.mjs +128 -0
- package/foundation/doc-compiler/tree.d.mts +288 -0
- package/foundation/doc-compiler/tree.mjs +876 -0
- package/foundation/doc-compiler/tree.test.mjs +598 -0
- package/foundation/fs/file-protection.d.mts +33 -0
- package/foundation/fs/file-protection.mjs +825 -0
- package/foundation/fs/file-protection.test.mjs +250 -0
- package/foundation/integrations/autolink.d.mts +58 -1
- package/foundation/integrations/autolink.mjs +143 -57
- package/foundation/integrations/autolink.test.mjs +1 -1
- package/foundation/integrations/cli-requirement.d.mts +45 -0
- package/foundation/integrations/cli-requirement.mjs +154 -0
- package/foundation/integrations/cli-requirement.test.mjs +84 -0
- package/foundation/integrations/contribution-fixes.d.mts +145 -0
- package/foundation/integrations/contribution-fixes.mjs +1284 -0
- package/foundation/integrations/contribution-inventory.d.mts +3 -2
- package/foundation/integrations/contribution-inventory.mjs +27 -24
- package/foundation/integrations/contribution-inventory.test.mjs +86 -27
- package/foundation/integrations/integration-warnings.d.mts +9 -2
- package/foundation/integrations/integration-warnings.mjs +51 -26
- package/foundation/integrations/integration-warnings.test.mjs +74 -1
- package/foundation/integrations/integrations.d.mts +3 -0
- package/foundation/integrations/integrations.mjs +11 -97
- package/foundation/integrations/provider-ledger.test.mjs +275 -0
- package/foundation/integrations/provider-resolution.d.mts +152 -0
- package/foundation/integrations/provider-resolution.mjs +576 -0
- package/foundation/integrations/provider-resolution.test.mjs +369 -0
- package/foundation/integrations/theme-descriptor.d.mts +8 -0
- package/foundation/integrations/theme-descriptor.mjs +44 -0
- package/foundation/integrations/validate-contributions.mjs +121 -29
- package/foundation/response/error-codes.d.mts +3 -1
- package/foundation/response/error-codes.d.ts +2 -0
- package/foundation/response/error-codes.doc.mjs +12 -2
- package/foundation/response/error-codes.mjs +7 -1
- package/foundation/response/error-codes.test.mjs +55 -11
- package/foundation/response/response-types.doc.d.mts +5 -1
- package/foundation/response/response-types.doc.mjs +20 -11
- package/foundation/response/response.doc.mjs +1 -1
- package/foundation/text/string-utils.d.mts +8 -0
- package/foundation/text/string-utils.mjs +40 -10
- package/foundation/xle/expand.mjs +1 -1
- package/foundation/xle/xle.test.mjs +13 -0
- package/package.json +10 -9
- package/assets/templates/themes/manifest.json +0 -95
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @file The CLI an integration's namespace docs need (spec:AST-046 FR11).
|
|
5
|
+
*
|
|
6
|
+
* @input A package.json object.
|
|
7
|
+
* @output Whether its `peerDependencies` range for `@astryxdesign/cli` admits
|
|
8
|
+
* only CLIs that read namespace docs, and the package.json that declares it.
|
|
9
|
+
* @position foundation/integrations; read by `integration add doc --parent`,
|
|
10
|
+
* which declares the peer, and `integration pack --check`, which requires it.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import {semverCompare} from '../env/semver.mjs';
|
|
14
|
+
|
|
15
|
+
export const CLI_PACKAGE = '@astryxdesign/cli';
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* The first CLI release that reads an integration's docs tree (namespace docs
|
|
19
|
+
* and placed guides) and its templates' `replaces`. A release before it can
|
|
20
|
+
* hide every doc topic a package with a namespace doc or a placed guide
|
|
21
|
+
* ships, with no warning, and it rejects `replaces` and withholds the
|
|
22
|
+
* package's templates and doc topics.
|
|
23
|
+
*/
|
|
24
|
+
export const DOCS_TREE_CLI = '0.7.0';
|
|
25
|
+
|
|
26
|
+
const VERSION_RE = /^v?(\d+|[xX*])(?:\.(\d+|[xX*]))?(?:\.(\d+|[xX*]))?(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/;
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* A version or partial version as MAJOR.MINOR.PATCH, a wildcard part as 0.
|
|
30
|
+
* @param {string} text
|
|
31
|
+
* @returns {string | null}
|
|
32
|
+
*/
|
|
33
|
+
function lowerVersion(text) {
|
|
34
|
+
const m = VERSION_RE.exec(text.trim());
|
|
35
|
+
if (!m) return null;
|
|
36
|
+
return [m[1], m[2], m[3]]
|
|
37
|
+
.map(part => (part == null || /^[xX*]$/.test(part) ? '0' : part))
|
|
38
|
+
.join('.');
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* The lowest version one space-joined comparator set admits, or null when it
|
|
43
|
+
* has no lower bound this can read.
|
|
44
|
+
* @param {string} set
|
|
45
|
+
* @returns {string | null}
|
|
46
|
+
*/
|
|
47
|
+
function lowestOfSet(set) {
|
|
48
|
+
if (set === '' || set === '*' || /^[xX]$/.test(set)) return null;
|
|
49
|
+
const hyphen = /^(\S+)\s+-\s+\S+$/.exec(set);
|
|
50
|
+
if (hyphen) return lowerVersion(hyphen[1]);
|
|
51
|
+
/** @type {string | null} */
|
|
52
|
+
let lowest = null;
|
|
53
|
+
for (const comparator of set.split(/\s+/)) {
|
|
54
|
+
const m = /^(>=|<=|>|<|=|\^|~)?(.+)$/.exec(comparator);
|
|
55
|
+
if (!m) return null;
|
|
56
|
+
if (m[1] === '<' || m[1] === '<=') continue;
|
|
57
|
+
const version = lowerVersion(m[2]);
|
|
58
|
+
if (version == null) return null;
|
|
59
|
+
if (lowest == null || semverCompare(version, lowest) > 0) lowest = version;
|
|
60
|
+
}
|
|
61
|
+
return lowest;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* The lowest version a semver range admits: the least of its `||`
|
|
66
|
+
* alternatives. Null when an alternative has no lower bound, or the range is
|
|
67
|
+
* not one this can read, so the caller treats it as admitting every version.
|
|
68
|
+
* @param {unknown} range
|
|
69
|
+
* @returns {string | null}
|
|
70
|
+
*/
|
|
71
|
+
export function lowestAdmitted(range) {
|
|
72
|
+
if (typeof range !== 'string') return null;
|
|
73
|
+
/** @type {string | null} */
|
|
74
|
+
let lowest = null;
|
|
75
|
+
for (const alternative of range.split('||')) {
|
|
76
|
+
const low = lowestOfSet(alternative.trim());
|
|
77
|
+
if (low == null) return null;
|
|
78
|
+
if (lowest == null || semverCompare(low, lowest) < 0) lowest = low;
|
|
79
|
+
}
|
|
80
|
+
return lowest;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Why a package that uses a feature an older CLI cannot read would lose it,
|
|
85
|
+
* or null when its declared CLI range admits only CLIs that read it.
|
|
86
|
+
* @param {any} pkg package.json
|
|
87
|
+
* @param {string} feature what the package does, e.g. "ships a namespace doc"
|
|
88
|
+
* @param {string} loss what an older CLI does with it
|
|
89
|
+
* @returns {string | null}
|
|
90
|
+
*/
|
|
91
|
+
function cliRangeProblem(pkg, feature, loss) {
|
|
92
|
+
const range = pkg?.peerDependencies?.[CLI_PACKAGE];
|
|
93
|
+
const fix = `"${CLI_PACKAGE}": ">=${DOCS_TREE_CLI}" in peerDependencies (optional in peerDependenciesMeta, if the CLI is not required)`;
|
|
94
|
+
if (typeof range !== 'string') {
|
|
95
|
+
return `The package ${feature} but declares no ${CLI_PACKAGE} peer. A CLI older than ${DOCS_TREE_CLI} ${loss}. Declare ${fix}.`;
|
|
96
|
+
}
|
|
97
|
+
const lowest = lowestAdmitted(range);
|
|
98
|
+
if (lowest == null || semverCompare(lowest, DOCS_TREE_CLI) < 0) {
|
|
99
|
+
return `The package ${feature}, but its ${CLI_PACKAGE} peer range "${range}" admits a CLI older than ${DOCS_TREE_CLI}, which ${loss}. Declare ${fix}.`;
|
|
100
|
+
}
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Why a package that ships a namespace doc or a placed guide would lose its
|
|
106
|
+
* docs on an older CLI, or null when its declared CLI range admits only CLIs
|
|
107
|
+
* that read the docs tree. Published 0.6.3 hides every topic of a package
|
|
108
|
+
* with a namespace doc; builds of main before the docs tree also do so for a
|
|
109
|
+
* placed guide.
|
|
110
|
+
* @param {any} pkg package.json
|
|
111
|
+
* @returns {string | null}
|
|
112
|
+
*/
|
|
113
|
+
export function docsTreeCliProblem(pkg) {
|
|
114
|
+
return cliRangeProblem(
|
|
115
|
+
pkg,
|
|
116
|
+
'ships a namespace doc or a placed guide',
|
|
117
|
+
'does not read the docs tree, and can hide every doc topic the package ships',
|
|
118
|
+
);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Why a package with a template that sets `replaces` would lose its templates
|
|
123
|
+
* and doc topics on an older CLI (spec:AST-035), or null when its declared CLI
|
|
124
|
+
* range admits only CLIs that read the field.
|
|
125
|
+
* @param {any} pkg package.json
|
|
126
|
+
* @returns {string | null}
|
|
127
|
+
*/
|
|
128
|
+
export function replacesCliProblem(pkg) {
|
|
129
|
+
return cliRangeProblem(
|
|
130
|
+
pkg,
|
|
131
|
+
'has a template that sets `replaces`',
|
|
132
|
+
"rejects the field, and withholds the package's templates and doc topics",
|
|
133
|
+
);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* The package.json with a CLI peer that reads namespace docs: optional, unless
|
|
138
|
+
* the package already says otherwise.
|
|
139
|
+
* @param {any} pkg package.json
|
|
140
|
+
* @returns {any}
|
|
141
|
+
*/
|
|
142
|
+
export function withDocsTreeCli(pkg) {
|
|
143
|
+
const meta = pkg.peerDependenciesMeta ?? {};
|
|
144
|
+
return {
|
|
145
|
+
...pkg,
|
|
146
|
+
peerDependencies: {
|
|
147
|
+
...(pkg.peerDependencies ?? {}),
|
|
148
|
+
[CLI_PACKAGE]: `>=${DOCS_TREE_CLI}`,
|
|
149
|
+
},
|
|
150
|
+
peerDependenciesMeta: meta[CLI_PACKAGE]
|
|
151
|
+
? meta
|
|
152
|
+
: {...meta, [CLI_PACKAGE]: {optional: true}},
|
|
153
|
+
};
|
|
154
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
import {describe, expect, it} from 'vitest';
|
|
4
|
+
import {
|
|
5
|
+
DOCS_TREE_CLI,
|
|
6
|
+
lowestAdmitted,
|
|
7
|
+
docsTreeCliProblem,
|
|
8
|
+
replacesCliProblem,
|
|
9
|
+
withDocsTreeCli,
|
|
10
|
+
} from './cli-requirement.mjs';
|
|
11
|
+
|
|
12
|
+
describe('lowestAdmitted', () => {
|
|
13
|
+
it.each([
|
|
14
|
+
['>=0.7.0', '0.7.0'],
|
|
15
|
+
['^0.6.0', '0.6.0'],
|
|
16
|
+
['~0.7.1', '0.7.1'],
|
|
17
|
+
['0.7.x', '0.7.0'],
|
|
18
|
+
['>=0.7.0 <0.8.0', '0.7.0'],
|
|
19
|
+
['^0.6.0 || >=0.7.0', '0.6.0'],
|
|
20
|
+
['0.8.0 - 0.9.0', '0.8.0'],
|
|
21
|
+
['*', null],
|
|
22
|
+
['<1.0.0', null],
|
|
23
|
+
['latest', null],
|
|
24
|
+
['workspace:*', null],
|
|
25
|
+
])('%s admits %s at the lowest', (range, lowest) => {
|
|
26
|
+
expect(lowestAdmitted(range)).toBe(lowest);
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
describe('docsTreeCliProblem', () => {
|
|
31
|
+
it('asks for a CLI peer when there is none', () => {
|
|
32
|
+
expect(docsTreeCliProblem({name: '@acme/kit'})).toContain(
|
|
33
|
+
'declares no @astryxdesign/cli peer',
|
|
34
|
+
);
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
it.each(['^0.6.0', '^0.6.0 || >=0.7.0', '*', '>=0.6.3'])(
|
|
38
|
+
'refuses %s, which admits a CLI that cannot read a namespace doc',
|
|
39
|
+
range => {
|
|
40
|
+
expect(
|
|
41
|
+
docsTreeCliProblem({peerDependencies: {'@astryxdesign/cli': range}}),
|
|
42
|
+
).toContain('admits a CLI older than');
|
|
43
|
+
},
|
|
44
|
+
);
|
|
45
|
+
|
|
46
|
+
it.each(['>=0.7.0', '^0.7.2', '>=0.7.0 <2'])('accepts %s', range => {
|
|
47
|
+
expect(
|
|
48
|
+
docsTreeCliProblem({peerDependencies: {'@astryxdesign/cli': range}}),
|
|
49
|
+
).toBeNull();
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
it('declares the peer as optional, and keeps what the package says of it', () => {
|
|
53
|
+
const declared = withDocsTreeCli({name: '@acme/kit'});
|
|
54
|
+
expect(declared.peerDependencies).toEqual({
|
|
55
|
+
'@astryxdesign/cli': `>=${DOCS_TREE_CLI}`,
|
|
56
|
+
});
|
|
57
|
+
expect(declared.peerDependenciesMeta).toEqual({
|
|
58
|
+
'@astryxdesign/cli': {optional: true},
|
|
59
|
+
});
|
|
60
|
+
expect(docsTreeCliProblem(declared)).toBeNull();
|
|
61
|
+
const required = withDocsTreeCli({
|
|
62
|
+
peerDependencies: {react: '^19.0.0', '@astryxdesign/cli': '^0.6.0'},
|
|
63
|
+
peerDependenciesMeta: {'@astryxdesign/cli': {optional: false}},
|
|
64
|
+
});
|
|
65
|
+
expect(required.peerDependencies.react).toBe('^19.0.0');
|
|
66
|
+
expect(required.peerDependenciesMeta['@astryxdesign/cli']).toEqual({
|
|
67
|
+
optional: false,
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
describe('replacesCliProblem', () => {
|
|
73
|
+
it('asks a package that sets replaces for a CLI that reads the field', () => {
|
|
74
|
+
expect(replacesCliProblem({name: '@acme/kit'})).toContain(
|
|
75
|
+
'sets `replaces`',
|
|
76
|
+
);
|
|
77
|
+
expect(
|
|
78
|
+
replacesCliProblem({peerDependencies: {'@astryxdesign/cli': '^0.6.0'}}),
|
|
79
|
+
).toContain('admits a CLI older than');
|
|
80
|
+
expect(
|
|
81
|
+
replacesCliProblem({peerDependencies: {'@astryxdesign/cli': '>=0.7.0'}}),
|
|
82
|
+
).toBeNull();
|
|
83
|
+
});
|
|
84
|
+
});
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
// @generated by scripts/sync-api-types.mjs from the JSDoc in foundation/**/*.mjs.
|
|
2
|
+
// DO NOT EDIT — run `pnpm sync:api-types` to regenerate.
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Identify contribution metadata without importing it. Doctor scans files that
|
|
6
|
+
* the manifest does not declare, so executing those files would run code the
|
|
7
|
+
* package never asked Astryx to load.
|
|
8
|
+
*
|
|
9
|
+
* @param {string} file
|
|
10
|
+
* @param {boolean} templateOnly
|
|
11
|
+
* @returns {ContributionStamp | null} null when it is not contribution metadata
|
|
12
|
+
*/
|
|
13
|
+
export function readContributionStamp(file: string, templateOnly: boolean): ContributionStamp | null;
|
|
14
|
+
/** @param {string} candidate @param {string} root */
|
|
15
|
+
export function pathIsInside(candidate: string, root: string): boolean;
|
|
16
|
+
/**
|
|
17
|
+
* @param {string} packageDir
|
|
18
|
+
* @param {{components?: string, templates?: string, codemods?: string, docs?: string, themes?: string, __manifestFile?: string}} integration
|
|
19
|
+
* @returns {FixContext}
|
|
20
|
+
*/
|
|
21
|
+
export function createFixContext(packageDir: string, integration: {
|
|
22
|
+
components?: string;
|
|
23
|
+
templates?: string;
|
|
24
|
+
codemods?: string;
|
|
25
|
+
docs?: string;
|
|
26
|
+
themes?: string;
|
|
27
|
+
__manifestFile?: string;
|
|
28
|
+
}): FixContext;
|
|
29
|
+
/**
|
|
30
|
+
* The static stamp of a candidate metadata file, read once per context.
|
|
31
|
+
* @param {FixContext} context
|
|
32
|
+
* @param {string} file
|
|
33
|
+
* @returns {ContributionStamp | null}
|
|
34
|
+
*/
|
|
35
|
+
export function stampOf(context: FixContext, file: string): ContributionStamp | null;
|
|
36
|
+
/**
|
|
37
|
+
* The fix for every codemods entry when the codemods root also holds the rest
|
|
38
|
+
* of the package: it is the package root, or it holds another root. No
|
|
39
|
+
* per-entry move or rename helps then.
|
|
40
|
+
* @param {FixContext} context
|
|
41
|
+
* @param {string} [stray] a stray file's name, which may itself be a codemod
|
|
42
|
+
* @returns {string | null}
|
|
43
|
+
*/
|
|
44
|
+
export function sharedCodemodsRootFix(context: FixContext, stray?: string): string | null;
|
|
45
|
+
/**
|
|
46
|
+
* The fix for a codemods folder that holds another root, which a rename would
|
|
47
|
+
* break.
|
|
48
|
+
* @param {FixContext} context
|
|
49
|
+
* @param {string} folder
|
|
50
|
+
* @returns {string | null}
|
|
51
|
+
*/
|
|
52
|
+
export function heldRootFix(context: FixContext, folder: string): string | null;
|
|
53
|
+
/**
|
|
54
|
+
* The fix for contribution metadata that sits outside every declared root.
|
|
55
|
+
* @param {FixContext} context
|
|
56
|
+
* @param {string} file
|
|
57
|
+
* @param {ContributionStamp} stamp
|
|
58
|
+
* @returns {string}
|
|
59
|
+
*/
|
|
60
|
+
export function unreachableFix(context: FixContext, file: string, stamp: ContributionStamp): string;
|
|
61
|
+
/**
|
|
62
|
+
* The step a component doc added to the components root also needs when
|
|
63
|
+
* another root reads that folder too, and would read the new doc as its own.
|
|
64
|
+
* @param {FixContext} context
|
|
65
|
+
* @returns {string} a sentence with a leading space, or ''
|
|
66
|
+
*/
|
|
67
|
+
export function newComponentDocNote(context: FixContext): string;
|
|
68
|
+
/**
|
|
69
|
+
* The theme beside \`file\` whose source imports it, if any: such a file is
|
|
70
|
+
* part of that theme, not a codemod.
|
|
71
|
+
* @param {FixContext} context
|
|
72
|
+
* @param {string} file
|
|
73
|
+
* @returns {{doc: string, stamp: ContributionStamp, source: string} | null}
|
|
74
|
+
*/
|
|
75
|
+
export function themeImporting(context: FixContext, file: string): {
|
|
76
|
+
doc: string;
|
|
77
|
+
stamp: ContributionStamp;
|
|
78
|
+
source: string;
|
|
79
|
+
} | null;
|
|
80
|
+
/**
|
|
81
|
+
* The fix for contribution metadata at the top of the codemods root, which
|
|
82
|
+
* the codemod checks read as a stray codemod. `source` names that doc's theme
|
|
83
|
+
* source when the stray file is the source rather than the doc.
|
|
84
|
+
* @param {FixContext} context
|
|
85
|
+
* @param {string} file the metadata doc
|
|
86
|
+
* @param {ContributionStamp} stamp
|
|
87
|
+
* @param {string} [source]
|
|
88
|
+
* @param {string} [stray] a file that source imports, when the stray file is
|
|
89
|
+
* that one
|
|
90
|
+
* @returns {string}
|
|
91
|
+
*/
|
|
92
|
+
export function notACodemodFix(context: FixContext, file: string, stamp: ContributionStamp, source?: string, stray?: string): string;
|
|
93
|
+
/**
|
|
94
|
+
* The fix for a doc that the components root reads although its type says it
|
|
95
|
+
* is another kind of metadata.
|
|
96
|
+
* @param {FixContext} context
|
|
97
|
+
* @param {string} file
|
|
98
|
+
* @param {ContributionStamp} stamp a stamp whose type is not `component`
|
|
99
|
+
* @returns {string}
|
|
100
|
+
*/
|
|
101
|
+
export function notAComponentFix(context: FixContext, file: string, stamp: ContributionStamp): string;
|
|
102
|
+
/** @typedef {'components' | 'templates' | 'docs' | 'themes'} MetadataRoot */
|
|
103
|
+
/**
|
|
104
|
+
* @typedef {object} ContributionStamp
|
|
105
|
+
* @property {string} type
|
|
106
|
+
* @property {string | null} name the static `name`, when it has one
|
|
107
|
+
*/
|
|
108
|
+
/**
|
|
109
|
+
* @typedef {object} FixContext
|
|
110
|
+
* @property {string} packageDir
|
|
111
|
+
* @property {string} manifest file name of the package's manifest
|
|
112
|
+
* @property {Partial<Record<MetadataRoot | 'codemods', string>>} roots
|
|
113
|
+
* declared roots, absolute
|
|
114
|
+
* @property {Map<string, ContributionStamp | null>} stamps
|
|
115
|
+
* @property {Map<string, string[] | null>} candidates
|
|
116
|
+
*/
|
|
117
|
+
export const DOC_CANDIDATE_RE: RegExp;
|
|
118
|
+
export const TEMPLATE_CANDIDATE_RE: RegExp;
|
|
119
|
+
/** Stray-codemod and version-folder rules, shared with the codemod checks. */
|
|
120
|
+
export const CODEMOD_FILE_RE: RegExp;
|
|
121
|
+
export const CODEMOD_TEST_RE: RegExp;
|
|
122
|
+
export const CODEMOD_SKIP_DIRS: Set<string>;
|
|
123
|
+
/** The manifest root that reads each kind of contribution metadata. */
|
|
124
|
+
export const ROOT_FOR_TYPE: Record<string, MetadataRoot>;
|
|
125
|
+
export type MetadataRoot = "components" | "templates" | "docs" | "themes";
|
|
126
|
+
export type ContributionStamp = {
|
|
127
|
+
type: string;
|
|
128
|
+
/**
|
|
129
|
+
* the static `name`, when it has one
|
|
130
|
+
*/
|
|
131
|
+
name: string | null;
|
|
132
|
+
};
|
|
133
|
+
export type FixContext = {
|
|
134
|
+
packageDir: string;
|
|
135
|
+
/**
|
|
136
|
+
* file name of the package's manifest
|
|
137
|
+
*/
|
|
138
|
+
manifest: string;
|
|
139
|
+
/**
|
|
140
|
+
* declared roots, absolute
|
|
141
|
+
*/
|
|
142
|
+
roots: Partial<Record<MetadataRoot | "codemods", string>>;
|
|
143
|
+
stamps: Map<string, ContributionStamp | null>;
|
|
144
|
+
candidates: Map<string, string[] | null>;
|
|
145
|
+
};
|