UNPKG

3.27 kBTypeScriptView Raw
1/// <reference types="node" />
2import { EventEmitter } from 'events';
3import { Stream, InternalProducer, InternalListener } from '../index';
4export declare class DOMEventProducer implements InternalProducer<Event> {
5 private node;
6 private eventType;
7 private useCapture;
8 type: string;
9 private listener;
10 constructor(node: EventTarget, eventType: string, useCapture: boolean);
11 _start(out: InternalListener<Event>): void;
12 _stop(): void;
13}
14export declare class NodeEventProducer implements InternalProducer<any> {
15 private node;
16 private eventName;
17 type: string;
18 private listener;
19 constructor(node: EventEmitter, eventName: string);
20 _start(out: InternalListener<any>): void;
21 _stop(): void;
22}
23/**
24 * Creates a stream based on either:
25 * - DOM events with the name `eventName` from a provided target node
26 * - Events with the name `eventName` from a provided NodeJS EventEmitter
27 *
28 * When creating a stream from EventEmitters, if the source event has more than
29 * one argument all the arguments will be aggregated into an array in the
30 * result stream.
31 *
32 * (Tip: when using this factory with TypeScript, you will need types for
33 * Node.js because fromEvent knows how to handle both DOM events and Node.js
34 * EventEmitter. Just install `@types/node`)
35 *
36 * Marble diagram:
37 *
38 * ```text
39 * fromEvent(element, eventName)
40 * ---ev--ev----ev---------------
41 * ```
42 *
43 * Examples:
44 *
45 * ```js
46 * import fromEvent from 'xstream/extra/fromEvent'
47 *
48 * const stream = fromEvent(document.querySelector('.button'), 'click')
49 * .mapTo('Button clicked!')
50 *
51 * stream.addListener({
52 * next: i => console.log(i),
53 * error: err => console.error(err),
54 * complete: () => console.log('completed')
55 * })
56 * ```
57 *
58 * ```text
59 * > 'Button clicked!'
60 * > 'Button clicked!'
61 * > 'Button clicked!'
62 * ```
63 *
64 * ```js
65 * import fromEvent from 'xstream/extra/fromEvent'
66 * import {EventEmitter} from 'events'
67 *
68 * const MyEmitter = new EventEmitter()
69 * const stream = fromEvent(MyEmitter, 'foo')
70 *
71 * stream.addListener({
72 * next: i => console.log(i),
73 * error: err => console.error(err),
74 * complete: () => console.log('completed')
75 * })
76 *
77 * MyEmitter.emit('foo', 'bar')
78 * ```
79 *
80 * ```text
81 * > 'bar'
82 * ```
83 *
84 * ```js
85 * import fromEvent from 'xstream/extra/fromEvent'
86 * import {EventEmitter} from 'events'
87 *
88 * const MyEmitter = new EventEmitter()
89 * const stream = fromEvent(MyEmitter, 'foo')
90 *
91 * stream.addListener({
92 * next: i => console.log(i),
93 * error: err => console.error(err),
94 * complete: () => console.log('completed')
95 * })
96 *
97 * MyEmitter.emit('foo', 'bar', 'baz', 'buzz')
98 * ```
99 *
100 * ```text
101 * > ['bar', 'baz', 'buzz']
102 * ```
103 *
104 * @factory true
105 * @param {EventTarget|EventEmitter} element The element upon which to listen.
106 * @param {string} eventName The name of the event for which to listen.
107 * @param {boolean?} useCapture An optional boolean that indicates that events of
108 * this type will be dispatched to the registered listener before being
109 * dispatched to any EventTarget beneath it in the DOM tree. Defaults to false.
110 * @return {Stream}
111 */
112export default function fromEvent(element: EventTarget | EventEmitter, eventName: string, useCapture?: boolean): Stream<Event | any>;
113
\No newline at end of file