@webfaas/webfaas-core
Version:
WebFaaS Framework - Core
134 lines • 6.79 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ModuleManager = void 0;
const Log_1 = require("../Log/Log");
const ModuleManagerCache_1 = require("./ModuleManagerCache");
const ModuleManagerCompile_1 = require("./ModuleManagerCompile");
const ModuleManagerImport_1 = require("./ModuleManagerImport");
const ModuleManagerConvert_1 = require("./ModuleManagerConvert");
const EventManager_1 = require("../Event/EventManager");
const moduleManagerConvert = new ModuleManagerConvert_1.ModuleManagerConvert();
/**
* manager Module
*/
class ModuleManager {
constructor(packageStoreManager, log) {
this.log = log || new Log_1.Log();
this.moduleManagerCache = new ModuleManagerCache_1.ModuleManagerCache(this.log);
this.moduleManagerCompile = new ModuleManagerCompile_1.ModuleManagerCompile(this, this.log);
this.moduleManagerImport = new ModuleManagerImport_1.ModuleManagerImport(this, this.log, packageStoreManager);
this.onProcessModuleCompiledToCache = this.onProcessModuleCompiledToCache.bind(this);
EventManager_1.EventManager.addListener(EventManager_1.EventManagerEnum.PROCESS_MODULE_COMPILED_TO_CACHE, this.onProcessModuleCompiledToCache);
}
/**
* return module manager cache
*/
getModuleManagerCache() {
return this.moduleManagerCache;
}
/**
* return module manager compile
*/
getModuleManagerCompile() {
return this.moduleManagerCompile;
}
/**
* return module manager import
*/
getModuleManagerImport() {
return this.moduleManagerImport;
}
/**
* require sync
* @param name module name
* @param version module version
* @param moduleManagerRequireContextData context
* @param parentModuleCompileManifestData compile manifest
*/
requireSync(name, version, moduleManagerRequireContextData, parentModuleCompileManifestData) {
let packageInfoTarget = moduleManagerConvert.convertToPackageInfoTarget(name, version, moduleManagerRequireContextData, parentModuleCompileManifestData);
if (packageInfoTarget.packageName === "") {
return null;
}
//find module in cache
let moduleCompiledObj = this.getModuleManagerCache().getModuleFromAllCache(name, packageInfoTarget, moduleManagerRequireContextData, parentModuleCompileManifestData);
if (moduleCompiledObj) {
return moduleCompiledObj;
}
//find packageStore in cache
let cacheRootPackageStore = this.getModuleManagerCache().getPackageStoreCacheSyncFromCache(moduleManagerRequireContextData.rootPackageStoreKey);
if (cacheRootPackageStore) {
let codeBufferFromPackageStoreCacheSync = moduleManagerConvert.convertToCodeBufferResponse(cacheRootPackageStore, packageInfoTarget, moduleManagerRequireContextData);
//compile
if (codeBufferFromPackageStoreCacheSync) {
moduleCompiledObj = this.moduleManagerCompile.compilePackageStoreItemBufferSync(codeBufferFromPackageStoreCacheSync.packageStoreItemBufferResponse, moduleManagerRequireContextData, codeBufferFromPackageStoreCacheSync.moduleCompileManifestData);
EventManager_1.EventManager.emit(EventManager_1.EventManagerEnum.PROCESS_MODULE_COMPILED_TO_CACHE, packageInfoTarget, codeBufferFromPackageStoreCacheSync, moduleCompiledObj);
return moduleCompiledObj;
}
else {
return null;
}
}
else {
return null;
}
}
/**
* reqire async
* @param name module name
* @param version module version
* @param moduleManagerRequireContextData context
* @param parentModuleCompileManifestData manifest
*/
requireAsync(name, version, moduleManagerRequireContextData, parentModuleCompileManifestData) {
return new Promise((resolve, reject) => {
let packageInfoTarget = moduleManagerConvert.convertToPackageInfoTarget(name, version, moduleManagerRequireContextData, parentModuleCompileManifestData);
if (packageInfoTarget.packageName === "") {
resolve(null);
}
//find module in cache
let moduleCacheObj = this.getModuleManagerCache().getModuleFromAllCache(name, packageInfoTarget, moduleManagerRequireContextData, parentModuleCompileManifestData);
if (moduleCacheObj) {
resolve(moduleCacheObj);
}
//find packageStore in cache
let cacheRootPackageStore = this.getModuleManagerCache().getPackageStoreCacheSyncFromCache(moduleManagerRequireContextData.rootPackageStoreKey);
if (cacheRootPackageStore) {
let codeBufferFromPackageStoreCacheSync = moduleManagerConvert.convertToCodeBufferResponse(cacheRootPackageStore, packageInfoTarget, moduleManagerRequireContextData);
//compile
if (codeBufferFromPackageStoreCacheSync) {
this.moduleManagerCompile.compilePackageStoreItemBufferAsync(codeBufferFromPackageStoreCacheSync.packageStoreItemBufferResponse, moduleManagerRequireContextData, codeBufferFromPackageStoreCacheSync.moduleCompileManifestData).then((moduleCompiledObj) => {
EventManager_1.EventManager.emit(EventManager_1.EventManagerEnum.PROCESS_MODULE_COMPILED_TO_CACHE, packageInfoTarget, codeBufferFromPackageStoreCacheSync, moduleCompiledObj);
resolve(moduleCompiledObj);
}).catch((errCompile) => {
reject(errCompile);
});
}
else {
resolve(null);
}
}
else {
resolve(null);
}
});
}
/**
* Process Event processModuleCompiledToCache
* @param packageInfoTarget
* @param codeBufferFromPackageStoreCacheSync
* @param moduleCompiledObj
*/
onProcessModuleCompiledToCache(packageInfoTarget, codeBufferFromPackageStoreCacheSync, moduleCompiledObj) {
//add manifest to temporary cache
if (codeBufferFromPackageStoreCacheSync) {
this.getModuleManagerCache().addManifestToCache(packageInfoTarget.packageName, packageInfoTarget.packageVersion, codeBufferFromPackageStoreCacheSync.manifest);
}
//add compiled module to temporary cache
if (moduleCompiledObj) {
this.getModuleManagerCache().addCompiledObjectToCache(packageInfoTarget.packageName, packageInfoTarget.packageVersion, packageInfoTarget.itemKey, moduleCompiledObj);
}
}
}
exports.ModuleManager = ModuleManager;
//# sourceMappingURL=ModuleManager.js.map