@astryxdesign/cli 0.6.3 → 0.6.4-canary.06c8fa3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +194 -0
- package/README.md +121 -85
- package/api/blog/blog.doc.mjs +1 -0
- package/api/build/_adapter.d.mts +50 -0
- package/api/build/_adapter.mjs +60 -0
- package/api/build/build.doc.mjs +16 -9
- package/api/build/build.test.mjs +197 -8
- package/api/build/build.type.d.mts +91 -2
- package/api/build/build.type.mjs +52 -8
- package/api/build/help/help.d.mts +12 -5
- package/api/build/help/help.mjs +69 -6
- package/api/build/kit/kit.d.mts +4 -1
- package/api/build/kit/kit.mjs +165 -49
- package/api/build/kit/rank.d.mts +44 -0
- package/api/build/kit/rank.mjs +432 -0
- package/api/build/kit/rank.test.mjs +196 -0
- package/api/component/_adapter.d.mts +31 -12
- package/api/component/_adapter.mjs +79 -15
- package/api/component/component.d.mts +6 -3
- package/api/component/component.doc.mjs +36 -13
- package/api/component/component.mjs +339 -22
- package/api/component/component.test.mjs +38 -0
- package/api/component/component.type.d.mts +47 -11
- package/api/component/component.type.mjs +76 -24
- package/api/component/detail/blocks/blocks.d.mts +2 -1
- package/api/component/detail/blocks/blocks.mjs +4 -3
- package/api/component/list/list.d.mts +0 -5
- package/api/component/list/list.mjs +40 -11
- package/api/discover/_adapter.d.mts +114 -6
- package/api/discover/_adapter.mjs +372 -17
- package/api/discover/_adapter.test.mjs +215 -0
- package/api/discover/_catalog-view.d.mts +115 -0
- package/api/discover/_catalog-view.mjs +203 -0
- package/api/discover/_catalog-view.test.mjs +128 -0
- package/api/discover/detail/detail.d.mts +18 -6
- package/api/discover/detail/detail.mjs +67 -13
- package/api/discover/detail/detail.test.mjs +85 -0
- package/api/discover/detail/item/item.d.mts +26 -0
- package/api/discover/detail/item/item.mjs +78 -0
- package/api/discover/detail/item/item.test.mjs +73 -0
- package/api/discover/discover.d.mts +3 -9
- package/api/discover/discover.doc.mjs +62 -18
- package/api/discover/discover.mjs +220 -36
- package/api/discover/discover.test.mjs +11 -2
- package/api/discover/discover.type.d.mts +150 -11
- package/api/discover/discover.type.mjs +107 -17
- package/api/discover/list/list.d.mts +20 -6
- package/api/discover/list/list.mjs +45 -12
- package/api/discover/list/list.test.mjs +46 -0
- package/api/discover/search/search.d.mts +18 -16
- package/api/discover/search/search.mjs +102 -56
- package/api/discover/search/search.test.mjs +144 -10
- package/api/docs/_adapter.d.mts +272 -41
- package/api/docs/_adapter.mjs +985 -108
- package/api/docs/compiled-topics.test.mjs +78 -0
- package/api/docs/detail/detail.mjs +22 -63
- package/api/docs/detail/section/section.d.mts +1 -1
- package/api/docs/detail/section/section.mjs +54 -19
- package/api/docs/detail/section/section.test.mjs +50 -0
- package/api/docs/docs.d.mts +10 -3
- package/api/docs/docs.doc.mjs +55 -16
- package/api/docs/docs.mjs +53 -10
- package/api/docs/docs.test.mjs +166 -4
- package/api/docs/docs.type.d.mts +221 -5
- package/api/docs/docs.type.mjs +153 -11
- package/api/docs/index/index.d.mts +18 -0
- package/api/docs/index/index.mjs +40 -0
- package/api/docs/index/index.test.mjs +62 -0
- package/api/docs/integration-tree.test.mjs +555 -0
- package/api/docs/integrationDocs.test.mjs +114 -8
- package/api/docs/list/list.mjs +28 -12
- package/api/docs/node/node.d.mts +43 -0
- package/api/docs/node/node.mjs +192 -0
- package/api/docs/reference-blocks.test.mjs +406 -0
- package/api/doctor/doctor.d.mts +104 -1
- package/api/doctor/doctor.doc.mjs +1 -0
- package/api/doctor/doctor.mjs +635 -7
- package/api/doctor/doctor.test.mjs +732 -11
- package/api/gap-report/gap-report.doc.mjs +8 -4
- package/api/hook/_adapter.mjs +19 -5
- package/api/hook/hook.doc.mjs +1 -0
- package/api/hook/hook.type.d.mts +3 -3
- package/api/hook/hook.type.mjs +11 -11
- package/api/hook/list/list.d.mts +2 -2
- package/api/hook/list/list.mjs +69 -17
- package/api/index.d.mts +2 -3
- package/api/index.mjs +5 -4
- package/api/init/init.doc.mjs +6 -1
- package/api/init/init.test.mjs +41 -1
- package/api/init/remove/remove.mjs +1 -1
- package/api/init/run/run.mjs +20 -10
- package/api/integration/add-contribution.component-names.test.mjs +120 -0
- package/api/integration/add-contribution.d.mts +2 -1
- package/api/integration/add-contribution.mjs +130 -15
- package/api/integration/add-contribution.test.mjs +258 -7
- package/api/integration/add-helpers.d.mts +5 -2
- package/api/integration/add-helpers.mjs +36 -9
- package/api/integration/add-theme.mjs +34 -64
- package/api/integration/add-theme.test.mjs +105 -21
- package/api/integration/authoring-checks.mjs +138 -28
- package/api/integration/authoring-checks.test.mjs +179 -7
- package/api/integration/authoring-checks.type.mjs +6 -1
- package/api/integration/integration-authoring.type.d.mts +3 -1
- package/api/integration/integration-authoring.type.mjs +2 -0
- package/api/integration/integration-block-exports.test.mjs +10 -6
- package/api/integration/integrationAdd.doc.mjs +14 -4
- package/api/integration/integrationAddAgentDoc.doc.mjs +1 -0
- package/api/integration/integrationAddCodemod.doc.mjs +1 -0
- package/api/integration/integrationAddComponent.doc.mjs +2 -1
- package/api/integration/integrationAddDoc.doc.mjs +8 -1
- package/api/integration/integrationAddTemplate.doc.mjs +1 -0
- package/api/integration/integrationAddTheme.doc.mjs +6 -5
- package/api/integration/integrationComponentConflicts.doc.mjs +1 -0
- package/api/integration/integrationDocConflicts.doc.mjs +2 -1
- package/api/integration/integrationPackCheck.doc.mjs +2 -1
- package/api/integration/integrationTemplateConflicts.doc.d.mts +3 -0
- package/api/integration/integrationTemplateConflicts.doc.mjs +4 -0
- package/api/integration/pack-check.lifecycle-output.test.mjs +105 -0
- package/api/integration/pack-check.mjs +111 -10
- package/api/integration/pack-check.test.mjs +387 -47
- package/api/integration/pack-check.type.d.mts +26 -2
- package/api/integration/pack-check.type.mjs +14 -1
- package/api/integration/summarizeIssues.doc.mjs +1 -0
- package/api/integration/template-conflict-compatibility.test.mjs +73 -0
- package/api/integration/validate-integration-fixes.test.mjs +1389 -0
- package/api/integration/validate-integration.mjs +52 -102
- package/api/integration/validate-integration.test.mjs +179 -26
- package/api/integration/validate-unread-theme-folders.test.mjs +110 -0
- package/api/integration/validateIntegration.doc.mjs +3 -2
- package/api/json/assertResponse.doc.mjs +1 -0
- package/api/json/envelope-types.test.mjs +76 -0
- package/api/json/index.ts +2 -1
- package/api/json/isError.doc.mjs +1 -0
- package/api/json/parseResponse.doc.mjs +3 -2
- package/api/search/search-return-type.test.mjs +54 -0
- package/api/search/search.d.mts +62 -11
- package/api/search/search.doc.mjs +8 -2
- package/api/search/search.mjs +471 -83
- package/api/search/search.test.mjs +142 -1
- package/api/search/search.type.d.mts +15 -3
- package/api/search/search.type.mjs +5 -2
- package/api/swizzle/copy/copy.mjs +28 -11
- package/api/swizzle/swizzle.doc.mjs +2 -1
- package/api/swizzle/swizzle.type.d.mts +2 -2
- package/api/swizzle/swizzle.type.mjs +2 -2
- package/api/template/copy/copy.mjs +17 -23
- package/api/template/copy/copy.test.mjs +17 -0
- package/api/template/list/list.mjs +1 -0
- package/api/template/table-floating-bulk-actions.test.mjs +66 -0
- package/api/template/template-integration.test.mjs +1008 -3
- package/api/template/template-suffix.test.mjs +41 -21
- package/api/template/template.d.mts +1 -1
- package/api/template/template.doc.mjs +30 -8
- package/api/template/template.mjs +46 -9
- package/api/template/template.type.d.mts +12 -14
- package/api/template/template.type.mjs +15 -14
- package/api/theme/_adapter.d.mts +2 -3
- package/api/theme/_adapter.mjs +4 -5
- package/api/theme/add/add.binary.test.mjs +84 -0
- package/api/theme/add/add.mjs +31 -22
- package/api/theme/add/add.rollback.test.mjs +158 -0
- package/api/theme/add/add.staging.test.mjs +83 -0
- package/api/theme/add/add.test.mjs +14 -1
- package/api/theme/build/build.family.test.mjs +7 -12
- package/api/theme/build/build.mjs +140 -59
- package/api/theme/build/build.public-component-vars.test.mjs +1 -1
- package/api/theme/build/build.receipt-doc.test.mjs +111 -0
- package/api/theme/build/build.rollback.test.mjs +148 -0
- package/api/theme/build/build.test.mjs +127 -0
- package/api/theme/build/font-warning.mjs +3 -3
- package/api/theme/build/font-warning.test.mjs +5 -2
- package/api/theme/generateTonalPalette.doc.mjs +1 -0
- package/api/theme/integration-themes.test.mjs +39 -28
- package/api/theme/list/list.test.mjs +19 -20
- package/api/theme/listThemes.doc.mjs +6 -5
- package/api/theme/palette/generate/generate.mjs +8 -3
- package/api/theme/palette/generate/generate.test.mjs +96 -0
- package/api/theme/palette/generate/generator.d.mts +10 -13
- package/api/theme/palette/generate/generator.mjs +15 -4
- package/api/theme/palette/generate/generator.test.mjs +10 -0
- package/api/theme/template/template.mjs +11 -2
- package/api/theme/template/template.test.mjs +20 -0
- package/api/theme/theme.type.d.mts +170 -11
- package/api/theme/theme.type.mjs +94 -27
- package/api/theme/themeAdd.doc.mjs +4 -3
- package/api/theme/themeBuild.doc.mjs +8 -4
- package/api/theme/themeList.doc.mjs +6 -3
- package/api/theme/themeListAvailable.doc.mjs +5 -3
- package/api/theme/themePaletteGenerate.doc.mjs +1 -0
- package/api/theme/themeTargets.doc.mjs +1 -0
- package/api/theme/themeTemplate.doc.mjs +6 -2
- package/api/upgrade/_adapter.d.mts +32 -5
- package/api/upgrade/_adapter.mjs +139 -22
- package/api/upgrade/list/list.mjs +2 -1
- package/api/upgrade/list/list.test.mjs +73 -0
- package/api/upgrade/project-context.test.mjs +272 -0
- package/api/upgrade/provider-agreement.test.mjs +152 -0
- package/api/upgrade/run/files-changed.test.mjs +111 -0
- package/api/upgrade/run/run.mjs +359 -60
- package/api/upgrade/status/status.mjs +2 -2
- package/api/upgrade/upgrade.doc.mjs +12 -5
- package/api/upgrade/upgrade.type.d.mts +43 -5
- package/api/upgrade/upgrade.type.mjs +29 -13
- package/assets/codemods/__tests__/registry.test.mjs +1 -0
- package/assets/codemods/__tests__/runner.test.mjs +332 -8
- package/assets/codemods/file-count.test.mjs +163 -0
- package/assets/codemods/integration-discovery.mjs +48 -4
- package/assets/codemods/integration-discovery.test.mjs +73 -0
- package/assets/codemods/integration-runner.mjs +59 -7
- package/assets/codemods/integration-runner.protection.test.mjs +153 -0
- package/assets/codemods/registry.mjs +1 -0
- package/assets/codemods/run-codemod.mjs +177 -34
- package/assets/codemods/runner.mjs +353 -104
- package/assets/codemods/term-log.mjs +32 -8
- package/assets/codemods/term-log.test.mjs +19 -1
- package/assets/codemods/transform-prop.mjs +109 -0
- package/assets/codemods/transform-prop.test.mjs +95 -0
- package/assets/codemods/transforms/v0.0.14/__tests__/rename-status-variants.test.mjs +86 -165
- package/assets/codemods/transforms/v0.0.14/rename-status-variants.mjs +72 -210
- package/assets/codemods/transforms/v0.1.8/__tests__/rename-avatar-size-scale.test.mjs +83 -115
- package/assets/codemods/transforms/v0.1.8/rename-avatar-size-scale.mjs +57 -186
- package/assets/codemods/transforms/v0.3.0/__tests__/unwrap-authoring-factories.test.mjs +27 -5
- package/assets/codemods/transforms/v0.3.0/unwrap-authoring-factories.mjs +20 -5
- package/assets/codemods/transforms/v0.6.0/__tests__/next-codemods.test.mjs +47 -0
- package/assets/codemods/transforms/v0.6.0/rename-resizable-pixel-bounds.mjs +57 -10
- package/assets/codemods/transforms/v0.6.4/__tests__/migrate-native-picker-to-presentation.test.mjs +63 -0
- package/assets/codemods/transforms/v0.6.4/__tests__/migrate-theme-catalog-to-descriptors.test.mjs +220 -0
- package/assets/codemods/transforms/v0.6.4/index.mjs +31 -0
- package/assets/codemods/transforms/v0.6.4/migrate-native-picker-to-presentation.mjs +148 -0
- package/assets/codemods/transforms/v0.6.4/migrate-theme-catalog-to-descriptors.mjs +141 -0
- package/assets/docs/README.md +9 -0
- package/assets/docs/authoring.doc.mjs +14 -0
- package/assets/docs/getting-started.doc.mjs +2 -2
- package/assets/docs/internationalization.doc.mjs +7 -5
- package/assets/docs/layout.doc.dense.mjs +2 -2
- package/assets/docs/layout.doc.mjs +1 -1
- package/assets/docs/principles.doc.mjs +6 -6
- package/assets/docs/styling-libraries.doc.mjs +4 -4
- package/assets/docs/styling.doc.mjs +4 -4
- package/assets/docs/theme.doc.mjs +5 -5
- package/assets/docs/tokens.doc.mjs +1 -1
- package/assets/docs/tree/api.doc.mjs +30 -0
- package/assets/docs/tree/cli.doc.mjs +23 -0
- package/assets/docs/tree/commands.doc.mjs +25 -0
- package/assets/docs/tree/component-lookups.doc.mjs +149 -0
- package/assets/docs/{cli-integrations.doc.mjs → tree/integrations.doc.mjs} +144 -26
- package/assets/docs/tree/integrations.test.mjs +62 -0
- package/assets/docs/tree/writing-docs.doc.mjs +286 -0
- package/assets/docs/working-with-ai.doc.mjs +4 -4
- package/assets/templates/blocks/components/CheckboxList/CheckboxListSelectAllPattern.doc.mjs +1 -1
- package/assets/templates/blocks/components/CheckboxList/CheckboxListSelectAllPattern.tsx +1 -3
- package/assets/templates/blocks/components/DateInput/DateInputDateRange.tsx +1 -1
- package/assets/templates/blocks/components/InternationalizationProvider/InternationalizationProvider01ShippedLocale.tsx +1 -1
- package/assets/templates/blocks/components/Item/ItemDocumentTabs.doc.mjs +14 -0
- package/assets/templates/blocks/components/Item/ItemDocumentTabs.tsx +100 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaInlineRail.doc.mjs +14 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaInlineRail.tsx +61 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaOverscrollChaining.doc.mjs +14 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaOverscrollChaining.tsx +126 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaShowcase.doc.mjs +15 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaShowcase.tsx +86 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyGroupHeaders.doc.mjs +14 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyGroupHeaders.tsx +99 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyPassthrough.doc.mjs +14 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyPassthrough.tsx +122 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaTwoAxisBoard.doc.mjs +14 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaTwoAxisBoard.tsx +95 -0
- package/assets/templates/blocks/components/Table/TableBulkActionsTable.doc.mjs +14 -0
- package/assets/templates/blocks/components/Table/TableBulkActionsTable.tsx +71 -0
- package/assets/templates/blocks/components/Table/TableFloatingBulkActionsTable.doc.mjs +19 -0
- package/assets/templates/blocks/components/Table/TableFloatingBulkActionsTable.tsx +139 -0
- package/assets/templates/blocks/components/TimeInput/TimeInputConstrained.tsx +1 -0
- package/assets/templates/blocks/components/Timer/TimerFormats.doc.mjs +14 -0
- package/assets/templates/blocks/components/Timer/TimerFormats.tsx +34 -0
- package/assets/templates/blocks/components/Timer/TimerInline.doc.mjs +14 -0
- package/assets/templates/blocks/components/Timer/TimerInline.tsx +14 -0
- package/assets/templates/blocks/components/Timer/TimerShowcase.doc.mjs +13 -0
- package/assets/templates/blocks/components/Timer/TimerShowcase.tsx +47 -0
- package/assets/templates/blocks/components/Timer/TimerTypography.doc.mjs +14 -0
- package/assets/templates/blocks/components/Timer/TimerTypography.tsx +31 -0
- package/assets/templates/blocks/components/Toolbar/ToolbarTableFilter.doc.mjs +19 -3
- package/assets/templates/blocks/components/Toolbar/ToolbarTableFilter.tsx +383 -65
- package/assets/templates/pages/table-tree/page.tsx +1704 -0
- package/assets/templates/pages/table-tree/template.doc.mjs +12 -0
- package/assets/templates/themes/butter/butterTheme.doc.mjs +11 -0
- package/assets/templates/themes/chocolate/chocolateTheme.doc.mjs +11 -0
- package/assets/templates/themes/gothic/gothicTheme.doc.mjs +11 -0
- package/assets/templates/themes/matcha/matchaTheme.doc.mjs +11 -0
- package/assets/templates/themes/neutral/neutralTheme.doc.mjs +11 -0
- package/assets/templates/themes/stone/stoneTheme.doc.mjs +11 -0
- package/assets/templates/themes/y2k/y2kTheme.doc.mjs +11 -0
- package/authoring/_shared/contract.ts +22 -0
- package/authoring/codemod/codemod.doc.mjs +7 -2
- package/authoring/codemod/parse.d.mts +8 -8
- package/authoring/codemod/parse.mjs +8 -6
- package/authoring/codemod/type.ts +12 -0
- package/authoring/config/config.doc.mjs +11 -3
- package/authoring/config/debug-composition.test.mjs +92 -0
- package/authoring/config/parse.d.mts +15 -13
- package/authoring/config/parse.mjs +27 -8
- package/authoring/config/parse.test.mjs +8 -0
- package/authoring/config/type.ts +31 -8
- package/authoring/debug/debug.doc.d.mts +11 -0
- package/authoring/debug/debug.doc.mjs +182 -0
- package/authoring/debug/parse.d.mts +8 -8
- package/authoring/debug/parse.mjs +3 -3
- package/authoring/discover/discover.doc.d.mts +13 -0
- package/authoring/discover/discover.doc.mjs +138 -0
- package/authoring/discover/parse.d.mts +24 -0
- package/authoring/discover/parse.mjs +128 -0
- package/authoring/discover/parse.test.mjs +124 -0
- package/authoring/discover/type.ts +87 -0
- package/authoring/doctypes/_schema.d.mts +790 -23
- package/authoring/doctypes/_schema.mjs +543 -39
- package/authoring/doctypes/base/graph-fields.doc.d.mts +9 -0
- package/authoring/doctypes/base/graph-fields.doc.mjs +64 -0
- package/authoring/doctypes/base/type.ts +41 -0
- package/authoring/doctypes/command/command.doc.mjs +5 -4
- package/authoring/doctypes/command/parse.d.mts +2 -2
- package/authoring/doctypes/command/parse.mjs +1 -1
- package/authoring/doctypes/command/type.ts +6 -5
- package/authoring/doctypes/component/component.doc.mjs +6 -3
- package/authoring/doctypes/component/parse.d.mts +2 -2
- package/authoring/doctypes/component/parse.mjs +1 -1
- package/authoring/doctypes/component/type.ts +6 -5
- package/authoring/doctypes/doctypes-new.test.mjs +48 -6
- package/authoring/doctypes/enum/enum.doc.mjs +1 -1
- package/authoring/doctypes/enum/parse.d.mts +2 -2
- package/authoring/doctypes/enum/parse.mjs +1 -1
- package/authoring/doctypes/enum/type.ts +4 -2
- package/authoring/doctypes/function/function.doc.mjs +7 -2
- package/authoring/doctypes/function/parse.d.mts +2 -2
- package/authoring/doctypes/function/parse.mjs +1 -1
- package/authoring/doctypes/function/type.ts +9 -4
- package/authoring/doctypes/hook/hook.doc.mjs +4 -0
- package/authoring/doctypes/hook/parse.d.mts +2 -2
- package/authoring/doctypes/hook/parse.mjs +1 -1
- package/authoring/doctypes/hook/type.ts +5 -4
- package/authoring/doctypes/legacy.d.mts +8 -6
- package/authoring/doctypes/legacy.mjs +5 -4
- package/authoring/doctypes/load-contract.test.mjs +233 -0
- package/authoring/doctypes/namespace/namespace.doc.d.mts +9 -0
- package/authoring/doctypes/namespace/namespace.doc.mjs +128 -0
- package/authoring/doctypes/namespace/parse.d.mts +12 -0
- package/authoring/doctypes/namespace/parse.mjs +25 -0
- package/authoring/doctypes/namespace/parse.test.mjs +163 -0
- package/authoring/doctypes/namespace/type.ts +74 -0
- package/authoring/doctypes/parse.d.mts +22 -18
- package/authoring/doctypes/parse.mjs +22 -11
- package/authoring/doctypes/parse.test.mjs +77 -3
- package/authoring/doctypes/reference/parse.d.mts +2 -2
- package/authoring/doctypes/reference/parse.mjs +8 -5
- package/authoring/doctypes/reference/reference.doc.mjs +48 -6
- package/authoring/doctypes/reference/type.ts +70 -7
- package/authoring/doctypes/schema/parse.d.mts +2 -2
- package/authoring/doctypes/schema/parse.mjs +1 -1
- package/authoring/doctypes/schema/schema.doc.mjs +1 -1
- package/authoring/doctypes/schema/type.ts +4 -4
- package/authoring/doctypes/template/parse.d.mts +94 -1
- package/authoring/doctypes/template/parse.mjs +40 -2
- package/authoring/doctypes/template/parse.test.mjs +26 -2
- package/authoring/doctypes/template/template.doc.mjs +13 -3
- package/authoring/doctypes/template/type.ts +13 -2
- package/authoring/doctypes/theme/parse.d.mts +35 -0
- package/authoring/doctypes/theme/parse.mjs +76 -0
- package/authoring/doctypes/theme/theme.doc.d.mts +9 -0
- package/authoring/doctypes/theme/theme.doc.mjs +79 -0
- package/authoring/doctypes/theme/type.ts +42 -0
- package/authoring/doctypes/types.ts +12 -10
- package/authoring/gap-report/gap-report.doc.d.mts +12 -0
- package/authoring/gap-report/gap-report.doc.mjs +183 -0
- package/authoring/gap-report/parse.d.mts +10 -10
- package/authoring/gap-report/parse.mjs +6 -6
- package/authoring/gap-report/type.ts +1 -1
- package/authoring/identity/identity.doc.d.mts +9 -0
- package/authoring/identity/identity.doc.mjs +61 -0
- package/authoring/identity/type.ts +132 -0
- package/authoring/index.d.mts +3 -0
- package/authoring/index.d.ts +62 -17
- package/authoring/index.mjs +4 -1
- package/authoring/integration/integration.doc.mjs +15 -8
- package/authoring/integration/parse.d.mts +2 -2
- package/authoring/integration/parse.mjs +1 -1
- package/authoring/integration/parse.test.mjs +10 -1
- package/authoring/integration/schema.d.mts +6 -4
- package/authoring/integration/schema.mjs +9 -3
- package/authoring/integration/type.ts +19 -8
- package/authoring/shadcn/receipt.d.mts +6 -6
- package/clients/cli/__tests__/cliManifest.test.ts +27 -29
- package/clients/cli/command-load-failure.test.mjs +83 -0
- package/clients/cli/command-result-coverage.test.mjs +7 -7
- package/clients/cli/commands/blog.doc.mjs +1 -1
- package/clients/cli/commands/blog.mjs +23 -8
- package/clients/cli/commands/blog.test.mjs +42 -1
- package/clients/cli/commands/build-theme.adaptations.test.mjs +100 -1
- package/clients/cli/commands/build-theme.ascii-output.test.mjs +161 -0
- package/clients/cli/commands/build-theme.flag-docs.test.mjs +110 -0
- package/clients/cli/commands/build-theme.mjs +16 -50
- package/clients/cli/commands/build-theme.path-safety.test.mjs +86 -1
- package/clients/cli/commands/build-theme.variants.test.mjs +76 -0
- package/clients/cli/commands/build.doc.mjs +16 -8
- package/clients/cli/commands/build.exit-codes-doc.test.mjs +50 -0
- package/clients/cli/commands/build.mjs +137 -114
- package/clients/cli/commands/build.playbook.test.mjs +75 -0
- package/clients/cli/commands/build.text-fields.test.mjs +81 -0
- package/clients/cli/commands/component/index.mjs +153 -61
- package/clients/cli/commands/component-batch.test.mjs +341 -0
- package/clients/cli/commands/component-ownership.test.mjs +92 -3
- package/clients/cli/commands/component-package.test.mjs +46 -0
- package/clients/cli/commands/component-resolution.test.mjs +21 -0
- package/clients/cli/commands/component.doc.mjs +24 -7
- package/clients/cli/commands/component.test.mjs +19 -0
- package/clients/cli/commands/debug-result-summary.test.mjs +2 -2
- package/clients/cli/commands/detail-levels.test.mjs +2 -2
- package/clients/cli/commands/discover.broken-integration.test.mjs +52 -5
- package/clients/cli/commands/discover.components-flag.test.mjs +97 -0
- package/clients/cli/commands/discover.doc.mjs +55 -9
- package/clients/cli/commands/discover.mjs +393 -118
- package/clients/cli/commands/discover.sources.test.mjs +267 -0
- package/clients/cli/commands/discover.text-projection.test.mjs +103 -0
- package/clients/cli/commands/docs.doc.mjs +28 -6
- package/clients/cli/commands/docs.mjs +240 -26
- package/clients/cli/commands/docs.test.mjs +222 -1
- package/clients/cli/commands/doctor-integration-components.doc.mjs +1 -1
- package/clients/cli/commands/doctor-integration-docs.doc.mjs +3 -3
- package/clients/cli/commands/doctor-integration-templates.doc.mjs +15 -8
- package/clients/cli/commands/doctor-integration-validate.doc.mjs +1 -1
- package/clients/cli/commands/doctor-integration.doc.mjs +1 -1
- package/clients/cli/commands/doctor-integration.package-json.test.mjs +53 -0
- package/clients/cli/commands/doctor-integration.test.mjs +90 -8
- package/clients/cli/commands/doctor.doc.mjs +1 -1
- package/clients/cli/commands/doctor.mjs +59 -32
- package/clients/cli/commands/doctor.test.mjs +42 -0
- package/clients/cli/commands/gap-report.doc.mjs +17 -6
- package/clients/cli/commands/gap-report.test.mjs +72 -0
- package/clients/cli/commands/hook/index.mjs +7 -17
- package/clients/cli/commands/hook.doc.mjs +1 -1
- package/clients/cli/commands/hook.text-projection.test.mjs +45 -0
- package/clients/cli/commands/init.doc.mjs +20 -9
- package/clients/cli/commands/init.flag-help.test.mjs +153 -0
- package/clients/cli/commands/integration-add.controls.test.mjs +132 -0
- package/clients/cli/commands/integration-add.doc.mjs +32 -6
- package/clients/cli/commands/integration-authoring.test.mjs +13 -9
- package/clients/cli/commands/integration-pack.doc.mjs +1 -1
- package/clients/cli/commands/integration-real-world.test.mjs +3 -9
- package/clients/cli/commands/integration.doc.mjs +1 -1
- package/clients/cli/commands/integration.mjs +1 -0
- package/clients/cli/commands/interactive-guard.test.mjs +101 -24
- package/clients/cli/commands/json-contract.test.mjs +33 -0
- package/clients/cli/commands/manifest.doc.mjs +1 -1
- package/clients/cli/commands/no-prompt-wording.test.mjs +94 -0
- package/clients/cli/commands/search.doc.mjs +7 -4
- package/clients/cli/commands/search.mjs +28 -9
- package/clients/cli/commands/search.test.mjs +75 -0
- package/clients/cli/commands/setup-nudge.test.mjs +6 -0
- package/clients/cli/commands/swizzle.doc.mjs +3 -2
- package/clients/cli/commands/swizzle.path-safety.test.mjs +42 -0
- package/clients/cli/commands/template.doc.mjs +52 -13
- package/clients/cli/commands/template.flag-help.test.mjs +117 -0
- package/clients/cli/commands/template.mjs +4 -91
- package/clients/cli/commands/template.path-help.test.mjs +40 -0
- package/clients/cli/commands/text-json-parity.test.mjs +702 -0
- package/clients/cli/commands/theme-add.doc.mjs +4 -3
- package/clients/cli/commands/theme-build.doc.mjs +8 -7
- package/clients/cli/commands/theme-list.doc.mjs +2 -2
- package/clients/cli/commands/theme-palette-generate.doc.mjs +9 -5
- package/clients/cli/commands/theme-palette-generate.test.mjs +19 -0
- package/clients/cli/commands/theme-palette.doc.mjs +1 -1
- package/clients/cli/commands/theme-targets.behavior.test.mjs +4 -3
- package/clients/cli/commands/theme-targets.doc.mjs +1 -1
- package/clients/cli/commands/theme-template.behavior.test.mjs +12 -0
- package/clients/cli/commands/theme-template.doc.mjs +2 -2
- package/clients/cli/commands/theme.doc.mjs +1 -1
- package/clients/cli/commands/upgrade.ascii-output.test.mjs +87 -0
- package/clients/cli/commands/upgrade.doc.mjs +22 -10
- package/clients/cli/commands/upgrade.file-protection.test.mjs +228 -0
- package/clients/cli/commands/upgrade.flag-help.test.mjs +188 -0
- package/clients/cli/commands/upgrade.hook-output.test.mjs +88 -0
- package/clients/cli/commands/upgrade.mjs +29 -7
- package/clients/cli/formatters/index.mjs +164 -1
- package/clients/cli/formatters/index.test.mjs +97 -0
- package/clients/cli/index.mjs +21 -34
- package/clients/cli/latest-version-env.test.mjs +50 -0
- package/clients/cli/lib/cli-error.test.mjs +7 -0
- package/clients/cli/lib/component-format.mjs +9 -9
- package/clients/cli/lib/component-format.test.mjs +1 -1
- package/clients/cli/lib/define-command.mjs +32 -6
- package/clients/cli/lib/doc-text-ascii.test.mjs +82 -0
- package/clients/cli/lib/exit-codes.test.mjs +90 -0
- package/clients/cli/lib/hook-format.mjs +19 -10
- package/clients/cli/lib/json-shim.mjs +62 -16
- package/clients/cli/lib/json-shim.test.mjs +69 -0
- package/clients/cli/lib/manifest.d.ts +2 -0
- package/clients/cli/lib/manifest.mjs +39 -10
- package/clients/cli/lib/manifest.test.mjs +22 -2
- package/clients/cli/lib/parse-error-format.test.mjs +81 -0
- package/foundation/agent-docs/agent-docs.d.mts +7 -2
- package/foundation/agent-docs/agent-docs.mjs +82 -12
- package/foundation/agent-docs/agent-docs.path-safety.test.mjs +266 -4
- package/foundation/agent-docs/agent-docs.test.mjs +19 -1
- package/foundation/config/integration-debug.test.mjs +28 -3
- package/foundation/config/project-themes.test.mjs +11 -19
- package/foundation/config/project.d.mts +20 -11
- package/foundation/config/project.mjs +263 -91
- package/foundation/config/project.test.mjs +270 -21
- package/foundation/discovery/authoring-self-docs.d.mts +87 -0
- package/foundation/discovery/authoring-self-docs.mjs +237 -0
- package/foundation/discovery/authoring-self-docs.test.mjs +170 -0
- package/foundation/discovery/authoring-surface.d.mts +74 -0
- package/foundation/discovery/authoring-surface.mjs +525 -0
- package/foundation/discovery/authoring-surface.test.mjs +392 -0
- package/foundation/discovery/cli-self-docs.d.mts +119 -0
- package/foundation/discovery/cli-self-docs.mjs +490 -0
- package/foundation/discovery/cli-self-docs.test.mjs +375 -0
- package/foundation/discovery/component-discovery.d.mts +39 -1
- package/foundation/discovery/component-discovery.mjs +50 -1
- package/foundation/discovery/component-loader.d.mts +35 -38
- package/foundation/discovery/component-loader.mjs +53 -222
- package/foundation/discovery/docs-discovery.d.mts +119 -11
- package/foundation/discovery/docs-discovery.mjs +423 -108
- package/foundation/discovery/docs-discovery.test.mjs +365 -20
- package/foundation/discovery/docs-output-budget.d.mts +28 -0
- package/foundation/discovery/docs-output-budget.mjs +50 -0
- package/foundation/discovery/docs-section-key.d.mts +116 -0
- package/foundation/discovery/docs-section-key.mjs +322 -0
- package/foundation/discovery/docs-section-key.test.mjs +246 -0
- package/foundation/discovery/template-adapter.d.mts +113 -11
- package/foundation/discovery/template-adapter.fixture-refs.test.mjs +248 -0
- package/foundation/discovery/template-adapter.integration-isolation.test.mjs +94 -0
- package/foundation/discovery/template-adapter.mjs +775 -84
- package/foundation/discovery/template-adapter.test.mjs +57 -0
- package/foundation/discovery/template-conflict-release.d.mts +13 -0
- package/foundation/discovery/template-conflict-release.mjs +40 -0
- package/foundation/discovery/template-conflict-release.test.mjs +40 -0
- package/foundation/discovery/theme-discovery.d.mts +67 -7
- package/foundation/discovery/theme-discovery.mjs +916 -186
- package/foundation/discovery/theme-discovery.test.mjs +613 -219
- package/foundation/discovery/theming-targets.test.mjs +4 -0
- package/foundation/doc-compiler/bundle.d.mts +47 -0
- package/foundation/doc-compiler/bundle.mjs +278 -0
- package/foundation/doc-compiler/bundle.test.mjs +266 -0
- package/foundation/doc-compiler/compile.d.mts +343 -0
- package/foundation/doc-compiler/compile.mjs +558 -0
- package/foundation/doc-compiler/diagnostics.d.mts +126 -0
- package/foundation/doc-compiler/diagnostics.mjs +305 -0
- package/foundation/doc-compiler/doc-compiler.test.mjs +714 -0
- package/foundation/doc-compiler/doc-loads.test.mjs +1630 -0
- package/foundation/doc-compiler/import.d.mts +24 -0
- package/foundation/doc-compiler/import.mjs +59 -0
- package/foundation/doc-compiler/inputs.d.mts +102 -0
- package/foundation/doc-compiler/inputs.mjs +291 -0
- package/foundation/doc-compiler/inputs.test.mjs +299 -0
- package/foundation/doc-compiler/ir.d.mts +22 -0
- package/foundation/doc-compiler/ir.mjs +471 -0
- package/foundation/doc-compiler/lenses.d.mts +36 -0
- package/foundation/doc-compiler/lenses.mjs +173 -0
- package/foundation/doc-compiler/links.d.mts +162 -0
- package/foundation/doc-compiler/links.mjs +294 -0
- package/foundation/doc-compiler/links.test.mjs +192 -0
- package/foundation/doc-compiler/lower-doc.test.mjs +495 -0
- package/foundation/doc-compiler/overlays.d.mts +37 -0
- package/foundation/doc-compiler/overlays.mjs +206 -0
- package/foundation/doc-compiler/parse-readable.d.mts +9 -0
- package/foundation/doc-compiler/parse-readable.mjs +29 -0
- package/foundation/doc-compiler/read.d.mts +127 -0
- package/foundation/doc-compiler/read.mjs +325 -0
- package/foundation/doc-compiler/read.test.mjs +313 -0
- package/foundation/doc-compiler/source.d.mts +33 -0
- package/foundation/doc-compiler/source.mjs +128 -0
- package/foundation/doc-compiler/tree.d.mts +288 -0
- package/foundation/doc-compiler/tree.mjs +876 -0
- package/foundation/doc-compiler/tree.test.mjs +606 -0
- package/foundation/fs/file-protection.d.mts +33 -0
- package/foundation/fs/file-protection.mjs +825 -0
- package/foundation/fs/file-protection.test.mjs +250 -0
- package/foundation/fs/module-loader.d.mts +1 -0
- package/foundation/fs/module-loader.mjs +50 -1
- package/foundation/fs/module-loader.stdout.test.mjs +332 -0
- package/foundation/fs/path-safety.d.mts +3 -2
- package/foundation/fs/path-safety.mjs +49 -19
- package/foundation/fs/path-safety.test.mjs +50 -0
- package/foundation/fs/publish-file-hardlink-unavailable.test.mjs +129 -94
- package/foundation/identity/provider-identity.d.mts +90 -0
- package/foundation/identity/provider-identity.mjs +320 -0
- package/foundation/identity/provider-identity.test.mjs +254 -0
- package/foundation/identity/providers.d.mts +7 -0
- package/foundation/identity/providers.mjs +16 -0
- package/foundation/integrations/autolink.d.mts +58 -1
- package/foundation/integrations/autolink.mjs +143 -45
- package/foundation/integrations/autolink.test.mjs +1 -1
- package/foundation/integrations/cli-requirement.d.mts +45 -0
- package/foundation/integrations/cli-requirement.mjs +154 -0
- package/foundation/integrations/cli-requirement.test.mjs +84 -0
- package/foundation/integrations/contribution-fixes.d.mts +145 -0
- package/foundation/integrations/contribution-fixes.mjs +1284 -0
- package/foundation/integrations/contribution-inventory.d.mts +3 -2
- package/foundation/integrations/contribution-inventory.mjs +27 -24
- package/foundation/integrations/contribution-inventory.test.mjs +86 -27
- package/foundation/integrations/integration-warnings.d.mts +9 -2
- package/foundation/integrations/integration-warnings.mjs +52 -21
- package/foundation/integrations/integration-warnings.test.mjs +74 -1
- package/foundation/integrations/integrations.d.mts +63 -3
- package/foundation/integrations/integrations.mjs +122 -9
- package/foundation/integrations/integrations.test.mjs +415 -1
- package/foundation/integrations/provider-conflicts.test.mjs +125 -0
- package/foundation/integrations/provider-ledger.test.mjs +275 -0
- package/foundation/integrations/provider-resolution.d.mts +152 -0
- package/foundation/integrations/provider-resolution.mjs +576 -0
- package/foundation/integrations/provider-resolution.test.mjs +369 -0
- package/foundation/integrations/theme-descriptor.d.mts +8 -0
- package/foundation/integrations/theme-descriptor.mjs +44 -0
- package/foundation/integrations/validate-contributions.d.mts +2 -0
- package/foundation/integrations/validate-contributions.mjs +131 -29
- package/foundation/response/base.d.ts +8 -4
- package/foundation/response/batch.type.d.mts +33 -0
- package/foundation/response/batch.type.mjs +34 -0
- package/foundation/response/error-codes.d.mts +3 -1
- package/foundation/response/error-codes.d.ts +2 -0
- package/foundation/response/error-codes.doc.mjs +13 -4
- package/foundation/response/error-codes.mjs +8 -2
- package/foundation/response/error-codes.test.mjs +137 -10
- package/foundation/response/json-contract.test.mjs +57 -17
- package/foundation/response/json.d.mts +4 -2
- package/foundation/response/json.mjs +8 -10
- package/foundation/response/response-types.doc.d.mts +5 -1
- package/foundation/response/response-types.doc.mjs +46 -38
- package/foundation/response/response-types.doc.test.mjs +181 -0
- package/foundation/response/response.doc.mjs +1 -1
- package/foundation/text/string-utils.d.mts +8 -0
- package/foundation/text/string-utils.mjs +40 -10
- package/foundation/xle/browser.d.mts +3 -3
- package/foundation/xle/browser.mjs +3 -3
- package/foundation/xle/expand.d.mts +2 -0
- package/foundation/xle/expand.mjs +6 -5
- package/foundation/xle/expand.test.mjs +54 -0
- package/foundation/xle/parse.mjs +1 -1
- package/foundation/xle/print.mjs +2 -2
- package/foundation/xle/splice.mjs +1 -1
- package/foundation/xle/xle.test.mjs +13 -0
- package/package.json +10 -11
- package/api/layout/_adapter.d.mts +0 -34
- package/api/layout/_adapter.mjs +0 -133
- package/api/layout/check/check.d.mts +0 -16
- package/api/layout/check/check.mjs +0 -40
- package/api/layout/expand/expand.d.mts +0 -22
- package/api/layout/expand/expand.mjs +0 -153
- package/api/layout/grammar/grammar.d.mts +0 -13
- package/api/layout/grammar/grammar.mjs +0 -86
- package/api/layout/layout.d.mts +0 -6
- package/api/layout/layout.mjs +0 -17
- package/api/layout/layout.test.mjs +0 -297
- package/api/layout/layout.type.d.mts +0 -89
- package/api/layout/layout.type.mjs +0 -103
- package/api/layout/layoutCheck.doc.d.mts +0 -11
- package/api/layout/layoutCheck.doc.mjs +0 -84
- package/api/layout/layoutExpand.doc.d.mts +0 -11
- package/api/layout/layoutExpand.doc.mjs +0 -106
- package/api/layout/layoutGrammar.doc.d.mts +0 -11
- package/api/layout/layoutGrammar.doc.mjs +0 -56
- package/assets/templates/themes/manifest.json +0 -95
- package/clients/cli/commands/layout-check.doc.mjs +0 -54
- package/clients/cli/commands/layout-expand.doc.mjs +0 -66
- package/clients/cli/commands/layout-grammar.doc.mjs +0 -30
- package/clients/cli/commands/layout.doc.mjs +0 -34
- package/clients/cli/commands/layout.error-codes.test.mjs +0 -66
- package/clients/cli/commands/layout.exit-parity.test.mjs +0 -41
- package/clients/cli/commands/layout.mjs +0 -263
- package/clients/cli/lib/update-check.mjs +0 -83
- package/clients/cli/lib/update-check.test.mjs +0 -137
- package/clients/cli/update-hint-commands.test.mjs +0 -54
|
@@ -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,10 +5,11 @@ export const doc = {
|
|
|
5
5
|
type: 'function',
|
|
6
6
|
kind: 'api',
|
|
7
7
|
name: 'integrationPackCheck',
|
|
8
|
+
namespace: 'cli/api',
|
|
8
9
|
displayName: 'integrationPackCheck()',
|
|
9
10
|
summary: 'Prove an integration package survives npm packing.',
|
|
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>',
|
|
@@ -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,105 @@
|
|
|
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
|
+
scripts,
|
|
28
|
+
},
|
|
29
|
+
null,
|
|
30
|
+
2,
|
|
31
|
+
)}\n`,
|
|
32
|
+
);
|
|
33
|
+
fs.writeFileSync(
|
|
34
|
+
path.join(tmpDir, 'astryx.integration.mjs'),
|
|
35
|
+
"export default {themes: './themes'};\n",
|
|
36
|
+
);
|
|
37
|
+
const root = path.join(tmpDir, 'themes');
|
|
38
|
+
fs.mkdirSync(path.join(root, 'ocean'), {recursive: true});
|
|
39
|
+
fs.writeFileSync(
|
|
40
|
+
path.join(root, 'ocean', 'oceanTheme.ts'),
|
|
41
|
+
"import {defineTheme} from '@astryxdesign/core/theme';\n\nexport const oceanTheme = defineTheme({name: 'ocean'});\n",
|
|
42
|
+
);
|
|
43
|
+
fs.writeFileSync(
|
|
44
|
+
path.join(root, 'ocean', 'oceanTheme.doc.mjs'),
|
|
45
|
+
`/** @type {import('@astryxdesign/cli/authoring').ThemeDoc} */
|
|
46
|
+
export default {type: 'theme', name: 'ocean', displayName: 'Ocean', description: 'Ocean theme.', maintained: true};
|
|
47
|
+
`,
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
describe('integrationPackCheck with lifecycle script output', () => {
|
|
52
|
+
it('checks the tarball when lifecycle scripts print to stdout', async () => {
|
|
53
|
+
writeThemePackage({
|
|
54
|
+
prepack: 'node -e "console.log(\'building the package\')"',
|
|
55
|
+
prepare: 'node -e "console.log(\'preparing\')"',
|
|
56
|
+
postpack: 'node -e "console.log(\'packed\')"',
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
const result = await integrationPackCheck({cwd: tmpDir});
|
|
60
|
+
|
|
61
|
+
expect(result.data.issues).toEqual([]);
|
|
62
|
+
expect(result.data.packable).toBe(true);
|
|
63
|
+
expect(result.data.tarball?.filename).toBe('acme-widgets-1.0.0.tgz');
|
|
64
|
+
expect(result.data.contributions.packed).toEqual(
|
|
65
|
+
result.data.contributions.local,
|
|
66
|
+
);
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
it('still runs a chatty lifecycle script and compares what it packed', async () => {
|
|
70
|
+
const renameTheme = [
|
|
71
|
+
"console.log('renaming ocean to storm')",
|
|
72
|
+
"const fs=require('fs')",
|
|
73
|
+
"fs.renameSync('themes/ocean','themes/storm')",
|
|
74
|
+
"const p='themes/storm/oceanTheme.doc.mjs'",
|
|
75
|
+
"let x=fs.readFileSync(p,'utf8')",
|
|
76
|
+
"x=x.replace(/name: 'ocean'/, 'name: '+String.fromCharCode(39)+'storm'+String.fromCharCode(39))",
|
|
77
|
+
'fs.writeFileSync(p,x)',
|
|
78
|
+
].join(';');
|
|
79
|
+
writeThemePackage({prepack: `node -e "${renameTheme}"`});
|
|
80
|
+
|
|
81
|
+
const result = await integrationPackCheck({cwd: tmpDir});
|
|
82
|
+
const codes = result.data.issues.map(issue => issue.code);
|
|
83
|
+
|
|
84
|
+
expect(codes).not.toContain('pack_failed');
|
|
85
|
+
expect(codes).toContain('identity_not_packed');
|
|
86
|
+
expect(codes).toContain('packed_identity_unexpected');
|
|
87
|
+
expect(result.data.packable).toBe(false);
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
it('keeps a failing lifecycle script output in the pack_failed issue', async () => {
|
|
91
|
+
writeThemePackage({
|
|
92
|
+
prepack:
|
|
93
|
+
'node -e "console.error(\'prepack exploded\'); process.exit(3)"',
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
const result = await integrationPackCheck({cwd: tmpDir});
|
|
97
|
+
const failure = result.data.issues.find(
|
|
98
|
+
issue => issue.code === 'pack_failed',
|
|
99
|
+
);
|
|
100
|
+
|
|
101
|
+
expect(result.data.packable).toBe(false);
|
|
102
|
+
expect(failure?.message).toContain('npm pack failed (exit 3)');
|
|
103
|
+
expect(failure?.message).toContain('prepack exploded');
|
|
104
|
+
});
|
|
105
|
+
});
|
|
@@ -27,6 +27,11 @@ import {spawnSync} from 'node:child_process';
|
|
|
27
27
|
import jscodeshift from 'jscodeshift';
|
|
28
28
|
import {assertWithin} from '../../foundation/fs/path-safety.mjs';
|
|
29
29
|
import {resolvePackageDir} from '../../foundation/integrations/integrations.mjs';
|
|
30
|
+
import {
|
|
31
|
+
docsTreeCliProblem,
|
|
32
|
+
replacesCliProblem,
|
|
33
|
+
} from '../../foundation/integrations/cli-requirement.mjs';
|
|
34
|
+
import {discoverIntegrationDocs} from '../../foundation/discovery/docs-discovery.mjs';
|
|
30
35
|
import {
|
|
31
36
|
discoverIntegrationComponents,
|
|
32
37
|
resolveIntegrationImportPath,
|
|
@@ -157,6 +162,22 @@ export function parseNpmPackOutput(output) {
|
|
|
157
162
|
};
|
|
158
163
|
}
|
|
159
164
|
|
|
165
|
+
/**
|
|
166
|
+
* Summarize the JSON error npm prints on stdout when `--json` pack fails.
|
|
167
|
+
* @param {string} output
|
|
168
|
+
* @returns {string}
|
|
169
|
+
*/
|
|
170
|
+
function npmPackErrorDetail(output) {
|
|
171
|
+
try {
|
|
172
|
+
const error = JSON.parse(output)?.error;
|
|
173
|
+
return [error?.summary, error?.detail]
|
|
174
|
+
.filter(part => typeof part === 'string' && part.trim() !== '')
|
|
175
|
+
.join(': ');
|
|
176
|
+
} catch {
|
|
177
|
+
return (output || '').trim();
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
|
|
160
181
|
/**
|
|
161
182
|
* Run `npm pack --json` with output directed to `destDir` so no preexisting
|
|
162
183
|
* tgz is overwritten. This intentionally runs the package lifecycle, matching
|
|
@@ -170,16 +191,25 @@ export function parseNpmPackOutput(output) {
|
|
|
170
191
|
function runNpmPack(packageDir, destDir) {
|
|
171
192
|
const result = spawnSync(
|
|
172
193
|
'npm',
|
|
173
|
-
[
|
|
194
|
+
[
|
|
195
|
+
'pack',
|
|
196
|
+
'--json',
|
|
197
|
+
'--silent',
|
|
198
|
+
// Lifecycle scripts still run; background mode keeps their output off
|
|
199
|
+
// the stdout that carries the JSON result.
|
|
200
|
+
'--foreground-scripts=false',
|
|
201
|
+
`--pack-destination=${destDir}`,
|
|
202
|
+
],
|
|
174
203
|
{cwd: packageDir, encoding: 'utf-8', timeout: 60_000},
|
|
175
204
|
);
|
|
176
205
|
if (result.error) {
|
|
177
206
|
throw new Error(`Could not start npm pack: ${result.error.message}`);
|
|
178
207
|
}
|
|
179
208
|
if (result.status !== 0) {
|
|
180
|
-
const
|
|
209
|
+
const detail =
|
|
210
|
+
(result.stderr || '').trim() || npmPackErrorDetail(result.stdout);
|
|
181
211
|
throw new Error(
|
|
182
|
-
`npm pack failed (exit ${result.status})${
|
|
212
|
+
`npm pack failed (exit ${result.status})${detail ? `: ${detail}` : ''}.`,
|
|
183
213
|
);
|
|
184
214
|
}
|
|
185
215
|
return parseNpmPackOutput(result.stdout);
|
|
@@ -388,6 +418,14 @@ async function validatePackedComponentExports(integration, scratchBase) {
|
|
|
388
418
|
components.map(component => component.specifier),
|
|
389
419
|
scratchBase,
|
|
390
420
|
);
|
|
421
|
+
issues.push(
|
|
422
|
+
...validateSpecifierExtensions(
|
|
423
|
+
components.map(({name, specifier}) => ({
|
|
424
|
+
label: `Component "${name}"`,
|
|
425
|
+
specifier,
|
|
426
|
+
})),
|
|
427
|
+
),
|
|
428
|
+
);
|
|
391
429
|
for (const {name, specifier} of components) {
|
|
392
430
|
const result = resolved.get(specifier);
|
|
393
431
|
if (!result?.url || result.error) {
|
|
@@ -427,19 +465,27 @@ async function validatePackedComponentExports(integration, scratchBase) {
|
|
|
427
465
|
*/
|
|
428
466
|
async function validatePackedTemplateExports(integration, scratchBase) {
|
|
429
467
|
const {templates} = await discoverIntegrationTemplatesForOne(integration);
|
|
430
|
-
const entries = templates.map(template =>
|
|
431
|
-
|
|
432
|
-
specifier: `${integration.name}/${path
|
|
468
|
+
const entries = templates.map(template => {
|
|
469
|
+
const relPath = path
|
|
433
470
|
.relative(integration.__packageDir, template.filePath)
|
|
434
471
|
.split(path.sep)
|
|
435
|
-
.join('/')
|
|
436
|
-
|
|
472
|
+
.join('/');
|
|
473
|
+
const extensionless = relPath.replace(/\.tsx?$/u, '');
|
|
474
|
+
return {
|
|
475
|
+
id: template.dirName,
|
|
476
|
+
specifier: `${integration.name}/${extensionless}`,
|
|
477
|
+
};
|
|
478
|
+
});
|
|
437
479
|
const resolved = resolveConsumerSpecifiers(
|
|
438
480
|
entries.map(entry => entry.specifier),
|
|
439
481
|
scratchBase,
|
|
440
482
|
);
|
|
441
|
-
|
|
442
|
-
|
|
483
|
+
const issues = validateSpecifierExtensions(
|
|
484
|
+
entries.map(({id, specifier}) => ({
|
|
485
|
+
label: `Template "${id}"`,
|
|
486
|
+
specifier,
|
|
487
|
+
})),
|
|
488
|
+
);
|
|
443
489
|
for (const {id, specifier} of entries) {
|
|
444
490
|
const result = resolved.get(specifier);
|
|
445
491
|
if (!result?.url || result.error) {
|
|
@@ -469,6 +515,32 @@ async function validatePackedTemplateExports(integration, scratchBase) {
|
|
|
469
515
|
return issues;
|
|
470
516
|
}
|
|
471
517
|
|
|
518
|
+
const TS_EXTENSION_RE = /\.tsx?$/u;
|
|
519
|
+
|
|
520
|
+
/**
|
|
521
|
+
* Reject specifiers that end in a TypeScript extension — they fail under
|
|
522
|
+
* default `moduleResolution` with TS5097/TS2307 unless the consumer enables
|
|
523
|
+
* `allowImportingTsExtensions`.
|
|
524
|
+
*
|
|
525
|
+
* @param {Array<{label: string, specifier: string}>} entries
|
|
526
|
+
* @returns {Issue[]}
|
|
527
|
+
*/
|
|
528
|
+
function validateSpecifierExtensions(entries) {
|
|
529
|
+
/** @type {Issue[]} */
|
|
530
|
+
const issues = [];
|
|
531
|
+
for (const {label, specifier} of entries) {
|
|
532
|
+
if (TS_EXTENSION_RE.test(specifier)) {
|
|
533
|
+
issues.push(
|
|
534
|
+
error(
|
|
535
|
+
'typescript_extension_in_specifier',
|
|
536
|
+
`${label} advertises import "${specifier}", which ends in a TypeScript extension. A consumer with default moduleResolution will reject it (TS5097). Use an extensionless specifier mapped through the package exports.`,
|
|
537
|
+
),
|
|
538
|
+
);
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
return issues;
|
|
542
|
+
}
|
|
543
|
+
|
|
472
544
|
/**
|
|
473
545
|
* Verify an integration package is ready to publish.
|
|
474
546
|
*
|
|
@@ -549,6 +621,35 @@ export async function integrationPackCheck(options = {}) {
|
|
|
549
621
|
);
|
|
550
622
|
}
|
|
551
623
|
}
|
|
624
|
+
// A namespace doc or a placed guide needs a CLI that reads the docs tree
|
|
625
|
+
// (spec:AST-046 FR11): an older CLI can hide every doc topic the package
|
|
626
|
+
// ships, so the declared CLI range must admit only CLIs that read it.
|
|
627
|
+
if (loaded.docs) {
|
|
628
|
+
const {namespaces, guides} = await discoverIntegrationDocs(loaded).catch(
|
|
629
|
+
() => ({namespaces: [], guides: []}),
|
|
630
|
+
);
|
|
631
|
+
const problem =
|
|
632
|
+
namespaces.length > 0 || guides.length > 0
|
|
633
|
+
? docsTreeCliProblem(pkg)
|
|
634
|
+
: null;
|
|
635
|
+
if (problem != null) {
|
|
636
|
+
issues.push(error('docs_tree_needs_cli', problem));
|
|
637
|
+
}
|
|
638
|
+
}
|
|
639
|
+
// A template that sets `replaces` needs a CLI that reads the field
|
|
640
|
+
// (spec:AST-035): an older CLI withholds the package's templates and docs.
|
|
641
|
+
if (loaded.templates) {
|
|
642
|
+
const found = await discoverIntegrationTemplatesForOne(loaded).catch(
|
|
643
|
+
() => ({templates: [], errors: []}),
|
|
644
|
+
);
|
|
645
|
+
const setsReplaces =
|
|
646
|
+
found.templates.some(template => template.replaces != null) ||
|
|
647
|
+
found.errors.some(
|
|
648
|
+
(/** @type {any} */ issue) => issue.replacementTarget != null,
|
|
649
|
+
);
|
|
650
|
+
const problem = setsReplaces ? replacesCliProblem(pkg) : null;
|
|
651
|
+
if (problem != null) issues.push(error('replaces_needs_cli', problem));
|
|
652
|
+
}
|
|
552
653
|
|
|
553
654
|
// Temp resources — always cleaned up
|
|
554
655
|
const tgzTmpDir = fs.mkdtempSync(
|