Files
MapLibreParticleLab/metrics/integration/lib/server.js
2023-03-25 14:46:49 +01:00

51 lines
1.6 KiB
JavaScript

/* eslint-disable import/no-commonjs */
const path = require('path');
const fs = require('fs');
const st = require('st');
const {createServer} = require('http');
const localizeURLs = require('./localize-urls');
module.exports = function () {
const port = 2900;
const integrationMount = st({path: path.join(__dirname, '..')});
const mapboxGLStylesMount = st({path: path.dirname(require.resolve('mapbox-gl-styles')), url: 'mapbox-gl-styles'});
const mapboxMVTFixturesMount = st({path: path.dirname(require.resolve('@mapbox/mvt-fixtures')), url: 'mvt-fixtures'});
const server = createServer((req, res) => {
if (req.method === 'POST' && req.url === '/write-file') {
let body = '';
req.on('data', (data) => {
body += data;
});
req.on('end', () => {
//Write data to disk
const {filePath, data} = JSON.parse(body);
fs.writeFile(path.join(process.cwd(), filePath), data, 'base64', () => {
res.writeHead(200, {'Content-Type': 'text/html'});
res.end('ok');
});
});
}
return mapboxMVTFixturesMount(req, res, () => {
return mapboxGLStylesMount(req, res, () => {
return integrationMount(req, res);
});
});
});
return {
listen(callback) {
server.listen(port, callback);
},
close(callback) {
server.close(callback);
},
localizeURLs(style) {
return localizeURLs(style, port);
}
};
};