diff --git a/packages/client/logic/slides.ts b/packages/client/logic/slides.ts index 6891cc468f..f57a1ffba6 100644 --- a/packages/client/logic/slides.ts +++ b/packages/client/logic/slides.ts @@ -20,7 +20,9 @@ export function getSlidePath( if (typeof route === 'number' || typeof route === 'string') route = getSlide(route)! const no = route.meta.slide?.frontmatter.routeAlias ?? route.no - return exporting ? `/export/${no}` : presenter ? `/presenter/${no}` : `/${no}` + const basePath = import.meta.env.BASE_URL.replace(/\/$/, '') ?? '' + const path = exporting ? `/export/${no}` : presenter ? `/presenter/${no}` : `/${no}` + return `${basePath}${path}` } export function useIsSlideActive() { diff --git a/test/utils.test.ts b/test/utils.test.ts index 5bf5ee6962..bc5fb7b6fe 100644 --- a/test/utils.test.ts +++ b/test/utils.test.ts @@ -1,6 +1,7 @@ -import type { ResolvedFontOptions, SlideInfo } from '@slidev/types' +import type { ResolvedFontOptions, SlideInfo, SlideRoute } from '@slidev/types' import { relative, resolve } from 'node:path' import { slash } from '@antfu/utils' +import { getSlidePath } from '@slidev/client/logic/slides' import MarkdownIt from 'markdown-it' import { describe, expect, it } from 'vitest' import YAML from 'yaml' @@ -145,4 +146,28 @@ describe('utils', () => { " `) }) + + it('getSlidePath with base path', () => { + const originalBaseUrl = import.meta.env.BASE_URL + + import.meta.env.BASE_URL = '/my_monorepo/my_prez/' + + const mockRoute: SlideRoute = { + no: 2, + meta: { + slide: { + frontmatter: {}, + }, + }, + } + + expect(getSlidePath(mockRoute, false, false)).toBe('/my_monorepo/my_prez/2') + expect(getSlidePath(mockRoute, true, false)).toBe('/my_monorepo/my_prez/presenter/2') + expect(getSlidePath(mockRoute, false, true)).toBe('/my_monorepo/my_prez/export/2') + + import.meta.env.BASE_URL = '/' + expect(getSlidePath(mockRoute, false, false)).toBe('/2') + + import.meta.env.BASE_URL = originalBaseUrl + }) })