2017-10-28 13:23:56 +02:00
|
|
|
const { forEach, fromCallback } = require('promise-toolbox')
|
|
|
|
|
const fs = require('fs')
|
|
|
|
|
|
2018-02-01 11:28:16 +01:00
|
|
|
const ROOT_DIR = `${__dirname}/..`
|
2017-10-28 13:23:56 +02:00
|
|
|
|
2018-02-01 11:28:16 +01:00
|
|
|
const _getPackages = scope => {
|
|
|
|
|
const inScope = scope !== undefined
|
2018-04-15 23:41:18 +02:00
|
|
|
const relativeDir = inScope ? scope : 'packages'
|
|
|
|
|
const dir = `${ROOT_DIR}/${relativeDir}`
|
2019-11-25 12:34:21 +01:00
|
|
|
return fromCallback(fs.readdir, dir).then(names =>
|
2018-02-01 11:28:16 +01:00
|
|
|
names.map(name => ({
|
|
|
|
|
dir: `${dir}/${name}`,
|
|
|
|
|
name: inScope ? `${scope}/${name}` : name,
|
2018-04-15 23:41:18 +02:00
|
|
|
relativeDir: `${relativeDir}/${name}`,
|
2017-10-28 13:23:56 +02:00
|
|
|
}))
|
2018-02-01 11:28:16 +01:00
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
exports.getPackages = (readPackageJson = false) => {
|
2020-05-28 14:34:20 +02:00
|
|
|
const p = Promise.all([
|
|
|
|
|
_getPackages(),
|
|
|
|
|
_getPackages('@vates'),
|
|
|
|
|
_getPackages('@xen-orchestra'),
|
|
|
|
|
]).then(pkgs => {
|
|
|
|
|
pkgs = [].concat(...pkgs) // flatten
|
|
|
|
|
return readPackageJson
|
|
|
|
|
? Promise.all(
|
|
|
|
|
pkgs.map(pkg =>
|
|
|
|
|
readFile(`${pkg.dir}/package.json`).then(data => {
|
|
|
|
|
pkg.package = JSON.parse(data)
|
|
|
|
|
return pkg
|
|
|
|
|
}, noop)
|
|
|
|
|
)
|
|
|
|
|
).then(pkgs => pkgs.filter(pkg => pkg !== undefined))
|
|
|
|
|
: pkgs
|
|
|
|
|
})
|
2017-10-28 13:23:56 +02:00
|
|
|
p.forEach = fn => p.then(pkgs => forEach.call(pkgs, fn))
|
|
|
|
|
p.map = fn => p.then(pkgs => Promise.all(pkgs.map(fn))).then(noop)
|
|
|
|
|
return p
|
|
|
|
|
}
|
|
|
|
|
|
2018-02-09 17:56:03 +01:00
|
|
|
const noop = (exports.noop = () => {})
|
2017-10-28 13:23:56 +02:00
|
|
|
|
2018-02-09 17:56:03 +01:00
|
|
|
const readFile = (exports.readFile = file =>
|
2019-11-25 12:34:21 +01:00
|
|
|
fromCallback(fs.readFile, file, 'utf8'))
|
2017-10-28 13:23:56 +02:00
|
|
|
|
2018-02-09 17:56:03 +01:00
|
|
|
exports.unlink = path =>
|
2019-11-25 12:34:21 +01:00
|
|
|
fromCallback(fs.unlink, path).catch(error => {
|
2018-02-09 17:56:03 +01:00
|
|
|
if (error.code !== 'ENOENT') {
|
|
|
|
|
throw error
|
|
|
|
|
}
|
|
|
|
|
})
|
2017-10-28 13:23:56 +02:00
|
|
|
|
2019-11-25 12:34:21 +01:00
|
|
|
exports.writeFile = (file, data) => fromCallback(fs.writeFile, file, data)
|