style: apply wider print width for all files
This commit is contained in:
		
							parent
							
								
									9591e500f7
								
							
						
					
					
						commit
						43183ef9b9
					
				
							
								
								
									
										17
									
								
								.arcconfig
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								.arcconfig
									
									
									
									
									
								
							| @ -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"] | ||||
| } | ||||
|  | ||||
							
								
								
									
										27
									
								
								.prettierrc
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								.prettierrc
									
									
									
									
									
								
							| @ -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" | ||||
| } | ||||
|  | ||||
| @ -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" | ||||
|  | ||||
| @ -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"); | ||||
| 		} | ||||
| 	}); | ||||
|  | ||||
							
								
								
									
										91
									
								
								src/index.ts
									
									
									
									
									
								
							
							
						
						
									
										91
									
								
								src/index.ts
									
									
									
									
									
								
							| @ -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 }; | ||||
| } | ||||
|  | ||||
| @ -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}`); | ||||
| } | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user