1 | ;
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | var index_1 = require("../index");
|
4 | var 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 | }());
|
54 | exports.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 | */
|
108 | function fromDiagram(diagram, options) {
|
109 | return new index_1.Stream(new DiagramProducer(diagram, options));
|
110 | }
|
111 | exports.default = fromDiagram;
|
112 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbURpYWdyYW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZXh0cmEvZnJvbURpYWdyYW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrQ0FBb0U7QUFjcEU7SUFPRSx5QkFBWSxPQUFlLEVBQ2YsR0FBd0I7UUFDbEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUMvRCxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzFELElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDcEQsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVELGdDQUFNLEdBQU4sVUFBTyxHQUEwQjtRQUMvQixJQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUM5QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzFCLElBQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUIsSUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7WUFDL0IsUUFBUSxDQUFDLEVBQUU7Z0JBQ1QsS0FBSyxHQUFHO29CQUNOLE1BQU07Z0JBQ1IsS0FBSyxHQUFHO29CQUNOLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztvQkFDdEUsTUFBTTtnQkFDUixLQUFLLEdBQUc7b0JBQ04sSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO29CQUNuRCxNQUFNO2dCQUNSO29CQUNFLElBQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQy9ELElBQUksQ0FBQyxRQUFRLENBQUMsRUFBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO29CQUMzRCxNQUFNO2FBQ1Q7U0FDRjtJQUNILENBQUM7SUFFTyxrQ0FBUSxHQUFoQixVQUFpQixZQUEwQixFQUFFLEdBQTBCO1FBQ3JFLElBQU0sRUFBRSxHQUFHLFdBQVcsQ0FBQztZQUNyQixRQUFRLFlBQVksQ0FBQyxJQUFJLEVBQUU7Z0JBQ3pCLEtBQUssTUFBTTtvQkFDVCxHQUFHLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDM0IsTUFBTTtnQkFDUixLQUFLLE9BQU87b0JBQ1YsR0FBRyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQzNCLE1BQU07Z0JBQ1IsS0FBSyxVQUFVO29CQUNiLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQztvQkFDVCxNQUFNO2FBQ1Q7WUFDRCxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEIsQ0FBQyxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRUQsK0JBQUssR0FBTDtRQUNFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQUEsRUFBRSxJQUFJLE9BQUEsYUFBYSxDQUFDLEVBQUUsQ0FBQyxFQUFqQixDQUFpQixDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUNILHNCQUFDO0FBQUQsQ0FBQyxBQTFERCxJQTBEQztBQTFEWSwwQ0FBZTtBQTRENUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvREc7QUFDSCxTQUF3QixXQUFXLENBQUMsT0FBZSxFQUFFLE9BQTRCO0lBQy9FLE9BQU8sSUFBSSxjQUFNLENBQU0sSUFBSSxlQUFlLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDaEUsQ0FBQztBQUZELDhCQUVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtTdHJlYW0sIEludGVybmFsUHJvZHVjZXIsIEludGVybmFsTGlzdGVuZXJ9IGZyb20gJy4uL2luZGV4JztcblxuZXhwb3J0IGludGVyZmFjZSBGcm9tRGlhZ3JhbU9wdGlvbnMge1xuICB2YWx1ZXM/OiBPYmplY3Q7XG4gIGVycm9yVmFsdWU/OiBhbnk7XG4gIHRpbWVVbml0PzogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgTm90aWZpY2F0aW9uIHtcbiAgdHlwZTogJ25leHQnIHwgJ2Vycm9yJyB8ICdjb21wbGV0ZSc7XG4gIHZhbHVlPzogYW55O1xuICB0aW1lOiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBEaWFncmFtUHJvZHVjZXIgaW1wbGVtZW50cyBJbnRlcm5hbFByb2R1Y2VyPGFueT4ge1xuICBwcml2YXRlIGRpYWdyYW06IHN0cmluZztcbiAgcHJpdmF0ZSB2YWx1ZXM6IE9iamVjdDtcbiAgcHJpdmF0ZSBlcnJvclZhbDogYW55O1xuICBwcml2YXRlIHRpbWVVbml0OiBudW1iZXI7XG4gIHByaXZhdGUgdGFza3M6IEFycmF5PGFueT47XG5cbiAgY29uc3RydWN0b3IoZGlhZ3JhbTogc3RyaW5nLFxuICAgICAgICAgICAgICBvcHQ/OiBGcm9tRGlhZ3JhbU9wdGlvbnMpIHtcbiAgICB0aGlzLmRpYWdyYW0gPSBkaWFncmFtLnRyaW0oKTtcbiAgICB0aGlzLmVycm9yVmFsID0gKG9wdCAmJiBvcHQuZXJyb3JWYWx1ZSkgPyBvcHQuZXJyb3JWYWx1ZSA6ICcjJztcbiAgICB0aGlzLnRpbWVVbml0ID0gKG9wdCAmJiBvcHQudGltZVVuaXQpID8gb3B0LnRpbWVVbml0IDogMjA7XG4gICAgdGhpcy52YWx1ZXMgPSAob3B0ICYmIG9wdC52YWx1ZXMpID8gb3B0LnZhbHVlcyA6IHt9O1xuICAgIHRoaXMudGFza3MgPSBbXTtcbiAgfVxuXG4gIF9zdGFydChvdXQ6IEludGVybmFsTGlzdGVuZXI8YW55Pikge1xuICAgIGNvbnN0IEwgPSB0aGlzLmRpYWdyYW0ubGVuZ3RoO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTDsgaSsrKSB7XG4gICAgICBjb25zdCBjID0gdGhpcy5kaWFncmFtW2ldO1xuICAgICAgY29uc3QgdGltZSA9IHRoaXMudGltZVVuaXQgKiBpO1xuICAgICAgc3dpdGNoIChjKSB7XG4gICAgICAgIGNhc2UgJy0nOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICcjJzpcbiAgICAgICAgICB0aGlzLnNjaGVkdWxlKHt0eXBlOiAnZXJyb3InLCB2YWx1ZTogdGhpcy5lcnJvclZhbCwgdGltZTogdGltZX0sIG91dCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3wnOlxuICAgICAgICAgIHRoaXMuc2NoZWR1bGUoe3R5cGU6ICdjb21wbGV0ZScsIHRpbWU6IHRpbWV9LCBvdXQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNvbnN0IHZhbCA9IHRoaXMudmFsdWVzLmhhc093blByb3BlcnR5KGMpID8gdGhpcy52YWx1ZXNbY10gOiBjO1xuICAgICAgICAgIHRoaXMuc2NoZWR1bGUoe3R5cGU6ICduZXh0JywgdmFsdWU6IHZhbCwgdGltZTogdGltZX0sIG91dCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzY2hlZHVsZShub3RpZmljYXRpb246IE5vdGlmaWNhdGlvbiwgb3V0OiBJbnRlcm5hbExpc3RlbmVyPGFueT4pIHtcbiAgICBjb25zdCBpZCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHN3aXRjaCAobm90aWZpY2F0aW9uLnR5cGUpIHtcbiAgICAgICAgY2FzZSAnbmV4dCc6XG4gICAgICAgICAgb3V0Ll9uKG5vdGlmaWNhdGlvbi52YWx1ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgICAgICBvdXQuX2Uobm90aWZpY2F0aW9uLnZhbHVlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnY29tcGxldGUnOlxuICAgICAgICAgIG91dC5fYygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2xlYXJJbnRlcnZhbChpZCk7XG4gICAgfSwgbm90aWZpY2F0aW9uLnRpbWUpO1xuICB9XG5cbiAgX3N0b3AoKSB7XG4gICAgdGhpcy50YXNrcy5mb3JFYWNoKGlkID0+IGNsZWFySW50ZXJ2YWwoaWQpKTtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSByZWFsIHN0cmVhbSBvdXQgb2YgYW4gQVNDSUkgZHJhd2luZyBvZiBhIHN0cmVhbS4gRWFjaCBzdHJpbmdcbiAqIGNoYXJhY3RlciByZXByZXNlbnRzIGFuIGFtb3VudCBvZiB0aW1lIHBhc3NlZCAoYnkgZGVmYXVsdCwgMjAgbWlsbGlzZWNvbmRzKS5cbiAqIGAtYCBjaGFyYWN0ZXJzIHJlcHJlc2VudCBub3RoaW5nIHNwZWNpYWwsIGB8YCBpcyBhIHN5bWJvbCB0byBtYXJrIHRoZVxuICogY29tcGxldGlvbiBvZiB0aGUgc3RyZWFtLCBgI2AgaXMgYW4gZXJyb3Igb24gdGhlIHN0cmVhbSwgYW5kIGFueSBvdGhlclxuICogY2hhcmFjdGVyIGlzIGEgXCJuZXh0XCIgZXZlbnQuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogaW1wb3J0IGZyb21EaWFncmFtIGZyb20gJ3hzdHJlYW0vZXh0cmEvZnJvbURpYWdyYW0nXG4gKlxuICogY29uc3Qgc3RyZWFtID0gZnJvbURpYWdyYW0oJy0tYS0tYi0tLWMtZC0tfCcpXG4gKlxuICogc3RyZWFtLmFkZExpc3RlbmVyKHtcbiAqICAgbmV4dDogKHgpID0+IGNvbnNvbGUubG9nKHgpLFxuICogICBlcnJvcjogKGVycikgPT4gY29uc29sZS5lcnJvcihlcnIpLFxuICogICBjb21wbGV0ZTogKCkgPT4gY29uc29sZS5sb2coJ2NvbmNhdCBjb21wbGV0ZWQnKSxcbiAqIH0pXG4gKiBgYGBcbiAqXG4gKiBUaGUgY2hhcmFjdGVyIGBhYCByZXByZXNlbnQgZW1pc3Npb24gb2YgdGhlIGV2ZW50IGAnYSdgLCBhIHN0cmluZy4gSWYgeW91XG4gKiB3YW50IHRvIGVtaXQgc29tZXRoaW5nIGVsc2UgdGhhbiBhIHN0cmluZywgeW91IG5lZWQgdG8gcHJvdmlkZSB0aG9zZSB2YWx1ZXNcbiAqIGluIHRoZSBvcHRpb25zIGFyZ3VtZW50LlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIGltcG9ydCBmcm9tRGlhZ3JhbSBmcm9tICd4c3RyZWFtL2V4dHJhL2Zyb21EaWFncmFtJ1xuICpcbiAqIGNvbnN0IHN0cmVhbSA9IGZyb21EaWFncmFtKCctLWEtLWItLS1jLWQtLXwnLCB7XG4gKiAgIHZhbHVlczoge2E6IDEwLCBiOiAyMCwgYzogMzAsIGQ6IDQwfVxuICogfSlcbiAqXG4gKiBzdHJlYW0uYWRkTGlzdGVuZXIoe1xuICogICBuZXh0OiAoeCkgPT4gY29uc29sZS5sb2coeCksXG4gKiAgIGVycm9yOiAoZXJyKSA9PiBjb25zb2xlLmVycm9yKGVyciksXG4gKiAgIGNvbXBsZXRlOiAoKSA9PiBjb25zb2xlLmxvZygnY29uY2F0IGNvbXBsZXRlZCcpLFxuICogfSlcbiAqIGBgYFxuICpcbiAqIFRoYXQgd2F5LCB0aGUgc3RyZWFtIHdpbGwgZW1pdCB0aGUgbnVtYmVycyAxMCwgMjAsIDMwLCA0MC4gVGhlIGBvcHRpb25zYFxuICogYXJndW1lbnQgbWF5IGFsc28gdGFrZSBgdGltZVVuaXRgLCBhIG51bWJlciB0byBjb25maWd1cmUgaG93IG1hbnlcbiAqIG1pbGxpc2Vjb25kcyBkb2VzIGVhY2ggcmVwcmVzZW50cywgYW5kIGBlcnJvclZhbHVlYCwgYSB2YWx1ZSB0byBzZW5kIG91dCBhc1xuICogdGhlIGVycm9yIHdoaWNoIGAjYCByZXByZXNlbnRzLlxuICpcbiAqIEBmYWN0b3J5IHRydWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBkaWFncmFtIEEgc3RyaW5nIHJlcHJlc2VudGluZyBhIHRpbWVsaW5lIG9mIHZhbHVlcywgZXJyb3IsXG4gKiBvciBjb21wbGV0ZSBub3RpZmljYXRpb25zIHRoYXQgc2hvdWxkIGhhcHBlbiBvbiB0aGUgb3V0cHV0IHN0cmVhbS5cbiAqIEBwYXJhbSBvcHRpb25zIEFuIG9wdGlvbnMgb2JqZWN0IHRoYXQgYWxsb3dzIHlvdSB0byBjb25maWd1cmUgc29tZSBhZGRpdGlvbmFsXG4gKiBkZXRhaWxzIG9mIHRoZSBjcmVhdGlvbiBvZiB0aGUgc3RyZWFtLlxuICogQHJldHVybiB7U3RyZWFtfVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmcm9tRGlhZ3JhbShkaWFncmFtOiBzdHJpbmcsIG9wdGlvbnM/OiBGcm9tRGlhZ3JhbU9wdGlvbnMpOiBTdHJlYW08YW55PiB7XG4gIHJldHVybiBuZXcgU3RyZWFtPGFueT4obmV3IERpYWdyYW1Qcm9kdWNlcihkaWFncmFtLCBvcHRpb25zKSk7XG59XG4iXX0= |
\ | No newline at end of file |