From e628a5f9f5d38c0c726020aaf80bf4e66d0e86a3 Mon Sep 17 00:00:00 2001 From: Israel Hiking Map Date: Wed, 19 Nov 2025 09:26:39 +0200 Subject: [PATCH 1/2] Add slice function to CloudeFlare worker --- serverless/cloudflare/src/index.ts | 32 +++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/serverless/cloudflare/src/index.ts b/serverless/cloudflare/src/index.ts index 07fb22a0..51e790b3 100644 --- a/serverless/cloudflare/src/index.ts +++ b/serverless/cloudflare/src/index.ts @@ -87,6 +87,36 @@ class R2Source implements Source { } } +export const slice = (input: { + ok: boolean; + name: string; + tile?: [number, number, number]; + ext: string; +}): { + ok: boolean; + name: string; + tile?: [number, number, number]; + ext: string; +} => { + // pass through inapplicable inputs unchanged + if (!input.ok || !input.tile || input.name !== "OSM_traces") return input; + + const [z, x, y] = input.tile; + if (z < 7) return { ok: false, name: "", tile: [0, 0, 0], ext: "" }; + + const shift = z - 7; + const nameX = x >> shift; + const nameY = y >> shift; + + return { + ok: true, + name: `7/${nameX}/${nameY}/${input.name}+7-${nameX}-${nameY}`, + tile: input.tile, + ext: input.ext, + }; +}; + + export default { async fetch( request: Request, @@ -97,7 +127,7 @@ export default { return new Response(undefined, { status: 405 }); const url = new URL(request.url); - const { ok, name, tile, ext } = tile_path(url.pathname); + const { ok, name, tile, ext } = slice(tile_path(url.pathname)); const cache = caches.default; From 9a34cb3877e2a71125af4c1ddb298115b3565c8b Mon Sep 17 00:00:00 2001 From: Israel Hiking Map Date: Wed, 19 Nov 2025 13:27:05 +0200 Subject: [PATCH 2/2] Remove unnecessary blank line in index.ts --- serverless/cloudflare/src/index.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/serverless/cloudflare/src/index.ts b/serverless/cloudflare/src/index.ts index 51e790b3..993f7cfc 100644 --- a/serverless/cloudflare/src/index.ts +++ b/serverless/cloudflare/src/index.ts @@ -116,7 +116,6 @@ export const slice = (input: { }; }; - export default { async fetch( request: Request,