Spaces:
Sleeping
Sleeping
| // @flow | |
| import {pick, extend} from '../util/util'; | |
| import {getJSON, ResourceType} from '../util/ajax'; | |
| import browser from '../util/browser'; | |
| import type {RequestManager} from '../util/mapbox'; | |
| import type {Callback} from '../types/callback'; | |
| import type {TileJSON} from '../types/tilejson'; | |
| import type {Cancelable} from '../types/cancelable'; | |
| export default function(options: any, requestManager: RequestManager, callback: Callback<TileJSON>): Cancelable { | |
| const loaded = function(err: ?Error, tileJSON: ?Object) { | |
| if (err) { | |
| return callback(err); | |
| } else if (tileJSON) { | |
| const result: any = pick( | |
| // explicit source options take precedence over TileJSON | |
| extend(tileJSON, options), | |
| ['tiles', 'minzoom', 'maxzoom', 'attribution', 'mapbox_logo', 'bounds', 'scheme', 'tileSize', 'encoding'] | |
| ); | |
| if (tileJSON.vector_layers) { | |
| result.vectorLayers = tileJSON.vector_layers; | |
| result.vectorLayerIds = result.vectorLayers.map((layer) => { return layer.id; }); | |
| } | |
| result.tiles = requestManager.canonicalizeTileset(result, options.url); | |
| callback(null, result); | |
| } | |
| }; | |
| if (options.url) { | |
| return getJSON(requestManager.transformRequest(requestManager.normalizeSourceURL(options.url), ResourceType.Source), loaded); | |
| } else { | |
| return browser.frame(() => loaded(null, options)); | |
| } | |
| } | |