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