• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

nebrelbug / npm-to-yarn / 7935249420

pending completion
7935249420

push

github

nebrelbug
chore: build

174 of 179 branches covered (97.21%)

Branch coverage included in aggregate %.

291 of 294 relevant lines covered (98.98%)

134.9 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

97.59
/src/npmToPnpm.ts
1
import { parse } from './command'
3✔
2

3
function convertPnpmInstallArgs (args: string[]) {
4
  return args.map(item => {
72✔
5
    switch (item) {
183✔
6
      case '--save':
7
      case '-S':
8
        return ''
6✔
9
      case '--no-package-lock':
10
        return '--frozen-lockfile'
3✔
11
      // case '--save-dev':
12
      // case '-D':
13
      // case '--save-prod':
14
      // case '-P':
15
      // case '--save-optional':
16
      // case '-O':
17
      // case '--save-exact':
18
      // case '-E':
19
      // case '--global':
20
      // case '-g':
21
      default:
22
        return item
174✔
23
    }
24
  })
25
}
26

27
function convertFilterArg (args: string[]) {
28
  if (args.length > 1) {
18✔
29
    const filter = args.filter((item, index) => index !== 0 && !item.startsWith('-'))
18✔
30
    if (filter.length > 0) {
9✔
31
      args = args.filter((item, index) => index === 0 || item.startsWith('-'))
18✔
32
      args.push('--filter')
9✔
33
      args.push(filter.join(' '))
9✔
34
    }
35
  }
36

37
  return args
18✔
38
}
39

40
const npmToPnpmTable = {
3✔
41
  // ------------------------------
42
  install (args: string[]) {
43
    if (args.length > 1 && args.filter(item => !item.startsWith('-')).length > 1) {
144✔
44
      args[0] = 'add'
51✔
45
    }
46
    return convertPnpmInstallArgs(args)
57✔
47
  },
48
  i (args: string[]) {
49
    return npmToPnpmTable.install(args)
6✔
50
  },
51
  // ------------------------------
52
  uninstall (args: string[]) {
53
    args[0] = 'remove'
15✔
54

55
    return convertPnpmInstallArgs(args)
15✔
56
  },
57
  un (args: string[]) {
58
    return npmToPnpmTable.uninstall(args)
3✔
59
  },
60
  remove (args: string[]) {
61
    return npmToPnpmTable.uninstall(args)
3✔
62
  },
63
  r (args: string[]) {
64
    return npmToPnpmTable.uninstall(args)
3✔
65
  },
66
  rm (args: string[]) {
67
    return npmToPnpmTable.uninstall(args)
×
68
  },
69
  // ------------------------------
70
  rb (args: string[]) {
71
    return npmToPnpmTable.rebuild(args)
6✔
72
  },
73
  rebuild (args: string[]) {
74
    args[0] = 'rebuild'
12✔
75
    return convertFilterArg(args)
12✔
76
  },
77
  run: 'run',
78
  exec: 'exec',
79
  ls (args: string[]) {
80
    return npmToPnpmTable.list(args)
3✔
81
  },
82
  list (args: string[]) {
83
    return args.map(item => {
36✔
84
      if (item.startsWith('--depth=')) {
90✔
85
        return `--depth ${item.split('=')[1]}`
6✔
86
      }
87
      switch (item) {
84✔
88
        case '--production':
89
          return '--prod'
3✔
90
        case '--development':
91
          return '--dev'
3✔
92
        default:
93
          return item
78✔
94
      }
95
    })
96
  },
97
  init (args: string[]) {
98
    if (args[1] && !args[1].startsWith('-')) {
27✔
99
      args[0] = 'create'
9✔
100
    }
101
    return args.filter(item => item !== '--scope')
57✔
102
  },
103
  ln: 'link',
104
  t: 'test',
105
  test: 'test',
106
  tst: 'test',
107
  start: 'start',
108
  link: 'link',
109
  unlink (args: string[]) {
110
    return convertFilterArg(args)
6✔
111
  },
112
  outdated: 'outdated',
113
  pack: (args: string[]) => {
114
    return args.map(item => {
6✔
115
      if (item.startsWith('--pack-destination')) {
9✔
116
        return item.replace(/^--pack-destination[\s=]/, '--pack-destination ')
3✔
117
      }
118
      return item
6✔
119
    })
120
  }
121
}
122

123
export function npmToPnpm (_m: string, command: string): string {
3✔
124
  let args = parse((command || '').trim())
261!
125

126
  const index = args.findIndex(a => a === '--')
546✔
127
  if (index >= 0) {
261✔
128
    args.splice(index, 1)
15✔
129
  }
130

131
  if (args[0] in npmToPnpmTable) {
261✔
132
    const converter = npmToPnpmTable[args[0] as keyof typeof npmToPnpmTable]
240✔
133

134
    if (typeof converter === 'function') {
240✔
135
      args = converter(args)
159✔
136
    } else {
137
      args[0] = converter
81✔
138
    }
139

140
    return 'pnpm ' + args.filter(Boolean).join(' ')
240✔
141
  } else {
142
    return 'npm ' + command + "\n# couldn't auto-convert command"
21✔
143
  }
144
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc