@astryxdesign/cli 0.6.3 → 0.6.4-canary.0e1fbdb
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 +152 -107
- 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 +22 -10
- package/api/build/build.test.mjs +219 -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 +208 -53
- 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 +49 -19
- 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 +277 -41
- package/api/docs/_adapter.mjs +993 -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/docOverlays.test.mjs +27 -1
- 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.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/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 +18 -8
- package/api/doctor/doctor.mjs +635 -7
- package/api/doctor/doctor.test.mjs +732 -11
- package/api/doctor/doctor.type.d.mts +1 -1
- package/api/doctor/doctor.type.mjs +1 -1
- package/api/gap-report/gap-report.doc.mjs +27 -14
- package/api/hook/_adapter.mjs +19 -5
- package/api/hook/hook.doc.mjs +7 -3
- 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 -1
- package/api/index.mjs +6 -3
- package/api/init/init.doc.mjs +22 -12
- 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 +56 -65
- package/api/integration/add-theme.test.mjs +139 -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 +5 -4
- 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 +107 -0
- package/api/integration/pack-check.mjs +160 -11
- package/api/integration/pack-check.test.mjs +477 -47
- package/api/integration/pack-check.type.d.mts +26 -2
- package/api/integration/pack-check.type.mjs +15 -2
- 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 +2 -1
- package/api/json/envelope-types.test.mjs +76 -0
- package/api/json/index.ts +2 -0
- package/api/json/isError.doc.mjs +2 -1
- package/api/json/parseResponse.doc.mjs +3 -2
- package/api/layout/_adapter.mjs +20 -5
- package/api/layout/expand/expand.mjs +7 -5
- package/api/layout/expand/expand.path-safety.test.mjs +53 -0
- package/api/layout/grammar/grammar.mjs +2 -1
- package/api/layout/layoutCheck.doc.mjs +1 -0
- package/api/layout/layoutExpand.doc.mjs +2 -1
- package/api/layout/layoutGrammar.doc.mjs +1 -0
- package/api/search/search-return-type.test.mjs +54 -0
- package/api/search/search.d.mts +89 -12
- package/api/search/search.doc.mjs +8 -2
- package/api/search/search.mjs +697 -97
- 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 +8 -5
- package/api/swizzle/swizzle.type.d.mts +2 -2
- package/api/swizzle/swizzle.type.mjs +2 -2
- package/api/template/copy/copy.mjs +18 -24
- package/api/template/copy/copy.test.mjs +26 -0
- package/api/template/list/list.mjs +1 -0
- package/api/template/table-floating-bulk-actions.test.mjs +66 -0
- package/api/template/template-integration.test.mjs +1072 -3
- package/api/template/template-suffix.test.mjs +41 -21
- package/api/template/template.d.mts +1 -1
- package/api/template/template.doc.mjs +32 -9
- package/api/template/template.mjs +45 -8
- 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 +2 -2
- 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 +12 -12
- package/api/theme/themeBuild.doc.mjs +21 -17
- package/api/theme/themeList.doc.mjs +6 -3
- package/api/theme/themeListAvailable.doc.mjs +6 -3
- package/api/theme/themePaletteGenerate.doc.mjs +16 -8
- package/api/theme/themeTargets.doc.mjs +4 -2
- package/api/theme/themeTemplate.doc.mjs +8 -3
- 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 +358 -59
- package/api/upgrade/status/status.mjs +2 -2
- package/api/upgrade/upgrade.doc.mjs +32 -23
- 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 +12 -1
- package/assets/docs/authoring.doc.mjs +14 -0
- package/assets/docs/browser-support.doc.mjs +11 -11
- package/assets/docs/color.doc.mjs +8 -2
- package/assets/docs/elevation.doc.mjs +6 -4
- package/assets/docs/getting-started.doc.mjs +6 -17
- package/assets/docs/icons.doc.mjs +2 -21
- package/assets/docs/illustrations.doc.mjs +7 -15
- package/assets/docs/internationalization.doc.mjs +7 -5
- package/assets/docs/layout.doc.dense.mjs +132 -84
- package/assets/docs/layout.doc.mjs +134 -78
- package/assets/docs/migration.doc.mjs +19 -21
- package/assets/docs/motion.doc.mjs +16 -3
- package/assets/docs/principles.doc.dense.mjs +5 -5
- package/assets/docs/principles.doc.mjs +14 -6
- package/assets/docs/principles.doc.zh.mjs +6 -6
- package/assets/docs/shape.doc.mjs +8 -3
- package/assets/docs/spacing.doc.mjs +7 -2
- package/assets/docs/styling-libraries.doc.mjs +10 -6
- package/assets/docs/styling.doc.mjs +22 -26
- package/assets/docs/theme.doc.dense.mjs +58 -18
- package/assets/docs/theme.doc.mjs +60 -50
- package/assets/docs/theme.doc.zh.mjs +9 -8
- package/assets/docs/tokens.doc.dense.mjs +2 -2
- package/assets/docs/tokens.doc.mjs +390 -9
- package/assets/docs/tokens.doc.zh.mjs +2 -2
- package/assets/docs/tree/add-a-component.doc.mjs +75 -0
- package/assets/docs/tree/add-a-theme.doc.mjs +85 -0
- package/assets/docs/tree/add-a-topic.doc.mjs +144 -0
- package/assets/docs/tree/agent-guidance.doc.mjs +138 -0
- package/assets/docs/tree/api.doc.mjs +30 -0
- package/assets/docs/tree/block-template.doc.mjs +130 -0
- package/assets/docs/tree/build-the-template.doc.mjs +28 -0
- package/assets/docs/tree/building-blocks.doc.mjs +46 -0
- package/assets/docs/tree/check-your-docs.doc.mjs +137 -0
- package/assets/docs/tree/checks.doc.mjs +119 -0
- package/assets/docs/tree/cli.doc.mjs +23 -0
- package/assets/docs/tree/codemods.doc.mjs +147 -0
- package/assets/docs/tree/commands.doc.mjs +25 -0
- package/assets/docs/tree/component-family.doc.mjs +113 -0
- package/assets/docs/tree/component-imports.doc.mjs +69 -0
- package/assets/docs/tree/component-lookups.doc.mjs +149 -0
- package/assets/docs/tree/components.doc.mjs +23 -0
- package/assets/docs/tree/configuration.doc.mjs +23 -0
- package/assets/docs/tree/debug-and-gap-reports.doc.mjs +182 -0
- package/assets/docs/tree/define-the-theme.doc.mjs +118 -0
- package/assets/docs/tree/describe-the-component.doc.mjs +57 -0
- package/assets/docs/tree/docs.doc.mjs +21 -0
- package/assets/docs/tree/document-the-template.doc.mjs +28 -0
- package/assets/docs/tree/document-the-theme.doc.mjs +68 -0
- package/assets/docs/tree/export-template-assets.doc.mjs +147 -0
- package/assets/docs/tree/extend-or-replace.doc.mjs +103 -0
- package/assets/docs/tree/fonts-and-assets.doc.mjs +106 -0
- package/assets/docs/tree/generate-a-palette.doc.mjs +66 -0
- package/assets/docs/tree/grade-template-with-agent.doc.mjs +105 -0
- package/assets/docs/tree/help.doc.mjs +16 -0
- package/assets/docs/tree/integrations.doc.mjs +40 -0
- package/assets/docs/tree/links.doc.mjs +98 -0
- package/assets/docs/tree/package-and-test.doc.mjs +32 -0
- package/assets/docs/tree/page-template.doc.mjs +71 -0
- package/assets/docs/tree/publishing.doc.mjs +111 -0
- package/assets/docs/tree/quick-start.doc.mjs +272 -0
- package/assets/docs/tree/replace-a-core-component.doc.mjs +104 -0
- package/assets/docs/tree/replace-a-core-template.doc.mjs +172 -0
- package/assets/docs/tree/sections-and-placement.doc.mjs +108 -0
- package/assets/docs/tree/see-it-in-an-app.doc.mjs +59 -0
- package/assets/docs/tree/ship.doc.mjs +16 -0
- package/assets/docs/tree/short-and-findable.doc.mjs +108 -0
- package/assets/docs/tree/single-component.doc.mjs +165 -0
- package/assets/docs/tree/start-a-template.doc.mjs +143 -0
- package/assets/docs/tree/subcomponent.doc.mjs +115 -0
- package/assets/docs/tree/template-assets.doc.mjs +64 -0
- package/assets/docs/tree/template-doc-overview.doc.mjs +109 -0
- package/assets/docs/tree/template-fonts.doc.mjs +102 -0
- package/assets/docs/tree/template-grading-rubric.doc.mjs +452 -0
- package/assets/docs/tree/template-icons.doc.mjs +97 -0
- package/assets/docs/tree/template-images-media.doc.mjs +127 -0
- package/assets/docs/tree/template-styles.doc.mjs +93 -0
- package/assets/docs/tree/templates.doc.mjs +34 -0
- package/assets/docs/tree/test-in-an-app.doc.mjs +115 -0
- package/assets/docs/tree/test-template-in-app.doc.mjs +128 -0
- package/assets/docs/tree/themes.doc.mjs +39 -0
- package/assets/docs/tree/troubleshooting.doc.mjs +149 -0
- package/assets/docs/tree/upgrading.doc.mjs +103 -0
- package/assets/docs/tree/use-a-theme-in-an-app.doc.mjs +51 -0
- package/assets/docs/tree/verify-packed-template.doc.mjs +77 -0
- package/assets/docs/tree/versioning.doc.mjs +161 -0
- package/assets/docs/tree/write-good-templates.doc.mjs +64 -0
- package/assets/docs/tree/write-the-template-file.doc.mjs +154 -0
- package/assets/docs/typography.doc.mjs +24 -4
- package/assets/docs/working-with-ai.doc.mjs +34 -26
- 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 +29 -6
- package/authoring/debug/debug.doc.d.mts +11 -0
- package/authoring/debug/debug.doc.mjs +182 -0
- package/authoring/debug/parse.d.mts +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 +792 -24
- package/authoring/doctypes/_schema.mjs +549 -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 +43 -0
- package/authoring/doctypes/command/command.doc.mjs +4 -3
- package/authoring/doctypes/command/parse.d.mts +2 -2
- package/authoring/doctypes/command/parse.mjs +1 -1
- package/authoring/doctypes/command/type.ts +5 -4
- package/authoring/doctypes/component/component.doc.mjs +12 -3
- package/authoring/doctypes/component/parse.d.mts +2 -2
- package/authoring/doctypes/component/parse.mjs +1 -1
- package/authoring/doctypes/component/type.ts +14 -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 +55 -6
- package/authoring/doctypes/reference/type.ts +75 -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 +2 -2
- 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 +22 -13
- 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/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 +28 -10
- package/clients/cli/commands/component.test.mjs +19 -0
- package/clients/cli/commands/detail-levels.test.mjs +2 -2
- package/clients/cli/commands/discover.broken-integration.test.mjs +52 -5
- package/clients/cli/commands/discover.components-flag.test.mjs +97 -0
- package/clients/cli/commands/discover.doc.mjs +55 -9
- package/clients/cli/commands/discover.mjs +393 -118
- package/clients/cli/commands/discover.sources.test.mjs +267 -0
- package/clients/cli/commands/discover.text-projection.test.mjs +103 -0
- package/clients/cli/commands/docs.doc.mjs +28 -6
- package/clients/cli/commands/docs.mjs +295 -38
- package/clients/cli/commands/doctor-integration-components.doc.mjs +1 -1
- package/clients/cli/commands/doctor-integration-docs.doc.mjs +6 -5
- 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 +143 -8
- package/clients/cli/commands/doctor.doc.mjs +4 -2
- package/clients/cli/commands/doctor.mjs +108 -37
- package/clients/cli/commands/doctor.test.mjs +42 -0
- package/clients/cli/commands/gap-report.doc.mjs +27 -15
- 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 +24 -10
- 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 +39 -13
- package/clients/cli/commands/integration-authoring.test.mjs +74 -19
- package/clients/cli/commands/integration-pack.doc.mjs +6 -10
- package/clients/cli/commands/integration-real-world.test.mjs +4 -10
- package/clients/cli/commands/integration-verify.doc.mjs +22 -0
- package/clients/cli/commands/integration.doc.mjs +5 -5
- package/clients/cli/commands/integration.mjs +75 -43
- package/clients/cli/commands/interactive-guard.test.mjs +101 -24
- package/clients/cli/commands/json-contract.test.mjs +33 -0
- package/clients/cli/commands/layout-check.doc.mjs +15 -4
- package/clients/cli/commands/layout-expand.doc.mjs +22 -5
- package/clients/cli/commands/layout-grammar.doc.mjs +1 -1
- package/clients/cli/commands/layout.doc.mjs +3 -3
- package/clients/cli/commands/layout.mjs +21 -9
- package/clients/cli/commands/layout.path-help.test.mjs +33 -0
- package/clients/cli/commands/layout.stdin-cap.test.mjs +47 -0
- package/clients/cli/commands/layout.text-fields.test.mjs +39 -0
- package/clients/cli/commands/manifest.doc.mjs +2 -2
- package/clients/cli/commands/no-prompt-wording.test.mjs +94 -0
- package/clients/cli/commands/search.doc.mjs +16 -6
- package/clients/cli/commands/search.mjs +49 -11
- package/clients/cli/commands/search.test.mjs +92 -0
- package/clients/cli/commands/setup-nudge.test.mjs +6 -0
- package/clients/cli/commands/swizzle.doc.mjs +4 -3
- package/clients/cli/commands/swizzle.path-safety.test.mjs +42 -0
- package/clients/cli/commands/template.doc.mjs +53 -14
- 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 +725 -0
- package/clients/cli/commands/theme-add.doc.mjs +5 -4
- 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 +12 -7
- package/clients/cli/commands/theme-palette-generate.test.mjs +19 -0
- package/clients/cli/commands/theme-palette.doc.mjs +2 -3
- package/clients/cli/commands/theme-targets.behavior.test.mjs +4 -3
- package/clients/cli/commands/theme-targets.doc.mjs +3 -3
- 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 +3 -2
- package/clients/cli/commands/upgrade.ascii-output.test.mjs +87 -0
- package/clients/cli/commands/upgrade.doc.mjs +83 -12
- 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 +47 -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 +56 -6
- package/clients/cli/lib/define-command.test.mjs +54 -0
- package/clients/cli/lib/doc-text-ascii.test.mjs +82 -0
- package/clients/cli/lib/exit-codes.test.mjs +113 -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 +83 -0
- package/clients/cli/lib/manifest.d.ts +2 -0
- package/clients/cli/lib/manifest.mjs +53 -6
- 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 +83 -13
- package/foundation/agent-docs/agent-docs.path-safety.test.mjs +266 -4
- 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 +174 -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 +504 -0
- package/foundation/discovery/cli-self-docs.test.mjs +395 -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 +427 -108
- package/foundation/discovery/docs-discovery.test.mjs +386 -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 +774 -83
- 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 +1643 -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 +298 -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 +292 -0
- package/foundation/doc-compiler/tree.mjs +881 -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 +65 -0
- package/foundation/integrations/cli-requirement.mjs +189 -0
- package/foundation/integrations/cli-requirement.test.mjs +89 -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 +28 -25
- 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 +19 -12
- package/foundation/response/error-codes.mjs +8 -2
- package/foundation/response/error-codes.test.mjs +166 -14
- 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 +7 -2
- package/foundation/response/response-types.doc.mjs +69 -25
- package/foundation/response/response-types.doc.test.mjs +181 -0
- package/foundation/response/response.doc.mjs +12 -11
- package/foundation/text/string-utils.d.mts +8 -0
- package/foundation/text/string-utils.mjs +40 -10
- package/foundation/xle/expand.d.mts +2 -0
- package/foundation/xle/expand.mjs +4 -3
- package/foundation/xle/expand.test.mjs +54 -0
- package/foundation/xle/xle.test.mjs +13 -0
- package/package.json +10 -11
- package/api/docs/docs.test.mjs +0 -83
- package/api/docs/integrationDocs.test.mjs +0 -208
- package/api/search/search.test.mjs +0 -389
- package/assets/docs/cli-integrations.doc.mjs +0 -367
- package/assets/templates/themes/manifest.json +0 -95
- package/clients/cli/commands/docs.test.mjs +0 -102
- package/clients/cli/lib/update-check.mjs +0 -83
- package/clients/cli/lib/update-check.test.mjs +0 -137
- package/clients/cli/update-hint-commands.test.mjs +0 -54
- package/foundation/agent-docs/agent-docs.test.mjs +0 -1141
|
@@ -1,25 +1,20 @@
|
|
|
1
1
|
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* @file The canonical `.
|
|
5
|
-
* to the
|
|
4
|
+
* @file The canonical `.doc.{mjs,ts,js}` suffix is discovered identically
|
|
5
|
+
* to the released `.template.{ts,mjs,js}` compatibility suffix.
|
|
6
6
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* both families and assert byte-for-byte-equivalent discovery + scaffolding.
|
|
7
|
+
* New authoring writes `.doc.mjs`, the canonical typed descriptor. Stable
|
|
8
|
+
* 0.6.0 already accepted `.template.*`, so these tests
|
|
9
|
+
* keep that family as a compatibility input and assert equivalent discovery +
|
|
10
|
+
* scaffolding.
|
|
12
11
|
*/
|
|
13
12
|
|
|
14
13
|
import {afterEach, beforeEach, describe, expect, it} from 'vitest';
|
|
15
14
|
import * as fs from 'node:fs';
|
|
16
15
|
import * as path from 'node:path';
|
|
17
16
|
import * as os from 'node:os';
|
|
18
|
-
import {
|
|
19
|
-
template,
|
|
20
|
-
findShowcase,
|
|
21
|
-
findRelatedBlocks,
|
|
22
|
-
} from './template.mjs';
|
|
17
|
+
import {template, findShowcase, findRelatedBlocks} from './template.mjs';
|
|
23
18
|
|
|
24
19
|
let tmpDir;
|
|
25
20
|
let originalCwd;
|
|
@@ -82,8 +77,8 @@ afterEach(() => {
|
|
|
82
77
|
fs.rmSync(tmpDir, {recursive: true, force: true});
|
|
83
78
|
});
|
|
84
79
|
|
|
85
|
-
describe('integration templates: .
|
|
86
|
-
for (const suffix of ['.
|
|
80
|
+
describe('integration templates: canonical .doc.* plus released .template.* compatibility', () => {
|
|
81
|
+
for (const suffix of ['.doc.mjs', '.doc.ts', '.template.mjs']) {
|
|
87
82
|
it(`discovers + lists a page template authored as ${suffix}`, async () => {
|
|
88
83
|
const pkgDir = installWidgets(tmpDir);
|
|
89
84
|
writeTemplate(pkgDir, 'pricing', {kind: 'page', suffix});
|
|
@@ -124,7 +119,7 @@ describe('integration templates: .template.* discovered like legacy .doc.*', ()
|
|
|
124
119
|
});
|
|
125
120
|
}
|
|
126
121
|
|
|
127
|
-
it('treats
|
|
122
|
+
it('treats canonical .doc.mjs and released .template.ts identically (same shape)', async () => {
|
|
128
123
|
const pkgDir = installWidgets(tmpDir);
|
|
129
124
|
writeTemplate(pkgDir, 'gauge', {kind: 'block', suffix: '.template.ts'});
|
|
130
125
|
writeTemplate(pkgDir, 'chip', {kind: 'block', suffix: '.doc.mjs'});
|
|
@@ -143,12 +138,33 @@ describe('integration templates: .template.* discovered like legacy .doc.*', ()
|
|
|
143
138
|
expect(gauge.type).toBe(chip.type);
|
|
144
139
|
expect(gauge.package).toBe(chip.package);
|
|
145
140
|
});
|
|
141
|
+
it('lists both same-stem specs and reads the id as ambiguous', async () => {
|
|
142
|
+
for (const [first, second] of [
|
|
143
|
+
['.doc.mjs', '.template.ts'],
|
|
144
|
+
['.doc.ts', '.doc.mjs'],
|
|
145
|
+
]) {
|
|
146
|
+
const pkgDir = installWidgets(tmpDir);
|
|
147
|
+
fs.rmSync(path.join(pkgDir, 'templates'), {recursive: true, force: true});
|
|
148
|
+
writeTemplate(pkgDir, 'pricing', {kind: 'page', suffix: first});
|
|
149
|
+
writeTemplate(pkgDir, 'pricing', {kind: 'page', suffix: second});
|
|
150
|
+
|
|
151
|
+
const result = await template(undefined, {list: true, cwd: tmpDir});
|
|
152
|
+
expect(
|
|
153
|
+
result.data.filter(entry => entry.id === 'pricing'),
|
|
154
|
+
`${first} + ${second}`,
|
|
155
|
+
).toHaveLength(2);
|
|
156
|
+
await expect(
|
|
157
|
+
template('pricing', {cwd: tmpDir}),
|
|
158
|
+
`${first} + ${second}`,
|
|
159
|
+
).rejects.toMatchObject({code: 'ERR_AMBIGUOUS_TEMPLATE'});
|
|
160
|
+
}
|
|
161
|
+
});
|
|
146
162
|
});
|
|
147
163
|
|
|
148
|
-
describe('external showcase blocks: .
|
|
164
|
+
describe('external showcase blocks: canonical .doc.* plus released .template.* compatibility', () => {
|
|
149
165
|
/**
|
|
150
166
|
* Create a consumer whose @test/ext package contributes two showcase blocks,
|
|
151
|
-
* one authored
|
|
167
|
+
* one authored with released `Foo.template.ts` and one with canonical `Bar.doc.mjs`.
|
|
152
168
|
*/
|
|
153
169
|
function makeShowcaseFixture() {
|
|
154
170
|
// Symlink the real core package (needed by findCoreDir during discovery).
|
|
@@ -166,7 +182,7 @@ describe('external showcase blocks: .template.* discovered like legacy .doc.*',
|
|
|
166
182
|
const extDir = path.join(tmpDir, 'node_modules', '@test', 'ext');
|
|
167
183
|
const blocksDir = path.join(extDir, 'blocks', 'components');
|
|
168
184
|
|
|
169
|
-
// Foo showcase —
|
|
185
|
+
// Foo showcase — released .template.ts compatibility input.
|
|
170
186
|
const fooDir = path.join(blocksDir, 'Foo');
|
|
171
187
|
fs.mkdirSync(fooDir, {recursive: true});
|
|
172
188
|
fs.writeFileSync(
|
|
@@ -185,7 +201,7 @@ describe('external showcase blocks: .template.* discovered like legacy .doc.*',
|
|
|
185
201
|
"'use client';\nexport default function FooShowcase() { return <div>Foo</div>; }",
|
|
186
202
|
);
|
|
187
203
|
|
|
188
|
-
// Bar showcase —
|
|
204
|
+
// Bar showcase — canonical .doc.mjs (historical named export).
|
|
189
205
|
const barDir = path.join(blocksDir, 'Bar');
|
|
190
206
|
fs.mkdirSync(barDir, {recursive: true});
|
|
191
207
|
fs.writeFileSync(
|
|
@@ -209,7 +225,11 @@ describe('external showcase blocks: .template.* discovered like legacy .doc.*',
|
|
|
209
225
|
path.join(extDir, 'package.json'),
|
|
210
226
|
JSON.stringify({
|
|
211
227
|
name: '@test/ext',
|
|
212
|
-
astryx: {
|
|
228
|
+
astryx: {
|
|
229
|
+
docs: './src',
|
|
230
|
+
category: 'Common',
|
|
231
|
+
blocks: './blocks/components',
|
|
232
|
+
},
|
|
213
233
|
}),
|
|
214
234
|
);
|
|
215
235
|
fs.mkdirSync(path.join(extDir, 'src'), {recursive: true});
|
|
@@ -223,7 +243,7 @@ describe('external showcase blocks: .template.* discovered like legacy .doc.*',
|
|
|
223
243
|
expect(result.filePath).toContain('FooShowcase.tsx');
|
|
224
244
|
});
|
|
225
245
|
|
|
226
|
-
it('findShowcase resolves a
|
|
246
|
+
it('findShowcase resolves a canonical .doc.mjs external block by componentsUsed', async () => {
|
|
227
247
|
makeShowcaseFixture();
|
|
228
248
|
const result = await findShowcase('Bar', tmpDir);
|
|
229
249
|
expect(result).not.toBeNull();
|
|
@@ -31,7 +31,7 @@ export function template(name?: string, options?: {
|
|
|
31
31
|
skeleton?: boolean | undefined;
|
|
32
32
|
cdn?: string | boolean | undefined;
|
|
33
33
|
show?: boolean | undefined;
|
|
34
|
-
type?: "
|
|
34
|
+
type?: "page" | "block" | undefined;
|
|
35
35
|
package?: string | undefined;
|
|
36
36
|
cwd?: string | undefined;
|
|
37
37
|
}): Promise<{
|
|
@@ -11,20 +11,33 @@ export const doc = {
|
|
|
11
11
|
type: 'function',
|
|
12
12
|
kind: 'api',
|
|
13
13
|
name: 'template',
|
|
14
|
+
namespace: 'cli/api',
|
|
14
15
|
displayName: 'template()',
|
|
15
16
|
summary: 'List, inspect, or scaffold page and block templates.',
|
|
16
17
|
description:
|
|
17
18
|
'One entry point for the template family: with no name it lists the discovered ' +
|
|
18
19
|
"templates; with a name it returns that template's source, a layout skeleton, or " +
|
|
19
|
-
'scaffolds it into the project.
|
|
20
|
-
'
|
|
21
|
-
'
|
|
22
|
-
'
|
|
20
|
+
'scaffolds it into the project. A configured integration may replace a Core ' +
|
|
21
|
+
'template id for unqualified discovery and lookup; package selection still ' +
|
|
22
|
+
'addresses the Core original. Other duplicate ids remain ambiguous and can be ' +
|
|
23
|
+
'narrowed by type and/or package. The cdn option writes the annotated ' +
|
|
24
|
+
'no-build-step CDN starter page, which ships as an asset rather than as ' +
|
|
23
25
|
'a discovered template.',
|
|
24
26
|
importPath: '@astryxdesign/cli/api',
|
|
25
27
|
signature:
|
|
26
28
|
'template(name?: string, options?: TemplateOptions): Promise<TemplateListResponse | TemplateShowResponse | TemplateSkeletonResponse | TemplateCopyResponse | TemplateCdnResponse>',
|
|
27
|
-
keywords: [
|
|
29
|
+
keywords: [
|
|
30
|
+
'template',
|
|
31
|
+
'scaffold',
|
|
32
|
+
'page',
|
|
33
|
+
'block',
|
|
34
|
+
'skeleton',
|
|
35
|
+
'starter',
|
|
36
|
+
'cdn',
|
|
37
|
+
'esm',
|
|
38
|
+
'importmap',
|
|
39
|
+
'no-build',
|
|
40
|
+
],
|
|
28
41
|
params: [
|
|
29
42
|
{
|
|
30
43
|
name: 'name',
|
|
@@ -69,13 +82,14 @@ export const doc = {
|
|
|
69
82
|
name: 'options.package',
|
|
70
83
|
type: 'string',
|
|
71
84
|
description:
|
|
72
|
-
'Narrow lookups to templates from a specific owning package
|
|
85
|
+
'Narrow lookups to templates from a specific owning package. Without it, a valid integration replacement is selected for the Core id; use @astryxdesign/core to select the original.',
|
|
73
86
|
},
|
|
74
87
|
{
|
|
75
88
|
name: 'options.targetPath',
|
|
76
89
|
type: 'string',
|
|
77
90
|
description:
|
|
78
|
-
'Destination (relative to cwd) to scaffold the template into. Its presence switches a named lookup into a copy.'
|
|
91
|
+
'Destination (relative to cwd) to scaffold the template into. Its presence switches a named lookup into a copy. ' +
|
|
92
|
+
'A path that ends in .tsx, .ts, .jsx, .js, .mjs, .cjs, .css, .scss, .json, .md or .html is the file to write; any other path is a directory, which receives page.tsx for a page template or the block\'s own file name for a block.',
|
|
79
93
|
},
|
|
80
94
|
{
|
|
81
95
|
name: 'options.overwrite',
|
|
@@ -88,13 +102,14 @@ export const doc = {
|
|
|
88
102
|
type: 'string',
|
|
89
103
|
description:
|
|
90
104
|
'Directory to discover templates and resolve the target path from.',
|
|
105
|
+
default: 'process.cwd()',
|
|
91
106
|
},
|
|
92
107
|
],
|
|
93
108
|
returns: [
|
|
94
109
|
{
|
|
95
110
|
type: 'template.list',
|
|
96
111
|
description:
|
|
97
|
-
'
|
|
112
|
+
'The effective templates (page + block); a valid integration replacement takes the place of its Core target and carries `replaces`. Pass `package` to list one package, including replaced Core originals.',
|
|
98
113
|
},
|
|
99
114
|
{
|
|
100
115
|
type: 'template.show',
|
|
@@ -120,7 +135,7 @@ export const doc = {
|
|
|
120
135
|
throws: [
|
|
121
136
|
{
|
|
122
137
|
code: 'ERR_UNKNOWN_TEMPLATE',
|
|
123
|
-
when: 'the named template does not exist, or
|
|
138
|
+
when: 'the named template does not exist, or options.skeleton is set without a name',
|
|
124
139
|
},
|
|
125
140
|
{
|
|
126
141
|
code: 'ERR_AMBIGUOUS_TEMPLATE',
|
|
@@ -141,7 +156,15 @@ export const doc = {
|
|
|
141
156
|
],
|
|
142
157
|
examples: [
|
|
143
158
|
{label: 'List templates', code: 'const {data} = await template();'},
|
|
159
|
+
{
|
|
160
|
+
label: 'List exact Core ids',
|
|
161
|
+
code: "await template(undefined, {list: true, package: '@astryxdesign/core'});",
|
|
162
|
+
},
|
|
144
163
|
{label: 'Show source', code: "await template('dashboard');"},
|
|
164
|
+
{
|
|
165
|
+
label: 'Select a replaced Core original',
|
|
166
|
+
code: "await template('shell-side-nav', {package: '@astryxdesign/core'});",
|
|
167
|
+
},
|
|
145
168
|
{
|
|
146
169
|
label: 'Layout skeleton',
|
|
147
170
|
code: "await template('dashboard', {skeleton: true});",
|
|
@@ -15,7 +15,13 @@
|
|
|
15
15
|
* ./list, ./show, ./skeleton, ./copy, ./cdn and shared discovery in foundation/discovery.
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
|
-
import {
|
|
18
|
+
import {
|
|
19
|
+
discoverAll,
|
|
20
|
+
discoverAllResolved,
|
|
21
|
+
discoverAllUnresolved,
|
|
22
|
+
pkgOf,
|
|
23
|
+
templateLookupIds,
|
|
24
|
+
} from '../../foundation/discovery/template-adapter.mjs';
|
|
19
25
|
import {AstryxError} from '../error.mjs';
|
|
20
26
|
import {ERROR_CODES} from '../../foundation/response/error-codes.mjs';
|
|
21
27
|
import {templateList} from './list/list.mjs';
|
|
@@ -88,18 +94,49 @@ export async function template(name, options = {}) {
|
|
|
88
94
|
});
|
|
89
95
|
}
|
|
90
96
|
|
|
91
|
-
const templates =
|
|
97
|
+
const templates =
|
|
98
|
+
packageFilter === '@astryxdesign/core'
|
|
99
|
+
? await discoverAllUnresolved(cwd)
|
|
100
|
+
: packageFilter
|
|
101
|
+
? await discoverAllResolved(cwd)
|
|
102
|
+
: await discoverAll(cwd);
|
|
92
103
|
|
|
93
104
|
if (list || (!name && !skeleton)) {
|
|
94
105
|
return templateList(templates, {type, package: packageFilter});
|
|
95
106
|
}
|
|
96
107
|
|
|
97
|
-
// Resolve `name` to a single template.
|
|
98
|
-
//
|
|
99
|
-
//
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
if (
|
|
108
|
+
// Resolve `name` to a single template. Without an explicit package, an active
|
|
109
|
+
// integration replacement owns the Core id it names. Package-qualified lookup
|
|
110
|
+
// stays exact, which keeps the original addressable as
|
|
111
|
+
// `--package @astryxdesign/core`.
|
|
112
|
+
let pool = templates;
|
|
113
|
+
if (type) pool = pool.filter(t => t.type === type);
|
|
114
|
+
if (packageFilter) pool = pool.filter(t => pkgOf(t) === packageFilter);
|
|
115
|
+
// With no name there is nothing to replace; `--skeleton` alone must still
|
|
116
|
+
// fail as an unknown template.
|
|
117
|
+
const replacements =
|
|
118
|
+
packageFilter || name == null ? [] : pool.filter(t => t.replaces === name);
|
|
119
|
+
let candidates = packageFilter
|
|
120
|
+
? pool.filter(t => t.dirName === (name ?? ''))
|
|
121
|
+
: replacements.length > 0
|
|
122
|
+
? replacements
|
|
123
|
+
: pool.filter(t => templateLookupIds(t).includes(name ?? ''));
|
|
124
|
+
|
|
125
|
+
// A rejected same-id declaration must not displace Core for the bare command,
|
|
126
|
+
// but a different-kind integration template remains reachable with --type.
|
|
127
|
+
if (!packageFilter && !type && candidates.length > 1) {
|
|
128
|
+
const core = candidates.filter(t => pkgOf(t) === '@astryxdesign/core');
|
|
129
|
+
const rejected = candidates.filter(t => pkgOf(t) !== '@astryxdesign/core');
|
|
130
|
+
if (
|
|
131
|
+
core.length === 1 &&
|
|
132
|
+
rejected.length === candidates.length - 1 &&
|
|
133
|
+
rejected.every(
|
|
134
|
+
t => t.replacementRejected && t.replacementTarget === (name ?? ''),
|
|
135
|
+
)
|
|
136
|
+
) {
|
|
137
|
+
candidates = core;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
103
140
|
|
|
104
141
|
if (name && candidates.length === 0) {
|
|
105
142
|
throw new AstryxError(
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// DO NOT EDIT — run `pnpm sync:api-types` to regenerate.
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
5
|
+
* astryx --json template [--list]
|
|
6
6
|
*/
|
|
7
7
|
export type TemplateListResponse = {
|
|
8
8
|
type: "template.list";
|
|
@@ -21,6 +21,10 @@ export type TemplateListEntry = {
|
|
|
21
21
|
* - Owning package; core (built-in) templates report '@astryxdesign/core'.
|
|
22
22
|
*/
|
|
23
23
|
package: string;
|
|
24
|
+
/**
|
|
25
|
+
* - Core template id this integration template replaces by default.
|
|
26
|
+
*/
|
|
27
|
+
replaces?: string | undefined;
|
|
24
28
|
/**
|
|
25
29
|
* - Optional grouping/category label.
|
|
26
30
|
*/
|
|
@@ -53,7 +57,7 @@ export type TemplateListEntry = {
|
|
|
53
57
|
scaffold?: boolean | undefined;
|
|
54
58
|
};
|
|
55
59
|
/**
|
|
56
|
-
*
|
|
60
|
+
* astryx --json template <name>
|
|
57
61
|
*/
|
|
58
62
|
export type TemplateShowResponse = {
|
|
59
63
|
type: "template.show";
|
|
@@ -66,7 +70,7 @@ export type TemplateShowResponse = {
|
|
|
66
70
|
};
|
|
67
71
|
};
|
|
68
72
|
/**
|
|
69
|
-
*
|
|
73
|
+
* astryx --json template <name> --skeleton
|
|
70
74
|
*/
|
|
71
75
|
export type TemplateSkeletonResponse = {
|
|
72
76
|
type: "template.skeleton";
|
|
@@ -78,7 +82,7 @@ export type TemplateSkeletonResponse = {
|
|
|
78
82
|
};
|
|
79
83
|
};
|
|
80
84
|
/**
|
|
81
|
-
*
|
|
85
|
+
* astryx --json template <name> [path]
|
|
82
86
|
*/
|
|
83
87
|
export type TemplateCopyResponse = {
|
|
84
88
|
type: "template.copy";
|
|
@@ -90,7 +94,7 @@ export type TemplateCopyResponse = {
|
|
|
90
94
|
};
|
|
91
95
|
};
|
|
92
96
|
/**
|
|
93
|
-
*
|
|
97
|
+
* astryx --json template --cdn [path]
|
|
94
98
|
* `written: false` with `reason: 'exists'` is a success: the command is safe to
|
|
95
99
|
* re-run, and an edited page is the consumer's file to keep. `version` is the
|
|
96
100
|
* Astryx version every CDN URL in the file was pinned to.
|
|
@@ -116,17 +120,11 @@ export type TemplateOptions = {
|
|
|
116
120
|
*/
|
|
117
121
|
cdn?: string | boolean | undefined;
|
|
118
122
|
/**
|
|
119
|
-
* Filter templates by kind: 'page' or 'block'.
|
|
123
|
+
* Filter templates by kind: 'page' or 'block'. Narrows both list and direct lookup.
|
|
120
124
|
*/
|
|
121
|
-
type?: "
|
|
125
|
+
type?: "page" | "block" | undefined;
|
|
122
126
|
/**
|
|
123
|
-
* Narrow to templates from a specific package
|
|
127
|
+
* Narrow to templates from a specific package. Without it, a valid integration replacement is selected for the Core id;
|
|
124
128
|
*/
|
|
125
129
|
package?: string | undefined;
|
|
126
|
-
targetPath?: string | undefined;
|
|
127
|
-
/**
|
|
128
|
-
* Overwrite an existing target file instead of erroring (ERR_FILE_EXISTS).
|
|
129
|
-
*/
|
|
130
|
-
overwrite?: boolean | undefined;
|
|
131
|
-
cwd?: string | undefined;
|
|
132
130
|
};
|
|
@@ -6,18 +6,18 @@
|
|
|
6
6
|
*
|
|
7
7
|
* Each template is exactly two files: page.tsx (code) + template.doc.mjs (metadata).
|
|
8
8
|
*
|
|
9
|
-
* Invocation
|
|
9
|
+
* Invocation -> type discriminator
|
|
10
10
|
* ------------------------------------------------------------------
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* (unknown template)
|
|
11
|
+
* astryx --json template [--list] -> template.list
|
|
12
|
+
* astryx --json template <name> -> template.show
|
|
13
|
+
* astryx --json template <name> --skeleton -> template.skeleton
|
|
14
|
+
* astryx --json template <name> [path] -> template.copy
|
|
15
|
+
* astryx --json template --cdn [path] -> template.cdn
|
|
16
|
+
* (unknown template) -> CLIError
|
|
17
17
|
*/
|
|
18
18
|
|
|
19
19
|
/**
|
|
20
|
-
*
|
|
20
|
+
* astryx --json template [--list]
|
|
21
21
|
* @typedef {object} TemplateListResponse
|
|
22
22
|
* @property {'template.list'} type
|
|
23
23
|
* @property {TemplateListEntry[]} data
|
|
@@ -31,6 +31,7 @@
|
|
|
31
31
|
* @property {string} description
|
|
32
32
|
* @property {'page' | 'block'} type
|
|
33
33
|
* @property {string} package - Owning package; core (built-in) templates report '@astryxdesign/core'.
|
|
34
|
+
* @property {string} [replaces] - Core template id this integration template replaces by default.
|
|
34
35
|
* @property {string} [category] - Optional grouping/category label.
|
|
35
36
|
* @property {string[]} [componentsUsed] - Component display names the template composes.
|
|
36
37
|
* @property {number} [aspectRatio] - Block preview width/height ratio.
|
|
@@ -43,7 +44,7 @@
|
|
|
43
44
|
*/
|
|
44
45
|
|
|
45
46
|
/**
|
|
46
|
-
*
|
|
47
|
+
* astryx --json template <name>
|
|
47
48
|
* @typedef {object} TemplateShowResponse
|
|
48
49
|
* @property {'template.show'} type
|
|
49
50
|
* @property {object} data
|
|
@@ -55,7 +56,7 @@
|
|
|
55
56
|
*/
|
|
56
57
|
|
|
57
58
|
/**
|
|
58
|
-
*
|
|
59
|
+
* astryx --json template <name> --skeleton
|
|
59
60
|
* @typedef {object} TemplateSkeletonResponse
|
|
60
61
|
* @property {'template.skeleton'} type
|
|
61
62
|
* @property {object} data
|
|
@@ -66,7 +67,7 @@
|
|
|
66
67
|
*/
|
|
67
68
|
|
|
68
69
|
/**
|
|
69
|
-
*
|
|
70
|
+
* astryx --json template <name> [path]
|
|
70
71
|
* @typedef {object} TemplateCopyResponse
|
|
71
72
|
* @property {'template.copy'} type
|
|
72
73
|
* @property {object} data
|
|
@@ -77,7 +78,7 @@
|
|
|
77
78
|
*/
|
|
78
79
|
|
|
79
80
|
/**
|
|
80
|
-
*
|
|
81
|
+
* astryx --json template --cdn [path]
|
|
81
82
|
* `written: false` with `reason: 'exists'` is a success: the command is safe to
|
|
82
83
|
* re-run, and an edited page is the consumer's file to keep. `version` is the
|
|
83
84
|
* Astryx version every CDN URL in the file was pinned to.
|
|
@@ -93,8 +94,8 @@
|
|
|
93
94
|
* @property {boolean} [skeleton]
|
|
94
95
|
* @property {boolean} [show]
|
|
95
96
|
* @property {boolean | string} [cdn] Write the no-build-step CDN starter page instead of resolving a template. A string is used as the destination path.
|
|
96
|
-
* @property {'page' | 'block'} [type] Filter templates by kind: 'page' or 'block'.
|
|
97
|
-
* @property {string} [package] Narrow to templates from a specific package
|
|
97
|
+
* @property {'page' | 'block'} [type] Filter templates by kind: 'page' or 'block'. Narrows both list and direct lookup.
|
|
98
|
+
* @property {string} [package] Narrow to templates from a specific package. Without it, a valid integration replacement is selected for the Core id; @astryxdesign/core explicitly selects the original.
|
|
98
99
|
* @property {string} [targetPath]
|
|
99
100
|
* @property {boolean} [overwrite] Overwrite an existing target file instead of erroring (ERR_FILE_EXISTS).
|
|
100
101
|
* @property {string} [cwd]
|
package/api/theme/_adapter.d.mts
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
export function listThemes(): BundledTheme[];
|
|
14
14
|
/**
|
|
15
15
|
* Bundled themes plus source themes from integrations installed in `cwd`.
|
|
16
|
-
* A project/config load failure degrades to the bundled
|
|
16
|
+
* A project/config load failure degrades to the bundled set, preserving the
|
|
17
17
|
* command's historical usefulness outside a configured project.
|
|
18
18
|
* @param {string} [cwd]
|
|
19
19
|
* @returns {Promise<import('../../foundation/discovery/theme-discovery.mjs').DiscoveredTheme[]>}
|
|
@@ -35,6 +35,5 @@ export function findTheme(slug?: string, options?: {
|
|
|
35
35
|
*/
|
|
36
36
|
export type BundledTheme = Pick<import("../../foundation/discovery/theme-discovery.mjs").DiscoveredTheme, "slug" | "displayName" | "description" | "maintained" | "entry" | "exportName" | "files">;
|
|
37
37
|
import { BUNDLED_THEME_PACKAGE } from '../../foundation/discovery/theme-discovery.mjs';
|
|
38
|
-
import { MANIFEST_PATH } from '../../foundation/discovery/theme-discovery.mjs';
|
|
39
38
|
import { THEMES_DIR } from '../../foundation/discovery/theme-discovery.mjs';
|
|
40
|
-
export { BUNDLED_THEME_PACKAGE,
|
|
39
|
+
export { BUNDLED_THEME_PACKAGE, THEMES_DIR };
|
package/api/theme/_adapter.mjs
CHANGED
|
@@ -5,20 +5,19 @@
|
|
|
5
5
|
*
|
|
6
6
|
* `listThemes()` intentionally keeps its historical synchronous, bundled-only
|
|
7
7
|
* contract. Project-aware callers use `listAvailableThemes()`, which asks
|
|
8
|
-
* Project for the bundled
|
|
8
|
+
* Project for the bundled themes plus every installed integration theme root.
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
11
|
import {Project} from '../../foundation/config/project.mjs';
|
|
12
12
|
import {
|
|
13
13
|
BUNDLED_THEME_PACKAGE,
|
|
14
|
-
MANIFEST_PATH,
|
|
15
14
|
THEMES_DIR,
|
|
16
15
|
discoverBundledThemes,
|
|
17
16
|
} from '../../foundation/discovery/theme-discovery.mjs';
|
|
18
17
|
import {AstryxError} from '../error.mjs';
|
|
19
18
|
import {ERROR_CODES} from '../../foundation/response/error-codes.mjs';
|
|
20
19
|
|
|
21
|
-
export {BUNDLED_THEME_PACKAGE,
|
|
20
|
+
export {BUNDLED_THEME_PACKAGE, THEMES_DIR};
|
|
22
21
|
|
|
23
22
|
/**
|
|
24
23
|
* A bundled theme entry kept for the historical public `listThemes()` helper.
|
|
@@ -55,7 +54,7 @@ function availableBundledThemes() {
|
|
|
55
54
|
/**
|
|
56
55
|
* Load available themes with any package-owned integration issues found while
|
|
57
56
|
* discovering them. The issue set lets a package-scoped lookup distinguish an
|
|
58
|
-
* absent theme from an installed package whose
|
|
57
|
+
* absent theme from an installed package whose theme descriptors are broken.
|
|
59
58
|
* @param {string} cwd
|
|
60
59
|
* @returns {Promise<{themes: import('../../foundation/discovery/theme-discovery.mjs').DiscoveredTheme[], issues: Array<import('../../foundation/integrations/issue').AstryxIntegrationIssue & {package: string}>}>}
|
|
61
60
|
*/
|
|
@@ -71,7 +70,7 @@ async function availableThemeState(cwd) {
|
|
|
71
70
|
|
|
72
71
|
/**
|
|
73
72
|
* Bundled themes plus source themes from integrations installed in `cwd`.
|
|
74
|
-
* A project/config load failure degrades to the bundled
|
|
73
|
+
* A project/config load failure degrades to the bundled set, preserving the
|
|
75
74
|
* command's historical usefulness outside a configured project.
|
|
76
75
|
* @param {string} [cwd]
|
|
77
76
|
* @returns {Promise<import('../../foundation/discovery/theme-discovery.mjs').DiscoveredTheme[]>}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
import {afterEach, beforeEach, describe, expect, it} from 'vitest';
|
|
4
|
+
import * as fs from 'node:fs';
|
|
5
|
+
import * as os from 'node:os';
|
|
6
|
+
import * as path from 'node:path';
|
|
7
|
+
import {themeAdd} from './add.mjs';
|
|
8
|
+
|
|
9
|
+
const HEADER = '// Copyright (c) Meta Platforms, Inc. and affiliates.\n\n';
|
|
10
|
+
|
|
11
|
+
let tmpDir;
|
|
12
|
+
|
|
13
|
+
/** Every byte value, so any lossy text decoding shows up as a changed file. */
|
|
14
|
+
const FONT_BYTES = Buffer.concat([
|
|
15
|
+
Buffer.from('wOF2'),
|
|
16
|
+
Buffer.from(Array.from({length: 256}, (_, byte) => byte)),
|
|
17
|
+
]);
|
|
18
|
+
|
|
19
|
+
beforeEach(() => {
|
|
20
|
+
tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'astryx-themeadd-binary-'));
|
|
21
|
+
fs.writeFileSync(
|
|
22
|
+
path.join(tmpDir, 'package.json'),
|
|
23
|
+
JSON.stringify({
|
|
24
|
+
name: 'consumer',
|
|
25
|
+
dependencies: {'@acme/themes': '^1.0.0'},
|
|
26
|
+
}),
|
|
27
|
+
);
|
|
28
|
+
const packageDir = path.join(tmpDir, 'node_modules', '@acme', 'themes');
|
|
29
|
+
const themeDir = path.join(packageDir, 'themes', 'ocean');
|
|
30
|
+
fs.mkdirSync(path.join(themeDir, 'fonts'), {recursive: true});
|
|
31
|
+
fs.writeFileSync(
|
|
32
|
+
path.join(packageDir, 'package.json'),
|
|
33
|
+
JSON.stringify({name: '@acme/themes', version: '1.0.0'}),
|
|
34
|
+
);
|
|
35
|
+
fs.writeFileSync(
|
|
36
|
+
path.join(packageDir, 'astryx.integration.mjs'),
|
|
37
|
+
"export default {themes: './themes'};\n",
|
|
38
|
+
);
|
|
39
|
+
fs.writeFileSync(
|
|
40
|
+
path.join(themeDir, 'oceanTheme.doc.mjs'),
|
|
41
|
+
`/** @type {import('@astryxdesign/cli/authoring').ThemeDoc} */
|
|
42
|
+
export default {type: 'theme', name: 'ocean', displayName: 'Ocean', description: 'Integration theme that ships a font.', maintained: true};
|
|
43
|
+
`,
|
|
44
|
+
);
|
|
45
|
+
fs.writeFileSync(
|
|
46
|
+
path.join(themeDir, 'oceanTheme.ts'),
|
|
47
|
+
`${HEADER}export const oceanTheme = {};\n`,
|
|
48
|
+
);
|
|
49
|
+
fs.writeFileSync(path.join(themeDir, 'fonts', 'ocean.woff2'), FONT_BYTES);
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
afterEach(() => {
|
|
53
|
+
fs.rmSync(tmpDir, {recursive: true, force: true});
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
describe('themeAdd copies every file of the theme', () => {
|
|
57
|
+
it('copies a binary file byte for byte', async () => {
|
|
58
|
+
const result = await themeAdd('ocean', {
|
|
59
|
+
cwd: tmpDir,
|
|
60
|
+
package: '@acme/themes',
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
expect(result.data.files).toEqual([
|
|
64
|
+
'oceanTheme.ts',
|
|
65
|
+
'fonts/ocean.woff2',
|
|
66
|
+
'oceanTheme.doc.mjs',
|
|
67
|
+
]);
|
|
68
|
+
const copied = fs.readFileSync(
|
|
69
|
+
path.join(tmpDir, 'src', 'themes', 'ocean', 'fonts', 'ocean.woff2'),
|
|
70
|
+
);
|
|
71
|
+
expect(copied.equals(FONT_BYTES)).toBe(true);
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
it('still strips the repo header from a text source', async () => {
|
|
75
|
+
await themeAdd('ocean', {cwd: tmpDir, package: '@acme/themes'});
|
|
76
|
+
|
|
77
|
+
expect(
|
|
78
|
+
fs.readFileSync(
|
|
79
|
+
path.join(tmpDir, 'src', 'themes', 'ocean', 'oceanTheme.ts'),
|
|
80
|
+
'utf-8',
|
|
81
|
+
),
|
|
82
|
+
).toBe('export const oceanTheme = {};\n');
|
|
83
|
+
});
|
|
84
|
+
});
|