Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | import fs from "fs"; import path from "path"; export abstract class File<T extends string | object> { public abstract filePath: string; read(): T { let contents = fs.readFileSync(this.filePath, 'utf8'); try { let parsed = JSON.parse(contents); return parsed; } catch(err) { return contents as T } } write(data: T): T { let payload = typeof data === "string" ? data : JSON.stringify(data); fs.writeFileSync(this.filePath, payload, {encoding: 'utf8', flag: 'w'}); return data; } test(): boolean { return fs.existsSync(this.filePath); } path(): string { return this.filePath } name(): string { return path.basename(this.filePath, this.extention()); } dir(): string { return path.dirname(this.filePath); } extention(): string { return path.extname(this.filePath); } } export class LocalFile<T extends string | object> extends File<T> { public filePath: string; constructor(filePath: string) { super(); this.filePath = path.resolve(__dirname, filePath); } } export class RemoteFile<T extends string | object> extends File<T> { public filePath: string; constructor(filePath: string) { super(); this.filePath = path.resolve(process.cwd(), filePath); } } export class AbsoluteFile<T extends string | object> extends File<T> { public filePath: string; constructor(filePath: string) { super(); this.filePath = path.resolve(filePath); } } |