diff --git a/examples/cog-basic/vite.config.ts b/examples/cog-basic/vite.config.ts index 95a3eee..6b32ced 100644 --- a/examples/cog-basic/vite.config.ts +++ b/examples/cog-basic/vite.config.ts @@ -4,6 +4,7 @@ import { defineConfig } from "vite"; export default defineConfig({ plugins: [react()], base: "/deck.gl-raster/examples/cog-basic/", + worker: { format: "es" }, server: { port: 3000, }, diff --git a/examples/land-cover/vite.config.ts b/examples/land-cover/vite.config.ts index 9e87cc8..f32bab8 100644 --- a/examples/land-cover/vite.config.ts +++ b/examples/land-cover/vite.config.ts @@ -5,6 +5,7 @@ export default defineConfig({ plugins: [react()], assetsInclude: ["**/*.csv.gz"], base: "/deck.gl-raster/examples/land-cover/", + worker: { format: "es" }, server: { port: 3000, }, diff --git a/examples/naip-mosaic/vite.config.ts b/examples/naip-mosaic/vite.config.ts index f7bd4d7..f52e758 100644 --- a/examples/naip-mosaic/vite.config.ts +++ b/examples/naip-mosaic/vite.config.ts @@ -4,6 +4,7 @@ import { defineConfig } from "vite"; export default defineConfig({ plugins: [react()], base: "/deck.gl-raster/examples/naip-mosaic/", + worker: { format: "es" }, server: { port: 3000, }, diff --git a/package.json b/package.json index 4413704..b932339 100644 --- a/package.json +++ b/package.json @@ -25,14 +25,14 @@ }, "pnpm": { "overrides": { - "@deck.gl/aggregation-layers": "^9.2.8", - "@deck.gl/core": "^9.2.8", - "@deck.gl/extensions": "^9.2.8", - "@deck.gl/geo-layers": "^9.2.8", - "@deck.gl/layers": "^9.2.8", - "@deck.gl/mapbox": "^9.2.8", - "@deck.gl/mesh-layers": "^9.2.8", - "@deck.gl/widgets": "^9.2.8", + "@deck.gl/aggregation-layers": "^9.2.10", + "@deck.gl/core": "^9.2.10", + "@deck.gl/extensions": "^9.2.10", + "@deck.gl/geo-layers": "^9.2.10", + "@deck.gl/layers": "^9.2.10", + "@deck.gl/mapbox": "^9.2.10", + "@deck.gl/mesh-layers": "^9.2.10", + "@deck.gl/widgets": "^9.2.10", "@loaders.gl/core": "^4.3.4", "@luma.gl/constants": "^9.2.6", "@luma.gl/core": "^9.2.6", diff --git a/packages/deck.gl-geotiff/src/cog-layer.ts b/packages/deck.gl-geotiff/src/cog-layer.ts index c89ed8e..4197af1 100644 --- a/packages/deck.gl-geotiff/src/cog-layer.ts +++ b/packages/deck.gl-geotiff/src/cog-layer.ts @@ -18,8 +18,11 @@ import { RasterLayer, TileMatrixSetTileset, } from "@developmentseed/deck.gl-raster"; -import type { GeoTIFF, Overview } from "@developmentseed/geotiff"; -import { generateTileMatrixSet } from "@developmentseed/geotiff"; +import type { DecoderPool, GeoTIFF, Overview } from "@developmentseed/geotiff"; +import { + defaultDecoderPool, + generateTileMatrixSet, +} from "@developmentseed/geotiff"; import type { TileMatrixSet } from "@developmentseed/morecantile"; import { tileTransform } from "@developmentseed/morecantile"; import type { ReprojectionFns } from "@developmentseed/raster-reproject"; @@ -61,8 +64,7 @@ export type GetTileDataOptions = { signal?: AbortSignal; /** The decoder pool to use. */ - // TODO: restore pool with new GeoTIFF backend - // pool: Pool; + pool: DecoderPool; }; type GetTileDataResult = { @@ -94,13 +96,12 @@ export interface COGLayerProps epsgResolver?: EpsgResolver; /** - * GeoTIFF.js Pool for decoding image chunks. + * Worker pool for decoding image chunks. * * If none is provided, a default Pool will be created and shared between all * COGLayer and GeoTIFFLayer instances. */ - // TODO: Restore a sort of worker pool with our geotiff implementation - // pool?: Pool; + pool?: DecoderPool; /** * Maximum reprojection error in pixels for mesh refinement. @@ -304,8 +305,7 @@ export class COGLayer< x, y, signal: combinedSignal, - // TODO: restore pool - // pool: this.props.pool || defaultPool(), + pool: this.props.pool ?? defaultDecoderPool(), }); return { diff --git a/packages/deck.gl-geotiff/src/geotiff-layer.ts b/packages/deck.gl-geotiff/src/geotiff-layer.ts index 78e3591..f748f78 100644 --- a/packages/deck.gl-geotiff/src/geotiff-layer.ts +++ b/packages/deck.gl-geotiff/src/geotiff-layer.ts @@ -1,7 +1,7 @@ import type { CompositeLayerProps, UpdateParameters } from "@deck.gl/core"; import { CompositeLayer } from "@deck.gl/core"; import { RasterLayer } from "@developmentseed/deck.gl-raster"; -import type { GeoTIFF } from "@developmentseed/geotiff"; +import type { DecoderPool, GeoTIFF } from "@developmentseed/geotiff"; import type { ReprojectionFns } from "@developmentseed/raster-reproject"; import proj4 from "proj4"; import type { ProjectionDefinition } from "wkt-parser"; @@ -33,13 +33,12 @@ export interface GeoTIFFLayerProps extends CompositeLayerProps { epsgResolver?: EpsgResolver; /** - * GeoTIFF.js Pool for decoding image chunks. + * Decoder pool for decoding image chunks. * - * If none is provided, a default Pool will be created and shared between all - * COGLayer and GeoTIFFLayer instances. + * If none is provided, a default DecoderPool will be created and shared + * between all COGLayer and GeoTIFFLayer instances. */ - // TODO: Restore a sort of worker pool with our geotiff implementation - // pool?: Pool; + pool?: DecoderPool; /** * Maximum reprojection error in pixels for mesh refinement. diff --git a/packages/deck.gl-geotiff/src/geotiff/render-pipeline.ts b/packages/deck.gl-geotiff/src/geotiff/render-pipeline.ts index 591a950..ddb67a2 100644 --- a/packages/deck.gl-geotiff/src/geotiff/render-pipeline.ts +++ b/packages/deck.gl-geotiff/src/geotiff/render-pipeline.ts @@ -126,8 +126,12 @@ function createUnormPipeline( image: GeoTIFF | Overview, options: GetTileDataOptions, ) => { - const { device, x, y, signal } = options; - const tile = await image.fetchTile(x, y, { signal, boundless: false }); + const { device, x, y, signal, pool } = options; + const tile = await image.fetchTile(x, y, { + boundless: false, + pool, + signal, + }); let { array } = tile; let numSamples = samplesPerPixel; diff --git a/packages/geotiff/README.md b/packages/geotiff/README.md index d84c8bc..0775063 100644 --- a/packages/geotiff/README.md +++ b/packages/geotiff/README.md @@ -67,6 +67,12 @@ For user-defined CRSes, we automatically parse the CRS into a PROJJSON object, w If you have an image where the CRS fails to parse, please create an issue. +### Configurable Web Worker pool for image decoding + +The `DecoderPool` allows for decoding image data off the main thread. + +By default workers are created up to `navigator.hardwareConcurrency`, but you can customize how large the web worker pool is by passing options to the `DecoderPool` constructor. + ### Dynamically load compressions as needed Instead of bundling support for all compressions out of the box, dynamically load the decompressors as required. diff --git a/packages/geotiff/package.json b/packages/geotiff/package.json index 4acf07e..42adbf8 100644 --- a/packages/geotiff/package.json +++ b/packages/geotiff/package.json @@ -9,6 +9,10 @@ ".": { "types": "./dist/index.d.ts", "default": "./dist/index.js" + }, + "./pool/worker": { + "types": "./dist/pool/worker.d.ts", + "default": "./dist/pool/worker.js" } }, "sideEffects": false, diff --git a/packages/geotiff/src/fetch.ts b/packages/geotiff/src/fetch.ts index bc2a786..974a0eb 100644 --- a/packages/geotiff/src/fetch.ts +++ b/packages/geotiff/src/fetch.ts @@ -5,6 +5,7 @@ import type { RasterArray } from "./array.js"; import type { ProjJson } from "./crs.js"; import { decode } from "./decode.js"; import type { CachedTags } from "./ifd.js"; +import type { DecoderPool } from "./pool/pool.js"; import type { Tile } from "./tile"; import type { HasTransform } from "./transform"; @@ -35,13 +36,21 @@ export async function fetchTile( self: HasTiffReference, x: number, y: number, - options: { boundless?: boolean; signal?: AbortSignal } = {}, + { + boundless, + pool, + signal, + }: { + boundless?: boolean; + pool?: DecoderPool; + signal?: AbortSignal; + } = {}, ): Promise { if (self.maskImage != null) { throw new Error("Mask fetching not implemented yet"); } - const tile = await self.image.getTile(x, y, options); + const tile = await self.image.getTile(x, y, { signal }); if (tile === null) { throw new Error("Tile not found"); } @@ -65,7 +74,7 @@ export async function fetchTile( const samplesPerPixel = self.image.value(TiffTag.SamplesPerPixel) ?? 1; - const decodedPixels = await decode(bytes, compression, { + const decoderMetadata = { sampleFormat, bitsPerSample, samplesPerPixel, @@ -73,7 +82,10 @@ export async function fetchTile( height: self.tileHeight, predictor, planarConfiguration, - }); + }; + const decodedPixels = await (pool + ? pool.decode(bytes, compression, decoderMetadata) + : decode(bytes, compression, decoderMetadata)); const array: RasterArray = { ...decodedPixels, @@ -89,10 +101,7 @@ export async function fetchTile( return { x, y, - array: - options.boundless === false - ? clipToImageBounds(self, x, y, array) - : array, + array: boundless === false ? clipToImageBounds(self, x, y, array) : array, }; } diff --git a/packages/geotiff/src/geotiff.ts b/packages/geotiff/src/geotiff.ts index 3adb076..ea51844 100644 --- a/packages/geotiff/src/geotiff.ts +++ b/packages/geotiff/src/geotiff.ts @@ -11,11 +11,12 @@ import { fetchTile } from "./fetch.js"; import type { CachedTags, GeoKeyDirectory } from "./ifd.js"; import { extractGeoKeyDirectory, prefetchTags } from "./ifd.js"; import { Overview } from "./overview.js"; +import type { DecoderPool } from "./pool/pool.js"; import type { Tile } from "./tile.js"; import { createTransform, index, xy } from "./transform.js"; /** - * A higher-level GeoTIFF abstraction built on @cogeotiff/core. + * A high-level GeoTIFF abstraction built on @cogeotiff/core. * * Separates data IFDs from mask IFDs, pairs them by resolution level, * and exposes sorted overviews. Mirrors the Python async-geotiff API. @@ -263,7 +264,11 @@ export class GeoTIFF { async fetchTile( x: number, y: number, - options: { boundless?: boolean; signal?: AbortSignal } = {}, + options: { + boundless?: boolean; + pool?: DecoderPool; + signal?: AbortSignal; + } = {}, ): Promise { return await fetchTile(this, x, y, options); } diff --git a/packages/geotiff/src/index.ts b/packages/geotiff/src/index.ts index 9ea92b4..816677a 100644 --- a/packages/geotiff/src/index.ts +++ b/packages/geotiff/src/index.ts @@ -5,5 +5,7 @@ export type { DecodedPixels, Decoder, DecoderMetadata } from "./decode.js"; export { decode, registry } from "./decode.js"; export { GeoTIFF } from "./geotiff.js"; export { Overview } from "./overview.js"; +export type { DecoderPoolOptions } from "./pool/pool.js"; +export { DecoderPool, defaultDecoderPool } from "./pool/pool.js"; export type { Tile } from "./tile.js"; export { generateTileMatrixSet } from "./tile-matrix-set.js"; diff --git a/packages/geotiff/src/overview.ts b/packages/geotiff/src/overview.ts index ac154e8..ef0f2ef 100644 --- a/packages/geotiff/src/overview.ts +++ b/packages/geotiff/src/overview.ts @@ -5,6 +5,7 @@ import type { ProjJson } from "./crs.js"; import { fetchTile } from "./fetch.js"; import type { GeoTIFF } from "./geotiff.js"; import type { CachedTags, GeoKeyDirectory } from "./ifd.js"; +import type { DecoderPool } from "./pool/pool.js"; import type { Tile } from "./tile.js"; import { index, xy } from "./transform.js"; @@ -82,7 +83,11 @@ export class Overview { async fetchTile( x: number, y: number, - options: { boundless?: boolean; signal?: AbortSignal } = {}, + options: { + boundless?: boolean; + pool?: DecoderPool; + signal?: AbortSignal; + } = {}, ): Promise { return await fetchTile(this, x, y, options); } diff --git a/packages/geotiff/src/pool/pool.ts b/packages/geotiff/src/pool/pool.ts new file mode 100644 index 0000000..228e1a7 --- /dev/null +++ b/packages/geotiff/src/pool/pool.ts @@ -0,0 +1,136 @@ +import type { Compression } from "@cogeotiff/core"; +import type { DecodedPixels, DecoderMetadata } from "../decode.js"; +import { decode } from "../decode.js"; +import type { WorkerRequest } from "./wrapper.js"; +import { WorkerWrapper } from "./wrapper.js"; + +export type DecoderPoolOptions = { + /** + * Number of workers to create. Defaults to `navigator.hardwareConcurrency` + * when available, otherwise 2. Set to 0 to disable workers and decode on + * the main thread. + */ + size?: number; + + /** + * Factory that creates a Worker. When omitted, decoding runs on the main + * thread regardless of `size`. Provide this to enable off-main-thread + * decoding, e.g.: + * + * ```ts + * { + * createWorker: () => + * new Worker(new URL("./pool/worker.js", import.meta.url), { type: "module" }), + * } + * ``` + */ + createWorker?: () => Worker; +}; + +const defaultSize = + typeof navigator !== "undefined" ? (navigator.hardwareConcurrency ?? 2) : 2; + +/** + * Manages a pool of Web Workers for off-main-thread tile decoding. + * + * When no `createWorker` factory is provided, decoding falls back to the main + * thread. This lets the pool be constructed unconditionally and wired up with + * a worker later (or never, for SSR / Node environments). + */ +export class DecoderPool { + private readonly workerWrappers: WorkerWrapper[]; + + constructor(options: DecoderPoolOptions = {}) { + const { size = defaultSize, createWorker } = options; + + this.workerWrappers = []; + if (createWorker && size > 0) { + for (let i = 0; i < size; i++) { + this.workerWrappers.push(new WorkerWrapper(createWorker())); + } + } + } + + /** True when workers are available for off-main-thread decoding. */ + get hasWorkers(): boolean { + return this.workerWrappers.length > 0; + } + + /** + * Decode a compressed tile buffer. + * + * When workers are available, the compressed `bytes` buffer is transferred + * zero-copy to the least-loaded worker. The returned `DecodedPixels` typed + * array buffers are transferred back to the main thread. + * + * When no workers are available, decoding runs on the main thread via the + * normal `decode()` path. + */ + async decode( + bytes: ArrayBuffer, + compression: Compression, + metadata: DecoderMetadata, + ): Promise { + if (!this.hasWorkers) { + return decode(bytes, compression, metadata); + } + + const worker = this.leastLoaded(); + const request: Omit = { + compression: compression as number, + metadata, + buffer: bytes, + }; + const array = await worker.submitJob(request, [bytes]); + return array; + } + + /** Terminate all workers and release resources. */ + destroy(): void { + for (const w of this.workerWrappers) { + w.terminate(); + } + this.workerWrappers.length = 0; + } + + private leastLoaded(): WorkerWrapper { + let best = this.workerWrappers[0]!; + for (let i = 1; i < this.workerWrappers.length; i++) { + if (this.workerWrappers[i]!.jobCount < best.jobCount) { + best = this.workerWrappers[i]!; + } + } + return best; + } +} + +/** + * A default DecoderPool instance. + * + * It will be created on first call of `defaultDecoderPool`. + */ +let DEFAULT_POOL: DecoderPool | null = null; + +/** + * Create a default `DecoderPool` backed by the built-in worker. + * + * Call this once and reuse the returned pool. Creating it lazily (rather than + * as a module-level singleton) keeps the `new URL(…, import.meta.url)` out of + * the module's static initialisation, so bundlers that build IIFE/UMD outputs + * don't try to inline the worker at build time. + * + * ```ts + * const pool = defaultDecoderPool(); + * ``` + */ +export function defaultDecoderPool(): DecoderPool { + if (DEFAULT_POOL !== null) { + return DEFAULT_POOL; + } + + DEFAULT_POOL = new DecoderPool({ + createWorker: () => + new Worker(new URL("./worker.js", import.meta.url), { type: "module" }), + }); + return DEFAULT_POOL; +} diff --git a/packages/geotiff/src/pool/worker.ts b/packages/geotiff/src/pool/worker.ts new file mode 100644 index 0000000..ca6e95b --- /dev/null +++ b/packages/geotiff/src/pool/worker.ts @@ -0,0 +1,43 @@ +/** + * Default worker entry point for DecoderPool. + * + * In most cases you don't need to reference this file directly — call + * `defaultDecoderPool()` instead, which creates a pool backed by this worker. + * + * To override codecs (e.g. swap in a WASM zstd decoder), create your own + * worker file that mutates `registry` before importing this handler: + * + * import { registry } from "@developmentseed/geotiff"; + * import { Compression } from "@cogeotiff/core"; + * registry.set(Compression.Zstd, () => import("./my-wasm-zstd.js").then(m => m.decode)); + * import "@developmentseed/geotiff/pool/worker"; + * + * Then pass a custom `createWorker` factory to `DecoderPool`: + * + * new DecoderPool({ + * createWorker: () => + * new Worker(new URL("./my-worker.js", import.meta.url), { type: "module" }), + * }); + */ + +import { decode } from "../decode.js"; +import type { + WorkerErrorResponse, + WorkerRequest, + WorkerResponse, +} from "./wrapper.js"; +import { collectTransferables } from "./wrapper.js"; + +self.addEventListener("message", async (e: MessageEvent) => { + const { jobId, compression, metadata, buffer } = e.data; + + try { + const array = await decode(buffer, compression, metadata); + const transferables = collectTransferables(array); + const response: WorkerResponse = { jobId, pixels: array }; + self.postMessage(response, { transfer: transferables }); + } catch (err) { + const response: WorkerErrorResponse = { jobId, error: String(err) }; + self.postMessage(response); + } +}); diff --git a/packages/geotiff/src/pool/wrapper.ts b/packages/geotiff/src/pool/wrapper.ts new file mode 100644 index 0000000..993cb3f --- /dev/null +++ b/packages/geotiff/src/pool/wrapper.ts @@ -0,0 +1,90 @@ +import type { Compression } from "@cogeotiff/core"; +import type { DecodedPixels, DecoderMetadata } from "../decode.js"; + +/** Message sent from main thread to worker. */ +export type WorkerRequest = { + jobId: number; + compression: Compression; + metadata: DecoderMetadata; + buffer: ArrayBuffer; +}; + +/** Successful response from worker. */ +export type WorkerResponse = { + jobId: number; + pixels: DecodedPixels; + error?: never; +}; + +/** Error response from worker. */ +export type WorkerErrorResponse = { + jobId: number; + error: string; + pixels?: never; +}; + +/** Collect the transferable ArrayBuffers from a DecodedPixels. */ +export function collectTransferables(pixels: DecodedPixels): Transferable[] { + if (pixels.layout === "pixel-interleaved") { + return [pixels.data.buffer]; + } + return pixels.bands.map((b) => b.buffer); +} + +type PendingJob = { + resolve: (pixels: DecodedPixels) => void; + reject: (err: Error) => void; +}; + +/** + * Wraps a Worker, tracking in-flight jobs and routing responses via jobId. + */ +export class WorkerWrapper { + readonly worker: Worker; + private jobIdCounter = 0; + private jobs = new Map(); + + constructor(worker: Worker) { + this.worker = worker; + this.worker.addEventListener("message", (e: MessageEvent) => + this.onMessage(e), + ); + } + + get jobCount(): number { + return this.jobs.size; + } + + private onMessage( + e: MessageEvent, + ): void { + const { jobId, error, pixels } = e.data; + const job = this.jobs.get(jobId); + this.jobs.delete(jobId); + if (!job) return; + + if (error) { + job.reject(new Error(error)); + } else { + job.resolve(pixels!); + } + } + + submitJob( + request: Omit, + transferables: Transferable[], + ): Promise { + const jobId = this.jobIdCounter++; + return new Promise((resolve, reject) => { + this.jobs.set(jobId, { resolve, reject }); + this.worker.postMessage( + { ...request, jobId }, + { transfer: transferables }, + ); + }); + } + + terminate(): void { + this.worker.terminate(); + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 07c9772..fee7c5e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,14 +5,14 @@ settings: excludeLinksFromLockfile: false overrides: - '@deck.gl/aggregation-layers': ^9.2.8 - '@deck.gl/core': ^9.2.8 - '@deck.gl/extensions': ^9.2.8 - '@deck.gl/geo-layers': ^9.2.8 - '@deck.gl/layers': ^9.2.8 - '@deck.gl/mapbox': ^9.2.8 - '@deck.gl/mesh-layers': ^9.2.8 - '@deck.gl/widgets': ^9.2.8 + '@deck.gl/aggregation-layers': ^9.2.10 + '@deck.gl/core': ^9.2.10 + '@deck.gl/extensions': ^9.2.10 + '@deck.gl/geo-layers': ^9.2.10 + '@deck.gl/layers': ^9.2.10 + '@deck.gl/mapbox': ^9.2.10 + '@deck.gl/mesh-layers': ^9.2.10 + '@deck.gl/widgets': ^9.2.10 '@loaders.gl/core': ^4.3.4 '@luma.gl/constants': ^9.2.6 '@luma.gl/core': ^9.2.6 @@ -41,19 +41,19 @@ importers: examples/cog-basic: dependencies: '@deck.gl/core': - specifier: ^9.2.8 + specifier: ^9.2.10 version: 9.2.10 '@deck.gl/geo-layers': - specifier: ^9.2.8 + specifier: ^9.2.10 version: 9.2.10(@deck.gl/core@9.2.10)(@deck.gl/extensions@9.2.5(@deck.gl/core@9.2.10)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6))))(@deck.gl/layers@9.2.10(@deck.gl/core@9.2.10)(@loaders.gl/core@4.3.4)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6))))(@deck.gl/mesh-layers@9.2.10(@deck.gl/core@9.2.10)(@loaders.gl/core@4.3.4)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))(@luma.gl/gltf@9.2.6(@luma.gl/constants@9.2.6)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))(@loaders.gl/core@4.3.4)(@luma.gl/constants@9.2.6)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6))) '@deck.gl/layers': - specifier: ^9.2.8 + specifier: ^9.2.10 version: 9.2.10(@deck.gl/core@9.2.10)(@loaders.gl/core@4.3.4)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6))) '@deck.gl/mapbox': - specifier: ^9.2.8 + specifier: ^9.2.10 version: 9.2.10(@deck.gl/core@9.2.10)(@luma.gl/constants@9.2.6)(@luma.gl/core@9.2.6)(@math.gl/web-mercator@4.1.0) '@deck.gl/mesh-layers': - specifier: ^9.2.8 + specifier: ^9.2.10 version: 9.2.10(@deck.gl/core@9.2.10)(@loaders.gl/core@4.3.4)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))(@luma.gl/gltf@9.2.6(@luma.gl/constants@9.2.6)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)) '@developmentseed/deck.gl-geotiff': specifier: workspace:^ @@ -93,19 +93,19 @@ importers: examples/land-cover: dependencies: '@deck.gl/core': - specifier: ^9.2.8 + specifier: ^9.2.10 version: 9.2.10 '@deck.gl/geo-layers': - specifier: ^9.2.8 + specifier: ^9.2.10 version: 9.2.10(@deck.gl/core@9.2.10)(@deck.gl/extensions@9.2.5(@deck.gl/core@9.2.10)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6))))(@deck.gl/layers@9.2.10(@deck.gl/core@9.2.10)(@loaders.gl/core@4.3.4)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6))))(@deck.gl/mesh-layers@9.2.10(@deck.gl/core@9.2.10)(@loaders.gl/core@4.3.4)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))(@luma.gl/gltf@9.2.6(@luma.gl/constants@9.2.6)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))(@loaders.gl/core@4.3.4)(@luma.gl/constants@9.2.6)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6))) '@deck.gl/layers': - specifier: ^9.2.8 + specifier: ^9.2.10 version: 9.2.10(@deck.gl/core@9.2.10)(@loaders.gl/core@4.3.4)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6))) '@deck.gl/mapbox': - specifier: ^9.2.8 + specifier: ^9.2.10 version: 9.2.10(@deck.gl/core@9.2.10)(@luma.gl/constants@9.2.6)(@luma.gl/core@9.2.6)(@math.gl/web-mercator@4.1.0) '@deck.gl/mesh-layers': - specifier: ^9.2.8 + specifier: ^9.2.10 version: 9.2.10(@deck.gl/core@9.2.10)(@loaders.gl/core@4.3.4)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))(@luma.gl/gltf@9.2.6(@luma.gl/constants@9.2.6)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)) '@developmentseed/deck.gl-geotiff': specifier: workspace:^ @@ -151,13 +151,13 @@ importers: examples/naip-mosaic: dependencies: '@deck.gl/core': - specifier: ^9.2.8 + specifier: ^9.2.10 version: 9.2.10 '@deck.gl/layers': - specifier: ^9.2.8 + specifier: ^9.2.10 version: 9.2.10(@deck.gl/core@9.2.10)(@loaders.gl/core@4.3.4)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6))) '@deck.gl/mapbox': - specifier: ^9.2.8 + specifier: ^9.2.10 version: 9.2.10(@deck.gl/core@9.2.10)(@luma.gl/constants@9.2.6)(@luma.gl/core@9.2.6)(@math.gl/web-mercator@4.1.0) '@developmentseed/deck.gl-geotiff': specifier: workspace:^ @@ -227,17 +227,17 @@ importers: specifier: ^9.4.0 version: 9.4.0 '@deck.gl/core': - specifier: ^9.2.8 - version: 9.2.8 + specifier: ^9.2.10 + version: 9.2.10 '@deck.gl/geo-layers': - specifier: ^9.2.8 - version: 9.2.8(@deck.gl/core@9.2.8)(@deck.gl/extensions@9.2.5(@deck.gl/core@9.2.8)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6))))(@deck.gl/layers@9.2.8(@deck.gl/core@9.2.8)(@loaders.gl/core@4.3.4)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6))))(@deck.gl/mesh-layers@9.2.8(@deck.gl/core@9.2.8)(@loaders.gl/core@4.3.4)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))(@luma.gl/gltf@9.2.6(@luma.gl/constants@9.2.6)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))(@loaders.gl/core@4.3.4)(@luma.gl/constants@9.2.6)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6))) + specifier: ^9.2.10 + version: 9.2.10(@deck.gl/core@9.2.10)(@deck.gl/extensions@9.2.5(@deck.gl/core@9.2.10)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6))))(@deck.gl/layers@9.2.10(@deck.gl/core@9.2.10)(@loaders.gl/core@4.3.4)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6))))(@deck.gl/mesh-layers@9.2.10(@deck.gl/core@9.2.10)(@loaders.gl/core@4.3.4)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))(@luma.gl/gltf@9.2.6(@luma.gl/constants@9.2.6)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))(@loaders.gl/core@4.3.4)(@luma.gl/constants@9.2.6)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6))) '@deck.gl/layers': - specifier: ^9.2.8 - version: 9.2.8(@deck.gl/core@9.2.8)(@loaders.gl/core@4.3.4)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6))) + specifier: ^9.2.10 + version: 9.2.10(@deck.gl/core@9.2.10)(@loaders.gl/core@4.3.4)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6))) '@deck.gl/mesh-layers': - specifier: ^9.2.8 - version: 9.2.8(@deck.gl/core@9.2.8)(@loaders.gl/core@4.3.4)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))(@luma.gl/gltf@9.2.6(@luma.gl/constants@9.2.6)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)) + specifier: ^9.2.10 + version: 9.2.10(@deck.gl/core@9.2.10)(@loaders.gl/core@4.3.4)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))(@luma.gl/gltf@9.2.6(@luma.gl/constants@9.2.6)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)) '@developmentseed/affine': specifier: workspace:^ version: link:../affine @@ -282,17 +282,17 @@ importers: packages/deck.gl-raster: dependencies: '@deck.gl/core': - specifier: ^9.2.8 - version: 9.2.8 + specifier: ^9.2.10 + version: 9.2.10 '@deck.gl/geo-layers': - specifier: ^9.2.8 - version: 9.2.8(@deck.gl/core@9.2.8)(@deck.gl/extensions@9.2.5(@deck.gl/core@9.2.8)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6))))(@deck.gl/layers@9.2.8(@deck.gl/core@9.2.8)(@loaders.gl/core@4.3.4)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6))))(@deck.gl/mesh-layers@9.2.8(@deck.gl/core@9.2.8)(@loaders.gl/core@4.3.4)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))(@luma.gl/gltf@9.2.6(@luma.gl/constants@9.2.6)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))(@loaders.gl/core@4.3.4)(@luma.gl/constants@9.2.6)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6))) + specifier: ^9.2.10 + version: 9.2.10(@deck.gl/core@9.2.10)(@deck.gl/extensions@9.2.5(@deck.gl/core@9.2.10)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6))))(@deck.gl/layers@9.2.10(@deck.gl/core@9.2.10)(@loaders.gl/core@4.3.4)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6))))(@deck.gl/mesh-layers@9.2.10(@deck.gl/core@9.2.10)(@loaders.gl/core@4.3.4)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))(@luma.gl/gltf@9.2.6(@luma.gl/constants@9.2.6)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))(@loaders.gl/core@4.3.4)(@luma.gl/constants@9.2.6)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6))) '@deck.gl/layers': - specifier: ^9.2.8 - version: 9.2.8(@deck.gl/core@9.2.8)(@loaders.gl/core@4.3.4)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6))) + specifier: ^9.2.10 + version: 9.2.10(@deck.gl/core@9.2.10)(@loaders.gl/core@4.3.4)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6))) '@deck.gl/mesh-layers': - specifier: ^9.2.8 - version: 9.2.8(@deck.gl/core@9.2.8)(@loaders.gl/core@4.3.4)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))(@luma.gl/gltf@9.2.6(@luma.gl/constants@9.2.6)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)) + specifier: ^9.2.10 + version: 9.2.10(@deck.gl/core@9.2.10)(@loaders.gl/core@4.3.4)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))(@luma.gl/gltf@9.2.6(@luma.gl/constants@9.2.6)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)) '@developmentseed/affine': specifier: workspace:^ version: link:../affine @@ -698,34 +698,20 @@ packages: '@deck.gl/core@9.2.10': resolution: {integrity: sha512-c3IYKNAeTKSkH0LPUBoAfYef0/aw32Uo7UorcH+FCG9n7iPZT8tg+yaGb7ylWYt5Rdx9Ah/ztnZxOVJ+jUT0Sg==} - '@deck.gl/core@9.2.8': - resolution: {integrity: sha512-VZgf+LN53KEm/o8xYzh7fejmslIbTwze5Daoqg2Wt7VAlw734M9EHcINpyGTm7ln9R5qywG/KW7MNfHVvx6EKw==} - '@deck.gl/extensions@9.2.5': resolution: {integrity: sha512-GJRPmG+GD1tdblpplQlb4jlNywRb8aQYPEowPLKxglXSGRzgpOrqJYI1PcJhCowdL7/S8bCY1ay8nkXE3gRsgw==} peerDependencies: - '@deck.gl/core': ^9.2.8 + '@deck.gl/core': ^9.2.10 '@luma.gl/core': ^9.2.6 '@luma.gl/engine': ^9.2.6 '@deck.gl/geo-layers@9.2.10': resolution: {integrity: sha512-Rt271ANfwZbGQIH83yxvbxaguBK6QQ3OrdxT05dN0B2NxsBwzaFcnB1UTB0Fna5+SVGBwZAMUr0FzunG/V5ljA==} peerDependencies: - '@deck.gl/core': ^9.2.8 - '@deck.gl/extensions': ^9.2.8 - '@deck.gl/layers': ^9.2.8 - '@deck.gl/mesh-layers': ^9.2.8 - '@loaders.gl/core': ^4.3.4 - '@luma.gl/core': ^9.2.6 - '@luma.gl/engine': ^9.2.6 - - '@deck.gl/geo-layers@9.2.8': - resolution: {integrity: sha512-WEiPbDM6bqXityfFGplsKNTpYKzfUyj/mpnQpaNJ5qJ6Cl2W7SDnP+0K/UisbZ8m8eXYCiiu+ykb4+YwvOFc8g==} - peerDependencies: - '@deck.gl/core': ^9.2.8 - '@deck.gl/extensions': ^9.2.8 - '@deck.gl/layers': ^9.2.8 - '@deck.gl/mesh-layers': ^9.2.8 + '@deck.gl/core': ^9.2.10 + '@deck.gl/extensions': ^9.2.10 + '@deck.gl/layers': ^9.2.10 + '@deck.gl/mesh-layers': ^9.2.10 '@loaders.gl/core': ^4.3.4 '@luma.gl/core': ^9.2.6 '@luma.gl/engine': ^9.2.6 @@ -733,15 +719,7 @@ packages: '@deck.gl/layers@9.2.10': resolution: {integrity: sha512-1emc+0Z+w6Vrmyp39Q+3R/HNbPcABH6kYXe6zTOOZYJX5M3pUssukFLW+Ds96/X9emF53vUC1Rnq9Aj/YY2lWg==} peerDependencies: - '@deck.gl/core': ^9.2.8 - '@loaders.gl/core': ^4.3.4 - '@luma.gl/core': ^9.2.6 - '@luma.gl/engine': ^9.2.6 - - '@deck.gl/layers@9.2.8': - resolution: {integrity: sha512-LnIZ07jKuFRTYulBjyS2z1VHMkGXTUs8C0iSxJR8GsCBBI8d/1zEIT1xbkGaArai50OjsrCDuG2KKKLbG8ME3w==} - peerDependencies: - '@deck.gl/core': ^9.2.8 + '@deck.gl/core': ^9.2.10 '@loaders.gl/core': ^4.3.4 '@luma.gl/core': ^9.2.6 '@luma.gl/engine': ^9.2.6 @@ -749,7 +727,7 @@ packages: '@deck.gl/mapbox@9.2.10': resolution: {integrity: sha512-6xyFv/SBjGyecxCYPmyDQc8XA+Ldj+/BpsT3Szk1QFNekgbvHA/4W62PzomMmoMAf4iwG80mWIqaq8wSzSlR0Q==} peerDependencies: - '@deck.gl/core': ^9.2.8 + '@deck.gl/core': ^9.2.10 '@luma.gl/constants': ^9.2.6 '@luma.gl/core': ^9.2.6 '@math.gl/web-mercator': ^4.1.0 @@ -757,16 +735,7 @@ packages: '@deck.gl/mesh-layers@9.2.10': resolution: {integrity: sha512-YeVIWnODdFkz5yNYzpCtzF6wRhBpe2Gg+oc1hNNrRwdQUV3bsRLJUO13SKNagUKWIbey9K/c4ps2Ns0Dg2AzGg==} peerDependencies: - '@deck.gl/core': ^9.2.8 - '@luma.gl/core': ^9.2.6 - '@luma.gl/engine': ^9.2.6 - '@luma.gl/gltf': ^9.2.6 - '@luma.gl/shadertools': ^9.2.6 - - '@deck.gl/mesh-layers@9.2.8': - resolution: {integrity: sha512-Ax0Y4bb+288myWUu4fa+uXIPHQP3cSgRPMVi6HsPzWovv2E7wtfVzyGGWChs3DmdttGY/ooM6R7aNpwC1ZzEyQ==} - peerDependencies: - '@deck.gl/core': ^9.2.8 + '@deck.gl/core': ^9.2.10 '@luma.gl/core': ^9.2.6 '@luma.gl/engine': ^9.2.6 '@luma.gl/gltf': ^9.2.6 @@ -2972,26 +2941,6 @@ snapshots: gl-matrix: 3.4.4 mjolnir.js: 3.0.0 - '@deck.gl/core@9.2.8': - dependencies: - '@loaders.gl/core': 4.3.4 - '@loaders.gl/images': 4.3.4(@loaders.gl/core@4.3.4) - '@luma.gl/constants': 9.2.6 - '@luma.gl/core': 9.2.6 - '@luma.gl/engine': 9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)) - '@luma.gl/shadertools': 9.2.6(@luma.gl/core@9.2.6) - '@luma.gl/webgl': 9.2.6(@luma.gl/core@9.2.6) - '@math.gl/core': 4.1.0 - '@math.gl/sun': 4.1.0 - '@math.gl/types': 4.1.0 - '@math.gl/web-mercator': 4.1.0 - '@probe.gl/env': 4.1.0 - '@probe.gl/log': 4.1.0 - '@probe.gl/stats': 4.1.0 - '@types/offscreencanvas': 2019.7.3 - gl-matrix: 3.4.4 - mjolnir.js: 3.0.0 - '@deck.gl/extensions@9.2.5(@deck.gl/core@9.2.10)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))': dependencies: '@deck.gl/core': 9.2.10 @@ -3001,15 +2950,6 @@ snapshots: '@luma.gl/shadertools': 9.2.6(@luma.gl/core@9.2.6) '@math.gl/core': 4.1.0 - '@deck.gl/extensions@9.2.5(@deck.gl/core@9.2.8)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))': - dependencies: - '@deck.gl/core': 9.2.8 - '@luma.gl/constants': 9.2.6 - '@luma.gl/core': 9.2.6 - '@luma.gl/engine': 9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)) - '@luma.gl/shadertools': 9.2.6(@luma.gl/core@9.2.6) - '@math.gl/core': 4.1.0 - '@deck.gl/geo-layers@9.2.10(@deck.gl/core@9.2.10)(@deck.gl/extensions@9.2.5(@deck.gl/core@9.2.10)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6))))(@deck.gl/layers@9.2.10(@deck.gl/core@9.2.10)(@loaders.gl/core@4.3.4)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6))))(@deck.gl/mesh-layers@9.2.10(@deck.gl/core@9.2.10)(@loaders.gl/core@4.3.4)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))(@luma.gl/gltf@9.2.6(@luma.gl/constants@9.2.6)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))(@loaders.gl/core@4.3.4)(@luma.gl/constants@9.2.6)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))': dependencies: '@deck.gl/core': 9.2.10 @@ -3039,35 +2979,6 @@ snapshots: transitivePeerDependencies: - '@luma.gl/constants' - '@deck.gl/geo-layers@9.2.8(@deck.gl/core@9.2.8)(@deck.gl/extensions@9.2.5(@deck.gl/core@9.2.8)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6))))(@deck.gl/layers@9.2.8(@deck.gl/core@9.2.8)(@loaders.gl/core@4.3.4)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6))))(@deck.gl/mesh-layers@9.2.8(@deck.gl/core@9.2.8)(@loaders.gl/core@4.3.4)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))(@luma.gl/gltf@9.2.6(@luma.gl/constants@9.2.6)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))(@loaders.gl/core@4.3.4)(@luma.gl/constants@9.2.6)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))': - dependencies: - '@deck.gl/core': 9.2.8 - '@deck.gl/extensions': 9.2.5(@deck.gl/core@9.2.8)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6))) - '@deck.gl/layers': 9.2.8(@deck.gl/core@9.2.8)(@loaders.gl/core@4.3.4)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6))) - '@deck.gl/mesh-layers': 9.2.8(@deck.gl/core@9.2.8)(@loaders.gl/core@4.3.4)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))(@luma.gl/gltf@9.2.6(@luma.gl/constants@9.2.6)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)) - '@loaders.gl/3d-tiles': 4.3.4(@loaders.gl/core@4.3.4) - '@loaders.gl/core': 4.3.4 - '@loaders.gl/gis': 4.3.4(@loaders.gl/core@4.3.4) - '@loaders.gl/loader-utils': 4.3.4(@loaders.gl/core@4.3.4) - '@loaders.gl/mvt': 4.3.4(@loaders.gl/core@4.3.4) - '@loaders.gl/schema': 4.3.4(@loaders.gl/core@4.3.4) - '@loaders.gl/terrain': 4.3.4(@loaders.gl/core@4.3.4) - '@loaders.gl/tiles': 4.3.4(@loaders.gl/core@4.3.4) - '@loaders.gl/wms': 4.3.4(@loaders.gl/core@4.3.4) - '@luma.gl/core': 9.2.6 - '@luma.gl/engine': 9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)) - '@luma.gl/gltf': 9.2.6(@luma.gl/constants@9.2.6)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)) - '@luma.gl/shadertools': 9.2.6(@luma.gl/core@9.2.6) - '@math.gl/core': 4.1.0 - '@math.gl/culling': 4.1.0 - '@math.gl/web-mercator': 4.1.0 - '@types/geojson': 7946.0.16 - a5-js: 0.5.0 - h3-js: 4.4.0 - long: 3.2.0 - transitivePeerDependencies: - - '@luma.gl/constants' - '@deck.gl/layers@9.2.10(@deck.gl/core@9.2.10)(@loaders.gl/core@4.3.4)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))': dependencies: '@deck.gl/core': 9.2.10 @@ -3083,21 +2994,6 @@ snapshots: '@math.gl/web-mercator': 4.1.0 earcut: 2.2.4 - '@deck.gl/layers@9.2.8(@deck.gl/core@9.2.8)(@loaders.gl/core@4.3.4)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))': - dependencies: - '@deck.gl/core': 9.2.8 - '@loaders.gl/core': 4.3.4 - '@loaders.gl/images': 4.3.4(@loaders.gl/core@4.3.4) - '@loaders.gl/schema': 4.3.4(@loaders.gl/core@4.3.4) - '@luma.gl/core': 9.2.6 - '@luma.gl/engine': 9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)) - '@luma.gl/shadertools': 9.2.6(@luma.gl/core@9.2.6) - '@mapbox/tiny-sdf': 2.0.7 - '@math.gl/core': 4.1.0 - '@math.gl/polygon': 4.1.0 - '@math.gl/web-mercator': 4.1.0 - earcut: 2.2.4 - '@deck.gl/mapbox@9.2.10(@deck.gl/core@9.2.10)(@luma.gl/constants@9.2.6)(@luma.gl/core@9.2.6)(@math.gl/web-mercator@4.1.0)': dependencies: '@deck.gl/core': 9.2.10 @@ -3117,18 +3013,6 @@ snapshots: transitivePeerDependencies: - '@loaders.gl/core' - '@deck.gl/mesh-layers@9.2.8(@deck.gl/core@9.2.8)(@loaders.gl/core@4.3.4)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))(@luma.gl/gltf@9.2.6(@luma.gl/constants@9.2.6)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6))': - dependencies: - '@deck.gl/core': 9.2.8 - '@loaders.gl/gltf': 4.3.4(@loaders.gl/core@4.3.4) - '@loaders.gl/schema': 4.3.4(@loaders.gl/core@4.3.4) - '@luma.gl/core': 9.2.6 - '@luma.gl/engine': 9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)) - '@luma.gl/gltf': 9.2.6(@luma.gl/constants@9.2.6)(@luma.gl/core@9.2.6)(@luma.gl/engine@9.2.6(@luma.gl/core@9.2.6)(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)))(@luma.gl/shadertools@9.2.6(@luma.gl/core@9.2.6)) - '@luma.gl/shadertools': 9.2.6(@luma.gl/core@9.2.6) - transitivePeerDependencies: - - '@loaders.gl/core' - '@developmentseed/lzw-tiff-decoder@0.2.2': {} '@esbuild/aix-ppc64@0.27.2':