@univerjs/rpc 0.15.2-insiders.20260124-12fc7f0 → 0.15.3-insiders.20260131-b9b8805
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/lib/cjs/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var x=Object.defineProperty;var L=(i,t,e)=>t in i?x(i,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[t]=e;var l=(i,t,e)=>L(i,typeof t!="symbol"?t+"":t,e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("@univerjs/core"),u=require("rxjs/operators"),_=require("rxjs"),k="rpc.main-thread.config",W={},D="rpc.worker-thread.config",T={};var H=Object.getOwnPropertyDescriptor,q=(i,t,e,n)=>{for(var s=n>1?void 0:n?H(t,e):t,r=i.length-1,c;r>=0;r--)(c=i[r])&&(s=c(s)||s);return s},g=(i,t)=>(e,n)=>t(e,n,i);const R="rpc.remote-sync.service",v=o.createIdentifier(R);exports.RemoteSyncPrimaryService=class{constructor(t){this._commandService=t}async syncMutation(t){return this._commandService.syncExecuteCommand(t.mutationInfo.id,t.mutationInfo.params,{onlyLocal:!0,fromSync:!0})}};exports.RemoteSyncPrimaryService=q([g(0,o.ICommandService)],exports.RemoteSyncPrimaryService);const I="univer.remote-instance-service",m=o.createIdentifier(I);exports.WebWorkerRemoteInstanceService=class{constructor(t,e,n){this._univerInstanceService=t,this._commandService=e,this._logService=n}whenReady(){return Promise.resolve(!0)}async syncMutation(t){return this._applyMutation(t.mutationInfo)}async createInstance(t){this._logService.debug(`[WebWorkerRemoteInstanceService]: Creating instance with id ${t.unitID}`);const{type:e,snapshot:n}=t;try{if(e===o.UniverInstanceType.UNIVER_SHEET)return this._univerInstanceService.createUnit(o.UniverInstanceType.UNIVER_SHEET,n),!0;throw new Error(`[WebWorkerRemoteInstanceService]: cannot create replica for document type: ${e}.`)}catch(s){throw s instanceof Error?s:new TypeError(`${s}`)}}async disposeInstance(t){return this._logService.debug(`[WebWorkerRemoteInstanceService]: Disposing instance with id ${t.unitID}`),this._univerInstanceService.disposeUnit(t.unitID)}_applyMutation(t){const{id:e,params:n}=t;return this._commandService.syncExecuteCommand(e,n,{onlyLocal:!0,fromSync:!0})}};exports.WebWorkerRemoteInstanceService=q([g(0,o.IUniverInstanceService),g(1,o.ICommandService),g(2,o.ILogService)],exports.WebWorkerRemoteInstanceService);function E(i){const t=i;return new class{call(e,n){const s=t[e];if(typeof s=="function"){let r=n?s.apply(t,n):s.call(t);return r instanceof Promise||(r=Promise.resolve(r)),r}throw new Error(`[RPC]: method not found for ${e}!`)}subscribe(e,n){const s=t[e];if(typeof s=="function"){const r=n?s.apply(t,n):s.call(t);return _.isObservable(r)?r:_.of(r)}throw new Error(`[RPC]: observable method not found for ${e}!`)}}}function U(i){return new Proxy({},{get(t,e){if(e!=="dispose")return function(...n){return A(e)?i.subscribe(e,n):i.call(e,n)}}})}function A(i){return i.endsWith("$")}class O extends o.RxDisposable{constructor(e){super();l(this,"_initialized",new _.BehaviorSubject(!1));l(this,"_lastRequestCounter",0);l(this,"_pendingRequests",new Map);this._protocol=e,this._protocol.send({type:50}),this._protocol.onMessage.pipe(u.takeUntil(this.dispose$)).subscribe(n=>this._onMessage(n))}dispose(){this._pendingRequests.clear()}getChannel(e){const n=this;return{call(s,r){return n._disposed?Promise.reject():n._remoteCall(e,s,r)},subscribe(s,r){if(n._disposed)throw new Error("[ChannelClient]: client is disposed!");return n._remoteSubscribe(e,s,r)}}}_whenReady(){return _.firstValueFrom(this._initialized.pipe(u.filter(e=>e),u.take(1)))}async _remoteCall(e,n,s){await this._whenReady();const r=++this._lastRequestCounter,h={seq:r,type:100,channelName:e,method:n,args:s},a=this;return new Promise((f,d)=>{const $={handle(b){switch(b.type){case 201:a._pendingRequests.delete(r),f(b.data);break;case 202:a._pendingRequests.delete(r),d(b.data);break;default:throw new Error("[ChannelClient]: unknown response type!")}}};this._pendingRequests.set(r,$),this._sendRequest(h)})}_remoteSubscribe(e,n,s){return new _.Observable(r=>{let c=-1;return this._whenReady().then(()=>{c=++this._lastRequestCounter;const a={seq:c,type:101,channelName:e,method:n,args:s},f={handle(d){switch(d.type){case 300:r.next(d.data);break;case 301:r.error(d.data);break;case 302:r.complete();break;default:throw new Error("[ChannelClient]: unknown response type!")}}};this._pendingRequests.set(c,f),this._sendRequest(a)}),()=>{if(c===-1)return;const h={type:102,seq:c,channelName:e,method:n};this._sendRequest(h)}})}_sendRequest(e){this._protocol.send(e)}_onMessage(e){var r;const{type:n,seq:s}=e;switch(n){case 0:this._initialized.next(!0);break;case 201:case 202:case 300:case 302:case 301:{const{_pendingRequests:c}=this;(r=c.get(s))==null||r.handle(e),n!==300&&c.delete(s);break}}}}class j extends o.RxDisposable{constructor(e){super();l(this,"_channels",new Map);l(this,"_subscriptions",new Map);this._protocol=e,this._protocol.onMessage.pipe(u.takeUntil(this.dispose$)).subscribe(n=>this._onRequest(n)),this._sendInitialize()}dispose(){super.dispose(),this._subscriptions.clear(),this._channels.clear()}registerChannel(e,n){this._channels.set(e,n)}_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}}_sendInitialize(){this._sendResponse({seq:-1,type:0})}_onMethodCall(e){const{channelName:n,method:s,args:r}=e,c=this._channels.get(n);let h;try{if(!c)throw new Error(`[ChannelServer]: Channel ${n} not found!`);h=r?c.call(s,r):c.call(s)}catch(a){h=Promise.reject(a)}h.then(a=>{this._sendResponse({seq:e.seq,type:201,data:a})}).catch(a=>{a instanceof Error?this._sendResponse({seq:e.seq,type:202,data:a.message}):this._sendResponse({seq:e.seq,type:202,data:String(a)})})}_onSubscribe(e){const{channelName:n,seq:s}=e,r=this._channels.get(n);try{if(!r)throw new Error(`[ChannelServer]: Channel ${n} not found!`);const h=r.subscribe(e.method,e.args).subscribe({next:a=>{this._sendResponse({seq:s,type:300,data:a})},error:a=>{this._sendResponse({seq:s,type:301,data:a.message}),this._sendResponse({seq:s,type:302})},complete:()=>{this._sendResponse({seq:s,type:302})}});this._subscriptions.set(e.seq,h)}catch(c){c instanceof Error?this._sendResponse({seq:e.seq,type:301,data:c.message}):this._sendResponse({seq:e.seq,type:301,data:String(c)})}}_onUnsubscribe(e){const n=this._subscriptions.get(e.seq);n&&(n.unsubscribe(),this._subscriptions.delete(e.seq))}_sendResponse(e){this._protocol.send(e)}}const S=o.createIdentifier("IRPCChannelService");class M{constructor(t){l(this,"_client");l(this,"_server");this._client=new O(t),this._server=new j(t)}dispose(){this._client.dispose(),this._server.dispose()}requestChannel(t){return this._client.getChannel(t)}registerChannel(t,e){this._server.registerChannel(t,e)}}var G=Object.getOwnPropertyDescriptor,F=(i,t,e,n)=>{for(var s=n>1?void 0:n?G(t,e):t,r=i.length-1,c;r>=0;r--)(c=i[r])&&(s=c(s)||s);return s},p=(i,t)=>(e,n)=>t(e,n,i);exports.DataSyncPrimaryController=class extends o.RxDisposable{constructor(e,n,s,r,c){super();l(this,"_remoteInstanceService");l(this,"_syncingUnits",new Set);l(this,"_syncingMutations",new Set);this._injector=e,this._commandService=n,this._univerInstanceService=s,this._rpcChannelService=r,this._remoteSyncService=c,this._initRPCChannels(),this._init()}registerSyncingMutations(e){this._syncingMutations.add(e.id)}syncUnit(e){return this._syncingUnits.add(e),o.toDisposable(()=>this._syncingUnits.delete(e))}_initRPCChannels(){this._rpcChannelService.registerChannel(R,E(this._remoteSyncService)),this._injector.add([m,{useFactory:()=>U(this._rpcChannelService.requestChannel(I))}]),this._remoteInstanceService=this._injector.get(m)}_init(){this._univerInstanceService.getTypeOfUnitAdded$(o.UniverInstanceType.UNIVER_SHEET).pipe(u.takeUntil(this.dispose$)).subscribe(e=>{this._syncingUnits.add(e.getUnitId()),this._remoteInstanceService.createInstance({unitID:e.getUnitId(),type:o.UniverInstanceType.UNIVER_SHEET,snapshot:e.getSnapshot()})}),this._univerInstanceService.getTypeOfUnitDisposed$(o.UniverInstanceType.UNIVER_SHEET).pipe(u.takeUntil(this.dispose$)).subscribe(e=>{this._syncingUnits.delete(e.getUnitId()),this._remoteInstanceService.disposeInstance({unitID:e.getUnitId()})}),this.disposeWithMe(this._commandService.onCommandExecuted((e,n)=>{const{type:s,params:r,id:c}=e,h=(r==null?void 0:r.unitId)||"";s===o.CommandType.MUTATION&&(!h||this._syncingUnits.has(h))&&!(n!=null&&n.fromSync)&&this._syncingMutations.has(c)&&this._remoteInstanceService.syncMutation({mutationInfo:e})}))}};exports.DataSyncPrimaryController=F([p(0,o.Inject(o.Injector)),p(1,o.ICommandService),p(2,o.IUniverInstanceService),p(3,S),p(4,v)],exports.DataSyncPrimaryController);var V=Object.getOwnPropertyDescriptor,z=(i,t,e,n)=>{for(var s=n>1?void 0:n?V(t,e):t,r=i.length-1,c;r>=0;r--)(c=i[r])&&(s=c(s)||s);return s},y=(i,t)=>(e,n)=>t(e,n,i);exports.DataSyncReplicaController=class extends o.Disposable{constructor(e,n,s,r){super();l(this,"_remoteSyncService");this._injector=e,this._remoteInstanceService=n,this._commandService=s,this._rpcChannelService=r,this._initRPCChannels(),this._init()}_initRPCChannels(){this._rpcChannelService.registerChannel(I,E(this._remoteInstanceService)),this._injector.add([v,{useFactory:()=>U(this._rpcChannelService.requestChannel(R))}]),this._remoteSyncService=this._injector.get(v)}_init(){this.disposeWithMe(this._commandService.onCommandExecuted((e,n)=>{e.type===o.CommandType.MUTATION&&!(n!=null&&n.fromSync)&&this._remoteSyncService.syncMutation({mutationInfo:e})}))}};exports.DataSyncReplicaController=z([y(0,o.Inject(o.Injector)),y(1,m),y(2,o.ICommandService),y(3,S)],exports.DataSyncReplicaController);function K(){return{send(i){postMessage(i)},onMessage:new _.Observable(i=>{const t=e=>{i.next(e.data)};return addEventListener("message",t),()=>removeEventListener("message",t)}).pipe(_.shareReplay(1))}}function Y(i){return{send(t){i.postMessage(t)},onMessage:new _.Observable(t=>{const e=n=>{t.next(n.data)};return i.addEventListener("message",e),()=>i.removeEventListener("message",e)}).pipe(_.shareReplay(1))}}var B=Object.getOwnPropertyDescriptor,N=(i,t,e,n)=>{for(var s=n>1?void 0:n?B(t,e):t,r=i.length-1,c;r>=0;r--)(c=i[r])&&(s=c(s)||s);return s},C=(i,t)=>(e,n)=>t(e,n,i),P;exports.UniverRPCMainThreadPlugin=(P=class extends o.Plugin{constructor(e=W,n,s){super();l(this,"_internalWorker",null);this._config=e,this._injector=n,this._configService=s;const{...r}=o.merge({},W,this._config);this._configService.setConfig(k,r)}dispose(){super.dispose(),this._internalWorker&&(this._internalWorker.terminate(),this._internalWorker=null)}onStarting(){const{workerURL:e}=this._config;if(!e)throw new Error("[UniverRPCMainThreadPlugin]: The workerURL is required for the RPC main thread plugin.");const n=e instanceof Worker?e:new Worker(e);this._internalWorker=e instanceof Worker?null:n;const s=Y(n);[[S,{useFactory:()=>new M(s)}],[exports.DataSyncPrimaryController],[v,{useClass:exports.RemoteSyncPrimaryService}]].forEach(c=>this._injector.add(c)),this._injector.get(exports.DataSyncPrimaryController)}},l(P,"pluginName","UNIVER_RPC_MAIN_THREAD_PLUGIN"),P);exports.UniverRPCMainThreadPlugin=N([C(1,o.Inject(o.Injector)),C(2,o.IConfigService)],exports.UniverRPCMainThreadPlugin);var w;exports.UniverRPCWorkerThreadPlugin=(w=class extends o.Plugin{constructor(t=T,e,n){super(),this._config=t,this._injector=e,this._configService=n;const{...s}=o.merge({},T,this._config);this._configService.setConfig(D,s)}onStarting(){[[exports.DataSyncReplicaController],[S,{useFactory:()=>new M(K())}],[m,{useClass:exports.WebWorkerRemoteInstanceService}]].forEach(t=>this._injector.add(t)),this._injector.get(exports.DataSyncReplicaController)}},l(w,"pluginName","UNIVER_RPC_WORKER_THREAD_PLUGIN"),w);exports.UniverRPCWorkerThreadPlugin=N([C(1,o.Inject(o.Injector)),C(2,o.IConfigService)],exports.UniverRPCWorkerThreadPlugin);exports.ChannelClient=O;exports.ChannelServer=j;exports.ChannelService=M;exports.IRPCChannelService=S;exports.IRemoteInstanceService=m;exports.IRemoteSyncService=v;exports.PLUGIN_CONFIG_KEY_MAIN_THREAD=k;exports.PLUGIN_CONFIG_KEY_WORKER_THREAD=D;exports.RemoteInstanceServiceName=I;exports.RemoteSyncServiceName=R;exports.fromModule=E;exports.toModule=U;
|
|
1
|
+
"use strict";var x=Object.defineProperty;var L=(i,t,e)=>t in i?x(i,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[t]=e;var l=(i,t,e)=>L(i,typeof t!="symbol"?t+"":t,e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("@univerjs/core"),u=require("rxjs/operators"),_=require("rxjs"),k="rpc.main-thread.config",W={},D="rpc.worker-thread.config",T={};var H=Object.getOwnPropertyDescriptor,q=(i,t,e,n)=>{for(var s=n>1?void 0:n?H(t,e):t,r=i.length-1,c;r>=0;r--)(c=i[r])&&(s=c(s)||s);return s},g=(i,t)=>(e,n)=>t(e,n,i);const R="rpc.remote-sync.service",v=o.createIdentifier(R);exports.RemoteSyncPrimaryService=class{constructor(t){this._commandService=t}async syncMutation(t,e){const{fromCollab:n,...s}=e||{};return this._commandService.syncExecuteCommand(t.mutationInfo.id,t.mutationInfo.params,{...s,onlyLocal:!0,fromSync:!0})}};exports.RemoteSyncPrimaryService=q([g(0,o.ICommandService)],exports.RemoteSyncPrimaryService);const I="univer.remote-instance-service",m=o.createIdentifier(I);exports.WebWorkerRemoteInstanceService=class{constructor(t,e,n){this._univerInstanceService=t,this._commandService=e,this._logService=n}whenReady(){return Promise.resolve(!0)}async syncMutation(t,e){return this._applyMutation(t.mutationInfo,e)}async createInstance(t){this._logService.debug(`[WebWorkerRemoteInstanceService]: Creating instance with id ${t.unitID}`);const{type:e,snapshot:n}=t;try{if(e===o.UniverInstanceType.UNIVER_SHEET)return this._univerInstanceService.createUnit(o.UniverInstanceType.UNIVER_SHEET,n),!0;throw new Error(`[WebWorkerRemoteInstanceService]: cannot create replica for document type: ${e}.`)}catch(s){throw s instanceof Error?s:new TypeError(`${s}`)}}async disposeInstance(t){return this._logService.debug(`[WebWorkerRemoteInstanceService]: Disposing instance with id ${t.unitID}`),this._univerInstanceService.disposeUnit(t.unitID)}_applyMutation(t,e){const{id:n,params:s}=t,{fromCollab:r,...c}=e||{};return this._commandService.syncExecuteCommand(n,s,{...c,onlyLocal:!0,fromSync:!0})}};exports.WebWorkerRemoteInstanceService=q([g(0,o.IUniverInstanceService),g(1,o.ICommandService),g(2,o.ILogService)],exports.WebWorkerRemoteInstanceService);function E(i){const t=i;return new class{call(e,n){const s=t[e];if(typeof s=="function"){let r=n?s.apply(t,n):s.call(t);return r instanceof Promise||(r=Promise.resolve(r)),r}throw new Error(`[RPC]: method not found for ${e}!`)}subscribe(e,n){const s=t[e];if(typeof s=="function"){const r=n?s.apply(t,n):s.call(t);return _.isObservable(r)?r:_.of(r)}throw new Error(`[RPC]: observable method not found for ${e}!`)}}}function U(i){return new Proxy({},{get(t,e){if(e!=="dispose")return function(...n){return A(e)?i.subscribe(e,n):i.call(e,n)}}})}function A(i){return i.endsWith("$")}class O extends o.RxDisposable{constructor(e){super();l(this,"_initialized",new _.BehaviorSubject(!1));l(this,"_lastRequestCounter",0);l(this,"_pendingRequests",new Map);this._protocol=e,this._protocol.send({type:50}),this._protocol.onMessage.pipe(u.takeUntil(this.dispose$)).subscribe(n=>this._onMessage(n))}dispose(){this._pendingRequests.clear()}getChannel(e){const n=this;return{call(s,r){return n._disposed?Promise.reject():n._remoteCall(e,s,r)},subscribe(s,r){if(n._disposed)throw new Error("[ChannelClient]: client is disposed!");return n._remoteSubscribe(e,s,r)}}}_whenReady(){return _.firstValueFrom(this._initialized.pipe(u.filter(e=>e),u.take(1)))}async _remoteCall(e,n,s){await this._whenReady();const r=++this._lastRequestCounter,h={seq:r,type:100,channelName:e,method:n,args:s},a=this;return new Promise((f,d)=>{const $={handle(b){switch(b.type){case 201:a._pendingRequests.delete(r),f(b.data);break;case 202:a._pendingRequests.delete(r),d(b.data);break;default:throw new Error("[ChannelClient]: unknown response type!")}}};this._pendingRequests.set(r,$),this._sendRequest(h)})}_remoteSubscribe(e,n,s){return new _.Observable(r=>{let c=-1;return this._whenReady().then(()=>{c=++this._lastRequestCounter;const a={seq:c,type:101,channelName:e,method:n,args:s},f={handle(d){switch(d.type){case 300:r.next(d.data);break;case 301:r.error(d.data);break;case 302:r.complete();break;default:throw new Error("[ChannelClient]: unknown response type!")}}};this._pendingRequests.set(c,f),this._sendRequest(a)}),()=>{if(c===-1)return;const h={type:102,seq:c,channelName:e,method:n};this._sendRequest(h)}})}_sendRequest(e){this._protocol.send(e)}_onMessage(e){var r;const{type:n,seq:s}=e;switch(n){case 0:this._initialized.next(!0);break;case 201:case 202:case 300:case 302:case 301:{const{_pendingRequests:c}=this;(r=c.get(s))==null||r.handle(e),n!==300&&c.delete(s);break}}}}class j extends o.RxDisposable{constructor(e){super();l(this,"_channels",new Map);l(this,"_subscriptions",new Map);this._protocol=e,this._protocol.onMessage.pipe(u.takeUntil(this.dispose$)).subscribe(n=>this._onRequest(n)),this._sendInitialize()}dispose(){super.dispose(),this._subscriptions.clear(),this._channels.clear()}registerChannel(e,n){this._channels.set(e,n)}_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}}_sendInitialize(){this._sendResponse({seq:-1,type:0})}_onMethodCall(e){const{channelName:n,method:s,args:r}=e,c=this._channels.get(n);let h;try{if(!c)throw new Error(`[ChannelServer]: Channel ${n} not found!`);h=r?c.call(s,r):c.call(s)}catch(a){h=Promise.reject(a)}h.then(a=>{this._sendResponse({seq:e.seq,type:201,data:a})}).catch(a=>{a instanceof Error?this._sendResponse({seq:e.seq,type:202,data:a.message}):this._sendResponse({seq:e.seq,type:202,data:String(a)})})}_onSubscribe(e){const{channelName:n,seq:s}=e,r=this._channels.get(n);try{if(!r)throw new Error(`[ChannelServer]: Channel ${n} not found!`);const h=r.subscribe(e.method,e.args).subscribe({next:a=>{this._sendResponse({seq:s,type:300,data:a})},error:a=>{this._sendResponse({seq:s,type:301,data:a.message}),this._sendResponse({seq:s,type:302})},complete:()=>{this._sendResponse({seq:s,type:302})}});this._subscriptions.set(e.seq,h)}catch(c){c instanceof Error?this._sendResponse({seq:e.seq,type:301,data:c.message}):this._sendResponse({seq:e.seq,type:301,data:String(c)})}}_onUnsubscribe(e){const n=this._subscriptions.get(e.seq);n&&(n.unsubscribe(),this._subscriptions.delete(e.seq))}_sendResponse(e){this._protocol.send(e)}}const S=o.createIdentifier("IRPCChannelService");class M{constructor(t){l(this,"_client");l(this,"_server");this._client=new O(t),this._server=new j(t)}dispose(){this._client.dispose(),this._server.dispose()}requestChannel(t){return this._client.getChannel(t)}registerChannel(t,e){this._server.registerChannel(t,e)}}var G=Object.getOwnPropertyDescriptor,F=(i,t,e,n)=>{for(var s=n>1?void 0:n?G(t,e):t,r=i.length-1,c;r>=0;r--)(c=i[r])&&(s=c(s)||s);return s},p=(i,t)=>(e,n)=>t(e,n,i);exports.DataSyncPrimaryController=class extends o.RxDisposable{constructor(e,n,s,r,c){super();l(this,"_remoteInstanceService");l(this,"_syncingUnits",new Set);l(this,"_syncingMutations",new Set);this._injector=e,this._commandService=n,this._univerInstanceService=s,this._rpcChannelService=r,this._remoteSyncService=c,this._initRPCChannels(),this._init()}registerSyncingMutations(e){this._syncingMutations.add(e.id)}syncUnit(e){return this._syncingUnits.add(e),o.toDisposable(()=>this._syncingUnits.delete(e))}_initRPCChannels(){this._rpcChannelService.registerChannel(R,E(this._remoteSyncService)),this._injector.add([m,{useFactory:()=>U(this._rpcChannelService.requestChannel(I))}]),this._remoteInstanceService=this._injector.get(m)}_init(){this._univerInstanceService.getTypeOfUnitAdded$(o.UniverInstanceType.UNIVER_SHEET).pipe(u.takeUntil(this.dispose$)).subscribe(e=>{this._syncingUnits.add(e.getUnitId()),this._remoteInstanceService.createInstance({unitID:e.getUnitId(),type:o.UniverInstanceType.UNIVER_SHEET,snapshot:e.getSnapshot()})}),this._univerInstanceService.getTypeOfUnitDisposed$(o.UniverInstanceType.UNIVER_SHEET).pipe(u.takeUntil(this.dispose$)).subscribe(e=>{this._syncingUnits.delete(e.getUnitId()),this._remoteInstanceService.disposeInstance({unitID:e.getUnitId()})}),this.disposeWithMe(this._commandService.onCommandExecuted((e,n)=>{const{type:s,params:r,id:c}=e,h=(r==null?void 0:r.unitId)||"";s===o.CommandType.MUTATION&&(!h||this._syncingUnits.has(h))&&!(n!=null&&n.fromSync)&&this._syncingMutations.has(c)&&this._remoteInstanceService.syncMutation({mutationInfo:e},n)}))}};exports.DataSyncPrimaryController=F([p(0,o.Inject(o.Injector)),p(1,o.ICommandService),p(2,o.IUniverInstanceService),p(3,S),p(4,v)],exports.DataSyncPrimaryController);var V=Object.getOwnPropertyDescriptor,z=(i,t,e,n)=>{for(var s=n>1?void 0:n?V(t,e):t,r=i.length-1,c;r>=0;r--)(c=i[r])&&(s=c(s)||s);return s},y=(i,t)=>(e,n)=>t(e,n,i);exports.DataSyncReplicaController=class extends o.Disposable{constructor(e,n,s,r){super();l(this,"_remoteSyncService");this._injector=e,this._remoteInstanceService=n,this._commandService=s,this._rpcChannelService=r,this._initRPCChannels(),this._init()}_initRPCChannels(){this._rpcChannelService.registerChannel(I,E(this._remoteInstanceService)),this._injector.add([v,{useFactory:()=>U(this._rpcChannelService.requestChannel(R))}]),this._remoteSyncService=this._injector.get(v)}_init(){this.disposeWithMe(this._commandService.onCommandExecuted((e,n)=>{e.type===o.CommandType.MUTATION&&!(n!=null&&n.fromSync)&&this._remoteSyncService.syncMutation({mutationInfo:e},n)}))}};exports.DataSyncReplicaController=z([y(0,o.Inject(o.Injector)),y(1,m),y(2,o.ICommandService),y(3,S)],exports.DataSyncReplicaController);function K(){return{send(i){postMessage(i)},onMessage:new _.Observable(i=>{const t=e=>{i.next(e.data)};return addEventListener("message",t),()=>removeEventListener("message",t)}).pipe(_.shareReplay(1))}}function Y(i){return{send(t){i.postMessage(t)},onMessage:new _.Observable(t=>{const e=n=>{t.next(n.data)};return i.addEventListener("message",e),()=>i.removeEventListener("message",e)}).pipe(_.shareReplay(1))}}var B=Object.getOwnPropertyDescriptor,N=(i,t,e,n)=>{for(var s=n>1?void 0:n?B(t,e):t,r=i.length-1,c;r>=0;r--)(c=i[r])&&(s=c(s)||s);return s},C=(i,t)=>(e,n)=>t(e,n,i),P;exports.UniverRPCMainThreadPlugin=(P=class extends o.Plugin{constructor(e=W,n,s){super();l(this,"_internalWorker",null);this._config=e,this._injector=n,this._configService=s;const{...r}=o.merge({},W,this._config);this._configService.setConfig(k,r)}dispose(){super.dispose(),this._internalWorker&&(this._internalWorker.terminate(),this._internalWorker=null)}onStarting(){const{workerURL:e}=this._config;if(!e)throw new Error("[UniverRPCMainThreadPlugin]: The workerURL is required for the RPC main thread plugin.");const n=e instanceof Worker?e:new Worker(e);this._internalWorker=e instanceof Worker?null:n;const s=Y(n);[[S,{useFactory:()=>new M(s)}],[exports.DataSyncPrimaryController],[v,{useClass:exports.RemoteSyncPrimaryService}]].forEach(c=>this._injector.add(c)),this._injector.get(exports.DataSyncPrimaryController)}},l(P,"pluginName","UNIVER_RPC_MAIN_THREAD_PLUGIN"),P);exports.UniverRPCMainThreadPlugin=N([C(1,o.Inject(o.Injector)),C(2,o.IConfigService)],exports.UniverRPCMainThreadPlugin);var w;exports.UniverRPCWorkerThreadPlugin=(w=class extends o.Plugin{constructor(t=T,e,n){super(),this._config=t,this._injector=e,this._configService=n;const{...s}=o.merge({},T,this._config);this._configService.setConfig(D,s)}onStarting(){[[exports.DataSyncReplicaController],[S,{useFactory:()=>new M(K())}],[m,{useClass:exports.WebWorkerRemoteInstanceService}]].forEach(t=>this._injector.add(t)),this._injector.get(exports.DataSyncReplicaController)}},l(w,"pluginName","UNIVER_RPC_WORKER_THREAD_PLUGIN"),w);exports.UniverRPCWorkerThreadPlugin=N([C(1,o.Inject(o.Injector)),C(2,o.IConfigService)],exports.UniverRPCWorkerThreadPlugin);exports.ChannelClient=O;exports.ChannelServer=j;exports.ChannelService=M;exports.IRPCChannelService=S;exports.IRemoteInstanceService=m;exports.IRemoteSyncService=v;exports.PLUGIN_CONFIG_KEY_MAIN_THREAD=k;exports.PLUGIN_CONFIG_KEY_WORKER_THREAD=D;exports.RemoteInstanceServiceName=I;exports.RemoteSyncServiceName=R;exports.fromModule=E;exports.toModule=U;
|
package/lib/es/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
var X = Object.defineProperty;
|
|
2
2
|
var Z = (s, t, e) => t in s ? X(s, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : s[t] = e;
|
|
3
3
|
var a = (s, t, e) => Z(s, typeof t != "symbol" ? t + "" : t, e);
|
|
4
|
-
import { createIdentifier as k, UniverInstanceType as u, ICommandService as b, IUniverInstanceService as L, ILogService as ee, RxDisposable as
|
|
4
|
+
import { createIdentifier as k, UniverInstanceType as u, ICommandService as b, IUniverInstanceService as L, ILogService as ee, RxDisposable as O, Inject as C, Injector as R, toDisposable as te, CommandType as H, Disposable as ne, Plugin as A, merge as V, IConfigService as F } from "@univerjs/core";
|
|
5
5
|
import { takeUntil as v, filter as se, take as re } from "rxjs/operators";
|
|
6
|
-
import { BehaviorSubject as ie, firstValueFrom as ce, Observable as
|
|
6
|
+
import { BehaviorSubject as ie, firstValueFrom as ce, Observable as W, isObservable as oe, of as ae, shareReplay as z } from "rxjs";
|
|
7
7
|
const he = "rpc.main-thread.config", $ = {}, le = "rpc.worker-thread.config", j = {};
|
|
8
8
|
var _e = Object.getOwnPropertyDescriptor, G = (s, t, e, n) => {
|
|
9
9
|
for (var r = n > 1 ? void 0 : n ? _e(t, e) : t, i = s.length - 1, c; i >= 0; i--)
|
|
@@ -15,8 +15,10 @@ let M = class {
|
|
|
15
15
|
constructor(s) {
|
|
16
16
|
this._commandService = s;
|
|
17
17
|
}
|
|
18
|
-
async syncMutation(s) {
|
|
18
|
+
async syncMutation(s, t) {
|
|
19
|
+
const { fromCollab: e, ...n } = t || {};
|
|
19
20
|
return this._commandService.syncExecuteCommand(s.mutationInfo.id, s.mutationInfo.params, {
|
|
21
|
+
...n,
|
|
20
22
|
onlyLocal: !0,
|
|
21
23
|
fromSync: !0
|
|
22
24
|
});
|
|
@@ -33,8 +35,8 @@ let q = class {
|
|
|
33
35
|
whenReady() {
|
|
34
36
|
return Promise.resolve(!0);
|
|
35
37
|
}
|
|
36
|
-
async syncMutation(s) {
|
|
37
|
-
return this._applyMutation(s.mutationInfo);
|
|
38
|
+
async syncMutation(s, t) {
|
|
39
|
+
return this._applyMutation(s.mutationInfo, t);
|
|
38
40
|
}
|
|
39
41
|
async createInstance(s) {
|
|
40
42
|
this._logService.debug(`[WebWorkerRemoteInstanceService]: Creating instance with id ${s.unitID}`);
|
|
@@ -52,9 +54,10 @@ let q = class {
|
|
|
52
54
|
async disposeInstance(s) {
|
|
53
55
|
return this._logService.debug(`[WebWorkerRemoteInstanceService]: Disposing instance with id ${s.unitID}`), this._univerInstanceService.disposeUnit(s.unitID);
|
|
54
56
|
}
|
|
55
|
-
_applyMutation(s) {
|
|
56
|
-
const { id:
|
|
57
|
-
return this._commandService.syncExecuteCommand(
|
|
57
|
+
_applyMutation(s, t) {
|
|
58
|
+
const { id: e, params: n } = s, { fromCollab: r, ...i } = t || {};
|
|
59
|
+
return this._commandService.syncExecuteCommand(e, n, {
|
|
60
|
+
...i,
|
|
58
61
|
onlyLocal: !0,
|
|
59
62
|
fromSync: !0
|
|
60
63
|
});
|
|
@@ -99,7 +102,7 @@ function B(s) {
|
|
|
99
102
|
function ue(s) {
|
|
100
103
|
return s.endsWith("$");
|
|
101
104
|
}
|
|
102
|
-
class de extends
|
|
105
|
+
class de extends O {
|
|
103
106
|
constructor(e) {
|
|
104
107
|
super();
|
|
105
108
|
a(this, "_initialized", new ie(!1));
|
|
@@ -156,7 +159,7 @@ class de extends W {
|
|
|
156
159
|
});
|
|
157
160
|
}
|
|
158
161
|
_remoteSubscribe(e, n, r) {
|
|
159
|
-
return new
|
|
162
|
+
return new W((i) => {
|
|
160
163
|
let c = -1;
|
|
161
164
|
return this._whenReady().then(() => {
|
|
162
165
|
c = ++this._lastRequestCounter;
|
|
@@ -213,7 +216,7 @@ class de extends W {
|
|
|
213
216
|
}
|
|
214
217
|
}
|
|
215
218
|
}
|
|
216
|
-
class pe extends
|
|
219
|
+
class pe extends O {
|
|
217
220
|
constructor(e) {
|
|
218
221
|
super();
|
|
219
222
|
a(this, "_channels", /* @__PURE__ */ new Map());
|
|
@@ -324,7 +327,7 @@ var ve = Object.getOwnPropertyDescriptor, ge = (s, t, e, n) => {
|
|
|
324
327
|
(c = s[i]) && (r = c(r) || r);
|
|
325
328
|
return r;
|
|
326
329
|
}, _ = (s, t) => (e, n) => t(e, n, s);
|
|
327
|
-
let
|
|
330
|
+
let f = class extends O {
|
|
328
331
|
constructor(t, e, n, r, i) {
|
|
329
332
|
super();
|
|
330
333
|
a(this, "_remoteInstanceService");
|
|
@@ -364,23 +367,23 @@ let y = class extends W {
|
|
|
364
367
|
n === H.MUTATION && // only sync mutations to the worker thread
|
|
365
368
|
(!c || this._syncingUnits.has(c)) && // do not sync mutations from the web worker back to the web worker
|
|
366
369
|
!(e != null && e.fromSync) && // do not sync mutations those are not meant to be synced
|
|
367
|
-
this._syncingMutations.has(i) && this._remoteInstanceService.syncMutation({ mutationInfo: t });
|
|
370
|
+
this._syncingMutations.has(i) && this._remoteInstanceService.syncMutation({ mutationInfo: t }, e);
|
|
368
371
|
}));
|
|
369
372
|
}
|
|
370
373
|
};
|
|
371
|
-
|
|
374
|
+
f = ge([
|
|
372
375
|
_(0, C(R)),
|
|
373
376
|
_(1, b),
|
|
374
377
|
_(2, L),
|
|
375
378
|
_(3, I),
|
|
376
379
|
_(4, g)
|
|
377
|
-
],
|
|
378
|
-
var me = Object.getOwnPropertyDescriptor,
|
|
380
|
+
], f);
|
|
381
|
+
var me = Object.getOwnPropertyDescriptor, fe = (s, t, e, n) => {
|
|
379
382
|
for (var r = n > 1 ? void 0 : n ? me(t, e) : t, i = s.length - 1, c; i >= 0; i--)
|
|
380
383
|
(c = s[i]) && (r = c(r) || r);
|
|
381
384
|
return r;
|
|
382
385
|
}, d = (s, t) => (e, n) => t(e, n, s);
|
|
383
|
-
let
|
|
386
|
+
let y = class extends ne {
|
|
384
387
|
constructor(t, e, n, r) {
|
|
385
388
|
super();
|
|
386
389
|
a(this, "_remoteSyncService");
|
|
@@ -398,23 +401,23 @@ let f = class extends ne {
|
|
|
398
401
|
this._commandService.onCommandExecuted((t, e) => {
|
|
399
402
|
t.type === H.MUTATION && !(e != null && e.fromSync) && this._remoteSyncService.syncMutation({
|
|
400
403
|
mutationInfo: t
|
|
401
|
-
});
|
|
404
|
+
}, e);
|
|
402
405
|
})
|
|
403
406
|
);
|
|
404
407
|
}
|
|
405
408
|
};
|
|
406
|
-
|
|
409
|
+
y = fe([
|
|
407
410
|
d(0, C(R)),
|
|
408
411
|
d(1, m),
|
|
409
412
|
d(2, b),
|
|
410
413
|
d(3, I)
|
|
411
|
-
],
|
|
412
|
-
function
|
|
414
|
+
], y);
|
|
415
|
+
function ye() {
|
|
413
416
|
return {
|
|
414
417
|
send(s) {
|
|
415
418
|
postMessage(s);
|
|
416
419
|
},
|
|
417
|
-
onMessage: new
|
|
420
|
+
onMessage: new W((s) => {
|
|
418
421
|
const t = (e) => {
|
|
419
422
|
s.next(e.data);
|
|
420
423
|
};
|
|
@@ -427,7 +430,7 @@ function Se(s) {
|
|
|
427
430
|
send(t) {
|
|
428
431
|
s.postMessage(t);
|
|
429
432
|
},
|
|
430
|
-
onMessage: new
|
|
433
|
+
onMessage: new W((t) => {
|
|
431
434
|
const e = (n) => {
|
|
432
435
|
t.next(n.data);
|
|
433
436
|
};
|
|
@@ -440,12 +443,12 @@ var be = Object.getOwnPropertyDescriptor, J = (s, t, e, n) => {
|
|
|
440
443
|
(c = s[i]) && (r = c(r) || r);
|
|
441
444
|
return r;
|
|
442
445
|
}, S = (s, t) => (e, n) => t(e, n, s), P;
|
|
443
|
-
let N = (P = class extends
|
|
446
|
+
let N = (P = class extends A {
|
|
444
447
|
constructor(t = $, e, n) {
|
|
445
448
|
super();
|
|
446
449
|
a(this, "_internalWorker", null);
|
|
447
450
|
this._config = t, this._injector = e, this._configService = n;
|
|
448
|
-
const { ...r } =
|
|
451
|
+
const { ...r } = V(
|
|
449
452
|
{},
|
|
450
453
|
$,
|
|
451
454
|
this._config
|
|
@@ -469,20 +472,20 @@ let N = (P = class extends V {
|
|
|
469
472
|
useFactory: () => new K(n)
|
|
470
473
|
}
|
|
471
474
|
],
|
|
472
|
-
[
|
|
475
|
+
[f],
|
|
473
476
|
[g, { useClass: M }]
|
|
474
|
-
].forEach((i) => this._injector.add(i)), this._injector.get(
|
|
477
|
+
].forEach((i) => this._injector.add(i)), this._injector.get(f);
|
|
475
478
|
}
|
|
476
479
|
}, a(P, "pluginName", "UNIVER_RPC_MAIN_THREAD_PLUGIN"), P);
|
|
477
480
|
N = J([
|
|
478
481
|
S(1, C(R)),
|
|
479
|
-
S(2,
|
|
482
|
+
S(2, F)
|
|
480
483
|
], N);
|
|
481
484
|
var U;
|
|
482
|
-
let x = (U = class extends
|
|
485
|
+
let x = (U = class extends A {
|
|
483
486
|
constructor(s = j, t, e) {
|
|
484
487
|
super(), this._config = s, this._injector = t, this._configService = e;
|
|
485
|
-
const { ...n } =
|
|
488
|
+
const { ...n } = V(
|
|
486
489
|
{},
|
|
487
490
|
j,
|
|
488
491
|
this._config
|
|
@@ -491,27 +494,27 @@ let x = (U = class extends V {
|
|
|
491
494
|
}
|
|
492
495
|
onStarting() {
|
|
493
496
|
[
|
|
494
|
-
[
|
|
497
|
+
[y],
|
|
495
498
|
[
|
|
496
499
|
I,
|
|
497
500
|
{
|
|
498
|
-
useFactory: () => new K(
|
|
501
|
+
useFactory: () => new K(ye())
|
|
499
502
|
}
|
|
500
503
|
],
|
|
501
504
|
[m, { useClass: q }]
|
|
502
|
-
].forEach((s) => this._injector.add(s)), this._injector.get(
|
|
505
|
+
].forEach((s) => this._injector.add(s)), this._injector.get(y);
|
|
503
506
|
}
|
|
504
507
|
}, a(U, "pluginName", "UNIVER_RPC_WORKER_THREAD_PLUGIN"), U);
|
|
505
508
|
x = J([
|
|
506
509
|
S(1, C(R)),
|
|
507
|
-
S(2,
|
|
510
|
+
S(2, F)
|
|
508
511
|
], x);
|
|
509
512
|
export {
|
|
510
513
|
de as ChannelClient,
|
|
511
514
|
pe as ChannelServer,
|
|
512
515
|
K as ChannelService,
|
|
513
|
-
|
|
514
|
-
|
|
516
|
+
f as DataSyncPrimaryController,
|
|
517
|
+
y as DataSyncReplicaController,
|
|
515
518
|
I as IRPCChannelService,
|
|
516
519
|
m as IRemoteInstanceService,
|
|
517
520
|
g as IRemoteSyncService,
|
package/lib/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
var X = Object.defineProperty;
|
|
2
2
|
var Z = (s, t, e) => t in s ? X(s, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : s[t] = e;
|
|
3
3
|
var a = (s, t, e) => Z(s, typeof t != "symbol" ? t + "" : t, e);
|
|
4
|
-
import { createIdentifier as k, UniverInstanceType as u, ICommandService as b, IUniverInstanceService as L, ILogService as ee, RxDisposable as
|
|
4
|
+
import { createIdentifier as k, UniverInstanceType as u, ICommandService as b, IUniverInstanceService as L, ILogService as ee, RxDisposable as O, Inject as C, Injector as R, toDisposable as te, CommandType as H, Disposable as ne, Plugin as A, merge as V, IConfigService as F } from "@univerjs/core";
|
|
5
5
|
import { takeUntil as v, filter as se, take as re } from "rxjs/operators";
|
|
6
|
-
import { BehaviorSubject as ie, firstValueFrom as ce, Observable as
|
|
6
|
+
import { BehaviorSubject as ie, firstValueFrom as ce, Observable as W, isObservable as oe, of as ae, shareReplay as z } from "rxjs";
|
|
7
7
|
const he = "rpc.main-thread.config", $ = {}, le = "rpc.worker-thread.config", j = {};
|
|
8
8
|
var _e = Object.getOwnPropertyDescriptor, G = (s, t, e, n) => {
|
|
9
9
|
for (var r = n > 1 ? void 0 : n ? _e(t, e) : t, i = s.length - 1, c; i >= 0; i--)
|
|
@@ -15,8 +15,10 @@ let M = class {
|
|
|
15
15
|
constructor(s) {
|
|
16
16
|
this._commandService = s;
|
|
17
17
|
}
|
|
18
|
-
async syncMutation(s) {
|
|
18
|
+
async syncMutation(s, t) {
|
|
19
|
+
const { fromCollab: e, ...n } = t || {};
|
|
19
20
|
return this._commandService.syncExecuteCommand(s.mutationInfo.id, s.mutationInfo.params, {
|
|
21
|
+
...n,
|
|
20
22
|
onlyLocal: !0,
|
|
21
23
|
fromSync: !0
|
|
22
24
|
});
|
|
@@ -33,8 +35,8 @@ let q = class {
|
|
|
33
35
|
whenReady() {
|
|
34
36
|
return Promise.resolve(!0);
|
|
35
37
|
}
|
|
36
|
-
async syncMutation(s) {
|
|
37
|
-
return this._applyMutation(s.mutationInfo);
|
|
38
|
+
async syncMutation(s, t) {
|
|
39
|
+
return this._applyMutation(s.mutationInfo, t);
|
|
38
40
|
}
|
|
39
41
|
async createInstance(s) {
|
|
40
42
|
this._logService.debug(`[WebWorkerRemoteInstanceService]: Creating instance with id ${s.unitID}`);
|
|
@@ -52,9 +54,10 @@ let q = class {
|
|
|
52
54
|
async disposeInstance(s) {
|
|
53
55
|
return this._logService.debug(`[WebWorkerRemoteInstanceService]: Disposing instance with id ${s.unitID}`), this._univerInstanceService.disposeUnit(s.unitID);
|
|
54
56
|
}
|
|
55
|
-
_applyMutation(s) {
|
|
56
|
-
const { id:
|
|
57
|
-
return this._commandService.syncExecuteCommand(
|
|
57
|
+
_applyMutation(s, t) {
|
|
58
|
+
const { id: e, params: n } = s, { fromCollab: r, ...i } = t || {};
|
|
59
|
+
return this._commandService.syncExecuteCommand(e, n, {
|
|
60
|
+
...i,
|
|
58
61
|
onlyLocal: !0,
|
|
59
62
|
fromSync: !0
|
|
60
63
|
});
|
|
@@ -99,7 +102,7 @@ function B(s) {
|
|
|
99
102
|
function ue(s) {
|
|
100
103
|
return s.endsWith("$");
|
|
101
104
|
}
|
|
102
|
-
class de extends
|
|
105
|
+
class de extends O {
|
|
103
106
|
constructor(e) {
|
|
104
107
|
super();
|
|
105
108
|
a(this, "_initialized", new ie(!1));
|
|
@@ -156,7 +159,7 @@ class de extends W {
|
|
|
156
159
|
});
|
|
157
160
|
}
|
|
158
161
|
_remoteSubscribe(e, n, r) {
|
|
159
|
-
return new
|
|
162
|
+
return new W((i) => {
|
|
160
163
|
let c = -1;
|
|
161
164
|
return this._whenReady().then(() => {
|
|
162
165
|
c = ++this._lastRequestCounter;
|
|
@@ -213,7 +216,7 @@ class de extends W {
|
|
|
213
216
|
}
|
|
214
217
|
}
|
|
215
218
|
}
|
|
216
|
-
class pe extends
|
|
219
|
+
class pe extends O {
|
|
217
220
|
constructor(e) {
|
|
218
221
|
super();
|
|
219
222
|
a(this, "_channels", /* @__PURE__ */ new Map());
|
|
@@ -324,7 +327,7 @@ var ve = Object.getOwnPropertyDescriptor, ge = (s, t, e, n) => {
|
|
|
324
327
|
(c = s[i]) && (r = c(r) || r);
|
|
325
328
|
return r;
|
|
326
329
|
}, _ = (s, t) => (e, n) => t(e, n, s);
|
|
327
|
-
let
|
|
330
|
+
let f = class extends O {
|
|
328
331
|
constructor(t, e, n, r, i) {
|
|
329
332
|
super();
|
|
330
333
|
a(this, "_remoteInstanceService");
|
|
@@ -364,23 +367,23 @@ let y = class extends W {
|
|
|
364
367
|
n === H.MUTATION && // only sync mutations to the worker thread
|
|
365
368
|
(!c || this._syncingUnits.has(c)) && // do not sync mutations from the web worker back to the web worker
|
|
366
369
|
!(e != null && e.fromSync) && // do not sync mutations those are not meant to be synced
|
|
367
|
-
this._syncingMutations.has(i) && this._remoteInstanceService.syncMutation({ mutationInfo: t });
|
|
370
|
+
this._syncingMutations.has(i) && this._remoteInstanceService.syncMutation({ mutationInfo: t }, e);
|
|
368
371
|
}));
|
|
369
372
|
}
|
|
370
373
|
};
|
|
371
|
-
|
|
374
|
+
f = ge([
|
|
372
375
|
_(0, C(R)),
|
|
373
376
|
_(1, b),
|
|
374
377
|
_(2, L),
|
|
375
378
|
_(3, I),
|
|
376
379
|
_(4, g)
|
|
377
|
-
],
|
|
378
|
-
var me = Object.getOwnPropertyDescriptor,
|
|
380
|
+
], f);
|
|
381
|
+
var me = Object.getOwnPropertyDescriptor, fe = (s, t, e, n) => {
|
|
379
382
|
for (var r = n > 1 ? void 0 : n ? me(t, e) : t, i = s.length - 1, c; i >= 0; i--)
|
|
380
383
|
(c = s[i]) && (r = c(r) || r);
|
|
381
384
|
return r;
|
|
382
385
|
}, d = (s, t) => (e, n) => t(e, n, s);
|
|
383
|
-
let
|
|
386
|
+
let y = class extends ne {
|
|
384
387
|
constructor(t, e, n, r) {
|
|
385
388
|
super();
|
|
386
389
|
a(this, "_remoteSyncService");
|
|
@@ -398,23 +401,23 @@ let f = class extends ne {
|
|
|
398
401
|
this._commandService.onCommandExecuted((t, e) => {
|
|
399
402
|
t.type === H.MUTATION && !(e != null && e.fromSync) && this._remoteSyncService.syncMutation({
|
|
400
403
|
mutationInfo: t
|
|
401
|
-
});
|
|
404
|
+
}, e);
|
|
402
405
|
})
|
|
403
406
|
);
|
|
404
407
|
}
|
|
405
408
|
};
|
|
406
|
-
|
|
409
|
+
y = fe([
|
|
407
410
|
d(0, C(R)),
|
|
408
411
|
d(1, m),
|
|
409
412
|
d(2, b),
|
|
410
413
|
d(3, I)
|
|
411
|
-
],
|
|
412
|
-
function
|
|
414
|
+
], y);
|
|
415
|
+
function ye() {
|
|
413
416
|
return {
|
|
414
417
|
send(s) {
|
|
415
418
|
postMessage(s);
|
|
416
419
|
},
|
|
417
|
-
onMessage: new
|
|
420
|
+
onMessage: new W((s) => {
|
|
418
421
|
const t = (e) => {
|
|
419
422
|
s.next(e.data);
|
|
420
423
|
};
|
|
@@ -427,7 +430,7 @@ function Se(s) {
|
|
|
427
430
|
send(t) {
|
|
428
431
|
s.postMessage(t);
|
|
429
432
|
},
|
|
430
|
-
onMessage: new
|
|
433
|
+
onMessage: new W((t) => {
|
|
431
434
|
const e = (n) => {
|
|
432
435
|
t.next(n.data);
|
|
433
436
|
};
|
|
@@ -440,12 +443,12 @@ var be = Object.getOwnPropertyDescriptor, J = (s, t, e, n) => {
|
|
|
440
443
|
(c = s[i]) && (r = c(r) || r);
|
|
441
444
|
return r;
|
|
442
445
|
}, S = (s, t) => (e, n) => t(e, n, s), P;
|
|
443
|
-
let N = (P = class extends
|
|
446
|
+
let N = (P = class extends A {
|
|
444
447
|
constructor(t = $, e, n) {
|
|
445
448
|
super();
|
|
446
449
|
a(this, "_internalWorker", null);
|
|
447
450
|
this._config = t, this._injector = e, this._configService = n;
|
|
448
|
-
const { ...r } =
|
|
451
|
+
const { ...r } = V(
|
|
449
452
|
{},
|
|
450
453
|
$,
|
|
451
454
|
this._config
|
|
@@ -469,20 +472,20 @@ let N = (P = class extends V {
|
|
|
469
472
|
useFactory: () => new K(n)
|
|
470
473
|
}
|
|
471
474
|
],
|
|
472
|
-
[
|
|
475
|
+
[f],
|
|
473
476
|
[g, { useClass: M }]
|
|
474
|
-
].forEach((i) => this._injector.add(i)), this._injector.get(
|
|
477
|
+
].forEach((i) => this._injector.add(i)), this._injector.get(f);
|
|
475
478
|
}
|
|
476
479
|
}, a(P, "pluginName", "UNIVER_RPC_MAIN_THREAD_PLUGIN"), P);
|
|
477
480
|
N = J([
|
|
478
481
|
S(1, C(R)),
|
|
479
|
-
S(2,
|
|
482
|
+
S(2, F)
|
|
480
483
|
], N);
|
|
481
484
|
var U;
|
|
482
|
-
let x = (U = class extends
|
|
485
|
+
let x = (U = class extends A {
|
|
483
486
|
constructor(s = j, t, e) {
|
|
484
487
|
super(), this._config = s, this._injector = t, this._configService = e;
|
|
485
|
-
const { ...n } =
|
|
488
|
+
const { ...n } = V(
|
|
486
489
|
{},
|
|
487
490
|
j,
|
|
488
491
|
this._config
|
|
@@ -491,27 +494,27 @@ let x = (U = class extends V {
|
|
|
491
494
|
}
|
|
492
495
|
onStarting() {
|
|
493
496
|
[
|
|
494
|
-
[
|
|
497
|
+
[y],
|
|
495
498
|
[
|
|
496
499
|
I,
|
|
497
500
|
{
|
|
498
|
-
useFactory: () => new K(
|
|
501
|
+
useFactory: () => new K(ye())
|
|
499
502
|
}
|
|
500
503
|
],
|
|
501
504
|
[m, { useClass: q }]
|
|
502
|
-
].forEach((s) => this._injector.add(s)), this._injector.get(
|
|
505
|
+
].forEach((s) => this._injector.add(s)), this._injector.get(y);
|
|
503
506
|
}
|
|
504
507
|
}, a(U, "pluginName", "UNIVER_RPC_WORKER_THREAD_PLUGIN"), U);
|
|
505
508
|
x = J([
|
|
506
509
|
S(1, C(R)),
|
|
507
|
-
S(2,
|
|
510
|
+
S(2, F)
|
|
508
511
|
], x);
|
|
509
512
|
export {
|
|
510
513
|
de as ChannelClient,
|
|
511
514
|
pe as ChannelServer,
|
|
512
515
|
K as ChannelService,
|
|
513
|
-
|
|
514
|
-
|
|
516
|
+
f as DataSyncPrimaryController,
|
|
517
|
+
y as DataSyncReplicaController,
|
|
515
518
|
I as IRPCChannelService,
|
|
516
519
|
m as IRemoteInstanceService,
|
|
517
520
|
g as IRemoteSyncService,
|
|
@@ -13,14 +13,14 @@ export declare const IRemoteSyncService: import('@wendellhu/redi').IdentifierDec
|
|
|
13
13
|
export interface IRemoteSyncService {
|
|
14
14
|
syncMutation(params: {
|
|
15
15
|
mutationInfo: IMutationInfo;
|
|
16
|
-
}): Promise<boolean>;
|
|
16
|
+
}, options?: IExecutionOptions): Promise<boolean>;
|
|
17
17
|
}
|
|
18
18
|
export declare class RemoteSyncPrimaryService implements IRemoteSyncService {
|
|
19
19
|
private readonly _commandService;
|
|
20
20
|
constructor(_commandService: ICommandService);
|
|
21
21
|
syncMutation(params: {
|
|
22
22
|
mutationInfo: IMutationInfo;
|
|
23
|
-
}): Promise<boolean>;
|
|
23
|
+
}, options?: IExecutionOptions): Promise<boolean>;
|
|
24
24
|
}
|
|
25
25
|
export declare const RemoteInstanceServiceName = "univer.remote-instance-service";
|
|
26
26
|
/**
|
|
@@ -43,7 +43,7 @@ export interface IRemoteInstanceService {
|
|
|
43
43
|
}): Promise<boolean>;
|
|
44
44
|
syncMutation(params: {
|
|
45
45
|
mutationInfo: IMutationInfo;
|
|
46
|
-
}): Promise<boolean>;
|
|
46
|
+
}, options?: IExecutionOptions): Promise<boolean>;
|
|
47
47
|
}
|
|
48
48
|
export declare class WebWorkerRemoteInstanceService implements IRemoteInstanceService {
|
|
49
49
|
protected readonly _univerInstanceService: IUniverInstanceService;
|
|
@@ -53,7 +53,7 @@ export declare class WebWorkerRemoteInstanceService implements IRemoteInstanceSe
|
|
|
53
53
|
whenReady(): Promise<true>;
|
|
54
54
|
syncMutation(params: {
|
|
55
55
|
mutationInfo: IMutationInfo;
|
|
56
|
-
}): Promise<boolean>;
|
|
56
|
+
}, options?: IExecutionOptions): Promise<boolean>;
|
|
57
57
|
createInstance(params: {
|
|
58
58
|
unitID: string;
|
|
59
59
|
type: UniverInstanceType;
|
|
@@ -62,5 +62,5 @@ export declare class WebWorkerRemoteInstanceService implements IRemoteInstanceSe
|
|
|
62
62
|
disposeInstance(params: {
|
|
63
63
|
unitID: string;
|
|
64
64
|
}): Promise<boolean>;
|
|
65
|
-
protected _applyMutation(mutationInfo: IMutationInfo): boolean;
|
|
65
|
+
protected _applyMutation(mutationInfo: IMutationInfo, options?: IExecutionOptions): boolean;
|
|
66
66
|
}
|
package/lib/umd/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(r,a){typeof exports=="object"&&typeof module<"u"?a(exports,require("@univerjs/core"),require("rxjs/operators"),require("rxjs")):typeof define=="function"&&define.amd?define(["exports","@univerjs/core","rxjs/operators","rxjs"],a):(r=typeof globalThis<"u"?globalThis:r||self,a(r.UniverRpc={},r.UniverCore,r.rxjs.operators,r.rxjs))})(this,(function(r,a,u,d){"use strict";var J=Object.defineProperty;var Q=(r,a,u)=>a in r?J(r,a,{enumerable:!0,configurable:!0,writable:!0,value:u}):r[a]=u;var h=(r,a,u)=>Q(r,typeof a!="symbol"?a+"":a,u);var U,E;const W="rpc.main-thread.config",k={},D="rpc.worker-thread.config",q={};var L=Object.getOwnPropertyDescriptor,O=(c,t,e,n)=>{for(var s=n>1?void 0:n?L(t,e):t,i=c.length-1,o;i>=0;i--)(o=c[i])&&(s=o(s)||s);return s},g=(c,t)=>(e,n)=>t(e,n,c);const C="rpc.remote-sync.service",v=a.createIdentifier(C);r.RemoteSyncPrimaryService=class{constructor(t){this._commandService=t}async syncMutation(t){return this._commandService.syncExecuteCommand(t.mutationInfo.id,t.mutationInfo.params,{onlyLocal:!0,fromSync:!0})}},r.RemoteSyncPrimaryService=O([g(0,a.ICommandService)],r.RemoteSyncPrimaryService);const R="univer.remote-instance-service",p=a.createIdentifier(R);r.WebWorkerRemoteInstanceService=class{constructor(t,e,n){this._univerInstanceService=t,this._commandService=e,this._logService=n}whenReady(){return Promise.resolve(!0)}async syncMutation(t){return this._applyMutation(t.mutationInfo)}async createInstance(t){this._logService.debug(`[WebWorkerRemoteInstanceService]: Creating instance with id ${t.unitID}`);const{type:e,snapshot:n}=t;try{if(e===a.UniverInstanceType.UNIVER_SHEET)return this._univerInstanceService.createUnit(a.UniverInstanceType.UNIVER_SHEET,n),!0;throw new Error(`[WebWorkerRemoteInstanceService]: cannot create replica for document type: ${e}.`)}catch(s){throw s instanceof Error?s:new TypeError(`${s}`)}}async disposeInstance(t){return this._logService.debug(`[WebWorkerRemoteInstanceService]: Disposing instance with id ${t.unitID}`),this._univerInstanceService.disposeUnit(t.unitID)}_applyMutation(t){const{id:e,params:n}=t;return this._commandService.syncExecuteCommand(e,n,{onlyLocal:!0,fromSync:!0})}},r.WebWorkerRemoteInstanceService=O([g(0,a.IUniverInstanceService),g(1,a.ICommandService),g(2,a.ILogService)],r.WebWorkerRemoteInstanceService);function b(c){const t=c;return new class{call(e,n){const s=t[e];if(typeof s=="function"){let i=n?s.apply(t,n):s.call(t);return i instanceof Promise||(i=Promise.resolve(i)),i}throw new Error(`[RPC]: method not found for ${e}!`)}subscribe(e,n){const s=t[e];if(typeof s=="function"){const i=n?s.apply(t,n):s.call(t);return d.isObservable(i)?i:d.of(i)}throw new Error(`[RPC]: observable method not found for ${e}!`)}}}function P(c){return new Proxy({},{get(t,e){if(e!=="dispose")return function(...n){return H(e)?c.subscribe(e,n):c.call(e,n)}}})}function H(c){return c.endsWith("$")}class j extends a.RxDisposable{constructor(e){super();h(this,"_initialized",new d.BehaviorSubject(!1));h(this,"_lastRequestCounter",0);h(this,"_pendingRequests",new Map);this._protocol=e,this._protocol.send({type:50}),this._protocol.onMessage.pipe(u.takeUntil(this.dispose$)).subscribe(n=>this._onMessage(n))}dispose(){this._pendingRequests.clear()}getChannel(e){const n=this;return{call(s,i){return n._disposed?Promise.reject():n._remoteCall(e,s,i)},subscribe(s,i){if(n._disposed)throw new Error("[ChannelClient]: client is disposed!");return n._remoteSubscribe(e,s,i)}}}_whenReady(){return d.firstValueFrom(this._initialized.pipe(u.filter(e=>e),u.take(1)))}async _remoteCall(e,n,s){await this._whenReady();const i=++this._lastRequestCounter,_={seq:i,type:100,channelName:e,method:n,args:s},l=this;return new Promise((M,S)=>{const B={handle(T){switch(T.type){case 201:l._pendingRequests.delete(i),M(T.data);break;case 202:l._pendingRequests.delete(i),S(T.data);break;default:throw new Error("[ChannelClient]: unknown response type!")}}};this._pendingRequests.set(i,B),this._sendRequest(_)})}_remoteSubscribe(e,n,s){return new d.Observable(i=>{let o=-1;return this._whenReady().then(()=>{o=++this._lastRequestCounter;const l={seq:o,type:101,channelName:e,method:n,args:s},M={handle(S){switch(S.type){case 300:i.next(S.data);break;case 301:i.error(S.data);break;case 302:i.complete();break;default:throw new Error("[ChannelClient]: unknown response type!")}}};this._pendingRequests.set(o,M),this._sendRequest(l)}),()=>{if(o===-1)return;const _={type:102,seq:o,channelName:e,method:n};this._sendRequest(_)}})}_sendRequest(e){this._protocol.send(e)}_onMessage(e){var i;const{type:n,seq:s}=e;switch(n){case 0:this._initialized.next(!0);break;case 201:case 202:case 300:case 302:case 301:{const{_pendingRequests:o}=this;(i=o.get(s))==null||i.handle(e),n!==300&&o.delete(s);break}}}}class N extends a.RxDisposable{constructor(e){super();h(this,"_channels",new Map);h(this,"_subscriptions",new Map);this._protocol=e,this._protocol.onMessage.pipe(u.takeUntil(this.dispose$)).subscribe(n=>this._onRequest(n)),this._sendInitialize()}dispose(){super.dispose(),this._subscriptions.clear(),this._channels.clear()}registerChannel(e,n){this._channels.set(e,n)}_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}}_sendInitialize(){this._sendResponse({seq:-1,type:0})}_onMethodCall(e){const{channelName:n,method:s,args:i}=e,o=this._channels.get(n);let _;try{if(!o)throw new Error(`[ChannelServer]: Channel ${n} not found!`);_=i?o.call(s,i):o.call(s)}catch(l){_=Promise.reject(l)}_.then(l=>{this._sendResponse({seq:e.seq,type:201,data:l})}).catch(l=>{l instanceof Error?this._sendResponse({seq:e.seq,type:202,data:l.message}):this._sendResponse({seq:e.seq,type:202,data:String(l)})})}_onSubscribe(e){const{channelName:n,seq:s}=e,i=this._channels.get(n);try{if(!i)throw new Error(`[ChannelServer]: Channel ${n} not found!`);const _=i.subscribe(e.method,e.args).subscribe({next:l=>{this._sendResponse({seq:s,type:300,data:l})},error:l=>{this._sendResponse({seq:s,type:301,data:l.message}),this._sendResponse({seq:s,type:302})},complete:()=>{this._sendResponse({seq:s,type:302})}});this._subscriptions.set(e.seq,_)}catch(o){o instanceof Error?this._sendResponse({seq:e.seq,type:301,data:o.message}):this._sendResponse({seq:e.seq,type:301,data:String(o)})}}_onUnsubscribe(e){const n=this._subscriptions.get(e.seq);n&&(n.unsubscribe(),this._subscriptions.delete(e.seq))}_sendResponse(e){this._protocol.send(e)}}const m=a.createIdentifier("IRPCChannelService");class w{constructor(t){h(this,"_client");h(this,"_server");this._client=new j(t),this._server=new N(t)}dispose(){this._client.dispose(),this._server.dispose()}requestChannel(t){return this._client.getChannel(t)}registerChannel(t,e){this._server.registerChannel(t,e)}}var A=Object.getOwnPropertyDescriptor,G=(c,t,e,n)=>{for(var s=n>1?void 0:n?A(t,e):t,i=c.length-1,o;i>=0;i--)(o=c[i])&&(s=o(s)||s);return s},y=(c,t)=>(e,n)=>t(e,n,c);r.DataSyncPrimaryController=class extends a.RxDisposable{constructor(e,n,s,i,o){super();h(this,"_remoteInstanceService");h(this,"_syncingUnits",new Set);h(this,"_syncingMutations",new Set);this._injector=e,this._commandService=n,this._univerInstanceService=s,this._rpcChannelService=i,this._remoteSyncService=o,this._initRPCChannels(),this._init()}registerSyncingMutations(e){this._syncingMutations.add(e.id)}syncUnit(e){return this._syncingUnits.add(e),a.toDisposable(()=>this._syncingUnits.delete(e))}_initRPCChannels(){this._rpcChannelService.registerChannel(C,b(this._remoteSyncService)),this._injector.add([p,{useFactory:()=>P(this._rpcChannelService.requestChannel(R))}]),this._remoteInstanceService=this._injector.get(p)}_init(){this._univerInstanceService.getTypeOfUnitAdded$(a.UniverInstanceType.UNIVER_SHEET).pipe(u.takeUntil(this.dispose$)).subscribe(e=>{this._syncingUnits.add(e.getUnitId()),this._remoteInstanceService.createInstance({unitID:e.getUnitId(),type:a.UniverInstanceType.UNIVER_SHEET,snapshot:e.getSnapshot()})}),this._univerInstanceService.getTypeOfUnitDisposed$(a.UniverInstanceType.UNIVER_SHEET).pipe(u.takeUntil(this.dispose$)).subscribe(e=>{this._syncingUnits.delete(e.getUnitId()),this._remoteInstanceService.disposeInstance({unitID:e.getUnitId()})}),this.disposeWithMe(this._commandService.onCommandExecuted((e,n)=>{const{type:s,params:i,id:o}=e,_=(i==null?void 0:i.unitId)||"";s===a.CommandType.MUTATION&&(!_||this._syncingUnits.has(_))&&!(n!=null&&n.fromSync)&&this._syncingMutations.has(o)&&this._remoteInstanceService.syncMutation({mutationInfo:e})}))}},r.DataSyncPrimaryController=G([y(0,a.Inject(a.Injector)),y(1,a.ICommandService),y(2,a.IUniverInstanceService),y(3,m),y(4,v)],r.DataSyncPrimaryController);var F=Object.getOwnPropertyDescriptor,V=(c,t,e,n)=>{for(var s=n>1?void 0:n?F(t,e):t,i=c.length-1,o;i>=0;i--)(o=c[i])&&(s=o(s)||s);return s},f=(c,t)=>(e,n)=>t(e,n,c);r.DataSyncReplicaController=class extends a.Disposable{constructor(e,n,s,i){super();h(this,"_remoteSyncService");this._injector=e,this._remoteInstanceService=n,this._commandService=s,this._rpcChannelService=i,this._initRPCChannels(),this._init()}_initRPCChannels(){this._rpcChannelService.registerChannel(R,b(this._remoteInstanceService)),this._injector.add([v,{useFactory:()=>P(this._rpcChannelService.requestChannel(C))}]),this._remoteSyncService=this._injector.get(v)}_init(){this.disposeWithMe(this._commandService.onCommandExecuted((e,n)=>{e.type===a.CommandType.MUTATION&&!(n!=null&&n.fromSync)&&this._remoteSyncService.syncMutation({mutationInfo:e})}))}},r.DataSyncReplicaController=V([f(0,a.Inject(a.Injector)),f(1,p),f(2,a.ICommandService),f(3,m)],r.DataSyncReplicaController);function z(){return{send(c){postMessage(c)},onMessage:new d.Observable(c=>{const t=e=>{c.next(e.data)};return addEventListener("message",t),()=>removeEventListener("message",t)}).pipe(d.shareReplay(1))}}function K(c){return{send(t){c.postMessage(t)},onMessage:new d.Observable(t=>{const e=n=>{t.next(n.data)};return c.addEventListener("message",e),()=>c.removeEventListener("message",e)}).pipe(d.shareReplay(1))}}var Y=Object.getOwnPropertyDescriptor,$=(c,t,e,n)=>{for(var s=n>1?void 0:n?Y(t,e):t,i=c.length-1,o;i>=0;i--)(o=c[i])&&(s=o(s)||s);return s},I=(c,t)=>(e,n)=>t(e,n,c);r.UniverRPCMainThreadPlugin=(U=class extends a.Plugin{constructor(e=k,n,s){super();h(this,"_internalWorker",null);this._config=e,this._injector=n,this._configService=s;const{...i}=a.merge({},k,this._config);this._configService.setConfig(W,i)}dispose(){super.dispose(),this._internalWorker&&(this._internalWorker.terminate(),this._internalWorker=null)}onStarting(){const{workerURL:e}=this._config;if(!e)throw new Error("[UniverRPCMainThreadPlugin]: The workerURL is required for the RPC main thread plugin.");const n=e instanceof Worker?e:new Worker(e);this._internalWorker=e instanceof Worker?null:n;const s=K(n);[[m,{useFactory:()=>new w(s)}],[r.DataSyncPrimaryController],[v,{useClass:r.RemoteSyncPrimaryService}]].forEach(o=>this._injector.add(o)),this._injector.get(r.DataSyncPrimaryController)}},h(U,"pluginName","UNIVER_RPC_MAIN_THREAD_PLUGIN"),U),r.UniverRPCMainThreadPlugin=$([I(1,a.Inject(a.Injector)),I(2,a.IConfigService)],r.UniverRPCMainThreadPlugin),r.UniverRPCWorkerThreadPlugin=(E=class extends a.Plugin{constructor(t=q,e,n){super(),this._config=t,this._injector=e,this._configService=n;const{...s}=a.merge({},q,this._config);this._configService.setConfig(D,s)}onStarting(){[[r.DataSyncReplicaController],[m,{useFactory:()=>new w(z())}],[p,{useClass:r.WebWorkerRemoteInstanceService}]].forEach(t=>this._injector.add(t)),this._injector.get(r.DataSyncReplicaController)}},h(E,"pluginName","UNIVER_RPC_WORKER_THREAD_PLUGIN"),E),r.UniverRPCWorkerThreadPlugin=$([I(1,a.Inject(a.Injector)),I(2,a.IConfigService)],r.UniverRPCWorkerThreadPlugin),r.ChannelClient=j,r.ChannelServer=N,r.ChannelService=w,r.IRPCChannelService=m,r.IRemoteInstanceService=p,r.IRemoteSyncService=v,r.PLUGIN_CONFIG_KEY_MAIN_THREAD=W,r.PLUGIN_CONFIG_KEY_WORKER_THREAD=D,r.RemoteInstanceServiceName=R,r.RemoteSyncServiceName=C,r.fromModule=b,r.toModule=P,Object.defineProperty(r,Symbol.toStringTag,{value:"Module"})}));
|
|
1
|
+
(function(r,a){typeof exports=="object"&&typeof module<"u"?a(exports,require("@univerjs/core"),require("rxjs/operators"),require("rxjs")):typeof define=="function"&&define.amd?define(["exports","@univerjs/core","rxjs/operators","rxjs"],a):(r=typeof globalThis<"u"?globalThis:r||self,a(r.UniverRpc={},r.UniverCore,r.rxjs.operators,r.rxjs))})(this,(function(r,a,u,d){"use strict";var J=Object.defineProperty;var Q=(r,a,u)=>a in r?J(r,a,{enumerable:!0,configurable:!0,writable:!0,value:u}):r[a]=u;var h=(r,a,u)=>Q(r,typeof a!="symbol"?a+"":a,u);var U,E;const W="rpc.main-thread.config",k={},D="rpc.worker-thread.config",q={};var L=Object.getOwnPropertyDescriptor,O=(c,t,e,n)=>{for(var s=n>1?void 0:n?L(t,e):t,i=c.length-1,o;i>=0;i--)(o=c[i])&&(s=o(s)||s);return s},g=(c,t)=>(e,n)=>t(e,n,c);const C="rpc.remote-sync.service",v=a.createIdentifier(C);r.RemoteSyncPrimaryService=class{constructor(t){this._commandService=t}async syncMutation(t,e){const{fromCollab:n,...s}=e||{};return this._commandService.syncExecuteCommand(t.mutationInfo.id,t.mutationInfo.params,{...s,onlyLocal:!0,fromSync:!0})}},r.RemoteSyncPrimaryService=O([g(0,a.ICommandService)],r.RemoteSyncPrimaryService);const f="univer.remote-instance-service",m=a.createIdentifier(f);r.WebWorkerRemoteInstanceService=class{constructor(t,e,n){this._univerInstanceService=t,this._commandService=e,this._logService=n}whenReady(){return Promise.resolve(!0)}async syncMutation(t,e){return this._applyMutation(t.mutationInfo,e)}async createInstance(t){this._logService.debug(`[WebWorkerRemoteInstanceService]: Creating instance with id ${t.unitID}`);const{type:e,snapshot:n}=t;try{if(e===a.UniverInstanceType.UNIVER_SHEET)return this._univerInstanceService.createUnit(a.UniverInstanceType.UNIVER_SHEET,n),!0;throw new Error(`[WebWorkerRemoteInstanceService]: cannot create replica for document type: ${e}.`)}catch(s){throw s instanceof Error?s:new TypeError(`${s}`)}}async disposeInstance(t){return this._logService.debug(`[WebWorkerRemoteInstanceService]: Disposing instance with id ${t.unitID}`),this._univerInstanceService.disposeUnit(t.unitID)}_applyMutation(t,e){const{id:n,params:s}=t,{fromCollab:i,...o}=e||{};return this._commandService.syncExecuteCommand(n,s,{...o,onlyLocal:!0,fromSync:!0})}},r.WebWorkerRemoteInstanceService=O([g(0,a.IUniverInstanceService),g(1,a.ICommandService),g(2,a.ILogService)],r.WebWorkerRemoteInstanceService);function b(c){const t=c;return new class{call(e,n){const s=t[e];if(typeof s=="function"){let i=n?s.apply(t,n):s.call(t);return i instanceof Promise||(i=Promise.resolve(i)),i}throw new Error(`[RPC]: method not found for ${e}!`)}subscribe(e,n){const s=t[e];if(typeof s=="function"){const i=n?s.apply(t,n):s.call(t);return d.isObservable(i)?i:d.of(i)}throw new Error(`[RPC]: observable method not found for ${e}!`)}}}function P(c){return new Proxy({},{get(t,e){if(e!=="dispose")return function(...n){return H(e)?c.subscribe(e,n):c.call(e,n)}}})}function H(c){return c.endsWith("$")}class j extends a.RxDisposable{constructor(e){super();h(this,"_initialized",new d.BehaviorSubject(!1));h(this,"_lastRequestCounter",0);h(this,"_pendingRequests",new Map);this._protocol=e,this._protocol.send({type:50}),this._protocol.onMessage.pipe(u.takeUntil(this.dispose$)).subscribe(n=>this._onMessage(n))}dispose(){this._pendingRequests.clear()}getChannel(e){const n=this;return{call(s,i){return n._disposed?Promise.reject():n._remoteCall(e,s,i)},subscribe(s,i){if(n._disposed)throw new Error("[ChannelClient]: client is disposed!");return n._remoteSubscribe(e,s,i)}}}_whenReady(){return d.firstValueFrom(this._initialized.pipe(u.filter(e=>e),u.take(1)))}async _remoteCall(e,n,s){await this._whenReady();const i=++this._lastRequestCounter,_={seq:i,type:100,channelName:e,method:n,args:s},l=this;return new Promise((M,S)=>{const B={handle(T){switch(T.type){case 201:l._pendingRequests.delete(i),M(T.data);break;case 202:l._pendingRequests.delete(i),S(T.data);break;default:throw new Error("[ChannelClient]: unknown response type!")}}};this._pendingRequests.set(i,B),this._sendRequest(_)})}_remoteSubscribe(e,n,s){return new d.Observable(i=>{let o=-1;return this._whenReady().then(()=>{o=++this._lastRequestCounter;const l={seq:o,type:101,channelName:e,method:n,args:s},M={handle(S){switch(S.type){case 300:i.next(S.data);break;case 301:i.error(S.data);break;case 302:i.complete();break;default:throw new Error("[ChannelClient]: unknown response type!")}}};this._pendingRequests.set(o,M),this._sendRequest(l)}),()=>{if(o===-1)return;const _={type:102,seq:o,channelName:e,method:n};this._sendRequest(_)}})}_sendRequest(e){this._protocol.send(e)}_onMessage(e){var i;const{type:n,seq:s}=e;switch(n){case 0:this._initialized.next(!0);break;case 201:case 202:case 300:case 302:case 301:{const{_pendingRequests:o}=this;(i=o.get(s))==null||i.handle(e),n!==300&&o.delete(s);break}}}}class N extends a.RxDisposable{constructor(e){super();h(this,"_channels",new Map);h(this,"_subscriptions",new Map);this._protocol=e,this._protocol.onMessage.pipe(u.takeUntil(this.dispose$)).subscribe(n=>this._onRequest(n)),this._sendInitialize()}dispose(){super.dispose(),this._subscriptions.clear(),this._channels.clear()}registerChannel(e,n){this._channels.set(e,n)}_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}}_sendInitialize(){this._sendResponse({seq:-1,type:0})}_onMethodCall(e){const{channelName:n,method:s,args:i}=e,o=this._channels.get(n);let _;try{if(!o)throw new Error(`[ChannelServer]: Channel ${n} not found!`);_=i?o.call(s,i):o.call(s)}catch(l){_=Promise.reject(l)}_.then(l=>{this._sendResponse({seq:e.seq,type:201,data:l})}).catch(l=>{l instanceof Error?this._sendResponse({seq:e.seq,type:202,data:l.message}):this._sendResponse({seq:e.seq,type:202,data:String(l)})})}_onSubscribe(e){const{channelName:n,seq:s}=e,i=this._channels.get(n);try{if(!i)throw new Error(`[ChannelServer]: Channel ${n} not found!`);const _=i.subscribe(e.method,e.args).subscribe({next:l=>{this._sendResponse({seq:s,type:300,data:l})},error:l=>{this._sendResponse({seq:s,type:301,data:l.message}),this._sendResponse({seq:s,type:302})},complete:()=>{this._sendResponse({seq:s,type:302})}});this._subscriptions.set(e.seq,_)}catch(o){o instanceof Error?this._sendResponse({seq:e.seq,type:301,data:o.message}):this._sendResponse({seq:e.seq,type:301,data:String(o)})}}_onUnsubscribe(e){const n=this._subscriptions.get(e.seq);n&&(n.unsubscribe(),this._subscriptions.delete(e.seq))}_sendResponse(e){this._protocol.send(e)}}const p=a.createIdentifier("IRPCChannelService");class w{constructor(t){h(this,"_client");h(this,"_server");this._client=new j(t),this._server=new N(t)}dispose(){this._client.dispose(),this._server.dispose()}requestChannel(t){return this._client.getChannel(t)}registerChannel(t,e){this._server.registerChannel(t,e)}}var A=Object.getOwnPropertyDescriptor,G=(c,t,e,n)=>{for(var s=n>1?void 0:n?A(t,e):t,i=c.length-1,o;i>=0;i--)(o=c[i])&&(s=o(s)||s);return s},y=(c,t)=>(e,n)=>t(e,n,c);r.DataSyncPrimaryController=class extends a.RxDisposable{constructor(e,n,s,i,o){super();h(this,"_remoteInstanceService");h(this,"_syncingUnits",new Set);h(this,"_syncingMutations",new Set);this._injector=e,this._commandService=n,this._univerInstanceService=s,this._rpcChannelService=i,this._remoteSyncService=o,this._initRPCChannels(),this._init()}registerSyncingMutations(e){this._syncingMutations.add(e.id)}syncUnit(e){return this._syncingUnits.add(e),a.toDisposable(()=>this._syncingUnits.delete(e))}_initRPCChannels(){this._rpcChannelService.registerChannel(C,b(this._remoteSyncService)),this._injector.add([m,{useFactory:()=>P(this._rpcChannelService.requestChannel(f))}]),this._remoteInstanceService=this._injector.get(m)}_init(){this._univerInstanceService.getTypeOfUnitAdded$(a.UniverInstanceType.UNIVER_SHEET).pipe(u.takeUntil(this.dispose$)).subscribe(e=>{this._syncingUnits.add(e.getUnitId()),this._remoteInstanceService.createInstance({unitID:e.getUnitId(),type:a.UniverInstanceType.UNIVER_SHEET,snapshot:e.getSnapshot()})}),this._univerInstanceService.getTypeOfUnitDisposed$(a.UniverInstanceType.UNIVER_SHEET).pipe(u.takeUntil(this.dispose$)).subscribe(e=>{this._syncingUnits.delete(e.getUnitId()),this._remoteInstanceService.disposeInstance({unitID:e.getUnitId()})}),this.disposeWithMe(this._commandService.onCommandExecuted((e,n)=>{const{type:s,params:i,id:o}=e,_=(i==null?void 0:i.unitId)||"";s===a.CommandType.MUTATION&&(!_||this._syncingUnits.has(_))&&!(n!=null&&n.fromSync)&&this._syncingMutations.has(o)&&this._remoteInstanceService.syncMutation({mutationInfo:e},n)}))}},r.DataSyncPrimaryController=G([y(0,a.Inject(a.Injector)),y(1,a.ICommandService),y(2,a.IUniverInstanceService),y(3,p),y(4,v)],r.DataSyncPrimaryController);var F=Object.getOwnPropertyDescriptor,V=(c,t,e,n)=>{for(var s=n>1?void 0:n?F(t,e):t,i=c.length-1,o;i>=0;i--)(o=c[i])&&(s=o(s)||s);return s},R=(c,t)=>(e,n)=>t(e,n,c);r.DataSyncReplicaController=class extends a.Disposable{constructor(e,n,s,i){super();h(this,"_remoteSyncService");this._injector=e,this._remoteInstanceService=n,this._commandService=s,this._rpcChannelService=i,this._initRPCChannels(),this._init()}_initRPCChannels(){this._rpcChannelService.registerChannel(f,b(this._remoteInstanceService)),this._injector.add([v,{useFactory:()=>P(this._rpcChannelService.requestChannel(C))}]),this._remoteSyncService=this._injector.get(v)}_init(){this.disposeWithMe(this._commandService.onCommandExecuted((e,n)=>{e.type===a.CommandType.MUTATION&&!(n!=null&&n.fromSync)&&this._remoteSyncService.syncMutation({mutationInfo:e},n)}))}},r.DataSyncReplicaController=V([R(0,a.Inject(a.Injector)),R(1,m),R(2,a.ICommandService),R(3,p)],r.DataSyncReplicaController);function z(){return{send(c){postMessage(c)},onMessage:new d.Observable(c=>{const t=e=>{c.next(e.data)};return addEventListener("message",t),()=>removeEventListener("message",t)}).pipe(d.shareReplay(1))}}function K(c){return{send(t){c.postMessage(t)},onMessage:new d.Observable(t=>{const e=n=>{t.next(n.data)};return c.addEventListener("message",e),()=>c.removeEventListener("message",e)}).pipe(d.shareReplay(1))}}var Y=Object.getOwnPropertyDescriptor,$=(c,t,e,n)=>{for(var s=n>1?void 0:n?Y(t,e):t,i=c.length-1,o;i>=0;i--)(o=c[i])&&(s=o(s)||s);return s},I=(c,t)=>(e,n)=>t(e,n,c);r.UniverRPCMainThreadPlugin=(U=class extends a.Plugin{constructor(e=k,n,s){super();h(this,"_internalWorker",null);this._config=e,this._injector=n,this._configService=s;const{...i}=a.merge({},k,this._config);this._configService.setConfig(W,i)}dispose(){super.dispose(),this._internalWorker&&(this._internalWorker.terminate(),this._internalWorker=null)}onStarting(){const{workerURL:e}=this._config;if(!e)throw new Error("[UniverRPCMainThreadPlugin]: The workerURL is required for the RPC main thread plugin.");const n=e instanceof Worker?e:new Worker(e);this._internalWorker=e instanceof Worker?null:n;const s=K(n);[[p,{useFactory:()=>new w(s)}],[r.DataSyncPrimaryController],[v,{useClass:r.RemoteSyncPrimaryService}]].forEach(o=>this._injector.add(o)),this._injector.get(r.DataSyncPrimaryController)}},h(U,"pluginName","UNIVER_RPC_MAIN_THREAD_PLUGIN"),U),r.UniverRPCMainThreadPlugin=$([I(1,a.Inject(a.Injector)),I(2,a.IConfigService)],r.UniverRPCMainThreadPlugin),r.UniverRPCWorkerThreadPlugin=(E=class extends a.Plugin{constructor(t=q,e,n){super(),this._config=t,this._injector=e,this._configService=n;const{...s}=a.merge({},q,this._config);this._configService.setConfig(D,s)}onStarting(){[[r.DataSyncReplicaController],[p,{useFactory:()=>new w(z())}],[m,{useClass:r.WebWorkerRemoteInstanceService}]].forEach(t=>this._injector.add(t)),this._injector.get(r.DataSyncReplicaController)}},h(E,"pluginName","UNIVER_RPC_WORKER_THREAD_PLUGIN"),E),r.UniverRPCWorkerThreadPlugin=$([I(1,a.Inject(a.Injector)),I(2,a.IConfigService)],r.UniverRPCWorkerThreadPlugin),r.ChannelClient=j,r.ChannelServer=N,r.ChannelService=w,r.IRPCChannelService=p,r.IRemoteInstanceService=m,r.IRemoteSyncService=v,r.PLUGIN_CONFIG_KEY_MAIN_THREAD=W,r.PLUGIN_CONFIG_KEY_WORKER_THREAD=D,r.RemoteInstanceServiceName=f,r.RemoteSyncServiceName=C,r.fromModule=b,r.toModule=P,Object.defineProperty(r,Symbol.toStringTag,{value:"Module"})}));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@univerjs/rpc",
|
|
3
|
-
"version": "0.15.
|
|
3
|
+
"version": "0.15.3-insiders.20260131-b9b8805",
|
|
4
4
|
"private": false,
|
|
5
5
|
"author": "DreamNum <developer@univer.ai>",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -47,14 +47,14 @@
|
|
|
47
47
|
"rxjs": ">=7.0.0"
|
|
48
48
|
},
|
|
49
49
|
"dependencies": {
|
|
50
|
-
"@univerjs/core": "0.15.
|
|
50
|
+
"@univerjs/core": "0.15.3-insiders.20260131-b9b8805"
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|
|
53
53
|
"rxjs": "^7.8.2",
|
|
54
54
|
"typescript": "^5.9.3",
|
|
55
55
|
"vite": "^7.3.1",
|
|
56
|
-
"vitest": "^4.0.
|
|
57
|
-
"@univerjs-infra/shared": "0.15.
|
|
56
|
+
"vitest": "^4.0.18",
|
|
57
|
+
"@univerjs-infra/shared": "0.15.3"
|
|
58
58
|
},
|
|
59
59
|
"scripts": {
|
|
60
60
|
"test": "vitest run",
|