UNPKG

packfs-core

Version:

Semantic filesystem operations for LLM agent frameworks with natural language understanding. See LLM_AGENT_GUIDE.md for copy-paste examples.

147 lines 5.68 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.BrotliStrategy = void 0; const zlib = __importStar(require("zlib")); const util_1 = require("util"); const CompressionStrategy_1 = require("./CompressionStrategy"); const brotliCompress = (0, util_1.promisify)(zlib.brotliCompress); const brotliDecompress = (0, util_1.promisify)(zlib.brotliDecompress); /** * Brotli compression strategy - excellent for text-based files like JavaScript */ class BrotliStrategy extends CompressionStrategy_1.CompressionStrategy { constructor(dictionary) { super(); this.name = 'brotli'; this.priority = 'size'; this.supportsStreaming = true; this.dictionary = dictionary; } async compress(data, hints) { const startTime = performance.now(); const options = { params: { [zlib.constants.BROTLI_PARAM_QUALITY]: this.getQualityLevel(hints), [zlib.constants.BROTLI_PARAM_SIZE_HINT]: data.length, } }; // Use dictionary for JavaScript files if (this.dictionary && this.isJavaScript(hints.mimeType)) { options.params[zlib.constants.BROTLI_PARAM_LARGE_WINDOW] = 1; } const compressed = await brotliCompress(data, options); const compressionTime = performance.now() - startTime; return { data: compressed, algorithm: this.name, originalSize: data.length, compressedSize: compressed.length, dictionary: this.dictionary ? 'js-patterns' : undefined, metadata: { compressionTime, quality: options.params[zlib.constants.BROTLI_PARAM_QUALITY], mimeType: hints.mimeType } }; } async decompress(chunk) { const startTime = performance.now(); const result = await brotliDecompress(chunk.data); const decompressionTime = performance.now() - startTime; // Update metadata with decompression time chunk.metadata.decompressionTime = decompressionTime; return result; } createDecompressor(chunk) { const { Readable } = require('stream'); const decompressor = zlib.createBrotliDecompress(); // Create a readable stream from the compressed data const inputStream = new Readable({ read() { } }); // Push the compressed data and signal end inputStream.push(chunk.data); inputStream.push(null); // Pipe through the decompressor return inputStream.pipe(decompressor); } estimateRatio(_data, hints) { // Brotli performs exceptionally well on text data if (this.isTextFile(hints.mimeType)) { return this.dictionary ? 0.15 : 0.25; // 85% or 75% compression } // Less effective on binary data return 0.6; // 40% compression } shouldUse(data, hints) { // Perfect for JavaScript, CSS, HTML, JSON if (this.isTextFile(hints.mimeType)) { return true; } // Good for large files where compression ratio matters more than speed if (data.length > 100 * 1024 && !hints.isHot) { return true; } return false; } getQualityLevel(hints) { if (hints.isHot) { return 4; // Fast compression for frequently accessed files } if (hints.accessFrequency > 0.8) { return 6; // Balanced for moderately accessed files } return 11; // Maximum compression for rarely accessed files } isJavaScript(mimeType) { return mimeType.includes('javascript') || mimeType.includes('typescript') || mimeType.endsWith('.js') || mimeType.endsWith('.ts') || mimeType.endsWith('.jsx') || mimeType.endsWith('.tsx'); } isTextFile(mimeType) { return mimeType.startsWith('text/') || mimeType.includes('javascript') || mimeType.includes('json') || mimeType.includes('css') || mimeType.includes('html') || mimeType.includes('xml'); } } exports.BrotliStrategy = BrotliStrategy; //# sourceMappingURL=BrotliStrategy.js.map