UNPKG

@voice-ping/cognitive-services-speech

Version:

VoicePing Cognitive Services Speech SDK for JavaScript forked from Microsoft

1 lines 3.26 kB
{"version":3,"sources":["src/common/Stream.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,MAAM,WAAW,YAAY,CAAC,OAAO;IACjC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACxB;AAED,qBAAa,MAAM,CAAC,OAAO;IACvB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,gBAAgB,CAAkB;IAC1C,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,eAAe,CAA+B;gBAEnC,QAAQ,CAAC,EAAE,MAAM;IAKpC,IAAW,QAAQ,IAAI,OAAO,CAE7B;IAED,IAAW,WAAW,IAAI,OAAO,CAEhC;IAED,IAAW,EAAE,IAAI,MAAM,CAEtB;IAEM,KAAK,IAAI,IAAI;IAWb,gBAAgB,CAAC,WAAW,EAAE,YAAY,CAAC,OAAO,CAAC,GAAG,IAAI;IAW1D,IAAI,uCAcV;IAEM,SAAS,aAKf;IAED,OAAO,CAAC,aAAa,CAIpB;CACJ","file":"Stream.d.ts","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT license.\n\nimport { InvalidOperationError } from \"./Error\";\nimport { createNoDashGuid } from \"./Guid\";\nimport { Promise } from \"./Promise\";\nimport { Queue } from \"./Queue\";\n\nexport interface IStreamChunk<TBuffer> {\n isEnd: boolean;\n buffer: TBuffer;\n timeReceived: number;\n}\n\nexport class Stream<TBuffer> {\n private privId: string;\n private privIsWriteEnded: boolean = false;\n private privIsReadEnded: boolean = false;\n private privReaderQueue: Queue<IStreamChunk<TBuffer>>;\n\n public constructor(streamId?: string) {\n this.privId = streamId ? streamId : createNoDashGuid();\n this.privReaderQueue = new Queue<IStreamChunk<TBuffer>>();\n }\n\n public get isClosed(): boolean {\n return this.privIsWriteEnded;\n }\n\n public get isReadEnded(): boolean {\n return this.privIsReadEnded;\n }\n\n public get id(): string {\n return this.privId;\n }\n\n public close(): void {\n if (!this.privIsWriteEnded) {\n this.writeStreamChunk({\n buffer: null,\n isEnd: true,\n timeReceived: Date.now(),\n });\n this.privIsWriteEnded = true;\n }\n }\n\n public writeStreamChunk(streamChunk: IStreamChunk<TBuffer>): void {\n this.throwIfClosed();\n if (!this.privReaderQueue.isDisposed()) {\n try {\n this.privReaderQueue.enqueue(streamChunk);\n } catch (e) {\n // Do nothing\n }\n }\n }\n\n public read = (): Promise<IStreamChunk<TBuffer>> => {\n if (this.privIsReadEnded) {\n throw new InvalidOperationError(\"Stream read has already finished\");\n }\n\n return this.privReaderQueue\n .dequeue()\n .onSuccessContinueWith((streamChunk: IStreamChunk<TBuffer>) => {\n if (streamChunk === undefined || streamChunk.isEnd) {\n this.privReaderQueue.dispose(\"End of stream reached\");\n }\n\n return streamChunk;\n });\n }\n\n public readEnded = (): void => {\n if (!this.privIsReadEnded) {\n this.privIsReadEnded = true;\n this.privReaderQueue = new Queue<IStreamChunk<TBuffer>>();\n }\n }\n\n private throwIfClosed = (): void => {\n if (this.privIsWriteEnded) {\n throw new InvalidOperationError(\"Stream closed\");\n }\n }\n}\n"]}