refactor: improve payload type for OSC (#954)

---------

Co-authored-by: Joel Wetzell <jwetzell@yahoo.com>
Co-authored-by: arc-alex <ac@omnivox.dk>
This commit is contained in:
Carlos Valente
2024-05-30 13:02:22 +02:00
committed by GitHub
parent ea3d33ca93
commit 686c6108bf
10 changed files with 273 additions and 14 deletions
@@ -0,0 +1,37 @@
const splitRegex = /\\?.|^$/g;
/**
* adapted from {@link https://stackoverflow.com/questions/4031900/split-a-string-by-whitespace-keeping-quoted-segments-allowing-escaped-quotes this}
* @param str string to split
* @returns
*/
export const splitWhitespace = (str: string, keepQuotes = true): null | string[] => {
const match = str.match(splitRegex);
if (!match || match[0] == '') {
return null;
}
const array = match
.reduce(
(accumulator, current) => {
if (current === '"') {
accumulator.inQuotes ^= 1;
if (keepQuotes) {
accumulator.array[accumulator.array.length - 1] += current.replace(/\\(.)/, '$1');
}
} else if (!accumulator.inQuotes && current === ' ') {
accumulator.array.push('');
} else {
accumulator.array[accumulator.array.length - 1] += current.replace(/\\(.)/, '$1');
}
return accumulator;
},
{ array: [''], inQuotes: 0 },
)
.array.filter((value) => value != '');
if (!array.length) {
return null;
}
return array;
};