TelegramPWA/src/util/data/readStrings.ts
Alexander Zinchuk 1dc29627bd Gifts Modal: Implement extended gift options (#5017)
Co-authored-by: Alexander Zinchuk <alx.zinchuk@gmail.com>
Co-authored-by: zubiden <19638254+zubiden@users.noreply.github.com>
2024-11-02 21:11:10 +04:00

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;
}