mirror of
https://github.com/protomaps/PMTiles.git
synced 2026-02-04 10:51:07 +00:00
detect byte serving support via Content-Length [#11]
This commit is contained in:
32
js/index.mjs
32
js/index.mjs
@@ -37,25 +37,23 @@ const bytesToMap = dataview => {
|
|||||||
export class PMTiles {
|
export class PMTiles {
|
||||||
constructor(url, options = {}) {
|
constructor(url, options = {}) {
|
||||||
this.url = url
|
this.url = url
|
||||||
this.root = fetch(this.url,{method:'HEAD',headers:{Range:'bytes=0-511999'}}).then(resp => {
|
const controller = new AbortController()
|
||||||
// for servers like Azure, GH Pages which return 200 instead of 206
|
const signal = controller.signal
|
||||||
if (resp.status == 206 || (resp.status == 200 && options.allow_200)) {
|
this.root = fetch(this.url,{signal:signal, headers:{Range:'bytes=0-511999'}}).then(resp => {
|
||||||
console.log("Check succeeded: server supports byte ranges")
|
if (resp.headers.get('Content-Length') != 512000) {
|
||||||
return fetch(this.url,{headers:{Range:'bytes=0-511999'}}).then(resp => {
|
console.error("Content-Length mismatch indicates byte serving not supported; aborting.")
|
||||||
return resp.arrayBuffer()
|
controller.abort()
|
||||||
}).then(buf => {
|
}
|
||||||
const header = parseHeader(new DataView(buf,0,10))
|
return resp.arrayBuffer()
|
||||||
var dec = new TextDecoder("utf-8")
|
}).then(buf => {
|
||||||
return {
|
const header = parseHeader(new DataView(buf,0,10))
|
||||||
metadata: JSON.parse(dec.decode(new DataView(buf,10,header.json_size))),
|
var dec = new TextDecoder("utf-8")
|
||||||
dir:bytesToMap(new DataView(buf,10+header.json_size,17*header.root_entries))
|
return {
|
||||||
}
|
metadata: JSON.parse(dec.decode(new DataView(buf,10,header.json_size))),
|
||||||
})
|
dir:bytesToMap(new DataView(buf,10+header.json_size,17*header.root_entries))
|
||||||
} else {
|
|
||||||
console.log("Check failed: if you know this server supports byte serving, pass allow_200: true")
|
|
||||||
throw new Error("Invalid response: " + resp.status)
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
this.step = 0
|
this.step = 0
|
||||||
this.leaves = new Map()
|
this.leaves = new Map()
|
||||||
this.outstanding_requests = new Map()
|
this.outstanding_requests = new Map()
|
||||||
|
|||||||
Reference in New Issue
Block a user