in src/components/base/filtered_search/filtered_search_utils.js [181:225]
export function splitOnQuotes(str) {
if (first(str) === "'" && last(str) === "'") {
return [str];
}
if (first(str) === '"' && last(str) === '"') {
return [str];
}
const queue = str.split(' ');
const result = [];
let waitingForMatchingQuote = false;
let quoteContent = '';
while (queue.length) {
const part = queue.shift();
const quoteIndex = part.indexOf('"');
if (quoteIndex === -1) {
if (waitingForMatchingQuote) {
quoteContent += ` ${part}`;
} else {
result.push(part);
}
} else {
const [firstPart, secondPart] = part.split('"', 2);
if (waitingForMatchingQuote) {
waitingForMatchingQuote = false;
quoteContent += ` ${firstPart}"`;
result.push(quoteContent);
quoteContent = '';
if (secondPart.length) {
queue.unshift(secondPart);
}
} else {
waitingForMatchingQuote = true;
if (firstPart.length) {
result.push(firstPart);
}
quoteContent = `"${secondPart}`;
}
}
}
return result;
}