( path: string, content: string, )
| 59 | |
| 60 | /** Dispatch to the correct parser based on filename. */ |
| 61 | export function parseManifest( |
| 62 | path: string, |
| 63 | content: string, |
| 64 | ): ManifestParseResult { |
| 65 | const basename = path.split('/').pop() ?? ''; |
| 66 | switch (basename) { |
| 67 | case 'package.json': |
| 68 | return parsePackageJson(content, path); |
| 69 | case 'go.mod': |
| 70 | return parseGoMod(content, path); |
| 71 | case 'requirements.txt': |
| 72 | return parseRequirementsTxt(content, path); |
| 73 | case 'pyproject.toml': |
| 74 | return parsePyprojectToml(content, path); |
| 75 | case 'Cargo.toml': |
| 76 | return parseCargoToml(content, path); |
| 77 | default: |
| 78 | return { |
| 79 | dependencies: [], |
| 80 | errors: [`Unsupported manifest: ${basename}`], |
| 81 | }; |
| 82 | } |
| 83 | } |
| 84 | |
| 85 | /** Deterministic package ID: pkg:{registry}:{name} */ |
| 86 | export function packageId(registry: string, name: string): string { |
no test coverage detected