-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathmodule-utils.ts
More file actions
66 lines (58 loc) · 1.93 KB
/
module-utils.ts
File metadata and controls
66 lines (58 loc) · 1.93 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
import { PgpmPackage } from '@pgpmjs/core';
import { Logger } from '@pgpmjs/logger';
import { errors } from '@pgpmjs/types';
import { Inquirerer } from 'inquirerer';
import { ParsedArgs } from 'minimist';
import { resolvePackageAlias } from './package-alias';
/**
* Handle package selection for operations that need a specific package
* Returns the selected package name, or undefined if validation fails or no packages exist
*/
export async function selectPackage(
argv: Partial<ParsedArgs>,
prompter: Inquirerer,
cwd: string,
operationName: string,
log?: Logger
): Promise<string | undefined> {
const pkg = new PgpmPackage(cwd);
const modules = await pkg.getModules();
const moduleNames = modules.map(mod => mod.getModuleName());
// Check if any modules exist
if (!moduleNames.length) {
const errorMsg = 'No modules found in the specified directory.';
if (log) {
log.error(errorMsg);
return undefined;
} else {
prompter.close();
throw errors.NOT_FOUND({}, errorMsg);
}
}
// If a specific package was provided, validate it
if (argv.package) {
const inputPackage = argv.package as string;
const packageName = resolvePackageAlias(inputPackage, cwd);
if (log) log.info(`Using specified package: ${packageName}`);
if (!moduleNames.includes(packageName)) {
const errorMsg = `Package '${packageName}' not found. Available packages: ${moduleNames.join(', ')}`;
if (log) {
log.error(errorMsg);
return undefined;
} else {
throw errors.NOT_FOUND({}, errorMsg);
}
}
return packageName;
}
// Interactive selection
const { package: selectedPackage } = await prompter.prompt(argv, [{
type: 'autocomplete',
name: 'package',
message: `Choose a package to ${operationName}`,
options: moduleNames,
required: true
}]);
if (log) log.info(`Selected package: ${selectedPackage}`);
return selectedPackage;
}