(packageName: string, readmeContent?: string | null)
| 64 | } |
| 65 | |
| 66 | function hasReadmeDevInstallHint(packageName: string, readmeContent?: string | null): boolean { |
| 67 | if (!readmeContent) return false |
| 68 | |
| 69 | const escapedName = escapeRegExp(packageName) |
| 70 | const escapedNpmName = escapeRegExp(`npm:${packageName}`) |
| 71 | const packageSpec = `(?:${escapedName}|${escapedNpmName})(?:@[\\w.-]+)?` |
| 72 | |
| 73 | const patterns = [ |
| 74 | // npm install -D pkg / pnpm add --save-dev pkg |
| 75 | new RegExp( |
| 76 | String.raw`(?:npm|pnpm|yarn|bun|vlt)\s+(?:install|add|i)\s+(?:--save-dev|--dev|-d)\s+${packageSpec}`, |
| 77 | 'i', |
| 78 | ), |
| 79 | // npm install pkg --save-dev / pnpm add pkg -D |
| 80 | new RegExp( |
| 81 | String.raw`(?:npm|pnpm|yarn|bun|vlt)\s+(?:install|add|i)\s+${packageSpec}\s+(?:--save-dev|--dev|-d)`, |
| 82 | 'i', |
| 83 | ), |
| 84 | // deno add -D npm:pkg |
| 85 | new RegExp(String.raw`deno\s+add\s+(?:--dev|-D)\s+${packageSpec}`, 'i'), |
| 86 | ] |
| 87 | |
| 88 | return patterns.some(pattern => pattern.test(readmeContent)) |
| 89 | } |
| 90 | |
| 91 | export function getDevDependencySuggestion( |
| 92 | packageName: string, |
no test coverage detected