parent
db733ac9ce
commit
6185485c68
@ -0,0 +1,65 @@
|
||||
let bufferedData = '';
|
||||
|
||||
const findValidJSONStrings = (inputStr: string) => {
|
||||
const validJSONStrings = [];
|
||||
let startIndex = 0;
|
||||
|
||||
while (startIndex < inputStr.length) {
|
||||
const openingBraceIndex = inputStr.indexOf('{', startIndex);
|
||||
if (openingBraceIndex === -1) break; // No more opening braces
|
||||
|
||||
let closingBraceIndex = openingBraceIndex;
|
||||
let braceCount = 0;
|
||||
|
||||
// find couple of braces
|
||||
while (closingBraceIndex < inputStr.length) {
|
||||
if (inputStr[closingBraceIndex] === '{') {
|
||||
braceCount++;
|
||||
} else if (inputStr[closingBraceIndex] === '}') {
|
||||
braceCount--;
|
||||
}
|
||||
if (braceCount === 0) {
|
||||
break;
|
||||
}
|
||||
closingBraceIndex++;
|
||||
}
|
||||
|
||||
if (braceCount !== 0) {
|
||||
// no matching closing brace
|
||||
break;
|
||||
}
|
||||
|
||||
const jsonString = inputStr.substring(
|
||||
openingBraceIndex,
|
||||
closingBraceIndex + 1
|
||||
);
|
||||
|
||||
try {
|
||||
const parsedData = JSON.parse(jsonString);
|
||||
validJSONStrings.push(parsedData);
|
||||
startIndex = closingBraceIndex + 1;
|
||||
} catch (error) {
|
||||
// mabye invalid JSON
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
parsedJSON: validJSONStrings,
|
||||
remainingData: inputStr.slice(startIndex) // it is the not parsed data
|
||||
};
|
||||
};
|
||||
|
||||
// Web Worker
|
||||
self.onmessage = function (event) {
|
||||
bufferedData += event.data;
|
||||
|
||||
const { parsedJSON, remainingData } = findValidJSONStrings(bufferedData);
|
||||
|
||||
if (parsedJSON.length > 0) {
|
||||
postMessage(parsedJSON);
|
||||
}
|
||||
|
||||
// save the remaining data for the next message
|
||||
bufferedData = remainingData;
|
||||
};
|
||||
Loading…
Reference in new issue