diff --git a/packages/angular/cli/src/commands/update/schematic/index_spec.ts b/packages/angular/cli/src/commands/update/schematic/index_spec.ts index 3954e3c78254..35602c44469e 100644 --- a/packages/angular/cli/src/commands/update/schematic/index_spec.ts +++ b/packages/angular/cli/src/commands/update/schematic/index_spec.ts @@ -71,6 +71,28 @@ describe('@schematics/update', () => { ); }, 45000); + it('ignores dependencies hosted on alternative/private NPM registries', async () => { + let newTree = new UnitTestTree( + new HostTree( + new virtualFs.test.TestHost({ + '/package.json': `{ + "name": "blah", + "dependencies": { + "@fortawesome/pro-thin-svg-icons": "^6.6.0", + "@nostr/tools": "npm:@jsr/nostr__tools@^2.10.3" + } + }`, + '/.npmrc': `@jsr:registry=https://npm.jsr.io`, + }), + ), + ); + + newTree = await schematicRunner.runSchematic('update', undefined, newTree); + const packageJson = JSON.parse(newTree.readContent('/package.json')); + expect(packageJson['dependencies']['@fortawesome/pro-thin-svg-icons']).toBe('^6.6.0'); + expect(packageJson['dependencies']['@nostr/tools']).toBe('npm:@jsr/nostr__tools@^2.10.3'); + }, 45000); + it('should not error with yarn 2.0 protocols', async () => { let newTree = new UnitTestTree( new HostTree( diff --git a/packages/angular/cli/src/utilities/package-metadata.ts b/packages/angular/cli/src/utilities/package-metadata.ts index b10292f93e78..27b286b31238 100644 --- a/packages/angular/cli/src/utilities/package-metadata.ts +++ b/packages/angular/cli/src/utilities/package-metadata.ts @@ -317,14 +317,20 @@ export async function getNpmPackageJson( fullMetadata: true, ...npmrc, ...(registry ? { registry } : {}), - }).then((response) => { - // While pacote type declares that versions cannot be undefined this is not the case. - if (!response.versions) { - response.versions = {}; - } + }) + .then((response) => { + // While pacote type declares that versions cannot be undefined this is not the case. + if (!response.versions) { + response.versions = {}; + } - return response; - }); + return response; + }) + .catch((err) => { + logger.warn(`Could not find ${packageName}`, { err }); + + return {} as Partial; + }); npmPackageJsonCache.set(packageName, response);