ajsfw
Version:
Ajs Framework
586 lines (585 loc) • 22.8 kB
JavaScript
;
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];
}
});
});
};