rinco
Version:
A static website generator
131 lines (110 loc) • 3.47 kB
JavaScript
/* jslint node: true */
/*!
* rinco
* Copyright(c) 2014 Allan Esquina
* MIT Licensed
*/
var m = {};
var connect = require('connect');
var http = require("http");
var https = require("https");
var fs = require('./fs');
var watch = require('./watch');
var _args = process.argv.slice(2);
var exts = ['.html'];
var sh = require('shelljs');
var config = require('./constants');
var m = {};
var port;
var url = require('url');
m.io = require("socket.io");
/**
* Start the development server
*
* @example
*
* rinco.server.start();
*
* @param {string[]} Array with middlewares's names you want to ignore
* @api public
*/
m.start = function (ignore_middlewares_list, port) {
var render = require('./render');
config.INFO.action = 'dev';
ignore_middlewares_list = ignore_middlewares_list || [];
port = port || _args[1] || config.SERVER_PORT;
var server = connect()
.use(connect.logger('dev'))
.use(connect.static(config.RELATIVE_PATH))
.use(connect.static(config.PUBLIC_DIR))
.use(callbackServer);
function callbackServer(req, res) {
var url_parts = url.parse(req.url, true);
var query = url_parts.query;
var ext = fs.path.extname(url_parts.pathname).substr(1);
// CSS/JS validation
if(ext === 'css' || ext === 'js') {
var compile = require('./compile');
compile['to' + ext](query.files.split('|'), function (content) {
res.end(content);
})
} else {
var file = exts.indexOf(fs.path.extname(req.url)) !== -1 ? req.url : fs.path.join(req.url, 'index.html');
render.file(fs.path.join(config.PAGES_DIR, file), function (content) {
// Send response to client
if(content !== 'false'){
res.end(content);
} else {
res.end('<h1>404 - file ' + fs.path.join(config.PAGES_DIR, file) + ' not found</h1>');
}
}, ignore_middlewares_list);
}
}
// start server listen
var devServer = http.createServer(server).listen(port);
// start socket
m.io = m.io.listen(devServer, {log:false});
m.io.sockets.on('connection', function (socket) {});
// reduce logging
m.io.set('log level', 1);
sh.echo('--------------------------------------------------- '.grey);
sh.echo(' * Server started on http://localhost:'.blue +port);
sh.echo('--------------------------------------------------- '.grey);
// start watch files
watch.init(m.io);
};
/**
* Do a request
*
* @example
*
* rinco.server.get('https://raw.githubusercontent.com', '/rincojs/rinco-staticgen/master/templates/available.json', function (data) {
* console.log(data);
* });
*
* @param {string} hostname
* @param {string} path
* @param {cb_get} content
* @api public
*/
m.get = function (hostname, path, fn, port) {
var isSSL = hostname.indexOf('https') !== -1;
var _port = isSSL ? 443 : 80;
http = isSSL ? https : http;
port = port ? port : _port;
var options = {
hostname: hostname.replace(/http[s]?:\/\//,''),
port:port,
path: path,
method: 'GET',
headers: { 'Content-Type': 'application/json' }
};
var req = http.get(options, function(res) {
res.setEncoding('utf8');
res.on('data', function (data) {
(fn && fn.call && fn.call(null, data))
});
});
};
module.exports = m;