From 4b05f36fccc8ce1d79e0e17123b5dc94ec160ff8 Mon Sep 17 00:00:00 2001 From: Andrew Calcutt Date: Fri, 13 Oct 2023 13:57:44 -0400 Subject: [PATCH] fix: simplify source to data mapping Signed-off-by: Andrew Calcutt --- src/serve_data.js | 4 +-- src/serve_rendered.js | 27 ++++++++------------ src/serve_style.js | 23 +++++++---------- src/server.js | 59 +++++++++++++------------------------------ 4 files changed, 39 insertions(+), 74 deletions(-) diff --git a/src/serve_data.js b/src/serve_data.js index 80e3d5b..0e38aac 100644 --- a/src/serve_data.js +++ b/src/serve_data.js @@ -204,7 +204,7 @@ export const serve_data = { inputType = 'mbtiles'; if (isValidHttpUrl(params.pmtiles)) { throw Error( - `ERROR: MBTiles does not support web based files: ${inputFile}`, + `ERROR: MBTiles does not support web based files: "${inputFile}"`, ); } else { inputFile = path.resolve(options.paths.mbtiles, params.mbtiles); @@ -218,7 +218,7 @@ export const serve_data = { if (!isValidHttpUrl(inputFile)) { const inputFileStats = fs.statSync(inputFile); if (!inputFileStats.isFile() || inputFileStats.size === 0) { - throw Error(`Not valid input file: ${inputFile}`); + throw Error(`Not valid input file: "${inputFile}"`); } } diff --git a/src/serve_rendered.js b/src/serve_rendered.js index 872cf3a..f12ef7e 100644 --- a/src/serve_rendered.js +++ b/src/serve_rendered.js @@ -1469,27 +1469,22 @@ export const serve_rendered = { let source = styleJSON.sources[name]; const url = source.url; - if ( - url && - (url.lastIndexOf('pmtiles:', 0) === 0 || - url.lastIndexOf('mbtiles:', 0) === 0) - ) { - // found mbtiles source, replace with info from local file + if (url && (url.startsWith('pmtiles:') || url.startsWith('mbtiles:'))) { + // found pmtiles or mbtiles source, replace with info from local file delete source.url; - let inputFile = url.replace('pmtiles://', '').replace('mbtiles://', ''); - const fromData = - inputFile[0] === '{' && inputFile[inputFile.length - 1] === '}'; + let inputFile; + let dataId = url.replace('pmtiles://', '').replace('mbtiles://', ''); + const fromData = dataId.startsWith('{') && dataId.endsWith('}'); if (fromData) { - inputFile = inputFile.substr(1, inputFile.length - 2); - const mapsTo = (params.mapping || {})[inputFile]; + dataId = dataId.slice(1, -1); + const mapsTo = (params.mapping || {})[dataId]; if (mapsTo) { - inputFile = mapsTo; + dataId = mapsTo; } - let protocol = url.split(':')[0]; - const DataInfo = dataResolver(inputFile, protocol); + const DataInfo = dataResolver(dataId); if (DataInfo.inputfile) { inputFile = DataInfo.inputfile; source_type = DataInfo.filetype; @@ -1502,7 +1497,7 @@ export const serve_rendered = { if (!isValidHttpUrl(inputFile)) { const inputFileStats = fs.statSync(inputFile); if (!inputFileStats.isFile() || inputFileStats.size === 0) { - throw Error(`Not valid PMTiles file: ${inputFile}`); + throw Error(`Not valid PMTiles file: "${inputFile}"`); } } @@ -1547,7 +1542,7 @@ export const serve_rendered = { inputFile = path.resolve(options.paths.mbtiles, inputFile); const inputFileStats = fs.statSync(inputFile); if (!inputFileStats.isFile() || inputFileStats.size === 0) { - throw Error(`Not valid MBTiles file: ${inputFile}`); + throw Error(`Not valid MBTiles file: "${inputFile}"`); } map.sources[name] = new MBTiles(inputFile + '?mode=ro', (err) => { map.sources[name].getInfo((err, info) => { diff --git a/src/serve_style.js b/src/serve_style.js index ca668a8..3efa316 100644 --- a/src/serve_style.js +++ b/src/serve_style.js @@ -111,26 +111,21 @@ export const serve_style = { for (const name of Object.keys(styleJSON.sources)) { const source = styleJSON.sources[name]; const url = source.url; - if ( - url && - (url.lastIndexOf('pmtiles:', 0) === 0 || - url.lastIndexOf('mbtiles:', 0) === 0) - ) { - let inputSource = url - .replace('pmtiles://', '') - .replace('mbtiles://', ''); + const protocol = url.split(':')[0]; - const fromData = - inputSource[0] === '{' && inputSource[inputSource.length - 1] === '}'; + if (url && (url.startsWith('pmtiles:') || url.startsWith('mbtiles:'))) { + let dataId = url.replace('pmtiles://', '').replace('mbtiles://', ''); + const fromData = dataId.startsWith('{') && dataId.endsWith('}'); if (fromData) { - inputSource = inputSource.substr(1, inputSource.length - 2); - const mapsTo = (params.mapping || {})[inputSource]; + dataId = dataId.slice(1, -1); + const mapsTo = (params.mapping || {})[dataId]; if (mapsTo) { - inputSource = mapsTo; + dataId = mapsTo; } } - const identifier = reportTiles(inputSource, fromData); + + const identifier = reportTiles(dataId, fromData, protocol); if (!identifier) { return false; } diff --git a/src/server.js b/src/server.js index 419f8db..849667e 100644 --- a/src/server.js +++ b/src/server.js @@ -183,42 +183,32 @@ function start(opts) { item, id, opts.publicUrl, - (fileid, fromData) => { + (dataId, fromData, protocol) => { let dataItemId; for (const id of Object.keys(data)) { if (fromData) { - if (id === fileid) { + if (id === dataId) { dataItemId = id; } } else { - if ( - data[id].mbtiles !== undefined && - data[id].mbtiles === fileid - ) { - dataItemId = id; - } else if ( - data[id].pmtiles !== undefined && - data[id].pmtiles === fileid - ) { + const fileType = Object.keys(data[id])[0]; + if (data[id][fileType] === dataId) { dataItemId = id; } } } if (dataItemId) { - // mbtiles exist in the data config + // input files exists in the data config return dataItemId; } else { if (fromData || !allowMoreData) { console.log( - `ERROR: style "${item.style}" using unknown file "${fileid}"! Skipping...`, + `ERROR: style "${item.style}" using unknown file "${dataId}"! Skipping...`, ); return undefined; } else { - let id = fileid.substr(0, fileid.lastIndexOf('.')) || fileid; - while (data[id]) id += '_'; - data[id] = { - filename: fileid, - }; + let id = dataId.substr(0, dataId.lastIndexOf('.')) || dataId; + data[id][protocol] = dataId; return id; } } @@ -239,34 +229,19 @@ function start(opts) { item, id, opts.publicUrl, - (fileid, protocol) => { - //console.log(protocol); - let inputFile; + (dataId) => { let fileType; + let inputFile; for (const id of Object.keys(data)) { - if (id === fileid) { - if (data[id].pmtiles !== undefined) { - if (isValidHttpUrl(data[id].pmtiles)) { - inputFile = data[id].pmtiles; - } else { - inputFile = path.resolve( - options.paths.pmtiles, - data[id].pmtiles, - ); - } - fileType = 'pmtiles'; - } else if (data[id].mbtiles !== undefined) { + fileType = Object.keys(data[id])[0]; + if (id === dataId) { + if (isValidHttpUrl(inputFile)) { + inputFile = data[id][fileType]; + } else { inputFile = path.resolve( - options.paths.mbtiles, - data[id].mbtiles, + options.paths[fileType], + data[id][fileType], ); - fileType = 'mbtiles'; - } else if (data[id].filename !== undefined) { - inputFile = path.resolve( - options.paths[protocol], - data[id].filename, - ); - fileType = protocol; } } }