aboutsummaryrefslogtreecommitdiff
path: root/webAO/iniParse.ts
diff options
context:
space:
mode:
authorstonedDiscord <Tukz@gmx.de>2025-06-26 18:25:52 +0200
committerstonedDiscord <Tukz@gmx.de>2025-06-26 18:25:52 +0200
commit576eacb298a6e4816a16f48e837785924ee2045f (patch)
tree592e2e0447bfc2d7bc40351c041cdc241b3eaf83 /webAO/iniParse.ts
parent365a515d4916857518bbffb52af9ac919f0a88d1 (diff)
iniparse to typescript
Diffstat (limited to 'webAO/iniParse.ts')
-rw-r--r--webAO/iniParse.ts58
1 files changed, 58 insertions, 0 deletions
diff --git a/webAO/iniParse.ts b/webAO/iniParse.ts
new file mode 100644
index 0000000..ca84c35
--- /dev/null
+++ b/webAO/iniParse.ts
@@ -0,0 +1,58 @@
+
+interface ParsedIni {
+ [section: string]: { [key: string]: string };
+}
+
+const regexPatterns = {
+ section: /^\s*\[\s*([^\]]*)\s*\]\s*$/,
+ param: /^\s*([\w.\-_]+)\s*=\s*(.*?)\s*$/,
+ comment: /^\s*;.*$/,
+};
+
+const valueHandler = (matchKey: string, matchValue: string): string => {
+ return matchKey === "showname" ? matchValue : matchValue.toLowerCase();
+};
+
+const lineFilter = (value: string): boolean => {
+ const isEmpty: boolean = value.length === 0;
+ const isComment: boolean = regexPatterns.comment.test(value);
+
+ if (isComment || isEmpty) {
+ return false;
+ }
+ return true;
+};
+
+const iniParse = (data: string): ParsedIni => {
+ const parsedIni: ParsedIni = {};
+ const lines: string[] = data.split(/\r\n|\r|\n/);
+ const filteredLines: string[] = lines.filter(lineFilter);
+
+ let currentSection: string | undefined;
+
+ filteredLines.forEach((line) => {
+ const isParameter: boolean = regexPatterns.param.test(line);
+ const isSection: boolean = regexPatterns.section.test(line);
+ if (isParameter && currentSection) {
+ const match: RegExpMatchArray | null = line.match(regexPatterns.param);
+
+ if (match) {
+ const matchKey: string = match[1].toLowerCase();
+ const matchValue: string = match[2];
+ parsedIni[currentSection][matchKey] = valueHandler(matchKey, matchValue);
+ }
+ } else if (isSection) {
+ const match: RegExpMatchArray | null = line.match(regexPatterns.section);
+
+ if (match) {
+ const matchKey: string = match[1].toLowerCase();
+ parsedIni[matchKey] = {};
+ currentSection = matchKey;
+ }
+ }
+ });
+
+ return parsedIni;
+};
+
+export default iniParse;