@univerjs-pro/collaboration-worktree-database-sqlite 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 ADDED
@@ -0,0 +1,43 @@
1
+ # @univerjs-pro/collaboration-worktree-database-sqlite
2
+
3
+ English | [简体中文](./README.zh-CN.md)
4
+
5
+ A persistent SQLite `IWorktreeDatabaseAdapter` for `@univerjs-pro/collaboration-worktree-service`. It uses the stable synchronous `libsql` API and supports Node.js 22 and later.
6
+
7
+ ## Installation and usage
8
+
9
+ ```bash
10
+ pnpm add \
11
+ @univerjs-pro/collaboration-worktree-service \
12
+ @univerjs-pro/collaboration-worktree-database-sqlite
13
+ ```
14
+
15
+ ```ts
16
+ const worktreeDatabase = new SQLiteWorktreeDatabaseAdapter({
17
+ filename: './data/collaboration.sqlite',
18
+ busyTimeoutMs: 5_000,
19
+ });
20
+ const worktreeService = new UniverCollabWorktreeService({
21
+ trunk: {
22
+ service: collabService,
23
+ dbAdapter: trunkDatabase,
24
+ },
25
+ dbAdapter: worktreeDatabase,
26
+ });
27
+
28
+ await worktreeService.dispose();
29
+ await worktreeDatabase.dispose();
30
+ ```
31
+
32
+ The caller must create the database parent directory in advance and dispose the Adapter after stopping Worktree Service.
33
+
34
+ ## Storage contract
35
+
36
+ - Tables use the `collaboration_worktree_*` prefix.
37
+ - Schema version `('worktree', 1)` is stored in shared `collaboration_schema_versions`; `PRAGMA user_version` is not used.
38
+ - Draft-changeset scalar columns and the submission unique constraint provide database-level integrity, while commits use revision CAS and do not query the submission key.
39
+ - It can share a database file with trunk, Comment, and History SQLite Adapters.
40
+ - State transitions, draft CAS, and merge results use SQLite transactions for atomicity.
41
+ - An empty Worktree schema is initialized automatically. Incomplete or unsupported schemas are rejected.
42
+
43
+ Worktree Adapter does not own trunk collaboration data and does not manage Worktree names, list discovery, ACLs, or product-resource extension data for the application.
@@ -0,0 +1,47 @@
1
+ # @univerjs-pro/collaboration-worktree-database-sqlite
2
+
3
+ [English](./README.md) | [简体中文](./README.zh-CN.md)
4
+
5
+ 面向 `@univerjs-pro/collaboration-worktree-service` 的持久化 SQLite
6
+ `IWorktreeDatabaseAdapter`。它使用稳定的 `libsql` 同步接口,支持 Node.js 22 及以上。
7
+
8
+ ## 安装与使用
9
+
10
+ ```bash
11
+ pnpm add \
12
+ @univerjs-pro/collaboration-worktree-service \
13
+ @univerjs-pro/collaboration-worktree-database-sqlite
14
+ ```
15
+
16
+ ```ts
17
+ const worktreeDatabase = new SQLiteWorktreeDatabaseAdapter({
18
+ filename: './data/collaboration.sqlite',
19
+ busyTimeoutMs: 5_000,
20
+ });
21
+ const worktreeService = new UniverCollabWorktreeService({
22
+ trunk: {
23
+ service: collabService,
24
+ dbAdapter: trunkDatabase,
25
+ },
26
+ dbAdapter: worktreeDatabase,
27
+ });
28
+
29
+ await worktreeService.dispose();
30
+ await worktreeDatabase.dispose();
31
+ ```
32
+
33
+ 调用方必须预先创建数据库父目录,并在 Worktree Service 停止后释放 Adapter。
34
+
35
+ ## 存储契约
36
+
37
+ - 表使用 `collaboration_worktree_*` 前缀。
38
+ - schema 版本 `('worktree', 1)` 记录在共享的
39
+ `collaboration_schema_versions`,不占用 `PRAGMA user_version`。
40
+ - draft changeset 标量列和 submission unique constraint 提供数据库级完整性;提交只做
41
+ revision CAS,不按 submission key 点查。
42
+ - 可以与 trunk、Comment 和 History SQLite Adapter 共用一个数据库文件。
43
+ - 状态转换、draft CAS 和 merge result 使用 SQLite transaction 保证原子契约。
44
+ - 空 Worktree schema 自动初始化;不完整或不支持的 schema 会被拒绝。
45
+
46
+ Worktree Adapter 不拥有 trunk 协同数据,也不替应用管理 Worktree 名称、列表发现、ACL 或
47
+ 产品资源扩展数据。
package/dist/index.cjs ADDED
@@ -0,0 +1 @@
1
+ Object['defineProperty'](exports,Symbol['toStringTag'],{'value':'Module'});var e=Object['create'],t=Object['defineProperty'],n=Object['getOwnPropertyDescriptor'],r=Object['getOwnPropertyNames'],i=Object['getPrototypeOf'],a=Object['prototype']['hasOwnProperty'],o=(_0x4fe343,_0x50daaf,_0x2e2bff,_0x3bbf52)=>{if(_0x50daaf&&typeof _0x50daaf=='object'||typeof _0x50daaf=='function'){for(var _0x157b47=r(_0x50daaf),_0x5d2eee=0x0,_0x77012=_0x157b47['length'],_0x40fd9d;_0x5d2eee<_0x77012;_0x5d2eee++)_0x40fd9d=_0x157b47[_0x5d2eee],!a['call'](_0x4fe343,_0x40fd9d)&&_0x40fd9d!==_0x2e2bff&&t(_0x4fe343,_0x40fd9d,{'get':(_0x842a9d=>_0x50daaf[_0x842a9d])['bind'](null,_0x40fd9d),'enumerable':!(_0x3bbf52=n(_0x50daaf,_0x40fd9d))||_0x3bbf52['enumerable']});}return _0x4fe343;},s=(_0x2fee7,_0x4d60d8,_0x3ce0c6)=>(_0x3ce0c6=_0x2fee7==null?{}:e(i(_0x2fee7)),o(_0x4d60d8||!_0x2fee7||!_0x2fee7['__esModule']?t(_0x3ce0c6,'default',{'value':_0x2fee7,'enumerable':!0x0}):_0x3ce0c6,_0x2fee7));let c=require('node:util'),l=require('libsql');l=s(l,0x1);let u=require('@univerjs-pro/collaboration-service'),d=require('@univerjs/protocol');var f='worktree',p=0x1,m=['collaboration_worktrees','collaboration_worktree_units','collaboration_worktree_changesets','collaboration_worktree_unit_seeds','collaboration_worktree_unit_merge_artifacts'],h=0x1388,g='__univerCollaborationBinary',_=new Set([d['UniverType']['UNIVER_SHEET'],d['UniverType']['UNIVER_DOC'],d['UniverType']['UNIVER_SLIDE'],d['UniverType']['UNIVER_BOARD'],d['UniverType']['UNIVER_BASE']]),v=class{['_database'];['_disposed']=!0x1;constructor(_0x156730){b(_0x156730),this['_database']=new l['default'](_0x156730['filename'],{'timeout':_0x156730['busyTimeoutMs']??h});try{this['_database']['exec']('PRAGMA\x20foreign_keys\x20=\x20ON;'),this['_database']['exec']('PRAGMA\x20busy_timeout\x20=\x20'+(_0x156730['busyTimeoutMs']??h)+';'),this['_initializeSchema']();}catch(_0x4c3ea4){throw this['_database']['close'](),_0x4c3ea4;}}async['getWorktree'](_0x2e55f7,_0x3d5b56){return this['_assertOpen'](),this['_getAggregate'](_0x3d5b56);}async['getWorktreeUnit'](_0x1ba41d,_0x3b95f8,_0x55cdbb){this['_assertOpen']();let _0x5d38df=this['_getUnitRow'](_0x3b95f8,_0x55cdbb);return _0x5d38df?y(_0x5d38df):null;}async['getDraftChangesets'](_0x28d531,_0xe15774,_0x194a60,_0x1c3e75){this['_assertOpen'](),T(_0x1c3e75);let _0x50b598=this['_getUnitRow'](_0xe15774,_0x194a60);if(!_0x50b598)return{'changesets':[],'latestRevision':0x0};let _0x4b074c=_0x1c3e75['to']===0x0?_0x50b598['draft_head_revision']:Math['min'](_0x1c3e75['to'],_0x50b598['draft_head_revision']);return{'changesets':this['_database']['prepare']('SELECT\x20payload_json\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20collaboration_worktree_changesets\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20worktree_id\x20=\x20?\x20AND\x20unit_id\x20=\x20?\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20AND\x20revision\x20>\x20?\x20AND\x20revision\x20<=\x20?\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20ORDER\x20BY\x20revision\x20ASC')['all'](_0xe15774,_0x194a60,_0x1c3e75['from'],_0x4b074c)['map'](({payload_json:_0x4efdf7})=>F(_0x4efdf7)),'latestRevision':_0x50b598['draft_head_revision']};}async['getUnitSeed'](_0x194126,_0x5bf2ef,_0x47f5b9){return this['_assertOpen'](),this['_getUnitSeed'](_0x5bf2ef,_0x47f5b9);}async['getUnitMergeArtifact'](_0x498a6e,_0x2c6cbd,_0x20a1a3){return this['_assertOpen'](),this['_getUnitMergeArtifact'](_0x2c6cbd,_0x20a1a3);}async['createWorktree'](_0xbddd0,_0x359b3c){return this['_assertOpen'](),x(_0x359b3c),this['_transaction'](()=>{let _0x40125a=this['_getAggregate'](_0x359b3c['record']['worktreeID']);if(_0x40125a)return{'status':'already-exists','aggregate':_0x40125a};this['_database']['prepare']('INSERT\x20INTO\x20collaboration_worktrees\x20(worktree_id,\x20sid,\x20status)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20(?,\x20?,\x20\x27draft\x27)')['run'](_0x359b3c['record']['worktreeID'],_0x359b3c['record']['sid']);let _0x579153=this['_database']['prepare']('INSERT\x20INTO\x20collaboration_worktree_units\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20(worktree_id,\x20unit_id,\x20unit_order,\x20type,\x20source,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20baseline_trunk_revision,\x20draft_head_revision)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20(?,\x20?,\x20?,\x20?,\x20\x27trunk\x27,\x20?,\x20?)');return _0x359b3c['units']['forEach']((_0xe72899,_0x461b3e)=>{_0x579153['run'](_0xe72899['worktreeID'],_0xe72899['unitID'],_0x461b3e,_0xe72899['type'],_0xe72899['baselineTrunkRevision'],_0xe72899['draftHeadRevision']);}),{'status':'created','aggregate':this['_requireAggregate'](_0x359b3c['record']['worktreeID'])};});}async['addUnit'](_0x263469,_0x2a5002){return this['_assertOpen'](),w(_0x2a5002['unit']),this['_transaction'](()=>{let {unit:_0x1cbff5}=_0x2a5002,_0x37628e=this['_getWorktreeRow'](_0x1cbff5['worktreeID']);if(!_0x37628e)return{'status':'not-found'};if(this['_getUnitRow'](_0x1cbff5['worktreeID'],_0x1cbff5['unitID']))return{'status':'already-exists','aggregate':this['_requireAggregate'](_0x1cbff5['worktreeID'])};if(_0x37628e['status']!=='draft')return{'status':'status-mismatch','aggregate':this['_requireAggregate'](_0x1cbff5['worktreeID'])};S(_0x1cbff5);let _0x2a54a1=this['_database']['prepare']('SELECT\x20COALESCE(MAX(unit_order),\x20-1)\x20+\x201\x20AS\x20next_order\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20collaboration_worktree_units\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20worktree_id\x20=\x20?')['get'](_0x1cbff5['worktreeID']);return this['_database']['prepare']('INSERT\x20INTO\x20collaboration_worktree_units\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20(worktree_id,\x20unit_id,\x20unit_order,\x20type,\x20source,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20baseline_trunk_revision,\x20draft_head_revision)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20(?,\x20?,\x20?,\x20?,\x20\x27trunk\x27,\x20?,\x20?)')['run'](_0x1cbff5['worktreeID'],_0x1cbff5['unitID'],_0x2a54a1['next_order'],_0x1cbff5['type'],_0x1cbff5['baselineTrunkRevision'],_0x1cbff5['draftHeadRevision']),{'status':'added','aggregate':this['_requireAggregate'](_0x1cbff5['worktreeID'])};});}async['createUnit'](_0x9596d3,_0x40a87c){return this['_assertOpen'](),C(_0x40a87c['unit'],_0x40a87c['seed']),this['_transaction'](()=>{let {unit:_0xf39263,seed:_0x5d5c43}=_0x40a87c,_0x1fe234=this['_getWorktreeRow'](_0xf39263['worktreeID']);if(!_0x1fe234)return{'status':'not-found'};let _0x48919a=this['_getUnitRow'](_0xf39263['worktreeID'],_0xf39263['unitID']);if(_0x48919a){let _0x3e6db5=this['_getUnitSeed'](_0xf39263['worktreeID'],_0xf39263['unitID']);return{'status':_0x48919a['source']==='worktree'&&_0x48919a['type']===_0xf39263['type']&&_0x3e6db5!==null&&P(_0x3e6db5)===P(_0x5d5c43)?'already-created':'unit-exists','aggregate':this['_requireAggregate'](_0xf39263['worktreeID'])};}if(_0x1fe234['status']!=='draft')return{'status':'status-mismatch','aggregate':this['_requireAggregate'](_0xf39263['worktreeID'])};let _0x39f7c6=this['_database']['prepare']('SELECT\x20COALESCE(MAX(unit_order),\x20-1)\x20+\x201\x20AS\x20next_order\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20collaboration_worktree_units\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20worktree_id\x20=\x20?')['get'](_0xf39263['worktreeID']);return this['_database']['prepare']('INSERT\x20INTO\x20collaboration_worktree_units\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20(worktree_id,\x20unit_id,\x20unit_order,\x20type,\x20source,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20baseline_trunk_revision,\x20draft_head_revision)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20(?,\x20?,\x20?,\x20?,\x20\x27worktree\x27,\x201,\x201)')['run'](_0xf39263['worktreeID'],_0xf39263['unitID'],_0x39f7c6['next_order'],_0xf39263['type']),this['_database']['prepare']('INSERT\x20INTO\x20collaboration_worktree_unit_seeds\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20(worktree_id,\x20unit_id,\x20snapshot_json,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20sheet_blocks_json)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20(?,\x20?,\x20?,\x20?)')['run'](_0xf39263['worktreeID'],_0xf39263['unitID'],P(_0x5d5c43['snapshot']),_0x5d5c43['sheetBlocks']===void 0x0?null:P(_0x5d5c43['sheetBlocks'])),{'status':'created','aggregate':this['_requireAggregate'](_0xf39263['worktreeID'])};});}async['saveUnitMergeArtifact'](_0x4729d7,_0x4006df){return this['_assertOpen'](),this['_transaction'](()=>{let _0xe8c025=this['_getWorktreeRow'](_0x4006df['worktreeID']),_0x2f06c3=this['_getUnitRow'](_0x4006df['worktreeID'],_0x4006df['unitID']);if(!_0xe8c025||!_0x2f06c3)return{'status':'not-found'};let _0x2dfa04=y(_0x2f06c3);if(_0xe8c025['status']!=='merging'||_0x2dfa04['source']!=='worktree'||_0x2dfa04['readyDraftHeadRevision']!==_0x4006df['artifact']['readyDraftHeadRevision']||O(_0x2dfa04))return{'status':'stale-merge'};let _0x5a39bf=this['_getUnitMergeArtifact'](_0x4006df['worktreeID'],_0x4006df['unitID']);return _0x5a39bf?{'status':'already-saved','artifact':_0x5a39bf}:(D(_0x2dfa04,_0x4006df['artifact']),this['_database']['prepare']('INSERT\x20INTO\x20collaboration_worktree_unit_merge_artifacts\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20(worktree_id,\x20unit_id,\x20ready_draft_head_revision,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20snapshot_json,\x20sheet_blocks_json)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20(?,\x20?,\x20?,\x20?,\x20?)')['run'](_0x4006df['worktreeID'],_0x4006df['unitID'],_0x4006df['artifact']['readyDraftHeadRevision'],P(_0x4006df['artifact']['unit']['snapshot']),_0x4006df['artifact']['unit']['sheetBlocks']===void 0x0?null:P(_0x4006df['artifact']['unit']['sheetBlocks'])),{'status':'saved','artifact':F(P(_0x4006df['artifact']))});});}async['commitDraftChangeset'](_0x576947,_0xc3953c){return this['_assertOpen'](),this['_transaction'](()=>{let {worktreeID:_0x2da079,changeset:_0x1ca012}=_0xc3953c,_0x10b7d8=this['_getWorktreeRow'](_0x2da079),_0x4e6e42=this['_getUnitRow'](_0x2da079,_0x1ca012['unitID']);if(!_0x10b7d8||!_0x4e6e42)return{'status':'not-found'};if(_0x10b7d8['status']!=='draft')return{'status':'not-editable','worktreeStatus':A(_0x10b7d8['status'])};let _0x5cbecb=y(_0x4e6e42);if(O(_0x5cbecb))return{'status':'unit-frozen'};if(_0x5cbecb['draftHeadRevision']!==_0x1ca012['revision']-0x1)return{'status':'revision-mismatch','actualHeadRevision':_0x5cbecb['draftHeadRevision']};if(this['_database']['prepare']('INSERT\x20INTO\x20collaboration_worktree_changesets\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20(worktree_id,\x20unit_id,\x20revision,\x20base_revision,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20sid,\x20req_id,\x20payload_json)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20(?,\x20?,\x20?,\x20?,\x20?,\x20?,\x20?)')['run'](_0x2da079,_0x1ca012['unitID'],_0x1ca012['revision'],_0x1ca012['baseRev'],_0x1ca012['sid'],_0x1ca012['reqId'],P(_0x1ca012)),this['_database']['prepare']('UPDATE\x20collaboration_worktree_units\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20SET\x20draft_head_revision\x20=\x20?\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20worktree_id\x20=\x20?\x20AND\x20unit_id\x20=\x20?\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20AND\x20draft_head_revision\x20=\x20?')['run'](_0x1ca012['revision'],_0x2da079,_0x1ca012['unitID'],_0x1ca012['revision']-0x1)['changes']!==0x1)throw new u['CollabError']('INTERNAL_ERROR','SQLite\x20draft\x20head\x20changed\x20inside\x20a\x20write\x20transaction');return{'status':'committed','changeset':F(P(_0x1ca012)),'headRevision':_0x1ca012['revision']};});}async['markReady'](_0x4212c7,_0x132052){return this['_assertOpen'](),this['_transaction'](()=>{let _0x284f69=this['_getWorktreeRow'](_0x132052);if(!_0x284f69)return{'status':'not-found'};if(_0x284f69['status']==='ready')return{'status':'already-in-target','aggregate':this['_requireAggregate'](_0x132052)};if(_0x284f69['status']!=='draft')return{'status':'status-mismatch','aggregate':this['_requireAggregate'](_0x132052)};for(let _0x4c10b7 of this['_getUnitRows'](_0x132052))O(y(_0x4c10b7))||(this['_database']['prepare']('UPDATE\x20collaboration_worktree_units\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20SET\x20ready_draft_head_revision\x20=\x20draft_head_revision\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20worktree_id\x20=\x20?\x20AND\x20unit_id\x20=\x20?')['run'](_0x132052,_0x4c10b7['unit_id']),this['_database']['prepare']('DELETE\x20FROM\x20collaboration_worktree_unit_merge_artifacts\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20worktree_id\x20=\x20?\x20AND\x20unit_id\x20=\x20?')['run'](_0x132052,_0x4c10b7['unit_id']));return this['_updateStatus'](_0x132052,'ready'),{'status':'transitioned','previousStatus':'draft','aggregate':this['_requireAggregate'](_0x132052)};});}async['reopenWorktree'](_0x555c5c,_0x495633){return this['_assertOpen'](),this['_transaction'](()=>{let _0x2a84c8=this['_getWorktreeRow'](_0x495633);if(!_0x2a84c8)return{'status':'not-found'};if(_0x2a84c8['status']==='draft')return{'status':'already-in-target','aggregate':this['_requireAggregate'](_0x495633)};if(_0x2a84c8['status']!=='ready')return{'status':'status-mismatch','aggregate':this['_requireAggregate'](_0x495633)};for(let _0x29d075 of this['_getUnitRows'](_0x495633))O(y(_0x29d075))||(this['_database']['prepare']('UPDATE\x20collaboration_worktree_units\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20SET\x20ready_draft_head_revision\x20=\x20NULL,\x20merge_result_json\x20=\x20NULL\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20worktree_id\x20=\x20?\x20AND\x20unit_id\x20=\x20?')['run'](_0x495633,_0x29d075['unit_id']),this['_database']['prepare']('DELETE\x20FROM\x20collaboration_worktree_unit_merge_artifacts\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20worktree_id\x20=\x20?\x20AND\x20unit_id\x20=\x20?')['run'](_0x495633,_0x29d075['unit_id']));return this['_updateStatus'](_0x495633,'draft'),{'status':'transitioned','previousStatus':'ready','aggregate':this['_requireAggregate'](_0x495633)};});}async['discardWorktree'](_0x18ec56,_0x59c46a){return this['_assertOpen'](),this['_transaction'](()=>{let _0x451ef5=this['_getWorktreeRow'](_0x59c46a);if(!_0x451ef5)return{'status':'not-found'};if(_0x451ef5['status']==='discarded')return{'status':'already-in-target','aggregate':this['_requireAggregate'](_0x59c46a)};if(_0x451ef5['status']!=='draft'&&_0x451ef5['status']!=='ready')return{'status':'status-mismatch','aggregate':this['_requireAggregate'](_0x59c46a)};let _0x55771d=A(_0x451ef5['status']);return this['_updateStatus'](_0x59c46a,'discarded'),{'status':'transitioned','previousStatus':_0x55771d,'aggregate':this['_requireAggregate'](_0x59c46a)};});}async['startOrResumeMerge'](_0x4958ce,_0xf6c1d1){return this['_assertOpen'](),this['_transaction'](()=>{let _0x1a6cd6=this['_getWorktreeRow'](_0xf6c1d1);return _0x1a6cd6?_0x1a6cd6['status']==='merged'?{'status':'already-merged','aggregate':this['_requireAggregate'](_0xf6c1d1)}:_0x1a6cd6['status']==='merging'?{'status':'resumed','aggregate':this['_requireAggregate'](_0xf6c1d1)}:_0x1a6cd6['status']==='ready'?(this['_updateStatus'](_0xf6c1d1,'merging'),{'status':'started','aggregate':this['_requireAggregate'](_0xf6c1d1)}):{'status':'status-mismatch','aggregate':this['_requireAggregate'](_0xf6c1d1)}:{'status':'not-found'};});}async['recordUnitMergeResult'](_0x432bdc,_0x2a9faa){return this['_assertOpen'](),E(_0x2a9faa['mergeResult']),this['_transaction'](()=>{let _0x33b935=this['_getWorktreeRow'](_0x2a9faa['worktreeID']),_0x517c68=this['_getUnitRow'](_0x2a9faa['worktreeID'],_0x2a9faa['unitID']);if(!_0x33b935||!_0x517c68)return{'status':'not-found'};let _0x4990bb=y(_0x517c68);if(_0x33b935['status']!=='merging'||_0x4990bb['readyDraftHeadRevision']!==_0x2a9faa['readyDraftHeadRevision'])return{'status':'stale-merge'};let _0xb95e8d=_0x4990bb['mergeResult'];return _0xb95e8d&&(0x0,c['isDeepStrictEqual'])(_0xb95e8d,_0x2a9faa['mergeResult'])?{'status':'already-recorded','aggregate':this['_requireAggregate'](_0x2a9faa['worktreeID'])}:_0xb95e8d&&k(_0xb95e8d)?{'status':'stale-merge'}:(this['_database']['prepare']('UPDATE\x20collaboration_worktree_units\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20SET\x20merge_result_json\x20=\x20?\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20worktree_id\x20=\x20?\x20AND\x20unit_id\x20=\x20?')['run'](P(_0x2a9faa['mergeResult']),_0x2a9faa['worktreeID'],_0x2a9faa['unitID']),{'status':'recorded','aggregate':this['_requireAggregate'](_0x2a9faa['worktreeID'])});});}async['finishMerge'](_0x12d617,_0x2babbe){return this['_assertOpen'](),this['_transaction'](()=>{let _0x1ad52b=this['_getWorktreeRow'](_0x2babbe);if(!_0x1ad52b)return{'status':'not-found'};if(_0x1ad52b['status']==='merged')return{'status':'already-in-target','aggregate':this['_requireAggregate'](_0x2babbe)};if(_0x1ad52b['status']!=='merging')return{'status':'status-mismatch','aggregate':this['_requireAggregate'](_0x2babbe)};let _0x2117c7=this['_getUnitRows'](_0x2babbe)['every'](_0x214da2=>O(y(_0x214da2)));return this['_updateStatus'](_0x2babbe,_0x2117c7?'merged':'ready'),{'status':'transitioned','previousStatus':'merging','aggregate':this['_requireAggregate'](_0x2babbe)};});}async['dispose'](){this['_disposed']||(this['_disposed']=!0x0,this['_database']['close']());}['_initializeSchema'](){this['_transaction'](()=>{if(!this['_hasTable']('collaboration_schema_versions')){if(this['_hasAnyOwnedTable']())throw N('SQLite\x20Worktree\x20tables\x20exist\x20without\x20a\x20schema\x20version');this['_database']['exec']('\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20CREATE\x20TABLE\x20collaboration_schema_versions\x20(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20component\x20TEXT\x20PRIMARY\x20KEY,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20version\x20INTEGER\x20NOT\x20NULL\x20CHECK\x20(version\x20>=\x201)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20);\x0a\x20\x20\x20\x20\x20\x20\x20\x20');}let _0x1b1729=this['_database']['prepare']('SELECT\x20version\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20collaboration_schema_versions\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20component\x20=\x20?')['get'](f);if(_0x1b1729){if(_0x1b1729['version']!==p)throw N('SQLite\x20Worktree\x20schema\x20version\x20'+_0x1b1729['version']+'\x20is\x20not\x20supported');let _0x2122cb=m['filter'](_0x16bce1=>!this['_hasTable'](_0x16bce1));if(_0x2122cb['length']>0x0)throw N('SQLite\x20Worktree\x20schema\x20v'+p+'\x20is\x20incomplete:\x20missing\x20'+_0x2122cb['join'](',\x20'));return;}if(this['_hasAnyOwnedTable']())throw N('SQLite\x20Worktree\x20tables\x20exist\x20without\x20a\x20schema\x20version');this['_database']['exec']('\x0a\x20\x20\x20\x20\x20\x20\x20\x20CREATE\x20TABLE\x20collaboration_worktrees\x20(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20worktree_id\x20TEXT\x20PRIMARY\x20KEY,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20sid\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20status\x20TEXT\x20NOT\x20NULL\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20CHECK\x20(status\x20IN\x20(\x27draft\x27,\x20\x27ready\x27,\x20\x27merging\x27,\x20\x27merged\x27,\x20\x27discarded\x27))\x0a\x20\x20\x20\x20\x20\x20\x20\x20);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20CREATE\x20TABLE\x20collaboration_worktree_units\x20(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20worktree_id\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20unit_id\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20unit_order\x20INTEGER\x20NOT\x20NULL\x20CHECK\x20(unit_order\x20>=\x200),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20type\x20INTEGER\x20NOT\x20NULL,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20source\x20TEXT\x20NOT\x20NULL\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20CHECK\x20(source\x20IN\x20(\x27trunk\x27,\x20\x27worktree\x27)),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20baseline_trunk_revision\x20INTEGER\x20NOT\x20NULL\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20CHECK\x20(baseline_trunk_revision\x20>=\x201),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20draft_head_revision\x20INTEGER\x20NOT\x20NULL\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20CHECK\x20(draft_head_revision\x20>=\x20baseline_trunk_revision),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ready_draft_head_revision\x20INTEGER,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20merge_result_json\x20TEXT,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20PRIMARY\x20KEY\x20(worktree_id,\x20unit_id),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20UNIQUE\x20(worktree_id,\x20unit_order),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20FOREIGN\x20KEY\x20(worktree_id)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20REFERENCES\x20collaboration_worktrees(worktree_id)\x20ON\x20DELETE\x20CASCADE\x0a\x20\x20\x20\x20\x20\x20\x20\x20);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20CREATE\x20TABLE\x20collaboration_worktree_changesets\x20(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20worktree_id\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20unit_id\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20revision\x20INTEGER\x20NOT\x20NULL\x20CHECK\x20(revision\x20>=\x202),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20base_revision\x20INTEGER\x20NOT\x20NULL\x20CHECK\x20(base_revision\x20>=\x201),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20sid\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20req_id\x20INTEGER\x20NOT\x20NULL\x20CHECK\x20(req_id\x20>=\x201),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20payload_json\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20PRIMARY\x20KEY\x20(worktree_id,\x20unit_id,\x20revision),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20UNIQUE\x20(worktree_id,\x20unit_id,\x20sid,\x20req_id),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20FOREIGN\x20KEY\x20(worktree_id,\x20unit_id)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20REFERENCES\x20collaboration_worktree_units(worktree_id,\x20unit_id)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ON\x20DELETE\x20CASCADE\x0a\x20\x20\x20\x20\x20\x20\x20\x20);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20CREATE\x20INDEX\x20collaboration_worktree_changesets_revision\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ON\x20collaboration_worktree_changesets(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20worktree_id,\x20unit_id,\x20revision\x20ASC\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20CREATE\x20TABLE\x20collaboration_worktree_unit_seeds\x20(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20worktree_id\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20unit_id\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20snapshot_json\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20sheet_blocks_json\x20TEXT,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20resources_json\x20TEXT,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20PRIMARY\x20KEY\x20(worktree_id,\x20unit_id),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20FOREIGN\x20KEY\x20(worktree_id,\x20unit_id)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20REFERENCES\x20collaboration_worktree_units(worktree_id,\x20unit_id)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ON\x20DELETE\x20CASCADE\x0a\x20\x20\x20\x20\x20\x20\x20\x20);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20CREATE\x20TABLE\x20collaboration_worktree_unit_merge_artifacts\x20(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20worktree_id\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20unit_id\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ready_draft_head_revision\x20INTEGER\x20NOT\x20NULL\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20CHECK\x20(ready_draft_head_revision\x20>=\x201),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20snapshot_json\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20sheet_blocks_json\x20TEXT,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20resources_json\x20TEXT,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20PRIMARY\x20KEY\x20(worktree_id,\x20unit_id),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20FOREIGN\x20KEY\x20(worktree_id,\x20unit_id)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20REFERENCES\x20collaboration_worktree_units(worktree_id,\x20unit_id)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ON\x20DELETE\x20CASCADE\x0a\x20\x20\x20\x20\x20\x20\x20\x20);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20INSERT\x20INTO\x20collaboration_schema_versions\x20(component,\x20version)\x0a\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20(\x27worktree\x27,\x201);\x0a\x20\x20\x20\x20\x20\x20');});}['_hasTable'](_0x117f5a){return!!this['_database']['prepare']('SELECT\x201\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20sqlite_schema\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20type\x20=\x20\x27table\x27\x20AND\x20name\x20=\x20?')['get'](_0x117f5a);}['_hasAnyOwnedTable'](){return m['some'](_0x490c75=>this['_hasTable'](_0x490c75));}['_getWorktreeRow'](_0x542896){return this['_database']['prepare']('SELECT\x20worktree_id,\x20sid,\x20status\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20collaboration_worktrees\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20worktree_id\x20=\x20?')['get'](_0x542896)??null;}['_getUnitRow'](_0x5bffd6,_0x4fba83){return this['_database']['prepare']('SELECT\x20worktree_id,\x20unit_id,\x20type,\x20source,\x20baseline_trunk_revision,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20draft_head_revision,\x20ready_draft_head_revision,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20merge_result_json\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20collaboration_worktree_units\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20worktree_id\x20=\x20?\x20AND\x20unit_id\x20=\x20?')['get'](_0x5bffd6,_0x4fba83)??null;}['_getUnitRows'](_0x4d3b2f){return this['_database']['prepare']('SELECT\x20worktree_id,\x20unit_id,\x20type,\x20source,\x20baseline_trunk_revision,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20draft_head_revision,\x20ready_draft_head_revision,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20merge_result_json\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20collaboration_worktree_units\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20worktree_id\x20=\x20?\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20ORDER\x20BY\x20unit_order\x20ASC')['all'](_0x4d3b2f);}['_getUnitSeed'](_0x56f187,_0x70ce75){let _0x2c57b4=this['_database']['prepare']('SELECT\x20snapshot_json,\x20sheet_blocks_json\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20collaboration_worktree_unit_seeds\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20worktree_id\x20=\x20?\x20AND\x20unit_id\x20=\x20?')['get'](_0x56f187,_0x70ce75);return _0x2c57b4?{'snapshot':F(_0x2c57b4['snapshot_json']),..._0x2c57b4['sheet_blocks_json']===null?{}:{'sheetBlocks':F(_0x2c57b4['sheet_blocks_json'])}}:null;}['_getUnitMergeArtifact'](_0x159246,_0x2653ab){let _0x58dacd=this['_database']['prepare']('SELECT\x20ready_draft_head_revision,\x20snapshot_json,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20sheet_blocks_json\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20collaboration_worktree_unit_merge_artifacts\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20worktree_id\x20=\x20?\x20AND\x20unit_id\x20=\x20?')['get'](_0x159246,_0x2653ab);return _0x58dacd?{'readyDraftHeadRevision':_0x58dacd['ready_draft_head_revision'],'unit':{'snapshot':F(_0x58dacd['snapshot_json']),..._0x58dacd['sheet_blocks_json']===null?{}:{'sheetBlocks':F(_0x58dacd['sheet_blocks_json'])}}}:null;}['_getAggregate'](_0x52d75a){let _0x1f5fea=this['_getWorktreeRow'](_0x52d75a);return _0x1f5fea?{'worktree':{'worktreeID':_0x1f5fea['worktree_id'],'sid':_0x1f5fea['sid'],'status':A(_0x1f5fea['status'])},'units':this['_getUnitRows'](_0x52d75a)['map'](y)}:null;}['_requireAggregate'](_0x5884de){let _0x47e1d6=this['_getAggregate'](_0x5884de);if(!_0x47e1d6)throw new u['CollabError']('INTERNAL_ERROR','SQLite\x20Worktree\x20disappeared\x20inside\x20a\x20write\x20transaction');return _0x47e1d6;}['_updateStatus'](_0x55f0e3,_0x3f228c){if(this['_database']['prepare']('UPDATE\x20collaboration_worktrees\x20SET\x20status\x20=\x20?\x20WHERE\x20worktree_id\x20=\x20?')['run'](_0x3f228c,_0x55f0e3)['changes']!==0x1)throw new u['CollabError']('INTERNAL_ERROR','SQLite\x20Worktree\x20status\x20update\x20did\x20not\x20affect\x20one\x20record');}['_transaction'](_0xfa03f4){this['_database']['exec']('BEGIN\x20IMMEDIATE;');try{let _0x3efe01=_0xfa03f4();return this['_database']['exec']('COMMIT;'),_0x3efe01;}catch(_0x36d77d){throw this['_database']['inTransaction']&&this['_database']['exec']('ROLLBACK;'),_0x36d77d;}}['_assertOpen'](){if(this['_disposed'])throw new u['CollabError']('INTERNAL_ERROR','SQLite\x20Worktree\x20Database\x20Adapter\x20is\x20disposed');}};function y(_0xb7e3b){let _0x224128=j(_0xb7e3b['source']);return{'worktreeID':_0xb7e3b['worktree_id'],'unitID':_0xb7e3b['unit_id'],'type':_0xb7e3b['type'],'source':_0x224128,..._0x224128==='trunk'?{'baselineTrunkRevision':_0xb7e3b['baseline_trunk_revision']}:{},'draftHeadRevision':_0xb7e3b['draft_head_revision'],..._0xb7e3b['ready_draft_head_revision']===null?{}:{'readyDraftHeadRevision':_0xb7e3b['ready_draft_head_revision']},..._0xb7e3b['merge_result_json']===null?{}:{'mergeResult':F(_0xb7e3b['merge_result_json'])}};}function b(_0x14748b){if(!_0x14748b['filename'])throw M('SQLite\x20filename\x20is\x20required');if(_0x14748b['busyTimeoutMs']!==void 0x0&&(!Number['isSafeInteger'](_0x14748b['busyTimeoutMs'])||_0x14748b['busyTimeoutMs']<0x0))throw M('SQLite\x20busyTimeoutMs\x20must\x20be\x20a\x20non-negative\x20integer');}function x(_0x5774f6){if(!_0x5774f6['record']['worktreeID']||!_0x5774f6['record']['sid']||_0x5774f6['record']['status']!=='draft')throw M('New\x20Worktree\x20must\x20be\x20a\x20draft\x20with\x20identity');let _0x537698=new Set();for(let _0x349b95 of _0x5774f6['units']){if(_0x349b95['worktreeID']!==_0x5774f6['record']['worktreeID']||_0x537698['has'](_0x349b95['unitID']))throw M('Initial\x20Worktree\x20Units\x20must\x20be\x20unique\x20and\x20share\x20identity');_0x537698['add'](_0x349b95['unitID']),S(_0x349b95);}}function S(_0x55d09e){if(w(_0x55d09e),_0x55d09e['source']!=='trunk'||!_['has'](_0x55d09e['type'])||!Number['isSafeInteger'](_0x55d09e['baselineTrunkRevision'])||_0x55d09e['baselineTrunkRevision']<0x1||_0x55d09e['draftHeadRevision']!==_0x55d09e['baselineTrunkRevision']||_0x55d09e['readyDraftHeadRevision']!==void 0x0||_0x55d09e['mergeResult']!==void 0x0)throw M('New\x20Worktree\x20Unit\x20must\x20start\x20at\x20its\x20trunk\x20baseline');}function C(_0x394697,_0x5760ae){if(w(_0x394697),_0x394697['source']!=='worktree'||_0x394697['baselineTrunkRevision']!==void 0x0||!_['has'](_0x394697['type'])||_0x394697['draftHeadRevision']!==0x1||_0x394697['readyDraftHeadRevision']!==void 0x0||_0x394697['mergeResult']!==void 0x0||_0x5760ae['snapshot']['unitID']!==_0x394697['unitID']||_0x5760ae['snapshot']['type']!==_0x394697['type']||_0x5760ae['snapshot']['rev']!==0x1)throw M('Worktree-created\x20Unit\x20must\x20start\x20from\x20its\x20revision\x201\x20seed');}function w(_0x3c98c8){if(!_0x3c98c8['worktreeID']||!_0x3c98c8['unitID'])throw M('Worktree\x20and\x20Unit\x20identity\x20are\x20required');}function T(_0x32e252){if(!Number['isSafeInteger'](_0x32e252['from'])||!Number['isSafeInteger'](_0x32e252['to'])||_0x32e252['from']<0x0||_0x32e252['to']<0x0)throw M('Draft\x20revision\x20range\x20cannot\x20be\x20negative');}function E(_0x139883){if(_0x139883['status']==='merged'){if(!Number['isSafeInteger'](_0x139883['trunkRevision'])||_0x139883['trunkRevision']<0x1)throw M('Merged\x20result\x20requires\x20a\x20trunk\x20revision');return;}if(_0x139883['status']!=='unchanged'&&(!_0x139883['error']['code']||!_0x139883['error']['message']||typeof _0x139883['error']['retryable']!='boolean'))throw M('Merge\x20error\x20must\x20be\x20stable\x20and\x20serializable');}function D(_0x355125,_0x13d079){if(_0x13d079['unit']['snapshot']['unitID']!==_0x355125['unitID']||_0x13d079['unit']['snapshot']['type']!==_0x355125['type']||_0x13d079['unit']['snapshot']['rev']!==0x1)throw M('Worktree\x20Unit\x20merge\x20artifact\x20must\x20be\x20a\x20revision\x201\x20snapshot');}function O(_0x43362c){return k(_0x43362c['mergeResult']);}function k(_0x49d75d){return _0x49d75d?.['status']==='merged'||_0x49d75d?.['status']==='unchanged';}function A(_0x2348e6){if(_0x2348e6==='draft'||_0x2348e6==='ready'||_0x2348e6==='merging'||_0x2348e6==='merged'||_0x2348e6==='discarded')return _0x2348e6;throw new u['CollabError']('INTERNAL_ERROR','SQLite\x20contains\x20invalid\x20Worktree\x20status\x20'+_0x2348e6);}function j(_0x24b28d){if(_0x24b28d==='trunk'||_0x24b28d==='worktree')return _0x24b28d;throw new u['CollabError']('INTERNAL_ERROR','SQLite\x20contains\x20invalid\x20Worktree\x20Unit\x20source\x20'+_0x24b28d);}function M(_0x42b851){return new u['CollabError']('INVALID_REQUEST',_0x42b851);}function N(_0x5ec6e9){return new u['CollabError']('INTERNAL_ERROR',_0x5ec6e9);}function P(_0x1ec9e5){return JSON['stringify'](_0x1ec9e5,(_0x542c31,_0x3b0c02)=>_0x3b0c02 instanceof Uint8Array?{[g]:Buffer['from'](_0x3b0c02)['toString']('base64')}:_0x3b0c02);}function F(_0x1491ac){return JSON['parse'](_0x1491ac,(_0x3aa3eb,_0x4dec5a)=>I(_0x4dec5a)?Uint8Array['from'](Buffer['from'](_0x4dec5a[g],'base64')):_0x4dec5a);}function I(_0x1e118b){return typeof _0x1e118b=='object'&&!!_0x1e118b&&Object['keys'](_0x1e118b)['length']===0x1&&typeof _0x1e118b[g]=='string';}exports['SQLiteWorktreeDatabaseAdapter']=v;
@@ -0,0 +1,45 @@
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";
3
+
4
+ //#region src/sqlite-worktree-database-adapter.d.ts
5
+ interface SQLiteWorktreeDatabaseAdapterOptions {
6
+ readonly filename: string;
7
+ readonly busyTimeoutMs?: number;
8
+ }
9
+ declare class SQLiteWorktreeDatabaseAdapter implements IWorktreeDatabaseAdapter {
10
+ private readonly _database;
11
+ private _disposed;
12
+ constructor(options: SQLiteWorktreeDatabaseAdapterOptions);
13
+ getWorktree(_context: DatabaseContext, worktreeID: string): Promise<WorktreeAggregateRecord | null>;
14
+ getWorktreeUnit(_context: DatabaseContext, worktreeID: string, unitID: string): Promise<WorktreeUnitRecord | null>;
15
+ getDraftChangesets(_context: DatabaseContext, worktreeID: string, unitID: string, range: WorktreeRevisionRange): Promise<ChangesetRange>;
16
+ getUnitSeed(_context: DatabaseContext, worktreeID: string, unitID: string): Promise<WorktreeUnitSeed | null>;
17
+ getUnitMergeArtifact(_context: DatabaseContext, worktreeID: string, unitID: string): Promise<WorktreeUnitMergeArtifact | null>;
18
+ createWorktree(_context: DatabaseContext, input: CreateWorktreeDatabaseInput): Promise<CreateWorktreeDatabaseResult>;
19
+ addUnit(_context: DatabaseContext, input: AddWorktreeUnitDatabaseInput): Promise<AddWorktreeUnitDatabaseResult>;
20
+ createUnit(_context: DatabaseContext, input: CreateWorktreeUnitDatabaseInput): Promise<CreateWorktreeUnitDatabaseResult>;
21
+ saveUnitMergeArtifact(_context: DatabaseContext, input: SaveWorktreeUnitMergeArtifactInput): Promise<SaveWorktreeUnitMergeArtifactResult>;
22
+ commitDraftChangeset(_context: DatabaseContext, input: CommitWorktreeChangesetInput): Promise<CommitWorktreeChangesetResult>;
23
+ markReady(_context: DatabaseContext, worktreeID: string): Promise<WorktreeTransitionResult>;
24
+ reopenWorktree(_context: DatabaseContext, worktreeID: string): Promise<WorktreeTransitionResult>;
25
+ discardWorktree(_context: DatabaseContext, worktreeID: string): Promise<WorktreeTransitionResult>;
26
+ startOrResumeMerge(_context: DatabaseContext, worktreeID: string): Promise<StartMergeResult>;
27
+ recordUnitMergeResult(_context: DatabaseContext, input: RecordUnitMergeResultInput): Promise<RecordUnitMergeResultResult>;
28
+ finishMerge(_context: DatabaseContext, worktreeID: string): Promise<WorktreeTransitionResult>;
29
+ dispose(): Promise<void>;
30
+ private _initializeSchema;
31
+ private _hasTable;
32
+ private _hasAnyOwnedTable;
33
+ private _getWorktreeRow;
34
+ private _getUnitRow;
35
+ private _getUnitRows;
36
+ private _getUnitSeed;
37
+ private _getUnitMergeArtifact;
38
+ private _getAggregate;
39
+ private _requireAggregate;
40
+ private _updateStatus;
41
+ private _transaction;
42
+ private _assertOpen;
43
+ }
44
+ //#endregion
45
+ export { SQLiteWorktreeDatabaseAdapter, type SQLiteWorktreeDatabaseAdapterOptions };
package/dist/index.mjs ADDED
@@ -0,0 +1 @@
1
+ function _0x4351(_0x5cfaef,_0x4ec113){_0x5cfaef=_0x5cfaef-0x157;const _0x1d6a7d=_0x1d6a();let _0x435134=_0x1d6a7d[_0x5cfaef];return _0x435134;}const _0x42e44d=_0x4351;(function(_0x508ee1,_0x320a48){const _0xd1889=_0x4351,_0x278dcc=_0x508ee1();while(!![]){try{const _0x27ed7f=parseInt(_0xd1889(0x15e))/0x1+-parseInt(_0xd1889(0x15a))/0x2+-parseInt(_0xd1889(0x15b))/0x3+parseInt(_0xd1889(0x158))/0x4+-parseInt(_0xd1889(0x15c))/0x5+-parseInt(_0xd1889(0x157))/0x6+parseInt(_0xd1889(0x15d))/0x7;if(_0x27ed7f===_0x320a48)break;else _0x278dcc['push'](_0x278dcc['shift']());}catch(_0x6c4b68){_0x278dcc['push'](_0x278dcc['shift']());}}}(_0x1d6a,0x8454e));import _0x28120f from'./index.cjs';const facadeExport0=_0x28120f[_0x42e44d(0x159)];function _0x1d6a(){const _0x105be1=['SQLiteWorktreeDatabaseAdapter','170696zjNXrl','1665699OghBSH','2512890uPsMSi','3518802MfvEQX','731302MIHhUF','1443534NkGnqX','2767160aFJdIq'];_0x1d6a=function(){return _0x105be1;};return _0x1d6a();}export{facadeExport0 as SQLiteWorktreeDatabaseAdapter};
package/package.json ADDED
@@ -0,0 +1,27 @@
1
+ {
2
+ "name": "@univerjs-pro/collaboration-worktree-database-sqlite",
3
+ "type": "module",
4
+ "engines": {
5
+ "node": ">=22"
6
+ },
7
+ "version": "1.0.0-beta.2",
8
+ "main": "./dist/index.cjs",
9
+ "module": "./dist/index.mjs",
10
+ "types": "./dist/index.d.ts",
11
+ "exports": {
12
+ ".": {
13
+ "types": "./dist/index.d.ts",
14
+ "import": "./dist/index.mjs",
15
+ "require": "./dist/index.cjs"
16
+ }
17
+ },
18
+ "files": [
19
+ "dist"
20
+ ],
21
+ "dependencies": {
22
+ "@univerjs-pro/collaboration-service": "1.0.0-beta.2",
23
+ "@univerjs-pro/collaboration-worktree-service": "1.0.0-beta.2",
24
+ "@univerjs/protocol": "1.0.0-beta.2",
25
+ "libsql": "^0.5.29"
26
+ }
27
+ }