@@ -267,13 +267,7 @@ function _performUpdate(
267267 throw new SchematicsException ( 'Could not find a package.json. Are you in a Node project?' ) ;
268268 }
269269
270- let packageJson : JsonSchemaForNpmPackageJsonFiles ;
271- try {
272- packageJson = JSON . parse ( packageJsonContent . toString ( ) ) as JsonSchemaForNpmPackageJsonFiles ;
273- } catch ( e ) {
274- assertIsError ( e ) ;
275- throw new SchematicsException ( 'package.json could not be parsed: ' + e . message ) ;
276- }
270+ const packageJson = tree . readJson ( '/package.json' ) as JsonSchemaForNpmPackageJsonFiles ;
277271
278272 const updateDependency = ( deps : Record < string , string > , name : string , newVersion : string ) => {
279273 const oldVersion = deps [ name ] ;
@@ -556,11 +550,13 @@ function _buildPackageInfo(
556550
557551 // Find out the currently installed version. Either from the package.json or the node_modules/
558552 // TODO: figure out a way to read package-lock.json and/or yarn.lock.
553+ const pkgJsonPath = `/node_modules/${ name } /package.json` ;
554+ const pkgJsonExists = tree . exists ( pkgJsonPath ) ;
555+
559556 let installedVersion : string | undefined | null ;
560- const packageContent = tree . read ( `/node_modules/${ name } /package.json` ) ;
561- if ( packageContent ) {
562- const content = JSON . parse ( packageContent . toString ( ) ) as JsonSchemaForNpmPackageJsonFiles ;
563- installedVersion = content . version ;
557+ if ( pkgJsonExists ) {
558+ const { version } = tree . readJson ( pkgJsonPath ) as JsonSchemaForNpmPackageJsonFiles ;
559+ installedVersion = version ;
564560 }
565561
566562 const packageVersionsNonDeprecated : string [ ] = [ ] ;
@@ -590,7 +586,7 @@ function _buildPackageInfo(
590586 ) ;
591587 }
592588
593- const installedPackageJson = npmPackageJson . versions [ installedVersion ] || packageContent ;
589+ const installedPackageJson = npmPackageJson . versions [ installedVersion ] || pkgJsonExists ;
594590 if ( ! installedPackageJson ) {
595591 throw new SchematicsException (
596592 `An unexpected error happened; package ${ name } has no version ${ installedVersion } .` ,
@@ -783,23 +779,14 @@ function _addPeerDependencies(
783779}
784780
785781function _getAllDependencies ( tree : Tree ) : Array < readonly [ string , VersionRange ] > {
786- const packageJsonContent = tree . read ( '/package.json' ) ;
787- if ( ! packageJsonContent ) {
788- throw new SchematicsException ( 'Could not find a package.json. Are you in a Node project?' ) ;
789- }
790-
791- let packageJson : JsonSchemaForNpmPackageJsonFiles ;
792- try {
793- packageJson = JSON . parse ( packageJsonContent . toString ( ) ) as JsonSchemaForNpmPackageJsonFiles ;
794- } catch ( e ) {
795- assertIsError ( e ) ;
796- throw new SchematicsException ( 'package.json could not be parsed: ' + e . message ) ;
797- }
782+ const { dependencies, devDependencies, peerDependencies } = tree . readJson (
783+ '/package.json' ,
784+ ) as JsonSchemaForNpmPackageJsonFiles ;
798785
799786 return [
800- ...( Object . entries ( packageJson . peerDependencies || { } ) as Array < [ string , VersionRange ] > ) ,
801- ...( Object . entries ( packageJson . devDependencies || { } ) as Array < [ string , VersionRange ] > ) ,
802- ...( Object . entries ( packageJson . dependencies || { } ) as Array < [ string , VersionRange ] > ) ,
787+ ...( Object . entries ( peerDependencies || { } ) as Array < [ string , VersionRange ] > ) ,
788+ ...( Object . entries ( devDependencies || { } ) as Array < [ string , VersionRange ] > ) ,
789+ ...( Object . entries ( dependencies || { } ) as Array < [ string , VersionRange ] > ) ,
803790 ] ;
804791}
805792
0 commit comments