Skip to content

Commit

Permalink
Clean up router
Browse files Browse the repository at this point in the history
  • Loading branch information
ai committed Jan 17, 2024
1 parent 7b0b914 commit da7d879
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 29 deletions.
30 changes: 15 additions & 15 deletions core/router.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,8 @@ export interface Routes {

export type RouteName = keyof Routes

export type AppRoute<Name extends RouteName = RouteName> = Name extends string
? { params: Routes[Name]; redirect: boolean; route: Name }
export type Route<Name extends RouteName = RouteName> = Name extends string
? { params: Routes[Name]; redirect?: boolean; route: Name }
: never

type StringParams<Object> = {
Expand All @@ -41,31 +41,31 @@ export type BaseRoute<Name extends RouteName = RouteName> = Name extends string

export type BaseRouter = ReadableAtom<BaseRoute | undefined>

const GUEST = new Set<AppRoute['route']>(['start', 'signin'])
const GUEST = new Set<Route['route']>(['start', 'signin'])

const SETTINGS = new Set<AppRoute['route']>([
const SETTINGS = new Set<Route['route']>([
'interface',
'profile',
'about',
'download'
])

const ORGANIZE = new Set<AppRoute['route']>(['add', 'categories'])
const ORGANIZE = new Set<Route['route']>(['add', 'categories'])

function redirect<Name extends keyof Routes>(
route: Name,
params: Routes[Name]
): AppRoute {
): Route {
// @ts-expect-error Too complex types
return { params, redirect: true, route }
}

function open<Name extends keyof Routes>(
route: Name,
params: Routes[Name]
): AppRoute {
): Route {
// @ts-expect-error Too complex types
return { params, redirect: false, route }
return { params, route }
}

function isNumber(value: number | string): boolean {
Expand All @@ -77,7 +77,7 @@ function getRoute(
user: string | undefined,
withFeeds: boolean | undefined,
fast: FastCategoriesValue
): AppRoute {
): Route {
if (!page) {
return open('notFound', {})
} else if (user) {
Expand Down Expand Up @@ -121,7 +121,7 @@ function getRoute(
return open(page.route, page.params)
}

export let router: ReadableAtom<AppRoute>
export let router: ReadableAtom<Route>

onEnvironment(({ baseRouter }) => {
router = computed(
Expand All @@ -132,22 +132,22 @@ onEnvironment(({ baseRouter }) => {
)
})

export function isFastRoute(route: AppRoute): boolean {
export function isFastRoute(route: Route): boolean {
return route.route === 'fast'
}

export function isSlowRoute(route: AppRoute): boolean {
export function isSlowRoute(route: Route): boolean {
return route.route === 'slowAll'
}

export function isGuestRoute(route: AppRoute): boolean {
export function isGuestRoute(route: Route): boolean {
return GUEST.has(route.route)
}

export function isSettingsRoute(route: AppRoute): boolean {
export function isSettingsRoute(route: Route): boolean {
return SETTINGS.has(route.route)
}

export function isOrganizeRoute(route: AppRoute): boolean {
export function isOrganizeRoute(route: Route): boolean {
return ORGANIZE.has(route.route)
}
12 changes: 0 additions & 12 deletions core/test/router.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@ test('opens 404', () => {
setBaseRoute(undefined)
deepStrictEqual(router.get(), {
params: {},
redirect: false,
route: 'notFound'
})
})
Expand All @@ -46,21 +45,18 @@ test('transforms routers for guest', () => {
setBaseRoute({ params: {}, route: 'home' })
deepStrictEqual(router.get(), {
params: {},
redirect: false,
route: 'start'
})

setBaseRoute({ params: {}, route: 'slowAll' })
deepStrictEqual(router.get(), {
params: {},
redirect: false,
route: 'start'
})

setBaseRoute({ params: {}, route: 'signin' })
deepStrictEqual(router.get(), {
params: {},
redirect: false,
route: 'signin'
})
})
Expand All @@ -77,7 +73,6 @@ test('transforms routers for users', () => {
setBaseRoute({ params: { category: 'general' }, route: 'fast' })
deepStrictEqual(router.get(), {
params: { category: 'general' },
redirect: false,
route: 'fast'
})

Expand All @@ -98,7 +93,6 @@ test('transforms routers for users', () => {
userId.set(undefined)
deepStrictEqual(router.get(), {
params: {},
redirect: false,
route: 'signin'
})
})
Expand Down Expand Up @@ -155,7 +149,6 @@ test('transforms routers to first fast category', async () => {
setBaseRoute({ params: {}, route: 'fast' })
deepStrictEqual(router.get(), {
params: {},
redirect: false,
route: 'fast'
})

Expand Down Expand Up @@ -221,14 +214,12 @@ test('converts since to number', async () => {
setBaseRoute({ params: { category: idA, since: '1000' }, route: 'fast' })
deepStrictEqual(router.get(), {
params: { category: idA, since: 1000 },
redirect: false,
route: 'fast'
})

setBaseRoute({ params: { category: idA, since: '1000k' }, route: 'fast' })
deepStrictEqual(router.get(), {
params: {},
redirect: false,
route: 'notFound'
})
})
Expand All @@ -241,22 +232,19 @@ test('checks that category exists', async () => {
setBaseRoute({ params: { category: 'unknown', since: 100 }, route: 'fast' })
deepStrictEqual(router.get(), {
params: { category: 'unknown', since: 100 },
redirect: false,
route: 'fast'
})

await setTimeout(100)
deepStrictEqual(router.get(), {
params: {},
redirect: false,
route: 'notFound'
})

setBaseRoute({ params: { category: idA, since: 100 }, route: 'fast' })
await setTimeout(100)
deepStrictEqual(router.get(), {
params: { category: idA, since: 100 },
redirect: false,
route: 'fast'
})
})
4 changes: 2 additions & 2 deletions web/stories/scene.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
import {
addCategory,
addFeed,
type BaseRoute,
Category,
type CategoryValue,
clearPreview,
Expand All @@ -18,6 +17,7 @@
Post,
refreshStatistics,
type RefreshStatistics,
type Route,
testFeed
} from '@slowreader/core'
import { cleanStores } from 'nanostores'
Expand All @@ -36,7 +36,7 @@
}
export let refreshing: false | Partial<RefreshStatistics> = false
export let route: BaseRoute = {
export let route: Route = {
params: {},
route: 'slowAll'
}
Expand Down

0 comments on commit da7d879

Please sign in to comment.