@@ -10,7 +10,7 @@ import { analytics, json, tags } from '@angular-devkit/core';
10
10
import debug from 'debug' ;
11
11
import { v4 as uuidV4 } from 'uuid' ;
12
12
import { colors } from '../utilities/color' ;
13
- import { getWorkspace , getWorkspaceRaw } from '../utilities/config' ;
13
+ import { AngularWorkspace , getWorkspace } from '../utilities/config' ;
14
14
import { analyticsDisabled , analyticsShareDisabled } from '../utilities/environment-options' ;
15
15
import { isTTY } from '../utilities/tty' ;
16
16
import { VERSION } from '../utilities/version' ;
@@ -64,27 +64,21 @@ export function isPackageNameSafeForAnalytics(name: string): boolean {
64
64
* @param global Which config to use. "global" for user-level, and "local" for project-level.
65
65
* @param value Either a user ID, true to generate a new User ID, or false to disable analytics.
66
66
*/
67
- export function setAnalyticsConfig ( global : boolean , value : string | boolean ) : void {
67
+ export async function setAnalyticsConfig ( global : boolean , value : string | boolean ) : Promise < void > {
68
68
const level = global ? 'global' : 'local' ;
69
69
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 ) {
72
72
throw new Error ( `Could not find ${ level } workspace.` ) ;
73
73
}
74
74
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.` ) ;
83
78
}
84
79
85
- config . modify ( [ 'cli' , 'analytics' ] , value ) ;
86
- config . save ( ) ;
87
-
80
+ cli . analytics = value === true ? uuidV4 ( ) : value ;
81
+ await workspace . save ( ) ;
88
82
analyticsDebug ( 'done' ) ;
89
83
}
90
84
@@ -96,8 +90,8 @@ export function setAnalyticsConfig(global: boolean, value: string | boolean): vo
96
90
export async function promptAnalytics ( global : boolean , force = false ) : Promise < boolean > {
97
91
analyticsDebug ( 'prompting user' ) ;
98
92
const level = global ? 'global' : 'local' ;
99
- const [ config , configPath ] = getWorkspaceRaw ( level ) ;
100
- if ( ! config || ! configPath ) {
93
+ const workspace = await getWorkspace ( level ) ;
94
+ if ( ! workspace ) {
101
95
throw new Error ( `Could not find a ${ level } workspace. Are you in a project?` ) ;
102
96
}
103
97
@@ -117,7 +111,7 @@ export async function promptAnalytics(global: boolean, force = false): Promise<b
117
111
} ,
118
112
] ) ;
119
113
120
- setAnalyticsConfig ( global , answers . analytics ) ;
114
+ await setAnalyticsConfig ( global , answers . analytics ) ;
121
115
122
116
if ( answers . analytics ) {
123
117
console . log ( '' ) ;
@@ -172,7 +166,7 @@ export async function getAnalytics(
172
166
try {
173
167
const workspace = await getWorkspace ( level ) ;
174
168
const analyticsConfig : string | undefined | null | { uid ?: string } =
175
- workspace ?. getCli ( ) [ 'analytics' ] ;
169
+ workspace ?. getCli ( ) ?. [ 'analytics' ] ;
176
170
analyticsDebug ( 'Workspace Analytics config found: %j' , analyticsConfig ) ;
177
171
178
172
if ( analyticsConfig === false ) {
@@ -218,7 +212,7 @@ export async function getSharedAnalytics(): Promise<AnalyticsCollector | undefin
218
212
// If anything happens we just keep the NOOP analytics.
219
213
try {
220
214
const globalWorkspace = await getWorkspace ( 'global' ) ;
221
- const analyticsConfig = globalWorkspace ?. getCli ( ) [ 'analyticsSharing' ] ;
215
+ const analyticsConfig = globalWorkspace ?. getCli ( ) ?. [ 'analyticsSharing' ] ;
222
216
223
217
if ( ! analyticsConfig || ! analyticsConfig . tracking || ! analyticsConfig . uuid ) {
224
218
return undefined ;
@@ -294,10 +288,10 @@ function analyticsConfigValueToHumanFormat(value: unknown): 'enabled' | 'disable
294
288
}
295
289
296
290
export 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'] ;
301
295
302
296
const analyticsInstance = await createAnalytics (
303
297
! ! localWorkspace /** workspace */ ,
0 commit comments