mirror of
https://github.com/protomaps/PMTiles.git
synced 2026-03-21 22:39:39 +00:00
Improve serverless type check performance (#641)
Change loop for checking tile type extension to object lookup
This commit is contained in:
@@ -11,6 +11,7 @@ import {
|
|||||||
ResolvedValueCache,
|
ResolvedValueCache,
|
||||||
Source,
|
Source,
|
||||||
TileType,
|
TileType,
|
||||||
|
tileTypeExt,
|
||||||
} from "pmtiles";
|
} from "pmtiles";
|
||||||
import { pmtiles_path, tile_path } from "../../shared/index";
|
import { pmtiles_path, tile_path } from "../../shared/index";
|
||||||
|
|
||||||
@@ -191,25 +192,28 @@ export const handlerRaw = async (
|
|||||||
return apiResp(404, "", false, headers);
|
return apiResp(404, "", false, headers);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const pair of [
|
const extToType: Record<string, TileType> = {
|
||||||
[TileType.Mvt, "mvt"],
|
mvt: TileType.Mvt,
|
||||||
[TileType.Png, "png"],
|
pbf: TileType.Mvt, // allow this for now. Eventually we will delete this in favor of .mvt
|
||||||
[TileType.Jpeg, "jpg"],
|
png: TileType.Png,
|
||||||
[TileType.Webp, "webp"],
|
jpg: TileType.Jpeg,
|
||||||
[TileType.Avif, "avif"],
|
webp: TileType.Webp,
|
||||||
]) {
|
avif: TileType.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
|
const expectedType = extToType[ext];
|
||||||
continue;
|
if (
|
||||||
}
|
header.tileType !== expectedType &&
|
||||||
return apiResp(
|
tileTypeExt(header.tileType) !== ""
|
||||||
400,
|
) {
|
||||||
`Bad request: requested .${ext} but archive has type .${pair[1]}`,
|
return apiResp(
|
||||||
false,
|
400,
|
||||||
headers
|
`Bad request: requested .${ext} but archive has type ${tileTypeExt(
|
||||||
);
|
header.tileType
|
||||||
}
|
)}`,
|
||||||
|
false,
|
||||||
|
headers
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
const tileResult = await p.getZxy(tile[0], tile[1], tile[2]);
|
const tileResult = await p.getZxy(tile[0], tile[1], tile[2]);
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import {
|
|||||||
ResolvedValueCache,
|
ResolvedValueCache,
|
||||||
Source,
|
Source,
|
||||||
TileType,
|
TileType,
|
||||||
|
tileTypeExt,
|
||||||
} from "pmtiles";
|
} from "pmtiles";
|
||||||
import { pmtiles_path, tile_path } from "../../shared/index";
|
import { pmtiles_path, tile_path } from "../../shared/index";
|
||||||
|
|
||||||
@@ -169,24 +170,27 @@ export default {
|
|||||||
return cacheableResponse(undefined, cacheableHeaders, 404);
|
return cacheableResponse(undefined, cacheableHeaders, 404);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const pair of [
|
const extToType: Record<string, TileType> = {
|
||||||
[TileType.Mvt, "mvt"],
|
mvt: TileType.Mvt,
|
||||||
[TileType.Png, "png"],
|
pbf: TileType.Mvt, // allow this for now. Eventually we will delete this in favor of .mvt
|
||||||
[TileType.Jpeg, "jpg"],
|
png: TileType.Png,
|
||||||
[TileType.Webp, "webp"],
|
jpg: TileType.Jpeg,
|
||||||
[TileType.Avif, "avif"],
|
webp: TileType.Webp,
|
||||||
]) {
|
avif: TileType.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
|
const expectedType = extToType[ext];
|
||||||
continue;
|
if (
|
||||||
}
|
pHeader.tileType !== expectedType &&
|
||||||
return cacheableResponse(
|
tileTypeExt(pHeader.tileType) !== ""
|
||||||
`Bad request: requested .${ext} but archive has type .${pair[1]}`,
|
) {
|
||||||
cacheableHeaders,
|
return cacheableResponse(
|
||||||
400
|
`Bad request: requested .${ext} but archive has type ${tileTypeExt(
|
||||||
);
|
pHeader.tileType
|
||||||
}
|
)}`,
|
||||||
|
cacheableHeaders,
|
||||||
|
400
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
const tiledata = await p.getZxy(tile[0], tile[1], tile[2]);
|
const tiledata = await p.getZxy(tile[0], tile[1], tile[2]);
|
||||||
|
|||||||
Reference in New Issue
Block a user