@adonis-agora/collaboration 0.1.4 → 0.2.1
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/CHANGELOG.md +24 -0
- package/README.md +172 -0
- package/dist/commands/collaboration_init.d.ts +26 -0
- package/dist/commands/collaboration_init.d.ts.map +1 -0
- package/dist/commands/collaboration_init.js +83 -0
- package/dist/commands/collaboration_init.js.map +1 -0
- package/dist/commands/commands.json +1 -0
- package/dist/commands/main.d.ts +16 -0
- package/dist/commands/main.d.ts.map +1 -0
- package/dist/commands/main.js +20 -0
- package/dist/commands/main.js.map +1 -0
- package/dist/commands/make_collab_document.d.ts +23 -0
- package/dist/commands/make_collab_document.d.ts.map +1 -0
- package/dist/commands/make_collab_document.js +75 -0
- package/dist/commands/make_collab_document.js.map +1 -0
- package/dist/configure.d.ts +3 -1
- package/dist/configure.d.ts.map +1 -1
- package/dist/configure.js +6 -1
- package/dist/configure.js.map +1 -1
- package/dist/providers/collaboration_provider.d.ts +6 -2
- package/dist/providers/collaboration_provider.d.ts.map +1 -1
- package/dist/providers/collaboration_provider.js +36 -17
- package/dist/providers/collaboration_provider.js.map +1 -1
- package/dist/src/auth/token.d.ts +59 -0
- package/dist/src/auth/token.d.ts.map +1 -0
- package/dist/src/auth/token.js +91 -0
- package/dist/src/auth/token.js.map +1 -0
- package/dist/src/codegen/documents_registry.d.ts +28 -0
- package/dist/src/codegen/documents_registry.d.ts.map +1 -0
- package/dist/src/codegen/documents_registry.js +50 -0
- package/dist/src/codegen/documents_registry.js.map +1 -0
- package/dist/src/codegen_init.d.ts +3 -0
- package/dist/src/codegen_init.d.ts.map +1 -0
- package/dist/src/codegen_init.js +45 -0
- package/dist/src/codegen_init.js.map +1 -0
- package/dist/src/collaboration_manager.d.ts +20 -11
- package/dist/src/collaboration_manager.d.ts.map +1 -1
- package/dist/src/collaboration_manager.js +46 -17
- package/dist/src/collaboration_manager.js.map +1 -1
- package/dist/src/define_config.d.ts +25 -6
- package/dist/src/define_config.d.ts.map +1 -1
- package/dist/src/define_config.js +2 -2
- package/dist/src/define_config.js.map +1 -1
- package/dist/src/driver.d.ts +26 -32
- package/dist/src/driver.d.ts.map +1 -1
- package/dist/src/drivers/automerge/automerge_driver.d.ts +7 -12
- package/dist/src/drivers/automerge/automerge_driver.d.ts.map +1 -1
- package/dist/src/drivers/automerge/automerge_driver.js +37 -75
- package/dist/src/drivers/automerge/automerge_driver.js.map +1 -1
- package/dist/src/drivers/partykit/partykit_driver.d.ts +54 -0
- package/dist/src/drivers/partykit/partykit_driver.d.ts.map +1 -0
- package/dist/src/drivers/partykit/partykit_driver.js +162 -0
- package/dist/src/drivers/partykit/partykit_driver.js.map +1 -0
- package/dist/src/drivers/shared.d.ts +17 -0
- package/dist/src/drivers/shared.d.ts.map +1 -0
- package/dist/src/drivers/shared.js +46 -0
- package/dist/src/drivers/shared.js.map +1 -0
- package/dist/src/drivers/yjs/yjs_driver.d.ts +18 -12
- package/dist/src/drivers/yjs/yjs_driver.d.ts.map +1 -1
- package/dist/src/drivers/yjs/yjs_driver.js +50 -94
- package/dist/src/drivers/yjs/yjs_driver.js.map +1 -1
- package/dist/src/http/types.d.ts +79 -0
- package/dist/src/http/types.d.ts.map +1 -0
- package/dist/src/http/types.js +8 -0
- package/dist/src/http/types.js.map +1 -0
- package/dist/src/index.d.ts +7 -3
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +7 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/routes.d.ts +29 -0
- package/dist/src/routes.d.ts.map +1 -0
- package/dist/src/routes.js +189 -0
- package/dist/src/routes.js.map +1 -0
- package/dist/src/services/booted_app.js +1 -1
- package/dist/src/services/booted_app.js.map +1 -1
- package/dist/src/services/comment_service.d.ts +5 -4
- package/dist/src/services/comment_service.d.ts.map +1 -1
- package/dist/src/services/comment_service.js +5 -4
- package/dist/src/services/comment_service.js.map +1 -1
- package/dist/src/services/main.js +2 -2
- package/dist/src/services/main.js.map +1 -1
- package/dist/src/storage/file_system_storage.d.ts +2 -2
- package/dist/src/storage/file_system_storage.js +2 -2
- package/dist/src/storage/in_memory_storage.d.ts +3 -3
- package/dist/src/storage/in_memory_storage.js +3 -3
- package/dist/src/storage/lucid_storage.d.ts +9 -8
- package/dist/src/storage/lucid_storage.d.ts.map +1 -1
- package/dist/src/storage/lucid_storage.js +13 -12
- package/dist/src/storage/lucid_storage.js.map +1 -1
- package/dist/src/types.d.ts +62 -35
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js +5 -6
- package/dist/src/types.js.map +1 -1
- package/dist/src/versioning.d.ts +3 -3
- package/dist/src/versioning.d.ts.map +1 -1
- package/dist/src/versioning.js +3 -3
- package/dist/src/versioning.js.map +1 -1
- package/dist/stubs/collaboration/document_types.stub +41 -0
- package/dist/stubs/collaboration/documents_dir.stub +3 -0
- package/dist/stubs/collaboration/migrations/collab_comments.stub +29 -0
- package/dist/stubs/collaboration/migrations/collab_documents.stub +23 -0
- package/dist/stubs/collaboration/migrations/collab_versions.stub +26 -0
- package/dist/stubs/partykit/worker/package.json.stub +21 -0
- package/dist/stubs/partykit/worker/party.ts.stub +175 -0
- package/dist/stubs/partykit/worker/partykit.toml.stub +14 -0
- package/package.json +19 -4
- package/dist/src/services/presence_service.d.ts +0 -44
- package/dist/src/services/presence_service.d.ts.map +0 -1
- package/dist/src/services/presence_service.js +0 -103
- package/dist/src/services/presence_service.js.map +0 -1
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
2
|
+
* Official Lucid storage — persists docs (binary state), versions and
|
|
3
|
+
* anchored comments in tables of the app's database.
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
5
|
+
* Tables are created on first use (IF NOT EXISTS), so the app doesn't need
|
|
6
|
+
* its own migration to use the library in dev.
|
|
7
7
|
*
|
|
8
8
|
* @example
|
|
9
9
|
* const storage = new LucidStorage(db)
|
|
@@ -17,14 +17,14 @@ export class LucidStorage {
|
|
|
17
17
|
this.db = db;
|
|
18
18
|
this.connection = connection;
|
|
19
19
|
}
|
|
20
|
-
/**
|
|
20
|
+
/** Ensures the tables lazily on demand — boot doesn't touch the database. */
|
|
21
21
|
ensure() {
|
|
22
22
|
if (!this.ready) {
|
|
23
23
|
this.ready = this.ensureSchema();
|
|
24
24
|
}
|
|
25
25
|
return this.ready;
|
|
26
26
|
}
|
|
27
|
-
/**
|
|
27
|
+
/** The lucid connection is a Knex instance (QueryClientContract extends the builder). */
|
|
28
28
|
knex() {
|
|
29
29
|
return this.db.connection(this.connection);
|
|
30
30
|
}
|
|
@@ -70,10 +70,7 @@ export class LucidStorage {
|
|
|
70
70
|
}
|
|
71
71
|
async saveDocument(docName, state, meta) {
|
|
72
72
|
await this.ensure();
|
|
73
|
-
const existing = await this.knex()
|
|
74
|
-
.from('collab_documents')
|
|
75
|
-
.where('doc_name', docName)
|
|
76
|
-
.first();
|
|
73
|
+
const existing = await this.knex().from('collab_documents').where('doc_name', docName).first();
|
|
77
74
|
const payload = {
|
|
78
75
|
state: Buffer.from(state),
|
|
79
76
|
meta: meta ?? null,
|
|
@@ -83,7 +80,9 @@ export class LucidStorage {
|
|
|
83
80
|
await this.knex().from('collab_documents').where('doc_name', docName).update(payload);
|
|
84
81
|
}
|
|
85
82
|
else {
|
|
86
|
-
await this.knex()
|
|
83
|
+
await this.knex()
|
|
84
|
+
.from('collab_documents')
|
|
85
|
+
.insert({
|
|
87
86
|
doc_name: docName,
|
|
88
87
|
...payload,
|
|
89
88
|
created_at: new Date(),
|
|
@@ -159,7 +158,9 @@ export class LucidStorage {
|
|
|
159
158
|
await this.knex().from('collab_comments').where('id', comment.id).update(payload);
|
|
160
159
|
}
|
|
161
160
|
else {
|
|
162
|
-
await this.knex()
|
|
161
|
+
await this.knex()
|
|
162
|
+
.from('collab_comments')
|
|
163
|
+
.insert({
|
|
163
164
|
id: comment.id,
|
|
164
165
|
...payload,
|
|
165
166
|
created_at: new Date(comment.createdAt),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lucid_storage.js","sourceRoot":"","sources":["../../../src/storage/lucid_storage.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"lucid_storage.js","sourceRoot":"","sources":["../../../src/storage/lucid_storage.ts"],"names":[],"mappings":"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"}
|
package/dist/src/types.d.ts
CHANGED
|
@@ -1,17 +1,42 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Core types of the collaboration library.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* (`researches/<id>/writing`,
|
|
6
|
-
*
|
|
7
|
-
*
|
|
4
|
+
* The abstraction is document-first: a `CollabDocument` is identified by name
|
|
5
|
+
* (`researches/<id>/writing`, for example) and the chosen driver decides how
|
|
6
|
+
* to sync (Yjs/Hocuspocus or Automerge). Everything engine-specific stays
|
|
7
|
+
* behind the interfaces — the app only consumes `CollaborationManager`.
|
|
8
8
|
*/
|
|
9
|
-
/** Motor CRDT subjacente. */
|
|
10
|
-
export type CollaborationEngine = 'yjs' | 'automerge';
|
|
11
9
|
/**
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
10
|
+
* Underlying CRDT engine.
|
|
11
|
+
*
|
|
12
|
+
* `partykit` runs the sync on edge (Cloudflare Workers + Durable Objects) on
|
|
13
|
+
* an origin separate from Adonis — WebSocket traffic doesn't go through the
|
|
14
|
+
* Node server.
|
|
15
|
+
*/
|
|
16
|
+
export type CollaborationEngine = 'yjs' | 'automerge' | 'partykit' | 'partyserver';
|
|
17
|
+
/**
|
|
18
|
+
* Edge sync config (engine `partykit`). The worker is generated by
|
|
19
|
+
* `node ace collaboration:init --engine=partykit` and deployed separately;
|
|
20
|
+
* the driver talks to it via HTTP (`onRequest`).
|
|
21
|
+
*/
|
|
22
|
+
export interface PartyKitConfig {
|
|
23
|
+
/** PartyKit deployment host (e.g. 'my-app.partykit.dev' or localhost:1999). */
|
|
24
|
+
roomHost: string;
|
|
25
|
+
/** Party name on the worker (default 'main'). */
|
|
26
|
+
party?: string;
|
|
27
|
+
/**
|
|
28
|
+
* HS256 secret used to issue/validate the ephemeral JWT exchanged between
|
|
29
|
+
* Adonis, browser and worker. Required in production — without it the
|
|
30
|
+
* worker rejects connections when configured with `requireToken`.
|
|
31
|
+
*/
|
|
32
|
+
jwtSecret?: string;
|
|
33
|
+
/** Timeout for HTTP calls to the worker, in ms (default 10000). */
|
|
34
|
+
fetchTimeoutMs?: number;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Anchor of a comment — generic over content type.
|
|
38
|
+
* The library persists the anchor + lifecycle; interpreting it is up to the
|
|
39
|
+
* resolver registered by the app (text → offsets, canvas → shapeId, media → timestamp).
|
|
15
40
|
*/
|
|
16
41
|
export type CommentAnchor = {
|
|
17
42
|
kind: 'text-range';
|
|
@@ -28,11 +53,11 @@ export type CommentAnchor = {
|
|
|
28
53
|
at: number;
|
|
29
54
|
end?: number;
|
|
30
55
|
};
|
|
31
|
-
/**
|
|
56
|
+
/** Comment persisted by the library (thread + resolved + author). */
|
|
32
57
|
export interface CollabComment {
|
|
33
58
|
id: string;
|
|
34
59
|
documentName: string;
|
|
35
|
-
/**
|
|
60
|
+
/** Document space where the anchor lives ('text', 'canvas', ...). */
|
|
36
61
|
space: string;
|
|
37
62
|
anchor: CommentAnchor;
|
|
38
63
|
body: string;
|
|
@@ -42,49 +67,49 @@ export interface CollabComment {
|
|
|
42
67
|
createdAt: string;
|
|
43
68
|
updatedAt: string | null;
|
|
44
69
|
}
|
|
45
|
-
/**
|
|
70
|
+
/** Authentication payload attached to the WebSocket connection. */
|
|
46
71
|
export interface CollabConnectionContext {
|
|
47
|
-
/** Id
|
|
72
|
+
/** Id of the authenticated user (the provider validates before the handshake). */
|
|
48
73
|
userId: string;
|
|
49
|
-
/**
|
|
74
|
+
/** Free-form metadata (name, avatar) for presence. */
|
|
50
75
|
user?: {
|
|
51
76
|
name?: string;
|
|
52
77
|
avatarUrl?: string | null;
|
|
53
78
|
};
|
|
54
79
|
}
|
|
55
|
-
/**
|
|
80
|
+
/** Result of read/write authorization for a document. */
|
|
56
81
|
export interface CollabPermission {
|
|
57
82
|
canRead: boolean;
|
|
58
|
-
/**
|
|
83
|
+
/** Write to the document content (central editor). */
|
|
59
84
|
canWrite: boolean;
|
|
60
|
-
/**
|
|
85
|
+
/** Comment (side annotations — doesn't change the text). */
|
|
61
86
|
canComment: boolean;
|
|
62
87
|
}
|
|
63
|
-
/**
|
|
88
|
+
/** Collaborative document loaded by the driver. */
|
|
64
89
|
export interface LoadedCollabDocument {
|
|
65
|
-
/**
|
|
90
|
+
/** Full binary state to send to a new client (merge update). */
|
|
66
91
|
state: Uint8Array;
|
|
67
|
-
/**
|
|
92
|
+
/** State vector for differential sync (Yjs: state vector; Automerge: heads). */
|
|
68
93
|
vector: Uint8Array;
|
|
69
94
|
}
|
|
70
|
-
/**
|
|
95
|
+
/** A version registered in the document history. */
|
|
71
96
|
export interface CollabVersion {
|
|
72
|
-
/**
|
|
97
|
+
/** Opaque reference for the driver (Yjs snapshot / Automerge hash). */
|
|
73
98
|
id: string;
|
|
74
99
|
createdAt: string;
|
|
75
100
|
createdBy: string | null;
|
|
76
101
|
label: string | null;
|
|
77
|
-
/**
|
|
102
|
+
/** Friendly sequential number (1, 2, 3...). */
|
|
78
103
|
seq: number;
|
|
79
104
|
}
|
|
80
|
-
/**
|
|
105
|
+
/** Diff statistics between two versions. */
|
|
81
106
|
export interface CollabDiffSummary {
|
|
82
107
|
added: number;
|
|
83
108
|
removed: number;
|
|
84
109
|
}
|
|
85
110
|
/**
|
|
86
|
-
*
|
|
87
|
-
*
|
|
111
|
+
* Persistence of documents + versions + comments. The host app implements
|
|
112
|
+
* this (database, S3...) and the library only knows the interface.
|
|
88
113
|
*/
|
|
89
114
|
export interface CollaborationStorage {
|
|
90
115
|
loadDocument(docName: string): Promise<{
|
|
@@ -94,28 +119,30 @@ export interface CollaborationStorage {
|
|
|
94
119
|
listVersions(docName: string): Promise<CollabVersion[]>;
|
|
95
120
|
saveVersion(docName: string, version: CollabVersion, snapshot: Uint8Array): Promise<void>;
|
|
96
121
|
loadVersionSnapshot(docName: string, versionId: string): Promise<Uint8Array | null>;
|
|
97
|
-
/**
|
|
122
|
+
/** Comments of a document (by space). */
|
|
98
123
|
listComments(docName: string, space?: string): Promise<CollabComment[]>;
|
|
99
124
|
saveComment(docName: string, comment: CollabComment): Promise<void>;
|
|
100
125
|
deleteComment(docName: string, commentId: string): Promise<void>;
|
|
101
126
|
}
|
|
102
|
-
/**
|
|
127
|
+
/** Manager configuration. */
|
|
103
128
|
export interface CollaborationConfig {
|
|
104
129
|
engine: CollaborationEngine;
|
|
105
|
-
/**
|
|
130
|
+
/** Omitted = in-memory (dev only). The config stub publishes a default. */
|
|
106
131
|
storage?: CollaborationStorage;
|
|
107
132
|
/**
|
|
108
|
-
*
|
|
109
|
-
*
|
|
133
|
+
* Per-document authorization. Called at the handshake (onAuthenticate) and
|
|
134
|
+
* on every relevant permission change — return false to drop the connection.
|
|
110
135
|
*/
|
|
111
136
|
authorize: (ctx: CollabConnectionContext, docName: string) => Promise<CollabPermission>;
|
|
112
|
-
/** Redis
|
|
137
|
+
/** Redis for cross-instance presence (optional in single-instance dev). */
|
|
113
138
|
redis?: {
|
|
114
139
|
url: string;
|
|
115
140
|
};
|
|
116
|
-
/**
|
|
141
|
+
/** Edge sync via PartyKit (required when engine = 'partykit'). */
|
|
142
|
+
partykit?: PartyKitConfig;
|
|
143
|
+
/** WS port/path when embedded in the Adonis HTTP server. */
|
|
117
144
|
path?: string;
|
|
118
|
-
/**
|
|
145
|
+
/** Persistence debounce in ms (default 2000). */
|
|
119
146
|
debounce?: number;
|
|
120
147
|
}
|
|
121
148
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/src/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/src/types.js
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Core types of the collaboration library.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* (`researches/<id>/writing`,
|
|
6
|
-
*
|
|
7
|
-
*
|
|
4
|
+
* The abstraction is document-first: a `CollabDocument` is identified by name
|
|
5
|
+
* (`researches/<id>/writing`, for example) and the chosen driver decides how
|
|
6
|
+
* to sync (Yjs/Hocuspocus or Automerge). Everything engine-specific stays
|
|
7
|
+
* behind the interfaces — the app only consumes `CollaborationManager`.
|
|
8
8
|
*/
|
|
9
|
-
;
|
|
10
9
|
export {};
|
|
11
10
|
//# sourceMappingURL=types.js.map
|
package/dist/src/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|
package/dist/src/versioning.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
2
|
+
* Version metadata shared across drivers — same history semantics for
|
|
3
|
+
* Automerge (native) and Yjs (snapshots).
|
|
4
4
|
*/
|
|
5
5
|
import type { CollabVersion } from './types.js';
|
|
6
|
-
/**
|
|
6
|
+
/** Next sequential number based on the existing versions. */
|
|
7
7
|
export declare function seqVersions(existing: CollabVersion[]): number;
|
|
8
8
|
export declare function createVersionMetadata(createdBy: string | null, label: string | null, seq: number): CollabVersion;
|
|
9
9
|
//# sourceMappingURL=versioning.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"versioning.d.ts","sourceRoot":"","sources":["../../src/versioning.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,
|
|
1
|
+
{"version":3,"file":"versioning.d.ts","sourceRoot":"","sources":["../../src/versioning.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,6DAA6D;AAC7D,wBAAgB,WAAW,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,MAAM,CAE7D;AAED,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,KAAK,EAAE,MAAM,GAAG,IAAI,EACpB,GAAG,EAAE,MAAM,GACV,aAAa,CAQf"}
|
package/dist/src/versioning.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
2
|
+
* Version metadata shared across drivers — same history semantics for
|
|
3
|
+
* Automerge (native) and Yjs (snapshots).
|
|
4
4
|
*/
|
|
5
5
|
import { randomUUID } from 'node:crypto';
|
|
6
|
-
/**
|
|
6
|
+
/** Next sequential number based on the existing versions. */
|
|
7
7
|
export function seqVersions(existing) {
|
|
8
8
|
return existing.reduce((max, version) => Math.max(max, version.seq), 0) + 1;
|
|
9
9
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"versioning.js","sourceRoot":"","sources":["../../src/versioning.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,
|
|
1
|
+
{"version":3,"file":"versioning.js","sourceRoot":"","sources":["../../src/versioning.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,6DAA6D;AAC7D,MAAM,UAAU,WAAW,CAAC,QAAyB;IACnD,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,SAAwB,EACxB,KAAoB,EACpB,GAAW;IAEX,OAAO;QACL,EAAE,EAAE,UAAU,EAAE;QAChB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,SAAS;QACT,KAAK;QACL,GAAG;KACJ,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{{{
|
|
2
|
+
exports({ to: app.makePath('app', 'collaboration', 'documents', document.fileName) })
|
|
3
|
+
}}}
|
|
4
|
+
import type { CommentAnchor } from '@adonis-agora/collaboration'
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Collaborative document "{{ document.documentName }}".
|
|
8
|
+
*
|
|
9
|
+
* Single source of truth for this document's comment spaces and anchors —
|
|
10
|
+
* importable by the frontend (types-only).
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
/** Anchor kinds accepted by this document. */
|
|
14
|
+
export type {{ document.className }}Anchor =
|
|
15
|
+
{{#each document.anchorKinds}}
|
|
16
|
+
| Extract<CommentAnchor, { kind: '{{ this }}' }>
|
|
17
|
+
{{/each}}
|
|
18
|
+
|
|
19
|
+
/** Document spaces (e.g. main text, canvas, media). */
|
|
20
|
+
export type {{ document.className }}Space =
|
|
21
|
+
{{#each document.spaceList}}
|
|
22
|
+
| '{{ this }}'
|
|
23
|
+
{{/each}}
|
|
24
|
+
|
|
25
|
+
/** Collaborative document metadata. */
|
|
26
|
+
export interface {{ document.className }}CollabDocument {
|
|
27
|
+
/** Name used in the WS handshake and REST routes (?doc=...). */
|
|
28
|
+
readonly docName: string;
|
|
29
|
+
readonly engine: string;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export const {{ document.className }}Document: {{ document.className }}CollabDocument = {
|
|
33
|
+
docName: '{{ document.documentName }}',
|
|
34
|
+
engine: 'yjs',
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Default export consumed by the registry generated at
|
|
39
|
+
* .adonisjs/collaboration/documents.ts (node ace codegen).
|
|
40
|
+
*/
|
|
41
|
+
export default {{ document.className }}Document
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{{{
|
|
2
|
+
exports({ to: app.makePath('database', 'migrations', migration.fileName) })
|
|
3
|
+
}}}
|
|
4
|
+
import { BaseModel, BaseSchema } from '@adonisjs/lucid/schema'
|
|
5
|
+
|
|
6
|
+
export default class extends BaseSchema {
|
|
7
|
+
protected tableName = '{{ migration.tableName }}'
|
|
8
|
+
|
|
9
|
+
async up() {
|
|
10
|
+
this.schema.createTable(this.tableName, (table) => {
|
|
11
|
+
table.uuid('id').primary()
|
|
12
|
+
table.string('document_name').notNullable()
|
|
13
|
+
table.string('space').notNullable().defaultTo('text')
|
|
14
|
+
table.jsonb('anchor').notNullable()
|
|
15
|
+
table.text('body').notNullable()
|
|
16
|
+
table.string('user_id').notNullable()
|
|
17
|
+
table.string('author_name').nullable()
|
|
18
|
+
table.timestamp('resolved_at', { useTz: true }).nullable()
|
|
19
|
+
table.timestamp('created_at', { useTz: true }).notNullable()
|
|
20
|
+
table.timestamp('updated_at', { useTz: true }).nullable()
|
|
21
|
+
|
|
22
|
+
table.index(['document_name', 'space'])
|
|
23
|
+
})
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
async down() {
|
|
27
|
+
this.schema.dropTable(this.tableName)
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{{{
|
|
2
|
+
exports({ to: app.makePath('database', 'migrations', migration.fileName) })
|
|
3
|
+
}}}
|
|
4
|
+
import { BaseModel, BaseSchema } from '@adonisjs/lucid/schema'
|
|
5
|
+
|
|
6
|
+
export default class extends BaseSchema {
|
|
7
|
+
protected tableName = '{{ migration.tableName }}'
|
|
8
|
+
|
|
9
|
+
async up() {
|
|
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')
|
|
14
|
+
table.jsonb('meta').nullable()
|
|
15
|
+
table.timestamp('created_at', { useTz: true }).notNullable()
|
|
16
|
+
table.timestamp('updated_at', { useTz: true }).notNullable()
|
|
17
|
+
})
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
async down() {
|
|
21
|
+
this.schema.dropTable(this.tableName)
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{{{
|
|
2
|
+
exports({ to: app.makePath('database', 'migrations', migration.fileName) })
|
|
3
|
+
}}}
|
|
4
|
+
import { BaseModel, BaseSchema } from '@adonisjs/lucid/schema'
|
|
5
|
+
|
|
6
|
+
export default class extends BaseSchema {
|
|
7
|
+
protected tableName = '{{ migration.tableName }}'
|
|
8
|
+
|
|
9
|
+
async up() {
|
|
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()
|
|
15
|
+
table.string('created_by').nullable()
|
|
16
|
+
table.binary('snapshot').notNullable()
|
|
17
|
+
table.timestamp('created_at', { useTz: true }).notNullable()
|
|
18
|
+
|
|
19
|
+
table.index(['document_name', 'seq'])
|
|
20
|
+
})
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
async down() {
|
|
24
|
+
this.schema.dropTable(this.tableName)
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{{{
|
|
2
|
+
exports({ to: app.makePath('partykit-worker', 'package.json') })
|
|
3
|
+
}}}
|
|
4
|
+
{
|
|
5
|
+
"name": "collab-worker",
|
|
6
|
+
"private": true,
|
|
7
|
+
"type": "module",
|
|
8
|
+
"scripts": {
|
|
9
|
+
"dev": "partykit dev",
|
|
10
|
+
"deploy": "partykit deploy"
|
|
11
|
+
},
|
|
12
|
+
"dependencies": {
|
|
13
|
+
"y-partykit": "^0.0.33",
|
|
14
|
+
"yjs": "^13.6.27"
|
|
15
|
+
},
|
|
16
|
+
"devDependencies": {
|
|
17
|
+
"@types/node": "^22.20.1",
|
|
18
|
+
"partykit": "^0.0.115",
|
|
19
|
+
"typescript": "^5.9.3"
|
|
20
|
+
}
|
|
21
|
+
}
|