UNPKG

@bbnet/roster

Version:

a list of known public federation servers

71 lines (67 loc) 1.64 kB
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)