{"ast":null,"code":"\"use strict\";\n\nconst crypto = require(\"crypto\");\n\nconst pathUtil = require(\"path\");\n\nconst inspect = require(\"./inspect\");\n\nconst list = require(\"./list\");\n\nconst validate = require(\"./utils/validate\");\n\nconst treeWalker = require(\"./utils/tree_walker\");\n\nconst validateInput = (methodName, path, options) => {\n  const methodSignature = `${methodName}(path, [options])`;\n  validate.argument(methodSignature, \"path\", path, [\"string\"]);\n  validate.options(methodSignature, \"options\", options, {\n    checksum: [\"string\"],\n    relativePath: [\"boolean\"],\n    times: [\"boolean\"],\n    symlinks: [\"string\"]\n  });\n\n  if (options && options.checksum !== undefined && inspect.supportedChecksumAlgorithms.indexOf(options.checksum) === -1) {\n    throw new Error(`Argument \"options.checksum\" passed to ${methodSignature} must have one of values: ${inspect.supportedChecksumAlgorithms.join(\", \")}`);\n  }\n\n  if (options && options.symlinks !== undefined && inspect.symlinkOptions.indexOf(options.symlinks) === -1) {\n    throw new Error(`Argument \"options.symlinks\" passed to ${methodSignature} must have one of values: ${inspect.symlinkOptions.join(\", \")}`);\n  }\n};\n\nconst relativePathInTree = (parentInspectObj, inspectObj) => {\n  if (parentInspectObj === undefined) {\n    return \".\";\n  }\n\n  return parentInspectObj.relativePath + \"/\" + inspectObj.name;\n}; // Creates checksum of a directory by using\n// checksums and names of all its children.\n\n\nconst checksumOfDir = (inspectList, algo) => {\n  const hash = crypto.createHash(algo);\n  inspectList.forEach(inspectObj => {\n    hash.update(inspectObj.name + inspectObj[algo]);\n  });\n  return hash.digest(\"hex\");\n};\n\nconst calculateTreeDependentProperties = (parentInspectObj, inspectObj, options) => {\n  if (options.relativePath) {\n    inspectObj.relativePath = relativePathInTree(parentInspectObj, inspectObj);\n  }\n\n  if (inspectObj.type === \"dir\") {\n    inspectObj.children.forEach(childInspectObj => {\n      calculateTreeDependentProperties(inspectObj, childInspectObj, options);\n    });\n    inspectObj.size = 0;\n    inspectObj.children.sort((a, b) => {\n      if (a.type === \"dir\" && b.type === \"file\") {\n        return -1;\n      }\n\n      if (a.type === \"file\" && b.type === \"dir\") {\n        return 1;\n      }\n\n      return a.name.localeCompare(b.name);\n    });\n    inspectObj.children.forEach(child => {\n      inspectObj.size += child.size || 0;\n    });\n\n    if (options.checksum) {\n      inspectObj[options.checksum] = checksumOfDir(inspectObj.children, options.checksum);\n    }\n  }\n};\n\nconst findParentInTree = (treeNode, pathChain, item) => {\n  const name = pathChain[0];\n\n  if (pathChain.length > 1) {\n    const itemInTreeForPathChain = treeNode.children.find(child => {\n      return child.name === name;\n    });\n    return findParentInTree(itemInTreeForPathChain, pathChain.slice(1), item);\n  }\n\n  return treeNode;\n}; // ---------------------------------------------------------\n// Sync\n// ---------------------------------------------------------\n\n\nconst inspectTreeSync = (path, opts) => {\n  const options = opts || {};\n  let tree;\n  treeWalker.sync(path, {\n    inspectOptions: options\n  }, (itemPath, item) => {\n    if (item) {\n      if (item.type === \"dir\") {\n        item.children = [];\n      }\n\n      const relativePath = pathUtil.relative(path, itemPath);\n\n      if (relativePath === \"\") {\n        tree = item;\n      } else {\n        const parentItem = findParentInTree(tree, relativePath.split(pathUtil.sep), item);\n        parentItem.children.push(item);\n      }\n    }\n  });\n\n  if (tree) {\n    calculateTreeDependentProperties(undefined, tree, options);\n  }\n\n  return tree;\n}; // ---------------------------------------------------------\n// Async\n// ---------------------------------------------------------\n\n\nconst inspectTreeAsync = (path, opts) => {\n  const options = opts || {};\n  let tree;\n  return new Promise((resolve, reject) => {\n    treeWalker.async(path, {\n      inspectOptions: options\n    }, (itemPath, item) => {\n      if (item) {\n        if (item.type === \"dir\") {\n          item.children = [];\n        }\n\n        const relativePath = pathUtil.relative(path, itemPath);\n\n        if (relativePath === \"\") {\n          tree = item;\n        } else {\n          const parentItem = findParentInTree(tree, relativePath.split(pathUtil.sep), item);\n          parentItem.children.push(item);\n        }\n      }\n    }, err => {\n      if (err) {\n        reject(err);\n      } else {\n        if (tree) {\n          calculateTreeDependentProperties(undefined, tree, options);\n        }\n\n        resolve(tree);\n      }\n    });\n  });\n}; // ---------------------------------------------------------\n// API\n// ---------------------------------------------------------\n\n\nexports.validateInput = validateInput;\nexports.sync = inspectTreeSync;\nexports.async = inspectTreeAsync;","map":{"version":3,"sources":["D:/Development/Work/CENOS/cenos-ui/node_modules/fs-jetpack/lib/inspect_tree.js"],"names":["crypto","require","pathUtil","inspect","list","validate","treeWalker","validateInput","methodName","path","options","methodSignature","argument","checksum","relativePath","times","symlinks","undefined","supportedChecksumAlgorithms","indexOf","Error","join","symlinkOptions","relativePathInTree","parentInspectObj","inspectObj","name","checksumOfDir","inspectList","algo","hash","createHash","forEach","update","digest","calculateTreeDependentProperties","type","children","childInspectObj","size","sort","a","b","localeCompare","child","findParentInTree","treeNode","pathChain","item","length","itemInTreeForPathChain","find","slice","inspectTreeSync","opts","tree","sync","inspectOptions","itemPath","relative","parentItem","split","sep","push","inspectTreeAsync","Promise","resolve","reject","async","err","exports"],"mappings":"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","sourcesContent":["\"use strict\";\n\nconst crypto = require(\"crypto\");\nconst pathUtil = require(\"path\");\nconst inspect = require(\"./inspect\");\nconst list = require(\"./list\");\nconst validate = require(\"./utils/validate\");\nconst treeWalker = require(\"./utils/tree_walker\");\n\nconst validateInput = (methodName, path, options) => {\n  const methodSignature = `${methodName}(path, [options])`;\n  validate.argument(methodSignature, \"path\", path, [\"string\"]);\n  validate.options(methodSignature, \"options\", options, {\n    checksum: [\"string\"],\n    relativePath: [\"boolean\"],\n    times: [\"boolean\"],\n    symlinks: [\"string\"]\n  });\n\n  if (\n    options &&\n    options.checksum !== undefined &&\n    inspect.supportedChecksumAlgorithms.indexOf(options.checksum) === -1\n  ) {\n    throw new Error(\n      `Argument \"options.checksum\" passed to ${methodSignature} must have one of values: ${inspect.supportedChecksumAlgorithms.join(\n        \", \"\n      )}`\n    );\n  }\n\n  if (\n    options &&\n    options.symlinks !== undefined &&\n    inspect.symlinkOptions.indexOf(options.symlinks) === -1\n  ) {\n    throw new Error(\n      `Argument \"options.symlinks\" passed to ${methodSignature} must have one of values: ${inspect.symlinkOptions.join(\n        \", \"\n      )}`\n    );\n  }\n};\n\nconst relativePathInTree = (parentInspectObj, inspectObj) => {\n  if (parentInspectObj === undefined) {\n    return \".\";\n  }\n  return parentInspectObj.relativePath + \"/\" + inspectObj.name;\n};\n\n// Creates checksum of a directory by using\n// checksums and names of all its children.\nconst checksumOfDir = (inspectList, algo) => {\n  const hash = crypto.createHash(algo);\n  inspectList.forEach(inspectObj => {\n    hash.update(inspectObj.name + inspectObj[algo]);\n  });\n  return hash.digest(\"hex\");\n};\n\nconst calculateTreeDependentProperties = (\n  parentInspectObj,\n  inspectObj,\n  options\n) => {\n  if (options.relativePath) {\n    inspectObj.relativePath = relativePathInTree(parentInspectObj, inspectObj);\n  }\n\n  if (inspectObj.type === \"dir\") {\n    inspectObj.children.forEach(childInspectObj => {\n      calculateTreeDependentProperties(inspectObj, childInspectObj, options);\n    });\n\n    inspectObj.size = 0;\n    inspectObj.children.sort((a, b) => {\n      if (a.type === \"dir\" && b.type === \"file\") {\n        return -1;\n      }\n      if (a.type === \"file\" && b.type === \"dir\") {\n        return 1;\n      }\n      return a.name.localeCompare(b.name);\n    });\n    inspectObj.children.forEach(child => {\n      inspectObj.size += child.size || 0;\n    });\n\n    if (options.checksum) {\n      inspectObj[options.checksum] = checksumOfDir(\n        inspectObj.children,\n        options.checksum\n      );\n    }\n  }\n};\n\nconst findParentInTree = (treeNode, pathChain, item) => {\n  const name = pathChain[0];\n  if (pathChain.length > 1) {\n    const itemInTreeForPathChain = treeNode.children.find(child => {\n      return child.name === name;\n    });\n    return findParentInTree(itemInTreeForPathChain, pathChain.slice(1), item);\n  }\n  return treeNode;\n};\n\n// ---------------------------------------------------------\n// Sync\n// ---------------------------------------------------------\n\nconst inspectTreeSync = (path, opts) => {\n  const options = opts || {};\n  let tree;\n\n  treeWalker.sync(path, { inspectOptions: options }, (itemPath, item) => {\n    if (item) {\n      if (item.type === \"dir\") {\n        item.children = [];\n      }\n      const relativePath = pathUtil.relative(path, itemPath);\n      if (relativePath === \"\") {\n        tree = item;\n      } else {\n        const parentItem = findParentInTree(\n          tree,\n          relativePath.split(pathUtil.sep),\n          item\n        );\n        parentItem.children.push(item);\n      }\n    }\n  });\n\n  if (tree) {\n    calculateTreeDependentProperties(undefined, tree, options);\n  }\n\n  return tree;\n};\n\n// ---------------------------------------------------------\n// Async\n// ---------------------------------------------------------\n\nconst inspectTreeAsync = (path, opts) => {\n  const options = opts || {};\n  let tree;\n\n  return new Promise((resolve, reject) => {\n    treeWalker.async(\n      path,\n      { inspectOptions: options },\n      (itemPath, item) => {\n        if (item) {\n          if (item.type === \"dir\") {\n            item.children = [];\n          }\n          const relativePath = pathUtil.relative(path, itemPath);\n          if (relativePath === \"\") {\n            tree = item;\n          } else {\n            const parentItem = findParentInTree(\n              tree,\n              relativePath.split(pathUtil.sep),\n              item\n            );\n            parentItem.children.push(item);\n          }\n        }\n      },\n      err => {\n        if (err) {\n          reject(err);\n        } else {\n          if (tree) {\n            calculateTreeDependentProperties(undefined, tree, options);\n          }\n          resolve(tree);\n        }\n      }\n    );\n  });\n};\n\n// ---------------------------------------------------------\n// API\n// ---------------------------------------------------------\n\nexports.validateInput = validateInput;\nexports.sync = inspectTreeSync;\nexports.async = inspectTreeAsync;\n"]},"metadata":{},"sourceType":"script"}