UNPKG

qwebs

Version:
71 lines (51 loc) 2.2 kB
/*! * qwebs * Copyright(c) 2016 Benoît Claveau * MIT Licensed */ "use strict"; var fs = require("fs"), path = require("path"), DataError = require("./../dataerror"), Q = require("q"); function QwebsLoader (){ }; QwebsLoader.prototype.constructor = QwebsLoader; QwebsLoader.prototype.load = function($qwebs) { if (!$qwebs) throw new DataError({ message: "Qwebs instance is not defined." }); var $config = $qwebs.resolve("$config"); return Q.try(function() { var filepath = $config.routes; if (!filepath) return {}; if (typeof filepath == "string") { try { filepath = path.resolve($qwebs.root, filepath); return Q.ninvoke(fs, "readFile", filepath).then(function(str) { return JSON.parse(str); }); } catch(error) { throw new DataError({ message: "Failed to read the bundle file: " + filepath + ". " + error.message }); } } else if (filepath instanceof Object) return filepath; else throw new DataError({ message: "Qwebs type is not managed." }); }).then(function(routes) { //inject services routes.services = routes.services || []; routes.services.forEach(function(service) { $qwebs.inject(service.name, service.location, service.options); }); return routes; }).then(function(routes) { //load locators routes.locators = routes.locators || []; routes.locators.forEach(function(locator) { if (locator.get) $qwebs.get(locator.get, locator.service, locator.method); else if (locator.post) $qwebs.get(locator.post, locator.service, locator.method); else if (locator.put) $qwebs.get(locator.put, locator.service, locator.method); else if (locator.delete) $qwebs.get(locator.delete, locator.service, locator.method); }); return routes; }) }; exports = module.exports = new QwebsLoader();