@astryxdesign/cli 0.6.3 → 0.6.4-canary.06c8fa3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +194 -0
- package/README.md +121 -85
- 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 +31 -12
- package/api/component/_adapter.mjs +79 -15
- package/api/component/component.d.mts +6 -3
- package/api/component/component.doc.mjs +36 -13
- package/api/component/component.mjs +339 -22
- package/api/component/component.test.mjs +38 -0
- package/api/component/component.type.d.mts +47 -11
- package/api/component/component.type.mjs +76 -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 +272 -41
- package/api/docs/_adapter.mjs +985 -108
- package/api/docs/compiled-topics.test.mjs +78 -0
- package/api/docs/detail/detail.mjs +22 -63
- package/api/docs/detail/section/section.d.mts +1 -1
- package/api/docs/detail/section/section.mjs +54 -19
- package/api/docs/detail/section/section.test.mjs +50 -0
- package/api/docs/docs.d.mts +10 -3
- package/api/docs/docs.doc.mjs +55 -16
- package/api/docs/docs.mjs +53 -10
- package/api/docs/docs.test.mjs +166 -4
- package/api/docs/docs.type.d.mts +221 -5
- package/api/docs/docs.type.mjs +153 -11
- package/api/docs/index/index.d.mts +18 -0
- package/api/docs/index/index.mjs +40 -0
- package/api/docs/index/index.test.mjs +62 -0
- package/api/docs/integration-tree.test.mjs +555 -0
- package/api/docs/integrationDocs.test.mjs +114 -8
- 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 +104 -1
- package/api/doctor/doctor.doc.mjs +1 -0
- package/api/doctor/doctor.mjs +635 -7
- package/api/doctor/doctor.test.mjs +732 -11
- 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 +2 -2
- package/api/hook/list/list.mjs +69 -17
- package/api/index.d.mts +2 -3
- package/api/index.mjs +5 -4
- 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 +3 -1
- 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.lifecycle-output.test.mjs +105 -0
- package/api/integration/pack-check.mjs +111 -10
- 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 -1
- package/api/json/isError.doc.mjs +1 -0
- package/api/json/parseResponse.doc.mjs +3 -2
- package/api/search/search-return-type.test.mjs +54 -0
- package/api/search/search.d.mts +62 -11
- package/api/search/search.doc.mjs +8 -2
- package/api/search/search.mjs +471 -83
- package/api/search/search.test.mjs +142 -1
- package/api/search/search.type.d.mts +15 -3
- 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 +1008 -3
- package/api/template/template-suffix.test.mjs +41 -21
- package/api/template/template.d.mts +1 -1
- package/api/template/template.doc.mjs +30 -8
- package/api/template/template.mjs +46 -9
- package/api/template/template.type.d.mts +12 -14
- 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 +139 -22
- package/api/upgrade/list/list.mjs +2 -1
- package/api/upgrade/list/list.test.mjs +73 -0
- package/api/upgrade/project-context.test.mjs +272 -0
- package/api/upgrade/provider-agreement.test.mjs +152 -0
- package/api/upgrade/run/files-changed.test.mjs +111 -0
- package/api/upgrade/run/run.mjs +359 -60
- package/api/upgrade/status/status.mjs +2 -2
- package/api/upgrade/upgrade.doc.mjs +12 -5
- package/api/upgrade/upgrade.type.d.mts +43 -5
- package/api/upgrade/upgrade.type.mjs +29 -13
- package/assets/codemods/__tests__/registry.test.mjs +1 -0
- package/assets/codemods/__tests__/runner.test.mjs +332 -8
- package/assets/codemods/file-count.test.mjs +163 -0
- package/assets/codemods/integration-discovery.mjs +48 -4
- package/assets/codemods/integration-discovery.test.mjs +73 -0
- package/assets/codemods/integration-runner.mjs +59 -7
- package/assets/codemods/integration-runner.protection.test.mjs +153 -0
- package/assets/codemods/registry.mjs +1 -0
- package/assets/codemods/run-codemod.mjs +177 -34
- package/assets/codemods/runner.mjs +353 -104
- 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/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/codemods/transforms/v0.6.4/__tests__/migrate-native-picker-to-presentation.test.mjs +63 -0
- package/assets/codemods/transforms/v0.6.4/__tests__/migrate-theme-catalog-to-descriptors.test.mjs +220 -0
- package/assets/codemods/transforms/v0.6.4/index.mjs +31 -0
- package/assets/codemods/transforms/v0.6.4/migrate-native-picker-to-presentation.mjs +148 -0
- package/assets/codemods/transforms/v0.6.4/migrate-theme-catalog-to-descriptors.mjs +141 -0
- package/assets/docs/README.md +9 -0
- package/assets/docs/authoring.doc.mjs +14 -0
- 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/tree/component-lookups.doc.mjs +149 -0
- package/assets/docs/{cli-integrations.doc.mjs → tree/integrations.doc.mjs} +144 -26
- 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/blocks/components/Timer/TimerFormats.doc.mjs +14 -0
- package/assets/templates/blocks/components/Timer/TimerFormats.tsx +34 -0
- package/assets/templates/blocks/components/Timer/TimerInline.doc.mjs +14 -0
- package/assets/templates/blocks/components/Timer/TimerInline.tsx +14 -0
- package/assets/templates/blocks/components/Timer/TimerShowcase.doc.mjs +13 -0
- package/assets/templates/blocks/components/Timer/TimerShowcase.tsx +47 -0
- package/assets/templates/blocks/components/Timer/TimerTypography.doc.mjs +14 -0
- package/assets/templates/blocks/components/Timer/TimerTypography.tsx +31 -0
- package/assets/templates/blocks/components/Toolbar/ToolbarTableFilter.doc.mjs +19 -3
- package/assets/templates/blocks/components/Toolbar/ToolbarTableFilter.tsx +383 -65
- 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 +11 -3
- 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 +31 -8
- package/authoring/debug/debug.doc.d.mts +11 -0
- package/authoring/debug/debug.doc.mjs +182 -0
- package/authoring/debug/parse.d.mts +8 -8
- 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 +790 -23
- package/authoring/doctypes/_schema.mjs +543 -39
- package/authoring/doctypes/base/graph-fields.doc.d.mts +9 -0
- package/authoring/doctypes/base/graph-fields.doc.mjs +64 -0
- package/authoring/doctypes/base/type.ts +41 -0
- package/authoring/doctypes/command/command.doc.mjs +5 -4
- package/authoring/doctypes/command/parse.d.mts +2 -2
- package/authoring/doctypes/command/parse.mjs +1 -1
- package/authoring/doctypes/command/type.ts +6 -5
- package/authoring/doctypes/component/component.doc.mjs +6 -3
- package/authoring/doctypes/component/parse.d.mts +2 -2
- package/authoring/doctypes/component/parse.mjs +1 -1
- package/authoring/doctypes/component/type.ts +6 -5
- 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 +4 -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 +9 -4
- 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 +5 -4
- package/authoring/doctypes/legacy.d.mts +8 -6
- package/authoring/doctypes/legacy.mjs +5 -4
- package/authoring/doctypes/load-contract.test.mjs +233 -0
- package/authoring/doctypes/namespace/namespace.doc.d.mts +9 -0
- package/authoring/doctypes/namespace/namespace.doc.mjs +128 -0
- package/authoring/doctypes/namespace/parse.d.mts +12 -0
- package/authoring/doctypes/namespace/parse.mjs +25 -0
- package/authoring/doctypes/namespace/parse.test.mjs +163 -0
- package/authoring/doctypes/namespace/type.ts +74 -0
- package/authoring/doctypes/parse.d.mts +22 -18
- package/authoring/doctypes/parse.mjs +22 -11
- package/authoring/doctypes/parse.test.mjs +77 -3
- package/authoring/doctypes/reference/parse.d.mts +2 -2
- package/authoring/doctypes/reference/parse.mjs +8 -5
- package/authoring/doctypes/reference/reference.doc.mjs +48 -6
- package/authoring/doctypes/reference/type.ts +70 -7
- 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 +4 -4
- package/authoring/doctypes/template/parse.d.mts +94 -1
- package/authoring/doctypes/template/parse.mjs +40 -2
- package/authoring/doctypes/template/parse.test.mjs +26 -2
- package/authoring/doctypes/template/template.doc.mjs +13 -3
- package/authoring/doctypes/template/type.ts +13 -2
- 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 -10
- 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 +10 -10
- package/authoring/gap-report/parse.mjs +6 -6
- package/authoring/gap-report/type.ts +1 -1
- package/authoring/identity/identity.doc.d.mts +9 -0
- package/authoring/identity/identity.doc.mjs +61 -0
- package/authoring/identity/type.ts +132 -0
- package/authoring/index.d.mts +3 -0
- package/authoring/index.d.ts +62 -17
- package/authoring/index.mjs +4 -1
- package/authoring/integration/integration.doc.mjs +15 -8
- package/authoring/integration/parse.d.mts +2 -2
- package/authoring/integration/parse.mjs +1 -1
- package/authoring/integration/parse.test.mjs +10 -1
- package/authoring/integration/schema.d.mts +6 -4
- package/authoring/integration/schema.mjs +9 -3
- package/authoring/integration/type.ts +19 -8
- package/authoring/shadcn/receipt.d.mts +6 -6
- package/clients/cli/__tests__/cliManifest.test.ts +27 -29
- package/clients/cli/command-load-failure.test.mjs +83 -0
- package/clients/cli/command-result-coverage.test.mjs +7 -7
- 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 +153 -61
- package/clients/cli/commands/component-batch.test.mjs +341 -0
- package/clients/cli/commands/component-ownership.test.mjs +92 -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 +24 -7
- package/clients/cli/commands/component.test.mjs +19 -0
- package/clients/cli/commands/debug-result-summary.test.mjs +2 -2
- 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 +28 -6
- package/clients/cli/commands/docs.mjs +240 -26
- package/clients/cli/commands/docs.test.mjs +222 -1
- 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/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 +702 -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 +9 -5
- 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 +22 -10
- 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 +164 -1
- package/clients/cli/formatters/index.test.mjs +97 -0
- package/clients/cli/index.mjs +21 -34
- 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 +90 -0
- package/clients/cli/lib/hook-format.mjs +19 -10
- package/clients/cli/lib/json-shim.mjs +62 -16
- package/clients/cli/lib/json-shim.test.mjs +69 -0
- package/clients/cli/lib/manifest.d.ts +2 -0
- package/clients/cli/lib/manifest.mjs +39 -10
- package/clients/cli/lib/manifest.test.mjs +22 -2
- package/clients/cli/lib/parse-error-format.test.mjs +81 -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 +263 -91
- package/foundation/config/project.test.mjs +270 -21
- package/foundation/discovery/authoring-self-docs.d.mts +87 -0
- package/foundation/discovery/authoring-self-docs.mjs +237 -0
- package/foundation/discovery/authoring-self-docs.test.mjs +170 -0
- 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 +39 -1
- package/foundation/discovery/component-discovery.mjs +50 -1
- package/foundation/discovery/component-loader.d.mts +35 -38
- package/foundation/discovery/component-loader.mjs +53 -222
- package/foundation/discovery/docs-discovery.d.mts +119 -11
- package/foundation/discovery/docs-discovery.mjs +423 -108
- package/foundation/discovery/docs-discovery.test.mjs +365 -20
- package/foundation/discovery/docs-output-budget.d.mts +28 -0
- package/foundation/discovery/docs-output-budget.mjs +50 -0
- package/foundation/discovery/docs-section-key.d.mts +116 -0
- package/foundation/discovery/docs-section-key.mjs +322 -0
- package/foundation/discovery/docs-section-key.test.mjs +246 -0
- 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 +775 -84
- 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 +1630 -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 +606 -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/identity/provider-identity.d.mts +90 -0
- package/foundation/identity/provider-identity.mjs +320 -0
- package/foundation/identity/provider-identity.test.mjs +254 -0
- package/foundation/identity/providers.d.mts +7 -0
- package/foundation/identity/providers.mjs +16 -0
- package/foundation/integrations/autolink.d.mts +58 -1
- package/foundation/integrations/autolink.mjs +143 -45
- 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 +52 -21
- package/foundation/integrations/integration-warnings.test.mjs +74 -1
- package/foundation/integrations/integrations.d.mts +63 -3
- package/foundation/integrations/integrations.mjs +122 -9
- package/foundation/integrations/integrations.test.mjs +415 -1
- package/foundation/integrations/provider-conflicts.test.mjs +125 -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.d.mts +2 -0
- package/foundation/integrations/validate-contributions.mjs +131 -29
- package/foundation/response/base.d.ts +8 -4
- package/foundation/response/batch.type.d.mts +33 -0
- package/foundation/response/batch.type.mjs +34 -0
- 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 +57 -17
- 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 +46 -38
- package/foundation/response/response-types.doc.test.mjs +181 -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/browser.d.mts +3 -3
- package/foundation/xle/browser.mjs +3 -3
- package/foundation/xle/expand.d.mts +2 -0
- package/foundation/xle/expand.mjs +6 -5
- package/foundation/xle/expand.test.mjs +54 -0
- package/foundation/xle/parse.mjs +1 -1
- package/foundation/xle/print.mjs +2 -2
- package/foundation/xle/splice.mjs +1 -1
- package/foundation/xle/xle.test.mjs +13 -0
- package/package.json +10 -11
- package/api/layout/_adapter.d.mts +0 -34
- package/api/layout/_adapter.mjs +0 -133
- package/api/layout/check/check.d.mts +0 -16
- package/api/layout/check/check.mjs +0 -40
- package/api/layout/expand/expand.d.mts +0 -22
- package/api/layout/expand/expand.mjs +0 -153
- package/api/layout/grammar/grammar.d.mts +0 -13
- package/api/layout/grammar/grammar.mjs +0 -86
- package/api/layout/layout.d.mts +0 -6
- package/api/layout/layout.mjs +0 -17
- package/api/layout/layout.test.mjs +0 -297
- package/api/layout/layout.type.d.mts +0 -89
- package/api/layout/layout.type.mjs +0 -103
- package/api/layout/layoutCheck.doc.d.mts +0 -11
- package/api/layout/layoutCheck.doc.mjs +0 -84
- package/api/layout/layoutExpand.doc.d.mts +0 -11
- package/api/layout/layoutExpand.doc.mjs +0 -106
- package/api/layout/layoutGrammar.doc.d.mts +0 -11
- package/api/layout/layoutGrammar.doc.mjs +0 -56
- package/assets/templates/themes/manifest.json +0 -95
- package/clients/cli/commands/layout-check.doc.mjs +0 -54
- package/clients/cli/commands/layout-expand.doc.mjs +0 -66
- package/clients/cli/commands/layout-grammar.doc.mjs +0 -30
- package/clients/cli/commands/layout.doc.mjs +0 -34
- package/clients/cli/commands/layout.error-codes.test.mjs +0 -66
- package/clients/cli/commands/layout.exit-parity.test.mjs +0 -41
- package/clients/cli/commands/layout.mjs +0 -263
- 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
|
@@ -4,46 +4,23 @@
|
|
|
4
4
|
* @file Codemod: Rename Avatar named sizes to Icon's abbreviated scale
|
|
5
5
|
* @see https://github.com/facebook/astryx/issues/2672
|
|
6
6
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* xsmall (24px) → sm
|
|
13
|
-
* small (36px) → md ← also the new default (was `small`)
|
|
14
|
-
* medium (48px) → lg
|
|
15
|
-
* large (128px) → xl
|
|
16
|
-
*
|
|
17
|
-
* The default size shifts from `small` to `md`, but that is the SAME 36px, so
|
|
18
|
-
* call sites that relied on the default need no change.
|
|
19
|
-
*
|
|
20
|
-
* ## Precision
|
|
21
|
-
*
|
|
22
|
-
* `small`, `medium`, and `large` are common English words that appear as
|
|
23
|
-
* unrelated string/type literals (priorities, statuses, breakpoints, …). To
|
|
24
|
-
* avoid corrupting those, the three AMBIGUOUS names are renamed ONLY in a
|
|
25
|
-
* precise context: a `size` JSX attribute on a component that resolves to an
|
|
26
|
-
* Avatar/AvatarGroup import (alias-aware).
|
|
27
|
-
*
|
|
28
|
-
* `tiny` and `xsmall` are unique to Avatar's scale, so they are additionally
|
|
29
|
-
* renamed in context-blind positions (object properties keyed `size`/`*Size`,
|
|
30
|
-
* Storybook `options` arrays, and size-typed union literals) within files that
|
|
31
|
-
* import Avatar/AvatarGroup.
|
|
7
|
+
* This transform is deliberately limited to static literals written directly
|
|
8
|
+
* in the `size` prop of an imported Avatar or AvatarGroup JSX element. It does
|
|
9
|
+
* not infer through variables, helpers, objects, types, Storybook metadata, or
|
|
10
|
+
* wrappers: missing an indirect migration is safer than rewriting another
|
|
11
|
+
* component's size vocabulary.
|
|
32
12
|
*/
|
|
33
13
|
|
|
14
|
+
import {transformProp} from '../../transform-prop.mjs';
|
|
15
|
+
|
|
34
16
|
export const meta = {
|
|
35
17
|
title: 'Rename Avatar named sizes tiny/xsmall/small/medium/large → xsm/sm/md/lg/xl',
|
|
36
18
|
description:
|
|
37
|
-
'
|
|
38
|
-
'
|
|
39
|
-
'`small` to `md` (both 36px). The ambiguous names small/medium/large are ' +
|
|
40
|
-
'only renamed on Avatar/AvatarGroup `size` JSX attributes; the unique ' +
|
|
41
|
-
'names tiny/xsmall are also renamed in size-keyed props, Storybook ' +
|
|
42
|
-
'options, and union types in files importing Avatar/AvatarGroup.',
|
|
19
|
+
'Renames static sizes written directly on imported Avatar and AvatarGroup ' +
|
|
20
|
+
'JSX elements. Indirect values are left unchanged for manual migration.',
|
|
43
21
|
pr: '#2672',
|
|
44
22
|
};
|
|
45
23
|
|
|
46
|
-
/** Import sources that provide the Astryx Avatar/AvatarGroup components. */
|
|
47
24
|
const IMPORT_SOURCES = new Set([
|
|
48
25
|
'@astryxdesign/core',
|
|
49
26
|
'@astryxdesign/core/Avatar',
|
|
@@ -53,10 +30,11 @@ const IMPORT_SOURCES = new Set([
|
|
|
53
30
|
'@xds/core/AvatarGroup',
|
|
54
31
|
]);
|
|
55
32
|
|
|
56
|
-
|
|
57
|
-
|
|
33
|
+
const COMPONENT_PROPS = new Map([
|
|
34
|
+
['Avatar', new Set(['size'])],
|
|
35
|
+
['AvatarGroup', new Set(['size'])],
|
|
36
|
+
]);
|
|
58
37
|
|
|
59
|
-
/** Old → new size-name mapping. */
|
|
60
38
|
const RENAMES = new Map([
|
|
61
39
|
['tiny', 'xsm'],
|
|
62
40
|
['xsmall', 'sm'],
|
|
@@ -65,46 +43,38 @@ const RENAMES = new Map([
|
|
|
65
43
|
['large', 'xl'],
|
|
66
44
|
]);
|
|
67
45
|
|
|
68
|
-
/**
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
* scale; their presence in a collection proves it is an Avatar size enum.
|
|
72
|
-
*/
|
|
73
|
-
const AMBIGUOUS = new Set(['small', 'medium', 'large']);
|
|
74
|
-
|
|
75
|
-
/** Names that appear only in Avatar's scale — safe signals of Avatar sizing. */
|
|
76
|
-
const UNIQUE = new Set(['tiny', 'xsmall']);
|
|
77
|
-
|
|
78
|
-
/**
|
|
79
|
-
* Rename a string-literal node if its value is an old size name.
|
|
80
|
-
* Unwraps `'small' as const`. In non-precise contexts, ambiguous names are
|
|
81
|
-
* skipped. Returns true when a rename occurred.
|
|
82
|
-
*/
|
|
83
|
-
function renameValue(/** @type {any} */ node, {precise = false} = {}) {
|
|
84
|
-
if (!node) return false;
|
|
85
|
-
const target = node.type === 'TSAsExpression' ? node.expression : node;
|
|
86
|
-
const isString =
|
|
87
|
-
target.type === 'StringLiteral' || target.type === 'Literal';
|
|
88
|
-
if (!isString || typeof target.value !== 'string') return false;
|
|
89
|
-
const replacement = RENAMES.get(target.value);
|
|
90
|
-
if (!replacement) return false;
|
|
91
|
-
if (!precise && AMBIGUOUS.has(target.value)) return false;
|
|
92
|
-
target.value = replacement;
|
|
93
|
-
if (target.raw) target.raw = undefined;
|
|
94
|
-
return true;
|
|
46
|
+
/** @param {string} name */
|
|
47
|
+
function canonicalComponentName(name) {
|
|
48
|
+
return name.startsWith('XDS') ? name.slice(3) : name;
|
|
95
49
|
}
|
|
96
50
|
|
|
97
|
-
/**
|
|
98
|
-
function
|
|
99
|
-
|
|
51
|
+
/** @param {any} node @returns {boolean} */
|
|
52
|
+
function renameStaticValue(node) {
|
|
53
|
+
if (!node) return false;
|
|
100
54
|
if (
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
55
|
+
node.type === 'TSAsExpression' ||
|
|
56
|
+
node.type === 'TSSatisfiesExpression' ||
|
|
57
|
+
node.type === 'TypeCastExpression' ||
|
|
58
|
+
node.type === 'ParenthesizedExpression'
|
|
104
59
|
) {
|
|
105
|
-
return
|
|
60
|
+
return renameStaticValue(node.expression);
|
|
106
61
|
}
|
|
107
|
-
|
|
62
|
+
if (node.type === 'ConditionalExpression') {
|
|
63
|
+
const consequentChanged = renameStaticValue(node.consequent);
|
|
64
|
+
const alternateChanged = renameStaticValue(node.alternate);
|
|
65
|
+
return consequentChanged || alternateChanged;
|
|
66
|
+
}
|
|
67
|
+
if (
|
|
68
|
+
(node.type !== 'StringLiteral' && node.type !== 'Literal') ||
|
|
69
|
+
typeof node.value !== 'string'
|
|
70
|
+
) {
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
const replacement = RENAMES.get(node.value);
|
|
74
|
+
if (!replacement) return false;
|
|
75
|
+
node.value = replacement;
|
|
76
|
+
if (node.raw) node.raw = undefined;
|
|
77
|
+
return true;
|
|
108
78
|
}
|
|
109
79
|
|
|
110
80
|
/**
|
|
@@ -117,122 +87,23 @@ export default function transformer(file, api) {
|
|
|
117
87
|
const root = j(file.source);
|
|
118
88
|
let hasChanges = false;
|
|
119
89
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
let arr = node;
|
|
138
|
-
if (arr.type === 'TSAsExpression') arr = arr.expression;
|
|
139
|
-
if (arr.type !== 'ArrayExpression') return;
|
|
140
|
-
// If the array contains a name unique to Avatar's scale (tiny/xsmall), the
|
|
141
|
-
// whole collection is unambiguously the Avatar size enum, so it is safe to
|
|
142
|
-
// rename the ambiguous members too. Otherwise stay conservative.
|
|
143
|
-
const precise = arr.elements.some((/** @type {any} */ el) => UNIQUE.has(literalString(el)));
|
|
144
|
-
for (const el of arr.elements) {
|
|
145
|
-
if (renameValue(el, {precise})) hasChanges = true;
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
// 1. `size` JSX attributes on target components — PRECISE (component known),
|
|
150
|
-
// so all five names, including the ambiguous ones, are renamed here.
|
|
151
|
-
root.find(j.JSXOpeningElement).forEach((/** @type {any} */ path) => {
|
|
152
|
-
const name = path.node.name;
|
|
153
|
-
const componentName = name.type === 'JSXIdentifier' ? name.name : null;
|
|
154
|
-
if (!componentName || !targetLocals.has(componentName)) return;
|
|
155
|
-
|
|
156
|
-
for (const attr of path.node.attributes) {
|
|
157
|
-
if (attr.type !== 'JSXAttribute' || attr.name?.name !== 'size') continue;
|
|
158
|
-
const value = attr.value;
|
|
159
|
-
|
|
160
|
-
// size="small"
|
|
161
|
-
if (renameValue(value, {precise: true})) {
|
|
162
|
-
hasChanges = true;
|
|
163
|
-
continue;
|
|
164
|
-
}
|
|
165
|
-
if (
|
|
166
|
-
value &&
|
|
167
|
-
value.type === 'JSXExpressionContainer' &&
|
|
168
|
-
value.expression
|
|
169
|
-
) {
|
|
170
|
-
// size={'small'}
|
|
171
|
-
if (renameValue(value.expression, {precise: true})) {
|
|
172
|
-
hasChanges = true;
|
|
173
|
-
continue;
|
|
174
|
-
}
|
|
175
|
-
// size={cond ? 'small' : 'large'}
|
|
176
|
-
if (value.expression.type === 'ConditionalExpression') {
|
|
177
|
-
if (renameValue(value.expression.consequent, {precise: true}))
|
|
178
|
-
hasChanges = true;
|
|
179
|
-
if (renameValue(value.expression.alternate, {precise: true}))
|
|
180
|
-
hasChanges = true;
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
});
|
|
185
|
-
|
|
186
|
-
// 2. Object properties keyed `size` (or `*Size`) + Storybook `options`
|
|
187
|
-
// arrays — NON-PRECISE (the component isn't known here), so only the
|
|
188
|
-
// unique names tiny/xsmall are renamed.
|
|
189
|
-
const PropertyType = j.ObjectProperty ?? j.Property;
|
|
190
|
-
root.find(PropertyType).forEach((/** @type {any} */ path) => {
|
|
191
|
-
const key = path.node.key;
|
|
192
|
-
const keyName =
|
|
193
|
-
key.type === 'Identifier'
|
|
194
|
-
? key.name
|
|
195
|
-
: key.type === 'StringLiteral' || key.type === 'Literal'
|
|
196
|
-
? key.value
|
|
197
|
-
: null;
|
|
198
|
-
if (typeof keyName !== 'string') return;
|
|
199
|
-
|
|
200
|
-
const lower = keyName.toLowerCase();
|
|
201
|
-
if (lower !== 'size' && !lower.endsWith('size')) return;
|
|
202
|
-
|
|
203
|
-
const value = path.node.value;
|
|
204
|
-
// size: 'tiny'
|
|
205
|
-
if (renameValue(value)) {
|
|
206
|
-
hasChanges = true;
|
|
207
|
-
return;
|
|
208
|
-
}
|
|
209
|
-
// size: { control: 'select', options: ['tiny', ...] }
|
|
210
|
-
if (value.type === 'ObjectExpression') {
|
|
211
|
-
const optionsProp = value.properties.find(
|
|
212
|
-
(/** @type {any} */ p) => p.key && (p.key.name === 'options' || p.key.value === 'options'),
|
|
213
|
-
);
|
|
214
|
-
if (optionsProp) renameArrayElements(optionsProp.value);
|
|
215
|
-
}
|
|
216
|
-
// size: ['tiny', 'xsmall', ...]
|
|
217
|
-
renameArrayElements(value);
|
|
218
|
-
});
|
|
219
|
-
|
|
220
|
-
// 3. Union-type literals — NON-PRECISE, so only the unique names tiny/xsmall
|
|
221
|
-
// are renamed. This avoids corrupting unrelated unions that happen to use
|
|
222
|
-
// common words like 'medium' (e.g. a priority or breakpoint type) in a
|
|
223
|
-
// file that also imports Avatar.
|
|
224
|
-
root.find(j.TSLiteralType).forEach((/** @type {any} */ path) => {
|
|
225
|
-
if (renameValue(path.node.literal)) hasChanges = true;
|
|
226
|
-
});
|
|
227
|
-
|
|
228
|
-
// 4. Standalone array literals whose members are exactly the Avatar size
|
|
229
|
-
// scale (identified by the presence of a unique name like tiny/xsmall) —
|
|
230
|
-
// e.g. `(['tiny', 'xsmall', 'small', 'medium', 'large'] as const).map(...)`
|
|
231
|
-
// used to render every size. The unique name proves the whole array is the
|
|
232
|
-
// Avatar enum, so its ambiguous members can be renamed safely.
|
|
233
|
-
root.find(j.ArrayExpression).forEach((/** @type {any} */ path) => {
|
|
234
|
-
renameArrayElements(path.node);
|
|
235
|
-
});
|
|
90
|
+
transformProp(
|
|
91
|
+
root,
|
|
92
|
+
j,
|
|
93
|
+
{
|
|
94
|
+
matchesImport: source => IMPORT_SOURCES.has(source),
|
|
95
|
+
components: COMPONENT_PROPS,
|
|
96
|
+
normalizeComponentName: canonicalComponentName,
|
|
97
|
+
},
|
|
98
|
+
propPath => {
|
|
99
|
+
const prop = propPath.node;
|
|
100
|
+
const value =
|
|
101
|
+
prop.value?.type === 'JSXExpressionContainer'
|
|
102
|
+
? prop.value.expression
|
|
103
|
+
: prop.value;
|
|
104
|
+
if (renameStaticValue(value)) hasChanges = true;
|
|
105
|
+
},
|
|
106
|
+
);
|
|
236
107
|
|
|
237
108
|
if (!hasChanges) return undefined;
|
|
238
109
|
return root.toSource({quote: 'single'});
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
import {describe, it, expect} from 'vitest';
|
|
4
4
|
|
|
5
5
|
async function applyTransform(source, path = 'test.ts') {
|
|
6
|
-
const {default: transform} =
|
|
6
|
+
const {default: transform} =
|
|
7
|
+
await import('../unwrap-authoring-factories.mjs');
|
|
7
8
|
const jscodeshift = (await import('jscodeshift')).default;
|
|
8
9
|
const j = jscodeshift.withParser('tsx');
|
|
9
10
|
const api = {jscodeshift: j, stats: () => {}, report: () => {}};
|
|
@@ -18,7 +19,7 @@ export default createConfig({integrations: ['@acme/widgets']});
|
|
|
18
19
|
`;
|
|
19
20
|
const output = await applyTransform(input);
|
|
20
21
|
expect(output).not.toContain('createConfig');
|
|
21
|
-
expect(output).toContain(
|
|
22
|
+
expect(output).toContain('export default {');
|
|
22
23
|
expect(output).toContain("integrations: ['@acme/widgets']");
|
|
23
24
|
expect(output).not.toContain('type:');
|
|
24
25
|
});
|
|
@@ -132,13 +133,34 @@ export default createComponentDoc();
|
|
|
132
133
|
expect(output).toContain("type: 'component'");
|
|
133
134
|
});
|
|
134
135
|
|
|
136
|
+
it('leaves same-named factories from unrelated packages unchanged', async () => {
|
|
137
|
+
const input = `import {createConfig} from '@acme/eslint';
|
|
138
|
+
export default createConfig({strict: true});
|
|
139
|
+
`;
|
|
140
|
+
expect(await applyTransform(input)).toBe(input);
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
it('keeps an unrelated same-named import when another factory is migrated', async () => {
|
|
144
|
+
const input = `import {createConfig as createLintConfig} from '@acme/eslint';
|
|
145
|
+
import {createDoc} from '@astryxdesign/cli/doc';
|
|
146
|
+
export const lintConfig = createLintConfig({strict: true});
|
|
147
|
+
export const doc = createDoc({name: 'Theming', description: 'How theming works.'});
|
|
148
|
+
`;
|
|
149
|
+
const output = await applyTransform(input);
|
|
150
|
+
expect(output).toContain(
|
|
151
|
+
"import {createConfig as createLintConfig} from '@acme/eslint'",
|
|
152
|
+
);
|
|
153
|
+
expect(output).toContain('createLintConfig({strict: true})');
|
|
154
|
+
expect(output).not.toContain('createDoc');
|
|
155
|
+
expect(output).toContain("type: 'generic'");
|
|
156
|
+
});
|
|
157
|
+
|
|
135
158
|
it('is a no-op when no authoring factory is imported', async () => {
|
|
136
159
|
const input = `import {Button} from '@astryxdesign/core';
|
|
137
160
|
export default Button;
|
|
138
161
|
`;
|
|
139
|
-
const {default: transform} =
|
|
140
|
-
'../unwrap-authoring-factories.mjs'
|
|
141
|
-
);
|
|
162
|
+
const {default: transform} =
|
|
163
|
+
await import('../unwrap-authoring-factories.mjs');
|
|
142
164
|
const jscodeshift = (await import('jscodeshift')).default;
|
|
143
165
|
const j = jscodeshift.withParser('tsx');
|
|
144
166
|
const api = {jscodeshift: j, stats: () => {}, report: () => {}};
|
|
@@ -5,8 +5,9 @@
|
|
|
5
5
|
*
|
|
6
6
|
* v0.3.0 removes the authoring factories. Authoring is now types + parsers: an
|
|
7
7
|
* author writes a plain object and stamps its `type` directly. This transform
|
|
8
|
-
* rewrites
|
|
9
|
-
* then drops the now-dead
|
|
8
|
+
* rewrites factory calls imported from the retired Astryx authoring entrypoints
|
|
9
|
+
* to the plain object the factory used to return, then drops the now-dead
|
|
10
|
+
* factory imports:
|
|
10
11
|
*
|
|
11
12
|
* createConfig(o) / createIntegration(o) -> o (no discriminant)
|
|
12
13
|
* createComponentDoc(o) -> { ...o, type: 'component' }
|
|
@@ -25,8 +26,9 @@
|
|
|
25
26
|
*
|
|
26
27
|
* Import aliases are followed (`import {createDoc as mk}` → calls to `mk`), and
|
|
27
28
|
* the factory specifiers are removed afterward (the whole import statement goes
|
|
28
|
-
* if nothing else was imported from it).
|
|
29
|
-
* `migrate-authoring-imports`, which repoints
|
|
29
|
+
* if nothing else was imported from it). Same-named imports from other packages
|
|
30
|
+
* remain untouched. Run this BEFORE `migrate-authoring-imports`, which repoints
|
|
31
|
+
* the surviving type imports.
|
|
30
32
|
*/
|
|
31
33
|
|
|
32
34
|
export const meta = {
|
|
@@ -35,13 +37,24 @@ export const meta = {
|
|
|
35
37
|
'Rewrites createConfig/createIntegration/createComponentDoc/' +
|
|
36
38
|
'createFunctionDoc/createDoc/createPageTemplate/createBlockTemplate/' +
|
|
37
39
|
'createCodemod/createConfigCodemod calls to the plain object they returned ' +
|
|
38
|
-
|
|
40
|
+
'(stamping the doc/template/codemod `type` discriminant), and removes the ' +
|
|
39
41
|
'now-dead factory imports. Authoring is types + parsers in v0.3.0 — there ' +
|
|
40
42
|
'are no factories.',
|
|
41
43
|
pr: '#4612',
|
|
42
44
|
fileExtensions: ['.js', '.jsx', '.ts', '.tsx', '.mjs', '.cjs'],
|
|
43
45
|
};
|
|
44
46
|
|
|
47
|
+
/** Legacy Astryx authoring entrypoints that exported the removed factories. */
|
|
48
|
+
const AUTHORING_SOURCES = new Set([
|
|
49
|
+
'@astryxdesign/cli/config',
|
|
50
|
+
'@astryxdesign/cli/doc',
|
|
51
|
+
'@astryxdesign/cli/integration',
|
|
52
|
+
'@astryxdesign/cli/template',
|
|
53
|
+
'@astryxdesign/cli/codemod',
|
|
54
|
+
'@astryxdesign/core/authoring',
|
|
55
|
+
'@astryxdesign/core/config',
|
|
56
|
+
]);
|
|
57
|
+
|
|
45
58
|
/**
|
|
46
59
|
* Factory name → the `type` discriminant it stamped, or `null` for the config /
|
|
47
60
|
* integration factories, which were pure typed-identity (no discriminant).
|
|
@@ -108,6 +121,7 @@ export default function transformer(file, api) {
|
|
|
108
121
|
/** @type {Map<string, string>} */
|
|
109
122
|
const localToFactory = new Map();
|
|
110
123
|
root.find(j.ImportDeclaration).forEach((/** @type {any} */ path) => {
|
|
124
|
+
if (!AUTHORING_SOURCES.has(path.node.source.value)) return;
|
|
111
125
|
for (const spec of path.node.specifiers ?? []) {
|
|
112
126
|
if (spec.type !== 'ImportSpecifier') continue;
|
|
113
127
|
const importedName = spec.imported?.name;
|
|
@@ -163,6 +177,7 @@ export default function transformer(file, api) {
|
|
|
163
177
|
// Drop the now-dead factory import specifiers; remove any import statement
|
|
164
178
|
// left empty.
|
|
165
179
|
root.find(j.ImportDeclaration).forEach((/** @type {any} */ path) => {
|
|
180
|
+
if (!AUTHORING_SOURCES.has(path.node.source.value)) return;
|
|
166
181
|
const specs = path.node.specifiers ?? [];
|
|
167
182
|
const kept = specs.filter(
|
|
168
183
|
(/** @type {any} */ spec) =>
|
|
@@ -220,4 +220,51 @@ function wrapper(useResizable) {
|
|
|
220
220
|
const output = await apply('rename-resizable-pixel-bounds', input);
|
|
221
221
|
expect(output).toBe(input);
|
|
222
222
|
});
|
|
223
|
+
|
|
224
|
+
it('renames bounds when useResizable comes from a namespace import', async () => {
|
|
225
|
+
const input = `import * as Astryx from '@astryxdesign/core';
|
|
226
|
+
const region = Astryx.useResizable({defaultSize: 240, minSizePx: 120, maxSizePx: 480});`;
|
|
227
|
+
const output = await apply('rename-resizable-pixel-bounds', input);
|
|
228
|
+
expect(output).toContain('minSize: 120');
|
|
229
|
+
expect(output).toContain('maxSize: 480');
|
|
230
|
+
expect(output).not.toContain('minSizePx');
|
|
231
|
+
expect(output).not.toContain('maxSizePx');
|
|
232
|
+
});
|
|
233
|
+
|
|
234
|
+
it('leaves a namespace that does not come from Astryx alone', async () => {
|
|
235
|
+
const input = `import * as Other from 'other-resizable';
|
|
236
|
+
const region = Other.useResizable({minSizePx: 120});`;
|
|
237
|
+
const output = await apply('rename-resizable-pixel-bounds', input);
|
|
238
|
+
expect(output).toContain('minSizePx: 120');
|
|
239
|
+
});
|
|
240
|
+
|
|
241
|
+
it('does not rewrite a parameter that shadows the namespace import', async () => {
|
|
242
|
+
const input = `import * as Astryx from '@astryxdesign/core';
|
|
243
|
+
function build(Astryx) {
|
|
244
|
+
return Astryx.useResizable({minSizePx: 120});
|
|
245
|
+
}`;
|
|
246
|
+
const output = await apply('rename-resizable-pixel-bounds', input);
|
|
247
|
+
expect(output).toContain('minSizePx: 120');
|
|
248
|
+
});
|
|
249
|
+
|
|
250
|
+
it.each([
|
|
251
|
+
['as const', '{defaultSize: 240, minSizePx: 120} as const'],
|
|
252
|
+
['satisfies', '{defaultSize: 240, minSizePx: 120} satisfies object'],
|
|
253
|
+
])('renames a static configuration wrapped in %s', async (_label, config) => {
|
|
254
|
+
const input = `import {useResizable} from '@astryxdesign/core/Resizable';
|
|
255
|
+
const region = useResizable(${config});`;
|
|
256
|
+
const output = await apply('rename-resizable-pixel-bounds', input);
|
|
257
|
+
expect(output).toContain('minSize: 120');
|
|
258
|
+
expect(output).not.toContain('minSizePx');
|
|
259
|
+
});
|
|
260
|
+
|
|
261
|
+
it('renames wrapped multi-region configurations', async () => {
|
|
262
|
+
const input = `import {useResizable} from '@astryxdesign/core';
|
|
263
|
+
const regions = useResizable({regions: {
|
|
264
|
+
nav: {defaultSize: 240, minSizePx: 120} as const,
|
|
265
|
+
} as const});`;
|
|
266
|
+
const output = await apply('rename-resizable-pixel-bounds', input);
|
|
267
|
+
expect(output).toContain('minSize: 120');
|
|
268
|
+
expect(output).not.toContain('minSizePx');
|
|
269
|
+
});
|
|
223
270
|
});
|
|
@@ -8,6 +8,9 @@
|
|
|
8
8
|
* released conflict rule (the unified property wins when both are present).
|
|
9
9
|
* A spread or computed property can change precedence invisibly, so dynamic
|
|
10
10
|
* objects stay unchanged and receive a manual-migration TODO instead.
|
|
11
|
+
* Named and namespace imports both count, and a type-only wrapper (`as`,
|
|
12
|
+
* `satisfies`, a non-null assertion, parentheses) does not make a
|
|
13
|
+
* configuration dynamic.
|
|
11
14
|
*/
|
|
12
15
|
|
|
13
16
|
export const meta = {
|
|
@@ -33,6 +36,26 @@ const MANUAL_MIGRATION_COMMENT =
|
|
|
33
36
|
'or computed property. Rename minSizePx/maxSizePx to minSize/maxSize ' +
|
|
34
37
|
'manually without changing property precedence. ';
|
|
35
38
|
|
|
39
|
+
const TYPE_WRAPPERS = new Set([
|
|
40
|
+
'TSAsExpression',
|
|
41
|
+
'TSSatisfiesExpression',
|
|
42
|
+
'TSTypeAssertion',
|
|
43
|
+
'TSNonNullExpression',
|
|
44
|
+
'ParenthesizedExpression',
|
|
45
|
+
]);
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* The expression under type-only wrappers such as `{...} as const`.
|
|
49
|
+
* @param {any} node
|
|
50
|
+
*/
|
|
51
|
+
function unwrap(node) {
|
|
52
|
+
let current = node;
|
|
53
|
+
while (current && TYPE_WRAPPERS.has(current.type)) {
|
|
54
|
+
current = current.expression;
|
|
55
|
+
}
|
|
56
|
+
return current;
|
|
57
|
+
}
|
|
58
|
+
|
|
36
59
|
/** @param {any} property */
|
|
37
60
|
function staticPropertyName(property) {
|
|
38
61
|
if (property.computed) return null;
|
|
@@ -128,6 +151,8 @@ export default function transformer(file, api) {
|
|
|
128
151
|
const root = j(file.source);
|
|
129
152
|
/** @type {Map<string, any>} */
|
|
130
153
|
const bindings = new Map();
|
|
154
|
+
/** @type {Map<string, any>} */
|
|
155
|
+
const namespaces = new Map();
|
|
131
156
|
|
|
132
157
|
root.find(j.ImportDeclaration).forEach((/** @type {any} */ path) => {
|
|
133
158
|
if (!IMPORT_SOURCES.has(path.node.source.value)) return;
|
|
@@ -138,17 +163,40 @@ export default function transformer(file, api) {
|
|
|
138
163
|
) {
|
|
139
164
|
const local = specifier.local?.name ?? 'useResizable';
|
|
140
165
|
bindings.set(local, path.scope.lookup(local) ?? path.scope);
|
|
166
|
+
} else if (specifier.type === 'ImportNamespaceSpecifier') {
|
|
167
|
+
const local = specifier.local.name;
|
|
168
|
+
namespaces.set(local, path.scope.lookup(local) ?? path.scope);
|
|
141
169
|
}
|
|
142
170
|
}
|
|
143
171
|
});
|
|
144
|
-
if (bindings.size === 0) return undefined;
|
|
172
|
+
if (bindings.size === 0 && namespaces.size === 0) return undefined;
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* @param {any} callee
|
|
176
|
+
* @param {any} scope
|
|
177
|
+
*/
|
|
178
|
+
const isUseResizable = (callee, scope) => {
|
|
179
|
+
if (callee.type === 'Identifier') {
|
|
180
|
+
return (
|
|
181
|
+
bindings.has(callee.name) &&
|
|
182
|
+
scope.lookup(callee.name) === bindings.get(callee.name)
|
|
183
|
+
);
|
|
184
|
+
}
|
|
185
|
+
return (
|
|
186
|
+
callee.type === 'MemberExpression' &&
|
|
187
|
+
!callee.computed &&
|
|
188
|
+
callee.object.type === 'Identifier' &&
|
|
189
|
+
callee.property.type === 'Identifier' &&
|
|
190
|
+
callee.property.name === 'useResizable' &&
|
|
191
|
+
namespaces.has(callee.object.name) &&
|
|
192
|
+
scope.lookup(callee.object.name) === namespaces.get(callee.object.name)
|
|
193
|
+
);
|
|
194
|
+
};
|
|
145
195
|
|
|
146
196
|
let changed = false;
|
|
147
197
|
root.find(j.CallExpression).forEach((/** @type {any} */ path) => {
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
if (path.scope.lookup(callee.name) !== bindings.get(callee.name)) return;
|
|
151
|
-
const config = path.node.arguments[0];
|
|
198
|
+
if (!isUseResizable(path.node.callee, path.scope)) return;
|
|
199
|
+
const config = unwrap(path.node.arguments[0]);
|
|
152
200
|
if (config?.type !== 'ObjectExpression') return;
|
|
153
201
|
|
|
154
202
|
changed = migrateObject(j, config) || changed;
|
|
@@ -158,13 +206,12 @@ export default function transformer(file, api) {
|
|
|
158
206
|
staticPropertyName(property) === 'regions',
|
|
159
207
|
);
|
|
160
208
|
if (!regions || !('value' in regions)) return;
|
|
161
|
-
const regionsObject = regions.value;
|
|
209
|
+
const regionsObject = unwrap(regions.value);
|
|
162
210
|
if (regionsObject?.type !== 'ObjectExpression') return;
|
|
163
211
|
for (const region of regionsObject.properties) {
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
changed = migrateObject(j, region.value) || changed;
|
|
212
|
+
const regionConfig = 'value' in region ? unwrap(region.value) : null;
|
|
213
|
+
if (regionConfig?.type !== 'ObjectExpression') continue;
|
|
214
|
+
changed = migrateObject(j, regionConfig) || changed;
|
|
168
215
|
}
|
|
169
216
|
});
|
|
170
217
|
|
package/assets/codemods/transforms/v0.6.4/__tests__/migrate-native-picker-to-presentation.test.mjs
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
import {describe, expect, it} from 'vitest';
|
|
4
|
+
import transform from '../migrate-native-picker-to-presentation.mjs';
|
|
5
|
+
|
|
6
|
+
async function applyTransform(source) {
|
|
7
|
+
const jscodeshift = (await import('jscodeshift')).default;
|
|
8
|
+
const j = jscodeshift.withParser('tsx');
|
|
9
|
+
const api = {jscodeshift: j, stats: () => {}, report: () => {}};
|
|
10
|
+
return transform({source, path: 'test.tsx'}, api) ?? source;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
describe('migrate-native-picker-to-presentation', () => {
|
|
14
|
+
it('maps DateInput and DateTimeInput values (FR3)', async () => {
|
|
15
|
+
const output =
|
|
16
|
+
await applyTransform(`import {DateInput, DateTimeInput} from '@astryxdesign/core';
|
|
17
|
+
const a = <DateInput label="d" nativePicker="touch" />;
|
|
18
|
+
const b = <DateInput label="d" nativePicker="always" />;
|
|
19
|
+
const c = <DateTimeInput label="dt" nativePicker="never" />;`);
|
|
20
|
+
|
|
21
|
+
expect(output).toContain("presentation='adaptive-native'");
|
|
22
|
+
expect(output).toContain("presentation='native'");
|
|
23
|
+
expect(output).toContain("presentation='adaptive-bottom-sheet'");
|
|
24
|
+
expect(output).not.toContain('nativePicker');
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
it('maps TimeInput never to text-input (FR3)', async () => {
|
|
28
|
+
const output =
|
|
29
|
+
await applyTransform(`import {TimeInput} from '@astryxdesign/core';
|
|
30
|
+
const a = <TimeInput label="t" nativePicker="never" />;
|
|
31
|
+
const b = <TimeInput label="t" nativePicker={'touch'} />;`);
|
|
32
|
+
|
|
33
|
+
expect(output).toContain("presentation='text-input'");
|
|
34
|
+
expect(output).toContain("presentation={'adaptive-native'}");
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
it('drops nativePicker when presentation is already set (FR4)', async () => {
|
|
38
|
+
const output =
|
|
39
|
+
await applyTransform(`import {DateInput} from '@astryxdesign/core';
|
|
40
|
+
const a = <DateInput label="d" presentation="popover" nativePicker="always" />;`);
|
|
41
|
+
|
|
42
|
+
expect(output).toContain('presentation="popover"');
|
|
43
|
+
expect(output).not.toContain('nativePicker');
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
it('leaves dynamic values and unrelated components unchanged', async () => {
|
|
47
|
+
const source = `import {DateInput, Selector} from '@astryxdesign/core';
|
|
48
|
+
const a = <DateInput label="d" nativePicker={mode} />;
|
|
49
|
+
const b = <Selector nativePicker="never" />;`;
|
|
50
|
+
expect(await applyTransform(source)).toBe(source);
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
it('leaves a mixed static/dynamic conditional byte-identical when a sibling migrates', async () => {
|
|
54
|
+
const output =
|
|
55
|
+
await applyTransform(`import {TimeInput} from '@astryxdesign/core';
|
|
56
|
+
const a = <TimeInput label="t" nativePicker="touch" />;
|
|
57
|
+
const b = <TimeInput label="t" nativePicker={flag ? 'always' : mode} />;`);
|
|
58
|
+
|
|
59
|
+
expect(output).toContain("presentation='adaptive-native'");
|
|
60
|
+
expect(output).toContain("nativePicker={flag ? 'always' : mode}");
|
|
61
|
+
expect(output).not.toContain("'native'");
|
|
62
|
+
});
|
|
63
|
+
});
|