From a178404681f081fbc113ebc9b87e696d1e29b5b6 Mon Sep 17 00:00:00 2001 From: Josh Goldberg Date: Mon, 5 Jul 2021 10:28:18 -0400 Subject: [PATCH 1/2] Fixed package file parsing for Windows --- src/api/dependencies.ts | 6 ++- src/input/findPackagesConfiguration.test.ts | 26 +++++++++---- src/input/findPackagesConfiguration.ts | 42 ++++++++++----------- 3 files changed, 45 insertions(+), 29 deletions(-) diff --git a/src/api/dependencies.ts b/src/api/dependencies.ts index 854c8c2cd..4c74cb3ab 100644 --- a/src/api/dependencies.ts +++ b/src/api/dependencies.ts @@ -110,9 +110,13 @@ export const findConfigurationDependencies = { importer: boundImporter, }; +export const findPackagesConfigurationDependencies = { + fileSystem: fsFileSystem, +}; + export const findOriginalConfigurationsDependencies: FindOriginalConfigurationsDependencies = { findESLintConfiguration: bind(findESLintConfiguration, findConfigurationDependencies), - findPackagesConfiguration: bind(findPackagesConfiguration, findConfigurationDependencies), + findPackagesConfiguration: bind(findPackagesConfiguration, findPackagesConfigurationDependencies), findTypeScriptConfiguration: bind(findTypeScriptConfiguration, findConfigurationDependencies), findTSLintConfiguration: bind(findTSLintConfiguration, findConfigurationDependencies), mergeLintConfigurations, diff --git a/src/input/findPackagesConfiguration.test.ts b/src/input/findPackagesConfiguration.test.ts index 767227a77..97dc0e1a0 100644 --- a/src/input/findPackagesConfiguration.test.ts +++ b/src/input/findPackagesConfiguration.test.ts @@ -1,33 +1,45 @@ -import { createStubExec } from "../adapters/exec.stubs"; +import { createStubFileSystem } from "../adapters/fileSystem.stub"; import { findPackagesConfiguration } from "./findPackagesConfiguration"; describe("findPackagesConfiguration", () => { it("defaults the configuration file when one isn't provided", async () => { // Arrange - const dependencies = { exec: createStubExec() }; + const dependencies = { + fileSystem: createStubFileSystem({ + data: "{}" + }) + } // Act await findPackagesConfiguration(dependencies, undefined); // Assert - expect(dependencies.exec).toHaveBeenLastCalledWith(`cat "./package.json"`); + expect(dependencies.fileSystem.readFile).toHaveBeenLastCalledWith(`./package.json`); }); - it("includes a configuration file in the packages command when one is provided", async () => { + it("uses te configuration file from the packages command when one is provided", async () => { // Arrange - const dependencies = { exec: createStubExec() }; + const dependencies = { + fileSystem: createStubFileSystem({ + data: "{}" + }) + } const config = "./custom/package.json"; // Act await findPackagesConfiguration(dependencies, config); // Assert - expect(dependencies.exec).toHaveBeenLastCalledWith(`cat "./custom/package.json"`); + expect(dependencies.fileSystem.readFile).toHaveBeenLastCalledWith(`./custom/package.json`); }); it("applies packages defaults when none are provided", async () => { // Arrange - const dependencies = { exec: createStubExec({ stdout: "{}" }) }; + const dependencies = { + fileSystem: createStubFileSystem({ + data: "{}" + }) + } const config = "./package.json"; // Act diff --git a/src/input/findPackagesConfiguration.ts b/src/input/findPackagesConfiguration.ts index 5e614e0d2..89ad2f34b 100644 --- a/src/input/findPackagesConfiguration.ts +++ b/src/input/findPackagesConfiguration.ts @@ -1,31 +1,31 @@ -import { - findReportedConfiguration, - FindReportedConfigurationDependencies, -} from "./findReportedConfiguration"; +import { FileSystem } from "../adapters/fileSystem"; export type PackagesConfiguration = { dependencies: Record; devDependencies: Record; }; +export type FindPackagesConfigurationDependencies = { + fileSystem: Pick; +} + export const findPackagesConfiguration = async ( - dependencies: FindReportedConfigurationDependencies, - config: string | undefined, + dependencies: FindPackagesConfigurationDependencies, + config = "./package.json", ): Promise => { - const rawConfiguration = await findReportedConfiguration( - dependencies.exec, - "cat", - config ?? "./package.json", - ); + const rawConfiguration = await dependencies.fileSystem.readFile(config); + if (rawConfiguration instanceof Error) { + return rawConfiguration; + } + + const configuration = (JSON.parse(rawConfiguration)) as PackagesConfiguration; - return rawConfiguration instanceof Error - ? rawConfiguration - : { - dependencies: { - ...rawConfiguration.dependencies, - }, - devDependencies: { - ...rawConfiguration.devDependencies, - }, - }; + return { + dependencies: { + ...configuration.dependencies, + }, + devDependencies: { + ...configuration.devDependencies, + }, + }; }; From 4d58086e251d194ee76cd1b59c4e715ac1869823 Mon Sep 17 00:00:00 2001 From: Josh Goldberg Date: Mon, 5 Jul 2021 10:34:15 -0400 Subject: [PATCH 2/2] Filled in tests --- src/input/findPackagesConfiguration.test.ts | 43 ++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/src/input/findPackagesConfiguration.test.ts b/src/input/findPackagesConfiguration.test.ts index 97dc0e1a0..6321093b9 100644 --- a/src/input/findPackagesConfiguration.test.ts +++ b/src/input/findPackagesConfiguration.test.ts @@ -17,7 +17,7 @@ describe("findPackagesConfiguration", () => { expect(dependencies.fileSystem.readFile).toHaveBeenLastCalledWith(`./package.json`); }); - it("uses te configuration file from the packages command when one is provided", async () => { + it("uses the configuration file from the packages command when one is provided", async () => { // Arrange const dependencies = { fileSystem: createStubFileSystem({ @@ -33,6 +33,23 @@ describe("findPackagesConfiguration", () => { expect(dependencies.fileSystem.readFile).toHaveBeenLastCalledWith(`./custom/package.json`); }); + it("returns an error when readFile returns an error", async () => { + // Arrange + const error = new Error("Oh no!"); + const dependencies = { + fileSystem: createStubFileSystem({ + data: error + }) + } + const config = "./custom/package.json"; + + // Act + const result = await findPackagesConfiguration(dependencies, config); + + // Assert + expect(result).toBe(error); + }); + it("applies packages defaults when none are provided", async () => { // Arrange const dependencies = { @@ -51,4 +68,28 @@ describe("findPackagesConfiguration", () => { devDependencies: {}, }); }); + + it("uses existing package data when it exists", async () => { + // Arrange + const data = { + dependencies: { + eslint: "^11.22.33", + }, + devDependencies: { + tslint: "^12.34.56" + } + } + const dependencies = { + fileSystem: createStubFileSystem({ + data: JSON.stringify(data) + }) + } + const config = "./package.json"; + + // Act + const result = await findPackagesConfiguration(dependencies, config); + + // Assert + expect(result).toEqual(data); + }); });