@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
|
@@ -1,389 +0,0 @@
|
|
|
1
|
-
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* @file Colocated tests for the `search` leaf (api/search/search.mjs), run
|
|
5
|
-
* against the real @astryxdesign/core registry. `search` had no api-level tests;
|
|
6
|
-
* this locks the envelope, ranking invariants, the `--type`/limit handling, and
|
|
7
|
-
* the error paths.
|
|
8
|
-
*
|
|
9
|
-
* The API validates its own inputs (not just the CLI): a non-positive/non-integer
|
|
10
|
-
* `limit`, an empty query, and a bad `--type` all throw AstryxError with the
|
|
11
|
-
* ERR_INVALID_ARGUMENT code, so a direct `@astryxdesign/cli/api` caller gets the
|
|
12
|
-
* same contract as `astryx search` on the command line.
|
|
13
|
-
*
|
|
14
|
-
* The last describe block covers integration-contributed components, using the
|
|
15
|
-
* same temp-consumer harness as template-integration.test.mjs. Before this,
|
|
16
|
-
* `search`/`build` only ever scanned @astryxdesign/core — an integration's own
|
|
17
|
-
* components were invisible to both, even though `component --list` and
|
|
18
|
-
* `component <Name>` already resolved them. The two discovery paths silently
|
|
19
|
-
* disagreed.
|
|
20
|
-
*/
|
|
21
|
-
|
|
22
|
-
import {describe, it, expect} from 'vitest';
|
|
23
|
-
import * as fs from 'node:fs';
|
|
24
|
-
import * as path from 'node:path';
|
|
25
|
-
import {fileURLToPath} from 'node:url';
|
|
26
|
-
import {
|
|
27
|
-
search,
|
|
28
|
-
scoreCandidate,
|
|
29
|
-
scoreQuery,
|
|
30
|
-
tokenizeQuery,
|
|
31
|
-
SEARCH_DOMAINS,
|
|
32
|
-
} from './search.mjs';
|
|
33
|
-
|
|
34
|
-
const REPO = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../../../..');
|
|
35
|
-
const cwd = REPO;
|
|
36
|
-
const SLOW = 30_000;
|
|
37
|
-
|
|
38
|
-
describe('search leaf — envelope + ranking', () => {
|
|
39
|
-
it('returns a `search` envelope with query + results', async () => {
|
|
40
|
-
const r = await search('button', {cwd});
|
|
41
|
-
expect(r.type).toBe('search');
|
|
42
|
-
expect(r.data.query).toBe('button');
|
|
43
|
-
expect(Array.isArray(r.data.results)).toBe(true);
|
|
44
|
-
expect(r.data.results.length).toBeGreaterThan(0);
|
|
45
|
-
}, SLOW);
|
|
46
|
-
|
|
47
|
-
it('keeps tokenizer coverage out of the public result shape', async () => {
|
|
48
|
-
const r = await search('table of contents', {cwd});
|
|
49
|
-
expect(r.data.results.length).toBeGreaterThan(0);
|
|
50
|
-
for (const result of r.data.results) {
|
|
51
|
-
expect(result).not.toHaveProperty('matchedTerms');
|
|
52
|
-
expect(result).not.toHaveProperty('queryTerms');
|
|
53
|
-
}
|
|
54
|
-
}, SLOW);
|
|
55
|
-
|
|
56
|
-
it('returns an empty result set (not an error) for a no-match query', async () => {
|
|
57
|
-
const r = await search('zzznomatch99', {cwd});
|
|
58
|
-
expect(r.type).toBe('search');
|
|
59
|
-
expect(r.data.results).toEqual([]);
|
|
60
|
-
}, SLOW);
|
|
61
|
-
|
|
62
|
-
it('defaults to at most 20 results', async () => {
|
|
63
|
-
const r = await search('button', {cwd});
|
|
64
|
-
expect(r.data.results.length).toBeLessThanOrEqual(20);
|
|
65
|
-
}, SLOW);
|
|
66
|
-
|
|
67
|
-
it('caps results to a positive limit', async () => {
|
|
68
|
-
const r = await search('button', {cwd, limit: 2});
|
|
69
|
-
expect(r.data.results.length).toBeLessThanOrEqual(2);
|
|
70
|
-
}, SLOW);
|
|
71
|
-
});
|
|
72
|
-
|
|
73
|
-
describe('search leaf — matchCount is the total, not the cap', () => {
|
|
74
|
-
it('reports every match while `results` stays bounded by the limit', async () => {
|
|
75
|
-
// The regression: `matchCount` used to be `results.length`, so a query
|
|
76
|
-
// matching 57 things reported 20 — the cap read back as the answer. Any
|
|
77
|
-
// consumer counting matches (the recorded run, a caller paginating) then
|
|
78
|
-
// could not tell a capped answer from an exactly-cap-sized one.
|
|
79
|
-
const capped = await search('button', {cwd, limit: 2});
|
|
80
|
-
expect(capped.data.results.length).toBe(2);
|
|
81
|
-
expect(capped.data.matchCount).toBeGreaterThan(2);
|
|
82
|
-
|
|
83
|
-
// Same query, no meaningful cap: the count is stable across limits, which
|
|
84
|
-
// is what makes it a count of MATCHES rather than of what was returned.
|
|
85
|
-
const full = await search('button', {cwd, limit: 500});
|
|
86
|
-
expect(full.data.matchCount).toBe(capped.data.matchCount);
|
|
87
|
-
expect(full.data.results.length).toBe(full.data.matchCount);
|
|
88
|
-
}, SLOW);
|
|
89
|
-
|
|
90
|
-
it('reports 0 for a no-match query', async () => {
|
|
91
|
-
const r = await search('zzznomatch99', {cwd});
|
|
92
|
-
expect(r.data.matchCount).toBe(0);
|
|
93
|
-
}, SLOW);
|
|
94
|
-
|
|
95
|
-
it('counts only the requested domain under --type', async () => {
|
|
96
|
-
const all = await search('button', {cwd, limit: 500});
|
|
97
|
-
const components = await search('button', {
|
|
98
|
-
cwd,
|
|
99
|
-
type: 'component',
|
|
100
|
-
limit: 500,
|
|
101
|
-
});
|
|
102
|
-
expect(components.data.matchCount).toBe(components.data.results.length);
|
|
103
|
-
expect(components.data.matchCount).toBeLessThanOrEqual(all.data.matchCount);
|
|
104
|
-
}, SLOW);
|
|
105
|
-
});
|
|
106
|
-
|
|
107
|
-
describe('search leaf — --type filter', () => {
|
|
108
|
-
it('restricts results to the requested domain', async () => {
|
|
109
|
-
const r = await search('button', {cwd, type: 'component'});
|
|
110
|
-
expect(r.data.results.every(x => x.domain === 'component')).toBe(true);
|
|
111
|
-
}, SLOW);
|
|
112
|
-
|
|
113
|
-
it('exposes the valid domain list', () => {
|
|
114
|
-
expect(SEARCH_DOMAINS).toEqual(expect.arrayContaining(['component', 'hook', 'doc', 'template']));
|
|
115
|
-
});
|
|
116
|
-
});
|
|
117
|
-
|
|
118
|
-
describe('search leaf — exact keyword phrase outranks incidental token matches (issue #5239)', () => {
|
|
119
|
-
it('surfaces Outline for its own declared keyword "table of contents", ranked first', async () => {
|
|
120
|
-
// Before the fix, "table" and "contents" each separately matched dozens
|
|
121
|
-
// of unrelated Table-related templates by coincidence, and their
|
|
122
|
-
// combined token-sum score outranked Outline's single exact match,
|
|
123
|
-
// pushing it out of the results entirely at the default limit.
|
|
124
|
-
const r = await search('table of contents', {cwd});
|
|
125
|
-
expect(r.data.results[0]?.name).toBe('Outline');
|
|
126
|
-
}, SLOW);
|
|
127
|
-
|
|
128
|
-
it('surfaces Outline for its own declared keyword "heading navigation", ranked first', async () => {
|
|
129
|
-
const r = await search('heading navigation', {cwd});
|
|
130
|
-
expect(r.data.results[0]?.name).toBe('Outline');
|
|
131
|
-
}, SLOW);
|
|
132
|
-
|
|
133
|
-
it('preserves query coverage metadata on the promoted exact phrase', () => {
|
|
134
|
-
const query = 'table of contents';
|
|
135
|
-
const tokens = tokenizeQuery(query);
|
|
136
|
-
expect(
|
|
137
|
-
scoreQuery(query, tokens, {
|
|
138
|
-
name: 'Outline',
|
|
139
|
-
keywords: [query],
|
|
140
|
-
}),
|
|
141
|
-
).toMatchObject({matched: tokens.length, total: tokens.length});
|
|
142
|
-
});
|
|
143
|
-
|
|
144
|
-
it('still returns no results for a nonsense query (the fix does not loosen matching)', async () => {
|
|
145
|
-
const r = await search('zzzzqqqx', {cwd});
|
|
146
|
-
expect(r.data.results).toEqual([]);
|
|
147
|
-
}, SLOW);
|
|
148
|
-
});
|
|
149
|
-
|
|
150
|
-
describe('search leaf — error paths (pinned)', () => {
|
|
151
|
-
it('throws ERR_INVALID_ARGUMENT when the query is empty/whitespace', async () => {
|
|
152
|
-
await expect(search(' ', {cwd})).rejects.toMatchObject({
|
|
153
|
-
code: 'ERR_INVALID_ARGUMENT',
|
|
154
|
-
message: expect.stringMatching(/query is required/i),
|
|
155
|
-
});
|
|
156
|
-
}, SLOW);
|
|
157
|
-
|
|
158
|
-
it('throws ERR_INVALID_ARGUMENT for an unknown --type', async () => {
|
|
159
|
-
await expect(
|
|
160
|
-
search('button', {cwd, type: /** @type {any} */ ('bogus')}),
|
|
161
|
-
).rejects.toMatchObject({code: 'ERR_INVALID_ARGUMENT'});
|
|
162
|
-
}, SLOW);
|
|
163
|
-
});
|
|
164
|
-
|
|
165
|
-
describe('search leaf — limit validation (API matches the CLI contract)', () => {
|
|
166
|
-
it('throws ERR_INVALID_ARGUMENT for a limit of 0 (no longer returns everything)', async () => {
|
|
167
|
-
await expect(search('button', {cwd, limit: 0})).rejects.toMatchObject({
|
|
168
|
-
code: 'ERR_INVALID_ARGUMENT',
|
|
169
|
-
});
|
|
170
|
-
}, SLOW);
|
|
171
|
-
|
|
172
|
-
it('throws ERR_INVALID_ARGUMENT for a negative limit', async () => {
|
|
173
|
-
await expect(search('button', {cwd, limit: -5})).rejects.toMatchObject({
|
|
174
|
-
code: 'ERR_INVALID_ARGUMENT',
|
|
175
|
-
});
|
|
176
|
-
}, SLOW);
|
|
177
|
-
|
|
178
|
-
it('throws ERR_INVALID_ARGUMENT for a non-integer limit', async () => {
|
|
179
|
-
await expect(search('button', {cwd, limit: 2.5})).rejects.toMatchObject({
|
|
180
|
-
code: 'ERR_INVALID_ARGUMENT',
|
|
181
|
-
});
|
|
182
|
-
}, SLOW);
|
|
183
|
-
});
|
|
184
|
-
|
|
185
|
-
describe('search leaf — integration components', () => {
|
|
186
|
-
/**
|
|
187
|
-
* A minimal consumer project: a stub `@astryxdesign/core` (so `findCoreDir`
|
|
188
|
-
* resolves without needing the real package) plus an installed
|
|
189
|
-
* `@acme/widgets` integration that contributes one component.
|
|
190
|
-
*/
|
|
191
|
-
function makeConsumerWithIntegrationComponent() {
|
|
192
|
-
const dir = fs.mkdtempSync(path.join(process.cwd(), '.astryx-search-it-'));
|
|
193
|
-
fs.writeFileSync(path.join(dir, 'package.json'), JSON.stringify({name: 'consumer'}));
|
|
194
|
-
fs.writeFileSync(
|
|
195
|
-
path.join(dir, 'astryx.config.mjs'),
|
|
196
|
-
`export default { integrations: ['@acme/widgets'] };\n`,
|
|
197
|
-
);
|
|
198
|
-
|
|
199
|
-
// Stub core: just needs to exist with an (empty) src/ so discoverComponents
|
|
200
|
-
// doesn't throw. Its own component list is irrelevant to this test.
|
|
201
|
-
const coreDir = path.join(dir, 'node_modules', '@astryxdesign', 'core');
|
|
202
|
-
fs.mkdirSync(path.join(coreDir, 'src'), {recursive: true});
|
|
203
|
-
|
|
204
|
-
const widgetsDir = path.join(dir, 'node_modules', '@acme', 'widgets');
|
|
205
|
-
fs.mkdirSync(path.join(widgetsDir, 'components'), {recursive: true});
|
|
206
|
-
fs.writeFileSync(
|
|
207
|
-
path.join(widgetsDir, 'package.json'),
|
|
208
|
-
JSON.stringify({name: '@acme/widgets', version: '1.0.0'}),
|
|
209
|
-
);
|
|
210
|
-
fs.writeFileSync(
|
|
211
|
-
path.join(widgetsDir, 'astryx.integration.mjs'),
|
|
212
|
-
`export default { components: './components' };\n`,
|
|
213
|
-
);
|
|
214
|
-
fs.writeFileSync(
|
|
215
|
-
path.join(widgetsDir, 'components', 'FancyGizmo.doc.mjs'),
|
|
216
|
-
`export const docs = {
|
|
217
|
-
name: 'FancyGizmo',
|
|
218
|
-
keywords: ['gizmo', 'widget'],
|
|
219
|
-
usage: {description: 'A fancy gizmo widget.'},
|
|
220
|
-
};\n`,
|
|
221
|
-
);
|
|
222
|
-
|
|
223
|
-
return dir;
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
it('includes a component contributed by a configured integration', async () => {
|
|
227
|
-
const dir = makeConsumerWithIntegrationComponent();
|
|
228
|
-
try {
|
|
229
|
-
const r = await search('gizmo', {cwd: dir, type: 'component'});
|
|
230
|
-
expect(r.data.results.some(x => x.name === 'FancyGizmo')).toBe(true);
|
|
231
|
-
} finally {
|
|
232
|
-
fs.rmSync(dir, {recursive: true, force: true});
|
|
233
|
-
}
|
|
234
|
-
}, SLOW);
|
|
235
|
-
|
|
236
|
-
it('reports the contributing package as the import hint', async () => {
|
|
237
|
-
const dir = makeConsumerWithIntegrationComponent();
|
|
238
|
-
try {
|
|
239
|
-
const r = await search('FancyGizmo', {cwd: dir, type: 'component'});
|
|
240
|
-
const hit = r.data.results.find(x => x.name === 'FancyGizmo');
|
|
241
|
-
expect(hit?.import).toBe('@acme/widgets');
|
|
242
|
-
} finally {
|
|
243
|
-
fs.rmSync(dir, {recursive: true, force: true});
|
|
244
|
-
}
|
|
245
|
-
}, SLOW);
|
|
246
|
-
});
|
|
247
|
-
|
|
248
|
-
describe('search scoring — multi-token aggregation is monotonic', () => {
|
|
249
|
-
/**
|
|
250
|
-
* @param {string} q
|
|
251
|
-
* @param {object} candidate
|
|
252
|
-
* @returns {number}
|
|
253
|
-
*/
|
|
254
|
-
const score = (q, candidate) => scoreQuery(q, tokenizeQuery(q), candidate)?.score ?? 0;
|
|
255
|
-
|
|
256
|
-
it('ranks matching both terms above matching only the stronger one', () => {
|
|
257
|
-
// The shipped regression: scoring averaged over MATCHED tokens, so the
|
|
258
|
-
// weaker second hit pulled the mean down further than the coverage bonus
|
|
259
|
-
// pushed it up. `build "file browser"` put two form wizards that matched
|
|
260
|
-
// only "file" (98) above the actual file browser that matched both (97),
|
|
261
|
-
// and 98 clears the confident-match gate.
|
|
262
|
-
const partial = {name: 'form-wizard-vertical', keywords: ['file']};
|
|
263
|
-
const complete = {
|
|
264
|
-
name: 'file-explorer',
|
|
265
|
-
keywords: ['file'],
|
|
266
|
-
description: 'Column browser for nested folders',
|
|
267
|
-
};
|
|
268
|
-
expect(score('file browser', complete)).toBeGreaterThan(score('file browser', partial));
|
|
269
|
-
});
|
|
270
|
-
|
|
271
|
-
it('never scores a superset of matched terms below a subset', () => {
|
|
272
|
-
const subset = {name: 'zzz-none', keywords: ['alpha']};
|
|
273
|
-
const supersets = [
|
|
274
|
-
{name: 'zzz-none', keywords: ['alpha'], description: 'beta things'},
|
|
275
|
-
{name: 'zzz-none', keywords: ['alpha', 'beta']},
|
|
276
|
-
{name: 'zzz-none', keywords: ['alpha'], weakKeywords: ['beta']},
|
|
277
|
-
];
|
|
278
|
-
for (const superset of supersets) {
|
|
279
|
-
expect(score('alpha beta', superset)).toBeGreaterThanOrEqual(score('alpha beta', subset));
|
|
280
|
-
}
|
|
281
|
-
});
|
|
282
|
-
|
|
283
|
-
it('still scores a verbose prompt on the concepts it did hit', () => {
|
|
284
|
-
// Guards the reason the mean was used: a long prompt matching one concept
|
|
285
|
-
// strongly must not be crushed by dividing across every query token.
|
|
286
|
-
const candidate = {name: 'kanban', keywords: ['kanban']};
|
|
287
|
-
expect(score('i need a kanban somewhere in this rambling request', candidate))
|
|
288
|
-
.toBeGreaterThanOrEqual(90);
|
|
289
|
-
});
|
|
290
|
-
});
|
|
291
|
-
|
|
292
|
-
describe('search scoring — derived keywords rank below authored ones', () => {
|
|
293
|
-
it('scores an authored keyword above a derived one', () => {
|
|
294
|
-
const authored = scoreCandidate('dialog', {name: 'x', keywords: ['Dialog']});
|
|
295
|
-
const derived = scoreCandidate('dialog', {name: 'x', weakKeywords: ['Dialog']});
|
|
296
|
-
expect(authored?.score).toBe(90);
|
|
297
|
-
expect(derived?.score).toBe(60);
|
|
298
|
-
});
|
|
299
|
-
|
|
300
|
-
it('keeps one incidental derived match below the confident-match gate', () => {
|
|
301
|
-
// PAGE_DIRECT in api/build/kit is 95: at full keyword strength a page that
|
|
302
|
-
// renders one of everything got a 90-point shot per component and was
|
|
303
|
-
// returned as a confident match for queries it had nothing to do with.
|
|
304
|
-
const derived = scoreCandidate('dialog', {name: 'x', weakKeywords: ['Dialog']});
|
|
305
|
-
expect(derived?.score).toBeLessThan(95);
|
|
306
|
-
});
|
|
307
|
-
|
|
308
|
-
it('still surfaces a derived match above the page floor', () => {
|
|
309
|
-
// PAGE_FLOOR is 50 — weakening the signal must not make it invisible.
|
|
310
|
-
const derived = scoreCandidate('dialog', {name: 'x', weakKeywords: ['Dialog']});
|
|
311
|
-
expect(derived?.score).toBeGreaterThanOrEqual(50);
|
|
312
|
-
});
|
|
313
|
-
|
|
314
|
-
it('explains a derived hit as something the template renders', () => {
|
|
315
|
-
const derived = scoreCandidate('dialog', {name: 'x', weakKeywords: ['Dialog']});
|
|
316
|
-
expect(derived?.reason).toMatch(/renders Dialog/);
|
|
317
|
-
});
|
|
318
|
-
});
|
|
319
|
-
|
|
320
|
-
describe('search — usage guidance is indexed, a tier below description', () => {
|
|
321
|
-
// The vocabulary a reader types usually lives in a component's guidance, not
|
|
322
|
-
// in its one-line description. Banner calls itself "a persistent message";
|
|
323
|
-
// only its best practices name "caution", "problems", "form errors". Before
|
|
324
|
-
// this, none of those words found it.
|
|
325
|
-
const banner = {
|
|
326
|
-
name: 'Banner',
|
|
327
|
-
keywords: ['alert', 'notification'],
|
|
328
|
-
description: 'A persistent message shown above content.',
|
|
329
|
-
guidance: [
|
|
330
|
-
'Pick a status that matches the message: info for updates, warning for caution.',
|
|
331
|
-
'Use error for problems the reader must resolve before continuing.',
|
|
332
|
-
],
|
|
333
|
-
};
|
|
334
|
-
|
|
335
|
-
it('finds a term that appears ONLY in guidance', () => {
|
|
336
|
-
// Red before this change: guidance was never read, so this scored null.
|
|
337
|
-
const hit = scoreCandidate('caution', banner);
|
|
338
|
-
expect(hit).not.toBeNull();
|
|
339
|
-
expect(hit?.reason).toMatch(/guidance mentions "caution"/);
|
|
340
|
-
});
|
|
341
|
-
|
|
342
|
-
it('scores guidance BELOW description, so a component about X outranks one that merely mentions X', () => {
|
|
343
|
-
const own = scoreCandidate('persistent', banner);
|
|
344
|
-
const mention = scoreCandidate('caution', banner);
|
|
345
|
-
expect(own?.score).toBe(50);
|
|
346
|
-
expect(mention?.score).toBe(45);
|
|
347
|
-
expect(mention.score).toBeLessThan(own.score);
|
|
348
|
-
});
|
|
349
|
-
|
|
350
|
-
it('never lets guidance outrank a name or keyword hit', () => {
|
|
351
|
-
expect(scoreCandidate('banner', banner)?.score).toBe(100);
|
|
352
|
-
expect(scoreCandidate('notification', banner)?.score).toBe(90);
|
|
353
|
-
});
|
|
354
|
-
|
|
355
|
-
it('prefers the stronger signal when a term is in both description and guidance', () => {
|
|
356
|
-
const both = scoreCandidate('message', banner);
|
|
357
|
-
expect(both?.score).toBe(50);
|
|
358
|
-
expect(both?.reason).toMatch(/description mentions/);
|
|
359
|
-
});
|
|
360
|
-
|
|
361
|
-
it('stays below MIN_TOKEN_SCORE, so guidance never counts as a matched CONCEPT', () => {
|
|
362
|
-
// Measured regression this prevents: counting guidance as a matched term
|
|
363
|
-
// moved `nested menu` from SideNav to List, and `explain why a field is
|
|
364
|
-
// required` from Field to TextInput — in both cases a component whose
|
|
365
|
-
// guidance happens to mention the other word displaced the real answer.
|
|
366
|
-
// Guidance decides single-word queries; it must not win multi-word ones on
|
|
367
|
-
// breadth. Same reason weakKeywords are capped.
|
|
368
|
-
expect(scoreCandidate('caution', banner)?.score).toBeLessThan(50);
|
|
369
|
-
// Both words are in this candidate's guidance and nowhere else, so if
|
|
370
|
-
// guidance counted as a concept this would come back as a 2/2 match.
|
|
371
|
-
const multi = scoreQuery('caution problems', tokenizeQuery('caution problems'), banner);
|
|
372
|
-
expect(multi).toBeNull();
|
|
373
|
-
});
|
|
374
|
-
|
|
375
|
-
it('lets a real description hit still win the multi-word pass', () => {
|
|
376
|
-
// The floor must exclude guidance without muting the tiers above it.
|
|
377
|
-
const hit = scoreQuery('persistent message', tokenizeQuery('persistent message'), banner);
|
|
378
|
-
expect(hit?.reason).toMatch(/matches 2\/2 terms/);
|
|
379
|
-
});
|
|
380
|
-
|
|
381
|
-
it('tolerates the object-shaped bestPractices entries core actually ships', () => {
|
|
382
|
-
// Core writes `{guidance: true, description: '...'}`, not plain strings.
|
|
383
|
-
const hit = scoreCandidate('resolve', {
|
|
384
|
-
name: 'X',
|
|
385
|
-
guidance: ['Use error for problems the reader must resolve.'],
|
|
386
|
-
});
|
|
387
|
-
expect(hit?.score).toBe(45);
|
|
388
|
-
});
|
|
389
|
-
});
|