{
  "version": 3,
  "sources": ["../src/index.ts", "../src/tile-queue.ts"],
  "sourcesContent": ["/**\n * maplibre-proj \u2014 MapLibre GL JS integration layer for backproj.\n *\n * reprojectStyle() takes a MapLibre style and a CRS string, returns a new\n * style with GeoJSON sources transformed and vector tile sources rewired\n * through protocol handlers that run the MVT reprojection pipeline.\n *\n * Regional CRS also returns maxBounds for viewport lock.\n */\nimport type { FeatureCollection } from 'geojson';\nimport {\n  initProj,\n  buildTransformer,\n  buildTransformerPool,\n  getWorldBounds,\n  reprojectGeoJSON,\n  createTileProcessor,\n  createTileCache,\n  transformCoords,\n  debugConfig,\n  shutdownTileWorkers as shutdownBackprojWorkers,\n} from 'backproj';\nimport type { Transformer, FetchTileFn, TileProcessor } from 'backproj';\nimport type { LRUCache } from 'lru-cache';\nimport { addProtocol, removeProtocol } from 'maplibre-gl';\nimport { TileQueue } from './tile-queue.js';\nimport type { StyleSpecification } from 'maplibre-gl';\n\nexport type { Transformer } from 'backproj';\n\nexport interface ReprojectResult {\n  style: StyleSpecification;\n  bounds: [[number, number], [number, number]];\n  maxBounds?: [[number, number], [number, number]];\n  transformer: Transformer;\n  cleanup: () => void;\n}\n\nlet sharedProcessor: TileProcessor | null = null;\nlet sharedPoolCRS: string | null = null;\n\n// Stable protocol/cache state per source name, reused across reprojectStyle\n// calls for the same CRS. Avoids tearing down protocols and losing cached tiles\n// when the user toggles unrelated settings (debug labels, data mode, etc.).\nconst stableProtocols = new Map<string, { protocolId: string; cache: LRUCache<string, ArrayBuffer>; crs: string; queue?: TileQueue }>();\n\nexport async function reprojectStyle(options: {\n  style: StyleSpecification;\n  crs: string;\n  transformer?: Transformer;\n  tileBoundaries?: boolean;\n}): Promise<ReprojectResult> {\n  const { crs } = options;\n  const style: StyleSpecification = JSON.parse(JSON.stringify(options.style));\n\n  let transformer: Transformer;\n  if (options.transformer) {\n    transformer = options.transformer;\n  } else {\n    await initProj();\n    transformer = await buildTransformer(crs);\n  }\n\n  const activeProtocols: string[] = [];\n  const staleProtocols: string[] = [];\n\n  for (const [name, source] of Object.entries(style.sources)) {\n    if (source.type === 'geojson' && source.data && typeof source.data === 'object') {\n      const fc = source.data as FeatureCollection;\n      if (fc.type === 'FeatureCollection') {\n        style.sources[name] = { ...source, data: await reprojectGeoJSON(fc, transformer) };\n      }\n    }\n\n    if (source.type === 'vector' && source.tiles) {\n      if (!sharedProcessor) {\n        sharedProcessor = await createTileProcessor();\n      }\n      if (sharedPoolCRS !== crs) {\n        const poolSize = typeof navigator !== 'undefined'\n          ? (navigator.hardwareConcurrency || 4)\n          : 4;\n        const tPool = await buildTransformerPool(crs, poolSize);\n        sharedProcessor.setTransformerPool(tPool);\n        sharedPoolCRS = crs;\n      }\n\n      const existing = stableProtocols.get(name);\n      let protocolId: string;\n      let cache: LRUCache<string, ArrayBuffer>;\n\n      if (existing && existing.crs === crs) {\n        protocolId = existing.protocolId;\n        cache = existing.cache;\n      } else {\n        if (existing) {\n          staleProtocols.push(existing.protocolId);\n          existing.queue?.clear();\n          stableProtocols.delete(name);\n        }\n        protocolId = `reproj-${Date.now()}-${name}`;\n        cache = createTileCache();\n        const queue = new TileQueue(sharedProcessor.poolSize);\n        registerVectorProtocol(\n          protocolId, source, transformer, sharedProcessor, cache, queue,\n        );\n        stableProtocols.set(name, { protocolId, cache, crs, queue });\n      }\n\n      source.tiles = source.tiles.map((url: string) =>\n        url.startsWith(`${protocolId}://`) ? url : `${protocolId}://${url}`\n      );\n      activeProtocols.push(protocolId);\n    }\n  }\n\n  (style as any).projection = { type: 'mercator' };\n\n  const bounds = await getWorldBounds(transformer);\n\n  let maxBounds: [[number, number], [number, number]] | undefined;\n  const aou = transformer._areaOfUse;\n  const isRegional = transformer._Ox !== 0 || transformer._Oy !== 0;\n  if (aou && isRegional) {\n    const MAX_BOUNDS_PADDING = 0.10;\n    const padLon = (aou.east - aou.west) * MAX_BOUNDS_PADDING;\n    const padLat = (aou.north - aou.south) * MAX_BOUNDS_PADDING;\n    const mbCorners = await transformCoords(\n      [\n        [Math.max(-180, aou.west - padLon), Math.max(-89.999999, aou.south - padLat)],\n        [Math.min(180, aou.east + padLon), Math.min(89.999999, aou.north + padLat)],\n      ],\n      transformer,\n    );\n    if (mbCorners.every(([lon, lat]: [number, number]) => isFinite(lon) && isFinite(lat))) {\n      maxBounds = [mbCorners[0], mbCorners[1]];\n    }\n  }\n\n  debugConfig.labels = options.tileBoundaries ?? false;\n\n  if (options.tileBoundaries) {\n    let vectorSourceId: string | null = null;\n    for (const [name, source] of Object.entries(style.sources)) {\n      if (source.type === 'vector') { vectorSourceId = name; break; }\n    }\n    if (vectorSourceId) {\n      const hasGlyphs = !!style.glyphs;\n      // TODO: if custom glyph servers lack these, may need style-based font detection\n      const font = ['Open Sans Regular', 'Arial Unicode MS Regular'];\n\n      style.layers.push({\n        id: '_debug-borders',\n        type: 'line',\n        source: vectorSourceId,\n        'source-layer': '_debug',\n        filter: ['==', '$type', 'LineString'],\n        paint: { 'line-color': '#d32f2f', 'line-width': 1.5, 'line-dasharray': [4, 4] },\n      });\n      if (hasGlyphs) {\n        style.layers.push({\n          id: '_debug-labels',\n          type: 'symbol',\n          source: vectorSourceId,\n          'source-layer': '_debug',\n          filter: ['==', '$type', 'Point'],\n          layout: {\n            'text-field': ['concat', ['get', 'label'], '\\n', ['get', 'size'], '\\n', ['get', 'bounds']],\n            'text-size': 11,\n            'text-allow-overlap': true,\n            'text-font': font,\n          },\n          paint: { 'text-color': '#d32f2f', 'text-halo-color': '#ffffff', 'text-halo-width': 1.5 },\n        });\n      }\n      style.layers.push({\n        id: '_debug-input-borders',\n        type: 'line',\n        source: vectorSourceId,\n        'source-layer': '_debug_input',\n        paint: { 'line-color': '#1565c0', 'line-width': 1.5, 'line-dasharray': [2, 2] },\n      });\n      if (hasGlyphs) {\n        style.layers.push({\n          id: '_debug-input-labels',\n          type: 'symbol',\n          source: vectorSourceId,\n          'source-layer': '_debug_input_labels',\n          layout: {\n            'text-field': ['get', 'label'],\n            'text-size': 10,\n            'text-allow-overlap': true,\n            'text-font': font,\n          },\n          paint: { 'text-color': '#1565c0', 'text-halo-color': '#ffffff', 'text-halo-width': 1.5 },\n        });\n      }\n    }\n  } else {\n    style.layers = style.layers.filter((l: any) => !l.id.startsWith('_debug'));\n  }\n\n  for (const proto of staleProtocols) {\n    setTimeout(() => removeProtocol(proto), 5000);\n  }\n\n  const cleanup = () => {\n    for (const proto of staleProtocols) {\n      removeProtocol(proto);\n    }\n    for (const proto of activeProtocols) {\n      removeProtocol(proto);\n      for (const [name, entry] of stableProtocols) {\n        if (entry.protocolId === proto) {\n          entry.queue?.clear();\n          stableProtocols.delete(name);\n          break;\n        }\n      }\n    }\n  };\n\n  return { style, bounds, maxBounds, transformer, cleanup };\n}\n\nfunction registerVectorProtocol(\n  protocolId: string,\n  source: any,\n  transformer: Transformer,\n  processor: TileProcessor,\n  cache: LRUCache<string, ArrayBuffer>,\n  queue: TileQueue,\n): void {\n  const originalTiles = [...source.tiles];\n  const outputCache = createTileCache();\n\n  addProtocol(protocolId, (params: { url: string }, abortController: AbortController) => {\n    const url = params.url.replace(`${protocolId}://`, '');\n\n    const match = url.match(/(\\d+)\\/(\\d+)\\/(\\d+)/);\n    if (!match) return Promise.reject(new Error(`Cannot parse tile coords from ${url}`));\n    const [, zStr, xStr, yStr] = match;\n    const z = parseInt(zStr), x = parseInt(xStr), y = parseInt(yStr);\n\n    const outputKey = `${z}/${x}/${y}`;\n    const cached = outputCache.get(outputKey);\n    if (cached) return Promise.resolve({ data: cached.slice(0) });\n\n    return new Promise<{ data: ArrayBuffer }>((resolve, reject) => {\n      queue.enqueue(outputKey, abortController, async () => {\n        const cached2 = outputCache.get(outputKey);\n        if (cached2) { resolve({ data: cached2.slice(0) }); return; }\n\n        // Uses first tile URL only. Multi-URL round-robin not implemented.\n        const fetchTile: FetchTileFn = async (fz: number, fx: number, fy: number) => {\n          const realUrl = originalTiles[0]\n            .replace('{z}', String(fz))\n            .replace('{x}', String(fx))\n            .replace('{y}', String(fy));\n          const resp = await fetch(realUrl, { signal: abortController.signal });\n          if (!resp.ok) throw new Error(`Tile fetch ${resp.status}: ${realUrl}`);\n          return resp.arrayBuffer();\n        };\n\n        try {\n          const data = await processor.reprojectTile(\n            z, x, y, transformer, fetchTile, cache, abortController.signal,\n          );\n          if (data.byteLength > 0) {\n            outputCache.set(outputKey, data.slice(0));\n          }\n          resolve({ data });\n        } catch (err: any) {\n          let msg = 'tile processing failed';\n          try { msg = err?.message || String(err); } catch {}\n          if (!abortController.signal.aborted) {\n            console.error('[mvt] protocol handler error:', msg);\n          }\n          reject(new Error(msg));\n        }\n      }, () => {\n        reject(new Error('aborted'));\n      });\n    });\n  });\n}\n\nexport function shutdownTileWorkers(): void {\n  sharedProcessor = null;\n  sharedPoolCRS = null;\n  for (const [, entry] of stableProtocols) {\n    removeProtocol(entry.protocolId);\n    entry.queue?.clear();\n  }\n  stableProtocols.clear();\n  shutdownBackprojWorkers();\n}\n", "interface QueueEntry {\n  key: string;\n  execute: () => Promise<void>;\n  onDrop: () => void;\n}\n\nexport class TileQueue {\n  private queue: QueueEntry[] = [];\n  private inflight = 0;\n  private readonly maxConcurrency: number;\n\n  constructor(maxConcurrency: number) {\n    this.maxConcurrency = maxConcurrency;\n  }\n\n  enqueue(\n    key: string,\n    abortController: AbortController,\n    execute: () => Promise<void>,\n    onDrop: () => void,\n  ): void {\n    if (abortController.signal.aborted) {\n      onDrop();\n      return;\n    }\n\n    const entry: QueueEntry = { key, execute, onDrop };\n\n    abortController.signal.addEventListener('abort', () => {\n      const idx = this.queue.indexOf(entry);\n      if (idx !== -1) {\n        this.queue.splice(idx, 1);\n        entry.onDrop();\n      }\n    }, { once: true });\n\n    this.queue.push(entry);\n    this.drain();\n  }\n\n  private drain(): void {\n    while (this.inflight < this.maxConcurrency) {\n      const entry = this.queue.shift();\n      if (!entry) break;\n      this.inflight++;\n      entry.execute().finally(() => {\n        this.inflight--;\n        this.drain();\n      });\n    }\n  }\n\n  clear(): void {\n    for (const entry of this.queue) entry.onDrop();\n    this.queue.length = 0;\n  }\n}\n"],
  "mappings": "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",
  "names": ["initProj", "buildTransformer", "buildTransformerPool", "getWorldBounds", "reprojectGeoJSON", "createTileProcessor", "createTileCache", "transformCoords", "debugConfig", "shutdownBackprojWorkers", "addProtocol", "removeProtocol", "TileQueue", "maxConcurrency", "key", "abortController", "execute", "onDrop", "entry", "idx", "sharedProcessor", "sharedPoolCRS", "stableProtocols", "reprojectStyle", "options", "crs", "style", "transformer", "initProj", "buildTransformer", "activeProtocols", "staleProtocols", "name", "source", "fc", "reprojectGeoJSON", "createTileProcessor", "poolSize", "tPool", "buildTransformerPool", "existing", "protocolId", "cache", "createTileCache", "queue", "TileQueue", "registerVectorProtocol", "url", "bounds", "getWorldBounds", "maxBounds", "aou", "isRegional", "padLon", "padLat", "mbCorners", "transformCoords", "lon", "lat", "debugConfig", "vectorSourceId", "hasGlyphs", "font", "l", "proto", "removeProtocol", "entry", "processor", "originalTiles", "outputCache", "addProtocol", "params", "abortController", "match", "zStr", "xStr", "yStr", "z", "x", "y", "outputKey", "cached", "resolve", "reject", "cached2", "fetchTile", "fz", "fx", "fy", "realUrl", "resp", "data", "err", "msg", "shutdownTileWorkers", "shutdownBackprojWorkers"]
}
