@univerjs-pro/collaboration-worktree-database-memory 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 +31 -0
- package/README.zh-CN.md +31 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.mjs +1 -1
- package/package.json +5 -8
package/README.md
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# @univerjs-pro/collaboration-worktree-database-memory
|
|
2
|
+
|
|
3
|
+
English | [简体中文](./README.zh-CN.md)
|
|
4
|
+
|
|
5
|
+
An in-process `IWorktreeDatabaseAdapter` for tests, local development, and temporary Worktree data.
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
pnpm add \
|
|
9
|
+
@univerjs-pro/collaboration-worktree-service \
|
|
10
|
+
@univerjs-pro/collaboration-worktree-database-memory
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
```ts
|
|
14
|
+
const worktreeDatabase = new MemoryWorktreeDatabaseAdapter();
|
|
15
|
+
const worktreeService = new UniverCollabWorktreeService({
|
|
16
|
+
trunk: {
|
|
17
|
+
service: collabService,
|
|
18
|
+
dbAdapter: trunkDatabase,
|
|
19
|
+
},
|
|
20
|
+
dbAdapter: worktreeDatabase,
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
await worktreeService.dispose();
|
|
24
|
+
await worktreeDatabase.dispose();
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
It implements Worktree state transitions, draft revision CAS, and per-Unit merge-result contracts. Draft submission idempotency is resolved by Worktree Service from continuous history.
|
|
28
|
+
|
|
29
|
+
All Worktree data is lost when the process exits, and state is not shared between Node.js processes. Use SQLite or another persistent Adapter for persistent production data.
|
|
30
|
+
|
|
31
|
+
`setUnitRemoved` atomically updates reversible draft intent. Removed Units reject draft commits; terminal removal merge results prevent later restoration.
|
package/README.zh-CN.md
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# @univerjs-pro/collaboration-worktree-database-memory
|
|
2
|
+
|
|
3
|
+
[English](./README.md) | [简体中文](./README.zh-CN.md)
|
|
4
|
+
|
|
5
|
+
进程内 `IWorktreeDatabaseAdapter`,适合测试、本地开发和临时 Worktree 数据。
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
pnpm add \
|
|
9
|
+
@univerjs-pro/collaboration-worktree-service \
|
|
10
|
+
@univerjs-pro/collaboration-worktree-database-memory
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
```ts
|
|
14
|
+
const worktreeDatabase = new MemoryWorktreeDatabaseAdapter();
|
|
15
|
+
const worktreeService = new UniverCollabWorktreeService({
|
|
16
|
+
trunk: {
|
|
17
|
+
service: collabService,
|
|
18
|
+
dbAdapter: trunkDatabase,
|
|
19
|
+
},
|
|
20
|
+
dbAdapter: worktreeDatabase,
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
await worktreeService.dispose();
|
|
24
|
+
await worktreeDatabase.dispose();
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
它实现 Worktree 状态转换、draft revision CAS 和逐 Unit merge result 契约。draft 提交
|
|
28
|
+
幂等由 Worktree Service 从连续 history 中判断。
|
|
29
|
+
|
|
30
|
+
进程退出后所有 Worktree 数据丢失,多个 Node.js 进程之间也不共享状态。持久化生产数据
|
|
31
|
+
应使用 SQLite 或其他持久化 Adapter。
|
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object['defineProperty'](exports,Symbol['toStringTag'],{'value':'Module'});let e=require('node:util'),t=require('@univerjs-pro/collaboration-service'),n=require('@univerjs/protocol');var r=new Set([n['UniverType']['UNIVER_SHEET'],n['UniverType']['UNIVER_DOC'],n['UniverType']['UNIVER_SLIDE'],n['UniverType']['UNIVER_BOARD'],n['UniverType']['UNIVER_BASE']]),i=class{['_worktrees']=new Map();['_disposed']=!0x1;async['getWorktree'](_0x4576ce,_0x101e36){this['_assertOpen']();let _0x463b5f=this['_worktrees']['get'](_0x101e36);return _0x463b5f?a(_0x463b5f):null;}async['getWorktreeUnit'](_0x4658eb,_0x2e4749,_0x197f82){this['_assertOpen']();let _0x2c1567=this['_worktrees']['get'](_0x2e4749)?.['units']['get'](_0x197f82);return _0x2c1567?b(_0x2c1567['record']):null;}async['getDraftChangesets'](_0x54ce8b,_0x209836,_0x52377f,_0xbb4c81){this['_assertOpen'](),f(_0xbb4c81);let _0x929641=this['_worktrees']['get'](_0x209836)?.['units']['get'](_0x52377f);if(!_0x929641)return{'changesets':[],'latestRevision':0x0};let _0x4f89a7=_0xbb4c81['to']===0x0?_0x929641['record']['draftHeadRevision']:Math['min'](_0xbb4c81['to'],_0x929641['record']['draftHeadRevision']);return{'changesets':[..._0x929641['changesets']['entries']()]['filter'](([_0x3a7ea5])=>_0x3a7ea5>_0xbb4c81['from']&&_0x3a7ea5<=_0x4f89a7)['sort'](([_0x3eec5f],[_0x1bfd7e])=>_0x3eec5f-_0x1bfd7e)['map'](([,_0xeb3d03])=>b(_0xeb3d03)),'latestRevision':_0x929641['record']['draftHeadRevision']};}async['getDraftSubmission'](_0x242f68,_0x3746c1,_0x6a25f5,_0x445c84,_0x1cfc95){this['_assertOpen']();let _0x38bed5=this['_worktrees']['get'](_0x3746c1)?.['units']['get'](_0x6a25f5)?.['submissions']['get'](v(_0x445c84,_0x1cfc95));return _0x38bed5?b(_0x38bed5):null;}async['getUnitSeed'](_0x5072d2,_0x356fe3,_0x7384c){this['_assertOpen']();let _0x1b0a43=this['_worktrees']['get'](_0x356fe3)?.['units']['get'](_0x7384c)?.['seed'];return _0x1b0a43?b(_0x1b0a43):null;}async['getUnitMergeArtifact'](_0x228b12,_0x41a0f6,_0x2cc851){this['_assertOpen']();let _0x16aa84=this['_worktrees']['get'](_0x41a0f6)?.['units']['get'](_0x2cc851)?.['mergeArtifact'];return _0x16aa84?b(_0x16aa84):null;}async['createWorktree'](_0x3005a6,_0x28999a){this['_assertOpen'](),o(_0x28999a);let _0x560739=this['_worktrees']['get'](_0x28999a['record']['worktreeID']);if(_0x560739)return{'status':'already-exists','aggregate':a(_0x560739)};let _0x5151e2=new Map();for(let _0x5dc7c0 of _0x28999a['units'])_0x5151e2['set'](_0x5dc7c0['unitID'],{'record':b(_0x5dc7c0),'changesets':new Map(),'submissions':new Map()});let _0x4038e4={'record':b(_0x28999a['record']),'units':_0x5151e2};return this['_worktrees']['set'](_0x28999a['record']['worktreeID'],_0x4038e4),{'status':'created','aggregate':a(_0x4038e4)};}async['addUnit'](_0x3fd076,_0x2b9a0a){this['_assertOpen']();let {unit:_0x35bca9}=_0x2b9a0a;s(_0x35bca9);let _0xca9044=this['_worktrees']['get'](_0x35bca9['worktreeID']);return _0xca9044?_0xca9044['units']['has'](_0x35bca9['unitID'])?{'status':'already-exists','aggregate':a(_0xca9044)}:_0xca9044['record']['status']==='draft'?(c(_0x35bca9),_0xca9044['units']['set'](_0x35bca9['unitID'],{'record':b(_0x35bca9),'changesets':new Map(),'submissions':new Map()}),{'status':'added','aggregate':a(_0xca9044)}):{'status':'status-mismatch','aggregate':a(_0xca9044)}:{'status':'not-found'};}async['createUnit'](_0x10f766,_0x5db8e9){this['_assertOpen'](),l(_0x5db8e9['unit'],_0x5db8e9['seed']);let _0x420356=this['_worktrees']['get'](_0x5db8e9['unit']['worktreeID']);if(!_0x420356)return{'status':'not-found'};let _0x4cbd46=_0x420356['units']['get'](_0x5db8e9['unit']['unitID']);return _0x4cbd46?{'status':_0x4cbd46['record']['source']==='worktree'&&_0x4cbd46['record']['type']===_0x5db8e9['unit']['type']&&_0x4cbd46['seed']!==void 0x0&&(0x0,e['isDeepStrictEqual'])(_0x4cbd46['seed'],_0x5db8e9['seed'])?'already-created':'unit-exists','aggregate':a(_0x420356)}:_0x420356['record']['status']==='draft'?(_0x420356['units']['set'](_0x5db8e9['unit']['unitID'],{'record':b(_0x5db8e9['unit']),'seed':b(_0x5db8e9['seed']),'changesets':new Map(),'submissions':new Map()}),{'status':'created','aggregate':a(_0x420356)}):{'status':'status-mismatch','aggregate':a(_0x420356)};}async['saveUnitMergeArtifact'](_0x51455b,_0x45de0d){this['_assertOpen']();let _0x4e595f=this['_worktrees']['get'](_0x45de0d['worktreeID']),_0x516a14=_0x4e595f?.['units']['get'](_0x45de0d['unitID']);return!_0x4e595f||!_0x516a14?{'status':'not-found'}:_0x4e595f['record']['status']!=='merging'||_0x516a14['record']['source']!=='worktree'||_0x516a14['record']['readyDraftHeadRevision']!==_0x45de0d['artifact']['readyDraftHeadRevision']||g(_0x516a14['record'])?{'status':'stale-merge'}:_0x516a14['mergeArtifact']?{'status':'already-saved','artifact':b(_0x516a14['mergeArtifact'])}:(d(_0x516a14['record'],_0x45de0d['artifact']),_0x516a14['mergeArtifact']=b(_0x45de0d['artifact']),{'status':'saved','artifact':b(_0x45de0d['artifact'])});}async['commitDraftChangeset'](_0x52d37e,_0x44ed63){this['_assertOpen']();let _0x3475f2=this['_worktrees']['get'](_0x44ed63['worktreeID']),_0xb6698f=_0x3475f2?.['units']['get'](_0x44ed63['changeset']['unitID']);if(!_0x3475f2||!_0xb6698f)return{'status':'not-found'};p(_0x44ed63['changeset']);let _0x18711c=v(_0x44ed63['changeset']['sid'],_0x44ed63['changeset']['reqId']),_0x5b9b48=_0xb6698f['submissions']['get'](_0x18711c);if(_0x5b9b48)return{'status':'already-committed','changeset':b(_0x5b9b48)};if(_0x3475f2['record']['status']!=='draft')return{'status':'not-editable','worktreeStatus':_0x3475f2['record']['status']};if(g(_0xb6698f['record']))return{'status':'unit-frozen'};if(_0xb6698f['record']['draftHeadRevision']!==_0x44ed63['expectedHeadRevision'])return{'status':'revision-mismatch','actualHeadRevision':_0xb6698f['record']['draftHeadRevision']};m(_0xb6698f['record'],_0x44ed63);let _0x533b1c=b(_0x44ed63['changeset']);return _0xb6698f['changesets']['set'](_0x533b1c['revision'],_0x533b1c),_0xb6698f['submissions']['set'](_0x18711c,_0x533b1c),_0xb6698f['record']={..._0xb6698f['record'],'draftHeadRevision':_0x533b1c['revision']},{'status':'committed','changeset':b(_0x533b1c),'headRevision':_0x533b1c['revision']};}async['markReady'](_0x3c80c3,_0x64eb5d){this['_assertOpen']();let _0x6d1166=this['_worktrees']['get'](_0x64eb5d);if(!_0x6d1166)return{'status':'not-found'};if(_0x6d1166['record']['status']==='ready')return{'status':'already-in-target','aggregate':a(_0x6d1166)};if(_0x6d1166['record']['status']!=='draft')return{'status':'status-mismatch','aggregate':a(_0x6d1166)};for(let _0x303d95 of _0x6d1166['units']['values']())g(_0x303d95['record'])||(_0x303d95['record']={..._0x303d95['record'],'readyDraftHeadRevision':_0x303d95['record']['draftHeadRevision']});return _0x6d1166['record']={..._0x6d1166['record'],'status':'ready'},{'status':'transitioned','previousStatus':'draft','aggregate':a(_0x6d1166)};}async['reopenWorktree'](_0x3221e0,_0x580875){this['_assertOpen']();let _0x4d4d94=this['_worktrees']['get'](_0x580875);if(!_0x4d4d94)return{'status':'not-found'};if(_0x4d4d94['record']['status']==='draft')return{'status':'already-in-target','aggregate':a(_0x4d4d94)};if(_0x4d4d94['record']['status']!=='ready')return{'status':'status-mismatch','aggregate':a(_0x4d4d94)};for(let _0x587192 of _0x4d4d94['units']['values']())g(_0x587192['record'])||(_0x587192['record']=h(_0x587192['record']),delete _0x587192['mergeArtifact']);return _0x4d4d94['record']={..._0x4d4d94['record'],'status':'draft'},{'status':'transitioned','previousStatus':'ready','aggregate':a(_0x4d4d94)};}async['discardWorktree'](_0x2de253,_0x21d77c){this['_assertOpen']();let _0x532720=this['_worktrees']['get'](_0x21d77c);if(!_0x532720)return{'status':'not-found'};if(_0x532720['record']['status']==='discarded')return{'status':'already-in-target','aggregate':a(_0x532720)};if(_0x532720['record']['status']!=='draft'&&_0x532720['record']['status']!=='ready')return{'status':'status-mismatch','aggregate':a(_0x532720)};let _0x36a67d=_0x532720['record']['status'];return _0x532720['record']={..._0x532720['record'],'status':'discarded'},{'status':'transitioned','previousStatus':_0x36a67d,'aggregate':a(_0x532720)};}async['startOrResumeMerge'](_0x5c750d,_0x20e81f){this['_assertOpen']();let _0x109420=this['_worktrees']['get'](_0x20e81f);return _0x109420?_0x109420['record']['status']==='merged'?{'status':'already-merged','aggregate':a(_0x109420)}:_0x109420['record']['status']==='merging'?{'status':'resumed','aggregate':a(_0x109420)}:_0x109420['record']['status']==='ready'?(_0x109420['record']={..._0x109420['record'],'status':'merging'},{'status':'started','aggregate':a(_0x109420)}):{'status':'status-mismatch','aggregate':a(_0x109420)}:{'status':'not-found'};}async['recordUnitMergeResult'](_0x5e1709,_0x4b2b80){this['_assertOpen'](),u(_0x4b2b80['mergeResult']);let _0x193cc3=this['_worktrees']['get'](_0x4b2b80['worktreeID']),_0x3b0a56=_0x193cc3?.['units']['get'](_0x4b2b80['unitID']);if(!_0x193cc3||!_0x3b0a56)return{'status':'not-found'};if(_0x193cc3['record']['status']!=='merging'||_0x3b0a56['record']['readyDraftHeadRevision']!==_0x4b2b80['readyDraftHeadRevision'])return{'status':'stale-merge'};let _0x4bbaab=_0x3b0a56['record']['mergeResult'];return _0x4bbaab&&(0x0,e['isDeepStrictEqual'])(_0x4bbaab,_0x4b2b80['mergeResult'])?{'status':'already-recorded','aggregate':a(_0x193cc3)}:_0x4bbaab&&_(_0x4bbaab)?{'status':'stale-merge'}:(_0x3b0a56['record']={..._0x3b0a56['record'],'mergeResult':b(_0x4b2b80['mergeResult'])},{'status':'recorded','aggregate':a(_0x193cc3)});}async['finishMerge'](_0xba8a5d,_0x1b1884){this['_assertOpen']();let _0x371e94=this['_worktrees']['get'](_0x1b1884);if(!_0x371e94)return{'status':'not-found'};if(_0x371e94['record']['status']==='merged')return{'status':'already-in-target','aggregate':a(_0x371e94)};if(_0x371e94['record']['status']!=='merging')return{'status':'status-mismatch','aggregate':a(_0x371e94)};let _0x374f86=[..._0x371e94['units']['values']()]['every'](_0x3cbe94=>g(_0x3cbe94['record']));return _0x371e94['record']={..._0x371e94['record'],'status':_0x374f86?'merged':'ready'},{'status':'transitioned','previousStatus':'merging','aggregate':a(_0x371e94)};}async['dispose'](){this['_disposed']||(this['_disposed']=!0x0,this['_worktrees']['clear']());}['_assertOpen'](){if(this['_disposed'])throw new t['CollabError']('INTERNAL_ERROR','Memory\x20Worktree\x20Database\x20Adapter\x20is\x20disposed');}};function a(_0x1977b2){return{'worktree':b(_0x1977b2['record']),'units':[..._0x1977b2['units']['values']()]['map'](({record:_0x17136a})=>b(_0x17136a))};}function o(_0x2b169f){if(!_0x2b169f['record']['worktreeID']||!_0x2b169f['record']['sid']||_0x2b169f['record']['status']!=='draft')throw y('New\x20Worktree\x20record\x20must\x20be\x20a\x20draft\x20with\x20identity');let _0x4d103e=new Set();for(let _0x268453 of _0x2b169f['units']){if(_0x268453['worktreeID']!==_0x2b169f['record']['worktreeID'])throw y('Initial\x20Unit\x20belongs\x20to\x20a\x20different\x20Worktree');if(_0x4d103e['has'](_0x268453['unitID']))throw y('Initial\x20Worktree\x20Units\x20must\x20be\x20unique');_0x4d103e['add'](_0x268453['unitID']),c(_0x268453);}}function s(_0x5b1b4a){if(!_0x5b1b4a['worktreeID']||!_0x5b1b4a['unitID'])throw y('Worktree\x20and\x20Unit\x20identity\x20are\x20required');}function c(_0x46b6a6){if(s(_0x46b6a6),_0x46b6a6['source']!=='trunk'||!Number['isSafeInteger'](_0x46b6a6['baselineTrunkRevision'])||_0x46b6a6['baselineTrunkRevision']<0x1||!r['has'](_0x46b6a6['type'])||_0x46b6a6['draftHeadRevision']!==_0x46b6a6['baselineTrunkRevision']||_0x46b6a6['readyDraftHeadRevision']!==void 0x0||_0x46b6a6['mergeResult']!==void 0x0)throw y('New\x20Worktree\x20Unit\x20must\x20start\x20at\x20its\x20trunk\x20baseline');}function l(_0x3f1152,_0x4e9ab8){if(s(_0x3f1152),_0x3f1152['source']!=='worktree'||_0x3f1152['baselineTrunkRevision']!==void 0x0||!r['has'](_0x3f1152['type'])||_0x3f1152['draftHeadRevision']!==0x1||_0x3f1152['readyDraftHeadRevision']!==void 0x0||_0x3f1152['mergeResult']!==void 0x0||_0x4e9ab8['snapshot']['unitID']!==_0x3f1152['unitID']||_0x4e9ab8['snapshot']['type']!==_0x3f1152['type']||_0x4e9ab8['snapshot']['rev']!==0x1)throw y('Worktree-created\x20Unit\x20must\x20start\x20from\x20its\x20revision\x201\x20seed');}function u(_0x3ebf82){if(_0x3ebf82['status']==='merged'){if(!Number['isSafeInteger'](_0x3ebf82['trunkRevision'])||_0x3ebf82['trunkRevision']<0x1)throw y('Merged\x20result\x20requires\x20a\x20positive\x20trunk\x20revision');return;}if(_0x3ebf82['status']!=='unchanged'&&(!_0x3ebf82['error']['code']||!_0x3ebf82['error']['message']||typeof _0x3ebf82['error']['retryable']!='boolean'))throw y('Merge\x20error\x20must\x20be\x20stable\x20and\x20serializable');}function d(_0x20277b,_0x2588ed){if(_0x2588ed['unit']['snapshot']['unitID']!==_0x20277b['unitID']||_0x2588ed['unit']['snapshot']['type']!==_0x20277b['type']||_0x2588ed['unit']['snapshot']['rev']!==0x1)throw y('Worktree\x20Unit\x20merge\x20artifact\x20must\x20be\x20a\x20revision\x201\x20snapshot');}function f(_0x166ad4){if(!Number['isSafeInteger'](_0x166ad4['from'])||!Number['isSafeInteger'](_0x166ad4['to'])||_0x166ad4['from']<0x0||_0x166ad4['to']<0x0)throw y('Changeset\x20range\x20revisions\x20must\x20be\x20non-negative');}function p(_0x280423){if(!_0x280423['sid']||!Number['isSafeInteger'](_0x280423['reqId'])||_0x280423['reqId']<0x1)throw y('Changeset\x20sid\x20and\x20positive\x20integer\x20reqId\x20are\x20required');}function m(_0x3732a7,_0x4d470f){let {changeset:_0x13b327,expectedHeadRevision:_0x46c368}=_0x4d470f;if(_0x13b327['type']!==_0x3732a7['type']||_0x13b327['baseRev']!==_0x46c368||_0x13b327['revision']!==_0x46c368+0x1)throw y('Draft\x20changeset\x20must\x20match\x20the\x20Unit\x20type\x20and\x20expected\x20revision');}function h(_0x3312be){let {readyDraftHeadRevision:_0x4a5946,mergeResult:_0x525418,..._0x9c679}=_0x3312be;return _0x9c679;}function g(_0x368dc5){return _0x368dc5['mergeResult']?_(_0x368dc5['mergeResult']):!0x1;}function _(_0x4598ed){return _0x4598ed['status']==='merged'||_0x4598ed['status']==='unchanged';}function v(_0x62b7d3,_0x529856){return _0x62b7d3['length']+':'+_0x62b7d3+':'+_0x529856;}function y(_0x371df5){return new t['CollabError']('INVALID_REQUEST',_0x371df5);}function b(_0x52e1f2){return structuredClone(_0x52e1f2);}exports['MemoryWorktreeDatabaseAdapter']=i;
|
|
1
|
+
Object['defineProperty'](exports,Symbol['toStringTag'],{'value':'Module'});let e=require('node:util'),t=require('@univerjs-pro/collaboration-service'),n=require('@univerjs/protocol');var r=new Set([n['UniverType']['UNIVER_SHEET'],n['UniverType']['UNIVER_DOC'],n['UniverType']['UNIVER_SLIDE'],n['UniverType']['UNIVER_BOARD'],n['UniverType']['UNIVER_BASE']]),i=class{['_worktrees']=new Map();['_disposed']=!0x1;async['getWorktree'](_0xebfda3,_0x3a4d43){this['_assertOpen']();let _0x3e2a7d=this['_worktrees']['get'](_0x3a4d43);return _0x3e2a7d?a(_0x3e2a7d):null;}async['getWorktreeUnit'](_0x17f02f,_0xfe956a,_0x41976b){this['_assertOpen']();let _0x499cc1=this['_worktrees']['get'](_0xfe956a)?.['units']['get'](_0x41976b);return _0x499cc1?_(_0x499cc1['record']):null;}async['getDraftChangesets'](_0x541d4f,_0x4f7140,_0x5b2422,_0xdd7b31){this['_assertOpen'](),f(_0xdd7b31);let _0x357d62=this['_worktrees']['get'](_0x4f7140)?.['units']['get'](_0x5b2422);return _0x357d62?[..._0x357d62['changesets']['entries']()]['filter'](([_0x4a99ac])=>_0x4a99ac>_0xdd7b31['from']&&(_0xdd7b31['to']===void 0x0||_0x4a99ac<=_0xdd7b31['to']))['sort'](([_0x5ec48b],[_0x36f997])=>_0x5ec48b-_0x36f997)['map'](([,_0xdbef15])=>_(_0xdbef15)):null;}async['getUnitSeed'](_0x277573,_0x505e7b,_0x17327b){this['_assertOpen']();let _0x536d93=this['_worktrees']['get'](_0x505e7b)?.['units']['get'](_0x17327b)?.['seed'];return _0x536d93?_(_0x536d93):null;}async['getUnitMergeArtifact'](_0x4c8ba5,_0x4e34d9,_0x422293){this['_assertOpen']();let _0x3aa509=this['_worktrees']['get'](_0x4e34d9)?.['units']['get'](_0x422293)?.['mergeArtifact'];return _0x3aa509?_(_0x3aa509):null;}async['createWorktree'](_0x563931,_0x202645){this['_assertOpen'](),o(_0x202645);let _0x4b011d=this['_worktrees']['get'](_0x202645['record']['worktreeID']);if(_0x4b011d)return{'status':'already-exists','aggregate':a(_0x4b011d)};let _0x377cbb=new Map();for(let _0x26f5c7 of _0x202645['units'])_0x377cbb['set'](_0x26f5c7['unitID'],{'record':_(_0x26f5c7),'changesets':new Map()});let _0x220b53={'record':_(_0x202645['record']),'units':_0x377cbb};return this['_worktrees']['set'](_0x202645['record']['worktreeID'],_0x220b53),{'status':'created','aggregate':a(_0x220b53)};}async['addUnit'](_0x5da6f4,_0x4597d9){this['_assertOpen']();let {unit:_0x1d4336}=_0x4597d9;s(_0x1d4336);let _0x2f4855=this['_worktrees']['get'](_0x1d4336['worktreeID']);return _0x2f4855?_0x2f4855['units']['has'](_0x1d4336['unitID'])?{'status':'already-exists','aggregate':a(_0x2f4855)}:_0x2f4855['record']['status']==='draft'?(c(_0x1d4336),_0x2f4855['units']['set'](_0x1d4336['unitID'],{'record':_(_0x1d4336),'changesets':new Map()}),{'status':'added','aggregate':a(_0x2f4855)}):{'status':'status-mismatch','aggregate':a(_0x2f4855)}:{'status':'not-found'};}async['createUnit'](_0x1f5ade,_0x6a2a6a){this['_assertOpen'](),l(_0x6a2a6a['unit'],_0x6a2a6a['seed']);let _0x1f4c50=this['_worktrees']['get'](_0x6a2a6a['unit']['worktreeID']);if(!_0x1f4c50)return{'status':'not-found'};let _0x5c233b=_0x1f4c50['units']['get'](_0x6a2a6a['unit']['unitID']);return _0x5c233b?{'status':_0x5c233b['record']['source']==='worktree'&&_0x5c233b['record']['type']===_0x6a2a6a['unit']['type']&&_0x5c233b['seed']!==void 0x0&&(0x0,e['isDeepStrictEqual'])(_0x5c233b['seed'],_0x6a2a6a['seed'])?'already-created':'unit-exists','aggregate':a(_0x1f4c50)}:_0x1f4c50['record']['status']==='draft'?(_0x1f4c50['units']['set'](_0x6a2a6a['unit']['unitID'],{'record':_(_0x6a2a6a['unit']),'seed':_(_0x6a2a6a['seed']),'changesets':new Map()}),{'status':'created','aggregate':a(_0x1f4c50)}):{'status':'status-mismatch','aggregate':a(_0x1f4c50)};}async['saveUnitMergeArtifact'](_0x30e59c,_0x316f43){this['_assertOpen']();let _0x3cae87=this['_worktrees']['get'](_0x316f43['worktreeID']),_0x1f3a8f=_0x3cae87?.['units']['get'](_0x316f43['unitID']);return!_0x3cae87||!_0x1f3a8f?{'status':'not-found'}:_0x3cae87['record']['status']!=='merging'||_0x1f3a8f['record']['source']!=='worktree'||_0x1f3a8f['record']['readyDraftHeadRevision']!==_0x316f43['artifact']['readyDraftHeadRevision']||m(_0x1f3a8f['record'])?{'status':'stale-merge'}:_0x1f3a8f['mergeArtifact']?{'status':'already-saved','artifact':_(_0x1f3a8f['mergeArtifact'])}:(d(_0x1f3a8f['record'],_0x316f43['artifact']),_0x1f3a8f['mergeArtifact']=_(_0x316f43['artifact']),{'status':'saved','artifact':_(_0x316f43['artifact'])});}async['setUnitRemoved'](_0x17b006,_0x30be98){this['_assertOpen']();let _0x176c18=this['_worktrees']['get'](_0x30be98['worktreeID']),_0x2951f4=_0x176c18?.['units']['get'](_0x30be98['unitID']);if(!_0x176c18||!_0x2951f4)return{'status':'not-found'};if(_0x176c18['record']['status']!=='draft'||m(_0x2951f4['record']))return{'status':'not-editable','aggregate':a(_0x176c18)};if(!!_0x2951f4['record']['removed']===_0x30be98['removed'])return{'status':'unchanged','aggregate':a(_0x176c18)};let {removed:_0x11a115,..._0x52bffe}=_0x2951f4['record'];return _0x2951f4['record']={..._0x52bffe,..._0x30be98['removed']?{'removed':!0x0}:{}},{'status':'updated','aggregate':a(_0x176c18)};}async['commitDraftChangeset'](_0x39540a,_0x189f87){this['_assertOpen']();let _0x230e5a=this['_worktrees']['get'](_0x189f87['worktreeID']),_0x487159=_0x230e5a?.['units']['get'](_0x189f87['changeset']['unitID']);if(!_0x230e5a||!_0x487159)return{'status':'not-found'};if(_0x230e5a['record']['status']!=='draft')return{'status':'not-editable','worktreeStatus':_0x230e5a['record']['status']};if(_0x487159['record']['removed']||m(_0x487159['record']))return{'status':'unit-frozen'};if(_0x487159['record']['draftHeadRevision']!==_0x189f87['changeset']['revision']-0x1)return{'status':'revision-mismatch','actualHeadRevision':_0x487159['record']['draftHeadRevision']};let _0x190145=_(_0x189f87['changeset']);return _0x190145['createTime']=Math['floor'](Date['now']()/0x3e8),_0x487159['changesets']['set'](_0x190145['revision'],_0x190145),_0x487159['record']={..._0x487159['record'],'draftHeadRevision':_0x190145['revision']},{'status':'committed','changeset':_(_0x190145),'headRevision':_0x190145['revision']};}async['markReady'](_0x9ae350,_0x6b5f6){this['_assertOpen']();let _0x5d314e=this['_worktrees']['get'](_0x6b5f6);if(!_0x5d314e)return{'status':'not-found'};if(_0x5d314e['record']['status']==='ready')return{'status':'already-in-target','aggregate':a(_0x5d314e)};if(_0x5d314e['record']['status']!=='draft')return{'status':'status-mismatch','aggregate':a(_0x5d314e)};for(let _0xa6dcc3 of _0x5d314e['units']['values']())m(_0xa6dcc3['record'])||(_0xa6dcc3['record']={..._0xa6dcc3['record'],'readyDraftHeadRevision':_0xa6dcc3['record']['draftHeadRevision']});return _0x5d314e['record']={..._0x5d314e['record'],'status':'ready'},{'status':'transitioned','previousStatus':'draft','aggregate':a(_0x5d314e)};}async['reopenWorktree'](_0x7ece03,_0xc6d6f7){this['_assertOpen']();let _0x4430d8=this['_worktrees']['get'](_0xc6d6f7);if(!_0x4430d8)return{'status':'not-found'};if(_0x4430d8['record']['status']==='draft')return{'status':'already-in-target','aggregate':a(_0x4430d8)};if(_0x4430d8['record']['status']!=='ready')return{'status':'status-mismatch','aggregate':a(_0x4430d8)};for(let _0x117036 of _0x4430d8['units']['values']())m(_0x117036['record'])||(_0x117036['record']=p(_0x117036['record']),delete _0x117036['mergeArtifact']);return _0x4430d8['record']={..._0x4430d8['record'],'status':'draft'},{'status':'transitioned','previousStatus':'ready','aggregate':a(_0x4430d8)};}async['discardWorktree'](_0xa85024,_0x2b58e7){this['_assertOpen']();let _0x4fe1e9=this['_worktrees']['get'](_0x2b58e7);if(!_0x4fe1e9)return{'status':'not-found'};if(_0x4fe1e9['record']['status']==='discarded')return{'status':'already-in-target','aggregate':a(_0x4fe1e9)};if(_0x4fe1e9['record']['status']!=='draft'&&_0x4fe1e9['record']['status']!=='ready')return{'status':'status-mismatch','aggregate':a(_0x4fe1e9)};let _0x55e237=_0x4fe1e9['record']['status'];return _0x4fe1e9['record']={..._0x4fe1e9['record'],'status':'discarded'},{'status':'transitioned','previousStatus':_0x55e237,'aggregate':a(_0x4fe1e9)};}async['startOrResumeMerge'](_0x4ac3d3,_0x47e8d6){this['_assertOpen']();let _0x2d5f5d=this['_worktrees']['get'](_0x47e8d6);return _0x2d5f5d?_0x2d5f5d['record']['status']==='merged'?{'status':'already-merged','aggregate':a(_0x2d5f5d)}:_0x2d5f5d['record']['status']==='merging'?{'status':'resumed','aggregate':a(_0x2d5f5d)}:_0x2d5f5d['record']['status']==='ready'?(_0x2d5f5d['record']={..._0x2d5f5d['record'],'status':'merging'},{'status':'started','aggregate':a(_0x2d5f5d)}):{'status':'status-mismatch','aggregate':a(_0x2d5f5d)}:{'status':'not-found'};}async['recordUnitMergeResult'](_0x30b7cf,_0x278a3d){this['_assertOpen'](),u(_0x278a3d['mergeResult']);let _0x5dfdf1=this['_worktrees']['get'](_0x278a3d['worktreeID']),_0x358a62=_0x5dfdf1?.['units']['get'](_0x278a3d['unitID']);if(!_0x5dfdf1||!_0x358a62)return{'status':'not-found'};if(_0x5dfdf1['record']['status']!=='merging'||_0x358a62['record']['readyDraftHeadRevision']!==_0x278a3d['readyDraftHeadRevision'])return{'status':'stale-merge'};if(_0x278a3d['mergeResult']['status']==='removed'&&!_0x358a62['record']['removed']||_0x358a62['record']['removed']&&(_0x278a3d['mergeResult']['status']==='merged'||_0x278a3d['mergeResult']['status']==='unchanged'))throw new t['CollabError']('INVALID_REQUEST','Merge\x20result\x20does\x20not\x20match\x20frozen\x20Unit\x20removal\x20intent');let _0x46c168=_0x358a62['record']['mergeResult'];return _0x46c168&&(0x0,e['isDeepStrictEqual'])(_0x46c168,_0x278a3d['mergeResult'])?{'status':'already-recorded','aggregate':a(_0x5dfdf1)}:_0x46c168&&h(_0x46c168)?{'status':'stale-merge'}:(_0x358a62['record']={..._0x358a62['record'],'mergeResult':_(_0x278a3d['mergeResult'])},{'status':'recorded','aggregate':a(_0x5dfdf1)});}async['finishMerge'](_0xf4aae3,_0x4659f1){this['_assertOpen']();let _0x4bbfb1=this['_worktrees']['get'](_0x4659f1);if(!_0x4bbfb1)return{'status':'not-found'};if(_0x4bbfb1['record']['status']==='merged')return{'status':'already-in-target','aggregate':a(_0x4bbfb1)};if(_0x4bbfb1['record']['status']!=='merging')return{'status':'status-mismatch','aggregate':a(_0x4bbfb1)};let _0xab63f1=[..._0x4bbfb1['units']['values']()]['every'](_0xa79e68=>m(_0xa79e68['record']));return _0x4bbfb1['record']={..._0x4bbfb1['record'],'status':_0xab63f1?'merged':'ready'},{'status':'transitioned','previousStatus':'merging','aggregate':a(_0x4bbfb1)};}async['dispose'](){this['_disposed']||(this['_disposed']=!0x0,this['_worktrees']['clear']());}['_assertOpen'](){if(this['_disposed'])throw new t['CollabError']('INTERNAL_ERROR','Memory\x20Worktree\x20Database\x20Adapter\x20is\x20disposed');}};function a(_0x5c63a4){return{'worktree':_(_0x5c63a4['record']),'units':[..._0x5c63a4['units']['values']()]['map'](({record:_0x13bb2f})=>_(_0x13bb2f))};}function o(_0x3de662){if(!_0x3de662['record']['worktreeID']||!_0x3de662['record']['sid']||_0x3de662['record']['status']!=='draft')throw g('New\x20Worktree\x20record\x20must\x20be\x20a\x20draft\x20with\x20identity');let _0x5dd5e0=new Set();for(let _0x39ebd7 of _0x3de662['units']){if(_0x39ebd7['worktreeID']!==_0x3de662['record']['worktreeID'])throw g('Initial\x20Unit\x20belongs\x20to\x20a\x20different\x20Worktree');if(_0x5dd5e0['has'](_0x39ebd7['unitID']))throw g('Initial\x20Worktree\x20Units\x20must\x20be\x20unique');_0x5dd5e0['add'](_0x39ebd7['unitID']),c(_0x39ebd7);}}function s(_0x12b57e){if(typeof _0x12b57e['creatorID']!='string'||_0x12b57e['creatorID']['length']===0x0||!Number['isSafeInteger'](_0x12b57e['createdAt'])||_0x12b57e['createdAt']<0x0)throw g('Unit\x20creation\x20requires\x20creatorID\x20and\x20createdAt\x20in\x20Unix\x20milliseconds');if(!_0x12b57e['worktreeID']||!_0x12b57e['unitID'])throw g('Worktree\x20and\x20Unit\x20identity\x20are\x20required');}function c(_0x1eb38f){if(s(_0x1eb38f),_0x1eb38f['source']!=='trunk'||!Number['isSafeInteger'](_0x1eb38f['baselineTrunkRevision'])||_0x1eb38f['baselineTrunkRevision']<0x1||!r['has'](_0x1eb38f['type'])||_0x1eb38f['draftHeadRevision']!==_0x1eb38f['baselineTrunkRevision']||_0x1eb38f['readyDraftHeadRevision']!==void 0x0||_0x1eb38f['mergeResult']!==void 0x0)throw g('New\x20Worktree\x20Unit\x20must\x20start\x20at\x20its\x20trunk\x20baseline');}function l(_0x27e93d,_0x120b97){if(s(_0x27e93d),_0x27e93d['source']!=='worktree'||_0x27e93d['baselineTrunkRevision']!==void 0x0||!r['has'](_0x27e93d['type'])||_0x27e93d['draftHeadRevision']!==0x1||_0x27e93d['readyDraftHeadRevision']!==void 0x0||_0x27e93d['mergeResult']!==void 0x0||_0x120b97['snapshot']['unitID']!==_0x27e93d['unitID']||_0x120b97['snapshot']['type']!==_0x27e93d['type']||_0x120b97['snapshot']['rev']!==0x1)throw g('Worktree-created\x20Unit\x20must\x20start\x20from\x20its\x20revision\x201\x20seed');}function u(_0x16b591){if(_0x16b591['status']==='merged'){if(!Number['isSafeInteger'](_0x16b591['trunkRevision'])||_0x16b591['trunkRevision']<0x1)throw g('Merged\x20result\x20requires\x20a\x20positive\x20trunk\x20revision');return;}if(!(_0x16b591['status']==='unchanged'||_0x16b591['status']==='removed')&&(!_0x16b591['error']['code']||!_0x16b591['error']['message']||typeof _0x16b591['error']['retryable']!='boolean'))throw g('Merge\x20error\x20must\x20be\x20stable\x20and\x20serializable');}function d(_0x36ae88,_0x30771e){if(_0x30771e['unit']['snapshot']['unitID']!==_0x36ae88['unitID']||_0x30771e['unit']['snapshot']['type']!==_0x36ae88['type']||_0x30771e['unit']['snapshot']['rev']!==0x1)throw g('Worktree\x20Unit\x20merge\x20artifact\x20must\x20be\x20a\x20revision\x201\x20snapshot');}function f(_0x54e4ed){if(!Number['isSafeInteger'](_0x54e4ed['from'])||_0x54e4ed['from']<0x0||_0x54e4ed['to']!==void 0x0&&(!Number['isSafeInteger'](_0x54e4ed['to'])||_0x54e4ed['to']<0x0))throw g('Changeset\x20range\x20revisions\x20must\x20be\x20non-negative');}function p(_0x2d58df){let {readyDraftHeadRevision:_0x1df3b5,mergeResult:_0x2084fd,..._0x2f080f}=_0x2d58df;return _0x2f080f;}function m(_0x5a169b){return _0x5a169b['mergeResult']?h(_0x5a169b['mergeResult']):!0x1;}function h(_0x4baa33){return _0x4baa33['status']==='merged'||_0x4baa33['status']==='unchanged'||_0x4baa33['status']==='removed';}function g(_0x10c61d){return new t['CollabError']('INVALID_REQUEST',_0x10c61d);}function _(_0x487cd7){return structuredClone(_0x487cd7);}exports['MemoryWorktreeDatabaseAdapter']=i;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { AddWorktreeUnitDatabaseInput, AddWorktreeUnitDatabaseResult, CommitWorktreeChangesetInput, CommitWorktreeChangesetResult, CreateWorktreeDatabaseInput, CreateWorktreeDatabaseResult, CreateWorktreeUnitDatabaseInput, CreateWorktreeUnitDatabaseResult, IWorktreeDatabaseAdapter, RecordUnitMergeResultInput, RecordUnitMergeResultResult, SaveWorktreeUnitMergeArtifactInput, SaveWorktreeUnitMergeArtifactResult, StartMergeResult, WorktreeAggregateRecord, WorktreeRevisionRange, WorktreeTransitionResult, WorktreeUnitMergeArtifact, WorktreeUnitRecord, WorktreeUnitSeed } from "@univerjs-pro/collaboration-worktree-service";
|
|
1
|
+
import { DatabaseContext } from "@univerjs-pro/collaboration-service";
|
|
2
|
+
import { AddWorktreeUnitDatabaseInput, AddWorktreeUnitDatabaseResult, CommitWorktreeChangesetInput, CommitWorktreeChangesetResult, CreateWorktreeDatabaseInput, CreateWorktreeDatabaseResult, CreateWorktreeUnitDatabaseInput, CreateWorktreeUnitDatabaseResult, IWorktreeDatabaseAdapter, RecordUnitMergeResultInput, RecordUnitMergeResultResult, SaveWorktreeUnitMergeArtifactInput, SaveWorktreeUnitMergeArtifactResult, SetWorktreeUnitRemovedDatabaseInput, SetWorktreeUnitRemovedResult, StartMergeResult, WorktreeAggregateRecord, WorktreeRevisionRange, WorktreeTransitionResult, WorktreeUnitMergeArtifact, WorktreeUnitRecord, WorktreeUnitSeed } from "@univerjs-pro/collaboration-worktree-service";
|
|
3
3
|
import { IChangeset } from "@univerjs/protocol";
|
|
4
4
|
|
|
5
5
|
//#region src/memory-worktree-database-adapter.d.ts
|
|
@@ -8,14 +8,14 @@ declare class MemoryWorktreeDatabaseAdapter implements IWorktreeDatabaseAdapter
|
|
|
8
8
|
private _disposed;
|
|
9
9
|
getWorktree(_context: DatabaseContext, worktreeID: string): Promise<WorktreeAggregateRecord | null>;
|
|
10
10
|
getWorktreeUnit(_context: DatabaseContext, worktreeID: string, unitID: string): Promise<WorktreeUnitRecord | null>;
|
|
11
|
-
getDraftChangesets(_context: DatabaseContext, worktreeID: string, unitID: string, range: WorktreeRevisionRange): Promise<
|
|
12
|
-
getDraftSubmission(_context: DatabaseContext, worktreeID: string, unitID: string, sid: string, reqId: number): Promise<IChangeset | null>;
|
|
11
|
+
getDraftChangesets(_context: DatabaseContext, worktreeID: string, unitID: string, range: WorktreeRevisionRange): Promise<readonly IChangeset[] | null>;
|
|
13
12
|
getUnitSeed(_context: DatabaseContext, worktreeID: string, unitID: string): Promise<WorktreeUnitSeed | null>;
|
|
14
13
|
getUnitMergeArtifact(_context: DatabaseContext, worktreeID: string, unitID: string): Promise<WorktreeUnitMergeArtifact | null>;
|
|
15
14
|
createWorktree(_context: DatabaseContext, input: CreateWorktreeDatabaseInput): Promise<CreateWorktreeDatabaseResult>;
|
|
16
15
|
addUnit(_context: DatabaseContext, input: AddWorktreeUnitDatabaseInput): Promise<AddWorktreeUnitDatabaseResult>;
|
|
17
16
|
createUnit(_context: DatabaseContext, input: CreateWorktreeUnitDatabaseInput): Promise<CreateWorktreeUnitDatabaseResult>;
|
|
18
17
|
saveUnitMergeArtifact(_context: DatabaseContext, input: SaveWorktreeUnitMergeArtifactInput): Promise<SaveWorktreeUnitMergeArtifactResult>;
|
|
18
|
+
setUnitRemoved(_context: DatabaseContext, input: SetWorktreeUnitRemovedDatabaseInput): Promise<SetWorktreeUnitRemovedResult>;
|
|
19
19
|
commitDraftChangeset(_context: DatabaseContext, input: CommitWorktreeChangesetInput): Promise<CommitWorktreeChangesetResult>;
|
|
20
20
|
markReady(_context: DatabaseContext, worktreeID: string): Promise<WorktreeTransitionResult>;
|
|
21
21
|
reopenWorktree(_context: DatabaseContext, worktreeID: string): Promise<WorktreeTransitionResult>;
|
package/dist/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
(function(_0x562aaf,_0x4cd8c1){const _0xe3196e=_0x30a4,_0x35703e=_0x562aaf();while(!![]){try{const _0x5861ae=parseInt(_0xe3196e(0x73))/0x1+-parseInt(_0xe3196e(0x6b))/0x2*(parseInt(_0xe3196e(0x6c))/0x3)+parseInt(_0xe3196e(0x70))/0x4+parseInt(_0xe3196e(0x6e))/0x5+parseInt(_0xe3196e(0x6d))/0x6+parseInt(_0xe3196e(0x6f))/0x7*(parseInt(_0xe3196e(0x72))/0x8)+-parseInt(_0xe3196e(0x74))/0x9*(parseInt(_0xe3196e(0x71))/0xa);if(_0x5861ae===_0x4cd8c1)break;else _0x35703e['push'](_0x35703e['shift']());}catch(_0x2d7d27){_0x35703e['push'](_0x35703e['shift']());}}}(_0x178d,0xa4ec2));import _0x9cd24e from'./index.cjs';function _0x30a4(_0x17e72d,_0x5c9ea8){_0x17e72d=_0x17e72d-0x6b;const _0x178d0d=_0x178d();let _0x30a42f=_0x178d0d[_0x17e72d];return _0x30a42f;}function _0x178d(){const _0x144a45=['741810OySQBR','6268720GYpjwO','1589iuXZnY','3788884MTunLk','538990BjzYOp','17832TkAcni','1275350HolsJn','432uYiATl','482INXzAO','10497qYeOyh'];_0x178d=function(){return _0x144a45;};return _0x178d();}const facadeExport0=_0x9cd24e['MemoryWorktreeDatabaseAdapter'];export{facadeExport0 as MemoryWorktreeDatabaseAdapter};
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@univerjs-pro/collaboration-worktree-database-memory",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "1.0.0
|
|
4
|
+
"version": "1.0.0",
|
|
5
5
|
"main": "./dist/index.cjs",
|
|
6
6
|
"module": "./dist/index.mjs",
|
|
7
7
|
"types": "./dist/index.d.ts",
|
|
@@ -16,11 +16,8 @@
|
|
|
16
16
|
"dist"
|
|
17
17
|
],
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"@univerjs-pro/collaboration-service": "1.0.0
|
|
20
|
-
"@univerjs-pro/collaboration-worktree-service": "1.0.0
|
|
21
|
-
"@univerjs/protocol": "1.0.0
|
|
22
|
-
},
|
|
23
|
-
"publishConfig": {
|
|
24
|
-
"access": "public"
|
|
19
|
+
"@univerjs-pro/collaboration-service": "1.0.0",
|
|
20
|
+
"@univerjs-pro/collaboration-worktree-service": "1.0.0",
|
|
21
|
+
"@univerjs/protocol": "1.0.0"
|
|
25
22
|
}
|
|
26
|
-
}
|
|
23
|
+
}
|