UNPKG

tsc-path-fix

Version:

Zero-runtime TypeScript path resolver - converts aliases to relative paths at compile time. Fast, lightweight, with native watch mode.

98 lines 4.42 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.streamProcessFile = streamProcessFile; exports.fileContainsPattern = fileContainsPattern; const fs = require("fs"); const fs_1 = require("fs"); const util_1 = require("util"); const stream_1 = require("stream"); const string_decoder_1 = require("string_decoder"); const pipeline = (0, util_1.promisify)(stream_1.pipeline); const stat = (0, util_1.promisify)(fs.stat); function streamProcessFile(filePath, transformFn) { return __awaiter(this, void 0, void 0, function* () { const stats = yield stat(filePath); if (stats.size < 1024 * 1024) { const content = yield fs.promises.readFile(filePath, 'utf8'); const transformed = transformFn(content); if (content !== transformed) { yield fs.promises.writeFile(filePath, transformed, 'utf8'); } return; } const tempFilePath = `${filePath}.temp`; const readStream = (0, fs_1.createReadStream)(filePath, { encoding: 'utf8' }); const writeStream = (0, fs_1.createWriteStream)(tempFilePath, { encoding: 'utf8' }); const decoder = new string_decoder_1.StringDecoder('utf8'); let pendingChunk = ''; try { yield new Promise((resolve, reject) => { readStream.on('data', (chunk) => { try { const chunkStr = pendingChunk + decoder.write(chunk); const splitAt = Math.max(0, chunkStr.length - 4); const processChunk = chunkStr.substring(0, splitAt); pendingChunk = chunkStr.substring(splitAt); const transformedChunk = transformFn(processChunk); writeStream.write(transformedChunk); } catch (err) { reject(err); } }); readStream.on('end', () => { if (pendingChunk) { const finalChunk = pendingChunk + decoder.end(); const transformedFinal = transformFn(finalChunk); writeStream.write(transformedFinal); } writeStream.end(); resolve(); }); readStream.on('error', reject); writeStream.on('error', reject); }); yield fs.promises.rename(tempFilePath, filePath); } catch (error) { if (fs.existsSync(tempFilePath)) { yield fs.promises.unlink(tempFilePath).catch(() => { }); } throw error; } }); } function fileContainsPattern(filePath, pattern) { return __awaiter(this, void 0, void 0, function* () { const readStream = (0, fs_1.createReadStream)(filePath, { encoding: 'utf8' }); const decoder = new string_decoder_1.StringDecoder('utf8'); let buffer = ''; return new Promise((resolve, reject) => { readStream.on('data', (chunk) => { buffer += decoder.write(chunk); if (pattern.test(buffer)) { readStream.destroy(); resolve(true); } if (buffer.length > 8192) { buffer = buffer.substring(buffer.length - 4096); } }); readStream.on('end', () => { buffer += decoder.end(); resolve(pattern.test(buffer)); }); readStream.on('error', reject); }); }); } //# sourceMappingURL=stream-utils.js.map