@univerjs-pro/collaboration-worktree-client 1.0.0-beta.2
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 +93 -0
- package/README.zh-CN.md +98 -0
- package/dist/index.cjs +1 -0
- package/dist/index.d.ts +110 -0
- package/dist/index.mjs +1 -0
- package/package.json +28 -0
package/README.md
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
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.
|
package/README.zh-CN.md
ADDED
|
@@ -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
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object['defineProperty'](exports,Symbol['toStringTag'],{'value':'Module'});let e=require('@univerjs-pro/collaboration');var t=class{['_preview'];constructor(_0x2ee3fc){this['_preview']=_0x2ee3fc['preview'];}['getUnitOnRev'](_0x115fa5,_0x2bf525){return this['_validateIdentity'](_0x2bf525['unitID'],_0x2bf525['type']),Promise['resolve']({'error':void 0x0,'snapshot':this['_preview']['snapshot'],'changesets':[]});}['getSheetBlock'](_0xcf6219,_0x833df7){this['_validateIdentity'](_0x833df7['unitID'],_0x833df7['type']);let _0x3137db=this['_preview']['sheetBlocks']?.['find'](_0x598f4c=>_0x598f4c['id']===_0x833df7['blockID']);return _0x3137db?Promise['resolve']({'error':void 0x0,'block':_0x3137db}):Promise['reject'](Error('Merge\x20preview\x20block\x20'+_0x833df7['blockID']+'\x20is\x20missing'));}['getDeserializedSheetBlock'](_0x2d2362,_0x2754ed){return this['getSheetBlock'](_0x2d2362,_0x2754ed);}['fetchMissingChangesets'](_0x5dfe3d,_0x2f19fd){return this['_validateIdentity'](_0x2f19fd['unitID'],_0x2f19fd['type']),Promise['resolve']({'error':void 0x0,'changesets':[],'latestRevision':this['_preview']['snapshot']['rev']});}['getResourcesRequest'](_0x4302a9,_0x33e820){return this['_validateIdentity'](_0x33e820['unitID'],_0x33e820['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'](_0x15c9d6,_0x4a3f2e){if(_0x15c9d6!==this['_preview']['snapshot']['unitID']||_0x4a3f2e!==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(_0x4ea2f7){let _0x213601;try{_0x213601=new URL(_0x4ea2f7);}catch{throw TypeError('origin\x20must\x20be\x20an\x20absolute\x20HTTP(S)\x20URL');}if(_0x213601['protocol']!=='http:'&&_0x213601['protocol']!=='https:')throw TypeError('origin\x20must\x20use\x20HTTP\x20or\x20HTTPS');if(_0x213601['pathname']!=='/'||_0x213601['search']||_0x213601['hash']||_0x213601['username']||_0x213601['password'])throw TypeError('origin\x20cannot\x20contain\x20path,\x20credentials\x20or\x20query');return _0x213601['origin'];}function i(_0x103872,_0x584d1e){if(!_0x584d1e)throw TypeError('worktreeID\x20is\x20required');return _0x103872+'/universer-api/worktrees/'+encodeURIComponent(_0x584d1e);}function a(_0xbed0b9,_0x496fe8){let _0xf495b7=new URL(i(_0xbed0b9,_0x496fe8));return _0xf495b7['protocol']=_0xf495b7['protocol']==='https:'?'wss:':'ws:',_0xf495b7['toString']()['replace'](/\/$/,'');}function o(_0x1fef5d){let _0x6ec5e0=r(_0x1fef5d['origin']),_0x20c237=i(_0x6ec5e0,_0x1fef5d['worktreeID']),_0x1e5a7d=a(_0x6ec5e0,_0x1fef5d['worktreeID']);return{'snapshotServerUrl':_0x20c237+'/snapshot','collabSubmitChangesetUrl':_0x20c237+'/comb','collabWebSocketUrl':_0x1e5a7d+'/comb/connect','wsSessionTicketUrl':_0x6ec5e0+'/universer-api/user/session-ticket','override':[..._0x1fef5d['override']??[]]};}function s(_0x3ea46d){return{'enableCollaboration':!0x1,'snapshotServerUrl':i(r(_0x3ea46d['origin']),_0x3ea46d['worktreeID'])+'/snapshot','override':[[e['ISnapshotServerService'],{'useValue':new t({'preview':_0x3ea46d['preview']})}],..._0x3ea46d['override']??[]]};}var c=class extends Error{['status'];['code'];['retryable'];constructor(_0x2d36b3,_0x1ef44a,_0x2ea765,_0x553b76){super(_0x2ea765),this['status']=_0x2d36b3,this['code']=_0x1ef44a,this['retryable']=_0x553b76,this['name']='WorktreeClientError';}};async function l(_0x401c7e,_0x2af79a,_0x4c60a1){let _0x1654e7=await _0x401c7e(_0x2af79a,_0x4c60a1),_0x14c356=await m(_0x1654e7);if(!_0x1654e7['ok'])throw h(_0x1654e7['status'],_0x14c356);if(!b(_0x14c356)||!b(_0x14c356['worktree']))throw new c(_0x1654e7['status'],'INVALID_RESPONSE','Worktree\x20response\x20is\x20missing\x20worktree\x20data');return _0x14c356['worktree'];}async function u(_0x1ac00a,_0x3ea478){let _0x3d312b=await _0x1ac00a(_0x3ea478),_0x53d60b=await m(_0x3d312b);if(!_0x3d312b['ok'])throw h(_0x3d312b['status'],_0x53d60b);if(!b(_0x53d60b)||typeof _0x53d60b['ticket']!='string'||!_0x53d60b['ticket'])throw new c(_0x3d312b['status'],'INVALID_RESPONSE','Session\x20ticket\x20response\x20is\x20missing\x20ticket');return _0x53d60b['ticket'];}async function d(_0x539df4,_0x3eaa08){let _0x525b3d=await _0x539df4(_0x3eaa08),_0x4fc42c=await m(_0x525b3d);if(!_0x525b3d['ok'])throw h(_0x525b3d['status'],_0x4fc42c);if(!b(_0x4fc42c)||!b(_0x4fc42c['evaluation']))throw new c(_0x525b3d['status'],'INVALID_RESPONSE','Worktree\x20response\x20is\x20missing\x20merge\x20evaluation');let _0x14a489=_0x4fc42c['evaluation'];if(_0x14a489['status']==='preview'&&b(_0x14a489['preview'])&&b(_0x14a489['preview']['snapshot'])&&(_(_0x14a489['preview']['snapshot']),Array['isArray'](_0x14a489['preview']['sheetBlocks'])))for(let _0x1711e0 of _0x14a489['preview']['sheetBlocks']){if(!b(_0x1711e0))throw y(_0x525b3d['status']);_0x1711e0['data']=v(_0x1711e0['data'],_0x525b3d['status']);}if(typeof _0x14a489['status']!='string'||typeof _0x14a489['worktreeID']!='string'||typeof _0x14a489['unitID']!='string')throw y(_0x525b3d['status']);return _0x14a489;}function f(_0x510444){return{'method':'POST',..._0x510444===void 0x0?{}:{'headers':{'content-type':'application/json'},'body':JSON['stringify'](_0x510444,(_0x37fd4e,_0x4d99fa)=>_0x4d99fa instanceof Uint8Array?g(_0x4d99fa):_0x4d99fa)}};}function p(){if(typeof globalThis['fetch']!='function')throw TypeError('A\x20fetch\x20implementation\x20is\x20required');return globalThis['fetch']['bind'](globalThis);}async function m(_0x268d8a){try{return await _0x268d8a['json']();}catch{throw new c(_0x268d8a['status'],'INVALID_RESPONSE','Server\x20returned\x20invalid\x20JSON');}}function h(_0x4684d5,_0x7829c8){let _0x59311e=b(_0x7829c8)&&b(_0x7829c8['error'])?_0x7829c8['error']:{};return new c(_0x4684d5,typeof _0x59311e['code']=='string'||typeof _0x59311e['code']=='number'?_0x59311e['code']:'HTTP_ERROR',typeof _0x59311e['message']=='string'?_0x59311e['message']:'Worktree\x20request\x20failed\x20with\x20HTTP\x20'+_0x4684d5,typeof _0x59311e['retryable']=='boolean'?_0x59311e['retryable']:void 0x0);}function g(_0x3600a2){let _0x410eca='';for(let _0x25916a of _0x3600a2)_0x410eca+=String['fromCharCode'](_0x25916a);return btoa(_0x410eca);}function _(_0x19fe7a){let _0x59e4a8=_0x19fe7a['workbook']??_0x19fe7a['doc']??_0x19fe7a['slide']??_0x19fe7a['board'];if(_0x59e4a8&&(_0x59e4a8['originalMeta']=v(_0x59e4a8['originalMeta'],0xc8),_0x19fe7a['workbook'])){for(let _0xbd45a2 of Object['values'](_0x19fe7a['workbook']['sheets']))_0xbd45a2['originalMeta']=v(_0xbd45a2['originalMeta'],0xc8);}}function v(_0x22008c,_0x4806cc){if(_0x22008c instanceof Uint8Array)return _0x22008c;if(typeof _0x22008c!='string')throw y(_0x4806cc);try{let _0x4b5b98=atob(_0x22008c);return Uint8Array['from'](_0x4b5b98,_0x2b832d=>_0x2b832d['charCodeAt'](0x0));}catch{throw y(_0x4806cc);}}function y(_0x1ddd09){return new c(_0x1ddd09,'INVALID_RESPONSE','Server\x20returned\x20an\x20invalid\x20merge\x20preview');}function b(_0x298fec){return!!_0x298fec&&typeof _0x298fec=='object'&&!Array['isArray'](_0x298fec);}var x=class{['_origin'];['_fetch'];constructor(_0x330494){this['_origin']=r(_0x330494['origin']),this['_fetch']=_0x330494['fetch']??p();}['createWorktree'](_0x5f47f6){return l(this['_fetch'],this['_origin']+'/universer-api/worktrees',f(_0x5f47f6));}['getWorktree'](_0x14a573){return l(this['_fetch'],i(this['_origin'],_0x14a573));}['evaluateUnitMerge'](_0x979e6d,_0x3a46ca){return d(this['_fetch'],i(this['_origin'],_0x979e6d)+'/units/'+encodeURIComponent(_0x3a46ca)+'/merge-preview');}['addUnit'](_0x256b86,_0x891a4a){return this['_post'](_0x256b86,'units',{'unitID':_0x891a4a});}['createUnitFromSnapshot'](_0x3db05a,_0x4657b9){return this['_post'](_0x3db05a,'units/from-snapshot',_0x4657b9);}['createUnitFromData'](_0x44bbcc,_0x4efd38){return this['_post'](_0x44bbcc,'units/from-data',_0x4efd38);}['markReady'](_0x5b7e16){return this['_post'](_0x5b7e16,'ready');}['reopenWorktree'](_0xfa6394){return this['_post'](_0xfa6394,'reopen');}['discardWorktree'](_0x1a0588){return this['_post'](_0x1a0588,'discard');}['mergeWorktree'](_0x34f2a0){return this['_post'](_0x34f2a0,'merge');}['_post'](_0x225492,_0x1f8c93,_0x429593){return l(this['_fetch'],i(this['_origin'],_0x225492)+'/'+_0x1f8c93,f(_0x429593));}},S=class{['_origin'];['_worktreeID'];['_fetch'];['_reconnectDelayMs'];['_createWebSocket'];['_listeners']=new Set();['_socket'];['_reconnectTimer'];['_current'];['_disposed']=!0x1;['_connectedOnce']=!0x1;constructor(_0x1b79d1){if(this['_origin']=r(_0x1b79d1['origin']),!_0x1b79d1['worktreeID'])throw TypeError('worktreeID\x20is\x20required');if(this['_worktreeID']=_0x1b79d1['worktreeID'],this['_fetch']=_0x1b79d1['fetch']??p(),this['_reconnectDelayMs']=_0x1b79d1['reconnectDelayMs']??0x3e8,!Number['isSafeInteger'](this['_reconnectDelayMs'])||this['_reconnectDelayMs']<0x0)throw TypeError('reconnectDelayMs\x20must\x20be\x20a\x20non-negative\x20integer');this['_createWebSocket']=_0x1b79d1['createWebSocket']??(_0x597eed=>{if(typeof globalThis['WebSocket']!='function')throw TypeError('A\x20WebSocket\x20implementation\x20is\x20required');return new globalThis['WebSocket'](_0x597eed);});}get['current'](){return this['_current'];}['onChange'](_0x587eff){return this['_listeners']['add'](_0x587eff),{'dispose':()=>this['_listeners']['delete'](_0x587eff)};}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'](_0x5e7e04){let _0x10a1a3=await u(this['_fetch'],this['_origin']+'/universer-api/user/session-ticket');if(this['_disposed'])throw Error('WorktreeEventClient\x20is\x20disposed');let _0x155d4a=a(this['_origin'],this['_worktreeID'])+'/events?sessionTicket='+encodeURIComponent(_0x10a1a3);return new Promise((_0x2492e2,_0x652124)=>{let _0x19df66=!0x1,_0x58a966=this['_createWebSocket'](_0x155d4a);this['_socket']=_0x58a966,_0x58a966['addEventListener']('message',_0x4f426f=>{try{let _0x123506=C(_0x4f426f['data']);_0x19df66=!0x0,this['_connectedOnce']=!0x0,this['_current']=_0x123506;for(let _0x470769 of[...this['_listeners']])try{_0x470769(_0x123506);}catch{}_0x2492e2(_0x123506);}catch(_0x1d2ad5){_0x58a966['close'](0x3eb,'Invalid\x20Worktree\x20event'),_0x19df66||_0x652124(_0x1d2ad5);}}),_0x58a966['addEventListener']('error',()=>{_0x19df66||_0x652124(Error('Worktree\x20event\x20connection\x20failed'));}),_0x58a966['addEventListener']('close',()=>{this['_socket']===_0x58a966&&(this['_socket']=void 0x0),!_0x19df66&&!_0x5e7e04&&_0x652124(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(_0x38cc63){let _0x1b5aea=typeof _0x38cc63=='string'?JSON['parse'](_0x38cc63):_0x38cc63 instanceof Blob?void 0x0:JSON['parse'](new TextDecoder()['decode'](_0x38cc63));if(!_0x1b5aea||typeof _0x1b5aea!='object'||_0x1b5aea['event']!=='worktreeChanged'||!_0x1b5aea['worktree']||typeof _0x1b5aea['worktree']!='object')throw Error('Invalid\x20Worktree\x20event\x20message');return _0x1b5aea['worktree'];}exports['WorktreeClient']=x,exports['WorktreeClientError']=c,exports['WorktreeEventClient']=S,exports['WorktreeMergePreviewSnapshotService']=t,exports['createWorktreeCollaborationConfig']=o,exports['createWorktreeMergePreviewConfig']=s;
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { IUniverCollaborationClientConfig } from "@univerjs-pro/collaboration-client";
|
|
2
|
+
import { DependencyOverride } from "@univerjs/core";
|
|
3
|
+
import { CreateUnitFromDataInput, CreateUnitFromSnapshotInput, SaveSnapshotInput } from "@univerjs-pro/collaboration-service";
|
|
4
|
+
import { CreateWorktreeInput, WorktreeData, WorktreeUnitMergeEvaluation } from "@univerjs-pro/collaboration-worktree-service";
|
|
5
|
+
import { ILogContext, ISnapshotServerService } from "@univerjs-pro/collaboration";
|
|
6
|
+
import { IFetchMissingChangesetsRequest, IFetchMissingChangesetsResponse, IGetDeserializedSheetBlockResponse, IGetResourcesRequest, IGetResourcesResponse, IGetSheetBlockRequest, IGetSheetBlockResponse, IGetUnitOnRevRequest, IGetUnitOnRevResponse } from "@univerjs/protocol";
|
|
7
|
+
|
|
8
|
+
//#region src/config.d.ts
|
|
9
|
+
interface CreateWorktreeCollaborationConfigOptions {
|
|
10
|
+
readonly origin: string;
|
|
11
|
+
readonly worktreeID: string;
|
|
12
|
+
readonly override?: DependencyOverride;
|
|
13
|
+
}
|
|
14
|
+
type WorktreeCollaborationConfig = Pick<IUniverCollaborationClientConfig, "snapshotServerUrl" | "collabSubmitChangesetUrl" | "collabWebSocketUrl" | "wsSessionTicketUrl" | "override">;
|
|
15
|
+
interface CreateWorktreeMergePreviewConfigOptions {
|
|
16
|
+
readonly origin: string;
|
|
17
|
+
readonly worktreeID: string;
|
|
18
|
+
readonly preview: SaveSnapshotInput;
|
|
19
|
+
readonly override?: DependencyOverride;
|
|
20
|
+
}
|
|
21
|
+
type WorktreeMergePreviewConfig = Pick<IUniverCollaborationClientConfig, "enableCollaboration" | "snapshotServerUrl" | "override">;
|
|
22
|
+
declare function createWorktreeCollaborationConfig(options: CreateWorktreeCollaborationConfigOptions): WorktreeCollaborationConfig;
|
|
23
|
+
declare function createWorktreeMergePreviewConfig(options: CreateWorktreeMergePreviewConfigOptions): WorktreeMergePreviewConfig;
|
|
24
|
+
//#endregion
|
|
25
|
+
//#region src/http.d.ts
|
|
26
|
+
type WorktreeFetch = (input: string | URL | Request, init?: RequestInit) => Promise<Response>;
|
|
27
|
+
interface WorktreeHttpOptions {
|
|
28
|
+
readonly fetch?: WorktreeFetch;
|
|
29
|
+
}
|
|
30
|
+
declare class WorktreeClientError extends Error {
|
|
31
|
+
readonly status: number;
|
|
32
|
+
readonly code: string | number;
|
|
33
|
+
readonly retryable?: boolean | undefined;
|
|
34
|
+
constructor(status: number, code: string | number, message: string, retryable?: boolean | undefined);
|
|
35
|
+
}
|
|
36
|
+
//#endregion
|
|
37
|
+
//#region src/worktree-client.d.ts
|
|
38
|
+
interface WorktreeClientOptions extends WorktreeHttpOptions {
|
|
39
|
+
readonly origin: string;
|
|
40
|
+
}
|
|
41
|
+
declare class WorktreeClient {
|
|
42
|
+
private readonly _origin;
|
|
43
|
+
private readonly _fetch;
|
|
44
|
+
constructor(options: WorktreeClientOptions);
|
|
45
|
+
createWorktree(input: CreateWorktreeInput): Promise<WorktreeData>;
|
|
46
|
+
getWorktree(worktreeID: string): Promise<WorktreeData>;
|
|
47
|
+
evaluateUnitMerge(worktreeID: string, unitID: string): Promise<WorktreeUnitMergeEvaluation>;
|
|
48
|
+
addUnit(worktreeID: string, unitID: string): Promise<WorktreeData>;
|
|
49
|
+
createUnitFromSnapshot(worktreeID: string, input: CreateUnitFromSnapshotInput): Promise<WorktreeData>;
|
|
50
|
+
createUnitFromData(worktreeID: string, input: CreateUnitFromDataInput): Promise<WorktreeData>;
|
|
51
|
+
markReady(worktreeID: string): Promise<WorktreeData>;
|
|
52
|
+
reopenWorktree(worktreeID: string): Promise<WorktreeData>;
|
|
53
|
+
discardWorktree(worktreeID: string): Promise<WorktreeData>;
|
|
54
|
+
mergeWorktree(worktreeID: string): Promise<WorktreeData>;
|
|
55
|
+
private _post;
|
|
56
|
+
}
|
|
57
|
+
//#endregion
|
|
58
|
+
//#region src/worktree-event-client.d.ts
|
|
59
|
+
interface WorktreeEventClientOptions extends WorktreeHttpOptions {
|
|
60
|
+
readonly origin: string;
|
|
61
|
+
readonly worktreeID: string;
|
|
62
|
+
readonly reconnectDelayMs?: number;
|
|
63
|
+
readonly createWebSocket?: (url: string) => WebSocket;
|
|
64
|
+
}
|
|
65
|
+
interface WorktreeEventSubscription {
|
|
66
|
+
dispose(): void;
|
|
67
|
+
}
|
|
68
|
+
declare class WorktreeEventClient {
|
|
69
|
+
private readonly _origin;
|
|
70
|
+
private readonly _worktreeID;
|
|
71
|
+
private readonly _fetch;
|
|
72
|
+
private readonly _reconnectDelayMs;
|
|
73
|
+
private readonly _createWebSocket;
|
|
74
|
+
private readonly _listeners;
|
|
75
|
+
private _socket;
|
|
76
|
+
private _reconnectTimer;
|
|
77
|
+
private _current;
|
|
78
|
+
private _disposed;
|
|
79
|
+
private _connectedOnce;
|
|
80
|
+
constructor(options: WorktreeEventClientOptions);
|
|
81
|
+
get current(): WorktreeData | undefined;
|
|
82
|
+
onChange(listener: (worktree: WorktreeData) => void): WorktreeEventSubscription;
|
|
83
|
+
connect(): Promise<WorktreeData>;
|
|
84
|
+
dispose(): void;
|
|
85
|
+
private _open;
|
|
86
|
+
private _scheduleReconnect;
|
|
87
|
+
}
|
|
88
|
+
//#endregion
|
|
89
|
+
//#region src/merge-preview-snapshot-server.d.ts
|
|
90
|
+
interface WorktreeMergePreviewSnapshotServiceOptions {
|
|
91
|
+
readonly preview: SaveSnapshotInput;
|
|
92
|
+
}
|
|
93
|
+
declare class WorktreeMergePreviewSnapshotService implements ISnapshotServerService {
|
|
94
|
+
private readonly _preview;
|
|
95
|
+
constructor(options: WorktreeMergePreviewSnapshotServiceOptions);
|
|
96
|
+
getUnitOnRev(_context: ILogContext, params: IGetUnitOnRevRequest): Promise<IGetUnitOnRevResponse>;
|
|
97
|
+
getSheetBlock(_context: ILogContext, params: IGetSheetBlockRequest): Promise<IGetSheetBlockResponse>;
|
|
98
|
+
getDeserializedSheetBlock(context: ILogContext, params: IGetSheetBlockRequest): Promise<IGetDeserializedSheetBlockResponse | IGetSheetBlockResponse>;
|
|
99
|
+
fetchMissingChangesets(_context: ILogContext, params: IFetchMissingChangesetsRequest): Promise<IFetchMissingChangesetsResponse>;
|
|
100
|
+
getResourcesRequest(_context: ILogContext, params: IGetResourcesRequest): Promise<IGetResourcesResponse>;
|
|
101
|
+
saveSnapshot(): Promise<never>;
|
|
102
|
+
updateSnapshot(): Promise<never>;
|
|
103
|
+
saveSheetBlock(): Promise<never>;
|
|
104
|
+
saveChangeset(): Promise<never>;
|
|
105
|
+
copyFileMeta(): Promise<never>;
|
|
106
|
+
getLatestCsReqIdBySid(): Promise<never>;
|
|
107
|
+
private _validateIdentity;
|
|
108
|
+
}
|
|
109
|
+
//#endregion
|
|
110
|
+
export { type CreateWorktreeCollaborationConfigOptions, type CreateWorktreeMergePreviewConfigOptions, WorktreeClient, WorktreeClientError, type WorktreeClientOptions, type WorktreeCollaborationConfig, WorktreeEventClient, type WorktreeEventClientOptions, type WorktreeEventSubscription, type WorktreeFetch, type WorktreeMergePreviewConfig, WorktreeMergePreviewSnapshotService, type WorktreeMergePreviewSnapshotServiceOptions, createWorktreeCollaborationConfig, createWorktreeMergePreviewConfig };
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const _0x4c657a=_0x1f50;function _0x1f50(_0xf8a77d,_0x35a72f){_0xf8a77d=_0xf8a77d-0x83;const _0x1e5a9f=_0x1e5a();let _0x1f505e=_0x1e5a9f[_0xf8a77d];return _0x1f505e;}(function(_0x8b6ef8,_0xbfa700){const _0x3246c3=_0x1f50,_0x494e44=_0x8b6ef8();while(!![]){try{const _0x275b51=-parseInt(_0x3246c3(0xd2))/0x1+parseInt(_0x3246c3(0x106))/0x2+-parseInt(_0x3246c3(0x96))/0x3+parseInt(_0x3246c3(0x99))/0x4+parseInt(_0x3246c3(0xc2))/0x5+parseInt(_0x3246c3(0x9b))/0x6+-parseInt(_0x3246c3(0x8b))/0x7;if(_0x275b51===_0xbfa700)break;else _0x494e44['push'](_0x494e44['shift']());}catch(_0x22321a){_0x494e44['push'](_0x494e44['shift']());}}}(_0x1e5a,0x81c68));import{ISnapshotServerService as _0x1d972f}from'@univerjs-pro/collaboration';var t=class{['_preview'];constructor(_0x4e66fb){const _0x3cd82a=_0x1f50;this['_preview']=_0x4e66fb[_0x3cd82a(0xb0)];}[_0x4c657a(0xff)](_0xdf5d85,_0x39db54){const _0x370d90=_0x4c657a;return this[_0x370d90(0x84)](_0x39db54[_0x370d90(0x8f)],_0x39db54[_0x370d90(0xe8)]),Promise[_0x370d90(0x90)]({'error':void 0x0,'snapshot':this[_0x370d90(0x8c)][_0x370d90(0x101)],'changesets':[]});}[_0x4c657a(0xfd)](_0x45ff5f,_0xb84000){const _0x1ffa0c=_0x4c657a;this['_validateIdentity'](_0xb84000[_0x1ffa0c(0x8f)],_0xb84000[_0x1ffa0c(0xe8)]);let _0x450382=this[_0x1ffa0c(0x8c)][_0x1ffa0c(0xac)]?.[_0x1ffa0c(0xc9)](_0x4cd94b=>_0x4cd94b['id']===_0xb84000[_0x1ffa0c(0xee)]);return _0x450382?Promise[_0x1ffa0c(0x90)]({'error':void 0x0,'block':_0x450382}):Promise[_0x1ffa0c(0xd3)](Error('Merge\x20preview\x20block\x20'+_0xb84000[_0x1ffa0c(0xee)]+_0x1ffa0c(0x9c)));}[_0x4c657a(0x107)](_0x461928,_0x1e4611){const _0x47bfa5=_0x4c657a;return this[_0x47bfa5(0xfd)](_0x461928,_0x1e4611);}[_0x4c657a(0xd7)](_0x469687,_0x14bc4d){const _0x1a5509=_0x4c657a;return this[_0x1a5509(0x84)](_0x14bc4d[_0x1a5509(0x8f)],_0x14bc4d[_0x1a5509(0xe8)]),Promise[_0x1a5509(0x90)]({'error':void 0x0,'changesets':[],'latestRevision':this['_preview'][_0x1a5509(0x101)]['rev']});}[_0x4c657a(0x97)](_0x362263,_0x458862){const _0x2ac58d=_0x4c657a;return this[_0x2ac58d(0x84)](_0x458862[_0x2ac58d(0x8f)],_0x458862[_0x2ac58d(0xe8)]),Promise[_0x2ac58d(0x90)]({'error':void 0x0,'resources':{}});}[_0x4c657a(0x93)](){return n();}['updateSnapshot'](){return n();}[_0x4c657a(0x108)](){return n();}[_0x4c657a(0xfa)](){return n();}['copyFileMeta'](){return n();}['getLatestCsReqIdBySid'](){return n();}[_0x4c657a(0x84)](_0xa65a0f,_0x59444f){const _0x2c00ed=_0x4c657a;if(_0xa65a0f!==this[_0x2c00ed(0x8c)][_0x2c00ed(0x101)]['unitID']||_0x59444f!==this[_0x2c00ed(0x8c)][_0x2c00ed(0x101)][_0x2c00ed(0xe8)])throw Error('Merge\x20preview\x20Unit\x20identity\x20does\x20not\x20match');}};function n(){const _0x18c29b=_0x4c657a;return Promise[_0x18c29b(0xd3)](Error(_0x18c29b(0xe9)));}function r(_0x3c29c6){const _0x3447a1=_0x4c657a;let _0x2aa1cb;try{_0x2aa1cb=new URL(_0x3c29c6);}catch{throw TypeError(_0x3447a1(0x91));}if(_0x2aa1cb[_0x3447a1(0xcb)]!=='http:'&&_0x2aa1cb[_0x3447a1(0xcb)]!==_0x3447a1(0x87))throw TypeError(_0x3447a1(0xeb));if(_0x2aa1cb[_0x3447a1(0xdb)]!=='/'||_0x2aa1cb[_0x3447a1(0x83)]||_0x2aa1cb['hash']||_0x2aa1cb[_0x3447a1(0xcd)]||_0x2aa1cb[_0x3447a1(0xed)])throw TypeError(_0x3447a1(0xe4));return _0x2aa1cb[_0x3447a1(0xb5)];}function i(_0x283ec0,_0x5a1b17){const _0x34b123=_0x4c657a;if(!_0x5a1b17)throw TypeError(_0x34b123(0x105));return _0x283ec0+_0x34b123(0xbb)+encodeURIComponent(_0x5a1b17);}function a(_0x4c07a9,_0xbb6a2b){const _0x2dde4a=_0x4c657a;let _0x130fae=new URL(i(_0x4c07a9,_0xbb6a2b));return _0x130fae[_0x2dde4a(0xcb)]=_0x130fae['protocol']===_0x2dde4a(0x87)?_0x2dde4a(0x8a):_0x2dde4a(0xd8),_0x130fae[_0x2dde4a(0x98)]()[_0x2dde4a(0xa8)](/\/$/,'');}function o(_0x25dffa){const _0x43c39f=_0x4c657a;let _0x42cc40=r(_0x25dffa['origin']),_0x1f373c=i(_0x42cc40,_0x25dffa['worktreeID']),_0x52877d=a(_0x42cc40,_0x25dffa[_0x43c39f(0xa2)]);return{'snapshotServerUrl':_0x1f373c+_0x43c39f(0xe3),'collabSubmitChangesetUrl':_0x1f373c+'/comb','collabWebSocketUrl':_0x52877d+_0x43c39f(0xb7),'wsSessionTicketUrl':_0x42cc40+_0x43c39f(0xf7),'override':[..._0x25dffa[_0x43c39f(0xf6)]??[]]};}function s(_0xe99ba8){const _0x365964=_0x4c657a;return{'enableCollaboration':!0x1,'snapshotServerUrl':i(r(_0xe99ba8[_0x365964(0xb5)]),_0xe99ba8[_0x365964(0xa2)])+_0x365964(0xe3),'override':[[_0x1d972f,{'useValue':new t({'preview':_0xe99ba8[_0x365964(0xb0)]})}],..._0xe99ba8[_0x365964(0xf6)]??[]]};}function _0x1e5a(){const _0x103cd6=['reject','_open','/events?sessionTicket=','WorktreeEventClient\x20is\x20disposed','fetchMissingChangesets','ws:','fetch','number','pathname','_reconnectTimer','worktreeChanged','name','stringify','POST','originalMeta','json','/snapshot','origin\x20cannot\x20contain\x20path,\x20credentials\x20or\x20query','Invalid\x20Worktree\x20event','units','delete','type','Merge\x20preview\x20snapshot\x20service\x20is\x20read-only','_listeners','origin\x20must\x20use\x20HTTP\x20or\x20HTTPS','createWorktree','password','blockID','Worktree\x20event\x20connection\x20closed','evaluation','discardWorktree','workbook','_worktreeID','close','charCodeAt','override','/universer-api/user/session-ticket','reconnectDelayMs\x20must\x20be\x20a\x20non-negative\x20integer','reopen','saveChangeset','isSafeInteger','status','getSheetBlock','isArray','getUnitOnRev','_connectedOnce','snapshot','WorktreeClientError','_reconnectDelayMs','_origin','worktreeID\x20is\x20required','1693232TeCSvS','getDeserializedSheetBlock','saveSheetBlock','error','search','_validateIdentity','doc','markReady','https:','mergeWorktree','INVALID_RESPONSE','wss:','5740350LlHOsm','_preview','Client\x20disposed','add','unitID','resolve','origin\x20must\x20be\x20an\x20absolute\x20HTTP(S)\x20URL','createUnitFromData','saveSnapshot','code','fromCharCode','489342CsUDMV','getResourcesRequest','toString','1791640TQuTou','sheets','5670318dkoIRn','\x20is\x20missing','HTTP_ERROR','string','addEventListener','_socket','dispose','worktreeID','function','_scheduleReconnect','decode','_fetch','_disposed','replace','_post','Worktree\x20response\x20is\x20missing\x20worktree\x20data','addUnit','sheetBlocks','evaluateUnitMerge','WebSocket','message','preview','A\x20fetch\x20implementation\x20is\x20required','getWorktree','/merge-preview','merge','origin','catch','/comb/connect','createUnitFromSnapshot','board','_current','/universer-api/worktrees/','ready','application/json','units/from-snapshot','object','from','reopenWorktree','1256410mAVNig','data','_createWebSocket','Worktree\x20event\x20connection\x20failed','worktree','Server\x20returned\x20invalid\x20JSON','retryable','find','event','protocol','ticket','username','/units/','onChange','Server\x20returned\x20an\x20invalid\x20merge\x20preview','parse','976137Wvyagu'];_0x1e5a=function(){return _0x103cd6;};return _0x1e5a();}var c=class extends Error{[_0x4c657a(0xfc)];[_0x4c657a(0x94)];[_0x4c657a(0xc8)];constructor(_0x214da4,_0x4d5370,_0x17eebf,_0x78c60f){const _0x3cc6a=_0x4c657a;super(_0x17eebf),this['status']=_0x214da4,this[_0x3cc6a(0x94)]=_0x4d5370,this[_0x3cc6a(0xc8)]=_0x78c60f,this[_0x3cc6a(0xde)]=_0x3cc6a(0x102);}};async function l(_0x2e5fd5,_0x160849,_0x3caecf){const _0x37ee06=_0x4c657a;let _0x599fdf=await _0x2e5fd5(_0x160849,_0x3caecf),_0x1fa7ae=await m(_0x599fdf);if(!_0x599fdf['ok'])throw h(_0x599fdf[_0x37ee06(0xfc)],_0x1fa7ae);if(!b(_0x1fa7ae)||!b(_0x1fa7ae['worktree']))throw new c(_0x599fdf[_0x37ee06(0xfc)],_0x37ee06(0x89),_0x37ee06(0xaa));return _0x1fa7ae[_0x37ee06(0xc6)];}async function u(_0x5220f7,_0x2700c1){const _0x5b390d=_0x4c657a;let _0x5be6be=await _0x5220f7(_0x2700c1),_0x9d9014=await m(_0x5be6be);if(!_0x5be6be['ok'])throw h(_0x5be6be['status'],_0x9d9014);if(!b(_0x9d9014)||typeof _0x9d9014[_0x5b390d(0xcc)]!=_0x5b390d(0x9e)||!_0x9d9014[_0x5b390d(0xcc)])throw new c(_0x5be6be[_0x5b390d(0xfc)],'INVALID_RESPONSE','Session\x20ticket\x20response\x20is\x20missing\x20ticket');return _0x9d9014[_0x5b390d(0xcc)];}async function d(_0x54547c,_0x52f849){const _0x4eec7c=_0x4c657a;let _0x1807fc=await _0x54547c(_0x52f849),_0x332a06=await m(_0x1807fc);if(!_0x1807fc['ok'])throw h(_0x1807fc[_0x4eec7c(0xfc)],_0x332a06);if(!b(_0x332a06)||!b(_0x332a06[_0x4eec7c(0xf0)]))throw new c(_0x1807fc[_0x4eec7c(0xfc)],_0x4eec7c(0x89),'Worktree\x20response\x20is\x20missing\x20merge\x20evaluation');let _0x400845=_0x332a06[_0x4eec7c(0xf0)];if(_0x400845[_0x4eec7c(0xfc)]===_0x4eec7c(0xb0)&&b(_0x400845[_0x4eec7c(0xb0)])&&b(_0x400845['preview'][_0x4eec7c(0x101)])&&(_(_0x400845[_0x4eec7c(0xb0)][_0x4eec7c(0x101)]),Array[_0x4eec7c(0xfe)](_0x400845[_0x4eec7c(0xb0)][_0x4eec7c(0xac)])))for(let _0x57ff1f of _0x400845[_0x4eec7c(0xb0)]['sheetBlocks']){if(!b(_0x57ff1f))throw y(_0x1807fc[_0x4eec7c(0xfc)]);_0x57ff1f[_0x4eec7c(0xc3)]=v(_0x57ff1f['data'],_0x1807fc[_0x4eec7c(0xfc)]);}if(typeof _0x400845[_0x4eec7c(0xfc)]!=_0x4eec7c(0x9e)||typeof _0x400845[_0x4eec7c(0xa2)]!=_0x4eec7c(0x9e)||typeof _0x400845['unitID']!=_0x4eec7c(0x9e))throw y(_0x1807fc[_0x4eec7c(0xfc)]);return _0x400845;}function f(_0x4295e3){const _0x348a25=_0x4c657a;return{'method':_0x348a25(0xe0),..._0x4295e3===void 0x0?{}:{'headers':{'content-type':_0x348a25(0xbd)},'body':JSON[_0x348a25(0xdf)](_0x4295e3,(_0x160e63,_0x526ccd)=>_0x526ccd instanceof Uint8Array?g(_0x526ccd):_0x526ccd)}};}function p(){const _0xd73ce1=_0x4c657a;if(typeof globalThis[_0xd73ce1(0xd9)]!=_0xd73ce1(0xa3))throw TypeError(_0xd73ce1(0xb1));return globalThis[_0xd73ce1(0xd9)]['bind'](globalThis);}async function m(_0x4be5f8){const _0x2a0a43=_0x4c657a;try{return await _0x4be5f8[_0x2a0a43(0xe2)]();}catch{throw new c(_0x4be5f8[_0x2a0a43(0xfc)],_0x2a0a43(0x89),_0x2a0a43(0xc7));}}function h(_0xd02bd4,_0x1d53eb){const _0x586711=_0x4c657a;let _0x2ec144=b(_0x1d53eb)&&b(_0x1d53eb['error'])?_0x1d53eb['error']:{};return new c(_0xd02bd4,typeof _0x2ec144[_0x586711(0x94)]==_0x586711(0x9e)||typeof _0x2ec144[_0x586711(0x94)]==_0x586711(0xda)?_0x2ec144[_0x586711(0x94)]:_0x586711(0x9d),typeof _0x2ec144['message']==_0x586711(0x9e)?_0x2ec144[_0x586711(0xaf)]:'Worktree\x20request\x20failed\x20with\x20HTTP\x20'+_0xd02bd4,typeof _0x2ec144['retryable']=='boolean'?_0x2ec144[_0x586711(0xc8)]:void 0x0);}function g(_0xbc87dd){const _0x48e222=_0x4c657a;let _0x140eb4='';for(let _0x1ddec2 of _0xbc87dd)_0x140eb4+=String[_0x48e222(0x95)](_0x1ddec2);return btoa(_0x140eb4);}function _(_0x250298){const _0x829b82=_0x4c657a;let _0x1d9746=_0x250298[_0x829b82(0xf2)]??_0x250298[_0x829b82(0x85)]??_0x250298['slide']??_0x250298[_0x829b82(0xb9)];if(_0x1d9746&&(_0x1d9746[_0x829b82(0xe1)]=v(_0x1d9746[_0x829b82(0xe1)],0xc8),_0x250298[_0x829b82(0xf2)])){for(let _0x4395ac of Object['values'](_0x250298['workbook'][_0x829b82(0x9a)]))_0x4395ac[_0x829b82(0xe1)]=v(_0x4395ac['originalMeta'],0xc8);}}function v(_0x2d0afd,_0x5d4d06){const _0x16a695=_0x4c657a;if(_0x2d0afd instanceof Uint8Array)return _0x2d0afd;if(typeof _0x2d0afd!='string')throw y(_0x5d4d06);try{let _0x5b7620=atob(_0x2d0afd);return Uint8Array[_0x16a695(0xc0)](_0x5b7620,_0x326bf5=>_0x326bf5[_0x16a695(0xf5)](0x0));}catch{throw y(_0x5d4d06);}}function y(_0x24e4f9){const _0x568542=_0x4c657a;return new c(_0x24e4f9,'INVALID_RESPONSE',_0x568542(0xd0));}function b(_0x4d33eb){const _0x30248d=_0x4c657a;return!!_0x4d33eb&&typeof _0x4d33eb==_0x30248d(0xbf)&&!Array[_0x30248d(0xfe)](_0x4d33eb);}var x=class{['_origin'];['_fetch'];constructor(_0x221cd9){const _0x5efbe3=_0x4c657a;this[_0x5efbe3(0x104)]=r(_0x221cd9['origin']),this[_0x5efbe3(0xa6)]=_0x221cd9['fetch']??p();}[_0x4c657a(0xec)](_0x52e46a){const _0x50911c=_0x4c657a;return l(this['_fetch'],this[_0x50911c(0x104)]+'/universer-api/worktrees',f(_0x52e46a));}[_0x4c657a(0xb2)](_0x514bd0){const _0x1b3293=_0x4c657a;return l(this['_fetch'],i(this[_0x1b3293(0x104)],_0x514bd0));}[_0x4c657a(0xad)](_0x22c1cf,_0x4aafa7){const _0x506aa5=_0x4c657a;return d(this[_0x506aa5(0xa6)],i(this[_0x506aa5(0x104)],_0x22c1cf)+_0x506aa5(0xce)+encodeURIComponent(_0x4aafa7)+_0x506aa5(0xb3));}[_0x4c657a(0xab)](_0x2d1c55,_0xa94e1e){const _0x37084f=_0x4c657a;return this[_0x37084f(0xa9)](_0x2d1c55,_0x37084f(0xe6),{'unitID':_0xa94e1e});}[_0x4c657a(0xb8)](_0x4d2cf0,_0x163c45){const _0x3cb4c2=_0x4c657a;return this[_0x3cb4c2(0xa9)](_0x4d2cf0,_0x3cb4c2(0xbe),_0x163c45);}[_0x4c657a(0x92)](_0x1b9c7e,_0x522244){const _0x284d30=_0x4c657a;return this[_0x284d30(0xa9)](_0x1b9c7e,'units/from-data',_0x522244);}[_0x4c657a(0x86)](_0xd16ca1){const _0x459e02=_0x4c657a;return this[_0x459e02(0xa9)](_0xd16ca1,_0x459e02(0xbc));}[_0x4c657a(0xc1)](_0x371885){const _0xbef551=_0x4c657a;return this[_0xbef551(0xa9)](_0x371885,_0xbef551(0xf9));}[_0x4c657a(0xf1)](_0x578432){return this['_post'](_0x578432,'discard');}[_0x4c657a(0x88)](_0x6902f5){const _0x3bed8f=_0x4c657a;return this[_0x3bed8f(0xa9)](_0x6902f5,_0x3bed8f(0xb4));}['_post'](_0x5b32c9,_0x299334,_0x4871fd){const _0x1bf055=_0x4c657a;return l(this[_0x1bf055(0xa6)],i(this[_0x1bf055(0x104)],_0x5b32c9)+'/'+_0x299334,f(_0x4871fd));}},S=class{[_0x4c657a(0x104)];[_0x4c657a(0xf3)];[_0x4c657a(0xa6)];[_0x4c657a(0x103)];['_createWebSocket'];[_0x4c657a(0xea)]=new Set();[_0x4c657a(0xa0)];['_reconnectTimer'];['_current'];[_0x4c657a(0xa7)]=!0x1;[_0x4c657a(0x100)]=!0x1;constructor(_0xd9cab0){const _0x339cc3=_0x4c657a;if(this['_origin']=r(_0xd9cab0[_0x339cc3(0xb5)]),!_0xd9cab0[_0x339cc3(0xa2)])throw TypeError(_0x339cc3(0x105));if(this['_worktreeID']=_0xd9cab0['worktreeID'],this[_0x339cc3(0xa6)]=_0xd9cab0['fetch']??p(),this[_0x339cc3(0x103)]=_0xd9cab0['reconnectDelayMs']??0x3e8,!Number[_0x339cc3(0xfb)](this['_reconnectDelayMs'])||this[_0x339cc3(0x103)]<0x0)throw TypeError(_0x339cc3(0xf8));this['_createWebSocket']=_0xd9cab0['createWebSocket']??(_0x339469=>{const _0x1554a2=_0x339cc3;if(typeof globalThis[_0x1554a2(0xae)]!='function')throw TypeError('A\x20WebSocket\x20implementation\x20is\x20required');return new globalThis['WebSocket'](_0x339469);});}get['current'](){const _0x211f21=_0x4c657a;return this[_0x211f21(0xba)];}[_0x4c657a(0xcf)](_0x19890d){const _0x34f019=_0x4c657a;return this['_listeners'][_0x34f019(0x8e)](_0x19890d),{'dispose':()=>this[_0x34f019(0xea)][_0x34f019(0xe7)](_0x19890d)};}async['connect'](){const _0x1c85c5=_0x4c657a;if(this[_0x1c85c5(0xa7)])throw Error(_0x1c85c5(0xd6));return this['_current']?this[_0x1c85c5(0xba)]:this[_0x1c85c5(0xd4)](!0x1);}[_0x4c657a(0xa1)](){const _0x405f89=_0x4c657a;this['_disposed']||(this[_0x405f89(0xa7)]=!0x0,this[_0x405f89(0xdc)]&&clearTimeout(this[_0x405f89(0xdc)]),this[_0x405f89(0xa0)]?.[_0x405f89(0xf4)](0x3e8,_0x405f89(0x8d)),this[_0x405f89(0xa0)]=void 0x0,this[_0x405f89(0xea)]['clear']());}async[_0x4c657a(0xd4)](_0x295072){const _0x457416=_0x4c657a;let _0x41b559=await u(this[_0x457416(0xa6)],this['_origin']+'/universer-api/user/session-ticket');if(this['_disposed'])throw Error(_0x457416(0xd6));let _0x1eefa9=a(this['_origin'],this[_0x457416(0xf3)])+_0x457416(0xd5)+encodeURIComponent(_0x41b559);return new Promise((_0x4523b5,_0x165d60)=>{const _0x497ec6=_0x457416;let _0x3d085c=!0x1,_0x1978fa=this[_0x497ec6(0xc4)](_0x1eefa9);this[_0x497ec6(0xa0)]=_0x1978fa,_0x1978fa['addEventListener']('message',_0x22f044=>{const _0x47b17b=_0x497ec6;try{let _0x5db90d=C(_0x22f044[_0x47b17b(0xc3)]);_0x3d085c=!0x0,this[_0x47b17b(0x100)]=!0x0,this['_current']=_0x5db90d;for(let _0x41993f of[...this[_0x47b17b(0xea)]])try{_0x41993f(_0x5db90d);}catch{}_0x4523b5(_0x5db90d);}catch(_0x1df830){_0x1978fa[_0x47b17b(0xf4)](0x3eb,_0x47b17b(0xe5)),_0x3d085c||_0x165d60(_0x1df830);}}),_0x1978fa[_0x497ec6(0x9f)](_0x497ec6(0x109),()=>{const _0x17af4c=_0x497ec6;_0x3d085c||_0x165d60(Error(_0x17af4c(0xc5)));}),_0x1978fa[_0x497ec6(0x9f)](_0x497ec6(0xf4),()=>{const _0x3d1a5b=_0x497ec6;this[_0x3d1a5b(0xa0)]===_0x1978fa&&(this[_0x3d1a5b(0xa0)]=void 0x0),!_0x3d085c&&!_0x295072&&_0x165d60(Error(_0x3d1a5b(0xef))),this['_connectedOnce']&&this['_scheduleReconnect']();});});}[_0x4c657a(0xa4)](){const _0x45871d=_0x4c657a;this['_disposed']||this[_0x45871d(0xdc)]||(this['_reconnectTimer']=setTimeout(()=>{const _0xd19bb4=_0x45871d;this[_0xd19bb4(0xdc)]=void 0x0,this['_open'](!0x0)[_0xd19bb4(0xb6)](()=>this[_0xd19bb4(0xa4)]());},this[_0x45871d(0x103)]));}};function C(_0x12f044){const _0x142015=_0x4c657a;let _0xbc9a9d=typeof _0x12f044=='string'?JSON[_0x142015(0xd1)](_0x12f044):_0x12f044 instanceof Blob?void 0x0:JSON['parse'](new TextDecoder()[_0x142015(0xa5)](_0x12f044));if(!_0xbc9a9d||typeof _0xbc9a9d!=_0x142015(0xbf)||_0xbc9a9d[_0x142015(0xca)]!==_0x142015(0xdd)||!_0xbc9a9d[_0x142015(0xc6)]||typeof _0xbc9a9d[_0x142015(0xc6)]!=_0x142015(0xbf))throw Error('Invalid\x20Worktree\x20event\x20message');return _0xbc9a9d[_0x142015(0xc6)];}export{x as WorktreeClient,c as WorktreeClientError,S as WorktreeEventClient,t as WorktreeMergePreviewSnapshotService,o as createWorktreeCollaborationConfig,s as createWorktreeMergePreviewConfig};
|
package/package.json
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@univerjs-pro/collaboration-worktree-client",
|
|
3
|
+
"type": "module",
|
|
4
|
+
"version": "1.0.0-beta.2",
|
|
5
|
+
"main": "./dist/index.cjs",
|
|
6
|
+
"module": "./dist/index.mjs",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.mjs",
|
|
12
|
+
"require": "./dist/index.cjs"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"dist"
|
|
17
|
+
],
|
|
18
|
+
"dependencies": {
|
|
19
|
+
"@oxc-project/runtime": "0.139.0",
|
|
20
|
+
"@univerjs-pro/collaboration": "1.0.0-beta.2",
|
|
21
|
+
"@univerjs-pro/collaboration-client": "1.0.0-beta.2",
|
|
22
|
+
"@univerjs-pro/collaboration-service": "1.0.0-beta.2",
|
|
23
|
+
"@univerjs-pro/collaboration-worktree-service": "1.0.0-beta.2",
|
|
24
|
+
"@univerjs/core": "1.0.0-beta.2",
|
|
25
|
+
"@univerjs/network": "1.0.0-beta.2",
|
|
26
|
+
"@univerjs/protocol": "1.0.0-beta.2"
|
|
27
|
+
}
|
|
28
|
+
}
|