Skip to content

Instantly share code, notes, and snippets.

@thiagoa
Last active July 20, 2017 03:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save thiagoa/3b024c2dbcde96809cd512f285fbef88 to your computer and use it in GitHub Desktop.
Save thiagoa/3b024c2dbcde96809cd512f285fbef88 to your computer and use it in GitHub Desktop.
const test = require('tape');
function resolver(deps) {
function directDeps(className) {
return deps[className] || [];
}
function transitiveDeps(className) {
return directDeps(className).reduce((set, className) => {
[className, ...transitiveDeps(className)].forEach((v) => set.add(v));
return set;
}, new Set());
}
function resolve(className) {
return [...transitiveDeps(className)].sort();
}
return { resolve };
}
test('resolves dependencies for any given class', (assert) => {
deps = resolver({
A: ['B', 'C'],
B: ['C', 'E'],
C: ['G'],
D: ['A', 'F'],
E: ['F'],
F: ['H']
});
assert.deepEqual(deps.resolve('A'), ['B', 'C', 'E', 'F', 'G', 'H']);
assert.deepEqual(deps.resolve('B'), ['C', 'E', 'F', 'G', 'H']);
assert.deepEqual(deps.resolve('C'), ['G']);
assert.deepEqual(deps.resolve('D'), ['A', 'B', 'C', 'E', 'F', 'G', 'H']);
assert.deepEqual(deps.resolve('E'), ['F', 'H']);
assert.deepEqual(deps.resolve('F'), ['H']);
assert.end();
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment