123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.areStatsEqual = exports.convertToBigIntStats = exports.clearStats = exports.makeEmptyStats = exports.makeDefaultStats = exports.BigIntStatsEntry = exports.StatEntry = exports.DirEntry = exports.DEFAULT_MODE = void 0;
- const tslib_1 = require("tslib");
- const nodeUtils = tslib_1.__importStar(require("util"));
- const constants_1 = require("./constants");
- exports.DEFAULT_MODE = constants_1.S_IFREG | 0o644;
- class DirEntry {
- constructor() {
- this.name = ``;
- this.mode = 0;
- }
- isBlockDevice() {
- return false;
- }
- isCharacterDevice() {
- return false;
- }
- isDirectory() {
- return (this.mode & constants_1.S_IFMT) === constants_1.S_IFDIR;
- }
- isFIFO() {
- return false;
- }
- isFile() {
- return (this.mode & constants_1.S_IFMT) === constants_1.S_IFREG;
- }
- isSocket() {
- return false;
- }
- isSymbolicLink() {
- return (this.mode & constants_1.S_IFMT) === constants_1.S_IFLNK;
- }
- }
- exports.DirEntry = DirEntry;
- class StatEntry {
- constructor() {
- this.uid = 0;
- this.gid = 0;
- this.size = 0;
- this.blksize = 0;
- this.atimeMs = 0;
- this.mtimeMs = 0;
- this.ctimeMs = 0;
- this.birthtimeMs = 0;
- this.atime = new Date(0);
- this.mtime = new Date(0);
- this.ctime = new Date(0);
- this.birthtime = new Date(0);
- this.dev = 0;
- this.ino = 0;
- this.mode = exports.DEFAULT_MODE;
- this.nlink = 1;
- this.rdev = 0;
- this.blocks = 1;
- }
- isBlockDevice() {
- return false;
- }
- isCharacterDevice() {
- return false;
- }
- isDirectory() {
- return (this.mode & constants_1.S_IFMT) === constants_1.S_IFDIR;
- }
- isFIFO() {
- return false;
- }
- isFile() {
- return (this.mode & constants_1.S_IFMT) === constants_1.S_IFREG;
- }
- isSocket() {
- return false;
- }
- isSymbolicLink() {
- return (this.mode & constants_1.S_IFMT) === constants_1.S_IFLNK;
- }
- }
- exports.StatEntry = StatEntry;
- class BigIntStatsEntry {
- constructor() {
- this.uid = BigInt(0);
- this.gid = BigInt(0);
- this.size = BigInt(0);
- this.blksize = BigInt(0);
- this.atimeMs = BigInt(0);
- this.mtimeMs = BigInt(0);
- this.ctimeMs = BigInt(0);
- this.birthtimeMs = BigInt(0);
- this.atimeNs = BigInt(0);
- this.mtimeNs = BigInt(0);
- this.ctimeNs = BigInt(0);
- this.birthtimeNs = BigInt(0);
- this.atime = new Date(0);
- this.mtime = new Date(0);
- this.ctime = new Date(0);
- this.birthtime = new Date(0);
- this.dev = BigInt(0);
- this.ino = BigInt(0);
- this.mode = BigInt(exports.DEFAULT_MODE);
- this.nlink = BigInt(1);
- this.rdev = BigInt(0);
- this.blocks = BigInt(1);
- }
- isBlockDevice() {
- return false;
- }
- isCharacterDevice() {
- return false;
- }
- isDirectory() {
- return (this.mode & BigInt(constants_1.S_IFMT)) === BigInt(constants_1.S_IFDIR);
- }
- isFIFO() {
- return false;
- }
- isFile() {
- return (this.mode & BigInt(constants_1.S_IFMT)) === BigInt(constants_1.S_IFREG);
- }
- isSocket() {
- return false;
- }
- isSymbolicLink() {
- return (this.mode & BigInt(constants_1.S_IFMT)) === BigInt(constants_1.S_IFLNK);
- }
- }
- exports.BigIntStatsEntry = BigIntStatsEntry;
- function makeDefaultStats() {
- return new StatEntry();
- }
- exports.makeDefaultStats = makeDefaultStats;
- function makeEmptyStats() {
- return clearStats(makeDefaultStats());
- }
- exports.makeEmptyStats = makeEmptyStats;
- /**
- * Mutates the provided stats object to zero it out then returns it for convenience
- */
- function clearStats(stats) {
- for (const key in stats) {
- if (Object.prototype.hasOwnProperty.call(stats, key)) {
- const element = stats[key];
- if (typeof element === `number`) {
- // @ts-expect-error Typescript can't tell that stats[key] is a number
- stats[key] = 0;
- }
- else if (typeof element === `bigint`) {
- // @ts-expect-error Typescript can't tell that stats[key] is a bigint
- stats[key] = BigInt(0);
- }
- else if (nodeUtils.types.isDate(element)) {
- // @ts-expect-error Typescript can't tell that stats[key] is a bigint
- stats[key] = new Date(0);
- }
- }
- }
- return stats;
- }
- exports.clearStats = clearStats;
- function convertToBigIntStats(stats) {
- const bigintStats = new BigIntStatsEntry();
- for (const key in stats) {
- if (Object.prototype.hasOwnProperty.call(stats, key)) {
- const element = stats[key];
- if (typeof element === `number`) {
- // @ts-expect-error Typescript isn't able to tell this is valid
- bigintStats[key] = BigInt(element);
- }
- else if (nodeUtils.types.isDate(element)) {
- // @ts-expect-error Typescript isn't able to tell this is valid
- bigintStats[key] = new Date(element);
- }
- }
- }
- bigintStats.atimeNs = bigintStats.atimeMs * BigInt(1e6);
- bigintStats.mtimeNs = bigintStats.mtimeMs * BigInt(1e6);
- bigintStats.ctimeNs = bigintStats.ctimeMs * BigInt(1e6);
- bigintStats.birthtimeNs = bigintStats.birthtimeMs * BigInt(1e6);
- return bigintStats;
- }
- exports.convertToBigIntStats = convertToBigIntStats;
- function areStatsEqual(a, b) {
- if (a.atimeMs !== b.atimeMs)
- return false;
- if (a.birthtimeMs !== b.birthtimeMs)
- return false;
- if (a.blksize !== b.blksize)
- return false;
- if (a.blocks !== b.blocks)
- return false;
- if (a.ctimeMs !== b.ctimeMs)
- return false;
- if (a.dev !== b.dev)
- return false;
- if (a.gid !== b.gid)
- return false;
- if (a.ino !== b.ino)
- return false;
- if (a.isBlockDevice() !== b.isBlockDevice())
- return false;
- if (a.isCharacterDevice() !== b.isCharacterDevice())
- return false;
- if (a.isDirectory() !== b.isDirectory())
- return false;
- if (a.isFIFO() !== b.isFIFO())
- return false;
- if (a.isFile() !== b.isFile())
- return false;
- if (a.isSocket() !== b.isSocket())
- return false;
- if (a.isSymbolicLink() !== b.isSymbolicLink())
- return false;
- if (a.mode !== b.mode)
- return false;
- if (a.mtimeMs !== b.mtimeMs)
- return false;
- if (a.nlink !== b.nlink)
- return false;
- if (a.rdev !== b.rdev)
- return false;
- if (a.size !== b.size)
- return false;
- if (a.uid !== b.uid)
- return false;
- const aN = a;
- const bN = b;
- if (aN.atimeNs !== bN.atimeNs)
- return false;
- if (aN.mtimeNs !== bN.mtimeNs)
- return false;
- if (aN.ctimeNs !== bN.ctimeNs)
- return false;
- if (aN.birthtimeNs !== bN.birthtimeNs)
- return false;
- return true;
- }
- exports.areStatsEqual = areStatsEqual;
|