Add version matcher script
This commit is contained in:
		
							
								
								
									
										33
									
								
								packages/monorepo-scripts/package.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								packages/monorepo-scripts/package.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,33 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "name": "@0xproject/monorepo-scripts",
 | 
				
			||||||
 | 
					  "version": "0.0.0",
 | 
				
			||||||
 | 
					  "description": "Helper scripts for the monorepo",
 | 
				
			||||||
 | 
					  "scripts": {
 | 
				
			||||||
 | 
					    "deps_versions": "node ./lib/deps_versions.js",
 | 
				
			||||||
 | 
					    "lint": "tslint --project . 'src/**/*.ts'",
 | 
				
			||||||
 | 
					    "clean": "shx rm -rf lib",
 | 
				
			||||||
 | 
					    "build": "tsc"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  "repository": {
 | 
				
			||||||
 | 
					    "type": "git",
 | 
				
			||||||
 | 
					    "url": "https://github.com/0xProject/0x.js.git"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  "license": "Apache-2.0",
 | 
				
			||||||
 | 
					  "bugs": {
 | 
				
			||||||
 | 
					    "url": "https://github.com/0xProject/0x.js/issues"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  "homepage": "https://github.com/0xProject/0x.js/packages/monorepo-scripts/README.md",
 | 
				
			||||||
 | 
					  "devDependencies": {
 | 
				
			||||||
 | 
					    "@0xproject/tslint-config": "^0.2.0",
 | 
				
			||||||
 | 
					    "@types/glob": "^5.0.33",
 | 
				
			||||||
 | 
					    "@types/node": "^8.0.53",
 | 
				
			||||||
 | 
					    "shx": "^0.2.2",
 | 
				
			||||||
 | 
					    "tslint": "5.8.0",
 | 
				
			||||||
 | 
					    "typescript": "~2.6.1"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  "dependencies": {
 | 
				
			||||||
 | 
					    "chalk": "^2.3.0",
 | 
				
			||||||
 | 
					    "glob": "^7.1.2",
 | 
				
			||||||
 | 
					    "lodash": "^4.17.4"
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										59
									
								
								packages/monorepo-scripts/src/deps_versions.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								packages/monorepo-scripts/src/deps_versions.ts
									
									
									
									
									
										Normal file
									
								
							@@ -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}`);
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
							
								
								
									
										13
									
								
								packages/monorepo-scripts/tsconfig.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								packages/monorepo-scripts/tsconfig.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "compilerOptions": {
 | 
				
			||||||
 | 
					    "module": "commonjs",
 | 
				
			||||||
 | 
					    "target": "es5",
 | 
				
			||||||
 | 
					    "lib": ["es2015", "dom"],
 | 
				
			||||||
 | 
					    "outDir": "lib",
 | 
				
			||||||
 | 
					    "noImplicitAny": true,
 | 
				
			||||||
 | 
					    "strictNullChecks": true
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  "include": [
 | 
				
			||||||
 | 
					    "./src/**/*"
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										5
									
								
								packages/monorepo-scripts/tslint.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								packages/monorepo-scripts/tslint.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "extends": [
 | 
				
			||||||
 | 
					    "@0xproject/tslint-config"
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user