@bbnet/roster
Version:
a list of known public federation servers
71 lines (67 loc) • 1.64 kB
JavaScript
const validate = require('validate.js')
const glob = require('glob')
const Q = require('q')
const fs = require('fs')
const schema = {
shortcode: {
format: {
pattern: /^[A-Z0-9]+$/
},
presence: true
},
name: {
presence: true
},
url: {
url: true,
presence: true
}
}
new Promise(function (resolve, reject) {
glob('src/*.json', null, function (err, files) {
(err) ? reject(err) : resolve(files)
})
}).then(function (files) {
return Q.allSettled(files.map(function (file) {
return new Promise(function (resolve, reject) {
fs.readFile(file, function (err, data) {
if (err) {
reject(err)
} else {
try {
resolve({name: file, data: JSON.parse(data)})
} catch (e) {
reject(e)
}
}
})
})
}))
}).then(function (res) {
const data = res.map(function (o) {
return {err: validate(o.value.data, schema), value: o.value}
}).filter(function (o) {
if (o.err) {
console.error(o.value.name, o.err)
return false
} else {
return true
}
}).map(function (o) {
return o.value.data
})
const value = JSON.stringify(data)
return Q.all([
new Promise(function (resolve, reject) {
fs.writeFile('data.json', value, function (err) {
(err) ? reject(err) : resolve('ok')
})
}),
new Promise(function (resolve, reject) {
const index = 'module.exports = ' + value
fs.writeFile('index.js', index, function (err) {
(err) ? reject(err) : resolve('ok')
})
})
])
}).then(console.log).catch(console.error)