Stats.js 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.Stats = void 0;
  4. const fs_node_utils_1 = require("@jsonjoy.com/fs-node-utils");
  5. const { S_IFMT, S_IFDIR, S_IFREG, S_IFBLK, S_IFCHR, S_IFLNK, S_IFIFO, S_IFSOCK } = fs_node_utils_1.constants;
  6. /**
  7. * Statistics about a file/directory, like `fs.Stats`.
  8. */
  9. class Stats {
  10. static build(node, bigint = false) {
  11. const stats = new Stats();
  12. const { uid, gid, atime, mtime, ctime, btime } = node;
  13. const getStatNumber = !bigint ? number => number : number => BigInt(number);
  14. // Copy all values on Stats from Node, so that if Node values
  15. // change, values on Stats would still be the old ones,
  16. // just like in Node fs.
  17. stats.uid = getStatNumber(uid);
  18. stats.gid = getStatNumber(gid);
  19. stats.rdev = getStatNumber(node.rdev);
  20. stats.blksize = getStatNumber(4096);
  21. stats.ino = getStatNumber(node.ino);
  22. stats.size = getStatNumber(node.getSize());
  23. stats.blocks = getStatNumber(1);
  24. stats.atime = new Date(atime.getTime());
  25. stats.mtime = new Date(mtime.getTime());
  26. stats.ctime = new Date(ctime.getTime());
  27. stats.birthtime = new Date(btime.getTime());
  28. stats.atimeMs = getStatNumber(atime.getTime());
  29. stats.mtimeMs = getStatNumber(mtime.getTime());
  30. stats.ctimeMs = getStatNumber(ctime.getTime());
  31. stats.birthtimeMs = getStatNumber(btime.getTime());
  32. if (bigint) {
  33. stats.atimeNs = BigInt(atime.getTime()) * BigInt(1000000);
  34. stats.mtimeNs = BigInt(mtime.getTime()) * BigInt(1000000);
  35. stats.ctimeNs = BigInt(ctime.getTime()) * BigInt(1000000);
  36. stats.birthtimeNs = BigInt(btime.getTime()) * BigInt(1000000);
  37. }
  38. stats.dev = getStatNumber(0);
  39. stats.mode = getStatNumber(node.mode);
  40. stats.nlink = getStatNumber(node.nlink);
  41. return stats;
  42. }
  43. _checkModeProperty(property) {
  44. return (Number(this.mode) & S_IFMT) === property;
  45. }
  46. isDirectory() {
  47. return this._checkModeProperty(S_IFDIR);
  48. }
  49. isFile() {
  50. return this._checkModeProperty(S_IFREG);
  51. }
  52. isBlockDevice() {
  53. return this._checkModeProperty(S_IFBLK);
  54. }
  55. isCharacterDevice() {
  56. return this._checkModeProperty(S_IFCHR);
  57. }
  58. isSymbolicLink() {
  59. return this._checkModeProperty(S_IFLNK);
  60. }
  61. isFIFO() {
  62. return this._checkModeProperty(S_IFIFO);
  63. }
  64. isSocket() {
  65. return this._checkModeProperty(S_IFSOCK);
  66. }
  67. }
  68. exports.Stats = Stats;
  69. exports.default = Stats;
  70. //# sourceMappingURL=Stats.js.map