@@ -21,6 +21,7 @@ import {
2121 FieldRule ,
2222 ModuleDataReader ,
2323 CustomRoles ,
24+ ComposableStudio ,
2425} from './modules' ;
2526
2627import {
@@ -50,19 +51,6 @@ export abstract class AuditBaseCommand extends BaseCommand<typeof AuditBaseComma
5051 } ;
5152 }
5253
53- /**
54- * Create audit context object similar to export command
55- */
56- private createAuditContext ( moduleName ?: string ) : AuditContext {
57- return {
58- command : this . context ?. info ?. command || 'cm:stacks:audit' ,
59- module : moduleName || 'audit' ,
60- email : configHandler . get ( 'email' ) || '' ,
61- sessionId : this . context ?. sessionId || '' ,
62- authenticationMethod : configHandler . get ( 'authenticationMethod' ) || '' ,
63- } ;
64- }
65-
6654 /**
6755 * The `start` function performs an audit on content types, global fields, entries, and workflows and displays
6856 * any missing references.
@@ -81,11 +69,6 @@ export abstract class AuditBaseCommand extends BaseCommand<typeof AuditBaseComma
8169 }
8270 configHandler . set ( 'log.progressSupportedModule' , 'audit' ) ;
8371
84- // Initialize audit context
85- this . auditContext = this . createAuditContext ( ) ;
86- log . debug ( `Starting audit command: ${ command } ` , this . auditContext ) ;
87- log . info ( `Starting audit command: ${ command } ` , this . auditContext ) ;
88-
8972 // Initialize global summary for progress tracking
9073 CLIProgressManager . initializeGlobalSummary ( 'AUDIT' , '' , 'Auditing content...' ) ;
9174
@@ -109,6 +92,7 @@ export abstract class AuditBaseCommand extends BaseCommand<typeof AuditBaseComma
10992 missingEnvLocalesInEntries,
11093 missingFieldRules,
11194 missingMultipleFields,
95+ missingRefsInComposableStudio,
11296 } = await this . scanAndFix ( ) ;
11397
11498 if ( this . flags [ 'show-console-output' ] ) {
@@ -139,6 +123,7 @@ export abstract class AuditBaseCommand extends BaseCommand<typeof AuditBaseComma
139123 this . showOutputOnScreenWorkflowsAndExtension ( [
140124 { module : 'Entries Changed Multiple Fields' , missingRefs : missingMultipleFields } ,
141125 ] ) ;
126+ this . showOutputOnScreenWorkflowsAndExtension ( [ { module : 'Studio' , missingRefs : missingRefsInComposableStudio } ] ) ;
142127 }
143128 this . showOutputOnScreenWorkflowsAndExtension ( [ { module : 'Summary' , missingRefs : this . summaryDataToPrint } ] ) ;
144129
@@ -154,12 +139,16 @@ export abstract class AuditBaseCommand extends BaseCommand<typeof AuditBaseComma
154139 ! isEmpty ( missingEnvLocalesInAssets ) ||
155140 ! isEmpty ( missingEnvLocalesInEntries ) ||
156141 ! isEmpty ( missingFieldRules ) ||
157- ! isEmpty ( missingMultipleFields )
142+ ! isEmpty ( missingMultipleFields ) ||
143+ ! isEmpty ( missingRefsInComposableStudio )
158144 ) {
159145 if ( this . currentCommand === 'cm:stacks:audit' ) {
160146 log . warn ( this . $t ( auditMsg . FINAL_REPORT_PATH , { path : this . sharedConfig . reportPath } ) , this . auditContext ) ;
161147 } else {
162- log . warn ( this . $t ( this . messages . FIXED_CONTENT_PATH_MAG , { path : this . sharedConfig . basePath } ) , this . auditContext ) ;
148+ log . warn (
149+ this . $t ( this . messages . FIXED_CONTENT_PATH_MAG , { path : this . sharedConfig . basePath } ) ,
150+ this . auditContext ,
151+ ) ;
163152 }
164153 } else {
165154 log . info ( this . messages . NO_MISSING_REF_FOUND , this . auditContext ) ;
@@ -191,7 +180,8 @@ export abstract class AuditBaseCommand extends BaseCommand<typeof AuditBaseComma
191180 ! isEmpty ( missingRefInCustomRoles ) ||
192181 ! isEmpty ( missingEnvLocalesInAssets ) ||
193182 ! isEmpty ( missingEnvLocalesInEntries ) ||
194- ! isEmpty ( missingFieldRules )
183+ ! isEmpty ( missingFieldRules ) ||
184+ ! isEmpty ( missingRefsInComposableStudio )
195185 ) ;
196186 }
197187
@@ -204,8 +194,11 @@ export abstract class AuditBaseCommand extends BaseCommand<typeof AuditBaseComma
204194 async scanAndFix ( ) {
205195 log . debug ( 'Starting scan and fix process' , this . auditContext ) ;
206196 let { ctSchema, gfSchema } = this . getCtAndGfSchema ( ) ;
207- log . info ( `Retrieved ${ ctSchema ?. length || 0 } content types and ${ gfSchema ?. length || 0 } global fields` , this . auditContext ) ;
208-
197+ log . info (
198+ `Retrieved ${ ctSchema ?. length || 0 } content types and ${ gfSchema ?. length || 0 } global fields` ,
199+ this . auditContext ,
200+ ) ;
201+
209202 let missingCtRefs ,
210203 missingGfRefs ,
211204 missingEntryRefs ,
@@ -226,7 +219,8 @@ export abstract class AuditBaseCommand extends BaseCommand<typeof AuditBaseComma
226219 missingEnvLocalesInAssets ,
227220 missingEnvLocalesInEntries ,
228221 missingFieldRules ,
229- missingMultipleFields ;
222+ missingMultipleFields ,
223+ missingRefsInComposableStudio ;
230224
231225 const constructorParam : ModuleConstructorParam & CtConstructorParam = {
232226 ctSchema,
@@ -247,7 +241,7 @@ export abstract class AuditBaseCommand extends BaseCommand<typeof AuditBaseComma
247241
248242 for ( const module of this . sharedConfig . flags . modules || this . sharedConfig . modules ) {
249243 // Update audit context with current module
250- this . auditContext = this . createAuditContext ( module ) ;
244+ this . auditContext = { module : module } ;
251245 log . debug ( `Starting audit for module: ${ module } ` , this . auditContext ) ;
252246 log . info ( `Starting audit for module: ${ module } ` , this . auditContext ) ;
253247
@@ -271,23 +265,32 @@ export abstract class AuditBaseCommand extends BaseCommand<typeof AuditBaseComma
271265 missingEnvLocalesInAssets = await new Assets ( cloneDeep ( constructorParam ) ) . run ( false , assetsTotalCount ) ;
272266 await this . prepareReport ( module , missingEnvLocalesInAssets ) ;
273267 this . getAffectedData ( 'assets' , dataModuleWise [ 'assets' ] , missingEnvLocalesInAssets ) ;
274- log . success ( `Assets audit completed. Found ${ Object . keys ( missingEnvLocalesInAssets || { } ) . length } issues` , this . auditContext ) ;
268+ log . success (
269+ `Assets audit completed. Found ${ Object . keys ( missingEnvLocalesInAssets || { } ) . length } issues` ,
270+ this . auditContext ,
271+ ) ;
275272 break ;
276273 case 'content-types' :
277274 log . info ( 'Executing content-types audit' , this . auditContext ) ;
278275 const contentTypesTotalCount = dataModuleWise [ 'content-types' ] ?. Total || 0 ;
279276 missingCtRefs = await new ContentType ( cloneDeep ( constructorParam ) ) . run ( false , contentTypesTotalCount ) ;
280277 await this . prepareReport ( module , missingCtRefs ) ;
281278 this . getAffectedData ( 'content-types' , dataModuleWise [ 'content-types' ] , missingCtRefs ) ;
282- log . success ( `Content-types audit completed. Found ${ Object . keys ( missingCtRefs || { } ) . length } issues` , this . auditContext ) ;
279+ log . success (
280+ `Content-types audit completed. Found ${ Object . keys ( missingCtRefs || { } ) . length } issues` ,
281+ this . auditContext ,
282+ ) ;
283283 break ;
284284 case 'global-fields' :
285285 log . info ( 'Executing global-fields audit' , this . auditContext ) ;
286286 const globalFieldsTotalCount = dataModuleWise [ 'global-fields' ] ?. Total || 0 ;
287287 missingGfRefs = await new GlobalField ( cloneDeep ( constructorParam ) ) . run ( false , globalFieldsTotalCount ) ;
288288 await this . prepareReport ( module , missingGfRefs ) ;
289289 this . getAffectedData ( 'global-fields' , dataModuleWise [ 'global-fields' ] , missingGfRefs ) ;
290- log . success ( `Global-fields audit completed. Found ${ Object . keys ( missingGfRefs || { } ) . length } issues` , this . auditContext ) ;
290+ log . success (
291+ `Global-fields audit completed. Found ${ Object . keys ( missingGfRefs || { } ) . length } issues` ,
292+ this . auditContext ,
293+ ) ;
291294 break ;
292295 case 'entries' :
293296 log . info ( 'Executing entries audit' , this . auditContext ) ;
@@ -311,7 +314,10 @@ export abstract class AuditBaseCommand extends BaseCommand<typeof AuditBaseComma
311314
312315 await this . prepareReport ( 'Entry_Multiple_Fields' , missingMultipleFields ) ;
313316 this . getAffectedData ( 'entries' , dataModuleWise [ 'entries' ] , missingEntry ) ;
314- log . success ( `Entries audit completed. Found ${ Object . keys ( missingEntryRefs || { } ) . length } reference issues` , this . auditContext ) ;
317+ log . success (
318+ `Entries audit completed. Found ${ Object . keys ( missingEntryRefs || { } ) . length } reference issues` ,
319+ this . auditContext ,
320+ ) ;
315321
316322 break ;
317323 case 'workflows' :
@@ -325,7 +331,10 @@ export abstract class AuditBaseCommand extends BaseCommand<typeof AuditBaseComma
325331 } ) . run ( workflowsTotalCount ) ;
326332 await this . prepareReport ( module , missingCtRefsInWorkflow ) ;
327333 this . getAffectedData ( 'workflows' , dataModuleWise [ 'workflows' ] , missingCtRefsInWorkflow ) ;
328- log . success ( `Workflows audit completed. Found ${ Object . keys ( missingCtRefsInWorkflow || { } ) . length } issues` , this . auditContext ) ;
334+ log . success (
335+ `Workflows audit completed. Found ${ Object . keys ( missingCtRefsInWorkflow || { } ) . length } issues` ,
336+ this . auditContext ,
337+ ) ;
329338
330339 break ;
331340 case 'extensions' :
@@ -334,28 +343,53 @@ export abstract class AuditBaseCommand extends BaseCommand<typeof AuditBaseComma
334343 missingCtRefsInExtensions = await new Extensions ( cloneDeep ( constructorParam ) ) . run ( extensionsTotalCount ) ;
335344 await this . prepareReport ( module , missingCtRefsInExtensions ) ;
336345 this . getAffectedData ( 'extensions' , dataModuleWise [ 'extensions' ] , missingCtRefsInExtensions ) ;
337- log . success ( `Extensions audit completed. Found ${ Object . keys ( missingCtRefsInExtensions || { } ) . length } issues` , this . auditContext ) ;
346+ log . success (
347+ `Extensions audit completed. Found ${ Object . keys ( missingCtRefsInExtensions || { } ) . length } issues` ,
348+ this . auditContext ,
349+ ) ;
338350 break ;
339351 case 'custom-roles' :
340352 log . info ( 'Executing custom-roles audit' , this . auditContext ) ;
341353 const customRolesTotalCount = dataModuleWise [ 'custom-roles' ] ?. Total || 0 ;
342354 missingRefInCustomRoles = await new CustomRoles ( cloneDeep ( constructorParam ) ) . run ( customRolesTotalCount ) ;
343355 await this . prepareReport ( module , missingRefInCustomRoles ) ;
344356 this . getAffectedData ( 'custom-roles' , dataModuleWise [ 'custom-roles' ] , missingRefInCustomRoles ) ;
345- log . success ( `Custom-roles audit completed. Found ${ Object . keys ( missingRefInCustomRoles || { } ) . length } issues` , this . auditContext ) ;
357+ log . success (
358+ `Custom-roles audit completed. Found ${ Object . keys ( missingRefInCustomRoles || { } ) . length } issues` ,
359+ this . auditContext ,
360+ ) ;
346361
347362 break ;
348363 case 'field-rules' :
349364 log . info ( 'Executing field-rules audit' , this . auditContext ) ;
350365 // NOTE: We are using the fixed content-type for validation of field rules
351- const data = this . getCtAndGfSchema ( ) ;
366+ const data = this . getCtAndGfSchema ( ) ;
352367 constructorParam . ctSchema = data . ctSchema ;
353368 constructorParam . gfSchema = data . gfSchema ;
354369 const fieldRulesTotalCount = dataModuleWise [ 'content-types' ] ?. Total || 0 ;
355370 missingFieldRules = await new FieldRule ( cloneDeep ( constructorParam ) ) . run ( fieldRulesTotalCount ) ;
356371 await this . prepareReport ( module , missingFieldRules ) ;
357372 this . getAffectedData ( 'field-rules' , dataModuleWise [ 'content-types' ] , missingFieldRules ) ;
358- log . success ( `Field-rules audit completed. Found ${ Object . keys ( missingFieldRules || { } ) . length } issues` , this . auditContext ) ;
373+ log . success (
374+ `Field-rules audit completed. Found ${ Object . keys ( missingFieldRules || { } ) . length } issues` ,
375+ this . auditContext ,
376+ ) ;
377+ break ;
378+ case 'composable-studio' :
379+ log . info ( 'Executing composable-studio audit' , this . auditContext ) ;
380+ missingRefsInComposableStudio = await new ComposableStudio ( cloneDeep ( constructorParam ) ) . run ( ) ;
381+ await this . prepareReport ( module , missingRefsInComposableStudio ) ;
382+ this . getAffectedData (
383+ 'composable-studio' ,
384+ dataModuleWise [ 'composable-studio' ] || { Total : Object . keys ( missingRefsInComposableStudio || { } ) . length } ,
385+ missingRefsInComposableStudio ,
386+ ) ;
387+ log . success (
388+ `Composable-studio audit completed. Found ${
389+ Object . keys ( missingRefsInComposableStudio || { } ) . length
390+ } issues`,
391+ this . auditContext ,
392+ ) ;
359393 break ;
360394 }
361395
@@ -393,6 +427,7 @@ export abstract class AuditBaseCommand extends BaseCommand<typeof AuditBaseComma
393427 missingEnvLocalesInEntries,
394428 missingFieldRules,
395429 missingMultipleFields,
430+ missingRefsInComposableStudio,
396431 } ;
397432 }
398433
@@ -536,7 +571,7 @@ export abstract class AuditBaseCommand extends BaseCommand<typeof AuditBaseComma
536571 }
537572
538573 print ( [ { bold : true , color : 'cyan' , message : ` ${ module } ` } ] ) ;
539-
574+
540575 const tableValues = Object . values ( missingRefs ) . flat ( ) ;
541576 missingRefs = Object . values ( missingRefs ) . flat ( ) ;
542577 const tableKeys = Object . keys ( missingRefs [ 0 ] ) ;
@@ -590,7 +625,7 @@ export abstract class AuditBaseCommand extends BaseCommand<typeof AuditBaseComma
590625 log . debug ( `Preparing report for module: ${ moduleName } ` , this . auditContext ) ;
591626 log . debug ( `Report path: ${ this . sharedConfig . reportPath } ` , this . auditContext ) ;
592627 log . info ( `Missing references count: ${ Object . keys ( listOfMissingRefs ) . length } ` , this . auditContext ) ;
593-
628+
594629 if ( isEmpty ( listOfMissingRefs ) ) {
595630 log . debug ( `No missing references found for ${ moduleName } , skipping report generation` , this . auditContext ) ;
596631 return Promise . resolve ( void 0 ) ;
0 commit comments