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/",
"arc.land.onto.default": "hotwire",
"load": [
"arcanist-linters",
"arc-unit-mocha/src"
],
"unit.engine": "MochaEngine",
"unit.mocha.include": [
".test/**/*.ts"
]
}
"phabricator.uri": "https://hub.sealcode.org/",
"arc.land.onto.default": "hotwire",
"load": ["arcanist-linters", "arc-unit-mocha/src"],
"unit.engine": "MochaEngine",
"unit.mocha.include": [".test/**/*.ts"]
}

View File

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

View File

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

View File

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

View File

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

View File

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