style: apply wider print width for all files

This commit is contained in:
Mateusz 2025-08-10 11:28:34 +02:00
parent 76db8ce9c4
commit b27ef82193
6 changed files with 45 additions and 136 deletions

View File

@ -1,12 +1,7 @@
{ {
"phabricator.uri": "https://hub.sealcode.org/", "phabricator.uri": "https://hub.sealcode.org/",
"arc.land.onto.default": "hotwire", "arc.land.onto.default": "hotwire",
"load": [ "load": ["arcanist-linters", "arc-unit-mocha/src"],
"arcanist-linters", "unit.engine": "MochaEngine",
"arc-unit-mocha/src" "unit.mocha.include": [".test/**/*.ts"]
], }
"unit.engine": "MochaEngine",
"unit.mocha.include": [
".test/**/*.ts"
]
}

View File

@ -1,22 +1,7 @@
{ {
"useTabs": true, "useTabs": true,
"tabWidth": 4, "tabWidth": 4,
"trailingComma": "es5", "trailingComma": "es5",
"printWidth": 100, "printWidth": 120,
"overrides": [ "htmlWhitespaceSensitivity": "ignore"
{ }
"files": "*.yml",
"options": {
"tabWidth": 2,
"useTabs": false
}
},
{
"files": "*.html",
"options": {
"printWidth": 120,
"htmlWhitespaceSensitivity": "ignore"
}
}
]
}

View File

@ -30,9 +30,7 @@ async function handle() {
const result = convert(string); const result = convert(string);
download( download(
result.output, result.output,
`raport-${result.range.date_start.getFullYear()}-${( `raport-${result.range.date_start.getFullYear()}-${(result.range.date_start.getMonth() + 1)
result.range.date_start.getMonth() + 1
)
.toString() .toString()
.padStart(2, "0")}.mt940`, .padStart(2, "0")}.mt940`,
"text" "text"

View File

@ -7,47 +7,31 @@ import * as Diff from "diff";
describe("mt940 converter", () => { describe("mt940 converter", () => {
it("converts properly", async () => { it("converts properly", async () => {
const content = await fs.readFile( const content = await fs.readFile(path.resolve(__dirname, "../tests/real_csv.csv"), {
path.resolve(__dirname, "../tests/real_csv.csv"), encoding: null,
{ });
encoding: null,
}
);
const result = convert(iconv.decode(content, "cp1250")); const result = convert(iconv.decode(content, "cp1250"));
const expected_result = await fs.readFile( const expected_result = await fs.readFile(path.resolve(__dirname, "../tests/real_mt940.txt"), "utf-8");
path.resolve(__dirname, "../tests/real_mt940.txt"),
"utf-8"
);
try { try {
assert.strictEqual(result.output, expected_result); assert.strictEqual(result.output, expected_result);
} catch (e) { } catch (e) {
console.error("There was a difference. Fixes to apply:"); console.error("There was a difference. Fixes to apply:");
console.log( console.log(Diff.createPatch("mt940", result.output, expected_result));
Diff.createPatch("mt940", result.output, expected_result)
);
throw new Error("Texts differ"); throw new Error("Texts differ");
} }
}); });
it.only("converts properly", async () => { it.only("converts properly", async () => {
const content = await fs.readFile( const content = await fs.readFile(path.resolve(__dirname, "../tests/real_csv_2.csv"), {
path.resolve(__dirname, "../tests/real_csv_2.csv"), encoding: null,
{ });
encoding: null,
}
);
const result = convert(iconv.decode(content, "cp1250")); const result = convert(iconv.decode(content, "cp1250"));
const expected_result = await fs.readFile( const expected_result = await fs.readFile(path.resolve(__dirname, "../tests/real_mt940_2.txt"), "utf-8");
path.resolve(__dirname, "../tests/real_mt940_2.txt"),
"utf-8"
);
try { try {
assert.strictEqual(result.output, expected_result); assert.strictEqual(result.output, expected_result);
} catch (e) { } catch (e) {
console.error("There was a difference. Fixes to apply:"); console.error("There was a difference. Fixes to apply:");
console.log( console.log(Diff.createPatch("mt940", result.output, expected_result));
Diff.createPatch("mt940", result.output, expected_result)
);
throw new Error("Texts differ"); throw new Error("Texts differ");
} }
}); });

View File

@ -1,9 +1,4 @@
import { import { addLineNumbers, chunks, fillWithEmpty, removeRepeatingSpace } from "./utils";
addLineNumbers,
chunks,
fillWithEmpty,
removeRepeatingSpace,
} from "./utils";
class Account { class Account {
constructor( constructor(
@ -35,18 +30,12 @@ class Transaction {
})(); })();
formatTitle() { formatTitle() {
return addLineNumbers( return addLineNumbers(fillWithEmpty(chunks(this.title.trim(), 27), 9), 20).join("\n");
fillWithEmpty(chunks(this.title.trim(), 27), 9),
20
).join("\n");
} }
formatPerson() { formatPerson() {
const ret = addLineNumbers( const ret = addLineNumbers(
fillWithEmpty( fillWithEmpty(chunks(removeRepeatingSpace(this.person).trim(), 27), 2).slice(0, 2),
chunks(removeRepeatingSpace(this.person).trim(), 27),
2
).slice(0, 2),
32 32
).join("\n"); ).join("\n");
return ret; return ret;
@ -55,26 +44,11 @@ class Transaction {
toMT940() { toMT940() {
// just a bunch of heuristics // just a bunch of heuristics
const prefix_fns = [ const prefix_fns = [
() => () => (this.description.includes("OPŁATA-PRZELEW WEWN.") ? "169" : false),
this.description.includes("OPŁATA-PRZELEW WEWN.") () => (this.description.includes("PRZELEW WEWNĘTRZNY PRZY") ? "160" : false),
? "169" () => (this.description.includes("OPŁATA-PRZELEW WEWN. DO") ? "755" : false),
: false, () => (this.description.includes("PRZELEW ZEWNĘTRZNY WYCH") ? "152" : false),
() => () => (this.description.includes("OPŁATA PRZELEW ZEW.DOWO") ? "771" : false),
this.description.includes("PRZELEW WEWNĘTRZNY PRZY")
? "160"
: false,
() =>
this.description.includes("OPŁATA-PRZELEW WEWN. DO")
? "755"
: false,
() =>
this.description.includes("PRZELEW ZEWNĘTRZNY WYCH")
? "152"
: false,
() =>
this.description.includes("OPŁATA PRZELEW ZEW.DOWO")
? "771"
: false,
() => (this.amount > 0 ? "150" : false), () => (this.amount > 0 ? "150" : false),
() => "169", () => "169",
]; ];
@ -86,11 +60,9 @@ class Transaction {
break; break;
} }
} }
const result = `:61:${mtDate(this.acc_date)}${mtDate( const result = `:61:${mtDate(this.acc_date)}${mtDate(this.op_date).slice(2)}${
this.op_date this.amount > 0 ? "C" : "D"
).slice(2)}${this.amount > 0 ? "C" : "D"}${mtAmount( }${mtAmount(this.amount)}S${prefix}${Transaction.counter.next().value}
this.amount
)}S${prefix}${Transaction.counter.next().value}
:86:${prefix} :86:${prefix}
:86:${prefix}~00B${prefix}${this.description.slice(0, 23)} :86:${prefix}~00B${prefix}${this.description.slice(0, 23)}
${this.formatTitle()} ${this.formatTitle()}
@ -135,10 +107,7 @@ class mBankParser extends CSVParser {
this.parseAmount(lines[last - 2][7]), this.parseAmount(lines[last - 2][7]),
lines[18][0] lines[18][0]
); );
const range = new Range( const range = new Range(this.parseDate(lines[14][0]), this.parseDate(lines[14][1]));
this.parseDate(lines[14][0]),
this.parseDate(lines[14][1])
);
const transactions = []; const transactions = [];
for (let i = 38; i <= last - 5; i++) { for (let i = 38; i <= last - 5; i++) {
const line = lines[i]; const line = lines[i];
@ -148,29 +117,14 @@ class mBankParser extends CSVParser {
} }
if (line.length != 9) { if (line.length != 9) {
console.log({ line }); console.log({ line });
throw new Error( throw new Error("Wrong amount of columns! maybe a semicolon got stuck in a transaction description?");
"Wrong amount of columns! maybe a semicolon got stuck in a transaction description?"
);
} }
const date_acc = new Date(line[0]); const date_acc = new Date(line[0]);
const date_op = new Date(line[1]); const date_op = new Date(line[1]);
const [description, title, person, account_number] = line const [description, title, person, account_number] = line.slice(2).map(this.trimString);
.slice(2) const [amount, balance_after] = line.slice(6).map((s) => this.parseAmount(s));
.map(this.trimString);
const [amount, balance_after] = line
.slice(6)
.map((s) => this.parseAmount(s));
transactions.push( transactions.push(
new Transaction( new Transaction(date_acc, date_op, description, title, person, account_number, amount, balance_after)
date_acc,
date_op,
description,
title,
person,
account_number,
amount,
balance_after
)
); );
} }
return { account, range, transactions }; return { account, range, transactions };
@ -200,9 +154,10 @@ class mBankParser extends CSVParser {
} }
function mtDate(d: Date) { function mtDate(d: Date) {
return `${d.getFullYear() - 2000}${(d.getMonth() + 1) return `${d.getFullYear() - 2000}${(d.getMonth() + 1).toString().padStart(2, "0")}${d
.getDate()
.toString() .toString()
.padStart(2, "0")}${d.getDate().toString().padStart(2, "0")}`; .padStart(2, "0")}`;
} }
function mtAmount(n: number) { function mtAmount(n: number) {
@ -215,12 +170,8 @@ export function convert(csv_utf8: string): { output: string; range: Range } {
const string = `:20:MT940 const string = `:20:MT940
:25:/PL${account.number.replaceAll(/[^0-9]/g, "")} :25:/PL${account.number.replaceAll(/[^0-9]/g, "")}
:28C:${mtDate(range.date_start)} :28C:${mtDate(range.date_start)}
:60F:D${mtDate(range.date_start)}${account.currency}${mtAmount( :60F:D${mtDate(range.date_start)}${account.currency}${mtAmount(account.initial_balance)}
account.initial_balance
)}
${transactions.map((t) => t.toMT940()).join("\n")} ${transactions.map((t) => t.toMT940()).join("\n")}
:62F:D${mtDate(range.date_end)}${account.currency}${mtAmount( :62F:D${mtDate(range.date_end)}${account.currency}${mtAmount(account.closing_balance)}`;
account.closing_balance
)}`;
return { output: string, range }; return { output: string, range };
} }

View File

@ -15,11 +15,7 @@ export function fillWithEmpty(array: string[], target_length: number) {
return a; return a;
} }
export function addLineNumbers( export function addLineNumbers(s: string[], start_num: number, prefix = "~"): string[] {
s: string[],
start_num: number,
prefix = "~"
): string[] {
return s.map((l, i) => `${prefix}${start_num + i}${l}`); return s.map((l, i) => `${prefix}${start_num + i}${l}`);
} }