npm package diff

Package: @forge/lint

Versions: 5.10.0-next.15 - 5.10.0-next.16

File: package/out/lint/linters/permission-linter/visitors/image-url-visitor.js

Index: package/out/lint/linters/permission-linter/visitors/image-url-visitor.js
===================================================================
--- package/out/lint/linters/permission-linter/visitors/image-url-visitor.js
+++ package/out/lint/linters/permission-linter/visitors/image-url-visitor.js
@@ -10,23 +10,26 @@
         if (!imageUrlNode) {
             return undefined;
         }
         if (imageUrlNode?.type === typescript_estree_1.AST_NODE_TYPES.JSXAttribute) {
-            const imageUrlAttribute = imageUrlNode.value;
-            if (imageUrlAttribute &&
-                imageUrlAttribute.type === typescript_estree_1.AST_NODE_TYPES.Literal &&
-                typeof imageUrlAttribute.value === 'string') {
-                if (imageUrlAttribute.value.trim() !== '' &&
-                    !this.isBundledUri(imageUrlAttribute.value) &&
-                    this.isAbsoluteUrl(imageUrlAttribute.value)) {
-                    const imageUrl = {
-                        type: api_call_interface_1.ApiCallTypes.IMAGE,
-                        url: imageUrlAttribute.value,
-                        line: imageUrlAttribute.loc.start.line,
-                        column: imageUrlAttribute.loc.start.column
-                    };
-                    callback(imageUrl);
+            const imageUrlNodeAttribute = imageUrlNode.value;
+            if (!imageUrlNodeAttribute)
+                return;
+            this.addUrlToLintingList(imageUrlNodeAttribute, imageUrlNodeAttribute, callback);
+            if (imageUrlNodeAttribute.type === typescript_estree_1.AST_NODE_TYPES.JSXExpressionContainer) {
+                const imageUlrNodeAttributeExpression = imageUrlNodeAttribute.expression;
+                if (imageUlrNodeAttributeExpression.type === typescript_estree_1.AST_NODE_TYPES.ConditionalExpression) {
+                    const consequentExpression = imageUlrNodeAttributeExpression.consequent;
+                    this.addUrlToLintingList(consequentExpression, imageUrlNodeAttribute, callback);
+                    const alternateExpression = imageUlrNodeAttributeExpression.alternate;
+                    this.addUrlToLintingList(alternateExpression, imageUrlNodeAttribute, callback);
                 }
+                if (imageUlrNodeAttributeExpression.type === typescript_estree_1.AST_NODE_TYPES.LogicalExpression) {
+                    const leftExpression = imageUlrNodeAttributeExpression.left;
+                    this.addUrlToLintingList(leftExpression, imageUrlNodeAttribute, callback);
+                    const rightExpression = imageUlrNodeAttributeExpression.right;
+                    this.addUrlToLintingList(rightExpression, imageUrlNodeAttribute, callback);
+                }
             }
         }
     }
     getImageUrlNode(node) {
@@ -52,6 +55,20 @@
     }
     isAbsoluteUrl(url) {
         return ImageUrlVisitor.ABSOLUTE_URL_REGEX.test(url);
     }
+    addUrlToLintingList(expression, imageUrlAttribute, callback) {
+        if (expression && expression.type === typescript_estree_1.AST_NODE_TYPES.Literal && typeof expression.value === 'string') {
+            const url = expression.value;
+            if (url.trim() !== '' && !this.isBundledUri(url) && this.isAbsoluteUrl(url)) {
+                const imageUrl = {
+                    type: api_call_interface_1.ApiCallTypes.IMAGE,
+                    url: url,
+                    line: imageUrlAttribute.loc.start.line,
+                    column: imageUrlAttribute.loc.start.column
+                };
+                callback(imageUrl);
+            }
+        }
+    }
 }
 exports.ImageUrlVisitor = ImageUrlVisitor;