文件操作 - fs.mjs
返回文件管理
返回主菜单
删除本文件
文件: /var/www/OLD/node_modules/unstorage/drivers/fs.mjs
编辑文件内容
import { existsSync, promises as fsp } from "node:fs"; import { resolve, relative, join } from "node:path"; import { watch } from "chokidar"; import { createError, createRequiredError, defineDriver } from "./utils/index.mjs"; import { readFile, writeFile, readdirRecursive, rmRecursive, unlink } from "./utils/node-fs.mjs"; import anymatch from "anymatch"; const PATH_TRAVERSE_RE = /\.\.:|\.\.$/; const DRIVER_NAME = "fs"; export default defineDriver((opts = {}) => { if (!opts.base) { throw createRequiredError(DRIVER_NAME, "base"); } if (!opts.ignore) { opts.ignore = ["**/node_modules/**", "**/.git/**"]; } opts.base = resolve(opts.base); const r = (key) => { if (PATH_TRAVERSE_RE.test(key)) { throw createError( DRIVER_NAME, `Invalid key: ${JSON.stringify(key)}. It should not contain .. segments` ); } const resolved = join(opts.base, key.replace(/:/g, "/")); return resolved; }; let _watcher; const _unwatch = async () => { if (_watcher) { await _watcher.close(); _watcher = void 0; } }; return { name: DRIVER_NAME, options: opts, hasItem(key) { return existsSync(r(key)); }, getItem(key) { return readFile(r(key), "utf8"); }, getItemRaw(key) { return readFile(r(key)); }, async getMeta(key) { const { atime, mtime, size, birthtime, ctime } = await fsp.stat(r(key)).catch(() => ({})); return { atime, mtime, size, birthtime, ctime }; }, setItem(key, value) { if (opts.readOnly) { return; } return writeFile(r(key), value, "utf8"); }, setItemRaw(key, value) { if (opts.readOnly) { return; } return writeFile(r(key), value); }, removeItem(key) { if (opts.readOnly) { return; } return unlink(r(key)); }, getKeys() { return readdirRecursive(r("."), anymatch(opts.ignore || [])); }, async clear() { if (opts.readOnly || opts.noClear) { return; } await rmRecursive(r(".")); }, async dispose() { if (_watcher) { await _watcher.close(); } }, async watch(callback) { if (_watcher) { return _unwatch; } await new Promise((resolve2, reject) => { _watcher = watch(opts.base, { ignoreInitial: true, ignored: opts.ignore, ...opts.watchOptions }).on("ready", () => { resolve2(); }).on("error", reject).on("all", (eventName, path) => { path = relative(opts.base, path); if (eventName === "change" || eventName === "add") { callback("update", path); } else if (eventName === "unlink") { callback("remove", path); } }); }); return _unwatch; } }; });
修改文件时间
将文件时间修改为当前时间的前一年
删除文件