Skip to content

Commit 8f925eb

Browse files
committed
convert packageManagerInstallTask to typescript
1 parent 8ce6b17 commit 8f925eb

File tree

4 files changed

+39
-24
lines changed

4 files changed

+39
-24
lines changed

src/environment.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import fs from 'node:fs';
2-
import path, { isAbsolute, join } from 'node:path';
2+
import path, { isAbsolute } from 'node:path';
33
import EventEmitter from 'node:events';
44
import { pathToFileURL } from 'node:url';
55
import { createRequire } from 'node:module';
@@ -1261,7 +1261,7 @@ class Environment extends Base {
12611261
return packageManagerInstallTask({
12621262
adapter,
12631263
memFs,
1264-
packageJsonFile: join(this.cwd, 'package.json'),
1264+
packageJsonLocation: this.cwd,
12651265
skipInstall,
12661266
nodePackageManager,
12671267
customInstallTask,

src/package-manager.js src/package-manager.ts

+26-11
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,22 @@
1-
import path, { dirname } from 'node:path';
1+
import { dirname, join, resolve } from 'node:path';
22
import createdLogger from 'debug';
33
import preferredPm from 'preferred-pm';
44
import { execa } from 'execa';
5+
import type { MemFsEditorFile } from 'mem-fs-editor';
6+
import { type InputOutputAdapter } from '@yeoman/types';
7+
import { type Store } from 'mem-fs';
58

69
const debug = createdLogger('yeoman:environment:package-manager');
710

11+
export type PackageManagerInstallTaskOptions = {
12+
memFs: Store<MemFsEditorFile>;
13+
packageJsonLocation: string;
14+
adapter: InputOutputAdapter;
15+
nodePackageManager?: string;
16+
customInstallTask?: (nodePackageManager: string | undefined, defaultTask: () => Promise<boolean>) => boolean | Promise<boolean>;
17+
skipInstall?: boolean;
18+
};
19+
820
/**
921
* Executes package manager install.
1022
* - checks if package.json was committed.
@@ -16,14 +28,22 @@ const debug = createdLogger('yeoman:environment:package-manager');
1628
packageJsonFile: join(this.cwd, 'package.json');
1729
1830
*/
19-
export async function packageManagerInstallTask({ memFs, packageJsonFile, customInstallTask, adapter, nodePackageManager, skipInstall }) {
31+
export async function packageManagerInstallTask({
32+
memFs,
33+
packageJsonLocation,
34+
customInstallTask,
35+
adapter,
36+
nodePackageManager,
37+
skipInstall,
38+
}: PackageManagerInstallTaskOptions) {
39+
packageJsonLocation = resolve(packageJsonLocation);
2040
/**
2141
* @private
2242
* Get the destination package.json file.
2343
* @return {Vinyl | undefined} a Vinyl file.
2444
*/
2545
function getDestinationPackageJson() {
26-
return memFs.get(path.resolve(packageJsonFile));
46+
return memFs.get(join(packageJsonLocation, 'package.json'));
2747
}
2848

2949
/**
@@ -61,7 +81,7 @@ Changes to package.json were detected.`);
6181
}
6282

6383
// eslint-disable-next-line unicorn/no-await-expression-member
64-
let packageManagerName = nodePackageManager ?? (await preferredPm(dirname(packageJsonFile)))?.name;
84+
let packageManagerName = nodePackageManager ?? (await preferredPm(packageJsonLocation))?.name;
6585

6686
const execPackageManager = async () => {
6787
if (!packageManagerName) {
@@ -76,17 +96,12 @@ Changes to package.json were detected.`);
7696

7797
adapter.log(`
7898
Running ${packageManagerName} install for you to install the required dependencies.`);
79-
await execa(packageManagerName, ['install'], { stdio: 'inherit', cwd: dirname(packageJsonFile) });
99+
await execa(packageManagerName, ['install'], { stdio: 'inherit', cwd: packageJsonLocation });
80100
return true;
81101
};
82102

83103
if (customInstallTask) {
84-
const result = customInstallTask(packageManagerName, execPackageManager);
85-
if (!result || !result.then) {
86-
return true;
87-
}
88-
89-
return result;
104+
return customInstallTask(packageManagerName, execPackageManager);
90105
}
91106

92107
return execPackageManager();

test/generator-features.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import Generator from 'yeoman-generator';
66
import { esmocha, expect, mock } from 'esmocha';
77
import helpers from './helpers.js';
88

9-
const { packageManagerInstallTask } = await mock('../src/package-manager.js');
9+
const { packageManagerInstallTask } = await mock('../src/package-manager.ts');
1010
const { default: Environment } = await import('../src/environment.js');
1111

1212
const require = createRequire(import.meta.url);

test/package-manager.js

+10-10
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,13 @@ Running ${pm} install for you to install the required dependencies.`;
2121
describe('environment (package-manager)', () => {
2222
let adapter;
2323
let memFs;
24-
let packageJsonFile;
24+
let packageJsonLocation;
2525

2626
beforeEach(() => {
2727
adapter = { log: esmocha.fn() };
2828
execa.mockReturnValue();
2929
memFs = { get: esmocha.fn() };
30-
packageJsonFile = path.join(__dirname, 'fixtures', 'package-manager', 'npm', 'package.json');
30+
packageJsonLocation = path.join(__dirname, 'fixtures', 'package-manager', 'npm');
3131
preferredPm.mockResolvedValue({ name: 'npm' });
3232
});
3333

@@ -37,7 +37,7 @@ describe('environment (package-manager)', () => {
3737

3838
describe('#packageManagerInstallTask()', () => {
3939
describe('without a package.json', async () => {
40-
beforeEach(() => packageManagerInstallTask({ adapter, memFs, packageJsonFile }));
40+
beforeEach(() => packageManagerInstallTask({ adapter, memFs, packageJsonLocation }));
4141

4242
it('should not log', () => {
4343
expect(adapter.log).not.toBeCalled();
@@ -52,7 +52,7 @@ describe('environment (package-manager)', () => {
5252
describe('when package.json was not committed', () => {
5353
beforeEach(async () => {
5454
memFs.get.mockReturnValue({ committed: false });
55-
await packageManagerInstallTask({ adapter, memFs, packageJsonFile });
55+
await packageManagerInstallTask({ adapter, memFs, packageJsonLocation });
5656
});
5757

5858
it('should log', () => {
@@ -76,7 +76,7 @@ No change to package.json was detected. No package manager install will be execu
7676

7777
describe('with skipInstall', () => {
7878
beforeEach(async () => {
79-
await packageManagerInstallTask({ adapter, memFs, packageJsonFile, skipInstall: true });
79+
await packageManagerInstallTask({ adapter, memFs, packageJsonLocation, skipInstall: true });
8080
});
8181

8282
it('should log', async () => {
@@ -92,7 +92,7 @@ No change to package.json was detected. No package manager install will be execu
9292

9393
describe('with npm', () => {
9494
beforeEach(async () => {
95-
await packageManagerInstallTask({ adapter, memFs, packageJsonFile });
95+
await packageManagerInstallTask({ adapter, memFs, packageJsonLocation });
9696
});
9797

9898
it('should log', async () => {
@@ -110,7 +110,7 @@ No change to package.json was detected. No package manager install will be execu
110110
describe('with yarn', () => {
111111
beforeEach(async () => {
112112
preferredPm.mockResolvedValue({ name: 'yarn' });
113-
await packageManagerInstallTask({ adapter, memFs, packageJsonFile });
113+
await packageManagerInstallTask({ adapter, memFs, packageJsonLocation });
114114
});
115115

116116
it('should log', async () => {
@@ -128,7 +128,7 @@ No change to package.json was detected. No package manager install will be execu
128128
describe('with pnpm', () => {
129129
beforeEach(async () => {
130130
preferredPm.mockResolvedValue({ name: 'pnpm' });
131-
await packageManagerInstallTask({ adapter, memFs, packageJsonFile });
131+
await packageManagerInstallTask({ adapter, memFs, packageJsonLocation });
132132
});
133133

134134
it('should log', async () => {
@@ -145,7 +145,7 @@ No change to package.json was detected. No package manager install will be execu
145145

146146
describe('with an unsupported package manager', () => {
147147
beforeEach(async () => {
148-
await packageManagerInstallTask({ adapter, memFs, packageJsonFile, nodePackageManager: 'foo' });
148+
await packageManagerInstallTask({ adapter, memFs, packageJsonLocation, nodePackageManager: 'foo' });
149149
});
150150

151151
it('should log', async () => {
@@ -162,7 +162,7 @@ No change to package.json was detected. No package manager install will be execu
162162
describe('error detecting package manager', () => {
163163
beforeEach(async () => {
164164
preferredPm.mockResolvedValue(null);
165-
await packageManagerInstallTask({ adapter, memFs, packageJsonFile });
165+
await packageManagerInstallTask({ adapter, memFs, packageJsonLocation });
166166
});
167167

168168
it('should log', async () => {

0 commit comments

Comments
 (0)