@univerjs-pro/collaboration-database-sqlite 1.0.0-rc.0 → 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 +29 -2
- package/README.zh-CN.md +26 -3
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +9 -1
- package/dist/index.mjs +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -49,8 +49,35 @@ It stores only core collaboration data. Product resources, users, ACLs, History,
|
|
|
49
49
|
|
|
50
50
|
- It does not change `journal_mode`; configure WAL, checkpointing, or backup policy before opening the Adapter when needed.
|
|
51
51
|
- Core tables use the `collaboration_` prefix.
|
|
52
|
-
- Schema version `('core',
|
|
52
|
+
- Schema version `('core', 2)` is stored in `collaboration_schema_versions`; `PRAGMA user_version` is not used.
|
|
53
53
|
- Changeset scalar columns and the submission unique constraint provide database-level integrity, while commits use revision CAS and do not query the submission key.
|
|
54
54
|
- An empty database is initialized automatically. Incomplete or unsupported core schemas are rejected.
|
|
55
55
|
|
|
56
|
-
This implementation suits local applications and small-to-medium single-Node deployments.
|
|
56
|
+
This implementation suits local applications and small-to-medium single-Node deployments.
|
|
57
|
+
|
|
58
|
+
## Explicit v1 → v2 migration
|
|
59
|
+
|
|
60
|
+
V2 adds required `creator_id` (creator) and `created_at_ms` (creation time, Unix milliseconds)
|
|
61
|
+
to `collaboration_units`, and required `created_at_ms` (commit time, Unix milliseconds)
|
|
62
|
+
to `collaboration_changesets`.
|
|
63
|
+
|
|
64
|
+
Stop writers and back up the file,
|
|
65
|
+
then migrate before constructing the Adapter. Opening an old database does not migrate it automatically.
|
|
66
|
+
|
|
67
|
+
```ts
|
|
68
|
+
import { migrateSQLiteCoreV1ToV2 } from '@univerjs-pro/collaboration-database-sqlite';
|
|
69
|
+
|
|
70
|
+
await migrateSQLiteCoreV1ToV2({ filename: './data/collaboration.sqlite' });
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Missing data is filled using these rules:
|
|
74
|
+
|
|
75
|
+
- Unit creator and creation time: revision 1's `user_id` and `committed_at` in `collaboration_history_revisions` in the same database.
|
|
76
|
+
- Changeset time: payload `createTime` (seconds), then the matching History revision's `committed_at` (milliseconds).
|
|
77
|
+
- Missing or invalid information: `anonymous` for the creator and the migration start time for timestamps.
|
|
78
|
+
These fallback values do not represent historical facts.
|
|
79
|
+
|
|
80
|
+
Optional `resolveUnitCreation(unitID)` and `resolveChangesetCreatedAt(unitID, revision)` callbacks
|
|
81
|
+
replace the defaults. They may be async and return `{ creatorID, createdAt }` and a timestamp,
|
|
82
|
+
respectively, using Unix milliseconds. They cover soft-deleted Units too and must not write to
|
|
83
|
+
the same database. Invalid callback results or exceptions roll back the migration.
|
package/README.zh-CN.md
CHANGED
|
@@ -51,11 +51,34 @@ Adapter 使用 foreign keys 和 `BEGIN IMMEDIATE` 写事务,保证:
|
|
|
51
51
|
|
|
52
52
|
- 不主动修改 `journal_mode`;需要 WAL、checkpoint 或备份策略时由应用在打开前配置。
|
|
53
53
|
- 核心表使用 `collaboration_` 前缀。
|
|
54
|
-
- schema 版本以 `('core',
|
|
54
|
+
- schema 版本以 `('core', 2)` 写入 `collaboration_schema_versions`,不占用
|
|
55
55
|
`PRAGMA user_version`。
|
|
56
56
|
- changeset 标量列和 submission unique constraint 提供数据库级完整性;提交只做 revision
|
|
57
57
|
CAS,不按 submission key 点查。
|
|
58
58
|
- 空库会自动初始化;不完整或不支持的核心 schema 会被拒绝。
|
|
59
59
|
|
|
60
|
-
本实现适合本地应用和中小规模单 Node
|
|
61
|
-
|
|
60
|
+
本实现适合本地应用和中小规模单 Node 部署。
|
|
61
|
+
|
|
62
|
+
## 显式 v1 → v2 迁移
|
|
63
|
+
|
|
64
|
+
v2 为 `collaboration_units` 新增必填的 `creator_id`(创建者)和
|
|
65
|
+
`created_at_ms`(创建时间,Unix 毫秒),为 `collaboration_changesets` 新增必填的
|
|
66
|
+
`created_at_ms`(提交时间,Unix 毫秒)。
|
|
67
|
+
|
|
68
|
+
停止写入并备份后,在构造 Adapter 前执行;打开旧库不会自动迁移。
|
|
69
|
+
|
|
70
|
+
```ts
|
|
71
|
+
import { migrateSQLiteCoreV1ToV2 } from '@univerjs-pro/collaboration-database-sqlite';
|
|
72
|
+
|
|
73
|
+
await migrateSQLiteCoreV1ToV2({ filename: './data/collaboration.sqlite' });
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
默认按以下规则补齐数据:
|
|
77
|
+
|
|
78
|
+
- Unit 创建者和时间:同一数据库中 `collaboration_history_revisions` 的 revision 1 记录中的 `user_id`、`committed_at`。
|
|
79
|
+
- Changeset 时间:优先使用 payload 的 `createTime`(秒),其次使用对应 History revision 的 `committed_at`(毫秒)。
|
|
80
|
+
- 信息缺失或非法:创建者使用 `anonymous`,时间使用本次迁移开始时间。这些兜底值不代表真实历史。
|
|
81
|
+
|
|
82
|
+
可选回调 `resolveUnitCreation(unitID)` 和 `resolveChangesetCreatedAt(unitID, revision)`
|
|
83
|
+
可覆盖默认策略,分别返回 `{ creatorID, createdAt }` 和时间值,时间均为 Unix 毫秒,支持异步。
|
|
84
|
+
回调也包含软删除 Unit,不得写入同一数据库;返回非法值或抛出异常会使迁移整体回滚。
|
package/dist/index.cjs
CHANGED
|
@@ -1 +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=(_0x2e1381,_0x4bc021,_0xb2fe04,_0x2ad381)=>{if(_0x4bc021&&typeof _0x4bc021=='object'||typeof _0x4bc021=='function'){for(var _0xc8d1eb=r(_0x4bc021),_0x5ac30b=0x0,_0x3a6c99=_0xc8d1eb['length'],_0x4f9e6e;_0x5ac30b<_0x3a6c99;_0x5ac30b++)_0x4f9e6e=_0xc8d1eb[_0x5ac30b],!a['call'](_0x2e1381,_0x4f9e6e)&&_0x4f9e6e!==_0xb2fe04&&t(_0x2e1381,_0x4f9e6e,{'get':(_0x1862b1=>_0x4bc021[_0x1862b1])['bind'](null,_0x4f9e6e),'enumerable':!(_0x2ad381=n(_0x4bc021,_0x4f9e6e))||_0x2ad381['enumerable']});}return _0x2e1381;},s=(_0x1b896b,_0x468ec1,_0x356711)=>(_0x356711=_0x1b896b==null?{}:e(i(_0x1b896b)),o(_0x468ec1||!_0x1b896b||!_0x1b896b['__esModule']?t(_0x356711,'default',{'value':_0x1b896b,'enumerable':!0x0}):_0x356711,_0x1b896b));let c=require('libsql');c=s(c,0x1);let l=require('@univerjs-pro/collaboration-service');var u=0x1388,d='__univerCollaborationBinary',f='core',p=0x1,m=['collaboration_units','collaboration_unit_tombstones','collaboration_snapshots','collaboration_changesets','collaboration_sheet_blocks','collaboration_resources'],h=class{['_database'];['_disposed']=!0x1;constructor(_0x3852f8){g(_0x3852f8),this['_database']=new c['default'](_0x3852f8['filename'],{'timeout':_0x3852f8['busyTimeoutMs']??u});try{this['_database']['exec']('PRAGMA\x20foreign_keys\x20=\x20ON;'),this['_database']['exec']('PRAGMA\x20busy_timeout\x20=\x20'+(_0x3852f8['busyTimeoutMs']??u)+';'),this['_initializeSchema']();}catch(_0x48ea07){throw this['_database']['close'](),_0x48ea07;}}async['getUnit'](_0x224add,_0x482558){this['_assertOpen']();let _0x1927b4=this['_database']['prepare']('SELECT\x20unit_id,\x20type,\x20head_revision,\x20soft_deleted_at_ms\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20collaboration_units\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20unit_id\x20=\x20?\x20AND\x20soft_deleted_at_ms\x20IS\x20NULL')['get'](_0x482558);return _0x1927b4?v(_0x1927b4):null;}async['getSnapshot'](_0x39aa41,_0x35ed1e,_0x42eea8){this['_assertOpen']();let _0x271384=_0x42eea8?.['revision'];if(_0x271384!==void 0x0&&_0x271384<0x0)throw y('Snapshot\x20revision\x20cannot\x20be\x20negative');let _0x3fc885=this['_getActiveUnitRow'](_0x35ed1e);if(!_0x3fc885)return null;let _0x1c0733=_0x271384===void 0x0?_0x3fc885['head_revision']:Math['min'](_0x271384,_0x3fc885['head_revision']),_0x37f4eb=this['_database']['prepare']('SELECT\x20collaboration_snapshots.payload_json\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20collaboration_snapshots\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20JOIN\x20collaboration_units\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ON\x20collaboration_units.unit_id\x20=\x20collaboration_snapshots.unit_id\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20collaboration_snapshots.unit_id\x20=\x20?\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20AND\x20collaboration_snapshots.revision\x20<=\x20?\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20AND\x20collaboration_units.soft_deleted_at_ms\x20IS\x20NULL\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20ORDER\x20BY\x20collaboration_snapshots.revision\x20DESC\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20LIMIT\x201')['get'](_0x35ed1e,_0x1c0733);return _0x37f4eb?C(_0x37f4eb['payload_json']):null;}async['getSnapshotInfo'](_0xca227e,_0x550ce3,_0x2e6a50){this['_assertOpen']();let _0x934d4=_0x2e6a50?.['revision']??null;if(_0x934d4!==null&&_0x934d4<0x0)throw y('Snapshot\x20revision\x20cannot\x20be\x20negative');let _0x5d2234=this['_database']['prepare']('SELECT\x20snapshots.unit_id\x20AS\x20unitID,\x20snapshots.type,\x20snapshots.revision\x20AS\x20rev\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20collaboration_snapshots\x20AS\x20snapshots\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20JOIN\x20collaboration_units\x20AS\x20units\x20ON\x20units.unit_id\x20=\x20snapshots.unit_id\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20snapshots.unit_id\x20=\x20?\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20AND\x20units.soft_deleted_at_ms\x20IS\x20NULL\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20AND\x20snapshots.revision\x20<=\x20CASE\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20WHEN\x20?\x20IS\x20NULL\x20THEN\x20units.head_revision\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ELSE\x20MIN(?,\x20units.head_revision)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20END\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20ORDER\x20BY\x20snapshots.revision\x20DESC\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20LIMIT\x201')['get'](_0x550ce3,_0x934d4,_0x934d4);return _0x5d2234?{'unitID':_0x5d2234['unitID'],'type':_0x5d2234['type'],'rev':_0x5d2234['rev']}:null;}async['getChangesets'](_0x5e069b,_0x51f7f4,_0x8df9bb){if(this['_assertOpen'](),_0x8df9bb['from']<0x0||_0x8df9bb['to']!==void 0x0&&_0x8df9bb['to']<0x0)throw y('Changeset\x20range\x20revisions\x20cannot\x20be\x20negative');let _0x48864d=this['_database']['prepare']('SELECT\x20collaboration_changesets.payload_json\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20collaboration_units\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20LEFT\x20JOIN\x20collaboration_changesets\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ON\x20collaboration_changesets.unit_id\x20=\x20collaboration_units.unit_id\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20AND\x20collaboration_changesets.revision\x20>\x20?\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+(_0x8df9bb['to']===void 0x0?'':'AND\x20collaboration_changesets.revision\x20<=\x20?')+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20collaboration_units.unit_id\x20=\x20?\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20AND\x20collaboration_units.soft_deleted_at_ms\x20IS\x20NULL\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20ORDER\x20BY\x20collaboration_changesets.revision\x20ASC')['all'](_0x8df9bb['from'],..._0x8df9bb['to']===void 0x0?[]:[_0x8df9bb['to']],_0x51f7f4);return _0x48864d['length']===0x0?null:_0x48864d['flatMap'](_0x502bf6=>_0x502bf6['payload_json']?[C(_0x502bf6['payload_json'])]:[]);}async['createUnit'](_0x4b485e,_0x5d12d9){this['_assertOpen'](),_(_0x5d12d9);let _0x272f1c=S(_0x5d12d9['snapshot']),_0x181ed4=(_0x5d12d9['sheetBlocks']??[])['map'](_0x1a8d66=>({'id':_0x1a8d66['id'],'payload':S(_0x1a8d66)}));return this['_transaction'](()=>{if(this['_hasTombstone'](_0x5d12d9['record']['unitID']))throw y('Cannot\x20reuse\x20a\x20hard-deleted\x20unit\x20ID');let _0x5ec54e=this['_getStoredUnitRow'](_0x5d12d9['record']['unitID']);if(_0x5ec54e){if(_0x5ec54e['soft_deleted_at_ms']!==null)throw y('Cannot\x20reuse\x20a\x20soft-deleted\x20unit\x20ID');return{'status':'already-exists','record':v(_0x5ec54e)};}return this['_database']['prepare']('INSERT\x20INTO\x20collaboration_units\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20(unit_id,\x20type,\x20head_revision,\x20soft_deleted_at_ms)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20(?,\x20?,\x201,\x20NULL)')['run'](_0x5d12d9['record']['unitID'],_0x5d12d9['record']['type']),this['_writeSheetBlocks'](_0x5d12d9['record']['unitID'],_0x181ed4),this['_database']['prepare']('INSERT\x20INTO\x20collaboration_snapshots\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20(unit_id,\x20revision,\x20type,\x20payload_json)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20(?,\x201,\x20?,\x20?)')['run'](_0x5d12d9['record']['unitID'],_0x5d12d9['record']['type'],_0x272f1c),{'status':'created','record':{..._0x5d12d9['record']}};});}async['deleteUnits'](_0xb1135a,_0x2866e6){return this['_assertOpen'](),this['_transaction'](()=>{let _0x149c71=x(_0x2866e6['unitIDs'])['map'](_0x3ddbf7=>{let _0x3a9a78=this['_getStoredUnitRow'](_0x3ddbf7);if(!_0x3a9a78){if(_0x2866e6['hardDelete']&&this['_hasTombstone'](_0x3ddbf7))return{'unitID':_0x3ddbf7,'status':'already-hard-deleted'};throw new l['CollabError']('UNIT_NOT_FOUND','Cannot\x20delete\x20a\x20missing\x20unit');}return _0x2866e6['hardDelete']?{'unitID':_0x3ddbf7,'status':'hard-deleted'}:{'unitID':_0x3ddbf7,'status':_0x3a9a78['soft_deleted_at_ms']===null?'soft-deleted':'already-soft-deleted'};}),_0x467864=this['_database']['prepare']('UPDATE\x20collaboration_units\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20SET\x20soft_deleted_at_ms\x20=\x20?\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20unit_id\x20=\x20?\x20AND\x20soft_deleted_at_ms\x20IS\x20NULL'),_0xc9f54f=this['_database']['prepare']('INSERT\x20INTO\x20collaboration_unit_tombstones\x20(unit_id,\x20purged_at)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20(?,\x20?)'),_0x4e4b77=this['_database']['prepare']('DELETE\x20FROM\x20collaboration_units\x20WHERE\x20unit_id\x20=\x20?'),_0x4c939f=Date['now']();for(let _0x30c728 of _0x149c71)_0x30c728['status']==='soft-deleted'?_0x467864['run'](_0x4c939f,_0x30c728['unitID']):_0x30c728['status']==='hard-deleted'&&(_0xc9f54f['run'](_0x30c728['unitID'],_0x4c939f),_0x4e4b77['run'](_0x30c728['unitID']));return{'units':_0x149c71};});}async['recoverUnits'](_0x2d9c94,_0x1e4df3){return this['_assertOpen'](),this['_transaction'](()=>{let _0x36bdfa=x(_0x1e4df3['unitIDs'])['map'](_0x50dc18=>{let _0x3087f4=this['_getStoredUnitRow'](_0x50dc18);if(!_0x3087f4)throw this['_hasTombstone'](_0x50dc18)?y('Cannot\x20recover\x20a\x20hard-deleted\x20unit'):new l['CollabError']('UNIT_NOT_FOUND','Cannot\x20recover\x20a\x20missing\x20unit');return{'unitID':_0x50dc18,'status':_0x3087f4['soft_deleted_at_ms']===null?'already-active':'recovered'};}),_0x2523bd=this['_database']['prepare']('UPDATE\x20collaboration_units\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20SET\x20soft_deleted_at_ms\x20=\x20NULL\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20unit_id\x20=\x20?\x20AND\x20soft_deleted_at_ms\x20IS\x20NOT\x20NULL');for(let _0x42e746 of _0x36bdfa)_0x42e746['status']==='recovered'&&_0x2523bd['run'](_0x42e746['unitID']);return{'units':_0x36bdfa};});}async['commitChangeset'](_0x447aca,_0x494fff){this['_assertOpen']();let _0xd4147d=S(_0x494fff['changeset']);return this['_transaction'](()=>{let {changeset:_0x37a155}=_0x494fff,_0x25dae7=this['_getActiveUnitRow'](_0x37a155['unitID']);if(!_0x25dae7)throw new l['CollabError']('UNIT_NOT_FOUND','Cannot\x20commit\x20to\x20a\x20missing\x20unit');if(_0x25dae7['head_revision']!==_0x37a155['revision']-0x1)return{'status':'revision-mismatch','actualHeadRevision':_0x25dae7['head_revision']};if(this['_database']['prepare']('INSERT\x20INTO\x20collaboration_changesets\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20(unit_id,\x20revision,\x20base_revision,\x20sid,\x20req_id,\x20payload_json)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20(?,\x20?,\x20?,\x20?,\x20?,\x20?)')['run'](_0x37a155['unitID'],_0x37a155['revision'],_0x37a155['baseRev'],_0x37a155['sid'],_0x37a155['reqId'],_0xd4147d),this['_database']['prepare']('UPDATE\x20collaboration_units\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20SET\x20head_revision\x20=\x20?\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20unit_id\x20=\x20?\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20AND\x20head_revision\x20=\x20?\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20AND\x20soft_deleted_at_ms\x20IS\x20NULL')['run'](_0x37a155['revision'],_0x37a155['unitID'],_0x37a155['revision']-0x1)['changes']!==0x1)throw new l['CollabError']('INTERNAL_ERROR','SQLite\x20head\x20changed\x20inside\x20an\x20exclusive\x20write\x20transaction');return{'status':'committed','changeset':C(_0xd4147d),'headRevision':_0x37a155['revision']};});}async['saveSnapshot'](_0x4b61d9,_0x2e327e){this['_assertOpen']();let _0x3e20b5=S(_0x2e327e['snapshot']),_0x2d2a98=(_0x2e327e['sheetBlocks']??[])['map'](_0x144f2f=>({'id':_0x144f2f['id'],'payload':S(_0x144f2f)}));this['_transaction'](()=>{let _0x591739=this['_getActiveUnitRow'](_0x2e327e['snapshot']['unitID']);if(!_0x591739)throw new l['CollabError']('UNIT_NOT_FOUND','Cannot\x20snapshot\x20a\x20missing\x20unit');if(_0x2e327e['snapshot']['type']!==_0x591739['type']||_0x2e327e['snapshot']['rev']<0x1||_0x2e327e['snapshot']['rev']>_0x591739['head_revision'])throw y('Snapshot\x20does\x20not\x20match\x20the\x20stored\x20unit\x20head');this['_writeSheetBlocks'](_0x2e327e['snapshot']['unitID'],_0x2d2a98),this['_database']['prepare']('INSERT\x20INTO\x20collaboration_snapshots\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20(unit_id,\x20revision,\x20type,\x20payload_json)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20(?,\x20?,\x20?,\x20?)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ON\x20CONFLICT(unit_id,\x20revision)\x20DO\x20UPDATE\x20SET\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20type\x20=\x20excluded.type,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20payload_json\x20=\x20excluded.payload_json')['run'](_0x2e327e['snapshot']['unitID'],_0x2e327e['snapshot']['rev'],_0x2e327e['snapshot']['type'],_0x3e20b5);});}async['getSheetBlock'](_0x16544b,_0xc6fd,_0x1afba5){this['_assertOpen']();let _0x44151e=this['_database']['prepare']('SELECT\x20collaboration_sheet_blocks.payload_json\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20collaboration_sheet_blocks\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20JOIN\x20collaboration_units\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ON\x20collaboration_units.unit_id\x20=\x20collaboration_sheet_blocks.unit_id\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20collaboration_sheet_blocks.unit_id\x20=\x20?\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20AND\x20collaboration_sheet_blocks.block_id\x20=\x20?\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20AND\x20collaboration_units.soft_deleted_at_ms\x20IS\x20NULL')['get'](_0xc6fd,_0x1afba5);return _0x44151e?C(_0x44151e['payload_json']):null;}async['dispose'](){this['_disposed']||(this['_disposed']=!0x0,this['_database']['close']());}['_initializeSchema'](){this['_transaction'](()=>{if(!this['_hasTable']('collaboration_schema_versions')){if(this['_hasAnyCoreTable']())throw b('SQLite\x20collaboration\x20core\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 _0x559c4e=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(_0x559c4e){if(_0x559c4e['version']!==p)throw b('SQLite\x20collaboration\x20core\x20schema\x20version\x20'+_0x559c4e['version']+'\x20is\x20not\x20supported');let _0x2b5172=m['filter'](_0xda8535=>!this['_hasTable'](_0xda8535));if(_0x2b5172['length']>0x0)throw b('SQLite\x20collaboration\x20core\x20schema\x20v'+p+'\x20is\x20incomplete:\x20missing\x20'+_0x2b5172['join'](',\x20'));return;}if(this['_hasAnyCoreTable']())throw b('SQLite\x20collaboration\x20core\x20tables\x20exist\x20without\x20a\x20schema\x20version');this['_database']['exec']('\x0a\x20\x20\x20\x20\x20\x20\x20\x20CREATE\x20TABLE\x20collaboration_units\x20(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20unit_id\x20TEXT\x20PRIMARY\x20KEY,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20type\x20INTEGER\x20NOT\x20NULL,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20head_revision\x20INTEGER\x20NOT\x20NULL\x20CHECK\x20(head_revision\x20>=\x201),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20soft_deleted_at_ms\x20INTEGER\x0a\x20\x20\x20\x20\x20\x20\x20\x20);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20CREATE\x20TABLE\x20collaboration_unit_tombstones\x20(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20unit_id\x20TEXT\x20PRIMARY\x20KEY,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20purged_at\x20INTEGER\x20NOT\x20NULL\x0a\x20\x20\x20\x20\x20\x20\x20\x20);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20CREATE\x20TABLE\x20collaboration_snapshots\x20(\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>=\x201),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20type\x20INTEGER\x20NOT\x20NULL,\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(unit_id,\x20revision),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20FOREIGN\x20KEY\x20(unit_id)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20REFERENCES\x20collaboration_units(unit_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_changesets\x20(\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(unit_id,\x20revision),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20UNIQUE\x20(unit_id,\x20sid,\x20req_id),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20FOREIGN\x20KEY\x20(unit_id)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20REFERENCES\x20collaboration_units(unit_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_sheet_blocks\x20(\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\x20block_id\x20TEXT\x20NOT\x20NULL,\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(unit_id,\x20block_id),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20FOREIGN\x20KEY\x20(unit_id)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20REFERENCES\x20collaboration_units(unit_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_resources\x20(\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\x20resource_id\x20TEXT\x20NOT\x20NULL,\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(unit_id,\x20resource_id),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20FOREIGN\x20KEY\x20(unit_id)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20REFERENCES\x20collaboration_units(unit_id)\x20ON\x20DELETE\x20CASCADE\x0a\x20\x20\x20\x20\x20\x20\x20\x20);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20CREATE\x20INDEX\x20collaboration_snapshots_nearest_revision\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ON\x20collaboration_snapshots(unit_id,\x20revision\x20DESC);\x0a\x20\x20\x20\x20\x20\x20\x20\x20CREATE\x20INDEX\x20collaboration_changesets_revision_range\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ON\x20collaboration_changesets(unit_id,\x20revision\x20ASC);\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(\x27core\x27,\x201);\x0a\x20\x20\x20\x20\x20\x20');});}['_getActiveUnitRow'](_0x428d48){return this['_database']['prepare']('SELECT\x20unit_id,\x20type,\x20head_revision,\x20soft_deleted_at_ms\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20collaboration_units\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20unit_id\x20=\x20?\x20AND\x20soft_deleted_at_ms\x20IS\x20NULL')['get'](_0x428d48)??null;}['_getStoredUnitRow'](_0x1b5066){return this['_database']['prepare']('SELECT\x20unit_id,\x20type,\x20head_revision,\x20soft_deleted_at_ms\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20collaboration_units\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20unit_id\x20=\x20?')['get'](_0x1b5066)??null;}['_hasTombstone'](_0x1d58cc){return!!this['_database']['prepare']('SELECT\x201\x20FROM\x20collaboration_unit_tombstones\x20WHERE\x20unit_id\x20=\x20?')['get'](_0x1d58cc);}['_hasTable'](_0x116a7a){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'](_0x116a7a);}['_hasAnyCoreTable'](){return m['some'](_0x3ef240=>this['_hasTable'](_0x3ef240));}['_writeSheetBlocks'](_0x4692f9,_0x2aa76d){let _0x368003=this['_database']['prepare']('INSERT\x20INTO\x20collaboration_sheet_blocks\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20(unit_id,\x20block_id,\x20payload_json)\x0a\x20\x20\x20\x20\x20\x20\x20VALUES\x20(?,\x20?,\x20?)\x0a\x20\x20\x20\x20\x20\x20\x20ON\x20CONFLICT(unit_id,\x20block_id)\x20DO\x20UPDATE\x20SET\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20payload_json\x20=\x20excluded.payload_json');for(let _0x22994b of _0x2aa76d)_0x368003['run'](_0x4692f9,_0x22994b['id'],_0x22994b['payload']);}['_transaction'](_0x2993b2){this['_database']['exec']('BEGIN\x20IMMEDIATE;');try{let _0x5492bd=_0x2993b2();return this['_database']['exec']('COMMIT;'),_0x5492bd;}catch(_0x445ef7){throw this['_database']['inTransaction']&&this['_database']['exec']('ROLLBACK;'),_0x445ef7;}}['_assertOpen'](){if(this['_disposed'])throw new l['CollabError']('INTERNAL_ERROR','SQLite\x20Database\x20Adapter\x20is\x20disposed');}};function g(_0x3b57a8){if(!_0x3b57a8['filename'])throw y('SQLite\x20filename\x20is\x20required');if(_0x3b57a8['busyTimeoutMs']!==void 0x0&&(!Number['isSafeInteger'](_0x3b57a8['busyTimeoutMs'])||_0x3b57a8['busyTimeoutMs']<0x0))throw y('SQLite\x20busyTimeoutMs\x20must\x20be\x20a\x20non-negative\x20integer');}function _(_0x3e9eec){let {record:_0x36dee6,snapshot:_0x1777aa}=_0x3e9eec;if(_0x36dee6['headRevision']!==0x1||_0x1777aa['rev']!==0x1||_0x1777aa['unitID']!==_0x36dee6['unitID']||_0x1777aa['type']!==_0x36dee6['type'])throw y('Initial\x20unit\x20record\x20and\x20snapshot\x20must\x20match\x20at\x20revision\x201');}function v(_0x55a311){return{'unitID':_0x55a311['unit_id'],'type':_0x55a311['type'],'headRevision':_0x55a311['head_revision']};}function y(_0x124386){return new l['CollabError']('INVALID_REQUEST',_0x124386);}function b(_0x4f3f40){return new l['CollabError']('INTERNAL_ERROR',_0x4f3f40);}function x(_0x23e8f8){return[...new Set(_0x23e8f8)];}function S(_0x52620e){return JSON['stringify'](_0x52620e,function(_0x46cc42,_0x3f7ac2){let _0x5d429f=this[_0x46cc42];return _0x5d429f instanceof Uint8Array?{[d]:Buffer['from'](_0x5d429f)['toString']('base64')}:_0x3f7ac2;});}function C(_0xb55a28){return JSON['parse'](_0xb55a28,(_0x1b719b,_0x54fd97)=>w(_0x54fd97)?Uint8Array['from'](Buffer['from'](_0x54fd97[d],'base64')):_0x54fd97);}function w(_0x486a17){return typeof _0x486a17=='object'&&!!_0x486a17&&Object['keys'](_0x486a17)['length']===0x1&&typeof _0x486a17[d]=='string';}exports['SQLiteDatabaseAdapter']=h;
|
|
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=(_0x56bfd4,_0x407acd,_0x5e3575,_0x2c2a80)=>{if(_0x407acd&&typeof _0x407acd=='object'||typeof _0x407acd=='function'){for(var _0x36f654=r(_0x407acd),_0xeb113c=0x0,_0x185a3c=_0x36f654['length'],_0x1aeac3;_0xeb113c<_0x185a3c;_0xeb113c++)_0x1aeac3=_0x36f654[_0xeb113c],!a['call'](_0x56bfd4,_0x1aeac3)&&_0x1aeac3!==_0x5e3575&&t(_0x56bfd4,_0x1aeac3,{'get':(_0x17a9e4=>_0x407acd[_0x17a9e4])['bind'](null,_0x1aeac3),'enumerable':!(_0x2c2a80=n(_0x407acd,_0x1aeac3))||_0x2c2a80['enumerable']});}return _0x56bfd4;},s=(_0x2ea5fc,_0x3ed852,_0x4a8d05)=>(_0x4a8d05=_0x2ea5fc==null?{}:e(i(_0x2ea5fc)),o(_0x3ed852||!_0x2ea5fc||!_0x2ea5fc['__esModule']?t(_0x4a8d05,'default',{'value':_0x2ea5fc,'enumerable':!0x0}):_0x4a8d05,_0x2ea5fc));let c=require('libsql');c=s(c,0x1);let l=require('@univerjs-pro/collaboration-service');var u=0x1388,d='__univerCollaborationBinary',f='core',p=0x2,m=['collaboration_units','collaboration_unit_tombstones','collaboration_snapshots','collaboration_changesets','collaboration_sheet_blocks'],h=class{['_database'];['_disposed']=!0x1;constructor(_0x237695){g(_0x237695),this['_database']=new c['default'](_0x237695['filename'],{'timeout':_0x237695['busyTimeoutMs']??u});try{this['_database']['exec']('PRAGMA\x20foreign_keys\x20=\x20ON;'),this['_database']['exec']('PRAGMA\x20busy_timeout\x20=\x20'+(_0x237695['busyTimeoutMs']??u)+';'),this['_initializeSchema']();}catch(_0x325262){throw this['_database']['close'](),_0x325262;}}async['getUnit'](_0x24aea5,_0x3d5040){this['_assertOpen']();let _0x173f06=this['_database']['prepare']('SELECT\x20unit_id,\x20type,\x20head_revision,\x20creator_id,\x20created_at_ms,\x20soft_deleted_at_ms\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20collaboration_units\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20unit_id\x20=\x20?\x20AND\x20soft_deleted_at_ms\x20IS\x20NULL')['get'](_0x3d5040);return _0x173f06?v(_0x173f06):null;}async['getSnapshot'](_0xf3d6b1,_0x506ba4,_0xbb3570){this['_assertOpen']();let _0x478fb0=_0xbb3570?.['revision'];if(_0x478fb0!==void 0x0&&_0x478fb0<0x0)throw y('Snapshot\x20revision\x20cannot\x20be\x20negative');let _0x6d16d7=this['_database']['prepare']('SELECT\x20collaboration_snapshots.payload_json\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20collaboration_snapshots\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20JOIN\x20collaboration_units\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ON\x20collaboration_units.unit_id\x20=\x20collaboration_snapshots.unit_id\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20collaboration_snapshots.unit_id\x20=\x20?\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+(_0x478fb0===void 0x0?'':'AND\x20collaboration_snapshots.revision\x20<=\x20?')+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20AND\x20collaboration_units.soft_deleted_at_ms\x20IS\x20NULL\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20ORDER\x20BY\x20collaboration_snapshots.revision\x20DESC\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20LIMIT\x201')['get'](_0x506ba4,..._0x478fb0===void 0x0?[]:[_0x478fb0]);return _0x6d16d7?C(_0x6d16d7['payload_json']):null;}async['getSnapshotInfo'](_0x2dc12e,_0x498107,_0x31b273){this['_assertOpen']();let _0x1f6ab6=_0x31b273?.['revision'];if(_0x1f6ab6!==void 0x0&&_0x1f6ab6<0x0)throw y('Snapshot\x20revision\x20cannot\x20be\x20negative');let _0xbf3865=this['_database']['prepare']('SELECT\x20snapshots.unit_id\x20AS\x20unitID,\x20snapshots.type,\x20snapshots.revision\x20AS\x20rev\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20collaboration_snapshots\x20AS\x20snapshots\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20JOIN\x20collaboration_units\x20AS\x20units\x20ON\x20units.unit_id\x20=\x20snapshots.unit_id\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20snapshots.unit_id\x20=\x20?\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20AND\x20units.soft_deleted_at_ms\x20IS\x20NULL\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+(_0x1f6ab6===void 0x0?'':'AND\x20snapshots.revision\x20<=\x20?')+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20ORDER\x20BY\x20snapshots.revision\x20DESC\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20LIMIT\x201')['get'](_0x498107,..._0x1f6ab6===void 0x0?[]:[_0x1f6ab6]);return _0xbf3865?{'unitID':_0xbf3865['unitID'],'type':_0xbf3865['type'],'rev':_0xbf3865['rev']}:null;}async['getChangesets'](_0x287af2,_0x30288c,_0x4a274e){if(this['_assertOpen'](),_0x4a274e['from']<0x0||_0x4a274e['to']!==void 0x0&&_0x4a274e['to']<0x0)throw y('Changeset\x20range\x20revisions\x20cannot\x20be\x20negative');let _0x49ee7c=this['_database']['prepare']('SELECT\x20collaboration_changesets.payload_json\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20collaboration_units\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20LEFT\x20JOIN\x20collaboration_changesets\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ON\x20collaboration_changesets.unit_id\x20=\x20collaboration_units.unit_id\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20AND\x20collaboration_changesets.revision\x20>\x20?\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+(_0x4a274e['to']===void 0x0?'':'AND\x20collaboration_changesets.revision\x20<=\x20?')+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20collaboration_units.unit_id\x20=\x20?\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20AND\x20collaboration_units.soft_deleted_at_ms\x20IS\x20NULL\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20ORDER\x20BY\x20collaboration_changesets.revision\x20ASC')['all'](_0x4a274e['from'],..._0x4a274e['to']===void 0x0?[]:[_0x4a274e['to']],_0x30288c);return _0x49ee7c['length']===0x0?null:_0x49ee7c['flatMap'](_0x5eb9f7=>_0x5eb9f7['payload_json']?[C(_0x5eb9f7['payload_json'])]:[]);}async['createUnit'](_0x327d38,_0x50f566){this['_assertOpen'](),_(_0x50f566);let _0x24720d=S(_0x50f566['snapshot']),_0xa548a9=(_0x50f566['sheetBlocks']??[])['map'](_0x2506f7=>({'id':_0x2506f7['id'],'payload':S(_0x2506f7)}));return this['_transaction'](()=>{if(this['_hasTombstone'](_0x50f566['record']['unitID']))throw y('Cannot\x20reuse\x20a\x20hard-deleted\x20unit\x20ID');let _0x8ad735=this['_getStoredUnitRow'](_0x50f566['record']['unitID']);if(_0x8ad735){if(_0x8ad735['soft_deleted_at_ms']!==null)throw y('Cannot\x20reuse\x20a\x20soft-deleted\x20unit\x20ID');return{'status':'already-exists','record':v(_0x8ad735)};}return this['_database']['prepare']('INSERT\x20INTO\x20collaboration_units\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20(unit_id,\x20type,\x20head_revision,\x20creator_id,\x20created_at_ms,\x20soft_deleted_at_ms)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20(?,\x20?,\x201,\x20?,\x20?,\x20NULL)')['run'](_0x50f566['record']['unitID'],_0x50f566['record']['type'],_0x50f566['record']['creatorID'],_0x50f566['record']['createdAt']),this['_writeSheetBlocks'](_0x50f566['record']['unitID'],_0xa548a9),this['_database']['prepare']('INSERT\x20INTO\x20collaboration_snapshots\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20(unit_id,\x20revision,\x20type,\x20payload_json)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20(?,\x201,\x20?,\x20?)')['run'](_0x50f566['record']['unitID'],_0x50f566['record']['type'],_0x24720d),{'status':'created','record':{..._0x50f566['record']}};});}async['deleteUnits'](_0x3b6d49,_0x149023){return this['_assertOpen'](),this['_transaction'](()=>{let _0x1944f7=x(_0x149023['unitIDs'])['map'](_0x56720b=>{let _0x93c68e=this['_getStoredUnitRow'](_0x56720b);if(!_0x93c68e){if(_0x149023['hardDelete']&&this['_hasTombstone'](_0x56720b))return{'unitID':_0x56720b,'status':'already-hard-deleted'};throw new l['CollabError']('UNIT_NOT_FOUND','Cannot\x20delete\x20a\x20missing\x20unit');}return _0x149023['hardDelete']?{'unitID':_0x56720b,'status':'hard-deleted'}:{'unitID':_0x56720b,'status':_0x93c68e['soft_deleted_at_ms']===null?'soft-deleted':'already-soft-deleted'};}),_0x500da5=this['_database']['prepare']('UPDATE\x20collaboration_units\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20SET\x20soft_deleted_at_ms\x20=\x20?\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20unit_id\x20=\x20?\x20AND\x20soft_deleted_at_ms\x20IS\x20NULL'),_0x5e92c7=this['_database']['prepare']('INSERT\x20INTO\x20collaboration_unit_tombstones\x20(unit_id,\x20purged_at)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20(?,\x20?)'),_0x5d74d4=this['_database']['prepare']('DELETE\x20FROM\x20collaboration_units\x20WHERE\x20unit_id\x20=\x20?'),_0xbd76e4=Date['now']();for(let _0x2e1e2f of _0x1944f7)_0x2e1e2f['status']==='soft-deleted'?_0x500da5['run'](_0xbd76e4,_0x2e1e2f['unitID']):_0x2e1e2f['status']==='hard-deleted'&&(_0x5e92c7['run'](_0x2e1e2f['unitID'],_0xbd76e4),_0x5d74d4['run'](_0x2e1e2f['unitID']));return{'units':_0x1944f7};});}async['recoverUnits'](_0x152a24,_0xf6180e){return this['_assertOpen'](),this['_transaction'](()=>{let _0x42115c=x(_0xf6180e['unitIDs'])['map'](_0x46a959=>{let _0x90cec5=this['_getStoredUnitRow'](_0x46a959);if(!_0x90cec5)throw this['_hasTombstone'](_0x46a959)?y('Cannot\x20recover\x20a\x20hard-deleted\x20unit'):new l['CollabError']('UNIT_NOT_FOUND','Cannot\x20recover\x20a\x20missing\x20unit');return{'unitID':_0x46a959,'status':_0x90cec5['soft_deleted_at_ms']===null?'already-active':'recovered'};}),_0x538b33=this['_database']['prepare']('UPDATE\x20collaboration_units\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20SET\x20soft_deleted_at_ms\x20=\x20NULL\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20unit_id\x20=\x20?\x20AND\x20soft_deleted_at_ms\x20IS\x20NOT\x20NULL');for(let _0x3b29ec of _0x42115c)_0x3b29ec['status']==='recovered'&&_0x538b33['run'](_0x3b29ec['unitID']);return{'units':_0x42115c};});}async['commitChangeset'](_0x1c38c7,_0x507f0f){return this['_assertOpen'](),this['_transaction'](()=>{let {changeset:_0x461ec0}=_0x507f0f,_0x5a56dd=this['_getActiveUnitRow'](_0x461ec0['unitID']);if(!_0x5a56dd)throw new l['CollabError']('UNIT_NOT_FOUND','Cannot\x20commit\x20to\x20a\x20missing\x20unit');if(_0x5a56dd['head_revision']!==_0x461ec0['revision']-0x1)return{'status':'revision-mismatch','actualHeadRevision':_0x5a56dd['head_revision']};let _0x4a48f3=Date['now'](),_0x4896fe=S({..._0x461ec0,'createTime':Math['floor'](_0x4a48f3/0x3e8)});if(this['_database']['prepare']('INSERT\x20INTO\x20collaboration_changesets\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20(unit_id,\x20revision,\x20base_revision,\x20sid,\x20req_id,\x20created_at_ms,\x20payload_json)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20(?,\x20?,\x20?,\x20?,\x20?,\x20?,\x20?)')['run'](_0x461ec0['unitID'],_0x461ec0['revision'],_0x461ec0['baseRev'],_0x461ec0['sid'],_0x461ec0['reqId'],_0x4a48f3,_0x4896fe),this['_database']['prepare']('UPDATE\x20collaboration_units\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20SET\x20head_revision\x20=\x20?\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20unit_id\x20=\x20?\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20AND\x20head_revision\x20=\x20?\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20AND\x20soft_deleted_at_ms\x20IS\x20NULL')['run'](_0x461ec0['revision'],_0x461ec0['unitID'],_0x461ec0['revision']-0x1)['changes']!==0x1)throw new l['CollabError']('INTERNAL_ERROR','SQLite\x20head\x20changed\x20inside\x20an\x20exclusive\x20write\x20transaction');return{'status':'committed','changeset':C(_0x4896fe),'headRevision':_0x461ec0['revision']};});}async['saveSnapshot'](_0xd6605,_0x407dfd){this['_assertOpen']();let _0x364958=S(_0x407dfd['snapshot']),_0x14ff4f=(_0x407dfd['sheetBlocks']??[])['map'](_0x4855b0=>({'id':_0x4855b0['id'],'payload':S(_0x4855b0)}));this['_transaction'](()=>{let _0x543d00=this['_getActiveUnitRow'](_0x407dfd['snapshot']['unitID']);if(!_0x543d00)throw new l['CollabError']('UNIT_NOT_FOUND','Cannot\x20snapshot\x20a\x20missing\x20unit');if(_0x407dfd['snapshot']['type']!==_0x543d00['type']||_0x407dfd['snapshot']['rev']<0x1||_0x407dfd['snapshot']['rev']>_0x543d00['head_revision'])throw y('Snapshot\x20does\x20not\x20match\x20the\x20stored\x20unit\x20head');this['_writeSheetBlocks'](_0x407dfd['snapshot']['unitID'],_0x14ff4f),this['_database']['prepare']('INSERT\x20INTO\x20collaboration_snapshots\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20(unit_id,\x20revision,\x20type,\x20payload_json)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20(?,\x20?,\x20?,\x20?)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ON\x20CONFLICT(unit_id,\x20revision)\x20DO\x20UPDATE\x20SET\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20type\x20=\x20excluded.type,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20payload_json\x20=\x20excluded.payload_json')['run'](_0x407dfd['snapshot']['unitID'],_0x407dfd['snapshot']['rev'],_0x407dfd['snapshot']['type'],_0x364958);});}async['getSheetBlock'](_0x56bfcb,_0x2046ca,_0x5fe0cc){this['_assertOpen']();let _0x3d3c90=this['_database']['prepare']('SELECT\x20collaboration_sheet_blocks.payload_json\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20collaboration_sheet_blocks\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20JOIN\x20collaboration_units\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ON\x20collaboration_units.unit_id\x20=\x20collaboration_sheet_blocks.unit_id\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20collaboration_sheet_blocks.unit_id\x20=\x20?\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20AND\x20collaboration_sheet_blocks.block_id\x20=\x20?\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20AND\x20collaboration_units.soft_deleted_at_ms\x20IS\x20NULL')['get'](_0x2046ca,_0x5fe0cc);return _0x3d3c90?C(_0x3d3c90['payload_json']):null;}async['dispose'](){this['_disposed']||(this['_disposed']=!0x0,this['_database']['close']());}['_initializeSchema'](){this['_transaction'](()=>{if(!this['_hasTable']('collaboration_schema_versions')){if(this['_hasAnyCoreTable']())throw b('SQLite\x20collaboration\x20core\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 _0x59f37a=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(_0x59f37a){if(_0x59f37a['version']!==p)throw b('SQLite\x20collaboration\x20core\x20schema\x20version\x20'+_0x59f37a['version']+'\x20is\x20not\x20supported;\x20version\x201\x20requires\x20explicit\x20migrateSQLiteCoreV1ToV2\x20with\x20a\x20Unit\x20creation\x20resolver');let _0x26e771=m['filter'](_0x5cb3c0=>!this['_hasTable'](_0x5cb3c0));if(_0x26e771['length']>0x0)throw b('SQLite\x20collaboration\x20core\x20schema\x20v'+_0x59f37a['version']+'\x20is\x20incomplete:\x20missing\x20'+_0x26e771['join'](',\x20'));if(!this['_database']['prepare']('PRAGMA\x20table_info(collaboration_changesets)')['all']()['some'](_0x9332ca=>_0x9332ca['name']==='created_at_ms'&&_0x9332ca['notnull']===0x1))throw b('Changeset\x20schema\x20requires\x20NOT\x20NULL\x20created_at_ms');let _0xb0777c=this['_database']['prepare']('PRAGMA\x20table_info(collaboration_units)')['all']();if(!['creator_id','created_at_ms']['every'](_0x2df818=>_0xb0777c['some'](_0xb0588e=>_0xb0588e['name']===_0x2df818&&_0xb0588e['notnull']===0x1)))throw b('SQLite\x20collaboration\x20core\x20schema\x20v2\x20requires\x20NOT\x20NULL\x20creator_id\x20and\x20created_at_ms');return;}if(this['_hasAnyCoreTable']())throw b('SQLite\x20collaboration\x20core\x20tables\x20exist\x20without\x20a\x20schema\x20version');this['_database']['exec']('\x0a\x20\x20\x20\x20\x20\x20\x20\x20CREATE\x20TABLE\x20collaboration_units\x20(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20unit_id\x20TEXT\x20PRIMARY\x20KEY,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20type\x20INTEGER\x20NOT\x20NULL,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20head_revision\x20INTEGER\x20NOT\x20NULL\x20CHECK\x20(head_revision\x20>=\x201),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20creator_id\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20created_at_ms\x20INTEGER\x20NOT\x20NULL,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20soft_deleted_at_ms\x20INTEGER\x0a\x20\x20\x20\x20\x20\x20\x20\x20);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20CREATE\x20TABLE\x20collaboration_unit_tombstones\x20(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20unit_id\x20TEXT\x20PRIMARY\x20KEY,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20purged_at\x20INTEGER\x20NOT\x20NULL\x0a\x20\x20\x20\x20\x20\x20\x20\x20);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20CREATE\x20TABLE\x20collaboration_snapshots\x20(\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>=\x201),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20type\x20INTEGER\x20NOT\x20NULL,\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(unit_id,\x20revision),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20FOREIGN\x20KEY\x20(unit_id)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20REFERENCES\x20collaboration_units(unit_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_changesets\x20(\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\x20created_at_ms\x20INTEGER\x20NOT\x20NULL,\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(unit_id,\x20revision),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20UNIQUE\x20(unit_id,\x20sid,\x20req_id),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20FOREIGN\x20KEY\x20(unit_id)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20REFERENCES\x20collaboration_units(unit_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_sheet_blocks\x20(\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\x20block_id\x20TEXT\x20NOT\x20NULL,\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(unit_id,\x20block_id),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20FOREIGN\x20KEY\x20(unit_id)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20REFERENCES\x20collaboration_units(unit_id)\x20ON\x20DELETE\x20CASCADE\x0a\x20\x20\x20\x20\x20\x20\x20\x20);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20CREATE\x20INDEX\x20collaboration_snapshots_nearest_revision\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ON\x20collaboration_snapshots(unit_id,\x20revision\x20DESC);\x0a\x20\x20\x20\x20\x20\x20\x20\x20CREATE\x20INDEX\x20collaboration_changesets_revision_range\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ON\x20collaboration_changesets(unit_id,\x20revision\x20ASC);\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(\x27core\x27,\x202);\x0a\x20\x20\x20\x20\x20\x20');});}['_getActiveUnitRow'](_0x1b83ca){return this['_database']['prepare']('SELECT\x20unit_id,\x20type,\x20head_revision,\x20creator_id,\x20created_at_ms,\x20soft_deleted_at_ms\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20collaboration_units\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20unit_id\x20=\x20?\x20AND\x20soft_deleted_at_ms\x20IS\x20NULL')['get'](_0x1b83ca)??null;}['_getStoredUnitRow'](_0x56133b){return this['_database']['prepare']('SELECT\x20unit_id,\x20type,\x20head_revision,\x20creator_id,\x20created_at_ms,\x20soft_deleted_at_ms\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20collaboration_units\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20unit_id\x20=\x20?')['get'](_0x56133b)??null;}['_hasTombstone'](_0x4f8f62){return!!this['_database']['prepare']('SELECT\x201\x20FROM\x20collaboration_unit_tombstones\x20WHERE\x20unit_id\x20=\x20?')['get'](_0x4f8f62);}['_hasTable'](_0x267523){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'](_0x267523);}['_hasAnyCoreTable'](){return m['some'](_0x18fead=>this['_hasTable'](_0x18fead));}['_writeSheetBlocks'](_0x1a5551,_0x5c5231){let _0x120fcd=this['_database']['prepare']('INSERT\x20INTO\x20collaboration_sheet_blocks\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20(unit_id,\x20block_id,\x20payload_json)\x0a\x20\x20\x20\x20\x20\x20\x20VALUES\x20(?,\x20?,\x20?)\x0a\x20\x20\x20\x20\x20\x20\x20ON\x20CONFLICT(unit_id,\x20block_id)\x20DO\x20UPDATE\x20SET\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20payload_json\x20=\x20excluded.payload_json');for(let _0x4f431e of _0x5c5231)_0x120fcd['run'](_0x1a5551,_0x4f431e['id'],_0x4f431e['payload']);}['_transaction'](_0x9e6c51){this['_database']['exec']('BEGIN\x20IMMEDIATE;');try{let _0x35b341=_0x9e6c51();return this['_database']['exec']('COMMIT;'),_0x35b341;}catch(_0xf5c2e0){throw this['_database']['inTransaction']&&this['_database']['exec']('ROLLBACK;'),_0xf5c2e0;}}['_assertOpen'](){if(this['_disposed'])throw new l['CollabError']('INTERNAL_ERROR','SQLite\x20Database\x20Adapter\x20is\x20disposed');}};function g(_0x533388){if(!_0x533388['filename'])throw y('SQLite\x20filename\x20is\x20required');if(_0x533388['busyTimeoutMs']!==void 0x0&&(!Number['isSafeInteger'](_0x533388['busyTimeoutMs'])||_0x533388['busyTimeoutMs']<0x0))throw y('SQLite\x20busyTimeoutMs\x20must\x20be\x20a\x20non-negative\x20integer');}function _(_0x364808){let {record:_0x59a62d,snapshot:_0x495b62}=_0x364808;if(_0x59a62d['headRevision']!==0x1||_0x495b62['rev']!==0x1||_0x495b62['unitID']!==_0x59a62d['unitID']||_0x495b62['type']!==_0x59a62d['type'])throw y('Initial\x20unit\x20record\x20and\x20snapshot\x20must\x20match\x20at\x20revision\x201');if(typeof _0x59a62d['creatorID']!='string'||_0x59a62d['creatorID']['length']===0x0||!Number['isSafeInteger'](_0x59a62d['createdAt'])||_0x59a62d['createdAt']<0x0)throw y('Unit\x20creation\x20requires\x20creatorID\x20and\x20createdAt\x20in\x20Unix\x20milliseconds');}function v(_0x5de30e){return{'unitID':_0x5de30e['unit_id'],'type':_0x5de30e['type'],'headRevision':_0x5de30e['head_revision'],'creatorID':_0x5de30e['creator_id'],'createdAt':_0x5de30e['created_at_ms']};}function y(_0x22d290){return new l['CollabError']('INVALID_REQUEST',_0x22d290);}function b(_0x30c0ae){return new l['CollabError']('INTERNAL_ERROR',_0x30c0ae);}function x(_0xd62a5f){return[...new Set(_0xd62a5f)];}function S(_0x23ce94){return JSON['stringify'](_0x23ce94,function(_0x1c9b16,_0x4424bf){let _0x5d1e45=this[_0x1c9b16];return _0x5d1e45 instanceof Uint8Array?{[d]:Buffer['from'](_0x5d1e45)['toString']('base64')}:_0x4424bf;});}function C(_0x86e333){return JSON['parse'](_0x86e333,(_0x2d620b,_0x20d80d)=>w(_0x20d80d)?Uint8Array['from'](Buffer['from'](_0x20d80d[d],'base64')):_0x20d80d);}function w(_0xf3bab9){return typeof _0xf3bab9=='object'&&!!_0xf3bab9&&Object['keys'](_0xf3bab9)['length']===0x1&&typeof _0xf3bab9[d]=='string';}async function T(_0x486e08){let _0x50a430=Date['now'](),_0x5a3cde=new c['default'](_0x486e08['filename'],{'fileMustExist':!0x0}),_0x14b031=!0x1;try{if(_0x5a3cde['exec']('PRAGMA\x20foreign_keys\x20=\x20OFF;\x20PRAGMA\x20legacy_alter_table\x20=\x20ON;\x20BEGIN\x20IMMEDIATE;'),_0x14b031=!0x0,_0x5a3cde['prepare']('SELECT\x20version\x20FROM\x20collaboration_schema_versions\x20WHERE\x20component\x20=\x20\x27core\x27')['get']()?.['version']!==0x1)throw new l['CollabError']('INVALID_REQUEST','migrateSQLiteCoreV1ToV2\x20requires\x20core\x20schema\x20version\x201');for(let _0x30d383 of['collaboration_unit_tombstones','collaboration_snapshots','collaboration_changesets','collaboration_sheet_blocks'])_0x5a3cde['prepare']('SELECT\x201\x20FROM\x20'+_0x30d383+'\x20LIMIT\x200')['all']();let _0x59d581=_0x5a3cde['prepare']('SELECT\x201\x20FROM\x20sqlite_schema\x20WHERE\x20type\x20=\x20\x27table\x27\x20AND\x20name\x20=\x20\x27collaboration_history_revisions\x27')['get']()?_0x5a3cde['prepare']('SELECT\x20user_id,\x20committed_at\x20FROM\x20collaboration_history_revisions\x20WHERE\x20unit_id\x20=\x20?\x20AND\x20revision\x20=\x20?'):void 0x0,_0x428446=(_0x1cf28b,_0x51df61)=>_0x59d581?.['get'](_0x1cf28b,_0x51df61),_0x263786=_0x5a3cde['prepare']('PRAGMA\x20table_info(collaboration_units)')['all'](),_0xd9dda8=['unit_id','type','head_revision','soft_deleted_at_ms'];if(_0x263786['length']!==_0xd9dda8['length']||_0xd9dda8['some'](_0xf545ab=>!_0x263786['some'](_0x25b9a1=>_0x25b9a1['name']===_0xf545ab)))throw new l['CollabError']('INVALID_REQUEST','Core\x20v1\x20Unit\x20columns\x20differ\x20from\x20the\x20supported\x20schema;\x20refusing\x20a\x20potentially\x20lossy\x20migration');let _0x790fe4=_0x5a3cde['prepare']('SELECT\x20sql\x20FROM\x20sqlite_schema\x20WHERE\x20tbl_name\x20=\x20\x27collaboration_units\x27\x20AND\x20type\x20IN\x20(\x27index\x27,\x20\x27trigger\x27)\x20AND\x20sql\x20IS\x20NOT\x20NULL')['all']();_0x5a3cde['exec']('CREATE\x20TABLE\x20collaboration_units_v2\x20(\x0a\x20\x20\x20\x20\x20\x20unit_id\x20TEXT\x20PRIMARY\x20KEY,\x0a\x20\x20\x20\x20\x20\x20type\x20INTEGER\x20NOT\x20NULL,\x0a\x20\x20\x20\x20\x20\x20head_revision\x20INTEGER\x20NOT\x20NULL\x20CHECK\x20(head_revision\x20>=\x201),\x0a\x20\x20\x20\x20\x20\x20creator_id\x20TEXT\x20NOT\x20NULL,\x0a\x20\x20\x20\x20\x20\x20created_at_ms\x20INTEGER\x20NOT\x20NULL,\x0a\x20\x20\x20\x20\x20\x20soft_deleted_at_ms\x20INTEGER\x0a\x20\x20\x20\x20);');let _0x5ed011=_0x5a3cde['prepare']('SELECT\x20unit_id,\x20type,\x20head_revision,\x20soft_deleted_at_ms\x20FROM\x20collaboration_units\x20ORDER\x20BY\x20unit_id')['all'](),_0x3dea0a=_0x5a3cde['prepare']('INSERT\x20INTO\x20collaboration_units_v2\x20VALUES\x20(?,\x20?,\x20?,\x20?,\x20?,\x20?)');for(let _0x1f5027 of _0x5ed011){let _0x50c6d5=_0x486e08['resolveUnitCreation']?void 0x0:_0x428446(_0x1f5027['unit_id'],0x1),_0x392bf7=_0x486e08['resolveUnitCreation']?await _0x486e08['resolveUnitCreation'](_0x1f5027['unit_id']):{'creatorID':_0x50c6d5?.['user_id']||'anonymous','createdAt':E(_0x50c6d5?.['committed_at'])?_0x50c6d5['committed_at']:_0x50a430};if(!_0x392bf7||typeof _0x392bf7['creatorID']!='string'||_0x392bf7['creatorID']['length']===0x0||!Number['isSafeInteger'](_0x392bf7['createdAt'])||_0x392bf7['createdAt']<0x0)throw new l['CollabError']('INVALID_REQUEST','Missing\x20or\x20invalid\x20creation\x20facts\x20for\x20Unit\x20'+_0x1f5027['unit_id']);_0x3dea0a['run'](_0x1f5027['unit_id'],_0x1f5027['type'],_0x1f5027['head_revision'],_0x392bf7['creatorID'],_0x392bf7['createdAt'],_0x1f5027['soft_deleted_at_ms']);}_0x5a3cde['exec']('DROP\x20TABLE\x20collaboration_units;\x20ALTER\x20TABLE\x20collaboration_units_v2\x20RENAME\x20TO\x20collaboration_units;');for(let _0x1016f2 of _0x790fe4)_0x5a3cde['exec'](_0x1016f2['sql']);let _0x5d195=_0x5a3cde['prepare']('SELECT\x20sql\x20FROM\x20sqlite_schema\x20WHERE\x20type\x20=\x20\x27table\x27\x20AND\x20name\x20=\x20\x27collaboration_changesets\x27')['get'](),_0x150ce3=_0x5a3cde['prepare']('PRAGMA\x20table_info(collaboration_changesets)')['all']();if(_0x150ce3['some'](_0x330dd8=>_0x330dd8['name']==='created_at_ms'))throw new l['CollabError']('INVALID_REQUEST','Unexpected\x20changeset\x20creation-time\x20column\x20in\x20legacy\x20schema');let _0x28fa8c=_0x5a3cde['prepare']('SELECT\x20sql\x20FROM\x20sqlite_schema\x20WHERE\x20tbl_name\x20=\x20\x27collaboration_changesets\x27\x20AND\x20type\x20IN\x20(\x27index\x27,\x20\x27trigger\x27)\x20AND\x20sql\x20IS\x20NOT\x20NULL')['all']();_0x5a3cde['exec']('CREATE\x20TABLE\x20collaboration_changesets_new\x20(\x0a\x20\x20\x20\x20\x20\x20created_at_ms\x20INTEGER\x20NOT\x20NULL,\x0a\x20\x20\x20\x20\x20\x20'+_0x5d195['sql']['slice'](_0x5d195['sql']['indexOf']('(')+0x1));let _0x390b4a=_0x5a3cde['prepare']('SELECT\x20*\x20FROM\x20collaboration_changesets\x20ORDER\x20BY\x20unit_id,\x20revision')['all'](),_0xadaf72=_0x150ce3['map'](_0x44c488=>'\x22'+_0x44c488['name']['replaceAll']('\x22','\x22\x22')+'\x22')['join'](',\x20'),_0x2dc2a8=_0x5a3cde['prepare']('INSERT\x20INTO\x20collaboration_changesets_new\x20('+_0xadaf72+',\x20created_at_ms)\x20VALUES\x20('+_0x150ce3['map'](()=>'?')['join'](',\x20')+',\x20?)');for(let _0x2810a6 of _0x390b4a){let _0x4ca2f9=JSON['parse'](_0x2810a6['payload_json']),_0x5d418d=typeof _0x4ca2f9['createTime']=='number'?_0x4ca2f9['createTime']*0x3e8:void 0x0,_0xff7374=!_0x486e08['resolveChangesetCreatedAt']&&!E(_0x5d418d)?_0x428446(_0x2810a6['unit_id'],_0x2810a6['revision'])?.['committed_at']:void 0x0,_0x9b9790=_0x486e08['resolveChangesetCreatedAt']?await _0x486e08['resolveChangesetCreatedAt'](_0x2810a6['unit_id'],_0x2810a6['revision']):E(_0x5d418d)?_0x5d418d:E(_0xff7374)?_0xff7374:_0x50a430;if(!Number['isSafeInteger'](_0x9b9790)||_0x9b9790<0x0)throw new l['CollabError']('INVALID_REQUEST','Missing\x20or\x20invalid\x20changeset\x20time\x20for\x20Unit\x20'+_0x2810a6['unit_id']+'\x20revision\x20'+_0x2810a6['revision']);_0x4ca2f9['createTime']=Math['floor'](_0x9b9790/0x3e8),_0x2dc2a8['run'](..._0x150ce3['map'](_0x45dc4d=>_0x45dc4d['name']==='payload_json'?JSON['stringify'](_0x4ca2f9):_0x2810a6[_0x45dc4d['name']]),_0x9b9790);}_0x5a3cde['exec']('DROP\x20TABLE\x20collaboration_changesets;\x20ALTER\x20TABLE\x20collaboration_changesets_new\x20RENAME\x20TO\x20collaboration_changesets;');for(let _0x30a6f1 of _0x28fa8c)_0x5a3cde['exec'](_0x30a6f1['sql']);if(_0x5a3cde['prepare']('PRAGMA\x20foreign_key_check')['all']()['length']>0x0)throw new l['CollabError']('INVALID_REQUEST','Foreign\x20key\x20validation\x20failed\x20during\x20core\x20migration');_0x5a3cde['exec']('UPDATE\x20collaboration_schema_versions\x20SET\x20version\x20=\x202\x20WHERE\x20component\x20=\x20\x27core\x27;\x20COMMIT;'),_0x14b031=!0x1;}finally{try{_0x14b031&&_0x5a3cde['exec']('ROLLBACK;');}finally{_0x5a3cde['close']();}}}function E(_0x4f3c59){return typeof _0x4f3c59=='number'&&Number['isSafeInteger'](_0x4f3c59)&&_0x4f3c59>=0x0;}exports['SQLiteDatabaseAdapter']=h,exports['migrateSQLiteCoreV1ToV2']=T;
|
package/dist/index.d.ts
CHANGED
|
@@ -39,4 +39,12 @@ declare class SQLiteDatabaseAdapter implements IDatabaseAdapter {
|
|
|
39
39
|
private _assertOpen;
|
|
40
40
|
}
|
|
41
41
|
//#endregion
|
|
42
|
-
|
|
42
|
+
//#region src/migrations/v1-to-v2.d.ts
|
|
43
|
+
interface SQLiteCoreV1ToV2MigrationOptions {
|
|
44
|
+
readonly filename: string;
|
|
45
|
+
readonly resolveUnitCreation?: (unitID: string) => Pick<UnitRecord, "creatorID" | "createdAt"> | Promise<Pick<UnitRecord, "creatorID" | "createdAt">>;
|
|
46
|
+
readonly resolveChangesetCreatedAt?: (unitID: string, revision: number) => number | Promise<number>;
|
|
47
|
+
}
|
|
48
|
+
declare function migrateSQLiteCoreV1ToV2(options: SQLiteCoreV1ToV2MigrationOptions): Promise<void>;
|
|
49
|
+
//#endregion
|
|
50
|
+
export { type SQLiteCoreV1ToV2MigrationOptions, SQLiteDatabaseAdapter, type SQLiteDatabaseAdapterOptions, migrateSQLiteCoreV1ToV2 };
|
package/dist/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const
|
|
1
|
+
const _0xcab19d=_0x193b;(function(_0x20f623,_0x12241e){const _0x8e63f1=_0x193b,_0xdd03f=_0x20f623();while(!![]){try{const _0x37890e=parseInt(_0x8e63f1(0x14a))/0x1*(-parseInt(_0x8e63f1(0x14e))/0x2)+parseInt(_0x8e63f1(0x14c))/0x3*(parseInt(_0x8e63f1(0x151))/0x4)+-parseInt(_0x8e63f1(0x14b))/0x5*(-parseInt(_0x8e63f1(0x14d))/0x6)+-parseInt(_0x8e63f1(0x153))/0x7*(parseInt(_0x8e63f1(0x149))/0x8)+parseInt(_0x8e63f1(0x154))/0x9+-parseInt(_0x8e63f1(0x14f))/0xa*(parseInt(_0x8e63f1(0x150))/0xb)+parseInt(_0x8e63f1(0x147))/0xc;if(_0x37890e===_0x12241e)break;else _0xdd03f['push'](_0xdd03f['shift']());}catch(_0x27f3a7){_0xdd03f['push'](_0xdd03f['shift']());}}}(_0x29cf,0xc9695));function _0x193b(_0x205a1d,_0x1ed04a){_0x205a1d=_0x205a1d-0x147;const _0x29cfb6=_0x29cf();let _0x193b04=_0x29cfb6[_0x205a1d];return _0x193b04;}import _0x44a6ed from'./index.cjs';const facadeExport0=_0x44a6ed[_0xcab19d(0x152)],facadeExport1=_0x44a6ed[_0xcab19d(0x148)];export{facadeExport0 as SQLiteDatabaseAdapter,facadeExport1 as migrateSQLiteCoreV1ToV2};function _0x29cf(){const _0x70e865=['442895whVJXr','21otniyS','66wvOmbQ','4SMaGjU','1580CiwOPb','59070zEBLyf','106952eZXekh','SQLiteDatabaseAdapter','7doNMiO','4928823uwsZut','31441608fausSI','migrateSQLiteCoreV1ToV2','11275016elhgyV','623249ABjnEQ'];_0x29cf=function(){return _0x70e865;};return _0x29cf();}
|
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"engines": {
|
|
5
5
|
"node": ">=22"
|
|
6
6
|
},
|
|
7
|
-
"version": "1.0.0
|
|
7
|
+
"version": "1.0.0",
|
|
8
8
|
"main": "./dist/index.cjs",
|
|
9
9
|
"module": "./dist/index.mjs",
|
|
10
10
|
"types": "./dist/index.d.ts",
|
|
@@ -19,8 +19,8 @@
|
|
|
19
19
|
"dist"
|
|
20
20
|
],
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@univerjs-pro/collaboration-service": "1.0.0
|
|
23
|
-
"@univerjs/protocol": "1.0.0
|
|
22
|
+
"@univerjs-pro/collaboration-service": "1.0.0",
|
|
23
|
+
"@univerjs/protocol": "1.0.0",
|
|
24
24
|
"libsql": "^0.5.29"
|
|
25
25
|
}
|
|
26
26
|
}
|