UNPKG

ima

Version:

IMA.js framework for isomorphic javascript application

236 lines (197 loc) 6.87 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.onLoad = exports.reviveClientApp = exports.hotReloadClientApp = exports.routeClientApp = exports.bootClientApp = exports.getClientBootConfig = exports.createImaApp = exports.getInitialPluginConfig = exports.getNamespace = exports.getInitialImaConfigFunctions = undefined; var _vendorLinker = require("./vendorLinker"); var _vendorLinker2 = _interopRequireDefault(_vendorLinker); var _namespace = require("./namespace"); var _namespace2 = _interopRequireDefault(_namespace); var _ObjectContainer = require("./ObjectContainer"); var _ObjectContainer2 = _interopRequireDefault(_ObjectContainer); var _Bootstrap = require("./Bootstrap"); var _Bootstrap2 = _interopRequireDefault(_Bootstrap); var _bind = require("./config/bind"); var _bind2 = _interopRequireDefault(_bind); var _services = require("./config/services"); var _services2 = _interopRequireDefault(_services); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function getInitialImaConfigFunctions() { return { initBindIma: _bind2.default, initServicesIma: _services2.default }; } function getNamespace() { return _namespace2.default; } function getInitialPluginConfig() { return { plugins: _vendorLinker2.default.getImaPlugins() }; } function _getRoot() { return _isClient() ? window : global; } function _isClient() { return typeof window !== 'undefined' && window !== null; } function createImaApp() { let oc = new _ObjectContainer2.default(_namespace2.default); let bootstrap = new _Bootstrap2.default(oc); return { oc, bootstrap }; } function getClientBootConfig(initialAppConfigFunctions) { let root = _getRoot(); if ($Debug && _isClient()) { if ($IMA.$Protocol !== root.location.protocol) { throw new Error(`Your client's protocol is not same as server's protocol. ` + `For right setting protocol on the server site set ` + `'X-Forwarded-Proto' header.`); } if ($IMA.$Host !== root.location.host) { throw new Error(`Your client's host is not same as server's host. For right ` + `setting host on the server site set 'X-Forwarded-Host' ` + `header.`); } } let bootConfig = { services: { respond: null, request: null, $IMA: $IMA, dictionary: { language: $IMA.$Language, dictionary: $IMA.i18n }, router: { $Protocol: $IMA.$Protocol, $Host: $IMA.$Host, $Path: $IMA.$Path, $Root: $IMA.$Root, $LanguagePartPath: $IMA.$LanguagePartPath } }, settings: { $Debug: $IMA.$Debug, $Env: $IMA.$Env, $Version: $IMA.$Version, $App: $IMA.$App, $Protocol: $IMA.$Protocol, $Language: $IMA.$Language, $Host: $IMA.$Host, $Path: $IMA.$Path, $Root: $IMA.$Root, $LanguagePartPath: $IMA.$LanguagePartPath } }; return Object.assign(bootConfig, initialAppConfigFunctions, getInitialPluginConfig(), getInitialImaConfigFunctions()); } function bootClientApp(app, bootConfig) { app.bootstrap.run(bootConfig); $IMA.$Dispatcher = app.oc.get('$Dispatcher'); let cache = app.oc.get('$Cache'); cache.deserialize($IMA.Cache || {}); return app; } function routeClientApp(app) { let router = app.oc.get('$Router'); return router.listen().route(router.getPath()).catch(error => { if (typeof $IMA.fatalErrorHandler === 'function') { $IMA.fatalErrorHandler(error); } else { console.warn('Define function config.$IMA.fatalErrorHandler in ' + 'services.js.'); } }); } function hotReloadClientApp(initialAppConfigFunctions) { if (!$Debug) { return; } let app = createImaApp(); let bootConfig = getClientBootConfig(initialAppConfigFunctions); app = bootClientApp(app, bootConfig); let router = app.oc.get('$Router'); let pageManager = app.oc.get('$PageManager'); let currentRouteInfo = router.getCurrentRouteInfo(); let currentRoute = currentRouteInfo.route; let currentRouteOptions = Object.assign({}, currentRoute.getOptions(), { onlyUpdate: false, autoScroll: false, allowSPA: false }); router.listen(); try { return pageManager.manage(currentRoute, currentRouteOptions, currentRouteInfo.params).catch(error => { return router.handleError({ error }); }).catch(error => { if (typeof $IMA.fatalErrorHandler === 'function') { $IMA.fatalErrorHandler(error); } else { console.warn('Define the config.$IMA.fatalErrorHandler function ' + 'in services.js.'); } }); } catch (error) { return router.handleError({ error }); } } function reviveClientApp(initialAppConfigFunctions) { let root = _getRoot(); //set React for ReactJS extension for browser root.React = _vendorLinker2.default.get('react'); root.$Debug = root.$IMA.$Debug; let app = createImaApp(); let bootConfig = getClientBootConfig(initialAppConfigFunctions); app = bootClientApp(app, bootConfig); return routeClientApp(app).then(pageInfo => { return Object.assign({}, pageInfo || {}, { app, bootConfig }); }); } function onLoad() { _vendorLinker2.default.bindToNamespace(_namespace2.default); if (!_isClient()) { return Promise.reject(null); } if (document.readyState !== 'loading') { return Promise.resolve(); } return new Promise(resolve => { document.addEventListener('DOMContentLoaded', () => resolve(), { once: true }); }); } exports.getInitialImaConfigFunctions = getInitialImaConfigFunctions; exports.getNamespace = getNamespace; exports.getInitialPluginConfig = getInitialPluginConfig; exports.createImaApp = createImaApp; exports.getClientBootConfig = getClientBootConfig; exports.bootClientApp = bootClientApp; exports.routeClientApp = routeClientApp; exports.hotReloadClientApp = hotReloadClientApp; exports.reviveClientApp = reviveClientApp; exports.onLoad = onLoad; typeof $IMA !== 'undefined' && $IMA !== null && $IMA.Loader && $IMA.Loader.register('ima/main', [], function (_export, _context) { 'use strict'; return { setters: [], execute: function () { _export('onLoad', exports.onLoad); _export('getInitialImaConfigFunctions', exports.getInitialImaConfigFunctions); _export('getNamespace', exports.getNamespace); _export('getInitialPluginConfig', exports.getInitialPluginConfig); _export('createImaApp', exports.createImaApp); _export('getClientBootConfig', exports.getClientBootConfig); _export('bootClientApp', exports.bootClientApp); _export('routeClientApp', exports.routeClientApp); _export('hotReloadClientApp', exports.hotReloadClientApp); _export('reviveClientApp', exports.reviveClientApp); _export('onLoad', exports.onLoad); } }; });