diff --git a/apps/sveltekit/README.md b/apps/sveltekit/README.md index 2fc0b88..6ebf889 100644 --- a/apps/sveltekit/README.md +++ b/apps/sveltekit/README.md @@ -7,7 +7,7 @@ This application was created with the following commands: - `cd apps` - `pnpx sv create sveltekit` (answers: SvelteKit minimal, no Typescript, no additional install, pnpm) - `cd sveltekit` -- add `src/+layout.js` to include `import { injectAnalytics } from '@vercel/analytics/sveltekit'; injectAnalytics();` +- add `src/routes/+layout.svelte` to include `import { injectAnalytics } from '@vercel/analytics/sveltekit'; injectAnalytics();` - edit package.json to add `"@vercel/analytics": "workspace:*"` dependency and change `@sveltejs/adapter-auto` into `@sveltejs/adapter-vercel` - eddi `svelte.config.js` to change `@sveltejs/adapter-auto` into `@sveltejs/adapter-vercel` - `pnpm i` diff --git a/apps/sveltekit/src/routes/+layout.ts b/apps/sveltekit/src/routes/+layout.svelte similarity index 88% rename from apps/sveltekit/src/routes/+layout.ts rename to apps/sveltekit/src/routes/+layout.svelte index 0275424..2855ee5 100644 --- a/apps/sveltekit/src/routes/+layout.ts +++ b/apps/sveltekit/src/routes/+layout.svelte @@ -1,3 +1,4 @@ + + + diff --git a/packages/web/package.json b/packages/web/package.json index c820d94..1d8b8be 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -123,7 +123,7 @@ }, "peerDependencies": { "@remix-run/react": "^2", - "@sveltejs/kit": "^1 || ^2", + "@sveltejs/kit": "^2.12 || ^3", "next": ">= 13", "nuxt": ">= 3", "react": "^18 || ^19 || ^19.0.0-rc", diff --git a/packages/web/src/sveltekit/index.ts b/packages/web/src/sveltekit/index.ts index 6ff3193..d5fc60b 100644 --- a/packages/web/src/sveltekit/index.ts +++ b/packages/web/src/sveltekit/index.ts @@ -1,6 +1,6 @@ import type {} from '@sveltejs/kit'; import { browser } from '$app/environment'; -import { page } from '$app/stores'; +import { afterNavigate } from '$app/navigation'; import { inject, pageview, track } from '../generic'; import type { AnalyticsProps, BeforeSend, BeforeSendEvent } from '../types'; import { getBasePath, getConfigString } from './utils'; @@ -17,13 +17,12 @@ function injectAnalytics(props: Omit = {}): void { getConfigString(), ); - page.subscribe(({ route, url }) => { - if (route?.id) { - pageview({ route: route.id, path: url.pathname }); - } + // SvelteKit owns registration and cleanup; callers must invoke this from component initialization. + afterNavigate(({ to }) => { + if (to?.route.id) pageview({ route: to.route.id, path: to.url.pathname }); }); } } -export { injectAnalytics, track }; export type { AnalyticsProps, BeforeSend, BeforeSendEvent }; +export { injectAnalytics, track }; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3935034..2e6e786 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -221,7 +221,7 @@ importers: specifier: ^2 version: 2.17.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) '@sveltejs/kit': - specifier: ^1 || ^2 + specifier: ^2.12 || ^3 version: 2.60.1(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.8(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@22.19.19)(esbuild@0.24.2)(jiti@2.7.0)(terser@5.47.1)(yaml@2.9.0)))(svelte@5.55.8(@typescript-eslint/types@8.59.4))(typescript@5.9.3)(vite@8.0.13(@types/node@22.19.19)(esbuild@0.24.2)(jiti@2.7.0)(terser@5.47.1)(yaml@2.9.0)) next: specifier: '>= 13'