61 lines
1.9 KiB
TypeScript
61 lines
1.9 KiB
TypeScript
import {
|
|
StreamPartType,
|
|
StreamStringPrefixes,
|
|
parseStreamPart,
|
|
} from './stream-parts';
|
|
|
|
export * from './generate-id';
|
|
|
|
// TODO remove (breaking change)
|
|
export { generateId as nanoid } from './generate-id';
|
|
|
|
// Export stream data utilities for custom stream implementations,
|
|
// both on the client and server side.
|
|
export type { StreamPart } from './stream-parts';
|
|
export { formatStreamPart, parseStreamPart } from './stream-parts';
|
|
export { readDataStream } from './read-data-stream';
|
|
|
|
// simple decoder signatures:
|
|
function createChunkDecoder(): (chunk: Uint8Array | undefined) => string;
|
|
function createChunkDecoder(
|
|
complex: false,
|
|
): (chunk: Uint8Array | undefined) => string;
|
|
// complex decoder signature:
|
|
function createChunkDecoder(
|
|
complex: true,
|
|
): (chunk: Uint8Array | undefined) => StreamPartType[];
|
|
// combined signature for when the client calls this function with a boolean:
|
|
function createChunkDecoder(
|
|
complex?: boolean,
|
|
): (chunk: Uint8Array | undefined) => StreamPartType[] | string;
|
|
function createChunkDecoder(complex?: boolean) {
|
|
const decoder = new TextDecoder();
|
|
|
|
if (!complex) {
|
|
return function (chunk: Uint8Array | undefined): string {
|
|
if (!chunk) return '';
|
|
return decoder.decode(chunk, { stream: true });
|
|
};
|
|
}
|
|
|
|
return function (chunk: Uint8Array | undefined) {
|
|
const decoded = decoder
|
|
.decode(chunk, { stream: true })
|
|
.split('\n')
|
|
.filter(line => line !== ''); // splitting leaves an empty string at the end
|
|
|
|
return decoded.map(parseStreamPart).filter(Boolean);
|
|
};
|
|
}
|
|
|
|
export { createChunkDecoder };
|
|
|
|
export const isStreamStringEqualToType = (
|
|
type: keyof typeof StreamStringPrefixes,
|
|
value: string,
|
|
): value is StreamString =>
|
|
value.startsWith(`${StreamStringPrefixes[type]}:`) && value.endsWith('\n');
|
|
|
|
export type StreamString =
|
|
`${(typeof StreamStringPrefixes)[keyof typeof StreamStringPrefixes]}:${string}\n`;
|