UNPKG

tilestrata-dependency

Version:

A TileStrata plugin for loading another layer tile as a source

54 lines (48 loc) 1.51 kB
module.exports = function() { var source, getSource; if (typeof arguments[0] === 'function') { getSource = arguments[0]; } else { source = [arguments[0], arguments[1]]; getSource = function(req) { return source; }; } return { name: source ? source.join('/') : 'dependency', serve: function(server, req, callback) { var mock = req.clone(); var source = getSource(req); if (!source) { var notFound = new Error('No source available for this request'); notFound.statusCode = 404; return callback(notFound); } mock.method = 'GET'; mock.layer = source[0]; if (source[1].charAt(0) === '*') { mock.filename = 't' + source[1].substring(1); mock.hasFilename = false; } else { mock.filename = source[1]; mock.hasFilename = true; } mock.headers = {}; if (req.headers['x-tilestrata-skipcache']) { mock.headers['x-tilestrata-skipcache'] = req.headers['x-tilestrata-skipcache']; } server.serve(mock, false, function(status, buffer, headers) { if (status === 200) { // don't propagate the cache-hit header (because technically // this provider is serving a "new" tile) if (headers) delete headers['X-TileStrata-CacheHit']; callback(null, buffer, headers); } else { var message = 'Tile unavailable (status ' + status + ')'; if (buffer.length < 1024) message = buffer.toString('utf8'); var err = new Error(message); err.statusCode = status; callback(err); } }); } }; };