@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
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @file The published `@astryxdesign/cli/json` envelope types carry
|
|
5
|
+
* `apiVersion`, the field every `--json` envelope has. Type-checks a consumer
|
|
6
|
+
* fixture that reads it from each envelope shape.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import {describe, it, expect} from 'vitest';
|
|
10
|
+
import {spawnSync} from 'node:child_process';
|
|
11
|
+
import * as fs from 'node:fs';
|
|
12
|
+
import * as os from 'node:os';
|
|
13
|
+
import * as path from 'node:path';
|
|
14
|
+
import {createRequire} from 'node:module';
|
|
15
|
+
import {fileURLToPath} from 'node:url';
|
|
16
|
+
|
|
17
|
+
const INDEX = fileURLToPath(new URL('./index.ts', import.meta.url));
|
|
18
|
+
const TSC = createRequire(import.meta.url).resolve('typescript/bin/tsc');
|
|
19
|
+
|
|
20
|
+
const FIXTURE = `
|
|
21
|
+
import type {
|
|
22
|
+
assertResponse,
|
|
23
|
+
CLIError,
|
|
24
|
+
CLIUnsupportedError,
|
|
25
|
+
parseResponse,
|
|
26
|
+
} from ${JSON.stringify(INDEX)};
|
|
27
|
+
|
|
28
|
+
declare const error: CLIError;
|
|
29
|
+
declare const unsupported: CLIUnsupportedError;
|
|
30
|
+
declare const parsed: Exclude<ReturnType<typeof parseResponse>, CLIError | CLIUnsupportedError>;
|
|
31
|
+
declare const asserted: ReturnType<typeof assertResponse<'manifest'>>;
|
|
32
|
+
|
|
33
|
+
export const versions: number[] = [
|
|
34
|
+
error.apiVersion,
|
|
35
|
+
unsupported.apiVersion,
|
|
36
|
+
parsed.apiVersion,
|
|
37
|
+
asserted.apiVersion,
|
|
38
|
+
];
|
|
39
|
+
`;
|
|
40
|
+
|
|
41
|
+
describe('@astryxdesign/cli/json envelope types', () => {
|
|
42
|
+
it('declare apiVersion on the success and error envelopes', () => {
|
|
43
|
+
const dir = fs.mkdtempSync(path.join(os.tmpdir(), 'astryx-envelope-types-'));
|
|
44
|
+
try {
|
|
45
|
+
fs.writeFileSync(path.join(dir, 'fixture.ts'), FIXTURE);
|
|
46
|
+
fs.writeFileSync(
|
|
47
|
+
path.join(dir, 'tsconfig.json'),
|
|
48
|
+
JSON.stringify({
|
|
49
|
+
compilerOptions: {
|
|
50
|
+
target: 'ES2022',
|
|
51
|
+
module: 'ESNext',
|
|
52
|
+
moduleResolution: 'bundler',
|
|
53
|
+
strict: true,
|
|
54
|
+
noEmit: true,
|
|
55
|
+
skipLibCheck: true,
|
|
56
|
+
allowImportingTsExtensions: true,
|
|
57
|
+
// index.ts re-exports JSDoc types from .type.mjs files; read them
|
|
58
|
+
// from source, as tsconfig.json-api.json does, not from generated
|
|
59
|
+
// declarations that exist only after a build.
|
|
60
|
+
allowJs: true,
|
|
61
|
+
types: [],
|
|
62
|
+
},
|
|
63
|
+
files: ['fixture.ts'],
|
|
64
|
+
}),
|
|
65
|
+
);
|
|
66
|
+
const res = spawnSync(process.execPath, [TSC, '-p', dir], {
|
|
67
|
+
encoding: 'utf-8',
|
|
68
|
+
timeout: 60_000,
|
|
69
|
+
});
|
|
70
|
+
expect(res.stdout + res.stderr).toBe('');
|
|
71
|
+
expect(res.status).toBe(0);
|
|
72
|
+
} finally {
|
|
73
|
+
fs.rmSync(dir, {recursive: true, force: true});
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
});
|
package/api/json/index.ts
CHANGED
|
@@ -28,6 +28,8 @@ export type * from '../init/init.type.mjs';
|
|
|
28
28
|
export type * from '../doctor/doctor.type.mjs';
|
|
29
29
|
export type * from '../layout/layout.type.mjs';
|
|
30
30
|
export type * from '../integration/validate-integration.type.mjs';
|
|
31
|
+
export type * from '../integration/authoring-checks.type.mjs';
|
|
32
|
+
export type * from '../integration/pack-check.type.mjs';
|
|
31
33
|
export type * from '../../foundation/response/base';
|
|
32
34
|
export type * from '../../foundation/response/error-codes';
|
|
33
35
|
export type * from '../../clients/cli/lib/manifest';
|
package/api/json/isError.doc.mjs
CHANGED
|
@@ -11,10 +11,11 @@ export const doc = {
|
|
|
11
11
|
type: 'function',
|
|
12
12
|
kind: 'api',
|
|
13
13
|
name: 'isError',
|
|
14
|
+
namespace: 'cli/api',
|
|
14
15
|
displayName: 'isError()',
|
|
15
16
|
summary: 'Did the CLI return an error envelope?',
|
|
16
17
|
description:
|
|
17
|
-
'Tests a parsed response for an `error` key. Branch on this before touching `data
|
|
18
|
+
'Tests a parsed response for an `error` key. Branch on this before touching `data`, ' +
|
|
18
19
|
'and prefer the stable `code` field over matching the human-readable message, which is ' +
|
|
19
20
|
'not a contract. Note this returns a plain boolean, not a TypeScript type predicate, so ' +
|
|
20
21
|
'it does not narrow on its own: cast to the matching *Response type to get typed access.',
|
|
@@ -11,12 +11,13 @@ export const doc = {
|
|
|
11
11
|
type: 'function',
|
|
12
12
|
kind: 'api',
|
|
13
13
|
name: 'parseResponse',
|
|
14
|
+
namespace: 'cli/api',
|
|
14
15
|
displayName: 'parseResponse()',
|
|
15
16
|
summary: 'Parse `astryx --json` stdout into the structural response envelope.',
|
|
16
17
|
description:
|
|
17
18
|
'The entry point for consuming the CLI as a subprocess. A JSON string is parsed; ' +
|
|
18
19
|
'an already-parsed object is passed through unchanged, so it is safe to call on ' +
|
|
19
|
-
'either. It returns the structural { type, data, meta? } envelope without narrowing: ' +
|
|
20
|
+
'either. It returns the structural { apiVersion, type, data, meta? } envelope without narrowing: ' +
|
|
20
21
|
'`data` stays unknown until you discriminate on `type` (or use assertResponse).',
|
|
21
22
|
importPath: '@astryxdesign/cli/json',
|
|
22
23
|
signature: 'parseResponse(raw: unknown): any',
|
|
@@ -34,7 +35,7 @@ export const doc = {
|
|
|
34
35
|
{
|
|
35
36
|
type: 'any',
|
|
36
37
|
description:
|
|
37
|
-
'The { type, data, meta? } envelope, or a CLIError envelope. The published signature is intentionally untyped; narrow it by casting to the matching *Response type exported from @astryxdesign/cli/json.',
|
|
38
|
+
'The { apiVersion, type, data, meta? } envelope, or a CLIError envelope ({ apiVersion, error, code, suggestions? }). The published signature is intentionally untyped; narrow it by casting to the matching *Response type exported from @astryxdesign/cli/json.',
|
|
38
39
|
},
|
|
39
40
|
],
|
|
40
41
|
throws: [
|
package/api/layout/_adapter.mjs
CHANGED
|
@@ -50,7 +50,18 @@ async function loadBlocks(cwd) {
|
|
|
50
50
|
const blocks = [];
|
|
51
51
|
try {
|
|
52
52
|
const all = await discoverTemplates(cwd);
|
|
53
|
-
|
|
53
|
+
const templates = all.filter(template => template.type === 'block');
|
|
54
|
+
/** @type {Map<string, import('../../foundation/discovery/template-adapter.mjs').DiscoveredTemplate>} */
|
|
55
|
+
const byId = new Map();
|
|
56
|
+
// Exact ids are the fallback. Active replacement aliases override them in a
|
|
57
|
+
// second pass, matching template() regardless of discovery/display order.
|
|
58
|
+
for (const template of templates) byId.set(template.dirName, template);
|
|
59
|
+
for (const template of templates) {
|
|
60
|
+
if (template.replaces != null) byId.set(template.replaces, template);
|
|
61
|
+
}
|
|
62
|
+
for (const [id, template] of byId) {
|
|
63
|
+
blocks.push({...template, dirName: id, kind: 'template'});
|
|
64
|
+
}
|
|
54
65
|
} catch {
|
|
55
66
|
// discovery is best-effort
|
|
56
67
|
}
|
|
@@ -91,7 +102,10 @@ export function formatIssue(issue) {
|
|
|
91
102
|
* @param {string} expression
|
|
92
103
|
* @param {{form?: 'compact'|'outline'|'auto', loose?: boolean, cwd?: string}} [options]
|
|
93
104
|
*/
|
|
94
|
-
export async function analyze(
|
|
105
|
+
export async function analyze(
|
|
106
|
+
expression,
|
|
107
|
+
{form = 'auto', loose = false, cwd = process.cwd()} = {},
|
|
108
|
+
) {
|
|
95
109
|
// Validate inputs in the API (not just the CLI): an empty expression or an
|
|
96
110
|
// unknown --form must error, not silently parse as an empty/compact layout.
|
|
97
111
|
if (typeof expression !== 'string' || expression.trim() === '') {
|
|
@@ -108,9 +122,10 @@ export async function analyze(expression, {form = 'auto', loose = false, cwd = p
|
|
|
108
122
|
ERROR_CODES.ERR_INVALID_OPTION,
|
|
109
123
|
);
|
|
110
124
|
}
|
|
111
|
-
const registry =
|
|
112
|
-
/** @type {
|
|
113
|
-
|
|
125
|
+
const registry =
|
|
126
|
+
/** @type {import('../../foundation/xle/xle-ast').Registry} */ (
|
|
127
|
+
/** @type {unknown} */ (await buildRegistry({cwd}))
|
|
128
|
+
);
|
|
114
129
|
const blocks = await loadBlocks(cwd);
|
|
115
130
|
|
|
116
131
|
/** @type {import('../../foundation/xle/xle-ast').XLEDoc} */
|
|
@@ -120,18 +120,20 @@ export async function layoutExpand(expression, options = {}) {
|
|
|
120
120
|
|
|
121
121
|
let written = null;
|
|
122
122
|
if (targetPath) {
|
|
123
|
-
|
|
123
|
+
// The guard sees the file that will be written, not only its directory:
|
|
124
|
+
// a symlink at that name would otherwise carry the write outside the root.
|
|
125
|
+
const fileTarget = isFilePathArg(targetPath)
|
|
126
|
+
? targetPath
|
|
127
|
+
: path.join(targetPath, `${componentName}.tsx`);
|
|
128
|
+
let filePath;
|
|
124
129
|
try {
|
|
125
|
-
|
|
130
|
+
filePath = assertWithin(fileTarget, cwd, {label: 'layout target path'});
|
|
126
131
|
} catch (err) {
|
|
127
132
|
if (err instanceof PathSafetyError) {
|
|
128
133
|
throw new AstryxError(err.message, undefined, ERROR_CODES.ERR_PATH_TRAVERSAL);
|
|
129
134
|
}
|
|
130
135
|
throw err;
|
|
131
136
|
}
|
|
132
|
-
const filePath = isFilePathArg(targetPath)
|
|
133
|
-
? resolved
|
|
134
|
-
: path.join(resolved, `${componentName}.tsx`);
|
|
135
137
|
fs.mkdirSync(path.dirname(filePath), {recursive: true});
|
|
136
138
|
fs.writeFileSync(filePath, result.code);
|
|
137
139
|
written = path.relative(cwd, filePath);
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @file Path-safety tests for the `layout.expand` write. The file written, not
|
|
5
|
+
* only the directory it lands in, must stay inside the project root.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import {describe, it, expect, beforeAll} from 'vitest';
|
|
9
|
+
import * as fs from 'node:fs';
|
|
10
|
+
import * as os from 'node:os';
|
|
11
|
+
import * as path from 'node:path';
|
|
12
|
+
import {layoutExpand} from '../layout.mjs';
|
|
13
|
+
import {buildRegistry} from '../../../foundation/xle/registry.mjs';
|
|
14
|
+
|
|
15
|
+
const SLOW = 30_000;
|
|
16
|
+
|
|
17
|
+
// The registry imports every component doc on first use; warm it once.
|
|
18
|
+
beforeAll(async () => {
|
|
19
|
+
await buildRegistry();
|
|
20
|
+
}, 120_000);
|
|
21
|
+
|
|
22
|
+
describe('layout.expand — write confinement', () => {
|
|
23
|
+
it('rejects a directory target whose generated file is a symlink leading outside cwd', async () => {
|
|
24
|
+
// Inside the workspace so @astryxdesign/core resolves.
|
|
25
|
+
const cwd = fs.mkdtempSync(path.join(process.cwd(), '.xle-confine-test-'));
|
|
26
|
+
const outside = fs.mkdtempSync(path.join(os.tmpdir(), 'xle-confine-outside-'));
|
|
27
|
+
try {
|
|
28
|
+
const victim = path.join(outside, 'victim.tsx');
|
|
29
|
+
fs.writeFileSync(victim, 'OUTSIDE');
|
|
30
|
+
fs.mkdirSync(path.join(cwd, 'out'));
|
|
31
|
+
fs.symlinkSync(victim, path.join(cwd, 'out', 'GeneratedLayout.tsx'));
|
|
32
|
+
|
|
33
|
+
await expect(
|
|
34
|
+
layoutExpand('V > B', {targetPath: './out', cwd}),
|
|
35
|
+
).rejects.toMatchObject({code: 'ERR_PATH_TRAVERSAL'});
|
|
36
|
+
expect(fs.readFileSync(victim, 'utf-8')).toBe('OUTSIDE');
|
|
37
|
+
} finally {
|
|
38
|
+
fs.rmSync(cwd, {recursive: true, force: true});
|
|
39
|
+
fs.rmSync(outside, {recursive: true, force: true});
|
|
40
|
+
}
|
|
41
|
+
}, SLOW);
|
|
42
|
+
|
|
43
|
+
it('still writes <Name>.tsx into a plain directory target', async () => {
|
|
44
|
+
const cwd = fs.mkdtempSync(path.join(process.cwd(), '.xle-confine-test-'));
|
|
45
|
+
try {
|
|
46
|
+
const result = await layoutExpand('V > B', {targetPath: './out', name: 'Demo', cwd});
|
|
47
|
+
expect(result.data.written).toBe(path.join('out', 'Demo.tsx'));
|
|
48
|
+
expect(fs.existsSync(path.join(cwd, 'out', 'Demo.tsx'))).toBe(true);
|
|
49
|
+
} finally {
|
|
50
|
+
fs.rmSync(cwd, {recursive: true, force: true});
|
|
51
|
+
}
|
|
52
|
+
}, SLOW);
|
|
53
|
+
});
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
12
|
import {buildRegistry} from '../../../foundation/xle/registry.mjs';
|
|
13
|
+
import {MAX_REPEAT} from '../../../foundation/xle/expand.mjs';
|
|
13
14
|
|
|
14
15
|
/**
|
|
15
16
|
* `astryx layout grammar` — the agent cheatsheet, with the alias table
|
|
@@ -50,7 +51,7 @@ NODE ANATOMY Name#id.enum"payload"[attrs]{hint}*N > children
|
|
|
50
51
|
.enum unique enum value of any prop: Bd.success Tx.lg B.primary
|
|
51
52
|
"payload" primary text prop (label/title/heading) or text child: TI"Email" B"Save"
|
|
52
53
|
{hint} kebab-case template/component reference (see TEMPLATE REFERENCING) — NEVER text
|
|
53
|
-
*N / xN repeat (use $ for the counter: Tk"item-$"*3)
|
|
54
|
+
*N / xN repeat, at most ${MAX_REPEAT} copies (use $ for the counter: Tk"item-$"*3)
|
|
54
55
|
trailing ! initial selection for scaffolded state: Tab"Overview"!
|
|
55
56
|
|
|
56
57
|
ATTRS [...] (outline: bare tokens after the name, no brackets)
|
|
@@ -12,6 +12,7 @@ export const doc = {
|
|
|
12
12
|
type: 'function',
|
|
13
13
|
kind: 'api',
|
|
14
14
|
name: 'layoutExpand',
|
|
15
|
+
namespace: 'cli/api',
|
|
15
16
|
displayName: 'layoutExpand()',
|
|
16
17
|
summary: 'Expand a validated layout expression into XDS TSX.',
|
|
17
18
|
description:
|
|
@@ -36,7 +37,7 @@ export const doc = {
|
|
|
36
37
|
name: 'options.targetPath',
|
|
37
38
|
type: 'string',
|
|
38
39
|
description:
|
|
39
|
-
'Write the generated TSX here (validated to stay within cwd). A
|
|
40
|
+
'Write the generated TSX here (validated to stay within cwd). A path that ends in .tsx, .ts, .jsx, .js, .mjs, .cjs, .css, .scss, .json, .md or .html is used as-is; any other path is a directory that gets <name>.tsx. An existing file is replaced. Omit to return the code without writing.',
|
|
40
41
|
},
|
|
41
42
|
{
|
|
42
43
|
name: 'options.form',
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @file The declared return type of `search()` is the canonical SearchResponse.
|
|
5
|
+
* Consumers of `@astryxdesign/cli/api` type-check against it; an `object` entry
|
|
6
|
+
* type erases every result field from their view.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import {createRequire} from 'node:module';
|
|
10
|
+
import * as path from 'node:path';
|
|
11
|
+
import {fileURLToPath} from 'node:url';
|
|
12
|
+
import {describe, expect, it} from 'vitest';
|
|
13
|
+
|
|
14
|
+
const require = createRequire(import.meta.url);
|
|
15
|
+
const ts = require('typescript');
|
|
16
|
+
|
|
17
|
+
const HERE = path.dirname(fileURLToPath(import.meta.url));
|
|
18
|
+
const SEARCH = path.join(HERE, 'search.mjs');
|
|
19
|
+
const TYPES = path.join(HERE, 'search.type.mjs');
|
|
20
|
+
|
|
21
|
+
describe('search() declared return type', () => {
|
|
22
|
+
it('types each result as the canonical SearchResultEntry', () => {
|
|
23
|
+
const program = ts.createProgram([SEARCH, TYPES], {
|
|
24
|
+
allowJs: true,
|
|
25
|
+
noEmit: true,
|
|
26
|
+
skipLibCheck: true,
|
|
27
|
+
types: [],
|
|
28
|
+
module: ts.ModuleKind.NodeNext,
|
|
29
|
+
moduleResolution: ts.ModuleResolutionKind.NodeNext,
|
|
30
|
+
target: ts.ScriptTarget.ES2022,
|
|
31
|
+
});
|
|
32
|
+
const checker = program.getTypeChecker();
|
|
33
|
+
const source = program.getSourceFile(SEARCH);
|
|
34
|
+
/** @param {string} file @param {string} name */
|
|
35
|
+
const exportOf = (file, name) =>
|
|
36
|
+
checker
|
|
37
|
+
.getExportsOfModule(checker.getSymbolAtLocation(program.getSourceFile(file)))
|
|
38
|
+
.find((/** @type {any} */ s) => s.name === name);
|
|
39
|
+
/** @param {any} type @param {string} name */
|
|
40
|
+
const prop = (type, name) =>
|
|
41
|
+
checker.getTypeOfSymbolAtLocation(type.getProperty(name), source);
|
|
42
|
+
/** @param {any} type */
|
|
43
|
+
const names = type => type.getProperties().map((/** @type {any} */ p) => p.name).sort();
|
|
44
|
+
|
|
45
|
+
const fn = checker.getTypeOfSymbolAtLocation(exportOf(SEARCH, 'search'), source);
|
|
46
|
+
const response = checker.getAwaitedType(fn.getCallSignatures()[0].getReturnType());
|
|
47
|
+
const data = prop(response, 'data');
|
|
48
|
+
expect(names(data)).toEqual(['matchCount', 'query', 'results']);
|
|
49
|
+
const entry = checker.getIndexTypeOfType(prop(data, 'results'), ts.IndexKind.Number);
|
|
50
|
+
const canonical = checker.getDeclaredTypeOfSymbol(exportOf(TYPES, 'SearchResultEntry'));
|
|
51
|
+
expect(names(canonical)).toContain('command');
|
|
52
|
+
expect(names(entry)).toEqual(names(canonical));
|
|
53
|
+
}, 30_000);
|
|
54
|
+
});
|
package/api/search/search.d.mts
CHANGED
|
@@ -9,6 +9,13 @@
|
|
|
9
9
|
* @returns {string}
|
|
10
10
|
*/
|
|
11
11
|
export function stem(w: string): string;
|
|
12
|
+
/**
|
|
13
|
+
* Whether two lowercase words are the same word, up to plural and stem form.
|
|
14
|
+
* @param {string} a
|
|
15
|
+
* @param {string} b
|
|
16
|
+
* @returns {boolean}
|
|
17
|
+
*/
|
|
18
|
+
export function sameWord(a: string, b: string): boolean;
|
|
12
19
|
/**
|
|
13
20
|
* Split a query into meaningful content tokens (lowercased, stopwords + very
|
|
14
21
|
* short words removed). Empty for single-word queries (callers fall back to
|
|
@@ -17,6 +24,23 @@ export function stem(w: string): string;
|
|
|
17
24
|
* @returns {string[]}
|
|
18
25
|
*/
|
|
19
26
|
export function tokenizeQuery(term: string): string[];
|
|
27
|
+
/**
|
|
28
|
+
* The first title or heading that holds every word of the query, in order and
|
|
29
|
+
* side by side, or null.
|
|
30
|
+
* @param {string} term - Lowercased full query.
|
|
31
|
+
* @param {string[] | undefined} titles
|
|
32
|
+
* @returns {string | null}
|
|
33
|
+
*/
|
|
34
|
+
export function headingWithPhrase(term: string, titles: string[] | undefined): string | null;
|
|
35
|
+
/**
|
|
36
|
+
* The first title or heading of two words or more that the query holds whole,
|
|
37
|
+
* in order and side by side, or null. A question such as "how do I add dark
|
|
38
|
+
* mode" names the "Dark mode" section outright, around words no title has.
|
|
39
|
+
* @param {string} term - Lowercased full query.
|
|
40
|
+
* @param {string[] | undefined} titles
|
|
41
|
+
* @returns {string | null}
|
|
42
|
+
*/
|
|
43
|
+
export function titleInQuery(term: string, titles: string[] | undefined): string | null;
|
|
20
44
|
/**
|
|
21
45
|
* @param {string} term - Lowercased full query.
|
|
22
46
|
* @param {string[]} tokens - Content tokens from tokenizeQuery(term).
|
|
@@ -42,20 +66,26 @@ export function scoreQuery(term: string, tokens: string[], candidate: Candidate)
|
|
|
42
66
|
* @param {string} term - Lowercased search term.
|
|
43
67
|
* @param {object} candidate
|
|
44
68
|
* @param {string} candidate.name - Primary identifier (component/hook name, topic, template name).
|
|
69
|
+
* @param {string} [candidate.domain] - A component, hook, or template name
|
|
70
|
+
* also matches typed as words: `command palette` is CommandPalette.
|
|
45
71
|
* @param {string[]} [candidate.keywords] - Authored intent (componentsUsed, category words).
|
|
46
72
|
* @param {string[]} [candidate.weakKeywords] - Derived signal (components a page renders).
|
|
47
73
|
* @param {string} [candidate.description]
|
|
48
74
|
* @param {string[]} [candidate.prose] - Extra free-text blobs (doc section text, best practices).
|
|
49
75
|
* @param {string[]} [candidate.guidance] - Usage guidance (features, best practices) — scored a tier below description.
|
|
76
|
+
* @param {{fuzzy?: boolean}} [opts] - `fuzzy`: allow edit-distance (typo) matches. Default true; multi-word queries pass false.
|
|
50
77
|
* @returns {{score: number, reason: string} | null}
|
|
51
78
|
*/
|
|
52
|
-
export function scoreCandidate(term: string, { name, keywords, weakKeywords, description, prose, guidance, }: {
|
|
79
|
+
export function scoreCandidate(term: string, { name, domain, keywords, weakKeywords, description, prose, guidance, }: {
|
|
53
80
|
name: string;
|
|
81
|
+
domain?: string | undefined;
|
|
54
82
|
keywords?: string[] | undefined;
|
|
55
83
|
weakKeywords?: string[] | undefined;
|
|
56
84
|
description?: string | undefined;
|
|
57
85
|
prose?: string[] | undefined;
|
|
58
86
|
guidance?: string[] | undefined;
|
|
87
|
+
}, { fuzzy }?: {
|
|
88
|
+
fuzzy?: boolean;
|
|
59
89
|
}): {
|
|
60
90
|
score: number;
|
|
61
91
|
reason: string;
|
|
@@ -68,22 +98,38 @@ export function scoreCandidate(term: string, { name, keywords, weakKeywords, des
|
|
|
68
98
|
* @param {string} [options.cwd]
|
|
69
99
|
* @param {'component'|'hook'|'doc'|'template'} [options.type] - Restrict to one domain.
|
|
70
100
|
* @param {number} [options.limit] - Max results (default 20).
|
|
71
|
-
* @returns {Promise<
|
|
101
|
+
* @returns {Promise<import('./search.type.mjs').SearchResponse>}
|
|
72
102
|
*/
|
|
73
103
|
export function search(query: string, options?: {
|
|
74
104
|
cwd?: string | undefined;
|
|
75
|
-
type?: "component" | "hook" | "
|
|
105
|
+
type?: "component" | "hook" | "template" | "doc" | undefined;
|
|
76
106
|
limit?: number | undefined;
|
|
77
|
-
}): Promise<
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
107
|
+
}): Promise<import("./search.type.mjs").SearchResponse>;
|
|
108
|
+
export namespace SYNONYMS {
|
|
109
|
+
let dashboard: string[];
|
|
110
|
+
let login: string[];
|
|
111
|
+
let signup: string[];
|
|
112
|
+
let payment: string[];
|
|
113
|
+
let pricing: string[];
|
|
114
|
+
let chat: string[];
|
|
115
|
+
let settings: string[];
|
|
116
|
+
let calendar: string[];
|
|
117
|
+
let table: string[];
|
|
118
|
+
let gallery: string[];
|
|
119
|
+
let hero: string[];
|
|
120
|
+
let form: string[];
|
|
121
|
+
let profile: string[];
|
|
122
|
+
let documentation: string[];
|
|
123
|
+
let navigation: string[];
|
|
124
|
+
}
|
|
85
125
|
/** Valid domain filters for `--type`. */
|
|
86
126
|
export const SEARCH_DOMAINS: string[];
|
|
127
|
+
/**
|
|
128
|
+
* Filler words stripped from multi-word queries so natural-language phrasing
|
|
129
|
+
* ("a page where you can see business stats") ranks on its content words.
|
|
130
|
+
* Exported for `build`, whose page ranker strips the same words.
|
|
131
|
+
*/
|
|
132
|
+
export const STOPWORDS: Set<string>;
|
|
87
133
|
/**
|
|
88
134
|
* A search candidate gathered from one content domain. Extra underscore-
|
|
89
135
|
* prefixed fields carry domain-specific payload used only by {@link toResult}.
|
|
@@ -96,8 +142,39 @@ export type Candidate = {
|
|
|
96
142
|
description?: string | undefined;
|
|
97
143
|
prose?: string[] | undefined;
|
|
98
144
|
guidance?: string[] | undefined;
|
|
145
|
+
/**
|
|
146
|
+
* - A doc's title and the headings inside it:
|
|
147
|
+
* the lines a reader scans to pick it. The whole query standing in one of
|
|
148
|
+
* them, or one of them standing whole in the query, is a top-tier match.
|
|
149
|
+
*/
|
|
150
|
+
titles?: string[] | undefined;
|
|
99
151
|
_import?: string | undefined;
|
|
100
152
|
_title?: string | undefined;
|
|
153
|
+
/**
|
|
154
|
+
* - A doc result's topic or docs-tree route.
|
|
155
|
+
*/
|
|
156
|
+
_topic?: string | undefined;
|
|
157
|
+
/**
|
|
158
|
+
* - A doc result's section key, when it is one section.
|
|
159
|
+
*/
|
|
160
|
+
_section?: string | undefined;
|
|
161
|
+
/**
|
|
162
|
+
* - The command that reads exactly this doc part.
|
|
163
|
+
*/
|
|
164
|
+
_command?: string | undefined;
|
|
165
|
+
/**
|
|
166
|
+
* - The command that opens the level above a doc
|
|
167
|
+
* part: its topic's section list, or the docs-tree namespace it sits in.
|
|
168
|
+
*/
|
|
169
|
+
_parent?: string | undefined;
|
|
170
|
+
/**
|
|
171
|
+
* - The npm package that authored a docs-tree
|
|
172
|
+
* doc part. Flat topics carry none: an extension's sections can come from
|
|
173
|
+
* another package.
|
|
174
|
+
*/
|
|
175
|
+
_package?: string | undefined;
|
|
101
176
|
_displayName?: string | undefined;
|
|
102
|
-
_kind?: "
|
|
177
|
+
_kind?: "page" | "block" | undefined;
|
|
178
|
+
_resultName?: string | undefined;
|
|
179
|
+
_commandName?: string | undefined;
|
|
103
180
|
};
|
|
@@ -11,6 +11,7 @@ export const doc = {
|
|
|
11
11
|
type: 'function',
|
|
12
12
|
kind: 'api',
|
|
13
13
|
name: 'search',
|
|
14
|
+
namespace: 'cli/api',
|
|
14
15
|
displayName: 'search()',
|
|
15
16
|
summary:
|
|
16
17
|
'Unified ranked search across components, hooks, docs, and templates.',
|
|
@@ -46,14 +47,15 @@ export const doc = {
|
|
|
46
47
|
{
|
|
47
48
|
name: 'options.cwd',
|
|
48
49
|
type: 'string',
|
|
49
|
-
description:
|
|
50
|
+
description:
|
|
51
|
+
"Directory to resolve @astryxdesign/core from. A docs-only search (`type: 'doc'`) does not need it, and a search with no `type` covers the docs alone when core is missing.",
|
|
50
52
|
},
|
|
51
53
|
],
|
|
52
54
|
returns: [
|
|
53
55
|
{
|
|
54
56
|
type: 'search',
|
|
55
57
|
description:
|
|
56
|
-
'The query echoed back, `matchCount` (how many candidates matched in total, before `limit`), plus a ranked SearchResultEntry[] bounded by `limit
|
|
58
|
+
'The query echoed back, `matchCount` (how many candidates matched in total, before `limit`), plus a ranked SearchResultEntry[] bounded by `limit`: each has domain, name, score, reason, description, and follow-up command, plus `import` for components and hooks, `title` for docs, and `displayName` and `kind` for templates. A doc result is the smallest part that answers: one section (with `section`, and a command that reads only it), one docs-tree route, or a topic, whose command lists its sections. `parent` is the command that opens the level above it: the section list of its topic, the namespace a tree node sits in, the Unorganized level for a flat topic, or the topic list for a top-level namespace. Every doc result also carries `package`, the npm package that authored it (for a section, the package its file came from).',
|
|
57
59
|
},
|
|
58
60
|
],
|
|
59
61
|
throws: [
|
|
@@ -61,6 +63,10 @@ export const doc = {
|
|
|
61
63
|
code: 'ERR_INVALID_ARGUMENT',
|
|
62
64
|
when: 'the query is empty, --type is unknown, or --limit is not a positive integer',
|
|
63
65
|
},
|
|
66
|
+
{
|
|
67
|
+
code: 'ERR_CORE_NOT_FOUND',
|
|
68
|
+
when: '@astryxdesign/core cannot be found from the cwd, and `type` names a domain that reads it: `component`, `hook`, or `template`',
|
|
69
|
+
},
|
|
64
70
|
],
|
|
65
71
|
examples: [
|
|
66
72
|
{label: 'Find a component', code: "const r = await search('button');"},
|