UNPKG

ajsfw

Version:
586 lines (585 loc) 22.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var ServiceManager_1 = require("ajsfw/distributed-services/lib/ServiceManager"); var ajs = require("ajsfw"); var logger = require("ajsfw/dbg/logger"); var utils = require("ajsfw/utils"); var exceptions = require("./exceptions"); var di_1 = require("ajsfw/di"); var dbg_1 = require("ajsfw/dbg"); var dbg_2 = require("ajsfw/dbg"); var logger_1 = require("ajsfw/dbg/logger"); var logger_2 = require("ajsfw/dbg/logger"); var indexedDb_1 = require("ajsfw/indexedDb"); var indexedDb_2 = require("ajsfw/indexedDb"); var resources_1 = require("ajsfw/resources"); var resources_2 = require("ajsfw/resources"); var state_1 = require("ajsfw/state"); var state_2 = require("ajsfw/state"); var doc_1 = require("ajsfw/doc"); var doc_2 = require("ajsfw/doc"); var mvvm_1 = require("ajsfw/mvvm"); var mvvm_2 = require("ajsfw/mvvm"); var templating_1 = require("ajsfw/templating"); var templating_2 = require("ajsfw/templating"); var mvvm_3 = require("ajsfw/mvvm"); var mvvm_4 = require("ajsfw/mvvm"); var routing_1 = require("ajsfw/routing"); var routing_2 = require("ajsfw/routing"); var navigation_1 = require("ajsfw/navigation"); var navigation_2 = require("ajsfw/navigation"); var app_1 = require("ajsfw/app"); var bootProgressBar = null; var bootConfigured = false; var preventBoot = false; var bootStarted = false; var bootLanguage = window.navigator.userLanguage || window.navigator.language; function _bootErrorHandler(e) { if (ajs.bootConfig.bootConfig.showErrors) { utils.errorHandler(e); } else { if (e instanceof ErrorEvent) { window.console.error(e.error); } else { window.console.error(e); } } } function _defaultBootConfig() { return { showErrors: true, offlineSupport: false, offlineFilesCount: 4, cacheUpdateText: { "en": "Updating the application. Please wait..." }, offlineFallbackTimeout: 250, errorHandler: _bootErrorHandler, }; } function _defaultAjsConfig() { return { debugging: { enabled: false, console: { bodyRenderTarget: document.body, styleRenderTarget: document.body, showOnBootDelay: 5000 }, modules: { logger: { enabled: false, logDataToConsole: false, logTypes: [ logger.LogType.Enter, logger.LogType.Exit, logger.LogType.Constructor, logger.LogType.Info, logger.LogType.Warning, logger.LogType.Error, logger.LogType.DomAddListener, logger.LogType.DomRemoveListener, logger.LogType.DomAppendChild, logger.LogType.DomRemoveChild, logger.LogType.DomReplaceChild ], sourceModules: [ "ajs.app", "ajs.boot", "ajs.doc", "ajs.events", "ajs.mvvm.model", "ajs.mvvm.view", "ajs.mvvm.viewmodel", "ajs.navigation", "ajs.resources", "ajs.routing", "ajs.state", "ajs.templating", "ajs.ui", "ajs.utils", "Ajs.AjsIndexedDb", "Ajs.App", "Ajs.Boot", "Ajs.Doc", "Ajs.Events", "Ajs.MVVM.Model", "Ajs.MVVM.View", "Ajs.MVVM.ViewModel", "Ajs.Navigation", "Ajs.Resources", "Ajs.Resources.Storages", "Ajs.Resources.StorageProviders", "Ajs.Resources", "Ajs.Routing", "Ajs.State", "Ajs.Templating", "Ajs.UI", "Ajs.Utils" ], maxLevel: 9 } } }, indexedDbName: "Ajs", resourceManager: { memoryCacheSize: 20 * 1024 * 1024, localCacheSize: 2 * 1024 * 1024, sessionCacheSize: 2 * 1024 * 1024, indexedBbCacheSize: 20 * 1024 * 1024, removeResourcesOlderThan: utils.maxDate() }, redirections: [], routes: [], renderTarget: document.body }; } function _configureBoot() { if (bootConfigured) { return; } bootConfigured = true; ajs.bootConfig.bootConfig = _defaultBootConfig(); if (ajs.configureBoot) { ajs.configureBoot(ajs.bootConfig.bootConfig); } } function _configureAjs() { ajs.setAjsConfig(_defaultAjsConfig()); if (ajs.configureFramework instanceof Function) { ajs.configureFramework(ajs.ajsConfig); } ajs.setAppConfig({}); if (ajs.configureApp instanceof Function) { ajs.configureApp(ajs.appConfig); } ajs.setContainer(new di_1.Container()); _configureAjsServices(ajs.container); } function _configureAjsServices(container) { if (ajs.ajsConfig.debugging.enabled) { container .addSingleton(dbg_1.IIConsole, dbg_2.Console, ajs.ajsConfig.debugging.console); if (ajs.ajsConfig.debugging.modules.logger.enabled) { container .addSingleton(logger_1.IILogger, logger_2.Logger, dbg_1.IIConsole, ajs.ajsConfig.debugging.modules.logger); } } container .addSingleton(indexedDb_1.IIAjsIndexedDB, indexedDb_2.AjsIndexedDb, ajs.ajsConfig.indexedDbName) .addSingleton(resources_1.IIResourceManager, resources_2.ResourceManager, indexedDb_1.IIAjsIndexedDB, ajs.ajsConfig.resourceManager) .addSingleton(state_1.IIStateManager, state_2.StateManager, resources_1.IIResourceManager) .addSingleton(doc_1.IIDocumentManager, doc_2.DocumentManager, resources_1.IIResourceManager, ajs.ajsConfig.renderTarget) .addSingleton(mvvm_1.IIViewManager, mvvm_2.ViewManager, doc_1.IIDocumentManager) .addSingleton(templating_1.IITemplateManager, templating_2.TemplateManager, resources_1.IIResourceManager) .addSingleton(mvvm_3.IIViewComponentManager, mvvm_4.ViewComponentManager, container, doc_1.IIDocumentManager, templating_1.IITemplateManager, mvvm_1.IIViewManager) .addSingleton(routing_1.IIRouter, routing_2.Router, mvvm_3.IIViewComponentManager, ajs.ajsConfig.routes) .addSingleton(navigation_1.IINavigator, navigation_2.Navigator, routing_1.IIRouter, ajs.ajsConfig.redirections) .addSingleton(app_1.IIApplication, ajs.bootConfig.applicationConstructor, container, resources_1.IIResourceManager, templating_1.IITemplateManager, navigation_1.IINavigator, routing_1.IIRouter, mvvm_3.IIViewComponentManager, ajs.appConfig); } function _boot() { return __awaiter(this, void 0, void 0, function () { var application, e_1; return __generator(this, function (_a) { switch (_a.label) { case 0: if (preventBoot || bootStarted) { return [2]; } bootStarted = true; _configureBoot(); if (!(ajs.bootConfig.applicationConstructor instanceof Function)) { throw new exceptions.ApplicationNotConfiguredException(); } _configureAjs(); return [4, logger.initialize(ajs.container)]; case 1: _a.sent(); logger.log(logger.LogType.Info, 0, "ajs.boot", null, ajs.productName + " " + ajs.version + ", " + ajs.copyright); return [4, ajs.container.resolve(app_1.IIApplication)]; case 2: application = _a.sent(); window.removeEventListener("error", ajs.bootConfig.bootConfig.errorHandler); _a.label = 3; case 3: _a.trys.push([3, 5, , 6]); return [4, application.run()]; case 4: _a.sent(); return [3, 6]; case 5: e_1 = _a.sent(); setTimeout(function () { throw e_1; }, 0); return [3, 6]; case 6: logger.log(logger.LogType.Info, 0, "ajs.boot", this, "Application started..."); logger.log(logger.LogType.Exit, 0, "ajs.boot", this); return [2]; } }); }); } function _update() { preventBoot = true; _configureAjs(); var resMan = new resources_2.ResourceManager(new indexedDb_2.AjsIndexedDb(ajs.ajsConfig.indexedDbName), ajs.ajsConfig.resourceManager); resMan.initialize() .then(function () { resMan.cleanCaches() .then(function () { setTimeout(function () { window.location.reload(true); }, 200); }) .catch(function (reason) { setTimeout(function () { window.location.reload(true); }, 200); }); }) .catch(function (reason) { setTimeout(function () { window.location.reload(true); }, 200); }); } function _setupBootProgressBar() { var pbar = document.getElementById("ajsProgressBar"); if (pbar === undefined || pbar === null) { return; } bootProgressBar = { ajsProgressBar: pbar, ajsProgressBarPerc: document.getElementById("ajsProgressBarPerc"), ajsProgressBarLabel: document.getElementById("ajsProgressBarLabel"), getLabel: function () { return bootProgressBar.ajsProgressBarLabel.innerText; }, setLabel: function (label) { bootProgressBar.ajsProgressBarLabel.innerText = label; }, setProgress: function (current, total) { bootProgressBar.ajsProgressBarPerc.style.width = ((100 / total) * current) + "%"; } }; } function _translate(what, defaultText) { if (!what) { return defaultText; } var dt = null; for (var key in what) { if (what.hasOwnProperty(key)) { if (bootLanguage.indexOf(key) !== -1) { return what[key]; } if (dt === null) { dt = what[key]; } } } if (dt !== null) { return dt; } return defaultText; } function setupEventListeners() { var checking = false; var downloading = false; var progressEventCount = 0; var oldPbarLabel = null; _setupBootProgressBar(); if (window.applicationCache) { window.applicationCache.addEventListener("checking", function () { checking = true; }); window.applicationCache.addEventListener("downloading", function () { downloading = true; }); window.applicationCache.addEventListener("progress", function (e) { if (bootProgressBar === null) { _setupBootProgressBar(); if (bootProgressBar === null) { return; } oldPbarLabel = bootProgressBar.getLabel(); bootProgressBar.setLabel(_translate(ajs.bootConfig.bootConfig.cacheUpdateText, "Updating...")); bootProgressBar.setProgress(0, 0); } if (e.lengthComputable) { bootProgressBar.setProgress(e.loaded, e.total); } else { bootProgressBar.setProgress(progressEventCount, ajs.bootConfig.bootConfig.offlineFilesCount); } }); window.applicationCache.addEventListener("cached", function () { if (bootProgressBar !== null && oldPbarLabel !== null) { bootProgressBar.setLabel(oldPbarLabel); bootProgressBar.setProgress(0, 0); } _boot(); }); window.applicationCache.addEventListener("noupdate", function () { if (bootProgressBar !== null && oldPbarLabel !== null) { bootProgressBar.setLabel(oldPbarLabel); bootProgressBar.setProgress(0, 0); } _boot(); }); window.applicationCache.addEventListener("error", function (e) { _boot(); }); window.applicationCache.addEventListener("updateready", function () { if (bootProgressBar !== null && oldPbarLabel !== null) { bootProgressBar.setLabel(oldPbarLabel); bootProgressBar.setProgress(0, 0); } _update(); }); } window.addEventListener("load", function () { _configureBoot(); window.addEventListener("error", ajs.bootConfig.bootConfig.errorHandler); if (ajs.bootConfig && ajs.bootConfig.bootConfig.offlineSupport) { setTimeout(function () { if (!checking && !downloading) { _boot(); } }, ajs.bootConfig.bootConfig.offlineFallbackTimeout); } else { _boot(); } }); } exports.setupEventListeners = setupEventListeners; var TestNs; (function (TestNs) { function fn1() { return null; } TestNs.fn1 = fn1; var A = (function () { function A() { } A.prototype.msg = function () { console.log("A"); }; A.prototype.__apriv = function () { }; A.prototype._aprot = function () { }; A.prototype.apub = function () { }; return A; }()); TestNs.A = A; var B = (function (_super) { __extends(B, _super); function B(a, b, c) { var _this = _super.call(this) || this; _this.__a = a; _this._b = b; _this.c = c; return _this; } B.prototype.__bpriv = function () { }; B.prototype._bprot = function () { }; B.prototype.bpub = function () { }; B.prototype.msg = function () { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { switch (_a.label) { case 0: _super.prototype.msg.call(this); return [4, new Promise(function (resolve) { console.log("B"); setTimeout(resolve, 0); })]; case 1: _a.sent(); return [2]; } }); }); }; return B; }(A)); TestNs.B = B; var C = (function (_super) { __extends(C, _super); function C() { return _super.call(this) || this; } C.prototype.msg = function () { _super.prototype.msg.call(this); console.log("C"); }; return C; }(A)); TestNs.C = C; var D = (function (_super) { __extends(D, _super); function D(a, b, c) { return _super.call(this, a, b, c) || this; } Object.defineProperty(D.prototype, "num", { get: function () { return this.__number; }, set: function (value) { this.__number = value; }, enumerable: true, configurable: true }); ; ; D.prototype.msg = function () { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { switch (_a.label) { case 0: return [4, _super.prototype.msg.call(this)]; case 1: _a.sent(); console.log("D"); return [2]; } }); }); }; return D; }(B)); TestNs.D = D; var Num = (function () { function Num() { } Num.prototype.add = function (a, b) { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { return [2, a + b]; }); }); }; Num.prototype.sub = function (a, b) { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { return [2, a - b]; }); }); }; Num.prototype.mul = function (a, b) { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { return [2, a * b]; }); }); }; Num.prototype.div = function (a, b) { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { return [2, a / b]; }); }); }; return Num; }()); TestNs.Num = Num; var Complex = (function () { function Complex() { } Complex.prototype.date = function () { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { return [2, new Date()]; }); }); }; return Complex; }()); TestNs.Complex = Complex; })(TestNs || (TestNs = {})); window.onload = function () { return __awaiter(this, void 0, void 0, function () { var smc, sm, d1Inst, c1Inst, c2Inst, num, complex, results, date, e_2; return __generator(this, function (_a) { switch (_a.label) { case 0: smc = { workerUrl: "/js/ajs.wworker.js", workerLibraries: ["/js/ajs.lib.js"], mainUiThreadServiceContainerName: "main-ui-thread" }; _a.label = 1; case 1: _a.trys.push([1, 15, , 16]); document.body.innerHTML += "Creating SM...<br />"; sm = new ServiceManager_1.ServiceManager(smc); document.body.innerHTML += "Creating TestWorker...<br />"; return [4, sm.createServiceContainer("TestWorker")]; case 2: _a.sent(); document.body.innerHTML += "Creating Worker...<br />"; return [4, sm.createServiceContainer("Worker")]; case 3: _a.sent(); document.body.innerHTML += "Deploying TestNamespace to TestWorker...<br />"; return [4, sm.deployNamespace("TestWorker", TestNs)]; case 4: _a.sent(); document.body.innerHTML += "Deploying D to TestWorker...<br />"; return [4, sm.instantiateService("TestWorker", TestNs.D, 1, 2, 3)]; case 5: d1Inst = _a.sent(); document.body.innerHTML += "Deploying C to TestWorker...<br />"; return [4, sm.instantiateService("TestWorker", TestNs.C)]; case 6: c1Inst = _a.sent(); document.body.innerHTML += "Deploying D to Worker...<br />"; return [4, sm.instantiateService("Worker", TestNs.C)]; case 7: c2Inst = _a.sent(); document.body.innerHTML += "Deploying Num to Worker...<br />"; return [4, sm.instantiateService("Worker", TestNs.Num)]; case 8: num = _a.sent(); document.body.innerHTML += "Deploying Complex to Worker...<br />"; return [4, sm.instantiateService("TestWorker", TestNs.Complex)]; case 9: complex = _a.sent(); document.body.innerHTML += "Done<br />"; console.log(d1Inst); document.body.innerHTML += "Performing test calls...<br />"; return [4, d1Inst.msg()]; case 10: _a.sent(); return [4, c1Inst.msg()]; case 11: _a.sent(); return [4, c2Inst.msg()]; case 12: _a.sent(); return [4, Promise.all([ num.add(1, 1), num.sub(16, 5), num.mul(100, 100), num.div(16384, 8) ])]; case 13: results = _a.sent(); console.log(results); return [4, complex.date()]; case 14: date = _a.sent(); console.log(typeof (date)); console.log(date); document.body.innerHTML += "Done<br />"; return [3, 16]; case 15: e_2 = _a.sent(); document.body.innerHTML += "Error: " + e_2 + "<br />"; console.error(e_2); return [3, 16]; case 16: return [2]; } }); }); };