Skip to content

Commit a3ed98e

Browse files
committed
refactor: refactor deps updater
1 parent d47a8b3 commit a3ed98e

1 file changed

Lines changed: 95 additions & 98 deletions

File tree

lib/package.js

Lines changed: 95 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -657,125 +657,107 @@ export default class Package {
657657

658658
outdatedDependencies ||= {};
659659

660-
// add missed / linked deps
661-
{
662-
const linkedDependencies = await this.#getLinkedDependencies();
663-
664-
for ( const dependency of linkedDependencies.values() ) {
665-
if ( !outdatedDependencies[ dependency.name ] ) {
666-
outdatedDependencies[ dependency.name ] = [];
667-
}
668-
else if ( !Array.isArray( outdatedDependencies[ dependency.name ] ) ) {
669-
outdatedDependencies[ dependency.name ] = [ outdatedDependencies[ dependency.name ] ];
670-
}
671-
672-
if ( dependency.missed || ( linked && dependency.link ) ) {
673-
outdatedDependencies[ dependency.name ].push( {
674-
675-
// XXX location
676-
"location": "-",
677-
"missed": dependency.missed,
678-
"linked": dependency.link,
679-
} );
680-
}
681-
}
682-
}
683-
684-
var hasUpdates;
685-
686-
const updateDependencies = [];
660+
const linkedDependencies = await this.#getLinkedDependencies(),
661+
index = {};
687662

663+
// index dependencies
688664
for ( const name in outdatedDependencies ) {
689-
let specs;
665+
let dependencies;
690666

691667
if ( Array.isArray( outdatedDependencies[ name ] ) ) {
692-
specs = outdatedDependencies[ name ];
668+
dependencies = outdatedDependencies[ name ];
693669
}
694670
else {
695-
specs = [ outdatedDependencies[ name ] ];
671+
dependencies = [ outdatedDependencies[ name ] ];
696672
}
697673

698-
const index = {};
699-
700-
for ( const spec of specs ) {
674+
for ( const dependency of dependencies ) {
701675

702-
// group specs by id
703-
const id = spec.location;
676+
// group by id
677+
const id = dependency.location;
704678

705679
index[ id ] ??= {
706680
name,
707-
"current": spec.current,
708-
"wanted": spec.wanted,
709-
"latest": spec.latest,
710-
"location": spec.location,
681+
"current": dependency.current,
682+
"wanted": dependency.wanted,
683+
"latest": dependency.latest,
684+
"location": dependency.location,
711685
"dependent": new Set(),
712-
"missed": spec.missed,
713-
"linked": spec.linked,
714-
"topLevel": this.dependencies.has( name ) && spec.location === path.join( this.root, "node_modules", name ),
686+
"topLevel": this.dependencies.has( name ) && dependency.location === path.join( this.root, "node_modules", name ),
715687
};
716688

717-
index[ id ].dependent.add( spec.dependent );
689+
index[ id ].dependent.add( dependency.dependent );
690+
691+
const linkedDependency = linkedDependencies.get( name );
692+
if ( linkedDependency && linkedDependency.location === dependency.location ) {
693+
index[ id ].missed = linkedDependency.missed;
694+
index[ id ].linked = linkedDependency.linked;
695+
}
718696
}
697+
}
719698

720-
specs = Object.values( index ).map( spec => {
721-
spec.dependent = [ ...spec.dependent ].sort().join( ", " );
699+
// add missed deps
700+
for ( const dependency of linkedDependencies.values() ) {
701+
if ( !dependency.missed ) continue;
722702

723-
return spec;
724-
} );
703+
if ( !index[ dependency.location ] ) {
704+
index[ dependency.location ] = dependency;
705+
}
706+
}
725707

726-
for ( const spec of specs ) {
708+
var hasUpdates;
727709

728-
// outdated dependency
729-
spec.outdated = spec.wanted !== spec.latest && new SemanticVersion( spec.latest ).gt( spec.wanted );
710+
const updateDependencies = [];
730711

731-
// include installed, updatable deps by default
732-
let include;
712+
for ( const dependency of Object.values( index ) ) {
733713

734-
// linked
735-
if ( spec.linked ) {
714+
// outdated dependency
715+
dependency.outdated = dependency.wanted !== dependency.latest && new SemanticVersion( dependency.latest ).gt( dependency.wanted );
736716

737-
// XXX
738-
if ( linked ) {
739-
spec.updatable = true;
717+
// include installed, updatable deps by default
718+
let include;
740719

741-
include = true;
742-
}
743-
}
744-
else {
745-
spec.updatable = spec.current !== spec.wanted;
720+
// linked
721+
if ( dependency.linked ) {
746722

747-
if ( spec.updatable && spec.current ) {
748-
include = true;
749-
}
750-
}
723+
// XXX
724+
if ( linked ) {
725+
dependency.updatable = true;
751726

752-
// include top-level outdated deps
753-
if ( outdated && spec.outdated && spec.topLevel ) {
754727
include = true;
755728
}
729+
}
730+
else {
731+
dependency.updatable = dependency.current !== dependency.wanted;
756732

757-
// include linked deps
758-
if ( spec.linked ) {
733+
if ( dependency.updatable && dependency.current ) {
759734
include = true;
760735
}
736+
}
761737

762-
// include missed deps
763-
if ( spec.missed ) {
764-
include = true;
765-
}
738+
// include top-level outdated deps
739+
if ( outdated && dependency.outdated && dependency.topLevel ) {
740+
include = true;
741+
}
766742

767-
if ( !include ) continue;
743+
// include linked deps
744+
if ( dependency.linked ) {
745+
include = true;
746+
}
768747

769-
// updatable dependency
770-
if ( spec.updatable ) {
771-
hasUpdates = true;
772-
}
748+
// include missed deps
749+
if ( dependency.missed ) {
750+
include = true;
751+
}
773752

774-
updateDependencies.push( {
775-
name,
776-
...spec,
777-
} );
753+
if ( !include ) continue;
754+
755+
// updatable dependency
756+
if ( dependency.updatable ) {
757+
hasUpdates = true;
778758
}
759+
760+
updateDependencies.push( dependency );
779761
}
780762

781763
install = install && ( hasUpdates || reinstall );
@@ -798,6 +780,14 @@ export default class Package {
798780
"title": ansi.hl( "DEPENDENCY" ),
799781
"headerAlign": "center",
800782
"headerValign": "end",
783+
format ( value ) {
784+
if ( value ) {
785+
return [ ...value ].sort().join( ", " );
786+
}
787+
else {
788+
return "-";
789+
}
790+
},
801791
},
802792
"dependent": {
803793
"title": ansi.hl( "DEPENDENT" ),
@@ -1554,26 +1544,33 @@ export default class Package {
15541544

15551545
return fs.promises
15561546
.readlink( location )
1557-
.then( link =>
1547+
.then( link => {
1548+
1549+
// linked
15581550
dependencies.set( name, {
15591551
name,
15601552
location,
1561-
link,
1562-
} ) )
1553+
"linked": link,
1554+
} );
1555+
} )
15631556
.catch( e => {
15641557

1565-
// not exists
1566-
if ( e.code === "ENOENT" ) {
1567-
dependencies.set( name, {
1568-
name,
1569-
location,
1570-
"missed": true,
1571-
} );
1572-
}
1573-
1574-
// other error
1575-
else if ( e.code !== "EINVAL" ) {
1576-
console.log( e );
1558+
// not a link
1559+
if ( e.code !== "EINVAL" ) {
1560+
1561+
// missed
1562+
if ( e.code === "ENOENT" ) {
1563+
dependencies.set( name, {
1564+
name,
1565+
location,
1566+
"missed": true,
1567+
} );
1568+
}
1569+
1570+
// error
1571+
else {
1572+
console.log( e );
1573+
}
15771574
}
15781575
} );
15791576
} ) );

0 commit comments

Comments
 (0)