@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
|
@@ -2,9 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* @file Hermetic integration authoring checks against the real Core catalogs.
|
|
5
|
+
* @input Integration fixtures and the post-0.7 conflict projection.
|
|
6
|
+
* @output Coverage for replacement validation and public diagnostics.
|
|
7
|
+
* @position Unit coverage; the 0.6.x compatibility shape has its own fixture.
|
|
5
8
|
*/
|
|
6
9
|
|
|
7
|
-
import {afterEach, beforeEach, describe, expect, it} from 'vitest';
|
|
10
|
+
import {afterEach, beforeEach, describe, expect, it, vi} from 'vitest';
|
|
11
|
+
|
|
12
|
+
vi.mock('../../foundation/discovery/template-conflict-release.mjs', () => ({
|
|
13
|
+
expandedTemplateConflictSchemaActive: () => true,
|
|
14
|
+
}));
|
|
8
15
|
import * as fs from 'node:fs';
|
|
9
16
|
import * as path from 'node:path';
|
|
10
17
|
import {discoverCoreTemplates} from '../../foundation/discovery/template-adapter.mjs';
|
|
@@ -20,7 +27,14 @@ import {
|
|
|
20
27
|
|
|
21
28
|
let tmpDir;
|
|
22
29
|
|
|
23
|
-
function writeIntegration({
|
|
30
|
+
function writeIntegration({
|
|
31
|
+
id,
|
|
32
|
+
name,
|
|
33
|
+
type = 'block',
|
|
34
|
+
root = tmpDir,
|
|
35
|
+
replacements,
|
|
36
|
+
withSource = true,
|
|
37
|
+
}) {
|
|
24
38
|
fs.mkdirSync(root, {recursive: true});
|
|
25
39
|
fs.writeFileSync(
|
|
26
40
|
path.join(root, 'package.json'),
|
|
@@ -33,9 +47,10 @@ function writeIntegration({id, name, type = 'block', root = tmpDir}) {
|
|
|
33
47
|
const stem = path.join(root, 'templates', id);
|
|
34
48
|
fs.mkdirSync(path.dirname(stem), {recursive: true});
|
|
35
49
|
fs.writeFileSync(
|
|
36
|
-
`${stem}.
|
|
37
|
-
`export default {type: '${type}', name: ${JSON.stringify(name)}, description: 'fixture'};\n`,
|
|
50
|
+
`${stem}.doc.mjs`,
|
|
51
|
+
`export default {type: '${type}', name: ${JSON.stringify(name)}, description: 'fixture'${replacements?.[id] == null ? '' : `, replaces: ${JSON.stringify(replacements[id])}`}};\n`,
|
|
38
52
|
);
|
|
53
|
+
if (!withSource) return;
|
|
39
54
|
fs.writeFileSync(
|
|
40
55
|
`${stem}.tsx`,
|
|
41
56
|
'export default function Fixture() { return null; }\n',
|
|
@@ -158,6 +173,159 @@ describe('integrationTemplateConflicts', () => {
|
|
|
158
173
|
);
|
|
159
174
|
});
|
|
160
175
|
|
|
176
|
+
it('classifies a valid replacement and points to the Core original', async () => {
|
|
177
|
+
const core = (await discoverCoreTemplates()).find(
|
|
178
|
+
template => template.type === 'page',
|
|
179
|
+
);
|
|
180
|
+
expect(core).toBeDefined();
|
|
181
|
+
writeIntegration({
|
|
182
|
+
id: 'acme-app-shell',
|
|
183
|
+
name: 'Acme app shell',
|
|
184
|
+
type: core.type,
|
|
185
|
+
replacements: {'acme-app-shell': core.dirName},
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
const result = await integrationTemplateConflicts(undefined, {cwd: tmpDir});
|
|
189
|
+
|
|
190
|
+
expect(result.data.issues).toEqual([]);
|
|
191
|
+
expect(result.data.conflicts).toEqual([
|
|
192
|
+
expect.objectContaining({
|
|
193
|
+
id: 'acme-app-shell',
|
|
194
|
+
severity: 'info',
|
|
195
|
+
relationship: 'replaces',
|
|
196
|
+
replaces: core.dirName,
|
|
197
|
+
}),
|
|
198
|
+
]);
|
|
199
|
+
expect(result.data.conflicts[0].command).toContain(
|
|
200
|
+
`template ${core.dirName} --package @astryxdesign/core`,
|
|
201
|
+
);
|
|
202
|
+
});
|
|
203
|
+
|
|
204
|
+
it('reports a replacement target that Core does not provide', async () => {
|
|
205
|
+
writeIntegration({
|
|
206
|
+
id: 'acme-app-shell',
|
|
207
|
+
name: 'Acme app shell',
|
|
208
|
+
type: 'page',
|
|
209
|
+
replacements: {'acme-app-shell': 'missing-core-shell'},
|
|
210
|
+
});
|
|
211
|
+
|
|
212
|
+
const result = await integrationTemplateConflicts(undefined, {cwd: tmpDir});
|
|
213
|
+
|
|
214
|
+
expect(result.data.issues).toEqual(
|
|
215
|
+
expect.arrayContaining([
|
|
216
|
+
expect.objectContaining({
|
|
217
|
+
code: 'missing_template_replacement_target',
|
|
218
|
+
severity: 'error',
|
|
219
|
+
}),
|
|
220
|
+
]),
|
|
221
|
+
);
|
|
222
|
+
});
|
|
223
|
+
|
|
224
|
+
it('reports a replacement declared by a template that cannot be used', async () => {
|
|
225
|
+
const [core] = await discoverCoreTemplates();
|
|
226
|
+
expect(core).toBeDefined();
|
|
227
|
+
writeIntegration({
|
|
228
|
+
id: 'broken-template',
|
|
229
|
+
name: 'Broken template',
|
|
230
|
+
type: core.type,
|
|
231
|
+
replacements: {'broken-template': core.dirName},
|
|
232
|
+
withSource: false,
|
|
233
|
+
});
|
|
234
|
+
|
|
235
|
+
const result = await integrationTemplateConflicts(undefined, {cwd: tmpDir});
|
|
236
|
+
|
|
237
|
+
expect(result.data.issues).toEqual(
|
|
238
|
+
expect.arrayContaining([
|
|
239
|
+
expect.objectContaining({
|
|
240
|
+
code: 'invalid_template_replacement',
|
|
241
|
+
severity: 'error',
|
|
242
|
+
message: expect.stringContaining('cannot be used'),
|
|
243
|
+
}),
|
|
244
|
+
]),
|
|
245
|
+
);
|
|
246
|
+
});
|
|
247
|
+
|
|
248
|
+
it('reports two templates that replace the same Core target as ambiguous', async () => {
|
|
249
|
+
const [core] = await discoverCoreTemplates();
|
|
250
|
+
expect(core).toBeDefined();
|
|
251
|
+
const replacements = {
|
|
252
|
+
'acme-app-shell-a': core.dirName,
|
|
253
|
+
'acme-app-shell-b': core.dirName,
|
|
254
|
+
};
|
|
255
|
+
writeIntegration({
|
|
256
|
+
id: 'acme-app-shell-a',
|
|
257
|
+
name: 'Acme app shell A',
|
|
258
|
+
type: core.type,
|
|
259
|
+
replacements,
|
|
260
|
+
});
|
|
261
|
+
writeIntegration({
|
|
262
|
+
id: 'acme-app-shell-b',
|
|
263
|
+
name: 'Acme app shell B',
|
|
264
|
+
type: core.type,
|
|
265
|
+
replacements,
|
|
266
|
+
});
|
|
267
|
+
|
|
268
|
+
const result = await integrationTemplateConflicts(undefined, {cwd: tmpDir});
|
|
269
|
+
|
|
270
|
+
expect(result.data.issues).toEqual(
|
|
271
|
+
expect.arrayContaining([
|
|
272
|
+
expect.objectContaining({
|
|
273
|
+
code: 'ambiguous_template_replacement',
|
|
274
|
+
severity: 'error',
|
|
275
|
+
}),
|
|
276
|
+
]),
|
|
277
|
+
);
|
|
278
|
+
});
|
|
279
|
+
|
|
280
|
+
it('reports a replacement whose template kind differs from Core', async () => {
|
|
281
|
+
const corePage = (await discoverCoreTemplates()).find(
|
|
282
|
+
template => template.type === 'page',
|
|
283
|
+
);
|
|
284
|
+
expect(corePage).toBeDefined();
|
|
285
|
+
writeIntegration({
|
|
286
|
+
id: 'acme-app-shell',
|
|
287
|
+
name: 'Acme app shell',
|
|
288
|
+
type: 'block',
|
|
289
|
+
replacements: {'acme-app-shell': corePage.dirName},
|
|
290
|
+
});
|
|
291
|
+
|
|
292
|
+
const result = await integrationTemplateConflicts(undefined, {cwd: tmpDir});
|
|
293
|
+
|
|
294
|
+
expect(result.data.issues).toEqual(
|
|
295
|
+
expect.arrayContaining([
|
|
296
|
+
expect.objectContaining({
|
|
297
|
+
code: 'invalid_template_replacement',
|
|
298
|
+
severity: 'error',
|
|
299
|
+
message: expect.stringContaining('same type'),
|
|
300
|
+
}),
|
|
301
|
+
]),
|
|
302
|
+
);
|
|
303
|
+
});
|
|
304
|
+
|
|
305
|
+
it('does not recommend an impossible replacement for a different Core kind', async () => {
|
|
306
|
+
const corePage = (await discoverCoreTemplates()).find(
|
|
307
|
+
template => template.type === 'page',
|
|
308
|
+
);
|
|
309
|
+
expect(corePage).toBeDefined();
|
|
310
|
+
writeIntegration({
|
|
311
|
+
id: corePage.dirName,
|
|
312
|
+
name: 'Acme block with a page id',
|
|
313
|
+
type: 'block',
|
|
314
|
+
});
|
|
315
|
+
|
|
316
|
+
const result = await integrationTemplateConflicts(undefined, {cwd: tmpDir});
|
|
317
|
+
const conflict = result.data.conflicts.find(
|
|
318
|
+
item => item.id === corePage.dirName,
|
|
319
|
+
);
|
|
320
|
+
|
|
321
|
+
expect(conflict?.relationship).toBe('accidental');
|
|
322
|
+
expect(conflict?.message).toContain(
|
|
323
|
+
'cannot replace a different template kind',
|
|
324
|
+
);
|
|
325
|
+
expect(conflict?.message).toContain('Rename');
|
|
326
|
+
expect(conflict?.message).not.toContain('set replaces');
|
|
327
|
+
});
|
|
328
|
+
|
|
161
329
|
it('shell-quotes unusual ids instead of allowing command substitution', () => {
|
|
162
330
|
expect(shellArg('safe/id')).toBe('safe/id');
|
|
163
331
|
expect(shellArg('my$thing')).toBe("'my$thing'");
|
|
@@ -176,7 +344,7 @@ describe('integrationTemplateConflicts', () => {
|
|
|
176
344
|
);
|
|
177
345
|
fs.mkdirSync(path.join(tmpDir, 'templates'), {recursive: true});
|
|
178
346
|
fs.writeFileSync(
|
|
179
|
-
path.join(tmpDir, 'templates', 'broken.
|
|
347
|
+
path.join(tmpDir, 'templates', 'broken.doc.mjs'),
|
|
180
348
|
`throw new Error('broken fixture');\n`,
|
|
181
349
|
);
|
|
182
350
|
fs.writeFileSync(
|
|
@@ -221,7 +389,9 @@ describe('integrationComponentConflicts', () => {
|
|
|
221
389
|
expect(core).toBeDefined();
|
|
222
390
|
writeComponentIntegration(core.name);
|
|
223
391
|
|
|
224
|
-
const result = await integrationComponentConflicts(undefined, {
|
|
392
|
+
const result = await integrationComponentConflicts(undefined, {
|
|
393
|
+
cwd: tmpDir,
|
|
394
|
+
});
|
|
225
395
|
|
|
226
396
|
expect(result.type).toBe('integration.component-conflicts');
|
|
227
397
|
expect(result.data.issues).toEqual([]);
|
|
@@ -240,7 +410,9 @@ describe('integrationComponentConflicts', () => {
|
|
|
240
410
|
it('does not flag an integration-only component name', async () => {
|
|
241
411
|
writeComponentIntegration('AcmeOnlyWidget');
|
|
242
412
|
|
|
243
|
-
const result = await integrationComponentConflicts(undefined, {
|
|
413
|
+
const result = await integrationComponentConflicts(undefined, {
|
|
414
|
+
cwd: tmpDir,
|
|
415
|
+
});
|
|
244
416
|
|
|
245
417
|
expect(result.data.conflicts).toEqual([]);
|
|
246
418
|
expect(result.data.issues).toEqual([]);
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
2
|
|
|
3
|
-
/**
|
|
3
|
+
/**
|
|
4
|
+
* @file Colocated public types for integration authoring diagnostics.
|
|
5
|
+
* @input Stable response fields exposed by integration-authoring APIs.
|
|
6
|
+
* @output JSDoc typedefs consumed by declarations, commands, and callers.
|
|
7
|
+
* @position Public type boundary for integration diagnostics.
|
|
8
|
+
*/
|
|
4
9
|
|
|
5
10
|
/**
|
|
6
11
|
* @typedef {object} IntegrationAuthoringOptions
|
|
@@ -10,6 +10,7 @@ export type IntegrationAddComponentOptions = IntegrationAddBaseOptions;
|
|
|
10
10
|
export type IntegrationAddDocOptions = IntegrationAddBaseOptions & {
|
|
11
11
|
replaces?: string;
|
|
12
12
|
extends?: string;
|
|
13
|
+
parent?: string;
|
|
13
14
|
};
|
|
14
15
|
export type IntegrationAddTemplateOptions = IntegrationAddBaseOptions & {
|
|
15
16
|
type?: "page" | "block";
|
|
@@ -26,9 +27,10 @@ export type IntegrationAddThemeOptions = IntegrationAddBaseOptions;
|
|
|
26
27
|
export type IntegrationAddOptions = {
|
|
27
28
|
cwd?: string | undefined;
|
|
28
29
|
dryRun?: boolean | undefined;
|
|
29
|
-
templateType?: "
|
|
30
|
+
templateType?: "page" | "block" | undefined;
|
|
30
31
|
replaces?: string | undefined;
|
|
31
32
|
extends?: string | undefined;
|
|
33
|
+
parent?: string | undefined;
|
|
32
34
|
to?: string | undefined;
|
|
33
35
|
};
|
|
34
36
|
/**
|
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
* @typedef {IntegrationAddBaseOptions & {
|
|
21
21
|
* replaces?: string,
|
|
22
22
|
* extends?: string,
|
|
23
|
+
* parent?: string,
|
|
23
24
|
* }} IntegrationAddDocOptions
|
|
24
25
|
*/
|
|
25
26
|
|
|
@@ -48,6 +49,7 @@
|
|
|
48
49
|
* @property {'page'|'block'} [templateType]
|
|
49
50
|
* @property {string} [replaces]
|
|
50
51
|
* @property {string} [extends]
|
|
52
|
+
* @property {string} [parent]
|
|
51
53
|
* @property {string} [to]
|
|
52
54
|
*/
|
|
53
55
|
|
|
@@ -51,7 +51,7 @@ const ESBUILD_BIN = resolveBin('esbuild/bin/esbuild');
|
|
|
51
51
|
let tmpDir;
|
|
52
52
|
|
|
53
53
|
/**
|
|
54
|
-
* Build an @acme/widgets fixture: a block template (`.template.ts`
|
|
54
|
+
* Build an @acme/widgets fixture: a block template (released `.template.ts` compatibility descriptor +
|
|
55
55
|
* same-stem `.tsx` source) under `templates/`, plus an astryx.integration
|
|
56
56
|
* manifest, plus a caller-supplied `exports` map.
|
|
57
57
|
* @param {Record<string, string> | undefined} exportsMap
|
|
@@ -71,7 +71,7 @@ function makeWidgets(exportsMap) {
|
|
|
71
71
|
path.join(pkgDir, 'astryx.integration.mjs'),
|
|
72
72
|
`export default { templates: './templates' };\n`,
|
|
73
73
|
);
|
|
74
|
-
// The
|
|
74
|
+
// The released `.template.*` compatibility form remains resolvable.
|
|
75
75
|
fs.writeFileSync(
|
|
76
76
|
path.join(blockDir, 'GaugeShowcase.template.ts'),
|
|
77
77
|
`export default { name: 'Gauge showcase', description: 'A gauge.' };\n`,
|
|
@@ -127,10 +127,14 @@ function writeTsconfig() {
|
|
|
127
127
|
/** @returns {{ok: boolean, out: string}} */
|
|
128
128
|
function runTsc() {
|
|
129
129
|
try {
|
|
130
|
-
execFileSync(
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
130
|
+
execFileSync(
|
|
131
|
+
process.execPath,
|
|
132
|
+
[TSC_BIN, '--noEmit', '-p', 'tsconfig.json'],
|
|
133
|
+
{
|
|
134
|
+
cwd: tmpDir,
|
|
135
|
+
stdio: 'pipe',
|
|
136
|
+
},
|
|
137
|
+
);
|
|
134
138
|
return {ok: true, out: ''};
|
|
135
139
|
} catch (e) {
|
|
136
140
|
return {ok: false, out: `${e.stdout ?? ''}${e.stderr ?? ''}`};
|
|
@@ -5,6 +5,7 @@ export const doc = {
|
|
|
5
5
|
type: 'function',
|
|
6
6
|
kind: 'api',
|
|
7
7
|
name: 'integrationAdd',
|
|
8
|
+
namespace: 'cli/api',
|
|
8
9
|
displayName: 'integrationAdd()',
|
|
9
10
|
summary: 'Add one working contribution to an integration package.',
|
|
10
11
|
description:
|
|
@@ -33,7 +34,8 @@ export const doc = {
|
|
|
33
34
|
{
|
|
34
35
|
name: 'name',
|
|
35
36
|
type: 'string',
|
|
36
|
-
description:
|
|
37
|
+
description:
|
|
38
|
+
'Contribution name: PascalCase for component, lowercase kebab-case for template, codemod, and theme, letters, digits, _ and - for doc, or the literal agent-doc line.',
|
|
37
39
|
required: true,
|
|
38
40
|
},
|
|
39
41
|
{
|
|
@@ -56,17 +58,25 @@ export const doc = {
|
|
|
56
58
|
{
|
|
57
59
|
name: 'options.replaces',
|
|
58
60
|
type: 'string',
|
|
59
|
-
description:
|
|
61
|
+
description:
|
|
62
|
+
'Existing topic to replace. Only valid for doc, and not with options.extends.',
|
|
60
63
|
},
|
|
61
64
|
{
|
|
62
65
|
name: 'options.extends',
|
|
63
66
|
type: 'string',
|
|
64
|
-
description:
|
|
67
|
+
description:
|
|
68
|
+
'Existing topic to extend. Only valid for doc, and not with options.replaces.',
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
name: 'options.parent',
|
|
72
|
+
type: 'string',
|
|
73
|
+
description:
|
|
74
|
+
"Namespace of this package to place the doc in, as a guide in its `guides` slot; the namespace doc is written when missing. Only valid for doc, and not with options.replaces or options.extends.",
|
|
65
75
|
},
|
|
66
76
|
{
|
|
67
77
|
name: 'options.to',
|
|
68
78
|
type: 'string',
|
|
69
|
-
description: 'Exact target semver. Required for codemod.',
|
|
79
|
+
description: 'Exact target semver (e.g. 1.2.0). Required for codemod and only valid there.',
|
|
70
80
|
},
|
|
71
81
|
],
|
|
72
82
|
returns: [
|
|
@@ -5,10 +5,11 @@ export const doc = {
|
|
|
5
5
|
type: 'function',
|
|
6
6
|
kind: 'api',
|
|
7
7
|
name: 'integrationAddComponent',
|
|
8
|
+
namespace: 'cli/api',
|
|
8
9
|
displayName: 'integrationAddComponent()',
|
|
9
10
|
summary: 'Add a complete component contribution.',
|
|
10
11
|
description:
|
|
11
|
-
'Creates the same-stem component source and metadata pair, declares the components root on first use, preserves existing package allowlists, and publishes an exact source subpath when the package already has an exports map.',
|
|
12
|
+
'Creates the same-stem component source and metadata pair, declares the components root on first use, preserves existing package allowlists, and publishes an exact source subpath when the package already has an exports map. Refuses with ERR_FILE_EXISTS when a component doc anywhere under the components root already uses the name.',
|
|
12
13
|
importPath: '@astryxdesign/cli/api',
|
|
13
14
|
signature:
|
|
14
15
|
'integrationAddComponent(name: string, options?: IntegrationAddComponentOptions): Promise<IntegrationAddResponse>',
|
|
@@ -5,10 +5,11 @@ export const doc = {
|
|
|
5
5
|
type: 'function',
|
|
6
6
|
kind: 'api',
|
|
7
7
|
name: 'integrationAddDoc',
|
|
8
|
+
namespace: 'cli/api',
|
|
8
9
|
displayName: 'integrationAddDoc()',
|
|
9
10
|
summary: 'Add a complete reference-doc contribution.',
|
|
10
11
|
description:
|
|
11
|
-
'Creates a valid generic topic, declares the docs root on first use, and supports an intentional replaces or extends relationship.',
|
|
12
|
+
'Creates a valid generic topic, declares the docs root on first use, and supports an intentional replaces or extends relationship, or places the doc as a guide in a namespace of the package.',
|
|
12
13
|
importPath: '@astryxdesign/cli/api',
|
|
13
14
|
signature:
|
|
14
15
|
'integrationAddDoc(name: string, options?: IntegrationAddDocOptions): Promise<IntegrationAddResponse>',
|
|
@@ -41,6 +42,12 @@ export const doc = {
|
|
|
41
42
|
type: 'string',
|
|
42
43
|
description: 'Existing topic this topic extends.',
|
|
43
44
|
},
|
|
45
|
+
{
|
|
46
|
+
name: 'options.parent',
|
|
47
|
+
type: 'string',
|
|
48
|
+
description:
|
|
49
|
+
"Namespace of this package to place the doc in, as a guide in its `guides` slot; the namespace doc is written when missing, and package.json declares the CLI that reads it as an optional `@astryxdesign/cli` peer. Only valid for doc, and not with options.replaces or options.extends.",
|
|
50
|
+
},
|
|
44
51
|
],
|
|
45
52
|
returns: [
|
|
46
53
|
{
|
|
@@ -5,10 +5,11 @@ export const doc = {
|
|
|
5
5
|
type: 'function',
|
|
6
6
|
kind: 'api',
|
|
7
7
|
name: 'integrationAddTheme',
|
|
8
|
+
namespace: 'cli/api',
|
|
8
9
|
displayName: 'integrationAddTheme()',
|
|
9
10
|
summary: 'Add a source theme to an integration package.',
|
|
10
11
|
description:
|
|
11
|
-
'Creates an integration manifest when the package has none, writes a minimal named-export defineTheme source file
|
|
12
|
+
'Creates an integration manifest when the package has none, writes a minimal named-export defineTheme source file plus its strongly typed same-stem ThemeDoc, declares the optional themes root on first use, and includes the manifest and root in package.json files when the package already uses an allowlist. Every path is confined to the package and existing theme directories are never overwritten.',
|
|
12
13
|
importPath: '@astryxdesign/cli/api',
|
|
13
14
|
signature:
|
|
14
15
|
'integrationAddTheme(name: string, options?: IntegrationAddThemeOptions): Promise<IntegrationAddResponse>',
|
|
@@ -17,7 +18,7 @@ export const doc = {
|
|
|
17
18
|
{
|
|
18
19
|
name: 'name',
|
|
19
20
|
type: 'string',
|
|
20
|
-
description: 'Lowercase kebab-case theme name and
|
|
21
|
+
description: 'Lowercase kebab-case theme name and directory slug.',
|
|
21
22
|
required: true,
|
|
22
23
|
},
|
|
23
24
|
{
|
|
@@ -51,7 +52,7 @@ export const doc = {
|
|
|
51
52
|
},
|
|
52
53
|
{
|
|
53
54
|
code: 'ERR_FILE_EXISTS',
|
|
54
|
-
when: 'the theme slug
|
|
55
|
+
when: 'the theme slug directory already exists',
|
|
55
56
|
},
|
|
56
57
|
{
|
|
57
58
|
code: 'ERR_PATH_TRAVERSAL',
|
|
@@ -63,7 +64,7 @@ export const doc = {
|
|
|
63
64
|
},
|
|
64
65
|
{
|
|
65
66
|
code: 'ERR_THEME_INVALID',
|
|
66
|
-
when: 'the package, integration manifest, or theme
|
|
67
|
+
when: 'the package, integration manifest, or theme descriptor is invalid',
|
|
67
68
|
},
|
|
68
69
|
{
|
|
69
70
|
code: 'ERR_WRITE_FAILED',
|
|
@@ -80,6 +81,6 @@ export const doc = {
|
|
|
80
81
|
code: "await integrationAddTheme('ocean', {dryRun: true});",
|
|
81
82
|
},
|
|
82
83
|
],
|
|
83
|
-
command: 'integration add',
|
|
84
|
+
command: 'integration add theme',
|
|
84
85
|
related: ['themeList', 'themeAdd', 'validateIntegration'],
|
|
85
86
|
};
|
|
@@ -7,8 +7,9 @@ export const doc = {
|
|
|
7
7
|
type: 'function',
|
|
8
8
|
kind: 'api',
|
|
9
9
|
name: 'integrationDocConflicts',
|
|
10
|
+
namespace: 'cli/api',
|
|
10
11
|
displayName: 'integrationDocConflicts()',
|
|
11
|
-
summary: '
|
|
12
|
+
summary: 'Check an integration\'s docs: the docs tree they add, every link, and overlaps with Core topics.',
|
|
12
13
|
description:
|
|
13
14
|
'Loads one local or installed integration and classifies Core doc overlaps as ' +
|
|
14
15
|
'intentional replacements, intentional extensions, or accidental same-name ' +
|
|
@@ -5,14 +5,15 @@ export const doc = {
|
|
|
5
5
|
type: 'function',
|
|
6
6
|
kind: 'api',
|
|
7
7
|
name: 'integrationPackCheck',
|
|
8
|
+
namespace: 'cli/api',
|
|
8
9
|
displayName: 'integrationPackCheck()',
|
|
9
|
-
summary: '
|
|
10
|
+
summary: 'Check an integration package the way npm will publish it.',
|
|
10
11
|
description:
|
|
11
|
-
"Validates the local integration, runs the package lifecycle, packs with npm, checks required files against npm's authoritative tarball list, extracts the real tarball into a scratch consumer, compares local and packed contribution inventories, and resolves every packed component through its documented public import to verify that module exports the component.",
|
|
12
|
+
"Validates the local integration, runs the package lifecycle, packs with npm, checks required files against npm's authoritative tarball list, extracts the real tarball into a scratch consumer, compares local and packed contribution inventories, and resolves every packed component through its documented public import to verify that module exports the component. A package that ships a namespace doc or a placed guide, or has a template that sets `replaces`, fails unless its `@astryxdesign/cli` peer range admits only CLIs that read them.",
|
|
12
13
|
importPath: '@astryxdesign/cli/api',
|
|
13
14
|
signature:
|
|
14
15
|
'integrationPackCheck(options?: IntegrationPackCheckOptions): Promise<IntegrationPackCheckResponse>',
|
|
15
|
-
keywords: ['
|
|
16
|
+
keywords: ['verify', 'pack', 'publish', 'tarball', 'consumer'],
|
|
16
17
|
params: [
|
|
17
18
|
{
|
|
18
19
|
name: 'options.cwd',
|
|
@@ -30,6 +31,6 @@ export const doc = {
|
|
|
30
31
|
examples: [
|
|
31
32
|
{label: 'Check the local package', code: 'await integrationPackCheck();'},
|
|
32
33
|
],
|
|
33
|
-
command: 'integration
|
|
34
|
+
command: 'integration verify',
|
|
34
35
|
related: ['integrationAdd', 'validateIntegration'],
|
|
35
36
|
};
|
|
@@ -3,6 +3,9 @@
|
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* @file FunctionDoc for integration template-conflict diagnostics.
|
|
6
|
+
* @input The stable 0.6.x `integrationTemplateConflicts` API contract.
|
|
7
|
+
* @output Generated CLI API reference metadata.
|
|
8
|
+
* @position Consumer-facing documentation for the public authoring API.
|
|
6
9
|
*/
|
|
7
10
|
/** @type {import('@astryxdesign/cli/authoring').FunctionDoc} */
|
|
8
11
|
export const doc: import("@astryxdesign/cli/authoring").FunctionDoc;
|
|
@@ -2,6 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* @file FunctionDoc for integration template-conflict diagnostics.
|
|
5
|
+
* @input The stable 0.6.x `integrationTemplateConflicts` API contract.
|
|
6
|
+
* @output Generated CLI API reference metadata.
|
|
7
|
+
* @position Consumer-facing documentation for the public authoring API.
|
|
5
8
|
*/
|
|
6
9
|
|
|
7
10
|
/** @type {import('@astryxdesign/cli/authoring').FunctionDoc} */
|
|
@@ -9,6 +12,7 @@ export const doc = {
|
|
|
9
12
|
type: 'function',
|
|
10
13
|
kind: 'api',
|
|
11
14
|
name: 'integrationTemplateConflicts',
|
|
15
|
+
namespace: 'cli/api',
|
|
12
16
|
displayName: 'integrationTemplateConflicts()',
|
|
13
17
|
summary: 'Find integration template ids that also exist in Core.',
|
|
14
18
|
description:
|
|
@@ -0,0 +1,107 @@
|
|
|
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 path from 'node:path';
|
|
6
|
+
import {integrationPackCheck} from './pack-check.mjs';
|
|
7
|
+
|
|
8
|
+
let tmpDir;
|
|
9
|
+
|
|
10
|
+
beforeEach(() => {
|
|
11
|
+
tmpDir = fs.mkdtempSync(path.join(process.cwd(), '.astryx-pack-check-'));
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
afterEach(() => {
|
|
15
|
+
fs.rmSync(tmpDir, {recursive: true, force: true});
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
/** @param {Record<string, string>} scripts */
|
|
19
|
+
function writeThemePackage(scripts) {
|
|
20
|
+
fs.writeFileSync(
|
|
21
|
+
path.join(tmpDir, 'package.json'),
|
|
22
|
+
`${JSON.stringify(
|
|
23
|
+
{
|
|
24
|
+
name: '@acme/widgets',
|
|
25
|
+
version: '1.0.0',
|
|
26
|
+
files: ['astryx.integration.mjs', 'themes'],
|
|
27
|
+
peerDependencies: {'@astryxdesign/cli': '>=0.7.0'},
|
|
28
|
+
peerDependenciesMeta: {'@astryxdesign/cli': {optional: true}},
|
|
29
|
+
scripts,
|
|
30
|
+
},
|
|
31
|
+
null,
|
|
32
|
+
2,
|
|
33
|
+
)}\n`,
|
|
34
|
+
);
|
|
35
|
+
fs.writeFileSync(
|
|
36
|
+
path.join(tmpDir, 'astryx.integration.mjs'),
|
|
37
|
+
"export default {themes: './themes'};\n",
|
|
38
|
+
);
|
|
39
|
+
const root = path.join(tmpDir, 'themes');
|
|
40
|
+
fs.mkdirSync(path.join(root, 'ocean'), {recursive: true});
|
|
41
|
+
fs.writeFileSync(
|
|
42
|
+
path.join(root, 'ocean', 'oceanTheme.ts'),
|
|
43
|
+
"import {defineTheme} from '@astryxdesign/core/theme';\n\nexport const oceanTheme = defineTheme({name: 'ocean'});\n",
|
|
44
|
+
);
|
|
45
|
+
fs.writeFileSync(
|
|
46
|
+
path.join(root, 'ocean', 'oceanTheme.doc.mjs'),
|
|
47
|
+
`/** @type {import('@astryxdesign/cli/authoring').ThemeDoc} */
|
|
48
|
+
export default {type: 'theme', name: 'ocean', displayName: 'Ocean', description: 'Ocean theme.', maintained: true};
|
|
49
|
+
`,
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
describe('integrationPackCheck with lifecycle script output', () => {
|
|
54
|
+
it('checks the tarball when lifecycle scripts print to stdout', async () => {
|
|
55
|
+
writeThemePackage({
|
|
56
|
+
prepack: 'node -e "console.log(\'building the package\')"',
|
|
57
|
+
prepare: 'node -e "console.log(\'preparing\')"',
|
|
58
|
+
postpack: 'node -e "console.log(\'packed\')"',
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
const result = await integrationPackCheck({cwd: tmpDir});
|
|
62
|
+
|
|
63
|
+
expect(result.data.issues).toEqual([]);
|
|
64
|
+
expect(result.data.packable).toBe(true);
|
|
65
|
+
expect(result.data.tarball?.filename).toBe('acme-widgets-1.0.0.tgz');
|
|
66
|
+
expect(result.data.contributions.packed).toEqual(
|
|
67
|
+
result.data.contributions.local,
|
|
68
|
+
);
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
it('still runs a chatty lifecycle script and compares what it packed', async () => {
|
|
72
|
+
const renameTheme = [
|
|
73
|
+
"console.log('renaming ocean to storm')",
|
|
74
|
+
"const fs=require('fs')",
|
|
75
|
+
"fs.renameSync('themes/ocean','themes/storm')",
|
|
76
|
+
"const p='themes/storm/oceanTheme.doc.mjs'",
|
|
77
|
+
"let x=fs.readFileSync(p,'utf8')",
|
|
78
|
+
"x=x.replace(/name: 'ocean'/, 'name: '+String.fromCharCode(39)+'storm'+String.fromCharCode(39))",
|
|
79
|
+
'fs.writeFileSync(p,x)',
|
|
80
|
+
].join(';');
|
|
81
|
+
writeThemePackage({prepack: `node -e "${renameTheme}"`});
|
|
82
|
+
|
|
83
|
+
const result = await integrationPackCheck({cwd: tmpDir});
|
|
84
|
+
const codes = result.data.issues.map(issue => issue.code);
|
|
85
|
+
|
|
86
|
+
expect(codes).not.toContain('pack_failed');
|
|
87
|
+
expect(codes).toContain('identity_not_packed');
|
|
88
|
+
expect(codes).toContain('packed_identity_unexpected');
|
|
89
|
+
expect(result.data.packable).toBe(false);
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
it('keeps a failing lifecycle script output in the pack_failed issue', async () => {
|
|
93
|
+
writeThemePackage({
|
|
94
|
+
prepack:
|
|
95
|
+
'node -e "console.error(\'prepack exploded\'); process.exit(3)"',
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
const result = await integrationPackCheck({cwd: tmpDir});
|
|
99
|
+
const failure = result.data.issues.find(
|
|
100
|
+
issue => issue.code === 'pack_failed',
|
|
101
|
+
);
|
|
102
|
+
|
|
103
|
+
expect(result.data.packable).toBe(false);
|
|
104
|
+
expect(failure?.message).toContain('npm pack failed (exit 3)');
|
|
105
|
+
expect(failure?.message).toContain('prepack exploded');
|
|
106
|
+
});
|
|
107
|
+
});
|