@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
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* @file FunctionDoc for `layoutExpand()` / `astryx layout expand`. Colocated
|
|
5
|
-
* with the API function it documents; the response-shape source of truth stays
|
|
6
|
-
* in `layout.type.mjs`.
|
|
7
|
-
* @position packages/cli/api/layout — function documentation
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
/** @type {import('@astryxdesign/cli/authoring').FunctionDoc} */
|
|
11
|
-
export const doc = {
|
|
12
|
-
type: 'function',
|
|
13
|
-
kind: 'api',
|
|
14
|
-
name: 'layoutExpand',
|
|
15
|
-
displayName: 'layoutExpand()',
|
|
16
|
-
summary: 'Expand a validated layout expression into XDS TSX.',
|
|
17
|
-
description:
|
|
18
|
-
'The generator behind `astryx layout expand`. Parses and validates a compressed XLE/XLO ' +
|
|
19
|
-
'expression, then expands it into ready-to-use XDS TSX, auto-routing structural children ' +
|
|
20
|
-
'into the right slots, scaffolding typed useState for interactive controls, and splicing or ' +
|
|
21
|
-
'importing any referenced template blocks. Returns the code (and metadata) in a layout.expand ' +
|
|
22
|
-
'envelope, optionally writing it to a path within cwd.',
|
|
23
|
-
importPath: '@astryxdesign/cli/api',
|
|
24
|
-
signature:
|
|
25
|
-
'layoutExpand(expression: string, options?: LayoutExpandOptions): Promise<LayoutExpandResponse>',
|
|
26
|
-
keywords: ['layout', 'expand', 'xle', 'xlo', 'tsx', 'scaffold', 'generate'],
|
|
27
|
-
params: [
|
|
28
|
-
{
|
|
29
|
-
name: 'expression',
|
|
30
|
-
type: 'string',
|
|
31
|
-
description:
|
|
32
|
-
'The layout expression to expand (XLE compact or XLO outline form).',
|
|
33
|
-
required: true,
|
|
34
|
-
},
|
|
35
|
-
{
|
|
36
|
-
name: 'options.targetPath',
|
|
37
|
-
type: 'string',
|
|
38
|
-
description:
|
|
39
|
-
'Write the generated TSX here (validated to stay within cwd). A directory gets <name>.tsx; a file path is used as-is. Omit to return the code without writing.',
|
|
40
|
-
},
|
|
41
|
-
{
|
|
42
|
-
name: 'options.form',
|
|
43
|
-
type: "'compact' | 'outline' | 'auto'",
|
|
44
|
-
description:
|
|
45
|
-
'Force which input surface the expression is parsed as, or auto-detect it.',
|
|
46
|
-
default: "'auto'",
|
|
47
|
-
},
|
|
48
|
-
{
|
|
49
|
-
name: 'options.loose',
|
|
50
|
-
type: 'boolean',
|
|
51
|
-
description:
|
|
52
|
-
'Downgrade unknown {hint} references to TODO warnings instead of hard errors.',
|
|
53
|
-
default: 'false',
|
|
54
|
-
},
|
|
55
|
-
{
|
|
56
|
-
name: 'options.name',
|
|
57
|
-
type: 'string',
|
|
58
|
-
description: 'PascalCase name for the generated component.',
|
|
59
|
-
default: "'GeneratedLayout'",
|
|
60
|
-
},
|
|
61
|
-
{
|
|
62
|
-
name: 'options.cwd',
|
|
63
|
-
type: 'string',
|
|
64
|
-
description:
|
|
65
|
-
'Directory the block catalog, registry, and target path resolve against.',
|
|
66
|
-
},
|
|
67
|
-
],
|
|
68
|
-
returns: [
|
|
69
|
-
{
|
|
70
|
-
type: 'layout.expand',
|
|
71
|
-
description:
|
|
72
|
-
'The expansion: the parsed form, the generated TSX code, componentsUsed, states (count of useState hooks scaffolded), todos, blocksReferenced (each {name, mode}), warnings, and written (the relative output path, or null when nothing was written).',
|
|
73
|
-
},
|
|
74
|
-
],
|
|
75
|
-
throws: [
|
|
76
|
-
{
|
|
77
|
-
code: 'ERR_INVALID_ARGUMENT',
|
|
78
|
-
when: 'the expression is empty, or name is not a PascalCase identifier',
|
|
79
|
-
},
|
|
80
|
-
{
|
|
81
|
-
code: 'ERR_INVALID_OPTION',
|
|
82
|
-
when: 'form is not one of "compact", "outline", or "auto"',
|
|
83
|
-
},
|
|
84
|
-
{
|
|
85
|
-
code: 'ERR_LAYOUT_PARSE',
|
|
86
|
-
when: 'the expression has a syntax error (reported with line/col)',
|
|
87
|
-
},
|
|
88
|
-
{
|
|
89
|
-
code: 'ERR_LAYOUT_INVALID',
|
|
90
|
-
when: 'the expression parses but fails validation (unknown component/prop/enum/block)',
|
|
91
|
-
},
|
|
92
|
-
{code: 'ERR_PATH_TRAVERSAL', when: 'the target path escapes cwd'},
|
|
93
|
-
],
|
|
94
|
-
examples: [
|
|
95
|
-
{
|
|
96
|
-
label: 'Expand to TSX',
|
|
97
|
-
code: 'const r = await layoutExpand(\'VStack[g4] > Heading"Title" + Text"Body"\');',
|
|
98
|
-
},
|
|
99
|
-
{
|
|
100
|
-
label: 'Write to a file',
|
|
101
|
-
code: "await layoutExpand('Card > Text\"Hi\"', {targetPath: 'src/Generated.tsx', name: 'Generated'});",
|
|
102
|
-
},
|
|
103
|
-
],
|
|
104
|
-
command: 'layout expand',
|
|
105
|
-
related: ['layoutCheck', 'layoutGrammar'],
|
|
106
|
-
};
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
// @generated by scripts/sync-api-types.mjs from the JSDoc in api/**/*.mjs.
|
|
2
|
-
// DO NOT EDIT — run `pnpm sync:api-types` to regenerate.
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* @file FunctionDoc for `layoutGrammar()` / `astryx layout grammar`. Colocated
|
|
6
|
-
* with the API function it documents; the response-shape source of truth stays
|
|
7
|
-
* in `layout.type.mjs`.
|
|
8
|
-
* @position packages/cli/api/layout — function documentation
|
|
9
|
-
*/
|
|
10
|
-
/** @type {import('@astryxdesign/cli/authoring').FunctionDoc} */
|
|
11
|
-
export const doc: import("@astryxdesign/cli/authoring").FunctionDoc;
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* @file FunctionDoc for `layoutGrammar()` / `astryx layout grammar`. Colocated
|
|
5
|
-
* with the API function it documents; the response-shape source of truth stays
|
|
6
|
-
* in `layout.type.mjs`.
|
|
7
|
-
* @position packages/cli/api/layout — function documentation
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
/** @type {import('@astryxdesign/cli/authoring').FunctionDoc} */
|
|
11
|
-
export const doc = {
|
|
12
|
-
type: 'function',
|
|
13
|
-
kind: 'api',
|
|
14
|
-
name: 'layoutGrammar',
|
|
15
|
-
displayName: 'layoutGrammar()',
|
|
16
|
-
summary: 'Return the XLE/XLO grammar cheatsheet for this install.',
|
|
17
|
-
description:
|
|
18
|
-
'The reference behind `astryx layout grammar`: the agent cheatsheet for writing XLE/XLO ' +
|
|
19
|
-
"layout expressions, with the alias table generated from this branch's registry rather than " +
|
|
20
|
-
'hand-maintained, so short names always reflect the components actually installed.',
|
|
21
|
-
importPath: '@astryxdesign/cli/api',
|
|
22
|
-
signature:
|
|
23
|
-
'layoutGrammar(options?: LayoutGrammarOptions): Promise<LayoutGrammarResponse>',
|
|
24
|
-
keywords: [
|
|
25
|
-
'layout',
|
|
26
|
-
'grammar',
|
|
27
|
-
'cheatsheet',
|
|
28
|
-
'xle',
|
|
29
|
-
'xlo',
|
|
30
|
-
'aliases',
|
|
31
|
-
'reference',
|
|
32
|
-
],
|
|
33
|
-
params: [
|
|
34
|
-
{
|
|
35
|
-
name: 'options.cwd',
|
|
36
|
-
type: 'string',
|
|
37
|
-
description:
|
|
38
|
-
'Directory the component registry (and its alias table) resolves against.',
|
|
39
|
-
},
|
|
40
|
-
],
|
|
41
|
-
returns: [
|
|
42
|
-
{
|
|
43
|
-
type: 'layout.grammar',
|
|
44
|
-
description:
|
|
45
|
-
"The cheatsheet: a text field with the full grammar reference, plus an aliases map (short name → canonical component) generated from this install's registry.",
|
|
46
|
-
},
|
|
47
|
-
],
|
|
48
|
-
examples: [
|
|
49
|
-
{
|
|
50
|
-
label: 'Get the cheatsheet',
|
|
51
|
-
code: 'const {data} = await layoutGrammar();',
|
|
52
|
-
},
|
|
53
|
-
],
|
|
54
|
-
command: 'layout grammar',
|
|
55
|
-
related: ['layoutExpand', 'layoutCheck'],
|
|
56
|
-
};
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 1,
|
|
3
|
-
"generatedBy": "scripts/generate-cli-themes.mjs",
|
|
4
|
-
"themes": [
|
|
5
|
-
{
|
|
6
|
-
"slug": "butter",
|
|
7
|
-
"displayName": "Butter",
|
|
8
|
-
"description": "Warm, creamy yellows with a friendly blue accent. Playful enough for consumer surfaces, soft enough to stay readable.",
|
|
9
|
-
"maintained": false,
|
|
10
|
-
"entry": "butterTheme.ts",
|
|
11
|
-
"exportName": "butterTheme",
|
|
12
|
-
"files": [
|
|
13
|
-
"butterTheme.ts",
|
|
14
|
-
"icons.tsx"
|
|
15
|
-
]
|
|
16
|
-
},
|
|
17
|
-
{
|
|
18
|
-
"slug": "chocolate",
|
|
19
|
-
"displayName": "Chocolate",
|
|
20
|
-
"description": "Warm chocolate theme for Astryx — rich brown palette with Fraunces headings, Albert Sans body, and Lucide icons",
|
|
21
|
-
"maintained": false,
|
|
22
|
-
"entry": "chocolateTheme.ts",
|
|
23
|
-
"exportName": "chocolateTheme",
|
|
24
|
-
"files": [
|
|
25
|
-
"chocolateTheme.ts",
|
|
26
|
-
"icons.tsx"
|
|
27
|
-
]
|
|
28
|
-
},
|
|
29
|
-
{
|
|
30
|
-
"slug": "gothic",
|
|
31
|
-
"displayName": "Gothic",
|
|
32
|
-
"description": "Deep blue-grays and a signature display serif. Dramatic and editorial, for surfaces that want to be remembered.",
|
|
33
|
-
"maintained": false,
|
|
34
|
-
"entry": "gothicTheme.ts",
|
|
35
|
-
"exportName": "gothicTheme",
|
|
36
|
-
"files": [
|
|
37
|
-
"gothicTheme.ts",
|
|
38
|
-
"icons.tsx"
|
|
39
|
-
]
|
|
40
|
-
},
|
|
41
|
-
{
|
|
42
|
-
"slug": "matcha",
|
|
43
|
-
"displayName": "Matcha",
|
|
44
|
-
"description": "Earthy greens with a calm, organic feel. Naturalistic and grounded, great for wellness or content-first apps.",
|
|
45
|
-
"maintained": false,
|
|
46
|
-
"entry": "matchaTheme.ts",
|
|
47
|
-
"exportName": "matchaTheme",
|
|
48
|
-
"files": [
|
|
49
|
-
"matchaTheme.ts",
|
|
50
|
-
"icons.tsx"
|
|
51
|
-
]
|
|
52
|
-
},
|
|
53
|
-
{
|
|
54
|
-
"slug": "neutral",
|
|
55
|
-
"displayName": "Neutral",
|
|
56
|
-
"description": "Restrained warm grays. Minimal and quiet, so the content stays the focus.",
|
|
57
|
-
"maintained": true,
|
|
58
|
-
"entry": "neutralTheme.ts",
|
|
59
|
-
"exportName": "neutralTheme",
|
|
60
|
-
"files": [
|
|
61
|
-
"neutralTheme.ts",
|
|
62
|
-
"icons.tsx",
|
|
63
|
-
"neutralPalettes.ts",
|
|
64
|
-
"neutralPalettes.generated.ts",
|
|
65
|
-
"neutralPaletteRefs.generated.ts",
|
|
66
|
-
"neutralPalettes.generated.receipt.json",
|
|
67
|
-
"palette.config.json"
|
|
68
|
-
]
|
|
69
|
-
},
|
|
70
|
-
{
|
|
71
|
-
"slug": "stone",
|
|
72
|
-
"displayName": "Stone",
|
|
73
|
-
"description": "Warm stone and slate, earthy and understated, with just enough character to feel handcrafted.",
|
|
74
|
-
"maintained": false,
|
|
75
|
-
"entry": "stoneTheme.ts",
|
|
76
|
-
"exportName": "stoneTheme",
|
|
77
|
-
"files": [
|
|
78
|
-
"stoneTheme.ts",
|
|
79
|
-
"icons.tsx"
|
|
80
|
-
]
|
|
81
|
-
},
|
|
82
|
-
{
|
|
83
|
-
"slug": "y2k",
|
|
84
|
-
"displayName": "Y2K",
|
|
85
|
-
"description": "Hot pinks, lime greens, and Poppins. Bubbly, playful, and unmistakably retro.",
|
|
86
|
-
"maintained": false,
|
|
87
|
-
"entry": "y2kTheme.ts",
|
|
88
|
-
"exportName": "y2kTheme",
|
|
89
|
-
"files": [
|
|
90
|
-
"y2kTheme.ts",
|
|
91
|
-
"icons.tsx"
|
|
92
|
-
]
|
|
93
|
-
}
|
|
94
|
-
]
|
|
95
|
-
}
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* @file CommandDoc for `astryx layout check`. The terminal binding of the
|
|
5
|
-
* `layoutCheck()` function (referenced via `fn`); its args/flags map to that
|
|
6
|
-
* function's params so a converter can build Commander config + --help from one
|
|
7
|
-
* source of truth.
|
|
8
|
-
* @position packages/cli/clients/cli/commands — command documentation
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
/** @type {import('@astryxdesign/cli/authoring').CommandDoc} */
|
|
12
|
-
export const doc = {
|
|
13
|
-
type: 'command',
|
|
14
|
-
name: 'layout check',
|
|
15
|
-
displayName: 'astryx layout check',
|
|
16
|
-
namespace: 'cli',
|
|
17
|
-
summary:
|
|
18
|
-
'Validate a layout expression and echo canonical compact/outline forms',
|
|
19
|
-
description:
|
|
20
|
-
'Parses and validates a compressed XLE/XLO expression without generating any TSX, and ' +
|
|
21
|
-
'echoes it back in both canonical surfaces (compact and outline). An invalid but ' +
|
|
22
|
-
'parseable expression is reported with line/col and suggestions, and exits non-zero.',
|
|
23
|
-
fn: 'layoutCheck',
|
|
24
|
-
args: [{name: 'expression', param: 'expression', required: false}],
|
|
25
|
-
options: [
|
|
26
|
-
{flag: '--file <file>', description: 'Read the expression from a file'},
|
|
27
|
-
{
|
|
28
|
-
flag: '--form <form>',
|
|
29
|
-
param: 'options.form',
|
|
30
|
-
choices: ['compact', 'outline', 'auto'],
|
|
31
|
-
default: 'auto',
|
|
32
|
-
description: 'Input surface: compact, outline, or auto',
|
|
33
|
-
},
|
|
34
|
-
{
|
|
35
|
-
flag: '--loose',
|
|
36
|
-
param: 'options.loose',
|
|
37
|
-
description: 'Downgrade unknown {block} hints to TODO placeholders',
|
|
38
|
-
},
|
|
39
|
-
],
|
|
40
|
-
examples: [
|
|
41
|
-
{
|
|
42
|
-
label: 'Validate an expression',
|
|
43
|
-
cli: "astryx layout check 'A[cp6] > L > LC > S[p6]' --json",
|
|
44
|
-
},
|
|
45
|
-
],
|
|
46
|
-
exitCodes: [
|
|
47
|
-
{code: 0, when: 'the expression is valid'},
|
|
48
|
-
{
|
|
49
|
-
code: 1,
|
|
50
|
-
when: 'the expression is invalid or empty, has a syntax error, or a bad --form',
|
|
51
|
-
},
|
|
52
|
-
],
|
|
53
|
-
related: ['layout expand', 'layout grammar'],
|
|
54
|
-
};
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* @file CommandDoc for `astryx layout expand`. The terminal binding of the
|
|
5
|
-
* `layoutExpand()` function (referenced via `fn`); its args/flags map to that
|
|
6
|
-
* function's params so a converter can build Commander config + --help from one
|
|
7
|
-
* source of truth.
|
|
8
|
-
* @position packages/cli/clients/cli/commands — command documentation
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
/** @type {import('@astryxdesign/cli/authoring').CommandDoc} */
|
|
12
|
-
export const doc = {
|
|
13
|
-
type: 'command',
|
|
14
|
-
name: 'layout expand',
|
|
15
|
-
displayName: 'astryx layout expand',
|
|
16
|
-
namespace: 'cli',
|
|
17
|
-
summary: 'Expand a layout expression into validated XDS TSX',
|
|
18
|
-
description:
|
|
19
|
-
'Parses and validates a compressed XLE/XLO expression, then expands it into ' +
|
|
20
|
-
'ready-to-use XDS TSX, routing children into slots, scaffolding typed useState for ' +
|
|
21
|
-
'interactive controls, and splicing referenced blocks. Writes to a path, or returns the code.',
|
|
22
|
-
fn: 'layoutExpand',
|
|
23
|
-
args: [
|
|
24
|
-
{name: 'expression', param: 'expression', required: false},
|
|
25
|
-
{name: 'path', param: 'options.targetPath', required: false},
|
|
26
|
-
],
|
|
27
|
-
options: [
|
|
28
|
-
{flag: '--file <file>', description: 'Read the expression from a file'},
|
|
29
|
-
{
|
|
30
|
-
flag: '--form <form>',
|
|
31
|
-
param: 'options.form',
|
|
32
|
-
choices: ['compact', 'outline', 'auto'],
|
|
33
|
-
default: 'auto',
|
|
34
|
-
description: 'Input surface: compact, outline, or auto',
|
|
35
|
-
},
|
|
36
|
-
{
|
|
37
|
-
flag: '--name <name>',
|
|
38
|
-
param: 'options.name',
|
|
39
|
-
default: 'GeneratedLayout',
|
|
40
|
-
description: 'Generated component name (PascalCase)',
|
|
41
|
-
},
|
|
42
|
-
{
|
|
43
|
-
flag: '--loose',
|
|
44
|
-
param: 'options.loose',
|
|
45
|
-
description: 'Downgrade unknown {block} hints to TODO placeholders',
|
|
46
|
-
},
|
|
47
|
-
],
|
|
48
|
-
examples: [
|
|
49
|
-
{
|
|
50
|
-
label: 'Expand to a file',
|
|
51
|
-
cli: "astryx layout expand 'V[g6] > C{card-callout}*4' ./src/Page.tsx",
|
|
52
|
-
},
|
|
53
|
-
{
|
|
54
|
-
label: 'From a file, named',
|
|
55
|
-
cli: 'astryx layout expand --file layout.xlo --name Dashboard',
|
|
56
|
-
},
|
|
57
|
-
],
|
|
58
|
-
exitCodes: [
|
|
59
|
-
{code: 0, when: 'success'},
|
|
60
|
-
{
|
|
61
|
-
code: 1,
|
|
62
|
-
when: 'a missing/empty expression, a bad --name or --form, a parse/validation error, or a path escape',
|
|
63
|
-
},
|
|
64
|
-
],
|
|
65
|
-
related: ['layout check', 'layout grammar'],
|
|
66
|
-
};
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* @file CommandDoc for `astryx layout grammar`. The terminal binding of the
|
|
5
|
-
* `layoutGrammar()` function (referenced via `fn`); it carries only CLI-surface
|
|
6
|
-
* facts so a converter can build Commander config + --help from one source of
|
|
7
|
-
* truth.
|
|
8
|
-
* @position packages/cli/clients/cli/commands — command documentation
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
/** @type {import('@astryxdesign/cli/authoring').CommandDoc} */
|
|
12
|
-
export const doc = {
|
|
13
|
-
type: 'command',
|
|
14
|
-
name: 'layout grammar',
|
|
15
|
-
displayName: 'astryx layout grammar',
|
|
16
|
-
namespace: 'cli',
|
|
17
|
-
summary:
|
|
18
|
-
'Print the XLE/XLO cheatsheet (alias table generated from this branch)',
|
|
19
|
-
description:
|
|
20
|
-
'Prints the XLE/XLO grammar cheatsheet for writing layout expressions, with the alias ' +
|
|
21
|
-
"table generated from this install's registry so short names always reflect the " +
|
|
22
|
-
'components actually available.',
|
|
23
|
-
fn: 'layoutGrammar',
|
|
24
|
-
examples: [{label: 'Get the cheatsheet', cli: 'astryx layout grammar'}],
|
|
25
|
-
exitCodes: [
|
|
26
|
-
{code: 0, when: 'success'},
|
|
27
|
-
{code: 1, when: 'the component registry cannot be read'},
|
|
28
|
-
],
|
|
29
|
-
related: ['layout expand', 'layout check'],
|
|
30
|
-
};
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* @file CommandDoc for the `astryx layout` command group. A parent group with no
|
|
5
|
-
* behavior of its own; it dispatches to the expand/check/grammar subcommands,
|
|
6
|
-
* which carry the actual args, flags, and wrapped functions.
|
|
7
|
-
* @position packages/cli/clients/cli/commands — command documentation
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
/** @type {import('@astryxdesign/cli/authoring').CommandDoc} */
|
|
11
|
-
export const doc = {
|
|
12
|
-
type: 'command',
|
|
13
|
-
name: 'layout',
|
|
14
|
-
displayName: 'astryx layout',
|
|
15
|
-
namespace: 'cli',
|
|
16
|
-
summary: 'Generate XDS layouts from compressed expressions (XLE/XLO)',
|
|
17
|
-
description:
|
|
18
|
-
'The layout command group. Running astryx layout with no subcommand prints the ' +
|
|
19
|
-
'subcommand list; the work happens in the subcommands: expand an expression into ' +
|
|
20
|
-
'TSX (expand), validate one (check), or print the grammar cheatsheet (grammar).',
|
|
21
|
-
subcommands: ['expand', 'check', 'grammar'],
|
|
22
|
-
examples: [
|
|
23
|
-
{label: 'Print the grammar', cli: 'astryx layout grammar'},
|
|
24
|
-
{
|
|
25
|
-
label: 'Expand to TSX',
|
|
26
|
-
cli: "astryx layout expand 'V[g6] > C{card-callout}*4' ./src/Page.tsx",
|
|
27
|
-
},
|
|
28
|
-
],
|
|
29
|
-
exitCodes: [
|
|
30
|
-
{code: 0, when: 'success (help shown, or a subcommand succeeded)'},
|
|
31
|
-
{code: 1, when: 'an unknown subcommand'},
|
|
32
|
-
],
|
|
33
|
-
related: ['template', 'build'],
|
|
34
|
-
};
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* @file Error-code contract tests for the layout command wrapper. Locks the
|
|
5
|
-
* two foreseeable input errors to STABLE ERR_* codes (never ERR_UNKNOWN or a
|
|
6
|
-
* raw fs errno) and asserts --json/human exit parity:
|
|
7
|
-
* - empty expression → ERR_MISSING_ARGUMENT
|
|
8
|
-
* - --file <missing> → ERR_FILE_NOT_FOUND (not raw ENOENT), no stack leak
|
|
9
|
-
* Spawns the real binary so the bin error boundary is exercised faithfully.
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
import {describe, it, expect} from 'vitest';
|
|
13
|
-
import {spawnSync} from 'node:child_process';
|
|
14
|
-
import * as path from 'node:path';
|
|
15
|
-
import {fileURLToPath} from 'node:url';
|
|
16
|
-
|
|
17
|
-
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
18
|
-
const CLI_BIN = path.resolve(__dirname, '../bin/astryx.mjs');
|
|
19
|
-
|
|
20
|
-
function run(args) {
|
|
21
|
-
const res = spawnSync('node', [CLI_BIN, ...args], {
|
|
22
|
-
encoding: 'utf-8',
|
|
23
|
-
timeout: 20_000,
|
|
24
|
-
});
|
|
25
|
-
return {status: res.status, stdout: res.stdout || '', stderr: res.stderr || ''};
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
describe('layout --json error codes', () => {
|
|
29
|
-
for (const sub of ['expand', 'check']) {
|
|
30
|
-
it(`layout ${sub} "" → ERR_MISSING_ARGUMENT (not ERR_UNKNOWN)`, () => {
|
|
31
|
-
const r = run(['--json', 'layout', sub, '']);
|
|
32
|
-
expect(r.status).toBe(1);
|
|
33
|
-
const env = JSON.parse(r.stdout);
|
|
34
|
-
expect(env.code).toBe('ERR_MISSING_ARGUMENT');
|
|
35
|
-
expect(r.stderr).toBe('');
|
|
36
|
-
expect(r.stdout).not.toMatch(/\n\s+at /); // no stack frames
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
it(`layout ${sub} --file <missing> → ERR_FILE_NOT_FOUND (not ENOENT)`, () => {
|
|
40
|
-
const r = run([
|
|
41
|
-
'--json',
|
|
42
|
-
'layout',
|
|
43
|
-
sub,
|
|
44
|
-
'--file',
|
|
45
|
-
'/tmp/definitely-missing-astryx-xyz.mjs',
|
|
46
|
-
]);
|
|
47
|
-
expect(r.status).toBe(1);
|
|
48
|
-
const env = JSON.parse(r.stdout);
|
|
49
|
-
expect(env.code).toBe('ERR_FILE_NOT_FOUND');
|
|
50
|
-
expect(r.stderr).toBe('');
|
|
51
|
-
});
|
|
52
|
-
|
|
53
|
-
it(`layout ${sub}: --json and human agree on exit code (empty input)`, () => {
|
|
54
|
-
const human = run(['layout', sub, '']);
|
|
55
|
-
const json = run(['--json', 'layout', sub, '']);
|
|
56
|
-
expect(json.status).toBe(human.status);
|
|
57
|
-
expect(json.status).toBe(1);
|
|
58
|
-
});
|
|
59
|
-
|
|
60
|
-
it(`layout ${sub} --file <missing> in human mode leaks no stack trace`, () => {
|
|
61
|
-
const r = run(['layout', sub, '--file', '/tmp/definitely-missing-astryx-xyz.mjs']);
|
|
62
|
-
expect(r.status).toBe(1);
|
|
63
|
-
expect(r.stderr).not.toMatch(/\n\s+at /);
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
});
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* @file CLI-level tests for `astryx layout check` exit-code parity.
|
|
5
|
-
*
|
|
6
|
-
* The exit code is the contract and must NOT depend on --json vs human mode:
|
|
7
|
-
* an invalid (but parseable) layout exits 1 in BOTH modes so `layout check`
|
|
8
|
-
* works as a CI gate / agent check without parsing stdout. Runs the real
|
|
9
|
-
* program in-process via the shared runCli harness.
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
import {describe, it, expect} from 'vitest';
|
|
13
|
-
import {runCli} from '../../../test-utils/run-cli.mjs';
|
|
14
|
-
|
|
15
|
-
const SLOW = 30_000;
|
|
16
|
-
// Parses fine, but references an unknown component -> data.valid: false
|
|
17
|
-
// (a semantic error, surfaced as data, not a thrown ERR_LAYOUT_PARSE).
|
|
18
|
-
const INVALID = 'ZzzUnknownComponent[foo=bar]';
|
|
19
|
-
const VALID = 'K';
|
|
20
|
-
|
|
21
|
-
describe('layout check — exit-code parity (--json vs human)', () => {
|
|
22
|
-
it('human mode exits 1 for an invalid (parseable) expression', async () => {
|
|
23
|
-
const {status} = await runCli(['layout', 'check', INVALID]);
|
|
24
|
-
expect(status).toBe(1);
|
|
25
|
-
}, SLOW);
|
|
26
|
-
|
|
27
|
-
it('--json exits 1 for the SAME invalid expression (modes agree)', async () => {
|
|
28
|
-
const {status, stdout} = await runCli(['layout', 'check', INVALID, '--json']);
|
|
29
|
-
const env = JSON.parse(stdout);
|
|
30
|
-
expect(env.type).toBe('layout.check');
|
|
31
|
-
expect(env.data.valid).toBe(false);
|
|
32
|
-
expect(status).toBe(1);
|
|
33
|
-
}, SLOW);
|
|
34
|
-
|
|
35
|
-
it('a valid expression exits 0 in both modes', async () => {
|
|
36
|
-
expect((await runCli(['layout', 'check', VALID])).status).toBe(0);
|
|
37
|
-
const {status, stdout} = await runCli(['layout', 'check', VALID, '--json']);
|
|
38
|
-
expect(JSON.parse(stdout).data.valid).toBe(true);
|
|
39
|
-
expect(status).toBe(0);
|
|
40
|
-
}, SLOW);
|
|
41
|
-
});
|