Add support for parsing tasks from directory
This commit is contained in:
47
src/notepad/index.ts
Normal file
47
src/notepad/index.ts
Normal file
@@ -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<Task[]> {
|
||||
return walk(directory, readTasksFromFile);
|
||||
}
|
||||
|
||||
export async function walk<T>(directory: string, visitor: (path: string) => Promise<T[]>): Promise<T[]> {
|
||||
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<Task[]> {
|
||||
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;
|
||||
}
|
||||
Reference in New Issue
Block a user