mirror of
https://github.com/safedep/pmg.git
synced 2026-08-03 07:24:09 +02:00
* feat: add extractor logic for manifest files * feat: add manifest-based package installation detection * feat: add osv-scanner for extracting lockfiles * refactor: add comment for cmd parse * refactor: add Ecosystem() method to PackageManager interface * refactor: implement package-manager-specific extractors & replace osv-scanner with scalibr * Update extractor/extractor.go Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Signed-off-by: Sahil Bansal <bansalsahil315@gmail.com> --------- Signed-off-by: Sahil Bansal <bansalsahil315@gmail.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
51 lines
1.3 KiB
Go
51 lines
1.3 KiB
Go
package extractor
|
|
|
|
import (
|
|
packagev1 "buf.build/gen/go/safedep/api/protocolbuffers/go/safedep/messages/package/v1"
|
|
)
|
|
|
|
// PackageManagerExtractor defines the interface for package-manager-specific extractors
|
|
type PackageManagerExtractor interface {
|
|
// Returns the list of supported lockfiles by the package manager
|
|
GetSupportedFiles() []string
|
|
|
|
// Returns the package manager ecosysetm
|
|
GetEcosystem() packagev1.Ecosystem
|
|
|
|
// Returns the package manager name
|
|
GetPackageManager() PackageManagerName
|
|
|
|
// Extracts the packages from the lockfile
|
|
Extract(lockfilePath, scanDir string) ([]*packagev1.PackageVersion, error)
|
|
}
|
|
|
|
type PackageManagerName string
|
|
|
|
const (
|
|
Npm PackageManagerName = "npm"
|
|
Pnpm PackageManagerName = "pnpm"
|
|
Pip PackageManagerName = "pip"
|
|
)
|
|
|
|
type ExtractorManager struct {
|
|
extractors map[PackageManagerName]PackageManagerExtractor
|
|
}
|
|
|
|
func NewExtractorManager() *ExtractorManager {
|
|
return &ExtractorManager{
|
|
extractors: map[PackageManagerName]PackageManagerExtractor{
|
|
Npm: &NpmExtractor{},
|
|
Pnpm: &PnpmExtractor{},
|
|
Pip: &PipExtractor{},
|
|
},
|
|
}
|
|
}
|
|
|
|
func (e *ExtractorManager) GetExtractorForPackageManager(pmn PackageManagerName) PackageManagerExtractor {
|
|
return e.extractors[pmn]
|
|
}
|
|
|
|
func (e *ExtractorManager) GetSupportedFilesForPackageManager(pmn PackageManagerName) []string {
|
|
return e.extractors[pmn].GetSupportedFiles()
|
|
}
|