diff --git a/package-lock.json b/package-lock.json
index 4d430e4..707a3bd 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -11,7 +11,7 @@
"dayjs": "^1.11.13",
"lucide-react": "^0.542.0",
"next": "^15.4.0",
- "pathcat": "^1.4.0",
+ "pathcat": "^1.5.1",
"react": "^19",
"react-dom": "^19",
"react-grid-gallery": "^1.0.1"
diff --git a/package.json b/package.json
index 287be68..b15a13e 100644
--- a/package.json
+++ b/package.json
@@ -12,7 +12,7 @@
"dayjs": "^1.11.13",
"lucide-react": "^0.542.0",
"next": "^15.4.0",
- "pathcat": "^1.4.0",
+ "pathcat": "^1.5.1",
"react": "^19",
"react-dom": "^19",
"react-grid-gallery": "^1.0.1"
diff --git a/src/app/about/page.tsx b/src/app/about/page.tsx
index c6e11d7..7cd3c13 100644
--- a/src/app/about/page.tsx
+++ b/src/app/about/page.tsx
@@ -1,4 +1,3 @@
-import { pathWildcat } from "@/spanner/api";
import { Metadata } from "next";
import Image from "next/image";
import { cloneElement } from "react";
diff --git a/src/app/join/page.tsx b/src/app/join/page.tsx
index 10421a8..5de5717 100644
--- a/src/app/join/page.tsx
+++ b/src/app/join/page.tsx
@@ -1,4 +1,4 @@
-import { pathWildcat } from "@/spanner/api";
+import { spannerPathCat } from "@/spanner/api";
import { wwlrcClubId } from "@/spanner/wwlrc";
import { Download, ExternalLinkIcon } from "lucide-react";
import { Metadata } from "next";
@@ -178,7 +178,7 @@ export default function Join() {
): string {
- if (!query) {
- return pathcat(spannerBase, template);
- }
-
- return pathcat(spannerBase, template, query);
+function wrap(
+ fn: (path: string) => R,
+): (
+ base: string,
+ path: Path,
+ ...query: [ExtractRouteParams] extends [never]
+ ? [query?: Query]
+ : [query: Query]
+) => R {
+ return (base, path, ...query): R => fn(pathcat(base, path, ...query));
}
-export function spannerApiFetch(
- template: string,
- query?: Query,
-): Promise {
- const url = pathWildcat(template, query);
- let p = fetch(url);
- // TODO: probably worth putting some more fancy error handling here
- return p.then((response) => response.json());
+function wrapWithBase(
+ base: string,
+ fn: (path: string) => R,
+): (
+ path: Path,
+ ...query: [ExtractRouteParams] extends [never]
+ ? [query?: Query]
+ : [query: Query]
+) => R {
+ return (path, ...query): R => wrap(fn)(base, path, ...query);
}
+
+export const spannerApiFetch = wrapWithBase>(
+ "https://spanner.wwlrc.co.uk",
+ async (path) => {
+ let response = await fetch(path);
+ // TODO: probably worth putting some more fancy error handling here
+ return response.json();
+ },
+);
diff --git a/src/spanner/blog.ts b/src/spanner/blog.ts
index 0d46735..d017cdb 100644
--- a/src/spanner/blog.ts
+++ b/src/spanner/blog.ts
@@ -1,4 +1,4 @@
-import { spannerApiFetch } from "./api";
+import { spannerApiFetch, spannerPathCat } from "./api";
import { wwlrcClubId } from "./wwlrc";
export async function getPosts(): Promise {