1
1
"use strict" ;
2
2
3
3
const fs = require ( "fs-extra" ) ;
4
+ const pMap = require ( "p-map" ) ;
4
5
const writeJsonFile = require ( "write-json-file" ) ;
5
6
const writePkg = require ( "write-pkg" ) ;
6
7
@@ -34,23 +35,37 @@ class InitCommand extends Command {
34
35
}
35
36
36
37
execute ( ) {
37
- this . ensurePackageJSON ( ) ;
38
- this . ensureLernaJson ( ) ;
39
- this . ensurePackagesDir ( ) ;
40
- this . logger . success ( "" , "Initialized Lerna files" ) ;
38
+ let chain = Promise . resolve ( ) ;
39
+
40
+ chain = chain . then ( ( ) => this . ensurePackageJSON ( ) ) ;
41
+ chain = chain . then ( ( ) => this . ensureLernaJson ( ) ) ;
42
+ chain = chain . then ( ( ) => this . ensurePackagesDir ( ) ) ;
43
+
44
+ return chain . then ( ( ) => {
45
+ this . logger . success ( "" , "Initialized Lerna files" ) ;
46
+ } ) ;
41
47
}
42
48
43
49
ensurePackageJSON ( ) {
50
+ const { packageJsonLocation } = this . repository ;
44
51
let { packageJson } = this . repository ;
52
+ let chain = Promise . resolve ( ) ;
45
53
46
54
if ( ! packageJson ) {
47
- packageJson = { } ;
55
+ packageJson = {
56
+ name : "root" ,
57
+ private : true ,
58
+ } ;
48
59
this . logger . info ( "" , "Creating package.json" ) ;
60
+
61
+ // initialize with default indentation so write-pkg doesn't screw it up with tabs
62
+ chain = chain . then ( ( ) => writeJsonFile ( packageJsonLocation , packageJson , { indent : 2 } ) ) ;
49
63
} else {
50
64
this . logger . info ( "" , "Updating package.json" ) ;
51
65
}
52
66
53
67
let targetDependencies ;
68
+
54
69
if ( packageJson . dependencies && packageJson . dependencies . lerna ) {
55
70
// lerna is a dependency in the current project
56
71
targetDependencies = packageJson . dependencies ;
@@ -59,17 +74,20 @@ class InitCommand extends Command {
59
74
if ( ! packageJson . devDependencies ) {
60
75
packageJson . devDependencies = { } ;
61
76
}
77
+
62
78
targetDependencies = packageJson . devDependencies ;
63
79
}
64
80
65
81
targetDependencies . lerna = this . exact ? this . lernaVersion : `^${ this . lernaVersion } ` ;
66
82
67
- writePkg . sync ( this . repository . packageJsonLocation , packageJson ) ;
83
+ chain = chain . then ( ( ) => writePkg ( packageJsonLocation , packageJson ) ) ;
84
+
85
+ return chain ;
68
86
}
69
87
70
88
ensureLernaJson ( ) {
71
89
// lernaJson already defaulted to empty object in Repository constructor
72
- const { lernaJson, version : repositoryVersion } = this . repository ;
90
+ const { lernaJson, lernaJsonLocation , version : repositoryVersion } = this . repository ;
73
91
74
92
let version ;
75
93
@@ -81,7 +99,7 @@ class InitCommand extends Command {
81
99
version = "0.0.0" ;
82
100
}
83
101
84
- if ( ! this . repository . version ) {
102
+ if ( ! repositoryVersion ) {
85
103
this . logger . info ( "" , "Creating lerna.json" ) ;
86
104
} else {
87
105
this . logger . info ( "" , "Updating lerna.json" ) ;
@@ -102,12 +120,13 @@ class InitCommand extends Command {
102
120
initConfig . exact = true ;
103
121
}
104
122
105
- writeJsonFile . sync ( this . repository . lernaJsonLocation , lernaJson , { indent : 2 } ) ;
123
+ return writeJsonFile ( lernaJsonLocation , lernaJson , { indent : 2 , detectIndent : true } ) ;
106
124
}
107
125
108
126
ensurePackagesDir ( ) {
109
127
this . logger . info ( "" , "Creating packages directory" ) ;
110
- this . repository . packageParentDirs . map ( dir => fs . mkdirpSync ( dir ) ) ;
128
+
129
+ return pMap ( this . repository . packageParentDirs , dir => fs . mkdirp ( dir ) ) ;
111
130
}
112
131
}
113
132
0 commit comments