Skip to content

Instantly share code, notes, and snippets.

@ierceg
Last active March 25, 2016 05:23
Show Gist options
  • Save ierceg/ab7178940360b5f727e6 to your computer and use it in GitHub Desktop.
Save ierceg/ab7178940360b5f727e6 to your computer and use it in GitHub Desktop.
Dump installed, referenced and dev referenced npm packages
// Run this script from a directory above the packages you are analyzing
/* global process */
'use strict';
var _ = require('lodash');
var glob = require('glob');
var path = require('path');
var installedPackages = {};
var referencedPackages = {};
var devReferencedPackages = {};
var parentDir = process.cwd();
var updatePackages = (packages, name, version) => {
var packageData = packages[name];
if (_.isUndefined(packageData)) {
packages[name] = packageData = {};
}
if (_.isUndefined(packageData[version])) {
packageData[version] = 1;
} else {
++packageData[version];
}
};
var dumpPackages = (title, packages) => {
console.log();
console.log(title);
console.log();
_.each(_.orderBy(_.keys(packages)), (packageKey) => {
console.log(packageKey);
var versions = packages[packageKey];
_.each(_.orderBy(_.keys(versions)), (version) => {
console.log('\t' + version + ' - ' + versions[version] + ' time(s)');
});
});
};
glob('**/package.json', (err, files) => {
if (err) {
console.log('Error', err);
return;
}
_.each(files, (file) => {
var packageMetadata = require(parentDir + '/' + file);
updatePackages(installedPackages, packageMetadata.name, packageMetadata.version);
_.each(packageMetadata.dependencies, (version, name) => {
updatePackages(referencedPackages, name, version);
});
_.each(packageMetadata.devDependencies, (version, name) => {
updatePackages(devReferencedPackages, name, version);
});
});
var possiblyAffectedPackages = {};
_.each(installedPackages, (versions, name) => {
if (_.includes(POSSIBLY_AFFECTED_MODULES, name)) {
possiblyAffectedPackages[name] = versions;
}
});
dumpPackages('## Installed packages', installedPackages);
dumpPackages('## Referenced packages', referencedPackages);
dumpPackages('## Development Referenced packages', devReferencedPackages);
dumpPackages('## Possibly affected installed packages', possiblyAffectedPackages);
});
var POSSIBLY_AFFECTED_MODULES = [
'abril-fatface',
'ada',
'after-time',
'alert',
'andthen',
'anglicize',
'ansi-codes',
'atbash',
'attr',
'attrs',
'available-slug',
'background-image',
'ballet',
'binding',
'bind-key',
'blending-modes',
'boxcars',
'brick',
'brick-browser',
'brick-browserify-plugin',
'brick-node',
'browserify-length',
'bud',
'bud-babelify',
'bud-browserify',
'bud-concat',
'bud-indexhtml',
'bud-live-server',
'call-all',
'categorize-files',
'center-box',
'centered',
'centered-cover-background',
'change-object',
'change-object-path',
'checkfor',
'circle',
'cli-form',
'cli-qa',
'combiner',
'comma-list',
'comp',
'concat',
'config-doc',
'core-modules',
'cover-background',
'create-temp-dir',
'debounce-fn',
'declarative-js',
'default-debug',
'delegate-dom',
'dom-children',
'dom-classes',
'dom-event',
'domflow',
'domquery',
'dom-select',
'dom-style',
'dom-tree',
'dom-value',
'door',
'duba',
'eksi-server',
'eksi-sozluk',
'english-time',
'environ',
'every-time',
'expand-home-dir',
'failing-code',
'failing-line',
'filename-id',
'filter-stack',
'findall',
'first-val',
'flat-glob',
'flatten-array',
'flickr-client',
'flickr-favorites',
'flickr-following',
'flickr-generate-urls',
'flickr-photo-brick',
'flickr-photo-info',
'flickr-photo-urls',
'flickr-recent',
'flickr-user',
'flickr-user-feed',
'fog',
'format-date',
'format-text',
'fox',
'functools',
'genpkg',
'get-json',
'get-object-path',
'gezi',
'gezi-core',
'go',
'go-api-starter',
'goodeggs-list',
'goodeggs-login',
'hide',
'highkick',
'htmlglue',
'html-patcher',
'iframe',
'ignore-doc',
'img',
'indev',
'indexhtml',
'indexhtml-cli',
'infinite-scroll',
'install-module',
'is-node',
'iter',
'join-params',
'jsify',
'json-resources',
'just-a-browserify-server',
'just-a-server',
'just-next-tick',
'juxt',
'key-event',
'keyname-of',
'keynames',
'kik',
'kik-starter',
'kurdish-time',
'left-pad',
'less-common-words',
'level-client',
'level-flush',
'level-json',
'level-json-cache',
'level-json-wrapper',
'limited-parallel-loop',
'local-debug',
'lowkick',
'make-editable',
'map',
'matches-dom-selector',
'measure-time',
'media',
'medium-author',
'medium-post',
'memdiff',
'memoize-async',
'memoize-sync',
'memoize-with-leveldb',
'meta-tags',
'methodify',
'midibin-api',
'midi-instrument',
'midi-sdk',
'mime-of',
'mix-objects',
'most-common-turkish-words',
'most-common-words',
'mp3s',
'new-chain',
'new-command',
'new-element',
'new-empty-array',
'new-error',
'new-format',
'new-list',
'new-object',
'new-partial',
'new-prop',
'new-pubsub',
'new-range',
'new-reactive',
'new-struct',
'next-time',
'observer',
'one',
'on-key-press',
'on-off',
'ourtunes',
'outer-html',
'package-path',
'parallel-loop',
'parallelly',
'parse-path',
'pause-function',
'personal-api',
'play-audio',
'playfair-display',
'play-url',
'post-data',
'pref',
'prettify-error',
'prompt-input',
'propertify',
'property',
'prova',
'provinces',
'pt-mono',
'pt-serif',
'pubsub',
'radio-paradise-api',
'random-color',
'rdio-js-api',
'read-cli-input',
'read-json',
'redux-starter',
'refine-object',
'relative-date',
'remotely',
'render-loop',
'require-sdk',
'right-pad',
'rimraf-glob',
'rm-rf',
'rname',
'rnd',
'route-map',
'run-after',
'run-paralelly',
'run-serially',
'sanitize-object',
'scrape-eksi',
'scrape-pages',
'scrape-url',
'scraping-eksi',
'scroll-bottom',
'select-dom',
'serial-loop',
'serially',
'set-content-type',
'set-object-path',
'setup-docker',
'shell-jobs',
'show-help',
'show-version',
'shuffle-array',
'simple.io',
'simulate-touch',
'slug-to-title',
'socks-browser',
'soundcloud-stream',
'stream-format',
'strip',
'styled',
'style-dom',
'style-format',
'subscribe',
'subscription',
'title-from-url',
'toba-batak-dictionary',
'to-class-name',
'toledo-chess',
'to-slug',
'to-title',
'try-call',
'turkish-alphabet',
'turkish-synonyms-api',
'turkish-time',
'unique-now',
'uniques',
'userbook',
'uzo',
'validate-value',
'variable-name',
'video-canvas',
'video-dimensions',
'virtualbox',
'virtual-glue',
'virtual-html',
'watch-array',
'web-assets',
'with-env',
'wysiwyg',
'youtube-video'
];
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment