From b07b47e24ca77159aacfd7da9111df333c25095b Mon Sep 17 00:00:00 2001 From: Vinayak Kulkarni <19776877+vinayakkulkarni@users.noreply.github.com> Date: Wed, 11 Jan 2023 17:03:09 +0530 Subject: [PATCH] fix: enable multiple paths while extracting them from query Signed-off-by: Vinayak Kulkarni <19776877+vinayakkulkarni@users.noreply.github.com> --- src/serve_rendered.js | 52 ++++++++++++++++++++++--------------------- 1 file changed, 27 insertions(+), 25 deletions(-) diff --git a/src/serve_rendered.js b/src/serve_rendered.js index 473b98c..de94e30 100644 --- a/src/serve_rendered.js +++ b/src/serve_rendered.js @@ -150,37 +150,39 @@ const parseCoordinates = (coordinatePair, query, transformer) => { * @param {Function} transformer Optional transform function. */ const extractPathsFromQuery = (query, transformer) => { - const reqPath = decodeURIComponent(query.path); + // Initiate paths array const paths = []; // Return an empty list if no paths have been provided if ('path' in query && !query.path) { return paths; } // Parse paths provided via path query argument - if ('path' in query && PATH_PATTERN.test(reqPath)) { - if (reqPath.includes('enc:')) { - const splitPaths = query.path.split('|'); - const line = splitPaths - .filter( - (x) => - !x.startsWith('fill') && - !x.startsWith('stroke') && - !x.startsWith('width'), - ) - .join('') - .replace('enc:', ''); - - const coords = polyline.decode(line).map(([lat, lng]) => [lng, lat]); - paths.push(coords); - } else { - // Check if multiple paths have been provided and mimic a list if it's a - // single path. - const providedPaths = Array.isArray(query.path) - ? query.path - : [query.path]; - - // Iterate through paths, parse and validate them - for (const providedPath of providedPaths) { + if ('path' in query) { + const providedPaths = Array.isArray(query.path) ? query.path : [query.path]; + // Iterate through paths, parse and validate them + for (const providedPath of providedPaths) { + // Logic for pushing coords to path when path includes google polyline + if ( + providedPath.includes('enc:') && + PATH_PATTERN.test(decodeURIComponent(providedPath)) + ) { + const encodedPaths = providedPath.split(','); + for (const path of encodedPaths) { + const line = path + .split('|') + .filter( + (x) => + !x.startsWith('fill') && + !x.startsWith('stroke') && + !x.startsWith('width'), + ) + .join('') + .replace('enc:', ''); + const coords = polyline.decode(line).map(([lat, lng]) => [lng, lat]); + paths.push(coords); + } + } else { + // Iterate through paths, parse and validate them const currentPath = []; // Extract coordinate-list from path