151 lines
3.8 KiB
JavaScript
151 lines
3.8 KiB
JavaScript
let loopback = require('loopback');
|
|
let boot = require('loopback-boot');
|
|
let DataSource = require('loopback-datasource-juggler').DataSource;
|
|
let fs = require('fs-extra');
|
|
let i18n = require('i18n');
|
|
let path = require('path');
|
|
const loopbackConnector = require('loopback-connector');
|
|
|
|
let _resolveConnector = DataSource._resolveConnector;
|
|
|
|
DataSource._resolveConnector = function(name) {
|
|
let testPath = `${__dirname}/connectors/${name}.js`;
|
|
|
|
if (fs.existsSync(testPath))
|
|
return {
|
|
connector: require(testPath),
|
|
error: null
|
|
};
|
|
|
|
return _resolveConnector.apply(this, arguments);
|
|
};
|
|
|
|
module.exports = {
|
|
loopback: loopback,
|
|
loopbackConnector: loopbackConnector,
|
|
boot: vnBoot
|
|
};
|
|
|
|
function vnBoot(app, rootDir, rootModule) {
|
|
// Internationalization
|
|
|
|
let localeDir = `${__dirname}/../common/locale`;
|
|
|
|
if (fs.existsSync(localeDir)) {
|
|
i18n.configure({
|
|
directory: localeDir,
|
|
defaultLocale: 'es'
|
|
});
|
|
|
|
app.use(i18n.init);
|
|
}
|
|
|
|
// View
|
|
|
|
let wpAssets;
|
|
let viewDir = `${rootDir}/../client`;
|
|
|
|
if (fs.existsSync(viewDir)) {
|
|
try {
|
|
wpAssets = require('../client/webpack-assets.json');
|
|
} catch (e) {}
|
|
|
|
app.set('view engine', 'ejs');
|
|
app.set('views', viewDir);
|
|
app.use(loopback.static(path.resolve(rootDir, '../client')));
|
|
}
|
|
|
|
const buildVersion = new Date().getTime();
|
|
|
|
app.renderIndex = async res => {
|
|
res.render(`${viewDir}/index.ejs`, {
|
|
assets: assets,
|
|
version: buildVersion
|
|
});
|
|
|
|
function assets(main, deps) {
|
|
let jsFiles;
|
|
|
|
if (wpAssets) {
|
|
jsFiles = [wpAssets.manifest.js];
|
|
|
|
for (let dep of deps)
|
|
jsFiles.push(wpAssets[dep].js);
|
|
|
|
jsFiles.push(wpAssets[main].js);
|
|
} else {
|
|
let publicPath = '/static';
|
|
jsFiles = [`${publicPath}/manifest.js`];
|
|
|
|
for (let dep of deps)
|
|
jsFiles.push(`${publicPath}/${dep}.js`);
|
|
|
|
jsFiles.push(`${publicPath}/${main}.js`);
|
|
}
|
|
|
|
return jsFiles;
|
|
}
|
|
};
|
|
|
|
// Initialization
|
|
|
|
app.start = port => {
|
|
function onListen() {
|
|
app.emit('started');
|
|
let packageJson = require(`${rootDir}/../package.json`);
|
|
let appName = packageJson.name;
|
|
let baseUrl = app.get('url').replace(/\/$/, '');
|
|
console.log(`Web server ${appName} listening at: %s`, `${baseUrl}/explorer`);
|
|
}
|
|
|
|
let args = port ? [port, onListen] : [onListen];
|
|
return app.listen.apply(app, args);
|
|
};
|
|
|
|
let config = require('./config.json');
|
|
|
|
for (let key in config) {
|
|
app.set(key, config[key]);
|
|
}
|
|
|
|
let modelConfigFiles = [
|
|
`${__dirname}/model-config.json`,
|
|
`${rootDir}/model-config.json`
|
|
];
|
|
|
|
let modelConfig = {};
|
|
|
|
for (file of modelConfigFiles)
|
|
if (fs.existsSync(file))
|
|
Object.assign(modelConfig, require(file));
|
|
|
|
let bootOptions = {
|
|
appRootDir: __dirname,
|
|
appConfigRootDir: rootDir,
|
|
modelsRootDir: rootDir,
|
|
models: modelConfig,
|
|
modelSources: [
|
|
`loopback/common/models`,
|
|
`loopback/server/models`,
|
|
`${__dirname}/../common/models`,
|
|
`${rootDir}/../common/models`
|
|
],
|
|
mixinDirs: [
|
|
`loopback/common/mixins`,
|
|
`loopback/server/mixins`,
|
|
`${__dirname}/../common/mixins`,
|
|
`${rootDir}/../common/mixins`
|
|
],
|
|
bootDirs: [
|
|
`${__dirname}/boot`,
|
|
`${rootDir}/boot`
|
|
]
|
|
};
|
|
|
|
boot(app, bootOptions, function(err) {
|
|
if (err) throw err;
|
|
if (require.main === rootModule)
|
|
app.start();
|
|
});
|
|
}
|