11import * as choki from "chokidar" ;
22import { hook } from "../common/helpers" ;
3- import { performanceLog } from "../common/decorators" ;
3+ import { performanceLog , cache } from "../common/decorators" ;
44import { EventEmitter } from "events" ;
55import * 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" ;
87interface IPlatformWatcherData {
98 hasWebpackCompilerProcess : boolean ;
109 nativeFilesWatcher : choki . FSWatcher ;
@@ -27,12 +26,14 @@ export class PrepareController extends EventEmitter {
2726 private $projectChangesService : IProjectChangesService ,
2827 private $projectDataService : IProjectDataService ,
2928 private $webpackCompilerService : IWebpackCompilerService ,
30- private $watchIgnoreListService : IWatchIgnoreListService
29+ private $watchIgnoreListService : IWatchIgnoreListService ,
30+ private $analyticsService : IAnalyticsService
3131 ) { super ( ) ; }
3232
3333 public async prepare ( prepareData : IPrepareData ) : Promise < IPrepareResultData > {
3434 const projectData = this . $projectDataService . getProjectData ( prepareData . projectDir ) ;
3535
36+ await this . trackRuntimeVersion ( prepareData . platform , projectData ) ;
3637 await this . $pluginsService . ensureAllDependenciesAreInstalled ( projectData ) ;
3738
3839 return this . prepareCore ( prepareData , projectData ) ;
@@ -199,5 +200,24 @@ export class PrepareController extends EventEmitter {
199200 this . persistedData . push ( filesChangeEventData ) ;
200201 }
201202 }
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+ }
202222}
203223$injector . register ( "prepareController" , PrepareController ) ;
0 commit comments