@pnpm/tarball-fetcher
Version:
Fetcher for packages hosted as tarballs
94 lines • 3.87 kB
JavaScript
;
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