import { constants } from 'fs' import { join } from 'node:path' import { access, readFile, open, unlink, readdir } from 'fs/promises' import type { Items } from './type' class Repository { #rootPath: string constructor(rootPath: string) { this.#rootPath = rootPath } async isFile(path: string) { try { await access(path, constants.F_OK | constants.R_OK) return true } catch (error) { return false } } async infoRoot() { try { const buffer = await readdir(this.#rootPath) console.log(buffer) return true } catch (error) { return false } } async tree({ root = this.#rootPath, tree, depth = 1, }: { root?: string tree: Items depth?: number }) { try { const entries = await readdir(root, { withFileTypes: true }) for (const dirent of entries) { if (dirent.name !== '.pijul') { const item = { isDir: dirent.isDirectory(), extension: dirent.name.split('.').at(-1) ?? null, name: dirent.name, path: join(root, dirent.name), depth, } tree.push({...item, id: tree.length + 1}) if (dirent.isDirectory()) { await this.tree({ root: join(root, dirent.name), tree, depth: depth + 1, }) } } } } catch (error) { console.error(error) } } async getContent(path: string) { const filePath = join(this.#rootPath + path) const isFileExist = await this.isFile(filePath) if (!isFileExist) { console.error(`The file located at ${path} do not exist`) } try { const buffer = readFile(filePath) console.log(buffer) } catch (error) { console.error(error) } } async addFile(path: string) { const filePath = join(this.#rootPath, path) const isFileExist = await this.isFile(filePath) if (!isFileExist) { return } try { await open(filePath, 'w') return true } catch (error) { return false } } async delFile(path: string) { const filePath = join(this.#rootPath, path) const isFileExist = await this.isFile(filePath) if (!isFileExist) { return } try { await unlink(filePath) return true } catch (error) { return false } } } export default Repository