@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
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
*/
|
|
16
16
|
/**
|
|
17
17
|
* Compute the files the tarball must contain for an integration's
|
|
18
|
-
* contributions to be visible.
|
|
18
|
+
* contributions to be visible. Walks descriptor-owned directories;
|
|
19
19
|
* never imports or executes authored modules.
|
|
20
20
|
*
|
|
21
21
|
* @param {import('./integrations.mjs').LoadedIntegration} loaded
|
|
@@ -26,7 +26,7 @@ export function computeRequiredFiles(loaded: import("./integrations.mjs").Loaded
|
|
|
26
26
|
* @typedef {object} ContributionIdentities
|
|
27
27
|
* @property {{slug: string, exportName: string}[]} themes
|
|
28
28
|
* @property {string[]} components
|
|
29
|
-
* @property {{id: string, type: string, name: string}[]} templates
|
|
29
|
+
* @property {{id: string, type: string, name: string, replaces?: string}[]} templates
|
|
30
30
|
* @property {{version: string, id: string}[]} codemods
|
|
31
31
|
* @property {string[]} docs
|
|
32
32
|
* @property {string[]} agentDocsAppend
|
|
@@ -127,6 +127,7 @@ export type ContributionIdentities = {
|
|
|
127
127
|
id: string;
|
|
128
128
|
type: string;
|
|
129
129
|
name: string;
|
|
130
|
+
replaces?: string;
|
|
130
131
|
}[];
|
|
131
132
|
codemods: {
|
|
132
133
|
version: string;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* @file Contribution inventory for integration
|
|
4
|
+
* @file Contribution inventory for `astryx integration verify`.
|
|
5
5
|
*
|
|
6
6
|
* Enumerates the files and contribution identities an integration package
|
|
7
7
|
* declares, for cross-referencing against the npm tarball. The file inventory
|
|
@@ -14,8 +14,11 @@
|
|
|
14
14
|
import * as fs from 'node:fs';
|
|
15
15
|
import * as path from 'node:path';
|
|
16
16
|
import {isDeepStrictEqual} from 'node:util';
|
|
17
|
-
import {
|
|
18
|
-
|
|
17
|
+
import {
|
|
18
|
+
discoverIntegrationThemes,
|
|
19
|
+
isThemeFolder,
|
|
20
|
+
listThemeFiles,
|
|
21
|
+
} from '../discovery/theme-discovery.mjs';
|
|
19
22
|
import {discoverIntegrationComponents} from '../discovery/component-discovery.mjs';
|
|
20
23
|
import {loadComponentDoc} from '../discovery/component-loader.mjs';
|
|
21
24
|
import {discoverIntegrationTemplatesForOne} from '../discovery/template-adapter.mjs';
|
|
@@ -65,27 +68,21 @@ function rel(packageDir, file) {
|
|
|
65
68
|
|
|
66
69
|
/** @param {string} root @param {string} pkgDir */
|
|
67
70
|
function enumerateThemeFiles(root, pkgDir) {
|
|
71
|
+
if (!root || !fs.existsSync(root) || !fs.statSync(root).isDirectory()) {
|
|
72
|
+
return [];
|
|
73
|
+
}
|
|
74
|
+
// Exactly what `theme add` copies: each theme folder's files, including
|
|
75
|
+
// tests and fixtures, but no dot entry or file npm never publishes. Files
|
|
76
|
+
// beside the theme folders belong to no theme.
|
|
68
77
|
/** @type {string[]} */
|
|
69
78
|
const files = [];
|
|
70
|
-
const
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
const data = JSON.parse(fs.readFileSync(catalog, 'utf-8'));
|
|
75
|
-
if (data?.version !== 1 || !Array.isArray(data.themes)) return files;
|
|
76
|
-
for (const theme of data.themes) {
|
|
77
|
-
if (typeof theme.slug !== 'string' || !Array.isArray(theme.files))
|
|
78
|
-
continue;
|
|
79
|
-
for (const f of theme.files) {
|
|
80
|
-
if (typeof f === 'string') {
|
|
81
|
-
files.push(rel(pkgDir, path.join(root, theme.slug, f)));
|
|
82
|
-
}
|
|
83
|
-
}
|
|
79
|
+
for (const entry of fs.readdirSync(root, {withFileTypes: true})) {
|
|
80
|
+
const full = path.join(root, entry.name);
|
|
81
|
+
if (entry.isDirectory() && isThemeFolder(full)) {
|
|
82
|
+
files.push(...listThemeFiles(full).map(file => path.join(full, file)));
|
|
84
83
|
}
|
|
85
|
-
} catch {
|
|
86
|
-
/* Phase 1 catches structural issues */
|
|
87
84
|
}
|
|
88
|
-
return files;
|
|
85
|
+
return files.sort().map(file => rel(pkgDir, file));
|
|
89
86
|
}
|
|
90
87
|
|
|
91
88
|
/** @param {string} root @param {string} pkgDir */
|
|
@@ -158,7 +155,7 @@ const ROOT_KINDS = /** @type {const} */ ([
|
|
|
158
155
|
|
|
159
156
|
/**
|
|
160
157
|
* Compute the files the tarball must contain for an integration's
|
|
161
|
-
* contributions to be visible.
|
|
158
|
+
* contributions to be visible. Walks descriptor-owned directories;
|
|
162
159
|
* never imports or executes authored modules.
|
|
163
160
|
*
|
|
164
161
|
* @param {import('./integrations.mjs').LoadedIntegration} loaded
|
|
@@ -192,7 +189,7 @@ export function computeRequiredFiles(loaded) {
|
|
|
192
189
|
* @typedef {object} ContributionIdentities
|
|
193
190
|
* @property {{slug: string, exportName: string}[]} themes
|
|
194
191
|
* @property {string[]} components
|
|
195
|
-
* @property {{id: string, type: string, name: string}[]} templates
|
|
192
|
+
* @property {{id: string, type: string, name: string, replaces?: string}[]} templates
|
|
196
193
|
* @property {{version: string, id: string}[]} codemods
|
|
197
194
|
* @property {string[]} docs
|
|
198
195
|
* @property {string[]} agentDocsAppend
|
|
@@ -281,7 +278,12 @@ export async function collectIdentities(loaded) {
|
|
|
281
278
|
errors.push({kind: 'templates', message: templateError.message});
|
|
282
279
|
}
|
|
283
280
|
identities.templates = templates
|
|
284
|
-
.map(t => ({
|
|
281
|
+
.map(t => ({
|
|
282
|
+
id: t.dirName,
|
|
283
|
+
type: t.type,
|
|
284
|
+
name: t.name,
|
|
285
|
+
...(t.replaces == null ? {} : {replaces: t.replaces}),
|
|
286
|
+
}))
|
|
285
287
|
.sort((a, b) => a.id.localeCompare(b.id));
|
|
286
288
|
} catch (err) {
|
|
287
289
|
errors.push({
|
|
@@ -312,12 +314,13 @@ export async function collectIdentities(loaded) {
|
|
|
312
314
|
|
|
313
315
|
if (loaded.docs && fs.existsSync(loaded.docs)) {
|
|
314
316
|
try {
|
|
315
|
-
const {records, errors: docErrors} =
|
|
317
|
+
const {records, guides, errors: docErrors} =
|
|
316
318
|
await discoverIntegrationDocs(loaded);
|
|
317
319
|
for (const docError of docErrors) {
|
|
318
320
|
errors.push({kind: 'docs', message: docError.message});
|
|
319
321
|
}
|
|
320
|
-
|
|
322
|
+
// A guide placed in the docs tree is a doc contribution too.
|
|
323
|
+
identities.docs = [...records, ...guides].map(r => r.name).sort();
|
|
321
324
|
} catch (err) {
|
|
322
325
|
errors.push({kind: 'docs', message: /** @type {Error} */ (err).message});
|
|
323
326
|
}
|
|
@@ -37,30 +37,37 @@ function loaded(overrides = {}) {
|
|
|
37
37
|
|
|
38
38
|
function writeTheme(slug, files = [`${slug}Theme.ts`]) {
|
|
39
39
|
const root = path.join(tmpDir, 'themes');
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
40
|
+
const themeDir = path.join(root, slug);
|
|
41
|
+
fs.mkdirSync(themeDir, {recursive: true});
|
|
42
|
+
for (const file of files) {
|
|
43
|
+
const target = path.join(themeDir, file);
|
|
44
|
+
fs.mkdirSync(path.dirname(target), {recursive: true});
|
|
45
|
+
fs.writeFileSync(target, `// ${file}\n`);
|
|
43
46
|
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
}
|
|
49
|
-
catalog.themes.push({
|
|
50
|
-
slug,
|
|
51
|
-
displayName: slug,
|
|
52
|
-
description: `${slug} theme.`,
|
|
53
|
-
maintained: true,
|
|
54
|
-
entry: files[0],
|
|
55
|
-
exportName: `${slug}Theme`,
|
|
56
|
-
files,
|
|
57
|
-
});
|
|
58
|
-
fs.writeFileSync(catalogPath, JSON.stringify(catalog, null, 2) + '\n');
|
|
47
|
+
fs.writeFileSync(
|
|
48
|
+
path.join(themeDir, `${slug}Theme.doc.mjs`),
|
|
49
|
+
`/** @type {import('@astryxdesign/cli/authoring').ThemeDoc} */\nexport default {type: 'theme', name: '${slug}', displayName: '${slug}', description: '${slug} theme.', maintained: true};\n`,
|
|
50
|
+
);
|
|
59
51
|
return root;
|
|
60
52
|
}
|
|
61
53
|
|
|
54
|
+
const UNPUBLISHED = [
|
|
55
|
+
'.DS_Store',
|
|
56
|
+
'._oceanTheme.ts',
|
|
57
|
+
'.gitignore',
|
|
58
|
+
'.npmignore',
|
|
59
|
+
'.npmrc',
|
|
60
|
+
'oceanTheme.ts.orig',
|
|
61
|
+
'npm-debug.log',
|
|
62
|
+
'palette/.DS_Store',
|
|
63
|
+
'palette/npm-debug.log',
|
|
64
|
+
'.git/HEAD',
|
|
65
|
+
'CVS/Entries',
|
|
66
|
+
'node_modules/dep/index.js',
|
|
67
|
+
];
|
|
68
|
+
|
|
62
69
|
describe('computeRequiredFiles', () => {
|
|
63
|
-
it('enumerates
|
|
70
|
+
it('enumerates each complete descriptor-owned theme directory', () => {
|
|
64
71
|
const root = writeTheme('ocean', ['oceanTheme.ts', 'tokens.ts']);
|
|
65
72
|
const inv = computeRequiredFiles(loaded({themes: root}));
|
|
66
73
|
|
|
@@ -69,13 +76,46 @@ describe('computeRequiredFiles', () => {
|
|
|
69
76
|
expect(inv.roots[0].kind).toBe('themes');
|
|
70
77
|
expect(inv.roots[0].files).toEqual(
|
|
71
78
|
expect.arrayContaining([
|
|
72
|
-
'themes/
|
|
79
|
+
'themes/ocean/oceanTheme.doc.mjs',
|
|
73
80
|
'themes/ocean/oceanTheme.ts',
|
|
74
81
|
'themes/ocean/tokens.ts',
|
|
75
82
|
]),
|
|
76
83
|
);
|
|
77
84
|
expect(inv.allFiles).toContain('astryx.integration.mjs');
|
|
78
|
-
expect(inv.allFiles).toContain('themes/
|
|
85
|
+
expect(inv.allFiles).toContain('themes/ocean/oceanTheme.doc.mjs');
|
|
86
|
+
expect(inv.allFiles).not.toContain('themes/manifest.json');
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
it('requires no file npm leaves out, at any depth, and none beside the themes', () => {
|
|
90
|
+
const root = writeTheme('ocean', ['oceanTheme.ts', 'palette/tokens.ts']);
|
|
91
|
+
for (const file of [
|
|
92
|
+
...UNPUBLISHED.map(name => `ocean/${name}`),
|
|
93
|
+
'README.md',
|
|
94
|
+
'npm-debug.log',
|
|
95
|
+
]) {
|
|
96
|
+
fs.mkdirSync(path.dirname(path.join(root, file)), {recursive: true});
|
|
97
|
+
fs.writeFileSync(path.join(root, file), 'x\n');
|
|
98
|
+
}
|
|
99
|
+
expect(computeRequiredFiles(loaded({themes: root})).roots[0].files).toEqual(
|
|
100
|
+
[
|
|
101
|
+
'themes/ocean/oceanTheme.doc.mjs',
|
|
102
|
+
'themes/ocean/oceanTheme.ts',
|
|
103
|
+
'themes/ocean/palette/tokens.ts',
|
|
104
|
+
],
|
|
105
|
+
);
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
it('requires only the folders theme discovery reads', () => {
|
|
109
|
+
const root = writeTheme('ocean');
|
|
110
|
+
for (const file of ['shared/palette.ts', '.cache/state.json']) {
|
|
111
|
+
fs.mkdirSync(path.dirname(path.join(root, file)), {recursive: true});
|
|
112
|
+
fs.writeFileSync(path.join(root, file), '{}\n');
|
|
113
|
+
}
|
|
114
|
+
const inv = computeRequiredFiles(loaded({themes: root}));
|
|
115
|
+
expect(inv.roots[0].files).toEqual([
|
|
116
|
+
'themes/ocean/oceanTheme.doc.mjs',
|
|
117
|
+
'themes/ocean/oceanTheme.ts',
|
|
118
|
+
]);
|
|
79
119
|
});
|
|
80
120
|
|
|
81
121
|
it('enumerates paired component metadata and source files', () => {
|
|
@@ -139,31 +179,31 @@ describe('computeRequiredFiles', () => {
|
|
|
139
179
|
const root = path.join(tmpDir, 'templates');
|
|
140
180
|
fs.mkdirSync(path.join(root, 'dashboard'), {recursive: true});
|
|
141
181
|
fs.writeFileSync(
|
|
142
|
-
path.join(root, 'dashboard', 'dashboard.
|
|
182
|
+
path.join(root, 'dashboard', 'dashboard.doc.mjs'),
|
|
143
183
|
'// tmpl\n',
|
|
144
184
|
);
|
|
145
185
|
fs.writeFileSync(path.join(root, 'dashboard', 'dashboard.tsx'), '// src\n');
|
|
146
186
|
const inv = computeRequiredFiles(loaded({templates: root}));
|
|
147
187
|
|
|
148
188
|
expect(inv.roots[0].files).toContain(
|
|
149
|
-
'templates/dashboard/dashboard.
|
|
189
|
+
'templates/dashboard/dashboard.doc.mjs',
|
|
150
190
|
);
|
|
151
191
|
expect(inv.roots[0].files).toContain('templates/dashboard/dashboard.tsx');
|
|
152
192
|
});
|
|
153
193
|
|
|
154
|
-
it('enumerates
|
|
194
|
+
it('enumerates released .template compatibility metadata with paired sources', () => {
|
|
155
195
|
const root = path.join(tmpDir, 'templates');
|
|
156
196
|
fs.mkdirSync(path.join(root, 'dashboard'), {recursive: true});
|
|
157
197
|
fs.writeFileSync(
|
|
158
|
-
path.join(root, 'dashboard', 'dashboard.
|
|
159
|
-
'//
|
|
198
|
+
path.join(root, 'dashboard', 'dashboard.template.mjs'),
|
|
199
|
+
'// released compatibility template\n',
|
|
160
200
|
);
|
|
161
201
|
fs.writeFileSync(path.join(root, 'dashboard', 'dashboard.tsx'), '// src\n');
|
|
162
202
|
|
|
163
203
|
const inv = computeRequiredFiles(loaded({templates: root}));
|
|
164
204
|
|
|
165
205
|
expect(inv.roots[0].files).toEqual([
|
|
166
|
-
'templates/dashboard/dashboard.
|
|
206
|
+
'templates/dashboard/dashboard.template.mjs',
|
|
167
207
|
'templates/dashboard/dashboard.tsx',
|
|
168
208
|
]);
|
|
169
209
|
});
|
|
@@ -264,6 +304,25 @@ describe('compareIdentities', () => {
|
|
|
264
304
|
expect(issues[0].message).toContain('dash');
|
|
265
305
|
});
|
|
266
306
|
|
|
307
|
+
it('errors when a packed template replaces a different target', () => {
|
|
308
|
+
const template = {id: 'acme-shell', type: 'page', name: 'Acme shell'};
|
|
309
|
+
const local = {
|
|
310
|
+
...base(),
|
|
311
|
+
templates: [{...template, replaces: 'shell-side-nav'}],
|
|
312
|
+
};
|
|
313
|
+
const packed = {
|
|
314
|
+
...base(),
|
|
315
|
+
templates: [{...template, replaces: 'shell-top-nav'}],
|
|
316
|
+
};
|
|
317
|
+
|
|
318
|
+
expect(compareIdentities(local, packed)).toEqual([
|
|
319
|
+
expect.objectContaining({
|
|
320
|
+
code: 'identity_mismatch',
|
|
321
|
+
message: expect.stringContaining('acme-shell'),
|
|
322
|
+
}),
|
|
323
|
+
]);
|
|
324
|
+
});
|
|
325
|
+
|
|
267
326
|
it('errors when a codemod is missing from packed', () => {
|
|
268
327
|
const local = {
|
|
269
328
|
...base(),
|
|
@@ -8,10 +8,17 @@
|
|
|
8
8
|
*
|
|
9
9
|
* Warning: <pkg> has N integration issue(s). Run: astryx doctor integration validate <pkg>
|
|
10
10
|
*
|
|
11
|
-
* @param {Array<import('./integrations.mjs').LoadedIntegration>
|
|
11
|
+
* @param {Array<import('./integrations.mjs').LoadedIntegration> | {issues: () => Promise<Array<{package: string, code: string, severity: string, message: string}>>}} source loaded integrations or their Project owner
|
|
12
12
|
* @param {{json?: boolean}} [options]
|
|
13
13
|
* @returns {Promise<void>}
|
|
14
14
|
*/
|
|
15
|
-
export function warnOnIntegrationIssues(
|
|
15
|
+
export function warnOnIntegrationIssues(source: Array<import("./integrations.mjs").LoadedIntegration> | {
|
|
16
|
+
issues: () => Promise<Array<{
|
|
17
|
+
package: string;
|
|
18
|
+
code: string;
|
|
19
|
+
severity: string;
|
|
20
|
+
message: string;
|
|
21
|
+
}>>;
|
|
22
|
+
}, { json }?: {
|
|
16
23
|
json?: boolean;
|
|
17
24
|
}): Promise<void>;
|
|
@@ -10,8 +10,9 @@
|
|
|
10
10
|
* contributions or spamming per-contribution diagnostics.
|
|
11
11
|
*
|
|
12
12
|
* Design constraints (all enforced here):
|
|
13
|
-
* - Reuses
|
|
14
|
-
*
|
|
13
|
+
* - Reuses Project.issues() when a Project is available, so cross-package
|
|
14
|
+
* replacement warnings are visible; accepts loaded integrations for legacy
|
|
15
|
+
* internal callers and tests.
|
|
15
16
|
* - Writes to STDERR only, so it never corrupts a --json stdout envelope.
|
|
16
17
|
* - Suppressed entirely in --json mode.
|
|
17
18
|
* - Best-effort: never throws, never changes the exit code. Broken
|
|
@@ -28,32 +29,62 @@ import {validateLoadedIntegration} from './validate-contributions.mjs';
|
|
|
28
29
|
*
|
|
29
30
|
* Warning: <pkg> has N integration issue(s). Run: astryx doctor integration validate <pkg>
|
|
30
31
|
*
|
|
31
|
-
* @param {Array<import('./integrations.mjs').LoadedIntegration>
|
|
32
|
+
* @param {Array<import('./integrations.mjs').LoadedIntegration> | {issues: () => Promise<Array<{package: string, code: string, severity: string, message: string}>>}} source loaded integrations or their Project owner
|
|
32
33
|
* @param {{json?: boolean}} [options]
|
|
33
34
|
* @returns {Promise<void>}
|
|
34
35
|
*/
|
|
35
|
-
export async function warnOnIntegrationIssues(
|
|
36
|
+
export async function warnOnIntegrationIssues(source, {json = false} = {}) {
|
|
36
37
|
try {
|
|
37
|
-
// Cheap guard: only do work when integrations are actually configured.
|
|
38
38
|
if (json) return;
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
39
|
+
|
|
40
|
+
/** @type {Map<string, number>} */
|
|
41
|
+
const issueCounts = new Map();
|
|
42
|
+
const fromProject =
|
|
43
|
+
source != null &&
|
|
44
|
+
!Array.isArray(source) &&
|
|
45
|
+
typeof source.issues === 'function';
|
|
46
|
+
|
|
47
|
+
if (fromProject) {
|
|
48
|
+
const issues = await source.issues();
|
|
49
|
+
for (const issue of issues) {
|
|
50
|
+
// A provider-conflict issue carries the specific message that
|
|
51
|
+
// `doctor integration validate` would not explain. Print it directly.
|
|
52
|
+
if (issue.code === 'duplicate_provider') {
|
|
53
|
+
console.error(`Warning: ${issue.message}`);
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
issueCounts.set(
|
|
57
|
+
issue.package,
|
|
58
|
+
(issueCounts.get(issue.package) ?? 0) + 1,
|
|
59
|
+
);
|
|
50
60
|
}
|
|
51
|
-
|
|
52
|
-
const
|
|
53
|
-
|
|
61
|
+
} else if (Array.isArray(source)) {
|
|
62
|
+
for (const integration of source) {
|
|
63
|
+
if (!integration || typeof integration !== 'object') continue;
|
|
64
|
+
// A package set aside for a provider-ID conflict is fine in isolation,
|
|
65
|
+
// so `doctor integration validate` would not explain it. Say it here.
|
|
66
|
+
if (integration.__providerConflict) {
|
|
67
|
+
console.error(`Warning: ${integration.__providerConflict.message}`);
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
let issues;
|
|
71
|
+
try {
|
|
72
|
+
issues = await validateLoadedIntegration(integration);
|
|
73
|
+
} catch {
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
if (!Array.isArray(issues) || issues.length === 0) continue;
|
|
77
|
+
const pkg = integration.name ?? integration.__spec ?? '(integration)';
|
|
78
|
+
issueCounts.set(pkg, issues.length);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
for (const [pkg, count] of issueCounts) {
|
|
83
|
+
const command = fromProject
|
|
84
|
+
? 'astryx doctor'
|
|
85
|
+
: `astryx doctor integration validate ${pkg}`;
|
|
54
86
|
console.error(
|
|
55
|
-
`Warning: ${pkg} has ${
|
|
56
|
-
`Run: astryx doctor integration validate ${pkg}`,
|
|
87
|
+
`Warning: ${pkg} has ${count} integration issue(s). Run: ${command}`,
|
|
57
88
|
);
|
|
58
89
|
}
|
|
59
90
|
} catch {
|
|
@@ -37,7 +37,12 @@ afterEach(() => {
|
|
|
37
37
|
* Build a loaded-integration-shaped object. Roots are absolute (mirrors
|
|
38
38
|
* loadIntegrations' resolveRoot).
|
|
39
39
|
*/
|
|
40
|
-
function loaded({
|
|
40
|
+
function loaded({
|
|
41
|
+
name = '@acme/widgets',
|
|
42
|
+
components,
|
|
43
|
+
templates,
|
|
44
|
+
codemods,
|
|
45
|
+
} = {}) {
|
|
41
46
|
return {
|
|
42
47
|
name,
|
|
43
48
|
version: '1.0.0',
|
|
@@ -62,6 +67,25 @@ describe('warnOnIntegrationIssues', () => {
|
|
|
62
67
|
);
|
|
63
68
|
});
|
|
64
69
|
|
|
70
|
+
it('surfaces cross-package issues collected by Project', async () => {
|
|
71
|
+
const project = {
|
|
72
|
+
issues: async () => [
|
|
73
|
+
{
|
|
74
|
+
package: '@acme/later',
|
|
75
|
+
code: 'ambiguous_template_replacement',
|
|
76
|
+
severity: 'warning',
|
|
77
|
+
message: 'Later configured replacement wins.',
|
|
78
|
+
},
|
|
79
|
+
],
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
await warnOnIntegrationIssues(project, {json: false});
|
|
83
|
+
|
|
84
|
+
expect(errLines).toEqual([
|
|
85
|
+
'Warning: @acme/later has 1 integration issue(s). Run: astryx doctor',
|
|
86
|
+
]);
|
|
87
|
+
});
|
|
88
|
+
|
|
65
89
|
it('emits nothing in --json mode (keeps stdout/JSON clean)', async () => {
|
|
66
90
|
const integration = loaded({components: 'does-not-exist'});
|
|
67
91
|
await warnOnIntegrationIssues([integration], {json: true});
|
|
@@ -116,4 +140,53 @@ describe('warnOnIntegrationIssues', () => {
|
|
|
116
140
|
).resolves.toBeUndefined();
|
|
117
141
|
expect(errLines).toHaveLength(0);
|
|
118
142
|
});
|
|
143
|
+
|
|
144
|
+
it('prints the specific provider-conflict message via the array path', async () => {
|
|
145
|
+
const conflict = {
|
|
146
|
+
name: '@acme/charts',
|
|
147
|
+
version: '2.0.0',
|
|
148
|
+
__spec: '@acme/charts',
|
|
149
|
+
__packageDir: tmpDir,
|
|
150
|
+
__providerConflict: {
|
|
151
|
+
providerId: '@acme/lab',
|
|
152
|
+
claimedBy: '@acme/lab',
|
|
153
|
+
message:
|
|
154
|
+
'@acme/charts@2.0.0 and @acme/lab@1.0.0 both claim provider ID ' +
|
|
155
|
+
'"@acme/lab". @acme/lab@1.0.0 loads first and is used; ' +
|
|
156
|
+
'@acme/charts@2.0.0 contributes nothing until one package changes ' +
|
|
157
|
+
'its providerId.',
|
|
158
|
+
},
|
|
159
|
+
};
|
|
160
|
+
await warnOnIntegrationIssues([conflict], {json: false});
|
|
161
|
+
|
|
162
|
+
expect(errLines).toHaveLength(1);
|
|
163
|
+
expect(errLines[0]).toBe(`Warning: ${conflict.__providerConflict.message}`);
|
|
164
|
+
// Must NOT print the generic validate pointer for a provider conflict.
|
|
165
|
+
expect(errLines[0]).not.toContain('integration issue(s)');
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
it('prints the specific provider-conflict message via the Project path', async () => {
|
|
169
|
+
const conflictMessage =
|
|
170
|
+
'@acme/charts@2.0.0 and @acme/lab@1.0.0 both claim provider ID ' +
|
|
171
|
+
'"@acme/lab". @acme/lab@1.0.0 loads first and is used; ' +
|
|
172
|
+
'@acme/charts@2.0.0 contributes nothing until one package changes ' +
|
|
173
|
+
'its providerId.';
|
|
174
|
+
const project = {
|
|
175
|
+
issues: async () => [
|
|
176
|
+
{
|
|
177
|
+
package: '@acme/charts@2.0.0',
|
|
178
|
+
code: 'duplicate_provider',
|
|
179
|
+
severity: 'warning',
|
|
180
|
+
message: conflictMessage,
|
|
181
|
+
},
|
|
182
|
+
],
|
|
183
|
+
};
|
|
184
|
+
|
|
185
|
+
await warnOnIntegrationIssues(project, {json: false});
|
|
186
|
+
|
|
187
|
+
expect(errLines).toHaveLength(1);
|
|
188
|
+
expect(errLines[0]).toBe(`Warning: ${conflictMessage}`);
|
|
189
|
+
// Must NOT print the generic validate pointer for a provider conflict.
|
|
190
|
+
expect(errLines[0]).not.toContain('integration issue(s)');
|
|
191
|
+
});
|
|
119
192
|
});
|
|
@@ -1,6 +1,26 @@
|
|
|
1
1
|
// @generated by scripts/sync-api-types.mjs from the JSDoc in foundation/**/*.mjs.
|
|
2
2
|
// DO NOT EDIT — run `pnpm sync:api-types` to regenerate.
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* Resolve provider identity across loaded integrations, in precedence order.
|
|
6
|
+
*
|
|
7
|
+
* Artifact and document IDs are provider-scoped, so two packages cannot both
|
|
8
|
+
* contribute under one provider ID. The same package reached twice (an npm
|
|
9
|
+
* alias beside the package it aliases, with the same name and version) loads
|
|
10
|
+
* once. Any other later claimant, including the same package at another
|
|
11
|
+
* version, stays as an inert entry that carries the conflict. The package being
|
|
12
|
+
* authored claims its ID before precedence order is considered, because the
|
|
13
|
+
* source being edited is authoritative. The winner still contributes; Project
|
|
14
|
+
* issues, Doctor, and the per-command warning name the one set aside instead of
|
|
15
|
+
* dropping it without a word.
|
|
16
|
+
*
|
|
17
|
+
* The conflict pass of {@link resolveProviders}, for a list that is already
|
|
18
|
+
* assembled.
|
|
19
|
+
*
|
|
20
|
+
* @param {LoadedIntegration[]} integrations in precedence order
|
|
21
|
+
* @returns {LoadedIntegration[]}
|
|
22
|
+
*/
|
|
23
|
+
export function markProviderConflicts(integrations: LoadedIntegration[]): LoadedIntegration[];
|
|
4
24
|
/**
|
|
5
25
|
* Return the conventional root manifest paths present in `dir`, in
|
|
6
26
|
* load-precedence order. Unlike {@link resolveManifestPath} this never throws —
|
|
@@ -25,7 +45,7 @@ export function findManifestPaths(dir: string): string[];
|
|
|
25
45
|
* @param {string} file absolute manifest path
|
|
26
46
|
* @param {string} [label] used in error messages
|
|
27
47
|
* @param {{fresh?: boolean}} [options]
|
|
28
|
-
* @returns {Promise<{manifest: import('../../authoring/integration/type').AstryxIntegration, unknownKeys: string[], debug?: import('../../authoring/debug/type').DebugEventHandler, gapReport?: import('../../authoring/gap-report/type').GapReportHandler, gapReportError?: string, agentDocsError?: string}>}
|
|
48
|
+
* @returns {Promise<{manifest: import('../../authoring/integration/type').AstryxIntegration, unknownKeys: string[], debug?: import('../../authoring/debug/type').DebugEventHandler, gapReport?: import('../../authoring/gap-report/type').GapReportHandler, gapReportError?: string, discover?: import('../../authoring/discover/type').DiscoverSource, discoverError?: string, agentDocsError?: string}>}
|
|
29
49
|
*/
|
|
30
50
|
export function loadManifest(file: string, label?: string, { fresh }?: {
|
|
31
51
|
fresh?: boolean;
|
|
@@ -35,6 +55,8 @@ export function loadManifest(file: string, label?: string, { fresh }?: {
|
|
|
35
55
|
debug?: import("../../authoring/debug/type").DebugEventHandler;
|
|
36
56
|
gapReport?: import("../../authoring/gap-report/type").GapReportHandler;
|
|
37
57
|
gapReportError?: string;
|
|
58
|
+
discover?: import("../../authoring/discover/type").DiscoverSource;
|
|
59
|
+
discoverError?: string;
|
|
38
60
|
agentDocsError?: string;
|
|
39
61
|
}>;
|
|
40
62
|
/**
|
|
@@ -75,12 +97,15 @@ export function loadLocalIntegration(packageDir: string, { fresh }?: {
|
|
|
75
97
|
* Load configured integrations.
|
|
76
98
|
*
|
|
77
99
|
* @param {string[]} [specs] package names
|
|
78
|
-
* @param {{cwd?: string, fresh?: boolean}} [options]
|
|
100
|
+
* @param {{cwd?: string, fresh?: boolean, resolveProviders?: boolean}} [options]
|
|
101
|
+
* `resolveProviders: false` leaves provider identity to a caller that
|
|
102
|
+
* resolves it once over a larger set (Project.load)
|
|
79
103
|
* @returns {Promise<LoadedIntegration[]>}
|
|
80
104
|
*/
|
|
81
|
-
export function loadIntegrations(specs?: string[], { cwd, fresh }?: {
|
|
105
|
+
export function loadIntegrations(specs?: string[], { cwd, fresh, resolveProviders }?: {
|
|
82
106
|
cwd?: string;
|
|
83
107
|
fresh?: boolean;
|
|
108
|
+
resolveProviders?: boolean;
|
|
84
109
|
}): Promise<LoadedIntegration[]>;
|
|
85
110
|
/**
|
|
86
111
|
* A fully-resolved, loaded integration. Identity (`name`, `version`) comes from
|
|
@@ -89,6 +114,10 @@ export function loadIntegrations(specs?: string[], { cwd, fresh }?: {
|
|
|
89
114
|
* are internal bookkeeping used by Doctor integration validation and Project.
|
|
90
115
|
* @typedef {object} LoadedIntegration
|
|
91
116
|
* @property {string} name
|
|
117
|
+
* @property {import('../../authoring/identity/type').ProviderId} [providerId]
|
|
118
|
+
* normalized stable provider identity; absent only for a legacy unnamed local
|
|
119
|
+
* package. Unique among contributing integrations: a later claimant is kept
|
|
120
|
+
* inert with `__providerConflict` (see {@link markProviderConflicts})
|
|
92
121
|
* @property {string} [version]
|
|
93
122
|
* @property {string} [components]
|
|
94
123
|
* @property {string} [templates]
|
|
@@ -107,6 +136,10 @@ export function loadIntegrations(specs?: string[], { cwd, fresh }?: {
|
|
|
107
136
|
* @property {string} __manifestFile
|
|
108
137
|
* @property {string} [__loadError] set when the manifest failed to load/validate;
|
|
109
138
|
* such an integration contributes nothing and is surfaced via Project.issues()
|
|
139
|
+
* @property {{providerId: import('../../authoring/identity/type').ProviderId, claimedBy: string, message: string}} [__providerConflict]
|
|
140
|
+
* set on a package whose provider ID an earlier-loaded package already
|
|
141
|
+
* claims; it contributes nothing and is reported as a `duplicate_provider`
|
|
142
|
+
* warning
|
|
110
143
|
* @property {string[]} [__unknownKeys] manifest keys this CLI does not know —
|
|
111
144
|
* surfaced as a warning; the rest of the manifest still contributes
|
|
112
145
|
* @property {boolean} [__autolinked] loaded because the project declares the
|
|
@@ -123,6 +156,9 @@ export function loadIntegrations(specs?: string[], { cwd, fresh }?: {
|
|
|
123
156
|
* validated package-owned handler from the `gapReport` NAMED export.
|
|
124
157
|
* @property {string} [__gapReportError] isolated named-handler validation error.
|
|
125
158
|
* Named exports are not manifest keys — see {@link loadManifest}.
|
|
159
|
+
* @property {import('../../authoring/discover/type').DiscoverSource} [__discover]
|
|
160
|
+
* validated catalog source from the `discover` NAMED export.
|
|
161
|
+
* @property {string} [__discoverError] isolated discover-source validation error.
|
|
126
162
|
*/
|
|
127
163
|
/** Conventional manifest basenames, in load-precedence order. */
|
|
128
164
|
export const MANIFEST_BASENAMES: string[];
|
|
@@ -134,6 +170,12 @@ export const MANIFEST_BASENAMES: string[];
|
|
|
134
170
|
*/
|
|
135
171
|
export type LoadedIntegration = {
|
|
136
172
|
name: string;
|
|
173
|
+
/**
|
|
174
|
+
* normalized stable provider identity; absent only for a legacy unnamed local
|
|
175
|
+
* package. Unique among contributing integrations: a later claimant is kept
|
|
176
|
+
* inert with `__providerConflict` (see {@link markProviderConflicts})
|
|
177
|
+
*/
|
|
178
|
+
providerId?: import("../../authoring/identity/type").ProviderId | undefined;
|
|
137
179
|
version?: string | undefined;
|
|
138
180
|
components?: string | undefined;
|
|
139
181
|
templates?: string | undefined;
|
|
@@ -163,6 +205,16 @@ export type LoadedIntegration = {
|
|
|
163
205
|
* such an integration contributes nothing and is surfaced via Project.issues()
|
|
164
206
|
*/
|
|
165
207
|
__loadError?: string | undefined;
|
|
208
|
+
/**
|
|
209
|
+
* set on a package whose provider ID an earlier-loaded package already
|
|
210
|
+
* claims; it contributes nothing and is reported as a `duplicate_provider`
|
|
211
|
+
* warning
|
|
212
|
+
*/
|
|
213
|
+
__providerConflict?: {
|
|
214
|
+
providerId: import("../../authoring/identity/type").ProviderId;
|
|
215
|
+
claimedBy: string;
|
|
216
|
+
message: string;
|
|
217
|
+
} | undefined;
|
|
166
218
|
/**
|
|
167
219
|
* manifest keys this CLI does not know —
|
|
168
220
|
* surfaced as a warning; the rest of the manifest still contributes
|
|
@@ -198,4 +250,12 @@ export type LoadedIntegration = {
|
|
|
198
250
|
* Named exports are not manifest keys — see {@link loadManifest}.
|
|
199
251
|
*/
|
|
200
252
|
__gapReportError?: string | undefined;
|
|
253
|
+
/**
|
|
254
|
+
* validated catalog source from the `discover` NAMED export.
|
|
255
|
+
*/
|
|
256
|
+
__discover?: import("../../authoring/discover/type").DiscoverSource | undefined;
|
|
257
|
+
/**
|
|
258
|
+
* isolated discover-source validation error.
|
|
259
|
+
*/
|
|
260
|
+
__discoverError?: string | undefined;
|
|
201
261
|
};
|