diff --git a/bun.lockb b/bun.lockb old mode 100644 new mode 100755 index 7192bcc..212876d Binary files a/bun.lockb and b/bun.lockb differ diff --git a/package.json b/package.json index 95c4d5a..88064aa 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,8 @@ "@std/toml": "npm:@jsr/std__toml", "base64url": "^3.0.1", "rehype-autolink-headings": "^7.1.0", - "rehype-slug": "^6.0.0" + "rehype-slug": "^6.0.0", + "typescript-svelte-plugin": "^0.3.42" }, "trustedDependencies": [ "@sveltejs/kit", diff --git a/src/routes/+layout.server.ts b/src/routes/+layout.server.ts index 595c0a3..dded3e0 100644 --- a/src/routes/+layout.server.ts +++ b/src/routes/+layout.server.ts @@ -7,26 +7,31 @@ export const ssr = true; export const prerender = 'auto'; export const trailingSlash = 'always'; -export async function load({ cookies, url, setHeaders }) { - setHeaders({ 'Cache-Control': 'no-cache' }) +export async function load({ request, cookies, url, setHeaders }) { + setHeaders({ 'Cache-Control': 'no-cache' }) + let currentVisitCount = get(visitCount) + // check whether the request is from a bot or not (this doesnt need to be accurate we just want to filter out honest bots) + const ua = request.headers.get('user-agent') + const isBot = ua ? ua.toLowerCase().match(/(bot|crawl|spider|walk)/) !== null : true + if (!isBot) { const scopedCookies = scopeCookies(cookies, '/') // parse the last visit timestamp from cookies if it exists const visitedTimestamp = parseInt(scopedCookies.get('visitedTimestamp') || "0") // get unix timestamp const currentTime = new Date().getTime() const timeSinceVisit = currentTime - visitedTimestamp - let currentVisitCount = get(visitCount) // check if this is the first time a client is visiting or if an hour has passed since they last visited if (visitedTimestamp === 0 || timeSinceVisit > 1000 * 60 * 60 * 24) { - // increment current and write to the store - currentVisitCount += 1; visitCount.set(currentVisitCount) - // update the cookie with the current timestamp - scopedCookies.set('visitedTimestamp', currentTime.toString()) - // write the visit count to a file so we can load it later again - writeFileSync(visitCountFile, currentVisitCount.toString()) + // increment current and write to the store + currentVisitCount += 1; visitCount.set(currentVisitCount) + // update the cookie with the current timestamp + scopedCookies.set('visitedTimestamp', currentTime.toString()) + // write the visit count to a file so we can load it later again + writeFileSync(visitCountFile, currentVisitCount.toString()) } - return { - route: url.pathname, - visitCount: currentVisitCount, - } -} \ No newline at end of file + } + return { + route: url.pathname, + visitCount: currentVisitCount, + } +} diff --git a/tsconfig.json b/tsconfig.json index 4791850..ab699ba 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -10,7 +10,11 @@ "sourceMap": true, "strict": true, "moduleResolution": "bundler", - "allowImportingTsExtensions": true + "allowImportingTsExtensions": true, + "plugins": [{ + "name": "typescript-svelte-plugin", + "enabled": true + }] } // Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias // except $lib which is handled by https://kit.svelte.dev/docs/configuration#files