{"ast":null,"code":"\"use strict\";\n\nconst pathUtil = require(\"path\");\n\nconst fs = require(\"./utils/fs\");\n\nconst validate = require(\"./utils/validate\");\n\nconst dir = require(\"./dir\");\n\nconst validateInput = (methodName, path, data, options) => {\n  const methodSignature = `${methodName}(path, data, [options])`;\n  validate.argument(methodSignature, \"path\", path, [\"string\"]);\n  validate.argument(methodSignature, \"data\", data, [\"string\", \"buffer\", \"object\", \"array\"]);\n  validate.options(methodSignature, \"options\", options, {\n    mode: [\"string\", \"number\"],\n    atomic: [\"boolean\"],\n    jsonIndent: [\"number\"]\n  });\n}; // Temporary file extensions used for atomic file overwriting.\n\n\nconst newExt = \".__new__\";\n\nconst serializeToJsonMaybe = (data, jsonIndent) => {\n  let indent = jsonIndent;\n\n  if (typeof indent !== \"number\") {\n    indent = 2;\n  }\n\n  if (typeof data === \"object\" && !Buffer.isBuffer(data) && data !== null) {\n    return JSON.stringify(data, null, indent);\n  }\n\n  return data;\n}; // ---------------------------------------------------------\n// SYNC\n// ---------------------------------------------------------\n\n\nconst writeFileSync = (path, data, options) => {\n  try {\n    fs.writeFileSync(path, data, options);\n  } catch (err) {\n    if (err.code === \"ENOENT\") {\n      // Means parent directory doesn't exist, so create it and try again.\n      dir.createSync(pathUtil.dirname(path));\n      fs.writeFileSync(path, data, options);\n    } else {\n      throw err;\n    }\n  }\n};\n\nconst writeAtomicSync = (path, data, options) => {\n  // we are assuming there is file on given path, and we don't want\n  // to touch it until we are sure our data has been saved correctly,\n  // so write the data into temporary file...\n  writeFileSync(path + newExt, data, options); // ...next rename temp file to replace real path.\n\n  fs.renameSync(path + newExt, path);\n};\n\nconst writeSync = (path, data, options) => {\n  const opts = options || {};\n  const processedData = serializeToJsonMaybe(data, opts.jsonIndent);\n  let writeStrategy = writeFileSync;\n\n  if (opts.atomic) {\n    writeStrategy = writeAtomicSync;\n  }\n\n  writeStrategy(path, processedData, {\n    mode: opts.mode\n  });\n}; // ---------------------------------------------------------\n// ASYNC\n// ---------------------------------------------------------\n\n\nconst writeFileAsync = (path, data, options) => {\n  return new Promise((resolve, reject) => {\n    fs.writeFile(path, data, options).then(resolve).catch(err => {\n      // First attempt to write a file ended with error.\n      // Check if this is not due to nonexistent parent directory.\n      if (err.code === \"ENOENT\") {\n        // Parent directory doesn't exist, so create it and try again.\n        dir.createAsync(pathUtil.dirname(path)).then(() => {\n          return fs.writeFile(path, data, options);\n        }).then(resolve, reject);\n      } else {\n        // Nope, some other error, throw it.\n        reject(err);\n      }\n    });\n  });\n};\n\nconst writeAtomicAsync = (path, data, options) => {\n  return new Promise((resolve, reject) => {\n    // We are assuming there is file on given path, and we don't want\n    // to touch it until we are sure our data has been saved correctly,\n    // so write the data into temporary file...\n    writeFileAsync(path + newExt, data, options).then(() => {\n      // ...next rename temp file to real path.\n      return fs.rename(path + newExt, path);\n    }).then(resolve, reject);\n  });\n};\n\nconst writeAsync = (path, data, options) => {\n  const opts = options || {};\n  const processedData = serializeToJsonMaybe(data, opts.jsonIndent);\n  let writeStrategy = writeFileAsync;\n\n  if (opts.atomic) {\n    writeStrategy = writeAtomicAsync;\n  }\n\n  return writeStrategy(path, processedData, {\n    mode: opts.mode\n  });\n}; // ---------------------------------------------------------\n// API\n// ---------------------------------------------------------\n\n\nexports.validateInput = validateInput;\nexports.sync = writeSync;\nexports.async = writeAsync;","map":{"version":3,"sources":["D:/Development/Work/CENOS/cenos-ui/node_modules/fs-jetpack/lib/write.js"],"names":["pathUtil","require","fs","validate","dir","validateInput","methodName","path","data","options","methodSignature","argument","mode","atomic","jsonIndent","newExt","serializeToJsonMaybe","indent","Buffer","isBuffer","JSON","stringify","writeFileSync","err","code","createSync","dirname","writeAtomicSync","renameSync","writeSync","opts","processedData","writeStrategy","writeFileAsync","Promise","resolve","reject","writeFile","then","catch","createAsync","writeAtomicAsync","rename","writeAsync","exports","sync","async"],"mappings":"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","sourcesContent":["\"use strict\";\n\nconst pathUtil = require(\"path\");\nconst fs = require(\"./utils/fs\");\nconst validate = require(\"./utils/validate\");\nconst dir = require(\"./dir\");\n\nconst validateInput = (methodName, path, data, options) => {\n  const methodSignature = `${methodName}(path, data, [options])`;\n  validate.argument(methodSignature, \"path\", path, [\"string\"]);\n  validate.argument(methodSignature, \"data\", data, [\n    \"string\",\n    \"buffer\",\n    \"object\",\n    \"array\"\n  ]);\n  validate.options(methodSignature, \"options\", options, {\n    mode: [\"string\", \"number\"],\n    atomic: [\"boolean\"],\n    jsonIndent: [\"number\"]\n  });\n};\n\n// Temporary file extensions used for atomic file overwriting.\nconst newExt = \".__new__\";\n\nconst serializeToJsonMaybe = (data, jsonIndent) => {\n  let indent = jsonIndent;\n  if (typeof indent !== \"number\") {\n    indent = 2;\n  }\n\n  if (typeof data === \"object\" && !Buffer.isBuffer(data) && data !== null) {\n    return JSON.stringify(data, null, indent);\n  }\n\n  return data;\n};\n\n// ---------------------------------------------------------\n// SYNC\n// ---------------------------------------------------------\n\nconst writeFileSync = (path, data, options) => {\n  try {\n    fs.writeFileSync(path, data, options);\n  } catch (err) {\n    if (err.code === \"ENOENT\") {\n      // Means parent directory doesn't exist, so create it and try again.\n      dir.createSync(pathUtil.dirname(path));\n      fs.writeFileSync(path, data, options);\n    } else {\n      throw err;\n    }\n  }\n};\n\nconst writeAtomicSync = (path, data, options) => {\n  // we are assuming there is file on given path, and we don't want\n  // to touch it until we are sure our data has been saved correctly,\n  // so write the data into temporary file...\n  writeFileSync(path + newExt, data, options);\n  // ...next rename temp file to replace real path.\n  fs.renameSync(path + newExt, path);\n};\n\nconst writeSync = (path, data, options) => {\n  const opts = options || {};\n  const processedData = serializeToJsonMaybe(data, opts.jsonIndent);\n\n  let writeStrategy = writeFileSync;\n  if (opts.atomic) {\n    writeStrategy = writeAtomicSync;\n  }\n  writeStrategy(path, processedData, { mode: opts.mode });\n};\n\n// ---------------------------------------------------------\n// ASYNC\n// ---------------------------------------------------------\n\nconst writeFileAsync = (path, data, options) => {\n  return new Promise((resolve, reject) => {\n    fs.writeFile(path, data, options)\n      .then(resolve)\n      .catch(err => {\n        // First attempt to write a file ended with error.\n        // Check if this is not due to nonexistent parent directory.\n        if (err.code === \"ENOENT\") {\n          // Parent directory doesn't exist, so create it and try again.\n          dir\n            .createAsync(pathUtil.dirname(path))\n            .then(() => {\n              return fs.writeFile(path, data, options);\n            })\n            .then(resolve, reject);\n        } else {\n          // Nope, some other error, throw it.\n          reject(err);\n        }\n      });\n  });\n};\n\nconst writeAtomicAsync = (path, data, options) => {\n  return new Promise((resolve, reject) => {\n    // We are assuming there is file on given path, and we don't want\n    // to touch it until we are sure our data has been saved correctly,\n    // so write the data into temporary file...\n    writeFileAsync(path + newExt, data, options)\n      .then(() => {\n        // ...next rename temp file to real path.\n        return fs.rename(path + newExt, path);\n      })\n      .then(resolve, reject);\n  });\n};\n\nconst writeAsync = (path, data, options) => {\n  const opts = options || {};\n  const processedData = serializeToJsonMaybe(data, opts.jsonIndent);\n\n  let writeStrategy = writeFileAsync;\n  if (opts.atomic) {\n    writeStrategy = writeAtomicAsync;\n  }\n  return writeStrategy(path, processedData, { mode: opts.mode });\n};\n\n// ---------------------------------------------------------\n// API\n// ---------------------------------------------------------\n\nexports.validateInput = validateInput;\nexports.sync = writeSync;\nexports.async = writeAsync;\n"]},"metadata":{},"sourceType":"script"}