1 | 'use strict'
|
2 |
|
3 | const sortBy = require('lodash.sortby')
|
4 | const collection = require('./analysed-files-collection')
|
5 |
|
6 | module.exports = (local, remote) => ({
|
7 | analyse: async () => {
|
8 | const remoteFiles = await remote.files()
|
9 | const localFiles = await local.all()
|
10 | .then(files => files.map(file => file.name))
|
11 |
|
12 | const filesWithTheirMappedOrigin = [
|
13 | remoteFiles.map(name => ({ name, origin: 'remote' })),
|
14 | localFiles.map(name => ({ name, origin: 'local' }))
|
15 | ].reduce((flat, files) => flat.concat(files))
|
16 |
|
17 | const files = Object.values(
|
18 | filesWithTheirMappedOrigin.reduce((obj, file) => {
|
19 | const { name, origin } = file
|
20 | obj[name] = obj[name] || { name, locations: [] }
|
21 | obj[name].locations.push(origin)
|
22 | return obj
|
23 | }, {})
|
24 | )
|
25 |
|
26 | return collection(sortBy(files, ['name']))
|
27 | }
|
28 | })
|