Skip to content

Commit f55afed

Browse files
committed
fixup! Preserve commas that are not part of a brace expansion
Roll unbalanced and nested brace assertion into mini-parser iteration
1 parent 62e8d44 commit f55afed

File tree

1 file changed

+8
-21
lines changed

1 file changed

+8
-21
lines changed

packages/ember-metal/lib/expand_properties.js

Lines changed: 8 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -40,28 +40,8 @@ export default function expandProperties(pattern, callback) {
4040
'Brace expanded properties cannot contain spaces, e.g. "user.{firstName, lastName}" should be "user.{firstName,lastName}"',
4141
pattern.indexOf(' ') === -1
4242
);
43-
assert(
44-
`Brace expanded properties have to be balanced and cannot be nested, pattern: ${pattern}`,
45-
((str) => {
46-
let inBrace = 0;
47-
let char;
48-
for (let i = 0; i < str.length; i++) {
49-
char = str.charAt(i);
50-
51-
if (char === '{') {
52-
inBrace++;
53-
} else if (char === '}') {
54-
inBrace--;
55-
}
56-
57-
if (inBrace > 1 || inBrace < 0) {
58-
return false;
59-
}
60-
}
61-
62-
return true;
63-
})(pattern));
6443

44+
let unbalancedNestedError = `Brace expanded properties have to be balanced and cannot be nested, pattern: ${pattern}`;
6545
let properties = [pattern];
6646

6747
// Iterating backward over the pattern makes dealing with indices easier.
@@ -77,6 +57,8 @@ export default function expandProperties(pattern, callback) {
7757
if (!inside) {
7858
bookmark = i - 1;
7959
inside = true;
60+
} else {
61+
assert(unbalancedNestedError, false);
8062
}
8163
break;
8264
// Opening curly brace will be the last character of the brace expansion we encounter.
@@ -96,10 +78,15 @@ export default function expandProperties(pattern, callback) {
9678
}
9779
}
9880
inside = false;
81+
} else {
82+
assert(unbalancedNestedError, false);
9983
}
10084
break;
10185
}
10286
}
87+
if (inside) {
88+
assert(unbalancedNestedError, false);
89+
}
10390

10491
for (let i = 0; i < properties.length; i++) {
10592
callback(properties[i].replace(END_WITH_EACH_REGEX, '.[]'));

0 commit comments

Comments
 (0)