UNPKG

@webfaas/webfaas-core

Version:

WebFaaS Framework - Core

136 lines 5.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.PackageStoreUtil = void 0; const zlib = require("zlib"); const PackageStore_1 = require("../PackageStore/PackageStore"); class PackageStoreUtil { static unzipSync(bufferGZ) { var bufferDecompressed = zlib.unzipSync(bufferGZ, { finishFlush: zlib.constants.Z_SYNC_FLUSH }); return bufferDecompressed; } ; static zipSync(buffer) { var bufferCompressed = zlib.gzipSync(buffer, { finishFlush: zlib.constants.Z_SYNC_FLUSH }); return bufferCompressed; } ; static buildItemData(name, begin, size) { var itemData = {}; itemData.begin = begin; itemData.name = name; itemData.size = size; return itemData; } } exports.PackageStoreUtil = PackageStoreUtil; PackageStoreUtil.buildPackageStoreFromListBuffer = function (name, version, etag, listBufferFile, listName) { var dataPackageItemDataMap = new Map(); var offset = 0; var packageBuffer; for (var i = 0; i < listBufferFile.length; i++) { let itemBuffer = listBufferFile[i]; let itemName = listName[i] || ""; let item = {}; item.begin = offset; item.size = itemBuffer.length; item.name = itemName; dataPackageItemDataMap.set(item.name, item); offset += item.size; } packageBuffer = Buffer.concat(listBufferFile); var packageStore = new PackageStore_1.PackageStore(name, version, etag, packageBuffer, dataPackageItemDataMap); return packageStore; }; PackageStoreUtil.buildPackageStoreFromTarGzBuffer = function (name, version, etag, tarGzBuffer) { var tarBuffer = PackageStoreUtil.unzipSync(tarGzBuffer); return PackageStoreUtil.buildPackageStoreFromTarBuffer(name, version, etag, tarBuffer); }; PackageStoreUtil.buildPackageStoreFromTarBuffer = function (name, version, etag, tarBuffer) { var dataPackageItemDataMap = PackageStoreUtil.extractItemDataMapFromTarBuffer(tarBuffer); var packageStore = new PackageStore_1.PackageStore(name, version, etag, tarBuffer, dataPackageItemDataMap); return packageStore; }; PackageStoreUtil.extractItemDataMapFromTarBuffer = function (bufferTar) { var dataPackageItemDataMap = new Map(); var offset = 0; var size = bufferTar.length; //https://www.gnu.org/software/tar/manual/html_node/Standard.html //0 100 File name //100 8 File mode //108 8 Owner's numeric user ID //116 8 Group's numeric user ID //124 12 File size in bytes (octal base) do { var item = {}; var nameBuffer = bufferTar.subarray(offset, offset + 100); item.name = nameBuffer.subarray(0, nameBuffer.indexOf(0)).toString(); item.name = item.name.substring(item.name.indexOf("/") + 1); //remove prefix. ex: package/ item.size = parseInt(bufferTar.subarray(offset + 124, offset + 136).toString(), 8); if (item.size) { item.begin = offset + 512; //header -> block 512 Bytes dataPackageItemDataMap.set(item.name, item); offset = offset + 512 + item.size + (512 - (item.size % 512)); //512Bytes(header block) + XBytes(data item block - multiple of 512 Bytes) } else { offset = offset + 512; //size(0) => header only } } while (offset < size); return dataPackageItemDataMap; }; PackageStoreUtil.convertPackageStoreToTarBuffer = function (packageStore) { var bufferTar; var offset = 0; var packageBuffer = packageStore.getPackageBuffer(); var dataPackageItemDataMap = packageStore.getDataPackageItemDataMap(); var listDataBuffer = new Array(); //https://www.gnu.org/software/tar/manual/html_node/Standard.html //0 100 File name //100 8 File mode //108 8 Owner's numeric user ID //116 8 Group's numeric user ID //124 12 File size in bytes (octal base) //136 12 mtime //148 8 chksum //156 1 typeflag //157 100 linkname //257 6 magic //263 2 version //329 8 devmajor //337 8 devminor dataPackageItemDataMap.forEach(function (itemData) { let dataBuffer; let dataBufferPad; let dataBufferSize; dataBufferPad = Buffer.alloc(512 - (itemData.size % 512)); dataBuffer = Buffer.concat([packageBuffer.subarray(itemData.begin, itemData.begin + itemData.size), dataBufferPad]); let dataHeader = Buffer.alloc(512, 0); dataHeader.write("package/" + itemData.name, 0, 100); dataHeader.write("000664 ", 100, 8); //File mode dataHeader.write((itemData.size).toString(8).padStart(10, "0") + " ", 124, 11); //File size in bytes (octal base) dataHeader.write("3560116604 ", 136, 12); //mtime dataHeader.write("0", 156, 1); //typeflag dataHeader.write("ustar", 257, 5); //magic dataHeader.write("00", 263, 2); //version dataHeader.write("000000 ", 329, 8); //devmajor dataHeader.write("000000 ", 337, 8); //devminor //chksum let sum = 8 * 0x20; for (let i = 0; i < 148; i++) { sum += dataHeader[i]; } for (let i = 156; i < 346; i++) { sum += dataHeader[i]; } dataHeader.write(sum.toString(8).padStart(7, "0") + " ", 148, 8); //chksum listDataBuffer.push(dataHeader); listDataBuffer.push(dataBuffer); offset += dataBuffer.length + dataHeader.length; }); bufferTar = Buffer.concat(listDataBuffer); return bufferTar; }; PackageStoreUtil.convertPackageStoreToTarGzBuffer = function (packageStore) { let bufferTar = PackageStoreUtil.convertPackageStoreToTarBuffer(packageStore); return PackageStoreUtil.zipSync(bufferTar); }; //# sourceMappingURL=PackageStoreUtil.js.map