@kiwicom/eslint-config
Version:
Eslint configuration describing rules for JS used at Kiwi.com.
55 lines (49 loc) • 1.88 kB
Flow
// @flow strict
const fs = require('fs');
const path = require('path');
/**
* Inspiration: https://github.com/facebook/create-react-app/blob/3495286f8f3835d55cbdedbc881ae481eb0a3c65/packages/react-scripts/scripts/utils/verifyPackageTree.js
* MIT licenced.
*/
module.exports = function verifyPackageTree() {
// $FlowAllowDynamicImport
const ownPackageJson = require('../package.json');
const depsToCheck = Object.keys(ownPackageJson.dependencies).filter((dep) =>
dep.startsWith('eslint-plugin'));
const expectedVersionsByDep = {};
depsToCheck.forEach(dep => {
expectedVersionsByDep[dep] = ownPackageJson.dependencies[dep].replace(/^[~^]/, '');
});
// Verify we don't have other versions up the tree.
let currentDir = __dirname;
while (true) {
const previousDir = currentDir;
currentDir = path.resolve(currentDir, '..');
if (currentDir === previousDir) {
break; // We've reached the root.
}
const maybeNodeModules = path.resolve(currentDir, 'node_modules');
if (!fs.existsSync(maybeNodeModules)) {
continue;
}
depsToCheck.forEach(dep => {
const maybeDep = path.resolve(maybeNodeModules, dep);
if (!fs.existsSync(maybeDep)) {
return;
}
const maybeDepPackageJson = path.resolve(maybeDep, 'package.json');
if (!fs.existsSync(maybeDepPackageJson)) {
return;
}
const depPackageJson = JSON.parse(fs.readFileSync(maybeDepPackageJson, 'utf8'));
const expectedVersion = expectedVersionsByDep[dep];
if (depPackageJson.version !== expectedVersion) {
console.warn(
'There might be a problem with the following plugin: %s (used %s but expected %s)',
dep,
depPackageJson.version,
expectedVersion);
}
});
}
};