flinker 1.0.0 → 1.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/RX.d.ts +22 -0
- package/dist/RXObserver.d.ts +33 -0
- package/dist/RXOperator.d.ts +133 -0
- package/dist/RXPipeline.d.ts +14 -0
- package/dist/RXPublisher.d.ts +153 -0
- package/dist/RXSubscriber.d.ts +30 -0
- package/dist/cjs/RX.js +41 -0
- package/dist/cjs/RXObserver.js +255 -0
- package/dist/cjs/RXOperator.js +484 -0
- package/dist/cjs/RXPipeline.js +27 -0
- package/dist/cjs/RXPublisher.js +733 -0
- package/dist/cjs/RXSubscriber.js +77 -0
- package/dist/cjs/index.js +50 -0
- package/dist/esm/RX.js +38 -0
- package/dist/esm/RXObserver.js +249 -0
- package/dist/esm/RXOperator.js +481 -0
- package/dist/esm/RXPipeline.js +24 -0
- package/dist/esm/RXPublisher.js +730 -0
- package/dist/esm/RXSubscriber.js +74 -0
- package/dist/esm/index.js +7 -0
- package/dist/index.d.ts +7 -0
- package/package.json +2 -2
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RXSubscriber = void 0;
|
|
4
|
+
var RXSubscriber = /** @class */ (function () {
|
|
5
|
+
function RXSubscriber(pipeline) {
|
|
6
|
+
this._isComplete = false;
|
|
7
|
+
this.isSubscribed = false;
|
|
8
|
+
this.pipeline = pipeline;
|
|
9
|
+
}
|
|
10
|
+
Object.defineProperty(RXSubscriber.prototype, "isComplete", {
|
|
11
|
+
get: function () { return this._isComplete; },
|
|
12
|
+
enumerable: false,
|
|
13
|
+
configurable: true
|
|
14
|
+
});
|
|
15
|
+
RXSubscriber.prototype.send = function (value, broadcast) {
|
|
16
|
+
var _a;
|
|
17
|
+
if (!this._isComplete) {
|
|
18
|
+
(_a = this.onReceiveCallback) === null || _a === void 0 ? void 0 : _a.call(this, value);
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
RXSubscriber.prototype.sendError = function (e, broadcast) {
|
|
22
|
+
var _a;
|
|
23
|
+
if (!this._isComplete) {
|
|
24
|
+
(_a = this.onErrorCallback) === null || _a === void 0 ? void 0 : _a.call(this, e);
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
RXSubscriber.prototype.sendComplete = function (broadcast) {
|
|
28
|
+
var _a;
|
|
29
|
+
if (!this._isComplete) {
|
|
30
|
+
this._isComplete = true;
|
|
31
|
+
(_a = this.onCompleteCallback) === null || _a === void 0 ? void 0 : _a.call(this);
|
|
32
|
+
this.unsubscribe();
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
RXSubscriber.prototype.onReceive = function (f) {
|
|
36
|
+
if (this.isComplete)
|
|
37
|
+
throw new Error('RXSubscriber is complete: It can update onReceiveCallback');
|
|
38
|
+
else if (this.isSubscribed)
|
|
39
|
+
throw new Error('RXSubscriber can not update onReceiveCallback: subscribe() is already evoked');
|
|
40
|
+
this.onReceiveCallback = f;
|
|
41
|
+
return this;
|
|
42
|
+
};
|
|
43
|
+
RXSubscriber.prototype.onError = function (f) {
|
|
44
|
+
if (this.isComplete)
|
|
45
|
+
throw new Error('RXSubscriber is complete: It can not update onErrorCallback');
|
|
46
|
+
else if (this.isSubscribed)
|
|
47
|
+
throw new Error('RXSubscriber can not update onErrorCallback: subscribe() is already evoked');
|
|
48
|
+
this.onErrorCallback = f;
|
|
49
|
+
return this;
|
|
50
|
+
};
|
|
51
|
+
RXSubscriber.prototype.onComplete = function (f) {
|
|
52
|
+
if (this.isComplete)
|
|
53
|
+
throw new Error('RXSubscriber is complete: It can not update onCompleteCallback');
|
|
54
|
+
else if (this.isSubscribed)
|
|
55
|
+
throw new Error('RXSubscriber can not update onCompleteCallback: subscribe() is already evoked');
|
|
56
|
+
this.onCompleteCallback = f;
|
|
57
|
+
return this;
|
|
58
|
+
};
|
|
59
|
+
RXSubscriber.prototype.subscribe = function () {
|
|
60
|
+
var _this = this;
|
|
61
|
+
if (this.isSubscribed)
|
|
62
|
+
throw new Error('RXPipeline has already a subscriber');
|
|
63
|
+
this.isSubscribed = true;
|
|
64
|
+
this.pipeline.dispatcher.didSubscribe(this.pipeline);
|
|
65
|
+
return function () {
|
|
66
|
+
_this.unsubscribe();
|
|
67
|
+
};
|
|
68
|
+
};
|
|
69
|
+
RXSubscriber.prototype.unsubscribe = function () {
|
|
70
|
+
this.onReceiveCallback = undefined;
|
|
71
|
+
this.onErrorCallback = undefined;
|
|
72
|
+
this.onCompleteCallback = undefined;
|
|
73
|
+
this.pipeline.dispatcher.didUnsubscribe(this.pipeline);
|
|
74
|
+
};
|
|
75
|
+
return RXSubscriber;
|
|
76
|
+
}());
|
|
77
|
+
exports.RXSubscriber = RXSubscriber;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.asyncDelay = exports.MD5 = exports.RXSubscriber = exports.RXPipeline = exports.RXReplaceError = exports.RXDebounce = exports.RXRemoveDuplicates = exports.RXSkipNullable = exports.RXSkipFirst = exports.RXSpread = exports.RXFilter = exports.RXParallel = exports.RXSequent = exports.RXForEach = exports.RXFlatMap = exports.RXMap = exports.RXOperator = exports.RenderQueueStatus = exports.ObservableGlobalState = exports.JSXSubscriber = exports.observer = exports.observeFrom = exports.observe = exports.RXQueue = exports.RXQueueOperator = exports.RXObservableValue = exports.RXObservableEntity = exports.RXWaitUntilComplete = exports.RXFrom = exports.RXCombine = exports.RXOperation = exports.RXBuffer = exports.RXSubject = exports.RXEmitter = exports.RXDelayedError = exports.RXDelayedComplete = exports.RXJustError = exports.RXJustComplete = exports.RXPublisher = exports.RX = void 0;
|
|
4
|
+
var RX_js_1 = require("./RX.js");
|
|
5
|
+
Object.defineProperty(exports, "RX", { enumerable: true, get: function () { return RX_js_1.RX; } });
|
|
6
|
+
var RXPublisher_js_1 = require("./RXPublisher.js");
|
|
7
|
+
Object.defineProperty(exports, "RXPublisher", { enumerable: true, get: function () { return RXPublisher_js_1.RXPublisher; } });
|
|
8
|
+
Object.defineProperty(exports, "RXJustComplete", { enumerable: true, get: function () { return RXPublisher_js_1.RXJustComplete; } });
|
|
9
|
+
Object.defineProperty(exports, "RXJustError", { enumerable: true, get: function () { return RXPublisher_js_1.RXJustError; } });
|
|
10
|
+
Object.defineProperty(exports, "RXDelayedComplete", { enumerable: true, get: function () { return RXPublisher_js_1.RXDelayedComplete; } });
|
|
11
|
+
Object.defineProperty(exports, "RXDelayedError", { enumerable: true, get: function () { return RXPublisher_js_1.RXDelayedError; } });
|
|
12
|
+
Object.defineProperty(exports, "RXEmitter", { enumerable: true, get: function () { return RXPublisher_js_1.RXEmitter; } });
|
|
13
|
+
Object.defineProperty(exports, "RXSubject", { enumerable: true, get: function () { return RXPublisher_js_1.RXSubject; } });
|
|
14
|
+
Object.defineProperty(exports, "RXBuffer", { enumerable: true, get: function () { return RXPublisher_js_1.RXBuffer; } });
|
|
15
|
+
Object.defineProperty(exports, "RXOperation", { enumerable: true, get: function () { return RXPublisher_js_1.RXOperation; } });
|
|
16
|
+
Object.defineProperty(exports, "RXCombine", { enumerable: true, get: function () { return RXPublisher_js_1.RXCombine; } });
|
|
17
|
+
Object.defineProperty(exports, "RXFrom", { enumerable: true, get: function () { return RXPublisher_js_1.RXFrom; } });
|
|
18
|
+
Object.defineProperty(exports, "RXWaitUntilComplete", { enumerable: true, get: function () { return RXPublisher_js_1.RXWaitUntilComplete; } });
|
|
19
|
+
Object.defineProperty(exports, "RXObservableEntity", { enumerable: true, get: function () { return RXPublisher_js_1.RXObservableEntity; } });
|
|
20
|
+
Object.defineProperty(exports, "RXObservableValue", { enumerable: true, get: function () { return RXPublisher_js_1.RXObservableValue; } });
|
|
21
|
+
Object.defineProperty(exports, "RXQueueOperator", { enumerable: true, get: function () { return RXPublisher_js_1.RXQueueOperator; } });
|
|
22
|
+
Object.defineProperty(exports, "RXQueue", { enumerable: true, get: function () { return RXPublisher_js_1.RXQueue; } });
|
|
23
|
+
var RXObserver_js_1 = require("./RXObserver.js");
|
|
24
|
+
Object.defineProperty(exports, "observe", { enumerable: true, get: function () { return RXObserver_js_1.observe; } });
|
|
25
|
+
Object.defineProperty(exports, "observeFrom", { enumerable: true, get: function () { return RXObserver_js_1.observeFrom; } });
|
|
26
|
+
Object.defineProperty(exports, "observer", { enumerable: true, get: function () { return RXObserver_js_1.observer; } });
|
|
27
|
+
Object.defineProperty(exports, "JSXSubscriber", { enumerable: true, get: function () { return RXObserver_js_1.JSXSubscriber; } });
|
|
28
|
+
Object.defineProperty(exports, "ObservableGlobalState", { enumerable: true, get: function () { return RXObserver_js_1.ObservableGlobalState; } });
|
|
29
|
+
Object.defineProperty(exports, "RenderQueueStatus", { enumerable: true, get: function () { return RXObserver_js_1.RenderQueueStatus; } });
|
|
30
|
+
var RXOperator_js_1 = require("./RXOperator.js");
|
|
31
|
+
Object.defineProperty(exports, "RXOperator", { enumerable: true, get: function () { return RXOperator_js_1.RXOperator; } });
|
|
32
|
+
Object.defineProperty(exports, "RXMap", { enumerable: true, get: function () { return RXOperator_js_1.RXMap; } });
|
|
33
|
+
Object.defineProperty(exports, "RXFlatMap", { enumerable: true, get: function () { return RXOperator_js_1.RXFlatMap; } });
|
|
34
|
+
Object.defineProperty(exports, "RXForEach", { enumerable: true, get: function () { return RXOperator_js_1.RXForEach; } });
|
|
35
|
+
Object.defineProperty(exports, "RXSequent", { enumerable: true, get: function () { return RXOperator_js_1.RXSequent; } });
|
|
36
|
+
Object.defineProperty(exports, "RXParallel", { enumerable: true, get: function () { return RXOperator_js_1.RXParallel; } });
|
|
37
|
+
Object.defineProperty(exports, "RXFilter", { enumerable: true, get: function () { return RXOperator_js_1.RXFilter; } });
|
|
38
|
+
Object.defineProperty(exports, "RXSpread", { enumerable: true, get: function () { return RXOperator_js_1.RXSpread; } });
|
|
39
|
+
Object.defineProperty(exports, "RXSkipFirst", { enumerable: true, get: function () { return RXOperator_js_1.RXSkipFirst; } });
|
|
40
|
+
Object.defineProperty(exports, "RXSkipNullable", { enumerable: true, get: function () { return RXOperator_js_1.RXSkipNullable; } });
|
|
41
|
+
Object.defineProperty(exports, "RXRemoveDuplicates", { enumerable: true, get: function () { return RXOperator_js_1.RXRemoveDuplicates; } });
|
|
42
|
+
Object.defineProperty(exports, "RXDebounce", { enumerable: true, get: function () { return RXOperator_js_1.RXDebounce; } });
|
|
43
|
+
Object.defineProperty(exports, "RXReplaceError", { enumerable: true, get: function () { return RXOperator_js_1.RXReplaceError; } });
|
|
44
|
+
var RXPipeline_js_1 = require("./RXPipeline.js");
|
|
45
|
+
Object.defineProperty(exports, "RXPipeline", { enumerable: true, get: function () { return RXPipeline_js_1.RXPipeline; } });
|
|
46
|
+
var RXSubscriber_js_1 = require("./RXSubscriber.js");
|
|
47
|
+
Object.defineProperty(exports, "RXSubscriber", { enumerable: true, get: function () { return RXSubscriber_js_1.RXSubscriber; } });
|
|
48
|
+
var Utils_js_1 = require("./Utils.js");
|
|
49
|
+
Object.defineProperty(exports, "MD5", { enumerable: true, get: function () { return Utils_js_1.MD5; } });
|
|
50
|
+
Object.defineProperty(exports, "asyncDelay", { enumerable: true, get: function () { return Utils_js_1.asyncDelay; } });
|
package/dist/esm/RX.js
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { RXCombine, RXDelayedComplete, RXDelayedError, RXFrom, RXJustComplete, RXJustError, RXQueue, RXWaitUntilComplete } from './RXPublisher.js';
|
|
2
|
+
var RX = /** @class */ (function () {
|
|
3
|
+
function RX() {
|
|
4
|
+
}
|
|
5
|
+
//--------------------------------------
|
|
6
|
+
// STATIC METHODS
|
|
7
|
+
//--------------------------------------
|
|
8
|
+
RX.combine = function () {
|
|
9
|
+
var list = [];
|
|
10
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
11
|
+
list[_i] = arguments[_i];
|
|
12
|
+
}
|
|
13
|
+
return new RXCombine(list).asObservable;
|
|
14
|
+
};
|
|
15
|
+
RX.from = function (list) {
|
|
16
|
+
return new RXFrom(list).asObservable;
|
|
17
|
+
};
|
|
18
|
+
RX.queue = function () {
|
|
19
|
+
return new RXQueue();
|
|
20
|
+
};
|
|
21
|
+
RX.waitUntilComplete = function (list, result) {
|
|
22
|
+
return new RXWaitUntilComplete(list, result).asObservable;
|
|
23
|
+
};
|
|
24
|
+
RX.justComplete = function (value) {
|
|
25
|
+
return new RXJustComplete(value).asObservable;
|
|
26
|
+
};
|
|
27
|
+
RX.justError = function (error) {
|
|
28
|
+
return new RXJustError(error).asObservable;
|
|
29
|
+
};
|
|
30
|
+
RX.delayedComplete = function (ms, value) {
|
|
31
|
+
return new RXDelayedComplete(ms, value).asObservable;
|
|
32
|
+
};
|
|
33
|
+
RX.delayedError = function (ms, error) {
|
|
34
|
+
return new RXDelayedError(ms, error).asObservable;
|
|
35
|
+
};
|
|
36
|
+
return RX;
|
|
37
|
+
}());
|
|
38
|
+
export { RX };
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
2
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
3
|
+
if (ar || !(i in from)) {
|
|
4
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
5
|
+
ar[i] = from[i];
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
9
|
+
};
|
|
10
|
+
import { useLayoutEffect, useRef, useState } from 'react';
|
|
11
|
+
var __DEV__ = false;
|
|
12
|
+
/*
|
|
13
|
+
*
|
|
14
|
+
*
|
|
15
|
+
* GLOBAL OBSERVE METHODS
|
|
16
|
+
*
|
|
17
|
+
*
|
|
18
|
+
* */
|
|
19
|
+
export function observe(rx) {
|
|
20
|
+
if (rx) {
|
|
21
|
+
var jsxSubscriber = ObservableGlobalState.initializingJSXComponent;
|
|
22
|
+
if (jsxSubscriber !== JSXSubscriber.empty) {
|
|
23
|
+
logInfo('observe(' + rx.constructor.name + '), subscriber uid =', jsxSubscriber.uid);
|
|
24
|
+
jsxSubscriber.observe(rx);
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
logWarn('observe(' + rx.constructor.name + ') is failed: JSX Function Component has not "observer" wrapper!');
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return rx;
|
|
31
|
+
}
|
|
32
|
+
export function observeFrom(rx) {
|
|
33
|
+
if (rx) {
|
|
34
|
+
var jsxSubscriber = ObservableGlobalState.initializingJSXComponent;
|
|
35
|
+
if (jsxSubscriber !== JSXSubscriber.empty) {
|
|
36
|
+
logInfo('observeFunc(' + rx.constructor.name + '), subscriber uid =', jsxSubscriber.uid);
|
|
37
|
+
jsxSubscriber.observeFrom(rx);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
logWarn('observeFunc(' + rx.constructor.name + ') is failed: JSX Function Component has not "observer" wrapper!');
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
export function observer(component) {
|
|
45
|
+
return function (props) {
|
|
46
|
+
var subscriberRef = useRef(JSXSubscriber.empty);
|
|
47
|
+
var _a = useState(ObservableGlobalState.renderCycle), forceRender = _a[1];
|
|
48
|
+
if (subscriberRef.current === JSXSubscriber.empty) {
|
|
49
|
+
subscriberRef.current = new JSXSubscriber(function (renderCycle) {
|
|
50
|
+
forceRender(renderCycle);
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
if (__DEV__) {
|
|
54
|
+
useLayoutEffect(function () {
|
|
55
|
+
if (ObservableGlobalState.debug)
|
|
56
|
+
logInfo('Registering of unmounting [' + subscriberRef.current.uid + ']');
|
|
57
|
+
if (subscriberRef.current.isDisposed) {
|
|
58
|
+
if (ObservableGlobalState.debug)
|
|
59
|
+
logInfo('Disposed Subscriber [' + subscriberRef.current.uid + '] is resurrected');
|
|
60
|
+
subscriberRef.current.resurrect();
|
|
61
|
+
}
|
|
62
|
+
return function () {
|
|
63
|
+
if (ObservableGlobalState.debug)
|
|
64
|
+
logInfo('Subscriber [' + subscriberRef.current.uid + '] is unmounted and disposed');
|
|
65
|
+
subscriberRef.current.dispose();
|
|
66
|
+
};
|
|
67
|
+
}, []);
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
useLayoutEffect(function () { return function () { subscriberRef.current.dispose(); }; }, []);
|
|
71
|
+
}
|
|
72
|
+
var parentGlobalComponent = ObservableGlobalState.initializingJSXComponent;
|
|
73
|
+
ObservableGlobalState.initializingJSXComponent = subscriberRef.current;
|
|
74
|
+
//initializing begin
|
|
75
|
+
subscriberRef.current.renderCycle = ObservableGlobalState.renderCycle;
|
|
76
|
+
var renderedComponent = component(props);
|
|
77
|
+
subscriberRef.current.initialized = true;
|
|
78
|
+
//initializing end
|
|
79
|
+
ObservableGlobalState.initializingJSXComponent = parentGlobalComponent;
|
|
80
|
+
return renderedComponent;
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
var suid = (function () { var value = 0; return function () { return value++; }; })();
|
|
84
|
+
var JSXSubscriber = /** @class */ (function () {
|
|
85
|
+
function JSXSubscriber(forceRenderFunc) {
|
|
86
|
+
this.buildersSet = new Set();
|
|
87
|
+
this.unsubscribeColl = Array();
|
|
88
|
+
this.renderCycle = -1;
|
|
89
|
+
this.initialized = false;
|
|
90
|
+
this._isDisposed = false;
|
|
91
|
+
this.uid = suid();
|
|
92
|
+
this.forceRenderFunc = forceRenderFunc;
|
|
93
|
+
}
|
|
94
|
+
Object.defineProperty(JSXSubscriber.prototype, "isDisposed", {
|
|
95
|
+
get: function () {
|
|
96
|
+
return this._isDisposed;
|
|
97
|
+
},
|
|
98
|
+
enumerable: false,
|
|
99
|
+
configurable: true
|
|
100
|
+
});
|
|
101
|
+
JSXSubscriber.prototype.observe = function (b) {
|
|
102
|
+
var _this = this;
|
|
103
|
+
if (b.isComplete || this.buildersSet.has(b.suid))
|
|
104
|
+
return;
|
|
105
|
+
this.buildersSet.add(b.suid);
|
|
106
|
+
this.unsubscribeColl.push(b.pipe()
|
|
107
|
+
.onReceive(function () {
|
|
108
|
+
RenderQueue.self.add(_this);
|
|
109
|
+
})
|
|
110
|
+
.subscribe());
|
|
111
|
+
};
|
|
112
|
+
JSXSubscriber.prototype.observeFrom = function (f) {
|
|
113
|
+
var _this = this;
|
|
114
|
+
if (this.initialized)
|
|
115
|
+
return;
|
|
116
|
+
this.unsubscribeColl.push(f().pipe()
|
|
117
|
+
.skipFirst()
|
|
118
|
+
.onReceive(function () {
|
|
119
|
+
RenderQueue.self.add(_this);
|
|
120
|
+
})
|
|
121
|
+
.subscribe());
|
|
122
|
+
};
|
|
123
|
+
JSXSubscriber.prototype.dispose = function () {
|
|
124
|
+
this._isDisposed = true;
|
|
125
|
+
if (!__DEV__)
|
|
126
|
+
this.unsubscribeColl.forEach(function (f) { f(); });
|
|
127
|
+
};
|
|
128
|
+
JSXSubscriber.prototype.resurrect = function () {
|
|
129
|
+
this._isDisposed = false;
|
|
130
|
+
};
|
|
131
|
+
JSXSubscriber.prototype.render = function (renderCycle) {
|
|
132
|
+
if (this.isDisposed || this.renderCycle === renderCycle) {
|
|
133
|
+
return false;
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
this.renderCycle = renderCycle;
|
|
137
|
+
logInfo('----::forceRenderFunc');
|
|
138
|
+
this.forceRenderFunc(this.renderCycle);
|
|
139
|
+
return true;
|
|
140
|
+
}
|
|
141
|
+
};
|
|
142
|
+
JSXSubscriber.empty = new JSXSubscriber(function () { });
|
|
143
|
+
return JSXSubscriber;
|
|
144
|
+
}());
|
|
145
|
+
export { JSXSubscriber };
|
|
146
|
+
//--------------------------------------
|
|
147
|
+
// GlobalState
|
|
148
|
+
//--------------------------------------
|
|
149
|
+
var ObservableGlobalState = /** @class */ (function () {
|
|
150
|
+
function ObservableGlobalState() {
|
|
151
|
+
}
|
|
152
|
+
ObservableGlobalState.renderCycle = 0;
|
|
153
|
+
ObservableGlobalState.initializingJSXComponent = JSXSubscriber.empty;
|
|
154
|
+
ObservableGlobalState.debug = false;
|
|
155
|
+
return ObservableGlobalState;
|
|
156
|
+
}());
|
|
157
|
+
export { ObservableGlobalState };
|
|
158
|
+
//--------------------------------------
|
|
159
|
+
// RenderQueue
|
|
160
|
+
//--------------------------------------
|
|
161
|
+
export var RenderQueueStatus;
|
|
162
|
+
(function (RenderQueueStatus) {
|
|
163
|
+
RenderQueueStatus["IDLE"] = "IDLE";
|
|
164
|
+
RenderQueueStatus["PENDING"] = "PENDING";
|
|
165
|
+
RenderQueueStatus["RUNNING"] = "LOADING";
|
|
166
|
+
})(RenderQueueStatus || (RenderQueueStatus = {}));
|
|
167
|
+
var RenderQueue = /** @class */ (function () {
|
|
168
|
+
function RenderQueue() {
|
|
169
|
+
this.temp = Array();
|
|
170
|
+
this.queue = new Set();
|
|
171
|
+
this.status = RenderQueueStatus.IDLE;
|
|
172
|
+
this.INFINITE_LOOP_LIMIT = 20;
|
|
173
|
+
this.infiniteLoopDetected = false;
|
|
174
|
+
this.loopRenderings = 0;
|
|
175
|
+
}
|
|
176
|
+
RenderQueue.prototype.add = function (s) {
|
|
177
|
+
var _this = this;
|
|
178
|
+
if (this.infiniteLoopDetected)
|
|
179
|
+
return;
|
|
180
|
+
if (this.status === RenderQueueStatus.RUNNING) {
|
|
181
|
+
this.temp.push(s);
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
this.queue.add(s);
|
|
185
|
+
if (this.status === RenderQueueStatus.IDLE) {
|
|
186
|
+
this.status = RenderQueueStatus.PENDING;
|
|
187
|
+
setTimeout(function () {
|
|
188
|
+
_this.render();
|
|
189
|
+
}, 0);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
};
|
|
193
|
+
RenderQueue.prototype.render = function () {
|
|
194
|
+
var _this = this;
|
|
195
|
+
logInfo('RenderQueue:render: begin, cycle:', ObservableGlobalState.renderCycle);
|
|
196
|
+
this.status = RenderQueueStatus.RUNNING;
|
|
197
|
+
ObservableGlobalState.renderCycle++;
|
|
198
|
+
var renderedComponentsCount = 0;
|
|
199
|
+
Array.from(this.queue)
|
|
200
|
+
.sort(function (s1, s2) { return s1.uid - s2.uid; })
|
|
201
|
+
.forEach(function (subscriber) {
|
|
202
|
+
subscriber.render(ObservableGlobalState.renderCycle) && renderedComponentsCount++;
|
|
203
|
+
});
|
|
204
|
+
this.queue.clear();
|
|
205
|
+
this.status = RenderQueueStatus.IDLE;
|
|
206
|
+
if (this.temp.length > 0) {
|
|
207
|
+
this.loopRenderings++;
|
|
208
|
+
if (this.loopRenderings > 2) {
|
|
209
|
+
logWarn.apply(void 0, __spreadArray(__spreadArray(['Sending value from publisher while jsx-component is rendering may cause an infinite loop. Loop renderings:', this.loopRenderings,
|
|
210
|
+
'. Most active publishers: ['], this.temp.map(function (ob) { return ob.constructor.name; }), false), [']'], false));
|
|
211
|
+
}
|
|
212
|
+
if (this.loopRenderings < this.INFINITE_LOOP_LIMIT) {
|
|
213
|
+
this.temp.forEach(function (publisherUID) {
|
|
214
|
+
_this.add(publisherUID);
|
|
215
|
+
});
|
|
216
|
+
this.temp.length = 0;
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
this.infiniteLoopDetected = true;
|
|
220
|
+
logWarn('--Infinite Loop! The possible reason: An executed jsx-component X invoked new rendering of a jsx-component, ' +
|
|
221
|
+
'that caused mutation in publisher, that trigger again force render of X');
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
this.loopRenderings = 0;
|
|
226
|
+
}
|
|
227
|
+
logInfo('RenderQueue:render: end, renderedComponentsCount:', renderedComponentsCount);
|
|
228
|
+
};
|
|
229
|
+
RenderQueue.self = new RenderQueue();
|
|
230
|
+
return RenderQueue;
|
|
231
|
+
}());
|
|
232
|
+
//--------------------------------------
|
|
233
|
+
// logging
|
|
234
|
+
//--------------------------------------
|
|
235
|
+
var logInfo = function () {
|
|
236
|
+
var msg = [];
|
|
237
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
238
|
+
msg[_i] = arguments[_i];
|
|
239
|
+
}
|
|
240
|
+
if (ObservableGlobalState.debug)
|
|
241
|
+
console.log.apply(console, msg);
|
|
242
|
+
};
|
|
243
|
+
var logWarn = function () {
|
|
244
|
+
var msg = [];
|
|
245
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
246
|
+
msg[_i] = arguments[_i];
|
|
247
|
+
}
|
|
248
|
+
console.warn.apply(console, msg);
|
|
249
|
+
};
|