openreplay/frontend/scripts/constants.js
2023-01-13 17:36:35 +01:00

48 lines
1.4 KiB
JavaScript

const fs = require('fs');
const countries = require('country-data').countries;
delete countries['UK'];
delete countries['EU'];
for (let code in countries) {
const country = countries[code];
if (code.length != 2) {
delete countries[code];
continue;
}
countries[code] = countries[code].name;
}
function fromArray(data) {
const d = {};
data.forEach(v => d[v.toLowerCase().replace(/ /g, '_')] = v);
return d;
};
const os = fromArray(['Windows', 'Mac OS X', 'Android', 'Linux']);
const browsers = fromArray(['Chrome', 'Firefox', 'Opera', 'Edge', 'IE', 'Safari']);
function toExport(name, data) {
return `\n\nexport const ${ name } = ${ JSON.stringify(data, null, 2) };`;
};
fs.writeFileSync('app/constants.js',
"/* eslint-disable */" +
toExport('countries', countries) +
toExport('os', os) +
toExport('browser', browsers)
);
function toStyles(prefix, data) {
const r = Object.keys(data).map(key => `[data-${ prefix }="${ key }"] {
@mixin icon-before ${ prefix }/${ key }, $gray-medium, 12px {
display: inline-block;
vertical-align: middle;
margin-right: 5px;
}
&::after{
color: $gray-medium;
content: "${ data[key] }";
}
}`);
return "@import \"icons.css\";\n@import \"colors.css\";\n\n" + r.join("\n");
};
fs.writeFileSync('app/styles/browsers.css', toStyles('browser', browsers));
fs.writeFileSync('app/styles/os.css', toStyles('os', os));