|
import os from "os"; |
|
import changeCase from "change-case"; |
|
import { XmlEntities } from "html-entities"; |
|
|
|
const log = console.log.bind(console); |
|
const DELIMITER = ":"; |
|
const htmlEntities = new XmlEntities(); |
|
|
|
const stripHTMLEntities = (e) => { |
|
return htmlEntities.decode(e); |
|
}; |
|
|
|
const getCommonDelimiterForm = (e, t) => { |
|
const i = new RegExp(t + "\\S+", "g"); |
|
const n = new RegExp(t + " ", "g"); |
|
const r = e.match(i) || []; |
|
const a = e.match(n) || []; |
|
return r.length > a.length ? t : t + " "; |
|
}; |
|
|
|
const parseRawData = (e) => { |
|
const t = {}; |
|
let data = stripHTMLEntities(e); |
|
data = data.replace(/:\s*\r\n/g, ": "); |
|
const i = data.split("\n"); |
|
const n = getCommonDelimiterForm(data, ":"); |
|
|
|
i.forEach((line) => { |
|
if ((line = line.trim()) && line.includes(n)) { |
|
const parts = line.split(":"); |
|
if (parts.length >= 2) { |
|
const key = changeCase.camelCase(parts[0]); |
|
const value = parts.splice(1).join(":").trim(); |
|
if (key in t) { |
|
t[key] = `${t[key]} ${value}`; |
|
} else { |
|
t[key] = value; |
|
} |
|
} |
|
} |
|
}); |
|
|
|
return t; |
|
}; |
|
|
|
export default parseRawData; |