feat(version): add workspace support · npm/cli@8c9e247 (original) (raw)

1

``

`-

const libversion = require('libnpmversion')

`

``

1

`+

const libnpmversion = require('libnpmversion')

`

``

2

`+

const { resolve } = require('path')

`

``

3

`+

const { promisify } = require('util')

`

``

4

`+

const readFile = promisify(require('fs').readFile)

`

2

5

``

``

6

`+

const getWorkspaces = require('./workspaces/get-workspaces.js')

`

3

7

`const BaseCommand = require('./base-command.js')

`

``

8

+

4

9

`class Version extends BaseCommand {

`

5

10

`static get description () {

`

6

11

`return 'Bump a package version'

`

`@@ -11,9 +16,23 @@ class Version extends BaseCommand {

`

11

16

`return 'version'

`

12

17

`}

`

13

18

``

``

19

`+

/* istanbul ignore next - see test/lib/load-all-commands.js */

`

``

20

`+

static get params () {

`

``

21

`+

return [

`

``

22

`+

'allow-same-version',

`

``

23

`+

'commit-hooks',

`

``

24

`+

'git-tag-version',

`

``

25

`+

'json',

`

``

26

`+

'preid',

`

``

27

`+

'sign-git-tag',

`

``

28

`+

'workspace',

`

``

29

`+

'workspaces',

`

``

30

`+

]

`

``

31

`+

}

`

``

32

+

14

33

`/* istanbul ignore next - see test/lib/load-all-commands.js */

`

15

34

`static get usage () {

`

16

``

`-

return ['[ | major | minor | patch | premajor | preminor | prepatch | prerelease [--preid=] | from-git]']

`

``

35

`+

return ['[ | major | minor | patch | premajor | preminor | prepatch | prerelease | from-git]']

`

17

36

`}

`

18

37

``

19

38

`async completion (opts) {

`

`@@ -37,6 +56,10 @@ class Version extends BaseCommand {

`

37

56

`return this.version(args).then(() => cb()).catch(cb)

`

38

57

`}

`

39

58

``

``

59

`+

execWorkspaces (args, filters, cb) {

`

``

60

`+

this.versionWorkspaces(args, filters).then(() => cb()).catch(cb)

`

``

61

`+

}

`

``

62

+

40

63

`async version (args) {

`

41

64

`switch (args.length) {

`

42

65

`case 0:

`

`@@ -48,20 +71,42 @@ class Version extends BaseCommand {

`

48

71

`}

`

49

72

`}

`

50

73

``

``

74

`+

async versionWorkspaces (args, filters) {

`

``

75

`+

switch (args.length) {

`

``

76

`+

case 0:

`

``

77

`+

return this.listWorkspaces(filters)

`

``

78

`+

case 1:

`

``

79

`+

return this.changeWorkspaces(args, filters)

`

``

80

`+

default:

`

``

81

`+

throw this.usage

`

``

82

`+

}

`

``

83

`+

}

`

``

84

+

51

85

`async change (args) {

`

52

86

`const prefix = this.npm.config.get('tag-version-prefix')

`

53

``

`-

const version = await libversion(args[0], {

`

``

87

`+

const version = await libnpmversion(args[0], {

`

54

88

` ...this.npm.flatOptions,

`

55

89

`path: this.npm.prefix,

`

56

90

`})

`

57

91

`` return this.npm.output(${prefix}${version})

``

58

92

`}

`

59

93

``

60

``

`-

async list () {

`

61

``

`-

const results = {}

`

62

``

`-

const { promisify } = require('util')

`

63

``

`-

const { resolve } = require('path')

`

64

``

`-

const readFile = promisify(require('fs').readFile)

`

``

94

`+

async changeWorkspaces (args, filters) {

`

``

95

`+

const prefix = this.npm.config.get('tag-version-prefix')

`

``

96

`+

const workspaces =

`

``

97

`+

await getWorkspaces(filters, { path: this.npm.localPrefix })

`

``

98

`+

for (const [name, path] of workspaces) {

`

``

99

`+

this.npm.output(name)

`

``

100

`+

const version = await libnpmversion(args[0], {

`

``

101

`+

...this.npm.flatOptions,

`

``

102

`+

'git-tag-version': false,

`

``

103

`+

path,

`

``

104

`+

})

`

``

105

`` +

this.npm.output(${prefix}${version})

``

``

106

`+

}

`

``

107

`+

}

`

``

108

+

``

109

`+

async list (results = {}) {

`

65

110

`const pj = resolve(this.npm.prefix, 'package.json')

`

66

111

``

67

112

`const pkg = await readFile(pj, 'utf8')

`

`@@ -80,5 +125,22 @@ class Version extends BaseCommand {

`

80

125

`else

`

81

126

`this.npm.output(results)

`

82

127

`}

`

``

128

+

``

129

`+

async listWorkspaces (filters) {

`

``

130

`+

const results = {}

`

``

131

`+

const workspaces =

`

``

132

`+

await getWorkspaces(filters, { path: this.npm.localPrefix })

`

``

133

`+

for (const [, path] of workspaces) {

`

``

134

`+

const pj = resolve(path, 'package.json')

`

``

135

`+

// getWorkspaces has already parsed this so we know it won't error

`

``

136

`+

const pkg = await readFile(pj, 'utf8')

`

``

137

`+

.then(data => JSON.parse(data))

`

``

138

+

``

139

`+

if (pkg.name && pkg.version)

`

``

140

`+

results[pkg.name] = pkg.version

`

``

141

`+

}

`

``

142

`+

return this.list(results)

`

``

143

`+

}

`

83

144

`}

`

``

145

+

84

146

`module.exports = Version

`