diff --git a/.github/workflows/actions.yml b/.github/workflows/actions.yml index a00a9a5..f886018 100644 --- a/.github/workflows/actions.yml +++ b/.github/workflows/actions.yml @@ -21,8 +21,8 @@ jobs: - run: cd js && npm install && npm run build - run: echo "VITE_GIT_SHA=$(git rev-parse --short HEAD)" >> app/.env - run: cd app && npm install && ./node_modules/.bin/tsc && npm run prettier-check && ./node_modules/.bin/vite build --base=/PMTiles/ - - run: cd serverless/aws && npm install && npm run build && cp dist/lambda_function.zip ../../app/dist - - run: cd serverless/cloudflare && cp wrangler.toml.example wrangler.toml && npm install && npm run build && cp dist/index.js ../../app/dist + - run: cd serverless/aws && npm install && npx tsc && npm run build && cp dist/lambda_function.zip ../../app/dist + - run: cd serverless/cloudflare && cp wrangler.toml.example wrangler.toml && npm install && npx tsc && npm run build && cp dist/index.js ../../app/dist - run: cd spec/v3 && cp *.pmtiles ../../app/dist - run: cd js/examples && mkdir ../../app/dist/examples && cp *.html ../../app/dist/examples/ - run: cd openlayers/examples && mkdir ../../app/dist/examples/openlayers && cp *.html ../../app/dist/examples/openlayers diff --git a/serverless/cloudflare/package-lock.json b/serverless/cloudflare/package-lock.json index 812b800..cc3e5ee 100644 --- a/serverless/cloudflare/package-lock.json +++ b/serverless/cloudflare/package-lock.json @@ -8,7 +8,7 @@ "name": "pmtiles-cloudflare", "version": "0.0.0", "devDependencies": { - "@cloudflare/workers-types": "^3.17.0", + "@cloudflare/workers-types": "^4.20230518.0", "esbuild-runner": "^2.2.2", "typescript": "^4.8.4", "wrangler": "2.18.0" @@ -24,9 +24,9 @@ } }, "node_modules/@cloudflare/workers-types": { - "version": "3.17.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workers-types/-/workers-types-3.17.0.tgz", - "integrity": "sha512-u0cUQ4ntWFFwn5jx0ETa2ItvwvfOMjyaKF2fX2vFVujrSgNES/PnvRzPAhdt9CMYAMidInm0MGkIjxHRsFBaeg==", + "version": "4.20230518.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workers-types/-/workers-types-4.20230518.0.tgz", + "integrity": "sha512-A0w1V+5SUawGaaPRlhFhSC/SCDT9oQG8TMoWOKFLA4qbqagELqEAFD4KySBIkeVOvCBLT1DZSYBMCxbXddl0kw==", "dev": true }, "node_modules/@esbuild-plugins/node-globals-polyfill": { @@ -1620,9 +1620,9 @@ } }, "@cloudflare/workers-types": { - "version": "3.17.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workers-types/-/workers-types-3.17.0.tgz", - "integrity": "sha512-u0cUQ4ntWFFwn5jx0ETa2ItvwvfOMjyaKF2fX2vFVujrSgNES/PnvRzPAhdt9CMYAMidInm0MGkIjxHRsFBaeg==", + "version": "4.20230518.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workers-types/-/workers-types-4.20230518.0.tgz", + "integrity": "sha512-A0w1V+5SUawGaaPRlhFhSC/SCDT9oQG8TMoWOKFLA4qbqagELqEAFD4KySBIkeVOvCBLT1DZSYBMCxbXddl0kw==", "dev": true }, "@esbuild-plugins/node-globals-polyfill": { diff --git a/serverless/cloudflare/package.json b/serverless/cloudflare/package.json index fa2f315..c435ef9 100644 --- a/serverless/cloudflare/package.json +++ b/serverless/cloudflare/package.json @@ -2,7 +2,7 @@ "name": "pmtiles-cloudflare", "version": "0.0.0", "devDependencies": { - "@cloudflare/workers-types": "^3.17.0", + "@cloudflare/workers-types": "^4.20230518.0", "esbuild-runner": "^2.2.2", "typescript": "^4.8.4", "wrangler": "2.18.0" diff --git a/serverless/cloudflare/src/index.ts b/serverless/cloudflare/src/index.ts index dcb4e5c..6410a95 100644 --- a/serverless/cloudflare/src/index.ts +++ b/serverless/cloudflare/src/index.ts @@ -4,6 +4,7 @@ import { RangeResponse, ResolvedValueCache, TileType, + Compression, } from "../../../js/index"; import { pmtiles_path, tile_path, tileJSON } from "../../shared/index"; @@ -21,7 +22,22 @@ class KeyNotFoundError extends Error { } } -const CACHE = new ResolvedValueCache(25, undefined); +async function nativeDecompress( + buf: ArrayBuffer, + compression: Compression +): Promise { + 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(25, undefined, nativeDecompress); class R2Source implements Source { env: Env; @@ -120,7 +136,7 @@ export default { const cacheable_headers = new Headers(); const source = new R2Source(env, name); - const p = new PMTiles(source, CACHE); + const p = new PMTiles(source, CACHE, nativeDecompress); try { const p_header = await p.getHeader(); diff --git a/serverless/shared/index.ts b/serverless/shared/index.ts index ad03d3d..f007720 100644 --- a/serverless/shared/index.ts +++ b/serverless/shared/index.ts @@ -39,7 +39,7 @@ export const tile_path = ( export const tileJSON = ( header: Header, - metadata: unknown, + metadata: any, hostname: string, tileset_name: string ) => {