32 lines
874 B
JavaScript
32 lines
874 B
JavaScript
|
'use strict'
|
||
|
|
||
|
const { promisify } = require('util')
|
||
|
|
||
|
const fs = require('./wrapped-fs')
|
||
|
const glob = promisify(require('glob'))
|
||
|
|
||
|
async function determineFileType (filename) {
|
||
|
const stat = await fs.lstat(filename)
|
||
|
if (stat.isFile()) {
|
||
|
return { type: 'file', stat }
|
||
|
} else if (stat.isDirectory()) {
|
||
|
return { type: 'directory', stat }
|
||
|
} else if (stat.isSymbolicLink()) {
|
||
|
return { type: 'link', stat }
|
||
|
}
|
||
|
}
|
||
|
|
||
|
module.exports = async function (dir, options) {
|
||
|
const metadata = {}
|
||
|
const crawled = await glob(dir, options)
|
||
|
const results = await Promise.all(crawled.map(async filename => [filename, await determineFileType(filename)]))
|
||
|
const filenames = results.map(([filename, type]) => {
|
||
|
if (type) {
|
||
|
metadata[filename] = type
|
||
|
}
|
||
|
return filename
|
||
|
})
|
||
|
return [filenames, metadata]
|
||
|
}
|
||
|
module.exports.determineFileType = determineFileType
|