diff --git a/packages/client/logic/slides.ts b/packages/client/logic/slides.ts index 075d43f4e5..91ddbabd69 100644 --- a/packages/client/logic/slides.ts +++ b/packages/client/logic/slides.ts @@ -19,7 +19,8 @@ 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 path = exporting ? `export/${no}` : presenter ? `presenter/${no}` : `${no}` + return `${import.meta.env.BASE_URL}${path}` } export function useIsSlideActive() { diff --git a/test/utils.test.ts b/test/utils.test.ts index e6d9c2c7ab..4ade49db51 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 MarkdownExit from 'markdown-exit' 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 + }) })