document-drive 2.5.0-dev.10 → 2.5.0-dev.12

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.
@@ -20,6 +20,7 @@ export declare class InternalTransmitter implements ITransmitter {
20
20
  protected drive: IBaseDocumentDriveServer;
21
21
  protected processor: IProcessor;
22
22
  protected taskQueueMethod: RunAsap.RunAsap<unknown> | null;
23
+ protected transmitQueue: Promise<ListenerRevision[]> | undefined;
23
24
  constructor(drive: IDocumentDriveServer, processor: IProcessor, taskQueueMethod?: RunAsap.RunAsap<unknown> | null);
24
25
  transmit(strands: StrandUpdate[], _source: StrandUpdateSource): Promise<ListenerRevision[]>;
25
26
  disconnect(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../../../../src/server/listener/transmitter/internal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAEL,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,KAAK,YAAY,EAClB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EACnB,KAAK,UAAU,EAChB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAExE,MAAM,MAAM,uBAAuB,CAAC,SAAS,SAAS,UAAU,IAAI,IAAI,CACtE,qBAAqB,CAAC,SAAS,CAAC,EAChC,OAAO,CACR,GAAG;IACF,KAAK,EAAE,uBAAuB,CAAC,SAAS,CAAC,GAAG,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAC9E,aAAa,EACT,uBAAuB,CAAC,SAAS,CAAC,GAClC,sBAAsB,CAAC,SAAS,CAAC,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,yBAAyB,CAAC,SAAS,SAAS,UAAU,IAAI;IACpE,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,cAAc,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,uBAAuB,CAAC,SAAS,CAAC,EAAE,CAAC;IACjD,KAAK,EAAE,uBAAuB,CAAC,SAAS,CAAC,GAAG,sBAAsB,CAAC,SAAS,CAAC,CAAC;CAC/E,CAAC;AAEF,qBAAa,mBAAoB,YAAW,YAAY;;IACtD,SAAS,CAAC,KAAK,EAAE,wBAAwB,CAAC;IAC1C,SAAS,CAAC,SAAS,EAAE,UAAU,CAAC;IAChC,SAAS,CAAC,eAAe,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;gBAGzD,KAAK,EAAE,oBAAoB,EAC3B,SAAS,EAAE,UAAU,EACrB,eAAe,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI;IA+D7C,QAAQ,CACZ,OAAO,EAAE,YAAY,EAAE,EAEvB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,gBAAgB,EAAE,CAAC;IA8BxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAGlC"}
1
+ {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../../../../src/server/listener/transmitter/internal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAEL,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,KAAK,YAAY,EAClB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EACnB,KAAK,UAAU,EAChB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAExE,MAAM,MAAM,uBAAuB,CAAC,SAAS,SAAS,UAAU,IAAI,IAAI,CACtE,qBAAqB,CAAC,SAAS,CAAC,EAChC,OAAO,CACR,GAAG;IACF,KAAK,EAAE,uBAAuB,CAAC,SAAS,CAAC,GAAG,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAC9E,aAAa,EACT,uBAAuB,CAAC,SAAS,CAAC,GAClC,sBAAsB,CAAC,SAAS,CAAC,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,yBAAyB,CAAC,SAAS,SAAS,UAAU,IAAI;IACpE,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,cAAc,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,uBAAuB,CAAC,SAAS,CAAC,EAAE,CAAC;IACjD,KAAK,EAAE,uBAAuB,CAAC,SAAS,CAAC,GAAG,sBAAsB,CAAC,SAAS,CAAC,CAAC;CAC/E,CAAC;AAEF,qBAAa,mBAAoB,YAAW,YAAY;;IACtD,SAAS,CAAC,KAAK,EAAE,wBAAwB,CAAC;IAC1C,SAAS,CAAC,SAAS,EAAE,UAAU,CAAC;IAChC,SAAS,CAAC,eAAe,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;IAC3D,SAAS,CAAC,aAAa,EAAE,OAAO,CAAC,gBAAgB,EAAE,CAAC,GAAG,SAAS,CAAC;gBAG/D,KAAK,EAAE,oBAAoB,EAC3B,SAAS,EAAE,UAAU,EACrB,eAAe,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI;IA+D7C,QAAQ,CACZ,OAAO,EAAE,YAAY,EAAE,EAEvB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAmCxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAGlC"}
@@ -4,6 +4,7 @@ export class InternalTransmitter {
4
4
  drive;
5
5
  processor;
6
6
  taskQueueMethod;
7
+ transmitQueue;
7
8
  constructor(drive, processor, taskQueueMethod) {
8
9
  this.drive = drive;
9
10
  this.processor = processor;
@@ -55,33 +56,37 @@ export class InternalTransmitter {
55
56
  async transmit(strands,
56
57
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
57
58
  _source) {
58
- const updates = [];
59
- for (const strand of strands) {
60
- const operations = await this.#buildInternalOperationUpdate(strand);
61
- const state = operations.at(-1)?.state ?? {};
62
- updates.push({
63
- ...strand,
64
- operations,
65
- state,
66
- });
67
- }
68
- try {
69
- await this.processor.onStrands(updates);
70
- return strands.map(({ operations, ...s }) => ({
71
- ...s,
72
- status: "SUCCESS",
73
- revision: operations.at(operations.length - 1)?.index ?? -1,
74
- }));
75
- }
76
- catch (error) {
77
- logger.error(error);
78
- // TODO check which strand caused an error
79
- return strands.map(({ operations, ...s }) => ({
80
- ...s,
81
- status: "ERROR",
82
- revision: (operations.at(0)?.index ?? 0) - 1,
83
- }));
84
- }
59
+ const task = async () => {
60
+ const updates = [];
61
+ for (const strand of strands) {
62
+ const operations = await this.#buildInternalOperationUpdate(strand);
63
+ const state = operations.at(-1)?.state ?? {};
64
+ updates.push({
65
+ ...strand,
66
+ operations,
67
+ state,
68
+ });
69
+ }
70
+ try {
71
+ await this.processor.onStrands(updates);
72
+ return strands.map(({ operations, ...s }) => ({
73
+ ...s,
74
+ status: "SUCCESS",
75
+ revision: operations.at(operations.length - 1)?.index ?? -1,
76
+ }));
77
+ }
78
+ catch (error) {
79
+ logger.error(error);
80
+ return strands.map(({ operations, ...s }) => ({
81
+ ...s,
82
+ status: "ERROR",
83
+ revision: (operations.at(0)?.index ?? 0) - 1,
84
+ }));
85
+ }
86
+ };
87
+ // adds to queue so that each `transmit` is processed at a time to avoid concurrency issues
88
+ this.transmitQueue = this.transmitQueue?.then(() => task()) ?? task();
89
+ return this.transmitQueue;
85
90
  }
86
91
  async disconnect() {
87
92
  await this.processor.onDisconnect();
@@ -1 +1 @@
1
- {"version":3,"file":"internal.js","sourceRoot":"","sources":["../../../../../src/server/listener/transmitter/internal.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"internal.js","sourceRoot":"","sources":["../../../../../src/server/listener/transmitter/internal.ts"],"names":[],"mappings":"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"}