UNPKG

12.3 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3var index_1 = require("../index");
4var DiagramProducer = /** @class */ (function () {
5 function DiagramProducer(diagram, opt) {
6 this.diagram = diagram.trim();
7 this.errorVal = (opt && opt.errorValue) ? opt.errorValue : '#';
8 this.timeUnit = (opt && opt.timeUnit) ? opt.timeUnit : 20;
9 this.values = (opt && opt.values) ? opt.values : {};
10 this.tasks = [];
11 }
12 DiagramProducer.prototype._start = function (out) {
13 var L = this.diagram.length;
14 for (var i = 0; i < L; i++) {
15 var c = this.diagram[i];
16 var time = this.timeUnit * i;
17 switch (c) {
18 case '-':
19 break;
20 case '#':
21 this.schedule({ type: 'error', value: this.errorVal, time: time }, out);
22 break;
23 case '|':
24 this.schedule({ type: 'complete', time: time }, out);
25 break;
26 default:
27 var val = this.values.hasOwnProperty(c) ? this.values[c] : c;
28 this.schedule({ type: 'next', value: val, time: time }, out);
29 break;
30 }
31 }
32 };
33 DiagramProducer.prototype.schedule = function (notification, out) {
34 var id = setInterval(function () {
35 switch (notification.type) {
36 case 'next':
37 out._n(notification.value);
38 break;
39 case 'error':
40 out._e(notification.value);
41 break;
42 case 'complete':
43 out._c();
44 break;
45 }
46 clearInterval(id);
47 }, notification.time);
48 };
49 DiagramProducer.prototype._stop = function () {
50 this.tasks.forEach(function (id) { return clearInterval(id); });
51 };
52 return DiagramProducer;
53}());
54exports.DiagramProducer = DiagramProducer;
55/**
56 * Creates a real stream out of an ASCII drawing of a stream. Each string
57 * character represents an amount of time passed (by default, 20 milliseconds).
58 * `-` characters represent nothing special, `|` is a symbol to mark the
59 * completion of the stream, `#` is an error on the stream, and any other
60 * character is a "next" event.
61 *
62 * Example:
63 *
64 * ```js
65 * import fromDiagram from 'xstream/extra/fromDiagram'
66 *
67 * const stream = fromDiagram('--a--b---c-d--|')
68 *
69 * stream.addListener({
70 * next: (x) => console.log(x),
71 * error: (err) => console.error(err),
72 * complete: () => console.log('concat completed'),
73 * })
74 * ```
75 *
76 * The character `a` represent emission of the event `'a'`, a string. If you
77 * want to emit something else than a string, you need to provide those values
78 * in the options argument.
79 *
80 * Example:
81 *
82 * ```js
83 * import fromDiagram from 'xstream/extra/fromDiagram'
84 *
85 * const stream = fromDiagram('--a--b---c-d--|', {
86 * values: {a: 10, b: 20, c: 30, d: 40}
87 * })
88 *
89 * stream.addListener({
90 * next: (x) => console.log(x),
91 * error: (err) => console.error(err),
92 * complete: () => console.log('concat completed'),
93 * })
94 * ```
95 *
96 * That way, the stream will emit the numbers 10, 20, 30, 40. The `options`
97 * argument may also take `timeUnit`, a number to configure how many
98 * milliseconds does each represents, and `errorValue`, a value to send out as
99 * the error which `#` represents.
100 *
101 * @factory true
102 * @param {string} diagram A string representing a timeline of values, error,
103 * or complete notifications that should happen on the output stream.
104 * @param options An options object that allows you to configure some additional
105 * details of the creation of the stream.
106 * @return {Stream}
107 */
108function fromDiagram(diagram, options) {
109 return new index_1.Stream(new DiagramProducer(diagram, options));
110}
111exports.default = fromDiagram;
112//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbURpYWdyYW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZXh0cmEvZnJvbURpYWdyYW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrQ0FBb0U7QUFjcEU7SUFPRSx5QkFBWSxPQUFlLEVBQ2YsR0FBd0I7UUFDbEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUMvRCxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzFELElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDcEQsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVELGdDQUFNLEdBQU4sVUFBTyxHQUEwQjtRQUMvQixJQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUM5QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzFCLElBQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUIsSUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7WUFDL0IsUUFBUSxDQUFDLEVBQUU7Z0JBQ1QsS0FBSyxHQUFHO29CQUNOLE1BQU07Z0JBQ1IsS0FBSyxHQUFHO29CQUNOLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztvQkFDdEUsTUFBTTtnQkFDUixLQUFLLEdBQUc7b0JBQ04sSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO29CQUNuRCxNQUFNO2dCQUNSO29CQUNFLElBQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQy9ELElBQUksQ0FBQyxRQUFRLENBQUMsRUFBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO29CQUMzRCxNQUFNO2FBQ1Q7U0FDRjtJQUNILENBQUM7SUFFTyxrQ0FBUSxHQUFoQixVQUFpQixZQUEwQixFQUFFLEdBQTBCO1FBQ3JFLElBQU0sRUFBRSxHQUFHLFdBQVcsQ0FBQztZQUNyQixRQUFRLFlBQVksQ0FBQyxJQUFJLEVBQUU7Z0JBQ3pCLEtBQUssTUFBTTtvQkFDVCxHQUFHLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDM0IsTUFBTTtnQkFDUixLQUFLLE9BQU87b0JBQ1YsR0FBRyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQzNCLE1BQU07Z0JBQ1IsS0FBSyxVQUFVO29CQUNiLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQztvQkFDVCxNQUFNO2FBQ1Q7WUFDRCxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEIsQ0FBQyxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRUQsK0JBQUssR0FBTDtRQUNFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQUEsRUFBRSxJQUFJLE9BQUEsYUFBYSxDQUFDLEVBQUUsQ0FBQyxFQUFqQixDQUFpQixDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUNILHNCQUFDO0FBQUQsQ0FBQyxBQTFERCxJQTBEQztBQTFEWSwwQ0FBZTtBQTRENUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvREc7QUFDSCxxQkFBb0MsT0FBZSxFQUFFLE9BQTRCO0lBQy9FLE9BQU8sSUFBSSxjQUFNLENBQU0sSUFBSSxlQUFlLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDaEUsQ0FBQztBQUZELDhCQUVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtTdHJlYW0sIEludGVybmFsUHJvZHVjZXIsIEludGVybmFsTGlzdGVuZXJ9IGZyb20gJy4uL2luZGV4JztcblxuZXhwb3J0IGludGVyZmFjZSBGcm9tRGlhZ3JhbU9wdGlvbnMge1xuICB2YWx1ZXM/OiBPYmplY3Q7XG4gIGVycm9yVmFsdWU/OiBhbnk7XG4gIHRpbWVVbml0PzogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgTm90aWZpY2F0aW9uIHtcbiAgdHlwZTogJ25leHQnIHwgJ2Vycm9yJyB8ICdjb21wbGV0ZSc7XG4gIHZhbHVlPzogYW55O1xuICB0aW1lOiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBEaWFncmFtUHJvZHVjZXIgaW1wbGVtZW50cyBJbnRlcm5hbFByb2R1Y2VyPGFueT4ge1xuICBwcml2YXRlIGRpYWdyYW06IHN0cmluZztcbiAgcHJpdmF0ZSB2YWx1ZXM6IE9iamVjdDtcbiAgcHJpdmF0ZSBlcnJvclZhbDogYW55O1xuICBwcml2YXRlIHRpbWVVbml0OiBudW1iZXI7XG4gIHByaXZhdGUgdGFza3M6IEFycmF5PGFueT47XG5cbiAgY29uc3RydWN0b3IoZGlhZ3JhbTogc3RyaW5nLFxuICAgICAgICAgICAgICBvcHQ/OiBGcm9tRGlhZ3JhbU9wdGlvbnMpIHtcbiAgICB0aGlzLmRpYWdyYW0gPSBkaWFncmFtLnRyaW0oKTtcbiAgICB0aGlzLmVycm9yVmFsID0gKG9wdCAmJiBvcHQuZXJyb3JWYWx1ZSkgPyBvcHQuZXJyb3JWYWx1ZSA6ICcjJztcbiAgICB0aGlzLnRpbWVVbml0ID0gKG9wdCAmJiBvcHQudGltZVVuaXQpID8gb3B0LnRpbWVVbml0IDogMjA7XG4gICAgdGhpcy52YWx1ZXMgPSAob3B0ICYmIG9wdC52YWx1ZXMpID8gb3B0LnZhbHVlcyA6IHt9O1xuICAgIHRoaXMudGFza3MgPSBbXTtcbiAgfVxuXG4gIF9zdGFydChvdXQ6IEludGVybmFsTGlzdGVuZXI8YW55Pikge1xuICAgIGNvbnN0IEwgPSB0aGlzLmRpYWdyYW0ubGVuZ3RoO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTDsgaSsrKSB7XG4gICAgICBjb25zdCBjID0gdGhpcy5kaWFncmFtW2ldO1xuICAgICAgY29uc3QgdGltZSA9IHRoaXMudGltZVVuaXQgKiBpO1xuICAgICAgc3dpdGNoIChjKSB7XG4gICAgICAgIGNhc2UgJy0nOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICcjJzpcbiAgICAgICAgICB0aGlzLnNjaGVkdWxlKHt0eXBlOiAnZXJyb3InLCB2YWx1ZTogdGhpcy5lcnJvclZhbCwgdGltZTogdGltZX0sIG91dCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3wnOlxuICAgICAgICAgIHRoaXMuc2NoZWR1bGUoe3R5cGU6ICdjb21wbGV0ZScsIHRpbWU6IHRpbWV9LCBvdXQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNvbnN0IHZhbCA9IHRoaXMudmFsdWVzLmhhc093blByb3BlcnR5KGMpID8gdGhpcy52YWx1ZXNbY10gOiBjO1xuICAgICAgICAgIHRoaXMuc2NoZWR1bGUoe3R5cGU6ICduZXh0JywgdmFsdWU6IHZhbCwgdGltZTogdGltZX0sIG91dCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzY2hlZHVsZShub3RpZmljYXRpb246IE5vdGlmaWNhdGlvbiwgb3V0OiBJbnRlcm5hbExpc3RlbmVyPGFueT4pIHtcbiAgICBjb25zdCBpZCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHN3aXRjaCAobm90aWZpY2F0aW9uLnR5cGUpIHtcbiAgICAgICAgY2FzZSAnbmV4dCc6XG4gICAgICAgICAgb3V0Ll9uKG5vdGlmaWNhdGlvbi52YWx1ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgICAgICBvdXQuX2Uobm90aWZpY2F0aW9uLnZhbHVlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnY29tcGxldGUnOlxuICAgICAgICAgIG91dC5fYygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2xlYXJJbnRlcnZhbChpZCk7XG4gICAgfSwgbm90aWZpY2F0aW9uLnRpbWUpO1xuICB9XG5cbiAgX3N0b3AoKSB7XG4gICAgdGhpcy50YXNrcy5mb3JFYWNoKGlkID0+IGNsZWFySW50ZXJ2YWwoaWQpKTtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSByZWFsIHN0cmVhbSBvdXQgb2YgYW4gQVNDSUkgZHJhd2luZyBvZiBhIHN0cmVhbS4gRWFjaCBzdHJpbmdcbiAqIGNoYXJhY3RlciByZXByZXNlbnRzIGFuIGFtb3VudCBvZiB0aW1lIHBhc3NlZCAoYnkgZGVmYXVsdCwgMjAgbWlsbGlzZWNvbmRzKS5cbiAqIGAtYCBjaGFyYWN0ZXJzIHJlcHJlc2VudCBub3RoaW5nIHNwZWNpYWwsIGB8YCBpcyBhIHN5bWJvbCB0byBtYXJrIHRoZVxuICogY29tcGxldGlvbiBvZiB0aGUgc3RyZWFtLCBgI2AgaXMgYW4gZXJyb3Igb24gdGhlIHN0cmVhbSwgYW5kIGFueSBvdGhlclxuICogY2hhcmFjdGVyIGlzIGEgXCJuZXh0XCIgZXZlbnQuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogaW1wb3J0IGZyb21EaWFncmFtIGZyb20gJ3hzdHJlYW0vZXh0cmEvZnJvbURpYWdyYW0nXG4gKlxuICogY29uc3Qgc3RyZWFtID0gZnJvbURpYWdyYW0oJy0tYS0tYi0tLWMtZC0tfCcpXG4gKlxuICogc3RyZWFtLmFkZExpc3RlbmVyKHtcbiAqICAgbmV4dDogKHgpID0+IGNvbnNvbGUubG9nKHgpLFxuICogICBlcnJvcjogKGVycikgPT4gY29uc29sZS5lcnJvcihlcnIpLFxuICogICBjb21wbGV0ZTogKCkgPT4gY29uc29sZS5sb2coJ2NvbmNhdCBjb21wbGV0ZWQnKSxcbiAqIH0pXG4gKiBgYGBcbiAqXG4gKiBUaGUgY2hhcmFjdGVyIGBhYCByZXByZXNlbnQgZW1pc3Npb24gb2YgdGhlIGV2ZW50IGAnYSdgLCBhIHN0cmluZy4gSWYgeW91XG4gKiB3YW50IHRvIGVtaXQgc29tZXRoaW5nIGVsc2UgdGhhbiBhIHN0cmluZywgeW91IG5lZWQgdG8gcHJvdmlkZSB0aG9zZSB2YWx1ZXNcbiAqIGluIHRoZSBvcHRpb25zIGFyZ3VtZW50LlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIGltcG9ydCBmcm9tRGlhZ3JhbSBmcm9tICd4c3RyZWFtL2V4dHJhL2Zyb21EaWFncmFtJ1xuICpcbiAqIGNvbnN0IHN0cmVhbSA9IGZyb21EaWFncmFtKCctLWEtLWItLS1jLWQtLXwnLCB7XG4gKiAgIHZhbHVlczoge2E6IDEwLCBiOiAyMCwgYzogMzAsIGQ6IDQwfVxuICogfSlcbiAqXG4gKiBzdHJlYW0uYWRkTGlzdGVuZXIoe1xuICogICBuZXh0OiAoeCkgPT4gY29uc29sZS5sb2coeCksXG4gKiAgIGVycm9yOiAoZXJyKSA9PiBjb25zb2xlLmVycm9yKGVyciksXG4gKiAgIGNvbXBsZXRlOiAoKSA9PiBjb25zb2xlLmxvZygnY29uY2F0IGNvbXBsZXRlZCcpLFxuICogfSlcbiAqIGBgYFxuICpcbiAqIFRoYXQgd2F5LCB0aGUgc3RyZWFtIHdpbGwgZW1pdCB0aGUgbnVtYmVycyAxMCwgMjAsIDMwLCA0MC4gVGhlIGBvcHRpb25zYFxuICogYXJndW1lbnQgbWF5IGFsc28gdGFrZSBgdGltZVVuaXRgLCBhIG51bWJlciB0byBjb25maWd1cmUgaG93IG1hbnlcbiAqIG1pbGxpc2Vjb25kcyBkb2VzIGVhY2ggcmVwcmVzZW50cywgYW5kIGBlcnJvclZhbHVlYCwgYSB2YWx1ZSB0byBzZW5kIG91dCBhc1xuICogdGhlIGVycm9yIHdoaWNoIGAjYCByZXByZXNlbnRzLlxuICpcbiAqIEBmYWN0b3J5IHRydWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBkaWFncmFtIEEgc3RyaW5nIHJlcHJlc2VudGluZyBhIHRpbWVsaW5lIG9mIHZhbHVlcywgZXJyb3IsXG4gKiBvciBjb21wbGV0ZSBub3RpZmljYXRpb25zIHRoYXQgc2hvdWxkIGhhcHBlbiBvbiB0aGUgb3V0cHV0IHN0cmVhbS5cbiAqIEBwYXJhbSBvcHRpb25zIEFuIG9wdGlvbnMgb2JqZWN0IHRoYXQgYWxsb3dzIHlvdSB0byBjb25maWd1cmUgc29tZSBhZGRpdGlvbmFsXG4gKiBkZXRhaWxzIG9mIHRoZSBjcmVhdGlvbiBvZiB0aGUgc3RyZWFtLlxuICogQHJldHVybiB7U3RyZWFtfVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmcm9tRGlhZ3JhbShkaWFncmFtOiBzdHJpbmcsIG9wdGlvbnM/OiBGcm9tRGlhZ3JhbU9wdGlvbnMpOiBTdHJlYW08YW55PiB7XG4gIHJldHVybiBuZXcgU3RyZWFtPGFueT4obmV3IERpYWdyYW1Qcm9kdWNlcihkaWFncmFtLCBvcHRpb25zKSk7XG59XG4iXX0=
\No newline at end of file