35 lines
902 B
TypeScript
35 lines
902 B
TypeScript
/*
|
|
* SPDX-FileCopyrightText: syuilo and misskey-project
|
|
* SPDX-License-Identifier: AGPL-3.0-only
|
|
*/
|
|
|
|
import { TransformStream } from 'node:stream/web';
|
|
|
|
/**
|
|
* ストリームに流れてきた各データについて`JSON.stringify()`した上で、それらを一つの配列にまとめる
|
|
*/
|
|
export class JsonArrayStream extends TransformStream<unknown, string> {
|
|
constructor() {
|
|
/** 最初の要素かどうかを変数に記録 */
|
|
let isFirst = true;
|
|
|
|
super({
|
|
start(controller) {
|
|
controller.enqueue('[');
|
|
},
|
|
flush(controller) {
|
|
controller.enqueue(']');
|
|
},
|
|
transform(chunk, controller) {
|
|
if (isFirst) {
|
|
isFirst = false;
|
|
} else {
|
|
// 妥当なJSON配列にするためには最初以外の要素の前に`,`を挿入しなければならない
|
|
controller.enqueue(',\n');
|
|
}
|
|
|
|
controller.enqueue(JSON.stringify(chunk));
|
|
},
|
|
});
|
|
}
|
|
}
|