From f49261b05b42c3dfaad356a6ff6dfe008e1e6bd6 Mon Sep 17 00:00:00 2001 From: Alan Agius Date: Tue, 27 Nov 2018 16:15:09 +0100 Subject: [PATCH 1/2] fix(@schematics/update): fix update on local packages pacote requires the `@version` to determine if the package is local, git, http or in the npm repo. Fixes #13059 --- packages/schematics/update/update/index.ts | 5 +++-- packages/schematics/update/update/npm.ts | 4 +++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/schematics/update/update/index.ts b/packages/schematics/update/update/index.ts index 9a2ab9a55361..1a5279afb61d 100644 --- a/packages/schematics/update/update/index.ts +++ b/packages/schematics/update/update/index.ts @@ -780,10 +780,11 @@ export default function(options: UpdateSchema): Rule { const packages = _buildPackageList(options, allDependencies, logger); const usingYarn = options.packageManager === 'yarn'; - return observableFrom([...allDependencies.keys()]).pipe( + return observableFrom(allDependencies).pipe( // Grab all package.json from the npm repository. This requires a lot of HTTP calls so we // try to parallelize as many as possible. - mergeMap(depName => getNpmPackageJson(depName, options.registry, logger, usingYarn)), + mergeMap(([depName, version]) => + getNpmPackageJson(`${depName}@${version}`, options.registry, logger, usingYarn)), // Build a map of all dependencies and their packageJson. reduce>( diff --git a/packages/schematics/update/update/npm.ts b/packages/schematics/update/update/npm.ts index 1f98ce493c67..29ab22cd089d 100644 --- a/packages/schematics/update/update/npm.ts +++ b/packages/schematics/update/update/npm.ts @@ -77,8 +77,10 @@ function readOptions(yarn = false): { [key: string]: string } { } /** - * Get the NPM repository's package.json for a package. This is p + * Get the NPM repository's package.json for a package. * @param {string} packageName The package name to fetch. + * This should include `@` if you are uncertain + * if the package is in the npm repository. * @param {string} registryUrl The NPM Registry URL to use. * @param {LoggerApi} logger A logger instance to log debug information. * @returns An observable that will put the pacakge.json content. From 9681fd42850eb09ad87f5901f28f8e03d19ddecf Mon Sep 17 00:00:00 2001 From: Alan Agius Date: Tue, 27 Nov 2018 16:54:31 +0100 Subject: [PATCH 2/2] test: add `file:` so that pacote knows it's a file --- scripts/build.ts | 2 +- scripts/create.ts | 4 ++-- tests/legacy-cli/e2e/utils/project.ts | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/scripts/build.ts b/scripts/build.ts index df1c75b23fdd..414252b6fe1a 100644 --- a/scripts/build.ts +++ b/scripts/build.ts @@ -402,7 +402,7 @@ export default async function( const obj = packageJson[depKey] as JsonObject | null; if (obj && obj[depName]) { if (argv.local) { - obj[depName] = packages[depName].tar; + obj[depName] = 'file:' + packages[depName].tar; } else if (argv.snapshot) { const pkg = packages[depName]; if (!pkg.snapshotRepo) { diff --git a/scripts/create.ts b/scripts/create.ts index a54a527ddc2b..940972c59806 100644 --- a/scripts/create.ts +++ b/scripts/create.ts @@ -79,9 +79,9 @@ export default async function( // Set the dependencies to the new build we just used. for (const packageName of Object.keys(packages)) { if (packageJson['dependencies'].hasOwnProperty(packageName)) { - packageJson['dependencies'][packageName] = packages[packageName].tar; + packageJson['dependencies'][packageName] = 'file:' + packages[packageName].tar; } else if (packageJson['devDependencies'].hasOwnProperty(packageName)) { - packageJson['devDependencies'][packageName] = packages[packageName].tar; + packageJson['devDependencies'][packageName] = 'file:' + packages[packageName].tar; } } diff --git a/tests/legacy-cli/e2e/utils/project.ts b/tests/legacy-cli/e2e/utils/project.ts index ca292e3c682e..586d2a59e0d1 100644 --- a/tests/legacy-cli/e2e/utils/project.ts +++ b/tests/legacy-cli/e2e/utils/project.ts @@ -100,9 +100,9 @@ export function useBuiltPackages() { for (const packageName of Object.keys(packages)) { if (json['dependencies'].hasOwnProperty(packageName)) { - json['dependencies'][packageName] = packages[packageName].tar; + json['dependencies'][packageName] = 'file:' + packages[packageName].tar; } else if (json['devDependencies'].hasOwnProperty(packageName)) { - json['devDependencies'][packageName] = packages[packageName].tar; + json['devDependencies'][packageName] = 'file:' + packages[packageName].tar; } } }));