{"version":3,"file":"files-async.cjs","names":["isHiddenPath","process","globToRegExp"],"sources":["../../src/node/files-async.ts"],"sourcesContent":["import { readdir, stat } from 'node:fs/promises'\nimport { join, resolve } from 'node:path'\nimport process from 'node:process'\nimport { isHiddenPath } from './fs'\nimport { globToRegExp } from './glob'\n\n/**\n * Base stats interface for file system objects.\n * @category FileSystem\n */\nexport interface StatsBase {\n  isFile: () => boolean\n  isDirectory: () => boolean\n  isBlockDevice: () => boolean\n  isCharacterDevice: () => boolean\n  isSymbolicLink: () => boolean\n  isFIFO: () => boolean\n  isSocket: () => boolean\n  dev: number\n  ino: number\n  mode: number\n  nlink: number\n  uid: number\n  gid: number\n  rdev: number\n  size: number\n  blksize: number\n  blocks: number\n  atimeMs: number\n  mtimeMs: number\n  ctimeMs: number\n  birthtimeMs: number\n  atime: Date\n  mtime: Date\n  ctime: Date\n  birthtime: Date\n}\n\n/**\n * Retrieves the file system stats for the specified path asynchronously.\n * @param path - The path to the file or directory.\n * @returns A Promise that resolves to the file system stats (Stats) or undefined if an error occurs.\n */\nexport async function getStatAsync(path: string): Promise<StatsBase | undefined> {\n  try {\n    return await stat(path)\n  }\n  catch (err) { }\n}\n\n/**\n * Retrieves the fingerprint of a file asynchronously.\n * The fingerprint is a string representation of the file's path, modification time, and size.\n *\n * @param path - The path of the file.\n * @returns A promise that resolves to the fingerprint string, or undefined if the file does not exist.\n */\nexport async function getFingerprintAsync(path: string): Promise<string | undefined> {\n  const stat = await getStatAsync(path)\n  if (stat == null)\n    return\n  const { mtimeMs, size } = stat\n  return `${path}|${mtimeMs}|${size}`\n}\n\nexport async function walkSyncAsync(rootFolder: string, subFolder = '', ignoreHidden = true) {\n  let resultPaths: string[] = []\n  const paths = await readdir(resolve(rootFolder, subFolder))\n  if (paths != null && paths.length > 0) {\n    for (let file of paths) {\n      file = join(subFolder, file)\n      if (ignoreHidden && isHiddenPath(file))\n        continue\n      const realFile = join(rootFolder, file)\n      const stat = await getStatAsync(realFile)\n      if (stat && stat.isDirectory())\n        resultPaths = [...resultPaths, ...await walkSyncAsync(rootFolder, file) || []]\n      else\n        resultPaths.push(file)\n    }\n  }\n  return resultPaths\n}\n\nexport async function filesAsync(opt: {\n  basePath?: string\n  pattern?: string | RegExp\n  filter?: (name: string) => boolean\n  ignoreHidden?: boolean\n} = {}) {\n  let {\n    pattern,\n    filter,\n    basePath = process.cwd(),\n    ignoreHidden = false,\n  } = opt\n\n  let paths = await walkSyncAsync(basePath, '', ignoreHidden)\n\n  paths = paths.filter(\n    path =>\n      !(ignoreHidden && (path.startsWith('.') || path.includes('/.'))),\n  )\n\n  if (pattern) {\n    if (typeof pattern === 'string')\n      pattern = globToRegExp(pattern)\n    if (pattern instanceof RegExp) {\n      const rx = pattern\n      rx.lastIndex = 0\n      paths = paths.filter(path => rx.test(path))\n    }\n  }\n\n  if (filter)\n    paths = paths.filter(filter)\n\n  return paths\n}\n\n// export function glob(patterns: string[], opt: {\n//   cwd?: string,\n//   dot?: boolean\n// })\n"],"mappings":";;;;;;;;;;;;;;;AA2CA,eAAsB,aAAa,MAA8C;AAC/E,KAAI;AACF,SAAO,iCAAW,KAAK;UAElB,KAAK;;;;;;;;;AAUd,eAAsB,oBAAoB,MAA2C;CACnF,MAAM,OAAO,MAAM,aAAa,KAAK;AACrC,KAAI,QAAQ,KACV;CACF,MAAM,EAAE,SAAS,SAAS;AAC1B,QAAO,GAAG,KAAK,GAAG,QAAQ,GAAG;;AAG/B,eAAsB,cAAc,YAAoB,YAAY,IAAI,eAAe,MAAM;CAC3F,IAAI,cAAwB,EAAE;CAC9B,MAAM,QAAQ,2DAAsB,YAAY,UAAU,CAAC;AAC3D,KAAI,SAAS,QAAQ,MAAM,SAAS,EAClC,MAAK,IAAI,QAAQ,OAAO;AACtB,6BAAY,WAAW,KAAK;AAC5B,MAAI,gBAAgBA,6BAAa,KAAK,CACpC;EAEF,MAAM,OAAO,MAAM,iCADG,YAAY,KAAK,CACE;AACzC,MAAI,QAAQ,KAAK,aAAa,CAC5B,eAAc,CAAC,GAAG,aAAa,GAAG,MAAM,cAAc,YAAY,KAAK,IAAI,EAAE,CAAC;MAE9E,aAAY,KAAK,KAAK;;AAG5B,QAAO;;AAGT,eAAsB,WAAW,MAK7B,EAAE,EAAE;CACN,IAAI,EACF,SACA,QACA,WAAWC,qBAAQ,KAAK,EACxB,eAAe,UACb;CAEJ,IAAI,QAAQ,MAAM,cAAc,UAAU,IAAI,aAAa;AAE3D,SAAQ,MAAM,QACZ,SACE,EAAE,iBAAiB,KAAK,WAAW,IAAI,IAAI,KAAK,SAAS,KAAK,GACjE;AAED,KAAI,SAAS;AACX,MAAI,OAAO,YAAY,SACrB,WAAUC,+BAAa,QAAQ;AACjC,MAAI,mBAAmB,QAAQ;GAC7B,MAAM,KAAK;AACX,MAAG,YAAY;AACf,WAAQ,MAAM,QAAO,SAAQ,GAAG,KAAK,KAAK,CAAC;;;AAI/C,KAAI,OACF,SAAQ,MAAM,OAAO,OAAO;AAE9B,QAAO"}