Improve serverless type check performance (#641)

Change loop for checking tile type extension to object lookup
This commit is contained in:
zstadler
2026-02-17 19:47:24 +02:00
committed by GitHub
parent 36bb8046b5
commit 4d19110bee
2 changed files with 45 additions and 37 deletions

View File

@@ -11,6 +11,7 @@ import {
ResolvedValueCache,
Source,
TileType,
tileTypeExt,
} from "pmtiles";
import { pmtiles_path, tile_path } from "../../shared/index";
@@ -191,26 +192,29 @@ export const handlerRaw = async (
return apiResp(404, "", false, headers);
}
for (const pair of [
[TileType.Mvt, "mvt"],
[TileType.Png, "png"],
[TileType.Jpeg, "jpg"],
[TileType.Webp, "webp"],
[TileType.Avif, "avif"],
]) {
if (header.tileType === pair[0] && ext !== pair[1]) {
if (header.tileType === TileType.Mvt && ext === "pbf") {
// allow this for now. Eventually we will delete this in favor of .mvt
continue;
}
const extToType: Record<string, TileType> = {
mvt: TileType.Mvt,
pbf: TileType.Mvt, // allow this for now. Eventually we will delete this in favor of .mvt
png: TileType.Png,
jpg: TileType.Jpeg,
webp: TileType.Webp,
avif: TileType.Avif,
};
const expectedType = extToType[ext];
if (
header.tileType !== expectedType &&
tileTypeExt(header.tileType) !== ""
) {
return apiResp(
400,
`Bad request: requested .${ext} but archive has type .${pair[1]}`,
`Bad request: requested .${ext} but archive has type ${tileTypeExt(
header.tileType
)}`,
false,
headers
);
}
}
const tileResult = await p.getZxy(tile[0], tile[1], tile[2]);
if (tileResult) {

View File

@@ -6,6 +6,7 @@ import {
ResolvedValueCache,
Source,
TileType,
tileTypeExt,
} from "pmtiles";
import { pmtiles_path, tile_path } from "../../shared/index";
@@ -169,25 +170,28 @@ export default {
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;
}
const extToType: Record<string, TileType> = {
mvt: TileType.Mvt,
pbf: TileType.Mvt, // allow this for now. Eventually we will delete this in favor of .mvt
png: TileType.Png,
jpg: TileType.Jpeg,
webp: TileType.Webp,
avif: TileType.Avif,
};
const expectedType = extToType[ext];
if (
pHeader.tileType !== expectedType &&
tileTypeExt(pHeader.tileType) !== ""
) {
return cacheableResponse(
`Bad request: requested .${ext} but archive has type .${pair[1]}`,
`Bad request: requested .${ext} but archive has type ${tileTypeExt(
pHeader.tileType
)}`,
cacheableHeaders,
400
);
}
}
const tiledata = await p.getZxy(tile[0], tile[1], tile[2]);