From c692a81fa9af17f691a20b8253cd6e2f8199c792 Mon Sep 17 00:00:00 2001 From: chee Date: Wed, 20 Feb 2019 10:14:04 +0000 Subject: [PATCH] Filter out duplicate dependency versions --- commands/depcount.js | 18 ++++++++++++++---- functions/recursors/count-dependencies.js | 13 ------------- .../recursors/gather-dependency-versions.js | 14 ++++++++++++++ 3 files changed, 28 insertions(+), 17 deletions(-) delete mode 100644 functions/recursors/count-dependencies.js create mode 100644 functions/recursors/gather-dependency-versions.js diff --git a/commands/depcount.js b/commands/depcount.js index ef86bd9..cc7686a 100644 --- a/commands/depcount.js +++ b/commands/depcount.js @@ -1,6 +1,6 @@ import {EOL} from "os" import getLockfile from "../functions/get-lockfile" -import countDependencies from "../functions/recursors/count-dependencies" +import gatherDependencyVersions from "../functions/recursors/gather-dependency-versions" import getLongestName from "../functions/recursors/get-longest-name" export let command = "depcount" @@ -31,19 +31,29 @@ export let builder = yargs => { } let sorts = { + dont: Function.prototype, count: ([, a], [, b]) => b - a, name: ([a, ], [b, ]) => a.localeCompare(b) } +let countVersions = ([name, versions]) => [ + name, + versions.length +] + +let minFilter = min => ([, count]) => + count >= min + export async function handler (argv) { let lockfile = await getLockfile(argv) - let counts = await countDependencies()(lockfile.dependencies) + let versions = await gatherDependencyVersions()(lockfile.dependencies) let longestName = await getLongestName()(lockfile.dependencies) - Object.entries(counts) + Object.entries(versions) + .map(countVersions) .sort(sorts[argv.sort]) - .filter(([, count]) => count >= argv.min) + .filter(minFilter(argv.min)) .forEach(([name, count]) => { process.stdout.write( name.padEnd(longestName.length, " ") + "\t" + count + EOL diff --git a/functions/recursors/count-dependencies.js b/functions/recursors/count-dependencies.js deleted file mode 100644 index dc3f832..0000000 --- a/functions/recursors/count-dependencies.js +++ /dev/null @@ -1,13 +0,0 @@ -import createRecursor from "../create-recursor" -import fastclone from "fast-clone" - -export let initial = {} - -export let createReducer = () => - function reducer (current, name) { - let counts = fastclone(current) - counts[name] = (counts[name] || 0) + 1 - return counts - } - -export default () => createRecursor(createReducer(), initial) diff --git a/functions/recursors/gather-dependency-versions.js b/functions/recursors/gather-dependency-versions.js new file mode 100644 index 0000000..adb26c0 --- /dev/null +++ b/functions/recursors/gather-dependency-versions.js @@ -0,0 +1,14 @@ +import createRecursor from "../create-recursor" +import fastclone from "fast-clone" + +export let initial = {} + +export let createReducer = () => + function reducer (current, name, info) { + let counts = fastclone(current) + counts[name] = [...new Set((counts[name] || []).concat(info.version))] + return counts + } + +let recursor = () => createRecursor(createReducer(), initial) +export default recursor