Last active
January 4, 2021 07:47
-
-
Save jsnajdr/1fa47dfd8f330b5f774711298f0f26ed to your computer and use it in GitHub Desktop.
List installed @wordpress/* package in your wp-calypso repo
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const globby = require( 'globby' ); | |
const fs = require( 'fs' ); | |
function list_dirs( glob ) { | |
return globby.sync( glob, { onlyDirectories: true } ); | |
} | |
const dirs = [ '.', './client', ...list_dirs( './apps/*' ), ...list_dirs( './packages/*' ) ]; | |
function pkg_name( dir ) { | |
const parts = dir.split( '/' ); | |
const name = parts[ parts.length - 1 ]; | |
const ns = parts[ parts.length - 2 ]; | |
if ( ns.startsWith( '@' ) ) { | |
return ns + '/' + name; | |
} | |
return name; | |
} | |
function dir_name( dir ) { | |
const parts = dir.split( '/' ); | |
return parts[ parts.length - 1 ]; | |
} | |
function is_symlink( dir ) { | |
return fs.lstatSync( dir ).isSymbolicLink(); | |
} | |
function is_wp_package( name ) { | |
return /^@wordpress\/.+/.test( name ); | |
} | |
function* pkg_dirs( dir ) { | |
for ( const pkg_dir of list_dirs( dir + '/node_modules/*' ) ) { | |
if ( dir_name( pkg_dir ).startsWith( '@' ) ) { | |
for ( const ns_dir of list_dirs( pkg_dir + '/*' ) ) { | |
yield ns_dir; | |
} | |
} else { | |
yield pkg_dir; | |
} | |
} | |
} | |
const found_pkgs = new Map(); | |
function add_pkg( name, version, dir ) { | |
let record = found_pkgs.get( name ); | |
if ( ! record ) { | |
record = []; | |
found_pkgs.set( name, record ); | |
} | |
record.push( { version, dir } ); | |
} | |
function trav_dir( dir ) { | |
for ( const pkg_dir of pkg_dirs( dir ) ) { | |
if ( is_symlink( pkg_dir ) ) { | |
continue; | |
} | |
const name = pkg_name( pkg_dir ); | |
if ( is_wp_package( name ) ) { | |
const pkg_json = JSON.parse( fs.readFileSync( pkg_dir + '/package.json' ) ); | |
add_pkg( name, pkg_json.version, dir + '/node_modules' ); | |
} | |
trav_dir( pkg_dir ); | |
} | |
} | |
for ( const dir of dirs ) { | |
trav_dir( dir ); | |
} | |
const entries = Array.from( found_pkgs.entries() ); | |
entries.sort( ( a, b ) => b[ 1 ].length - a[ 1 ].length ); | |
for ( const [ name, list ] of entries ) { | |
if ( list.length < 2 ) { | |
continue; | |
} | |
console.log( name ); | |
for ( const { version, dir } of list ) { | |
console.log( ' ' + version + ' in ' + dir ); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment