Skip to content

Commit 6fef3be

Browse files
committed
fixup! refactor(@angular/cli): remove old package manager utilities
1 parent 9145f5e commit 6fef3be

File tree

10 files changed

+40
-34
lines changed

10 files changed

+40
-34
lines changed

packages/angular/cli/src/command-builder/command-module.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
import { schema } from '@angular-devkit/core';
1010
import { readFileSync } from 'node:fs';
11-
import { join, posix } from 'node:path';
11+
import { join, posix, relative } from 'node:path';
1212
import type { ArgumentsCamelCase, Argv, CommandModule as YargsCommandModule } from 'yargs';
1313
import { Parser as yargsParser } from 'yargs/helpers';
1414
import { getAnalyticsUserId } from '../analytics/analytics';
@@ -73,9 +73,10 @@ export abstract class CommandModule<T extends {} = {}> implements CommandModuleI
7373
describe: this.describe,
7474
...(this.longDescriptionPath
7575
? {
76-
longDescriptionRelativePath: path
77-
.relative(join(__dirname, '../../../../'), this.longDescriptionPath)
78-
.replace(/\\/g, posix.sep),
76+
longDescriptionRelativePath: relative(
77+
join(__dirname, '../../../../'),
78+
this.longDescriptionPath,
79+
).replace(/\\/g, posix.sep),
7980
longDescription: readFileSync(this.longDescriptionPath, 'utf8').replace(
8081
/\r\n/g,
8182
'\n',

packages/angular/cli/src/command-builder/command-runner.ts

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ import {
1818
RootCommands,
1919
RootCommandsAliases,
2020
} from '../commands/command-config';
21-
import { PackageManagerName, createPackageManager } from '../package-managers';
21+
import { createPackageManager } from '../package-managers';
22+
import { ConfiguredPackageManagerInfo } from '../package-managers/factory';
2223
import { colors } from '../utilities/color';
2324
import { AngularWorkspace, getProjectByCwd, getWorkspace } from '../utilities/config';
2425
import { assertIsError } from '../utilities/error';
@@ -64,13 +65,12 @@ export async function runCommand(args: string[], logger: logging.Logger): Promis
6465
}
6566

6667
const root = workspace?.basePath ?? process.cwd();
67-
68-
const cacheConfig = getCacheConfig(workspace);
68+
const cacheConfig = workspace && getCacheConfig(workspace);
6969
const packageManager = await createPackageManager({
7070
cwd: root,
7171
logger,
72-
dryRun,
73-
tempDirectory: cacheConfig.enabled ? cacheConfig.path : undefined,
72+
dryRun: dryRun || help || jsonHelp || getYargsCompletions,
73+
tempDirectory: cacheConfig?.enabled ? cacheConfig.path : undefined,
7474
configuredPackageManager: await getConfiguredPackageManager(
7575
root,
7676
workspace,
@@ -187,14 +187,14 @@ async function getCommandsToRegister(
187187
* @param root The root directory of the workspace.
188188
* @param localWorkspace The local workspace.
189189
* @param globalWorkspace The global workspace.
190-
* @returns The package manager name.
190+
* @returns The package manager name and version.
191191
*/
192192
async function getConfiguredPackageManager(
193193
root: string,
194194
localWorkspace: AngularWorkspace | undefined,
195195
globalWorkspace: AngularWorkspace,
196-
): Promise<PackageManagerName | undefined> {
197-
let result: PackageManagerName | undefined;
196+
): Promise<ConfiguredPackageManagerInfo | undefined> {
197+
let result: ConfiguredPackageManagerInfo | undefined;
198198

199199
try {
200200
const packageJsonPath = join(root, 'package.json');
@@ -223,13 +223,15 @@ async function getConfiguredPackageManager(
223223
/**
224224
* Get the package manager name from a JSON value.
225225
* @param source The JSON value to get the package manager name from.
226-
* @returns The package manager name.
226+
* @returns The package manager name and version.
227227
*/
228-
function getPackageManager(source: JsonValue | undefined): PackageManagerName | undefined {
228+
function getPackageManager(
229+
source: JsonValue | undefined,
230+
): ConfiguredPackageManagerInfo | undefined {
229231
if (source && isJsonObject(source)) {
230232
const value = source['packageManager'];
231233
if (typeof value === 'string') {
232-
return value.split('@', 1)[0] as unknown as PackageManagerName;
234+
return value.split('@', 2) as unknown as ConfiguredPackageManagerInfo;
233235
}
234236
}
235237

packages/angular/cli/src/command-builder/definitions.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
import { logging } from '@angular-devkit/core';
1010
import type { Argv, CamelCaseKey } from 'yargs';
11-
import { PackageManager } from '../package-managers/package-manager';
11+
import type { PackageManager } from '../package-managers/package-manager';
1212
import { AngularWorkspace } from '../utilities/config';
1313

1414
export enum CommandScope {

packages/angular/cli/src/commands/update/cli.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import {
2020
Options,
2121
} from '../../command-builder/command-module';
2222
import { SchematicEngineHost } from '../../command-builder/utilities/schematic-engine-host';
23-
import { InstalledPackage, PackageManager, PackageManifest } from '../../package-managers';
23+
import type { InstalledPackage, PackageManager, PackageManifest } from '../../package-managers';
2424
import { colors } from '../../utilities/color';
2525
import { disableVersionCheck } from '../../utilities/environment-options';
2626
import { assertIsError } from '../../utilities/error';

packages/angular/cli/src/commands/update/utilities/cli-version.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import { spawnSync } from 'node:child_process';
1111
import { existsSync, promises as fs } from 'node:fs';
1212
import { join, resolve } from 'node:path';
1313
import * as semver from 'semver';
14-
import { PackageManager } from '../../../package-managers';
14+
import type { PackageManager } from '../../../package-managers';
1515
import { VERSION } from '../../../utilities/version';
1616
import { ANGULAR_PACKAGES_REGEXP } from './constants';
1717

packages/angular/cli/src/commands/version/cli.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ export default class VersionCommandModule
5656
*/
5757
async run(options: { json?: boolean }): Promise<void> {
5858
const { logger } = this.context;
59-
const versionInfo = gatherVersionInfo(this.context);
59+
const versionInfo = await gatherVersionInfo(this.context);
6060

6161
if (options.json) {
6262
// eslint-disable-next-line no-console

packages/angular/cli/src/commands/version/version-info.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
*/
88

99
import { createRequire } from 'node:module';
10+
import { CommandContext } from '../../command-builder/definitions';
11+
import { PackageManager } from '../../package-managers';
1012
import { VERSION } from '../../utilities/version';
1113

1214
/**
@@ -81,10 +83,7 @@ const PACKAGE_PATTERNS = [
8183
* Gathers all the version information from the environment and workspace.
8284
* @returns An object containing all the version information.
8385
*/
84-
export function gatherVersionInfo(context: {
85-
packageManager: { name: string; version: string | undefined };
86-
root: string;
87-
}): VersionInfo {
86+
export async function gatherVersionInfo(context: CommandContext): Promise<VersionInfo> {
8887
// Trailing slash is used to allow the path to be treated as a directory
8988
const workspaceRequire = createRequire(context.root + '/');
9089

@@ -132,7 +131,7 @@ export function gatherVersionInfo(context: {
132131
},
133132
packageManager: {
134133
name: context.packageManager.name,
135-
version: context.packageManager.version,
134+
version: await context.packageManager.getVersion(),
136135
},
137136
},
138137
packages,

packages/angular/cli/src/package-managers/factory.ts

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,11 @@ import { Logger } from './logger';
1414
import { PackageManager } from './package-manager';
1515
import { PackageManagerName, SUPPORTED_PACKAGE_MANAGERS } from './package-manager-descriptor';
1616

17+
/**
18+
* Information about the package manager to use for a given project.
19+
*/
20+
export type ConfiguredPackageManagerInfo = [name?: PackageManagerName, version?: string];
21+
1722
/**
1823
* The default package manager to use when none is discovered or configured.
1924
*/
@@ -59,19 +64,18 @@ async function getPackageManagerVersion(
5964
async function determinePackageManager(
6065
host: Host,
6166
cwd: string,
62-
configured?: PackageManagerName,
67+
configured: ConfiguredPackageManagerInfo = [],
6368
logger?: Logger,
6469
dryRun?: boolean,
6570
): Promise<{
6671
name: PackageManagerName;
6772
source: 'configured' | 'discovered' | 'default';
6873
version?: string;
6974
}> {
70-
let name: PackageManagerName;
75+
let [name, version] = configured;
7176
let source: 'configured' | 'discovered' | 'default';
7277

73-
if (configured) {
74-
name = configured;
78+
if (name) {
7579
source = 'configured';
7680
logger?.debug(`Using configured package manager: '${name}'.`);
7781
} else {
@@ -89,7 +93,6 @@ async function determinePackageManager(
8993
}
9094
}
9195

92-
let version: string | undefined;
9396
if (name === 'yarn' && !dryRun) {
9497
assert.deepStrictEqual(
9598
SUPPORTED_PACKAGE_MANAGERS.yarn.versionCommand,
@@ -98,7 +101,7 @@ async function determinePackageManager(
98101
);
99102

100103
try {
101-
version = await getPackageManagerVersion(host, cwd, name, logger);
104+
version ??= await getPackageManagerVersion(host, cwd, name, logger);
102105
if (version && major(version) < 2) {
103106
name = 'yarn-classic';
104107
logger?.debug(`Detected yarn classic. Using 'yarn-classic'.`);
@@ -124,7 +127,7 @@ async function determinePackageManager(
124127
*/
125128
export async function createPackageManager(options: {
126129
cwd: string;
127-
configuredPackageManager?: PackageManagerName;
130+
configuredPackageManager?: ConfiguredPackageManagerInfo;
128131
logger?: Logger;
129132
dryRun?: boolean;
130133
tempDirectory?: string;

packages/angular/cli/src/package-managers/host.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
*/
1515

1616
import { type SpawnOptions, spawn } from 'node:child_process';
17-
import { Stats, constants, existsSync } from 'node:fs';
17+
import { Stats, constants } from 'node:fs';
1818
import { copyFile, mkdir, mkdtemp, readFile, readdir, rm, stat, writeFile } from 'node:fs/promises';
1919
import { platform, tmpdir } from 'node:os';
2020
import { join } from 'node:path';
@@ -27,9 +27,10 @@ export interface Host {
2727
/**
2828
* Creates a directory.
2929
* @param path The path to the directory.
30+
* @param options Options for the directory creation.
3031
* @returns A promise that resolves when the directory is created.
3132
*/
32-
mkdir(path: string): Promise<void>;
33+
mkdir(path: string, options?: { recursive?: boolean }): Promise<string | undefined>;
3334

3435
/**
3536
* Gets the stats of a file or directory.

packages/angular/cli/src/package-managers/package-manager.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -550,7 +550,7 @@ export class PackageManager {
550550
await this.host.stat(tempDirectory);
551551
} catch {
552552
// If the cache directory doesn't exist, create it.
553-
await this.host.mkdir(tempDirectory);
553+
await this.host.mkdir(tempDirectory, { recursive: true });
554554
}
555555
}
556556

0 commit comments

Comments
 (0)