{
  "version": 3,
  "sources": ["../../../../src/packages/create-cafs-store/index.ts"],
  "sourcesContent": ["import { promises as fs } from 'node:fs';\nimport path from 'node:path';\nimport {\n  type CafsLocker,\n  createCafs,\n  getFilePathByModeInCafs,\n} from '../store.cafs/index.ts';\nimport type {\n  Cafs,\n  PackageFilesResponse,\n  PackageFiles,\n  SideEffectsDiff,\n  ImportPackageOpts,\n  PackageFileInfo,\n  ImportPackageFunction,\n  ImportPackageFunctionAsync,\n} from '../cafs-types/index.ts';\nimport { createIndexedPkgImporter } from '../fs.indexed-pkg-importer/index.ts';\nimport type {\n  ImportIndexedPackage,\n  ImportIndexedPackageAsync,\n} from '../store-controller-types/index.ts';\nimport memoize from 'mem';\nimport pathTemp from 'path-temp';\nimport mapValues from 'ramda/src/map';\n\nexport type { CafsLocker };\n\nexport function createPackageImporterAsync(opts: {\n  importIndexedPackage?: ImportIndexedPackageAsync | undefined;\n  packageImportMethod?:\n    | 'auto'\n    | 'hardlink'\n    | 'copy'\n    | 'clone'\n    | 'clone-or-copy'\n    | undefined;\n  storeDir: string;\n}): ImportPackageFunctionAsync<{\n  importMethod?: string | undefined;\n  isBuilt: boolean;\n}> {\n  const cachedImporterCreator = opts.importIndexedPackage\n    ? (): ImportIndexedPackageAsync | undefined => {\n        return opts.importIndexedPackage;\n      }\n    : memoize(createIndexedPkgImporter);\n\n  const packageImportMethod = opts.packageImportMethod;\n\n  const gfm = getFlatMap.bind(null, opts.storeDir);\n\n  return async (\n    to: string,\n    opts: ImportPackageOpts\n  ): Promise<{ importMethod?: string | undefined; isBuilt: boolean }> => {\n    const { filesMap, isBuilt } = gfm(\n      opts.filesResponse,\n      opts.sideEffectsCacheKey\n    );\n\n    const willBeBuilt = !isBuilt && opts.requiresBuild;\n\n    const pkgImportMethod =\n      willBeBuilt === true\n        ? 'clone-or-copy'\n        : (opts.filesResponse.packageImportMethod ?? packageImportMethod);\n\n    const impPkg = cachedImporterCreator(pkgImportMethod);\n\n    const importMethod = await impPkg?.(to, {\n      disableRelinkLocalDirDeps: opts.disableRelinkLocalDirDeps,\n      filesMap,\n      resolvedFrom: opts.filesResponse.resolvedFrom,\n      force: opts.force,\n      keepModulesDir: Boolean(opts.keepModulesDir),\n    });\n\n    return { importMethod, isBuilt };\n  };\n}\n\nfunction createPackageImporter(opts: {\n  importIndexedPackage?: ImportIndexedPackage | undefined;\n  packageImportMethod?:\n    | 'auto'\n    | 'hardlink'\n    | 'copy'\n    | 'clone'\n    | 'clone-or-copy'\n    | undefined;\n  storeDir: string;\n}): ImportPackageFunction<{\n  isBuilt: boolean;\n  importMethod?: string | undefined;\n}> {\n  const cachedImporterCreator = opts.importIndexedPackage\n    ? () => opts.importIndexedPackage\n    : memoize(createIndexedPkgImporter);\n\n  const packageImportMethod = opts.packageImportMethod;\n\n  const gfm = getFlatMap.bind(null, opts.storeDir);\n\n  return (\n    to: string,\n    opts: ImportPackageOpts\n  ): {\n    isBuilt: boolean;\n    importMethod?: string | undefined;\n  } => {\n    const { filesMap, isBuilt } = gfm(\n      opts.filesResponse,\n      opts.sideEffectsCacheKey\n    );\n\n    const willBeBuilt = !isBuilt && opts.requiresBuild;\n\n    const pkgImportMethod =\n      willBeBuilt === true\n        ? 'clone-or-copy'\n        : (opts.filesResponse.packageImportMethod ?? packageImportMethod);\n\n    const impPkg = cachedImporterCreator(pkgImportMethod);\n\n    const importMethod = impPkg?.(to, {\n      disableRelinkLocalDirDeps: opts.disableRelinkLocalDirDeps,\n      filesMap,\n      resolvedFrom: opts.filesResponse.resolvedFrom,\n      force: opts.force,\n      keepModulesDir: Boolean(opts.keepModulesDir),\n    });\n\n    return { importMethod, isBuilt };\n  };\n}\n\nfunction getFlatMap(\n  storeDir: string,\n  filesResponse: PackageFilesResponse,\n  targetEngine?: string | undefined\n): { filesMap: Record<string, string>; isBuilt: boolean } {\n  let isBuilt: boolean | undefined;\n\n  let filesIndex!: PackageFiles;\n\n  if (\n    typeof targetEngine === 'string' &&\n    filesResponse.sideEffects?.[targetEngine] != null\n  ) {\n    filesIndex = applySideEffectsDiff(\n      filesResponse.filesIndex,\n      filesResponse.sideEffects[targetEngine]\n    );\n\n    isBuilt = true;\n  } else if (filesResponse.unprocessed === true) {\n    filesIndex = filesResponse.filesIndex as PackageFiles;\n\n    isBuilt = false;\n  } else {\n    return {\n      filesMap: filesResponse.filesIndex as Record<string, string>,\n      isBuilt: false,\n    };\n  }\n\n  const filesMap = mapValues.default(\n    ({ integrity, mode }: PackageFileInfo): string => {\n      return getFilePathByModeInCafs(storeDir, integrity, mode);\n    },\n    filesIndex\n  );\n\n  return { filesMap, isBuilt };\n}\n\nfunction applySideEffectsDiff(\n  baseFiles: PackageFiles | Record<string, string>,\n  { added, deleted }: SideEffectsDiff\n): PackageFiles {\n  const filesWithSideEffects: PackageFiles = { ...added };\n\n  for (const fileName in baseFiles) {\n    if (\n      deleted?.includes(fileName) !== true &&\n      !filesWithSideEffects[fileName]\n    ) {\n      const f = baseFiles[fileName];\n\n      if (typeof f !== 'string' && typeof f !== 'undefined') {\n        filesWithSideEffects[fileName] = f;\n      }\n    }\n  }\n\n  return filesWithSideEffects;\n}\n\nexport function createCafsStore(\n  storeDir: string,\n  opts?:\n    | {\n        ignoreFile?: ((filename: string) => boolean) | undefined;\n        importPackage?: ImportIndexedPackage | undefined;\n        packageImportMethod?:\n          | 'auto'\n          | 'hardlink'\n          | 'copy'\n          | 'clone'\n          | 'clone-or-copy'\n          | undefined;\n        cafsLocker?: CafsLocker | undefined;\n      }\n    | undefined\n): Cafs {\n  const baseTempDir = path.join(storeDir, 'tmp');\n\n  return {\n    ...createCafs(storeDir, opts),\n    storeDir,\n    importPackage: createPackageImporter({\n      importIndexedPackage: opts?.importPackage,\n      packageImportMethod: opts?.packageImportMethod,\n      storeDir,\n    }),\n    tempDir: async () => {\n      const tmpDir = pathTemp(baseTempDir);\n      await fs.mkdir(tmpDir, { recursive: true });\n      return tmpDir;\n    },\n  };\n}\n"],
  "mappings": "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",
  "names": ["opts"]
}
