diff --git a/src/converters/toTiles/index.ts b/src/converters/toTiles/index.ts index 167392e6..fe9ecf93 100644 --- a/src/converters/toTiles/index.ts +++ b/src/converters/toTiles/index.ts @@ -1,4 +1,5 @@ import TileWorker from './worker/tileWorker'; +import { encodingToCompression } from '../..'; import { xyzToBBOX } from '../../geometry/wm/coords'; import { DrawType, MetadataBuilder } from 's2-tilejson'; @@ -234,7 +235,7 @@ export interface BuildGuide { - const { tileWriter, extension, projection } = buildGuide; + const { tileWriter, extension, projection, encoding } = buildGuide; const worker = new TileWorker(); // STEP 1: Convert all features to tile slices of said features. @@ -257,7 +258,7 @@ export async function toTiles(buildGuide: BuildGuide): Promise { } } // STEP 5: Commit the metadata - await tileWriter.commit(metaBuilder.commit()); + await tileWriter.commit(metaBuilder.commit(), encodingToCompression(encoding ?? 'none')); } // /** diff --git a/src/util/index.ts b/src/util/index.ts index b34cdd91..4b61f22d 100644 --- a/src/util/index.ts +++ b/src/util/index.ts @@ -1,3 +1,5 @@ +import type { Encoding } from 's2-tilejson'; + export * from './gzip'; export * from './lzw'; @@ -35,6 +37,24 @@ export const Compression = { */ export type Compression = (typeof Compression)[keyof typeof Compression]; +/** + * Converts a string encoding to a compression algorithm enum + * @param encoding - the encoding as a string + * @returns the compression algorithm as an Enum + */ +export function encodingToCompression(encoding: Encoding): Compression { + switch (encoding) { + case 'gz': + return Compression.Gzip; + case 'br': + return Compression.Brotli; + case 'zstd': + return Compression.Zstd; + default: + return Compression.None; + } +} + /** * Provide a decompression implementation that acts on `buf` and returns decompressed data. * diff --git a/tests/readers/pmtiles/pmtiles.test.ts b/tests/readers/pmtiles/pmtiles.test.ts index 2d59acba..5ba11107 100644 --- a/tests/readers/pmtiles/pmtiles.test.ts +++ b/tests/readers/pmtiles/pmtiles.test.ts @@ -7,14 +7,16 @@ import { deserializeDir, findTile, getUint64, + headerToBytes, + serializeDir, + setUint64, tileIDToZxy, zxyToTileID, -} from '../../..'; -import { headerToBytes, serializeDir, setUint64 } from '../../../src/writers/pmtiles'; +} from '../../../src'; import { describe, expect, test } from 'bun:test'; -import type { Entry, Header } from '../../..'; +import type { Entry, Header } from '../../../src'; test('HEADER_SIZE_BYTES', () => { expect(HEADER_SIZE_BYTES).toBe(127); diff --git a/tests/writers/pmtiles/writer.test.ts b/tests/writers/pmtiles/writer.test.ts index e1118cb3..4881845e 100644 --- a/tests/writers/pmtiles/writer.test.ts +++ b/tests/writers/pmtiles/writer.test.ts @@ -12,7 +12,7 @@ import { expect, test } from 'bun:test'; import { stat } from 'node:fs/promises'; import type { Metadata } from 's2-tilejson'; -import type { S2Header } from '../../../src/readers/pmtiles'; +import type { S2Header } from '../../../src'; tmp.setGracefulCleanup();