UNPKG

@pnpm/tarball-fetcher

Version:
94 lines 3.87 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createGitHostedTarballFetcher = createGitHostedTarballFetcher; const assert_1 = __importDefault(require("assert")); const promises_1 = __importDefault(require("node:fs/promises")); const util_1 = __importDefault(require("util")); const fs_packlist_1 = require("@pnpm/fs.packlist"); const logger_1 = require("@pnpm/logger"); const prepare_package_1 = require("@pnpm/prepare-package"); const worker_1 = require("@pnpm/worker"); const rename_overwrite_1 = __importDefault(require("rename-overwrite")); const path_temp_1 = require("path-temp"); function createGitHostedTarballFetcher(fetchRemoteTarball, fetcherOpts) { const fetch = async (cafs, resolution, opts) => { const tempIndexFile = (0, path_temp_1.fastPathTemp)(opts.filesIndexFile); const { filesIndex, manifest, requiresBuild } = await fetchRemoteTarball(cafs, resolution, { ...opts, filesIndexFile: tempIndexFile, }); try { const prepareResult = await prepareGitHostedPkg(filesIndex, cafs, tempIndexFile, opts.filesIndexFile, fetcherOpts, opts, resolution); if (prepareResult.ignoredBuild) { (0, logger_1.globalWarn)(`The git-hosted package fetched from "${resolution.tarball}" has to be built but the build scripts were ignored.`); } return { filesIndex: prepareResult.filesIndex, manifest: prepareResult.manifest ?? manifest, requiresBuild, }; } catch (err) { (0, assert_1.default)(util_1.default.types.isNativeError(err)); err.message = `Failed to prepare git-hosted package fetched from "${resolution.tarball}": ${err.message}`; throw err; } }; return fetch; } async function prepareGitHostedPkg(filesIndex, cafs, filesIndexFileNonBuilt, filesIndexFile, opts, fetcherOpts, resolution) { const tempLocation = await cafs.tempDir(); cafs.importPackage(tempLocation, { filesResponse: { filesIndex, resolvedFrom: 'remote', requiresBuild: false, }, force: true, }); const { shouldBeBuilt, pkgDir } = await (0, prepare_package_1.preparePackage)({ ...opts, allowBuild: fetcherOpts.allowBuild, }, tempLocation, resolution.path ?? ''); const files = await (0, fs_packlist_1.packlist)(pkgDir); if (!resolution.path && files.length === Object.keys(filesIndex).length) { if (!shouldBeBuilt) { if (filesIndexFileNonBuilt !== filesIndexFile) { await (0, rename_overwrite_1.default)(filesIndexFileNonBuilt, filesIndexFile); } return { filesIndex, ignoredBuild: false, }; } if (opts.ignoreScripts) { return { filesIndex, ignoredBuild: true, }; } } try { // The temporary index file may be deleted await promises_1.default.unlink(filesIndexFileNonBuilt); } catch { } // Important! We cannot remove the temp location at this stage. // Even though we have the index of the package, // the linking of files to the store is in progress. return { ...await (0, worker_1.addFilesFromDir)({ storeDir: cafs.storeDir, dir: pkgDir, files, filesIndexFile, pkg: fetcherOpts.pkg, readManifest: fetcherOpts.readManifest, }), ignoredBuild: Boolean(opts.ignoreScripts), }; } //# sourceMappingURL=gitHostedTarballFetcher.js.map