Skip to content

Commit

Permalink
Minor code cleanup.
Browse files Browse the repository at this point in the history
  • Loading branch information
iclanton committed Jun 12, 2024
1 parent a688ae8 commit e0b36d4
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 16 deletions.
5 changes: 2 additions & 3 deletions libraries/rush-lib/src/api/RushConfigurationProject.ts
Original file line number Diff line number Diff line change
Expand Up @@ -412,9 +412,8 @@ export class RushConfigurationProject {
if (dependencySet) {
for (const [dependency, version] of Object.entries(dependencySet)) {
const dependencySpecifier: DependencySpecifier = new DependencySpecifier(dependency, version);
const dependencyName: string = dependencySpecifier.aliasTarget
? dependencySpecifier.aliasTarget.packageName
: dependencySpecifier.packageName;
const dependencyName: string =
dependencySpecifier.aliasTarget?.packageName ?? dependencySpecifier.packageName;
// Skip if we can't find the local project or it's a cyclic dependency
const localProject: RushConfigurationProject | undefined =
this.rushConfiguration.getProjectByName(dependencyName);
Expand Down
29 changes: 16 additions & 13 deletions libraries/rush-lib/src/logic/DependencySpecifier.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,30 +10,32 @@ import { InternalError } from '@rushstack/node-core-library';
* `"workspace:*"`
* `"workspace:alias@1.2.3"`
*/
const WORKSPACE_PREF_REGEX: RegExp = /^workspace:((?<alias>[^._/][^@]*)@)?(?<version>.*)$/;
const WORKSPACE_PREFIX_REGEX: RegExp = /^workspace:((?<alias>[^._/][^@]*)@)?(?<version>.*)$/;

/**
* resolve workspace protocol(from `@pnpm/workspace.spec-parser`).
* used by pnpm. see [pkgs-graph](https://github.com/pnpm/pnpm/blob/27c33f0319f86c45c1645d064cd9c28aada80780/workspace/pkgs-graph/src/index.ts#L49)
*/
class WorkspaceSpec {
public alias?: string;
public version: string;
public readonly alias?: string;
public readonly version: string;
public readonly versionSpecifier: string;

public constructor(version: string, alias?: string) {
this.version = version;
this.alias = alias;
this.versionSpecifier = alias ? `${alias}@${version}` : version;
}

public static parse(pref: string): WorkspaceSpec | undefined {
const parts: RegExpExecArray | null = WORKSPACE_PREF_REGEX.exec(pref);
if (!parts?.groups) return undefined;
return new WorkspaceSpec(parts.groups.version, parts.groups.alias);
public static tryParse(pref: string): WorkspaceSpec | undefined {
const parts: RegExpExecArray | null = WORKSPACE_PREFIX_REGEX.exec(pref);
if (parts?.groups) {
return new WorkspaceSpec(parts.groups.version, parts.groups.alias);
}
}

public toString(): `workspace:${string}` {
const { alias, version } = this;
return alias ? `workspace:${alias}@${version}` : `workspace:${version}`;
return `workspace:${this.versionSpecifier}`;
}
}

Expand Down Expand Up @@ -122,17 +124,18 @@ export class DependencySpecifier {

// Workspace ranges are a feature from PNPM and Yarn. Set the version specifier
// to the trimmed version range.
if (versionSpecifier.startsWith('workspace:')) {
const workspaceSpecResult: WorkspaceSpec | undefined = WorkspaceSpec.tryParse(versionSpecifier);
if (workspaceSpecResult) {
this.specifierType = DependencySpecifierType.Workspace;
this.versionSpecifier = versionSpecifier.slice(this.specifierType.length + 1).trim();
this.versionSpecifier = workspaceSpecResult.versionSpecifier;

const workspaceSpecResult: WorkspaceSpec | undefined = WorkspaceSpec.parse(versionSpecifier);
if (workspaceSpecResult?.alias) {
if (workspaceSpecResult.alias) {
// "workspace:some-package@^1.2.3" should be resolved as alias
this.aliasTarget = new DependencySpecifier(workspaceSpecResult.alias, workspaceSpecResult.version);
} else {
this.aliasTarget = undefined;
}

return;
}

Expand Down

0 comments on commit e0b36d4

Please sign in to comment.