Repository URL to install this package:
|
Version:
3.1.0 ▾
|
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _config = require('config');
var _config2 = _interopRequireDefault(_config);
var _debug = require('debug');
var _debug2 = _interopRequireDefault(_debug);
var _fs = require('fs');
var _fs2 = _interopRequireDefault(_fs);
var _path = require('path');
var _path2 = _interopRequireDefault(_path);
var _express = require('express');
var _express2 = _interopRequireDefault(_express);
var _os = require('os');
var _os2 = _interopRequireDefault(_os);
var _morgan = require('morgan');
var _morgan2 = _interopRequireDefault(_morgan);
var _stylus = require('stylus');
var _stylus2 = _interopRequireDefault(_stylus);
var _nib = require('nib');
var _nib2 = _interopRequireDefault(_nib);
var _connectCoffeeScript = require('connect-coffee-script');
var _connectCoffeeScript2 = _interopRequireDefault(_connectCoffeeScript);
var _routeBuilder = require('./route-builder');
var _routeBuilder2 = _interopRequireDefault(_routeBuilder);
var _nunjucksInit = require('./nunjucks-init');
var _nunjucksInit2 = _interopRequireDefault(_nunjucksInit);
var _swigInit = require('./swig-init');
var _swigInit2 = _interopRequireDefault(_swigInit);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var debug = (0, _debug2.default)('touchto:app'); /* eslint-disable global-require, import/no-dynamic-require, no-console, arrow-body-style */
var basepath = process.cwd();
var tmp = _os2.default.tmpdir();
var app = (0, _express2.default)();
// ************************
// ***** Log requests *****
// ************************
if (app.get('env') === 'development') {
app.use((0, _morgan2.default)('dev'));
} else {
app.use((0, _morgan2.default)('combined'));
}
// *****************************
// ***** Get package info ******
// *****************************
var pkg = _fs2.default.readFileSync(_path2.default.resolve(_path2.default.join(basepath, 'package.json')), 'utf-8');
pkg = JSON.parse(pkg);
// *****************************
// ***** CSS Pre-processor *****
// *****************************
var cssTmpPath = pkg.name.replace(/[^a-z0-9]/gi, '') + '\n _css_\n ' + pkg.version.replace(/\./g, '-');
cssTmpPath = _path2.default.resolve(tmp, cssTmpPath);
var stylusdefaults = {
compress: !app.get('env') === 'development',
// Base64 encode CSS sourcemaps, devtools can read them, sweet!
sourcemap: app.get('env') === 'development' ? false : { inline: true }
};
app.use('/css', _stylus2.default.middleware({
src: _path2.default.join(basepath, 'client/styles'),
dest: cssTmpPath,
compile: function compile(str, filePath) {
return (0, _stylus2.default)(str).set('filename', filePath).set('compress', stylusdefaults.compress).set('sourcemap', stylusdefaults.sourcemap).use((0, _nib2.default)());
}
}));
app.use('/css', _express2.default.static(cssTmpPath));
// ****************************
// ***** Bower Components *****
// ****************************
app.use('/components', _express2.default.static(_path2.default.join(basepath, 'bower_components')));
// ********************************
// ***** Coffee Pre-processor ***** (Hopefully wont be necessary)
// ********************************
var scriptTmpPath = pkg.name.replace(/[^a-z0-9]/gi, '') + '\n _js_\n ' + pkg.version.replace(/\./g, '-');
scriptTmpPath = _path2.default.resolve(tmp, scriptTmpPath);
app.use('/js', (0, _connectCoffeeScript2.default)({
force: true,
src: _path2.default.join(basepath, 'client/scripts'),
dest: scriptTmpPath,
bare: true,
sourceMap: app.get('env') === 'development',
sourceMapRoot: '/source'
}));
app.use('/js', _express2.default.static(scriptTmpPath));
if (app.get('env') === 'development') {
app.use('/source', _express2.default.static(scriptTmpPath));
app.use('/source', _express2.default.static(_path2.default.join(basepath, 'client/scripts')));
}
app.use('images', _express2.default.static(_path2.default.join(basepath, 'client/images')));
// **********************************
// ******** Template engines ********
// **********************************
// Nunjucks
(0, _nunjucksInit2.default)(app);
// Swig
(0, _swigInit2.default)(app);
// Default to swig when no extension is shown.
app.set('view engine', 'html');
// ********************************
// ******** Access Control ********
// ********************************
var allowed = _config2.default.has('allowed-hosts') ? _config2.default.get('allowed-hosts') : [];
if (allowed.length > 0) {
var accessControl = require('./access-control');
app.use(accessControl);
}
// ************************
// ******** Routes ********
// ************************
var routedirs = {};
var routesRestOpen = _path2.default.join(basepath, 'server', 'routes-rest-open');
var routesOpen = _path2.default.join(basepath, 'server', 'routes-open');
try {
debug('reading for open rest endpoints');
var stat = _fs2.default.statSync(routesRestOpen);
if (stat.isDirectory()) routedirs.restopen = true;
} catch (err) {
debug('Error readig open rest endpoints: ', err);
}
try {
debug('reading for open endpoints');
var _stat = _fs2.default.statSync(routesOpen);
if (_stat.isDirectory()) routedirs.open = true;
} catch (err) {
debug('Error readig open endpoints: ', err);
}
if (routedirs.restopen) app.use((0, _routeBuilder2.default)({ rest: true }, routesRestOpen));
if (routedirs.open) app.use((0, _routeBuilder2.default)(routesOpen));
// ********************************
// ******** Session Routes ********
// ********************************
if (_config2.default.has('session.enabled') && _config2.default.get('session.enabled') === true) {
var session = require('./session');
app.use(session);
var routesRest = _path2.default.join(basepath, 'server', 'routes-rest');
var routes = _path2.default.join(basepath, 'server', 'routes');
try {
debug('Reading for authed rest endpoints');
var _stat2 = _fs2.default.statSync(routesRest);
if (_stat2.isDirectory()) routedirs.rest = true;
} catch (err) {
debug('Error readig authed rest endpoints: ', err);
}
try {
debug('Reading for authed endpoints');
var _stat3 = _fs2.default.statSync(routes);
if (_stat3.isDirectory()) routedirs.sec = true;
} catch (err) {
debug('Error readig authed endpoints: ', err);
}
if (routedirs.rest) session.use((0, _routeBuilder2.default)({ rest: true }, routesRest));
if (routedirs.sec) session.use((0, _routeBuilder2.default)(routes));
}
// ********************************
// ******** Error Handling ********
// ********************************
app.use(function (req, res) {
res.sendStatus(404);
});
if (app.get('env') === 'development') {
app.use(function (err, req, res) {
res.status(err.status || 500);
if (req.data !== undefined) {
req.data.error = {
message: err.message,
err: err
};
} else {
req.data = {
app: _config2.default.has('app') ? _config2.default.get('app') : '',
error: {
message: err.message,
err: err
}
};
}
if (!req.xhr) {
res.render('error', req.data);
} else {
res.send({
message: err.message,
status: err.status
});
}
console.error(err);
});
} else {
app.use(function (err, req, res) {
res.satus(err.status || 500);
if (!req.xhr) {
res.render('error-friendly');
} else {
res.send({
message: 'Error occurred',
status: err.status
});
}
console.error(err);
});
}
exports.default = app;
module.exports = exports['default'];