UNPKG

@webfaas/webfaas-core

Version:

WebFaaS Framework - Core

174 lines 5.42 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.PackageStore = void 0; const PackageStoreItemBufferResponse_1 = require("./PackageStoreItemBufferResponse"); /** * PackageStore */ class PackageStore { constructor(name, version, etag, packageBuffer, dataPackageItemDataMap) { this.manifest = null; this.size = 0; this.length = 0; this.lastAccess = new Date().getTime(); this.mainFileFullPath = ""; this.name = name; this.version = version; this.key = PackageStore.parseKey(this.name, this.version); this.etag = etag; this.packageBuffer = packageBuffer || Buffer.alloc(0); this.size = this.packageBuffer.length; if (dataPackageItemDataMap) { this.length = dataPackageItemDataMap.size; } else { this.length = 0; dataPackageItemDataMap = new Map(); } this.dataPackageItemDataMap = dataPackageItemDataMap; this.seekMainFile(); } static parseKey(name, version) { return name + ":" + version; } updateMetricsAccess() { this.lastAccess = new Date().getTime(); } seekMainFile() { var manifest; var tmpMainFileFullPath = ""; manifest = this.getManifest(); if (manifest && manifest.main) { if (manifest.main.substring(0, 2) === "./") { manifest.main = manifest.main.substring(2); } if (this.dataPackageItemDataMap.has(manifest.main)) { tmpMainFileFullPath = manifest.main; } else { if (manifest.main.indexOf(".") === -1) { if (this.dataPackageItemDataMap.has(manifest.main + "/index.js")) { tmpMainFileFullPath = manifest.main + "/index.js"; } } } } else { if (this.dataPackageItemDataMap.has("index.js")) { tmpMainFileFullPath = "index.js"; } } if (tmpMainFileFullPath) { this.mainFileFullPath = tmpMainFileFullPath; } else { this.mainFileFullPath = ""; } } getName() { return this.name; } getVersion() { return this.version; } getKey() { return this.key; } getEtag() { return this.etag; } getSize() { return this.size; } getLength() { return this.length; } getLastAccess() { return this.lastAccess; } getMainFileFullPath() { return this.mainFileFullPath; } getItemBuffer(key) { this.updateMetricsAccess(); var item = this.dataPackageItemDataMap.get(key); var extension = key.substring(key.lastIndexOf(".")); if (item === undefined) { if (key.indexOf(".") === -1) { extension = ".js"; item = this.dataPackageItemDataMap.get(key + ".js"); if (item === undefined) { extension = ".js"; item = this.dataPackageItemDataMap.get(key + "/index.js"); } if (item === undefined) { extension = ".json"; item = this.dataPackageItemDataMap.get(key + ".json"); } } } if (item) { var end = item.begin + item.size; return new PackageStoreItemBufferResponse_1.PackageStoreItemBufferResponse(key, extension, this.packageBuffer.subarray(item.begin, end)); } else { return null; } } getMainBuffer() { if (this.mainFileFullPath) { return this.getItemBuffer(this.mainFileFullPath); } else { return null; } } getManifest() { this.updateMetricsAccess(); if (this.manifest) { return this.manifest; } else { var manifestBuffer = this.getItemBuffer("package.json"); if (manifestBuffer) { this.manifest = JSON.parse(manifestBuffer.buffer.toString()); return this.manifest; } else { return null; } } } getPackageBuffer() { return this.packageBuffer; } getDataPackageItemDataMap() { return this.dataPackageItemDataMap; } addItemData(nameItem, itemData) { this.removeItemData(nameItem); this.dataPackageItemDataMap.set(nameItem, itemData); this.size += itemData.size; this.length++; this.seekMainFile(); } addItemBuffer(nameItem, itemBuffer) { var itemData = {}; itemData.begin = this.packageBuffer.length; itemData.name = nameItem; itemData.size = itemBuffer.length; this.packageBuffer = Buffer.concat([this.packageBuffer, itemBuffer]); this.addItemData(nameItem, itemData); return itemData; } removeItemData(nameItem) { var itemData = this.dataPackageItemDataMap.get(nameItem); if (itemData) { this.dataPackageItemDataMap.delete(nameItem); this.size -= itemData.size; this.length--; } } } exports.PackageStore = PackageStore; //# sourceMappingURL=PackageStore.js.map