cloudflare uses native decompression

This commit is contained in:
Brandon Liu
2022-11-14 22:05:46 +08:00
parent 5de95b8fbe
commit 91ddf2e913

View File

@@ -10,6 +10,7 @@ import {
RangeResponse, RangeResponse,
ResolvedValueCache, ResolvedValueCache,
TileType, TileType,
Compression,
} from "../../../js"; } from "../../../js";
interface Env { interface Env {
@@ -66,7 +67,22 @@ export const tile_path = (
return { ok: false, name: "", tile: [0, 0, 0], ext: "" }; return { ok: false, name: "", tile: [0, 0, 0], ext: "" };
}; };
const CACHE = new ResolvedValueCache(); async function nativeDecompress(
buf: ArrayBuffer,
compression: Compression
): Promise<ArrayBuffer> {
if (compression === Compression.None || compression === Compression.Unknown) {
return buf;
} else if (compression === Compression.Gzip) {
let stream = new Response(buf).body!;
let result = stream.pipeThrough(new DecompressionStream("gzip"));
return new Response(result).arrayBuffer();
} else {
throw Error("Compression method not supported");
}
}
const CACHE = new ResolvedValueCache(undefined, undefined, nativeDecompress);
class R2Source implements Source { class R2Source implements Source {
env: Env; env: Env;
@@ -157,7 +173,7 @@ export default {
const cacheable_headers = new Headers(); const cacheable_headers = new Headers();
const source = new R2Source(env, name); const source = new R2Source(env, name);
const p = new PMTiles(source, CACHE); const p = new PMTiles(source, CACHE, nativeDecompress);
try { try {
const p_header = await p.getHeader(); const p_header = await p.getHeader();
if (tile[0] < p_header.minZoom || tile[0] > p_header.maxZoom) { if (tile[0] < p_header.minZoom || tile[0] > p_header.maxZoom) {