(content: string, path?: string)
| 61 | * @param path - Optional path to the file for error reporting |
| 62 | */ |
| 63 | export function parseUvLock(content: string, path?: string): UvLockFile { |
| 64 | let parsed: UvLockToml; |
| 65 | try { |
| 66 | parsed = toml.parse(content) as UvLockToml; |
| 67 | } catch (error: unknown) { |
| 68 | throw new PythonAnalysisError({ |
| 69 | message: `Could not parse uv.lock: ${error instanceof Error ? error.message : String(error)}`, |
| 70 | code: 'PYTHON_UV_LOCK_PARSE_ERROR', |
| 71 | path, |
| 72 | fileContent: content, |
| 73 | }); |
| 74 | } |
| 75 | |
| 76 | const packages: UvLockPackage[] = (parsed.package ?? []) |
| 77 | .filter(pkg => pkg.name && pkg.version) |
| 78 | .map(pkg => ({ |
| 79 | name: pkg.name, |
| 80 | version: pkg.version, |
| 81 | source: pkg.source, |
| 82 | wheels: (pkg.wheels ?? []).map(w => ({ url: w.url })), |
| 83 | ...(pkg.dependencies ? { dependencies: pkg.dependencies } : {}), |
| 84 | })); |
| 85 | |
| 86 | return { version: parsed.version, packages }; |
| 87 | } |
| 88 | |
| 89 | /** |
| 90 | * Known public PyPI registry URL patterns. |
no test coverage detected