Socket
Socket
Sign inDemoInstall

cfn-resolver-lib

Package Overview
Dependencies
235
Maintainers
1
Versions
16
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 1.0.8 to 1.1.0

src/nodeEvaluator.js

2

package.json
{
"name": "cfn-resolver-lib",
"version": "1.0.8",
"version": "1.1.0",
"description": "Library that resolves AWS Cloudformation templates with exact values",

@@ -5,0 +5,0 @@ "main": "src/index.js",

@@ -5,3 +5,3 @@ # cfn-resolver-lib

JavaScript library that resolves and evaulates values in [CloudFormation](https://aws.amazon.com/cloudformation/) templates based on the provided stack parameters and produces the JS object representation of the resolved CFN template.
JavaScript library that resolves and evaluates values in [CloudFormation](https://aws.amazon.com/cloudformation/) templates based on the provided stack parameters and produces the JS object representation of the resolved CFN template.

@@ -29,6 +29,6 @@ Did you ever had to debug what's wrong with your CloudFormation template and why your stack deployment fails? Your YAML/JSON could contain some logic with all kinds of nested [intrinsic functions](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference.html) and CFN [pseudo parameters](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/pseudo-parameter-reference.html) and sometimes this can get even more complex when you use a tool (e.g. [AWS CDK](https://docs.aws.amazon.com/cdk/latest/guide/home.html)) that generates the file for you.

```js
const NodeEvaulator = require('cfn-resolver-lib');
const NodeEvaluator = require('cfn-resolver-lib');
const stackParameters = {
RefResolveres:
RefResolvers:
{

@@ -39,3 +39,3 @@ "AWS::Region": "us-west-2",

"Stage": "prod",
"AWS::StackId": "MyEvaulatedFakeStackUsWest2"
"AWS::StackId": "MyEvaluatedFakeStackUsWest2"
},

@@ -49,3 +49,3 @@ "Fn::GetAttResolvers": {

const resolvedObj = new NodeEvaulator(cloufFormationTemplateDeseralizedObj, stackParameters).evaulate();
const resolvedObj = new NodeEvaluator(cloufFormationTemplateDeseralizedObj, stackParameters).evaluateNodes();
```

@@ -52,0 +52,0 @@

@@ -24,2 +24,4 @@ const {

const convertNode = (node, nodeAccessor, srcObj, params, convRoot, enableVerboseLogging) => {
// keeping backward compatibility because of typo in previos versions
const refResolvers = params.RefResolvers || params.RefResolevers;

@@ -48,3 +50,3 @@ switch (nodeAccessor.key) {

case "Fn::GetAZs":
return new FnGetAZsNode(node, nodeAccessor, enableVerboseLogging, azMapping, params.RefResolveres["AWS::Region"]);
return new FnGetAZsNode(node, nodeAccessor, enableVerboseLogging, azMapping, refResolvers["AWS::Region"]);
case "Condition":

@@ -56,3 +58,3 @@ if (nodeAccessor.path.length >= 3 && nodeAccessor.path[2] == "Properties") {

case "Ref":
return new RefNode(node, nodeAccessor, enableVerboseLogging, params.RefResolveres);
return new RefNode(node, nodeAccessor, enableVerboseLogging, refResolvers);
case "Fn::GetAtt":

@@ -59,0 +61,0 @@ return new FnGetAttNode(node, nodeAccessor, enableVerboseLogging, params["Fn::GetAttResolvers"]);

@@ -1,3 +0,3 @@

const NodeEvaulator = require("./nodeEvaulator");
const NodeEvaluator = require("./nodeEvaluator");
module.exports = NodeEvaulator;
module.exports = NodeEvaluator;

@@ -21,3 +21,3 @@ const Node = require('./Node');

evaulateResultedArray(array) {
evaluateResultedArray(array) {
// simple array

@@ -27,8 +27,8 @@ return array;

evaulate() {
evaluate() {
super.log("Eval: ", this.nodeAccessor.path.join('/'));
if(this.isLeaf){
super.log("Leaf: ", this.node, this.nodeAccessor.path.join('/'));
console.warn("Invalid Array: has no items, how to evaulate??");
throw "Invalid Array: has no items, how to evaulate??";
console.warn("Invalid Array: has no items, how to evaluate??");
throw "Invalid Array: has no items, how to evaluate??";
return ""; // Simple value (number, string)

@@ -38,10 +38,10 @@ } else {

this.directDependencies.forEach( (dep) => {
const depRes = dep.evaulate();
const depRes = dep.evaluate();
result[dep.nodeAccessor.key] = depRes;
});
super.log("Array evaulated: ");
super.log("Array evaluated: ");
super.log(result);
return this.evaulateResultedArray(result);
return this.evaluateResultedArray(result);
}

@@ -48,0 +48,0 @@ }

@@ -13,10 +13,10 @@ const ObjectNode = require('./ObjectNode');

evaulate(){
evaluate(){
let result = this.node;
if(this.convConditions.wrappedObject.hasOwnProperty(this.node)){
result = this.convConditions.wrappedObject[this.node].evaulate();
result = this.convConditions.wrappedObject[this.node].evaluate();
}
// might not needed
else if(this.hasSingleDependency){
result = this.directDependencies[0].evaulate();
result = this.directDependencies[0].evaluate();
}

@@ -23,0 +23,0 @@

@@ -9,3 +9,3 @@ const ArrayNode = require('./ArrayNode');

evaulateResultedArray(array) {
evaluateResultedArray(array) {
let result = true;

@@ -12,0 +12,0 @@ array.forEach((boolVal) => {

@@ -9,3 +9,3 @@

evaulateResultedArray(array) {
evaluateResultedArray(array) {
const val1 = array[0];

@@ -12,0 +12,0 @@ const val2 = array[1];

@@ -8,7 +8,7 @@ const ArrayNode = require('./ArrayNode');

evaulate() {
evaluate() {
let result = this.node;
const mappingName = this.directDependencies[0].evaulate();
const level1Key = this.directDependencies[1].evaulate();
const level2Key = this.directDependencies[2].evaulate();
const mappingName = this.directDependencies[0].evaluate();
const level1Key = this.directDependencies[1].evaluate();
const level2Key = this.directDependencies[2].evaluate();
if (!this.mappings.hasOwnProperty(mappingName)) {

@@ -27,3 +27,3 @@ console.warn("Not found mapping: " + mappingName);

super.log("FnFindInMapNode evaulated: ");
super.log("FnFindInMapNode evaluated: ");
super.log(result);

@@ -30,0 +30,0 @@ return result;

@@ -8,6 +8,6 @@ const ArrayNode = require('./ArrayNode');

evaulate() {
evaluate() {
let result = this.node;
const resourceLogicalId = this.directDependencies[0].evaulate();
const attrName = this.directDependencies[1].evaulate();
const resourceLogicalId = this.directDependencies[0].evaluate();
const attrName = this.directDependencies[1].evaluate();

@@ -23,3 +23,3 @@ if (!this.getAttrResolvers[resourceLogicalId]) {

super.log("FnGetAttNode evaulated: ");
super.log("FnGetAttNode evaluated: ");
super.log(result);

@@ -26,0 +26,0 @@ return result;

@@ -14,10 +14,10 @@ const ObjectNode = require('./ObjectNode');

evaulate() {
evaluate() {
let result = this.node;
let regionName = this.currentRegion;
if (!this.isLeaf) {
regionName = this.directDependencies[0].evaulate();
regionName = this.directDependencies[0].evaluate();
}
result = this.azMapping[regionName];
super.log("FnGetAZsNode evaulated: ");
super.log("FnGetAZsNode evaluated: ");
super.log(result);

@@ -24,0 +24,0 @@ return result;

@@ -9,13 +9,13 @@ const ArrayNode = require('./ArrayNode');

evaulate() {
evaluate() {
let result = this.node;
if (this.directDependencies.length >= 3) {
const conditionName = this.directDependencies[0].evaulate();
const evaulatedCondition = this.convConditions.wrappedObject[conditionName].evaulate();
const valueIfTrue = this.directDependencies[1].evaulate();
const valueIfFalse = this.directDependencies[2].evaulate();
result = evaulatedCondition ? valueIfTrue : valueIfFalse;
const conditionName = this.directDependencies[0].evaluate();
const evaluatedCondition = this.convConditions.wrappedObject[conditionName].evaluate();
const valueIfTrue = this.directDependencies[1].evaluate();
const valueIfFalse = this.directDependencies[2].evaluate();
result = evaluatedCondition ? valueIfTrue : valueIfFalse;
}
super.log("FnIf evaulated: ");
super.log("FnIf evaluated: ");
super.log(result);

@@ -22,0 +22,0 @@ return result;

@@ -8,7 +8,7 @@ const ArrayNode = require('./ArrayNode');

evaulate() {
evaluate() {
let result = this.node;
if (this.directDependencies.length >= 2) {
const separator = this.directDependencies[0].evaulate();
const items = this.directDependencies[1].evaulate();
const separator = this.directDependencies[0].evaluate();
const items = this.directDependencies[1].evaluate();
result = items.join(separator);

@@ -15,0 +15,0 @@ }

@@ -9,8 +9,8 @@ const ArrayNode = require('./ArrayNode');

evaulate(){
evaluate(){
let result = this.node; // by default
if(this.hasSingleDependency){
result = !this.directDependencies[0].evaulate();
result = !this.directDependencies[0].evaluate();
}
super.log("Evaulate FnNot: ");
super.log("Evaluate FnNot: ");
super.log(result);

@@ -17,0 +17,0 @@ return result;

@@ -9,3 +9,3 @@ const ArrayNode = require('./ArrayNode');

evaulateResultedArray(array) {
evaluateResultedArray(array) {
let result = false;

@@ -12,0 +12,0 @@ array.forEach((boolVal) => {

@@ -9,7 +9,7 @@ const ArrayNode = require('./ArrayNode');

evaulate() {
evaluate() {
let result = this.node;
if(this.directDependencies.length == 2){
let index = this.directDependencies[0].evaulate();
const listOfObjects = this.directDependencies[1].evaulate();
let index = this.directDependencies[0].evaluate();
const listOfObjects = this.directDependencies[1].evaluate();
if(_.isArray(listOfObjects) && index < listOfObjects.length){

@@ -24,3 +24,3 @@ result = listOfObjects[index];

super.log("FnSelect evaulated: ");
super.log("FnSelect evaluated: ");
super.log(result);

@@ -27,0 +27,0 @@ return result;

@@ -13,7 +13,7 @@ const ArrayNode = require('./ArrayNode');

evaulate() {
evaluate() {
let result = this.node;
if(this.directDependencies.length == 2){
let templateStr = this.directDependencies[0].evaulate();
const dictionary = this.directDependencies[1].evaulate();
let templateStr = this.directDependencies[0].evaluate();
const dictionary = this.directDependencies[1].evaluate();
for (const key in dictionary) {

@@ -30,3 +30,3 @@ if (dictionary.hasOwnProperty(key)) {

super.log("FnSub evaulated: ");
super.log("FnSub evaluated: ");
super.log(result);

@@ -33,0 +33,0 @@ return result;

@@ -31,3 +31,3 @@ class Node {

evaulate(){
evaluate(){
throw "Should not happen, child class implementations should handle this case";

@@ -34,0 +34,0 @@ }

@@ -24,3 +24,3 @@ const Node = require('./Node');

evaulate(){
evaluate(){
super.log("Eval: ", this.nodeAccessor.path.join('/'));

@@ -33,3 +33,3 @@ let result = this.node; // by default or simple value (number, string)

else if(this.hasSingleDependency && this.directDependencies[0].shouldReplaceParent()){
result = this.directDependencies[0].evaulate();
result = this.directDependencies[0].evaluate();
}

@@ -39,7 +39,7 @@ else {

this.directDependencies.forEach( (dep) => {
result[dep.nodeAccessor.key] = dep.evaulate();
result[dep.nodeAccessor.key] = dep.evaluate();
});
}
super.log("ObjectNode evaulated: ");
super.log("ObjectNode evaluated: ");
super.log(result);

@@ -46,0 +46,0 @@ return result;

@@ -12,7 +12,7 @@ const ObjectNode = require('./ObjectNode');

evaulate(){
evaluate(){
let result = this.node;
if(this.hasSingleDependency) {
result = {};
result[this.directDependencies[0].nodeAccessor.key] = this.directDependencies[0].evaulate();
result[this.directDependencies[0].nodeAccessor.key] = this.directDependencies[0].evaluate();
}

@@ -19,0 +19,0 @@

@@ -24,3 +24,3 @@ const ObjectNode = require('./ObjectNode');

evaulate() {
evaluate() {
let result = this.node; // by default

@@ -31,3 +31,3 @@ if (this.canResolve(this.node)) {

super.log("Ref evaulated: ");
super.log("Ref evaluated: ");
super.log(result);

@@ -34,0 +34,0 @@ return result;

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc