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
65import { openAndroid } from '../android/open';
import c from '../colors';
import {
resolvePlatform,
runPlatformHook,
runTask,
isValidPlatform,
selectPlatforms,
promptForPlatform,
} from '../common';
import type { Config } from '../definitions';
import { fatal, isFatal } from '../errors';
import { openIOS } from '../ios/open';
import { logger } from '../log';
export async function openCommand(config: Config, selectedPlatformName: string): Promise<void> {
if (selectedPlatformName && !(await isValidPlatform(selectedPlatformName))) {
const platformDir = resolvePlatform(config, selectedPlatformName);
if (platformDir) {
await runPlatformHook(config, selectedPlatformName, platformDir, 'capacitor:open');
} else {
logger.error(`Platform ${c.input(selectedPlatformName)} not found.`);
}
} else {
const platforms = await selectPlatforms(config, selectedPlatformName);
let platformName: string;
if (platforms.length === 1) {
platformName = platforms[0];
} else {
platformName = await promptForPlatform(
platforms.filter(createOpenablePlatformFilter(config)),
`Please choose a platform to open:`,
);
}
try {
await open(config, platformName);
} catch (e: any) {
if (!isFatal(e)) {
fatal(e.stack ?? e);
}
throw e;
}
}
}
function createOpenablePlatformFilter(config: Config): (platform: string) => boolean {
return (platform) => platform === config.ios.name || platform === config.android.name;
}
export async function open(config: Config, platformName: string): Promise<void> {
if (platformName === config.ios.name) {
await runTask('Opening the Xcode workspace...', () => {
return openIOS(config);
});
} else if (platformName === config.android.name) {
return openAndroid(config);
} else if (platformName === config.web.name) {
return Promise.resolve();
} else {
throw `Platform ${platformName} is not valid.`;
}
}