{"version":3,"file":"disk.cjs","sources":["../../src/disk.ts"],"sourcesContent":["/**\n * @ Author: Hanrea\n * @ version: 2023-03-06 13:14:21\n * @ copyright: Vecmat (c) - <hi(at)vecmat.com>\n */\nimport * as fs from \"fs\";\n\nimport * as path from \"path\";\n\n/**\n * The platform-specific file separator. '\\' or '/'.\n */\nexport const sep = path.sep;\n\n/**\n * Checks if path is a file\n * Synchronous mode\n *\n * @param {string} p\n * @returns {*}  {boolean}\n */\nexport function isFile(p: string): boolean {\n    try {\n        const stats = fs.statSync(p);\n        return stats.isFile();\n    } catch (e) {\n        return false;\n    }\n}\n\n/**\n * Checks if path is a dir\n * Synchronous mode\n *\n * @param {string} p\n * @returns {*}  {boolean}\n */\nexport function isDir(p: string): boolean {\n    try {\n        const stats = fs.statSync(p);\n        return stats.isDirectory();\n    } catch (e) {\n        return false;\n    }\n}\n\n/**\n * Read the contents of the file filename.\n * Asynchronous mode\n *\n * @param {string} filename\n * @param {string} [enc='utf8']\n * @returns {*}  {Promise<any>}\n */\nexport function readFile(filename: string): Promise<any> {\n    return new Promise((fulfill, reject) => {\n        fs.readFile(filename, (err, res) => {\n            return err ? reject(err) : fulfill(res);\n        });\n    });\n}\n\n/**\n * Checks if the file or folder p is writable\n * Synchronous mode\n *\n * @param {string} p\n * @returns {*}  {boolean}\n */\nexport function isWritable(p: string): boolean {\n    try {\n        const stats = fs.statSync(p);\n        const mode = stats.mode;\n        const uid = process.getuid ? process.getuid() : 0;\n        const gid = process.getgid ? process.getgid() : 0;\n        const owner = uid === stats.uid;\n        const group = gid === stats.gid;\n        return !!((owner && mode & parseInt(\"00200\", 8)) || (group && mode & parseInt(\"00020\", 8)) || mode & parseInt(\"00002\", 8));\n    } catch (e) {\n        return false;\n    }\n}\n\n/**\n * Write the string data to file.\n * Asynchronous mode\n *\n * @param {string} filename\n * @param {(string | Buffer)} data\n * @returns {*}  {Promise<any>}\n */\nexport function writeFile(filename: string, data: string | Buffer): Promise<any> {\n    return new Promise((fulfill, reject) => {\n        fs.writeFile(filename, data, err => {\n            return err ? reject(err) : fulfill(null);\n        });\n    });\n}\n\n/**\n * Rename the file. If newFileName and fileName be not in the same physical path,\n * the move file action will be triggered.\n * Asynchronous mode\n *\n * @param {string} FileName\n * @param {string} newFileName\n * @returns {*}  {Promise<any>}\n */\nexport function reFile(fileName: string, newFileName: string): Promise<any> {\n    return new Promise((fulfill, reject) => {\n        fs.rename(fileName, newFileName, err => {\n            return err ? reject(err) : fulfill(null);\n        });\n    });\n}\n\n/**\n * Delete the file p.\n * Asynchronous mode\n *\n * @param {string} p\n * @returns {*}  {Promise<any>}\n */\nexport function rmFile(p: string): Promise<any> {\n    return new Promise((fulfill, reject) => {\n        fs.unlink(p, err => {\n            return err ? reject(err) : fulfill(null);\n        });\n    });\n}\n\n/**\n * According to the path p to create a folder,\n * p contains multi-level new path will be automatically recursively created.\n * Asynchronous mode\n *\n * @param {string} p\n * @param {string} [mode='0777']\n * @returns {Promise<any>}\n */\nexport function mkDir(p: string, mode = \"0777\"): Promise<any> {\n    return new Promise((fulfill, reject) => {\n        fs.stat(path.dirname(p), (err, res) => {\n            if (err || !res.isDirectory()) reject(err);\n\n            fs.mkdir(p, { recursive: true, mode }, e => {\n                return e ? reject(e) : fulfill(null);\n            });\n        });\n    });\n}\n\n/**\n * Recursively read the path under the p folder.\n * Asynchronous mode\n *\n * @param {string} p\n * @param {*} filter\n * @param {string} [prefix='']\n * @returns {*}  {Promise<any>}\n */\nexport function readDir(p: string, filter: any, prefix = \"\"): Promise<any> {\n    filter =\n        filter ||\n        function (x: any) {\n            return x[0] !== \".\";\n        };\n\n    const dir = path.join(p, prefix);\n    return new Promise((fulfill, reject) => {\n        fs.stat(path.dirname(dir), (err, res) => {\n            if (err || !res.isDirectory()) reject(err);\n\n            fs.readdir(dir, \"utf-8\", (e, res) => {\n                return e ? reject(e) : fulfill(res);\n            });\n        });\n    });\n}\n\n/**\n * Subfolder of path p are recursively deleted. When reserve is true, the top-level folder is deleted\n * Asynchronous mode\n *\n * @param {string} p\n * @param {boolean} reserve\n * @returns {*}\n */\nexport function rmDir(p: string, reserve: boolean) {\n    return new Promise((fulfill, reject) => {\n        fs.rmdir(p, { maxRetries: 3, recursive: reserve }, err => {\n            return err ? reject(err) : fulfill(null);\n        });\n    });\n}\n\n/**\n * Modify the permissions of the file or folder p.\n * Asynchronous mode\n *\n * @param {string} p\n * @param {string} [mode='777']\n * @returns {*}  {Promise<any>}\n */\nexport function chmod(p: string, mode = \"777\"): Promise<any> {\n    return new Promise((fulfill, reject) => {\n        fs.stat(p, (err, res) => {\n            if (err) reject(err);\n\n            fs.chmod(p, mode, err => {\n                return err ? reject(err) : fulfill(res);\n            });\n        });\n    });\n}\n"],"names":["path","fs"],"mappings":"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"}