UNPKG

aws-cdk-lib

Version:

Version 2 of the AWS Cloud Development Kit library

2 lines (1 loc) 2.72 kB
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.PostProcessPolicyDocument=void 0,exports.normalizeStatement=normalizeStatement;var cdk=()=>{var tmp=require("../../../core");return cdk=()=>tmp,tmp},util_1=()=>{var tmp=require("../util");return util_1=()=>tmp,tmp};class PostProcessPolicyDocument{constructor(autoAssignSids,sort){this.autoAssignSids=autoAssignSids,this.sort=sort}postProcess(input,_context){if(!input||!input.Statement)return input;const jsonStatements=new Set,uniqueStatements=[];for(const statement of input.Statement){const jsonStatement=JSON.stringify(statement);jsonStatements.has(jsonStatement)||(uniqueStatements.push(statement),jsonStatements.add(jsonStatement))}const statements=uniqueStatements.map((s,i)=>(this.autoAssignSids&&!s.Sid&&(s.Sid=i.toString()),this.sort&&(s.Action&&(s.Action=sortByJson(s.Action)),s.Resource&&(s.Resource=sortByJson(s.Resource)),s.Principal&&(s.Principal=sortPrincipals(s.Principal))),s));return{...input,Statement:statements}}}exports.PostProcessPolicyDocument=PostProcessPolicyDocument;function normalizeStatement(s){return noUndef({Action:_norm(s.Action,{unique:!0}),NotAction:_norm(s.NotAction,{unique:!0}),Condition:_norm(s.Condition),Effect:_norm(s.Effect),Principal:_normPrincipal(s.Principal),NotPrincipal:_normPrincipal(s.NotPrincipal),Resource:_norm(s.Resource,{unique:!0}),NotResource:_norm(s.NotResource,{unique:!0}),Sid:_norm(s.Sid)});function _norm(values,{unique=!1}={unique:!1}){if(values!=null){if(cdk().Token.isUnresolved(values))return values;if(Array.isArray(values))return!values||values.length===0?void 0:values.length===1?values[0]:unique?Array.from(new Set(values)):values;if(!(values&&typeof values=="object"&&Object.keys(values).length===0))return values}}function _normPrincipal(principal){if(!principal||Array.isArray(principal)||typeof principal!="object")return;const keys=Object.keys(principal);if(keys.length===0)return;if(util_1().LITERAL_STRING_KEY in principal)return principal[util_1().LITERAL_STRING_KEY][0];const result={};for(const key of keys){const normVal=_norm(principal[key]);normVal&&(result[key]=normVal)}return result}}function noUndef(x){const ret={};for(const[key,value]of Object.entries(x))value!==void 0&&(ret[key]=value);return ret}function sortPrincipals(xs){if(!xs||Array.isArray(xs)||typeof xs!="object")return xs;const ret={};for(const k of Object.keys(xs).sort())ret[k]=sortByJson(xs[k]);return ret}function sortByJson(xs){if(!Array.isArray(xs))return xs;const intermediate=new Map;for(const x of xs)intermediate.set(JSON.stringify(x),x);const sorted=Array.from(intermediate.keys()).sort().map(k=>intermediate.get(k));return xs.splice(0,xs.length,...sorted),xs.length!==1?xs:xs[0]}