From 658c75b073f19a6b5e32440de8d1019719a0f0e5 Mon Sep 17 00:00:00 2001 From: Niels Bom Date: Fri, 26 Apr 2024 06:41:40 +0200 Subject: [PATCH] refactor: early return (#389) * refactor: early return Undents all the code below it 1 level. Readability win. --------- Co-authored-by: Brandon Liu --- serverless/cloudflare/src/index.ts | 230 ++++++++++++++--------------- 1 file changed, 115 insertions(+), 115 deletions(-) diff --git a/serverless/cloudflare/src/index.ts b/serverless/cloudflare/src/index.ts index b90626d..925d354 100644 --- a/serverless/cloudflare/src/index.ts +++ b/serverless/cloudflare/src/index.ts @@ -101,124 +101,124 @@ export default { const cache = caches.default; - if (ok) { - let allowedOrigin = ""; - if (typeof env.ALLOWED_ORIGINS !== "undefined") { - for (const o of env.ALLOWED_ORIGINS.split(",")) { - if (o === request.headers.get("Origin") || o === "*") { - allowedOrigin = o; - } + if (!ok) { + return new Response("Invalid URL", { status: 404 }); + } + + let allowedOrigin = ""; + if (typeof env.ALLOWED_ORIGINS !== "undefined") { + for (const o of env.ALLOWED_ORIGINS.split(",")) { + if (o === request.headers.get("Origin") || o === "*") { + allowedOrigin = o; } } - - const cached = await cache.match(request.url); - if (cached) { - const respHeaders = new Headers(cached.headers); - if (allowedOrigin) - respHeaders.set("Access-Control-Allow-Origin", allowedOrigin); - respHeaders.set("Vary", "Origin"); - - return new Response(cached.body, { - headers: respHeaders, - status: cached.status, - }); - } - - const cacheableResponse = ( - body: ArrayBuffer | string | undefined, - cacheableHeaders: Headers, - status: number - ) => { - cacheableHeaders.set( - "Cache-Control", - `max-age=${env.CACHE_MAX_AGE || 86400}` - ); - const cacheable = new Response(body, { - headers: cacheableHeaders, - status: status, - }); - - ctx.waitUntil(cache.put(request.url, cacheable)); - - const respHeaders = new Headers(cacheableHeaders); - if (allowedOrigin) - respHeaders.set("Access-Control-Allow-Origin", allowedOrigin); - respHeaders.set("Vary", "Origin"); - return new Response(body, { headers: respHeaders, status: status }); - }; - - const cacheableHeaders = new Headers(); - const source = new R2Source(env, name); - const p = new PMTiles(source, CACHE, nativeDecompress); - try { - const pHeader = await p.getHeader(); - - if (!tile) { - cacheableHeaders.set("Content-Type", "application/json"); - - const t = tileJSON( - pHeader, - await p.getMetadata(), - env.PUBLIC_HOSTNAME || url.hostname, - name - ); - - return cacheableResponse(JSON.stringify(t), cacheableHeaders, 200); - } - - if (tile[0] < pHeader.minZoom || tile[0] > pHeader.maxZoom) { - return cacheableResponse(undefined, cacheableHeaders, 404); - } - - for (const pair of [ - [TileType.Mvt, "mvt"], - [TileType.Png, "png"], - [TileType.Jpeg, "jpg"], - [TileType.Webp, "webp"], - [TileType.Avif, "avif"], - ]) { - if (pHeader.tileType === pair[0] && ext !== pair[1]) { - if (pHeader.tileType === TileType.Mvt && ext === "pbf") { - // allow this for now. Eventually we will delete this in favor of .mvt - continue; - } - return cacheableResponse( - `Bad request: requested .${ext} but archive has type .${pair[1]}`, - cacheableHeaders, - 400 - ); - } - } - - const tiledata = await p.getZxy(tile[0], tile[1], tile[2]); - - switch (pHeader.tileType) { - case TileType.Mvt: - cacheableHeaders.set("Content-Type", "application/x-protobuf"); - break; - case TileType.Png: - cacheableHeaders.set("Content-Type", "image/png"); - break; - case TileType.Jpeg: - cacheableHeaders.set("Content-Type", "image/jpeg"); - break; - case TileType.Webp: - cacheableHeaders.set("Content-Type", "image/webp"); - break; - } - - if (tiledata) { - return cacheableResponse(tiledata.data, cacheableHeaders, 200); - } - return cacheableResponse(undefined, cacheableHeaders, 204); - } catch (e) { - if (e instanceof KeyNotFoundError) { - return cacheableResponse("Archive not found", cacheableHeaders, 404); - } - throw e; - } } - return new Response("Invalid URL", { status: 404 }); + const cached = await cache.match(request.url); + if (cached) { + const respHeaders = new Headers(cached.headers); + if (allowedOrigin) + respHeaders.set("Access-Control-Allow-Origin", allowedOrigin); + respHeaders.set("Vary", "Origin"); + + return new Response(cached.body, { + headers: respHeaders, + status: cached.status, + }); + } + + const cacheableResponse = ( + body: ArrayBuffer | string | undefined, + cacheableHeaders: Headers, + status: number + ) => { + cacheableHeaders.set( + "Cache-Control", + `max-age=${env.CACHE_MAX_AGE || 86400}` + ); + const cacheable = new Response(body, { + headers: cacheableHeaders, + status: status, + }); + + ctx.waitUntil(cache.put(request.url, cacheable)); + + const respHeaders = new Headers(cacheableHeaders); + if (allowedOrigin) + respHeaders.set("Access-Control-Allow-Origin", allowedOrigin); + respHeaders.set("Vary", "Origin"); + return new Response(body, { headers: respHeaders, status: status }); + }; + + const cacheableHeaders = new Headers(); + const source = new R2Source(env, name); + const p = new PMTiles(source, CACHE, nativeDecompress); + try { + const pHeader = await p.getHeader(); + + if (!tile) { + cacheableHeaders.set("Content-Type", "application/json"); + + const t = tileJSON( + pHeader, + await p.getMetadata(), + env.PUBLIC_HOSTNAME || url.hostname, + name + ); + + return cacheableResponse(JSON.stringify(t), cacheableHeaders, 200); + } + + if (tile[0] < pHeader.minZoom || tile[0] > pHeader.maxZoom) { + return cacheableResponse(undefined, cacheableHeaders, 404); + } + + for (const pair of [ + [TileType.Mvt, "mvt"], + [TileType.Png, "png"], + [TileType.Jpeg, "jpg"], + [TileType.Webp, "webp"], + [TileType.Avif, "avif"], + ]) { + if (pHeader.tileType === pair[0] && ext !== pair[1]) { + if (pHeader.tileType === TileType.Mvt && ext === "pbf") { + // allow this for now. Eventually we will delete this in favor of .mvt + continue; + } + return cacheableResponse( + `Bad request: requested .${ext} but archive has type .${pair[1]}`, + cacheableHeaders, + 400 + ); + } + } + + const tiledata = await p.getZxy(tile[0], tile[1], tile[2]); + + switch (pHeader.tileType) { + case TileType.Mvt: + cacheableHeaders.set("Content-Type", "application/x-protobuf"); + break; + case TileType.Png: + cacheableHeaders.set("Content-Type", "image/png"); + break; + case TileType.Jpeg: + cacheableHeaders.set("Content-Type", "image/jpeg"); + break; + case TileType.Webp: + cacheableHeaders.set("Content-Type", "image/webp"); + break; + } + + if (tiledata) { + return cacheableResponse(tiledata.data, cacheableHeaders, 200); + } + return cacheableResponse(undefined, cacheableHeaders, 204); + } catch (e) { + if (e instanceof KeyNotFoundError) { + return cacheableResponse("Archive not found", cacheableHeaders, 404); + } + throw e; + } }, };