@univerjs-pro/collaboration-worktree-database-memory 1.0.0-insiders.20260808-70eefdd → 1.0.0-rc.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,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.
@@ -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'](_0x3707f0,_0x3cb038){this['_assertOpen']();let _0x2724cd=this['_worktrees']['get'](_0x3cb038);return _0x2724cd?a(_0x2724cd):null;}async['getWorktreeUnit'](_0x181a56,_0x449ae9,_0x3e1738){this['_assertOpen']();let _0x3eefd4=this['_worktrees']['get'](_0x449ae9)?.['units']['get'](_0x3e1738);return _0x3eefd4?_(_0x3eefd4['record']):null;}async['getDraftChangesets'](_0xc6ae6,_0x35848a,_0x222d20,_0x56c8f3){this['_assertOpen'](),f(_0x56c8f3);let _0x3c14f5=this['_worktrees']['get'](_0x35848a)?.['units']['get'](_0x222d20);return _0x3c14f5?[..._0x3c14f5['changesets']['entries']()]['filter'](([_0x26299e])=>_0x26299e>_0x56c8f3['from']&&(_0x56c8f3['to']===void 0x0||_0x26299e<=_0x56c8f3['to']))['sort'](([_0x35cbf6],[_0x29dfd0])=>_0x35cbf6-_0x29dfd0)['map'](([,_0x27a2e0])=>_(_0x27a2e0)):null;}async['getUnitSeed'](_0x668c84,_0x2ec2c2,_0x344853){this['_assertOpen']();let _0x434acf=this['_worktrees']['get'](_0x2ec2c2)?.['units']['get'](_0x344853)?.['seed'];return _0x434acf?_(_0x434acf):null;}async['getUnitMergeArtifact'](_0x144ab1,_0x2856de,_0x2b4f32){this['_assertOpen']();let _0x1b149b=this['_worktrees']['get'](_0x2856de)?.['units']['get'](_0x2b4f32)?.['mergeArtifact'];return _0x1b149b?_(_0x1b149b):null;}async['createWorktree'](_0x42d516,_0x278ea5){this['_assertOpen'](),o(_0x278ea5);let _0x169a25=this['_worktrees']['get'](_0x278ea5['record']['worktreeID']);if(_0x169a25)return{'status':'already-exists','aggregate':a(_0x169a25)};let _0x37b116=new Map();for(let _0x127bc3 of _0x278ea5['units'])_0x37b116['set'](_0x127bc3['unitID'],{'record':_(_0x127bc3),'changesets':new Map()});let _0x5c326d={'record':_(_0x278ea5['record']),'units':_0x37b116};return this['_worktrees']['set'](_0x278ea5['record']['worktreeID'],_0x5c326d),{'status':'created','aggregate':a(_0x5c326d)};}async['addUnit'](_0x401f84,_0x2293b3){this['_assertOpen']();let {unit:_0x3dc85c}=_0x2293b3;s(_0x3dc85c);let _0x1856da=this['_worktrees']['get'](_0x3dc85c['worktreeID']);return _0x1856da?_0x1856da['units']['has'](_0x3dc85c['unitID'])?{'status':'already-exists','aggregate':a(_0x1856da)}:_0x1856da['record']['status']==='draft'?(c(_0x3dc85c),_0x1856da['units']['set'](_0x3dc85c['unitID'],{'record':_(_0x3dc85c),'changesets':new Map()}),{'status':'added','aggregate':a(_0x1856da)}):{'status':'status-mismatch','aggregate':a(_0x1856da)}:{'status':'not-found'};}async['createUnit'](_0x45b311,_0x231bbb){this['_assertOpen'](),l(_0x231bbb['unit'],_0x231bbb['seed']);let _0x276565=this['_worktrees']['get'](_0x231bbb['unit']['worktreeID']);if(!_0x276565)return{'status':'not-found'};let _0xe1c39=_0x276565['units']['get'](_0x231bbb['unit']['unitID']);return _0xe1c39?{'status':_0xe1c39['record']['source']==='worktree'&&_0xe1c39['record']['type']===_0x231bbb['unit']['type']&&_0xe1c39['seed']!==void 0x0&&(0x0,e['isDeepStrictEqual'])(_0xe1c39['seed'],_0x231bbb['seed'])?'already-created':'unit-exists','aggregate':a(_0x276565)}:_0x276565['record']['status']==='draft'?(_0x276565['units']['set'](_0x231bbb['unit']['unitID'],{'record':_(_0x231bbb['unit']),'seed':_(_0x231bbb['seed']),'changesets':new Map()}),{'status':'created','aggregate':a(_0x276565)}):{'status':'status-mismatch','aggregate':a(_0x276565)};}async['saveUnitMergeArtifact'](_0x959734,_0xc3a8f9){this['_assertOpen']();let _0x44fc3b=this['_worktrees']['get'](_0xc3a8f9['worktreeID']),_0x4dd4d3=_0x44fc3b?.['units']['get'](_0xc3a8f9['unitID']);return!_0x44fc3b||!_0x4dd4d3?{'status':'not-found'}:_0x44fc3b['record']['status']!=='merging'||_0x4dd4d3['record']['source']!=='worktree'||_0x4dd4d3['record']['readyDraftHeadRevision']!==_0xc3a8f9['artifact']['readyDraftHeadRevision']||m(_0x4dd4d3['record'])?{'status':'stale-merge'}:_0x4dd4d3['mergeArtifact']?{'status':'already-saved','artifact':_(_0x4dd4d3['mergeArtifact'])}:(d(_0x4dd4d3['record'],_0xc3a8f9['artifact']),_0x4dd4d3['mergeArtifact']=_(_0xc3a8f9['artifact']),{'status':'saved','artifact':_(_0xc3a8f9['artifact'])});}async['setUnitRemoved'](_0x21becd,_0x229161){this['_assertOpen']();let _0x5abf34=this['_worktrees']['get'](_0x229161['worktreeID']),_0x50c9d2=_0x5abf34?.['units']['get'](_0x229161['unitID']);if(!_0x5abf34||!_0x50c9d2)return{'status':'not-found'};if(_0x5abf34['record']['status']!=='draft'||m(_0x50c9d2['record']))return{'status':'not-editable','aggregate':a(_0x5abf34)};if(!!_0x50c9d2['record']['removed']===_0x229161['removed'])return{'status':'unchanged','aggregate':a(_0x5abf34)};let {removed:_0x4e947c,..._0x8d2205}=_0x50c9d2['record'];return _0x50c9d2['record']={..._0x8d2205,..._0x229161['removed']?{'removed':!0x0}:{}},{'status':'updated','aggregate':a(_0x5abf34)};}async['commitDraftChangeset'](_0x54879e,_0x3a1811){this['_assertOpen']();let _0x3853d7=this['_worktrees']['get'](_0x3a1811['worktreeID']),_0x448dd9=_0x3853d7?.['units']['get'](_0x3a1811['changeset']['unitID']);if(!_0x3853d7||!_0x448dd9)return{'status':'not-found'};if(_0x3853d7['record']['status']!=='draft')return{'status':'not-editable','worktreeStatus':_0x3853d7['record']['status']};if(_0x448dd9['record']['removed']||m(_0x448dd9['record']))return{'status':'unit-frozen'};if(_0x448dd9['record']['draftHeadRevision']!==_0x3a1811['changeset']['revision']-0x1)return{'status':'revision-mismatch','actualHeadRevision':_0x448dd9['record']['draftHeadRevision']};let _0x32c7c8=_(_0x3a1811['changeset']);return _0x448dd9['changesets']['set'](_0x32c7c8['revision'],_0x32c7c8),_0x448dd9['record']={..._0x448dd9['record'],'draftHeadRevision':_0x32c7c8['revision']},{'status':'committed','changeset':_(_0x32c7c8),'headRevision':_0x32c7c8['revision']};}async['markReady'](_0x161a17,_0x3cb235){this['_assertOpen']();let _0x3047ae=this['_worktrees']['get'](_0x3cb235);if(!_0x3047ae)return{'status':'not-found'};if(_0x3047ae['record']['status']==='ready')return{'status':'already-in-target','aggregate':a(_0x3047ae)};if(_0x3047ae['record']['status']!=='draft')return{'status':'status-mismatch','aggregate':a(_0x3047ae)};for(let _0x22733d of _0x3047ae['units']['values']())m(_0x22733d['record'])||(_0x22733d['record']={..._0x22733d['record'],'readyDraftHeadRevision':_0x22733d['record']['draftHeadRevision']});return _0x3047ae['record']={..._0x3047ae['record'],'status':'ready'},{'status':'transitioned','previousStatus':'draft','aggregate':a(_0x3047ae)};}async['reopenWorktree'](_0x364030,_0x1ccefa){this['_assertOpen']();let _0x47ccf1=this['_worktrees']['get'](_0x1ccefa);if(!_0x47ccf1)return{'status':'not-found'};if(_0x47ccf1['record']['status']==='draft')return{'status':'already-in-target','aggregate':a(_0x47ccf1)};if(_0x47ccf1['record']['status']!=='ready')return{'status':'status-mismatch','aggregate':a(_0x47ccf1)};for(let _0x5515d1 of _0x47ccf1['units']['values']())m(_0x5515d1['record'])||(_0x5515d1['record']=p(_0x5515d1['record']),delete _0x5515d1['mergeArtifact']);return _0x47ccf1['record']={..._0x47ccf1['record'],'status':'draft'},{'status':'transitioned','previousStatus':'ready','aggregate':a(_0x47ccf1)};}async['discardWorktree'](_0x21fb78,_0x13f6d7){this['_assertOpen']();let _0x24db19=this['_worktrees']['get'](_0x13f6d7);if(!_0x24db19)return{'status':'not-found'};if(_0x24db19['record']['status']==='discarded')return{'status':'already-in-target','aggregate':a(_0x24db19)};if(_0x24db19['record']['status']!=='draft'&&_0x24db19['record']['status']!=='ready')return{'status':'status-mismatch','aggregate':a(_0x24db19)};let _0x3c4611=_0x24db19['record']['status'];return _0x24db19['record']={..._0x24db19['record'],'status':'discarded'},{'status':'transitioned','previousStatus':_0x3c4611,'aggregate':a(_0x24db19)};}async['startOrResumeMerge'](_0x31ee85,_0x24ff5b){this['_assertOpen']();let _0x172eab=this['_worktrees']['get'](_0x24ff5b);return _0x172eab?_0x172eab['record']['status']==='merged'?{'status':'already-merged','aggregate':a(_0x172eab)}:_0x172eab['record']['status']==='merging'?{'status':'resumed','aggregate':a(_0x172eab)}:_0x172eab['record']['status']==='ready'?(_0x172eab['record']={..._0x172eab['record'],'status':'merging'},{'status':'started','aggregate':a(_0x172eab)}):{'status':'status-mismatch','aggregate':a(_0x172eab)}:{'status':'not-found'};}async['recordUnitMergeResult'](_0x32dec7,_0x4897d7){this['_assertOpen'](),u(_0x4897d7['mergeResult']);let _0x4a1bfe=this['_worktrees']['get'](_0x4897d7['worktreeID']),_0x46ed79=_0x4a1bfe?.['units']['get'](_0x4897d7['unitID']);if(!_0x4a1bfe||!_0x46ed79)return{'status':'not-found'};if(_0x4a1bfe['record']['status']!=='merging'||_0x46ed79['record']['readyDraftHeadRevision']!==_0x4897d7['readyDraftHeadRevision'])return{'status':'stale-merge'};if(_0x4897d7['mergeResult']['status']==='removed'&&!_0x46ed79['record']['removed']||_0x46ed79['record']['removed']&&(_0x4897d7['mergeResult']['status']==='merged'||_0x4897d7['mergeResult']['status']==='unchanged'))throw new t['CollabError']('INVALID_REQUEST','Merge\x20result\x20does\x20not\x20match\x20frozen\x20Unit\x20removal\x20intent');let _0x585bd8=_0x46ed79['record']['mergeResult'];return _0x585bd8&&(0x0,e['isDeepStrictEqual'])(_0x585bd8,_0x4897d7['mergeResult'])?{'status':'already-recorded','aggregate':a(_0x4a1bfe)}:_0x585bd8&&h(_0x585bd8)?{'status':'stale-merge'}:(_0x46ed79['record']={..._0x46ed79['record'],'mergeResult':_(_0x4897d7['mergeResult'])},{'status':'recorded','aggregate':a(_0x4a1bfe)});}async['finishMerge'](_0x23cdc8,_0x45d5b1){this['_assertOpen']();let _0x22e981=this['_worktrees']['get'](_0x45d5b1);if(!_0x22e981)return{'status':'not-found'};if(_0x22e981['record']['status']==='merged')return{'status':'already-in-target','aggregate':a(_0x22e981)};if(_0x22e981['record']['status']!=='merging')return{'status':'status-mismatch','aggregate':a(_0x22e981)};let _0x135a4d=[..._0x22e981['units']['values']()]['every'](_0x46f5f5=>m(_0x46f5f5['record']));return _0x22e981['record']={..._0x22e981['record'],'status':_0x135a4d?'merged':'ready'},{'status':'transitioned','previousStatus':'merging','aggregate':a(_0x22e981)};}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(_0x1947b3){return{'worktree':_(_0x1947b3['record']),'units':[..._0x1947b3['units']['values']()]['map'](({record:_0x406489})=>_(_0x406489))};}function o(_0x4e32df){if(!_0x4e32df['record']['worktreeID']||!_0x4e32df['record']['sid']||_0x4e32df['record']['status']!=='draft')throw g('New\x20Worktree\x20record\x20must\x20be\x20a\x20draft\x20with\x20identity');let _0x1ee95b=new Set();for(let _0x3b02ee of _0x4e32df['units']){if(_0x3b02ee['worktreeID']!==_0x4e32df['record']['worktreeID'])throw g('Initial\x20Unit\x20belongs\x20to\x20a\x20different\x20Worktree');if(_0x1ee95b['has'](_0x3b02ee['unitID']))throw g('Initial\x20Worktree\x20Units\x20must\x20be\x20unique');_0x1ee95b['add'](_0x3b02ee['unitID']),c(_0x3b02ee);}}function s(_0x2ee5b2){if(!_0x2ee5b2['worktreeID']||!_0x2ee5b2['unitID'])throw g('Worktree\x20and\x20Unit\x20identity\x20are\x20required');}function c(_0x720ba3){if(s(_0x720ba3),_0x720ba3['source']!=='trunk'||!Number['isSafeInteger'](_0x720ba3['baselineTrunkRevision'])||_0x720ba3['baselineTrunkRevision']<0x1||!r['has'](_0x720ba3['type'])||_0x720ba3['draftHeadRevision']!==_0x720ba3['baselineTrunkRevision']||_0x720ba3['readyDraftHeadRevision']!==void 0x0||_0x720ba3['mergeResult']!==void 0x0)throw g('New\x20Worktree\x20Unit\x20must\x20start\x20at\x20its\x20trunk\x20baseline');}function l(_0x19927c,_0x1ea4f7){if(s(_0x19927c),_0x19927c['source']!=='worktree'||_0x19927c['baselineTrunkRevision']!==void 0x0||!r['has'](_0x19927c['type'])||_0x19927c['draftHeadRevision']!==0x1||_0x19927c['readyDraftHeadRevision']!==void 0x0||_0x19927c['mergeResult']!==void 0x0||_0x1ea4f7['snapshot']['unitID']!==_0x19927c['unitID']||_0x1ea4f7['snapshot']['type']!==_0x19927c['type']||_0x1ea4f7['snapshot']['rev']!==0x1)throw g('Worktree-created\x20Unit\x20must\x20start\x20from\x20its\x20revision\x201\x20seed');}function u(_0x288d2f){if(_0x288d2f['status']==='merged'){if(!Number['isSafeInteger'](_0x288d2f['trunkRevision'])||_0x288d2f['trunkRevision']<0x1)throw g('Merged\x20result\x20requires\x20a\x20positive\x20trunk\x20revision');return;}if(!(_0x288d2f['status']==='unchanged'||_0x288d2f['status']==='removed')&&(!_0x288d2f['error']['code']||!_0x288d2f['error']['message']||typeof _0x288d2f['error']['retryable']!='boolean'))throw g('Merge\x20error\x20must\x20be\x20stable\x20and\x20serializable');}function d(_0x5441a7,_0x4ded8b){if(_0x4ded8b['unit']['snapshot']['unitID']!==_0x5441a7['unitID']||_0x4ded8b['unit']['snapshot']['type']!==_0x5441a7['type']||_0x4ded8b['unit']['snapshot']['rev']!==0x1)throw g('Worktree\x20Unit\x20merge\x20artifact\x20must\x20be\x20a\x20revision\x201\x20snapshot');}function f(_0x1b4001){if(!Number['isSafeInteger'](_0x1b4001['from'])||_0x1b4001['from']<0x0||_0x1b4001['to']!==void 0x0&&(!Number['isSafeInteger'](_0x1b4001['to'])||_0x1b4001['to']<0x0))throw g('Changeset\x20range\x20revisions\x20must\x20be\x20non-negative');}function p(_0x4896ff){let {readyDraftHeadRevision:_0x5e242e,mergeResult:_0x416bf6,..._0x4bc943}=_0x4896ff;return _0x4bc943;}function m(_0xa5dd2d){return _0xa5dd2d['mergeResult']?h(_0xa5dd2d['mergeResult']):!0x1;}function h(_0x122f23){return _0x122f23['status']==='merged'||_0x122f23['status']==='unchanged'||_0x122f23['status']==='removed';}function g(_0x7260e6){return new t['CollabError']('INVALID_REQUEST',_0x7260e6);}function _(_0x33b278){return structuredClone(_0x33b278);}exports['MemoryWorktreeDatabaseAdapter']=i;
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { ChangesetRange, DatabaseContext } from "@univerjs-pro/collaboration-service";
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<ChangesetRange>;
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
- function _0x185f(_0x4dd207,_0x4a19f3){_0x4dd207=_0x4dd207-0xbc;const _0x15ad49=_0x15ad();let _0x185fb9=_0x15ad49[_0x4dd207];return _0x185fb9;}const _0x524390=_0x185f;(function(_0x3f655c,_0x3302b3){const _0x595f2b=_0x185f,_0x5f1e90=_0x3f655c();while(!![]){try{const _0x3ad9fd=parseInt(_0x595f2b(0xc0))/0x1+-parseInt(_0x595f2b(0xc1))/0x2*(-parseInt(_0x595f2b(0xbe))/0x3)+parseInt(_0x595f2b(0xc6))/0x4*(-parseInt(_0x595f2b(0xc3))/0x5)+-parseInt(_0x595f2b(0xc5))/0x6+parseInt(_0x595f2b(0xbf))/0x7*(-parseInt(_0x595f2b(0xc4))/0x8)+-parseInt(_0x595f2b(0xbd))/0x9+parseInt(_0x595f2b(0xbc))/0xa;if(_0x3ad9fd===_0x3302b3)break;else _0x5f1e90['push'](_0x5f1e90['shift']());}catch(_0x7f7eaf){_0x5f1e90['push'](_0x5f1e90['shift']());}}}(_0x15ad,0x4bb82));import _0x1dbfe7 from'./index.cjs';function _0x15ad(){const _0x2c9c30=['MemoryWorktreeDatabaseAdapter','115znqEay','8PQItRS','232608EokAlR','70900LzEDEt','1085390owZOwb','1566459ndsLdH','6vSNAGI','764652VqBfNp','396815YWyFBN','534522OiaaXf'];_0x15ad=function(){return _0x2c9c30;};return _0x15ad();}const facadeExport0=_0x1dbfe7[_0x524390(0xc2)];export{facadeExport0 as MemoryWorktreeDatabaseAdapter};
1
+ function _0x3080(){const _0x3ea16d=['44dpledO','1603668EuAYhT','476230zfQGZz','4xmayOr','57474eBJYJj','1712536teIHfa','73841QHGuUP','418QOcoAX','1182900YnGUVR','656YYSPRp','70435ESJYBd','MemoryWorktreeDatabaseAdapter'];_0x3080=function(){return _0x3ea16d;};return _0x3080();}function _0x5435(_0x12dd80,_0x1d1873){_0x12dd80=_0x12dd80-0x1e4;const _0x308057=_0x3080();let _0x5435f9=_0x308057[_0x12dd80];return _0x5435f9;}const _0x26a9f6=_0x5435;(function(_0x4bfa66,_0x93644f){const _0xf3807f=_0x5435,_0xc5252b=_0x4bfa66();while(!![]){try{const _0x4ceae4=-parseInt(_0xf3807f(0x1e9))/0x1*(parseInt(_0xf3807f(0x1e6))/0x2)+-parseInt(_0xf3807f(0x1e4))/0x3+-parseInt(_0xf3807f(0x1ef))/0x4*(parseInt(_0xf3807f(0x1ed))/0x5)+parseInt(_0xf3807f(0x1eb))/0x6+-parseInt(_0xf3807f(0x1e8))/0x7+parseInt(_0xf3807f(0x1ec))/0x8*(-parseInt(_0xf3807f(0x1e7))/0x9)+-parseInt(_0xf3807f(0x1e5))/0xa*(-parseInt(_0xf3807f(0x1ea))/0xb);if(_0x4ceae4===_0x93644f)break;else _0xc5252b['push'](_0xc5252b['shift']());}catch(_0x3dd93d){_0xc5252b['push'](_0xc5252b['shift']());}}}(_0x3080,0x61fb1));import _0x21e6ef from'./index.cjs';const facadeExport0=_0x21e6ef[_0x26a9f6(0x1ee)];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-insiders.20260808-70eefdd",
4
+ "version": "1.0.0-rc.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-insiders.20260808-70eefdd",
20
- "@univerjs-pro/collaboration-worktree-service": "1.0.0-insiders.20260808-70eefdd",
21
- "@univerjs/protocol": "1.0.0-insiders.20260808-70eefdd"
22
- },
23
- "publishConfig": {
24
- "access": "public"
19
+ "@univerjs-pro/collaboration-service": "1.0.0-rc.0",
20
+ "@univerjs-pro/collaboration-worktree-service": "1.0.0-rc.0",
21
+ "@univerjs/protocol": "1.0.0-rc.0"
25
22
  }
26
- }
23
+ }