@webfaas/webfaas-core
Version:
WebFaaS Framework - Core
174 lines • 5.42 kB
JavaScript
"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