UNPKG

@kylecarbs/memfs

Version:

In-memory file-system with Node's fs API.

96 lines 3.51 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Stats = void 0; const constants_1 = require("./constants"); const { S_IFMT, S_IFDIR, S_IFREG, S_IFBLK, S_IFCHR, S_IFLNK, S_IFIFO, S_IFSOCK } = constants_1.constants; /** * Statistics about a file/directory, like `fs.Stats`. */ class Stats { static empty(bigint) { const stats = new Stats(); const getStatNumber = !bigint ? number => number : number => BigInt(number); const emptyDate = new Date(Date.UTC(1970, 0, 1, 0, 0, 0)); stats.uid = getStatNumber(0); stats.gid = getStatNumber(0); stats.dev = getStatNumber(0); stats.mode = getStatNumber(0); stats.nlink = getStatNumber(0); stats.rdev = getStatNumber(0); stats.blksize = getStatNumber(0); stats.ino = getStatNumber(0); stats.size = getStatNumber(0); stats.blocks = getStatNumber(0); stats.atime = emptyDate; stats.mtime = emptyDate; stats.ctime = emptyDate; stats.birthtime = emptyDate; stats.atimeMs = getStatNumber(0); stats.mtimeMs = getStatNumber(0); stats.ctimeMs = getStatNumber(0); stats.birthtimeMs = getStatNumber(0); return stats; } static build(node, bigint = false) { const stats = new Stats(); const { uid, gid, atime, mtime, ctime } = node; const getStatNumber = !bigint ? number => number : number => BigInt(number); // Copy all values on Stats from Node, so that if Node values // change, values on Stats would still be the old ones, // just like in Node fs. stats.uid = getStatNumber(uid); stats.gid = getStatNumber(gid); stats.rdev = getStatNumber(node.rdev); stats.blksize = getStatNumber(4096); stats.ino = getStatNumber(node.ino); stats.size = getStatNumber(node.getSize()); stats.blocks = getStatNumber(1); stats.atime = atime; stats.mtime = mtime; stats.ctime = ctime; stats.birthtime = ctime; stats.atimeMs = getStatNumber(atime.getTime()); stats.mtimeMs = getStatNumber(mtime.getTime()); const ctimeMs = getStatNumber(ctime.getTime()); stats.ctimeMs = ctimeMs; stats.birthtimeMs = ctimeMs; if (bigint) { stats.atimeNs = BigInt(atime.getTime()) * BigInt(1000000); stats.mtimeNs = BigInt(mtime.getTime()) * BigInt(1000000); const ctimeNs = BigInt(ctime.getTime()) * BigInt(1000000); stats.ctimeNs = ctimeNs; stats.birthtimeNs = ctimeNs; } stats.dev = getStatNumber(0); stats.mode = getStatNumber(node.mode); stats.nlink = getStatNumber(node.nlink); return stats; } _checkModeProperty(property) { return (Number(this.mode) & S_IFMT) === property; } isDirectory() { return this._checkModeProperty(S_IFDIR); } isFile() { return this._checkModeProperty(S_IFREG); } isBlockDevice() { return this._checkModeProperty(S_IFBLK); } isCharacterDevice() { return this._checkModeProperty(S_IFCHR); } isSymbolicLink() { return this._checkModeProperty(S_IFLNK); } isFIFO() { return this._checkModeProperty(S_IFIFO); } isSocket() { return this._checkModeProperty(S_IFSOCK); } } exports.Stats = Stats; exports.default = Stats; //# sourceMappingURL=Stats.js.map