{
  "version": 3,
  "sources": ["../../../../src/packages/tarball-fetcher/gitHostedTarballFetcher.ts"],
  "sourcesContent": ["import assert from 'node:assert';\nimport fs from 'node:fs/promises';\nimport util from 'node:util';\nimport type { FetchFunction, FetchOptions } from '../fetcher-base/index.ts';\nimport type { Cafs, PackageFiles } from '../cafs-types/index.ts';\nimport { packlist } from '../fs.packlist/index.ts';\nimport { globalWarn } from '../logger/index.ts';\nimport { preparePackage } from '../prepare-package/index.ts';\nimport type { DependencyManifest } from '../types/index.ts';\nimport { addFilesFromDir, type AddFilesResult } from '../worker/index.ts';\nimport renameOverwrite from 'rename-overwrite';\nimport { fastPathTemp as pathTemp } from 'path-temp';\nimport type { Resolution } from '../resolver-base/index.ts';\n\nexport type CreateGitHostedTarballFetcher = {\n  ignoreScripts?: boolean | undefined;\n  rawConfig: Record<string, unknown>;\n  unsafePerm?: boolean | undefined;\n};\n\nexport function createGitHostedTarballFetcher(\n  fetchRemoteTarball: FetchFunction<Resolution, FetchOptions, AddFilesResult>,\n  fetcherOpts: CreateGitHostedTarballFetcher\n): FetchFunction<\n  Resolution,\n  FetchOptions,\n  {\n    filesIndex: PackageFiles | Record<string, string>;\n    manifest: DependencyManifest | undefined;\n    requiresBuild: boolean;\n  }\n> {\n  return async (\n    cafs: Cafs,\n    resolution: Resolution,\n    opts: FetchOptions\n  ): Promise<{\n    filesIndex: PackageFiles | Record<string, string>;\n    manifest: DependencyManifest | undefined;\n    requiresBuild: boolean;\n  }> => {\n    const tempIndexFile = pathTemp(opts.filesIndexFile);\n\n    const { filesIndex, manifest, requiresBuild } = await fetchRemoteTarball(\n      cafs,\n      resolution,\n      {\n        ...opts,\n        filesIndexFile: tempIndexFile,\n      }\n    );\n\n    try {\n      const prepareResult = await prepareGitHostedPkg<Record<string, string>>(\n        filesIndex,\n        cafs,\n        tempIndexFile,\n        opts.filesIndexFile,\n        fetcherOpts,\n        opts,\n        resolution\n      );\n\n      if (prepareResult.ignoredBuild) {\n        globalWarn(\n          `The git-hosted package fetched from \"${resolution.tarball}\" has to be built but the build scripts were ignored.`\n        );\n      }\n\n      return {\n        filesIndex: prepareResult.filesIndex,\n        manifest: prepareResult.manifest ?? manifest,\n        requiresBuild,\n      };\n    } catch (err: unknown) {\n      assert(util.types.isNativeError(err));\n\n      err.message = `Failed to prepare git-hosted package fetched from \"${resolution.tarball}\": ${err.message}`;\n\n      throw err;\n    }\n  };\n}\n\ntype PrepareGitHostedPkgResult = {\n  filesIndex: PackageFiles | Record<string, string>;\n  manifest?: DependencyManifest | undefined;\n  ignoredBuild: boolean;\n};\n\nasync function prepareGitHostedPkg<PF extends Record<string, string>>(\n  filesIndex: PF, // Record<string, string>,\n  cafs: Cafs,\n  filesIndexFileNonBuilt: string,\n  filesIndexFile: string,\n  opts: CreateGitHostedTarballFetcher,\n  fetcherOpts: FetchOptions,\n  resolution: Resolution\n): Promise<PrepareGitHostedPkgResult> {\n  const tempLocation = await cafs.tempDir();\n\n  cafs.importPackage(tempLocation, {\n    filesResponse: {\n      unprocessed: false,\n      filesIndex,\n      resolvedFrom: 'remote',\n      requiresBuild: false,\n    },\n    force: true,\n  });\n\n  if ('path' in resolution) {\n    const { shouldBeBuilt, pkgDir } = await preparePackage(\n      opts,\n      tempLocation,\n      resolution.path\n    );\n\n    const files = await packlist(pkgDir);\n\n    if (\n      typeof resolution.path === 'string' &&\n      files.length === Object.keys(filesIndex).length\n    ) {\n      if (shouldBeBuilt !== true) {\n        if (filesIndexFileNonBuilt !== filesIndexFile) {\n          await renameOverwrite(filesIndexFileNonBuilt, filesIndexFile);\n        }\n\n        return {\n          filesIndex,\n          ignoredBuild: false,\n        };\n      }\n\n      if (opts.ignoreScripts === true) {\n        return {\n          filesIndex,\n          ignoredBuild: true,\n        };\n      }\n    }\n\n    try {\n      // The temporary index file may be deleted\n      await fs.unlink(filesIndexFileNonBuilt);\n    } catch {}\n    // Important! We cannot remove the temp location at this stage.\n    // Even though we have the index of the package,\n    // the linking of files to the store is in progress.\n    return {\n      ...(await addFilesFromDir({\n        storeDir: cafs.storeDir,\n        dir: pkgDir,\n        files,\n        filesIndexFile,\n        pkg: fetcherOpts.pkg,\n        readManifest: fetcherOpts.readManifest,\n      })),\n      ignoredBuild: Boolean(opts.ignoreScripts),\n    };\n  }\n\n  return {\n    filesIndex,\n    ignoredBuild: Boolean(opts.ignoreScripts),\n  };\n}\n"],
  "mappings": "AAAA,OAAO,YAAY;AACnB,OAAO,QAAQ;AACf,OAAO,UAAU;AAGjB,SAAS,gBAAgB;AACzB,SAAS,kBAAkB;AAC3B,SAAS,sBAAsB;AAE/B,SAAS,uBAA4C;AACrD,OAAO,qBAAqB;AAC5B,SAAS,gBAAgB,gBAAgB;AASlC,SAAS,8BACd,oBACA,aASA;AACA,SAAO,OACL,MACA,YACA,SAKI;AACJ,UAAM,gBAAgB,SAAS,KAAK,cAAc;AAElD,UAAM,EAAE,YAAY,UAAU,cAAc,IAAI,MAAM;AAAA,MACpD;AAAA,MACA;AAAA,MACA;AAAA,QACE,GAAG;AAAA,QACH,gBAAgB;AAAA,MAClB;AAAA,IACF;AAEA,QAAI;AACF,YAAM,gBAAgB,MAAM;AAAA,QAC1B;AAAA,QACA;AAAA,QACA;AAAA,QACA,KAAK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAEA,UAAI,cAAc,cAAc;AAC9B;AAAA,UACE,wCAAwC,WAAW,OAAO;AAAA,QAC5D;AAAA,MACF;AAEA,aAAO;AAAA,QACL,YAAY,cAAc;AAAA,QAC1B,UAAU,cAAc,YAAY;AAAA,QACpC;AAAA,MACF;AAAA,IACF,SAAS,KAAc;AACrB,aAAO,KAAK,MAAM,cAAc,GAAG,CAAC;AAEpC,UAAI,UAAU,sDAAsD,WAAW,OAAO,MAAM,IAAI,OAAO;AAEvG,YAAM;AAAA,IACR;AAAA,EACF;AACF;AAQA,eAAe,oBACb,YACA,MACA,wBACA,gBACA,MACA,aACA,YACoC;AACpC,QAAM,eAAe,MAAM,KAAK,QAAQ;AAExC,OAAK,cAAc,cAAc;AAAA,IAC/B,eAAe;AAAA,MACb,aAAa;AAAA,MACb;AAAA,MACA,cAAc;AAAA,MACd,eAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,EACT,CAAC;AAED,MAAI,UAAU,YAAY;AACxB,UAAM,EAAE,eAAe,OAAO,IAAI,MAAM;AAAA,MACtC;AAAA,MACA;AAAA,MACA,WAAW;AAAA,IACb;AAEA,UAAM,QAAQ,MAAM,SAAS,MAAM;AAEnC,QACE,OAAO,WAAW,SAAS,YAC3B,MAAM,WAAW,OAAO,KAAK,UAAU,EAAE,QACzC;AACA,UAAI,kBAAkB,MAAM;AAC1B,YAAI,2BAA2B,gBAAgB;AAC7C,gBAAM,gBAAgB,wBAAwB,cAAc;AAAA,QAC9D;AAEA,eAAO;AAAA,UACL;AAAA,UACA,cAAc;AAAA,QAChB;AAAA,MACF;AAEA,UAAI,KAAK,kBAAkB,MAAM;AAC/B,eAAO;AAAA,UACL;AAAA,UACA,cAAc;AAAA,QAChB;AAAA,MACF;AAAA,IACF;AAEA,QAAI;AAEF,YAAM,GAAG,OAAO,sBAAsB;AAAA,IACxC,QAAQ;AAAA,IAAC;AAIT,WAAO;AAAA,MACL,GAAI,MAAM,gBAAgB;AAAA,QACxB,UAAU,KAAK;AAAA,QACf,KAAK;AAAA,QACL;AAAA,QACA;AAAA,QACA,KAAK,YAAY;AAAA,QACjB,cAAc,YAAY;AAAA,MAC5B,CAAC;AAAA,MACD,cAAc,QAAQ,KAAK,aAAa;AAAA,IAC1C;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA,cAAc,QAAQ,KAAK,aAAa;AAAA,EAC1C;AACF;",
  "names": []
}
