diff --git a/package.json b/package.json index b1a4274..5e6cd4f 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ }, "dependencies": { "@mapbox/mapbox-gl-native": "5.0.2", + "@mapbox/mapbox-gl-style-spec": "13.9.1", "@mapbox/mbtiles": "0.11.0", "@mapbox/sphericalmercator": "1.1.0", "@mapbox/vector-tile": "1.3.1", @@ -27,6 +28,7 @@ "color": "3.1.2", "commander": "4.0.1", "cors": "2.8.5", + "esm": "3.2.25", "express": "4.17.1", "glyph-pbf-composite": "0.0.2", "handlebars": "4.5.3", diff --git a/src/main.js b/src/main.js index 3dacd97..98c8a86 100644 --- a/src/main.js +++ b/src/main.js @@ -2,6 +2,8 @@ 'use strict'; +require = require('esm')(module); + const fs = require('fs'); const path = require('path'); const request = require('request'); diff --git a/src/serve_style.js b/src/serve_style.js index cbe1138..ca441db 100644 --- a/src/serve_style.js +++ b/src/serve_style.js @@ -5,6 +5,7 @@ const fs = require('fs'); const clone = require('clone'); const express = require('express'); +import {validate} from '@mapbox/mapbox-gl-style-spec'; const utils = require('./utils'); @@ -77,14 +78,25 @@ module.exports = { }, add: (options, repo, params, id, publicUrl, reportTiles, reportFont) => { const styleFile = path.resolve(options.paths.styles, params.style); - let styleJSON; + + let styleFileData; try { - styleJSON = JSON.parse(fs.readFileSync(styleFile)); + styleFileData = fs.readFileSync(styleFile); } catch (e) { - console.log('Error parsing style file'); + console.log('Error reading style file'); return false; } + let validationErrors = validate(styleFileData); + if (validationErrors.length > 0) { + console.log(`The file "${params.style}" is not valid a valid style file:`); + for (const err of validationErrors) { + console.log(`${err.line}: ${err.message}`); + } + return false; + } + let styleJSON = JSON.parse(styleFileData); + for (const name of Object.keys(styleJSON.sources)) { const source = styleJSON.sources[name]; const url = source.url;