MCPcopy Create free account
hub / github.com/XmirrorSecurity/OpenSCA-cli / ParsePackageJsonWithYarnLock

Function ParsePackageJsonWithYarnLock

opensca/sca/javascript/yarn.go:80–121  ·  view source on GitHub ↗

ParsePackageJsonWithYarnLock 借助yarn.lock文件解析pacakge.json

(pkgjson *PackageJson, yarnlock map[string]*YarnLock)

Source from the content-addressed store, hash-verified

78
79// ParsePackageJsonWithYarnLock 借助yarn.lock文件解析pacakge.json
80func ParsePackageJsonWithYarnLock(pkgjson *PackageJson, yarnlock map[string]*YarnLock) *model.DepGraph {
81
82 root := &model.DepGraph{Name: pkgjson.Name, Version: pkgjson.Version, Path: pkgjson.File.Relpath()}
83
84 _dep := _depSet().LoadOrStore
85
86 // 记录依赖
87 for _, lock := range yarnlock {
88 dep := _dep(lock.Name, lock.Version)
89 for name, version := range lock.Dependencies {
90 sub := yarnlock[npmkey(name, version)]
91 if sub != nil {
92 dep.AppendChild(_dep(sub.Name, sub.Version))
93 }
94 }
95 }
96
97 for name, version := range pkgjson.Dependencies {
98 lock := yarnlock[npmkey(name, version)]
99 if lock != nil {
100 root.AppendChild(_dep(lock.Name, lock.Version))
101 } else {
102 root.AppendChild(&model.DepGraph{Name: name, Version: version})
103 }
104 }
105
106 for name, version := range pkgjson.DevDependencies {
107 lock := yarnlock[npmkey(name, version)]
108 if lock != nil {
109 dep := _dep(lock.Name, lock.Version)
110 devdep := _dep(lock.Name, lock.Version, "dev")
111 for _, c := range dep.Children {
112 devdep.AppendChild(c)
113 }
114 root.AppendChild(devdep)
115 } else {
116 root.AppendChild(&model.DepGraph{Name: name, Version: version, Develop: true})
117 }
118 }
119
120 return root
121}

Callers 1

ScaMethod · 0.85

Calls 4

AppendChildMethod · 0.95
_depSetFunction · 0.85
npmkeyFunction · 0.85
RelpathMethod · 0.80

Tested by

no test coverage detected