@verdant-web/server 1.7.8 → 1.7.9

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 (97) hide show
  1. package/dist/cjs/Baselines.d.ts +14 -14
  2. package/dist/cjs/Baselines.js +77 -77
  3. package/dist/cjs/ClientConnection.d.ts +18 -18
  4. package/dist/cjs/ClientConnection.js +105 -105
  5. package/dist/cjs/MessageSender.d.ts +5 -5
  6. package/dist/cjs/MessageSender.js +2 -2
  7. package/dist/cjs/OperationHistory.d.ts +34 -34
  8. package/dist/cjs/OperationHistory.js +108 -108
  9. package/dist/cjs/Presence.d.ts +15 -15
  10. package/dist/cjs/Presence.js +59 -59
  11. package/dist/cjs/Profiles.d.ts +10 -10
  12. package/dist/cjs/Profiles.js +19 -19
  13. package/dist/cjs/ReplicaKeepaliveTimers.d.ts +17 -17
  14. package/dist/cjs/ReplicaKeepaliveTimers.js +30 -30
  15. package/dist/cjs/Replicas.d.ts +23 -23
  16. package/dist/cjs/Replicas.js +132 -132
  17. package/dist/cjs/Server.d.ts +121 -121
  18. package/dist/cjs/Server.js +377 -377
  19. package/dist/cjs/ServerLibrary.d.ts +63 -63
  20. package/dist/cjs/ServerLibrary.js +467 -467
  21. package/dist/cjs/TokenProvider.d.ts +16 -16
  22. package/dist/cjs/TokenProvider.js +26 -26
  23. package/dist/cjs/TokenVerifier.d.ts +16 -16
  24. package/dist/cjs/TokenVerifier.js +28 -28
  25. package/dist/cjs/files/FileMetadata.d.ts +28 -28
  26. package/dist/cjs/files/FileMetadata.js +46 -46
  27. package/dist/cjs/files/FileStorage.d.ts +35 -35
  28. package/dist/cjs/files/FileStorage.js +71 -71
  29. package/dist/cjs/index.d.ts +9 -9
  30. package/dist/cjs/index.js +11 -11
  31. package/dist/cjs/migrations/v0.sql.d.ts +2 -2
  32. package/dist/cjs/migrations/v0.sql.js +3 -3
  33. package/dist/cjs/migrations/v1.sql.d.ts +2 -2
  34. package/dist/cjs/migrations/v1.sql.js +3 -3
  35. package/dist/cjs/migrations/v2.sql.d.ts +2 -2
  36. package/dist/cjs/migrations/v2.sql.js +4 -4
  37. package/dist/cjs/migrations/v3.sql.d.ts +2 -2
  38. package/dist/cjs/migrations/v3.sql.js +4 -4
  39. package/dist/cjs/migrations/v4.sql.d.ts +2 -2
  40. package/dist/cjs/migrations/v4.sql.js +4 -4
  41. package/dist/cjs/migrations.d.ts +2 -2
  42. package/dist/cjs/migrations.js +32 -32
  43. package/dist/cjs/types.d.ts +22 -22
  44. package/dist/cjs/types.js +2 -2
  45. package/dist/esm/Baselines.d.ts +14 -14
  46. package/dist/esm/Baselines.js +73 -73
  47. package/dist/esm/ClientConnection.d.ts +18 -18
  48. package/dist/esm/ClientConnection.js +101 -101
  49. package/dist/esm/MessageSender.d.ts +5 -5
  50. package/dist/esm/MessageSender.js +1 -1
  51. package/dist/esm/OperationHistory.d.ts +34 -34
  52. package/dist/esm/OperationHistory.js +104 -104
  53. package/dist/esm/Presence.d.ts +15 -15
  54. package/dist/esm/Presence.js +52 -52
  55. package/dist/esm/Profiles.d.ts +10 -10
  56. package/dist/esm/Profiles.js +15 -15
  57. package/dist/esm/ReplicaKeepaliveTimers.d.ts +17 -17
  58. package/dist/esm/ReplicaKeepaliveTimers.js +26 -26
  59. package/dist/esm/Replicas.d.ts +23 -23
  60. package/dist/esm/Replicas.js +128 -128
  61. package/dist/esm/Server.d.ts +121 -121
  62. package/dist/esm/Server.js +370 -370
  63. package/dist/esm/ServerLibrary.d.ts +63 -63
  64. package/dist/esm/ServerLibrary.js +463 -463
  65. package/dist/esm/TokenProvider.d.ts +16 -16
  66. package/dist/esm/TokenProvider.js +19 -19
  67. package/dist/esm/TokenVerifier.d.ts +16 -16
  68. package/dist/esm/TokenVerifier.js +21 -21
  69. package/dist/esm/files/FileMetadata.d.ts +28 -28
  70. package/dist/esm/files/FileMetadata.js +42 -42
  71. package/dist/esm/files/FileStorage.d.ts +35 -35
  72. package/dist/esm/files/FileStorage.js +44 -44
  73. package/dist/esm/index.d.ts +9 -9
  74. package/dist/esm/index.js +4 -4
  75. package/dist/esm/migrations/v0.sql.d.ts +2 -2
  76. package/dist/esm/migrations/v0.sql.js +1 -1
  77. package/dist/esm/migrations/v1.sql.d.ts +2 -2
  78. package/dist/esm/migrations/v1.sql.js +1 -1
  79. package/dist/esm/migrations/v2.sql.d.ts +2 -2
  80. package/dist/esm/migrations/v2.sql.js +2 -2
  81. package/dist/esm/migrations/v3.sql.d.ts +2 -2
  82. package/dist/esm/migrations/v3.sql.js +2 -2
  83. package/dist/esm/migrations/v4.sql.d.ts +2 -2
  84. package/dist/esm/migrations/v4.sql.js +2 -2
  85. package/dist/esm/migrations.d.ts +2 -2
  86. package/dist/esm/migrations.js +25 -25
  87. package/dist/esm/types.d.ts +22 -22
  88. package/dist/esm/types.js +1 -1
  89. package/dist/tsconfig-cjs.tsbuildinfo +1 -1
  90. package/dist/tsconfig.tsbuildinfo +1 -1
  91. package/package.json +2 -2
  92. package/dist/cjs/ServerStorage.d.ts +0 -35
  93. package/dist/cjs/ServerStorage.js +0 -60
  94. package/dist/cjs/ServerStorage.js.map +0 -1
  95. package/dist/esm/ServerStorage.d.ts +0 -44
  96. package/dist/esm/ServerStorage.js +0 -58
  97. package/dist/esm/ServerStorage.js.map +0 -1
@@ -1,5 +1,5 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.default = `
4
4
  ALTER TABLE
5
5
  ReplicaInfo RENAME TO ReplicaInfoOld;
@@ -27,5 +27,5 @@ FROM
27
27
  ReplicaInfoOld;
28
28
 
29
29
  DROP TABLE ReplicaInfoOld;
30
- `;
30
+ `;
31
31
  //# sourceMappingURL=v1.sql.js.map
@@ -1,2 +1,2 @@
1
- declare const _default: "\n ALTER TABLE\n DocumentBaseline RENAME TO DocumentBaselineOld;\n\n CREATE TABLE DocumentBaseline (\n oid TEXT NOT NULL,\n snapshot TEXT,\n timestamp TEXT NOT NULL,\n libraryId TEXT NOT NULL,\n PRIMARY KEY (libraryId, oid)\n );\n\n INSERT INTO\n DocumentBaseline\n SELECT\n oid,\n snapshot,\n timestamp,\n libraryId\n FROM\n DocumentBaselineOld;\n\n DROP TABLE DocumentBaselineOld;\n";
2
- export default _default;
1
+ declare const _default: "\n ALTER TABLE\n DocumentBaseline RENAME TO DocumentBaselineOld;\n\n CREATE TABLE DocumentBaseline (\n oid TEXT NOT NULL,\n snapshot TEXT,\n timestamp TEXT NOT NULL,\n libraryId TEXT NOT NULL,\n PRIMARY KEY (libraryId, oid)\n );\n\n INSERT INTO\n DocumentBaseline\n SELECT\n oid,\n snapshot,\n timestamp,\n libraryId\n FROM\n DocumentBaselineOld;\n\n DROP TABLE DocumentBaselineOld;\n";
2
+ export default _default;
@@ -1,6 +1,6 @@
1
- "use strict";
2
- // fixes primary key for document baselines to include libraryId
3
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ "use strict";
2
+ // fixes primary key for document baselines to include libraryId
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.default = `
5
5
  ALTER TABLE
6
6
  DocumentBaseline RENAME TO DocumentBaselineOld;
@@ -24,5 +24,5 @@ exports.default = `
24
24
  DocumentBaselineOld;
25
25
 
26
26
  DROP TABLE DocumentBaselineOld;
27
- `;
27
+ `;
28
28
  //# sourceMappingURL=v2.sql.js.map
@@ -1,2 +1,2 @@
1
- declare const _default: "\n CREATE TABLE IF NOT EXISTS FileMetadata (\n libraryId TEXT NOT NULL,\n fileId TEXT NOT NULL,\n name TEXT NOT NULL,\n type TEXT NOT NULL,\n pendingDeleteAt INTEGER,\n PRIMARY KEY (libraryId, fileId)\n );\n";
2
- export default _default;
1
+ declare const _default: "\n CREATE TABLE IF NOT EXISTS FileMetadata (\n libraryId TEXT NOT NULL,\n fileId TEXT NOT NULL,\n name TEXT NOT NULL,\n type TEXT NOT NULL,\n pendingDeleteAt INTEGER,\n PRIMARY KEY (libraryId, fileId)\n );\n";
2
+ export default _default;
@@ -1,6 +1,6 @@
1
- "use strict";
2
- // add the FileMetadata table
3
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ "use strict";
2
+ // add the FileMetadata table
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.default = `
5
5
  CREATE TABLE IF NOT EXISTS FileMetadata (
6
6
  libraryId TEXT NOT NULL,
@@ -10,5 +10,5 @@ exports.default = `
10
10
  pendingDeleteAt INTEGER,
11
11
  PRIMARY KEY (libraryId, fileId)
12
12
  );
13
- `;
13
+ `;
14
14
  //# sourceMappingURL=v3.sql.js.map
@@ -1,2 +1,2 @@
1
- declare const _default: "\n ALTER TABLE ReplicaInfo ADD COLUMN ackedServerOrder INTEGER DEFAULT 0 NOT NULL;\n ALTER TABLE OperationHistory ADD COLUMN serverOrder INTEGER DEFAULT 0 NOT NULL;\n";
2
- export default _default;
1
+ declare const _default: "\n ALTER TABLE ReplicaInfo ADD COLUMN ackedServerOrder INTEGER DEFAULT 0 NOT NULL;\n ALTER TABLE OperationHistory ADD COLUMN serverOrder INTEGER DEFAULT 0 NOT NULL;\n";
2
+ export default _default;
@@ -1,8 +1,8 @@
1
- "use strict";
2
- // add server order to replicas and operations
3
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ "use strict";
2
+ // add server order to replicas and operations
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.default = `
5
5
  ALTER TABLE ReplicaInfo ADD COLUMN ackedServerOrder INTEGER DEFAULT 0 NOT NULL;
6
6
  ALTER TABLE OperationHistory ADD COLUMN serverOrder INTEGER DEFAULT 0 NOT NULL;
7
- `;
7
+ `;
8
8
  //# sourceMappingURL=v4.sql.js.map
@@ -1,2 +1,2 @@
1
- import type { Database } from 'better-sqlite3';
2
- export declare function migrations(db: Database): void;
1
+ import type { Database } from 'better-sqlite3';
2
+ export declare function migrations(db: Database): void;
@@ -1,41 +1,41 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.migrations = void 0;
7
- const v0_sql_js_1 = __importDefault(require("./migrations/v0.sql.js"));
8
- const v1_sql_js_1 = __importDefault(require("./migrations/v1.sql.js"));
9
- const v2_sql_js_1 = __importDefault(require("./migrations/v2.sql.js"));
10
- const v3_sql_js_1 = __importDefault(require("./migrations/v3.sql.js"));
11
- const v4_sql_js_1 = __importDefault(require("./migrations/v4.sql.js"));
12
- const allMigrations = [v0_sql_js_1.default, v1_sql_js_1.default, v2_sql_js_1.default, v3_sql_js_1.default, v4_sql_js_1.default];
13
- function migrations(db) {
14
- var _a;
15
- // create the versions table if it doesn't exist
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.migrations = void 0;
7
+ const v0_sql_js_1 = __importDefault(require("./migrations/v0.sql.js"));
8
+ const v1_sql_js_1 = __importDefault(require("./migrations/v1.sql.js"));
9
+ const v2_sql_js_1 = __importDefault(require("./migrations/v2.sql.js"));
10
+ const v3_sql_js_1 = __importDefault(require("./migrations/v3.sql.js"));
11
+ const v4_sql_js_1 = __importDefault(require("./migrations/v4.sql.js"));
12
+ const allMigrations = [v0_sql_js_1.default, v1_sql_js_1.default, v2_sql_js_1.default, v3_sql_js_1.default, v4_sql_js_1.default];
13
+ function migrations(db) {
14
+ var _a;
15
+ // create the versions table if it doesn't exist
16
16
  db.prepare(`
17
17
  CREATE TABLE IF NOT EXISTS versions (
18
18
  version INTEGER NOT NULL PRIMARY KEY
19
19
  );
20
- `).run();
21
- // get the current version
22
- const versionResult = db
20
+ `).run();
21
+ // get the current version
22
+ const versionResult = db
23
23
  .prepare(`
24
24
  SELECT version FROM versions ORDER BY version DESC LIMIT 1;
25
- `)
26
- .get();
27
- const version = (_a = versionResult === null || versionResult === void 0 ? void 0 : versionResult.version) !== null && _a !== void 0 ? _a : 0;
28
- const sqlToRun = allMigrations.slice(version);
29
- if (sqlToRun.length === 0)
30
- return;
31
- console.info('Running migrations from ', version, 'to', allMigrations.length - 1);
32
- const run = db.transaction(() => {
33
- sqlToRun.forEach((sql) => db.exec(sql));
25
+ `)
26
+ .get();
27
+ const version = (_a = versionResult === null || versionResult === void 0 ? void 0 : versionResult.version) !== null && _a !== void 0 ? _a : 0;
28
+ const sqlToRun = allMigrations.slice(version);
29
+ if (sqlToRun.length === 0)
30
+ return;
31
+ console.info('Running migrations from ', version, 'to', allMigrations.length - 1);
32
+ const run = db.transaction(() => {
33
+ sqlToRun.forEach((sql) => db.exec(sql));
34
34
  db.prepare(`
35
35
  INSERT INTO versions (version) VALUES (?);
36
- `).run(allMigrations.length);
37
- });
38
- run();
39
- }
40
- exports.migrations = migrations;
36
+ `).run(allMigrations.length);
37
+ });
38
+ run();
39
+ }
40
+ exports.migrations = migrations;
41
41
  //# sourceMappingURL=migrations.js.map
@@ -1,22 +1,22 @@
1
- import { DocumentBaseline, Operation, ReplicaInfo, ReplicaType } from '@verdant-web/common';
2
- export interface OperationSpec extends Operation {
3
- serverOrder: number;
4
- replicaId: string;
5
- }
6
- export interface DocumentBaselineSpec extends Omit<DocumentBaseline<any>, 'snapshot'> {
7
- snapshot: string;
8
- libraryId: string;
9
- }
10
- export interface ReplicaInfoSpec extends ReplicaInfo {
11
- libraryId: string;
12
- clientId: string;
13
- lastSeenWallClockTime: number | null;
14
- type: ReplicaType;
15
- ackedServerOrder: number;
16
- }
17
- declare global {
18
- interface File {
19
- readonly lastModified: number;
20
- readonly name: string;
21
- }
22
- }
1
+ import { DocumentBaseline, Operation, ReplicaInfo, ReplicaType } from '@verdant-web/common';
2
+ export interface OperationSpec extends Operation {
3
+ serverOrder: number;
4
+ replicaId: string;
5
+ }
6
+ export interface DocumentBaselineSpec extends Omit<DocumentBaseline<any>, 'snapshot'> {
7
+ snapshot: string;
8
+ libraryId: string;
9
+ }
10
+ export interface ReplicaInfoSpec extends ReplicaInfo {
11
+ libraryId: string;
12
+ clientId: string;
13
+ lastSeenWallClockTime: number | null;
14
+ type: ReplicaType;
15
+ ackedServerOrder: number;
16
+ }
17
+ declare global {
18
+ interface File {
19
+ readonly lastModified: number;
20
+ readonly name: string;
21
+ }
22
+ }
package/dist/cjs/types.js CHANGED
@@ -1,3 +1,3 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  //# sourceMappingURL=types.js.map
@@ -1,14 +1,14 @@
1
- import { DocumentBaseline, Operation, Ref } from '@verdant-web/common';
2
- import { Database } from 'better-sqlite3';
3
- export declare class Baselines {
4
- private db;
5
- constructor(db: Database);
6
- get: (libraryId: string, oid: string) => DocumentBaseline<any> | null;
7
- getAllWithSubObjects: (libraryId: string, oid: string) => DocumentBaseline<any>[];
8
- set: (libraryId: string, baseline: DocumentBaseline) => import("better-sqlite3").RunResult;
9
- insertAll: (libraryId: string, baselines: DocumentBaseline[]) => void;
10
- private hydrateSnapshot;
11
- getAllAfter: (libraryId: string, timestamp: string | null) => DocumentBaseline<any>[];
12
- applyOperations: (libraryId: string, oid: string, operations: Operation[], deletedRefs?: Ref[]) => never[] | undefined;
13
- deleteAll: (libraryId: string) => void;
14
- }
1
+ import { DocumentBaseline, Operation, Ref } from '@verdant-web/common';
2
+ import { Database } from 'better-sqlite3';
3
+ export declare class Baselines {
4
+ private db;
5
+ constructor(db: Database);
6
+ get: (libraryId: string, oid: string) => DocumentBaseline<any> | null;
7
+ getAllWithSubObjects: (libraryId: string, oid: string) => DocumentBaseline<any>[];
8
+ set: (libraryId: string, baseline: DocumentBaseline) => import("better-sqlite3").RunResult;
9
+ insertAll: (libraryId: string, baselines: DocumentBaseline[]) => void;
10
+ private hydrateSnapshot;
11
+ getAllAfter: (libraryId: string, timestamp: string | null) => DocumentBaseline<any>[];
12
+ applyOperations: (libraryId: string, oid: string, operations: Operation[], deletedRefs?: Ref[]) => never[] | undefined;
13
+ deleteAll: (libraryId: string) => void;
14
+ }
@@ -1,97 +1,97 @@
1
- import { applyPatch, } from '@verdant-web/common';
2
- export class Baselines {
3
- constructor(db) {
4
- this.db = db;
5
- this.get = (libraryId, oid) => {
6
- const row = this.db
1
+ import { applyPatch, } from '@verdant-web/common';
2
+ export class Baselines {
3
+ constructor(db) {
4
+ this.db = db;
5
+ this.get = (libraryId, oid) => {
6
+ const row = this.db
7
7
  .prepare(`
8
8
  SELECT * FROM DocumentBaseline
9
9
  WHERE libraryId = ? AND oid = ?
10
- `)
11
- .get(libraryId, oid);
12
- if (!row) {
13
- return null;
14
- }
15
- return this.hydrateSnapshot(row);
16
- };
17
- this.getAllWithSubObjects = (libraryId, oid) => {
18
- const rows = this.db
10
+ `)
11
+ .get(libraryId, oid);
12
+ if (!row) {
13
+ return null;
14
+ }
15
+ return this.hydrateSnapshot(row);
16
+ };
17
+ this.getAllWithSubObjects = (libraryId, oid) => {
18
+ const rows = this.db
19
19
  .prepare(`
20
20
  SELECT * FROM DocumentBaseline
21
21
  WHERE libraryId = ? AND oid LIKE ?
22
- `)
23
- .all(libraryId, `${oid}%`);
24
- return rows.map(this.hydrateSnapshot);
25
- };
26
- this.set = (libraryId, baseline) => {
27
- return this.db
22
+ `)
23
+ .all(libraryId, `${oid}%`);
24
+ return rows.map(this.hydrateSnapshot);
25
+ };
26
+ this.set = (libraryId, baseline) => {
27
+ return this.db
28
28
  .prepare(`
29
29
  INSERT OR REPLACE INTO DocumentBaseline (libraryId, oid, snapshot, timestamp)
30
30
  VALUES (?, ?, ?, ?)
31
- `)
32
- .run(libraryId, baseline.oid, JSON.stringify(baseline.snapshot), baseline.timestamp);
33
- };
34
- this.insertAll = (libraryId, baselines) => {
35
- const tx = this.db.transaction(() => {
36
- for (const baseline of baselines) {
37
- this.db
31
+ `)
32
+ .run(libraryId, baseline.oid, JSON.stringify(baseline.snapshot), baseline.timestamp);
33
+ };
34
+ this.insertAll = (libraryId, baselines) => {
35
+ const tx = this.db.transaction(() => {
36
+ for (const baseline of baselines) {
37
+ this.db
38
38
  .prepare(`
39
39
  INSERT OR REPLACE INTO DocumentBaseline (libraryId, oid, snapshot, timestamp)
40
40
  VALUES (?, ?, ?, ?)
41
- `)
42
- .run(libraryId, baseline.oid, JSON.stringify(baseline.snapshot), baseline.timestamp);
43
- }
44
- });
45
- tx();
46
- };
47
- this.hydrateSnapshot = (snapshot) => {
48
- return Object.assign(Object.assign({}, snapshot), { snapshot: JSON.parse(snapshot.snapshot) });
49
- };
50
- this.getAllAfter = (libraryId, timestamp) => {
51
- if (!timestamp) {
52
- return this.db
41
+ `)
42
+ .run(libraryId, baseline.oid, JSON.stringify(baseline.snapshot), baseline.timestamp);
43
+ }
44
+ });
45
+ tx();
46
+ };
47
+ this.hydrateSnapshot = (snapshot) => {
48
+ return Object.assign(Object.assign({}, snapshot), { snapshot: JSON.parse(snapshot.snapshot) });
49
+ };
50
+ this.getAllAfter = (libraryId, timestamp) => {
51
+ if (!timestamp) {
52
+ return this.db
53
53
  .prepare(`
54
54
  SELECT * FROM DocumentBaseline
55
55
  WHERE libraryId = ?
56
56
  ORDER BY timestamp ASC
57
- `)
58
- .all(libraryId)
59
- .map(this.hydrateSnapshot);
60
- }
61
- return this.db
57
+ `)
58
+ .all(libraryId)
59
+ .map(this.hydrateSnapshot);
60
+ }
61
+ return this.db
62
62
  .prepare(`
63
63
  SELECT * FROM DocumentBaseline
64
64
  WHERE libraryId = ? AND timestamp > ?
65
65
  ORDER BY timestamp ASC
66
- `)
67
- .all(libraryId, timestamp)
68
- .map(this.hydrateSnapshot);
69
- };
70
- this.applyOperations = (libraryId, oid, operations, deletedRefs) => {
71
- if (operations.length === 0)
72
- return [];
73
- let baseline = this.get(libraryId, oid);
74
- if (!baseline) {
75
- baseline = {
76
- oid,
77
- snapshot: {},
78
- timestamp: operations[0].timestamp,
79
- };
80
- }
81
- for (const operation of operations) {
82
- baseline.snapshot = applyPatch(baseline.snapshot, operation.data, deletedRefs);
83
- }
84
- baseline.timestamp = operations[operations.length - 1].timestamp;
85
- this.set(libraryId, baseline);
86
- };
87
- this.deleteAll = (libraryId) => {
88
- this.db
66
+ `)
67
+ .all(libraryId, timestamp)
68
+ .map(this.hydrateSnapshot);
69
+ };
70
+ this.applyOperations = (libraryId, oid, operations, deletedRefs) => {
71
+ if (operations.length === 0)
72
+ return [];
73
+ let baseline = this.get(libraryId, oid);
74
+ if (!baseline) {
75
+ baseline = {
76
+ oid,
77
+ snapshot: {},
78
+ timestamp: operations[0].timestamp,
79
+ };
80
+ }
81
+ for (const operation of operations) {
82
+ baseline.snapshot = applyPatch(baseline.snapshot, operation.data, deletedRefs);
83
+ }
84
+ baseline.timestamp = operations[operations.length - 1].timestamp;
85
+ this.set(libraryId, baseline);
86
+ };
87
+ this.deleteAll = (libraryId) => {
88
+ this.db
89
89
  .prepare(`
90
90
  DELETE FROM DocumentBaseline
91
91
  WHERE libraryId = ?
92
- `)
93
- .run(libraryId);
94
- };
95
- }
96
- }
92
+ `)
93
+ .run(libraryId);
94
+ };
95
+ }
96
+ }
97
97
  //# sourceMappingURL=Baselines.js.map
@@ -1,18 +1,18 @@
1
- import { ServerMessage } from '@verdant-web/common';
2
- import { IncomingMessage, ServerResponse } from 'http';
3
- import { WebSocket } from 'ws';
4
- import { TokenInfo } from './TokenVerifier.js';
5
- export declare class ClientConnectionManager {
6
- private readonly connections;
7
- private getLibraryConnections;
8
- addSocket: (libraryId: string, key: string, socket: WebSocket, info: TokenInfo) => void;
9
- addRequest: (libraryId: string, key: string, request: IncomingMessage, response: ServerResponse, info: TokenInfo) => () => void;
10
- remove: (libraryId: string, key: string) => void;
11
- respond: (libraryId: string, key: string, message: ServerMessage) => void;
12
- /**
13
- * Broadcasts a message to all live-connected clients in a library.
14
- * This does not reach push/pull clients.
15
- */
16
- broadcast: (libraryId: string, message: ServerMessage, omitKeys?: string[]) => void;
17
- disconnectAll: (libraryId: string) => void;
18
- }
1
+ import { ServerMessage } from '@verdant-web/common';
2
+ import { IncomingMessage, ServerResponse } from 'http';
3
+ import { WebSocket } from 'ws';
4
+ import { TokenInfo } from './TokenVerifier.js';
5
+ export declare class ClientConnectionManager {
6
+ private readonly connections;
7
+ private getLibraryConnections;
8
+ addSocket: (libraryId: string, key: string, socket: WebSocket, info: TokenInfo) => void;
9
+ addRequest: (libraryId: string, key: string, request: IncomingMessage, response: ServerResponse, info: TokenInfo) => () => void;
10
+ remove: (libraryId: string, key: string) => void;
11
+ respond: (libraryId: string, key: string, message: ServerMessage) => void;
12
+ /**
13
+ * Broadcasts a message to all live-connected clients in a library.
14
+ * This does not reach push/pull clients.
15
+ */
16
+ broadcast: (libraryId: string, message: ServerMessage, omitKeys?: string[]) => void;
17
+ disconnectAll: (libraryId: string) => void;
18
+ }