@onecx/accelerator 3.8.1 → 4.0.0
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/package.json +1 -1
- package/src/index.d.ts +1 -0
- package/src/index.js +1 -0
- package/src/index.js.map +1 -1
- package/src/lib/topic/syncable-topic.d.ts +22 -0
- package/src/lib/topic/syncable-topic.js +31 -0
- package/src/lib/topic/syncable-topic.js.map +1 -0
- package/src/lib/topic/topic.d.ts +8 -12
- package/src/lib/topic/topic.js +15 -11
- package/src/lib/topic/topic.js.map +1 -1
package/package.json
CHANGED
package/src/index.d.ts
CHANGED
package/src/index.js
CHANGED
package/src/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../libs/accelerator/src/index.ts"],"names":[],"mappings":";;;AAAA,4DAAiC"}
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../libs/accelerator/src/index.ts"],"names":[],"mappings":";;;AAAA,4DAAiC;AACjC,qEAA0C"}
|
@@ -0,0 +1,22 @@
|
|
1
|
+
import { Topic } from './topic';
|
2
|
+
/**
|
3
|
+
* This class allows sync access to the value of a Topic.
|
4
|
+
* If you use this as a super class, you have to make sure that
|
5
|
+
* in all cases when the value is accessed it is initialized.
|
6
|
+
* This means that you have to make sure that in all possible
|
7
|
+
* code paths reaching your sync access you made sure that it
|
8
|
+
* is initialized (in standalone and shell mode).
|
9
|
+
* Keep in mind that there can be multiple instances of the Topic
|
10
|
+
* so you cannot rely on the fact that the shell has already checked
|
11
|
+
* that it is initialized.
|
12
|
+
*/
|
13
|
+
export declare class SyncableTopic<T> extends Topic<T> {
|
14
|
+
constructor(name: string, version: number);
|
15
|
+
/**
|
16
|
+
* This function does not offer read after write consistency!
|
17
|
+
* This means you cannot call it directly after publish, because the new value will not be there yet!
|
18
|
+
* This function will return undefined until the isInitialized Promise is resolved.
|
19
|
+
* @returns the current value of the Topic in a synchronous way
|
20
|
+
*/
|
21
|
+
getValue(): T | undefined;
|
22
|
+
}
|
@@ -0,0 +1,31 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.SyncableTopic = void 0;
|
4
|
+
const topic_1 = require("./topic");
|
5
|
+
/**
|
6
|
+
* This class allows sync access to the value of a Topic.
|
7
|
+
* If you use this as a super class, you have to make sure that
|
8
|
+
* in all cases when the value is accessed it is initialized.
|
9
|
+
* This means that you have to make sure that in all possible
|
10
|
+
* code paths reaching your sync access you made sure that it
|
11
|
+
* is initialized (in standalone and shell mode).
|
12
|
+
* Keep in mind that there can be multiple instances of the Topic
|
13
|
+
* so you cannot rely on the fact that the shell has already checked
|
14
|
+
* that it is initialized.
|
15
|
+
*/
|
16
|
+
class SyncableTopic extends topic_1.Topic {
|
17
|
+
constructor(name, version) {
|
18
|
+
super(name, version);
|
19
|
+
}
|
20
|
+
/**
|
21
|
+
* This function does not offer read after write consistency!
|
22
|
+
* This means you cannot call it directly after publish, because the new value will not be there yet!
|
23
|
+
* This function will return undefined until the isInitialized Promise is resolved.
|
24
|
+
* @returns the current value of the Topic in a synchronous way
|
25
|
+
*/
|
26
|
+
getValue() {
|
27
|
+
return this.isInit ? this.data.value.data : undefined;
|
28
|
+
}
|
29
|
+
}
|
30
|
+
exports.SyncableTopic = SyncableTopic;
|
31
|
+
//# sourceMappingURL=syncable-topic.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"syncable-topic.js","sourceRoot":"","sources":["../../../../../../libs/accelerator/src/lib/topic/syncable-topic.ts"],"names":[],"mappings":";;;AAAA,mCAA+B;AAG/B;;;;;;;;;;GAUG;AACH,MAAa,aAAiB,SAAQ,aAAQ;IAC5C,YAAY,IAAY,EAAE,OAAe;QACvC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IACtB,CAAC;IAED;;;;;OAKG;IACH,QAAQ;QACN,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAuB,IAAI,CAAC,IAAI,CAAC,KAAM,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAA;IAC9E,CAAC;CACF;AAdD,sCAcC"}
|
package/src/lib/topic/topic.d.ts
CHANGED
@@ -1,22 +1,18 @@
|
|
1
|
-
import { Observable, Observer, OperatorFunction, Subscribable, Subscription, UnaryFunction } from 'rxjs';
|
1
|
+
import { BehaviorSubject, Observable, Observer, OperatorFunction, Subscribable, Subscription, UnaryFunction } from 'rxjs';
|
2
|
+
import { TopicDataMessage } from './topic-data-message';
|
2
3
|
export declare class Topic<T> implements Subscribable<T> {
|
3
4
|
private name;
|
4
5
|
private version;
|
5
|
-
|
6
|
-
|
7
|
-
|
6
|
+
protected isInitializedPromise: Promise<void>;
|
7
|
+
protected data: BehaviorSubject<TopicDataMessage<T> | undefined>;
|
8
|
+
protected isInit: boolean;
|
8
9
|
private resolveInitPromise;
|
9
10
|
private eventListener;
|
11
|
+
private publishPromiseResolver;
|
10
12
|
constructor(name: string, version: number);
|
13
|
+
get isInitialized(): Promise<void>;
|
11
14
|
asObservable(): Observable<T>;
|
12
15
|
subscribe(observerOrNext?: Partial<Observer<T>> | ((value: T) => void), error?: (error: any) => void, complete?: () => void): Subscription;
|
13
|
-
/**
|
14
|
-
* This function does not offer read after write consistency!
|
15
|
-
* This means you cannot call it directly after publish, because the new value will not be there yet!
|
16
|
-
* This function will return undefined unti the isInitialized promise is resolved.
|
17
|
-
* @returns the current value of the topic in a synchronous way
|
18
|
-
*/
|
19
|
-
getValue(): T | undefined;
|
20
16
|
pipe(): Observable<T>;
|
21
17
|
pipe<A>(op1: UnaryFunction<Observable<T>, A>): A;
|
22
18
|
pipe<A, B>(op1: UnaryFunction<Observable<T>, A>, op2: UnaryFunction<A, B>): B;
|
@@ -29,7 +25,7 @@ export declare class Topic<T> implements Subscribable<T> {
|
|
29
25
|
pipe<A, B, C, D, E, F, G, H, I>(op1: UnaryFunction<Observable<T>, A>, op2: UnaryFunction<A, B>, op3: UnaryFunction<B, C>, op4: UnaryFunction<C, D>, op5: UnaryFunction<D, E>, op6: UnaryFunction<E, F>, op7: UnaryFunction<F, G>, op8: UnaryFunction<G, H>, op9: UnaryFunction<H, I>): I;
|
30
26
|
pipe<A, B, C, D, E, F, G, H, I>(op1: UnaryFunction<Observable<T>, A>, op2: UnaryFunction<A, B>, op3: UnaryFunction<B, C>, op4: UnaryFunction<C, D>, op5: UnaryFunction<D, E>, op6: UnaryFunction<E, F>, op7: UnaryFunction<F, G>, op8: UnaryFunction<G, H>, op9: UnaryFunction<H, I>, ...operations: OperatorFunction<any, any>[]): Observable<unknown>;
|
31
27
|
pipe<A, B, C, D, E, F, G, H, I>(op1: UnaryFunction<Observable<T>, A>, op2: UnaryFunction<A, B>, op3: UnaryFunction<B, C>, op4: UnaryFunction<C, D>, op5: UnaryFunction<D, E>, op6: UnaryFunction<E, F>, op7: UnaryFunction<F, G>, op8: UnaryFunction<G, H>, op9: UnaryFunction<H, I>, ...operations: UnaryFunction<any, any>[]): unknown;
|
32
|
-
publish(value: T): void
|
28
|
+
publish(value: T): Promise<void>;
|
33
29
|
destroy(): void;
|
34
30
|
private onMessage;
|
35
31
|
}
|
package/src/lib/topic/topic.js
CHANGED
@@ -8,42 +8,41 @@ const topic_message_1 = require("./topic-message");
|
|
8
8
|
class Topic {
|
9
9
|
name;
|
10
10
|
version;
|
11
|
-
|
11
|
+
isInitializedPromise;
|
12
12
|
data = new rxjs_1.BehaviorSubject(undefined);
|
13
13
|
isInit = false;
|
14
14
|
resolveInitPromise;
|
15
15
|
eventListener = (m) => this.onMessage(m);
|
16
|
+
publishPromiseResolver = {};
|
16
17
|
constructor(name, version) {
|
17
18
|
this.name = name;
|
18
19
|
this.version = version;
|
19
|
-
this.
|
20
|
+
this.isInitializedPromise = new Promise((resolve) => {
|
20
21
|
this.resolveInitPromise = resolve;
|
21
22
|
});
|
22
23
|
window.addEventListener('message', this.eventListener);
|
23
24
|
const message = new topic_message_1.TopicMessage("TopicGet" /* TopicMessageType.TopicGet */, this.name, this.version);
|
24
25
|
window.postMessage(message, '*');
|
25
26
|
}
|
27
|
+
get isInitialized() {
|
28
|
+
return this.isInitializedPromise;
|
29
|
+
}
|
26
30
|
asObservable() {
|
27
31
|
return this.data.asObservable().pipe((0, operators_1.filter)(() => this.isInit), (0, operators_1.map)((d) => d.data));
|
28
32
|
}
|
29
33
|
subscribe(observerOrNext, error, complete) {
|
30
34
|
return this.asObservable().subscribe(observerOrNext, error, complete);
|
31
35
|
}
|
32
|
-
/**
|
33
|
-
* This function does not offer read after write consistency!
|
34
|
-
* This means you cannot call it directly after publish, because the new value will not be there yet!
|
35
|
-
* This function will return undefined unti the isInitialized promise is resolved.
|
36
|
-
* @returns the current value of the topic in a synchronous way
|
37
|
-
*/
|
38
|
-
getValue() {
|
39
|
-
return this.isInit ? this.data.value.data : undefined;
|
40
|
-
}
|
41
36
|
pipe(...operations) {
|
42
37
|
return this.asObservable().pipe(...operations);
|
43
38
|
}
|
44
39
|
publish(value) {
|
45
40
|
const message = new topic_data_message_1.TopicDataMessage("TopicNext" /* TopicMessageType.TopicNext */, this.name, this.version, value);
|
41
|
+
const promise = new Promise((resolve) => {
|
42
|
+
this.publishPromiseResolver[message.timestamp] = resolve;
|
43
|
+
});
|
46
44
|
window.postMessage(message, '*');
|
45
|
+
return promise;
|
47
46
|
}
|
48
47
|
destroy() {
|
49
48
|
window.removeEventListener('message', this.eventListener, true);
|
@@ -57,6 +56,11 @@ class Topic {
|
|
57
56
|
this.isInit = true;
|
58
57
|
this.data.next(m.data);
|
59
58
|
this.resolveInitPromise();
|
59
|
+
const publishPromiseResolver = this.publishPromiseResolver[m.data.timestamp];
|
60
|
+
if (publishPromiseResolver) {
|
61
|
+
publishPromiseResolver();
|
62
|
+
delete this.publishPromiseResolver[m.data.timestamp];
|
63
|
+
}
|
60
64
|
}
|
61
65
|
break;
|
62
66
|
case "TopicGet" /* TopicMessageType.TopicGet */:
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"topic.js","sourceRoot":"","sources":["../../../../../../libs/accelerator/src/lib/topic/topic.ts"],"names":[],"mappings":";;;AAAA,8CAA4C;AAC5C,+
|
1
|
+
{"version":3,"file":"topic.js","sourceRoot":"","sources":["../../../../../../libs/accelerator/src/lib/topic/topic.ts"],"names":[],"mappings":"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"}
|