1a12fb870b
- New /developers/ page with API docs, SDKs, pricing, use cases - OpenAPI 3.0 spec for Orders, Missions, Photos, Analytics - Case study: Glasskiosken i Flatenbadet — complete ROI analysis - Updated /order/ with recurring missions and frequency dropdown
37 lines
1.1 KiB
JavaScript
37 lines
1.1 KiB
JavaScript
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,
|
|
};
|