UNPKG

@webfaas/webfaas-core

Version:

WebFaaS Framework - Core

134 lines 6.79 kB
"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