@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
|
@@ -9,25 +9,26 @@ export const doc = {
|
|
|
9
9
|
type: 'function',
|
|
10
10
|
kind: 'api',
|
|
11
11
|
name: 'listThemes',
|
|
12
|
+
namespace: 'cli/api',
|
|
12
13
|
displayName: 'listThemes()',
|
|
13
|
-
summary: 'Read the CLI bundled-theme
|
|
14
|
+
summary: 'Read the CLI bundled-theme descriptors.',
|
|
14
15
|
description:
|
|
15
|
-
'Reads templates/themes
|
|
16
|
+
'Reads the typed same-stem descriptors under templates/themes and returns normalized entries synchronously. This low-level helper keeps its historical bundled-only contract; project-aware themeList() and themeAdd() also discover source themes from installed integrations.',
|
|
16
17
|
importPath: '@astryxdesign/cli/api',
|
|
17
18
|
signature: 'listThemes(): BundledTheme[]',
|
|
18
|
-
keywords: ['theme', 'themes', '
|
|
19
|
+
keywords: ['theme', 'themes', 'descriptor', 'bundled', 'adapter', 'list'],
|
|
19
20
|
params: [],
|
|
20
21
|
returns: [
|
|
21
22
|
{
|
|
22
23
|
type: 'BundledTheme[]',
|
|
23
24
|
description:
|
|
24
|
-
'The bundled
|
|
25
|
+
'The normalized bundled descriptor entries: slug, displayName, description, maintained, entry, exportName, and files.',
|
|
25
26
|
},
|
|
26
27
|
],
|
|
27
28
|
throws: [
|
|
28
29
|
{
|
|
29
30
|
code: 'ERR_NO_SOURCE',
|
|
30
|
-
when: 'the bundled
|
|
31
|
+
when: 'the bundled descriptors are missing, invalid, or have missing source files',
|
|
31
32
|
},
|
|
32
33
|
],
|
|
33
34
|
examples: [
|
|
@@ -13,6 +13,7 @@ import {describe, it, expect, beforeEach, afterEach} from 'vitest';
|
|
|
13
13
|
import * as fs from 'node:fs';
|
|
14
14
|
import * as path from 'node:path';
|
|
15
15
|
import * as os from 'node:os';
|
|
16
|
+
import {themeTemplate as publicThemeTemplate} from '../../index.mjs';
|
|
16
17
|
import {themeTemplate, THEME_TEMPLATE_DEFAULT_PATH} from './template.mjs';
|
|
17
18
|
import {isErrorCode} from '../../../foundation/response/error-codes.mjs';
|
|
18
19
|
|
|
@@ -25,6 +26,10 @@ afterEach(() => {
|
|
|
25
26
|
});
|
|
26
27
|
|
|
27
28
|
describe('themeTemplate()', () => {
|
|
29
|
+
it('is available through the public API entry point', () => {
|
|
30
|
+
expect(publicThemeTemplate).toBe(themeTemplate);
|
|
31
|
+
});
|
|
32
|
+
|
|
28
33
|
it('writes the template and returns a theme.template receipt', () => {
|
|
29
34
|
const res = themeTemplate({cwd: tmpDir});
|
|
30
35
|
|
|
@@ -9,10 +9,11 @@ export const doc = {
|
|
|
9
9
|
type: 'function',
|
|
10
10
|
kind: 'api',
|
|
11
11
|
name: 'themeAdd',
|
|
12
|
+
namespace: 'cli/api',
|
|
12
13
|
displayName: 'themeAdd()',
|
|
13
14
|
summary: 'Copy an available theme into a project as editable source.',
|
|
14
15
|
description:
|
|
15
|
-
|
|
16
|
+
"Resolves a theme from the CLI bundle or an installed integration and copies it into the consumer project: a bundled theme's source files, or an integration theme's complete directory with its descriptor. Writes are staged and existing files require explicit overwrite. Duplicate slugs fail closed until the caller selects an owner package.",
|
|
16
17
|
importPath: '@astryxdesign/cli/api',
|
|
17
18
|
signature:
|
|
18
19
|
'themeAdd(slug: string, options?: {targetPath?: string, overwrite?: boolean, cwd?: string, package?: string}): Promise<ThemeAddResponse>',
|
|
@@ -70,10 +71,10 @@ export const doc = {
|
|
|
70
71
|
{code: 'ERR_AMBIGUOUS_THEME', when: 'more than one package owns the slug'},
|
|
71
72
|
{
|
|
72
73
|
code: 'ERR_THEME_INVALID',
|
|
73
|
-
when: 'the selected installed package has a blocking integration or theme-
|
|
74
|
+
when: 'the selected installed package has a blocking integration or theme-descriptor error',
|
|
74
75
|
},
|
|
75
76
|
{code: 'ERR_PATH_TRAVERSAL', when: 'the target path escapes cwd'},
|
|
76
|
-
{code: 'ERR_NO_SOURCE', when: 'a
|
|
77
|
+
{code: 'ERR_NO_SOURCE', when: 'a theme file to copy is missing'},
|
|
77
78
|
{
|
|
78
79
|
code: 'ERR_FILE_EXISTS',
|
|
79
80
|
when: 'a destination exists and overwrite is not set',
|
|
@@ -9,10 +9,11 @@ export const doc = {
|
|
|
9
9
|
type: 'function',
|
|
10
10
|
kind: 'api',
|
|
11
11
|
name: 'themeList',
|
|
12
|
+
namespace: 'cli/api',
|
|
12
13
|
displayName: 'themeList()',
|
|
13
14
|
summary: 'List themes bundled with this CLI build.',
|
|
14
15
|
description:
|
|
15
|
-
'Projects the bundled
|
|
16
|
+
'Projects the bundled typed theme descriptors into a synchronous theme.list envelope. This preserves the original programmatic API contract. The CLI command uses themeListAvailable() so installed integrations also appear.',
|
|
16
17
|
importPath: '@astryxdesign/cli/api',
|
|
17
18
|
signature: 'themeList(): ThemeListResponse',
|
|
18
19
|
keywords: ['theme', 'list', 'themes', 'bundled', 'available'],
|
|
@@ -27,9 +28,11 @@ export const doc = {
|
|
|
27
28
|
throws: [
|
|
28
29
|
{
|
|
29
30
|
code: 'ERR_NO_SOURCE',
|
|
30
|
-
when: 'the bundled
|
|
31
|
+
when: 'the bundled theme descriptors cannot be read or parsed',
|
|
31
32
|
},
|
|
32
33
|
],
|
|
33
|
-
examples: [
|
|
34
|
+
examples: [
|
|
35
|
+
{label: 'List bundled themes', code: 'const {data} = themeList();'},
|
|
36
|
+
],
|
|
34
37
|
related: ['themeListAvailable', 'themeAdd', 'listThemes'],
|
|
35
38
|
};
|
|
@@ -9,10 +9,11 @@ export const doc = {
|
|
|
9
9
|
type: 'function',
|
|
10
10
|
kind: 'api',
|
|
11
11
|
name: 'themeListAvailable',
|
|
12
|
+
namespace: 'cli/api',
|
|
12
13
|
displayName: 'themeListAvailable()',
|
|
13
14
|
summary: 'List bundled and installed integration themes.',
|
|
14
15
|
description:
|
|
15
|
-
'Loads Project for the requested directory, combines the CLI bundle with source themes from installed integrations, and projects each entry with its owner package. An unreadable project configuration degrades to the bundled
|
|
16
|
+
'Loads Project for the requested directory, combines the CLI bundle with source themes from installed integrations, and projects each entry with its owner package. An unreadable project configuration degrades to the bundled descriptors.',
|
|
16
17
|
importPath: '@astryxdesign/cli/api',
|
|
17
18
|
signature:
|
|
18
19
|
'themeListAvailable(options?: {cwd?: string, package?: string}): Promise<ThemeListResponse>',
|
|
@@ -21,7 +22,8 @@ export const doc = {
|
|
|
21
22
|
{
|
|
22
23
|
name: 'options.cwd',
|
|
23
24
|
type: 'string',
|
|
24
|
-
description:
|
|
25
|
+
description:
|
|
26
|
+
'Project directory whose installed integrations contribute themes.',
|
|
25
27
|
},
|
|
26
28
|
{
|
|
27
29
|
name: 'options.package',
|
|
@@ -39,7 +41,7 @@ export const doc = {
|
|
|
39
41
|
throws: [
|
|
40
42
|
{
|
|
41
43
|
code: 'ERR_NO_SOURCE',
|
|
42
|
-
when: 'the CLI bundled-theme
|
|
44
|
+
when: 'the CLI bundled-theme descriptors cannot be read or parsed',
|
|
43
45
|
},
|
|
44
46
|
],
|
|
45
47
|
examples: [
|
|
@@ -12,6 +12,7 @@ export const doc = {
|
|
|
12
12
|
type: 'function',
|
|
13
13
|
kind: 'api',
|
|
14
14
|
name: 'themeTemplate',
|
|
15
|
+
namespace: 'cli/api',
|
|
15
16
|
displayName: 'themeTemplate()',
|
|
16
17
|
summary: 'Write the annotated theme template into a project.',
|
|
17
18
|
description:
|
|
@@ -23,7 +24,7 @@ export const doc = {
|
|
|
23
24
|
'`overwrite`, so it is safe to re-run.',
|
|
24
25
|
importPath: '@astryxdesign/cli/api',
|
|
25
26
|
signature:
|
|
26
|
-
'themeTemplate(options?: {targetPath?: string, overwrite?: boolean, cwd?: string}):
|
|
27
|
+
'themeTemplate(options?: {targetPath?: string, overwrite?: boolean, cwd?: string}): ThemeTemplateResponse',
|
|
27
28
|
keywords: ['theme', 'template', 'starter', 'defineTheme', 'scaffold', 'reference', 'tokens'],
|
|
28
29
|
params: [
|
|
29
30
|
{
|
|
@@ -104,18 +104,27 @@ export function ensureCodemodDeps({ installDeps }?: {
|
|
|
104
104
|
* Run the CORE registry codemods. Runs BEFORE the config is loaded so a core
|
|
105
105
|
* CONFIG codemod can repair a config the strict loader would otherwise reject.
|
|
106
106
|
* @param {CoreVersionManifest[]} versionManifests
|
|
107
|
-
* @param {{apply: boolean, path: string, codemod?: string, skipCodemods: Set<string
|
|
107
|
+
* @param {{apply: boolean, path: string, codemod?: string, skipCodemods: Set<string>, root?: string, protection?: {root: string, classify: (file: string) => import('../../foundation/fs/file-protection.mjs').FileProtection[]}, silent?: boolean}} options
|
|
108
108
|
*/
|
|
109
|
-
export function runCoreCodemods(versionManifests: CoreVersionManifest[], { apply, path: srcPath, codemod, skipCodemods }: {
|
|
109
|
+
export function runCoreCodemods(versionManifests: CoreVersionManifest[], { apply, path: srcPath, codemod, skipCodemods, root, protection, silent }: {
|
|
110
110
|
apply: boolean;
|
|
111
111
|
path: string;
|
|
112
112
|
codemod?: string;
|
|
113
113
|
skipCodemods: Set<string>;
|
|
114
|
+
root?: string;
|
|
115
|
+
protection?: {
|
|
116
|
+
root: string;
|
|
117
|
+
classify: (file: string) => import("../../foundation/fs/file-protection.mjs").FileProtection[];
|
|
118
|
+
};
|
|
119
|
+
silent?: boolean;
|
|
114
120
|
}): Promise<{
|
|
115
121
|
totalFilesChanged: number;
|
|
116
122
|
totalTransformsApplied: number;
|
|
117
123
|
totalValidationBlocked: number;
|
|
124
|
+
changedFiles: string[];
|
|
118
125
|
writtenFiles: string[];
|
|
126
|
+
stagedContents: Map<string, string>;
|
|
127
|
+
protectedFiles: import("../../authoring/codemod/type").CodemodRunResult["protectedFiles"];
|
|
119
128
|
errors: Array<{
|
|
120
129
|
file: string;
|
|
121
130
|
codemod: string;
|
|
@@ -139,13 +148,21 @@ export function runCoreCodemods(versionManifests: CoreVersionManifest[], { apply
|
|
|
139
148
|
/**
|
|
140
149
|
* Load the consumer project's config + integrations. Throws on invalid config;
|
|
141
150
|
* the run leaf decides between the config_fixable preview and a hard abort.
|
|
151
|
+
*
|
|
152
|
+
* Provider identity is resolved by the same resolver Project uses, on top of
|
|
153
|
+
* Project's ledger, under the codemod policy: a package that lists itself runs
|
|
154
|
+
* its installed copy's released codemods, never the work in progress being
|
|
155
|
+
* authored, and autolinked and local packages claim provider IDs without
|
|
156
|
+
* running codemods.
|
|
157
|
+
*
|
|
142
158
|
* @param {string} cwd
|
|
143
159
|
* @param {string[]} [extraIntegrationSpecs] explicit `--integration` specs
|
|
144
|
-
* @returns {Promise<{postCodemodHooks: import('../../authoring/config/type').PostCodemodHook[], integrations: import('../../foundation/integrations/integrations.mjs').LoadedIntegration[]}>}
|
|
160
|
+
* @returns {Promise<{postCodemodHooks: import('../../authoring/config/type').PostCodemodHook[], integrations: import('../../foundation/integrations/integrations.mjs').LoadedIntegration[], ledger: import('../../foundation/integrations/provider-resolution.mjs').ProviderLedger}>}
|
|
145
161
|
*/
|
|
146
162
|
export function loadProjectContext(cwd: string, extraIntegrationSpecs?: string[]): Promise<{
|
|
147
163
|
postCodemodHooks: import("../../authoring/config/type").PostCodemodHook[];
|
|
148
164
|
integrations: import("../../foundation/integrations/integrations.mjs").LoadedIntegration[];
|
|
165
|
+
ledger: import("../../foundation/integrations/provider-resolution.mjs").ProviderLedger;
|
|
149
166
|
}>;
|
|
150
167
|
/**
|
|
151
168
|
* Non-blocking nudge for integration validation issues. Never throws (a broken
|
|
@@ -171,20 +188,30 @@ export function selectIntegrationCodemodsFor(integrations: Array<import("../../f
|
|
|
171
188
|
/**
|
|
172
189
|
* Run the file-based INTEGRATION codemods (config codemods first, then code).
|
|
173
190
|
* @param {Array<{version: string, codemods: import('../../authoring/codemod/type').CodemodEntry[]}>} versionGroups
|
|
174
|
-
* @param {{apply: boolean, path: string, codemod?: string, skipCodemods: Set<string
|
|
191
|
+
* @param {{apply: boolean, path: string, codemod?: string, skipCodemods: Set<string>, root?: string, protection?: {root: string, classify: (file: string) => import('../../foundation/fs/file-protection.mjs').FileProtection[]}, contents?: Map<string, string>, silent?: boolean}} options
|
|
175
192
|
*/
|
|
176
193
|
export function runIntegrationCodemodsStep(versionGroups: Array<{
|
|
177
194
|
version: string;
|
|
178
195
|
codemods: import("../../authoring/codemod/type").CodemodEntry[];
|
|
179
|
-
}>, { apply, path: srcPath, codemod, skipCodemods }: {
|
|
196
|
+
}>, { apply, path: srcPath, codemod, skipCodemods, root, protection, contents, silent, }: {
|
|
180
197
|
apply: boolean;
|
|
181
198
|
path: string;
|
|
182
199
|
codemod?: string;
|
|
183
200
|
skipCodemods: Set<string>;
|
|
201
|
+
root?: string;
|
|
202
|
+
protection?: {
|
|
203
|
+
root: string;
|
|
204
|
+
classify: (file: string) => import("../../foundation/fs/file-protection.mjs").FileProtection[];
|
|
205
|
+
};
|
|
206
|
+
contents?: Map<string, string>;
|
|
207
|
+
silent?: boolean;
|
|
184
208
|
}): Promise<{
|
|
185
209
|
totalFilesChanged: number;
|
|
186
210
|
totalTransformsApplied: number;
|
|
211
|
+
changedFiles: string[];
|
|
187
212
|
writtenFiles: string[];
|
|
213
|
+
stagedContents: Map<string, string>;
|
|
214
|
+
protectedFiles: import("../../authoring/codemod/type").CodemodRunResult["protectedFiles"];
|
|
188
215
|
errors: Array<{
|
|
189
216
|
file: string;
|
|
190
217
|
codemod: string;
|
package/api/upgrade/_adapter.mjs
CHANGED
|
@@ -19,7 +19,10 @@ import * as path from 'node:path';
|
|
|
19
19
|
import {execFile} from 'node:child_process';
|
|
20
20
|
import {promisify} from 'node:util';
|
|
21
21
|
import {ensureJscodeshift} from '../../assets/codemods/ensure-jscodeshift.mjs';
|
|
22
|
-
import {
|
|
22
|
+
import {
|
|
23
|
+
getTransformsBetween,
|
|
24
|
+
latestVersion,
|
|
25
|
+
} from '../../assets/codemods/registry.mjs';
|
|
23
26
|
import {runCodemods} from '../../assets/codemods/runner.mjs';
|
|
24
27
|
import {
|
|
25
28
|
discoverIntegrationCodemods,
|
|
@@ -32,17 +35,15 @@ import {
|
|
|
32
35
|
renderAgentDocsBlock,
|
|
33
36
|
} from '../../foundation/agent-docs/agent-docs.mjs';
|
|
34
37
|
import {formatCliCommand} from '../../foundation/env/package-manager.mjs';
|
|
35
|
-
import {Project} from '../../foundation/config/project.mjs';
|
|
36
|
-
import {
|
|
37
|
-
|
|
38
|
-
markProviderConflicts,
|
|
39
|
-
} from '../../foundation/integrations/integrations.mjs';
|
|
38
|
+
import {Project, providerLedgerOf} from '../../foundation/config/project.mjs';
|
|
39
|
+
import {loadIntegrations} from '../../foundation/integrations/integrations.mjs';
|
|
40
|
+
import {resolveProviders} from '../../foundation/integrations/provider-resolution.mjs';
|
|
40
41
|
import {warnOnIntegrationIssues} from '../../foundation/integrations/integration-warnings.mjs';
|
|
41
42
|
import {logger} from '../logger.mjs';
|
|
42
43
|
|
|
43
44
|
// Re-exported for the run leaf's lightweight agent-docs inspection path
|
|
44
45
|
// (config_fixable short-circuit, where the full render cannot load config).
|
|
45
|
-
export {
|
|
46
|
+
export {inspectAgentDocs};
|
|
46
47
|
|
|
47
48
|
const execFileAsync = promisify(execFile);
|
|
48
49
|
|
|
@@ -291,7 +292,13 @@ export async function collectAllCodemods() {
|
|
|
291
292
|
);
|
|
292
293
|
for (const {version, transforms} of manifests) {
|
|
293
294
|
for (const {name, meta, optional} of transforms) {
|
|
294
|
-
codemods.push({
|
|
295
|
+
codemods.push({
|
|
296
|
+
name,
|
|
297
|
+
title: meta.title,
|
|
298
|
+
version,
|
|
299
|
+
pr: meta.pr,
|
|
300
|
+
optional: !!optional,
|
|
301
|
+
});
|
|
295
302
|
}
|
|
296
303
|
}
|
|
297
304
|
return codemods;
|
|
@@ -322,33 +329,36 @@ export async function ensureCodemodDeps({installDeps} = {}) {
|
|
|
322
329
|
* Run the CORE registry codemods. Runs BEFORE the config is loaded so a core
|
|
323
330
|
* CONFIG codemod can repair a config the strict loader would otherwise reject.
|
|
324
331
|
* @param {CoreVersionManifest[]} versionManifests
|
|
325
|
-
* @param {{apply: boolean, path: string, codemod?: string, skipCodemods: Set<string
|
|
332
|
+
* @param {{apply: boolean, path: string, codemod?: string, skipCodemods: Set<string>, root?: string, protection?: {root: string, classify: (file: string) => import('../../foundation/fs/file-protection.mjs').FileProtection[]}, silent?: boolean}} options
|
|
326
333
|
*/
|
|
327
|
-
export async function runCoreCodemods(
|
|
334
|
+
export async function runCoreCodemods(
|
|
335
|
+
versionManifests,
|
|
336
|
+
{apply, path: srcPath, codemod, skipCodemods, root, protection, silent},
|
|
337
|
+
) {
|
|
328
338
|
return runCodemods(versionManifests, {
|
|
329
339
|
apply,
|
|
330
340
|
path: srcPath,
|
|
331
341
|
codemod,
|
|
332
342
|
skipCodemods,
|
|
333
|
-
silent: logger.silent,
|
|
343
|
+
silent: silent ?? logger.silent,
|
|
344
|
+
root,
|
|
345
|
+
protection,
|
|
334
346
|
});
|
|
335
347
|
}
|
|
336
348
|
|
|
337
|
-
/**
|
|
338
|
-
* One installed package at one version; two specs that reach it share this.
|
|
339
|
-
* @param {{name: string, version?: string}} integration
|
|
340
|
-
* @returns {string}
|
|
341
|
-
*/
|
|
342
|
-
function packageIdentity(integration) {
|
|
343
|
-
return `${integration.name}\u0000${integration.version ?? ''}`;
|
|
344
|
-
}
|
|
345
|
-
|
|
346
349
|
/**
|
|
347
350
|
* Load the consumer project's config + integrations. Throws on invalid config;
|
|
348
351
|
* the run leaf decides between the config_fixable preview and a hard abort.
|
|
352
|
+
*
|
|
353
|
+
* Provider identity is resolved by the same resolver Project uses, on top of
|
|
354
|
+
* Project's ledger, under the codemod policy: a package that lists itself runs
|
|
355
|
+
* its installed copy's released codemods, never the work in progress being
|
|
356
|
+
* authored, and autolinked and local packages claim provider IDs without
|
|
357
|
+
* running codemods.
|
|
358
|
+
*
|
|
349
359
|
* @param {string} cwd
|
|
350
360
|
* @param {string[]} [extraIntegrationSpecs] explicit `--integration` specs
|
|
351
|
-
* @returns {Promise<{postCodemodHooks: import('../../authoring/config/type').PostCodemodHook[], integrations: import('../../foundation/integrations/integrations.mjs').LoadedIntegration[]}>}
|
|
361
|
+
* @returns {Promise<{postCodemodHooks: import('../../authoring/config/type').PostCodemodHook[], integrations: import('../../foundation/integrations/integrations.mjs').LoadedIntegration[], ledger: import('../../foundation/integrations/provider-resolution.mjs').ProviderLedger}>}
|
|
352
362
|
*/
|
|
353
363
|
export async function loadProjectContext(cwd, extraIntegrationSpecs = []) {
|
|
354
364
|
// The CLI debug preflight may already have imported this config before core
|
|
@@ -360,23 +370,38 @@ export async function loadProjectContext(cwd, extraIntegrationSpecs = []) {
|
|
|
360
370
|
// Configured packages come from Project, which has already resolved provider
|
|
361
371
|
// identity over configured, autolinked, and local packages. Loading them
|
|
362
372
|
// again here would let upgrade run codemods from a package Project set aside.
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
373
|
+
// Autolinked packages and the package being authored join only as claimants:
|
|
374
|
+
// every other command uses them for their provider IDs, but upgrade has
|
|
375
|
+
// never run their codemods.
|
|
376
|
+
const candidates = project.loadedIntegrations.flatMap(integration => {
|
|
377
|
+
const source =
|
|
378
|
+
!integration.__autolinked && configuredSpecs.has(integration.__spec)
|
|
379
|
+
? /** @type {const} */ ('configured')
|
|
380
|
+
: integration.__autolinked
|
|
381
|
+
? /** @type {const} */ ('autolinked')
|
|
382
|
+
: integration.__local
|
|
383
|
+
? /** @type {const} */ ('local')
|
|
384
|
+
: null;
|
|
385
|
+
return source == null
|
|
386
|
+
? []
|
|
387
|
+
: [{source, integration, spec: integration.__spec}];
|
|
388
|
+
});
|
|
367
389
|
// A package that lists itself runs its installed copy's released codemods,
|
|
368
|
-
// never the work in progress being authored
|
|
390
|
+
// never the work in progress being authored; the resolver puts that copy in
|
|
391
|
+
// its place. Naming the package being authored with --integration asks for
|
|
392
|
+
// the installed copy too.
|
|
369
393
|
const local = project.loadedIntegrations.find(
|
|
370
394
|
integration => integration.__local,
|
|
371
395
|
);
|
|
372
|
-
const selfListed =
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
396
|
+
const selfListed =
|
|
397
|
+
local != null && !local.__autolinked && configuredSpecs.has(local.__spec);
|
|
398
|
+
const installed =
|
|
399
|
+
local != null && selfListed && project.configPath
|
|
400
|
+
? await loadIntegrations([local.__spec], {
|
|
401
|
+
cwd: path.dirname(project.configPath),
|
|
402
|
+
resolveProviders: false,
|
|
403
|
+
})
|
|
404
|
+
: [];
|
|
380
405
|
const extraSpecs = uniqueFiles(extraIntegrationSpecs ?? []).filter(
|
|
381
406
|
spec => !configuredSpecs.has(spec),
|
|
382
407
|
);
|
|
@@ -384,38 +409,23 @@ export async function loadProjectContext(cwd, extraIntegrationSpecs = []) {
|
|
|
384
409
|
extraSpecs.length === 0
|
|
385
410
|
? []
|
|
386
411
|
: await loadIntegrations(extraSpecs, {resolveProviders: false});
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
const resolved = markProviderConflicts([
|
|
403
|
-
...configured,
|
|
404
|
-
...claimantsOnly,
|
|
405
|
-
...extras,
|
|
406
|
-
]);
|
|
407
|
-
// Claimants leave by package directory, not object identity: the pass can
|
|
408
|
-
// return one as a new conflict entry, and upgrade must not warn that a
|
|
409
|
-
// package every other command uses contributes nothing.
|
|
410
|
-
const claimantDirs = new Set(
|
|
411
|
-
claimantsOnly.map(integration => integration.__packageDir),
|
|
412
|
+
const {integrations, ledger} = resolveProviders(
|
|
413
|
+
[
|
|
414
|
+
...candidates,
|
|
415
|
+
...installed.map(integration => ({
|
|
416
|
+
source: /** @type {const} */ ('installed'),
|
|
417
|
+
integration,
|
|
418
|
+
spec: integration.__spec,
|
|
419
|
+
})),
|
|
420
|
+
...extras.map(integration => ({
|
|
421
|
+
source: /** @type {const} */ ('extra'),
|
|
422
|
+
integration,
|
|
423
|
+
spec: integration.__spec,
|
|
424
|
+
})),
|
|
425
|
+
],
|
|
426
|
+
{codemods: true, prior: providerLedgerOf(project)},
|
|
412
427
|
);
|
|
413
|
-
|
|
414
|
-
integration =>
|
|
415
|
-
integration.__packageDir == null ||
|
|
416
|
-
!claimantDirs.has(integration.__packageDir),
|
|
417
|
-
);
|
|
418
|
-
return {postCodemodHooks, integrations};
|
|
428
|
+
return {postCodemodHooks, integrations, ledger};
|
|
419
429
|
}
|
|
420
430
|
|
|
421
431
|
/**
|
|
@@ -450,7 +460,10 @@ export async function selectIntegrationCodemodsFor(integrations, from, to) {
|
|
|
450
460
|
try {
|
|
451
461
|
const byVersion = await discoverIntegrationCodemods([integration]);
|
|
452
462
|
for (const [version, rawList] of byVersion) {
|
|
453
|
-
const list =
|
|
463
|
+
const list =
|
|
464
|
+
/** @type {Array<import('../../authoring/codemod/type').CodemodEntry>} */ (
|
|
465
|
+
/** @type {unknown} */ (rawList)
|
|
466
|
+
);
|
|
454
467
|
const existing = integrationCodemodsByVersion.get(version);
|
|
455
468
|
if (existing) existing.push(...list);
|
|
456
469
|
else integrationCodemodsByVersion.set(version, [...list]);
|
|
@@ -467,9 +480,21 @@ export async function selectIntegrationCodemodsFor(integrations, from, to) {
|
|
|
467
480
|
/**
|
|
468
481
|
* Run the file-based INTEGRATION codemods (config codemods first, then code).
|
|
469
482
|
* @param {Array<{version: string, codemods: import('../../authoring/codemod/type').CodemodEntry[]}>} versionGroups
|
|
470
|
-
* @param {{apply: boolean, path: string, codemod?: string, skipCodemods: Set<string
|
|
483
|
+
* @param {{apply: boolean, path: string, codemod?: string, skipCodemods: Set<string>, root?: string, protection?: {root: string, classify: (file: string) => import('../../foundation/fs/file-protection.mjs').FileProtection[]}, contents?: Map<string, string>, silent?: boolean}} options
|
|
471
484
|
*/
|
|
472
|
-
export async function runIntegrationCodemodsStep(
|
|
485
|
+
export async function runIntegrationCodemodsStep(
|
|
486
|
+
versionGroups,
|
|
487
|
+
{
|
|
488
|
+
apply,
|
|
489
|
+
path: srcPath,
|
|
490
|
+
codemod,
|
|
491
|
+
skipCodemods,
|
|
492
|
+
root,
|
|
493
|
+
protection,
|
|
494
|
+
contents,
|
|
495
|
+
silent,
|
|
496
|
+
},
|
|
497
|
+
) {
|
|
473
498
|
const jscodeshift = (await import('jscodeshift')).default;
|
|
474
499
|
return runIntegrationCodemods(versionGroups, {
|
|
475
500
|
apply,
|
|
@@ -477,6 +502,9 @@ export async function runIntegrationCodemodsStep(versionGroups, {apply, path: sr
|
|
|
477
502
|
codemod,
|
|
478
503
|
skipCodemods,
|
|
479
504
|
jscodeshift,
|
|
480
|
-
silent: logger.silent,
|
|
505
|
+
silent: silent ?? logger.silent,
|
|
506
|
+
root,
|
|
507
|
+
protection,
|
|
508
|
+
contents,
|
|
481
509
|
});
|
|
482
510
|
}
|