diff --git a/packages/captcha/src/TextStream.test.ts b/packages/captcha/src/TextStream.test.ts new file mode 100644 index 0000000..47af137 --- /dev/null +++ b/packages/captcha/src/TextStream.test.ts @@ -0,0 +1,27 @@ +import { TextStream } from './TextStream' + +describe('TextStream', () => { + + it('creates a text stream', async () => { + const stream = new TextStream('test') + const data = await new Promise((resolve, reject) => { + let text = '' + stream.on('error', reject) + stream.on('data', data => { + text += data.toString() + }) + stream.on('end', () => { + resolve(text) + }) + }) + expect(data).toBe('test') + }) + + describe('_read', () => { + it('does nothing', () => { + const stream = new TextStream('test') + expect(stream._read()).toBe(undefined) + }) + }) + +}) diff --git a/packages/captcha/src/TextStream.ts b/packages/captcha/src/TextStream.ts new file mode 100644 index 0000000..d0c03e1 --- /dev/null +++ b/packages/captcha/src/TextStream.ts @@ -0,0 +1,11 @@ +import { Readable } from 'stream' + +export class TextStream extends Readable { + constructor(text: string) { + super() + this.push(text) + this.push(null) + } + _read() {/* noop */} +} + diff --git a/packages/captcha/src/audio.ts b/packages/captcha/src/audio.ts index 3ebef65..dc641de 100644 --- a/packages/captcha/src/audio.ts +++ b/packages/captcha/src/audio.ts @@ -1,7 +1,7 @@ import { Request, Response } from 'express' -import { Readable } from 'stream' -import { run, ReadableProcess, ReadableWritable, Command } from './run' import SVGCaptcha from 'svg-captcha' +import { Command, ReadableProcess, ReadableWritable, run } from './run' +import { TextStream } from './TextStream' export interface AudioConfig { commands: Command[] @@ -44,15 +44,6 @@ export async function speak( return last } -class TextStream extends Readable { - constructor(text: string) { - super() - this.push(text) - this.push(null) - } - _read() {/* noop */} -} - function createTextStream(text: string): ReadableProcess { return { stdout: new TextStream(text),