@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
|
@@ -11,11 +11,39 @@ export function pkgOf(t: {
|
|
|
11
11
|
package?: string;
|
|
12
12
|
}): string;
|
|
13
13
|
/**
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
|
|
14
|
+
* Every id that should resolve to a discovered template. Replacements keep
|
|
15
|
+
* their own integration id and also own the Core id they replace.
|
|
16
|
+
* @param {{dirName: string, replaces?: string}} template
|
|
17
|
+
* @returns {string[]}
|
|
18
|
+
*/
|
|
19
|
+
export function templateLookupIds(template: {
|
|
20
|
+
dirName: string;
|
|
21
|
+
replaces?: string;
|
|
22
|
+
}): string[];
|
|
23
|
+
/**
|
|
24
|
+
* Remove entries shadowed in the default discovery view while retaining them in
|
|
25
|
+
* package-scoped views. An active replacement owns its target id. A rejected
|
|
26
|
+
* same-id declaration falls back to Core when a Core template of the same kind
|
|
27
|
+
* owns that id; otherwise the integration template remains available by kind.
|
|
28
|
+
* @param {DiscoveredTemplate[]} templates
|
|
29
|
+
* @returns {DiscoveredTemplate[]}
|
|
30
|
+
*/
|
|
31
|
+
export function effectiveTemplateDiscovery(templates: DiscoveredTemplate[]): DiscoveredTemplate[];
|
|
32
|
+
/**
|
|
33
|
+
* Replace each Astryx template fixture reference with a placeholder so
|
|
34
|
+
* scaffolded pages render with zero setup. Images get a self-contained data
|
|
35
|
+
* URI; videos (which have no equivalent inline placeholder — see
|
|
36
|
+
* VIDEO_EXTENSIONS) are stripped to an empty src instead of being
|
|
37
|
+
* mis-replaced with image data. Builders drop in their own media either way.
|
|
38
|
+
*
|
|
39
|
+
* A reference is a URL token that resolves to a root-relative path under
|
|
40
|
+
* FIXTURE_SEGMENT. It is replaced whole, query and fragment included, and
|
|
41
|
+
* classified by the suffix of its last path segment. A reference that cannot
|
|
42
|
+
* be replaced safely throws with its path rather than being guessed at or
|
|
43
|
+
* left behind. Prose is left as written: in text (JSX text, a word inside a
|
|
44
|
+
* longer string) trailing punctuation is not part of a path and a path with
|
|
45
|
+
* no suffix, such as the bare directory, is a mention; inside a comment
|
|
46
|
+
* nothing throws.
|
|
19
47
|
*
|
|
20
48
|
* @param {string} source - Template source code.
|
|
21
49
|
* @returns {string} Source with demo asset references replaced.
|
|
@@ -28,6 +56,13 @@ export function stripTemplateAssetRefs(source: string): string;
|
|
|
28
56
|
* @returns {string[]}
|
|
29
57
|
*/
|
|
30
58
|
export function listTemplates(): string[];
|
|
59
|
+
/**
|
|
60
|
+
* Resolve the template-spec file for a core page directory: the first existing
|
|
61
|
+
* metadata file in {@link ALL_TEMPLATE_SUFFIXES} precedence, or null.
|
|
62
|
+
* @param {string} dirPath
|
|
63
|
+
* @returns {string | null}
|
|
64
|
+
*/
|
|
65
|
+
export function findPageDocFile(dirPath: string): string | null;
|
|
31
66
|
/**
|
|
32
67
|
* Discover only the templates built into @astryxdesign/core. Integration
|
|
33
68
|
* authoring checks use this narrower surface so a broken project config or a
|
|
@@ -35,22 +70,54 @@ export function listTemplates(): string[];
|
|
|
35
70
|
* @returns {Promise<DiscoveredTemplate[]>}
|
|
36
71
|
*/
|
|
37
72
|
export function discoverCoreTemplates(): Promise<DiscoveredTemplate[]>;
|
|
73
|
+
/**
|
|
74
|
+
* Apply valid integration replacements to a raw template set.
|
|
75
|
+
*
|
|
76
|
+
* One declaration owns its Core target. When different configured packages
|
|
77
|
+
* replace the same target, the later package wins and discovery returns a
|
|
78
|
+
* warning, matching integration-doc replacement order. Multiple declarations
|
|
79
|
+
* inside one package are invalid and fail closed. Missing targets and kind
|
|
80
|
+
* mismatches also fail closed: Core stays selected and every integration
|
|
81
|
+
* template remains addressable by its own id.
|
|
82
|
+
*
|
|
83
|
+
* @param {DiscoveredTemplate[]} templates
|
|
84
|
+
* @param {TemplateDiscoveryError[]} [declarationErrors]
|
|
85
|
+
* @returns {{templates: DiscoveredTemplate[], errors: TemplateReplacementError[]}}
|
|
86
|
+
*/
|
|
87
|
+
export function applyTemplateReplacements(templates: DiscoveredTemplate[], declarationErrors?: TemplateDiscoveryError[]): {
|
|
88
|
+
templates: DiscoveredTemplate[];
|
|
89
|
+
errors: TemplateReplacementError[];
|
|
90
|
+
};
|
|
91
|
+
/**
|
|
92
|
+
* Discover every template without hiding replaced Core originals. Internal
|
|
93
|
+
* package-qualified selection uses this view.
|
|
94
|
+
* @param {string} [cwd]
|
|
95
|
+
* @returns {Promise<DiscoveredTemplate[]>}
|
|
96
|
+
*/
|
|
97
|
+
export function discoverAllUnresolved(cwd?: string): Promise<DiscoveredTemplate[]>;
|
|
98
|
+
/**
|
|
99
|
+
* Discover the resolved catalog before default-view shadowing. Internal
|
|
100
|
+
* package-qualified selection uses this view.
|
|
101
|
+
* @param {string} [cwd]
|
|
102
|
+
* @returns {Promise<DiscoveredTemplate[]>}
|
|
103
|
+
*/
|
|
104
|
+
export function discoverAllResolved(cwd?: string): Promise<DiscoveredTemplate[]>;
|
|
38
105
|
/**
|
|
39
106
|
* @param {string} [cwd]
|
|
40
107
|
* @returns {Promise<DiscoveredTemplate[]>}
|
|
41
108
|
*/
|
|
42
109
|
export function discoverAll(cwd?: string): Promise<DiscoveredTemplate[]>;
|
|
43
110
|
/**
|
|
44
|
-
* Like {@link discoverAll} but also returns integration-template discovery
|
|
45
|
-
* errors
|
|
46
|
-
*
|
|
111
|
+
* Like {@link discoverAll} but also returns integration-template discovery and
|
|
112
|
+
* replacement-declaration errors. Use this when the caller wants to warn about
|
|
113
|
+
* malformed integration templates or inactive replacement declarations.
|
|
47
114
|
*
|
|
48
115
|
* @param {string} [cwd]
|
|
49
|
-
* @returns {Promise<{templates: DiscoveredTemplate[], errors: TemplateDiscoveryError
|
|
116
|
+
* @returns {Promise<{templates: DiscoveredTemplate[], errors: Array<TemplateDiscoveryError | TemplateReplacementError>}>}
|
|
50
117
|
*/
|
|
51
118
|
export function discoverAllWithErrors(cwd?: string): Promise<{
|
|
52
119
|
templates: DiscoveredTemplate[];
|
|
53
|
-
errors: TemplateDiscoveryError
|
|
120
|
+
errors: Array<TemplateDiscoveryError | TemplateReplacementError>;
|
|
54
121
|
}>;
|
|
55
122
|
/**
|
|
56
123
|
* Discover the templates contributed by a SINGLE integration. Same per-template
|
|
@@ -58,12 +125,13 @@ export function discoverAllWithErrors(cwd?: string): Promise<{
|
|
|
58
125
|
* page|block type required); broken templates are recorded in `errors` rather
|
|
59
126
|
* than thrown. Exposed for `doctor integration validate` and template authoring checks.
|
|
60
127
|
*
|
|
61
|
-
* @param {{name?: string, __spec?: string, templates?: string}} integration
|
|
128
|
+
* @param {{name?: string, __spec?: string, __autolinked?: boolean, templates?: string}} integration
|
|
62
129
|
* @returns {Promise<{templates: DiscoveredTemplate[], errors: TemplateDiscoveryError[]}>}
|
|
63
130
|
*/
|
|
64
131
|
export function discoverIntegrationTemplatesForOne(integration: {
|
|
65
132
|
name?: string;
|
|
66
133
|
__spec?: string;
|
|
134
|
+
__autolinked?: boolean;
|
|
67
135
|
templates?: string;
|
|
68
136
|
}): Promise<{
|
|
69
137
|
templates: DiscoveredTemplate[];
|
|
@@ -117,6 +185,23 @@ export type DiscoveredTemplate = {
|
|
|
117
185
|
filePath: string;
|
|
118
186
|
docPath: string;
|
|
119
187
|
package?: string | undefined;
|
|
188
|
+
/**
|
|
189
|
+
* whether the owning integration was discovered
|
|
190
|
+
* from package.json rather than named in astryx.config
|
|
191
|
+
*/
|
|
192
|
+
autolinked?: boolean | undefined;
|
|
193
|
+
/**
|
|
194
|
+
* active Core template id this integration template replaces
|
|
195
|
+
*/
|
|
196
|
+
replaces?: string | undefined;
|
|
197
|
+
/**
|
|
198
|
+
* whether an invalid declaration was disabled
|
|
199
|
+
*/
|
|
200
|
+
replacementRejected?: boolean | undefined;
|
|
201
|
+
/**
|
|
202
|
+
* disabled declaration target
|
|
203
|
+
*/
|
|
204
|
+
replacementTarget?: string | undefined;
|
|
120
205
|
};
|
|
121
206
|
/**
|
|
122
207
|
* An integration-template discovery error.
|
|
@@ -125,6 +210,23 @@ export type TemplateDiscoveryError = {
|
|
|
125
210
|
package: string;
|
|
126
211
|
template?: string | undefined;
|
|
127
212
|
message: string;
|
|
213
|
+
code?: string | undefined;
|
|
214
|
+
severity?: "error" | "warning" | undefined;
|
|
215
|
+
/**
|
|
216
|
+
* Core target whose replacement set is invalid
|
|
217
|
+
*/
|
|
218
|
+
replacementTarget?: string | undefined;
|
|
219
|
+
/**
|
|
220
|
+
* whether the declaration came from an autolinked integration
|
|
221
|
+
*/
|
|
222
|
+
autolinked?: boolean | undefined;
|
|
223
|
+
};
|
|
224
|
+
/**
|
|
225
|
+
* A semantic error in an integration template replacement declaration.
|
|
226
|
+
*/
|
|
227
|
+
export type TemplateReplacementError = TemplateDiscoveryError & {
|
|
228
|
+
code: "missing_template_replacement_target" | "ambiguous_template_replacement" | "invalid_template_replacement";
|
|
229
|
+
severity: "warning" | "error";
|
|
128
230
|
};
|
|
129
231
|
/**
|
|
130
232
|
* The loaded metadata object from a template spec (loose — authored shape).
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
import {describe, expect, it} from 'vitest';
|
|
4
|
+
import * as fs from 'node:fs';
|
|
5
|
+
import * as path from 'node:path';
|
|
6
|
+
import {fileURLToPath} from 'node:url';
|
|
7
|
+
import jscodeshift from 'jscodeshift';
|
|
8
|
+
import {stripTemplateAssetRefs} from './template-adapter.mjs';
|
|
9
|
+
|
|
10
|
+
const PLACEHOLDER = stripTemplateAssetRefs("'/template-assets/x.png'").slice(
|
|
11
|
+
1,
|
|
12
|
+
-1,
|
|
13
|
+
);
|
|
14
|
+
|
|
15
|
+
describe('stripTemplateAssetRefs fixture references', () => {
|
|
16
|
+
it('replaces an image with a self-contained placeholder', () => {
|
|
17
|
+
expect(PLACEHOLDER).toMatch(/^data:image\/svg\+xml,[^\s'"`()]+$/u);
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
it.each([
|
|
21
|
+
'https://cdn.example.com/template-assets/logo.png',
|
|
22
|
+
'//cdn.example.com/template-assets/logo.png',
|
|
23
|
+
'/my-app/template-assets/hero.jpg',
|
|
24
|
+
'./template-assets/hero.jpg',
|
|
25
|
+
'template-assets/hero.jpg',
|
|
26
|
+
'/template-assets-archive/hero.jpg',
|
|
27
|
+
'@/template-assets/hero.jpg',
|
|
28
|
+
])('leaves %s untouched', value => {
|
|
29
|
+
const source = `const src = '${value}';`;
|
|
30
|
+
expect(stripTemplateAssetRefs(source)).toBe(source);
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
it.each([
|
|
34
|
+
'import StarIcon from "./icons/star.svg";',
|
|
35
|
+
'<Icon icon="/icons/star.svg" />',
|
|
36
|
+
'<Button icon={StarIcon} />',
|
|
37
|
+
"const icons = {star: 'heroicons:star'};",
|
|
38
|
+
])('leaves an icon outside the fixture namespace untouched: %s', source => {
|
|
39
|
+
expect(stripTemplateAssetRefs(source)).toBe(source);
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
it.each([
|
|
43
|
+
['a subdirectory', '/template-assets/avatars/ada.png'],
|
|
44
|
+
['an @ in its name', '/template-assets/hero@2x.png'],
|
|
45
|
+
['a plus in its name', '/template-assets/cover+1.jpg'],
|
|
46
|
+
['an encoded space in its name', '/template-assets/hero%20wide.png'],
|
|
47
|
+
])('replaces a fixture with %s', (_, value) => {
|
|
48
|
+
expect(stripTemplateAssetRefs(`<img src="${value}" />`)).toBe(
|
|
49
|
+
`<img src="${PLACEHOLDER}" />`,
|
|
50
|
+
);
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
it('replaces the whole reference, query and fragment included', () => {
|
|
54
|
+
expect(
|
|
55
|
+
stripTemplateAssetRefs("const hero = '/template-assets/hero.jpg?w=200';"),
|
|
56
|
+
).toBe(`const hero = '${PLACEHOLDER}';`);
|
|
57
|
+
expect(
|
|
58
|
+
stripTemplateAssetRefs("const clip = '/template-assets/clip.mp4#t=5';"),
|
|
59
|
+
).toBe("const clip = '';");
|
|
60
|
+
expect(
|
|
61
|
+
stripTemplateAssetRefs(
|
|
62
|
+
"const hero = '/template-assets/a.png?f=/template-assets/b.png';",
|
|
63
|
+
),
|
|
64
|
+
).toBe(`const hero = '${PLACEHOLDER}';`);
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
it('classifies by the complete final suffix, ignoring case', () => {
|
|
68
|
+
expect(
|
|
69
|
+
stripTemplateAssetRefs("src: '/template-assets/Clip.Min.MP4',"),
|
|
70
|
+
).toBe("src: '',");
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
it.each([
|
|
74
|
+
[
|
|
75
|
+
'a CSS url()',
|
|
76
|
+
"backgroundImage: 'url(/template-assets/hero.png)'",
|
|
77
|
+
`backgroundImage: 'url(${PLACEHOLDER})'`,
|
|
78
|
+
],
|
|
79
|
+
[
|
|
80
|
+
'a srcset list',
|
|
81
|
+
'srcSet="/template-assets/a.png 1x, /template-assets/a@2x.png 2x"',
|
|
82
|
+
`srcSet="${PLACEHOLDER} 1x, ${PLACEHOLDER} 2x"`,
|
|
83
|
+
],
|
|
84
|
+
[
|
|
85
|
+
'an HTML string with escaped quotes',
|
|
86
|
+
'const html = "<img src=\\"/template-assets/a.png\\">";',
|
|
87
|
+
`const html = "<img src=\\"${PLACEHOLDER}\\">";`,
|
|
88
|
+
],
|
|
89
|
+
[
|
|
90
|
+
'JSX text',
|
|
91
|
+
'<code>/template-assets/hero.png</code>',
|
|
92
|
+
`<code>${PLACEHOLDER}</code>`,
|
|
93
|
+
],
|
|
94
|
+
[
|
|
95
|
+
'a sentence that quotes it',
|
|
96
|
+
'const tip = "Replace \'/template-assets/hero.png\'.";',
|
|
97
|
+
`const tip = "Replace '${PLACEHOLDER}'.";`,
|
|
98
|
+
],
|
|
99
|
+
[
|
|
100
|
+
'a url() inside a longer string',
|
|
101
|
+
"const bg = 'url(/template-assets/a.png) + x';",
|
|
102
|
+
`const bg = 'url(${PLACEHOLDER}) + x';`,
|
|
103
|
+
],
|
|
104
|
+
[
|
|
105
|
+
'a comment',
|
|
106
|
+
'// hero: /template-assets/hero.png\n',
|
|
107
|
+
`// hero: ${PLACEHOLDER}\n`,
|
|
108
|
+
],
|
|
109
|
+
[
|
|
110
|
+
'a sentence, keeping its punctuation',
|
|
111
|
+
'// Uses /template-assets/a.png, then /template-assets/b.png.\n',
|
|
112
|
+
`// Uses ${PLACEHOLDER}, then ${PLACEHOLDER}.\n`,
|
|
113
|
+
],
|
|
114
|
+
])('replaces a fixture inside %s', (_, source, expected) => {
|
|
115
|
+
expect(stripTemplateAssetRefs(source)).toBe(expected);
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
it.each([
|
|
119
|
+
'<Text>Put your images in /template-assets/ first.</Text>',
|
|
120
|
+
"const note = 'Media: /template-assets/hero';",
|
|
121
|
+
'// Demo images live under /template-assets and are replaced.\n',
|
|
122
|
+
"const html = '<img src=/template-assets-archive/a.png>';",
|
|
123
|
+
])('leaves a mention in text that names no media file: %s', source => {
|
|
124
|
+
expect(stripTemplateAssetRefs(source)).toBe(source);
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
it.each([
|
|
128
|
+
"// Images come from `/template-assets/*` and '/template-assets/'.\nexport default function Page() {\n return null;\n}\n",
|
|
129
|
+
"/* Was '/template-assets/clip.bin'. */\nexport const x = 1;\n",
|
|
130
|
+
])('leaves a comment it would otherwise reject: %s', source => {
|
|
131
|
+
expect(stripTemplateAssetRefs(source)).toBe(source);
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
it.each([
|
|
135
|
+
[
|
|
136
|
+
'no file suffix',
|
|
137
|
+
"src: '/template-assets/hero',",
|
|
138
|
+
'/template-assets/hero',
|
|
139
|
+
],
|
|
140
|
+
['no file name', "src: '/template-assets/',", '/template-assets/'],
|
|
141
|
+
[
|
|
142
|
+
'no path below it',
|
|
143
|
+
"export const base = '/template-assets'; // base\n",
|
|
144
|
+
'/template-assets',
|
|
145
|
+
],
|
|
146
|
+
])(
|
|
147
|
+
'fails with the fixture path when a value has %s',
|
|
148
|
+
(_, source, reference) => {
|
|
149
|
+
expect(() => stripTemplateAssetRefs(source)).toThrow(
|
|
150
|
+
`Unrecognized template asset format (none) for ${reference}`,
|
|
151
|
+
);
|
|
152
|
+
},
|
|
153
|
+
);
|
|
154
|
+
|
|
155
|
+
it.each([
|
|
156
|
+
[
|
|
157
|
+
'const src = `/template-assets/${name}.png`;',
|
|
158
|
+
'/template-assets/${name}.png',
|
|
159
|
+
],
|
|
160
|
+
['const src = `/template-assets${path}`;', '/template-assets${path}'],
|
|
161
|
+
])(
|
|
162
|
+
'fails when a fixture path is built by interpolation: %s',
|
|
163
|
+
(source, reference) => {
|
|
164
|
+
expect(() => stripTemplateAssetRefs(source)).toThrow(
|
|
165
|
+
`Template asset reference ${reference} cannot be replaced safely: it is built by a template-literal interpolation`,
|
|
166
|
+
);
|
|
167
|
+
},
|
|
168
|
+
);
|
|
169
|
+
|
|
170
|
+
it.each([
|
|
171
|
+
[
|
|
172
|
+
'follows an interpolation',
|
|
173
|
+
'const src = `${base}/template-assets/a.png`;',
|
|
174
|
+
],
|
|
175
|
+
['is cut short by a parenthesis', "src: '/template-assets/a(1).mp4',"],
|
|
176
|
+
['ends a word in text', 'const s = "clip: /template-assets/a.png(1).mp4";'],
|
|
177
|
+
[
|
|
178
|
+
'has mismatched escaped quotes',
|
|
179
|
+
'const html = "<img src=\\"/template-assets/a.png\\\'>";',
|
|
180
|
+
],
|
|
181
|
+
[
|
|
182
|
+
'sits between a quote and a parenthesis',
|
|
183
|
+
"const s = '\"/template-assets/a.png)';",
|
|
184
|
+
],
|
|
185
|
+
])('fails when a fixture path %s', (_, source) => {
|
|
186
|
+
expect(() => stripTemplateAssetRefs(source)).toThrow(
|
|
187
|
+
/\/template-assets\/a.* cannot be replaced safely: it is not a whole/u,
|
|
188
|
+
);
|
|
189
|
+
});
|
|
190
|
+
|
|
191
|
+
it.each([
|
|
192
|
+
'srcSet="/template-assets/a.png 1x,/template-assets/b.png 2x"',
|
|
193
|
+
"const html = '<img src=/template-assets/b.png>';",
|
|
194
|
+
"const s = 'hero\\n/template-assets/b.png';",
|
|
195
|
+
])('fails when a fixture path is joined to other text: %s', source => {
|
|
196
|
+
expect(() => stripTemplateAssetRefs(source)).toThrow(
|
|
197
|
+
/\/template-assets\/b\.png cannot be replaced safely: it is joined/u,
|
|
198
|
+
);
|
|
199
|
+
});
|
|
200
|
+
|
|
201
|
+
it.each([
|
|
202
|
+
['concatenated', "const src = base + '/template-assets/hero.png';"],
|
|
203
|
+
['concatenated', "const src = '/template-assets/hero.png' + query;"],
|
|
204
|
+
['concatenated', "src += '/template-assets/hero.png';"],
|
|
205
|
+
['a method', "const src = '/template-assets/hero.png'.concat('?w=1');"],
|
|
206
|
+
['imported', "import hero from '/template-assets/hero.png';"],
|
|
207
|
+
['imported', "const hero = require('/template-assets/hero.png');"],
|
|
208
|
+
])('fails when a fixture string is %s: %s', (use, source) => {
|
|
209
|
+
expect(() => stripTemplateAssetRefs(source)).toThrow(
|
|
210
|
+
new RegExp(`/template-assets/hero\\.png .*${use}`, 'u'),
|
|
211
|
+
);
|
|
212
|
+
});
|
|
213
|
+
});
|
|
214
|
+
|
|
215
|
+
describe('shipped templates', () => {
|
|
216
|
+
it('copy with every fixture replaced and still parse', () => {
|
|
217
|
+
const root = path.resolve(
|
|
218
|
+
path.dirname(fileURLToPath(import.meta.url)),
|
|
219
|
+
'../../assets/templates',
|
|
220
|
+
);
|
|
221
|
+
const parse = jscodeshift.withParser('tsx');
|
|
222
|
+
const files = fs
|
|
223
|
+
.readdirSync(root, {recursive: true, encoding: 'utf-8'})
|
|
224
|
+
.filter(file => file.endsWith('.tsx'))
|
|
225
|
+
.filter(file =>
|
|
226
|
+
fs
|
|
227
|
+
.readFileSync(path.join(root, file), 'utf-8')
|
|
228
|
+
.includes('/template-assets'),
|
|
229
|
+
);
|
|
230
|
+
expect(files.length).toBeGreaterThan(10);
|
|
231
|
+
|
|
232
|
+
const problems = [];
|
|
233
|
+
for (const file of files) {
|
|
234
|
+
try {
|
|
235
|
+
const output = stripTemplateAssetRefs(
|
|
236
|
+
fs.readFileSync(path.join(root, file), 'utf-8'),
|
|
237
|
+
);
|
|
238
|
+
if (output.includes('/template-assets')) {
|
|
239
|
+
problems.push(`${file}: fixture reference left behind`);
|
|
240
|
+
}
|
|
241
|
+
parse(output);
|
|
242
|
+
} catch (err) {
|
|
243
|
+
problems.push(`${file}: ${/** @type {Error} */ (err).message}`);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
expect(problems).toEqual([]);
|
|
247
|
+
});
|
|
248
|
+
});
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @file Template discovery isolates each configured integration.
|
|
5
|
+
*
|
|
6
|
+
* An integration whose templates root cannot be read (here, the manifest points
|
|
7
|
+
* `templates` at a file) is that package's discovery error. Core templates and
|
|
8
|
+
* every other integration's templates are still discovered.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import {describe, it, expect, beforeEach, afterEach} from 'vitest';
|
|
12
|
+
import * as fs from 'node:fs';
|
|
13
|
+
import * as os from 'node:os';
|
|
14
|
+
import * as path from 'node:path';
|
|
15
|
+
import {discoverAll, discoverAllWithErrors} from './template-adapter.mjs';
|
|
16
|
+
import {runCli} from '../../test-utils/run-cli.mjs';
|
|
17
|
+
|
|
18
|
+
let tmpDir = '';
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* @param {string} name
|
|
22
|
+
* @param {Record<string, string>} files
|
|
23
|
+
*/
|
|
24
|
+
function installPackage(name, files) {
|
|
25
|
+
const dir = path.join(tmpDir, 'node_modules', ...name.split('/'));
|
|
26
|
+
fs.mkdirSync(dir, {recursive: true});
|
|
27
|
+
fs.writeFileSync(
|
|
28
|
+
path.join(dir, 'package.json'),
|
|
29
|
+
JSON.stringify({name, version: '1.0.0'}),
|
|
30
|
+
);
|
|
31
|
+
for (const [file, contents] of Object.entries(files)) {
|
|
32
|
+
fs.mkdirSync(path.dirname(path.join(dir, file)), {recursive: true});
|
|
33
|
+
fs.writeFileSync(path.join(dir, file), contents);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
beforeEach(() => {
|
|
38
|
+
tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'astryx-template-isolation-'));
|
|
39
|
+
fs.writeFileSync(
|
|
40
|
+
path.join(tmpDir, 'package.json'),
|
|
41
|
+
JSON.stringify({name: 'consumer', version: '1.0.0'}),
|
|
42
|
+
);
|
|
43
|
+
fs.writeFileSync(
|
|
44
|
+
path.join(tmpDir, 'astryx.config.mjs'),
|
|
45
|
+
`export default {integrations: ['@acme/file-root', '@acme/good']};\n`,
|
|
46
|
+
);
|
|
47
|
+
installPackage('@acme/file-root', {
|
|
48
|
+
'astryx.integration.mjs': `export default {templates: './templates.mjs'};\n`,
|
|
49
|
+
'templates.mjs': 'export default {};\n',
|
|
50
|
+
});
|
|
51
|
+
installPackage('@acme/good', {
|
|
52
|
+
'astryx.integration.mjs': `export default {templates: './templates'};\n`,
|
|
53
|
+
'templates/good-hero.template.mjs': `export default {type: 'block', name: 'Good hero', description: 'A hero.'};\n`,
|
|
54
|
+
'templates/good-hero.tsx': 'export default function GoodHero() { return null; }\n',
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
afterEach(() => {
|
|
59
|
+
fs.rmSync(tmpDir, {recursive: true, force: true});
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
describe('template discovery with an unreadable templates root', () => {
|
|
63
|
+
it('keeps core and the other integrations', async () => {
|
|
64
|
+
const templates = await discoverAll(tmpDir);
|
|
65
|
+
|
|
66
|
+
expect(templates).toContainEqual(
|
|
67
|
+
expect.objectContaining({dirName: 'good-hero', package: '@acme/good'}),
|
|
68
|
+
);
|
|
69
|
+
expect(templates.some(template => template.package == null)).toBe(true);
|
|
70
|
+
expect(templates.some(t => t.package === '@acme/file-root')).toBe(false);
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
it('reports the unreadable root as that package’s error', async () => {
|
|
74
|
+
const {errors} = await discoverAllWithErrors(tmpDir);
|
|
75
|
+
|
|
76
|
+
expect(errors).toContainEqual(
|
|
77
|
+
expect.objectContaining({
|
|
78
|
+
package: '@acme/file-root',
|
|
79
|
+
message: expect.stringContaining('templates.mjs'),
|
|
80
|
+
}),
|
|
81
|
+
);
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
it('keeps astryx template --list working', async () => {
|
|
85
|
+
const {status, stdout} = await runCli(['template', '--list', '--json'], {
|
|
86
|
+
cwd: tmpDir,
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
expect(status).toBe(0);
|
|
90
|
+
expect(JSON.parse(stdout).data).toContainEqual(
|
|
91
|
+
expect.objectContaining({id: 'good-hero'}),
|
|
92
|
+
);
|
|
93
|
+
});
|
|
94
|
+
});
|