@celljs/rpc-core 3.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/LICENSE +21 -0
- package/README.md +1 -0
- package/cell.yml +0 -0
- package/lib/index.d.ts +4 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +20 -0
- package/lib/index.js.map +1 -0
- package/lib/package.spec.d.ts +1 -0
- package/lib/package.spec.d.ts.map +1 -0
- package/lib/package.spec.js +4 -0
- package/lib/package.spec.js.map +1 -0
- package/lib/rpc-multiplexer.d.ts +21 -0
- package/lib/rpc-multiplexer.d.ts.map +1 -0
- package/lib/rpc-multiplexer.js +55 -0
- package/lib/rpc-multiplexer.js.map +1 -0
- package/lib/rpc-protocol.d.ts +103 -0
- package/lib/rpc-protocol.d.ts.map +1 -0
- package/lib/rpc-protocol.js +73 -0
- package/lib/rpc-protocol.js.map +1 -0
- package/lib/rpc.d.ts +42 -0
- package/lib/rpc.d.ts.map +1 -0
- package/lib/rpc.js +287 -0
- package/lib/rpc.js.map +1 -0
- package/package.json +41 -0
- package/src/index.ts +3 -0
- package/src/package.spec.ts +4 -0
- package/src/rpc-multiplexer.ts +65 -0
- package/src/rpc-protocol.ts +137 -0
- package/src/rpc.ts +352 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2019 Cellbang
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# Cell - RPC Core Component
|
package/cell.yml
ADDED
|
File without changes
|
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,OAAO,CAAC"}
|
package/lib/index.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./rpc-multiplexer"), exports);
|
|
18
|
+
__exportStar(require("./rpc-protocol"), exports);
|
|
19
|
+
__exportStar(require("./rpc"), exports);
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oDAAkC;AAClC,iDAA+B;AAC/B,wCAAsB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=package.spec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package.spec.d.ts","sourceRoot":"","sources":["../src/package.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package.spec.js","sourceRoot":"","sources":["../src/package.spec.ts"],"names":[],"mappings":"AAAA,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAE9B,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;AACrD,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Event } from '@celljs/core/lib/common/utils/event';
|
|
2
|
+
import { Disposable } from '@celljs/core/lib/common/utils/disposable';
|
|
3
|
+
import { MessageConnection } from './rpc-protocol';
|
|
4
|
+
/**
|
|
5
|
+
* Sends/Receives multiple messages in one go:
|
|
6
|
+
* - multiple messages to be sent from one stack get sent in bulk at `process.nextTick`.
|
|
7
|
+
* - each incoming message is handled in a separate `process.nextTick`.
|
|
8
|
+
*/
|
|
9
|
+
export declare class RPCMultiplexer implements Disposable, MessageConnection {
|
|
10
|
+
private readonly connection;
|
|
11
|
+
private readonly sendAccumulatedBound;
|
|
12
|
+
private messagesToSend;
|
|
13
|
+
private readonly messageEmitter;
|
|
14
|
+
private readonly toDispose;
|
|
15
|
+
constructor(connection: MessageConnection);
|
|
16
|
+
dispose(): void;
|
|
17
|
+
get onMessage(): Event<string>;
|
|
18
|
+
private sendAccumulated;
|
|
19
|
+
send(msg: string): void;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=rpc-multiplexer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rpc-multiplexer.d.ts","sourceRoot":"","sources":["../src/rpc-multiplexer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAE5D,OAAO,EAAwB,UAAU,EAAE,MAAM,0CAA0C,CAAC;AAC5F,OAAO,EAAyB,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAE1E;;;;GAIG;AACH,qBAAa,cAAe,YAAW,UAAU,EAAE,iBAAiB;IAChE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoB;IAC/C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAa;IAElD,OAAO,CAAC,cAAc,CAAW;IAEjC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAyB;IACxD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA8B;gBAE5C,UAAU,EAAE,iBAAiB;IAsBzC,OAAO,IAAI,IAAI;IAIf,IAAI,SAAS,IAAI,KAAK,CAAC,MAAM,CAAC,CAE7B;IAED,OAAO,CAAC,eAAe;IAMhB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;CASjC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RPCMultiplexer = void 0;
|
|
4
|
+
const emitter_1 = require("@celljs/core/lib/common/utils/emitter");
|
|
5
|
+
const disposable_1 = require("@celljs/core/lib/common/utils/disposable");
|
|
6
|
+
const rpc_protocol_1 = require("./rpc-protocol");
|
|
7
|
+
/**
|
|
8
|
+
* Sends/Receives multiple messages in one go:
|
|
9
|
+
* - multiple messages to be sent from one stack get sent in bulk at `process.nextTick`.
|
|
10
|
+
* - each incoming message is handled in a separate `process.nextTick`.
|
|
11
|
+
*/
|
|
12
|
+
class RPCMultiplexer {
|
|
13
|
+
constructor(connection) {
|
|
14
|
+
this.messageEmitter = new emitter_1.Emitter();
|
|
15
|
+
this.toDispose = new disposable_1.DisposableCollection();
|
|
16
|
+
this.connection = connection;
|
|
17
|
+
this.sendAccumulatedBound = this.sendAccumulated.bind(this);
|
|
18
|
+
this.toDispose.push(disposable_1.Disposable.create(() => (this.messagesToSend = [])));
|
|
19
|
+
this.toDispose.push(this.connection.onMessage((msg) => {
|
|
20
|
+
try {
|
|
21
|
+
const messages = JSON.parse(msg);
|
|
22
|
+
for (const message of messages) {
|
|
23
|
+
this.messageEmitter.fire(message);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
catch (e) {
|
|
27
|
+
// NoOp
|
|
28
|
+
}
|
|
29
|
+
}));
|
|
30
|
+
this.toDispose.push(this.messageEmitter);
|
|
31
|
+
this.messagesToSend = [];
|
|
32
|
+
}
|
|
33
|
+
dispose() {
|
|
34
|
+
this.toDispose.dispose();
|
|
35
|
+
}
|
|
36
|
+
get onMessage() {
|
|
37
|
+
return this.messageEmitter.event;
|
|
38
|
+
}
|
|
39
|
+
sendAccumulated() {
|
|
40
|
+
const tmp = this.messagesToSend;
|
|
41
|
+
this.messagesToSend = [];
|
|
42
|
+
this.connection.send(JSON.stringify(tmp));
|
|
43
|
+
}
|
|
44
|
+
send(msg) {
|
|
45
|
+
if (this.toDispose.disposed) {
|
|
46
|
+
throw rpc_protocol_1.ConnectionClosedError.create();
|
|
47
|
+
}
|
|
48
|
+
if (this.messagesToSend.length === 0) {
|
|
49
|
+
setTimeout(this.sendAccumulatedBound, 0);
|
|
50
|
+
}
|
|
51
|
+
this.messagesToSend.push(msg);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
exports.RPCMultiplexer = RPCMultiplexer;
|
|
55
|
+
//# sourceMappingURL=rpc-multiplexer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rpc-multiplexer.js","sourceRoot":"","sources":["../src/rpc-multiplexer.ts"],"names":[],"mappings":";;;AACA,mEAAgE;AAChE,yEAA4F;AAC5F,iDAA0E;AAE1E;;;;GAIG;AACH,MAAa,cAAc;IASvB,YAAY,UAA6B;QAHxB,mBAAc,GAAG,IAAI,iBAAO,EAAU,CAAC;QACvC,cAAS,GAAG,IAAI,iCAAoB,EAAE,CAAC;QAGpD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE5D,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,uBAAU,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QACzE,IAAI,CAAC,SAAS,CAAC,IAAI,CACf,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,GAAW,EAAE,EAAE;YACtC,IAAI;gBACA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACjC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;oBAC5B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;iBACrC;aACJ;YAAC,OAAO,CAAC,EAAE;gBACR,OAAO;aACV;QACL,CAAC,CAAC,CACL,CAAC;QACF,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAEzC,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;IAC7B,CAAC;IAED,OAAO;QACH,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;IAED,IAAI,SAAS;QACT,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;IACrC,CAAC;IAEO,eAAe;QACnB,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC;QAChC,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9C,CAAC;IAEM,IAAI,CAAC,GAAW;QACnB,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;YACzB,MAAM,oCAAqB,CAAC,MAAM,EAAE,CAAC;SACxC;QACD,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;YAClC,UAAU,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC;SAC5C;QACD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC;CACJ;AAtDD,wCAsDC"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { Disposable } from '@celljs/core/lib/common/utils/disposable';
|
|
2
|
+
import { CustomError } from '@celljs/core/lib/common/error';
|
|
3
|
+
import { Event } from '@celljs/core/lib/common/utils/event';
|
|
4
|
+
export { CancellationTokenSource } from '@celljs/core/lib/common/utils/cancellation';
|
|
5
|
+
export declare class ProxyIdentifier<T> {
|
|
6
|
+
readonly isMain: boolean;
|
|
7
|
+
readonly id: string;
|
|
8
|
+
constructor(isMain: boolean, id: string | T);
|
|
9
|
+
}
|
|
10
|
+
export declare function createProxyIdentifier<T>(identifier: string): ProxyIdentifier<T>;
|
|
11
|
+
export interface MessageConnection {
|
|
12
|
+
send(msg: string): void;
|
|
13
|
+
onMessage: Event<string>;
|
|
14
|
+
}
|
|
15
|
+
export declare const RPC: unique symbol;
|
|
16
|
+
export interface RPC extends Disposable {
|
|
17
|
+
/**
|
|
18
|
+
* Returns a proxy to an object addressable/named in the iframe window or in the main window.
|
|
19
|
+
*/
|
|
20
|
+
getProxy<T>(proxyId: ProxyIdentifier<T>): T;
|
|
21
|
+
/**
|
|
22
|
+
* Returns a local to an object addressable/named in the iframe window or in the main window.
|
|
23
|
+
*/
|
|
24
|
+
getLocal<T>(proxyId: ProxyIdentifier<T>): T;
|
|
25
|
+
/**
|
|
26
|
+
* Register manually created instance.
|
|
27
|
+
*/
|
|
28
|
+
set<T, R extends T>(identifier: ProxyIdentifier<T>, instance: R): R;
|
|
29
|
+
}
|
|
30
|
+
export interface ConnectionClosedError extends CustomError {
|
|
31
|
+
code: 'RPC_PROTOCOL_CLOSED';
|
|
32
|
+
}
|
|
33
|
+
export declare namespace ConnectionClosedError {
|
|
34
|
+
function create(message?: string): ConnectionClosedError;
|
|
35
|
+
function is(error: any): error is ConnectionClosedError;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* These functions are responsible for correct transferring objects via rpc channel.
|
|
39
|
+
*
|
|
40
|
+
* To reach that some specific kind of objects is converted to json in some custom way
|
|
41
|
+
* and then, after receiving, revived to objects again,
|
|
42
|
+
* so there is feeling that object was transferred via rpc channel.
|
|
43
|
+
*
|
|
44
|
+
* To distinguish between regular and altered objects, field $type is added to altered ones.
|
|
45
|
+
* Also value of that field specifies kind of the object.
|
|
46
|
+
*/
|
|
47
|
+
export declare namespace ObjectsTransferrer {
|
|
48
|
+
function replacer(key: string | undefined, value: any): any;
|
|
49
|
+
function reviver(key: string | undefined, value: any): any;
|
|
50
|
+
}
|
|
51
|
+
export declare const enum MessageType {
|
|
52
|
+
Request = 1,
|
|
53
|
+
Reply = 2,
|
|
54
|
+
ReplyErr = 3,
|
|
55
|
+
Cancel = 4,
|
|
56
|
+
Terminate = 5,
|
|
57
|
+
Terminated = 6,
|
|
58
|
+
Open = 7,
|
|
59
|
+
Ready = 8
|
|
60
|
+
}
|
|
61
|
+
export declare class OpenMessage {
|
|
62
|
+
type: MessageType.Open;
|
|
63
|
+
id: string;
|
|
64
|
+
channalId: number;
|
|
65
|
+
}
|
|
66
|
+
export declare class ReadyMessage {
|
|
67
|
+
type: MessageType.Ready;
|
|
68
|
+
id: string;
|
|
69
|
+
channalId: number;
|
|
70
|
+
}
|
|
71
|
+
export declare class CancelMessage {
|
|
72
|
+
type: MessageType.Cancel;
|
|
73
|
+
id: string;
|
|
74
|
+
channalId: number;
|
|
75
|
+
}
|
|
76
|
+
export declare class RequestMessage {
|
|
77
|
+
type: MessageType.Request;
|
|
78
|
+
id: string;
|
|
79
|
+
channalId: number;
|
|
80
|
+
proxyId: string;
|
|
81
|
+
method: string;
|
|
82
|
+
args: any[];
|
|
83
|
+
}
|
|
84
|
+
export declare class ReplyMessage {
|
|
85
|
+
type: MessageType.Reply;
|
|
86
|
+
id: string;
|
|
87
|
+
channalId: number;
|
|
88
|
+
res: any;
|
|
89
|
+
}
|
|
90
|
+
export declare class ReplyErrMessage {
|
|
91
|
+
type: MessageType.ReplyErr;
|
|
92
|
+
id: string;
|
|
93
|
+
channalId: number;
|
|
94
|
+
err: SerializedError;
|
|
95
|
+
}
|
|
96
|
+
export declare type RPCMessage = RequestMessage | ReplyMessage | ReplyErrMessage | CancelMessage | OpenMessage | ReadyMessage;
|
|
97
|
+
export interface SerializedError {
|
|
98
|
+
readonly $isError: true;
|
|
99
|
+
readonly name: string;
|
|
100
|
+
readonly message: string;
|
|
101
|
+
readonly stack: string;
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=rpc-protocol.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rpc-protocol.d.ts","sourceRoot":"","sources":["../src/rpc-protocol.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ReplyErrMessage = exports.ReplyMessage = exports.RequestMessage = exports.CancelMessage = exports.ReadyMessage = exports.OpenMessage = exports.ObjectsTransferrer = exports.ConnectionClosedError = exports.RPC = exports.createProxyIdentifier = exports.ProxyIdentifier = exports.CancellationTokenSource = void 0;
|
|
4
|
+
var cancellation_1 = require("@celljs/core/lib/common/utils/cancellation");
|
|
5
|
+
Object.defineProperty(exports, "CancellationTokenSource", { enumerable: true, get: function () { return cancellation_1.CancellationTokenSource; } });
|
|
6
|
+
class ProxyIdentifier {
|
|
7
|
+
constructor(isMain, id) {
|
|
8
|
+
this.isMain = isMain;
|
|
9
|
+
// TODO this is nasty, rewrite this
|
|
10
|
+
this.id = id.toString();
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
exports.ProxyIdentifier = ProxyIdentifier;
|
|
14
|
+
function createProxyIdentifier(identifier) {
|
|
15
|
+
return new ProxyIdentifier(false, identifier);
|
|
16
|
+
}
|
|
17
|
+
exports.createProxyIdentifier = createProxyIdentifier;
|
|
18
|
+
exports.RPC = Symbol('RPC');
|
|
19
|
+
var ConnectionClosedError;
|
|
20
|
+
(function (ConnectionClosedError) {
|
|
21
|
+
const code = 'RPC_PROTOCOL_CLOSED';
|
|
22
|
+
function create(message = 'connection is closed') {
|
|
23
|
+
return Object.assign(new Error(message), { code });
|
|
24
|
+
}
|
|
25
|
+
ConnectionClosedError.create = create;
|
|
26
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
27
|
+
function is(error) {
|
|
28
|
+
return !!error && typeof error === 'object' && 'code' in error && error['code'] === code;
|
|
29
|
+
}
|
|
30
|
+
ConnectionClosedError.is = is;
|
|
31
|
+
})(ConnectionClosedError = exports.ConnectionClosedError || (exports.ConnectionClosedError = {}));
|
|
32
|
+
/**
|
|
33
|
+
* These functions are responsible for correct transferring objects via rpc channel.
|
|
34
|
+
*
|
|
35
|
+
* To reach that some specific kind of objects is converted to json in some custom way
|
|
36
|
+
* and then, after receiving, revived to objects again,
|
|
37
|
+
* so there is feeling that object was transferred via rpc channel.
|
|
38
|
+
*
|
|
39
|
+
* To distinguish between regular and altered objects, field $type is added to altered ones.
|
|
40
|
+
* Also value of that field specifies kind of the object.
|
|
41
|
+
*/
|
|
42
|
+
var ObjectsTransferrer;
|
|
43
|
+
(function (ObjectsTransferrer) {
|
|
44
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
45
|
+
function replacer(key, value) {
|
|
46
|
+
return value;
|
|
47
|
+
}
|
|
48
|
+
ObjectsTransferrer.replacer = replacer;
|
|
49
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
50
|
+
function reviver(key, value) {
|
|
51
|
+
return value;
|
|
52
|
+
}
|
|
53
|
+
ObjectsTransferrer.reviver = reviver;
|
|
54
|
+
})(ObjectsTransferrer = exports.ObjectsTransferrer || (exports.ObjectsTransferrer = {}));
|
|
55
|
+
class OpenMessage {
|
|
56
|
+
}
|
|
57
|
+
exports.OpenMessage = OpenMessage;
|
|
58
|
+
class ReadyMessage {
|
|
59
|
+
}
|
|
60
|
+
exports.ReadyMessage = ReadyMessage;
|
|
61
|
+
class CancelMessage {
|
|
62
|
+
}
|
|
63
|
+
exports.CancelMessage = CancelMessage;
|
|
64
|
+
class RequestMessage {
|
|
65
|
+
}
|
|
66
|
+
exports.RequestMessage = RequestMessage;
|
|
67
|
+
class ReplyMessage {
|
|
68
|
+
}
|
|
69
|
+
exports.ReplyMessage = ReplyMessage;
|
|
70
|
+
class ReplyErrMessage {
|
|
71
|
+
}
|
|
72
|
+
exports.ReplyErrMessage = ReplyErrMessage;
|
|
73
|
+
//# sourceMappingURL=rpc-protocol.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rpc-protocol.js","sourceRoot":"","sources":["../src/rpc-protocol.ts"],"names":[],"mappings":";;;AAIA,2EAAqF;AAA5E,uHAAA,uBAAuB,OAAA;AAEhC,MAAa,eAAe;IAExB,YAA4B,MAAe,EAAE,EAAc;QAA/B,WAAM,GAAN,MAAM,CAAS;QACvC,mCAAmC;QACnC,IAAI,CAAC,EAAE,GAAI,EAAU,CAAC,QAAQ,EAAE,CAAC;IACrC,CAAC;CACJ;AAND,0CAMC;AAED,SAAgB,qBAAqB,CAAI,UAAkB;IACvD,OAAO,IAAI,eAAe,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;AAClD,CAAC;AAFD,sDAEC;AAOY,QAAA,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AAqBjC,IAAiB,qBAAqB,CASrC;AATD,WAAiB,qBAAqB;IAClC,MAAM,IAAI,GAAkC,qBAAqB,CAAC;IAClE,SAAgB,MAAM,CAAC,UAAkB,sBAAsB;QAC3D,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC;IAFe,4BAAM,SAErB,CAAA;IACD,8DAA8D;IAC9D,SAAgB,EAAE,CAAC,KAAU;QACzB,OAAO,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC;IAC7F,CAAC;IAFe,wBAAE,KAEjB,CAAA;AACL,CAAC,EATgB,qBAAqB,GAArB,6BAAqB,KAArB,6BAAqB,QASrC;AAED;;;;;;;;;GASG;AACH,IAAiB,kBAAkB,CAUlC;AAVD,WAAiB,kBAAkB;IAC/B,8DAA8D;IAC9D,SAAgB,QAAQ,CAAC,GAAuB,EAAE,KAAU;QACxD,OAAO,KAAK,CAAC;IACjB,CAAC;IAFe,2BAAQ,WAEvB,CAAA;IAED,8DAA8D;IAC9D,SAAgB,OAAO,CAAC,GAAuB,EAAE,KAAU;QACvD,OAAO,KAAK,CAAC;IACjB,CAAC;IAFe,0BAAO,UAEtB,CAAA;AACL,CAAC,EAVgB,kBAAkB,GAAlB,0BAAkB,KAAlB,0BAAkB,QAUlC;AAaD,MAAa,WAAW;CAIvB;AAJD,kCAIC;AAED,MAAa,YAAY;CAIxB;AAJD,oCAIC;AAED,MAAa,aAAa;CAIzB;AAJD,sCAIC;AAED,MAAa,cAAc;CAO1B;AAPD,wCAOC;AAED,MAAa,YAAY;CAKxB;AALD,oCAKC;AAED,MAAa,eAAe;CAK3B;AALD,0CAKC"}
|
package/lib/rpc.d.ts
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { MessageConnection, ProxyIdentifier, RPC, SerializedError } from './rpc-protocol';
|
|
2
|
+
export declare class RPCImpl implements RPC {
|
|
3
|
+
private readonly locals;
|
|
4
|
+
private readonly proxies;
|
|
5
|
+
private lastMessageId;
|
|
6
|
+
private readonly cancellationTokenSources;
|
|
7
|
+
private readonly pendingRPCReplies;
|
|
8
|
+
private readonly multiplexer;
|
|
9
|
+
private readonly readyDeferred;
|
|
10
|
+
private replacer;
|
|
11
|
+
private reviver;
|
|
12
|
+
private readonly toDispose;
|
|
13
|
+
constructor(connection: MessageConnection, transformations?: {
|
|
14
|
+
replacer?: (key: string | undefined, value: any) => any;
|
|
15
|
+
reviver?: (key: string | undefined, value: any) => any;
|
|
16
|
+
});
|
|
17
|
+
protected connect(): Promise<void>;
|
|
18
|
+
private get isDisposed();
|
|
19
|
+
dispose(): void;
|
|
20
|
+
getProxy<T>(proxyId: ProxyIdentifier<T>): T;
|
|
21
|
+
getLocal<T>(proxyId: ProxyIdentifier<T>): T;
|
|
22
|
+
set<T, R extends T>(identifier: ProxyIdentifier<T>, instance: R): R;
|
|
23
|
+
private createProxy;
|
|
24
|
+
private remoteCall;
|
|
25
|
+
private receiveOneMessage;
|
|
26
|
+
private receiveOpen;
|
|
27
|
+
private receiveReady;
|
|
28
|
+
private receiveCancel;
|
|
29
|
+
private receiveRequest;
|
|
30
|
+
private receiveReply;
|
|
31
|
+
private receiveReplyErr;
|
|
32
|
+
private invokeHandler;
|
|
33
|
+
private doInvokeHandler;
|
|
34
|
+
private cancel;
|
|
35
|
+
private open;
|
|
36
|
+
private request;
|
|
37
|
+
private replyReady;
|
|
38
|
+
private replyOK;
|
|
39
|
+
private replyErr;
|
|
40
|
+
}
|
|
41
|
+
export declare function transformErrorForSerialization(error: Error): SerializedError;
|
|
42
|
+
//# sourceMappingURL=rpc.d.ts.map
|
package/lib/rpc.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rpc.d.ts","sourceRoot":"","sources":["../src/rpc.ts"],"names":[],"mappings":"AAKA,OAAO,EAAwC,iBAAiB,EAC5D,eAAe,EAAE,GAAG,EAA2E,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAiB3I,qBAAa,OAAQ,YAAW,GAAG;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0B;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0B;IAClD,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAA8C;IACvF,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAoC;IACtE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAiB;IAC7C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAwB;IAEtD,OAAO,CAAC,QAAQ,CAA+C;IAC/D,OAAO,CAAC,OAAO,CAA+C;IAE9D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAIxB;gBAGE,UAAU,EAAE,iBAAiB,EAC7B,eAAe,CAAC,EAAE;QACd,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,GAAG,KAAK,GAAG,CAAC;QACxD,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,GAAG,KAAK,GAAG,CAAC;KAC1D;cAmBW,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAcxC,OAAO,KAAK,UAAU,GAErB;IAED,OAAO,IAAI,IAAI;IAIf,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC;IAY3C,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC;IAO3C,GAAG,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC;IAYnE,OAAO,CAAC,WAAW;IAYnB,OAAO,CAAC,UAAU;IA2BlB,OAAO,CAAC,iBAAiB;IAkCzB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,cAAc;IA0BtB,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,eAAe;IAkBvB,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,eAAe;IAYvB,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,IAAI;IAIZ,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,OAAO;IAUf,OAAO,CAAC,QAAQ;CASnB;AAQD,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,KAAK,GAAG,eAAe,CAc5E"}
|