From 950db94fd939ed85f6322d6226a692d27a7652ec Mon Sep 17 00:00:00 2001 From: Michael Nutt Date: Thu, 12 Oct 2023 22:53:01 -0400 Subject: [PATCH 1/2] style: capitalization Signed-off-by: Michael Nutt --- src/main.js | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/main.js b/src/main.js index 25e869b..3b10291 100644 --- a/src/main.js +++ b/src/main.js @@ -85,7 +85,7 @@ const startServer = (configPath, config) => { }); }; -const startWithinputFile = async (inputFile) => { +const startWithInputFile = async (inputFile) => { console.log(`[INFO] Automatically creating config file for ${inputFile}`); console.log(`[INFO] Only a basic preview style will be used.`); console.log( @@ -124,7 +124,6 @@ const startWithinputFile = async (inputFile) => { styles: {}, data: {}, }; - const extension = inputFile.split('.').pop().toLowerCase(); if (extension === 'pmtiles') { let FileOpenInfo = PMtilesOpen(inputFile); @@ -257,7 +256,7 @@ fs.stat(path.resolve(opts.config), (err, stats) => { } if (inputFile) { - return startWithinputFile(inputFile); + return startWithInputFile(inputFile); } else { // try to find in the cwd const files = fs.readdirSync(process.cwd()); @@ -272,7 +271,7 @@ fs.stat(path.resolve(opts.config), (err, stats) => { } if (inputFile) { console.log(`No input file specified, using ${inputFile}`); - return startWithinputFile(inputFile); + return startWithInputFile(inputFile); } else { const url = 'https://github.com/maptiler/tileserver-gl/releases/download/v1.3.0/zurich_switzerland.mbtiles'; @@ -280,7 +279,7 @@ fs.stat(path.resolve(opts.config), (err, stats) => { const stream = fs.createWriteStream(filename); console.log(`No input file found`); console.log(`[DEMO] Downloading sample data (${filename}) from ${url}`); - stream.on('finish', () => startWithinputFile(filename)); + stream.on('finish', () => startWithInputFile(filename)); return request.get(url).pipe(stream); } } From 755c47021ffd3aeb5ad765e5948cecac5506641b Mon Sep 17 00:00:00 2001 From: Michael Nutt Date: Thu, 12 Oct 2023 22:53:23 -0400 Subject: [PATCH 2/2] style: minor clone refactoring Signed-off-by: Michael Nutt --- src/server.js | 115 +++++++++++++++++++++++++++++++------------------- 1 file changed, 71 insertions(+), 44 deletions(-) diff --git a/src/server.js b/src/server.js index ffb3f72..af8800f 100644 --- a/src/server.js +++ b/src/server.js @@ -453,63 +453,71 @@ function start(opts) { serveTemplate('/$', 'index', (req) => { let styles = {}; for (const id of Object.keys(serving.styles || {})) { - styles[id] = Object.assign({}, serving.styles[id]); - styles[id].serving_data = serving.styles[id]; - styles[id].serving_rendered = serving.rendered[id]; - if (styles[id].serving_rendered) { - const center = styles[id].serving_rendered.tileJSON.center; + let style = { + ...serving.styles[id], + serving_data: serving.styles[id], + serving_rendered: serving.rendered[id], + }; + + if (style.serving_rendered) { + const { center } = style.serving_rendered.tileJSON; if (center) { - styles[id].viewer_hash = `#${center[2]}/${center[1].toFixed( + style.viewer_hash = `#${center[2]}/${center[1].toFixed( 5, )}/${center[0].toFixed(5)}`; const centerPx = mercator.px([center[0], center[1]], center[2]); - styles[id].thumbnail = `${center[2]}/${Math.floor( + style.thumbnail = `${center[2]}/${Math.floor( centerPx[0] / 256, )}/${Math.floor(centerPx[1] / 256)}.png`; } - styles[id].xyz_link = getTileUrls( + style.xyz_link = getTileUrls( req, - styles[id].serving_rendered.tileJSON.tiles, + style.serving_rendered.tileJSON.tiles, `styles/${id}`, - styles[id].serving_rendered.tileJSON.format, + style.serving_rendered.tileJSON.format, opts.publicUrl, )[0]; } + + styles[id] = style; } - let data = {}; + let datas = {}; for (const id of Object.keys(serving.data || {})) { - data[id] = Object.assign({}, serving.data[id]); - let tilejson = Object.assign({}, serving.data[id].tileJSON); - const center = tilejson.center; + let data = Object.assign({}, serving.data[id]); + + const { tileJSON } = serving.data[id]; + const { center } = tileJSON; + if (center) { - data[id].viewer_hash = `#${center[2]}/${center[1].toFixed( + data.viewer_hash = `#${center[2]}/${center[1].toFixed( 5, )}/${center[0].toFixed(5)}`; } - data[id].is_vector = tilejson.format === 'pbf'; - if (!data[id].is_vector) { + + data.is_vector = tileJSON.format === 'pbf'; + if (!data.is_vector) { if (center) { const centerPx = mercator.px([center[0], center[1]], center[2]); - data[id].thumbnail = `${center[2]}/${Math.floor( + data.thumbnail = `${center[2]}/${Math.floor( centerPx[0] / 256, - )}/${Math.floor(centerPx[1] / 256)}.${tilejson.format}`; + )}/${Math.floor(centerPx[1] / 256)}.${tileJSON.format}`; } - data[id].xyz_link = getTileUrls( + data.xyz_link = getTileUrls( req, - tilejson.tiles, + tileJSON.tiles, `data/${id}`, - tilejson.format, + tileJSON.format, opts.publicUrl, { pbf: options.pbfAlias, }, )[0]; } - if (data[id].filesize) { + if (data.filesize) { let suffix = 'kB'; let size = parseInt(data_.filesize, 10) / 1024; if (size > 1024) { @@ -520,27 +528,33 @@ function start(opts) { suffix = 'GB'; size /= 1024; } - data[id].formatted_filesize = `${size.toFixed(2)} ${suffix}`; + data.formatted_filesize = `${size.toFixed(2)} ${suffix}`; } + + datas[id] = data; } return { styles: Object.keys(styles).length ? styles : null, - data: Object.keys(data).length ? data : null, + data: Object.keys(datas).length ? datas : null, }; }); serveTemplate('/styles/:id/$', 'viewer', (req) => { - const id = req.params.id; - const style = clone(((serving.styles || {})[id] || {}).styleJSON); + const { id } = req.params; + const style = serving.styles?.[id]?.styleJSON; + if (!style) { return null; } - style.id = id; - style.name = (serving.styles[id] || serving.rendered[id]).name; - style.serving_data = serving.styles[id]; - style.serving_rendered = serving.rendered[id]; - return style; + + return { + id, + name: (serving.styles[id] || serving.rendered[id]).name, + serving_data: serving.styles[id], + serving_rendered: serving.rendered[id], + ...style + }; }); /* @@ -549,37 +563,49 @@ function start(opts) { }); */ serveTemplate('/styles/:id/wmts.xml', 'wmts', (req) => { - const id = req.params.id; - const wmts = clone((serving.styles || {})[id]); + const { id } = req.params; + const wmts = serving.styles?.[id]; + if (!wmts) { return null; } + if (wmts.hasOwnProperty('serve_rendered') && !wmts.serve_rendered) { return null; } - wmts.id = id; - wmts.name = (serving.styles[id] || serving.rendered[id]).name; + + let baseUrl; if (opts.publicUrl) { - wmts.baseUrl = opts.publicUrl; + baseUrl = opts.publicUrl; } else { - wmts.baseUrl = `${ + baseUrl = `${ req.get('X-Forwarded-Protocol') ? req.get('X-Forwarded-Protocol') : req.protocol }://${req.get('host')}/`; } - return wmts; + + return { + id, + name: (serving.styles[id] || serving.rendered[id]).name, + baseUrl, + ...wmts, + }; }); serveTemplate('/data/:id/$', 'data', (req) => { - const id = req.params.id; - const data = clone(serving.data[id]); + const { id } = req.params; + const data = serving.data[id]; + if (!data) { return null; } - data.id = id; - data.is_vector = data.tileJSON.format === 'pbf'; - return data; + + return { + id, + is_vector: data.tileJSON.format === 'pbf', + ...data + }; }); let startupComplete = false; @@ -587,6 +613,7 @@ function start(opts) { console.log('Startup complete'); startupComplete = true; }); + app.get('/health', (req, res, next) => { if (startupComplete) { return res.status(200).send('OK');