UNPKG

@webfaas/webfaas-core

Version:

WebFaaS Framework - Core

125 lines 5.43 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ModuleManagerCache = void 0; const Log_1 = require("../Log/Log"); const PackageStore_1 = require("../PackageStore/PackageStore"); const ModuleManagerCacheObjectItem_1 = require("./ModuleManagerCacheObjectItem"); const PackageStoreCacheMemorySync_1 = require("../PackageStoreCache/Memory/PackageStoreCacheMemorySync"); const path = require("path"); const Core_1 = require("../Core"); const ILog_1 = require("../Log/ILog"); const nativeModule = require("module"); /** * manager Module */ class ModuleManagerCache { constructor(log) { this.cacheModule = new Map(); this.localDiskModule = new Map(); this.log = log || new Log_1.Log(); } getCacheModule() { return this.cacheModule; } getLocalDiskModule() { return this.localDiskModule; } getOrCreateCacheModuleItem(key) { var cacheModuleManagerItem = this.cacheModule.get(key); if (!cacheModuleManagerItem) { let keyArray = key.split(":"); cacheModuleManagerItem = new ModuleManagerCacheObjectItem_1.ModuleManagerCacheObjectItem(keyArray[0], keyArray[1]); this.cacheModule.set(key, cacheModuleManagerItem); } return cacheModuleManagerItem; } getManifestFromCache(packageName, packageVersion) { var key = PackageStore_1.PackageStore.parseKey(packageName, packageVersion); var cacheModuleManagerItem = this.cacheModule.get(key); if (cacheModuleManagerItem) { return cacheModuleManagerItem.getManifest(); } else { return null; } } getPackageStoreCacheSyncFromCache(key) { var cacheModuleManagerItem = this.cacheModule.get(key); if (cacheModuleManagerItem) { return cacheModuleManagerItem.getPackageStoreCache(); } else { return null; } } getCompiledObjectFromCache(packageName, packageVersion, itemKey) { var key = PackageStore_1.PackageStore.parseKey(packageName, packageVersion); var cacheModuleManagerItem = this.cacheModule.get(key); if (cacheModuleManagerItem) { return cacheModuleManagerItem.getObjectFromCache(itemKey); } else { return null; } } getModuleFromAllCache(name, packageInfoTarget, moduleManagerRequireContextData, parentModuleCompileManifestData) { //find module in bultin if (nativeModule.builtinModules.indexOf(name) > -1) { return this.requireNativeModule(name, moduleManagerRequireContextData, parentModuleCompileManifestData); } //find module in cache let responseObj = this.getCompiledObjectFromCache(packageInfoTarget.packageName, packageInfoTarget.packageVersion, packageInfoTarget.itemKey); if (responseObj) { return responseObj; } else { return null; } } requireNativeModule(name, moduleManagerRequireContextData, parentModuleCompileManifestData) { //native module return require(name); } cachePackageStoreBuild() { return new PackageStoreCacheMemorySync_1.PackageStoreCacheMemorySync(); } addPackageStoreCacheSyncToCache(key, item) { var cacheModuleManagerItem = this.getOrCreateCacheModuleItem(key); cacheModuleManagerItem.setPackageStoreCache(item); } addManifestToCache(packageName, packageVersion, manifest) { var key = PackageStore_1.PackageStore.parseKey(packageName, packageVersion); var cacheModuleManagerItem = this.getOrCreateCacheModuleItem(key); cacheModuleManagerItem.setManifest(manifest); } addCompiledObjectToCache(packageName, packageVersion, itemKey, obj) { var key = PackageStore_1.PackageStore.parseKey(packageName, packageVersion); var cacheModuleManagerItem = this.getOrCreateCacheModuleItem(key); cacheModuleManagerItem.setObjectToCache(itemKey, obj); } addLocalDiskModuleToCache(folderPath) { let manifest = require(path.join(folderPath, "package.json")); let packageName = manifest.name; let packageVersion = manifest.version || "1.0.0"; let moduleObj = require(folderPath); manifest.versions = {}; manifest.versions[packageVersion] = { name: packageName, version: packageVersion }; let key = PackageStore_1.PackageStore.parseKey(packageName, packageVersion); this.localDiskModule.set(key, folderPath); this.addManifestToCache(packageName, packageVersion, manifest); this.addCompiledObjectToCache(packageName, packageVersion, "", moduleObj); this.log.write(Core_1.LogLevelEnum.INFO, "addLocalDiskModuleToCache", ILog_1.LogCodeEnum.PROCESS.toString(), folderPath, { name: packageName, version: packageVersion }, __filename); } cleanCachePackageStoreByNameAndVersion(packageName, packageVersion) { var key = PackageStore_1.PackageStore.parseKey(packageName, packageVersion); var cacheModuleManagerItem = this.cacheModule.get(key); if (cacheModuleManagerItem) { return cacheModuleManagerItem.setPackageStoreCache(null); } } cleanCacheModule() { this.cacheModule.clear(); } } exports.ModuleManagerCache = ModuleManagerCache; //# sourceMappingURL=ModuleManagerCache.js.map