Skip to content

Commit 7bfe707

Browse files
committed
fixup
1 parent a2f8192 commit 7bfe707

3 files changed

Lines changed: 86 additions & 22 deletions

File tree

sources/specUtils.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,11 @@ function parsePackageJSON(packageJSONContent: CorepackPackageJSON, localEnv?: Lo
8383

8484
debugUtils.log(`Using ${localEnvVersion} defined in .corepack.env`);
8585
version = localEnvVersion;
86+
} else {
87+
const {packageManager: pm} = packageJSONContent;
88+
if (pm?.startsWith(`${packageManager.name}@`) && semverSatisfies(pm.slice(packageManager.name.length + 1), version)) {
89+
return pm;
90+
}
8691
}
8792

8893

@@ -156,11 +161,12 @@ export async function loadSpec(initialCwd: string): Promise<LoadSpecResult> {
156161
const envFilePath = path.join(currCwd, `.corepack.env`);
157162
debugUtils.log(`Checking ${envFilePath}`);
158163
try {
159-
localEnv = parseEnv(await fs.promises.readFile(envFilePath, `utf8`)) as LocalEnvFile;
164+
localEnv = {...process.env, ...parseEnv(await fs.promises.readFile(envFilePath, `utf8`))};
160165
} catch (err) {
161-
if ((err as NodeError)?.code !== `ENOENT`) {
166+
if ((err as NodeError)?.code !== `ENOENT`)
162167
throw err;
163-
}
168+
169+
localEnv = process.env;
164170
}
165171

166172
selection = {data, manifestPath, localEnv};

sources/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,4 +146,4 @@ export interface Locator {
146146
reference: string;
147147
}
148148

149-
export type LocalEnvFile = Record<"COREPACK_ENABLE_AUTO_PIN" | "COREPACK_ENABLE_STRICT" | "COREPACK_INTEGRITY_KEYS" | "COREPACK_PACKAGE_MANAGER", string>;
149+
export type LocalEnvFile = Record<string, string | undefined>;

tests/main.test.ts

Lines changed: 76 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -261,28 +261,86 @@ it(`should prefer devEngines to packageManager`, async () => {
261261
});
262262
});
263263

264-
it(`should accept range in devEngines only if a specific version is provided in .corepack.env`, async () => {
265-
await xfs.mktempPromise(async cwd => {
266-
await xfs.writeJsonPromise(ppath.join(cwd, `package.json` as PortablePath), {
267-
devEngines: {
268-
packageManager: {
269-
name: `pnpm`,
270-
version: `6.x`,
264+
describe(`should accept range in devEngines only if a specific version is provided`, () => {
265+
it(`either in .corepack.env`, async() => {
266+
await xfs.mktempPromise(async cwd => {
267+
await xfs.writeJsonPromise(ppath.join(cwd, `package.json` as PortablePath), {
268+
devEngines: {
269+
packageManager: {
270+
name: `pnpm`,
271+
version: `6.x`,
272+
},
271273
},
272-
},
274+
});
275+
await expect(runCli(cwd, [`pnpm`, `--version`])).resolves.toMatchObject({
276+
exitCode: 1,
277+
stderr: `Invalid package manager specification in package.json (pnpm@6.x); expected a semver version\n`,
278+
stdout: ``,
279+
});
280+
281+
await xfs.writeFilePromise(ppath.join(cwd, `.corepack.env` as PortablePath),
282+
`COREPACK_DEV_ENGINES_PNPM=6.6.2+sha224.eb5c0acad3b0f40ecdaa2db9aa5a73134ad256e17e22d1419a2ab073\n`);
283+
await expect(runCli(cwd, [`pnpm`, `--version`])).resolves.toMatchObject({
284+
exitCode: 0,
285+
stderr: ``,
286+
stdout: `6.6.2\n`,
287+
});
273288
});
274-
await expect(runCli(cwd, [`pnpm`, `--version`])).resolves.toMatchObject({
275-
exitCode: 1,
276-
stderr: `Invalid package manager specification in package.json (pnpm@6.x); expected a semver version\n`,
277-
stdout: ``,
289+
});
290+
it(`either in env`, async() => {
291+
await xfs.mktempPromise(async cwd => {
292+
await xfs.writeJsonPromise(ppath.join(cwd, `package.json` as PortablePath), {
293+
devEngines: {
294+
packageManager: {
295+
name: `pnpm`,
296+
version: `6.x`,
297+
},
298+
},
299+
});
300+
await expect(runCli(cwd, [`pnpm`, `--version`])).resolves.toMatchObject({
301+
exitCode: 1,
302+
stderr: `Invalid package manager specification in package.json (pnpm@6.x); expected a semver version\n`,
303+
stdout: ``,
304+
});
305+
306+
process.env.COREPACK_DEV_ENGINES_PNPM = `6.6.2+sha224.eb5c0acad3b0f40ecdaa2db9aa5a73134ad256e17e22d1419a2ab073`;
307+
await expect(runCli(cwd, [`pnpm`, `--version`])).resolves.toMatchObject({
308+
exitCode: 0,
309+
stderr: ``,
310+
stdout: `6.6.2\n`,
311+
});
278312
});
313+
});
314+
it(`either in package.json#packageManager`, async() => {
315+
await xfs.mktempPromise(async cwd => {
316+
await xfs.writeJsonPromise(ppath.join(cwd, `package.json` as PortablePath), {
317+
devEngines: {
318+
packageManager: {
319+
name: `pnpm`,
320+
version: `6.x`,
321+
},
322+
},
323+
});
324+
await expect(runCli(cwd, [`pnpm`, `--version`])).resolves.toMatchObject({
325+
exitCode: 1,
326+
stderr: `Invalid package manager specification in package.json (pnpm@6.x); expected a semver version\n`,
327+
stdout: ``,
328+
});
279329

280-
await xfs.writeFilePromise(ppath.join(cwd, `.corepack.env` as PortablePath),
281-
`COREPACK_DEV_ENGINES_PNPM=6.6.2+sha224.eb5c0acad3b0f40ecdaa2db9aa5a73134ad256e17e22d1419a2ab073\n`);
282-
await expect(runCli(cwd, [`pnpm`, `--version`])).resolves.toMatchObject({
283-
exitCode: 0,
284-
stderr: ``,
285-
stdout: `6.6.2\n`,
330+
await xfs.writeJsonPromise(ppath.join(cwd, `package.json` as PortablePath), {
331+
devEngines: {
332+
packageManager: {
333+
name: `pnpm`,
334+
version: `6.x`,
335+
},
336+
},
337+
packageManager: `pnpm@6.6.2+sha224.eb5c0acad3b0f40ecdaa2db9aa5a73134ad256e17e22d1419a2ab073`,
338+
});
339+
await expect(runCli(cwd, [`pnpm`, `--version`])).resolves.toMatchObject({
340+
exitCode: 0,
341+
stderr: ``,
342+
stdout: `6.6.2\n`,
343+
});
286344
});
287345
});
288346
});

0 commit comments

Comments
 (0)