diff --git a/core/router.ts b/core/router.ts index ed47042d..2f8caa53 100644 --- a/core/router.ts +++ b/core/router.ts @@ -27,8 +27,8 @@ export interface Routes { export type RouteName = keyof Routes -export type AppRoute = Name extends string - ? { params: Routes[Name]; redirect: boolean; route: Name } +export type Route = Name extends string + ? { params: Routes[Name]; redirect?: boolean; route: Name } : never type StringParams = { @@ -41,21 +41,21 @@ export type BaseRoute = Name extends string export type BaseRouter = ReadableAtom -const GUEST = new Set(['start', 'signin']) +const GUEST = new Set(['start', 'signin']) -const SETTINGS = new Set([ +const SETTINGS = new Set([ 'interface', 'profile', 'about', 'download' ]) -const ORGANIZE = new Set(['add', 'categories']) +const ORGANIZE = new Set(['add', 'categories']) function redirect( route: Name, params: Routes[Name] -): AppRoute { +): Route { // @ts-expect-error Too complex types return { params, redirect: true, route } } @@ -63,9 +63,9 @@ function redirect( function open( 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 { @@ -77,7 +77,7 @@ function getRoute( user: string | undefined, withFeeds: boolean | undefined, fast: FastCategoriesValue -): AppRoute { +): Route { if (!page) { return open('notFound', {}) } else if (user) { @@ -121,7 +121,7 @@ function getRoute( return open(page.route, page.params) } -export let router: ReadableAtom +export let router: ReadableAtom onEnvironment(({ baseRouter }) => { router = computed( @@ -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) } diff --git a/core/test/router.test.ts b/core/test/router.test.ts index dc81b0b7..0c3f9bb7 100644 --- a/core/test/router.test.ts +++ b/core/test/router.test.ts @@ -36,7 +36,6 @@ test('opens 404', () => { setBaseRoute(undefined) deepStrictEqual(router.get(), { params: {}, - redirect: false, route: 'notFound' }) }) @@ -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' }) }) @@ -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' }) @@ -98,7 +93,6 @@ test('transforms routers for users', () => { userId.set(undefined) deepStrictEqual(router.get(), { params: {}, - redirect: false, route: 'signin' }) }) @@ -155,7 +149,6 @@ test('transforms routers to first fast category', async () => { setBaseRoute({ params: {}, route: 'fast' }) deepStrictEqual(router.get(), { params: {}, - redirect: false, route: 'fast' }) @@ -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' }) }) @@ -241,14 +232,12 @@ 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' }) @@ -256,7 +245,6 @@ test('checks that category exists', async () => { await setTimeout(100) deepStrictEqual(router.get(), { params: { category: idA, since: 100 }, - redirect: false, route: 'fast' }) }) diff --git a/web/stories/scene.svelte b/web/stories/scene.svelte index 498fe473..6c4bfe91 100644 --- a/web/stories/scene.svelte +++ b/web/stories/scene.svelte @@ -2,7 +2,6 @@ import { addCategory, addFeed, - type BaseRoute, Category, type CategoryValue, clearPreview, @@ -18,6 +17,7 @@ Post, refreshStatistics, type RefreshStatistics, + type Route, testFeed } from '@slowreader/core' import { cleanStores } from 'nanostores' @@ -36,7 +36,7 @@ } export let refreshing: false | Partial = false - export let route: BaseRoute = { + export let route: Route = { params: {}, route: 'slowAll' }