@@ -10,7 +10,7 @@ import { analytics, json, tags } from '@angular-devkit/core';
1010import debug from 'debug' ;
1111import { v4 as uuidV4 } from 'uuid' ;
1212import { colors } from '../utilities/color' ;
13- import { getWorkspace , getWorkspaceRaw } from '../utilities/config' ;
13+ import { AngularWorkspace , getWorkspace } from '../utilities/config' ;
1414import { analyticsDisabled , analyticsShareDisabled } from '../utilities/environment-options' ;
1515import { isTTY } from '../utilities/tty' ;
1616import { VERSION } from '../utilities/version' ;
@@ -64,27 +64,21 @@ export function isPackageNameSafeForAnalytics(name: string): boolean {
6464 * @param global Which config to use. "global" for user-level, and "local" for project-level.
6565 * @param value Either a user ID, true to generate a new User ID, or false to disable analytics.
6666 */
67- export function setAnalyticsConfig ( global : boolean , value : string | boolean ) : void {
67+ export async function setAnalyticsConfig ( global : boolean , value : string | boolean ) : Promise < void > {
6868 const level = global ? 'global' : 'local' ;
6969 analyticsDebug ( 'setting %s level analytics to: %s' , level , value ) ;
70- const [ config , configPath ] = getWorkspaceRaw ( level ) ;
71- if ( ! config || ! configPath ) {
70+ const workspace = await getWorkspace ( level ) ;
71+ if ( ! workspace ) {
7272 throw new Error ( `Could not find ${ level } workspace.` ) ;
7373 }
7474
75- const cli = config . get ( [ 'cli' ] ) ;
76-
77- if ( cli !== undefined && ! json . isJsonObject ( cli as json . JsonValue ) ) {
78- throw new Error ( `Invalid config found at ${ configPath } . CLI should be an object.` ) ;
79- }
80-
81- if ( value === true ) {
82- value = uuidV4 ( ) ;
75+ const cli = ( workspace . extensions [ 'cli' ] ??= { } ) ;
76+ if ( ! workspace || ! json . isJsonObject ( cli ) ) {
77+ throw new Error ( `Invalid config found at ${ workspace . filePath } . CLI should be an object.` ) ;
8378 }
8479
85- config . modify ( [ 'cli' , 'analytics' ] , value ) ;
86- config . save ( ) ;
87-
80+ cli . analytics = value === true ? uuidV4 ( ) : value ;
81+ await workspace . save ( ) ;
8882 analyticsDebug ( 'done' ) ;
8983}
9084
@@ -96,8 +90,8 @@ export function setAnalyticsConfig(global: boolean, value: string | boolean): vo
9690export async function promptAnalytics ( global : boolean , force = false ) : Promise < boolean > {
9791 analyticsDebug ( 'prompting user' ) ;
9892 const level = global ? 'global' : 'local' ;
99- const [ config , configPath ] = getWorkspaceRaw ( level ) ;
100- if ( ! config || ! configPath ) {
93+ const workspace = await getWorkspace ( level ) ;
94+ if ( ! workspace ) {
10195 throw new Error ( `Could not find a ${ level } workspace. Are you in a project?` ) ;
10296 }
10397
@@ -117,7 +111,7 @@ export async function promptAnalytics(global: boolean, force = false): Promise<b
117111 } ,
118112 ] ) ;
119113
120- setAnalyticsConfig ( global , answers . analytics ) ;
114+ await setAnalyticsConfig ( global , answers . analytics ) ;
121115
122116 if ( answers . analytics ) {
123117 console . log ( '' ) ;
@@ -172,7 +166,7 @@ export async function getAnalytics(
172166 try {
173167 const workspace = await getWorkspace ( level ) ;
174168 const analyticsConfig : string | undefined | null | { uid ?: string } =
175- workspace ?. getCli ( ) [ 'analytics' ] ;
169+ workspace ?. getCli ( ) ?. [ 'analytics' ] ;
176170 analyticsDebug ( 'Workspace Analytics config found: %j' , analyticsConfig ) ;
177171
178172 if ( analyticsConfig === false ) {
@@ -218,7 +212,7 @@ export async function getSharedAnalytics(): Promise<AnalyticsCollector | undefin
218212 // If anything happens we just keep the NOOP analytics.
219213 try {
220214 const globalWorkspace = await getWorkspace ( 'global' ) ;
221- const analyticsConfig = globalWorkspace ?. getCli ( ) [ 'analyticsSharing' ] ;
215+ const analyticsConfig = globalWorkspace ?. getCli ( ) ?. [ 'analyticsSharing' ] ;
222216
223217 if ( ! analyticsConfig || ! analyticsConfig . tracking || ! analyticsConfig . uuid ) {
224218 return undefined ;
@@ -294,10 +288,10 @@ function analyticsConfigValueToHumanFormat(value: unknown): 'enabled' | 'disable
294288}
295289
296290export async function getAnalyticsInfoString ( ) : Promise < string > {
297- const [ globalWorkspace ] = getWorkspaceRaw ( 'global' ) ;
298- const [ localWorkspace ] = getWorkspaceRaw ( 'local' ) ;
299- const globalSetting = globalWorkspace ?. get ( [ 'cli' , ' analytics'] ) ;
300- const localSetting = localWorkspace ?. get ( [ 'cli' , ' analytics'] ) ;
291+ const globalWorkspace = await getWorkspace ( 'global' ) ;
292+ const localWorkspace = await getWorkspace ( 'local' ) ;
293+ const globalSetting = globalWorkspace ?. getCli ( ) ?. [ ' analytics'] ;
294+ const localSetting = localWorkspace ?. getCli ( ) ?. [ ' analytics'] ;
301295
302296 const analyticsInstance = await createAnalytics (
303297 ! ! localWorkspace /** workspace */ ,
0 commit comments