Skip to content

Instantly share code, notes, and snippets.

@daviesjamie
Created March 8, 2022 13:38
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save daviesjamie/ce26b29a7ca817123144b155642a9394 to your computer and use it in GitHub Desktop.
Save daviesjamie/ce26b29a7ca817123144b155642a9394 to your computer and use it in GitHub Desktop.
Expand user agent strings from a CSV
{
"dependencies": {
"fast-csv": "^4.3.6",
"ua-parser-js": "^1.0.2"
}
}
const csv = require("fast-csv");
const { UAParser } = require("ua-parser-js");
const toCamelCase = (str) =>
str.toLowerCase().replace(/[^a-z]+(.)/gi, (_, char) => char.toUpperCase());
const formatBrowserName = (browserName, browserMajor) => {
if (!browserName) {
return undefined;
}
if (browserMajor && browserName === "IE") {
return `${browserName} ${browserMajor}`;
}
return browserName;
};
process.stdin
.pipe(
csv.parse({
headers: (headers) => headers.map((h) => toCamelCase(h)),
})
)
.transform((row, next) => {
const { userAgent, ...otherColumns } = row;
const parser = new UAParser(userAgent);
const browser = parser.getBrowser();
const os = parser.getOS();
const niceBrowserName = formatBrowserName(browser.name, browser.major);
const niceOsName =
os.name && os.version ? `${os.name} ${os.version}` : os.name;
return next(null, {
userAgent,
browser: niceBrowserName,
browserName: browser.name,
browserVersion: browser.version,
browserMajor: browser.major,
os: niceOsName,
osName: os.name,
osVersion: os.version,
...otherColumns,
});
})
.pipe(csv.format({ headers: true }))
.pipe(process.stdout)
.on("end", () => process.exit());
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment