| 128 | const BYTE_ORDER_MARK = "\ufeff"; |
| 129 | |
| 130 | function getEscapedString(value: unknown, sep: string): string { |
| 131 | if (value === undefined || value === null) return ""; |
| 132 | let str = ""; |
| 133 | |
| 134 | if (typeof value === "object") str = JSON.stringify(value); |
| 135 | else str = String(value); |
| 136 | |
| 137 | // Is regex.test more performant here? If so, how to dynamically create? |
| 138 | // https://stackoverflow.com/questions/3561493/ |
| 139 | if (str.includes(sep) || str.includes(LF) || str.includes(QUOTE)) { |
| 140 | return `${QUOTE}${str.replaceAll(QUOTE, `${QUOTE}${QUOTE}`)}${QUOTE}`; |
| 141 | } |
| 142 | |
| 143 | return str; |
| 144 | } |
| 145 | |
| 146 | type NormalizedColumn = Omit<ColumnDetails, "header" | "prop"> & { |
| 147 | header: string; |