V4Fire/Core

Модуль для потокового парсинга JSON json/parse

kobezzza opened this issue · 0 comments

Что нужно?

В PR #257 у нас появляется работать с данными от сервера в виде потока на основе асинхронного итератора. Т. е. теперь мы можем запросить у сервера, скажем 100 карточек, но не дожидаться загрузки всех, а начинать рендерить чанками по 5 или еще как. Но, т. к. сервер у нас отдает JSON, который "из коробки" не поддерживает поточную обработку, то нам нужно сделать этот самим или заюзать готовое.

Есть ли готовые либы?

Есть отличная библиотека: https://github.com/uhop/stream-json, которая по API подходит для нас идеально, но к сожалению она работает только под node.js, т. к. там используется их API потоков, а браузерный API - еще слишком сырой. У библиотеки есть про это issue, где автор пока не хочет добавлять поддержку браузерных потоков.

Других библиотек можно считать, что нет, т.к. они либо не обновлялись лет 8, либо с докой на китайском, либо с кривым API.

Нужно писать самим

Библиотека stream-json отлично подходит всем, кроме того, что использует потоки node.js.
Однако, у нас есть стандартизированный протокол асинхронных итераторов, который работает где угодно, поэтому, что нужно сделать:

  1. Переписать https://github.com/uhop/stream-json/blob/master/Parser.js , но в качестве источника использует итерируемый объект, а не node.js поток.
import { from } from 'core/json/parse';

for await (const {type, value} of from(IterableObject)) {
  console.log(type, value);
}
  1. Фильтры и стримеры реализуем уже как обычные адаптеры для итератора

https://github.com/uhop/stream-json/tree/master/filters
https://github.com/uhop/stream-json/tree/master/streamers

Из пунктов essentials & utils нас интересует

Assembler и verify

Профит

Получаем написанную на ТС библиотеку, которая работает на современном стандартизированном API итераторов и "из-коробки" дружит с async.