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