Merge pull request #257337 from lorenzleutgeb/yarn-file

prefetch-yarn-deps: Fix handling of scoped packages
This commit is contained in:
Lily Foster 2023-11-26 16:49:33 -05:00 committed by GitHub
commit 25596bd419
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 25 additions and 14 deletions

View file

@ -88,10 +88,17 @@ const isGitUrl = pattern => {
}
const downloadPkg = (pkg, verbose) => {
const [ name, spec ] = pkg.key.split('@', 2);
if (spec.startsWith('file:')) {
console.info(`ignoring relative file:path dependency "${spec}"`)
const fileMarker = '@file:'
const split = pkg.key.split(fileMarker)
if (split.length == 2) {
console.info(`ignoring lockfile entry "${split[0]}" which points at path "${split[1]}"`)
return
} else if (split.length > 2) {
throw new Error(`The lockfile entry key "${pkg.key}" contains "${fileMarker}" more than once. Processing is not implemented.`)
}
if (pkg.resolved === undefined) {
throw new Error(`The lockfile entry with key "${pkg.key}" cannot be downloaded because it is missing the "resolved" attribute, which should contain the URL to download from. The lockfile might be invalid.`)
}
const [ url, hash ] = pkg.resolved.split('#')
@ -133,19 +140,10 @@ const performParallel = tasks => {
const prefetchYarnDeps = async (lockContents, verbose) => {
const lockData = lockfile.parse(lockContents)
const tasks = Object.values(
await performParallel(
Object.entries(lockData.object)
.map(([key, value]) => {
return { key, ...value }
})
.reduce((out, pkg) => {
out[pkg.resolved] = pkg
return out
}, {})
.map(([key, value]) => () => downloadPkg({ key, ...value }, verbose))
)
.map(pkg => () => downloadPkg(pkg, verbose))
await performParallel(tasks)
await fs.promises.writeFile('yarn.lock', lockContents)
if (verbose) console.log('Done')
}

View file

@ -1,6 +1,10 @@
{ testers, fetchYarnDeps, ... }:
{
file = testers.invalidateFetcherByDrvHash fetchYarnDeps {
yarnLock = ./file.lock;
sha256 = "sha256-BPuyQVCbdpFL/iRhmarwWAmWO2NodlVCOY9JU+4pfa4=";
};
simple = testers.invalidateFetcherByDrvHash fetchYarnDeps {
yarnLock = ./simple.lock;
sha256 = "sha256-FRrt8BixleILmFB2ZV8RgPNLqgS+dlH5nWoPgeaaNQ8=";

View file

@ -0,0 +1,9 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
"@org/somepack@file:vendor/orgpacks/somepack/assets":
version "1.0.0"
"otherpack@file:vendor/otherpack":
version "1.0.0"