fix(core): update

This commit is contained in:
Philipp Kunz 2024-01-08 15:34:53 +01:00
parent efb4229f58
commit 11df25f028
3 changed files with 44 additions and 14 deletions

View File

@ -3,6 +3,6 @@
*/
export const commitinfo = {
name: '@api.global/typedserver',
version: '3.0.12',
version: '3.0.13',
description: 'easy serving of static files'
}

View File

@ -1,31 +1,61 @@
import * as plugins from '../typedserver.plugins.js';
export class Compressor {
private _cache: Map<string, Buffer>;
private MAX_CACHE_SIZE: number = 20 * 1024 * 1024; // 20 MB
constructor() {
this._cache = new Map<string, Buffer>();
}
private _addToCache(key: string, value: Buffer) {
this._cache.set(key, value);
this._manageCacheSize();
}
private _manageCacheSize() {
let currentSize = Array.from(this._cache.values()).reduce((acc, buffer) => acc + buffer.length, 0);
while (currentSize > this.MAX_CACHE_SIZE) {
const firstKey = this._cache.keys().next().value;
const firstValue = this._cache.get(firstKey)!;
currentSize -= firstValue.length;
this._cache.delete(firstKey);
}
}
public async compressContent(
content: Buffer,
method: 'gzip' | 'deflate' | 'br' | 'none'
): Promise<Buffer> {
const cacheKey = content.toString('base64') + method;
const cachedResult = this._cache.get(cacheKey);
if (cachedResult) {
return cachedResult;
}
return new Promise((resolve, reject) => {
const callback = (err: Error | null, result: Buffer) => {
if (err) reject(err);
else {
this._addToCache(cacheKey, result);
resolve(result);
}
};
switch (method) {
case 'gzip':
plugins.zlib.gzip(content, (err, result) => {
if (err) reject(err);
else resolve(result);
});
plugins.zlib.gzip(content, callback);
break;
case 'br':
plugins.zlib.brotliCompress(content, (err, result) => {
if (err) reject(err);
else resolve(result);
});
plugins.zlib.brotliCompress(content, callback);
break;
case 'deflate':
plugins.zlib.deflate(content, (err, result) => {
if (err) reject(err);
else resolve(result);
});
plugins.zlib.deflate(content, callback);
break;
default:
this._addToCache(cacheKey, content);
resolve(content);
}
});

View File

@ -3,6 +3,6 @@
*/
export const commitinfo = {
name: '@api.global/typedserver',
version: '3.0.12',
version: '3.0.13',
description: 'easy serving of static files'
}