1
1
import * as choki from "chokidar" ;
2
2
import { hook } from "../common/helpers" ;
3
- import { performanceLog } from "../common/decorators" ;
3
+ import { performanceLog , cache } from "../common/decorators" ;
4
4
import { EventEmitter } from "events" ;
5
5
import * as path from "path" ;
6
- import { PREPARE_READY_EVENT_NAME , WEBPACK_COMPILATION_COMPLETE , PACKAGE_JSON_FILE_NAME , PLATFORMS_DIR_NAME } from "../constants" ;
7
-
6
+ import { PREPARE_READY_EVENT_NAME , WEBPACK_COMPILATION_COMPLETE , PACKAGE_JSON_FILE_NAME , PLATFORMS_DIR_NAME , TrackActionNames , AnalyticsEventLabelDelimiter } from "../constants" ;
8
7
interface IPlatformWatcherData {
9
8
hasWebpackCompilerProcess : boolean ;
10
9
nativeFilesWatcher : choki . FSWatcher ;
@@ -27,12 +26,14 @@ export class PrepareController extends EventEmitter {
27
26
private $projectChangesService : IProjectChangesService ,
28
27
private $projectDataService : IProjectDataService ,
29
28
private $webpackCompilerService : IWebpackCompilerService ,
30
- private $watchIgnoreListService : IWatchIgnoreListService
29
+ private $watchIgnoreListService : IWatchIgnoreListService ,
30
+ private $analyticsService : IAnalyticsService
31
31
) { super ( ) ; }
32
32
33
33
public async prepare ( prepareData : IPrepareData ) : Promise < IPrepareResultData > {
34
34
const projectData = this . $projectDataService . getProjectData ( prepareData . projectDir ) ;
35
35
36
+ await this . trackRuntimeVersion ( prepareData . platform , projectData ) ;
36
37
await this . $pluginsService . ensureAllDependenciesAreInstalled ( projectData ) ;
37
38
38
39
return this . prepareCore ( prepareData , projectData ) ;
@@ -199,5 +200,24 @@ export class PrepareController extends EventEmitter {
199
200
this . persistedData . push ( filesChangeEventData ) ;
200
201
}
201
202
}
203
+
204
+ @cache ( )
205
+ private async trackRuntimeVersion ( platform : string , projectData : IProjectData ) : Promise < void > {
206
+ let runtimeVersion : string = null ;
207
+ try {
208
+ const platformData = this . $platformsDataService . getPlatformData ( platform , projectData ) ;
209
+ const runtimeVersionData = this . $projectDataService . getNSValue ( projectData . projectDir , platformData . frameworkPackageName ) ;
210
+ runtimeVersion = runtimeVersionData && runtimeVersionData . version ;
211
+ } catch ( err ) {
212
+ this . $logger . trace ( `Unable to get runtime version for project directory: ${ projectData . projectDir } and platform ${ platform } . Error is: ` , err ) ;
213
+ }
214
+
215
+ if ( runtimeVersion ) {
216
+ await this . $analyticsService . trackEventActionInGoogleAnalytics ( {
217
+ action : TrackActionNames . UsingRuntimeVersion ,
218
+ additionalData : `${ platform . toLowerCase ( ) } ${ AnalyticsEventLabelDelimiter } ${ runtimeVersion } `
219
+ } ) ;
220
+ }
221
+ }
202
222
}
203
223
$injector . register ( "prepareController" , PrepareController ) ;
0 commit comments