TelegramPWA/src/util/data/readStrings.ts

60 lines
1.4 KiB
TypeScript

import { DEBUG } from '../../config';
export default function readStrings(data: string): Record<string, string> {
const lines = data.split(/;\r?\n?/);
const result: Record<string, string> = {};
for (const line of lines) {
if (!line.startsWith('"')) continue;
const [key, value] = parseLine(line) || [];
if (!key || !value) {
// eslint-disable-next-line no-console
console.warn('Bad formatting in line:', line);
continue;
}
result[key] = value;
}
return result;
}
function parseLine(line: string) {
let isEscaped = false;
let isInsideString = false;
let separatorIndex;
for (let i = 0; i < line.length; i++) {
const char = line[i];
if (char === '\\') {
isEscaped = !isEscaped;
continue;
}
if (char === '"' && !isEscaped) {
isInsideString = !isInsideString;
continue;
}
if (char === '=' && !isInsideString) {
separatorIndex = i;
break;
}
isEscaped = false;
}
if (separatorIndex === undefined || separatorIndex === line.length - 1) return undefined;
try {
const key = JSON.parse(line.slice(0, separatorIndex));
const value = JSON.parse(line.slice(separatorIndex + 1));
return [key, value];
} catch (e) {
if (DEBUG) {
// eslint-disable-next-line no-console
console.error('Error parsing line:', line, e);
}
}
return undefined;
}