This repository was archived by the owner on Oct 1, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathsave.js
59 lines (54 loc) · 2.03 KB
/
save.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import { mkdirSync, existsSync, writeFileSync } from "fs";
import { join } from "path";
const BASEDIR = process.env.TARGET_DIR || "./data";
const parseDataUrl = dataUrl => {
const matches = dataUrl.match(/^data:(.+);base64,(.+)$/);
if (matches.length !== 3) {
throw new Error("Could not parse data URL.");
}
return { buffer: Buffer.from(matches[2], "base64") };
};
export async function saveContent(content, filename, folder) {
const { buffer } = parseDataUrl(content);
mkdirSync(join(BASEDIR, getTargetFolder(filename, folder)), {
recursive: true
});
writeFileSync(
join(BASEDIR, getTargetFolder(filename, folder), filename),
buffer,
"base64"
);
}
export function fileExists(filename, folder) {
return existsSync(join(BASEDIR, getTargetFolder(filename, folder), filename));
}
function getTargetFolder(filename, folder) {
let match, depot;
if (!folder) return "";
switch (folder) {
case "Kontoauszüge":
match = filename.match(/Kontoauszug\s+ \d+_(\d+) vom \d+\.\d+\.\d+ zu Konto (\d+)\.pdf/);
if (!match) {
match = filename.match(/Kontoauszug Nr\. \d+_(\d+) zu Konto (\d+)\.pdf/);
if (!match) throw new Error("Did not match " + filename + " in Kontoauszüge");
return join(folder, match[2], match[1]);
}
return join(folder, match[2], match[1]);
case "Kreditkartenabrechnungen":
match = filename.match(
/Kreditkartenabrechnung (\d+_+\d+) per \d\d\.\d\d\.(\d+)\.pdf/
);
if (!match) throw new Error("Did not match " + filename + " in Kreditkartenabrechnungen");
return join(folder, match[1], match[2]);
case "Wertpapierdokumente":
match = filename.match(/vom \d\d\.\d\d\.(\d\d\d\d)/);
depot = filename.match(/zu Depot (\d+)/);
if (!match) {
match = filename.match(/Kosteninformation für das Jahr (\d+) zu Depot/);
}
if (!match || !depot) throw new Error("Did not match " + filename + " in Wertpapierdokumente");
return join(folder, depot[1], match[1]);
default:
return folder;
}
}