{
  "version": 3,
  "sources": ["../../../../src/packages/store.cafs/addFilesFromDir.ts"],
  "sourcesContent": ["import util from 'node:util';\nimport fs, { type Stats } from 'node:fs';\nimport path from 'node:path';\nimport type {\n  AddToStoreResult,\n  FilesIndex,\n  FileWriteResult,\n} from '../cafs-types/index.ts';\nimport gfs from '../graceful-fs/index.ts';\nimport type { DependencyManifest } from '../types/index.ts';\nimport { parseJsonBufferSync } from './parseJson.ts';\n\nexport function addFilesFromDir(\n  addBuffer: (buffer: Buffer, mode: number) => FileWriteResult,\n  dirname: string,\n  opts: {\n    files?: string[] | undefined;\n    readManifest?: boolean | undefined;\n  } = {}\n): AddToStoreResult {\n  const filesIndex: FilesIndex = {};\n\n  let manifest: DependencyManifest | undefined;\n\n  let files: File[];\n\n  if (opts.files) {\n    files = [];\n\n    for (const file of opts.files) {\n      const absolutePath = path.join(dirname, file);\n\n      let stat: Stats;\n\n      try {\n        stat = fs.statSync(absolutePath);\n      } catch (err: unknown) {\n        if (\n          !(\n            util.types.isNativeError(err) &&\n            'code' in err &&\n            err.code === 'ENOENT'\n          )\n        ) {\n          throw err;\n        }\n\n        continue;\n      }\n\n      files.push({\n        absolutePath,\n        relativePath: file,\n        stat,\n      });\n    }\n  } else {\n    files = findFilesInDir(dirname);\n  }\n\n  for (const { absolutePath, relativePath, stat } of files) {\n    const buffer = gfs.readFileSync(absolutePath);\n    if (opts.readManifest === true && relativePath === 'package.json') {\n      manifest = parseJsonBufferSync(buffer) as DependencyManifest;\n    }\n\n    // Remove the file type information (regular file, directory, etc.) and leave just the permission bits (rwx for owner, group, and others)\n    const mode = stat.mode & 0o7_7_7;\n\n    filesIndex[relativePath] = {\n      mode,\n      size: stat.size,\n      ...addBuffer(buffer, mode),\n    };\n  }\n\n  return { manifest, filesIndex };\n}\n\ninterface File {\n  relativePath: string;\n  absolutePath: string;\n  stat: Stats;\n}\n\nfunction findFilesInDir(dir: string): File[] {\n  const files: File[] = [];\n  findFiles(files, dir);\n  return files;\n}\n\nfunction findFiles(filesList: File[], dir: string, relativeDir = ''): void {\n  const files = fs.readdirSync(dir, { withFileTypes: true });\n\n  for (const file of files) {\n    const relativeSubdir = `${relativeDir}${relativeDir ? '/' : ''}${file.name}`;\n\n    if (file.isDirectory()) {\n      if (relativeDir !== '' || file.name !== 'node_modules') {\n        findFiles(filesList, path.join(dir, file.name), relativeSubdir);\n      }\n\n      continue;\n    }\n\n    const absolutePath = path.join(dir, file.name);\n\n    let stat: Stats;\n\n    try {\n      stat = fs.statSync(absolutePath);\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    } catch (err: any) {\n      if (err.code !== 'ENOENT') {\n        throw err;\n      }\n\n      continue;\n    }\n\n    if (stat.isDirectory()) {\n      findFiles(filesList, path.join(dir, file.name), relativeSubdir);\n      continue;\n    }\n\n    filesList.push({\n      relativePath: relativeSubdir,\n      absolutePath,\n      stat,\n    });\n  }\n}\n"],
  "mappings": "AAAA,OAAO,UAAU;AACjB,OAAO,YAAwB;AAC/B,OAAO,UAAU;AAMjB,OAAO,SAAS;AAEhB,SAAS,2BAA2B;AAE7B,SAAS,gBACd,WACA,SACA,OAGI,CAAC,GACa;AAClB,QAAM,aAAyB,CAAC;AAEhC,MAAI;AAEJ,MAAI;AAEJ,MAAI,KAAK,OAAO;AACd,YAAQ,CAAC;AAET,eAAW,QAAQ,KAAK,OAAO;AAC7B,YAAM,eAAe,KAAK,KAAK,SAAS,IAAI;AAE5C,UAAI;AAEJ,UAAI;AACF,eAAO,GAAG,SAAS,YAAY;AAAA,MACjC,SAAS,KAAc;AACrB,YACE,EACE,KAAK,MAAM,cAAc,GAAG,KAC5B,UAAU,OACV,IAAI,SAAS,WAEf;AACA,gBAAM;AAAA,QACR;AAEA;AAAA,MACF;AAEA,YAAM,KAAK;AAAA,QACT;AAAA,QACA,cAAc;AAAA,QACd;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF,OAAO;AACL,YAAQ,eAAe,OAAO;AAAA,EAChC;AAEA,aAAW,EAAE,cAAc,cAAc,KAAK,KAAK,OAAO;AACxD,UAAM,SAAS,IAAI,aAAa,YAAY;AAC5C,QAAI,KAAK,iBAAiB,QAAQ,iBAAiB,gBAAgB;AACjE,iBAAW,oBAAoB,MAAM;AAAA,IACvC;AAGA,UAAM,OAAO,KAAK,OAAO;AAEzB,eAAW,YAAY,IAAI;AAAA,MACzB;AAAA,MACA,MAAM,KAAK;AAAA,MACX,GAAG,UAAU,QAAQ,IAAI;AAAA,IAC3B;AAAA,EACF;AAEA,SAAO,EAAE,UAAU,WAAW;AAChC;AAQA,SAAS,eAAe,KAAqB;AAC3C,QAAM,QAAgB,CAAC;AACvB,YAAU,OAAO,GAAG;AACpB,SAAO;AACT;AAEA,SAAS,UAAU,WAAmB,KAAa,cAAc,IAAU;AACzE,QAAM,QAAQ,GAAG,YAAY,KAAK,EAAE,eAAe,KAAK,CAAC;AAEzD,aAAW,QAAQ,OAAO;AACxB,UAAM,iBAAiB,GAAG,WAAW,GAAG,cAAc,MAAM,EAAE,GAAG,KAAK,IAAI;AAE1E,QAAI,KAAK,YAAY,GAAG;AACtB,UAAI,gBAAgB,MAAM,KAAK,SAAS,gBAAgB;AACtD,kBAAU,WAAW,KAAK,KAAK,KAAK,KAAK,IAAI,GAAG,cAAc;AAAA,MAChE;AAEA;AAAA,IACF;AAEA,UAAM,eAAe,KAAK,KAAK,KAAK,KAAK,IAAI;AAE7C,QAAI;AAEJ,QAAI;AACF,aAAO,GAAG,SAAS,YAAY;AAAA,IAEjC,SAAS,KAAU;AACjB,UAAI,IAAI,SAAS,UAAU;AACzB,cAAM;AAAA,MACR;AAEA;AAAA,IACF;AAEA,QAAI,KAAK,YAAY,GAAG;AACtB,gBAAU,WAAW,KAAK,KAAK,KAAK,KAAK,IAAI,GAAG,cAAc;AAC9D;AAAA,IACF;AAEA,cAAU,KAAK;AAAA,MACb,cAAc;AAAA,MACd;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AACF;",
  "names": []
}
