@versatiles/server
Version:
45 lines (44 loc) • 1.36 kB
JavaScript
import { Container } from '@versatiles/container';
import { generateStyle } from './style.js';
export class Layer {
#container;
#serverOptions;
#header;
#metadata;
#mime;
#compression;
constructor(source, serverOptions) {
this.#serverOptions = serverOptions;
this.#container = new Container(source, { tms: serverOptions?.tms ?? false });
}
async init() {
if (this.#header)
return;
this.#header = await this.#container.getHeader();
this.#metadata = await this.#container.getMetadata() ?? '{}';
this.#mime = this.#header.tileMime;
this.#compression = this.#header.tileCompression;
}
async getTileFunction() {
await this.init();
const container = this.#container;
const mime = this.#mime;
const compression = this.#compression;
return async (z, x, y) => {
const buffer = await container.getTile(z, x, y);
if (!buffer)
return null;
return { buffer, mime, compression };
};
}
async getStyle() {
await this.init();
if (!this.#metadata)
throw Error();
return generateStyle(this.#metadata, this.#serverOptions);
}
async getMetadata() {
await this.init();
return this.#metadata;
}
}