Skip to content

Commit 97e8800

Browse files
committed
fixed array type, noopener condtion test failing
1 parent 2bed6b1 commit 97e8800

File tree

2 files changed

+42
-21
lines changed

2 files changed

+42
-21
lines changed

lib/rules/jsx-no-target-blank.js

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -81,11 +81,11 @@ function attributeValuePossiblyRel(value) {
8181
function getStringFromValue(value) {
8282
if (value) {
8383
if (value.type === 'Literal') {
84-
return [value.value];
84+
return value.value;
8585
}
8686
if (value.type === 'JSXExpressionContainer') {
8787
if (value.expression.type === 'TemplateLiteral') {
88-
return [value.expression.quasis[0].value.cooked];
88+
return value.expression.quasis[0].value.cooked;
8989
}
9090
const expr = value.expression;
9191
if (expr.type === 'ConditionalExpression') {
@@ -96,10 +96,10 @@ function getStringFromValue(value) {
9696
return [expr.consequent.value, expr.alternate.value];
9797
}
9898
}
99-
return [value.expression && value.expression.value];
99+
return value.expression && value.expression.value;
100100
}
101101
}
102-
return [null];
102+
return null;
103103
}
104104

105105
function hasSecureRel(node, allowReferrer, warnOnSpreadAttributes, spreadAttributeIndex) {
@@ -110,14 +110,23 @@ function hasSecureRel(node, allowReferrer, warnOnSpreadAttributes, spreadAttribu
110110

111111
const relAttribute = node.attributes[relIndex];
112112
const value = getStringFromValue(relAttribute.value);
113-
for (let index = 0; index < value.length; index++) {
114-
const tags = value[index] && typeof value[index] === 'string' && value[index].toLowerCase().split(' ');
115-
const noreferrer = tags && tags.indexOf('noreferrer') >= 0;
116-
if (noreferrer) {
117-
return true;
113+
if (Array.isArray(value)) {
114+
for (let index = 0; index < value.length; index++) {
115+
const tags = value[index] && typeof value[index] === 'string' && value[index].toLowerCase().split(' ');
116+
const noreferrer = tags && tags.indexOf('noreferrer') >= 0;
117+
const noopener = tags && tags.indexOf('noopener') >= 0;
118+
if (!noreferrer) {
119+
return allowReferrer && noopener;
120+
}
118121
}
119-
return allowReferrer && tags && tags.indexOf('noopener') >= 0;
122+
return true;
123+
}
124+
const tags = value && typeof value === 'string' && value.toLowerCase().split(' ');
125+
const noreferrer = tags && tags.indexOf('noreferrer') >= 0;
126+
if (noreferrer) {
127+
return true;
120128
}
129+
return allowReferrer && tags && tags.indexOf('noopener') >= 0;
121130
}
122131

123132
const messages = {

tests/lib/rules/jsx-no-target-blank.js

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,11 @@ ruleTester.run('jsx-no-target-blank', rule, {
148148
code: '<a href={href} target={isExternal ? undefined : "_blank"} rel={isExternal ? "noreferrer" : "noopener noreferrer"} />',
149149
},
150150
{
151-
code: '<a href={href} target="_blank" rel={isExternal ? "noreferrer" : "noopener noreferrer"} />',
151+
code: '<a href={href} target={isExternal ? undefined : "_blank"} rel={isExternal ? "noreferrer noopener" : "noreferrer"} />',
152+
},
153+
{
154+
code: '<a href={href} target="_blank" rel={isExternal ? "noreferrer" : "noopener"} />',
155+
options: [{ allowReferrer: true }],
152156
},
153157
]),
154158
invalid: parsers.all([
@@ -366,25 +370,33 @@ ruleTester.run('jsx-no-target-blank', rule, {
366370
errors: defaultErrors,
367371
},
368372
{
369-
code: '<a href={href} target="_blank" rel={isExternal ? "noopener" : "undefined"} />',
373+
code: '<a href={href} target="_blank" rel={isExternal ? "noopener" : undefined} />',
370374
errors: defaultErrors,
371375
},
372376
{
373377
code: '<a href={href} target="_blank" rel={isExternal ? "undefined" : "noopener"} />',
374378
errors: defaultErrors,
375379
},
376-
// {
377-
// code: '<a href={href} target={isExternal ? "_blank" : undefined} rel={isExternal ? "noopener noreferrer" : undefined} />',
378-
// },
379-
// {
380-
// code: '<a href={href} target={isExternal ? "_blank" : undefined} rel={isExternal ? undefined : "noopener noreferrer"} />',
381-
// },
382-
// {
383-
// code: '<a href={href} target="_blank" rel={isExternal ? 3 : "noopener noreferrer"} />',
384-
// },
380+
{
381+
code: '<a href={href} target={isExternal ? "_blank" : undefined} rel={isExternal ? "noopener noreferrer" : undefined} />',
382+
errors: defaultErrors,
383+
},
384+
{
385+
code: '<a href={href} target={isExternal ? "_blank" : undefined} rel={isExternal ? undefined : "noopener noreferrer"} />',
386+
errors: defaultErrors,
387+
},
388+
{
389+
code: '<a href={href} target="_blank" rel={isExternal ? 3 : "noopener noreferrer"} />',
390+
errors: defaultErrors,
391+
},
385392
{
386393
code: '<a href={href} target="_blank" rel={isExternal ? "noopener noreferrer" : "3"} />',
387394
errors: defaultErrors,
388395
},
396+
// {
397+
// code: '<a href={href} target="_blank" rel={isExternal ? "noopener" : "2"} />',
398+
// options: [{ allowReferrer: true }],
399+
// errors: defaultErrors,
400+
// },
389401
]),
390402
});

0 commit comments

Comments
 (0)