mirror of https://github.com/Seich/Beau.git
55 lines
1.1 KiB
JavaScript
55 lines
1.1 KiB
JavaScript
const deepMerge = require('deepmerge');
|
|
|
|
const RequestList = require('./requestList');
|
|
const requestRegex = require('./shared').requestRegex;
|
|
|
|
class Beau {
|
|
constructor(doc) {
|
|
this.defaults = {
|
|
VERSION: 1,
|
|
CACHE: false,
|
|
ENDPOINT: '',
|
|
PLUGINS: [],
|
|
DEFAULTS: []
|
|
};
|
|
|
|
this.configKeys = Object.keys(this.defaults);
|
|
this.config = this.loadConfig(doc);
|
|
this.requests = this.getRequests(doc);
|
|
this.requests = new RequestList(this.requests, this.config);
|
|
}
|
|
|
|
getRequests(doc) {
|
|
let requests = Object.keys(doc).filter(key => {
|
|
return requestRegex.test(key);
|
|
});
|
|
|
|
let results = {};
|
|
requests.forEach(r => {
|
|
if (typeof doc[r] === 'string') {
|
|
results[r] = {
|
|
ALIAS: doc[r]
|
|
};
|
|
} else {
|
|
results[r] = doc[r];
|
|
}
|
|
|
|
results[r] = deepMerge(this.config.DEFAULTS, results[r]);
|
|
});
|
|
|
|
return results;
|
|
}
|
|
|
|
loadConfig(doc) {
|
|
let result = this.defaults;
|
|
|
|
Object.keys(doc)
|
|
.filter(k => this.configKeys.indexOf(k.toUpperCase()) > -1)
|
|
.forEach(k => (result[k.toUpperCase()] = doc[k]));
|
|
|
|
return result;
|
|
}
|
|
}
|
|
|
|
module.exports = Beau;
|