diff options
author | Leonid Logvinov <logvinov.leon@gmail.com> | 2017-12-05 00:56:06 +0800 |
---|---|---|
committer | Leonid Logvinov <logvinov.leon@gmail.com> | 2017-12-06 20:48:30 +0800 |
commit | 22de68205b3ef309222d71e72089c75184365d4a (patch) | |
tree | 382c760b1f985d32678ade6599d82fd62ac729ea /packages/monorepo-scripts/src | |
parent | f76543ebfa83ac4772ea68b668cfd83752f03f6b (diff) | |
download | dexon-sol-tools-22de68205b3ef309222d71e72089c75184365d4a.tar dexon-sol-tools-22de68205b3ef309222d71e72089c75184365d4a.tar.gz dexon-sol-tools-22de68205b3ef309222d71e72089c75184365d4a.tar.bz2 dexon-sol-tools-22de68205b3ef309222d71e72089c75184365d4a.tar.lz dexon-sol-tools-22de68205b3ef309222d71e72089c75184365d4a.tar.xz dexon-sol-tools-22de68205b3ef309222d71e72089c75184365d4a.tar.zst dexon-sol-tools-22de68205b3ef309222d71e72089c75184365d4a.zip |
Add version matcher script
Diffstat (limited to 'packages/monorepo-scripts/src')
-rw-r--r-- | packages/monorepo-scripts/src/deps_versions.ts | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/packages/monorepo-scripts/src/deps_versions.ts b/packages/monorepo-scripts/src/deps_versions.ts new file mode 100644 index 000000000..b07aac995 --- /dev/null +++ b/packages/monorepo-scripts/src/deps_versions.ts @@ -0,0 +1,59 @@ +#!/usr/bin/env node + +import chalk from 'chalk'; +import * as fs from 'fs'; +import {sync as globSync} from 'glob'; +import * as _ from 'lodash'; + +interface Dependencies { + [depName: string]: string; +} +interface Versions { + [packageName: string]: string; +} +interface VersionsByDependency { + [depName: string]: Versions; +} + +function log(...args: any[]) { + console.log(...args); // tslint:disable-line:no-console +} + +function getDependencies(path: string): Dependencies { + const file = fs.readFileSync(path).toString(); + const parsed = JSON.parse(file); + const dependencies = { + ...parsed.dependencies, + ...parsed.devDependencies, + }; + return dependencies; +} + +function getPackageName(path: string): string { + const [dotDot, packageName, packageJSON] = path.split('/'); + return packageName; +} + +const files = globSync('../*/package.json'); +const versionsByDependency: VersionsByDependency = {}; +files.map(path => { + const packageName = getPackageName(path); + const dependencies = getDependencies(path); + _.map(dependencies, (version: string, depName: string) => { + if (_.isUndefined(versionsByDependency[depName])) { + versionsByDependency[depName] = {}; + } + versionsByDependency[depName][packageName] = version; + }); +}); + +_.map(versionsByDependency, (versions: Versions, depName: string) => { + if (_.uniq(_.values(versions)).length === 1) { + delete versionsByDependency[depName]; + } else { + log(chalk.bold(depName)); + _.map(versions, (version: string, packageName: string) => { + log(`├── ${packageName} -> ${version}`); + }); + } +}); |