@univerjs-pro/collaboration-worktree-client 1.0.0-insiders.20260808-70eefdd → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,95 @@
1
+ # @univerjs-pro/collaboration-worktree-client
2
+
3
+ English | [简体中文](./README.zh-CN.md)
4
+
5
+ The Worktree integration layer for the existing Univer Pro Collaboration Client. It provides Worktree-specific URLs, management APIs, merge-preview configuration, and complete-state events. It does not reimplement OT, offline state, or the ACK state machine.
6
+
7
+ ## Installation
8
+
9
+ ```bash
10
+ pnpm add \
11
+ @univerjs-pro/collaboration-worktree-client \
12
+ @univerjs-pro/collaboration \
13
+ @univerjs-pro/collaboration-client \
14
+ @univerjs-pro/collaboration-client-ui
15
+ ```
16
+
17
+ All Univer and Collaboration packages must use matching exact versions.
18
+
19
+ ## Connect to Worktree collaboration
20
+
21
+ ```ts
22
+ const worktreeConfig = createWorktreeCollaborationConfig({
23
+ origin: location.origin,
24
+ worktreeID,
25
+ });
26
+
27
+ createUniver({
28
+ collaboration: true,
29
+ plugins: [
30
+ UniverCollaborationPlugin,
31
+ [UniverCollaborationClientPlugin, {
32
+ socketService: BrowserCollaborationSocketService,
33
+ ...worktreeConfig,
34
+ }],
35
+ UniverCollaborationClientUIPlugin,
36
+ ],
37
+ });
38
+ ```
39
+
40
+ Register Collaboration plugins in `createUniver({ plugins })`; do not wait until Univer starts and call `registerPlugin()`.
41
+
42
+ ## Manage a Worktree
43
+
44
+ ```ts
45
+ const client = new WorktreeClient({ origin: location.origin });
46
+
47
+ await client.createWorktree({
48
+ worktreeID,
49
+ units: [trunkUnitID],
50
+ });
51
+ await client.markReady(worktreeID);
52
+
53
+ const evaluation = await client.evaluateUnitMerge(worktreeID, trunkUnitID);
54
+ const result = await client.mergeWorktree(worktreeID);
55
+ ```
56
+
57
+ `WorktreeClient` also provides get, add Unit, create Unit from snapshot/data, reopen, and discard. Inject `fetch` through constructor options to customize cookies, headers, or error handling.
58
+
59
+ ## Static merge preview
60
+
61
+ ```ts
62
+ if (evaluation.status === 'preview') {
63
+ const previewConfig = createWorktreeMergePreviewConfig({
64
+ origin: location.origin,
65
+ worktreeID,
66
+ preview: evaluation.preview,
67
+ });
68
+
69
+ // Pass previewConfig to a new read-only UniverCollaborationClientPlugin.
70
+ }
71
+ ```
72
+
73
+ This configuration provides an in-memory snapshot and optional Sheet blocks directly from the evaluation result, sets `enableCollaboration: false`, rejects saves, opens no WebSocket, and makes no separate resource network request.
74
+
75
+ ## Subscribe to complete state
76
+
77
+ ```ts
78
+ const events = new WorktreeEventClient({
79
+ origin: location.origin,
80
+ worktreeID,
81
+ });
82
+
83
+ const subscription = events.onChange((worktree) => {
84
+ renderStatus(worktree.status, worktree.units);
85
+ });
86
+
87
+ await events.connect();
88
+
89
+ subscription.dispose();
90
+ events.dispose();
91
+ ```
92
+
93
+ The first frame is complete `WorktreeData`. Client obtains a new one-time session ticket when reconnecting.
94
+
95
+ Use `client.setUnitRemoved(worktreeID, unitID, true)` to record removal from draft content merge, and pass `false` to undo it before ready. The application still owns formal document deletion and Trash behavior.
@@ -0,0 +1,98 @@
1
+ # @univerjs-pro/collaboration-worktree-client
2
+
3
+ [English](./README.md) | [简体中文](./README.zh-CN.md)
4
+
5
+ 现有 Univer Pro Collaboration Client 的 Worktree 集成层,提供 Worktree 专用 URL、管理 API、
6
+ 合入预览配置和完整状态事件。它不重新实现 OT、offline state 或 ACK state machine。
7
+
8
+ ## 安装
9
+
10
+ ```bash
11
+ pnpm add \
12
+ @univerjs-pro/collaboration-worktree-client \
13
+ @univerjs-pro/collaboration \
14
+ @univerjs-pro/collaboration-client \
15
+ @univerjs-pro/collaboration-client-ui
16
+ ```
17
+
18
+ 全部 Univer 和 Collaboration package 必须使用匹配的精确版本。
19
+
20
+ ## 连接 Worktree 协同
21
+
22
+ ```ts
23
+ const worktreeConfig = createWorktreeCollaborationConfig({
24
+ origin: location.origin,
25
+ worktreeID,
26
+ });
27
+
28
+ createUniver({
29
+ collaboration: true,
30
+ plugins: [
31
+ UniverCollaborationPlugin,
32
+ [UniverCollaborationClientPlugin, {
33
+ socketService: BrowserCollaborationSocketService,
34
+ ...worktreeConfig,
35
+ }],
36
+ UniverCollaborationClientUIPlugin,
37
+ ],
38
+ });
39
+ ```
40
+
41
+ Collaboration plugin 必须在 `createUniver({ plugins })` 时注册,不能等 Univer 启动后再
42
+ 调用 `registerPlugin()`。
43
+
44
+ ## 管理 Worktree
45
+
46
+ ```ts
47
+ const client = new WorktreeClient({ origin: location.origin });
48
+
49
+ await client.createWorktree({
50
+ worktreeID,
51
+ units: [trunkUnitID],
52
+ });
53
+ await client.markReady(worktreeID);
54
+
55
+ const evaluation = await client.evaluateUnitMerge(worktreeID, trunkUnitID);
56
+ const result = await client.mergeWorktree(worktreeID);
57
+ ```
58
+
59
+ `WorktreeClient` 还提供 get、add Unit、从 snapshot/data 创建 Unit、reopen 和 discard。
60
+ 需要自定义 Cookie、Header 或错误处理时,通过构造参数注入 `fetch`。
61
+
62
+ ## 静态合入预览
63
+
64
+ ```ts
65
+ if (evaluation.status === 'preview') {
66
+ const previewConfig = createWorktreeMergePreviewConfig({
67
+ origin: location.origin,
68
+ worktreeID,
69
+ preview: evaluation.preview,
70
+ });
71
+
72
+ // 将 previewConfig 传给新的只读 UniverCollaborationClientPlugin。
73
+ }
74
+ ```
75
+
76
+ 该配置直接从 evaluation 结果提供内存 snapshot 和可选的 Sheet blocks,设置
77
+ `enableCollaboration: false` 并拒绝保存,不建立 WebSocket,也不发起独立的 resource
78
+ 网络请求。
79
+
80
+ ## 订阅完整状态
81
+
82
+ ```ts
83
+ const events = new WorktreeEventClient({
84
+ origin: location.origin,
85
+ worktreeID,
86
+ });
87
+
88
+ const subscription = events.onChange((worktree) => {
89
+ renderStatus(worktree.status, worktree.units);
90
+ });
91
+
92
+ await events.connect();
93
+
94
+ subscription.dispose();
95
+ events.dispose();
96
+ ```
97
+
98
+ 首帧是完整 `WorktreeData`。断线重连时 Client 会重新获取一次性 session ticket。
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- Object['defineProperty'](exports,Symbol['toStringTag'],{'value':'Module'});let e=require('@univerjs-pro/collaboration');var t=class{['_preview'];constructor(_0x4b4e5e){this['_preview']=_0x4b4e5e['preview'];}['getUnitOnRev'](_0x28d717,_0x91e97b){return this['_validateIdentity'](_0x91e97b['unitID'],_0x91e97b['type']),Promise['resolve']({'error':void 0x0,'snapshot':this['_preview']['snapshot'],'changesets':[]});}['getSheetBlock'](_0x2b2ed9,_0x3aaea9){this['_validateIdentity'](_0x3aaea9['unitID'],_0x3aaea9['type']);let _0x550b6f=this['_preview']['sheetBlocks']?.['find'](_0x2d5318=>_0x2d5318['id']===_0x3aaea9['blockID']);return _0x550b6f?Promise['resolve']({'error':void 0x0,'block':_0x550b6f}):Promise['reject'](Error('Merge\x20preview\x20block\x20'+_0x3aaea9['blockID']+'\x20is\x20missing'));}['getDeserializedSheetBlock'](_0x3efe46,_0x5326a9){return this['getSheetBlock'](_0x3efe46,_0x5326a9);}['fetchMissingChangesets'](_0x3ac285,_0x2351a7){return this['_validateIdentity'](_0x2351a7['unitID'],_0x2351a7['type']),Promise['resolve']({'error':void 0x0,'changesets':[],'latestRevision':this['_preview']['snapshot']['rev']});}['getResourcesRequest'](_0xf846a9,_0x349175){return this['_validateIdentity'](_0x349175['unitID'],_0x349175['type']),Promise['resolve']({'error':void 0x0,'resources':{}});}['saveSnapshot'](){return n();}['updateSnapshot'](){return n();}['saveSheetBlock'](){return n();}['saveChangeset'](){return n();}['copyFileMeta'](){return n();}['getLatestCsReqIdBySid'](){return n();}['_validateIdentity'](_0xa81e8,_0x2695ed){if(_0xa81e8!==this['_preview']['snapshot']['unitID']||_0x2695ed!==this['_preview']['snapshot']['type'])throw Error('Merge\x20preview\x20Unit\x20identity\x20does\x20not\x20match');}};function n(){return Promise['reject'](Error('Merge\x20preview\x20snapshot\x20service\x20is\x20read-only'));}function r(_0x3023fd){let _0x3830bd;try{_0x3830bd=new URL(_0x3023fd);}catch{throw TypeError('origin\x20must\x20be\x20an\x20absolute\x20HTTP(S)\x20URL');}if(_0x3830bd['protocol']!=='http:'&&_0x3830bd['protocol']!=='https:')throw TypeError('origin\x20must\x20use\x20HTTP\x20or\x20HTTPS');if(_0x3830bd['pathname']!=='/'||_0x3830bd['search']||_0x3830bd['hash']||_0x3830bd['username']||_0x3830bd['password'])throw TypeError('origin\x20cannot\x20contain\x20path,\x20credentials\x20or\x20query');return _0x3830bd['origin'];}function i(_0x9e2dd2,_0x48becb){if(!_0x48becb)throw TypeError('worktreeID\x20is\x20required');return _0x9e2dd2+'/universer-api/worktrees/'+encodeURIComponent(_0x48becb);}function a(_0x3592c9,_0x4102cb){let _0x2d5619=new URL(i(_0x3592c9,_0x4102cb));return _0x2d5619['protocol']=_0x2d5619['protocol']==='https:'?'wss:':'ws:',_0x2d5619['toString']()['replace'](/\/$/,'');}function o(_0x3764e8){let _0x2cec91=r(_0x3764e8['origin']),_0x1952c1=i(_0x2cec91,_0x3764e8['worktreeID']),_0x37e86e=a(_0x2cec91,_0x3764e8['worktreeID']);return{'snapshotServerUrl':_0x1952c1+'/snapshot','collabSubmitChangesetUrl':_0x1952c1+'/comb','collabWebSocketUrl':_0x37e86e+'/comb/connect','wsSessionTicketUrl':_0x2cec91+'/universer-api/user/session-ticket','override':[..._0x3764e8['override']??[]]};}function s(_0x54e7dd){return{'enableCollaboration':!0x1,'snapshotServerUrl':i(r(_0x54e7dd['origin']),_0x54e7dd['worktreeID'])+'/snapshot','override':[[e['ISnapshotServerService'],{'useValue':new t({'preview':_0x54e7dd['preview']})}],..._0x54e7dd['override']??[]]};}var c=class extends Error{['status'];['code'];['retryable'];constructor(_0x4a9492,_0x25b94b,_0x27567a,_0x4fa301){super(_0x27567a),this['status']=_0x4a9492,this['code']=_0x25b94b,this['retryable']=_0x4fa301,this['name']='WorktreeClientError';}};async function l(_0x473054,_0x36710e,_0xcc6fc9){let _0xb97c73=await _0x473054(_0x36710e,_0xcc6fc9),_0xb52a2f=await m(_0xb97c73);if(!_0xb97c73['ok'])throw h(_0xb97c73['status'],_0xb52a2f);if(!b(_0xb52a2f)||!b(_0xb52a2f['worktree']))throw new c(_0xb97c73['status'],'INVALID_RESPONSE','Worktree\x20response\x20is\x20missing\x20worktree\x20data');return _0xb52a2f['worktree'];}async function u(_0x205cdb,_0x1eb370){let _0x43bcca=await _0x205cdb(_0x1eb370),_0x24d8dc=await m(_0x43bcca);if(!_0x43bcca['ok'])throw h(_0x43bcca['status'],_0x24d8dc);if(!b(_0x24d8dc)||typeof _0x24d8dc['ticket']!='string'||!_0x24d8dc['ticket'])throw new c(_0x43bcca['status'],'INVALID_RESPONSE','Session\x20ticket\x20response\x20is\x20missing\x20ticket');return _0x24d8dc['ticket'];}async function d(_0x2b4d02,_0x3f97c0){let _0xd7d3b=await _0x2b4d02(_0x3f97c0),_0x10e308=await m(_0xd7d3b);if(!_0xd7d3b['ok'])throw h(_0xd7d3b['status'],_0x10e308);if(!b(_0x10e308)||!b(_0x10e308['evaluation']))throw new c(_0xd7d3b['status'],'INVALID_RESPONSE','Worktree\x20response\x20is\x20missing\x20merge\x20evaluation');let _0x41d858=_0x10e308['evaluation'];if(_0x41d858['status']==='preview'&&b(_0x41d858['preview'])&&b(_0x41d858['preview']['snapshot'])&&(_(_0x41d858['preview']['snapshot']),Array['isArray'](_0x41d858['preview']['sheetBlocks'])))for(let _0xc13837 of _0x41d858['preview']['sheetBlocks']){if(!b(_0xc13837))throw y(_0xd7d3b['status']);_0xc13837['data']=v(_0xc13837['data'],_0xd7d3b['status']);}if(typeof _0x41d858['status']!='string'||typeof _0x41d858['worktreeID']!='string'||typeof _0x41d858['unitID']!='string')throw y(_0xd7d3b['status']);return _0x41d858;}function f(_0x36ef62){return{'method':'POST',..._0x36ef62===void 0x0?{}:{'headers':{'content-type':'application/json'},'body':JSON['stringify'](_0x36ef62,(_0x5b1aad,_0x9f8522)=>_0x9f8522 instanceof Uint8Array?g(_0x9f8522):_0x9f8522)}};}function p(){if(typeof globalThis['fetch']!='function')throw TypeError('A\x20fetch\x20implementation\x20is\x20required');return globalThis['fetch']['bind'](globalThis);}async function m(_0x309208){try{return await _0x309208['json']();}catch{throw new c(_0x309208['status'],'INVALID_RESPONSE','Server\x20returned\x20invalid\x20JSON');}}function h(_0x4a9ba5,_0x38029f){let _0xe9e90a=b(_0x38029f)&&b(_0x38029f['error'])?_0x38029f['error']:{};return new c(_0x4a9ba5,typeof _0xe9e90a['code']=='string'||typeof _0xe9e90a['code']=='number'?_0xe9e90a['code']:'HTTP_ERROR',typeof _0xe9e90a['message']=='string'?_0xe9e90a['message']:'Worktree\x20request\x20failed\x20with\x20HTTP\x20'+_0x4a9ba5,typeof _0xe9e90a['retryable']=='boolean'?_0xe9e90a['retryable']:void 0x0);}function g(_0x33306b){let _0x405f8b='';for(let _0x126d36 of _0x33306b)_0x405f8b+=String['fromCharCode'](_0x126d36);return btoa(_0x405f8b);}function _(_0x3398c9){let _0x1824b0=_0x3398c9['workbook']??_0x3398c9['doc']??_0x3398c9['slide']??_0x3398c9['board'];if(_0x1824b0&&(_0x1824b0['originalMeta']=v(_0x1824b0['originalMeta'],0xc8),_0x3398c9['workbook'])){for(let _0x2b71b2 of Object['values'](_0x3398c9['workbook']['sheets']))_0x2b71b2['originalMeta']=v(_0x2b71b2['originalMeta'],0xc8);}}function v(_0xea2883,_0x265aa8){if(_0xea2883 instanceof Uint8Array)return _0xea2883;if(typeof _0xea2883!='string')throw y(_0x265aa8);try{let _0x2649c8=atob(_0xea2883);return Uint8Array['from'](_0x2649c8,_0x55b5e6=>_0x55b5e6['charCodeAt'](0x0));}catch{throw y(_0x265aa8);}}function y(_0x1f7904){return new c(_0x1f7904,'INVALID_RESPONSE','Server\x20returned\x20an\x20invalid\x20merge\x20preview');}function b(_0x559216){return!!_0x559216&&typeof _0x559216=='object'&&!Array['isArray'](_0x559216);}var x=class{['_origin'];['_fetch'];constructor(_0x2c7241){this['_origin']=r(_0x2c7241['origin']),this['_fetch']=_0x2c7241['fetch']??p();}['createWorktree'](_0x34f176){return l(this['_fetch'],this['_origin']+'/universer-api/worktrees',f(_0x34f176));}['getWorktree'](_0x2e7181){return l(this['_fetch'],i(this['_origin'],_0x2e7181));}['evaluateUnitMerge'](_0x44b81f,_0x4c6bf1){return d(this['_fetch'],i(this['_origin'],_0x44b81f)+'/units/'+encodeURIComponent(_0x4c6bf1)+'/merge-preview');}['addUnit'](_0x29c590,_0xf17493){return this['_post'](_0x29c590,'units',{'unitID':_0xf17493});}['createUnit'](_0x50d7da,_0x151221){return this['_post'](_0x50d7da,'units/from-snapshot',_0x151221);}['createUnitFromData'](_0x2165ce,_0x41bce9){return this['_post'](_0x2165ce,'units/from-data',_0x41bce9);}['markReady'](_0x39b4df){return this['_post'](_0x39b4df,'ready');}['reopenWorktree'](_0x654b32){return this['_post'](_0x654b32,'reopen');}['discardWorktree'](_0x1071d4){return this['_post'](_0x1071d4,'discard');}['mergeWorktree'](_0x104dd3){return this['_post'](_0x104dd3,'merge');}['_post'](_0x1ef6f5,_0x486c06,_0x428592){return l(this['_fetch'],i(this['_origin'],_0x1ef6f5)+'/'+_0x486c06,f(_0x428592));}},S=class{['_origin'];['_worktreeID'];['_fetch'];['_reconnectDelayMs'];['_createWebSocket'];['_listeners']=new Set();['_socket'];['_reconnectTimer'];['_current'];['_disposed']=!0x1;['_connectedOnce']=!0x1;constructor(_0x40949c){if(this['_origin']=r(_0x40949c['origin']),!_0x40949c['worktreeID'])throw TypeError('worktreeID\x20is\x20required');if(this['_worktreeID']=_0x40949c['worktreeID'],this['_fetch']=_0x40949c['fetch']??p(),this['_reconnectDelayMs']=_0x40949c['reconnectDelayMs']??0x3e8,!Number['isSafeInteger'](this['_reconnectDelayMs'])||this['_reconnectDelayMs']<0x0)throw TypeError('reconnectDelayMs\x20must\x20be\x20a\x20non-negative\x20integer');this['_createWebSocket']=_0x40949c['createWebSocket']??(_0x196f14=>{if(typeof globalThis['WebSocket']!='function')throw TypeError('A\x20WebSocket\x20implementation\x20is\x20required');return new globalThis['WebSocket'](_0x196f14);});}get['current'](){return this['_current'];}['onChange'](_0x3e23b7){return this['_listeners']['add'](_0x3e23b7),{'dispose':()=>this['_listeners']['delete'](_0x3e23b7)};}async['connect'](){if(this['_disposed'])throw Error('WorktreeEventClient\x20is\x20disposed');return this['_current']?this['_current']:this['_open'](!0x1);}['dispose'](){this['_disposed']||(this['_disposed']=!0x0,this['_reconnectTimer']&&clearTimeout(this['_reconnectTimer']),this['_socket']?.['close'](0x3e8,'Client\x20disposed'),this['_socket']=void 0x0,this['_listeners']['clear']());}async['_open'](_0x5e756f){let _0xafe66c=await u(this['_fetch'],this['_origin']+'/universer-api/user/session-ticket');if(this['_disposed'])throw Error('WorktreeEventClient\x20is\x20disposed');let _0x93873e=a(this['_origin'],this['_worktreeID'])+'/events?sessionTicket='+encodeURIComponent(_0xafe66c);return new Promise((_0x3654c1,_0x145104)=>{let _0x1be3e1=!0x1,_0x2f05c0=this['_createWebSocket'](_0x93873e);this['_socket']=_0x2f05c0,_0x2f05c0['addEventListener']('message',_0x367da2=>{try{let _0x569763=C(_0x367da2['data']);_0x1be3e1=!0x0,this['_connectedOnce']=!0x0,this['_current']=_0x569763;for(let _0x128fe5 of[...this['_listeners']])try{_0x128fe5(_0x569763);}catch{}_0x3654c1(_0x569763);}catch(_0xa8dcc2){_0x2f05c0['close'](0x3eb,'Invalid\x20Worktree\x20event'),_0x1be3e1||_0x145104(_0xa8dcc2);}}),_0x2f05c0['addEventListener']('error',()=>{_0x1be3e1||_0x145104(Error('Worktree\x20event\x20connection\x20failed'));}),_0x2f05c0['addEventListener']('close',()=>{this['_socket']===_0x2f05c0&&(this['_socket']=void 0x0),!_0x1be3e1&&!_0x5e756f&&_0x145104(Error('Worktree\x20event\x20connection\x20closed')),this['_connectedOnce']&&this['_scheduleReconnect']();});});}['_scheduleReconnect'](){this['_disposed']||this['_reconnectTimer']||(this['_reconnectTimer']=setTimeout(()=>{this['_reconnectTimer']=void 0x0,this['_open'](!0x0)['catch'](()=>this['_scheduleReconnect']());},this['_reconnectDelayMs']));}};function C(_0x319586){let _0x1cd650=typeof _0x319586=='string'?JSON['parse'](_0x319586):_0x319586 instanceof Blob?void 0x0:JSON['parse'](new TextDecoder()['decode'](_0x319586));if(!_0x1cd650||typeof _0x1cd650!='object'||_0x1cd650['event']!=='worktreeChanged'||!_0x1cd650['worktree']||typeof _0x1cd650['worktree']!='object')throw Error('Invalid\x20Worktree\x20event\x20message');return _0x1cd650['worktree'];}exports['WorktreeClient']=x,exports['WorktreeClientError']=c,exports['WorktreeEventClient']=S,exports['WorktreeMergePreviewSnapshotService']=t,exports['createWorktreeCollaborationConfig']=o,exports['createWorktreeMergePreviewConfig']=s;
1
+ Object['defineProperty'](exports,Symbol['toStringTag'],{'value':'Module'});let e=require('@univerjs-pro/collaboration');var t=class{['_preview'];constructor(_0x38887d){this['_preview']=_0x38887d['preview'];}['getUnitOnRev'](_0xc452e5,_0xf63202){return this['_validateIdentity'](_0xf63202['unitID'],_0xf63202['type']),Promise['resolve']({'error':void 0x0,'snapshot':this['_preview']['snapshot'],'changesets':[]});}['getSheetBlock'](_0x17fa1a,_0x5ee5d9){this['_validateIdentity'](_0x5ee5d9['unitID'],_0x5ee5d9['type']);let _0x323d9f=this['_preview']['sheetBlocks']?.['find'](_0x5ec914=>_0x5ec914['id']===_0x5ee5d9['blockID']);return _0x323d9f?Promise['resolve']({'error':void 0x0,'block':_0x323d9f}):Promise['reject'](Error('Merge\x20preview\x20block\x20'+_0x5ee5d9['blockID']+'\x20is\x20missing'));}['getDeserializedSheetBlock'](_0x1af6c9,_0x4c9605){return this['getSheetBlock'](_0x1af6c9,_0x4c9605);}['fetchMissingChangesets'](_0x482949,_0x3d4082){return this['_validateIdentity'](_0x3d4082['unitID'],_0x3d4082['type']),Promise['resolve']({'error':void 0x0,'changesets':[]});}['getResourcesRequest'](_0x42f6e3,_0x17f632){return this['_validateIdentity'](_0x17f632['unitID'],_0x17f632['type']),Promise['resolve']({'error':void 0x0,'resources':{}});}['saveSnapshot'](){return n();}['updateSnapshot'](){return n();}['saveSheetBlock'](){return n();}['saveChangeset'](){return n();}['copyFileMeta'](){return n();}['getLatestCsReqIdBySid'](){return n();}['_validateIdentity'](_0x5e1df3,_0x3cc6d7){if(_0x5e1df3!==this['_preview']['snapshot']['unitID']||_0x3cc6d7!==this['_preview']['snapshot']['type'])throw Error('Merge\x20preview\x20Unit\x20identity\x20does\x20not\x20match');}};function n(){return Promise['reject'](Error('Merge\x20preview\x20snapshot\x20service\x20is\x20read-only'));}function r(_0x12bfb6){let _0x3b8e8c;try{_0x3b8e8c=new URL(_0x12bfb6);}catch{throw TypeError('origin\x20must\x20be\x20an\x20absolute\x20HTTP(S)\x20URL');}if(_0x3b8e8c['protocol']!=='http:'&&_0x3b8e8c['protocol']!=='https:')throw TypeError('origin\x20must\x20use\x20HTTP\x20or\x20HTTPS');if(_0x3b8e8c['pathname']!=='/'||_0x3b8e8c['search']||_0x3b8e8c['hash']||_0x3b8e8c['username']||_0x3b8e8c['password'])throw TypeError('origin\x20cannot\x20contain\x20path,\x20credentials\x20or\x20query');return _0x3b8e8c['origin'];}function i(_0x5b914d,_0x19d53c){if(!_0x19d53c)throw TypeError('worktreeID\x20is\x20required');return _0x5b914d+'/universer-api/worktrees/'+encodeURIComponent(_0x19d53c);}function a(_0x1feac8,_0x2f1b9e){let _0x1cbeb3=new URL(i(_0x1feac8,_0x2f1b9e));return _0x1cbeb3['protocol']=_0x1cbeb3['protocol']==='https:'?'wss:':'ws:',_0x1cbeb3['toString']()['replace'](/\/$/,'');}function o(_0x348bad){let _0x503553=r(_0x348bad['origin']),_0x37a4ef=i(_0x503553,_0x348bad['worktreeID']),_0x58c60d=a(_0x503553,_0x348bad['worktreeID']);return{'snapshotServerUrl':_0x37a4ef+'/snapshot','collabSubmitChangesetUrl':_0x37a4ef+'/comb','collabWebSocketUrl':_0x58c60d+'/comb/connect','wsSessionTicketUrl':_0x503553+'/universer-api/user/session-ticket','override':[..._0x348bad['override']??[]]};}function s(_0x1dd4d5){return{'enableCollaboration':!0x1,'snapshotServerUrl':i(r(_0x1dd4d5['origin']),_0x1dd4d5['worktreeID'])+'/snapshot','override':[[e['ISnapshotServerService'],{'useValue':new t({'preview':_0x1dd4d5['preview']})}],..._0x1dd4d5['override']??[]]};}var c=class extends Error{['status'];['code'];['retryable'];constructor(_0x32611f,_0x1d0b4c,_0x323c99,_0x16952d){super(_0x323c99),this['status']=_0x32611f,this['code']=_0x1d0b4c,this['retryable']=_0x16952d,this['name']='WorktreeClientError';}};async function l(_0x37354b,_0x3563a3,_0x5171ad){let _0x47ef1a=await _0x37354b(_0x3563a3,_0x5171ad),_0x2320e9=await m(_0x47ef1a);if(!_0x47ef1a['ok'])throw h(_0x47ef1a['status'],_0x2320e9);if(!b(_0x2320e9)||!b(_0x2320e9['worktree']))throw new c(_0x47ef1a['status'],'INVALID_RESPONSE','Worktree\x20response\x20is\x20missing\x20worktree\x20data');return _0x2320e9['worktree'];}async function u(_0x171ef3,_0x3c5a62){let _0x34f743=await _0x171ef3(_0x3c5a62),_0x290d27=await m(_0x34f743);if(!_0x34f743['ok'])throw h(_0x34f743['status'],_0x290d27);if(!b(_0x290d27)||typeof _0x290d27['ticket']!='string'||!_0x290d27['ticket'])throw new c(_0x34f743['status'],'INVALID_RESPONSE','Session\x20ticket\x20response\x20is\x20missing\x20ticket');return _0x290d27['ticket'];}async function d(_0x2f09ee,_0x37b665){let _0x4f8027=await _0x2f09ee(_0x37b665),_0x34e6e9=await m(_0x4f8027);if(!_0x4f8027['ok'])throw h(_0x4f8027['status'],_0x34e6e9);if(!b(_0x34e6e9)||!b(_0x34e6e9['evaluation']))throw new c(_0x4f8027['status'],'INVALID_RESPONSE','Worktree\x20response\x20is\x20missing\x20merge\x20evaluation');let _0x485090=_0x34e6e9['evaluation'];if(_0x485090['status']==='preview'&&b(_0x485090['preview'])&&b(_0x485090['preview']['snapshot'])&&(_(_0x485090['preview']['snapshot']),Array['isArray'](_0x485090['preview']['sheetBlocks'])))for(let _0x6a35ff of _0x485090['preview']['sheetBlocks']){if(!b(_0x6a35ff))throw y(_0x4f8027['status']);_0x6a35ff['data']=v(_0x6a35ff['data'],_0x4f8027['status']);}if(typeof _0x485090['status']!='string'||typeof _0x485090['worktreeID']!='string'||typeof _0x485090['unitID']!='string')throw y(_0x4f8027['status']);return _0x485090;}function f(_0x177adb){return{'method':'POST',..._0x177adb===void 0x0?{}:{'headers':{'content-type':'application/json'},'body':JSON['stringify'](_0x177adb,(_0xfae059,_0x448944)=>_0x448944 instanceof Uint8Array?g(_0x448944):_0x448944)}};}function p(){if(typeof globalThis['fetch']!='function')throw TypeError('A\x20fetch\x20implementation\x20is\x20required');return globalThis['fetch']['bind'](globalThis);}async function m(_0x2db0f1){try{return await _0x2db0f1['json']();}catch{throw new c(_0x2db0f1['status'],'INVALID_RESPONSE','Server\x20returned\x20invalid\x20JSON');}}function h(_0x3726fa,_0x45b902){let _0x1877a8=b(_0x45b902)&&b(_0x45b902['error'])?_0x45b902['error']:{};return new c(_0x3726fa,typeof _0x1877a8['code']=='string'||typeof _0x1877a8['code']=='number'?_0x1877a8['code']:'HTTP_ERROR',typeof _0x1877a8['message']=='string'?_0x1877a8['message']:'Worktree\x20request\x20failed\x20with\x20HTTP\x20'+_0x3726fa,typeof _0x1877a8['retryable']=='boolean'?_0x1877a8['retryable']:void 0x0);}function g(_0x21d210){let _0x15ae3c='';for(let _0x2e9d5f of _0x21d210)_0x15ae3c+=String['fromCharCode'](_0x2e9d5f);return btoa(_0x15ae3c);}function _(_0x2900d9){let _0x4169b0=_0x2900d9['workbook']??_0x2900d9['doc']??_0x2900d9['slide']??_0x2900d9['board'];if(_0x4169b0&&(_0x4169b0['originalMeta']=v(_0x4169b0['originalMeta'],0xc8),_0x2900d9['workbook'])){for(let _0x482bd3 of Object['values'](_0x2900d9['workbook']['sheets']))_0x482bd3['originalMeta']=v(_0x482bd3['originalMeta'],0xc8);}}function v(_0x6f5ac3,_0x59495b){if(_0x6f5ac3 instanceof Uint8Array)return _0x6f5ac3;if(typeof _0x6f5ac3!='string')throw y(_0x59495b);try{let _0x47a147=atob(_0x6f5ac3);return Uint8Array['from'](_0x47a147,_0x3502f2=>_0x3502f2['charCodeAt'](0x0));}catch{throw y(_0x59495b);}}function y(_0x3ec40d){return new c(_0x3ec40d,'INVALID_RESPONSE','Server\x20returned\x20an\x20invalid\x20merge\x20preview');}function b(_0x232bdc){return!!_0x232bdc&&typeof _0x232bdc=='object'&&!Array['isArray'](_0x232bdc);}var x=class{['_origin'];['_fetch'];constructor(_0x4ccb7a){this['_origin']=r(_0x4ccb7a['origin']),this['_fetch']=_0x4ccb7a['fetch']??p();}['createWorktree'](_0xf30914){return l(this['_fetch'],this['_origin']+'/universer-api/worktrees',f(_0xf30914));}['getWorktree'](_0x2a330e){return l(this['_fetch'],i(this['_origin'],_0x2a330e));}['evaluateUnitMerge'](_0x48e073,_0x43b0a9){return d(this['_fetch'],i(this['_origin'],_0x48e073)+'/units/'+encodeURIComponent(_0x43b0a9)+'/merge-preview');}['addUnit'](_0x111fd4,_0x424d3f){return this['_post'](_0x111fd4,'units',{'unitID':_0x424d3f});}['setUnitRemoved'](_0xe31214,_0x3fbb60,_0x560e9c){return this['_post'](_0xe31214,'units/'+encodeURIComponent(_0x3fbb60)+'/removal',{'removed':_0x560e9c});}['createUnitFromSnapshot'](_0x524322,_0x539827){return this['_post'](_0x524322,'units/from-snapshot',_0x539827);}['createUnitFromData'](_0x107814,_0x490f92){return this['_post'](_0x107814,'units/from-data',_0x490f92);}['markReady'](_0xbbf107){return this['_post'](_0xbbf107,'ready');}['reopenWorktree'](_0x387529){return this['_post'](_0x387529,'reopen');}['discardWorktree'](_0x19db9a){return this['_post'](_0x19db9a,'discard');}['mergeWorktree'](_0x33ae40){return this['_post'](_0x33ae40,'merge');}['_post'](_0x355133,_0xb45552,_0x2b19ee){return l(this['_fetch'],i(this['_origin'],_0x355133)+'/'+_0xb45552,f(_0x2b19ee));}},S=class{['_origin'];['_worktreeID'];['_fetch'];['_reconnectDelayMs'];['_createWebSocket'];['_listeners']=new Set();['_socket'];['_reconnectTimer'];['_current'];['_disposed']=!0x1;['_connectedOnce']=!0x1;constructor(_0x548513){if(this['_origin']=r(_0x548513['origin']),!_0x548513['worktreeID'])throw TypeError('worktreeID\x20is\x20required');if(this['_worktreeID']=_0x548513['worktreeID'],this['_fetch']=_0x548513['fetch']??p(),this['_reconnectDelayMs']=_0x548513['reconnectDelayMs']??0x3e8,!Number['isSafeInteger'](this['_reconnectDelayMs'])||this['_reconnectDelayMs']<0x0)throw TypeError('reconnectDelayMs\x20must\x20be\x20a\x20non-negative\x20integer');this['_createWebSocket']=_0x548513['createWebSocket']??(_0x5aed1e=>{if(typeof globalThis['WebSocket']!='function')throw TypeError('A\x20WebSocket\x20implementation\x20is\x20required');return new globalThis['WebSocket'](_0x5aed1e);});}get['current'](){return this['_current'];}['onChange'](_0x252ef5){return this['_listeners']['add'](_0x252ef5),{'dispose':()=>this['_listeners']['delete'](_0x252ef5)};}async['connect'](){if(this['_disposed'])throw Error('WorktreeEventClient\x20is\x20disposed');return this['_current']?this['_current']:this['_open'](!0x1);}['dispose'](){this['_disposed']||(this['_disposed']=!0x0,this['_reconnectTimer']&&clearTimeout(this['_reconnectTimer']),this['_socket']?.['close'](0x3e8,'Client\x20disposed'),this['_socket']=void 0x0,this['_listeners']['clear']());}async['_open'](_0x28f618){let _0x23e8e4=await u(this['_fetch'],this['_origin']+'/universer-api/user/session-ticket');if(this['_disposed'])throw Error('WorktreeEventClient\x20is\x20disposed');let _0x2805ea=a(this['_origin'],this['_worktreeID'])+'/events?sessionTicket='+encodeURIComponent(_0x23e8e4);return new Promise((_0x161131,_0xd11261)=>{let _0xc72add=!0x1,_0x2e9027=this['_createWebSocket'](_0x2805ea);this['_socket']=_0x2e9027,_0x2e9027['addEventListener']('message',_0x13e2dc=>{try{let _0x4ee210=C(_0x13e2dc['data']);_0xc72add=!0x0,this['_connectedOnce']=!0x0,this['_current']=_0x4ee210;for(let _0x58a35b of[...this['_listeners']])try{_0x58a35b(_0x4ee210);}catch{}_0x161131(_0x4ee210);}catch(_0x35a7f6){_0x2e9027['close'](0x3eb,'Invalid\x20Worktree\x20event'),_0xc72add||_0xd11261(_0x35a7f6);}}),_0x2e9027['addEventListener']('error',()=>{_0xc72add||_0xd11261(Error('Worktree\x20event\x20connection\x20failed'));}),_0x2e9027['addEventListener']('close',()=>{this['_socket']===_0x2e9027&&(this['_socket']=void 0x0),!_0xc72add&&!_0x28f618&&_0xd11261(Error('Worktree\x20event\x20connection\x20closed')),this['_connectedOnce']&&this['_scheduleReconnect']();});});}['_scheduleReconnect'](){this['_disposed']||this['_reconnectTimer']||(this['_reconnectTimer']=setTimeout(()=>{this['_reconnectTimer']=void 0x0,this['_open'](!0x0)['catch'](()=>this['_scheduleReconnect']());},this['_reconnectDelayMs']));}};function C(_0x10a969){let _0x4846d6=typeof _0x10a969=='string'?JSON['parse'](_0x10a969):_0x10a969 instanceof Blob?void 0x0:JSON['parse'](new TextDecoder()['decode'](_0x10a969));if(!_0x4846d6||typeof _0x4846d6!='object'||_0x4846d6['event']!=='worktreeChanged'||!_0x4846d6['worktree']||typeof _0x4846d6['worktree']!='object')throw Error('Invalid\x20Worktree\x20event\x20message');return _0x4846d6['worktree'];}exports['WorktreeClient']=x,exports['WorktreeClientError']=c,exports['WorktreeEventClient']=S,exports['WorktreeMergePreviewSnapshotService']=t,exports['createWorktreeCollaborationConfig']=o,exports['createWorktreeMergePreviewConfig']=s;
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { IUniverCollaborationClientConfig } from "@univerjs-pro/collaboration-client";
2
2
  import { DependencyOverride } from "@univerjs/core";
3
- import { CreateUnitFromDataInput, CreateUnitInput, SaveSnapshotInput } from "@univerjs-pro/collaboration-service";
3
+ import { CreateUnitFromDataInput, CreateUnitFromSnapshotInput, SaveSnapshotInput } from "@univerjs-pro/collaboration-service";
4
4
  import { CreateWorktreeInput, WorktreeData, WorktreeUnitMergeEvaluation } from "@univerjs-pro/collaboration-worktree-service";
5
5
  import { ILogContext, ISnapshotServerService } from "@univerjs-pro/collaboration";
6
6
  import { IFetchMissingChangesetsRequest, IFetchMissingChangesetsResponse, IGetDeserializedSheetBlockResponse, IGetResourcesRequest, IGetResourcesResponse, IGetSheetBlockRequest, IGetSheetBlockResponse, IGetUnitOnRevRequest, IGetUnitOnRevResponse } from "@univerjs/protocol";
@@ -46,7 +46,8 @@ declare class WorktreeClient {
46
46
  getWorktree(worktreeID: string): Promise<WorktreeData>;
47
47
  evaluateUnitMerge(worktreeID: string, unitID: string): Promise<WorktreeUnitMergeEvaluation>;
48
48
  addUnit(worktreeID: string, unitID: string): Promise<WorktreeData>;
49
- createUnit(worktreeID: string, input: CreateUnitInput): Promise<WorktreeData>;
49
+ setUnitRemoved(worktreeID: string, unitID: string, removed: boolean): Promise<WorktreeData>;
50
+ createUnitFromSnapshot(worktreeID: string, input: CreateUnitFromSnapshotInput): Promise<WorktreeData>;
50
51
  createUnitFromData(worktreeID: string, input: CreateUnitFromDataInput): Promise<WorktreeData>;
51
52
  markReady(worktreeID: string): Promise<WorktreeData>;
52
53
  reopenWorktree(worktreeID: string): Promise<WorktreeData>;
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- const _0x522af2=_0x36ae;function _0x36ae(_0x33f24d,_0x3fb4ca){_0x33f24d=_0x33f24d-0x131;const _0x283042=_0x2830();let _0x36ae15=_0x283042[_0x33f24d];return _0x36ae15;}(function(_0x31b962,_0x1ab879){const _0x1720f2=_0x36ae,_0x134f62=_0x31b962();while(!![]){try{const _0x457ec9=-parseInt(_0x1720f2(0x132))/0x1*(-parseInt(_0x1720f2(0x136))/0x2)+-parseInt(_0x1720f2(0x135))/0x3+-parseInt(_0x1720f2(0x13c))/0x4+parseInt(_0x1720f2(0x131))/0x5+-parseInt(_0x1720f2(0x13b))/0x6+-parseInt(_0x1720f2(0x133))/0x7*(parseInt(_0x1720f2(0x13a))/0x8)+parseInt(_0x1720f2(0x13d))/0x9;if(_0x457ec9===_0x1ab879)break;else _0x134f62['push'](_0x134f62['shift']());}catch(_0xf22028){_0x134f62['push'](_0x134f62['shift']());}}}(_0x2830,0x21739));import _0x41e9cb from'./index.cjs';function _0x2830(){const _0x35b84e=['382410ztUjeh','483620cNASoj','3775896kjQDpK','997295FqHyso','4vUgkCS','1835834ctzxEI','WorktreeClient','677856YqyNsc','95434JshtPG','createWorktreeMergePreviewConfig','WorktreeMergePreviewSnapshotService','WorktreeClientError','8OpxfIw'];_0x2830=function(){return _0x35b84e;};return _0x2830();}const facadeExport0=_0x41e9cb[_0x522af2(0x134)],facadeExport1=_0x41e9cb[_0x522af2(0x139)],facadeExport2=_0x41e9cb['WorktreeEventClient'],facadeExport3=_0x41e9cb[_0x522af2(0x138)],facadeExport4=_0x41e9cb['createWorktreeCollaborationConfig'],facadeExport5=_0x41e9cb[_0x522af2(0x137)];export{facadeExport0 as WorktreeClient,facadeExport1 as WorktreeClientError,facadeExport2 as WorktreeEventClient,facadeExport3 as WorktreeMergePreviewSnapshotService,facadeExport4 as createWorktreeCollaborationConfig,facadeExport5 as createWorktreeMergePreviewConfig};
1
+ const _0x3464d0=_0x39b5;(function(_0xd6fedc,_0xb5ad7a){const _0x8d335=_0x39b5,_0x16659a=_0xd6fedc();while(!![]){try{const _0x29d058=parseInt(_0x8d335(0x263))/0x1+parseInt(_0x8d335(0x1ea))/0x2*(parseInt(_0x8d335(0x1f3))/0x3)+-parseInt(_0x8d335(0x22b))/0x4*(-parseInt(_0x8d335(0x211))/0x5)+parseInt(_0x8d335(0x238))/0x6+-parseInt(_0x8d335(0x232))/0x7+parseInt(_0x8d335(0x200))/0x8+-parseInt(_0x8d335(0x23c))/0x9;if(_0x29d058===_0xb5ad7a)break;else _0x16659a['push'](_0x16659a['shift']());}catch(_0x56af02){_0x16659a['push'](_0x16659a['shift']());}}}(_0x42d1,0x4317b));import{ISnapshotServerService as _0x5d7ee7}from'@univerjs-pro/collaboration';var t=class{[_0x3464d0(0x230)];constructor(_0x300858){const _0x33bcfc=_0x3464d0;this[_0x33bcfc(0x230)]=_0x300858['preview'];}['getUnitOnRev'](_0x2bf79f,_0x3c657e){const _0x4ccf5e=_0x3464d0;return this[_0x4ccf5e(0x20b)](_0x3c657e[_0x4ccf5e(0x242)],_0x3c657e[_0x4ccf5e(0x25d)]),Promise[_0x4ccf5e(0x1fe)]({'error':void 0x0,'snapshot':this[_0x4ccf5e(0x230)][_0x4ccf5e(0x253)],'changesets':[]});}[_0x3464d0(0x227)](_0x4d2382,_0x307f7b){const _0x93d389=_0x3464d0;this[_0x93d389(0x20b)](_0x307f7b[_0x93d389(0x242)],_0x307f7b['type']);let _0x3742b8=this[_0x93d389(0x230)][_0x93d389(0x1f2)]?.[_0x93d389(0x24c)](_0x508027=>_0x508027['id']===_0x307f7b[_0x93d389(0x1fc)]);return _0x3742b8?Promise[_0x93d389(0x1fe)]({'error':void 0x0,'block':_0x3742b8}):Promise[_0x93d389(0x254)](Error(_0x93d389(0x22e)+_0x307f7b[_0x93d389(0x1fc)]+_0x93d389(0x212)));}[_0x3464d0(0x1e2)](_0x4ffaf5,_0x2b8733){const _0x4122e7=_0x3464d0;return this[_0x4122e7(0x227)](_0x4ffaf5,_0x2b8733);}[_0x3464d0(0x25f)](_0x1d6e5e,_0x1b3d7a){const _0x1b92cf=_0x3464d0;return this[_0x1b92cf(0x20b)](_0x1b3d7a[_0x1b92cf(0x242)],_0x1b3d7a[_0x1b92cf(0x25d)]),Promise[_0x1b92cf(0x1fe)]({'error':void 0x0,'changesets':[]});}[_0x3464d0(0x1fb)](_0x182724,_0x3cab0f){const _0x4dc016=_0x3464d0;return this[_0x4dc016(0x20b)](_0x3cab0f[_0x4dc016(0x242)],_0x3cab0f[_0x4dc016(0x25d)]),Promise[_0x4dc016(0x1fe)]({'error':void 0x0,'resources':{}});}[_0x3464d0(0x20e)](){return n();}['updateSnapshot'](){return n();}[_0x3464d0(0x1e8)](){return n();}['saveChangeset'](){return n();}[_0x3464d0(0x257)](){return n();}['getLatestCsReqIdBySid'](){return n();}[_0x3464d0(0x20b)](_0xf0a563,_0x459860){const _0x36890e=_0x3464d0;if(_0xf0a563!==this[_0x36890e(0x230)][_0x36890e(0x253)]['unitID']||_0x459860!==this['_preview'][_0x36890e(0x253)]['type'])throw Error(_0x36890e(0x1f9));}};function n(){const _0x15d7a0=_0x3464d0;return Promise['reject'](Error(_0x15d7a0(0x1f1)));}function r(_0x3224b7){const _0x2516a2=_0x3464d0;let _0x4a1409;try{_0x4a1409=new URL(_0x3224b7);}catch{throw TypeError('origin\x20must\x20be\x20an\x20absolute\x20HTTP(S)\x20URL');}if(_0x4a1409[_0x2516a2(0x21a)]!=='http:'&&_0x4a1409[_0x2516a2(0x21a)]!=='https:')throw TypeError(_0x2516a2(0x1f0));if(_0x4a1409[_0x2516a2(0x20a)]!=='/'||_0x4a1409[_0x2516a2(0x1e3)]||_0x4a1409[_0x2516a2(0x1e7)]||_0x4a1409['username']||_0x4a1409[_0x2516a2(0x1ec)])throw TypeError(_0x2516a2(0x209));return _0x4a1409[_0x2516a2(0x1f5)];}function i(_0x33569c,_0x2966b3){const _0x42b701=_0x3464d0;if(!_0x2966b3)throw TypeError(_0x42b701(0x202));return _0x33569c+_0x42b701(0x258)+encodeURIComponent(_0x2966b3);}function a(_0x1e7ddb,_0x43a08f){const _0x7d1c31=_0x3464d0;let _0x5e9a57=new URL(i(_0x1e7ddb,_0x43a08f));return _0x5e9a57[_0x7d1c31(0x21a)]=_0x5e9a57[_0x7d1c31(0x21a)]===_0x7d1c31(0x247)?_0x7d1c31(0x245):_0x7d1c31(0x224),_0x5e9a57['toString']()[_0x7d1c31(0x217)](/\/$/,'');}function _0x39b5(_0x50291d,_0xdd8f15){_0x50291d=_0x50291d-0x1dd;const _0x42d176=_0x42d1();let _0x39b572=_0x42d176[_0x50291d];return _0x39b572;}function o(_0x28ecc4){const _0xd57643=_0x3464d0;let _0x3b8b6a=r(_0x28ecc4[_0xd57643(0x1f5)]),_0x3b00db=i(_0x3b8b6a,_0x28ecc4[_0xd57643(0x1f7)]),_0x4ea663=a(_0x3b8b6a,_0x28ecc4[_0xd57643(0x1f7)]);return{'snapshotServerUrl':_0x3b00db+_0xd57643(0x222),'collabSubmitChangesetUrl':_0x3b00db+'/comb','collabWebSocketUrl':_0x4ea663+_0xd57643(0x1df),'wsSessionTicketUrl':_0x3b8b6a+'/universer-api/user/session-ticket','override':[..._0x28ecc4[_0xd57643(0x249)]??[]]};}function s(_0x3c12e9){const _0x33ad49=_0x3464d0;return{'enableCollaboration':!0x1,'snapshotServerUrl':i(r(_0x3c12e9['origin']),_0x3c12e9['worktreeID'])+_0x33ad49(0x222),'override':[[_0x5d7ee7,{'useValue':new t({'preview':_0x3c12e9[_0x33ad49(0x25c)]})}],..._0x3c12e9['override']??[]]};}var c=class extends Error{[_0x3464d0(0x1ff)];[_0x3464d0(0x218)];['retryable'];constructor(_0x4d7c9b,_0x29dfb6,_0x4397ee,_0x411594){const _0x28785d=_0x3464d0;super(_0x4397ee),this[_0x28785d(0x1ff)]=_0x4d7c9b,this['code']=_0x29dfb6,this[_0x28785d(0x261)]=_0x411594,this[_0x28785d(0x264)]=_0x28785d(0x1e6);}};async function l(_0x2f63f3,_0x5c3ae0,_0x4bd2ac){const _0x3ac275=_0x3464d0;let _0x2c6db6=await _0x2f63f3(_0x5c3ae0,_0x4bd2ac),_0x1e7367=await m(_0x2c6db6);if(!_0x2c6db6['ok'])throw h(_0x2c6db6[_0x3ac275(0x1ff)],_0x1e7367);if(!b(_0x1e7367)||!b(_0x1e7367[_0x3ac275(0x1f4)]))throw new c(_0x2c6db6['status'],_0x3ac275(0x23d),_0x3ac275(0x1fa));return _0x1e7367['worktree'];}async function u(_0x2e5fe0,_0x19b6bc){const _0x2af682=_0x3464d0;let _0x1f3c35=await _0x2e5fe0(_0x19b6bc),_0x3a8896=await m(_0x1f3c35);if(!_0x1f3c35['ok'])throw h(_0x1f3c35[_0x2af682(0x1ff)],_0x3a8896);if(!b(_0x3a8896)||typeof _0x3a8896[_0x2af682(0x21f)]!=_0x2af682(0x21e)||!_0x3a8896[_0x2af682(0x21f)])throw new c(_0x1f3c35[_0x2af682(0x1ff)],_0x2af682(0x23d),'Session\x20ticket\x20response\x20is\x20missing\x20ticket');return _0x3a8896['ticket'];}async function d(_0x1e5547,_0x5118ea){const _0x109ded=_0x3464d0;let _0x4101d3=await _0x1e5547(_0x5118ea),_0xc78f90=await m(_0x4101d3);if(!_0x4101d3['ok'])throw h(_0x4101d3[_0x109ded(0x1ff)],_0xc78f90);if(!b(_0xc78f90)||!b(_0xc78f90[_0x109ded(0x1e9)]))throw new c(_0x4101d3[_0x109ded(0x1ff)],_0x109ded(0x23d),_0x109ded(0x225));let _0x291d2c=_0xc78f90[_0x109ded(0x1e9)];if(_0x291d2c[_0x109ded(0x1ff)]===_0x109ded(0x25c)&&b(_0x291d2c[_0x109ded(0x25c)])&&b(_0x291d2c[_0x109ded(0x25c)][_0x109ded(0x253)])&&(_(_0x291d2c[_0x109ded(0x25c)][_0x109ded(0x253)]),Array['isArray'](_0x291d2c[_0x109ded(0x25c)][_0x109ded(0x1f2)])))for(let _0x197aa9 of _0x291d2c['preview'][_0x109ded(0x1f2)]){if(!b(_0x197aa9))throw y(_0x4101d3[_0x109ded(0x1ff)]);_0x197aa9[_0x109ded(0x214)]=v(_0x197aa9[_0x109ded(0x214)],_0x4101d3[_0x109ded(0x1ff)]);}if(typeof _0x291d2c['status']!=_0x109ded(0x21e)||typeof _0x291d2c[_0x109ded(0x1f7)]!=_0x109ded(0x21e)||typeof _0x291d2c[_0x109ded(0x242)]!=_0x109ded(0x21e))throw y(_0x4101d3[_0x109ded(0x1ff)]);return _0x291d2c;}function f(_0x1d9783){const _0x4cb965=_0x3464d0;return{'method':_0x4cb965(0x206),..._0x1d9783===void 0x0?{}:{'headers':{'content-type':'application/json'},'body':JSON[_0x4cb965(0x25a)](_0x1d9783,(_0x2d015b,_0x239138)=>_0x239138 instanceof Uint8Array?g(_0x239138):_0x239138)}};}function p(){const _0xcf21a4=_0x3464d0;if(typeof globalThis[_0xcf21a4(0x22c)]!=_0xcf21a4(0x239))throw TypeError('A\x20fetch\x20implementation\x20is\x20required');return globalThis['fetch'][_0xcf21a4(0x1e4)](globalThis);}async function m(_0x148664){const _0x5c172f=_0x3464d0;try{return await _0x148664[_0x5c172f(0x20f)]();}catch{throw new c(_0x148664[_0x5c172f(0x1ff)],_0x5c172f(0x23d),_0x5c172f(0x21c));}}function h(_0x5cfd93,_0x3c6e1e){const _0x14c847=_0x3464d0;let _0x1ffd81=b(_0x3c6e1e)&&b(_0x3c6e1e[_0x14c847(0x23e)])?_0x3c6e1e[_0x14c847(0x23e)]:{};return new c(_0x5cfd93,typeof _0x1ffd81[_0x14c847(0x218)]==_0x14c847(0x21e)||typeof _0x1ffd81[_0x14c847(0x218)]=='number'?_0x1ffd81[_0x14c847(0x218)]:_0x14c847(0x25e),typeof _0x1ffd81['message']==_0x14c847(0x21e)?_0x1ffd81[_0x14c847(0x1dd)]:_0x14c847(0x226)+_0x5cfd93,typeof _0x1ffd81[_0x14c847(0x261)]==_0x14c847(0x22d)?_0x1ffd81[_0x14c847(0x261)]:void 0x0);}function g(_0x735956){let _0x45be31='';for(let _0x5a33de of _0x735956)_0x45be31+=String['fromCharCode'](_0x5a33de);return btoa(_0x45be31);}function _0x42d1(){const _0x17c2b9=['29076jWCQnY','fetch','boolean','Merge\x20preview\x20block\x20','_disposed','_preview','doc','2668568ghoUbm','_fetch','createUnitFromSnapshot','workbook','addUnit','_current','2978322GgtNEm','function','_listeners','_open','5167827eODXBV','INVALID_RESPONSE','error','event','WebSocket','originalMeta','unitID','_scheduleReconnect','values','wss:','sheets','https:','charCodeAt','override','current','board','find','_origin','Worktree\x20event\x20connection\x20failed','close','reopenWorktree','addEventListener','object','snapshot','reject','slide','_socket','copyFileMeta','/universer-api/worktrees/','Worktree\x20event\x20connection\x20closed','stringify','from','preview','type','HTTP_ERROR','fetchMissingChangesets','decode','retryable','evaluateUnitMerge','199461sgUiHJ','name','message','dispose','/comb/connect','connect','getWorktree','getDeserializedSheetBlock','search','bind','parse','WorktreeClientError','hash','saveSheetBlock','evaluation','1656vkOPZu','ready','password','reconnectDelayMs','_connectedOnce','Server\x20returned\x20an\x20invalid\x20merge\x20preview','origin\x20must\x20use\x20HTTP\x20or\x20HTTPS','Merge\x20preview\x20snapshot\x20service\x20is\x20read-only','sheetBlocks','12IxAJsj','worktree','origin','units/from-data','worktreeID','isArray','Merge\x20preview\x20Unit\x20identity\x20does\x20not\x20match','Worktree\x20response\x20is\x20missing\x20worktree\x20data','getResourcesRequest','blockID','isSafeInteger','resolve','status','1166568vvISPk','_worktreeID','worktreeID\x20is\x20required','/universer-api/user/session-ticket','createWebSocket','delete','POST','WorktreeEventClient\x20is\x20disposed','/units/','origin\x20cannot\x20contain\x20path,\x20credentials\x20or\x20query','pathname','_validateIdentity','discardWorktree','units/from-snapshot','saveSnapshot','json','/merge-preview','265OeXDDL','\x20is\x20missing','catch','data','_reconnectDelayMs','_reconnectTimer','replace','code','_createWebSocket','protocol','/universer-api/worktrees','Server\x20returned\x20invalid\x20JSON','_post','string','ticket','reopen','discard','/snapshot','mergeWorktree','ws:','Worktree\x20response\x20is\x20missing\x20merge\x20evaluation','Worktree\x20request\x20failed\x20with\x20HTTP\x20','getSheetBlock','setUnitRemoved','createWorktree','add'];_0x42d1=function(){return _0x17c2b9;};return _0x42d1();}function _(_0x4fda78){const _0x11a53e=_0x3464d0;let _0x412919=_0x4fda78['workbook']??_0x4fda78[_0x11a53e(0x231)]??_0x4fda78[_0x11a53e(0x255)]??_0x4fda78[_0x11a53e(0x24b)];if(_0x412919&&(_0x412919['originalMeta']=v(_0x412919[_0x11a53e(0x241)],0xc8),_0x4fda78[_0x11a53e(0x235)])){for(let _0x44591a of Object[_0x11a53e(0x244)](_0x4fda78['workbook'][_0x11a53e(0x246)]))_0x44591a[_0x11a53e(0x241)]=v(_0x44591a[_0x11a53e(0x241)],0xc8);}}function v(_0x19c353,_0x44230c){const _0x5e413a=_0x3464d0;if(_0x19c353 instanceof Uint8Array)return _0x19c353;if(typeof _0x19c353!=_0x5e413a(0x21e))throw y(_0x44230c);try{let _0x9ab381=atob(_0x19c353);return Uint8Array[_0x5e413a(0x25b)](_0x9ab381,_0x1fe26e=>_0x1fe26e[_0x5e413a(0x248)](0x0));}catch{throw y(_0x44230c);}}function y(_0x80732c){const _0x3bff26=_0x3464d0;return new c(_0x80732c,_0x3bff26(0x23d),_0x3bff26(0x1ef));}function b(_0x3f7ccc){const _0x293cb5=_0x3464d0;return!!_0x3f7ccc&&typeof _0x3f7ccc==_0x293cb5(0x252)&&!Array[_0x293cb5(0x1f8)](_0x3f7ccc);}var x=class{[_0x3464d0(0x24d)];[_0x3464d0(0x233)];constructor(_0x5caeaf){const _0x4b916f=_0x3464d0;this[_0x4b916f(0x24d)]=r(_0x5caeaf[_0x4b916f(0x1f5)]),this[_0x4b916f(0x233)]=_0x5caeaf['fetch']??p();}[_0x3464d0(0x229)](_0x11b015){const _0x4da742=_0x3464d0;return l(this[_0x4da742(0x233)],this[_0x4da742(0x24d)]+_0x4da742(0x21b),f(_0x11b015));}[_0x3464d0(0x1e1)](_0x1fae8e){const _0x19064b=_0x3464d0;return l(this[_0x19064b(0x233)],i(this[_0x19064b(0x24d)],_0x1fae8e));}[_0x3464d0(0x262)](_0x3f7839,_0x246c65){const _0x47bf88=_0x3464d0;return d(this[_0x47bf88(0x233)],i(this['_origin'],_0x3f7839)+_0x47bf88(0x208)+encodeURIComponent(_0x246c65)+_0x47bf88(0x210));}[_0x3464d0(0x236)](_0x1111cb,_0x3726ea){const _0x3d72a2=_0x3464d0;return this[_0x3d72a2(0x21d)](_0x1111cb,'units',{'unitID':_0x3726ea});}[_0x3464d0(0x228)](_0x5c660d,_0xcace20,_0x4cfd95){const _0xde70b8=_0x3464d0;return this[_0xde70b8(0x21d)](_0x5c660d,'units/'+encodeURIComponent(_0xcace20)+'/removal',{'removed':_0x4cfd95});}[_0x3464d0(0x234)](_0x6e2933,_0x414d1a){const _0x84fdb6=_0x3464d0;return this[_0x84fdb6(0x21d)](_0x6e2933,_0x84fdb6(0x20d),_0x414d1a);}['createUnitFromData'](_0x483c71,_0x422901){const _0x4ac037=_0x3464d0;return this['_post'](_0x483c71,_0x4ac037(0x1f6),_0x422901);}['markReady'](_0x454051){const _0x350472=_0x3464d0;return this[_0x350472(0x21d)](_0x454051,_0x350472(0x1eb));}[_0x3464d0(0x250)](_0x16321e){const _0x6ad1fa=_0x3464d0;return this[_0x6ad1fa(0x21d)](_0x16321e,_0x6ad1fa(0x220));}[_0x3464d0(0x20c)](_0x4efb48){const _0x429011=_0x3464d0;return this[_0x429011(0x21d)](_0x4efb48,_0x429011(0x221));}[_0x3464d0(0x223)](_0x4d5330){const _0x59df5a=_0x3464d0;return this[_0x59df5a(0x21d)](_0x4d5330,'merge');}[_0x3464d0(0x21d)](_0x3eb0ef,_0x4b1559,_0xa82947){const _0x2a62bd=_0x3464d0;return l(this[_0x2a62bd(0x233)],i(this[_0x2a62bd(0x24d)],_0x3eb0ef)+'/'+_0x4b1559,f(_0xa82947));}},S=class{[_0x3464d0(0x24d)];['_worktreeID'];['_fetch'];[_0x3464d0(0x215)];[_0x3464d0(0x219)];[_0x3464d0(0x23a)]=new Set();[_0x3464d0(0x256)];[_0x3464d0(0x216)];[_0x3464d0(0x237)];[_0x3464d0(0x22f)]=!0x1;[_0x3464d0(0x1ee)]=!0x1;constructor(_0x202d9e){const _0x254221=_0x3464d0;if(this[_0x254221(0x24d)]=r(_0x202d9e[_0x254221(0x1f5)]),!_0x202d9e[_0x254221(0x1f7)])throw TypeError('worktreeID\x20is\x20required');if(this[_0x254221(0x201)]=_0x202d9e['worktreeID'],this[_0x254221(0x233)]=_0x202d9e[_0x254221(0x22c)]??p(),this[_0x254221(0x215)]=_0x202d9e[_0x254221(0x1ed)]??0x3e8,!Number[_0x254221(0x1fd)](this['_reconnectDelayMs'])||this[_0x254221(0x215)]<0x0)throw TypeError('reconnectDelayMs\x20must\x20be\x20a\x20non-negative\x20integer');this[_0x254221(0x219)]=_0x202d9e[_0x254221(0x204)]??(_0x27a698=>{const _0x51c51e=_0x254221;if(typeof globalThis[_0x51c51e(0x240)]!='function')throw TypeError('A\x20WebSocket\x20implementation\x20is\x20required');return new globalThis[(_0x51c51e(0x240))](_0x27a698);});}get[_0x3464d0(0x24a)](){return this['_current'];}['onChange'](_0x52f6eb){const _0xe6a3f0=_0x3464d0;return this[_0xe6a3f0(0x23a)][_0xe6a3f0(0x22a)](_0x52f6eb),{'dispose':()=>this['_listeners'][_0xe6a3f0(0x205)](_0x52f6eb)};}async[_0x3464d0(0x1e0)](){const _0x4392ea=_0x3464d0;if(this[_0x4392ea(0x22f)])throw Error(_0x4392ea(0x207));return this[_0x4392ea(0x237)]?this[_0x4392ea(0x237)]:this['_open'](!0x1);}[_0x3464d0(0x1de)](){const _0x13f0d9=_0x3464d0;this['_disposed']||(this[_0x13f0d9(0x22f)]=!0x0,this['_reconnectTimer']&&clearTimeout(this[_0x13f0d9(0x216)]),this[_0x13f0d9(0x256)]?.[_0x13f0d9(0x24f)](0x3e8,'Client\x20disposed'),this[_0x13f0d9(0x256)]=void 0x0,this['_listeners']['clear']());}async['_open'](_0x4b4c8f){const _0x1906f7=_0x3464d0;let _0x4564d1=await u(this['_fetch'],this[_0x1906f7(0x24d)]+_0x1906f7(0x203));if(this[_0x1906f7(0x22f)])throw Error('WorktreeEventClient\x20is\x20disposed');let _0x41022e=a(this[_0x1906f7(0x24d)],this[_0x1906f7(0x201)])+'/events?sessionTicket='+encodeURIComponent(_0x4564d1);return new Promise((_0x5e5922,_0x5e5fd9)=>{const _0x39eaef=_0x1906f7;let _0x36ff8a=!0x1,_0x23487a=this['_createWebSocket'](_0x41022e);this[_0x39eaef(0x256)]=_0x23487a,_0x23487a['addEventListener']('message',_0x517406=>{const _0x5770ae=_0x39eaef;try{let _0x2561aa=C(_0x517406['data']);_0x36ff8a=!0x0,this[_0x5770ae(0x1ee)]=!0x0,this['_current']=_0x2561aa;for(let _0x424ff5 of[...this[_0x5770ae(0x23a)]])try{_0x424ff5(_0x2561aa);}catch{}_0x5e5922(_0x2561aa);}catch(_0x3ce1db){_0x23487a['close'](0x3eb,'Invalid\x20Worktree\x20event'),_0x36ff8a||_0x5e5fd9(_0x3ce1db);}}),_0x23487a[_0x39eaef(0x251)]('error',()=>{const _0x1e1dc5=_0x39eaef;_0x36ff8a||_0x5e5fd9(Error(_0x1e1dc5(0x24e)));}),_0x23487a[_0x39eaef(0x251)](_0x39eaef(0x24f),()=>{const _0x4aa0fb=_0x39eaef;this['_socket']===_0x23487a&&(this['_socket']=void 0x0),!_0x36ff8a&&!_0x4b4c8f&&_0x5e5fd9(Error(_0x4aa0fb(0x259))),this[_0x4aa0fb(0x1ee)]&&this[_0x4aa0fb(0x243)]();});});}[_0x3464d0(0x243)](){const _0x289ad7=_0x3464d0;this[_0x289ad7(0x22f)]||this[_0x289ad7(0x216)]||(this['_reconnectTimer']=setTimeout(()=>{const _0x286782=_0x289ad7;this[_0x286782(0x216)]=void 0x0,this[_0x286782(0x23b)](!0x0)[_0x286782(0x213)](()=>this['_scheduleReconnect']());},this[_0x289ad7(0x215)]));}};function C(_0xc19604){const _0x43a961=_0x3464d0;let _0x306de8=typeof _0xc19604==_0x43a961(0x21e)?JSON[_0x43a961(0x1e5)](_0xc19604):_0xc19604 instanceof Blob?void 0x0:JSON[_0x43a961(0x1e5)](new TextDecoder()[_0x43a961(0x260)](_0xc19604));if(!_0x306de8||typeof _0x306de8!=_0x43a961(0x252)||_0x306de8[_0x43a961(0x23f)]!=='worktreeChanged'||!_0x306de8[_0x43a961(0x1f4)]||typeof _0x306de8[_0x43a961(0x1f4)]!=_0x43a961(0x252))throw Error('Invalid\x20Worktree\x20event\x20message');return _0x306de8['worktree'];}export{x as WorktreeClient,c as WorktreeClientError,S as WorktreeEventClient,t as WorktreeMergePreviewSnapshotService,o as createWorktreeCollaborationConfig,s as createWorktreeMergePreviewConfig};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@univerjs-pro/collaboration-worktree-client",
3
3
  "type": "module",
4
- "version": "1.0.0-insiders.20260808-70eefdd",
4
+ "version": "1.0.0",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.mjs",
7
7
  "types": "./dist/index.d.ts",
@@ -17,15 +17,12 @@
17
17
  ],
18
18
  "dependencies": {
19
19
  "@oxc-project/runtime": "0.139.0",
20
- "@univerjs-pro/collaboration": "1.0.0-insiders.20260808-70eefdd",
21
- "@univerjs-pro/collaboration-client": "1.0.0-insiders.20260808-70eefdd",
22
- "@univerjs-pro/collaboration-service": "1.0.0-insiders.20260808-70eefdd",
23
- "@univerjs-pro/collaboration-worktree-service": "1.0.0-insiders.20260808-70eefdd",
24
- "@univerjs/core": "1.0.0-insiders.20260808-70eefdd",
25
- "@univerjs/network": "1.0.0-insiders.20260808-70eefdd",
26
- "@univerjs/protocol": "1.0.0-insiders.20260808-70eefdd"
27
- },
28
- "publishConfig": {
29
- "access": "public"
20
+ "@univerjs-pro/collaboration": "1.0.0",
21
+ "@univerjs-pro/collaboration-client": "1.0.0",
22
+ "@univerjs-pro/collaboration-service": "1.0.0",
23
+ "@univerjs-pro/collaboration-worktree-service": "1.0.0",
24
+ "@univerjs/core": "1.0.0",
25
+ "@univerjs/network": "1.0.0",
26
+ "@univerjs/protocol": "1.0.0"
30
27
  }
31
- }
28
+ }