@adonis-agora/collaboration 0.7.4 → 0.9.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.
Files changed (53) hide show
  1. package/CHANGELOG.md +96 -0
  2. package/README.md +1 -0
  3. package/dist/commands/collaboration_prune.d.ts +25 -0
  4. package/dist/commands/collaboration_prune.d.ts.map +1 -0
  5. package/dist/commands/collaboration_prune.js +59 -0
  6. package/dist/commands/collaboration_prune.js.map +1 -0
  7. package/dist/commands/commands.json +1 -1
  8. package/dist/configure.d.ts +1 -1
  9. package/dist/configure.js +1 -1
  10. package/dist/providers/collaboration_provider.d.ts.map +1 -1
  11. package/dist/providers/collaboration_provider.js +5 -2
  12. package/dist/providers/collaboration_provider.js.map +1 -1
  13. package/dist/src/collaboration_manager.d.ts +20 -1
  14. package/dist/src/collaboration_manager.d.ts.map +1 -1
  15. package/dist/src/collaboration_manager.js +28 -3
  16. package/dist/src/collaboration_manager.js.map +1 -1
  17. package/dist/src/documents.d.ts +3 -3
  18. package/dist/src/documents.d.ts.map +1 -1
  19. package/dist/src/documents.js.map +1 -1
  20. package/dist/src/drivers/automerge/automerge_driver.d.ts.map +1 -1
  21. package/dist/src/drivers/automerge/automerge_driver.js +24 -0
  22. package/dist/src/drivers/automerge/automerge_driver.js.map +1 -1
  23. package/dist/src/drivers/yjs/yjs_driver.d.ts.map +1 -1
  24. package/dist/src/drivers/yjs/yjs_driver.js +17 -2
  25. package/dist/src/drivers/yjs/yjs_driver.js.map +1 -1
  26. package/dist/src/index.d.ts +1 -1
  27. package/dist/src/index.d.ts.map +1 -1
  28. package/dist/src/index.js.map +1 -1
  29. package/dist/src/routes.d.ts.map +1 -1
  30. package/dist/src/routes.js +104 -36
  31. package/dist/src/routes.js.map +1 -1
  32. package/dist/src/storage/file_system_storage.d.ts +4 -1
  33. package/dist/src/storage/file_system_storage.d.ts.map +1 -1
  34. package/dist/src/storage/file_system_storage.js +42 -1
  35. package/dist/src/storage/file_system_storage.js.map +1 -1
  36. package/dist/src/storage/in_memory_storage.d.ts +2 -1
  37. package/dist/src/storage/in_memory_storage.d.ts.map +1 -1
  38. package/dist/src/storage/in_memory_storage.js +17 -0
  39. package/dist/src/storage/in_memory_storage.js.map +1 -1
  40. package/dist/src/storage/lucid_storage.d.ts +16 -6
  41. package/dist/src/storage/lucid_storage.d.ts.map +1 -1
  42. package/dist/src/storage/lucid_storage.js +102 -35
  43. package/dist/src/storage/lucid_storage.js.map +1 -1
  44. package/dist/src/storage/shared.d.ts +17 -0
  45. package/dist/src/storage/shared.d.ts.map +1 -0
  46. package/dist/src/storage/shared.js +21 -0
  47. package/dist/src/storage/shared.js.map +1 -0
  48. package/dist/src/types.d.ts +17 -0
  49. package/dist/src/types.d.ts.map +1 -1
  50. package/dist/stubs/collaboration/migrations/collab_comments.stub +4 -4
  51. package/dist/stubs/collaboration/migrations/collab_documents.stub +5 -5
  52. package/dist/stubs/collaboration/migrations/collab_versions.stub +9 -7
  53. package/package.json +19 -14
@@ -1,3 +1,6 @@
1
+ import { assertPruneKeep, versionsToPrune } from './shared.js';
2
+ /** Ids deleted per statement by `pruneVersions` — keeps the IN (...) sane. */
3
+ const PRUNE_BATCH_SIZE = 500;
1
4
  /**
2
5
  * Official Lucid storage — persists docs (binary state), versions and
3
6
  * anchored comments in tables of the app's database.
@@ -10,12 +13,13 @@
10
13
  * const manager = new CollaborationManager({ engine: 'yjs', storage, authorize })
11
14
  */
12
15
  export class LucidStorage {
13
- db;
14
16
  connection;
15
17
  ready = null;
16
- constructor(db, connection = 'entretextos') {
17
- this.db = db;
18
+ constructor(db, connection) {
18
19
  this.connection = connection;
20
+ // Tests pass a real or mocked db instance; if so, bypass lazy import.
21
+ if (db)
22
+ LucidStorage._db = db;
19
23
  }
20
24
  /** Ensures the tables lazily on demand — boot doesn't touch the database. */
21
25
  ensure() {
@@ -24,12 +28,20 @@ export class LucidStorage {
24
28
  }
25
29
  return this.ready;
26
30
  }
31
+ static _db = null;
27
32
  /** The lucid connection is a Knex instance (QueryClientContract extends the builder). */
28
- knex() {
29
- return this.db.connection(this.connection);
33
+ async knex() {
34
+ if (!LucidStorage._db) {
35
+ // Dynamic import em vez de static: o dbFacade do Lucid é *undefined* se
36
+ // importado na eval do módulo (antes do provider do Lucid bootar). O
37
+ // import dinâmico resolve no primeiro uso, quando o app já está bootado.
38
+ const mod = await import('@adonisjs/lucid/services/db');
39
+ LucidStorage._db = mod.default;
40
+ }
41
+ return LucidStorage._db.connection(this.connection);
30
42
  }
31
43
  async ensureSchema() {
32
- const knex = this.knex();
44
+ const knex = await this.knex();
33
45
  const schema = knex.schema.createTableIfNotExists('collab_documents', (t) => {
34
46
  t.string('doc_name').primary();
35
47
  t.binary('state');
@@ -43,6 +55,9 @@ export class LucidStorage {
43
55
  t.string('created_by').nullable();
44
56
  t.string('label').nullable();
45
57
  t.integer('seq');
58
+ // The document's bytes at the moment the version was created — without
59
+ // it a restore would replay the CURRENT state, which is a no-op.
60
+ t.binary('snapshot').nullable();
46
61
  t.timestamp('created_at', { useTz: true });
47
62
  t.primary(['doc_name', 'id']);
48
63
  });
@@ -59,29 +74,40 @@ export class LucidStorage {
59
74
  t.timestamp('updated_at', { useTz: true }).nullable();
60
75
  t.index(['doc_name', 'space']);
61
76
  });
62
- await Promise.all([schema, versions, comments]);
77
+ // `createTableIfNotExists` skips the CREATE TABLE when the table is there
78
+ // but still emits its CREATE INDEX as a separate statement — which fails
79
+ // ("relation already exists") for an app that ran the published
80
+ // migrations. So only the builders for missing tables are executed; knex
81
+ // builders are lazy, nothing runs until they are awaited.
82
+ const present = await Promise.all([
83
+ knex.schema.hasTable('collab_documents'),
84
+ knex.schema.hasTable('collab_versions'),
85
+ knex.schema.hasTable('collab_comments'),
86
+ ]);
87
+ await Promise.all([schema, versions, comments].filter((_, index) => !present[index]));
63
88
  }
64
89
  async loadDocument(docName) {
65
90
  await this.ensure();
66
- const row = await this.knex().from('collab_documents').where('doc_name', docName).first();
91
+ const row = await (await this.knex()).from('collab_documents').where('doc_name', docName).first();
67
92
  if (!row?.state)
68
93
  return null;
69
94
  return { state: new Uint8Array(row.state) };
70
95
  }
71
96
  async saveDocument(docName, state, meta) {
72
97
  await this.ensure();
73
- const existing = await this.knex().from('collab_documents').where('doc_name', docName).first();
98
+ const knex = await this.knex();
99
+ const existing = await knex.from('collab_documents').where('doc_name', docName).first();
74
100
  const payload = {
75
101
  state: Buffer.from(state),
76
102
  meta: meta ?? null,
77
103
  updated_at: new Date(),
78
104
  };
79
105
  if (existing) {
80
- await this.knex().from('collab_documents').where('doc_name', docName).update(payload);
106
+ await knex.from('collab_documents').where('doc_name', docName).update(payload);
81
107
  }
82
108
  else {
83
- await this.knex()
84
- .from('collab_documents')
109
+ await knex
110
+ .table('collab_documents')
85
111
  .insert({
86
112
  doc_name: docName,
87
113
  ...payload,
@@ -91,7 +117,8 @@ export class LucidStorage {
91
117
  }
92
118
  async listVersions(docName) {
93
119
  await this.ensure();
94
- const rows = await this.knex()
120
+ const knex = await this.knex();
121
+ const rows = await knex
95
122
  .from('collab_versions')
96
123
  .where('doc_name', docName)
97
124
  .orderBy('seq', 'asc');
@@ -103,28 +130,73 @@ export class LucidStorage {
103
130
  createdAt: row.created_at?.toISOString?.() ?? String(row.created_at),
104
131
  }));
105
132
  }
106
- async saveVersion(docName, version, _snapshot) {
133
+ async saveVersion(docName, version, snapshot) {
107
134
  await this.ensure();
108
- await this.knex()
109
- .from('collab_versions')
135
+ await (await this.knex())
136
+ .table('collab_versions')
110
137
  .insert({
111
138
  doc_name: docName,
112
139
  id: version.id,
113
140
  created_by: version.createdBy,
114
141
  label: version.label,
115
142
  seq: version.seq,
143
+ snapshot: Buffer.from(snapshot),
116
144
  created_at: new Date(version.createdAt),
117
145
  })
118
146
  .onConflict(['doc_name', 'id'])
119
147
  .ignore();
120
148
  }
121
- async loadVersionSnapshot(docName, _versionId) {
122
- const doc = await this.loadDocument(docName);
123
- return doc?.state ?? null;
149
+ async loadVersionSnapshot(docName, versionId) {
150
+ await this.ensure();
151
+ const row = await (await this.knex())
152
+ .from('collab_versions')
153
+ .where('doc_name', docName)
154
+ .andWhere('id', versionId)
155
+ .first();
156
+ if (!row)
157
+ return null;
158
+ if (!row.snapshot)
159
+ return (await this.loadDocument(docName))?.state ?? null;
160
+ return new Uint8Array(row.snapshot);
161
+ }
162
+ async pruneVersions({ keep, docName, dryRun }) {
163
+ assertPruneKeep(keep);
164
+ await this.ensure();
165
+ const knex = await this.knex();
166
+ let query = knex.from('collab_versions').select('doc_name', 'id', 'seq');
167
+ if (docName)
168
+ query = query.where('doc_name', docName);
169
+ const rows = (await query);
170
+ const perDocument = new Map();
171
+ for (const row of rows) {
172
+ const group = perDocument.get(row.doc_name) ?? [];
173
+ group.push({ id: row.id, seq: row.seq });
174
+ perDocument.set(row.doc_name, group);
175
+ }
176
+ let removed = 0;
177
+ for (const [name, versions] of perDocument) {
178
+ const doomed = versionsToPrune(versions, keep);
179
+ if (doomed.length === 0)
180
+ continue;
181
+ if (dryRun) {
182
+ removed += doomed.length;
183
+ continue;
184
+ }
185
+ for (let index = 0; index < doomed.length; index += PRUNE_BATCH_SIZE) {
186
+ const batch = doomed.slice(index, index + PRUNE_BATCH_SIZE).map((version) => version.id);
187
+ removed += await knex
188
+ .from('collab_versions')
189
+ .where('doc_name', name)
190
+ .whereIn('id', batch)
191
+ .delete();
192
+ }
193
+ }
194
+ return removed;
124
195
  }
125
196
  async listComments(docName, space) {
126
197
  await this.ensure();
127
- let query = this.knex().from('collab_comments').where('doc_name', docName);
198
+ const knex = await this.knex();
199
+ let query = knex.from('collab_comments').where('doc_name', docName);
128
200
  if (space)
129
201
  query = query.where('space', space);
130
202
  const rows = await query;
@@ -143,7 +215,8 @@ export class LucidStorage {
143
215
  }
144
216
  async saveComment(docName, comment) {
145
217
  await this.ensure();
146
- const existing = await this.knex().from('collab_comments').where('id', comment.id).first();
218
+ const knex = await this.knex();
219
+ const existing = await knex.from('collab_comments').where('id', comment.id).first();
147
220
  const payload = {
148
221
  doc_name: comment.documentName,
149
222
  space: comment.space,
@@ -155,11 +228,11 @@ export class LucidStorage {
155
228
  updated_at: new Date(),
156
229
  };
157
230
  if (existing) {
158
- await this.knex().from('collab_comments').where('id', comment.id).update(payload);
231
+ await knex.from('collab_comments').where('id', comment.id).update(payload);
159
232
  }
160
233
  else {
161
- await this.knex()
162
- .from('collab_comments')
234
+ await knex
235
+ .table('collab_comments')
163
236
  .insert({
164
237
  id: comment.id,
165
238
  ...payload,
@@ -170,26 +243,20 @@ export class LucidStorage {
170
243
  }
171
244
  async deleteComment(docName, commentId) {
172
245
  await this.ensure();
173
- await this.knex().from('collab_comments').where('id', commentId).delete();
246
+ await (await this.knex()).from('collab_comments').where('id', commentId).delete();
174
247
  void docName;
175
248
  }
176
249
  }
177
250
  /**
178
- * Factory para config — resolve o `db` do facade do Lucid de dentro,
179
- * imitando `stores.lucid({ connection })` do @adonis-agora/durable. O app
180
- * não precisa mais `import db from '@adonisjs/lucid/services/db'`.
251
+ * Factory para config — o `LucidStorage` agora resolve o fachada do Lucid
252
+ * LAZY (import dinâmico no primeiro `ensure()`), então o config pode chamá-lo
253
+ * sem se preocupar com a ordem de boot dos providers.
181
254
  *
182
255
  * @example
183
256
  * // config/collaboration.ts
184
257
  * storage: lucidStorage({ connection: 'entretextos' })
185
258
  */
186
- /**
187
- * Síncrono de propósito: chamado no topo do config (sem await). Resolve o
188
- * facade do Lucid via import estático — o app precisa de @adonisjs/lucid
189
- * instalado, que é o caso quando usa lucidStorage.
190
- */
191
- import dbFacade from '@adonisjs/lucid/services/db';
192
259
  export function lucidStorage(options = {}) {
193
- return new LucidStorage(dbFacade, options.connection);
260
+ return new LucidStorage(undefined, options.connection);
194
261
  }
195
262
  //# sourceMappingURL=lucid_storage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"lucid_storage.js","sourceRoot":"","sources":["../../../src/storage/lucid_storage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lucid_storage.js","sourceRoot":"","sources":["../../../src/storage/lucid_storage.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAW/D,8EAA8E;AAC9E,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAE7B;;;;;;;;;;GAUG;AACH,MAAM,OAAO,YAAY;IAKb;IAJF,KAAK,GAAyB,IAAI,CAAC;IAE3C,YACE,EAAwB,EAChB,UAAmB;QAAnB,eAAU,GAAV,UAAU,CAAS;QAE3B,sEAAsE;QACtE,IAAI,EAAE;YAAE,YAAY,CAAC,GAAG,GAAG,EAAE,CAAC;IAChC,CAAC;IAED,6EAA6E;IACrE,MAAM;QACZ,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACnC,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAEO,MAAM,CAAC,GAAG,GAA+B,IAAI,CAAC;IAEtD,yFAAyF;IACjF,KAAK,CAAC,IAAI;QAChB,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC;YACtB,wEAAwE;YACxE,qEAAqE;YACrE,yEAAyE;YACzE,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,6BAA6B,CAAC,CAAC;YACxD,YAAY,CAAC,GAAG,GAAG,GAAG,CAAC,OAAyC,CAAC;QACnE,CAAC;QACD,OAAO,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAoB,CAAC;IACzE,CAAC;IAEO,KAAK,CAAC,YAAY;QACxB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAE/B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,kBAAkB,EAAE,CAAC,CAAC,EAAE,EAAE;YAC1E,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CAAC;YAC/B,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAClB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;YAC3B,CAAC,CAAC,SAAS,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3C,CAAC,CAAC,SAAS,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,iBAAiB,EAAE,CAAC,CAAC,EAAE,EAAE;YAC3E,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACrB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACf,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC;YAClC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;YAC7B,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,uEAAuE;YACvE,iEAAiE;YACjE,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE,CAAC;YAChC,CAAC,CAAC,SAAS,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3C,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,iBAAiB,EAAE,CAAC,CAAC,EAAE,EAAE;YAC3E,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;YACzB,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACrB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YACpC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAClB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACf,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACpB,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,QAAQ,EAAE,CAAC;YACnC,CAAC,CAAC,SAAS,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;YACvD,CAAC,CAAC,SAAS,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3C,CAAC,CAAC,SAAS,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;YACtD,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,0EAA0E;QAC1E,yEAAyE;QACzE,gEAAgE;QAChE,yEAAyE;QACzE,0DAA0D;QAC1D,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAChC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC;YACxC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YACvC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC;SACxC,CAAC,CAAC;QACH,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACxF,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,OAAe;QAChC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QACpB,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC;QAClG,IAAI,CAAC,GAAG,EAAE,KAAK;YAAE,OAAO,IAAI,CAAC;QAC7B,OAAO,EAAE,KAAK,EAAE,IAAI,UAAU,CAAC,GAAG,CAAC,KAAe,CAAC,EAAE,CAAC;IACxD,CAAC;IAED,KAAK,CAAC,YAAY,CAChB,OAAe,EACf,KAAiB,EACjB,IAA8B;QAE9B,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QACpB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC;QACxF,MAAM,OAAO,GAAG;YACd,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;YACzB,IAAI,EAAE,IAAI,IAAI,IAAI;YAClB,UAAU,EAAE,IAAI,IAAI,EAAE;SACvB,CAAC;QACF,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACjF,CAAC;aAAM,CAAC;YACN,MAAM,IAAI;iBACP,KAAK,CAAC,kBAAkB,CAAC;iBACzB,MAAM,CAAC;gBACN,QAAQ,EAAE,OAAO;gBACjB,GAAG,OAAO;gBACV,UAAU,EAAE,IAAI,IAAI,EAAE;aACvB,CAAC,CAAC;QACP,CAAC;IACH,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,OAAe;QAChC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QACpB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,MAAM,IAAI;aACpB,IAAI,CAAC,iBAAiB,CAAC;aACvB,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC;aAC1B,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACzB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACxB,EAAE,EAAE,GAAG,CAAC,EAAY;YACpB,SAAS,EAAG,GAAG,CAAC,UAA4B,IAAI,IAAI;YACpD,KAAK,EAAG,GAAG,CAAC,KAAuB,IAAI,IAAI;YAC3C,GAAG,EAAE,GAAG,CAAC,GAAa;YACtB,SAAS,EAAG,GAAG,CAAC,UAAmB,EAAE,WAAW,EAAE,EAAE,IAAI,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC;SAC/E,CAAC,CAAC,CAAC;IACN,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAe,EAAE,OAAsB,EAAE,QAAoB;QAC7E,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QACpB,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;aACtB,KAAK,CAAC,iBAAiB,CAAC;aACxB,MAAM,CAAC;YACN,QAAQ,EAAE,OAAO;YACjB,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,UAAU,EAAE,OAAO,CAAC,SAAS;YAC7B,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;YAC/B,UAAU,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;SACxC,CAAC;aACD,UAAU,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;aAC9B,MAAM,EAAE,CAAC;IACd,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,OAAe,EAAE,SAAiB;QAC1D,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QACpB,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;aAClC,IAAI,CAAC,iBAAiB,CAAC;aACvB,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC;aAC1B,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;aACzB,KAAK,EAAE,CAAC;QACX,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,IAAI,CAAC,GAAG,CAAC,QAAQ;YAAE,OAAO,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC;QAC5E,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,QAAkB,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAwB;QACjE,eAAe,CAAC,IAAI,CAAC,CAAC;QACtB,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QAEpB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAC/B,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QACzE,IAAI,OAAO;YAAE,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACtD,MAAM,IAAI,GAAG,CAAC,MAAM,KAAK,CAAyD,CAAC;QAEnF,MAAM,WAAW,GAAG,IAAI,GAAG,EAA8C,CAAC;QAC1E,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YAClD,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;YACzC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACvC,CAAC;QAED,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,WAAW,EAAE,CAAC;YAC3C,MAAM,MAAM,GAAG,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAC/C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YAClC,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC;gBACzB,SAAS;YACX,CAAC;YACD,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,IAAI,gBAAgB,EAAE,CAAC;gBACrE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBACzF,OAAO,IAAI,MAAM,IAAI;qBAClB,IAAI,CAAC,iBAAiB,CAAC;qBACvB,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC;qBACvB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;qBACpB,MAAM,EAAE,CAAC;YACd,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,OAAe,EAAE,KAAc;QAChD,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QACpB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAC/B,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACpE,IAAI,KAAK;YAAE,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC/C,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC;QACzB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACxB,EAAE,EAAE,GAAG,CAAC,EAAY;YACpB,YAAY,EAAE,GAAG,CAAC,QAAkB;YACpC,KAAK,EAAG,GAAG,CAAC,KAAgB,IAAI,MAAM;YACtC,MAAM,EAAE,GAAG,CAAC,MAAiC;YAC7C,IAAI,EAAE,GAAG,CAAC,IAAc;YACxB,MAAM,EAAE,GAAG,CAAC,OAAiB;YAC7B,UAAU,EAAG,GAAG,CAAC,WAA6B,IAAI,IAAI;YACtD,UAAU,EAAG,GAAG,CAAC,WAA2B,EAAE,WAAW,EAAE,EAAE,IAAI,GAAG,CAAC,WAAW,IAAI,IAAI;YACxF,SAAS,EAAG,GAAG,CAAC,UAAmB,EAAE,WAAW,EAAE,EAAE,IAAI,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC;YAC9E,SAAS,EAAG,GAAG,CAAC,UAA0B,EAAE,WAAW,EAAE,EAAE,IAAI,GAAG,CAAC,UAAU,IAAI,IAAI;SACtF,CAAC,CAAC,CAAC;IACN,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAe,EAAE,OAAsB;QACvD,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QACpB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;QACpF,MAAM,OAAO,GAAG;YACd,QAAQ,EAAE,OAAO,CAAC,YAAY;YAC9B,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,OAAO,EAAE,OAAO,CAAC,MAAM;YACvB,WAAW,EAAE,OAAO,CAAC,UAAU,IAAI,IAAI;YACvC,WAAW,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI;YACrE,UAAU,EAAE,IAAI,IAAI,EAAE;SACvB,CAAC;QACF,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC7E,CAAC;aAAM,CAAC;YACN,MAAM,IAAI;iBACP,KAAK,CAAC,iBAAiB,CAAC;iBACxB,MAAM,CAAC;gBACN,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,GAAG,OAAO;gBACV,UAAU,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;aACxC,CAAC,CAAC;QACP,CAAC;QACD,KAAK,OAAO,CAAC;IACf,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,OAAe,EAAE,SAAiB;QACpD,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QACpB,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,MAAM,EAAE,CAAC;QAClF,KAAK,OAAO,CAAC;IACf,CAAC;;AAGH;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,UAAmC,EAAE;IAChE,OAAO,IAAI,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;AACzD,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Pure helpers shared by every storage implementation. Nothing here touches a
3
+ * backend — it is the validation the three built-ins (and any custom storage)
4
+ * run before deleting anything.
5
+ */
6
+ /**
7
+ * Guards `pruneVersions`. `keep: 0` is a legitimate "delete every version",
8
+ * so the check has to reject the *accidents* instead: a negative number, a
9
+ * fraction, `NaN` from a mis-parsed flag. Silently treating those as zero
10
+ * would wipe the history the caller meant to keep.
11
+ */
12
+ export declare function assertPruneKeep(keep: number): void;
13
+ /** The versions to delete: everything past the `keep` most recent ones. */
14
+ export declare function versionsToPrune<T extends {
15
+ seq: number;
16
+ }>(versions: T[], keep: number): T[];
17
+ //# sourceMappingURL=shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/storage/shared.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAMlD;AAED,2EAA2E;AAC3E,wBAAgB,eAAe,CAAC,CAAC,SAAS;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,EAAE,CAE3F"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Pure helpers shared by every storage implementation. Nothing here touches a
3
+ * backend — it is the validation the three built-ins (and any custom storage)
4
+ * run before deleting anything.
5
+ */
6
+ /**
7
+ * Guards `pruneVersions`. `keep: 0` is a legitimate "delete every version",
8
+ * so the check has to reject the *accidents* instead: a negative number, a
9
+ * fraction, `NaN` from a mis-parsed flag. Silently treating those as zero
10
+ * would wipe the history the caller meant to keep.
11
+ */
12
+ export function assertPruneKeep(keep) {
13
+ if (!Number.isInteger(keep) || keep < 0) {
14
+ throw new Error(`[@adonis-agora/collaboration] pruneVersions requires \`keep\` to be a non-negative integer — received ${String(keep)}`);
15
+ }
16
+ }
17
+ /** The versions to delete: everything past the `keep` most recent ones. */
18
+ export function versionsToPrune(versions, keep) {
19
+ return [...versions].sort((a, b) => b.seq - a.seq).slice(keep);
20
+ }
21
+ //# sourceMappingURL=shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/storage/shared.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CACb,yGAAyG,MAAM,CAAC,IAAI,CAAC,EAAE,CACxH,CAAC;IACJ,CAAC;AACH,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,eAAe,CAA4B,QAAa,EAAE,IAAY;IACpF,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACjE,CAAC"}
@@ -107,6 +107,18 @@ export interface CollabDiffSummary {
107
107
  added: number;
108
108
  removed: number;
109
109
  }
110
+ /** Options of {@link CollaborationStorage.pruneVersions}. */
111
+ export interface PruneVersionsOptions {
112
+ /**
113
+ * How many versions to keep **per document**. A busy document never evicts
114
+ * another document's history. `0` deletes every version.
115
+ */
116
+ keep: number;
117
+ /** Narrows the prune to a single document. Omitted prunes every document. */
118
+ docName?: string;
119
+ /** Count what would be removed without deleting anything. */
120
+ dryRun?: boolean;
121
+ }
110
122
  /**
111
123
  * Persistence of documents + versions + comments. The host app implements
112
124
  * this (database, S3...) and the library only knows the interface.
@@ -119,6 +131,11 @@ export interface CollaborationStorage {
119
131
  listVersions(docName: string): Promise<CollabVersion[]>;
120
132
  saveVersion(docName: string, version: CollabVersion, snapshot: Uint8Array): Promise<void>;
121
133
  loadVersionSnapshot(docName: string, versionId: string): Promise<Uint8Array | null>;
134
+ /**
135
+ * Delete all but the `keep` most recent versions, per document. Returns how
136
+ * many versions were removed (or would be, with `dryRun`).
137
+ */
138
+ pruneVersions(options: PruneVersionsOptions): Promise<number>;
122
139
  /** Comments of a document (by space). */
123
140
  listComments(docName: string, space?: string): Promise<CollabComment[]>;
124
141
  saveComment(docName: string, comment: CollabComment): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;;;;GAMG;AACH,MAAM,MAAM,mBAAmB,GAAG,KAAK,GAAG,WAAW,GAAG,UAAU,GAAG,aAAa,CAAC;AAEnF;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,+EAA+E;IAC/E,QAAQ,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mEAAmE;IACnE,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;GAIG;AACH,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GACxE;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAChF;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpD,qEAAqE;AACrE,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,qEAAqE;IACrE,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,aAAa,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,mEAAmE;AACnE,MAAM,WAAW,uBAAuB;IACtC,kFAAkF;IAClF,MAAM,EAAE,MAAM,CAAC;IACf,sDAAsD;IACtD,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;CACrD;AAED,yDAAyD;AACzD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,sDAAsD;IACtD,QAAQ,EAAE,OAAO,CAAC;IAClB,4DAA4D;IAC5D,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,mDAAmD;AACnD,MAAM,WAAW,oBAAoB;IACnC,gEAAgE;IAChE,KAAK,EAAE,UAAU,CAAC;IAClB,gFAAgF;IAChF,MAAM,EAAE,UAAU,CAAC;CACpB;AAED,oDAAoD;AACpD,MAAM,WAAW,aAAa;IAC5B,uEAAuE;IACvE,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,+CAA+C;IAC/C,GAAG,EAAE,MAAM,CAAC;CACb;AAED,4CAA4C;AAC5C,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,UAAU,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IACrE,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChG,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IACxD,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1F,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IACpF,yCAAyC;IACzC,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IACxE,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAClE;AAED,6BAA6B;AAC7B,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,mBAAmB,CAAC;IAC5B;;;;OAIG;IACH,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACpF;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,gBAAgB,EAAE,yBAAyB,CAAC,GAAG,CAAC,CAAC,CAAC;IACpF,2EAA2E;IAC3E,OAAO,CAAC,EAAE,oBAAoB,CAAC;IAC/B;;;OAGG;IACH;;;;OAIG;IACH,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,uBAAuB,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACzF,2EAA2E;IAC3E,KAAK,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IACxB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,4DAA4D;IAC5D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
@@ -8,18 +8,18 @@ export default class extends BaseSchema {
8
8
 
9
9
  async up() {
10
10
  this.schema.createTable(this.tableName, (table) => {
11
- table.uuid('id').primary()
12
- table.string('document_name').notNullable()
11
+ table.string('id').primary()
12
+ table.string('doc_name').notNullable()
13
13
  table.string('space').notNullable().defaultTo('text')
14
14
  table.jsonb('anchor').notNullable()
15
15
  table.text('body').notNullable()
16
16
  table.string('user_id').notNullable()
17
17
  table.string('author_name').nullable()
18
18
  table.timestamp('resolved_at', { useTz: true }).nullable()
19
- table.timestamp('created_at', { useTz: true }).notNullable()
19
+ table.timestamp('created_at', { useTz: true })
20
20
  table.timestamp('updated_at', { useTz: true }).nullable()
21
21
 
22
- table.index(['document_name', 'space'])
22
+ table.index(['doc_name', 'space'])
23
23
  })
24
24
  }
25
25
 
@@ -8,12 +8,12 @@ export default class extends BaseSchema {
8
8
 
9
9
  async up() {
10
10
  this.schema.createTable(this.tableName, (table) => {
11
- table.uuid('id').primary()
12
- table.string('name').notNullable().unique()
13
- table.string('engine').notNullable().defaultTo('yjs')
11
+ // The document name is the identity — 'researches/42/writing'.
12
+ table.string('doc_name').primary()
13
+ table.binary('state').nullable()
14
14
  table.jsonb('meta').nullable()
15
- table.timestamp('created_at', { useTz: true }).notNullable()
16
- table.timestamp('updated_at', { useTz: true }).notNullable()
15
+ table.timestamp('created_at', { useTz: true })
16
+ table.timestamp('updated_at', { useTz: true })
17
17
  })
18
18
  }
19
19
 
@@ -8,15 +8,17 @@ export default class extends BaseSchema {
8
8
 
9
9
  async up() {
10
10
  this.schema.createTable(this.tableName, (table) => {
11
- table.uuid('id').primary()
12
- table.string('document_name').notNullable()
13
- table.integer('seq').notNullable()
14
- table.string('label').nullable()
11
+ table.string('doc_name').notNullable()
12
+ table.string('id').notNullable()
15
13
  table.string('created_by').nullable()
16
- table.binary('snapshot').notNullable()
17
- table.timestamp('created_at', { useTz: true }).notNullable()
14
+ table.string('label').nullable()
15
+ table.integer('seq').notNullable()
16
+ // The document's bytes at the moment the version was created.
17
+ table.binary('snapshot').nullable()
18
+ table.timestamp('created_at', { useTz: true })
18
19
 
19
- table.index(['document_name', 'seq'])
20
+ table.primary(['doc_name', 'id'])
21
+ table.index(['doc_name', 'seq'])
20
22
  })
21
23
  }
22
24
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adonis-agora/collaboration",
3
- "version": "0.7.4",
3
+ "version": "0.9.0",
4
4
  "description": "Collaborative editing (CRDT) for AdonisJS 7 — Yjs (Hocuspocus) and Automerge drivers, Redis-backed presence, unified version control. Part of the Agora ecosystem.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -85,17 +85,6 @@
85
85
  "CHANGELOG.md"
86
86
  ],
87
87
  "sideEffects": false,
88
- "scripts": {
89
- "build": "pnpm run clean && tsc -p tsconfig.build.json && pnpm run build:commands && pnpm run copy:stubs",
90
- "check:dist": "node ../../scripts/assert-build-output.mjs dist src/index.js",
91
- "clean": "rm -rf dist",
92
- "build:commands": "node ./scripts/build-commands.mjs",
93
- "copy:stubs": "mkdir -p dist/stubs/config dist/stubs/partykit/worker dist/stubs/collaboration/migrations && cp stubs/main.ts dist/stubs/main.js && cp stubs/config/collaboration.stub dist/stubs/config/collaboration.stub && cp stubs/partykit/worker/*.stub dist/stubs/partykit/worker/ && cp stubs/collaboration/*.stub dist/stubs/collaboration/ && cp stubs/collaboration/migrations/*.stub dist/stubs/collaboration/migrations/",
94
- "prepack": "pnpm run check:dist",
95
- "test": "vitest run --passWithNoTests",
96
- "test:watch": "vitest",
97
- "typecheck": "tsc -p tsconfig.json --noEmit"
98
- },
99
88
  "dependencies": {
100
89
  "@automerge/automerge": "^3.4.1",
101
90
  "@hocuspocus/server": "^4.6.0",
@@ -122,8 +111,13 @@
122
111
  "@adonisjs/core": "7.5.0",
123
112
  "@adonisjs/lucid": "22.4.2",
124
113
  "@swc/core": "1.15.47",
114
+ "@testcontainers/postgresql": "^12.1.0",
115
+ "@types/luxon": "^3.7.5",
125
116
  "@types/node": "22.20.1",
117
+ "@types/pg": "^8.23.1",
126
118
  "@types/ws": "8.18.1",
119
+ "luxon": "^3.7.2",
120
+ "pg": "^8.23.0",
127
121
  "typescript": "5.9.3",
128
122
  "unplugin-swc": "1.5.11",
129
123
  "vitest": "3.2.7"
@@ -141,5 +135,16 @@
141
135
  "websocket",
142
136
  "realtime",
143
137
  "agora"
144
- ]
145
- }
138
+ ],
139
+ "scripts": {
140
+ "build": "pnpm run clean && tsc -p tsconfig.build.json && pnpm run build:commands && pnpm run copy:stubs",
141
+ "check:dist": "node ../../scripts/assert-build-output.mjs dist src/index.js",
142
+ "clean": "rm -rf dist",
143
+ "build:commands": "node ./scripts/build-commands.mjs",
144
+ "copy:stubs": "mkdir -p dist/stubs/config dist/stubs/partykit/worker dist/stubs/collaboration/migrations && cp stubs/main.ts dist/stubs/main.js && cp stubs/config/collaboration.stub dist/stubs/config/collaboration.stub && cp stubs/partykit/worker/*.stub dist/stubs/partykit/worker/ && cp stubs/collaboration/*.stub dist/stubs/collaboration/ && cp stubs/collaboration/migrations/*.stub dist/stubs/collaboration/migrations/",
145
+ "test": "vitest run --passWithNoTests",
146
+ "test:integration": "vitest run -c vitest.integration.config.ts",
147
+ "test:watch": "vitest",
148
+ "typecheck": "tsc -p tsconfig.json --noEmit"
149
+ }
150
+ }