diff --git a/index.js b/index.js index 6900a08..27d0de3 100644 --- a/index.js +++ b/index.js @@ -14,7 +14,7 @@ const getNoDeclarationFileError = ({ filename }) => ); const getTypeMismatchError = ({ filename, expected, actual }) => { - const diff = new LineDiff(actual, expected).toString(); + const diff = new LineDiff(enforceLFLineSeparators(actual), expected).toString(); return new Error( `Generated type declaration file is outdated. Run webpack and commit the updated type declaration for '${filename}'\n\n${diff}` @@ -36,6 +36,19 @@ const filenameToTypingsFilename = filename => { return path.join(dirName, `${baseName}.d.ts`); }; +const enforceLFLineSeparators = text => { + if (text) { + // replace all CRLFs (Windows) by LFs (Unix) + return text.replace(/\r\n/g, "\n"); + } else { + return text; + } +}; + +const compareText = (contentA, contentB) => { + return enforceLFLineSeparators(contentA) === enforceLFLineSeparators(contentB); +}; + const validModes = ['emit', 'verify']; const isFileNotFound = err => err && err.code === 'ENOENT'; @@ -91,7 +104,7 @@ module.exports = function(content, ...rest) { return failed(err); } - if (cssModuleDefinition !== fileContents) { + if (!compareText(cssModuleDefinition, fileContents)) { return failed( getTypeMismatchError({ filename: cssModuleInterfaceFilename, @@ -105,7 +118,7 @@ module.exports = function(content, ...rest) { }); } else { read((_, fileContents) => { - if (cssModuleDefinition !== fileContents) { + if (!compareText(cssModuleDefinition, fileContents)) { write(cssModuleDefinition, err => { if (err) { failed(err); diff --git a/test/verify-invalid-declaration/verify-invalid-declaration.test.js b/test/verify-invalid-declaration/verify-invalid-declaration.test.js index 80062e7..a83cfe3 100644 --- a/test/verify-invalid-declaration/verify-invalid-declaration.test.js +++ b/test/verify-invalid-declaration/verify-invalid-declaration.test.js @@ -9,6 +9,9 @@ test('Can error on invalid declaration', async () => { mode: 'verify' }); } catch (err) { - expect(getErrorMessage(err.errors[0])).toMatchSnapshot(); + // make test robust for Windows by replacing backslashes in the file path with slashes + let errorMessage = getErrorMessage(err.errors[0]).replace(/(?<=Error:.*)\\/g, "/"); + + expect(errorMessage).toMatchSnapshot(); } }); diff --git a/test/verify-missing-declaration/verify-missing-declaration.test.js b/test/verify-missing-declaration/verify-missing-declaration.test.js index 80062e7..a83cfe3 100644 --- a/test/verify-missing-declaration/verify-missing-declaration.test.js +++ b/test/verify-missing-declaration/verify-missing-declaration.test.js @@ -9,6 +9,9 @@ test('Can error on invalid declaration', async () => { mode: 'verify' }); } catch (err) { - expect(getErrorMessage(err.errors[0])).toMatchSnapshot(); + // make test robust for Windows by replacing backslashes in the file path with slashes + let errorMessage = getErrorMessage(err.errors[0]).replace(/(?<=Error:.*)\\/g, "/"); + + expect(errorMessage).toMatchSnapshot(); } });