UNPKG

redis-smq-common

Version:

Provides essential components and utilities shared across RedisSMQ packages.

82 lines 2.66 kB
import axios from 'axios'; import fs, { readdir } from 'fs'; import { access, constants, mkdir } from 'node:fs/promises'; import { join } from 'path'; export async function doesPathExist(filePath) { try { await access(filePath, constants.F_OK); return true; } catch { return false; } } export async function ensureDirectoryExists(dirPath) { try { await access(dirPath, constants.F_OK); } catch { await mkdir(dirPath, { recursive: true }); } } export async function downloadFile(url, savePath) { const response = await axios({ url, responseType: 'stream', }); const writer = fs.createWriteStream(savePath); response.data.pipe(writer); return new Promise((resolve, reject) => { writer.on('finish', resolve); writer.on('error', reject); }); } export function findFilesByPattern(directoryPath, pattern, callback) { const scanDirectory = (dir, onComplete) => { readdir(dir, { withFileTypes: true }, (error, entries) => { if (error) { return onComplete(error); } const foundFiles = []; let pendingOperations = 0; let hasError = false; if (entries.length === 0) { return onComplete(null, []); } const checkComplete = () => { if (--pendingOperations === 0 && !hasError) { onComplete(null, foundFiles); } }; const handleError = (error) => { if (!hasError) { hasError = true; onComplete(error); } }; for (const entry of entries) { const fullPath = join(dir, entry.name); if (entry.isDirectory()) { pendingOperations++; scanDirectory(fullPath, (error, nestedFiles) => { if (error) { handleError(error); } else if (nestedFiles) { foundFiles.push(...nestedFiles); } checkComplete(); }); } else if (entry.isFile() && entry.name.endsWith(pattern)) { foundFiles.push(fullPath); } } if (pendingOperations === 0) { onComplete(null, foundFiles); } }); }; scanDirectory(directoryPath, callback); } //# sourceMappingURL=filesystem.js.map