|
1 | 1 | package lockfile |
2 | 2 |
|
3 | 3 | import ( |
4 | | - "encoding/json" |
5 | | - "fmt" |
6 | | - "os" |
| 4 | + "github.com/google/osv-scalibr/extractor/filesystem/language/php/composerlock" |
7 | 5 | ) |
8 | 6 |
|
9 | | -type ComposerPackage struct { |
10 | | - Name string `json:"name"` |
11 | | - Version string `json:"version"` |
12 | | - Dist struct { |
13 | | - Reference string `json:"reference"` |
14 | | - } `json:"dist"` |
15 | | -} |
16 | | - |
17 | | -type ComposerLock struct { |
18 | | - Packages []ComposerPackage `json:"packages"` |
19 | | - PackagesDev []ComposerPackage `json:"packages-dev"` |
20 | | -} |
21 | | - |
22 | 7 | const ComposerEcosystem Ecosystem = "Packagist" |
23 | 8 |
|
24 | 9 | func ParseComposerLock(pathToLockfile string) ([]PackageDetails, error) { |
25 | | - var parsedLockfile *ComposerLock |
26 | | - |
27 | | - lockfileContents, err := os.ReadFile(pathToLockfile) |
28 | | - |
29 | | - if err != nil { |
30 | | - return []PackageDetails{}, fmt.Errorf("could not read %s: %w", pathToLockfile, err) |
31 | | - } |
32 | | - |
33 | | - err = json.Unmarshal(lockfileContents, &parsedLockfile) |
34 | | - |
35 | | - if err != nil { |
36 | | - return []PackageDetails{}, fmt.Errorf("could not parse %s: %w", pathToLockfile, err) |
37 | | - } |
38 | | - |
39 | | - packages := make( |
40 | | - []PackageDetails, |
41 | | - 0, |
42 | | - // len cannot return negative numbers, but the types can't reflect that |
43 | | - uint64(len(parsedLockfile.Packages))+uint64(len(parsedLockfile.PackagesDev)), |
44 | | - ) |
45 | | - |
46 | | - for _, composerPackage := range parsedLockfile.Packages { |
47 | | - packages = append(packages, PackageDetails{ |
48 | | - Name: composerPackage.Name, |
49 | | - Version: composerPackage.Version, |
50 | | - Commit: composerPackage.Dist.Reference, |
51 | | - Ecosystem: ComposerEcosystem, |
52 | | - CompareAs: ComposerEcosystem, |
53 | | - }) |
54 | | - } |
55 | | - |
56 | | - for _, composerPackage := range parsedLockfile.PackagesDev { |
57 | | - packages = append(packages, PackageDetails{ |
58 | | - Name: composerPackage.Name, |
59 | | - Version: composerPackage.Version, |
60 | | - Commit: composerPackage.Dist.Reference, |
61 | | - Ecosystem: ComposerEcosystem, |
62 | | - CompareAs: ComposerEcosystem, |
63 | | - }) |
64 | | - } |
65 | | - |
66 | | - return packages, nil |
| 10 | + return extract(pathToLockfile, composerlock.New(), ComposerEcosystem) |
67 | 11 | } |
0 commit comments