let fs = require('fs') function escapeTemplateLiteral(str) { return str.replace(/([\\$`])/g, '\\$1'); } function embedHtml(src, dst) { fs.readFile(src, 'utf8', function(err, data) { if(err) throw err; data = "(window)['"+src.replace(/^.*[\\\/]/, '')+"'] = `" + escapeTemplateLiteral(data) + "`;"; fs.writeFile(dst, data, function(err) { if(err) throw err; }); }); } function embedCss(src, dst) { fs.readFile(src, 'utf8', function(err, data) { if(err) throw err; data = "(window)['"+src.replace(/^.*[\\\/]/, '')+"'] = ``;"; data = data.replace(/"/g, "'"); fs.writeFile(dst, data, function(err) { if(err) throw err; }); }); } function embedSvg(src, dst) { fs.readFile(src, 'utf8', function(err, data) { if(err) throw err; data = data.replace(/<\?xml[^\?]*\?>[\r\n]*/g, ''); data = data.replace(/]*>[\r\n]*/g, ''); data = data.replace(/<\/svg>[\r\n]*/g, ''); data = data.replace(/>\s*]*><attributes>/g, ' '); data = data.replace(/<\/attributes><\/desc>/g, '>'); data = data.replace(/"/g, '"'); data = "(window)['"+src.replace(/^.*[\\\/]/, '')+"'] = `" + escapeTemplateLiteral(data) + "`;"; fs.writeFile(dst, data, function(err) { if(err) throw err; }); }); } function embedCsv(src, dst) { fs.readFile(src, 'utf8', function(err, csvData) { if(err) throw err; let csvLines = csvData.split('\n').map(str => str.replace('\r', '').split(';')); let jsData = {}; let zones = csvLines[0]; for(let zoneIdx = 0; zoneIdx < zones.length; ++zoneIdx) { let zoneName = zones[zoneIdx]; let zoneData = []; for(let lineIdx = 1; lineIdx < csvLines.length; ++lineIdx) { zoneData[lineIdx-1] = Math.round(Number(csvLines[lineIdx][zoneIdx])); } jsData[zoneName] = zoneData; } let content = "(window)['"+src.replace(/^.*[\\\/]/, '')+"'] = " + JSON.stringify(jsData) + ";"; fs.writeFile(dst, content, function(err) { if(err) throw err; }); }); } let toolsDir = __dirname; let dataDir = toolsDir + "/../data"; let srcDir = toolsDir + "/../src"; let intermediateDir = toolsDir + "/../.intermediate"; embedHtml(srcDir+'/simulator.html', intermediateDir+'/simulator.html.ts'); embedSvg(dataDir+'/climate-zones-map.svg', intermediateDir+'/climate-zones-map.svg.ts'); embedCsv(dataDir+'/climate-zones-data.csv', intermediateDir+'/climate-zones-data.ts');