@@ -394,7 +394,7 @@ function sortByModule(aName: string, bName: string, aMeta?: Metadata, bMeta?: Me
394
394
/* This function gets the modules from the JSON model and
395
395
* returns them as an alphabetically sorted array
396
396
*/
397
- export function getModulesFromJSON ( model : Omit < AuthorizationModel , "id" > ) : string [ ] {
397
+ export function getModulesFromJSON2 ( model : Omit < AuthorizationModel , "id" > ) : string [ ] {
398
398
const schemaVersion = model ?. schema_version || "1.1" ;
399
399
400
400
if ( schemaVersion !== "1.2" ) {
@@ -407,21 +407,28 @@ export function getModulesFromJSON(model: Omit<AuthorizationModel, "id">): strin
407
407
return [ ] ;
408
408
}
409
409
410
- const modules = model . type_definitions ?. reduce ( ( acc : ( string | undefined ) [ ] , typeDef ) => {
411
- const relations = typeDef ?. metadata ?. relations || { } ;
412
- Object . entries ( relations ) . forEach ( ( [ _ , relationDefinition ] ) => {
413
- acc . push ( relationDefinition . module ) ;
414
- } ) ;
410
+ const modulesMap : Record < string , boolean > = { } ;
411
+ model . type_definitions ?. forEach ( typeDef => {
412
+ const key = typeDef . metadata ?. module ;
413
+ if ( key ) {
414
+ modulesMap [ key ] = true ;
415
+ }
415
416
416
- return [ ...acc , typeDef . metadata ?. module ] ;
417
- } , [ ] ) ;
417
+ for ( const relationMeta in typeDef ?. metadata ?. relations ) {
418
+ const key = typeDef ?. metadata ?. relations [ relationMeta ] ?. module ;
419
+ if ( key ) {
420
+ modulesMap [ key ] = true ;
421
+ }
422
+ }
423
+ } ) ;
418
424
419
425
const conditions = model . conditions || { } ;
420
- const conditionModules = Object . entries ( conditions ) . map (
421
- ( [ _ , conditionDefinition ] ) => conditionDefinition . metadata ?. module ,
422
- ) ;
423
-
424
- const filteredModules = [ ...modules , ...conditionModules ] . filter ( ( module ) => module !== undefined ) as string [ ] ;
426
+ for ( const conditionMeta in conditions ) {
427
+ const key = conditions [ conditionMeta ] . metadata ?. module ;
428
+ if ( key ) {
429
+ modulesMap [ key ] = true ;
430
+ }
431
+ }
425
432
426
- return [ ... new Set ( filteredModules ) ] . sort ( ( a , b ) => a . localeCompare ( b ) ) ;
433
+ return Object . keys ( modulesMap ) . sort ( ) ;
427
434
}
0 commit comments