···1010const route = useRoute()
1111const router = useRouter()
12121313-// Search provider
1414-const { isAlgolia } = useSearchProvider()
1313+const { searchProvider } = useSearchProvider()
1414+const searchProviderValue = computed(() => {
1515+ const p = normalizeSearchParam(route.query.p)
1616+ if (p === 'npm' || searchProvider.value === 'npm') return 'npm'
1717+ return 'algolia'
1818+})
15191620// Preferences (persisted to localStorage)
1721const {
···2933 query: {
3034 ...route.query,
3135 page: page > 1 ? page : undefined,
3636+ p: searchProviderValue.value === 'npm' ? 'npm' : undefined,
3237 },
3338 })
3439}, 500)
···126131127132// Disable sort keys the current provider can't meaningfully sort by
128133const disabledSortKeys = computed<SortKey[]>(() => {
129129- const supported = PROVIDER_SORT_KEYS[isAlgolia.value ? 'algolia' : 'npm']
134134+ const supported = PROVIDER_SORT_KEYS[searchProviderValue.value]
130135 return ALL_SORT_KEYS.filter(k => !supported.has(k))
131136})
132137···168173 // When sorting by something other than relevance, fetch a large batch
169174 // so client-side sorting operates on a meaningful pool of matching results
170175 if (!isRelevanceSort.value) {
171171- const cap = isAlgolia.value ? EAGER_LOAD_SIZE.algolia : EAGER_LOAD_SIZE.npm
176176+ const cap = EAGER_LOAD_SIZE[searchProviderValue.value]
172177 return Math.max(base, cap)
173178 }
174179 return base
175180})
176181177182// Reset to relevance sort when switching to a provider that doesn't support the current sort key
178178-watch(isAlgolia, algolia => {
183183+watch(searchProviderValue, provider => {
179184 const { key } = parseSortOption(sortOption.value)
180180- const supported = PROVIDER_SORT_KEYS[algolia ? 'algolia' : 'npm']
185185+ const supported = PROVIDER_SORT_KEYS[provider]
181186 if (!supported.has(key)) {
182187 sortOption.value = 'relevance-desc'
183188 }
···195200 packageAvailability,
196201} = useSearch(
197202 query,
203203+ searchProviderValue,
198204 () => ({
199205 size: requestedSize.value,
200206 }),
+2-2
test/e2e/interactions.spec.ts
···6868 await page.keyboard.press('ArrowUp')
69697070 // Enter navigates to the selected result
7171- // URL is /package/vue not /vue
7171+ // URL is /package/vue or /org/vue or /user/vue. Not /vue
7272 await page.keyboard.press('Enter')
7373- await expect(page).toHaveURL(/\/package\/vue/)
7373+ await expect(page).toHaveURL(/\/(package|org|user)\/vue/)
7474 })
75757676 test('/search?q=vue → "/" focuses the search input from results', async ({ page, goto }) => {