{"version":3,"sources":["/Users/bdon/workspace/protomaps/PMTiles/openlayers/dist/cjs/index.cjs","../../src/index.ts"],"names":[],"mappings":"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","file":"/Users/bdon/workspace/protomaps/PMTiles/openlayers/dist/cjs/index.cjs","sourcesContent":[null,"// see import style (.js) at https://openlayers.org/en/latest/examples/data-tiles.html\nimport { type Data } from \"ol/DataTile.js\";\nimport {\n  type Options as DataTileSourceOptions,\n  default as DataTileSource,\n} from \"ol/source/DataTile.js\";\nimport TileState from \"ol/TileState.js\";\nimport { MVT } from \"ol/format.js\";\nimport type TileSource from \"ol/source/Tile.js\";\nimport { type Extent } from \"ol/extent.js\";\nimport type Projection from \"ol/proj/Projection.js\";\nimport type Tile from \"ol/Tile.js\";\nimport type VectorTile from \"ol/VectorTile.js\";\nimport {\n  type Options as VectorTileSourceOptions,\n  default as VectorTileSource,\n} from \"ol/source/VectorTile.js\";\nimport type RenderFeature from \"ol/render/Feature.js\";\nimport { createXYZ, extentFromProjection } from \"ol/tilegrid.js\";\nimport { PMTiles, Header, Source } from \"pmtiles\";\n\nexport class PMTilesRasterSource extends DataTileSource {\n  loadImage = (src: string): Promise<HTMLImageElement> => {\n    return new Promise((resolve, reject) => {\n      const img = new Image();\n      img.addEventListener(\"load\", () => resolve(img));\n      img.addEventListener(\"error\", () => reject(new Error(\"load failed\")));\n      img.src = src;\n    });\n  };\n\n  constructor(options: DataTileSourceOptions & { url: string | Source }) {\n    super({\n      ...options,\n      ...{\n        state: \"loading\",\n      },\n    });\n\n    const p = new PMTiles(options.url);\n    p.getHeader().then((h: Header) => {\n      const projection =\n        options.projection === undefined ? \"EPSG:3857\" : options.projection;\n      this.tileGrid =\n        options.tileGrid ||\n        createXYZ({\n          extent: extentFromProjection(projection),\n          maxResolution: options.maxResolution,\n          minZoom: h.minZoom,\n          maxZoom: h.maxZoom,\n          tileSize: options.tileSize,\n        });\n      this.setLoader(async (z, x, y): Promise<Data> => {\n        const response = await p.getZxy(z, x, y);\n        if (!response) {\n          return new Uint8Array();\n        }\n        const src = URL.createObjectURL(new Blob([response.data]));\n        const image = await this.loadImage(src);\n        URL.revokeObjectURL(src);\n        return image;\n      });\n      this.setState(\"ready\");\n    });\n  }\n}\n\nexport class PMTilesVectorSource extends VectorTileSource {\n  pmtiles_: PMTiles;\n\n  tileLoadFunction = (tile: Tile, url: string) => {\n    const vtile = tile as VectorTile;\n    // the URL construction is done internally by OL, so we need to parse it\n    // back out here using a hacky regex\n    const re = new RegExp(/pmtiles:\\/\\/(\\d+)\\/(\\d+)\\/(\\d+)/);\n    const result = url.match(re);\n\n    if (!(result && result.length >= 4)) {\n      throw Error(\"Could not parse tile URL\");\n    }\n    const z = +result[1];\n    const x = +result[2];\n    const y = +result[3];\n\n    vtile.setLoader(\n      (extent: Extent, resolution: number, projection: Projection) => {\n        this.pmtiles_\n          .getZxy(z, x, y)\n          .then((tile_result) => {\n            if (tile_result) {\n              const format = vtile.getFormat();\n              vtile.setFeatures(\n                format.readFeatures(tile_result.data, {\n                  extent: extent,\n                  featureProjection: projection,\n                }),\n              );\n              vtile.setState(TileState.LOADED);\n            } else {\n              vtile.setFeatures([]);\n              vtile.setState(TileState.EMPTY);\n            }\n          })\n          .catch((err) => {\n            vtile.setFeatures([]);\n            vtile.setState(TileState.ERROR);\n          });\n      },\n    );\n  };\n\n  constructor(\n    options: VectorTileSourceOptions<RenderFeature> & { url: string | Source },\n  ) {\n    super({\n      ...options,\n      ...{\n        state: \"loading\",\n        url: \"pmtiles://{z}/{x}/{y}\",\n        format: options.format || new MVT(),\n      },\n    });\n\n    this.pmtiles_ = new PMTiles(options.url);\n    this.pmtiles_.getHeader().then((h: Header) => {\n      const projection = options.projection || \"EPSG:3857\";\n      const extent = options.extent || extentFromProjection(projection);\n      this.tileGrid =\n        options.tileGrid ||\n        createXYZ({\n          extent: extent,\n          maxResolution: options.maxResolution,\n          maxZoom: options.maxZoom !== undefined ? options.maxZoom : h.maxZoom,\n          minZoom: h.minZoom,\n          tileSize: options.tileSize || 512,\n        });\n      this.setTileLoadFunction(this.tileLoadFunction);\n      this.setState(\"ready\");\n    });\n  }\n}\n"]}