@@ -82,7 +82,6 @@ const _rollbackRetireShallowNodes = Symbol.for('rollbackRetireShallowNodes')
82
82
const _rollbackCreateSparseTree = Symbol . for ( 'rollbackCreateSparseTree' )
83
83
const _rollbackMoveBackRetiredUnchanged = Symbol . for ( 'rollbackMoveBackRetiredUnchanged' )
84
84
const _saveIdealTree = Symbol . for ( 'saveIdealTree' )
85
- const _saveLockFile = Symbol ( 'saveLockFile' )
86
85
const _copyIdealToActual = Symbol ( 'copyIdealToActual' )
87
86
const _addOmitsToTrashList = Symbol ( 'addOmitsToTrashList' )
88
87
const _packageLockOnly = Symbol ( 'packageLockOnly' )
@@ -1404,64 +1403,53 @@ module.exports = cls => class Reifier extends cls {
1404
1403
}
1405
1404
}
1406
1405
1407
- // preserve indentation, if possible
1408
- const {
1409
- [ Symbol . for ( 'indent' ) ] : indent ,
1410
- } = this . idealTree . package
1411
- const format = indent === undefined ? ' ' : indent
1412
-
1413
- const saveOpt = {
1414
- format : ( this [ _formatPackageLock ] && format ) ? format
1415
- : this [ _formatPackageLock ] ,
1416
- }
1417
-
1418
- const promises = [ this [ _saveLockFile ] ( saveOpt ) ]
1419
-
1420
- const updatePackageJson = async ( tree ) => {
1421
- const pkgJson = await PackageJson . load ( tree . path )
1422
- . catch ( ( ) => new PackageJson ( tree . path ) )
1423
- const {
1424
- dependencies = { } ,
1425
- devDependencies = { } ,
1426
- optionalDependencies = { } ,
1427
- peerDependencies = { } ,
1428
- // bundleDependencies is not required by PackageJson like the other fields here
1429
- // PackageJson also doesn't omit an empty array for this field so defaulting this
1430
- // to an empty array would add that field to every package.json file.
1431
- bundleDependencies,
1432
- } = tree . package
1433
-
1434
- pkgJson . update ( {
1435
- dependencies,
1436
- devDependencies,
1437
- optionalDependencies,
1438
- peerDependencies,
1439
- bundleDependencies,
1440
- } )
1441
- await pkgJson . save ( )
1442
- }
1443
-
1444
1406
if ( save ) {
1445
1407
for ( const tree of updatedTrees ) {
1446
1408
// refresh the edges so they have the correct specs
1447
1409
tree . package = tree . package
1448
- promises . push ( updatePackageJson ( tree ) )
1410
+ const pkgJson = await PackageJson . load ( tree . path )
1411
+ . catch ( ( ) => new PackageJson ( tree . path ) )
1412
+ const {
1413
+ dependencies = { } ,
1414
+ devDependencies = { } ,
1415
+ optionalDependencies = { } ,
1416
+ peerDependencies = { } ,
1417
+ // bundleDependencies is not required by PackageJson like the other
1418
+ // fields here PackageJson also doesn't omit an empty array for this
1419
+ // field so defaulting this to an empty array would add that field to
1420
+ // every package.json file.
1421
+ bundleDependencies,
1422
+ } = tree . package
1423
+
1424
+ pkgJson . update ( {
1425
+ dependencies,
1426
+ devDependencies,
1427
+ optionalDependencies,
1428
+ peerDependencies,
1429
+ bundleDependencies,
1430
+ } )
1431
+ await pkgJson . save ( )
1449
1432
}
1450
1433
}
1451
1434
1452
- await Promise . all ( promises )
1453
- process . emit ( 'timeEnd' , 'reify:save' )
1454
- return true
1455
- }
1435
+ // before now edge specs could be changing, affecting the `requires` field
1436
+ // in the package lock, so we hold off saving to the very last action
1437
+ if ( this [ _usePackageLock ] ) {
1438
+ // preserve indentation, if possible
1439
+ let format = this . idealTree . package [ Symbol . for ( 'indent' ) ]
1440
+ if ( format === undefined ) {
1441
+ format = ' '
1442
+ }
1456
1443
1457
- async [ _saveLockFile ] ( saveOpt ) {
1458
- if ( ! this [ _usePackageLock ] ) {
1459
- return
1444
+ // TODO this ignores options.save
1445
+ await this . idealTree . meta . save ( {
1446
+ format : ( this [ _formatPackageLock ] && format ) ? format
1447
+ : this [ _formatPackageLock ] ,
1448
+ } )
1460
1449
}
1461
1450
1462
- const { meta } = this . idealTree
1463
-
1464
- return meta . save ( saveOpt )
1451
+ process . emit ( 'timeEnd' , 'reify:save' )
1452
+ return true
1465
1453
}
1466
1454
1467
1455
async [ _copyIdealToActual ] ( ) {
0 commit comments