@ackee/antonio-core
Version:
A HTTP client built on fetch API with axios-like API.
40 lines • 5.75 kB
JavaScript
export default class ChunkToJsonParser {
unparsed;
constructor() {
this.unparsed = {
chunk: '',
curlyBracesIndexes: []
};
}
parse(nextChunk = '') {
const chunk = `${this.unparsed.chunk}${nextChunk}`;
const curlyBracesIndexes = this.unparsed.curlyBracesIndexes;
const parsedSlices = [];
nextChunk.split('').forEach((char, index) => {
const charIndex = this.unparsed.chunk.length + index;
switch (char) {
case '{':
curlyBracesIndexes.push(charIndex);
break;
case '}':
const openingBraceIndex = curlyBracesIndexes.pop();
if (curlyBracesIndexes.length === 0) {
const parsedSlice = chunk.slice(openingBraceIndex, charIndex + 1);
parsedSlices.push(JSON.parse(parsedSlice));
}
break;
default:
}
});
const unparsedChunk = curlyBracesIndexes.length > 0 ? chunk.slice(curlyBracesIndexes[0], chunk.length) : '';
const parsedChunkLength = chunk.length - unparsedChunk.length;
this.unparsed = {
chunk: unparsedChunk,
curlyBracesIndexes: curlyBracesIndexes.map(curlyBraceIndex => {
return curlyBraceIndex - parsedChunkLength;
})
};
return parsedSlices;
}
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDaHVua1RvSnNvblBhcnNlciIsInVucGFyc2VkIiwiY29uc3RydWN0b3IiLCJjaHVuayIsImN1cmx5QnJhY2VzSW5kZXhlcyIsInBhcnNlIiwibmV4dENodW5rIiwicGFyc2VkU2xpY2VzIiwic3BsaXQiLCJmb3JFYWNoIiwiY2hhciIsImluZGV4IiwiY2hhckluZGV4IiwibGVuZ3RoIiwicHVzaCIsIm9wZW5pbmdCcmFjZUluZGV4IiwicG9wIiwicGFyc2VkU2xpY2UiLCJzbGljZSIsIkpTT04iLCJ1bnBhcnNlZENodW5rIiwicGFyc2VkQ2h1bmtMZW5ndGgiLCJtYXAiLCJjdXJseUJyYWNlSW5kZXgiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9yZXNwb25zZS9pdGVyYWJsZVN0cmVhbS9wYXJzZXJzL0NodW5rVG9Kc29uUGFyc2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImludGVyZmFjZSBVbnBhcnNlZCB7XG4gICAgY2h1bms6IHN0cmluZztcbiAgICBjdXJseUJyYWNlc0luZGV4ZXM6IG51bWJlcltdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaHVua1RvSnNvblBhcnNlciB7XG4gICAgdW5wYXJzZWQ6IFVucGFyc2VkO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMudW5wYXJzZWQgPSB7IGNodW5rOiAnJywgY3VybHlCcmFjZXNJbmRleGVzOiBbXSB9O1xuICAgIH1cblxuICAgIHBhcnNlKG5leHRDaHVuazogc3RyaW5nID0gJycpIHtcbiAgICAgICAgY29uc3QgY2h1bmsgPSBgJHt0aGlzLnVucGFyc2VkLmNodW5rfSR7bmV4dENodW5rfWA7XG4gICAgICAgIGNvbnN0IGN1cmx5QnJhY2VzSW5kZXhlcyA9IHRoaXMudW5wYXJzZWQuY3VybHlCcmFjZXNJbmRleGVzO1xuICAgICAgICBjb25zdCBwYXJzZWRTbGljZXM6IGFueVtdID0gW107XG5cbiAgICAgICAgbmV4dENodW5rLnNwbGl0KCcnKS5mb3JFYWNoKChjaGFyLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2hhckluZGV4ID0gdGhpcy51bnBhcnNlZC5jaHVuay5sZW5ndGggKyBpbmRleDtcblxuICAgICAgICAgICAgc3dpdGNoIChjaGFyKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAneyc6XG4gICAgICAgICAgICAgICAgICAgIGN1cmx5QnJhY2VzSW5kZXhlcy5wdXNoKGNoYXJJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnfSc6XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wZW5pbmdCcmFjZUluZGV4ID0gY3VybHlCcmFjZXNJbmRleGVzLnBvcCgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJseUJyYWNlc0luZGV4ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWRTbGljZSA9IGNodW5rLnNsaWNlKG9wZW5pbmdCcmFjZUluZGV4LCBjaGFySW5kZXggKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZFNsaWNlcy5wdXNoKEpTT04ucGFyc2UocGFyc2VkU2xpY2UpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHVucGFyc2VkQ2h1bmsgPSBjdXJseUJyYWNlc0luZGV4ZXMubGVuZ3RoID4gMCA/IGNodW5rLnNsaWNlKGN1cmx5QnJhY2VzSW5kZXhlc1swXSwgY2h1bmsubGVuZ3RoKSA6ICcnO1xuICAgICAgICBjb25zdCBwYXJzZWRDaHVua0xlbmd0aCA9IGNodW5rLmxlbmd0aCAtIHVucGFyc2VkQ2h1bmsubGVuZ3RoO1xuXG4gICAgICAgIHRoaXMudW5wYXJzZWQgPSB7XG4gICAgICAgICAgICBjaHVuazogdW5wYXJzZWRDaHVuayxcbiAgICAgICAgICAgIGN1cmx5QnJhY2VzSW5kZXhlczogY3VybHlCcmFjZXNJbmRleGVzLm1hcChjdXJseUJyYWNlSW5kZXggPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBjdXJseUJyYWNlSW5kZXggLSBwYXJzZWRDaHVua0xlbmd0aDtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBwYXJzZWRTbGljZXM7XG4gICAgfVxufVxuIl0sIm1hcHBpbmdzIjoiQUFLQSxlQUFlLE1BQU1BLGlCQUFpQixDQUFDO0VBQ25DQyxRQUFRO0VBRVJDLFdBQVdBLENBQUEsRUFBRztJQUNWLElBQUksQ0FBQ0QsUUFBUSxHQUFHO01BQUVFLEtBQUssRUFBRSxFQUFFO01BQUVDLGtCQUFrQixFQUFFO0lBQUcsQ0FBQztFQUN6RDtFQUVBQyxLQUFLQSxDQUFDQyxTQUFpQixHQUFHLEVBQUUsRUFBRTtJQUMxQixNQUFNSCxLQUFLLEdBQUcsR0FBRyxJQUFJLENBQUNGLFFBQVEsQ0FBQ0UsS0FBSyxHQUFHRyxTQUFTLEVBQUU7SUFDbEQsTUFBTUYsa0JBQWtCLEdBQUcsSUFBSSxDQUFDSCxRQUFRLENBQUNHLGtCQUFrQjtJQUMzRCxNQUFNRyxZQUFtQixHQUFHLEVBQUU7SUFFOUJELFNBQVMsQ0FBQ0UsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDQyxPQUFPLENBQUMsQ0FBQ0MsSUFBSSxFQUFFQyxLQUFLLEtBQUs7TUFDekMsTUFBTUMsU0FBUyxHQUFHLElBQUksQ0FBQ1gsUUFBUSxDQUFDRSxLQUFLLENBQUNVLE1BQU0sR0FBR0YsS0FBSztNQUVwRCxRQUFRRCxJQUFJO1FBQ1IsS0FBSyxHQUFHO1VBQ0pOLGtCQUFrQixDQUFDVSxJQUFJLENBQUNGLFNBQVMsQ0FBQztVQUNsQztRQUVKLEtBQUssR0FBRztVQUNKLE1BQU1HLGlCQUFpQixHQUFHWCxrQkFBa0IsQ0FBQ1ksR0FBRyxDQUFDLENBQUM7VUFFbEQsSUFBSVosa0JBQWtCLENBQUNTLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDakMsTUFBTUksV0FBVyxHQUFHZCxLQUFLLENBQUNlLEtBQUssQ0FBQ0gsaUJBQWlCLEVBQUVILFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDakVMLFlBQVksQ0FBQ08sSUFBSSxDQUFDSyxJQUFJLENBQUNkLEtBQUssQ0FBQ1ksV0FBVyxDQUFDLENBQUM7VUFDOUM7VUFDQTtRQUVKO01BQ0o7SUFDSixDQUFDLENBQUM7SUFFRixNQUFNRyxhQUFhLEdBQUdoQixrQkFBa0IsQ0FBQ1MsTUFBTSxHQUFHLENBQUMsR0FBR1YsS0FBSyxDQUFDZSxLQUFLLENBQUNkLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxFQUFFRCxLQUFLLENBQUNVLE1BQU0sQ0FBQyxHQUFHLEVBQUU7SUFDM0csTUFBTVEsaUJBQWlCLEdBQUdsQixLQUFLLENBQUNVLE1BQU0sR0FBR08sYUFBYSxDQUFDUCxNQUFNO0lBRTdELElBQUksQ0FBQ1osUUFBUSxHQUFHO01BQ1pFLEtBQUssRUFBRWlCLGFBQWE7TUFDcEJoQixrQkFBa0IsRUFBRUEsa0JBQWtCLENBQUNrQixHQUFHLENBQUNDLGVBQWUsSUFBSTtRQUMxRCxPQUFPQSxlQUFlLEdBQUdGLGlCQUFpQjtNQUM5QyxDQUFDO0lBQ0wsQ0FBQztJQUVELE9BQU9kLFlBQVk7RUFDdkI7QUFDSiIsImlnbm9yZUxpc3QiOltdfQ==