document-drive 1.29.0-dev.0 → 1.29.0-dev.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.
Files changed (42) hide show
  1. package/dist/prisma/schema.prisma +6 -10
  2. package/dist/src/cache/memory.d.ts +5 -2
  3. package/dist/src/cache/memory.d.ts.map +1 -1
  4. package/dist/src/cache/memory.js +14 -0
  5. package/dist/src/cache/redis.d.ts +5 -2
  6. package/dist/src/cache/redis.d.ts.map +1 -1
  7. package/dist/src/cache/redis.js +12 -0
  8. package/dist/src/drive-document-model/gen/schema/zod.d.ts +8 -8
  9. package/dist/src/drive-document-model/gen/schema/zod.d.ts.map +1 -1
  10. package/dist/src/server/base-server.d.ts +1 -1
  11. package/dist/src/server/base-server.d.ts.map +1 -1
  12. package/dist/src/server/base-server.js +0 -13
  13. package/dist/src/server/listener/listener-manager.js +2 -2
  14. package/dist/src/server/listener/transmitter/pull-responder.d.ts +1 -1
  15. package/dist/src/server/listener/transmitter/pull-responder.d.ts.map +1 -1
  16. package/dist/src/server/listener/transmitter/pull-responder.js +2 -3
  17. package/dist/src/server/sync-manager.d.ts.map +1 -1
  18. package/dist/src/server/sync-manager.js +5 -16
  19. package/dist/src/server/types.d.ts +0 -1
  20. package/dist/src/server/types.d.ts.map +1 -1
  21. package/dist/src/storage/browser.d.ts +0 -3
  22. package/dist/src/storage/browser.d.ts.map +1 -1
  23. package/dist/src/storage/browser.js +27 -18
  24. package/dist/src/storage/filesystem.d.ts +0 -2
  25. package/dist/src/storage/filesystem.d.ts.map +1 -1
  26. package/dist/src/storage/filesystem.js +24 -23
  27. package/dist/src/storage/ipfs.d.ts +1 -1
  28. package/dist/src/storage/ipfs.d.ts.map +1 -1
  29. package/dist/src/storage/ipfs.js +17 -17
  30. package/dist/src/storage/memory.d.ts +0 -4
  31. package/dist/src/storage/memory.d.ts.map +1 -1
  32. package/dist/src/storage/memory.js +31 -36
  33. package/dist/src/storage/prisma/factory.d.ts +4 -3
  34. package/dist/src/storage/prisma/factory.d.ts.map +1 -1
  35. package/dist/src/storage/prisma/factory.js +5 -5
  36. package/dist/src/storage/prisma/index.d.ts +4 -5
  37. package/dist/src/storage/prisma/index.d.ts.map +1 -1
  38. package/dist/src/storage/prisma/index.js +33 -71
  39. package/dist/src/storage/types.d.ts +2 -3
  40. package/dist/src/storage/types.d.ts.map +1 -1
  41. package/dist/tsconfig.tsbuildinfo +1 -1
  42. package/package.json +5 -5
@@ -46,9 +46,10 @@ function getRetryTransactionsClient(prisma, backOffOptions) {
46
46
  }
47
47
  export class PrismaStorage {
48
48
  db;
49
- delegate;
50
- constructor(db, options) {
49
+ cache;
50
+ constructor(db, cache, options) {
51
51
  const backOffOptions = options?.transactionRetryBackoff;
52
+ this.cache = cache;
52
53
  this.db = getRetryTransactionsClient(db, {
53
54
  ...backOffOptions,
54
55
  jitter: backOffOptions?.jitter ?? "full",
@@ -83,59 +84,37 @@ export class PrismaStorage {
83
84
  },
84
85
  });
85
86
  }
87
+ async get(documentId) {
88
+ throw new Error("Not implemented");
89
+ }
86
90
  ////////////////////////////////
87
91
  // IDriveStorage
88
92
  ////////////////////////////////
89
- setStorageDelegate(delegate) {
90
- this.delegate = delegate;
91
- }
92
93
  async createDrive(id, drive) {
93
- const doc = {
94
- name: drive.name,
95
- documentType: drive.documentType,
96
- isDrive: true,
97
- initialState: JSON.stringify(drive.initialState),
98
- lastModified: drive.lastModified,
99
- revision: JSON.stringify(drive.revision),
100
- meta: drive.meta ? JSON.stringify(drive.meta) : undefined,
101
- id,
102
- };
103
- await this.db.document.upsert({
104
- where: {
105
- id,
106
- },
107
- update: doc,
108
- create: doc,
109
- });
110
- // backwards compatibility -- if the drive has a slug, check if it already exists
111
- if (drive.initialState.state.global.slug) {
112
- const existingDrive = await this.db.drive.findFirst({
113
- where: {
114
- slug: drive.initialState.state.global.slug,
94
+ try {
95
+ await this.db.drive.create({
96
+ data: {
97
+ id,
98
+ slug: drive.initialState.state.global.slug ?? id,
115
99
  },
116
100
  });
117
- if (existingDrive) {
118
- await this.db.drive.update({
119
- where: { id: existingDrive.id },
120
- data: {
121
- id,
122
- slug: drive.initialState.state.global.slug,
123
- },
124
- });
125
- return;
101
+ }
102
+ catch (e) {
103
+ if (e instanceof PrismaClientKnownRequestError && e.code === "P2002") {
104
+ throw new Error(`Drive with slug ${drive.initialState.state.global.slug ?? id} already exists`);
126
105
  }
106
+ throw e;
127
107
  }
128
- await this.db.drive.upsert({
129
- where: {
130
- id,
131
- },
132
- create: {
133
- id,
134
- slug: drive.initialState.state.global.slug ?? id,
135
- },
136
- update: {
108
+ await this.db.document.create({
109
+ data: {
110
+ name: drive.name,
111
+ documentType: drive.documentType,
112
+ isDrive: true,
113
+ initialState: JSON.stringify(drive.initialState),
114
+ lastModified: drive.lastModified,
115
+ revision: JSON.stringify(drive.revision),
116
+ meta: drive.meta ? JSON.stringify(drive.meta) : undefined,
137
117
  id,
138
- slug: drive.initialState.state.global.slug ?? id,
139
118
  },
140
119
  });
141
120
  }
@@ -161,7 +140,6 @@ export class PrismaStorage {
161
140
  try {
162
141
  await tx.operation.createMany({
163
142
  data: operations.map((op) => ({
164
- driveId: drive,
165
143
  documentId: id,
166
144
  hash: op.hash,
167
145
  index: op.index,
@@ -295,19 +273,11 @@ export class PrismaStorage {
295
273
  id,
296
274
  },
297
275
  };
298
- if (driveId !== "drives") {
299
- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
300
- query.where.driveDocuments = {
301
- some: {
302
- driveId,
303
- },
304
- };
305
- }
306
276
  const result = await prisma.document.findUnique(query);
307
277
  if (result === null) {
308
278
  throw new Error(`Document with id ${id} not found`);
309
279
  }
310
- const cachedOperations = (await this.delegate?.getCachedOperations(driveId, id)) ?? {
280
+ const cachedOperations = (await this.cache.getCachedOperations(driveId, id)) ?? {
311
281
  global: [],
312
282
  local: [],
313
283
  };
@@ -347,10 +317,10 @@ export class PrismaStorage {
347
317
  ELSE NULL
348
318
  END AS "resultingState"
349
319
  FROM ranked_operations
350
- WHERE "driveId" = $1 AND "documentId" = $2
320
+ WHERE "documentId" = $1
351
321
  AND (${conditions.join(" OR ")})
352
322
  ORDER BY scope, index;
353
- `, driveId, id);
323
+ `, id);
354
324
  const operationIds = queryOperations.map((o) => o.id);
355
325
  const attachments = await prisma.attachment.findMany({
356
326
  where: {
@@ -474,7 +444,6 @@ export class PrismaStorage {
474
444
  const operation = await this.db.operation.findUnique({
475
445
  where: {
476
446
  unique_operation: {
477
- driveId,
478
447
  documentId,
479
448
  index,
480
449
  scope,
@@ -491,26 +460,19 @@ export class PrismaStorage {
491
460
  // TODO add branch condition
492
461
  const whereClauses = units
493
462
  .map((_, index) => {
494
- return `("driveId" = $${index * 3 + 1} AND "documentId" = $${index * 3 + 2} AND "scope" = $${index * 3 + 3})`;
463
+ return `("documentId" = $${index * 2 + 1} AND "scope" = $${index * 2 + 2})`;
495
464
  })
496
465
  .join(" OR ");
497
466
  const query = `
498
- SELECT "driveId", "documentId", "scope", "branch", MAX("timestamp") as "lastUpdated", MAX("index") as revision FROM "Operation"
467
+ SELECT "documentId", "scope", "branch", MAX("timestamp") as "lastUpdated", MAX("index") as revision FROM "Operation"
499
468
  WHERE ${whereClauses}
500
- GROUP BY "driveId", "documentId", "scope", "branch"
469
+ GROUP BY "documentId", "scope", "branch"
501
470
  `;
502
- const params = units
503
- .map((unit) => [
504
- unit.documentId ? unit.driveId : "drives",
505
- unit.documentId || unit.driveId,
506
- unit.scope,
507
- ])
508
- .flat();
471
+ const params = units.map((unit) => [unit.documentId, unit.scope]).flat();
509
472
  const results = await this.db.$queryRawUnsafe(query, ...params);
510
473
  return results.map((row) => ({
511
474
  ...row,
512
- driveId: row.driveId === "drives" ? row.documentId : row.driveId,
513
- documentId: row.driveId === "drives" ? "" : row.documentId,
475
+ documentId: row.documentId,
514
476
  lastUpdated: new Date(row.lastUpdated).toISOString(),
515
477
  }));
516
478
  }
@@ -1,12 +1,13 @@
1
1
  import { type DocumentDriveDocument } from "#drive-document-model/gen/types";
2
2
  import { type SynchronizationUnitQuery } from "#server/types";
3
3
  import type { DocumentHeader, Operation, OperationFromDocument, OperationsFromDocument, PHDocument } from "document-model";
4
- export interface IStorageDelegate {
4
+ export interface IOperationsCache {
5
5
  getCachedOperations<TDocument extends PHDocument = PHDocument>(drive: string, id: string): Promise<OperationsFromDocument<TDocument> | undefined>;
6
6
  }
7
7
  export interface IDocumentStorage {
8
8
  exists(documentId: string): Promise<boolean>;
9
9
  create(documentId: string, document: PHDocument): Promise<void>;
10
+ get<TDocument extends PHDocument>(documentId: string): Promise<TDocument>;
10
11
  }
11
12
  export interface IStorage {
12
13
  checkDocumentExists(drive: string, id: string): Promise<boolean>;
@@ -20,9 +21,7 @@ export interface IStorage {
20
21
  }>): Promise<void>;
21
22
  deleteDocument(drive: string, id: string): Promise<void>;
22
23
  getOperationResultingState?(drive: string, id: string, index: number, scope: string, branch: string): Promise<string | undefined>;
23
- setStorageDelegate?(delegate: IStorageDelegate): void;
24
24
  getSynchronizationUnitsRevision(units: SynchronizationUnitQuery[]): Promise<{
25
- driveId: string;
26
25
  documentId: string;
27
26
  scope: string;
28
27
  branch: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/storage/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/storage/types.ts"],"names":[],"mappings":"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"}