Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | 3x 3x 3x 3x 3x 3x 3x 13x 13x 2x 11x 11x 11x 11x 3x | /**
* Python Requirements Parser
*
* Parses requirements.txt files to extract Python dependencies
*/
import fs from 'fs-extra';
import path from 'path';
/**
* Parse requirements.txt file and return dependencies object
* @param {string} cwd - Current working directory
* @returns {Promise<Object>} Dependencies object with package names as keys
*/
export async function parseRequirements(cwd) {
const requirementsPath = path.join(cwd, 'requirements.txt');
const deps = {};
// Check if file exists
const exists = await fs.pathExists(requirementsPath);
Iif (!exists) {
return deps;
}
// Read file content
const content = await fs.readFile(requirementsPath, 'utf8');
// Parse each line
const lines = content.split('\n');
for (const line of lines) {
// Skip comments and empty lines
const trimmed = line.trim();
if (!trimmed || trimmed.startsWith('#') || trimmed.startsWith('-')) {
continue;
}
// Parse package name (strip version specs and extras)
const packageMatch = trimmed.match(/^([a-zA-Z0-9_-]+)/);
Eif (packageMatch) {
const packageName = packageMatch[1].toLowerCase();
deps[packageName] = true;
}
}
return deps;
} |