@webfaas/webfaas-core
Version:
WebFaaS Framework - Core
125 lines • 5.43 kB
JavaScript
;
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