-
-
Notifications
You must be signed in to change notification settings - Fork 197
/
Copy pathlocal-build-service.ts
53 lines (46 loc) · 2.28 KB
/
local-build-service.ts
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
import { EventEmitter } from "events";
import { BUILD_OUTPUT_EVENT_NAME, ANDROID_RELEASE_BUILD_ERROR_MESSAGE } from "../constants";
import { attachAwaitDetach } from "../common/helpers";
export class LocalBuildService extends EventEmitter implements ILocalBuildService {
constructor(private $projectData: IProjectData,
private $mobileHelper: Mobile.IMobileHelper,
private $errors: IErrors,
private $platformsData: IPlatformsData,
private $platformService: IPlatformService,
private $projectDataService: IProjectDataService) {
super();
}
public async build(platform: string, platformBuildOptions: IPlatformBuildData): Promise<string> {
if (this.$mobileHelper.isAndroidPlatform(platform) && platformBuildOptions.release && (!platformBuildOptions.keyStorePath || !platformBuildOptions.keyStorePassword || !platformBuildOptions.keyStoreAlias || !platformBuildOptions.keyStoreAliasPassword)) {
this.$errors.fail(ANDROID_RELEASE_BUILD_ERROR_MESSAGE);
}
this.$projectData.initializeProjectData(platformBuildOptions.projectDir);
const prepareInfo: IPreparePlatformInfo = {
platform,
appFilesUpdaterOptions: platformBuildOptions,
projectData: this.$projectData,
env: platformBuildOptions.env,
config: {
provision: platformBuildOptions.provision,
teamId: platformBuildOptions.teamId,
sdk: null,
frameworkPath: null,
ignoreScripts: false
}
};
await this.$platformService.preparePlatform(prepareInfo);
const handler = (data: any) => {
data.projectDir = platformBuildOptions.projectDir;
this.emit(BUILD_OUTPUT_EVENT_NAME, data);
};
platformBuildOptions.buildOutputStdio = "pipe";
await attachAwaitDetach(BUILD_OUTPUT_EVENT_NAME, this.$platformService, handler, this.$platformService.buildPlatform(platform, platformBuildOptions, this.$projectData));
return this.$platformService.lastOutputPath(platform, platformBuildOptions, this.$projectData);
}
public async cleanNativeApp(data: ICleanNativeAppData): Promise<void> {
const projectData = this.$projectDataService.getProjectData(data.projectDir);
const platformData = this.$platformsData.getPlatformData(data.platform, projectData);
await platformData.platformProjectService.cleanProject(platformData.projectRoot, projectData);
}
}
$injector.register("localBuildService", LocalBuildService);