@astryxdesign/cli 0.6.3-canary.98a2e4e → 0.6.3-canary.9c4d44d
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 +117 -79
- 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 +16 -9
- package/api/build/build.test.mjs +197 -8
- package/api/build/build.type.d.mts +91 -2
- package/api/build/build.type.mjs +52 -8
- package/api/build/help/help.d.mts +12 -5
- package/api/build/help/help.mjs +69 -6
- 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 +13 -3
- package/api/component/component.mjs +91 -14
- package/api/component/component.test.mjs +38 -0
- package/api/component/component.type.d.mts +22 -11
- package/api/component/component.type.mjs +32 -24
- package/api/component/detail/blocks/blocks.d.mts +2 -1
- package/api/component/detail/blocks/blocks.mjs +4 -3
- package/api/component/list/list.d.mts +0 -5
- package/api/component/list/list.mjs +40 -11
- package/api/discover/_adapter.d.mts +114 -6
- package/api/discover/_adapter.mjs +372 -17
- package/api/discover/_adapter.test.mjs +215 -0
- package/api/discover/_catalog-view.d.mts +115 -0
- package/api/discover/_catalog-view.mjs +203 -0
- package/api/discover/_catalog-view.test.mjs +128 -0
- package/api/discover/detail/detail.d.mts +18 -6
- package/api/discover/detail/detail.mjs +67 -13
- package/api/discover/detail/detail.test.mjs +85 -0
- package/api/discover/detail/item/item.d.mts +26 -0
- package/api/discover/detail/item/item.mjs +78 -0
- package/api/discover/detail/item/item.test.mjs +73 -0
- package/api/discover/discover.d.mts +3 -9
- package/api/discover/discover.doc.mjs +62 -18
- package/api/discover/discover.mjs +220 -36
- package/api/discover/discover.test.mjs +11 -2
- package/api/discover/discover.type.d.mts +150 -11
- package/api/discover/discover.type.mjs +107 -17
- package/api/discover/list/list.d.mts +20 -6
- package/api/discover/list/list.mjs +45 -12
- package/api/discover/list/list.test.mjs +46 -0
- package/api/discover/search/search.d.mts +18 -16
- package/api/discover/search/search.mjs +102 -56
- package/api/discover/search/search.test.mjs +144 -10
- package/api/docs/_adapter.d.mts +268 -47
- package/api/docs/_adapter.mjs +970 -149
- package/api/docs/compiled-topics.test.mjs +78 -0
- package/api/docs/detail/detail.d.mts +0 -15
- package/api/docs/detail/detail.mjs +22 -78
- package/api/docs/detail/section/section.mjs +39 -24
- package/api/docs/detail/section/section.test.mjs +19 -9
- 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 +185 -6
- package/api/docs/docs.type.mjs +127 -13
- package/api/docs/index/index.mjs +15 -6
- 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 +332 -21
- package/api/doctor/doctor.test.mjs +420 -7
- package/api/gap-report/gap-report.doc.mjs +8 -4
- package/api/hook/_adapter.mjs +19 -5
- package/api/hook/hook.doc.mjs +1 -0
- package/api/hook/hook.type.d.mts +3 -3
- package/api/hook/hook.type.mjs +11 -11
- 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 +6 -1
- package/api/init/init.test.mjs +41 -1
- package/api/init/remove/remove.mjs +1 -1
- package/api/init/run/run.mjs +20 -10
- package/api/integration/add-contribution.component-names.test.mjs +120 -0
- package/api/integration/add-contribution.d.mts +2 -1
- package/api/integration/add-contribution.mjs +130 -15
- package/api/integration/add-contribution.test.mjs +258 -7
- package/api/integration/add-helpers.d.mts +5 -2
- package/api/integration/add-helpers.mjs +36 -9
- 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 +14 -4
- package/api/integration/integrationAddAgentDoc.doc.mjs +1 -0
- package/api/integration/integrationAddCodemod.doc.mjs +1 -0
- package/api/integration/integrationAddComponent.doc.mjs +2 -1
- 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 +83 -7
- package/api/integration/pack-check.test.mjs +387 -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 +52 -102
- package/api/integration/validate-integration.test.mjs +179 -26
- package/api/integration/validate-unread-theme-folders.test.mjs +110 -0
- package/api/integration/validateIntegration.doc.mjs +3 -2
- package/api/json/assertResponse.doc.mjs +1 -0
- package/api/json/envelope-types.test.mjs +76 -0
- package/api/json/index.ts +2 -0
- package/api/json/isError.doc.mjs +1 -0
- package/api/json/parseResponse.doc.mjs +3 -2
- package/api/layout/_adapter.mjs +20 -5
- package/api/layout/expand/expand.mjs +7 -5
- package/api/layout/expand/expand.path-safety.test.mjs +53 -0
- package/api/layout/grammar/grammar.mjs +2 -1
- package/api/layout/layoutCheck.doc.mjs +1 -0
- package/api/layout/layoutExpand.doc.mjs +2 -1
- package/api/layout/layoutGrammar.doc.mjs +1 -0
- package/api/search/search-return-type.test.mjs +54 -0
- package/api/search/search.d.mts +61 -10
- package/api/search/search.doc.mjs +8 -2
- package/api/search/search.mjs +471 -83
- package/api/search/search.test.mjs +124 -1
- package/api/search/search.type.d.mts +14 -2
- package/api/search/search.type.mjs +5 -2
- package/api/swizzle/copy/copy.mjs +28 -11
- package/api/swizzle/swizzle.doc.mjs +2 -1
- package/api/swizzle/swizzle.type.d.mts +2 -2
- package/api/swizzle/swizzle.type.mjs +2 -2
- package/api/template/copy/copy.mjs +17 -23
- package/api/template/copy/copy.test.mjs +17 -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 +30 -8
- package/api/template/template.mjs +45 -8
- package/api/template/template.type.d.mts +11 -13
- package/api/template/template.type.mjs +15 -14
- package/api/theme/_adapter.d.mts +2 -3
- package/api/theme/_adapter.mjs +4 -5
- package/api/theme/add/add.binary.test.mjs +84 -0
- package/api/theme/add/add.mjs +31 -22
- package/api/theme/add/add.rollback.test.mjs +158 -0
- package/api/theme/add/add.staging.test.mjs +83 -0
- package/api/theme/add/add.test.mjs +14 -1
- package/api/theme/build/build.family.test.mjs +7 -12
- package/api/theme/build/build.mjs +140 -59
- package/api/theme/build/build.public-component-vars.test.mjs +1 -1
- package/api/theme/build/build.receipt-doc.test.mjs +111 -0
- package/api/theme/build/build.rollback.test.mjs +148 -0
- package/api/theme/build/build.test.mjs +127 -0
- package/api/theme/build/font-warning.mjs +3 -3
- package/api/theme/build/font-warning.test.mjs +5 -2
- 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/palette/generate/generate.mjs +8 -3
- package/api/theme/palette/generate/generate.test.mjs +96 -0
- package/api/theme/palette/generate/generator.d.mts +10 -13
- package/api/theme/palette/generate/generator.mjs +15 -4
- package/api/theme/palette/generate/generator.test.mjs +10 -0
- package/api/theme/template/template.mjs +11 -2
- package/api/theme/template/template.test.mjs +20 -0
- package/api/theme/theme.type.d.mts +170 -11
- package/api/theme/theme.type.mjs +94 -27
- package/api/theme/themeAdd.doc.mjs +4 -3
- package/api/theme/themeBuild.doc.mjs +8 -4
- 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 +6 -2
- package/api/upgrade/_adapter.d.mts +32 -5
- package/api/upgrade/_adapter.mjs +124 -73
- package/api/upgrade/list/list.mjs +2 -1
- package/api/upgrade/list/list.test.mjs +73 -0
- package/api/upgrade/provider-agreement.test.mjs +152 -0
- package/api/upgrade/run/run.mjs +356 -59
- package/api/upgrade/status/status.mjs +2 -2
- package/api/upgrade/upgrade.doc.mjs +8 -2
- package/api/upgrade/upgrade.type.d.mts +42 -4
- package/api/upgrade/upgrade.type.mjs +26 -10
- package/assets/codemods/__tests__/runner.test.mjs +330 -8
- package/assets/codemods/integration-discovery.mjs +48 -4
- package/assets/codemods/integration-discovery.test.mjs +73 -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/term-log.mjs +32 -8
- package/assets/codemods/term-log.test.mjs +19 -1
- package/assets/codemods/transform-prop.mjs +109 -0
- package/assets/codemods/transform-prop.test.mjs +95 -0
- 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/codemods/transforms/v0.0.14/__tests__/rename-status-variants.test.mjs +86 -165
- package/assets/codemods/transforms/v0.0.14/rename-status-variants.mjs +72 -210
- package/assets/codemods/transforms/v0.1.8/__tests__/rename-avatar-size-scale.test.mjs +83 -115
- package/assets/codemods/transforms/v0.1.8/rename-avatar-size-scale.mjs +57 -186
- package/assets/codemods/transforms/v0.3.0/__tests__/unwrap-authoring-factories.test.mjs +27 -5
- package/assets/codemods/transforms/v0.3.0/unwrap-authoring-factories.mjs +20 -5
- package/assets/codemods/transforms/v0.6.0/__tests__/next-codemods.test.mjs +47 -0
- package/assets/codemods/transforms/v0.6.0/rename-resizable-pixel-bounds.mjs +57 -10
- package/assets/docs/getting-started.doc.mjs +2 -2
- package/assets/docs/internationalization.doc.mjs +7 -5
- 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 +4 -4
- 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} +95 -39
- 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 +4 -4
- 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/InternationalizationProvider/InternationalizationProvider01ShippedLocale.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/ScrollableArea/ScrollableAreaInlineRail.doc.mjs +14 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaInlineRail.tsx +61 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaOverscrollChaining.doc.mjs +14 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaOverscrollChaining.tsx +126 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaShowcase.doc.mjs +15 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaShowcase.tsx +86 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyGroupHeaders.doc.mjs +14 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyGroupHeaders.tsx +99 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyPassthrough.doc.mjs +14 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyPassthrough.tsx +122 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaTwoAxisBoard.doc.mjs +14 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaTwoAxisBoard.tsx +95 -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/pages/table-tree/page.tsx +1704 -0
- package/assets/templates/pages/table-tree/template.doc.mjs +12 -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/_shared/contract.ts +22 -0
- package/authoring/codemod/codemod.doc.mjs +7 -2
- package/authoring/codemod/parse.d.mts +8 -8
- package/authoring/codemod/parse.mjs +8 -6
- package/authoring/codemod/type.ts +12 -0
- package/authoring/config/config.doc.mjs +10 -2
- package/authoring/config/debug-composition.test.mjs +92 -0
- package/authoring/config/parse.d.mts +15 -13
- package/authoring/config/parse.mjs +27 -8
- package/authoring/config/parse.test.mjs +8 -0
- package/authoring/config/type.ts +29 -6
- package/authoring/debug/debug.doc.d.mts +11 -0
- package/authoring/debug/debug.doc.mjs +182 -0
- package/authoring/debug/parse.d.mts +7 -7
- package/authoring/debug/parse.mjs +3 -3
- package/authoring/discover/discover.doc.d.mts +13 -0
- package/authoring/discover/discover.doc.mjs +138 -0
- package/authoring/discover/parse.d.mts +24 -0
- package/authoring/discover/parse.mjs +128 -0
- package/authoring/discover/parse.test.mjs +124 -0
- package/authoring/discover/type.ts +87 -0
- package/authoring/doctypes/_schema.d.mts +240 -128
- package/authoring/doctypes/_schema.mjs +198 -16
- package/authoring/doctypes/base/graph-fields.doc.mjs +15 -6
- package/authoring/doctypes/base/type.ts +9 -4
- package/authoring/doctypes/command/command.doc.mjs +4 -3
- package/authoring/doctypes/command/parse.d.mts +2 -2
- package/authoring/doctypes/command/parse.mjs +1 -1
- package/authoring/doctypes/command/type.ts +4 -4
- package/authoring/doctypes/component/component.doc.mjs +5 -2
- package/authoring/doctypes/component/parse.d.mts +2 -2
- package/authoring/doctypes/component/parse.mjs +1 -1
- package/authoring/doctypes/component/type.ts +3 -3
- package/authoring/doctypes/doctypes-new.test.mjs +48 -6
- package/authoring/doctypes/enum/enum.doc.mjs +1 -1
- package/authoring/doctypes/enum/parse.d.mts +2 -2
- package/authoring/doctypes/enum/parse.mjs +1 -1
- package/authoring/doctypes/enum/type.ts +2 -2
- package/authoring/doctypes/function/function.doc.mjs +7 -2
- package/authoring/doctypes/function/parse.d.mts +2 -2
- package/authoring/doctypes/function/parse.mjs +1 -1
- package/authoring/doctypes/function/type.ts +4 -3
- package/authoring/doctypes/hook/hook.doc.mjs +4 -0
- package/authoring/doctypes/hook/parse.d.mts +2 -2
- package/authoring/doctypes/hook/parse.mjs +1 -1
- package/authoring/doctypes/hook/type.ts +3 -3
- package/authoring/doctypes/legacy.d.mts +6 -6
- package/authoring/doctypes/legacy.mjs +3 -3
- package/authoring/doctypes/load-contract.test.mjs +233 -0
- package/authoring/doctypes/namespace/namespace.doc.mjs +9 -9
- package/authoring/doctypes/namespace/parse.d.mts +2 -2
- package/authoring/doctypes/namespace/parse.mjs +1 -1
- package/authoring/doctypes/namespace/parse.test.mjs +23 -25
- package/authoring/doctypes/namespace/type.ts +6 -3
- package/authoring/doctypes/parse.d.mts +22 -20
- package/authoring/doctypes/parse.mjs +19 -14
- package/authoring/doctypes/reference/parse.d.mts +2 -2
- package/authoring/doctypes/reference/parse.mjs +1 -1
- package/authoring/doctypes/reference/reference.doc.mjs +39 -6
- package/authoring/doctypes/reference/type.ts +31 -14
- package/authoring/doctypes/schema/parse.d.mts +2 -2
- package/authoring/doctypes/schema/parse.mjs +1 -1
- package/authoring/doctypes/schema/schema.doc.mjs +1 -1
- package/authoring/doctypes/schema/type.ts +3 -4
- package/authoring/doctypes/template/parse.d.mts +94 -1
- package/authoring/doctypes/template/parse.mjs +37 -1
- package/authoring/doctypes/template/parse.test.mjs +18 -0
- package/authoring/doctypes/template/template.doc.mjs +13 -3
- package/authoring/doctypes/template/type.ts +12 -1
- 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 +12 -11
- package/authoring/gap-report/gap-report.doc.d.mts +12 -0
- package/authoring/gap-report/gap-report.doc.mjs +183 -0
- package/authoring/gap-report/parse.d.mts +9 -9
- package/authoring/gap-report/parse.mjs +6 -6
- package/authoring/gap-report/type.ts +1 -1
- package/authoring/identity/identity.doc.mjs +3 -2
- package/authoring/identity/type.ts +10 -10
- package/authoring/index.d.mts +2 -0
- package/authoring/index.d.ts +32 -19
- package/authoring/index.mjs +3 -1
- package/authoring/integration/integration.doc.mjs +2 -2
- package/authoring/integration/parse.d.mts +2 -2
- package/authoring/integration/parse.mjs +1 -1
- package/authoring/integration/schema.d.mts +4 -4
- package/authoring/integration/schema.mjs +3 -3
- package/authoring/integration/type.ts +5 -11
- package/clients/cli/__tests__/cliManifest.test.ts +27 -29
- package/clients/cli/command-load-failure.test.mjs +83 -0
- package/clients/cli/commands/blog.doc.mjs +1 -1
- package/clients/cli/commands/blog.mjs +23 -8
- package/clients/cli/commands/blog.test.mjs +42 -1
- package/clients/cli/commands/build-theme.adaptations.test.mjs +100 -1
- package/clients/cli/commands/build-theme.ascii-output.test.mjs +161 -0
- package/clients/cli/commands/build-theme.flag-docs.test.mjs +110 -0
- package/clients/cli/commands/build-theme.mjs +16 -50
- package/clients/cli/commands/build-theme.path-safety.test.mjs +86 -1
- package/clients/cli/commands/build-theme.variants.test.mjs +76 -0
- package/clients/cli/commands/build.doc.mjs +16 -8
- package/clients/cli/commands/build.exit-codes-doc.test.mjs +50 -0
- package/clients/cli/commands/build.mjs +137 -114
- package/clients/cli/commands/build.playbook.test.mjs +75 -0
- package/clients/cli/commands/build.text-fields.test.mjs +81 -0
- package/clients/cli/commands/component/index.mjs +3 -8
- package/clients/cli/commands/component-ownership.test.mjs +3 -3
- package/clients/cli/commands/component-package.test.mjs +46 -0
- package/clients/cli/commands/component-resolution.test.mjs +21 -0
- package/clients/cli/commands/component.doc.mjs +1 -1
- package/clients/cli/commands/component.test.mjs +19 -0
- package/clients/cli/commands/detail-levels.test.mjs +2 -2
- package/clients/cli/commands/discover.broken-integration.test.mjs +52 -5
- package/clients/cli/commands/discover.components-flag.test.mjs +97 -0
- package/clients/cli/commands/discover.doc.mjs +55 -9
- package/clients/cli/commands/discover.mjs +393 -118
- package/clients/cli/commands/discover.sources.test.mjs +267 -0
- package/clients/cli/commands/discover.text-projection.test.mjs +103 -0
- 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.package-json.test.mjs +53 -0
- 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 +59 -32
- package/clients/cli/commands/doctor.test.mjs +42 -0
- package/clients/cli/commands/gap-report.doc.mjs +17 -6
- package/clients/cli/commands/gap-report.test.mjs +72 -0
- package/clients/cli/commands/hook/index.mjs +7 -17
- package/clients/cli/commands/hook.doc.mjs +1 -1
- package/clients/cli/commands/hook.text-projection.test.mjs +45 -0
- package/clients/cli/commands/init.doc.mjs +20 -9
- package/clients/cli/commands/init.flag-help.test.mjs +153 -0
- package/clients/cli/commands/integration-add.controls.test.mjs +132 -0
- package/clients/cli/commands/integration-add.doc.mjs +32 -6
- package/clients/cli/commands/integration-authoring.test.mjs +13 -9
- 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/interactive-guard.test.mjs +101 -24
- package/clients/cli/commands/json-contract.test.mjs +33 -0
- package/clients/cli/commands/layout-check.doc.mjs +15 -4
- package/clients/cli/commands/layout-expand.doc.mjs +22 -5
- package/clients/cli/commands/layout-grammar.doc.mjs +1 -1
- package/clients/cli/commands/layout.doc.mjs +3 -3
- package/clients/cli/commands/layout.mjs +21 -9
- package/clients/cli/commands/layout.path-help.test.mjs +33 -0
- package/clients/cli/commands/layout.stdin-cap.test.mjs +47 -0
- package/clients/cli/commands/layout.text-fields.test.mjs +39 -0
- package/clients/cli/commands/manifest.doc.mjs +1 -1
- package/clients/cli/commands/no-prompt-wording.test.mjs +94 -0
- package/clients/cli/commands/search.doc.mjs +7 -4
- package/clients/cli/commands/search.mjs +28 -9
- package/clients/cli/commands/search.test.mjs +75 -0
- package/clients/cli/commands/setup-nudge.test.mjs +6 -0
- package/clients/cli/commands/swizzle.doc.mjs +3 -2
- package/clients/cli/commands/swizzle.path-safety.test.mjs +42 -0
- package/clients/cli/commands/template.doc.mjs +52 -13
- package/clients/cli/commands/template.flag-help.test.mjs +117 -0
- package/clients/cli/commands/template.mjs +4 -91
- package/clients/cli/commands/template.path-help.test.mjs +40 -0
- package/clients/cli/commands/text-json-parity.test.mjs +719 -0
- package/clients/cli/commands/theme-add.doc.mjs +4 -3
- package/clients/cli/commands/theme-build.doc.mjs +8 -7
- 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-generate.test.mjs +19 -0
- 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.behavior.test.mjs +12 -0
- package/clients/cli/commands/theme-template.doc.mjs +2 -2
- package/clients/cli/commands/theme.doc.mjs +1 -1
- package/clients/cli/commands/upgrade.ascii-output.test.mjs +87 -0
- package/clients/cli/commands/upgrade.doc.mjs +20 -8
- package/clients/cli/commands/upgrade.file-protection.test.mjs +228 -0
- package/clients/cli/commands/upgrade.flag-help.test.mjs +188 -0
- package/clients/cli/commands/upgrade.hook-output.test.mjs +88 -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 +21 -30
- package/clients/cli/latest-version-env.test.mjs +50 -0
- package/clients/cli/lib/cli-error.test.mjs +7 -0
- package/clients/cli/lib/component-format.mjs +9 -9
- package/clients/cli/lib/component-format.test.mjs +1 -1
- package/clients/cli/lib/define-command.mjs +32 -6
- package/clients/cli/lib/doc-text-ascii.test.mjs +82 -0
- package/clients/cli/lib/exit-codes.test.mjs +97 -0
- package/clients/cli/lib/hook-format.mjs +19 -10
- package/clients/cli/lib/json-shim.mjs +38 -2
- package/clients/cli/lib/json-shim.test.mjs +83 -0
- package/clients/cli/lib/manifest.d.ts +2 -0
- package/clients/cli/lib/manifest.mjs +32 -2
- package/clients/cli/lib/manifest.test.mjs +17 -0
- package/foundation/agent-docs/agent-docs.d.mts +7 -2
- package/foundation/agent-docs/agent-docs.mjs +82 -12
- package/foundation/agent-docs/agent-docs.path-safety.test.mjs +266 -4
- package/foundation/agent-docs/agent-docs.test.mjs +19 -1
- package/foundation/config/integration-debug.test.mjs +28 -3
- package/foundation/config/project-themes.test.mjs +11 -19
- package/foundation/config/project.d.mts +20 -11
- package/foundation/config/project.mjs +246 -89
- package/foundation/config/project.test.mjs +270 -21
- package/foundation/discovery/authoring-self-docs.d.mts +18 -0
- package/foundation/discovery/authoring-self-docs.mjs +38 -15
- package/foundation/discovery/authoring-self-docs.test.mjs +87 -12
- 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 +114 -9
- package/foundation/discovery/docs-discovery.mjs +239 -30
- package/foundation/discovery/docs-discovery.test.mjs +150 -35
- 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 +113 -11
- package/foundation/discovery/template-adapter.fixture-refs.test.mjs +248 -0
- package/foundation/discovery/template-adapter.integration-isolation.test.mjs +94 -0
- package/foundation/discovery/template-adapter.mjs +772 -82
- 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/discovery/theming-targets.test.mjs +4 -0
- 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 +343 -0
- package/foundation/doc-compiler/compile.mjs +558 -0
- 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 +714 -0
- 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 +22 -0
- package/foundation/doc-compiler/ir.mjs +471 -0
- package/foundation/doc-compiler/lenses.d.mts +36 -0
- package/foundation/doc-compiler/lenses.mjs +173 -0
- 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/fs/module-loader.d.mts +1 -0
- package/foundation/fs/module-loader.mjs +50 -1
- package/foundation/fs/module-loader.stdout.test.mjs +332 -0
- package/foundation/fs/path-safety.d.mts +3 -2
- package/foundation/fs/path-safety.mjs +49 -19
- package/foundation/fs/path-safety.test.mjs +50 -0
- package/foundation/fs/publish-file-hardlink-unavailable.test.mjs +129 -94
- package/foundation/integrations/autolink.d.mts +58 -1
- package/foundation/integrations/autolink.mjs +143 -52
- 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 +17 -1
- package/foundation/integrations/integrations.mjs +52 -98
- package/foundation/integrations/integrations.test.mjs +31 -0
- 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/base.d.ts +8 -4
- 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 +13 -4
- package/foundation/response/error-codes.mjs +8 -2
- package/foundation/response/error-codes.test.mjs +137 -10
- package/foundation/response/json-contract.test.mjs +11 -0
- package/foundation/response/json.d.mts +4 -2
- package/foundation/response/json.mjs +8 -10
- package/foundation/response/response-types.doc.d.mts +5 -1
- package/foundation/response/response-types.doc.mjs +37 -22
- package/foundation/response/response-types.doc.test.mjs +158 -0
- 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.d.mts +2 -0
- package/foundation/xle/expand.mjs +4 -3
- package/foundation/xle/expand.test.mjs +54 -0
- package/foundation/xle/xle.test.mjs +13 -0
- package/package.json +10 -11
- package/assets/templates/themes/manifest.json +0 -95
- package/clients/cli/lib/update-check.mjs +0 -83
- package/clients/cli/lib/update-check.test.mjs +0 -137
- package/clients/cli/update-hint-commands.test.mjs +0 -54
package/api/upgrade/run/run.mjs
CHANGED
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
* integration; execution errors abort before the agent-doc write.
|
|
18
18
|
*/
|
|
19
19
|
|
|
20
|
+
import * as fs from 'node:fs';
|
|
20
21
|
import * as path from 'node:path';
|
|
21
22
|
import {
|
|
22
23
|
detectInstalledTargetVersion,
|
|
@@ -47,7 +48,58 @@ import {getCliInvocation} from '../../../foundation/env/package-manager.mjs';
|
|
|
47
48
|
import {ERROR_CODES} from '../../../foundation/response/error-codes.mjs';
|
|
48
49
|
import {AstryxError} from '../../error.mjs';
|
|
49
50
|
import {logger} from '../../logger.mjs';
|
|
50
|
-
import {
|
|
51
|
+
import {
|
|
52
|
+
assertWithin,
|
|
53
|
+
PathSafetyError,
|
|
54
|
+
} from '../../../foundation/fs/path-safety.mjs';
|
|
55
|
+
import {createFileProtectionResolver} from '../../../foundation/fs/file-protection.mjs';
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Collapse per-codemod protection hits into one stable row per file.
|
|
59
|
+
* @param {Array<{file: string, codemod: string, reason: string, declaration: string, generated: boolean, command?: string}>} rows
|
|
60
|
+
*/
|
|
61
|
+
function summarizeProtectedFiles(rows) {
|
|
62
|
+
const byFile = new Map();
|
|
63
|
+
for (const row of rows) {
|
|
64
|
+
const current = byFile.get(row.file) ?? {
|
|
65
|
+
file: row.file,
|
|
66
|
+
codemods: new Set(),
|
|
67
|
+
reasons: new Set(),
|
|
68
|
+
declarations: new Set(),
|
|
69
|
+
commands: new Set(),
|
|
70
|
+
};
|
|
71
|
+
current.codemods.add(row.codemod);
|
|
72
|
+
current.reasons.add(row.reason);
|
|
73
|
+
current.declarations.add(row.declaration);
|
|
74
|
+
if (row.command) current.commands.add(row.command);
|
|
75
|
+
byFile.set(row.file, current);
|
|
76
|
+
}
|
|
77
|
+
return [...byFile.values()]
|
|
78
|
+
.map(item => ({
|
|
79
|
+
file: item.file,
|
|
80
|
+
codemods: [...item.codemods].sort(),
|
|
81
|
+
reasons: [...item.reasons].sort(),
|
|
82
|
+
declarations: [...item.declarations].sort(),
|
|
83
|
+
commands: [...item.commands].sort(),
|
|
84
|
+
}))
|
|
85
|
+
.sort((a, b) => a.file.localeCompare(b.file));
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/** @param {string} cwd */
|
|
89
|
+
function loadFileProtection(cwd) {
|
|
90
|
+
try {
|
|
91
|
+
return createFileProtectionResolver(cwd);
|
|
92
|
+
} catch (err) {
|
|
93
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
94
|
+
logger.error(message);
|
|
95
|
+
logger.log('Upgrade failed\n');
|
|
96
|
+
throw new AstryxError(
|
|
97
|
+
message,
|
|
98
|
+
undefined,
|
|
99
|
+
ERROR_CODES.ERR_CODEMOD_PROTECTION_SOURCE,
|
|
100
|
+
);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
51
103
|
|
|
52
104
|
/**
|
|
53
105
|
* Run the upgrade pipeline for a validated, non-list invocation. Returns the
|
|
@@ -75,7 +127,11 @@ export async function run(options = {}, {cwd = process.cwd()} = {}) {
|
|
|
75
127
|
if (err instanceof PathSafetyError) {
|
|
76
128
|
logger.error(err.message);
|
|
77
129
|
logger.log('Aborted\n');
|
|
78
|
-
throw new AstryxError(
|
|
130
|
+
throw new AstryxError(
|
|
131
|
+
err.message,
|
|
132
|
+
undefined,
|
|
133
|
+
ERROR_CODES.ERR_PATH_TRAVERSAL,
|
|
134
|
+
);
|
|
79
135
|
}
|
|
80
136
|
throw err;
|
|
81
137
|
}
|
|
@@ -133,7 +189,10 @@ export async function run(options = {}, {cwd = process.cwd()} = {}) {
|
|
|
133
189
|
});
|
|
134
190
|
}
|
|
135
191
|
|
|
136
|
-
const versionManifests = await getCoreVersionManifests(
|
|
192
|
+
const versionManifests = await getCoreVersionManifests(
|
|
193
|
+
currentVersion,
|
|
194
|
+
targetVersion,
|
|
195
|
+
);
|
|
137
196
|
|
|
138
197
|
const coreConfigCodemodNames = [];
|
|
139
198
|
for (const {transforms} of versionManifests) {
|
|
@@ -157,6 +216,11 @@ export async function run(options = {}, {cwd = process.cwd()} = {}) {
|
|
|
157
216
|
}
|
|
158
217
|
}
|
|
159
218
|
|
|
219
|
+
// Read and parse all working-tree protection declarations before any
|
|
220
|
+
// dependency installation or codemod write. Core and integration runners
|
|
221
|
+
// share this exact snapshot.
|
|
222
|
+
let protection = loadFileProtection(cwd);
|
|
223
|
+
|
|
160
224
|
const ready = await ensureCodemodDeps({installDeps: options.installDeps});
|
|
161
225
|
if (!ready) {
|
|
162
226
|
const msg = 'jscodeshift is required but could not be installed.';
|
|
@@ -171,34 +235,82 @@ export async function run(options = {}, {cwd = process.cwd()} = {}) {
|
|
|
171
235
|
path: path_,
|
|
172
236
|
codemod: options.codemod,
|
|
173
237
|
skipCodemods,
|
|
238
|
+
root: cwd,
|
|
239
|
+
protection,
|
|
174
240
|
});
|
|
175
|
-
const coreResult =
|
|
241
|
+
const coreResult =
|
|
242
|
+
codemodResult && 'totalFilesChanged' in codemodResult
|
|
243
|
+
? codemodResult
|
|
244
|
+
: null;
|
|
176
245
|
|
|
177
246
|
/** @type {Array<import('../../../foundation/integrations/integrations.mjs').LoadedIntegration>} */
|
|
178
247
|
let integrations;
|
|
179
248
|
/** @type {import('../../../authoring/config/type').PostCodemodHook[]} */
|
|
180
249
|
let postCodemodHooks;
|
|
181
250
|
try {
|
|
182
|
-
const projectContext = await loadProjectContext(
|
|
251
|
+
const projectContext = await loadProjectContext(
|
|
252
|
+
cwd,
|
|
253
|
+
options.integration ?? [],
|
|
254
|
+
);
|
|
183
255
|
postCodemodHooks = projectContext.postCodemodHooks;
|
|
184
256
|
integrations = projectContext.integrations;
|
|
185
257
|
} catch (err) {
|
|
186
258
|
const configErr = /** @type {Error} */ (err);
|
|
259
|
+
const allProtected = coreResult?.protectedFiles ?? [];
|
|
260
|
+
if (allProtected.length > 0) {
|
|
261
|
+
const protectedFiles = summarizeProtectedFiles(allProtected);
|
|
262
|
+
logger.error(
|
|
263
|
+
`${ERROR_CODES.ERR_CODEMOD_PROTECTED}: protected codemod changes remain while loading the Astryx config.`,
|
|
264
|
+
);
|
|
265
|
+
for (const item of protectedFiles) {
|
|
266
|
+
logger.error(` ${item.file} — ${item.declarations.join('; ')}`);
|
|
267
|
+
}
|
|
268
|
+
logger.log('Upgrade incomplete: protected changes remain\n');
|
|
269
|
+
return {
|
|
270
|
+
type: 'upgrade.run',
|
|
271
|
+
data: {
|
|
272
|
+
from: currentVersion,
|
|
273
|
+
to: targetVersion,
|
|
274
|
+
codemods: totalTransforms,
|
|
275
|
+
integrations: [],
|
|
276
|
+
agentDocsRefreshed: false,
|
|
277
|
+
agentDocs: {
|
|
278
|
+
status: 'current',
|
|
279
|
+
installedVersion: targetVersion,
|
|
280
|
+
fromVersions: [],
|
|
281
|
+
files: [],
|
|
282
|
+
refreshed: false,
|
|
283
|
+
action: 'none',
|
|
284
|
+
},
|
|
285
|
+
filesChanged: coreResult?.totalFilesChanged ?? 0,
|
|
286
|
+
transformsApplied: coreResult?.totalTransformsApplied ?? 0,
|
|
287
|
+
modifiedFiles: uniqueFiles(coreResult?.changedFiles).map(file =>
|
|
288
|
+
path.relative(cwd, file).split(path.sep).join('/'),
|
|
289
|
+
),
|
|
290
|
+
protectedFiles,
|
|
291
|
+
declinedCandidates: [],
|
|
292
|
+
complete: false,
|
|
293
|
+
errorCode: 'ERR_CODEMOD_PROTECTED',
|
|
294
|
+
errors: coreResult?.errors ?? [],
|
|
295
|
+
},
|
|
296
|
+
};
|
|
297
|
+
}
|
|
187
298
|
// Graceful dry-run catch: a config that fails strict validation is expected
|
|
188
299
|
// & fixable ONLY when dry-run AND a pending core config codemod previewed a
|
|
189
300
|
// change (the codemod that would repair it).
|
|
190
|
-
const codemodWouldFixConfig =
|
|
301
|
+
const codemodWouldFixConfig =
|
|
302
|
+
hasCoreConfigCodemod && (coreResult?.totalFilesChanged ?? 0) > 0;
|
|
191
303
|
if (!apply && codemodWouldFixConfig) {
|
|
192
304
|
// Lightweight inspection — no config/Project load (config is still broken
|
|
193
305
|
// in dry-run; the codemod previewed a fix but did not write it).
|
|
194
306
|
const inspection = inspectAgentDocs(cwd, targetVersion);
|
|
195
|
-
return statusConfigFixable(
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
307
|
+
return statusConfigFixable({
|
|
308
|
+
from: currentVersion,
|
|
309
|
+
to: targetVersion,
|
|
310
|
+
configError: configErr.message,
|
|
311
|
+
configCodemods: coreConfigCodemodNames,
|
|
312
|
+
agentDocs:
|
|
313
|
+
/** @type {import('../upgrade.type.mjs').AgentDocsSummary} */ ({
|
|
202
314
|
status: inspection.status,
|
|
203
315
|
installedVersion: targetVersion,
|
|
204
316
|
fromVersions: inspection.blockVersions,
|
|
@@ -206,17 +318,22 @@ export async function run(options = {}, {cwd = process.cwd()} = {}) {
|
|
|
206
318
|
refreshed: false,
|
|
207
319
|
action: inspection.status === 'missing' ? 'nudge-init' : 'none',
|
|
208
320
|
}),
|
|
209
|
-
|
|
210
|
-
);
|
|
321
|
+
});
|
|
211
322
|
}
|
|
212
323
|
// Genuine config error: abort.
|
|
213
324
|
logger.error(configErr.message);
|
|
214
325
|
logger.log('Aborted\n');
|
|
215
|
-
throw new AstryxError(
|
|
326
|
+
throw new AstryxError(
|
|
327
|
+
configErr.message,
|
|
328
|
+
undefined,
|
|
329
|
+
ERROR_CODES.ERR_INVALID_ARGUMENT,
|
|
330
|
+
);
|
|
216
331
|
}
|
|
217
332
|
|
|
218
333
|
if (integrations.length > 0) {
|
|
219
|
-
logger.log(
|
|
334
|
+
logger.log(
|
|
335
|
+
`Integrations: ${integrations.map(i => i.name ?? i.__spec).join(', ')}`,
|
|
336
|
+
);
|
|
220
337
|
}
|
|
221
338
|
|
|
222
339
|
// Non-blocking nudge for integration validation issues (suppressed for
|
|
@@ -228,7 +345,9 @@ export async function run(options = {}, {cwd = process.cwd()} = {}) {
|
|
|
228
345
|
currentVersion,
|
|
229
346
|
targetVersion,
|
|
230
347
|
);
|
|
231
|
-
const hasIntegrationCodemods = integrationVersionGroups.some(
|
|
348
|
+
const hasIntegrationCodemods = integrationVersionGroups.some(
|
|
349
|
+
g => g.codemods.length > 0,
|
|
350
|
+
);
|
|
232
351
|
|
|
233
352
|
for (const {codemods} of integrationVersionGroups) {
|
|
234
353
|
for (const c of codemods) {
|
|
@@ -266,14 +385,14 @@ export async function run(options = {}, {cwd = process.cwd()} = {}) {
|
|
|
266
385
|
}
|
|
267
386
|
|
|
268
387
|
if (totalTransforms > 0) {
|
|
269
|
-
logger.log(
|
|
388
|
+
logger.log(
|
|
389
|
+
`${totalTransforms} codemod${totalTransforms === 1 ? '' : 's'} to run${apply ? '' : ' (dry run)'}`,
|
|
390
|
+
);
|
|
270
391
|
} else {
|
|
271
392
|
logger.log('No automatic codemods to run for this version range.');
|
|
272
393
|
}
|
|
273
394
|
|
|
274
|
-
/**
|
|
275
|
-
* @type {{from: string, to: string, codemods: number, integrations: string[], agentDocsRefreshed: boolean, agentDocs: import('../upgrade.type.mjs').AgentDocsSummary, registryCompositions?: import('../upgrade.type.mjs').RegistryCompositionSummary, filesChanged?: number, transformsApplied?: number, errors?: Array<{file: string, codemod: string, error: string}>}}
|
|
276
|
-
*/
|
|
395
|
+
/** @type {import('../upgrade.type.mjs').UpgradeRunResponse['data']} */
|
|
277
396
|
const receipt = {
|
|
278
397
|
from: currentVersion,
|
|
279
398
|
to: targetVersion,
|
|
@@ -281,79 +400,257 @@ export async function run(options = {}, {cwd = process.cwd()} = {}) {
|
|
|
281
400
|
integrations: integrations.map(i => i.name ?? i.__spec),
|
|
282
401
|
agentDocsRefreshed: false,
|
|
283
402
|
agentDocs: /** @type {import('../upgrade.type.mjs').AgentDocsSummary} */ ({
|
|
284
|
-
status: 'current',
|
|
285
|
-
|
|
403
|
+
status: 'current',
|
|
404
|
+
installedVersion: targetVersion,
|
|
405
|
+
fromVersions: [],
|
|
406
|
+
files: [],
|
|
407
|
+
refreshed: false,
|
|
408
|
+
action: 'none',
|
|
286
409
|
}),
|
|
287
410
|
};
|
|
288
411
|
|
|
289
412
|
let integrationResult = null;
|
|
290
413
|
if (hasIntegrationCodemods) {
|
|
414
|
+
const coreStagedContents = coreResult?.stagedContents;
|
|
415
|
+
if (
|
|
416
|
+
(coreResult?.writtenFiles.length ?? 0) > 0 ||
|
|
417
|
+
(coreStagedContents?.size ?? 0) > 0
|
|
418
|
+
) {
|
|
419
|
+
protection = createFileProtectionResolver(cwd, {
|
|
420
|
+
overrides: coreStagedContents,
|
|
421
|
+
});
|
|
422
|
+
}
|
|
291
423
|
logger.log('Applying integration codemods...');
|
|
292
|
-
integrationResult = await runIntegrationCodemodsStep(
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
424
|
+
integrationResult = await runIntegrationCodemodsStep(
|
|
425
|
+
integrationVersionGroups,
|
|
426
|
+
{
|
|
427
|
+
apply,
|
|
428
|
+
path: path_,
|
|
429
|
+
codemod: options.codemod,
|
|
430
|
+
skipCodemods,
|
|
431
|
+
root: cwd,
|
|
432
|
+
protection,
|
|
433
|
+
contents: coreStagedContents,
|
|
434
|
+
},
|
|
435
|
+
);
|
|
298
436
|
}
|
|
299
437
|
|
|
300
438
|
const registryResult = await reconcileCompositions();
|
|
301
439
|
|
|
302
|
-
const mergedFilesChanged =
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
440
|
+
const mergedFilesChanged =
|
|
441
|
+
(coreResult?.totalFilesChanged ?? 0) +
|
|
442
|
+
(integrationResult?.totalFilesChanged ?? 0);
|
|
443
|
+
const mergedTransformsApplied =
|
|
444
|
+
(coreResult?.totalTransformsApplied ?? 0) +
|
|
445
|
+
(integrationResult?.totalTransformsApplied ?? 0);
|
|
446
|
+
const mergedChangedFiles = [
|
|
447
|
+
...(coreResult?.changedFiles ?? []),
|
|
448
|
+
...(integrationResult?.changedFiles ?? []),
|
|
307
449
|
...(registryResult?.writtenFiles ?? []),
|
|
308
450
|
];
|
|
309
|
-
const mergedErrors = [
|
|
451
|
+
const mergedErrors = [
|
|
452
|
+
...(coreResult?.errors ?? []),
|
|
453
|
+
...(integrationResult?.errors ?? []),
|
|
454
|
+
];
|
|
455
|
+
let finalErrors = mergedErrors;
|
|
456
|
+
/** @type {string|undefined} */
|
|
457
|
+
let hookFailure;
|
|
458
|
+
const initialProtected = [
|
|
459
|
+
...(coreResult?.protectedFiles ?? []),
|
|
460
|
+
...(integrationResult?.protectedFiles ?? []),
|
|
461
|
+
];
|
|
310
462
|
const registryFilesChanged = registryResult?.writtenFiles.length ?? 0;
|
|
463
|
+
const generatedChangeBlocked = initialProtected.some(item => item.generated);
|
|
464
|
+
const shouldRunHooks =
|
|
465
|
+
postCodemodHooks.length > 0 &&
|
|
466
|
+
(mergedFilesChanged > 0 ||
|
|
467
|
+
registryFilesChanged > 0 ||
|
|
468
|
+
generatedChangeBlocked);
|
|
469
|
+
/** @type {Map<string, Buffer>} */
|
|
470
|
+
const protectedBeforeHooks = new Map();
|
|
471
|
+
if (apply && shouldRunHooks) {
|
|
472
|
+
for (const item of initialProtected) {
|
|
473
|
+
const absolute = path.resolve(cwd, item.file);
|
|
474
|
+
const relative = path.relative(cwd, absolute);
|
|
475
|
+
if (
|
|
476
|
+
relative.startsWith(`..${path.sep}`) ||
|
|
477
|
+
relative === '..' ||
|
|
478
|
+
path.isAbsolute(relative)
|
|
479
|
+
)
|
|
480
|
+
continue;
|
|
481
|
+
try {
|
|
482
|
+
if (fs.lstatSync(absolute).isFile()) {
|
|
483
|
+
protectedBeforeHooks.set(absolute, fs.readFileSync(absolute));
|
|
484
|
+
}
|
|
485
|
+
} catch {
|
|
486
|
+
// A candidate can disappear between planning and regeneration.
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
/** @type {string[]} */
|
|
491
|
+
const hookModifiedFiles = [];
|
|
311
492
|
|
|
312
|
-
if (
|
|
313
|
-
const files = uniqueFiles(
|
|
493
|
+
if (shouldRunHooks) {
|
|
494
|
+
const files = uniqueFiles(mergedChangedFiles).map(file =>
|
|
495
|
+
path.relative(cwd, file),
|
|
496
|
+
);
|
|
314
497
|
try {
|
|
315
|
-
await runPostCodemodHooks(postCodemodHooks, {
|
|
498
|
+
await runPostCodemodHooks(postCodemodHooks, {
|
|
499
|
+
packageDir: cwd,
|
|
500
|
+
files,
|
|
501
|
+
apply: apply || false,
|
|
502
|
+
});
|
|
316
503
|
} catch (err) {
|
|
317
504
|
const hookErr = /** @type {Error} */ (err);
|
|
318
505
|
const msg = `Post-codemod hook failed: ${hookErr.message}`;
|
|
319
506
|
logger.error(msg);
|
|
320
|
-
|
|
321
|
-
|
|
507
|
+
if (initialProtected.length === 0) {
|
|
508
|
+
logger.log('Upgrade failed\n');
|
|
509
|
+
throw new AstryxError(msg, undefined, ERROR_CODES.ERR_CODEMOD_FAILED);
|
|
510
|
+
}
|
|
511
|
+
hookFailure = msg;
|
|
512
|
+
finalErrors = [
|
|
513
|
+
...mergedErrors,
|
|
514
|
+
{file: '.', codemod: 'post-codemod-hook', error: msg},
|
|
515
|
+
];
|
|
516
|
+
logger.log('Regeneration failed; protected changes remain\n');
|
|
517
|
+
}
|
|
518
|
+
if (apply) {
|
|
519
|
+
for (const [file, before] of protectedBeforeHooks) {
|
|
520
|
+
try {
|
|
521
|
+
if (!before.equals(fs.readFileSync(file)))
|
|
522
|
+
hookModifiedFiles.push(file);
|
|
523
|
+
} catch {
|
|
524
|
+
hookModifiedFiles.push(file);
|
|
525
|
+
}
|
|
526
|
+
}
|
|
322
527
|
}
|
|
323
528
|
}
|
|
324
529
|
|
|
530
|
+
// A successful apply hook may have regenerated protected outputs. Rerun the
|
|
531
|
+
// selected codemods in preview mode against fresh bytes and fresh declarations
|
|
532
|
+
// to distinguish resolved outputs from changes that remain blocked.
|
|
533
|
+
let remainingProtected = initialProtected;
|
|
534
|
+
if (apply && shouldRunHooks && !hookFailure) {
|
|
535
|
+
const refreshedProtection = loadFileProtection(cwd);
|
|
536
|
+
const coreCheck = await runCoreCodemods(versionManifests, {
|
|
537
|
+
apply: false,
|
|
538
|
+
path: path_,
|
|
539
|
+
codemod: options.codemod,
|
|
540
|
+
skipCodemods,
|
|
541
|
+
root: cwd,
|
|
542
|
+
protection: refreshedProtection,
|
|
543
|
+
silent: true,
|
|
544
|
+
});
|
|
545
|
+
const checkedCore =
|
|
546
|
+
coreCheck && 'totalFilesChanged' in coreCheck ? coreCheck : null;
|
|
547
|
+
const recheckProtection =
|
|
548
|
+
(checkedCore?.stagedContents.size ?? 0) > 0
|
|
549
|
+
? createFileProtectionResolver(cwd, {
|
|
550
|
+
overrides: checkedCore?.stagedContents,
|
|
551
|
+
})
|
|
552
|
+
: refreshedProtection;
|
|
553
|
+
const integrationCheck = hasIntegrationCodemods
|
|
554
|
+
? await runIntegrationCodemodsStep(integrationVersionGroups, {
|
|
555
|
+
apply: false,
|
|
556
|
+
path: path_,
|
|
557
|
+
codemod: options.codemod,
|
|
558
|
+
skipCodemods,
|
|
559
|
+
root: cwd,
|
|
560
|
+
protection: recheckProtection,
|
|
561
|
+
contents: checkedCore?.stagedContents,
|
|
562
|
+
silent: true,
|
|
563
|
+
})
|
|
564
|
+
: null;
|
|
565
|
+
const recheckedProtected = [
|
|
566
|
+
...(checkedCore?.protectedFiles ?? []),
|
|
567
|
+
...(integrationCheck?.protectedFiles ?? []),
|
|
568
|
+
];
|
|
569
|
+
const recheckedChangedFiles = [
|
|
570
|
+
...(checkedCore?.changedFiles ?? []),
|
|
571
|
+
...(integrationCheck?.changedFiles ?? []),
|
|
572
|
+
].map(file => path.relative(cwd, file).split(path.sep).join('/'));
|
|
573
|
+
const initialByFile = new Map();
|
|
574
|
+
for (const item of initialProtected) {
|
|
575
|
+
const rows = initialByFile.get(item.file) ?? [];
|
|
576
|
+
rows.push(item);
|
|
577
|
+
initialByFile.set(item.file, rows);
|
|
578
|
+
}
|
|
579
|
+
// A hook that removes a protection marker without regenerating the bytes
|
|
580
|
+
// does not make the required change disappear. Retain the original
|
|
581
|
+
// declaration for that still-pending file.
|
|
582
|
+
for (const file of recheckedChangedFiles) {
|
|
583
|
+
recheckedProtected.push(...(initialByFile.get(file) ?? []));
|
|
584
|
+
}
|
|
585
|
+
remainingProtected = recheckedProtected;
|
|
586
|
+
finalErrors = [
|
|
587
|
+
...mergedErrors,
|
|
588
|
+
...(checkedCore?.errors ?? []),
|
|
589
|
+
...(integrationCheck?.errors ?? []),
|
|
590
|
+
];
|
|
591
|
+
}
|
|
592
|
+
|
|
593
|
+
const protectedFiles = summarizeProtectedFiles(remainingProtected);
|
|
325
594
|
receipt.filesChanged = mergedFilesChanged;
|
|
326
595
|
receipt.transformsApplied = mergedTransformsApplied;
|
|
327
|
-
receipt.
|
|
596
|
+
receipt.modifiedFiles = uniqueFiles([
|
|
597
|
+
...mergedChangedFiles,
|
|
598
|
+
...hookModifiedFiles,
|
|
599
|
+
]).map(file => path.relative(cwd, file).split(path.sep).join('/'));
|
|
600
|
+
receipt.protectedFiles = protectedFiles;
|
|
601
|
+
receipt.declinedCandidates = [];
|
|
602
|
+
receipt.complete = protectedFiles.length === 0;
|
|
603
|
+
if (!receipt.complete) {
|
|
604
|
+
receipt.errorCode = 'ERR_CODEMOD_PROTECTED';
|
|
605
|
+
}
|
|
606
|
+
receipt.errors = finalErrors;
|
|
328
607
|
if (registryResult) receipt.registryCompositions = registryResult.summary;
|
|
329
608
|
|
|
330
|
-
if (
|
|
609
|
+
if (protectedFiles.length > 0) {
|
|
610
|
+
logger.error(
|
|
611
|
+
`${ERROR_CODES.ERR_CODEMOD_PROTECTED}: ${protectedFiles.length} protected file${protectedFiles.length === 1 ? '' : 's'} still require${protectedFiles.length === 1 ? 's' : ''} a codemod change:`,
|
|
612
|
+
);
|
|
613
|
+
for (const item of protectedFiles) {
|
|
614
|
+
logger.error(` ${item.file} — ${item.declarations.join('; ')}`);
|
|
615
|
+
for (const command of item.commands) {
|
|
616
|
+
logger.log(` Regenerate with: ${command}`);
|
|
617
|
+
}
|
|
618
|
+
}
|
|
619
|
+
}
|
|
620
|
+
|
|
621
|
+
if (receipt.errors?.length > 0 && protectedFiles.length === 0) {
|
|
331
622
|
const msg = `Upgrade completed with ${receipt.errors.length} codemod error${receipt.errors.length === 1 ? '' : 's'}.`;
|
|
332
623
|
logger.log('Upgrade failed\n');
|
|
333
624
|
throw new AstryxError(msg, undefined, ERROR_CODES.ERR_CODEMOD_FAILED);
|
|
334
625
|
}
|
|
335
626
|
|
|
336
|
-
//
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
627
|
+
// Only refresh managed docs after all required codemod changes are complete.
|
|
628
|
+
if (protectedFiles.length === 0) {
|
|
629
|
+
const agentDocsPlan = await prepareAgentDocsRefresh({
|
|
630
|
+
cwd,
|
|
631
|
+
installedVersion: targetVersion,
|
|
632
|
+
apply,
|
|
633
|
+
fresh: true,
|
|
634
|
+
});
|
|
635
|
+
const completedAgentDocs = apply
|
|
636
|
+
? applyAgentDocsRefresh(agentDocsPlan)
|
|
637
|
+
: agentDocsPlan.summary;
|
|
638
|
+
receipt.agentDocs = completedAgentDocs;
|
|
639
|
+
receipt.agentDocsRefreshed = completedAgentDocs.refreshed;
|
|
640
|
+
}
|
|
348
641
|
|
|
349
642
|
const registryOk = receipt.registryCompositions?.ok ?? true;
|
|
350
643
|
logger.log(
|
|
351
|
-
|
|
352
|
-
?
|
|
353
|
-
:
|
|
644
|
+
protectedFiles.length > 0
|
|
645
|
+
? 'Upgrade incomplete: protected changes remain\n'
|
|
646
|
+
: registryOk
|
|
647
|
+
? (apply ? 'Upgrade complete' : 'Dry run complete') + '\n'
|
|
648
|
+
: 'Upgrade finished with unresolved registry items\n',
|
|
354
649
|
);
|
|
355
650
|
return {
|
|
356
651
|
type: 'upgrade.run',
|
|
357
|
-
data: /** @type {import('../upgrade.type.mjs').UpgradeRunResponse['data']} */ (
|
|
652
|
+
data: /** @type {import('../upgrade.type.mjs').UpgradeRunResponse['data']} */ (
|
|
653
|
+
/** @type {unknown} */ (receipt)
|
|
654
|
+
),
|
|
358
655
|
};
|
|
359
656
|
}
|
|
@@ -24,7 +24,7 @@ import {logger} from '../../logger.mjs';
|
|
|
24
24
|
* @returns {import('../upgrade.type.mjs').UpgradeStatusResponse}
|
|
25
25
|
*/
|
|
26
26
|
export function statusUpToDate({from, to, agentDocs, registryCompositions}) {
|
|
27
|
-
logger.log('
|
|
27
|
+
logger.log('[ok] Already up to date - no codemods to run.');
|
|
28
28
|
logger.log('Use --force to run codemods anyway.');
|
|
29
29
|
logger.log(registryCompositions?.ok === false ? 'Finished with unresolved registry items\n' : 'Done\n');
|
|
30
30
|
return {
|
|
@@ -45,7 +45,7 @@ export function statusUpToDate({from, to, agentDocs, registryCompositions}) {
|
|
|
45
45
|
* @returns {import('../upgrade.type.mjs').UpgradeStatusResponse}
|
|
46
46
|
*/
|
|
47
47
|
export function statusNoCodemods({from, to, agentDocs, registryCompositions}) {
|
|
48
|
-
logger.log('
|
|
48
|
+
logger.log('[ok] No codemods available for this version range.');
|
|
49
49
|
logger.log(registryCompositions?.ok === false ? 'Finished with unresolved registry items\n' : 'Done\n');
|
|
50
50
|
return {
|
|
51
51
|
type: 'upgrade.status',
|
|
@@ -11,6 +11,7 @@ export const doc = {
|
|
|
11
11
|
type: 'function',
|
|
12
12
|
kind: 'api',
|
|
13
13
|
name: 'upgrade',
|
|
14
|
+
namespace: 'cli/api',
|
|
14
15
|
displayName: 'upgrade()',
|
|
15
16
|
summary: 'Run version migrations and reconcile copied compositions.',
|
|
16
17
|
description:
|
|
@@ -80,7 +81,8 @@ export const doc = {
|
|
|
80
81
|
{
|
|
81
82
|
name: 'options.installDeps',
|
|
82
83
|
type: 'boolean',
|
|
83
|
-
description:
|
|
84
|
+
description:
|
|
85
|
+
'Install jscodeshift when it is missing; otherwise a missing jscodeshift throws ERR_DEP_MISSING.',
|
|
84
86
|
},
|
|
85
87
|
{
|
|
86
88
|
name: 'options.registry',
|
|
@@ -119,7 +121,7 @@ export const doc = {
|
|
|
119
121
|
{
|
|
120
122
|
type: 'upgrade.run',
|
|
121
123
|
description:
|
|
122
|
-
'The terminal run receipt: from/to versions,
|
|
124
|
+
'The terminal run receipt: from/to versions, codemod count, integrations processed, agent-docs and registry summaries, modifiedFiles, protectedFiles, declinedCandidates, and completion state. A protected required change returns complete: false with ERR_CODEMOD_PROTECTED; the CLI exits nonzero while preserving the structured receipt.',
|
|
123
125
|
},
|
|
124
126
|
],
|
|
125
127
|
throws: [
|
|
@@ -145,6 +147,10 @@ export const doc = {
|
|
|
145
147
|
code: 'ERR_CODEMOD_FAILED',
|
|
146
148
|
when: 'one or more codemods failed, or a post-codemod hook failed',
|
|
147
149
|
},
|
|
150
|
+
{
|
|
151
|
+
code: 'ERR_CODEMOD_PROTECTION_SOURCE',
|
|
152
|
+
when: 'a working-tree protection declaration cannot be read or parsed before writes begin',
|
|
153
|
+
},
|
|
148
154
|
],
|
|
149
155
|
examples: [
|
|
150
156
|
{
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// DO NOT EDIT — run `pnpm sync:api-types` to regenerate.
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
5
|
+
* astryx --json upgrade --list
|
|
6
6
|
*/
|
|
7
7
|
export type UpgradeListResponse = {
|
|
8
8
|
type: "upgrade.list";
|
|
@@ -12,6 +12,10 @@ export type UpgradeListEntry = {
|
|
|
12
12
|
name: string;
|
|
13
13
|
title: string;
|
|
14
14
|
version: string;
|
|
15
|
+
/**
|
|
16
|
+
* True when the codemod runs only if named with `--codemod`.
|
|
17
|
+
*/
|
|
18
|
+
optional: boolean;
|
|
15
19
|
};
|
|
16
20
|
/**
|
|
17
21
|
* State of the managed agent-docs block (`<!-- ASTRYX:START --> … END -->`)
|
|
@@ -121,14 +125,39 @@ export type RegistryCompositionSummary = {
|
|
|
121
125
|
items: RegistryCompositionItemSummary[];
|
|
122
126
|
};
|
|
123
127
|
/**
|
|
124
|
-
*
|
|
128
|
+
* astryx --json upgrade --registry [--apply]
|
|
125
129
|
*/
|
|
126
130
|
export type UpgradeRegistryResponse = {
|
|
127
131
|
type: "upgrade.registry";
|
|
128
132
|
data: RegistryCompositionSummary;
|
|
129
133
|
};
|
|
130
134
|
/**
|
|
131
|
-
*
|
|
135
|
+
* A required codemod change blocked by effective working-tree protection.
|
|
136
|
+
*/
|
|
137
|
+
export type ProtectedCodemodFile = {
|
|
138
|
+
/**
|
|
139
|
+
* Project-relative path.
|
|
140
|
+
*/
|
|
141
|
+
file: string;
|
|
142
|
+
/**
|
|
143
|
+
* Codemods that still require a change.
|
|
144
|
+
*/
|
|
145
|
+
codemods: string[];
|
|
146
|
+
/**
|
|
147
|
+
* Protection categories (generated, vendored, ignored, and hard boundaries).
|
|
148
|
+
*/
|
|
149
|
+
reasons: string[];
|
|
150
|
+
/**
|
|
151
|
+
* Effective declarations that protect the file.
|
|
152
|
+
*/
|
|
153
|
+
declarations: string[];
|
|
154
|
+
/**
|
|
155
|
+
* Exact regeneration commands found in generated headers, when present.
|
|
156
|
+
*/
|
|
157
|
+
commands: string[];
|
|
158
|
+
};
|
|
159
|
+
/**
|
|
160
|
+
* astryx --json upgrade [--apply]
|
|
132
161
|
*/
|
|
133
162
|
export type UpgradeRunResponse = {
|
|
134
163
|
type: "upgrade.run";
|
|
@@ -140,7 +169,16 @@ export type UpgradeRunResponse = {
|
|
|
140
169
|
agentDocsRefreshed: boolean;
|
|
141
170
|
agentDocs: AgentDocsSummary;
|
|
142
171
|
registryCompositions?: RegistryCompositionSummary | undefined;
|
|
172
|
+
complete?: boolean | undefined;
|
|
173
|
+
errorCode?: "ERR_CODEMOD_PROTECTED" | undefined;
|
|
143
174
|
filesChanged?: number | undefined;
|
|
175
|
+
modifiedFiles?: string[] | undefined;
|
|
176
|
+
protectedFiles?: ProtectedCodemodFile[] | undefined;
|
|
177
|
+
declinedCandidates?: {
|
|
178
|
+
file: string;
|
|
179
|
+
location?: string;
|
|
180
|
+
reason: string;
|
|
181
|
+
}[] | undefined;
|
|
144
182
|
transformsApplied?: number | undefined;
|
|
145
183
|
errors?: {
|
|
146
184
|
file: string;
|
|
@@ -150,7 +188,7 @@ export type UpgradeRunResponse = {
|
|
|
150
188
|
};
|
|
151
189
|
};
|
|
152
190
|
/**
|
|
153
|
-
*
|
|
191
|
+
* astryx --json upgrade — short-circuit status results.
|
|
154
192
|
*
|
|
155
193
|
* - `up_to_date`: `--from` is >= installed target and `--force` was not passed.
|
|
156
194
|
* - `no_codemods`: no codemods (core or integration) apply to the range.
|