Skip to content

Commit c2275f3

Browse files
author
Josh Goldberg
authored
Fixed package file parsing for Windows (#1151)
* Fixed package file parsing for Windows * Filled in tests
1 parent 1fc8e03 commit c2275f3

File tree

3 files changed

+86
-29
lines changed

3 files changed

+86
-29
lines changed

src/api/dependencies.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,9 +110,13 @@ export const findConfigurationDependencies = {
110110
importer: boundImporter,
111111
};
112112

113+
export const findPackagesConfigurationDependencies = {
114+
fileSystem: fsFileSystem,
115+
};
116+
113117
export const findOriginalConfigurationsDependencies: FindOriginalConfigurationsDependencies = {
114118
findESLintConfiguration: bind(findESLintConfiguration, findConfigurationDependencies),
115-
findPackagesConfiguration: bind(findPackagesConfiguration, findConfigurationDependencies),
119+
findPackagesConfiguration: bind(findPackagesConfiguration, findPackagesConfigurationDependencies),
116120
findTypeScriptConfiguration: bind(findTypeScriptConfiguration, findConfigurationDependencies),
117121
findTSLintConfiguration: bind(findTSLintConfiguration, findConfigurationDependencies),
118122
mergeLintConfigurations,
Lines changed: 60 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,62 @@
1-
import { createStubExec } from "../adapters/exec.stubs";
1+
import { createStubFileSystem } from "../adapters/fileSystem.stub";
22
import { findPackagesConfiguration } from "./findPackagesConfiguration";
33

44
describe("findPackagesConfiguration", () => {
55
it("defaults the configuration file when one isn't provided", async () => {
66
// Arrange
7-
const dependencies = { exec: createStubExec() };
7+
const dependencies = {
8+
fileSystem: createStubFileSystem({
9+
data: "{}"
10+
})
11+
}
812

913
// Act
1014
await findPackagesConfiguration(dependencies, undefined);
1115

1216
// Assert
13-
expect(dependencies.exec).toHaveBeenLastCalledWith(`cat "./package.json"`);
17+
expect(dependencies.fileSystem.readFile).toHaveBeenLastCalledWith(`./package.json`);
1418
});
1519

16-
it("includes a configuration file in the packages command when one is provided", async () => {
20+
it("uses the configuration file from the packages command when one is provided", async () => {
1721
// Arrange
18-
const dependencies = { exec: createStubExec() };
22+
const dependencies = {
23+
fileSystem: createStubFileSystem({
24+
data: "{}"
25+
})
26+
}
1927
const config = "./custom/package.json";
2028

2129
// Act
2230
await findPackagesConfiguration(dependencies, config);
2331

2432
// Assert
25-
expect(dependencies.exec).toHaveBeenLastCalledWith(`cat "./custom/package.json"`);
33+
expect(dependencies.fileSystem.readFile).toHaveBeenLastCalledWith(`./custom/package.json`);
34+
});
35+
36+
it("returns an error when readFile returns an error", async () => {
37+
// Arrange
38+
const error = new Error("Oh no!");
39+
const dependencies = {
40+
fileSystem: createStubFileSystem({
41+
data: error
42+
})
43+
}
44+
const config = "./custom/package.json";
45+
46+
// Act
47+
const result = await findPackagesConfiguration(dependencies, config);
48+
49+
// Assert
50+
expect(result).toBe(error);
2651
});
2752

2853
it("applies packages defaults when none are provided", async () => {
2954
// Arrange
30-
const dependencies = { exec: createStubExec({ stdout: "{}" }) };
55+
const dependencies = {
56+
fileSystem: createStubFileSystem({
57+
data: "{}"
58+
})
59+
}
3160
const config = "./package.json";
3261

3362
// Act
@@ -39,4 +68,28 @@ describe("findPackagesConfiguration", () => {
3968
devDependencies: {},
4069
});
4170
});
71+
72+
it("uses existing package data when it exists", async () => {
73+
// Arrange
74+
const data = {
75+
dependencies: {
76+
eslint: "^11.22.33",
77+
},
78+
devDependencies: {
79+
tslint: "^12.34.56"
80+
}
81+
}
82+
const dependencies = {
83+
fileSystem: createStubFileSystem({
84+
data: JSON.stringify(data)
85+
})
86+
}
87+
const config = "./package.json";
88+
89+
// Act
90+
const result = await findPackagesConfiguration(dependencies, config);
91+
92+
// Assert
93+
expect(result).toEqual(data);
94+
});
4295
});
Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,31 @@
1-
import {
2-
findReportedConfiguration,
3-
FindReportedConfigurationDependencies,
4-
} from "./findReportedConfiguration";
1+
import { FileSystem } from "../adapters/fileSystem";
52

63
export type PackagesConfiguration = {
74
dependencies: Record<string, string | undefined>;
85
devDependencies: Record<string, string | undefined>;
96
};
107

8+
export type FindPackagesConfigurationDependencies = {
9+
fileSystem: Pick<FileSystem, "readFile">;
10+
}
11+
1112
export const findPackagesConfiguration = async (
12-
dependencies: FindReportedConfigurationDependencies,
13-
config: string | undefined,
13+
dependencies: FindPackagesConfigurationDependencies,
14+
config = "./package.json",
1415
): Promise<PackagesConfiguration | Error> => {
15-
const rawConfiguration = await findReportedConfiguration<PackagesConfiguration>(
16-
dependencies.exec,
17-
"cat",
18-
config ?? "./package.json",
19-
);
16+
const rawConfiguration = await dependencies.fileSystem.readFile(config);
17+
if (rawConfiguration instanceof Error) {
18+
return rawConfiguration;
19+
}
20+
21+
const configuration = (JSON.parse(rawConfiguration)) as PackagesConfiguration;
2022

21-
return rawConfiguration instanceof Error
22-
? rawConfiguration
23-
: {
24-
dependencies: {
25-
...rawConfiguration.dependencies,
26-
},
27-
devDependencies: {
28-
...rawConfiguration.devDependencies,
29-
},
30-
};
23+
return {
24+
dependencies: {
25+
...configuration.dependencies,
26+
},
27+
devDependencies: {
28+
...configuration.devDependencies,
29+
},
30+
};
3131
};

0 commit comments

Comments
 (0)