@univerjs/rpc 0.21.1 → 0.22.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/README.md +30 -18
- package/lib/cjs/index.js +37 -71
- package/lib/es/index.js +37 -71
- package/lib/index.js +37 -71
- package/lib/umd/index.js +1 -1
- package/package.json +12 -7
package/README.md
CHANGED
|
@@ -1,31 +1,43 @@
|
|
|
1
1
|
# @univerjs/rpc
|
|
2
2
|
|
|
3
|
+
[](https://npmjs.com/package/@univerjs/rpc)
|
|
4
|
+
[](https://npmjs.com/package/@univerjs/rpc)
|
|
5
|
+
[](https://npmjs.com/package/@univerjs/rpc)
|
|
6
|
+
|
|
7
|
+
`@univerjs/rpc` provides a browser-friendly RPC layer for communicating between the main thread and workers or other message-based runtimes.
|
|
8
|
+
|
|
3
9
|
## Package Overview
|
|
4
10
|
|
|
5
|
-
| Package
|
|
6
|
-
| --- | --- |
|
|
7
|
-
| `@univerjs/rpc` | `UniverRpc` |
|
|
11
|
+
| Package | UMD global | CSS | Locales | Facade entry |
|
|
12
|
+
| --- | --- | :---: | :---: | :---: |
|
|
13
|
+
| `@univerjs/rpc` | `UniverRpc` | No | No | No |
|
|
8
14
|
|
|
9
|
-
##
|
|
15
|
+
## Installation
|
|
10
16
|
|
|
11
|
-
|
|
17
|
+
```sh
|
|
18
|
+
pnpm add @univerjs/rpc
|
|
19
|
+
# or
|
|
20
|
+
npm install @univerjs/rpc
|
|
21
|
+
```
|
|
12
22
|
|
|
13
|
-
|
|
23
|
+
Keep all `@univerjs/*` packages on the same version.
|
|
14
24
|
|
|
15
25
|
## Usage
|
|
16
26
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
```shell
|
|
20
|
-
# Using npm
|
|
21
|
-
npm install @univerjs/rpc
|
|
27
|
+
```ts
|
|
28
|
+
import { UniverRPCMainThreadPlugin } from '@univerjs/rpc';
|
|
22
29
|
|
|
23
|
-
|
|
24
|
-
pnpm add @univerjs/rpc
|
|
30
|
+
univer.registerPlugin(UniverRPCMainThreadPlugin);
|
|
25
31
|
```
|
|
26
32
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
33
|
+
Exported plugin classes:
|
|
34
|
+
|
|
35
|
+
- `UniverRPCMainThreadPlugin`
|
|
36
|
+
- `UniverRPCWorkerThreadPlugin`
|
|
37
|
+
|
|
38
|
+
## Resources
|
|
39
|
+
|
|
40
|
+
- [Documentation](https://docs.univer.ai)
|
|
41
|
+
- [NPM package](https://npmjs.com/package/@univerjs/rpc)
|
|
42
|
+
- [GitHub repository](https://github.com/dream-num/univer)
|
|
43
|
+
|
package/lib/cjs/index.js
CHANGED
|
@@ -27,7 +27,7 @@ const configSymbolWorkerThread = Symbol(PLUGIN_CONFIG_KEY_WORKER_THREAD);
|
|
|
27
27
|
const defaultPluginWorkerThreadConfig = {};
|
|
28
28
|
|
|
29
29
|
//#endregion
|
|
30
|
-
//#region \0@oxc-project+runtime@0.
|
|
30
|
+
//#region \0@oxc-project+runtime@0.129.0/helpers/decorateParam.js
|
|
31
31
|
function __decorateParam(paramIndex, decorator) {
|
|
32
32
|
return function(target, key) {
|
|
33
33
|
decorator(target, key, paramIndex);
|
|
@@ -35,7 +35,7 @@ function __decorateParam(paramIndex, decorator) {
|
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
//#endregion
|
|
38
|
-
//#region \0@oxc-project+runtime@0.
|
|
38
|
+
//#region \0@oxc-project+runtime@0.129.0/helpers/decorate.js
|
|
39
39
|
function __decorate(decorators, target, key, desc) {
|
|
40
40
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
41
41
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
@@ -122,7 +122,7 @@ WebWorkerRemoteInstanceService = __decorate([
|
|
|
122
122
|
], WebWorkerRemoteInstanceService);
|
|
123
123
|
|
|
124
124
|
//#endregion
|
|
125
|
-
//#region \0@oxc-project+runtime@0.
|
|
125
|
+
//#region \0@oxc-project+runtime@0.129.0/helpers/typeof.js
|
|
126
126
|
function _typeof(o) {
|
|
127
127
|
"@babel/helpers - typeof";
|
|
128
128
|
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o) {
|
|
@@ -133,7 +133,7 @@ function _typeof(o) {
|
|
|
133
133
|
}
|
|
134
134
|
|
|
135
135
|
//#endregion
|
|
136
|
-
//#region \0@oxc-project+runtime@0.
|
|
136
|
+
//#region \0@oxc-project+runtime@0.129.0/helpers/toPrimitive.js
|
|
137
137
|
function toPrimitive(t, r) {
|
|
138
138
|
if ("object" != _typeof(t) || !t) return t;
|
|
139
139
|
var e = t[Symbol.toPrimitive];
|
|
@@ -146,14 +146,14 @@ function toPrimitive(t, r) {
|
|
|
146
146
|
}
|
|
147
147
|
|
|
148
148
|
//#endregion
|
|
149
|
-
//#region \0@oxc-project+runtime@0.
|
|
149
|
+
//#region \0@oxc-project+runtime@0.129.0/helpers/toPropertyKey.js
|
|
150
150
|
function toPropertyKey(t) {
|
|
151
151
|
var i = toPrimitive(t, "string");
|
|
152
152
|
return "symbol" == _typeof(i) ? i : i + "";
|
|
153
153
|
}
|
|
154
154
|
|
|
155
155
|
//#endregion
|
|
156
|
-
//#region \0@oxc-project+runtime@0.
|
|
156
|
+
//#region \0@oxc-project+runtime@0.129.0/helpers/defineProperty.js
|
|
157
157
|
function _defineProperty(e, r, t) {
|
|
158
158
|
return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
|
|
159
159
|
value: t,
|
|
@@ -216,39 +216,6 @@ function toModule(channel) {
|
|
|
216
216
|
function propertyIsEventSource(name) {
|
|
217
217
|
return name.endsWith("$");
|
|
218
218
|
}
|
|
219
|
-
var RequestType = /* @__PURE__ */ function(RequestType) {
|
|
220
|
-
/**
|
|
221
|
-
* In Univer, we cannot make sure that when IPCServer constructs, the process (or thread)
|
|
222
|
-
* where the corresponding IPCClient residents has bootstrapped and been ready to recieve messages.
|
|
223
|
-
* This may result in the IPCClient hanging there, waiting for the `INITIALIZE` message that it has
|
|
224
|
-
* already missed. So the client should send a REQUEST_INITIALIZATION in case of that.
|
|
225
|
-
*
|
|
226
|
-
* Later, we may want a more sophisticated RPC system where the server can serve more than
|
|
227
|
-
* one clients, and this event may be removed.
|
|
228
|
-
*/
|
|
229
|
-
RequestType[RequestType["REQUEST_INITIALIZATION"] = 50] = "REQUEST_INITIALIZATION";
|
|
230
|
-
/** A simple remote calling wrapper in a Promise. */
|
|
231
|
-
RequestType[RequestType["CALL"] = 100] = "CALL";
|
|
232
|
-
/** Subscribe to a remote Observable. */
|
|
233
|
-
RequestType[RequestType["SUBSCRIBE"] = 101] = "SUBSCRIBE";
|
|
234
|
-
/** Cancel subscription to that remove Observable. */
|
|
235
|
-
RequestType[RequestType["UNSUBSCRIBE"] = 102] = "UNSUBSCRIBE";
|
|
236
|
-
return RequestType;
|
|
237
|
-
}(RequestType || {});
|
|
238
|
-
var ResponseType = /* @__PURE__ */ function(ResponseType) {
|
|
239
|
-
/**
|
|
240
|
-
* When underlying protocol is established. The server should send the
|
|
241
|
-
* client an `INITIALIZE` response to indicate that the server is up
|
|
242
|
-
* and ready to provide services.
|
|
243
|
-
*/
|
|
244
|
-
ResponseType[ResponseType["INITIALIZE"] = 0] = "INITIALIZE";
|
|
245
|
-
ResponseType[ResponseType["CALL_SUCCESS"] = 201] = "CALL_SUCCESS";
|
|
246
|
-
ResponseType[ResponseType["CALL_FAILURE"] = 202] = "CALL_FAILURE";
|
|
247
|
-
ResponseType[ResponseType["SUBSCRIBE_NEXT"] = 300] = "SUBSCRIBE_NEXT";
|
|
248
|
-
ResponseType[ResponseType["SUBSCRIBE_ERROR"] = 301] = "SUBSCRIBE_ERROR";
|
|
249
|
-
ResponseType[ResponseType["SUBSCRIBE_COMPLETE"] = 302] = "SUBSCRIBE_COMPLETE";
|
|
250
|
-
return ResponseType;
|
|
251
|
-
}(ResponseType || {});
|
|
252
219
|
/**
|
|
253
220
|
* This method provides implementation for `IChannel` and is responsible for
|
|
254
221
|
* transforming a local calling to a RPC calling.
|
|
@@ -260,7 +227,7 @@ var ChannelClient = class extends _univerjs_core.RxDisposable {
|
|
|
260
227
|
_defineProperty(this, "_initialized", new rxjs.BehaviorSubject(false));
|
|
261
228
|
_defineProperty(this, "_lastRequestCounter", 0);
|
|
262
229
|
_defineProperty(this, "_pendingRequests", /* @__PURE__ */ new Map());
|
|
263
|
-
this._protocol.send({ type:
|
|
230
|
+
this._protocol.send({ type: 50 });
|
|
264
231
|
this._protocol.onMessage.pipe((0, rxjs_operators.takeUntil)(this.dispose$)).subscribe((message) => this._onMessage(message));
|
|
265
232
|
}
|
|
266
233
|
dispose() {
|
|
@@ -289,7 +256,7 @@ var ChannelClient = class extends _univerjs_core.RxDisposable {
|
|
|
289
256
|
const sequence = ++this._lastRequestCounter;
|
|
290
257
|
const request = {
|
|
291
258
|
seq: sequence,
|
|
292
|
-
type:
|
|
259
|
+
type: 100,
|
|
293
260
|
channelName,
|
|
294
261
|
method,
|
|
295
262
|
args
|
|
@@ -298,11 +265,11 @@ var ChannelClient = class extends _univerjs_core.RxDisposable {
|
|
|
298
265
|
return new Promise((resolve, reject) => {
|
|
299
266
|
this._pendingRequests.set(sequence, { handle(response) {
|
|
300
267
|
switch (response.type) {
|
|
301
|
-
case
|
|
268
|
+
case 201:
|
|
302
269
|
pendingRequests.delete(sequence);
|
|
303
270
|
resolve(response.data);
|
|
304
271
|
break;
|
|
305
|
-
case
|
|
272
|
+
case 202:
|
|
306
273
|
pendingRequests.delete(sequence);
|
|
307
274
|
reject(response.data);
|
|
308
275
|
break;
|
|
@@ -317,23 +284,22 @@ var ChannelClient = class extends _univerjs_core.RxDisposable {
|
|
|
317
284
|
let sequence = -1;
|
|
318
285
|
const doSubscribe = () => {
|
|
319
286
|
sequence = ++this._lastRequestCounter;
|
|
320
|
-
const type = RequestType.SUBSCRIBE;
|
|
321
287
|
const request = {
|
|
322
288
|
seq: sequence,
|
|
323
|
-
type,
|
|
289
|
+
type: 101,
|
|
324
290
|
channelName,
|
|
325
291
|
method,
|
|
326
292
|
args
|
|
327
293
|
};
|
|
328
294
|
this._pendingRequests.set(sequence, { handle(response) {
|
|
329
295
|
switch (response.type) {
|
|
330
|
-
case
|
|
296
|
+
case 300:
|
|
331
297
|
subscriber.next(response.data);
|
|
332
298
|
break;
|
|
333
|
-
case
|
|
299
|
+
case 301:
|
|
334
300
|
subscriber.error(response.data);
|
|
335
301
|
break;
|
|
336
|
-
case
|
|
302
|
+
case 302:
|
|
337
303
|
subscriber.complete();
|
|
338
304
|
break;
|
|
339
305
|
default: throw new Error("[ChannelClient]: unknown response type!");
|
|
@@ -346,7 +312,7 @@ var ChannelClient = class extends _univerjs_core.RxDisposable {
|
|
|
346
312
|
return () => {
|
|
347
313
|
if (sequence === -1) return;
|
|
348
314
|
const cancelSubscriptionRequest = {
|
|
349
|
-
type:
|
|
315
|
+
type: 102,
|
|
350
316
|
seq: sequence,
|
|
351
317
|
channelName,
|
|
352
318
|
method
|
|
@@ -361,18 +327,18 @@ var ChannelClient = class extends _univerjs_core.RxDisposable {
|
|
|
361
327
|
_onMessage(response) {
|
|
362
328
|
const { type: responseType, seq } = response;
|
|
363
329
|
switch (responseType) {
|
|
364
|
-
case
|
|
330
|
+
case 0:
|
|
365
331
|
this._initialized.next(true);
|
|
366
332
|
break;
|
|
367
|
-
case
|
|
368
|
-
case
|
|
369
|
-
case
|
|
370
|
-
case
|
|
371
|
-
case
|
|
333
|
+
case 201:
|
|
334
|
+
case 202:
|
|
335
|
+
case 300:
|
|
336
|
+
case 302:
|
|
337
|
+
case 301: {
|
|
372
338
|
var _pendingRequests$get;
|
|
373
339
|
const { _pendingRequests } = this;
|
|
374
340
|
(_pendingRequests$get = _pendingRequests.get(seq)) === null || _pendingRequests$get === void 0 || _pendingRequests$get.handle(response);
|
|
375
|
-
responseType !==
|
|
341
|
+
responseType !== 300 && _pendingRequests.delete(seq);
|
|
376
342
|
break;
|
|
377
343
|
}
|
|
378
344
|
}
|
|
@@ -397,16 +363,16 @@ var ChannelServer = class extends _univerjs_core.RxDisposable {
|
|
|
397
363
|
}
|
|
398
364
|
_onRequest(request) {
|
|
399
365
|
switch (request.type) {
|
|
400
|
-
case
|
|
366
|
+
case 50:
|
|
401
367
|
this._sendInitialize();
|
|
402
368
|
break;
|
|
403
|
-
case
|
|
369
|
+
case 100:
|
|
404
370
|
this._onMethodCall(request);
|
|
405
371
|
break;
|
|
406
|
-
case
|
|
372
|
+
case 101:
|
|
407
373
|
this._onSubscribe(request);
|
|
408
374
|
break;
|
|
409
|
-
case
|
|
375
|
+
case 102:
|
|
410
376
|
this._onUnsubscribe(request);
|
|
411
377
|
break;
|
|
412
378
|
default: break;
|
|
@@ -415,7 +381,7 @@ var ChannelServer = class extends _univerjs_core.RxDisposable {
|
|
|
415
381
|
_sendInitialize() {
|
|
416
382
|
this._sendResponse({
|
|
417
383
|
seq: -1,
|
|
418
|
-
type:
|
|
384
|
+
type: 0
|
|
419
385
|
});
|
|
420
386
|
}
|
|
421
387
|
_onMethodCall(request) {
|
|
@@ -431,18 +397,18 @@ var ChannelServer = class extends _univerjs_core.RxDisposable {
|
|
|
431
397
|
promise.then((data) => {
|
|
432
398
|
this._sendResponse({
|
|
433
399
|
seq: request.seq,
|
|
434
|
-
type:
|
|
400
|
+
type: 201,
|
|
435
401
|
data
|
|
436
402
|
});
|
|
437
403
|
}).catch((err) => {
|
|
438
404
|
if (err instanceof Error) this._sendResponse({
|
|
439
405
|
seq: request.seq,
|
|
440
|
-
type:
|
|
406
|
+
type: 202,
|
|
441
407
|
data: err.message
|
|
442
408
|
});
|
|
443
409
|
else this._sendResponse({
|
|
444
410
|
seq: request.seq,
|
|
445
|
-
type:
|
|
411
|
+
type: 202,
|
|
446
412
|
data: String(err)
|
|
447
413
|
});
|
|
448
414
|
});
|
|
@@ -456,25 +422,25 @@ var ChannelServer = class extends _univerjs_core.RxDisposable {
|
|
|
456
422
|
next: (data) => {
|
|
457
423
|
this._sendResponse({
|
|
458
424
|
seq,
|
|
459
|
-
type:
|
|
425
|
+
type: 300,
|
|
460
426
|
data
|
|
461
427
|
});
|
|
462
428
|
},
|
|
463
429
|
error: (err) => {
|
|
464
430
|
this._sendResponse({
|
|
465
431
|
seq,
|
|
466
|
-
type:
|
|
432
|
+
type: 301,
|
|
467
433
|
data: err.message
|
|
468
434
|
});
|
|
469
435
|
this._sendResponse({
|
|
470
436
|
seq,
|
|
471
|
-
type:
|
|
437
|
+
type: 302
|
|
472
438
|
});
|
|
473
439
|
},
|
|
474
440
|
complete: () => {
|
|
475
441
|
this._sendResponse({
|
|
476
442
|
seq,
|
|
477
|
-
type:
|
|
443
|
+
type: 302
|
|
478
444
|
});
|
|
479
445
|
}
|
|
480
446
|
});
|
|
@@ -482,12 +448,12 @@ var ChannelServer = class extends _univerjs_core.RxDisposable {
|
|
|
482
448
|
} catch (err) {
|
|
483
449
|
if (err instanceof Error) this._sendResponse({
|
|
484
450
|
seq: request.seq,
|
|
485
|
-
type:
|
|
451
|
+
type: 301,
|
|
486
452
|
data: err.message
|
|
487
453
|
});
|
|
488
454
|
else this._sendResponse({
|
|
489
455
|
seq: request.seq,
|
|
490
|
-
type:
|
|
456
|
+
type: 301,
|
|
491
457
|
data: String(err)
|
|
492
458
|
});
|
|
493
459
|
}
|
|
@@ -624,7 +590,7 @@ DataSyncReplicaController = __decorate([
|
|
|
624
590
|
//#endregion
|
|
625
591
|
//#region package.json
|
|
626
592
|
var name = "@univerjs/rpc";
|
|
627
|
-
var version = "0.
|
|
593
|
+
var version = "0.22.0";
|
|
628
594
|
|
|
629
595
|
//#endregion
|
|
630
596
|
//#region src/services/rpc/implementations/web-worker-rpc.service.ts
|
package/lib/es/index.js
CHANGED
|
@@ -26,7 +26,7 @@ const configSymbolWorkerThread = Symbol(PLUGIN_CONFIG_KEY_WORKER_THREAD);
|
|
|
26
26
|
const defaultPluginWorkerThreadConfig = {};
|
|
27
27
|
|
|
28
28
|
//#endregion
|
|
29
|
-
//#region \0@oxc-project+runtime@0.
|
|
29
|
+
//#region \0@oxc-project+runtime@0.129.0/helpers/decorateParam.js
|
|
30
30
|
function __decorateParam(paramIndex, decorator) {
|
|
31
31
|
return function(target, key) {
|
|
32
32
|
decorator(target, key, paramIndex);
|
|
@@ -34,7 +34,7 @@ function __decorateParam(paramIndex, decorator) {
|
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
//#endregion
|
|
37
|
-
//#region \0@oxc-project+runtime@0.
|
|
37
|
+
//#region \0@oxc-project+runtime@0.129.0/helpers/decorate.js
|
|
38
38
|
function __decorate(decorators, target, key, desc) {
|
|
39
39
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
40
40
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
@@ -121,7 +121,7 @@ WebWorkerRemoteInstanceService = __decorate([
|
|
|
121
121
|
], WebWorkerRemoteInstanceService);
|
|
122
122
|
|
|
123
123
|
//#endregion
|
|
124
|
-
//#region \0@oxc-project+runtime@0.
|
|
124
|
+
//#region \0@oxc-project+runtime@0.129.0/helpers/typeof.js
|
|
125
125
|
function _typeof(o) {
|
|
126
126
|
"@babel/helpers - typeof";
|
|
127
127
|
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o) {
|
|
@@ -132,7 +132,7 @@ function _typeof(o) {
|
|
|
132
132
|
}
|
|
133
133
|
|
|
134
134
|
//#endregion
|
|
135
|
-
//#region \0@oxc-project+runtime@0.
|
|
135
|
+
//#region \0@oxc-project+runtime@0.129.0/helpers/toPrimitive.js
|
|
136
136
|
function toPrimitive(t, r) {
|
|
137
137
|
if ("object" != _typeof(t) || !t) return t;
|
|
138
138
|
var e = t[Symbol.toPrimitive];
|
|
@@ -145,14 +145,14 @@ function toPrimitive(t, r) {
|
|
|
145
145
|
}
|
|
146
146
|
|
|
147
147
|
//#endregion
|
|
148
|
-
//#region \0@oxc-project+runtime@0.
|
|
148
|
+
//#region \0@oxc-project+runtime@0.129.0/helpers/toPropertyKey.js
|
|
149
149
|
function toPropertyKey(t) {
|
|
150
150
|
var i = toPrimitive(t, "string");
|
|
151
151
|
return "symbol" == _typeof(i) ? i : i + "";
|
|
152
152
|
}
|
|
153
153
|
|
|
154
154
|
//#endregion
|
|
155
|
-
//#region \0@oxc-project+runtime@0.
|
|
155
|
+
//#region \0@oxc-project+runtime@0.129.0/helpers/defineProperty.js
|
|
156
156
|
function _defineProperty(e, r, t) {
|
|
157
157
|
return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
|
|
158
158
|
value: t,
|
|
@@ -215,39 +215,6 @@ function toModule(channel) {
|
|
|
215
215
|
function propertyIsEventSource(name) {
|
|
216
216
|
return name.endsWith("$");
|
|
217
217
|
}
|
|
218
|
-
var RequestType = /* @__PURE__ */ function(RequestType) {
|
|
219
|
-
/**
|
|
220
|
-
* In Univer, we cannot make sure that when IPCServer constructs, the process (or thread)
|
|
221
|
-
* where the corresponding IPCClient residents has bootstrapped and been ready to recieve messages.
|
|
222
|
-
* This may result in the IPCClient hanging there, waiting for the `INITIALIZE` message that it has
|
|
223
|
-
* already missed. So the client should send a REQUEST_INITIALIZATION in case of that.
|
|
224
|
-
*
|
|
225
|
-
* Later, we may want a more sophisticated RPC system where the server can serve more than
|
|
226
|
-
* one clients, and this event may be removed.
|
|
227
|
-
*/
|
|
228
|
-
RequestType[RequestType["REQUEST_INITIALIZATION"] = 50] = "REQUEST_INITIALIZATION";
|
|
229
|
-
/** A simple remote calling wrapper in a Promise. */
|
|
230
|
-
RequestType[RequestType["CALL"] = 100] = "CALL";
|
|
231
|
-
/** Subscribe to a remote Observable. */
|
|
232
|
-
RequestType[RequestType["SUBSCRIBE"] = 101] = "SUBSCRIBE";
|
|
233
|
-
/** Cancel subscription to that remove Observable. */
|
|
234
|
-
RequestType[RequestType["UNSUBSCRIBE"] = 102] = "UNSUBSCRIBE";
|
|
235
|
-
return RequestType;
|
|
236
|
-
}(RequestType || {});
|
|
237
|
-
var ResponseType = /* @__PURE__ */ function(ResponseType) {
|
|
238
|
-
/**
|
|
239
|
-
* When underlying protocol is established. The server should send the
|
|
240
|
-
* client an `INITIALIZE` response to indicate that the server is up
|
|
241
|
-
* and ready to provide services.
|
|
242
|
-
*/
|
|
243
|
-
ResponseType[ResponseType["INITIALIZE"] = 0] = "INITIALIZE";
|
|
244
|
-
ResponseType[ResponseType["CALL_SUCCESS"] = 201] = "CALL_SUCCESS";
|
|
245
|
-
ResponseType[ResponseType["CALL_FAILURE"] = 202] = "CALL_FAILURE";
|
|
246
|
-
ResponseType[ResponseType["SUBSCRIBE_NEXT"] = 300] = "SUBSCRIBE_NEXT";
|
|
247
|
-
ResponseType[ResponseType["SUBSCRIBE_ERROR"] = 301] = "SUBSCRIBE_ERROR";
|
|
248
|
-
ResponseType[ResponseType["SUBSCRIBE_COMPLETE"] = 302] = "SUBSCRIBE_COMPLETE";
|
|
249
|
-
return ResponseType;
|
|
250
|
-
}(ResponseType || {});
|
|
251
218
|
/**
|
|
252
219
|
* This method provides implementation for `IChannel` and is responsible for
|
|
253
220
|
* transforming a local calling to a RPC calling.
|
|
@@ -259,7 +226,7 @@ var ChannelClient = class extends RxDisposable {
|
|
|
259
226
|
_defineProperty(this, "_initialized", new BehaviorSubject(false));
|
|
260
227
|
_defineProperty(this, "_lastRequestCounter", 0);
|
|
261
228
|
_defineProperty(this, "_pendingRequests", /* @__PURE__ */ new Map());
|
|
262
|
-
this._protocol.send({ type:
|
|
229
|
+
this._protocol.send({ type: 50 });
|
|
263
230
|
this._protocol.onMessage.pipe(takeUntil(this.dispose$)).subscribe((message) => this._onMessage(message));
|
|
264
231
|
}
|
|
265
232
|
dispose() {
|
|
@@ -288,7 +255,7 @@ var ChannelClient = class extends RxDisposable {
|
|
|
288
255
|
const sequence = ++this._lastRequestCounter;
|
|
289
256
|
const request = {
|
|
290
257
|
seq: sequence,
|
|
291
|
-
type:
|
|
258
|
+
type: 100,
|
|
292
259
|
channelName,
|
|
293
260
|
method,
|
|
294
261
|
args
|
|
@@ -297,11 +264,11 @@ var ChannelClient = class extends RxDisposable {
|
|
|
297
264
|
return new Promise((resolve, reject) => {
|
|
298
265
|
this._pendingRequests.set(sequence, { handle(response) {
|
|
299
266
|
switch (response.type) {
|
|
300
|
-
case
|
|
267
|
+
case 201:
|
|
301
268
|
pendingRequests.delete(sequence);
|
|
302
269
|
resolve(response.data);
|
|
303
270
|
break;
|
|
304
|
-
case
|
|
271
|
+
case 202:
|
|
305
272
|
pendingRequests.delete(sequence);
|
|
306
273
|
reject(response.data);
|
|
307
274
|
break;
|
|
@@ -316,23 +283,22 @@ var ChannelClient = class extends RxDisposable {
|
|
|
316
283
|
let sequence = -1;
|
|
317
284
|
const doSubscribe = () => {
|
|
318
285
|
sequence = ++this._lastRequestCounter;
|
|
319
|
-
const type = RequestType.SUBSCRIBE;
|
|
320
286
|
const request = {
|
|
321
287
|
seq: sequence,
|
|
322
|
-
type,
|
|
288
|
+
type: 101,
|
|
323
289
|
channelName,
|
|
324
290
|
method,
|
|
325
291
|
args
|
|
326
292
|
};
|
|
327
293
|
this._pendingRequests.set(sequence, { handle(response) {
|
|
328
294
|
switch (response.type) {
|
|
329
|
-
case
|
|
295
|
+
case 300:
|
|
330
296
|
subscriber.next(response.data);
|
|
331
297
|
break;
|
|
332
|
-
case
|
|
298
|
+
case 301:
|
|
333
299
|
subscriber.error(response.data);
|
|
334
300
|
break;
|
|
335
|
-
case
|
|
301
|
+
case 302:
|
|
336
302
|
subscriber.complete();
|
|
337
303
|
break;
|
|
338
304
|
default: throw new Error("[ChannelClient]: unknown response type!");
|
|
@@ -345,7 +311,7 @@ var ChannelClient = class extends RxDisposable {
|
|
|
345
311
|
return () => {
|
|
346
312
|
if (sequence === -1) return;
|
|
347
313
|
const cancelSubscriptionRequest = {
|
|
348
|
-
type:
|
|
314
|
+
type: 102,
|
|
349
315
|
seq: sequence,
|
|
350
316
|
channelName,
|
|
351
317
|
method
|
|
@@ -360,18 +326,18 @@ var ChannelClient = class extends RxDisposable {
|
|
|
360
326
|
_onMessage(response) {
|
|
361
327
|
const { type: responseType, seq } = response;
|
|
362
328
|
switch (responseType) {
|
|
363
|
-
case
|
|
329
|
+
case 0:
|
|
364
330
|
this._initialized.next(true);
|
|
365
331
|
break;
|
|
366
|
-
case
|
|
367
|
-
case
|
|
368
|
-
case
|
|
369
|
-
case
|
|
370
|
-
case
|
|
332
|
+
case 201:
|
|
333
|
+
case 202:
|
|
334
|
+
case 300:
|
|
335
|
+
case 302:
|
|
336
|
+
case 301: {
|
|
371
337
|
var _pendingRequests$get;
|
|
372
338
|
const { _pendingRequests } = this;
|
|
373
339
|
(_pendingRequests$get = _pendingRequests.get(seq)) === null || _pendingRequests$get === void 0 || _pendingRequests$get.handle(response);
|
|
374
|
-
responseType !==
|
|
340
|
+
responseType !== 300 && _pendingRequests.delete(seq);
|
|
375
341
|
break;
|
|
376
342
|
}
|
|
377
343
|
}
|
|
@@ -396,16 +362,16 @@ var ChannelServer = class extends RxDisposable {
|
|
|
396
362
|
}
|
|
397
363
|
_onRequest(request) {
|
|
398
364
|
switch (request.type) {
|
|
399
|
-
case
|
|
365
|
+
case 50:
|
|
400
366
|
this._sendInitialize();
|
|
401
367
|
break;
|
|
402
|
-
case
|
|
368
|
+
case 100:
|
|
403
369
|
this._onMethodCall(request);
|
|
404
370
|
break;
|
|
405
|
-
case
|
|
371
|
+
case 101:
|
|
406
372
|
this._onSubscribe(request);
|
|
407
373
|
break;
|
|
408
|
-
case
|
|
374
|
+
case 102:
|
|
409
375
|
this._onUnsubscribe(request);
|
|
410
376
|
break;
|
|
411
377
|
default: break;
|
|
@@ -414,7 +380,7 @@ var ChannelServer = class extends RxDisposable {
|
|
|
414
380
|
_sendInitialize() {
|
|
415
381
|
this._sendResponse({
|
|
416
382
|
seq: -1,
|
|
417
|
-
type:
|
|
383
|
+
type: 0
|
|
418
384
|
});
|
|
419
385
|
}
|
|
420
386
|
_onMethodCall(request) {
|
|
@@ -430,18 +396,18 @@ var ChannelServer = class extends RxDisposable {
|
|
|
430
396
|
promise.then((data) => {
|
|
431
397
|
this._sendResponse({
|
|
432
398
|
seq: request.seq,
|
|
433
|
-
type:
|
|
399
|
+
type: 201,
|
|
434
400
|
data
|
|
435
401
|
});
|
|
436
402
|
}).catch((err) => {
|
|
437
403
|
if (err instanceof Error) this._sendResponse({
|
|
438
404
|
seq: request.seq,
|
|
439
|
-
type:
|
|
405
|
+
type: 202,
|
|
440
406
|
data: err.message
|
|
441
407
|
});
|
|
442
408
|
else this._sendResponse({
|
|
443
409
|
seq: request.seq,
|
|
444
|
-
type:
|
|
410
|
+
type: 202,
|
|
445
411
|
data: String(err)
|
|
446
412
|
});
|
|
447
413
|
});
|
|
@@ -455,25 +421,25 @@ var ChannelServer = class extends RxDisposable {
|
|
|
455
421
|
next: (data) => {
|
|
456
422
|
this._sendResponse({
|
|
457
423
|
seq,
|
|
458
|
-
type:
|
|
424
|
+
type: 300,
|
|
459
425
|
data
|
|
460
426
|
});
|
|
461
427
|
},
|
|
462
428
|
error: (err) => {
|
|
463
429
|
this._sendResponse({
|
|
464
430
|
seq,
|
|
465
|
-
type:
|
|
431
|
+
type: 301,
|
|
466
432
|
data: err.message
|
|
467
433
|
});
|
|
468
434
|
this._sendResponse({
|
|
469
435
|
seq,
|
|
470
|
-
type:
|
|
436
|
+
type: 302
|
|
471
437
|
});
|
|
472
438
|
},
|
|
473
439
|
complete: () => {
|
|
474
440
|
this._sendResponse({
|
|
475
441
|
seq,
|
|
476
|
-
type:
|
|
442
|
+
type: 302
|
|
477
443
|
});
|
|
478
444
|
}
|
|
479
445
|
});
|
|
@@ -481,12 +447,12 @@ var ChannelServer = class extends RxDisposable {
|
|
|
481
447
|
} catch (err) {
|
|
482
448
|
if (err instanceof Error) this._sendResponse({
|
|
483
449
|
seq: request.seq,
|
|
484
|
-
type:
|
|
450
|
+
type: 301,
|
|
485
451
|
data: err.message
|
|
486
452
|
});
|
|
487
453
|
else this._sendResponse({
|
|
488
454
|
seq: request.seq,
|
|
489
|
-
type:
|
|
455
|
+
type: 301,
|
|
490
456
|
data: String(err)
|
|
491
457
|
});
|
|
492
458
|
}
|
|
@@ -623,7 +589,7 @@ DataSyncReplicaController = __decorate([
|
|
|
623
589
|
//#endregion
|
|
624
590
|
//#region package.json
|
|
625
591
|
var name = "@univerjs/rpc";
|
|
626
|
-
var version = "0.
|
|
592
|
+
var version = "0.22.0";
|
|
627
593
|
|
|
628
594
|
//#endregion
|
|
629
595
|
//#region src/services/rpc/implementations/web-worker-rpc.service.ts
|
package/lib/index.js
CHANGED
|
@@ -26,7 +26,7 @@ const configSymbolWorkerThread = Symbol(PLUGIN_CONFIG_KEY_WORKER_THREAD);
|
|
|
26
26
|
const defaultPluginWorkerThreadConfig = {};
|
|
27
27
|
|
|
28
28
|
//#endregion
|
|
29
|
-
//#region \0@oxc-project+runtime@0.
|
|
29
|
+
//#region \0@oxc-project+runtime@0.129.0/helpers/decorateParam.js
|
|
30
30
|
function __decorateParam(paramIndex, decorator) {
|
|
31
31
|
return function(target, key) {
|
|
32
32
|
decorator(target, key, paramIndex);
|
|
@@ -34,7 +34,7 @@ function __decorateParam(paramIndex, decorator) {
|
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
//#endregion
|
|
37
|
-
//#region \0@oxc-project+runtime@0.
|
|
37
|
+
//#region \0@oxc-project+runtime@0.129.0/helpers/decorate.js
|
|
38
38
|
function __decorate(decorators, target, key, desc) {
|
|
39
39
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
40
40
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
@@ -121,7 +121,7 @@ WebWorkerRemoteInstanceService = __decorate([
|
|
|
121
121
|
], WebWorkerRemoteInstanceService);
|
|
122
122
|
|
|
123
123
|
//#endregion
|
|
124
|
-
//#region \0@oxc-project+runtime@0.
|
|
124
|
+
//#region \0@oxc-project+runtime@0.129.0/helpers/typeof.js
|
|
125
125
|
function _typeof(o) {
|
|
126
126
|
"@babel/helpers - typeof";
|
|
127
127
|
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o) {
|
|
@@ -132,7 +132,7 @@ function _typeof(o) {
|
|
|
132
132
|
}
|
|
133
133
|
|
|
134
134
|
//#endregion
|
|
135
|
-
//#region \0@oxc-project+runtime@0.
|
|
135
|
+
//#region \0@oxc-project+runtime@0.129.0/helpers/toPrimitive.js
|
|
136
136
|
function toPrimitive(t, r) {
|
|
137
137
|
if ("object" != _typeof(t) || !t) return t;
|
|
138
138
|
var e = t[Symbol.toPrimitive];
|
|
@@ -145,14 +145,14 @@ function toPrimitive(t, r) {
|
|
|
145
145
|
}
|
|
146
146
|
|
|
147
147
|
//#endregion
|
|
148
|
-
//#region \0@oxc-project+runtime@0.
|
|
148
|
+
//#region \0@oxc-project+runtime@0.129.0/helpers/toPropertyKey.js
|
|
149
149
|
function toPropertyKey(t) {
|
|
150
150
|
var i = toPrimitive(t, "string");
|
|
151
151
|
return "symbol" == _typeof(i) ? i : i + "";
|
|
152
152
|
}
|
|
153
153
|
|
|
154
154
|
//#endregion
|
|
155
|
-
//#region \0@oxc-project+runtime@0.
|
|
155
|
+
//#region \0@oxc-project+runtime@0.129.0/helpers/defineProperty.js
|
|
156
156
|
function _defineProperty(e, r, t) {
|
|
157
157
|
return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
|
|
158
158
|
value: t,
|
|
@@ -215,39 +215,6 @@ function toModule(channel) {
|
|
|
215
215
|
function propertyIsEventSource(name) {
|
|
216
216
|
return name.endsWith("$");
|
|
217
217
|
}
|
|
218
|
-
var RequestType = /* @__PURE__ */ function(RequestType) {
|
|
219
|
-
/**
|
|
220
|
-
* In Univer, we cannot make sure that when IPCServer constructs, the process (or thread)
|
|
221
|
-
* where the corresponding IPCClient residents has bootstrapped and been ready to recieve messages.
|
|
222
|
-
* This may result in the IPCClient hanging there, waiting for the `INITIALIZE` message that it has
|
|
223
|
-
* already missed. So the client should send a REQUEST_INITIALIZATION in case of that.
|
|
224
|
-
*
|
|
225
|
-
* Later, we may want a more sophisticated RPC system where the server can serve more than
|
|
226
|
-
* one clients, and this event may be removed.
|
|
227
|
-
*/
|
|
228
|
-
RequestType[RequestType["REQUEST_INITIALIZATION"] = 50] = "REQUEST_INITIALIZATION";
|
|
229
|
-
/** A simple remote calling wrapper in a Promise. */
|
|
230
|
-
RequestType[RequestType["CALL"] = 100] = "CALL";
|
|
231
|
-
/** Subscribe to a remote Observable. */
|
|
232
|
-
RequestType[RequestType["SUBSCRIBE"] = 101] = "SUBSCRIBE";
|
|
233
|
-
/** Cancel subscription to that remove Observable. */
|
|
234
|
-
RequestType[RequestType["UNSUBSCRIBE"] = 102] = "UNSUBSCRIBE";
|
|
235
|
-
return RequestType;
|
|
236
|
-
}(RequestType || {});
|
|
237
|
-
var ResponseType = /* @__PURE__ */ function(ResponseType) {
|
|
238
|
-
/**
|
|
239
|
-
* When underlying protocol is established. The server should send the
|
|
240
|
-
* client an `INITIALIZE` response to indicate that the server is up
|
|
241
|
-
* and ready to provide services.
|
|
242
|
-
*/
|
|
243
|
-
ResponseType[ResponseType["INITIALIZE"] = 0] = "INITIALIZE";
|
|
244
|
-
ResponseType[ResponseType["CALL_SUCCESS"] = 201] = "CALL_SUCCESS";
|
|
245
|
-
ResponseType[ResponseType["CALL_FAILURE"] = 202] = "CALL_FAILURE";
|
|
246
|
-
ResponseType[ResponseType["SUBSCRIBE_NEXT"] = 300] = "SUBSCRIBE_NEXT";
|
|
247
|
-
ResponseType[ResponseType["SUBSCRIBE_ERROR"] = 301] = "SUBSCRIBE_ERROR";
|
|
248
|
-
ResponseType[ResponseType["SUBSCRIBE_COMPLETE"] = 302] = "SUBSCRIBE_COMPLETE";
|
|
249
|
-
return ResponseType;
|
|
250
|
-
}(ResponseType || {});
|
|
251
218
|
/**
|
|
252
219
|
* This method provides implementation for `IChannel` and is responsible for
|
|
253
220
|
* transforming a local calling to a RPC calling.
|
|
@@ -259,7 +226,7 @@ var ChannelClient = class extends RxDisposable {
|
|
|
259
226
|
_defineProperty(this, "_initialized", new BehaviorSubject(false));
|
|
260
227
|
_defineProperty(this, "_lastRequestCounter", 0);
|
|
261
228
|
_defineProperty(this, "_pendingRequests", /* @__PURE__ */ new Map());
|
|
262
|
-
this._protocol.send({ type:
|
|
229
|
+
this._protocol.send({ type: 50 });
|
|
263
230
|
this._protocol.onMessage.pipe(takeUntil(this.dispose$)).subscribe((message) => this._onMessage(message));
|
|
264
231
|
}
|
|
265
232
|
dispose() {
|
|
@@ -288,7 +255,7 @@ var ChannelClient = class extends RxDisposable {
|
|
|
288
255
|
const sequence = ++this._lastRequestCounter;
|
|
289
256
|
const request = {
|
|
290
257
|
seq: sequence,
|
|
291
|
-
type:
|
|
258
|
+
type: 100,
|
|
292
259
|
channelName,
|
|
293
260
|
method,
|
|
294
261
|
args
|
|
@@ -297,11 +264,11 @@ var ChannelClient = class extends RxDisposable {
|
|
|
297
264
|
return new Promise((resolve, reject) => {
|
|
298
265
|
this._pendingRequests.set(sequence, { handle(response) {
|
|
299
266
|
switch (response.type) {
|
|
300
|
-
case
|
|
267
|
+
case 201:
|
|
301
268
|
pendingRequests.delete(sequence);
|
|
302
269
|
resolve(response.data);
|
|
303
270
|
break;
|
|
304
|
-
case
|
|
271
|
+
case 202:
|
|
305
272
|
pendingRequests.delete(sequence);
|
|
306
273
|
reject(response.data);
|
|
307
274
|
break;
|
|
@@ -316,23 +283,22 @@ var ChannelClient = class extends RxDisposable {
|
|
|
316
283
|
let sequence = -1;
|
|
317
284
|
const doSubscribe = () => {
|
|
318
285
|
sequence = ++this._lastRequestCounter;
|
|
319
|
-
const type = RequestType.SUBSCRIBE;
|
|
320
286
|
const request = {
|
|
321
287
|
seq: sequence,
|
|
322
|
-
type,
|
|
288
|
+
type: 101,
|
|
323
289
|
channelName,
|
|
324
290
|
method,
|
|
325
291
|
args
|
|
326
292
|
};
|
|
327
293
|
this._pendingRequests.set(sequence, { handle(response) {
|
|
328
294
|
switch (response.type) {
|
|
329
|
-
case
|
|
295
|
+
case 300:
|
|
330
296
|
subscriber.next(response.data);
|
|
331
297
|
break;
|
|
332
|
-
case
|
|
298
|
+
case 301:
|
|
333
299
|
subscriber.error(response.data);
|
|
334
300
|
break;
|
|
335
|
-
case
|
|
301
|
+
case 302:
|
|
336
302
|
subscriber.complete();
|
|
337
303
|
break;
|
|
338
304
|
default: throw new Error("[ChannelClient]: unknown response type!");
|
|
@@ -345,7 +311,7 @@ var ChannelClient = class extends RxDisposable {
|
|
|
345
311
|
return () => {
|
|
346
312
|
if (sequence === -1) return;
|
|
347
313
|
const cancelSubscriptionRequest = {
|
|
348
|
-
type:
|
|
314
|
+
type: 102,
|
|
349
315
|
seq: sequence,
|
|
350
316
|
channelName,
|
|
351
317
|
method
|
|
@@ -360,18 +326,18 @@ var ChannelClient = class extends RxDisposable {
|
|
|
360
326
|
_onMessage(response) {
|
|
361
327
|
const { type: responseType, seq } = response;
|
|
362
328
|
switch (responseType) {
|
|
363
|
-
case
|
|
329
|
+
case 0:
|
|
364
330
|
this._initialized.next(true);
|
|
365
331
|
break;
|
|
366
|
-
case
|
|
367
|
-
case
|
|
368
|
-
case
|
|
369
|
-
case
|
|
370
|
-
case
|
|
332
|
+
case 201:
|
|
333
|
+
case 202:
|
|
334
|
+
case 300:
|
|
335
|
+
case 302:
|
|
336
|
+
case 301: {
|
|
371
337
|
var _pendingRequests$get;
|
|
372
338
|
const { _pendingRequests } = this;
|
|
373
339
|
(_pendingRequests$get = _pendingRequests.get(seq)) === null || _pendingRequests$get === void 0 || _pendingRequests$get.handle(response);
|
|
374
|
-
responseType !==
|
|
340
|
+
responseType !== 300 && _pendingRequests.delete(seq);
|
|
375
341
|
break;
|
|
376
342
|
}
|
|
377
343
|
}
|
|
@@ -396,16 +362,16 @@ var ChannelServer = class extends RxDisposable {
|
|
|
396
362
|
}
|
|
397
363
|
_onRequest(request) {
|
|
398
364
|
switch (request.type) {
|
|
399
|
-
case
|
|
365
|
+
case 50:
|
|
400
366
|
this._sendInitialize();
|
|
401
367
|
break;
|
|
402
|
-
case
|
|
368
|
+
case 100:
|
|
403
369
|
this._onMethodCall(request);
|
|
404
370
|
break;
|
|
405
|
-
case
|
|
371
|
+
case 101:
|
|
406
372
|
this._onSubscribe(request);
|
|
407
373
|
break;
|
|
408
|
-
case
|
|
374
|
+
case 102:
|
|
409
375
|
this._onUnsubscribe(request);
|
|
410
376
|
break;
|
|
411
377
|
default: break;
|
|
@@ -414,7 +380,7 @@ var ChannelServer = class extends RxDisposable {
|
|
|
414
380
|
_sendInitialize() {
|
|
415
381
|
this._sendResponse({
|
|
416
382
|
seq: -1,
|
|
417
|
-
type:
|
|
383
|
+
type: 0
|
|
418
384
|
});
|
|
419
385
|
}
|
|
420
386
|
_onMethodCall(request) {
|
|
@@ -430,18 +396,18 @@ var ChannelServer = class extends RxDisposable {
|
|
|
430
396
|
promise.then((data) => {
|
|
431
397
|
this._sendResponse({
|
|
432
398
|
seq: request.seq,
|
|
433
|
-
type:
|
|
399
|
+
type: 201,
|
|
434
400
|
data
|
|
435
401
|
});
|
|
436
402
|
}).catch((err) => {
|
|
437
403
|
if (err instanceof Error) this._sendResponse({
|
|
438
404
|
seq: request.seq,
|
|
439
|
-
type:
|
|
405
|
+
type: 202,
|
|
440
406
|
data: err.message
|
|
441
407
|
});
|
|
442
408
|
else this._sendResponse({
|
|
443
409
|
seq: request.seq,
|
|
444
|
-
type:
|
|
410
|
+
type: 202,
|
|
445
411
|
data: String(err)
|
|
446
412
|
});
|
|
447
413
|
});
|
|
@@ -455,25 +421,25 @@ var ChannelServer = class extends RxDisposable {
|
|
|
455
421
|
next: (data) => {
|
|
456
422
|
this._sendResponse({
|
|
457
423
|
seq,
|
|
458
|
-
type:
|
|
424
|
+
type: 300,
|
|
459
425
|
data
|
|
460
426
|
});
|
|
461
427
|
},
|
|
462
428
|
error: (err) => {
|
|
463
429
|
this._sendResponse({
|
|
464
430
|
seq,
|
|
465
|
-
type:
|
|
431
|
+
type: 301,
|
|
466
432
|
data: err.message
|
|
467
433
|
});
|
|
468
434
|
this._sendResponse({
|
|
469
435
|
seq,
|
|
470
|
-
type:
|
|
436
|
+
type: 302
|
|
471
437
|
});
|
|
472
438
|
},
|
|
473
439
|
complete: () => {
|
|
474
440
|
this._sendResponse({
|
|
475
441
|
seq,
|
|
476
|
-
type:
|
|
442
|
+
type: 302
|
|
477
443
|
});
|
|
478
444
|
}
|
|
479
445
|
});
|
|
@@ -481,12 +447,12 @@ var ChannelServer = class extends RxDisposable {
|
|
|
481
447
|
} catch (err) {
|
|
482
448
|
if (err instanceof Error) this._sendResponse({
|
|
483
449
|
seq: request.seq,
|
|
484
|
-
type:
|
|
450
|
+
type: 301,
|
|
485
451
|
data: err.message
|
|
486
452
|
});
|
|
487
453
|
else this._sendResponse({
|
|
488
454
|
seq: request.seq,
|
|
489
|
-
type:
|
|
455
|
+
type: 301,
|
|
490
456
|
data: String(err)
|
|
491
457
|
});
|
|
492
458
|
}
|
|
@@ -623,7 +589,7 @@ DataSyncReplicaController = __decorate([
|
|
|
623
589
|
//#endregion
|
|
624
590
|
//#region package.json
|
|
625
591
|
var name = "@univerjs/rpc";
|
|
626
|
-
var version = "0.
|
|
592
|
+
var version = "0.22.0";
|
|
627
593
|
|
|
628
594
|
//#endregion
|
|
629
595
|
//#region src/services/rpc/implementations/web-worker-rpc.service.ts
|
package/lib/umd/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require(`@univerjs/core`),require(`rxjs/operators`),require(`rxjs`)):typeof define==`function`&&define.amd?define([`exports`,`@univerjs/core`,`rxjs/operators`,`rxjs`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.UniverRpc={},e.UniverCore,e.rxjs.operators,e.rxjs))})(this,function(e,t,n,r){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});let i=`rpc.main-thread.config`;Symbol(i);let a={},o=`rpc.worker-thread.config`;Symbol(o);let s={};function c(e,t){return function(n,r){t(n,r,e)}}function l(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a}let u=`rpc.remote-sync.service`,d=(0,t.createIdentifier)(u),f=class{constructor(e){this._commandService=e}async syncMutation(e,t){let{fromCollab:n,...r}=t||{};return this._commandService.syncExecuteCommand(e.mutationInfo.id,e.mutationInfo.params,{...r,onlyLocal:!0,fromSync:!0})}};f=l([c(0,t.ICommandService)],f);let p=`univer.remote-instance-service`,m=(0,t.createIdentifier)(p),h=class{constructor(e,t,n){this._univerInstanceService=e,this._commandService=t,this._logService=n}whenReady(){return Promise.resolve(!0)}async syncMutation(e,t){return this._applyMutation(e.mutationInfo,t)}async createInstance(e){this._logService.debug(`[WebWorkerRemoteInstanceService]: Creating instance with id ${e.unitID}`);let{type:n,snapshot:r}=e;try{switch(n){case t.UniverInstanceType.UNIVER_SHEET:return this._univerInstanceService.createUnit(t.UniverInstanceType.UNIVER_SHEET,r),!0;default:throw Error(`[WebWorkerRemoteInstanceService]: cannot create replica for document type: ${n}.`)}}catch(e){throw e instanceof Error?e:TypeError(`${e}`)}}async disposeInstance(e){return this._logService.debug(`[WebWorkerRemoteInstanceService]: Disposing instance with id ${e.unitID}`),this._univerInstanceService.disposeUnit(e.unitID)}_applyMutation(e,t){let{id:n,params:r}=e,{fromCollab:i,...a}=t||{};return this._commandService.syncExecuteCommand(n,r,{...a,onlyLocal:!0,fromSync:!0})}};h=l([c(0,t.IUniverInstanceService),c(1,t.ICommandService),c(2,t.ILogService)],h);function g(e){"@babel/helpers - typeof";return g=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},g(e)}function _(e,t){if(g(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(g(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function v(e){var t=_(e,`string`);return g(t)==`symbol`?t:t+``}function y(e,t,n){return(t=v(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function b(e){let t=e;return new class{call(e,n){let r=t[e];if(typeof r==`function`){let e=n?r.apply(t,n):r.call(t);return e instanceof Promise||(e=Promise.resolve(e)),e}throw Error(`[RPC]: method not found for ${e}!`)}subscribe(e,n){let i=t[e];if(typeof i==`function`){let e=n?i.apply(t,n):i.call(t);return(0,r.isObservable)(e)?e:(0,r.of)(e)}throw Error(`[RPC]: observable method not found for ${e}!`)}}}function x(e){return new Proxy({},{get(t,n){if(n!==`dispose`)return function(...t){return S(n)?e.subscribe(n,t):e.call(n,t)}}})}function S(e){return e.endsWith(`$`)}var C=function(e){return e[e.REQUEST_INITIALIZATION=50]=`REQUEST_INITIALIZATION`,e[e.CALL=100]=`CALL`,e[e.SUBSCRIBE=101]=`SUBSCRIBE`,e[e.UNSUBSCRIBE=102]=`UNSUBSCRIBE`,e}(C||{}),w=function(e){return e[e.INITIALIZE=0]=`INITIALIZE`,e[e.CALL_SUCCESS=201]=`CALL_SUCCESS`,e[e.CALL_FAILURE=202]=`CALL_FAILURE`,e[e.SUBSCRIBE_NEXT=300]=`SUBSCRIBE_NEXT`,e[e.SUBSCRIBE_ERROR=301]=`SUBSCRIBE_ERROR`,e[e.SUBSCRIBE_COMPLETE=302]=`SUBSCRIBE_COMPLETE`,e}(w||{}),T=class extends t.RxDisposable{constructor(e){super(),this._protocol=e,y(this,`_initialized`,new r.BehaviorSubject(!1)),y(this,`_lastRequestCounter`,0),y(this,`_pendingRequests`,new Map),this._protocol.send({type:C.REQUEST_INITIALIZATION}),this._protocol.onMessage.pipe((0,n.takeUntil)(this.dispose$)).subscribe(e=>this._onMessage(e))}dispose(){this._pendingRequests.clear()}getChannel(e){return{call:(t,n)=>this._disposed?Promise.reject(Error(`[ChannelClient]: client is disposed!`)):this._remoteCall(e,t,n),subscribe:(t,n)=>{if(this._disposed)throw Error(`[ChannelClient]: client is disposed!`);return this._remoteSubscribe(e,t,n)}}}_whenReady(){return(0,r.firstValueFrom)(this._initialized.pipe((0,n.filter)(e=>e),(0,n.take)(1)))}_remoteCall(e,t,n){return this._initialized.getValue()?this._doRemoteCall(e,t,n):this._whenReady().then(()=>this._doRemoteCall(e,t,n))}_doRemoteCall(e,t,n){let r=++this._lastRequestCounter,i={seq:r,type:C.CALL,channelName:e,method:t,args:n},a=this._pendingRequests;return new Promise((e,t)=>{this._pendingRequests.set(r,{handle(n){switch(n.type){case w.CALL_SUCCESS:a.delete(r),e(n.data);break;case w.CALL_FAILURE:a.delete(r),t(n.data);break;default:throw Error(`[ChannelClient]: unknown response type!`)}}}),this._sendRequest(i)})}_remoteSubscribe(e,t,n){return new r.Observable(r=>{let i=-1,a=()=>{i=++this._lastRequestCounter;let a=C.SUBSCRIBE,o={seq:i,type:a,channelName:e,method:t,args:n};this._pendingRequests.set(i,{handle(e){switch(e.type){case w.SUBSCRIBE_NEXT:r.next(e.data);break;case w.SUBSCRIBE_ERROR:r.error(e.data);break;case w.SUBSCRIBE_COMPLETE:r.complete();break;default:throw Error(`[ChannelClient]: unknown response type!`)}}}),this._sendRequest(o)};return this._initialized.getValue()?a():this._whenReady().then(a),()=>{if(i===-1)return;let n={type:C.UNSUBSCRIBE,seq:i,channelName:e,method:t};this._sendRequest(n)}})}_sendRequest(e){this._protocol.send(e)}_onMessage(e){let{type:t,seq:n}=e;switch(t){case w.INITIALIZE:this._initialized.next(!0);break;case w.CALL_SUCCESS:case w.CALL_FAILURE:case w.SUBSCRIBE_NEXT:case w.SUBSCRIBE_COMPLETE:case w.SUBSCRIBE_ERROR:{var r;let{_pendingRequests:i}=this;(r=i.get(n))==null||r.handle(e),t!==w.SUBSCRIBE_NEXT&&i.delete(n);break}}}},E=class extends t.RxDisposable{constructor(e){super(),this._protocol=e,y(this,`_channels`,new Map),y(this,`_subscriptions`,new Map),this._protocol.onMessage.pipe((0,n.takeUntil)(this.dispose$)).subscribe(e=>this._onRequest(e)),this._sendInitialize()}dispose(){super.dispose(),this._subscriptions.clear(),this._channels.clear()}registerChannel(e,t){this._channels.set(e,t)}_onRequest(e){switch(e.type){case C.REQUEST_INITIALIZATION:this._sendInitialize();break;case C.CALL:this._onMethodCall(e);break;case C.SUBSCRIBE:this._onSubscribe(e);break;case C.UNSUBSCRIBE:this._onUnsubscribe(e);break;default:break}}_sendInitialize(){this._sendResponse({seq:-1,type:w.INITIALIZE})}_onMethodCall(e){let{channelName:t,method:n,args:r}=e,i=this._channels.get(t),a;try{if(!i)throw Error(`[ChannelServer]: Channel ${t} not found!`);a=r?i.call(n,r):i.call(n)}catch(e){a=Promise.reject(e instanceof Error?e:Error(String(e)))}a.then(t=>{this._sendResponse({seq:e.seq,type:w.CALL_SUCCESS,data:t})}).catch(t=>{t instanceof Error?this._sendResponse({seq:e.seq,type:w.CALL_FAILURE,data:t.message}):this._sendResponse({seq:e.seq,type:w.CALL_FAILURE,data:String(t)})})}_onSubscribe(e){let{channelName:t,seq:n}=e,r=this._channels.get(t);try{if(!r)throw Error(`[ChannelServer]: Channel ${t} not found!`);let i=r.subscribe(e.method,e.args).subscribe({next:e=>{this._sendResponse({seq:n,type:w.SUBSCRIBE_NEXT,data:e})},error:e=>{this._sendResponse({seq:n,type:w.SUBSCRIBE_ERROR,data:e.message}),this._sendResponse({seq:n,type:w.SUBSCRIBE_COMPLETE})},complete:()=>{this._sendResponse({seq:n,type:w.SUBSCRIBE_COMPLETE})}});this._subscriptions.set(e.seq,i)}catch(t){t instanceof Error?this._sendResponse({seq:e.seq,type:w.SUBSCRIBE_ERROR,data:t.message}):this._sendResponse({seq:e.seq,type:w.SUBSCRIBE_ERROR,data:String(t)})}}_onUnsubscribe(e){let t=this._subscriptions.get(e.seq);t&&(t.unsubscribe(),this._subscriptions.delete(e.seq))}_sendResponse(e){this._protocol.send(e)}};let D=(0,t.createIdentifier)(`IRPCChannelService`);var O=class{constructor(e){y(this,`_client`,void 0),y(this,`_server`,void 0),this._client=new T(e),this._server=new E(e)}dispose(){this._client.dispose(),this._server.dispose()}requestChannel(e){return this._client.getChannel(e)}registerChannel(e,t){this._server.registerChannel(e,t)}};let k=class extends t.RxDisposable{constructor(e,t,n,r,i){super(),this._injector=e,this._commandService=t,this._univerInstanceService=n,this._rpcChannelService=r,this._remoteSyncService=i,y(this,`_remoteInstanceService`,void 0),y(this,`_syncingUnits`,new Set),y(this,`_syncingMutations`,new Set),this._initRPCChannels(),this._init()}registerSyncingMutations(e){this._syncingMutations.add(e.id)}syncUnit(e){return this._syncingUnits.add(e),(0,t.toDisposable)(()=>this._syncingUnits.delete(e))}_initRPCChannels(){this._rpcChannelService.registerChannel(u,b(this._remoteSyncService)),this._injector.add([m,{useFactory:()=>x(this._rpcChannelService.requestChannel(p))}]),this._remoteInstanceService=this._injector.get(m)}_init(){this._univerInstanceService.getTypeOfUnitAdded$(t.UniverInstanceType.UNIVER_SHEET).pipe((0,n.takeUntil)(this.dispose$)).subscribe(e=>{let{unit:n}=e;this._syncingUnits.add(n.getUnitId()),this._remoteInstanceService.createInstance({unitID:n.getUnitId(),type:t.UniverInstanceType.UNIVER_SHEET,snapshot:n.getSnapshot()})}),this._univerInstanceService.getTypeOfUnitDisposed$(t.UniverInstanceType.UNIVER_SHEET).pipe((0,n.takeUntil)(this.dispose$)).subscribe(e=>{this._syncingUnits.delete(e.getUnitId()),this._remoteInstanceService.disposeInstance({unitID:e.getUnitId()})}),this.disposeWithMe(this._commandService.onCommandExecuted((e,n)=>{let{type:r,params:i,id:a}=e,o=(i==null?void 0:i.unitId)||``;r===t.CommandType.MUTATION&&(!o||this._syncingUnits.has(o))&&!(n!=null&&n.fromSync)&&this._syncingMutations.has(a)&&this._remoteInstanceService.syncMutation({mutationInfo:e},n)}))}};k=l([c(0,(0,t.Inject)(t.Injector)),c(1,t.ICommandService),c(2,t.IUniverInstanceService),c(3,D),c(4,d)],k);let A=class extends t.Disposable{constructor(e,t,n,r){super(),this._injector=e,this._remoteInstanceService=t,this._commandService=n,this._rpcChannelService=r,y(this,`_remoteSyncService`,void 0),this._initRPCChannels(),this._init()}_initRPCChannels(){this._rpcChannelService.registerChannel(p,b(this._remoteInstanceService)),this._injector.add([d,{useFactory:()=>x(this._rpcChannelService.requestChannel(u))}]),this._remoteSyncService=this._injector.get(d)}_init(){this.disposeWithMe(this._commandService.onCommandExecuted((e,n)=>{e.type===t.CommandType.MUTATION&&!(n!=null&&n.fromSync)&&this._remoteSyncService.syncMutation({mutationInfo:e},n)}))}};A=l([c(0,(0,t.Inject)(t.Injector)),c(1,m),c(2,t.ICommandService),c(3,D)],A);var j=`@univerjs/rpc`,M=`0.21.1`;function N(){return{send(e){postMessage(e)},onMessage:new r.Observable(e=>{let t=t=>{e.next(t.data)};return addEventListener(`message`,t),()=>removeEventListener(`message`,t)}).pipe((0,r.shareReplay)(1))}}function P(e){return{send(t){e.postMessage(t)},onMessage:new r.Observable(t=>{let n=e=>{t.next(e.data)};return e.addEventListener(`message`,n),()=>e.removeEventListener(`message`,n)}).pipe((0,r.shareReplay)(1))}}let F=class extends t.Plugin{constructor(e=a,n,r){super(),this._config=e,this._injector=n,this._configService=r,y(this,`_internalWorker`,null);let{...o}=(0,t.merge)({},a,this._config);this._configService.setConfig(i,o)}dispose(){super.dispose(),this._internalWorker&&(this._internalWorker.terminate(),this._internalWorker=null)}onStarting(){let{workerURL:e}=this._config;if(!e)throw Error(`[UniverRPCMainThreadPlugin]: The workerURL is required for the RPC main thread plugin.`);let t=e instanceof Worker?e:new Worker(e);this._internalWorker=e instanceof Worker?null:t;let n=P(t);[[D,{useFactory:()=>new O(n)}],[k],[d,{useClass:f}]].forEach(e=>this._injector.add(e)),this._injector.get(k)}};y(F,`pluginName`,`UNIVER_RPC_MAIN_THREAD_PLUGIN`),y(F,`packageName`,j),y(F,`version`,M),F=l([c(1,(0,t.Inject)(t.Injector)),c(2,t.IConfigService)],F);let I=class extends t.Plugin{constructor(e=s,n,r){super(),this._config=e,this._injector=n,this._configService=r;let{...i}=(0,t.merge)({},s,this._config);this._configService.setConfig(o,i)}onStarting(){[[A],[D,{useFactory:()=>new O(N())}],[m,{useClass:h}]].forEach(e=>this._injector.add(e)),this._injector.get(A)}};y(I,`pluginName`,`UNIVER_RPC_WORKER_THREAD_PLUGIN`),y(I,`packageName`,j),y(I,`version`,M),I=l([c(1,(0,t.Inject)(t.Injector)),c(2,t.IConfigService)],I),e.ChannelClient=T,e.ChannelServer=E,e.ChannelService=O,Object.defineProperty(e,`DataSyncPrimaryController`,{enumerable:!0,get:function(){return k}}),Object.defineProperty(e,`DataSyncReplicaController`,{enumerable:!0,get:function(){return A}}),e.IRPCChannelService=D,e.IRemoteInstanceService=m,e.IRemoteSyncService=d,e.PLUGIN_CONFIG_KEY_MAIN_THREAD=i,e.PLUGIN_CONFIG_KEY_WORKER_THREAD=o,e.RemoteInstanceServiceName=p,Object.defineProperty(e,`RemoteSyncPrimaryService`,{enumerable:!0,get:function(){return f}}),e.RemoteSyncServiceName=u,Object.defineProperty(e,`UniverRPCMainThreadPlugin`,{enumerable:!0,get:function(){return F}}),Object.defineProperty(e,`UniverRPCWorkerThreadPlugin`,{enumerable:!0,get:function(){return I}}),Object.defineProperty(e,`WebWorkerRemoteInstanceService`,{enumerable:!0,get:function(){return h}}),e.fromModule=b,e.toModule=x});
|
|
1
|
+
(function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require(`@univerjs/core`),require(`rxjs/operators`),require(`rxjs`)):typeof define==`function`&&define.amd?define([`exports`,`@univerjs/core`,`rxjs/operators`,`rxjs`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.UniverRpc={},e.UniverCore,e.rxjs.operators,e.rxjs))})(this,function(e,t,n,r){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});let i=`rpc.main-thread.config`;Symbol(i);let a={},o=`rpc.worker-thread.config`;Symbol(o);let s={};function c(e,t){return function(n,r){t(n,r,e)}}function l(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a}let u=`rpc.remote-sync.service`,d=(0,t.createIdentifier)(u),f=class{constructor(e){this._commandService=e}async syncMutation(e,t){let{fromCollab:n,...r}=t||{};return this._commandService.syncExecuteCommand(e.mutationInfo.id,e.mutationInfo.params,{...r,onlyLocal:!0,fromSync:!0})}};f=l([c(0,t.ICommandService)],f);let p=`univer.remote-instance-service`,m=(0,t.createIdentifier)(p),h=class{constructor(e,t,n){this._univerInstanceService=e,this._commandService=t,this._logService=n}whenReady(){return Promise.resolve(!0)}async syncMutation(e,t){return this._applyMutation(e.mutationInfo,t)}async createInstance(e){this._logService.debug(`[WebWorkerRemoteInstanceService]: Creating instance with id ${e.unitID}`);let{type:n,snapshot:r}=e;try{switch(n){case t.UniverInstanceType.UNIVER_SHEET:return this._univerInstanceService.createUnit(t.UniverInstanceType.UNIVER_SHEET,r),!0;default:throw Error(`[WebWorkerRemoteInstanceService]: cannot create replica for document type: ${n}.`)}}catch(e){throw e instanceof Error?e:TypeError(`${e}`)}}async disposeInstance(e){return this._logService.debug(`[WebWorkerRemoteInstanceService]: Disposing instance with id ${e.unitID}`),this._univerInstanceService.disposeUnit(e.unitID)}_applyMutation(e,t){let{id:n,params:r}=e,{fromCollab:i,...a}=t||{};return this._commandService.syncExecuteCommand(n,r,{...a,onlyLocal:!0,fromSync:!0})}};h=l([c(0,t.IUniverInstanceService),c(1,t.ICommandService),c(2,t.ILogService)],h);function g(e){"@babel/helpers - typeof";return g=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},g(e)}function _(e,t){if(g(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(g(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function v(e){var t=_(e,`string`);return g(t)==`symbol`?t:t+``}function y(e,t,n){return(t=v(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function b(e){let t=e;return new class{call(e,n){let r=t[e];if(typeof r==`function`){let e=n?r.apply(t,n):r.call(t);return e instanceof Promise||(e=Promise.resolve(e)),e}throw Error(`[RPC]: method not found for ${e}!`)}subscribe(e,n){let i=t[e];if(typeof i==`function`){let e=n?i.apply(t,n):i.call(t);return(0,r.isObservable)(e)?e:(0,r.of)(e)}throw Error(`[RPC]: observable method not found for ${e}!`)}}}function x(e){return new Proxy({},{get(t,n){if(n!==`dispose`)return function(...t){return S(n)?e.subscribe(n,t):e.call(n,t)}}})}function S(e){return e.endsWith(`$`)}var C=class extends t.RxDisposable{constructor(e){super(),this._protocol=e,y(this,`_initialized`,new r.BehaviorSubject(!1)),y(this,`_lastRequestCounter`,0),y(this,`_pendingRequests`,new Map),this._protocol.send({type:50}),this._protocol.onMessage.pipe((0,n.takeUntil)(this.dispose$)).subscribe(e=>this._onMessage(e))}dispose(){this._pendingRequests.clear()}getChannel(e){return{call:(t,n)=>this._disposed?Promise.reject(Error(`[ChannelClient]: client is disposed!`)):this._remoteCall(e,t,n),subscribe:(t,n)=>{if(this._disposed)throw Error(`[ChannelClient]: client is disposed!`);return this._remoteSubscribe(e,t,n)}}}_whenReady(){return(0,r.firstValueFrom)(this._initialized.pipe((0,n.filter)(e=>e),(0,n.take)(1)))}_remoteCall(e,t,n){return this._initialized.getValue()?this._doRemoteCall(e,t,n):this._whenReady().then(()=>this._doRemoteCall(e,t,n))}_doRemoteCall(e,t,n){let r=++this._lastRequestCounter,i={seq:r,type:100,channelName:e,method:t,args:n},a=this._pendingRequests;return new Promise((e,t)=>{this._pendingRequests.set(r,{handle(n){switch(n.type){case 201:a.delete(r),e(n.data);break;case 202:a.delete(r),t(n.data);break;default:throw Error(`[ChannelClient]: unknown response type!`)}}}),this._sendRequest(i)})}_remoteSubscribe(e,t,n){return new r.Observable(r=>{let i=-1,a=()=>{i=++this._lastRequestCounter;let a={seq:i,type:101,channelName:e,method:t,args:n};this._pendingRequests.set(i,{handle(e){switch(e.type){case 300:r.next(e.data);break;case 301:r.error(e.data);break;case 302:r.complete();break;default:throw Error(`[ChannelClient]: unknown response type!`)}}}),this._sendRequest(a)};return this._initialized.getValue()?a():this._whenReady().then(a),()=>{if(i===-1)return;let n={type:102,seq:i,channelName:e,method:t};this._sendRequest(n)}})}_sendRequest(e){this._protocol.send(e)}_onMessage(e){let{type:t,seq:n}=e;switch(t){case 0:this._initialized.next(!0);break;case 201:case 202:case 300:case 302:case 301:{var r;let{_pendingRequests:i}=this;(r=i.get(n))==null||r.handle(e),t!==300&&i.delete(n);break}}}},w=class extends t.RxDisposable{constructor(e){super(),this._protocol=e,y(this,`_channels`,new Map),y(this,`_subscriptions`,new Map),this._protocol.onMessage.pipe((0,n.takeUntil)(this.dispose$)).subscribe(e=>this._onRequest(e)),this._sendInitialize()}dispose(){super.dispose(),this._subscriptions.clear(),this._channels.clear()}registerChannel(e,t){this._channels.set(e,t)}_onRequest(e){switch(e.type){case 50:this._sendInitialize();break;case 100:this._onMethodCall(e);break;case 101:this._onSubscribe(e);break;case 102:this._onUnsubscribe(e);break;default:break}}_sendInitialize(){this._sendResponse({seq:-1,type:0})}_onMethodCall(e){let{channelName:t,method:n,args:r}=e,i=this._channels.get(t),a;try{if(!i)throw Error(`[ChannelServer]: Channel ${t} not found!`);a=r?i.call(n,r):i.call(n)}catch(e){a=Promise.reject(e instanceof Error?e:Error(String(e)))}a.then(t=>{this._sendResponse({seq:e.seq,type:201,data:t})}).catch(t=>{t instanceof Error?this._sendResponse({seq:e.seq,type:202,data:t.message}):this._sendResponse({seq:e.seq,type:202,data:String(t)})})}_onSubscribe(e){let{channelName:t,seq:n}=e,r=this._channels.get(t);try{if(!r)throw Error(`[ChannelServer]: Channel ${t} not found!`);let i=r.subscribe(e.method,e.args).subscribe({next:e=>{this._sendResponse({seq:n,type:300,data:e})},error:e=>{this._sendResponse({seq:n,type:301,data:e.message}),this._sendResponse({seq:n,type:302})},complete:()=>{this._sendResponse({seq:n,type:302})}});this._subscriptions.set(e.seq,i)}catch(t){t instanceof Error?this._sendResponse({seq:e.seq,type:301,data:t.message}):this._sendResponse({seq:e.seq,type:301,data:String(t)})}}_onUnsubscribe(e){let t=this._subscriptions.get(e.seq);t&&(t.unsubscribe(),this._subscriptions.delete(e.seq))}_sendResponse(e){this._protocol.send(e)}};let T=(0,t.createIdentifier)(`IRPCChannelService`);var E=class{constructor(e){y(this,`_client`,void 0),y(this,`_server`,void 0),this._client=new C(e),this._server=new w(e)}dispose(){this._client.dispose(),this._server.dispose()}requestChannel(e){return this._client.getChannel(e)}registerChannel(e,t){this._server.registerChannel(e,t)}};let D=class extends t.RxDisposable{constructor(e,t,n,r,i){super(),this._injector=e,this._commandService=t,this._univerInstanceService=n,this._rpcChannelService=r,this._remoteSyncService=i,y(this,`_remoteInstanceService`,void 0),y(this,`_syncingUnits`,new Set),y(this,`_syncingMutations`,new Set),this._initRPCChannels(),this._init()}registerSyncingMutations(e){this._syncingMutations.add(e.id)}syncUnit(e){return this._syncingUnits.add(e),(0,t.toDisposable)(()=>this._syncingUnits.delete(e))}_initRPCChannels(){this._rpcChannelService.registerChannel(u,b(this._remoteSyncService)),this._injector.add([m,{useFactory:()=>x(this._rpcChannelService.requestChannel(p))}]),this._remoteInstanceService=this._injector.get(m)}_init(){this._univerInstanceService.getTypeOfUnitAdded$(t.UniverInstanceType.UNIVER_SHEET).pipe((0,n.takeUntil)(this.dispose$)).subscribe(e=>{let{unit:n}=e;this._syncingUnits.add(n.getUnitId()),this._remoteInstanceService.createInstance({unitID:n.getUnitId(),type:t.UniverInstanceType.UNIVER_SHEET,snapshot:n.getSnapshot()})}),this._univerInstanceService.getTypeOfUnitDisposed$(t.UniverInstanceType.UNIVER_SHEET).pipe((0,n.takeUntil)(this.dispose$)).subscribe(e=>{this._syncingUnits.delete(e.getUnitId()),this._remoteInstanceService.disposeInstance({unitID:e.getUnitId()})}),this.disposeWithMe(this._commandService.onCommandExecuted((e,n)=>{let{type:r,params:i,id:a}=e,o=(i==null?void 0:i.unitId)||``;r===t.CommandType.MUTATION&&(!o||this._syncingUnits.has(o))&&!(n!=null&&n.fromSync)&&this._syncingMutations.has(a)&&this._remoteInstanceService.syncMutation({mutationInfo:e},n)}))}};D=l([c(0,(0,t.Inject)(t.Injector)),c(1,t.ICommandService),c(2,t.IUniverInstanceService),c(3,T),c(4,d)],D);let O=class extends t.Disposable{constructor(e,t,n,r){super(),this._injector=e,this._remoteInstanceService=t,this._commandService=n,this._rpcChannelService=r,y(this,`_remoteSyncService`,void 0),this._initRPCChannels(),this._init()}_initRPCChannels(){this._rpcChannelService.registerChannel(p,b(this._remoteInstanceService)),this._injector.add([d,{useFactory:()=>x(this._rpcChannelService.requestChannel(u))}]),this._remoteSyncService=this._injector.get(d)}_init(){this.disposeWithMe(this._commandService.onCommandExecuted((e,n)=>{e.type===t.CommandType.MUTATION&&!(n!=null&&n.fromSync)&&this._remoteSyncService.syncMutation({mutationInfo:e},n)}))}};O=l([c(0,(0,t.Inject)(t.Injector)),c(1,m),c(2,t.ICommandService),c(3,T)],O);var k=`@univerjs/rpc`,A=`0.22.0`;function j(){return{send(e){postMessage(e)},onMessage:new r.Observable(e=>{let t=t=>{e.next(t.data)};return addEventListener(`message`,t),()=>removeEventListener(`message`,t)}).pipe((0,r.shareReplay)(1))}}function M(e){return{send(t){e.postMessage(t)},onMessage:new r.Observable(t=>{let n=e=>{t.next(e.data)};return e.addEventListener(`message`,n),()=>e.removeEventListener(`message`,n)}).pipe((0,r.shareReplay)(1))}}let N=class extends t.Plugin{constructor(e=a,n,r){super(),this._config=e,this._injector=n,this._configService=r,y(this,`_internalWorker`,null);let{...o}=(0,t.merge)({},a,this._config);this._configService.setConfig(i,o)}dispose(){super.dispose(),this._internalWorker&&(this._internalWorker.terminate(),this._internalWorker=null)}onStarting(){let{workerURL:e}=this._config;if(!e)throw Error(`[UniverRPCMainThreadPlugin]: The workerURL is required for the RPC main thread plugin.`);let t=e instanceof Worker?e:new Worker(e);this._internalWorker=e instanceof Worker?null:t;let n=M(t);[[T,{useFactory:()=>new E(n)}],[D],[d,{useClass:f}]].forEach(e=>this._injector.add(e)),this._injector.get(D)}};y(N,`pluginName`,`UNIVER_RPC_MAIN_THREAD_PLUGIN`),y(N,`packageName`,k),y(N,`version`,A),N=l([c(1,(0,t.Inject)(t.Injector)),c(2,t.IConfigService)],N);let P=class extends t.Plugin{constructor(e=s,n,r){super(),this._config=e,this._injector=n,this._configService=r;let{...i}=(0,t.merge)({},s,this._config);this._configService.setConfig(o,i)}onStarting(){[[O],[T,{useFactory:()=>new E(j())}],[m,{useClass:h}]].forEach(e=>this._injector.add(e)),this._injector.get(O)}};y(P,`pluginName`,`UNIVER_RPC_WORKER_THREAD_PLUGIN`),y(P,`packageName`,k),y(P,`version`,A),P=l([c(1,(0,t.Inject)(t.Injector)),c(2,t.IConfigService)],P),e.ChannelClient=C,e.ChannelServer=w,e.ChannelService=E,Object.defineProperty(e,`DataSyncPrimaryController`,{enumerable:!0,get:function(){return D}}),Object.defineProperty(e,`DataSyncReplicaController`,{enumerable:!0,get:function(){return O}}),e.IRPCChannelService=T,e.IRemoteInstanceService=m,e.IRemoteSyncService=d,e.PLUGIN_CONFIG_KEY_MAIN_THREAD=i,e.PLUGIN_CONFIG_KEY_WORKER_THREAD=o,e.RemoteInstanceServiceName=p,Object.defineProperty(e,`RemoteSyncPrimaryService`,{enumerable:!0,get:function(){return f}}),e.RemoteSyncServiceName=u,Object.defineProperty(e,`UniverRPCMainThreadPlugin`,{enumerable:!0,get:function(){return N}}),Object.defineProperty(e,`UniverRPCWorkerThreadPlugin`,{enumerable:!0,get:function(){return P}}),Object.defineProperty(e,`WebWorkerRemoteInstanceService`,{enumerable:!0,get:function(){return h}}),e.fromModule=b,e.toModule=x});
|
package/package.json
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@univerjs/rpc",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.22.0",
|
|
4
4
|
"private": false,
|
|
5
|
-
"
|
|
5
|
+
"description": "Browser RPC layer for Univer main-thread and worker communication.",
|
|
6
|
+
"author": "DreamNum Co., Ltd. <developer@univer.ai>",
|
|
6
7
|
"license": "Apache-2.0",
|
|
7
8
|
"funding": {
|
|
8
9
|
"type": "opencollective",
|
|
@@ -17,7 +18,11 @@
|
|
|
17
18
|
"url": "https://github.com/dream-num/univer/issues"
|
|
18
19
|
},
|
|
19
20
|
"keywords": [
|
|
20
|
-
"univer"
|
|
21
|
+
"univer",
|
|
22
|
+
"rpc",
|
|
23
|
+
"worker",
|
|
24
|
+
"message-channel",
|
|
25
|
+
"plugin"
|
|
21
26
|
],
|
|
22
27
|
"exports": {
|
|
23
28
|
".": {
|
|
@@ -47,13 +52,13 @@
|
|
|
47
52
|
"rxjs": ">=7.0.0"
|
|
48
53
|
},
|
|
49
54
|
"dependencies": {
|
|
50
|
-
"@univerjs/core": "0.
|
|
55
|
+
"@univerjs/core": "0.22.0"
|
|
51
56
|
},
|
|
52
57
|
"devDependencies": {
|
|
53
58
|
"rxjs": "^7.8.2",
|
|
54
|
-
"typescript": "^6.0.
|
|
55
|
-
"vitest": "^4.1.
|
|
56
|
-
"@univerjs-infra/shared": "0.
|
|
59
|
+
"typescript": "^6.0.3",
|
|
60
|
+
"vitest": "^4.1.5",
|
|
61
|
+
"@univerjs-infra/shared": "0.22.0"
|
|
57
62
|
},
|
|
58
63
|
"scripts": {
|
|
59
64
|
"test": "vitest run",
|