| import {getStreamContents} from './contents.js'; | |
| import {identity, getContentsProp, throwObjectStream, getLengthProp} from './utils.js'; | |
| export async function getStreamAsString(stream, options) { | |
| return getStreamContents(stream, stringMethods, options); | |
| } | |
| const initString = () => ({contents: '', textDecoder: new TextDecoder()}); | |
| const useTextDecoder = (chunk, {textDecoder}) => textDecoder.decode(chunk, {stream: true}); | |
| const addStringChunk = (convertedChunk, {contents}) => contents + convertedChunk; | |
| const truncateStringChunk = (convertedChunk, chunkSize) => convertedChunk.slice(0, chunkSize); | |
| const getFinalStringChunk = ({textDecoder}) => { | |
| const finalChunk = textDecoder.decode(); | |
| return finalChunk === '' ? undefined : finalChunk; | |
| }; | |
| const stringMethods = { | |
| init: initString, | |
| convertChunk: { | |
| string: identity, | |
| buffer: useTextDecoder, | |
| arrayBuffer: useTextDecoder, | |
| dataView: useTextDecoder, | |
| typedArray: useTextDecoder, | |
| others: throwObjectStream, | |
| }, | |
| getSize: getLengthProp, | |
| truncateChunk: truncateStringChunk, | |
| addChunk: addStringChunk, | |
| getFinalChunk: getFinalStringChunk, | |
| finalize: getContentsProp, | |
| }; | |