mirror of https://github.com/nodejs/corepack.git
chore: fix tests on custom registry (#445)
This commit is contained in:
parent
d2677538cd
commit
14b8a01abb
|
|
@ -36,87 +36,79 @@ const mockPackageTarGz = gzipSync(Buffer.concat([
|
||||||
Buffer.alloc(1024),
|
Buffer.alloc(1024),
|
||||||
]));
|
]));
|
||||||
const shasum = createHash(`sha1`).update(mockPackageTarGz).digest(`hex`);
|
const shasum = createHash(`sha1`).update(mockPackageTarGz).digest(`hex`);
|
||||||
|
const integrity = `sha512-${createHash(`sha512`).update(mockPackageTarGz).digest(`base64`)}`;
|
||||||
|
|
||||||
|
const registry = {
|
||||||
|
__proto__: null,
|
||||||
|
yarn: [`1.9998.9999`],
|
||||||
|
pnpm: [`1.9998.9999`],
|
||||||
|
// eslint-disable-next-line @typescript-eslint/naming-convention
|
||||||
|
'@yarnpkg/cli-dist': [`5.9999.9999`],
|
||||||
|
customPkgManager: [`1.0.0`],
|
||||||
|
};
|
||||||
|
|
||||||
|
function generateVersionMetadata(packageName, version) {
|
||||||
|
return {
|
||||||
|
name: packageName,
|
||||||
|
version,
|
||||||
|
bin: {
|
||||||
|
[packageName]: `./bin/${packageName}.js`,
|
||||||
|
},
|
||||||
|
dist: {
|
||||||
|
integrity,
|
||||||
|
shasum,
|
||||||
|
size: mockPackageTarGz.length,
|
||||||
|
noattachment: false,
|
||||||
|
tarball: `${process.env.COREPACK_NPM_REGISTRY}/${packageName}/-/${packageName}-${version}.tgz`,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
const server = createServer((req, res) => {
|
const server = createServer((req, res) => {
|
||||||
const auth = req.headers.authorization;
|
const auth = req.headers.authorization;
|
||||||
if (!auth?.startsWith(`Bearer `) || Buffer.from(auth.slice(`Bearer `.length), `base64`).toString() !== `user:pass`) {
|
if (!auth?.startsWith(`Bearer `) || Buffer.from(auth.slice(`Bearer `.length), `base64`).toString() !== `user:pass`) {
|
||||||
res.statusCode = 401;
|
res.writeHead(401).end(`Unauthorized`);
|
||||||
res.end(`Unauthorized`);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
switch (req.url) {
|
|
||||||
case `/yarn`: {
|
let slashPosition = req.url.indexOf(`/`, 1);
|
||||||
|
if (req.url.charAt(1) === `@`) slashPosition = req.url.indexOf(`/`, slashPosition + 1);
|
||||||
|
|
||||||
|
const packageName = req.url.slice(1, slashPosition === -1 ? undefined : slashPosition);
|
||||||
|
if (packageName in registry) {
|
||||||
|
if (req.url === `/${packageName}`) {
|
||||||
|
// eslint-disable-next-line @typescript-eslint/naming-convention
|
||||||
res.end(JSON.stringify({"dist-tags": {
|
res.end(JSON.stringify({"dist-tags": {
|
||||||
latest: `1.9998.9999`,
|
latest: registry[packageName].at(-1),
|
||||||
}, versions: {'1.9998.9999': {
|
}, versions: Object.fromEntries(registry[packageName].map(version =>
|
||||||
dist: {
|
[version, generateVersionMetadata(packageName, version)],
|
||||||
shasum,
|
))}));
|
||||||
size: mockPackageTarGz.length,
|
return;
|
||||||
noattachment: false,
|
|
||||||
tarball: `${process.env.COREPACK_NPM_REGISTRY}/yarn.tgz`,
|
|
||||||
},
|
|
||||||
}}}));
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
const isDownloadingRequest = req.url.slice(packageName.length + 1, packageName.length + 4) === `/-/`;
|
||||||
case `/pnpm`: {
|
let version;
|
||||||
res.end(JSON.stringify({"dist-tags": {
|
if (isDownloadingRequest) {
|
||||||
latest: `1.9998.9999`,
|
const match = /^(.+)-(.+)\.tgz$/.exec(req.url.slice(packageName.length + 4));
|
||||||
}, versions: {'1.9998.9999': {
|
if (match?.[1] === packageName) {
|
||||||
dist: {
|
version = match[2];
|
||||||
shasum,
|
}
|
||||||
size: mockPackageTarGz.length,
|
} else {
|
||||||
noattachment: false,
|
version = req.url.slice(packageName.length + 2);
|
||||||
tarball: `${process.env.COREPACK_NPM_REGISTRY}/pnpm/-/pnpm-1.9998.9999.tgz`,
|
|
||||||
},
|
|
||||||
}}}));
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
if (version === `latest`) version = registry[packageName].at(-1);
|
||||||
case `/@yarnpkg/cli-dist`: {
|
if (registry[packageName].includes(version)) {
|
||||||
res.end(JSON.stringify({"dist-tags": {
|
res.end(
|
||||||
latest: `5.9999.9999`,
|
isDownloadingRequest ?
|
||||||
}, versions: {'5.9999.9999': {
|
mockPackageTarGz :
|
||||||
bin: {
|
JSON.stringify(generateVersionMetadata(packageName, version)),
|
||||||
yarn: `./bin/yarn.js`,
|
);
|
||||||
yarnpkg: `./bin/yarn.js`,
|
} else {
|
||||||
},
|
res.writeHead(404).end(`Not Found`);
|
||||||
dist: {
|
throw new Error(`unsupported request`, {cause: {url: req.url, packageName, version, isDownloadingRequest}});
|
||||||
shasum,
|
|
||||||
size: mockPackageTarGz.length,
|
|
||||||
noattachment: false,
|
|
||||||
tarball: `${process.env.COREPACK_NPM_REGISTRY}/yarn.tgz`,
|
|
||||||
},
|
|
||||||
}}}));
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
case `/customPkgManager`: {
|
res.writeHead(500).end(`Internal Error`);
|
||||||
res.end(JSON.stringify({"dist-tags": {
|
throw new Error(`unsupported request`, {cause: {url: req.url, packageName}});
|
||||||
latest: `1.0.0`,
|
|
||||||
}, versions: {'1.0.0': {
|
|
||||||
bin: {
|
|
||||||
customPkgManager: `./bin/customPkgManager.js`,
|
|
||||||
},
|
|
||||||
dist: {
|
|
||||||
shasum,
|
|
||||||
size: mockPackageTarGz.length,
|
|
||||||
noattachment: false,
|
|
||||||
tarball: `${process.env.COREPACK_NPM_REGISTRY}/customPkgManager/-/customPkgManager-1.0.0.tgz`,
|
|
||||||
},
|
|
||||||
}}}));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case `/pnpm/-/pnpm-1.9998.9999.tgz`:
|
|
||||||
case `/yarn.tgz`:
|
|
||||||
case `/customPkgManager/-/customPkgManager-1.0.0.tgz`:
|
|
||||||
res.end(mockPackageTarGz);
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
throw new Error(`unsupported request`, {cause: req.url});
|
|
||||||
}
|
}
|
||||||
}).listen(0, `localhost`);
|
}).listen(0, `localhost`);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue