in src/content/components/ActiveRSMessages/TargetingParser.ts [23:50]
export function getTargetingAttributes(
expr: String
): ParsedTargetingExpression {
const tokens: Array<Token> = parseTargetingExpression(expr);
const targetingTokens: ParsedTargetingExpression = {
version: [],
locale: [],
};
for (let i = 0; i < tokens.length; i++) {
if (TOKENS_WHITELIST.has(tokens[i].value)) {
let value = `${tokens[i].value} ${tokens[i + 1].value}`;
switch (tokens[i + 2].type) {
case "openBracket": {
let j = i + 3;
while (tokens[j].type !== "closeBracket" || j >= tokens.length) {
value = `${value} ${tokens[j++].value}`;
}
}
// TODO - check if this should fall through?
default:
value = `${value} ${tokens[i + 2].value}`;
}
targetingTokens[TOKENS_WHITELIST.get(tokens[i].value)].push(value);
}
}
return targetingTokens;
}