Skip to content

Commit 955204a

Browse files
fix(cli): include dev dependencies in npm version lookup (#280)
## Summary - Include dev dependencies when npm is used to detect the installed `cdktn` / `cdktf` package version. - Add regression coverage for the npm package-version lookup arguments. Fixes: #278 ## Testing - `pnpm nx test @cdktn/commons --runInBand --testFile=src/debug.test.ts` - `pnpm nx build cdktn-cli` - Validated the linked repro with the locally built CLI: - `cdktn debug` - `cdktn provider list` - `cdktn provider add random`
1 parent a6aff7e commit 955204a

2 files changed

Lines changed: 83 additions & 3 deletions

File tree

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
// Copyright (c) HashiCorp, Inc
2+
// SPDX-License-Identifier: MPL-2.0
3+
import * as fs from "fs";
4+
import * as path from "path";
5+
6+
jest.mock("./terraform", () => ({
7+
terraformVersion: Promise.resolve("1.7.5"),
8+
}));
9+
10+
import { collectDebugInformation } from "./debug";
11+
import { withTempDir } from "./util";
12+
13+
function writeInstalledPackage(packageName: string, version: string) {
14+
const packageDir = path.join(process.cwd(), "node_modules", packageName);
15+
fs.mkdirSync(packageDir, { recursive: true });
16+
fs.writeFileSync(
17+
path.join(packageDir, "package.json"),
18+
JSON.stringify({ name: packageName, version }, null, 2),
19+
);
20+
}
21+
22+
describe("collectDebugInformation()", () => {
23+
let previousNodeEnv: string | undefined;
24+
25+
beforeEach(() => {
26+
previousNodeEnv = process.env.NODE_ENV;
27+
});
28+
29+
afterEach(() => {
30+
if (previousNodeEnv === undefined) delete process.env.NODE_ENV;
31+
else process.env.NODE_ENV = previousNodeEnv;
32+
});
33+
34+
it("detects TypeScript packages installed as npm dev dependencies in production", async () => {
35+
await withTempDir("debug.test", async () => {
36+
fs.writeFileSync(
37+
"cdktf.json",
38+
JSON.stringify({ language: "typescript" }),
39+
);
40+
fs.writeFileSync(
41+
"package.json",
42+
JSON.stringify(
43+
{
44+
name: "debug-dev-dependency-fixture",
45+
version: "1.0.0",
46+
devDependencies: {
47+
cdktn: "0.23.3",
48+
cdktf: "0.20.11",
49+
constructs: "10.3.0",
50+
jsii: "5.5.0",
51+
},
52+
},
53+
null,
54+
2,
55+
),
56+
);
57+
58+
writeInstalledPackage("cdktn", "0.23.3");
59+
writeInstalledPackage("cdktf", "0.20.11");
60+
writeInstalledPackage("constructs", "10.3.0");
61+
writeInstalledPackage("jsii", "5.5.0");
62+
63+
process.env.NODE_ENV = "production";
64+
65+
await expect(collectDebugInformation()).resolves.toEqual(
66+
expect.objectContaining({
67+
language: "typescript",
68+
cdktn: "0.23.3",
69+
cdktf: "0.20.11",
70+
constructs: "10.3.0",
71+
jsii: "5.5.0",
72+
}),
73+
);
74+
});
75+
});
76+
});

packages/@cdktn/commons/src/debug.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -135,9 +135,13 @@ async function getNpmNodeModuleVersion(
135135
let output;
136136

137137
try {
138-
output = await exec("npm", ["list", packageName, "--json"], {
139-
env: { ...process.env },
140-
});
138+
output = await exec(
139+
"npm",
140+
["list", packageName, "--json", "--include=dev"],
141+
{
142+
env: { ...process.env },
143+
},
144+
);
141145
} catch (e) {
142146
logger.debug(`Unable to run 'npm list ${packageName} --json': ${e}`);
143147
return undefined;

0 commit comments

Comments
 (0)