(requireLine: string)
| 1519 | |
| 1520 | // Helper function to convert require statements to ESM imports |
| 1521 | export const convertRequireToImport = (requireLine: string): string | null => { |
| 1522 | // Remove leading/trailing whitespace and get the indentation |
| 1523 | const indent = requireLine.match(/^(\s*)/)?.[1] || '' |
| 1524 | const trimmed = requireLine.trim() |
| 1525 | |
| 1526 | // Match patterns like: const/let/var name = require('module') |
| 1527 | const defaultRequireMatch = trimmed.match(/^(const|let|var)\s+(\w+)\s*=\s*require\s*\(\s*['"`]([^'"`]+)['"`]\s*\)/) |
| 1528 | if (defaultRequireMatch) { |
| 1529 | const [, , varName, moduleName] = defaultRequireMatch |
| 1530 | return `${indent}import ${varName} from '${moduleName}';` |
| 1531 | } |
| 1532 | |
| 1533 | // Match patterns like: const { name1, name2 } = require('module') |
| 1534 | const destructureMatch = trimmed.match(/^(const|let|var)\s+\{([^}]+)\}\s*=\s*require\s*\(\s*['"`]([^'"`]+)['"`]\s*\)/) |
| 1535 | if (destructureMatch) { |
| 1536 | const [, , destructuredVars, moduleName] = destructureMatch |
| 1537 | return `${indent}import { ${destructuredVars.trim()} } from '${moduleName}';` |
| 1538 | } |
| 1539 | |
| 1540 | // Match patterns like: const name = require('module').property |
| 1541 | const propertyMatch = trimmed.match(/^(const|let|var)\s+(\w+)\s*=\s*require\s*\(\s*['"`]([^'"`]+)['"`]\s*\)\.(\w+)/) |
| 1542 | if (propertyMatch) { |
| 1543 | const [, , varName, moduleName, property] = propertyMatch |
| 1544 | return `${indent}import { ${property} as ${varName} } from '${moduleName}';` |
| 1545 | } |
| 1546 | |
| 1547 | // If no pattern matches, return null to skip conversion |
| 1548 | return null |
| 1549 | } |
| 1550 | |
| 1551 | /** |
| 1552 | * Parse output if it's a stringified JSON or array |
no outgoing calls
no test coverage detected