wallet-core/node_modules/hullabaloo-config-manager/lib/hashSources.js

52 lines
1.3 KiB
JavaScript
Raw Normal View History

2017-05-28 00:38:50 +02:00
'use strict'
const path = require('path')
const dotProp = require('dot-prop')
const md5Hex = require('md5-hex')
const errors = require('./errors')
const readSafe = require('./readSafe')
function hashSource (source, cache) {
if (cache && cache.sourceHashes && cache.sourceHashes.has(source)) {
return cache.sourceHashes.get(source)
}
const basename = path.basename(source)
const parts = basename.split('#')
const filename = parts[0]
const filepath = path.join(path.dirname(source), filename)
const pkgAccessor = filename === 'package.json'
? parts[1] || 'babel'
: null
const promise = readSafe(filepath, cache)
.then(contents => {
if (!contents) throw new errors.NoSourceFileError(source)
if (!pkgAccessor) {
return md5Hex(contents)
}
const json = JSON.parse(contents.toString('utf8'))
const value = dotProp.get(json, pkgAccessor) || {}
return md5Hex(JSON.stringify(value))
})
if (cache && cache.sourceHashes) {
cache.sourceHashes.set(source, promise)
}
return promise
}
function hashSources (sources, fixedHashes, cache) {
const promises = sources.map(item => {
if (fixedHashes && fixedHashes.has(item.source)) return fixedHashes.get(item.source)
return hashSource(item.source, cache)
})
return Promise.all(promises)
}
module.exports = hashSources