{"ast":null,"code":"\"use strict\";\n\nconst fs = require(\"./utils/fs\");\n\nconst modeUtil = require(\"./utils/mode\");\n\nconst validate = require(\"./utils/validate\");\n\nconst write = require(\"./write\");\n\nconst validateInput = (methodName, path, criteria) => {\n  const methodSignature = `${methodName}(path, [criteria])`;\n  validate.argument(methodSignature, \"path\", path, [\"string\"]);\n  validate.options(methodSignature, \"criteria\", criteria, {\n    content: [\"string\", \"buffer\", \"object\", \"array\"],\n    jsonIndent: [\"number\"],\n    mode: [\"string\", \"number\"]\n  });\n};\n\nconst getCriteriaDefaults = passedCriteria => {\n  const criteria = passedCriteria || {};\n\n  if (criteria.mode !== undefined) {\n    criteria.mode = modeUtil.normalizeFileMode(criteria.mode);\n  }\n\n  return criteria;\n};\n\nconst generatePathOccupiedByNotFileError = path => {\n  return new Error(`Path ${path} exists but is not a file. Halting jetpack.file() call for safety reasons.`);\n}; // ---------------------------------------------------------\n// Sync\n// ---------------------------------------------------------\n\n\nconst checkWhatAlreadyOccupiesPathSync = path => {\n  let stat;\n\n  try {\n    stat = fs.statSync(path);\n  } catch (err) {\n    // Detection if path exists\n    if (err.code !== \"ENOENT\") {\n      throw err;\n    }\n  }\n\n  if (stat && !stat.isFile()) {\n    throw generatePathOccupiedByNotFileError(path);\n  }\n\n  return stat;\n};\n\nconst checkExistingFileFulfillsCriteriaSync = (path, stat, criteria) => {\n  const mode = modeUtil.normalizeFileMode(stat.mode);\n\n  const checkContent = () => {\n    if (criteria.content !== undefined) {\n      write.sync(path, criteria.content, {\n        mode,\n        jsonIndent: criteria.jsonIndent\n      });\n      return true;\n    }\n\n    return false;\n  };\n\n  const checkMode = () => {\n    if (criteria.mode !== undefined && criteria.mode !== mode) {\n      fs.chmodSync(path, criteria.mode);\n    }\n  };\n\n  const contentReplaced = checkContent();\n\n  if (!contentReplaced) {\n    checkMode();\n  }\n};\n\nconst createBrandNewFileSync = (path, criteria) => {\n  let content = \"\";\n\n  if (criteria.content !== undefined) {\n    content = criteria.content;\n  }\n\n  write.sync(path, content, {\n    mode: criteria.mode,\n    jsonIndent: criteria.jsonIndent\n  });\n};\n\nconst fileSync = (path, passedCriteria) => {\n  const criteria = getCriteriaDefaults(passedCriteria);\n  const stat = checkWhatAlreadyOccupiesPathSync(path);\n\n  if (stat !== undefined) {\n    checkExistingFileFulfillsCriteriaSync(path, stat, criteria);\n  } else {\n    createBrandNewFileSync(path, criteria);\n  }\n}; // ---------------------------------------------------------\n// Async\n// ---------------------------------------------------------\n\n\nconst checkWhatAlreadyOccupiesPathAsync = path => {\n  return new Promise((resolve, reject) => {\n    fs.stat(path).then(stat => {\n      if (stat.isFile()) {\n        resolve(stat);\n      } else {\n        reject(generatePathOccupiedByNotFileError(path));\n      }\n    }).catch(err => {\n      if (err.code === \"ENOENT\") {\n        // Path doesn't exist.\n        resolve(undefined);\n      } else {\n        // This is other error. Must end here.\n        reject(err);\n      }\n    });\n  });\n};\n\nconst checkExistingFileFulfillsCriteriaAsync = (path, stat, criteria) => {\n  const mode = modeUtil.normalizeFileMode(stat.mode);\n\n  const checkContent = () => {\n    return new Promise((resolve, reject) => {\n      if (criteria.content !== undefined) {\n        write.async(path, criteria.content, {\n          mode,\n          jsonIndent: criteria.jsonIndent\n        }).then(() => {\n          resolve(true);\n        }).catch(reject);\n      } else {\n        resolve(false);\n      }\n    });\n  };\n\n  const checkMode = () => {\n    if (criteria.mode !== undefined && criteria.mode !== mode) {\n      return fs.chmod(path, criteria.mode);\n    }\n\n    return undefined;\n  };\n\n  return checkContent().then(contentReplaced => {\n    if (!contentReplaced) {\n      return checkMode();\n    }\n\n    return undefined;\n  });\n};\n\nconst createBrandNewFileAsync = (path, criteria) => {\n  let content = \"\";\n\n  if (criteria.content !== undefined) {\n    content = criteria.content;\n  }\n\n  return write.async(path, content, {\n    mode: criteria.mode,\n    jsonIndent: criteria.jsonIndent\n  });\n};\n\nconst fileAsync = (path, passedCriteria) => {\n  return new Promise((resolve, reject) => {\n    const criteria = getCriteriaDefaults(passedCriteria);\n    checkWhatAlreadyOccupiesPathAsync(path).then(stat => {\n      if (stat !== undefined) {\n        return checkExistingFileFulfillsCriteriaAsync(path, stat, criteria);\n      }\n\n      return createBrandNewFileAsync(path, criteria);\n    }).then(resolve, reject);\n  });\n}; // ---------------------------------------------------------\n// API\n// ---------------------------------------------------------\n\n\nexports.validateInput = validateInput;\nexports.sync = fileSync;\nexports.async = fileAsync;","map":{"version":3,"sources":["D:/Development/Work/CENOS/cenos-ui/node_modules/fs-jetpack/lib/file.js"],"names":["fs","require","modeUtil","validate","write","validateInput","methodName","path","criteria","methodSignature","argument","options","content","jsonIndent","mode","getCriteriaDefaults","passedCriteria","undefined","normalizeFileMode","generatePathOccupiedByNotFileError","Error","checkWhatAlreadyOccupiesPathSync","stat","statSync","err","code","isFile","checkExistingFileFulfillsCriteriaSync","checkContent","sync","checkMode","chmodSync","contentReplaced","createBrandNewFileSync","fileSync","checkWhatAlreadyOccupiesPathAsync","Promise","resolve","reject","then","catch","checkExistingFileFulfillsCriteriaAsync","async","chmod","createBrandNewFileAsync","fileAsync","exports"],"mappings":"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","sourcesContent":["\"use strict\";\n\nconst fs = require(\"./utils/fs\");\nconst modeUtil = require(\"./utils/mode\");\nconst validate = require(\"./utils/validate\");\nconst write = require(\"./write\");\n\nconst validateInput = (methodName, path, criteria) => {\n  const methodSignature = `${methodName}(path, [criteria])`;\n  validate.argument(methodSignature, \"path\", path, [\"string\"]);\n  validate.options(methodSignature, \"criteria\", criteria, {\n    content: [\"string\", \"buffer\", \"object\", \"array\"],\n    jsonIndent: [\"number\"],\n    mode: [\"string\", \"number\"]\n  });\n};\n\nconst getCriteriaDefaults = passedCriteria => {\n  const criteria = passedCriteria || {};\n  if (criteria.mode !== undefined) {\n    criteria.mode = modeUtil.normalizeFileMode(criteria.mode);\n  }\n  return criteria;\n};\n\nconst generatePathOccupiedByNotFileError = path => {\n  return new Error(\n    `Path ${path} exists but is not a file. Halting jetpack.file() call for safety reasons.`\n  );\n};\n\n// ---------------------------------------------------------\n// Sync\n// ---------------------------------------------------------\n\nconst checkWhatAlreadyOccupiesPathSync = path => {\n  let stat;\n\n  try {\n    stat = fs.statSync(path);\n  } catch (err) {\n    // Detection if path exists\n    if (err.code !== \"ENOENT\") {\n      throw err;\n    }\n  }\n\n  if (stat && !stat.isFile()) {\n    throw generatePathOccupiedByNotFileError(path);\n  }\n\n  return stat;\n};\n\nconst checkExistingFileFulfillsCriteriaSync = (path, stat, criteria) => {\n  const mode = modeUtil.normalizeFileMode(stat.mode);\n\n  const checkContent = () => {\n    if (criteria.content !== undefined) {\n      write.sync(path, criteria.content, {\n        mode,\n        jsonIndent: criteria.jsonIndent\n      });\n      return true;\n    }\n    return false;\n  };\n\n  const checkMode = () => {\n    if (criteria.mode !== undefined && criteria.mode !== mode) {\n      fs.chmodSync(path, criteria.mode);\n    }\n  };\n\n  const contentReplaced = checkContent();\n  if (!contentReplaced) {\n    checkMode();\n  }\n};\n\nconst createBrandNewFileSync = (path, criteria) => {\n  let content = \"\";\n  if (criteria.content !== undefined) {\n    content = criteria.content;\n  }\n  write.sync(path, content, {\n    mode: criteria.mode,\n    jsonIndent: criteria.jsonIndent\n  });\n};\n\nconst fileSync = (path, passedCriteria) => {\n  const criteria = getCriteriaDefaults(passedCriteria);\n  const stat = checkWhatAlreadyOccupiesPathSync(path);\n  if (stat !== undefined) {\n    checkExistingFileFulfillsCriteriaSync(path, stat, criteria);\n  } else {\n    createBrandNewFileSync(path, criteria);\n  }\n};\n\n// ---------------------------------------------------------\n// Async\n// ---------------------------------------------------------\n\nconst checkWhatAlreadyOccupiesPathAsync = path => {\n  return new Promise((resolve, reject) => {\n    fs.stat(path)\n      .then(stat => {\n        if (stat.isFile()) {\n          resolve(stat);\n        } else {\n          reject(generatePathOccupiedByNotFileError(path));\n        }\n      })\n      .catch(err => {\n        if (err.code === \"ENOENT\") {\n          // Path doesn't exist.\n          resolve(undefined);\n        } else {\n          // This is other error. Must end here.\n          reject(err);\n        }\n      });\n  });\n};\n\nconst checkExistingFileFulfillsCriteriaAsync = (path, stat, criteria) => {\n  const mode = modeUtil.normalizeFileMode(stat.mode);\n\n  const checkContent = () => {\n    return new Promise((resolve, reject) => {\n      if (criteria.content !== undefined) {\n        write\n          .async(path, criteria.content, {\n            mode,\n            jsonIndent: criteria.jsonIndent\n          })\n          .then(() => {\n            resolve(true);\n          })\n          .catch(reject);\n      } else {\n        resolve(false);\n      }\n    });\n  };\n\n  const checkMode = () => {\n    if (criteria.mode !== undefined && criteria.mode !== mode) {\n      return fs.chmod(path, criteria.mode);\n    }\n    return undefined;\n  };\n\n  return checkContent().then(contentReplaced => {\n    if (!contentReplaced) {\n      return checkMode();\n    }\n    return undefined;\n  });\n};\n\nconst createBrandNewFileAsync = (path, criteria) => {\n  let content = \"\";\n  if (criteria.content !== undefined) {\n    content = criteria.content;\n  }\n\n  return write.async(path, content, {\n    mode: criteria.mode,\n    jsonIndent: criteria.jsonIndent\n  });\n};\n\nconst fileAsync = (path, passedCriteria) => {\n  return new Promise((resolve, reject) => {\n    const criteria = getCriteriaDefaults(passedCriteria);\n\n    checkWhatAlreadyOccupiesPathAsync(path)\n      .then(stat => {\n        if (stat !== undefined) {\n          return checkExistingFileFulfillsCriteriaAsync(path, stat, criteria);\n        }\n        return createBrandNewFileAsync(path, criteria);\n      })\n      .then(resolve, reject);\n  });\n};\n\n// ---------------------------------------------------------\n// API\n// ---------------------------------------------------------\n\nexports.validateInput = validateInput;\nexports.sync = fileSync;\nexports.async = fileAsync;\n"]},"metadata":{},"sourceType":"script"}