@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
package/api/build/help/help.mjs
CHANGED
|
@@ -1,18 +1,81 @@
|
|
|
1
1
|
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* @file build.help leaf — the "how to build a page" playbook
|
|
4
|
+
* @file build.help leaf — the "how to build a page" playbook.
|
|
5
5
|
*
|
|
6
|
-
* `build` with no query returns this envelope
|
|
7
|
-
*
|
|
8
|
-
*
|
|
6
|
+
* `build` with no query returns this envelope. The playbook is data — steps,
|
|
7
|
+
* rules, and related lookups — so a `--json` or programmatic caller gets the
|
|
8
|
+
* same guidance the terminal shows. Commands are bare subcommands with no
|
|
9
|
+
* package-manager prefix, which keeps the JSON environment-agnostic; the CLI
|
|
10
|
+
* renders each one with the caller's invocation, as it does build.kit's
|
|
11
|
+
* `hint.commands`.
|
|
12
|
+
*
|
|
13
|
+
* The workflow starts every page from a template, because a template already
|
|
14
|
+
* has the frame, spacing, and section rhythm that a page composed from
|
|
15
|
+
* components has to rediscover.
|
|
9
16
|
*/
|
|
10
17
|
|
|
11
18
|
/**
|
|
12
|
-
* The page-building playbook
|
|
19
|
+
* The page-building playbook (emitted when `build` runs with no query).
|
|
13
20
|
*
|
|
14
21
|
* @returns {import('../build.type.mjs').BuildHelpResponse}
|
|
15
22
|
*/
|
|
16
23
|
export function buildHelp() {
|
|
17
|
-
return {
|
|
24
|
+
return {
|
|
25
|
+
type: 'build.help',
|
|
26
|
+
data: {
|
|
27
|
+
playbook: true,
|
|
28
|
+
title: 'How to build a page with Astryx',
|
|
29
|
+
steps: [
|
|
30
|
+
{
|
|
31
|
+
title: 'Find the page template to start from',
|
|
32
|
+
commands: [{command: 'build "<what you\'re building>"'}],
|
|
33
|
+
returns:
|
|
34
|
+
'the [page] template to start from (always one: the closest match, or the app shell when nothing matches), the next two templates, and the [block]s and [component]s for the parts it lacks',
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
title: 'Scaffold that template into your project',
|
|
38
|
+
commands: [
|
|
39
|
+
{
|
|
40
|
+
command: 'template <name> <path>',
|
|
41
|
+
purpose: 'write the page template to <path>',
|
|
42
|
+
},
|
|
43
|
+
],
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
title: 'Adapt it: keep its frame and spacing, replace its content',
|
|
47
|
+
commands: [
|
|
48
|
+
{
|
|
49
|
+
command: 'template <BlockName>',
|
|
50
|
+
purpose:
|
|
51
|
+
'print a block to put inside a section, for a part the template lacks',
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
command: 'component <Name>',
|
|
55
|
+
purpose: 'read props before you change a component',
|
|
56
|
+
},
|
|
57
|
+
],
|
|
58
|
+
},
|
|
59
|
+
],
|
|
60
|
+
rules: [
|
|
61
|
+
'Start every page from a page template. Never lay out a page from scratch.',
|
|
62
|
+
'Changing a page you already have? Keep it. Add blocks and components inside its sections.',
|
|
63
|
+
"Keep the template's page frame, gap, and padding values. Replace its data, copy, and sections.",
|
|
64
|
+
'No <div>/raw HTML for layout — use VStack/HStack/Grid/Stack/Card etc.',
|
|
65
|
+
'No style={{}} — use component props, and design tokens for values.',
|
|
66
|
+
'Wrap the app in <Theme theme={...}> and import core reset.css + astryx.css.',
|
|
67
|
+
],
|
|
68
|
+
related: [
|
|
69
|
+
{
|
|
70
|
+
command: 'template --list --type page',
|
|
71
|
+
purpose: 'every page template',
|
|
72
|
+
},
|
|
73
|
+
{command: 'docs tokens', purpose: 'the design tokens'},
|
|
74
|
+
{
|
|
75
|
+
command: 'search <query>',
|
|
76
|
+
purpose: 'a neutral lookup of any component, doc, or template',
|
|
77
|
+
},
|
|
78
|
+
],
|
|
79
|
+
},
|
|
80
|
+
};
|
|
18
81
|
}
|
package/api/build/kit/kit.d.mts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// DO NOT EDIT — run `pnpm sync:api-types` to regenerate.
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
|
-
* The
|
|
5
|
+
* The page template to start from, and the kit around it.
|
|
6
6
|
*
|
|
7
7
|
* @param {string} query what you're building (e.g. "analytics dashboard")
|
|
8
8
|
* @param {{cwd?: string, type?: import('../../search/search.type.mjs').SearchDomain, limit?: number}} [options]
|
|
@@ -13,3 +13,6 @@ export function buildKit(query: string, options?: {
|
|
|
13
13
|
type?: import("../../search/search.type.mjs").SearchDomain;
|
|
14
14
|
limit?: number;
|
|
15
15
|
}): Promise<import("../build.type.mjs").BuildKitResponse>;
|
|
16
|
+
export type SearchResultEntry = import("../../search/search.type.mjs").SearchResultEntry;
|
|
17
|
+
export type BuildStart = import("../build.type.mjs").BuildStart;
|
|
18
|
+
export type PageTemplate = import("../_adapter.mjs").PageTemplate;
|
package/api/build/kit/kit.mjs
CHANGED
|
@@ -1,44 +1,60 @@
|
|
|
1
1
|
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* @file build.kit leaf — the
|
|
4
|
+
* @file build.kit leaf — the page template to start from, and the kit around it.
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
6
|
+
* Every kit names a page template to START from: the page the page ranker
|
|
7
|
+
* (rank.mjs) puts first when it has the evidence to lead, else the app shell.
|
|
8
|
+
* The ranker is the only thing that picks the start, so one noisy signal —
|
|
9
|
+
* search matching "site" to a gallery's "side" — cannot choose the page. A
|
|
10
|
+
* template carries the page frame, the spacing, and the section rhythm; a page
|
|
11
|
+
* composed from components carries none of that, so the kit never recommends
|
|
12
|
+
* composing from scratch while a template exists. Next to the start it names
|
|
13
|
+
* the ranker's next two templates, then groups the unified search into the
|
|
14
|
+
* blocks that cover parts and the domain components to fill gaps, plus the
|
|
15
|
+
* always-on frame + foundation names. `pages` and `directMatch` keep search's
|
|
16
|
+
* own view for callers that read them.
|
|
9
17
|
*
|
|
10
18
|
* The kit carries RAW `SearchResultEntry` objects and static name arrays only —
|
|
11
19
|
* never pre-formatted command strings. All CLI prefixing (formatCliCommand /
|
|
12
20
|
* getCliInvocation) and the section prose live in the command renderer, so the
|
|
13
21
|
* JSON shape stays package-manager-agnostic and stable across environments.
|
|
14
22
|
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
23
|
+
* Two commands are the kit's own: `start.command`, the scaffold (`astryx
|
|
24
|
+
* template <id> --type page <path>`, with `<path>` a placeholder), and the `--skeleton`
|
|
25
|
+
* a page entry carries when it is not a direct match, so a loose page reads
|
|
26
|
+
* as a layout preview rather than the thing to build. Neither is prefixing —
|
|
18
27
|
* the invocation stays the renderer's job.
|
|
19
28
|
*/
|
|
20
29
|
|
|
21
30
|
import {search} from '../../search/search.mjs';
|
|
31
|
+
import {findCoreDir} from '../../../foundation/fs/paths.mjs';
|
|
32
|
+
import {AstryxError} from '../../error.mjs';
|
|
33
|
+
import {ERROR_CODES} from '../../../foundation/response/error-codes.mjs';
|
|
22
34
|
import {getResultCoverage} from '../../search/coverage.mjs';
|
|
35
|
+
import {loadPageTemplates} from '../_adapter.mjs';
|
|
36
|
+
import {pickAlternatives, pickStart, rankPages} from './rank.mjs';
|
|
23
37
|
|
|
24
38
|
/** A page at/above this score is a confident direct match. */
|
|
25
39
|
const PAGE_DIRECT = 95;
|
|
26
|
-
/** Below this a page is too weak to offer
|
|
40
|
+
/** Below this a page is too weak to offer at all. */
|
|
27
41
|
const PAGE_FLOOR = 50;
|
|
28
|
-
/** Below this a block/domain-component match is incidental noise. */
|
|
29
|
-
const DOMAIN_FLOOR = 55;
|
|
30
42
|
/**
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
43
|
+
* Below this a block/domain-component match is incidental noise. A single
|
|
44
|
+
* description word in a multi-word idea scores 50 plus at most 7.5 of coverage
|
|
45
|
+
* garnish, so it stays below; a name or keyword hit clears it. `build "weekly
|
|
46
|
+
* brief"` used to offer Toast, Popover and TextInput because their
|
|
47
|
+
* descriptions say "brief".
|
|
48
|
+
*/
|
|
49
|
+
const DOMAIN_FLOOR = 60;
|
|
50
|
+
/**
|
|
51
|
+
* How much of a multi-word query a page must cover to be offered on breadth.
|
|
39
52
|
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
53
|
+
* Score alone cannot carry this. A page's derived keywords include every
|
|
54
|
+
* component its source renders, so `build "actionable warning banner"` once
|
|
55
|
+
* scored `login`, `contact-form` and `documentation-design` at 95 apiece — an
|
|
56
|
+
* exact hit on "banner" alone, plus the coverage garnish. Matching one of
|
|
57
|
+
* three concepts is not the same claim as matching three.
|
|
42
58
|
*/
|
|
43
59
|
const PAGE_COVERAGE = 0.5;
|
|
44
60
|
/**
|
|
@@ -50,12 +66,21 @@ const PAGE_COVERAGE = 0.5;
|
|
|
50
66
|
* Astryx contains, which is exactly the failure `build` exists to prevent.
|
|
51
67
|
*/
|
|
52
68
|
const THIN_KIT = 3;
|
|
69
|
+
/**
|
|
70
|
+
* Where a page starts when no page template matched: the first of these the
|
|
71
|
+
* project can scaffold. A top nav over empty, full-width content is the least
|
|
72
|
+
* opinionated frame that still has navigation; `blank` is the floor, with no
|
|
73
|
+
* chrome at all. Either one still hands the reader a page frame and its
|
|
74
|
+
* padding, which composing from components does not.
|
|
75
|
+
*/
|
|
76
|
+
const FALLBACK_STARTS = ['shell-top-nav', 'blank'];
|
|
53
77
|
|
|
54
78
|
/**
|
|
55
79
|
* Always-surfaced primitives. Every page needs a shell + layout/typography/
|
|
56
80
|
* action atoms, but these never keyword-match an idea ("dashboard" != "Stack"),
|
|
57
81
|
* so search alone never returns them. Kept here (not the renderer) because they
|
|
58
82
|
* are ALSO used to exclude these names from the idea-specific `domain` group.
|
|
83
|
+
* Every page template already uses them.
|
|
59
84
|
*/
|
|
60
85
|
const FRAME = ['AppShell', 'TopNav', 'SideNav', 'Layout'];
|
|
61
86
|
const FOUNDATION = [
|
|
@@ -75,7 +100,90 @@ const FOUNDATION = [
|
|
|
75
100
|
const ALWAYS = new Set([...FRAME, ...FOUNDATION]);
|
|
76
101
|
|
|
77
102
|
/**
|
|
78
|
-
*
|
|
103
|
+
* @typedef {import('../../search/search.type.mjs').SearchResultEntry} SearchResultEntry
|
|
104
|
+
* @typedef {import('../build.type.mjs').BuildStart} BuildStart
|
|
105
|
+
* @typedef {import('../_adapter.mjs').PageTemplate} PageTemplate
|
|
106
|
+
*/
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* A page template as the kit names it: the command that selects exactly that
|
|
110
|
+
* template, scaffolding into `<path>`, a placeholder for the file or folder to
|
|
111
|
+
* write it to.
|
|
112
|
+
* @param {PageTemplate} t
|
|
113
|
+
*/
|
|
114
|
+
const asTemplate = t => ({
|
|
115
|
+
name: t.name,
|
|
116
|
+
displayName: t.displayName,
|
|
117
|
+
description: t.description,
|
|
118
|
+
command: `${t.command} <path>`,
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* The template to start from: the ready page the ranker puts first when it
|
|
123
|
+
* has the evidence to lead, else the first fallback shell the project can
|
|
124
|
+
* scaffold. Null only when the project has no page template to offer at all.
|
|
125
|
+
*
|
|
126
|
+
* `direct` means two independent signals agree: the ranker's pick is also
|
|
127
|
+
* search's direct match. The ranker sees only ready templates, so a template
|
|
128
|
+
* still marked not ready is never the start; when search matched one directly
|
|
129
|
+
* the reason names it, so the reader knows why the kit starts elsewhere.
|
|
130
|
+
*
|
|
131
|
+
* @param {import('./rank.mjs').RankedPage[]} ranked
|
|
132
|
+
* @param {SearchResultEntry[]} pages
|
|
133
|
+
* @param {boolean} directMatch
|
|
134
|
+
* @param {PageTemplate[]} catalog
|
|
135
|
+
* @returns {Omit<BuildStart, 'alternatives'> | null}
|
|
136
|
+
*/
|
|
137
|
+
function chooseStart(ranked, pages, directMatch, catalog) {
|
|
138
|
+
const direct = directMatch ? pages[0].name : null;
|
|
139
|
+
const unready =
|
|
140
|
+
direct && !catalog.some(t => t.name === direct) ? direct : null;
|
|
141
|
+
// The reason never denies a match the same response reports: a direct
|
|
142
|
+
// match the ranker outweighed is named, and so are the loose page matches
|
|
143
|
+
// search listed when the kit falls back to the shell.
|
|
144
|
+
const loose = pages.map(p => `\`${p.name}\``).join(', ');
|
|
145
|
+
const pick = pickStart(ranked);
|
|
146
|
+
const closest = pick && catalog.find(t => t.name === pick.name);
|
|
147
|
+
if (closest) {
|
|
148
|
+
const agrees = closest.name === direct;
|
|
149
|
+
return {
|
|
150
|
+
...asTemplate(closest),
|
|
151
|
+
basis: agrees ? 'direct' : 'closest',
|
|
152
|
+
reason: agrees
|
|
153
|
+
? 'Matches the idea.'
|
|
154
|
+
: unready
|
|
155
|
+
? `\`${unready}\` matches but is not ready yet; this is the closest ready template.`
|
|
156
|
+
: direct
|
|
157
|
+
? `Search matched \`${direct}\` by name, but this template fits more of the idea.`
|
|
158
|
+
: 'The closest template; none is exactly this page.',
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
for (const id of FALLBACK_STARTS) {
|
|
162
|
+
const shell = catalog.find(t => t.name === id);
|
|
163
|
+
if (shell) {
|
|
164
|
+
// The shell can also be the ranker's best guess without the evidence to
|
|
165
|
+
// lead ("horizontal site navigation"); say so rather than "no match".
|
|
166
|
+
const nearest = ranked[0]?.name === shell.name && ranked[0].hits > 0;
|
|
167
|
+
return {
|
|
168
|
+
...asTemplate(shell),
|
|
169
|
+
basis: 'fallback',
|
|
170
|
+
reason: unready
|
|
171
|
+
? `\`${unready}\` matches but is not ready yet, so start from the app shell.`
|
|
172
|
+
: direct
|
|
173
|
+
? `Search matched \`${direct}\` by name, but too little of the idea fits it, so start from the app shell.`
|
|
174
|
+
: nearest
|
|
175
|
+
? 'No template is a clear match; the app shell is the closest.'
|
|
176
|
+
: loose
|
|
177
|
+
? `Search matched ${loose} only loosely, so start from the app shell.`
|
|
178
|
+
: 'No template matched, so start from the app shell.',
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
return null;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* The page template to start from, and the kit around it.
|
|
79
187
|
*
|
|
80
188
|
* @param {string} query what you're building (e.g. "analytics dashboard")
|
|
81
189
|
* @param {{cwd?: string, type?: import('../../search/search.type.mjs').SearchDomain, limit?: number}} [options]
|
|
@@ -83,12 +191,30 @@ const ALWAYS = new Set([...FRAME, ...FOUNDATION]);
|
|
|
83
191
|
*/
|
|
84
192
|
export async function buildKit(query, options = {}) {
|
|
85
193
|
const {cwd = process.cwd(), type, limit = 60} = options;
|
|
194
|
+
// A kit is built from Core's components, hooks, and templates. An open
|
|
195
|
+
// search without core covers the docs alone, so the kit asks for core here.
|
|
196
|
+
if (type !== 'doc' && !findCoreDir(cwd)) {
|
|
197
|
+
throw new AstryxError(
|
|
198
|
+
'Could not find @astryxdesign/core package',
|
|
199
|
+
undefined,
|
|
200
|
+
ERROR_CODES.ERR_CORE_NOT_FOUND,
|
|
201
|
+
);
|
|
202
|
+
}
|
|
86
203
|
// search()'s JSDoc @returns widens results to object[]; the SearchResponse
|
|
87
204
|
// shape is the contract (api/search/search.type.mjs). Cast locally rather than
|
|
88
205
|
// tightening the search @returns (a separate follow-up).
|
|
89
206
|
const result =
|
|
90
207
|
/** @type {import('../../search/search.type.mjs').SearchResponse} */ (
|
|
91
|
-
await search(query, {
|
|
208
|
+
await search(query, {
|
|
209
|
+
cwd,
|
|
210
|
+
type,
|
|
211
|
+
// Search wider than the surfaced kit so a flood of doc matches cannot
|
|
212
|
+
// bury the page templates past the cutoff; the caller's `limit` still
|
|
213
|
+
// caps the kit below. A non-positive or non-integer limit is passed
|
|
214
|
+
// through unchanged so search rejects it (ERR_INVALID_ARGUMENT).
|
|
215
|
+
limit:
|
|
216
|
+
Number.isInteger(limit) && limit > 0 ? Math.max(limit, 200) : limit,
|
|
217
|
+
})
|
|
92
218
|
);
|
|
93
219
|
const results = result.data.results;
|
|
94
220
|
// The TOTAL number of matches, not the number that survived `limit`. The kit
|
|
@@ -98,7 +224,7 @@ export async function buildKit(query, options = {}) {
|
|
|
98
224
|
const matchCount = result.data.matchCount;
|
|
99
225
|
|
|
100
226
|
/**
|
|
101
|
-
* Did this result answer enough of the query to stand as a page?
|
|
227
|
+
* Did this result answer enough of the query to stand as a page on breadth?
|
|
102
228
|
* Single-concept queries have nothing to cover, so they always pass. Coverage
|
|
103
229
|
* stays in a module-private WeakMap and never enters public search/build JSON.
|
|
104
230
|
* @param {object} r
|
|
@@ -110,7 +236,7 @@ export async function buildKit(query, options = {}) {
|
|
|
110
236
|
return (coverage?.matched ?? 0) / total >= PAGE_COVERAGE;
|
|
111
237
|
};
|
|
112
238
|
|
|
113
|
-
const
|
|
239
|
+
const matchedPages = results
|
|
114
240
|
.filter(
|
|
115
241
|
r =>
|
|
116
242
|
r.domain === 'template' &&
|
|
@@ -135,32 +261,60 @@ export async function buildKit(query, options = {}) {
|
|
|
135
261
|
!ALWAYS.has(r.name),
|
|
136
262
|
)
|
|
137
263
|
.slice(0, 6);
|
|
138
|
-
const directMatch =
|
|
264
|
+
const directMatch =
|
|
265
|
+
matchedPages.length > 0 && matchedPages[0].score >= PAGE_DIRECT;
|
|
139
266
|
|
|
140
267
|
/**
|
|
141
|
-
* On a loose match,
|
|
142
|
-
*
|
|
143
|
-
*
|
|
144
|
-
*
|
|
145
|
-
*
|
|
146
|
-
* thing to a human in that case: RECOMMENDED START prints
|
|
147
|
-
* `template <name> --skeleton` and the PAGE TEMPLATES heading reads "use as
|
|
148
|
-
* a layout reference". But prose is not what a program reads. A JSON caller
|
|
149
|
-
* takes `command` and gets the scaffold, so the two audiences were given
|
|
150
|
-
* opposite advice from the same kit.
|
|
151
|
-
*
|
|
152
|
-
* That matters most for the caller least able to notice. `template <name>`
|
|
153
|
-
* emits the whole page, and an agent handed a full template it did not quite
|
|
154
|
-
* ask for tends to adapt it anyway — which is how a request for one thing
|
|
155
|
-
* comes back as a competent version of another. `--skeleton` gives the
|
|
156
|
-
* layout without the invitation.
|
|
157
|
-
*
|
|
158
|
-
* Copied rather than mutated: these entries come from `search()` and are not
|
|
159
|
-
* this function's to modify.
|
|
268
|
+
* On a loose match, a page entry's `command` previews the layout rather
|
|
269
|
+
* than printing the whole template: `--skeleton` gives the shape without
|
|
270
|
+
* presenting the page as the thing to build. The recommendation itself is
|
|
271
|
+
* `start`, which always scaffolds. Copied rather than mutated: these entries
|
|
272
|
+
* come from `search()` and are not this function's to modify.
|
|
160
273
|
*/
|
|
161
|
-
const
|
|
162
|
-
?
|
|
163
|
-
:
|
|
274
|
+
const pages = directMatch
|
|
275
|
+
? matchedPages
|
|
276
|
+
: matchedPages.map(page => ({
|
|
277
|
+
...page,
|
|
278
|
+
command: `${page.command} --skeleton`,
|
|
279
|
+
}));
|
|
280
|
+
|
|
281
|
+
// The caller's `limit` caps the surfaced kit, even though the search above
|
|
282
|
+
// ran wider to find templates that a flood of doc matches would otherwise
|
|
283
|
+
// bury past the cutoff. Keep pages first, then blocks, then components.
|
|
284
|
+
let budget = limit;
|
|
285
|
+
/**
|
|
286
|
+
* @template T
|
|
287
|
+
* @param {T[]} arr
|
|
288
|
+
* @returns {T[]}
|
|
289
|
+
*/
|
|
290
|
+
const toLimit = arr => {
|
|
291
|
+
const out = arr.slice(0, Math.max(0, budget));
|
|
292
|
+
budget -= out.length;
|
|
293
|
+
return out;
|
|
294
|
+
};
|
|
295
|
+
const pagesKept = toLimit(pages);
|
|
296
|
+
const blocksKept = toLimit(blocks);
|
|
297
|
+
const domainKept = toLimit(domain);
|
|
298
|
+
|
|
299
|
+
// A kit narrowed to components or hooks has no page to start from; every
|
|
300
|
+
// other kit does, so the reader is never left to compose a page from scratch.
|
|
301
|
+
const wantsPages = !type || type === 'template';
|
|
302
|
+
const catalog = wantsPages ? await loadPageTemplates(cwd) : [];
|
|
303
|
+
const ranked = wantsPages ? rankPages(query, catalog) : [];
|
|
304
|
+
const chosen = wantsPages
|
|
305
|
+
? chooseStart(ranked, matchedPages, directMatch, catalog)
|
|
306
|
+
: null;
|
|
307
|
+
// Name the ranker's next two templates beside the start: the reader judges
|
|
308
|
+
// meaning better than keywords do, and an acceptable template is in these
|
|
309
|
+
// three far more often than it is the start alone.
|
|
310
|
+
/** @type {BuildStart | null} */
|
|
311
|
+
const start = chosen && {
|
|
312
|
+
...chosen,
|
|
313
|
+
alternatives: pickAlternatives(ranked, chosen.name).flatMap(r => {
|
|
314
|
+
const t = catalog.find(c => c.name === r.name);
|
|
315
|
+
return t ? [asTemplate(t)] : [];
|
|
316
|
+
}),
|
|
317
|
+
};
|
|
164
318
|
|
|
165
319
|
// What to try when the kit comes back thin. Keyword search over a design
|
|
166
320
|
// system misses in a predictable way — the reader's words and the package's
|
|
@@ -173,7 +327,7 @@ export async function buildKit(query, options = {}) {
|
|
|
173
327
|
// not resolve — the same defect `getCliInvocation` exists to prevent, and
|
|
174
328
|
// the renderer applies it. A JSON caller gets the parts, not a sentence.
|
|
175
329
|
const hint =
|
|
176
|
-
|
|
330
|
+
pagesKept.length + blocksKept.length + domainKept.length < THIN_KIT
|
|
177
331
|
? {
|
|
178
332
|
reason:
|
|
179
333
|
'Few matches. This is keyword search, not semantic — try other wordings.',
|
|
@@ -185,14 +339,15 @@ export async function buildKit(query, options = {}) {
|
|
|
185
339
|
type: 'build.kit',
|
|
186
340
|
data: {
|
|
187
341
|
query: result.data.query,
|
|
188
|
-
// Distinguishes "search found nothing"
|
|
189
|
-
//
|
|
342
|
+
// Distinguishes "search found nothing" from a weak-but-non-empty result
|
|
343
|
+
// set. Either way the kit still names a template to start from.
|
|
190
344
|
hasResults: matchCount > 0,
|
|
191
345
|
matchCount,
|
|
192
346
|
directMatch,
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
347
|
+
start,
|
|
348
|
+
pages: pagesKept,
|
|
349
|
+
blocks: blocksKept,
|
|
350
|
+
domain: domainKept,
|
|
196
351
|
frame: FRAME,
|
|
197
352
|
foundation: FOUNDATION,
|
|
198
353
|
hint,
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
// @generated by scripts/sync-api-types.mjs from the JSDoc in api/**/*.mjs.
|
|
2
|
+
// DO NOT EDIT — run `pnpm sync:api-types` to regenerate.
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @typedef {import('../_adapter.mjs').PageTemplate} PageTemplate
|
|
6
|
+
* @typedef {{name: string, score: number, hits: number, familyNamed: boolean, containerMatched: boolean}} RankedPage
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Rank page templates against an idea, best first. Ties go to the template
|
|
10
|
+
* with the shorter id (the family's broader page), then by name.
|
|
11
|
+
*
|
|
12
|
+
* @param {string} query
|
|
13
|
+
* @param {PageTemplate[]} pages
|
|
14
|
+
* @returns {RankedPage[]}
|
|
15
|
+
*/
|
|
16
|
+
export function rankPages(query: string, pages: PageTemplate[]): RankedPage[];
|
|
17
|
+
/**
|
|
18
|
+
* The next closest templates after the start, best first: the ones a reader
|
|
19
|
+
* should check the idea against when the start's shape is wrong. Each matched
|
|
20
|
+
* at least one term and scored at least half of what a start needs.
|
|
21
|
+
*
|
|
22
|
+
* @param {RankedPage[]} ranked
|
|
23
|
+
* @param {string} startName
|
|
24
|
+
* @param {number} [count]
|
|
25
|
+
* @returns {RankedPage[]}
|
|
26
|
+
*/
|
|
27
|
+
export function pickAlternatives(ranked: RankedPage[], startName: string, count?: number): RankedPage[];
|
|
28
|
+
/**
|
|
29
|
+
* The template to start from, or null when the best one has too little
|
|
30
|
+
* evidence to lead and the page should start from the app shell. Evidence is
|
|
31
|
+
* two matched terms, the idea naming the template's family, or its container.
|
|
32
|
+
*
|
|
33
|
+
* @param {RankedPage[]} ranked
|
|
34
|
+
* @returns {RankedPage | null}
|
|
35
|
+
*/
|
|
36
|
+
export function pickStart(ranked: RankedPage[]): RankedPage | null;
|
|
37
|
+
export type PageTemplate = import("../_adapter.mjs").PageTemplate;
|
|
38
|
+
export type RankedPage = {
|
|
39
|
+
name: string;
|
|
40
|
+
score: number;
|
|
41
|
+
hits: number;
|
|
42
|
+
familyNamed: boolean;
|
|
43
|
+
containerMatched: boolean;
|
|
44
|
+
};
|