{"version":3,"file":"item.mjs","names":[],"sources":["../../../../../node_modules/mock-fs/lib/item.js"],"sourcesContent":["'use strict';\n\nconst fsBinding = process.binding('fs');\nconst statsConstructor = fsBinding.statValues\n  ? fsBinding.statValues.constructor\n  : Float64Array;\n// Nodejs v18.7.0 changed bigint stats type from BigUint64Array to BigInt64Array\n// https://github.com/nodejs/node/pull/43714\nconst bigintStatsConstructor = fsBinding.bigintStatValues\n  ? fsBinding.bigintStatValues.constructor\n  : BigUint64Array;\n\nlet counter = 0;\n\n/**\n * Permissions.\n * @enum {number}\n */\nconst permissions = {\n  USER_READ: 256, // 0400\n  USER_WRITE: 128, // 0200\n  USER_EXEC: 64, // 0100\n  GROUP_READ: 32, // 0040\n  GROUP_WRITE: 16, // 0020\n  GROUP_EXEC: 8, // 0010\n  OTHER_READ: 4, // 0004\n  OTHER_WRITE: 2, // 0002\n  OTHER_EXEC: 1, // 0001\n};\n\nfunction getUid() {\n  // force 0 on windows.\n  return process.getuid ? process.getuid() : 0;\n}\n\nfunction getGid() {\n  // force 0 on windows.\n  return process.getgid ? process.getgid() : 0;\n}\n\n/**\n * A filesystem item.\n * @class\n */\nfunction Item() {\n  const now = Date.now();\n\n  /**\n   * Access time.\n   * @type {Date}\n   */\n  this._atime = new Date(now);\n\n  /**\n   * Change time.\n   * @type {Date}\n   */\n  this._ctime = new Date(now);\n\n  /**\n   * Birth time.\n   * @type {Date}\n   */\n  this._birthtime = new Date(now);\n\n  /**\n   * Modification time.\n   * @type {Date}\n   */\n  this._mtime = new Date(now);\n\n  /**\n   * Permissions.\n   */\n  this._mode = 438; // 0666\n\n  /**\n   * User id.\n   * @type {number}\n   */\n  this._uid = getUid();\n\n  /**\n   * Group id.\n   * @type {number}\n   */\n  this._gid = getGid();\n\n  /**\n   * Item number.\n   * @type {number}\n   */\n  this._id = ++counter;\n\n  /**\n   * Number of links to this item.\n   */\n  this.links = 0;\n}\n\n/**\n * Add execute if read allowed\n * See notes in index.js -> mapping#addDir\n * @param {number} mode The file mode.\n * @return {number} The modified mode.\n */\nItem.fixWin32Permissions = (mode) =>\n  process.platform !== 'win32'\n    ? mode\n    : mode |\n      (mode & permissions.USER_READ && permissions.USER_EXEC) |\n      (mode & permissions.GROUP_READ && permissions.GROUP_EXEC) |\n      (mode & permissions.OTHER_READ && permissions.OTHER_EXEC);\n\n/**\n * Determine if the current user has read permission.\n * @return {boolean} The current user can read.\n */\nItem.prototype.canRead = function () {\n  const uid = getUid();\n  const gid = getGid();\n  let can = false;\n  if (process.getuid && uid === 0) {\n    can = true;\n  } else if (uid === this._uid) {\n    can = (permissions.USER_READ & this._mode) === permissions.USER_READ;\n  } else if (gid === this._gid) {\n    can = (permissions.GROUP_READ & this._mode) === permissions.GROUP_READ;\n  } else {\n    can = (permissions.OTHER_READ & this._mode) === permissions.OTHER_READ;\n  }\n  return can;\n};\n\n/**\n * Determine if the current user has write permission.\n * @return {boolean} The current user can write.\n */\nItem.prototype.canWrite = function () {\n  const uid = getUid();\n  const gid = getGid();\n  let can = false;\n  if (process.getuid && uid === 0) {\n    can = true;\n  } else if (uid === this._uid) {\n    can = (permissions.USER_WRITE & this._mode) === permissions.USER_WRITE;\n  } else if (gid === this._gid) {\n    can = (permissions.GROUP_WRITE & this._mode) === permissions.GROUP_WRITE;\n  } else {\n    can = (permissions.OTHER_WRITE & this._mode) === permissions.OTHER_WRITE;\n  }\n  return can;\n};\n\n/**\n * Determine if the current user has execute permission.\n * @return {boolean} The current user can execute.\n */\nItem.prototype.canExecute = function () {\n  const uid = getUid();\n  const gid = getGid();\n  let can = false;\n  if (process.getuid && uid === 0) {\n    can = true;\n  } else if (uid === this._uid) {\n    can = (permissions.USER_EXEC & this._mode) === permissions.USER_EXEC;\n  } else if (gid === this._gid) {\n    can = (permissions.GROUP_EXEC & this._mode) === permissions.GROUP_EXEC;\n  } else {\n    can = (permissions.OTHER_EXEC & this._mode) === permissions.OTHER_EXEC;\n  }\n  return can;\n};\n\n/**\n * Get access time.\n * @return {Date} Access time.\n */\nItem.prototype.getATime = function () {\n  return this._atime;\n};\n\n/**\n * Set access time.\n * @param {Date} atime Access time.\n */\nItem.prototype.setATime = function (atime) {\n  this._atime = atime;\n};\n\n/**\n * Get change time.\n * @return {Date} Change time.\n */\nItem.prototype.getCTime = function () {\n  return this._ctime;\n};\n\n/**\n * Set change time.\n * @param {Date} ctime Change time.\n */\nItem.prototype.setCTime = function (ctime) {\n  this._ctime = ctime;\n};\n\n/**\n * Get birth time.\n * @return {Date} Birth time.\n */\nItem.prototype.getBirthtime = function () {\n  return this._birthtime;\n};\n\n/**\n * Set change time.\n * @param {Date} birthtime Birth time.\n */\nItem.prototype.setBirthtime = function (birthtime) {\n  this._birthtime = birthtime;\n};\n\n/**\n * Get modification time.\n * @return {Date} Modification time.\n */\nItem.prototype.getMTime = function () {\n  return this._mtime;\n};\n\n/**\n * Set modification time.\n * @param {Date} mtime Modification time.\n */\nItem.prototype.setMTime = function (mtime) {\n  this._mtime = mtime;\n};\n\n/**\n * Get mode (permission only, e.g 0666).\n * @return {number} Mode.\n */\nItem.prototype.getMode = function () {\n  return this._mode;\n};\n\n/**\n * Set mode (permission only, e.g 0666).\n * @param {Date} mode Mode.\n */\nItem.prototype.setMode = function (mode) {\n  this.setCTime(new Date());\n  this._mode = mode;\n};\n\n/**\n * Get user id.\n * @return {number} User id.\n */\nItem.prototype.getUid = function () {\n  return this._uid;\n};\n\n/**\n * Set user id.\n * @param {number} uid User id.\n */\nItem.prototype.setUid = function (uid) {\n  this.setCTime(new Date());\n  this._uid = uid;\n};\n\n/**\n * Get group id.\n * @return {number} Group id.\n */\nItem.prototype.getGid = function () {\n  return this._gid;\n};\n\n/**\n * Set group id.\n * @param {number} gid Group id.\n */\nItem.prototype.setGid = function (gid) {\n  this.setCTime(new Date());\n  this._gid = gid;\n};\n\n/**\n * Get item stats.\n * @param {boolean} bigint Use BigInt.\n * @return {object} Stats properties.\n */\nItem.prototype.getStats = function (bigint) {\n  const stats = bigint\n    ? new bigintStatsConstructor(36)\n    : new statsConstructor(36);\n  const convert = bigint ? (v) => BigInt(v) : (v) => v;\n\n  stats[0] = convert(8675309); // dev\n  // [1] is mode\n  stats[2] = convert(this.links); // nlink\n  stats[3] = convert(this.getUid()); // uid\n  stats[4] = convert(this.getGid()); // gid\n  stats[5] = convert(0); // rdev\n  stats[6] = convert(4096); // blksize\n  stats[7] = convert(this._id); // ino\n  // [8] is size\n  // [9] is blocks\n  const atimeMs = +this.getATime();\n  stats[10] = convert(Math.floor(atimeMs / 1000)); // atime seconds\n  stats[11] = convert((atimeMs % 1000) * 1000000); // atime nanoseconds\n  const mtimeMs = +this.getMTime();\n  stats[12] = convert(Math.floor(mtimeMs / 1000)); // atime seconds\n  stats[13] = convert((mtimeMs % 1000) * 1000000); // atime nanoseconds\n  const ctimeMs = +this.getCTime();\n  stats[14] = convert(Math.floor(ctimeMs / 1000)); // atime seconds\n  stats[15] = convert((ctimeMs % 1000) * 1000000); // atime nanoseconds\n  const birthtimeMs = +this.getBirthtime();\n  stats[16] = convert(Math.floor(birthtimeMs / 1000)); // atime seconds\n  stats[17] = convert((birthtimeMs % 1000) * 1000000); // atime nanoseconds\n  return stats;\n};\n\n/**\n * Get the item's string representation.\n * @return {string} String representation.\n */\nItem.prototype.toString = function () {\n  return '[' + this.constructor.name + ']';\n};\n\n/**\n * Export the constructor.\n * @type {function()}\n */\nmodule.exports = Item;\n"],"x_google_ignoreList":[0],"mappings":";;;;CAEA,MAAM,YAAY,QAAQ,QAAQ,KAAK;CACvC,MAAM,mBAAmB,UAAU,aAC/B,UAAU,WAAW,cACrB;CAGJ,MAAM,yBAAyB,UAAU,mBACrC,UAAU,iBAAiB,cAC3B;CAEJ,IAAI,UAAU;;;;;CAMd,MAAM,cAAc;EAClB,WAAW;EACX,YAAY;EACZ,WAAW;EACX,YAAY;EACZ,aAAa;EACb,YAAY;EACZ,YAAY;EACZ,aAAa;EACb,YAAY;EACb;CAED,SAAS,SAAS;AAEhB,SAAO,QAAQ,SAAS,QAAQ,QAAQ,GAAG;;CAG7C,SAAS,SAAS;AAEhB,SAAO,QAAQ,SAAS,QAAQ,QAAQ,GAAG;;;;;;CAO7C,SAAS,OAAO;EACd,MAAM,MAAM,KAAK,KAAK;;;;;AAMtB,OAAK,SAAS,IAAI,KAAK,IAAI;;;;;AAM3B,OAAK,SAAS,IAAI,KAAK,IAAI;;;;;AAM3B,OAAK,aAAa,IAAI,KAAK,IAAI;;;;;AAM/B,OAAK,SAAS,IAAI,KAAK,IAAI;;;;AAK3B,OAAK,QAAQ;;;;;AAMb,OAAK,OAAO,QAAQ;;;;;AAMpB,OAAK,OAAO,QAAQ;;;;;AAMpB,OAAK,MAAM,EAAE;;;;AAKb,OAAK,QAAQ;;;;;;;;AASf,MAAK,uBAAuB,SAC1B,QAAQ,aAAa,UACjB,OACA,QACC,OAAO,YAAY,aAAa,YAAY,cAC5C,OAAO,YAAY,cAAc,YAAY,eAC7C,OAAO,YAAY,cAAc,YAAY;;;;;AAMpD,MAAK,UAAU,UAAU,WAAY;EACnC,MAAM,MAAM,QAAQ;EACpB,MAAM,MAAM,QAAQ;EACpB,IAAI,MAAM;AACV,MAAI,QAAQ,UAAU,QAAQ,EAC5B,OAAM;WACG,QAAQ,KAAK,KACtB,QAAO,YAAY,YAAY,KAAK,WAAW,YAAY;WAClD,QAAQ,KAAK,KACtB,QAAO,YAAY,aAAa,KAAK,WAAW,YAAY;MAE5D,QAAO,YAAY,aAAa,KAAK,WAAW,YAAY;AAE9D,SAAO;;;;;;AAOT,MAAK,UAAU,WAAW,WAAY;EACpC,MAAM,MAAM,QAAQ;EACpB,MAAM,MAAM,QAAQ;EACpB,IAAI,MAAM;AACV,MAAI,QAAQ,UAAU,QAAQ,EAC5B,OAAM;WACG,QAAQ,KAAK,KACtB,QAAO,YAAY,aAAa,KAAK,WAAW,YAAY;WACnD,QAAQ,KAAK,KACtB,QAAO,YAAY,cAAc,KAAK,WAAW,YAAY;MAE7D,QAAO,YAAY,cAAc,KAAK,WAAW,YAAY;AAE/D,SAAO;;;;;;AAOT,MAAK,UAAU,aAAa,WAAY;EACtC,MAAM,MAAM,QAAQ;EACpB,MAAM,MAAM,QAAQ;EACpB,IAAI,MAAM;AACV,MAAI,QAAQ,UAAU,QAAQ,EAC5B,OAAM;WACG,QAAQ,KAAK,KACtB,QAAO,YAAY,YAAY,KAAK,WAAW,YAAY;WAClD,QAAQ,KAAK,KACtB,QAAO,YAAY,aAAa,KAAK,WAAW,YAAY;MAE5D,QAAO,YAAY,aAAa,KAAK,WAAW,YAAY;AAE9D,SAAO;;;;;;AAOT,MAAK,UAAU,WAAW,WAAY;AACpC,SAAO,KAAK;;;;;;AAOd,MAAK,UAAU,WAAW,SAAU,OAAO;AACzC,OAAK,SAAS;;;;;;AAOhB,MAAK,UAAU,WAAW,WAAY;AACpC,SAAO,KAAK;;;;;;AAOd,MAAK,UAAU,WAAW,SAAU,OAAO;AACzC,OAAK,SAAS;;;;;;AAOhB,MAAK,UAAU,eAAe,WAAY;AACxC,SAAO,KAAK;;;;;;AAOd,MAAK,UAAU,eAAe,SAAU,WAAW;AACjD,OAAK,aAAa;;;;;;AAOpB,MAAK,UAAU,WAAW,WAAY;AACpC,SAAO,KAAK;;;;;;AAOd,MAAK,UAAU,WAAW,SAAU,OAAO;AACzC,OAAK,SAAS;;;;;;AAOhB,MAAK,UAAU,UAAU,WAAY;AACnC,SAAO,KAAK;;;;;;AAOd,MAAK,UAAU,UAAU,SAAU,MAAM;AACvC,OAAK,yBAAS,IAAI,MAAM,CAAC;AACzB,OAAK,QAAQ;;;;;;AAOf,MAAK,UAAU,SAAS,WAAY;AAClC,SAAO,KAAK;;;;;;AAOd,MAAK,UAAU,SAAS,SAAU,KAAK;AACrC,OAAK,yBAAS,IAAI,MAAM,CAAC;AACzB,OAAK,OAAO;;;;;;AAOd,MAAK,UAAU,SAAS,WAAY;AAClC,SAAO,KAAK;;;;;;AAOd,MAAK,UAAU,SAAS,SAAU,KAAK;AACrC,OAAK,yBAAS,IAAI,MAAM,CAAC;AACzB,OAAK,OAAO;;;;;;;AAQd,MAAK,UAAU,WAAW,SAAU,QAAQ;EAC1C,MAAM,QAAQ,SACV,IAAI,uBAAuB,GAAG,GAC9B,IAAI,iBAAiB,GAAG;EAC5B,MAAM,UAAU,UAAU,MAAM,OAAO,EAAE,IAAI,MAAM;AAEnD,QAAM,KAAK,QAAQ,QAAQ;AAE3B,QAAM,KAAK,QAAQ,KAAK,MAAM;AAC9B,QAAM,KAAK,QAAQ,KAAK,QAAQ,CAAC;AACjC,QAAM,KAAK,QAAQ,KAAK,QAAQ,CAAC;AACjC,QAAM,KAAK,QAAQ,EAAE;AACrB,QAAM,KAAK,QAAQ,KAAK;AACxB,QAAM,KAAK,QAAQ,KAAK,IAAI;EAG5B,MAAM,UAAU,CAAC,KAAK,UAAU;AAChC,QAAM,MAAM,QAAQ,KAAK,MAAM,UAAU,IAAK,CAAC;AAC/C,QAAM,MAAM,QAAS,UAAU,MAAQ,IAAQ;EAC/C,MAAM,UAAU,CAAC,KAAK,UAAU;AAChC,QAAM,MAAM,QAAQ,KAAK,MAAM,UAAU,IAAK,CAAC;AAC/C,QAAM,MAAM,QAAS,UAAU,MAAQ,IAAQ;EAC/C,MAAM,UAAU,CAAC,KAAK,UAAU;AAChC,QAAM,MAAM,QAAQ,KAAK,MAAM,UAAU,IAAK,CAAC;AAC/C,QAAM,MAAM,QAAS,UAAU,MAAQ,IAAQ;EAC/C,MAAM,cAAc,CAAC,KAAK,cAAc;AACxC,QAAM,MAAM,QAAQ,KAAK,MAAM,cAAc,IAAK,CAAC;AACnD,QAAM,MAAM,QAAS,cAAc,MAAQ,IAAQ;AACnD,SAAO;;;;;;AAOT,MAAK,UAAU,WAAW,WAAY;AACpC,SAAO,MAAM,KAAK,YAAY,OAAO;;;;;;AAOvC,QAAO,UAAU"}