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

Function ParseYarnLock

opensca/sca/javascript/yarn.go:17–77  ·  view source on GitHub ↗

ParseYarnLock 解析yarn.lock文件结构

(file *model.File)

Source from the content-addressed store, hash-verified

15
16// ParseYarnLock 解析yarn.lock文件结构
17func ParseYarnLock(file *model.File) map[string]*YarnLock {
18
19 /*
20 name@version[, name@version]:
21 version "xxx"
22 dependencies:
23 name "xxx"
24 name "xxx"
25 */
26
27 lock := map[string]*YarnLock{}
28
29 var lastDep *YarnLock
30
31 file.ReadLine(func(line string) {
32
33 if strings.HasPrefix(line, "#") {
34 return
35 }
36
37 if !strings.HasPrefix(line, " ") && strings.HasSuffix(line, ":") {
38 lastDep = &YarnLock{Dependencies: map[string]string{}}
39 for tag := range strings.SplitSeq(line, ",") {
40 i := strings.LastIndex(tag, "@")
41 if i == -1 {
42 logs.Warnf("parse file %s line: %s fail", file.Relpath(), line)
43 continue
44 }
45 name := strings.Trim(tag[:i], ` ":`)
46 version := strings.Trim(tag[i+1:], ` ":`)
47 lastDep.Name = name
48 lock[npmkey(name, version)] = lastDep
49 }
50 return
51 }
52
53 if strings.HasPrefix(line, " ") {
54 line = strings.TrimSpace(line)
55 i := strings.Index(line, " ")
56 if i == -1 {
57 return
58 }
59 name := strings.Trim(line[:i], `"`)
60 version := strings.Trim(line[i+1:], `"`)
61 lastDep.Dependencies[name] = version
62 return
63 }
64
65 if strings.HasPrefix(line, " ") {
66 line = strings.TrimSpace(line)
67 if !strings.HasPrefix(line, "version") {
68 return
69 }
70 lastDep.Version = strings.Trim(strings.TrimPrefix(line, "version"), `" `)
71 return
72 }
73
74 })

Callers 1

ScaMethod · 0.85

Calls 5

WarnfFunction · 0.92
npmkeyFunction · 0.85
ReadLineMethod · 0.80
RelpathMethod · 0.80
IndexMethod · 0.80

Tested by

no test coverage detected