diff --git a/packages/core/src/package.ts b/packages/core/src/package.ts index e0afb453..bb79e25d 100644 --- a/packages/core/src/package.ts +++ b/packages/core/src/package.ts @@ -251,11 +251,12 @@ export class Package { /** * Mutate given dependency (could be local/external) spec according to type + * @param {String} pkgName - package name * @param {Object} resolved npa metadata */ removeDependencyWorkspaceProtocolPrefix(pkgName: string, resolved: NpaResolveResult) { const depName = resolved.name as string; - const depCollection = this.retrievePackageDependencies(depName); + const depCollection = this.retrievePackageDependencies(depName, true); const workspaceTarget = resolved?.workspaceTarget ?? ''; if ( @@ -359,7 +360,13 @@ export class Package { } } - private retrievePackageDependencies(depName: string): string[] { + /** + * Retrieve the dependencies collection which contain the dependency name provided, we'll search in all type of dependencies/devDependencies/... + * @param {String} depName - dependency name + * @param {Boolean} [includePeerDepsFallback] - should we include peerDependencies as fallback? + * @returns {Array} - array of dependencies that contains the dependency name provided + */ + private retrievePackageDependencies(depName: string, includePeerDepsFallback = false): string[] { // first, try runtime dependencies let depCollection = this.dependencies; @@ -373,6 +380,11 @@ export class Package { depCollection = this.devDependencies; } + // fall back to peerDependencies (when enabled) + if (includePeerDepsFallback && (!depCollection || !depCollection[depName])) { + depCollection = this.peerDependencies; + } + return depCollection; } } diff --git a/packages/publish/src/publish-command.ts b/packages/publish/src/publish-command.ts index 3bc9e060..803c0e5d 100644 --- a/packages/publish/src/publish-command.ts +++ b/packages/publish/src/publish-command.ts @@ -615,11 +615,9 @@ export class PublishCommand extends Command { } // 2. remove any "workspace:" prefix from the package to be published any of external dependencies (without anything being bumped) - // we will only accept "workspace:" with semver version, for example "workspace:1.2.3" is ok but "workspace:*" will throw + // we will only accept "workspace:" with semver version, for example "workspace:1.2.3" is ok but "workspace:*" will log an error for (const [_depName, resolved] of node.externalDependencies) { - if (/^(workspace:)+(.*)$/.test(resolved.workspaceTarget)) { - node.pkg.removeDependencyWorkspaceProtocolPrefix(node.name, resolved); - } + node.pkg.removeDependencyWorkspaceProtocolPrefix(node.name, resolved); } // writing changes to disk handled in serializeChanges()