( content: string, source: string, )
| 113 | // --------------------------------------------------------------------------- |
| 114 | |
| 115 | export function parsePackageJson( |
| 116 | content: string, |
| 117 | source: string, |
| 118 | ): ManifestParseResult { |
| 119 | const errors: string[] = []; |
| 120 | const deps: ParsedDependency[] = []; |
| 121 | |
| 122 | let parsed: Record<string, unknown>; |
| 123 | try { |
| 124 | parsed = JSON.parse(content); |
| 125 | } catch (e) { |
| 126 | return { dependencies: [], errors: [`Failed to parse ${source}: ${e}`] }; |
| 127 | } |
| 128 | |
| 129 | const sections: Array<[string, string]> = [ |
| 130 | ['dependencies', 'runtime'], |
| 131 | ['devDependencies', 'dev'], |
| 132 | ['peerDependencies', 'peer'], |
| 133 | ['optionalDependencies', 'optional'], |
| 134 | ]; |
| 135 | |
| 136 | for (const [key, depType] of sections) { |
| 137 | const section = parsed[key]; |
| 138 | if (!section || typeof section !== 'object') continue; |
| 139 | for (const [name, version] of Object.entries( |
| 140 | section as Record<string, string>, |
| 141 | )) { |
| 142 | deps.push({ |
| 143 | name, |
| 144 | version: typeof version === 'string' ? version : '', |
| 145 | registry: 'npm', |
| 146 | source, |
| 147 | dependencyType: depType, |
| 148 | }); |
| 149 | } |
| 150 | } |
| 151 | |
| 152 | return { dependencies: deps, errors }; |
| 153 | } |
| 154 | |
| 155 | // --------------------------------------------------------------------------- |
| 156 | // go.mod |
no test coverage detected