Files
pmg/extractor/ecosystems.go
T

61 lines
1.7 KiB
Go
Raw Permalink Normal View History

2025-06-12 18:58:58 +05:30
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 (
2025-08-29 00:21:09 +05:30
Npm PackageManagerName = "npm"
Pnpm PackageManagerName = "pnpm"
Pip PackageManagerName = "pip"
2025-12-03 20:28:45 +05:30
Pip3 PackageManagerName = "pip3"
2025-08-29 00:21:09 +05:30
Bun PackageManagerName = "bun"
2025-11-05 13:49:19 +05:30
Yarn PackageManagerName = "yarn"
2025-08-29 00:21:09 +05:30
Uv PackageManagerName = "uv"
Poetry PackageManagerName = "poetry"
2025-06-12 18:58:58 +05:30
)
type ExtractorManager struct {
extractors map[PackageManagerName]PackageManagerExtractor
}
func NewExtractorManager() *ExtractorManager {
return &ExtractorManager{
extractors: map[PackageManagerName]PackageManagerExtractor{
2025-08-29 00:21:09 +05:30
Npm: &NpmExtractor{},
Pnpm: &PnpmExtractor{},
Pip: &PipExtractor{},
Bun: &BunExtractor{},
2025-11-05 13:49:19 +05:30
Yarn: &YarnExtractor{},
2025-08-29 00:21:09 +05:30
Uv: &UvExtractor{},
Poetry: &PoetryExtractor{},
2025-12-03 20:28:45 +05:30
Pip3: &Pip3Extractor{},
2025-06-12 18:58:58 +05:30
},
}
}
func (e *ExtractorManager) GetExtractorForPackageManager(pmn PackageManagerName) PackageManagerExtractor {
return e.extractors[pmn]
}
func (e *ExtractorManager) GetSupportedFilesForPackageManager(pmn PackageManagerName) []string {
return e.extractors[pmn].GetSupportedFiles()
}