{
  "version": 3,
  "sources": ["../../../../src/packages/store.cafs/index.ts"],
  "sourcesContent": ["import type {\n  AddToStoreResult,\n  FileWriteResult,\n  PackageFiles,\n  PackageFileInfo,\n  FilesIndex,\n} from '../cafs-types/index.ts';\nimport ssri from 'ssri';\nimport { addFilesFromDir } from './addFilesFromDir.ts';\nimport { addFilesFromTarball } from './addFilesFromTarball.ts';\nimport {\n  checkPkgFilesIntegrity,\n  type PackageFilesIndex,\n  type VerifyResult,\n} from './checkPkgFilesIntegrity.ts';\nimport { readManifestFromStore } from './readManifestFromStore.ts';\nimport {\n  getIndexFilePathInCafs,\n  contentPathFromHex,\n  type FileType,\n  getFilePathByModeInCafs,\n  modeIsExecutable,\n} from './getFilePathInCafs.ts';\nimport {\n  optimisticRenameOverwrite,\n  writeBufferToCafs,\n} from './writeBufferToCafs.ts';\n\nexport type { IntegrityLike } from 'ssri';\n\nexport {\n  checkPkgFilesIntegrity,\n  readManifestFromStore,\n  type FileType,\n  getFilePathByModeInCafs,\n  getIndexFilePathInCafs,\n  type PackageFileInfo,\n  type PackageFiles,\n  type PackageFilesIndex,\n  optimisticRenameOverwrite,\n  type FilesIndex,\n  type VerifyResult,\n};\n\nexport type CafsLocker = Map<string, number>;\n\nexport interface CreateCafsOpts {\n  ignoreFile?: ((filename: string) => boolean) | undefined;\n  cafsLocker?: CafsLocker | undefined;\n}\n\nexport interface CafsFunctions {\n  addFilesFromDir: (\n    dirname: string,\n    opts?:\n      | { files?: string[] | undefined; readManifest?: boolean | undefined }\n      | undefined\n  ) => AddToStoreResult;\n  addFilesFromTarball: (\n    tarballBuffer: Buffer,\n    readManifest?: boolean | undefined\n  ) => AddToStoreResult;\n  getIndexFilePathInCafs: (\n    integrity: string | ssri.IntegrityLike,\n    fileType: FileType\n  ) => string;\n  getFilePathByModeInCafs: (\n    integrity: string | ssri.IntegrityLike,\n    mode: number\n  ) => string;\n}\n\nexport function createCafs(\n  storeDir: string,\n  { ignoreFile, cafsLocker }: CreateCafsOpts = {}\n): CafsFunctions {\n  const _writeBufferToCafs = writeBufferToCafs.bind(\n    null,\n    cafsLocker ?? new Map(),\n    storeDir\n  );\n  const addBuffer = addBufferToCafs.bind(null, _writeBufferToCafs);\n  return {\n    addFilesFromDir: addFilesFromDir.bind(null, addBuffer),\n    addFilesFromTarball: addFilesFromTarball.bind(\n      null,\n      addBuffer,\n      ignoreFile ?? null\n    ),\n    getIndexFilePathInCafs: getIndexFilePathInCafs.bind(null, storeDir),\n    getFilePathByModeInCafs: getFilePathByModeInCafs.bind(null, storeDir),\n  };\n}\n\ntype WriteBufferToCafs = (\n  buffer: Buffer,\n  fileDest: string,\n  mode: number | undefined,\n  integrity: ssri.IntegrityLike\n) => { checkedAt: number; filePath: string };\n\nfunction addBufferToCafs(\n  writeBufferToCafs: WriteBufferToCafs,\n  buffer: Buffer,\n  mode: number\n): FileWriteResult {\n  // Calculating the integrity of the file is surprisingly fast.\n  // 30K files are calculated in 1 second.\n  // Hence, from a performance perspective, there is no win in fetching the package index file from the registry.\n  const integrity = ssri.fromData(buffer);\n  const isExecutable = modeIsExecutable(mode);\n  const fileDest = contentPathFromHex(\n    isExecutable ? 'exec' : 'nonexec',\n    integrity.hexDigest()\n  );\n  const { checkedAt, filePath } = writeBufferToCafs(\n    buffer,\n    fileDest,\n    isExecutable ? 0o755 : undefined,\n    integrity\n  );\n  return { checkedAt, integrity, filePath };\n}\n"],
  "mappings": "AAOA,OAAO,UAAU;AACjB,SAAS,uBAAuB;AAChC,SAAS,2BAA2B;AACpC;AAAA,EACE;AAAA,OAGK;AACP,SAAS,6BAA6B;AACtC;AAAA,EACE;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,OACK;AA8CA,SAAS,WACd,UACA,EAAE,YAAY,WAAW,IAAoB,CAAC,GAC/B;AACf,QAAM,qBAAqB,kBAAkB;AAAA,IAC3C;AAAA,IACA,cAAc,oBAAI,IAAI;AAAA,IACtB;AAAA,EACF;AACA,QAAM,YAAY,gBAAgB,KAAK,MAAM,kBAAkB;AAC/D,SAAO;AAAA,IACL,iBAAiB,gBAAgB,KAAK,MAAM,SAAS;AAAA,IACrD,qBAAqB,oBAAoB;AAAA,MACvC;AAAA,MACA;AAAA,MACA,cAAc;AAAA,IAChB;AAAA,IACA,wBAAwB,uBAAuB,KAAK,MAAM,QAAQ;AAAA,IAClE,yBAAyB,wBAAwB,KAAK,MAAM,QAAQ;AAAA,EACtE;AACF;AASA,SAAS,gBACPA,oBACA,QACA,MACiB;AAIjB,QAAM,YAAY,KAAK,SAAS,MAAM;AACtC,QAAM,eAAe,iBAAiB,IAAI;AAC1C,QAAM,WAAW;AAAA,IACf,eAAe,SAAS;AAAA,IACxB,UAAU,UAAU;AAAA,EACtB;AACA,QAAM,EAAE,WAAW,SAAS,IAAIA;AAAA,IAC9B;AAAA,IACA;AAAA,IACA,eAAe,MAAQ;AAAA,IACvB;AAAA,EACF;AACA,SAAO,EAAE,WAAW,WAAW,SAAS;AAC1C;",
  "names": ["writeBufferToCafs"]
}
