From 6c09640118ae6c0af75e7567ccd9e2043b93a995 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Pluta?= Date: Wed, 15 Jan 2025 12:14:37 +0100 Subject: [PATCH] Add support for parsing tasks from directory --- src/notepad/index.ts | 47 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 src/notepad/index.ts diff --git a/src/notepad/index.ts b/src/notepad/index.ts new file mode 100644 index 0000000..c8175d2 --- /dev/null +++ b/src/notepad/index.ts @@ -0,0 +1,47 @@ +import fs from "fs"; +import readline from "readline"; +import { Task } from "../types/task"; +import { parse } from "../parser"; + +export async function readTasksFromDirectory(directory: string): Promise { + return walk(directory, readTasksFromFile); +} + +export async function walk(directory: string, visitor: (path: string) => Promise): Promise { + const list = []; + + for(const file of fs.readdirSync(directory)) { + const path = `${directory}/${file}`; + + if (fs.statSync(path).isDirectory()) { + const items = await walk(path, visitor); + list.push(...items); + } else { + const items = await visitor(path); + list.push(...items); + } + } + + return list; +} + +export async function readTasksFromFile(path: string): Promise { + const fileStream = fs.createReadStream(path); + + const rl = readline.createInterface({ + input: fileStream, + crlfDelay: Infinity + }); + + const list: Task[] = []; + + for await (const line of rl) { + const task = parse(line); + + if(task) { + list.push(task); + } + } + + return list; +} \ No newline at end of file