@ima/server
Version:
Default dev server for IMA.js applications.
108 lines (91 loc) • 2.69 kB
JavaScript
const path = require('path');
const defaultApplicationFolder = path.resolve('.');
const { createMonitoring } = require('@esmj/monitor');
const { Emitter, Event } = require('./lib/emitter.js');
const environmentFactory = require('./lib/factory/environmentFactory');
const urlParserFactory = require('./lib/factory/urlParserFactory');
const { sanitizeValue } = require('./lib/factory/utils/metaUtils');
const {
renderStyles,
renderScript,
} = require('./lib/factory/utils/resourcesUtils');
function createIMAServer({
environment,
logger,
emitter,
performance,
devUtils,
applicationFolder = defaultApplicationFolder,
processEnvironment,
} = {}) {
environment =
environment ||
require('./lib/factory/environmentFactory.js')({
applicationFolder,
processEnvironment,
});
devUtils =
devUtils ||
require('./lib/factory/devUtilsFactory.js')({ applicationFolder });
global.$Debug = environment.$Debug;
global.$IMA = global.$IMA || {};
function appFactory() {
devUtils.manifestRequire('server/vendors.js', {
optional: true,
dependencies: ['server/app.server.js'],
});
return devUtils.manifestRequire('server/app.server.js');
}
function languageLoader(language) {
return devUtils.manifestRequire(`server/locale/${language}.js`).default;
}
emitter = emitter || new Emitter({ logger, debug: false });
const instanceRecycler = require('./lib/instanceRecycler.js');
const serverGlobal = require('./lib/serverGlobal.js');
logger = logger || require('./lib/factory/loggerFactory.js')({ environment });
const concurrentRequestsMetric =
require('./lib/metric/concurrentRequestsMetricFactory.js')({
instanceRecycler,
});
performance = performance || createMonitoring();
performance.monitor.add(concurrentRequestsMetric);
performance.monitor.start();
const serverApp = require('./lib/factory/serverAppFactory.js')({
environment,
logger,
applicationFolder,
languageLoader,
appFactory,
emitter,
performance,
instanceRecycler,
serverGlobal,
});
const memStaticProxy =
require('./lib/middlewares/memStaticProxyMiddlewareFactory')();
const cache = require('./lib/cache.js')({ environment });
serverApp.useIMADefaultHook();
// Lazy init app factory
process.env.IMA_CLI_LAZY_SERVER !== 'true' && appFactory();
return {
environment,
serverApp,
logger,
cache,
instanceRecycler,
memStaticProxy,
emitter,
performance,
Event,
};
}
module.exports = {
renderStyles,
renderScript,
createIMAServer,
environmentFactory,
urlParserFactory,
sanitizeValue,
Event,
};
;