@@ -2,8 +2,19 @@ import { parseString } from '@fast-csv/parse'
22import CloudGraph , { generateUniqueId } from '@cloudgraph/sdk'
33import isArray from 'lodash/isArray'
44import toString from 'lodash/toString'
5- import { AwsRawTag , AwsIamJsonPolicy } from '../types/generated'
6- import { AwsTag , TagMap } from '../types'
5+ import {
6+ AwsRawTag ,
7+ AwsIamJsonPolicy ,
8+ AwsIamJsonPolicyCondition ,
9+ AwsIamJsonPolicyPrincipal ,
10+ AwsIamJsonPolicyStatement ,
11+ AwsTag ,
12+ RawAwsIamJsonPolicy ,
13+ RawAwsIamJsonPolicyStatement ,
14+ RawAwsIamJsonPolicyStatementCondition ,
15+ RawAwsIamJsonPolicyStatementPrincipal ,
16+ TagMap ,
17+ } from '../types'
718
819const { logger } = CloudGraph
920
@@ -46,6 +57,7 @@ export const camelize = (key: string): string =>
4657 */
4758export const pascalize = ( key : string ) : string => {
4859 const camelized = camelize ( key )
60+ // TODO: Change to String.slice?
4961 return camelized . substr ( 0 , 1 ) . toUpperCase ( ) + camelized . substr ( 1 )
5062}
5163
@@ -65,7 +77,7 @@ export const parseCSV = (csv: string): Promise<any[]> =>
6577 } )
6678
6779export const formatIamJsonPolicy = ( json : string ) : AwsIamJsonPolicy => {
68- let object
80+ let object : RawAwsIamJsonPolicy
6981 try {
7082 object = JSON . parse ( json . replace ( / \\ " / g, '"' ) )
7183 } catch ( err ) {
@@ -75,7 +87,9 @@ export const formatIamJsonPolicy = (json: string): AwsIamJsonPolicy => {
7587 const statement = isArray ( object . Statement )
7688 ? object . Statement
7789 : [ object . Statement ]
78- const formatCondition = condition => {
90+ const formatCondition = (
91+ condition : RawAwsIamJsonPolicyStatementCondition
92+ ) : AwsIamJsonPolicyCondition [ ] => {
7993 if ( ! condition ) return null
8094 return Object . entries ( condition ) . map ( ( [ key , value = { } ] ) => {
8195 const entry = Object . entries ( value ) [ 0 ] || [ ]
@@ -88,7 +102,9 @@ export const formatIamJsonPolicy = (json: string): AwsIamJsonPolicy => {
88102 } )
89103 }
90104
91- const formatPrincipal = principal => {
105+ const formatPrincipal = (
106+ principal : RawAwsIamJsonPolicyStatementPrincipal
107+ ) : AwsIamJsonPolicyPrincipal [ ] => {
92108 if ( ! principal ) return null
93109 return Object . entries ( principal ) . map ( ( [ key , value ] ) => {
94110 const conVal = ( isArray ( value ) ? value : [ value ] ) || [ ]
@@ -102,12 +118,21 @@ export const formatIamJsonPolicy = (json: string): AwsIamJsonPolicy => {
102118 return {
103119 id : generateUniqueId ( json ) ,
104120 version : object . Version ,
105- statement : statement . map ( el => ( {
106- action : isArray ( el . Action ) ? el . Action : [ toString ( el . Action ) ] ,
107- condition : formatCondition ( el . Condition ) ,
108- effect : el . Effect ,
109- principal : formatPrincipal ( el . Principal ) ,
110- resource : isArray ( el . Resource ) ? el . Resource : [ toString ( el . Resource ) ] ,
111- } ) ) ,
121+ statement : statement . map (
122+ ( el : RawAwsIamJsonPolicyStatement ) : AwsIamJsonPolicyStatement => ( {
123+ action : isArray ( el . Action ) ? el . Action : [ toString ( el . Action ) ] ,
124+ notAction : isArray ( el . NotAction )
125+ ? el . NotAction
126+ : [ toString ( el . NotAction ) ] ,
127+ condition : formatCondition ( el . Condition ) ,
128+ effect : el . Effect ,
129+ principal : formatPrincipal ( el . Principal ) ,
130+ notPrincipal : formatPrincipal ( el . NotPrincipal ) ,
131+ resource : isArray ( el . Resource ) ? el . Resource : [ toString ( el . Resource ) ] ,
132+ notResource : isArray ( el . NotResource )
133+ ? el . NotResource
134+ : [ toString ( el . NotResource ) ] ,
135+ } )
136+ ) ,
112137 }
113138}
0 commit comments