@lionweb/delta-protocol-client 0.8.0-beta.0 → 0.8.0-beta.2

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 CHANGED
@@ -1,5 +1,10 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.8.0 — not yet released
4
+
5
+ * Rework the `LionWebClient` class to use the new `Forest` class from the `class-core` package.
6
+
7
+
3
8
  ## 0.7.1
4
9
 
5
10
  (The 0.7.0 release was deprecated because its `validation` package was faulty.)
package/dist/client.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { DeltaReceiver, Deserializer, IdMapping, ILanguageBase, INodeBase, NodeBaseFactory, RootsWithIdMapping } from "@lionweb/class-core";
1
+ import { DeltaReceiver, Forest, ILanguageBase, INodeBase } from "@lionweb/class-core";
2
2
  import { LionWebId, LionWebJsonChunk } from "@lionweb/json";
3
3
  import { Command, Event, QueryMessage, SemanticLogger, SubscribeToPartitionChangesParameters } from "@lionweb/delta-protocol-common";
4
4
  import { LowLevelClientInstantiator } from "./low-level-client.js";
@@ -19,12 +19,7 @@ export type LionWebClientParameters = {
19
19
  */
20
20
  export declare class LionWebClient {
21
21
  readonly clientId: LionWebId;
22
- model: INodeBase[];
23
- readonly idMapping: IdMapping;
24
- readonly createNode: NodeBaseFactory;
25
- readonly deserialize: Deserializer<INodeBase[]>;
26
- readonly deserializeWithIdMapping: Deserializer<RootsWithIdMapping>;
27
- private readonly effectiveReceiveDelta;
22
+ forest: Forest;
28
23
  private readonly lowLevelClient;
29
24
  private _participationId?;
30
25
  get participationId(): string | undefined;
@@ -32,15 +27,7 @@ export declare class LionWebClient {
32
27
  private lastReceivedSequenceNumber;
33
28
  private constructor();
34
29
  private readonly queryResolveById;
35
- private static readonly nodesByIdFrom;
36
30
  static create({ clientId, url, languageBases, instantiateDeltaReceiverForwardingTo, serializationChunk, semanticLogger, lowLevelClientInstantiator }: LionWebClientParameters): Promise<LionWebClient>;
37
- /**
38
- * Sets the model held by the client to the given model, discarding the previous one.
39
- * **Note**:
40
- * - The model is assumed to be injected with `this.effectiveReceiveDelta` — e.g. using this.createNode(...) or this.deserialize(...)`!
41
- * - No commands will be sent because of this action.
42
- */
43
- setModel(newModel: INodeBase[]): void;
44
31
  disconnect(): Promise<void>;
45
32
  /**
46
33
  * Makes the query in the sense that the given query request is sent (as a client message),
@@ -56,7 +43,6 @@ export declare class LionWebClient {
56
43
  reconnect(queryId: LionWebId, participationId: LionWebId, lastReceivedSequenceNumber: number): Promise<void>;
57
44
  getAvailableIds(queryId: LionWebId, count: number): Promise<LionWebId[]>;
58
45
  listPartitions(queryId: LionWebId): Promise<LionWebJsonChunk>;
59
- private static checkWhetherPartition;
60
46
  private checkSignedOn;
61
47
  addPartition(partition: INodeBase): void;
62
48
  deletePartition(partition: INodeBase): void;
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAiBA,OAAO,EAIH,aAAa,EACb,YAAY,EACZ,SAAS,EACT,aAAa,EACb,SAAS,EAET,eAAe,EAGf,kBAAkB,EAErB,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAG3D,OAAO,EAOH,OAAO,EAGP,KAAK,EAQL,YAAY,EAGZ,cAAc,EAMd,qCAAqC,EAIxC,MAAM,gCAAgC,CAAA;AACvC,OAAO,EAAkB,0BAA0B,EAAE,MAAM,uBAAuB,CAAA;AAMlF;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG;IAClC,QAAQ,EAAE,SAAS,CAAA;IACnB,GAAG,EAAE,MAAM,CAAA;IACX,aAAa,EAAE,aAAa,EAAE,CAAA;IAC9B,0BAA0B,EAAE,0BAA0B,CAAC,KAAK,GAAG,YAAY,EAAE,OAAO,GAAG,YAAY,CAAC,CAAA;IACpG,kBAAkB,CAAC,EAAE,gBAAgB,CAAA;IACrC,oCAAoC,CAAC,EAAE,CAAC,aAAa,EAAE,aAAa,KAAK,aAAa,CAAA;IACtF,cAAc,CAAC,EAAE,cAAc,CAAA;CAClC,CAAA;AAGD;;GAEG;AACH,qBAAa,aAAa;aAcF,QAAQ,EAAE,SAAS;IAC5B,KAAK,EAAE,SAAS,EAAE;aACT,SAAS,EAAE,SAAS;aACpB,UAAU,EAAE,eAAe;aAC3B,WAAW,EAAE,YAAY,CAAC,SAAS,EAAE,CAAC;aACtC,wBAAwB,EAAE,YAAY,CAAC,kBAAkB,CAAC;IAC1E,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IACtC,OAAO,CAAC,QAAQ,CAAC,cAAc;IAnBnC,OAAO,CAAC,gBAAgB,CAAC,CAAW;IAEpC,IAAI,eAAe,uBAElB;IAED,OAAO,CAAC,SAAS,CAAQ;IAEzB,OAAO,CAAC,0BAA0B,CAAK;IAGvC,OAAO;IAWP,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA2D;IAE5F,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CACG;WAE3B,MAAM,CAAC,EAAC,QAAQ,EAAE,GAAG,EAAE,aAAa,EAAE,oCAAoC,EAAE,kBAAkB,EAAE,cAAc,EAAE,0BAA0B,EAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,aAAa,CAAC;IA8F1M;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE;IAKxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAQjC;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,SAAS,CAKpB;IAEA,6BAA6B,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,qCAAqC,GAAG,OAAO,CAAC,IAAI,CAAC;IASnH,4BAA4B,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAUjG,gCAAgC,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IASzF,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAelE,OAAO,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAU1C,SAAS,CAAC,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,SAAS,EAAE,0BAA0B,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAY5G,eAAe,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAUxE,cAAc,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAYnE,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAUpC,OAAO,CAAC,aAAa;IAMrB,YAAY,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAUxC,eAAe,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;CAW9C"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,EAAkB,MAAM,qBAAqB,CAAA;AACrG,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAE3D,OAAO,EAOH,OAAO,EAGP,KAAK,EAQL,YAAY,EAGZ,cAAc,EAMd,qCAAqC,EAIxC,MAAM,gCAAgC,CAAA;AACvC,OAAO,EAAkB,0BAA0B,EAAE,MAAM,uBAAuB,CAAA;AAMlF;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG;IAClC,QAAQ,EAAE,SAAS,CAAA;IACnB,GAAG,EAAE,MAAM,CAAA;IACX,aAAa,EAAE,aAAa,EAAE,CAAA;IAC9B,0BAA0B,EAAE,0BAA0B,CAAC,KAAK,GAAG,YAAY,EAAE,OAAO,GAAG,YAAY,CAAC,CAAA;IACpG,kBAAkB,CAAC,EAAE,gBAAgB,CAAA;IACrC,oCAAoC,CAAC,EAAE,CAAC,aAAa,EAAE,aAAa,KAAK,aAAa,CAAA;IACtF,cAAc,CAAC,EAAE,cAAc,CAAA;CAClC,CAAA;AAGD;;GAEG;AACH,qBAAa,aAAa;aAcF,QAAQ,EAAE,SAAS;IAC5B,MAAM,EAAE,MAAM;IACrB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAdnC,OAAO,CAAC,gBAAgB,CAAC,CAAW;IAEpC,IAAI,eAAe,uBAElB;IAED,OAAO,CAAC,SAAS,CAAQ;IAEzB,OAAO,CAAC,0BAA0B,CAAK;IAGvC,OAAO;IAMP,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA2D;WAE/E,MAAM,CAAC,EAAC,QAAQ,EAAE,GAAG,EAAE,aAAa,EAAE,oCAAoC,EAAE,kBAAkB,EAAE,cAAc,EAAE,0BAA0B,EAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,aAAa,CAAC;IAyFpM,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAQjC;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,SAAS,CAKpB;IAEA,6BAA6B,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,qCAAqC,GAAG,OAAO,CAAC,IAAI,CAAC;IASnH,4BAA4B,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAUjG,gCAAgC,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IASzF,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAelE,OAAO,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAU1C,SAAS,CAAC,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,SAAS,EAAE,0BAA0B,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAY5G,eAAe,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAUxE,cAAc,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAYnE,OAAO,CAAC,aAAa;IAMrB,YAAY,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAKxC,eAAe,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;CAK9C"}
package/dist/client.js CHANGED
@@ -14,9 +14,7 @@
14
14
  //
15
15
  // SPDX-FileCopyrightText: 2025 TRUMPF Laser SE and other contributors
16
16
  // SPDX-License-Identifier: Apache-2.0
17
- import { allNodesFrom, applyDelta, combinedFactoryFor, IdMapping, nodeBaseDeserializerWithIdMapping, PartitionAddedDelta, PartitionDeletedDelta, serializeDelta } from "@lionweb/class-core";
18
- import { Concept } from "@lionweb/core";
19
- import { byIdMap } from "@lionweb/ts-utils";
17
+ import { Forest, serializeDelta } from "@lionweb/class-core";
20
18
  import { ansi, ClientAppliedEvent, ClientDidNotApplyEventFromOwnCommand, ClientHadProblem, ClientReceivedMessage, ClientSentMessage, DeltaOccurredOnClient, deltaToCommandTranslator, eventToDeltaTranslator, isEvent, isQueryResponse, semanticLoggerFunctionFrom } from "@lionweb/delta-protocol-common";
21
19
  import { priorityQueueAcceptor } from "./priority-queue.js";
22
20
  const { clientWarning } = ansi;
@@ -28,14 +26,9 @@ export class LionWebClient {
28
26
  return this._participationId;
29
27
  }
30
28
  // TODO could also get this from the priority queue (which would need to be adapted for that)
31
- constructor(clientId, model, idMapping, createNode, deserialize, deserializeWithIdMapping, effectiveReceiveDelta, lowLevelClient) {
29
+ constructor(clientId, forest, lowLevelClient) {
32
30
  this.clientId = clientId;
33
- this.model = model;
34
- this.idMapping = idMapping;
35
- this.createNode = createNode;
36
- this.deserialize = deserialize;
37
- this.deserializeWithIdMapping = deserializeWithIdMapping;
38
- this.effectiveReceiveDelta = effectiveReceiveDelta;
31
+ this.forest = forest;
39
32
  this.lowLevelClient = lowLevelClient;
40
33
  this.signedOff = false;
41
34
  this.lastReceivedSequenceNumber = -1;
@@ -78,11 +71,11 @@ export class LionWebClient {
78
71
  }
79
72
  };
80
73
  const effectiveReceiveDelta = instantiateDeltaReceiverForwardingTo === undefined ? commandSender : instantiateDeltaReceiverForwardingTo(commandSender);
81
- const { roots: model, idMapping } = serializationChunk === undefined
82
- ? { roots: [], idMapping: new IdMapping({}) }
83
- : nodeBaseDeserializerWithIdMapping(languageBases, effectiveReceiveDelta)(serializationChunk);
84
- const deserializerWithIdMapping = nodeBaseDeserializerWithIdMapping(languageBases, effectiveReceiveDelta);
85
- const eventAsDelta = eventToDeltaTranslator(languageBases, deserializerWithIdMapping);
74
+ const forest = new Forest({ languageBases, receiveDelta: effectiveReceiveDelta });
75
+ if (serializationChunk !== undefined) {
76
+ forest.deserializeInto(serializationChunk);
77
+ }
78
+ const eventAsDelta = eventToDeltaTranslator(languageBases, forest.deserializeWithIdMapping);
86
79
  loading = false;
87
80
  const processEvent = (event) => {
88
81
  lionWebClient.lastReceivedSequenceNumber = event.sequenceNumber;
@@ -90,10 +83,10 @@ export class LionWebClient {
90
83
  // Note: we can't remove members from issuedCommandIds because there may be multiple events originating fom a single command.
91
84
  if (commandOriginatingFromSelf === undefined) {
92
85
  try {
93
- const delta = eventAsDelta(event, idMapping);
86
+ const delta = eventAsDelta(event, forest.idMapping);
94
87
  if (delta !== undefined) {
95
88
  try {
96
- applyDelta(delta);
89
+ forest.applyDelta(delta);
97
90
  log(new ClientAppliedEvent(clientId, event));
98
91
  }
99
92
  catch (e) {
@@ -129,19 +122,9 @@ export class LionWebClient {
129
122
  }
130
123
  };
131
124
  const lowLevelClient = await lowLevelClientInstantiator({ url, clientId, receiveMessageOnClient /* no logging parameter */ });
132
- const lionWebClient = new LionWebClient(clientId, model, idMapping, combinedFactoryFor(languageBases, effectiveReceiveDelta), (serializationChunk) => deserializerWithIdMapping(serializationChunk).roots, deserializerWithIdMapping, effectiveReceiveDelta, lowLevelClient); // Note: we need this `lionWebClient` constant non-inlined for write-access to lastReceivedSequenceNumber and queryResolveById.
125
+ const lionWebClient = new LionWebClient(clientId, forest, lowLevelClient); // Note: we need this `lionWebClient` constant non-inlined for write-access to lastReceivedSequenceNumber and queryResolveById.
133
126
  return lionWebClient;
134
127
  }
135
- /**
136
- * Sets the model held by the client to the given model, discarding the previous one.
137
- * **Note**:
138
- * - The model is assumed to be injected with `this.effectiveReceiveDelta` — e.g. using this.createNode(...) or this.deserialize(...)`!
139
- * - No commands will be sent because of this action.
140
- */
141
- setModel(newModel) {
142
- this.model = newModel;
143
- this.idMapping.reinitializeWith(LionWebClient.nodesByIdFrom(newModel));
144
- }
145
128
  async disconnect() {
146
129
  // TODO abort responses to all queries that the repository hasn't responded to?
147
130
  await this.lowLevelClient.disconnect();
@@ -223,15 +206,6 @@ export class LionWebClient {
223
206
  return response.partitions;
224
207
  }
225
208
  // commands, in order of the specification (§ 6.5):
226
- static checkWhetherPartition(node) {
227
- const { classifier } = node;
228
- if (!(classifier instanceof Concept)) {
229
- throw new Error(`node with classifier ${classifier.name} from language ${classifier.language.name} is not an instance of a Concept`);
230
- }
231
- if (!classifier.partition) {
232
- throw new Error(`classifier ${classifier.name} from language ${classifier.language.name} is not a partition`);
233
- }
234
- }
235
209
  checkSignedOn() {
236
210
  if (this._participationId === undefined) {
237
211
  throw new Error(`client ${this.clientId} can't send a command without being signed on`);
@@ -239,24 +213,11 @@ export class LionWebClient {
239
213
  }
240
214
  addPartition(partition) {
241
215
  this.checkSignedOn();
242
- LionWebClient.checkWhetherPartition(partition);
243
- if (this.model.indexOf(partition) === -1) {
244
- this.model.push(partition);
245
- this.idMapping.updateWith(partition);
246
- this.effectiveReceiveDelta(new PartitionAddedDelta(partition));
247
- } // else: ignore; already done
216
+ this.forest.addPartition(partition);
248
217
  }
249
218
  deletePartition(partition) {
250
219
  this.checkSignedOn();
251
- const index = this.model.indexOf(partition);
252
- if (index > -1) {
253
- this.model.splice(index, 1);
254
- this.effectiveReceiveDelta(new PartitionDeletedDelta(partition));
255
- }
256
- else {
257
- throw new Error(`node with id "${partition.id}" is not a partition in the current model`);
258
- }
220
+ this.forest.deletePartition(partition);
259
221
  }
260
222
  }
261
- LionWebClient.nodesByIdFrom = (model) => byIdMap(model.flatMap(allNodesFrom));
262
223
  //# sourceMappingURL=client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lionweb/delta-protocol-client",
3
- "version": "0.8.0-beta.0",
3
+ "version": "0.8.0-beta.2",
4
4
  "description": "Part of the implementation of a delta protocol client not tied to a specific message transport protocol",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -27,11 +27,11 @@
27
27
  "release": "npm publish"
28
28
  },
29
29
  "dependencies": {
30
- "@lionweb/class-core": "0.8.0-beta.0",
31
- "@lionweb/core": "0.8.0-beta.0",
32
- "@lionweb/delta-protocol-common": "0.8.0-beta.0",
33
- "@lionweb/delta-protocol-client": "0.8.0-beta.0",
34
- "@lionweb/json": "0.8.0-beta.0",
35
- "@lionweb/ts-utils": "0.8.0-beta.0"
30
+ "@lionweb/class-core": "0.8.0-beta.2",
31
+ "@lionweb/core": "0.8.0-beta.2",
32
+ "@lionweb/delta-protocol-common": "0.8.0-beta.2",
33
+ "@lionweb/delta-protocol-client": "0.8.0-beta.2",
34
+ "@lionweb/json": "0.8.0-beta.2",
35
+ "@lionweb/ts-utils": "0.8.0-beta.2"
36
36
  }
37
37
  }
package/src/client.ts CHANGED
@@ -15,25 +15,8 @@
15
15
  // SPDX-FileCopyrightText: 2025 TRUMPF Laser SE and other contributors
16
16
  // SPDX-License-Identifier: Apache-2.0
17
17
 
18
- import {
19
- allNodesFrom,
20
- applyDelta,
21
- combinedFactoryFor,
22
- DeltaReceiver,
23
- Deserializer,
24
- IdMapping,
25
- ILanguageBase,
26
- INodeBase,
27
- nodeBaseDeserializerWithIdMapping,
28
- NodeBaseFactory,
29
- PartitionAddedDelta,
30
- PartitionDeletedDelta,
31
- RootsWithIdMapping,
32
- serializeDelta
33
- } from "@lionweb/class-core"
34
- import { Concept } from "@lionweb/core"
18
+ import { DeltaReceiver, Forest, ILanguageBase, INodeBase, serializeDelta } from "@lionweb/class-core"
35
19
  import { LionWebId, LionWebJsonChunk } from "@lionweb/json"
36
- import { byIdMap } from "@lionweb/ts-utils"
37
20
 
38
21
  import {
39
22
  ansi,
@@ -105,20 +88,12 @@ export class LionWebClient {
105
88
 
106
89
  private constructor(
107
90
  public readonly clientId: LionWebId,
108
- public model: INodeBase[],
109
- public readonly idMapping: IdMapping,
110
- public readonly createNode: NodeBaseFactory,
111
- public readonly deserialize: Deserializer<INodeBase[]>,
112
- public readonly deserializeWithIdMapping: Deserializer<RootsWithIdMapping>,
113
- private readonly effectiveReceiveDelta: DeltaReceiver,
91
+ public forest: Forest,
114
92
  private readonly lowLevelClient: LowLevelClient<Command | QueryMessage>
115
93
  ) {}
116
94
 
117
95
  private readonly queryResolveById: { [queryId: string]: (value: QueryMessage) => void } = {}
118
96
 
119
- private static readonly nodesByIdFrom = (model: INodeBase[]) =>
120
- byIdMap(model.flatMap(allNodesFrom))
121
-
122
97
  static async create({clientId, url, languageBases, instantiateDeltaReceiverForwardingTo, serializationChunk, semanticLogger, lowLevelClientInstantiator}: LionWebClientParameters): Promise<LionWebClient> {
123
98
  const log = semanticLoggerFunctionFrom(semanticLogger)
124
99
 
@@ -146,11 +121,11 @@ export class LionWebClient {
146
121
  }
147
122
  }
148
123
  const effectiveReceiveDelta = instantiateDeltaReceiverForwardingTo === undefined ? commandSender : instantiateDeltaReceiverForwardingTo(commandSender)
149
- const { roots: model, idMapping } = serializationChunk === undefined
150
- ? { roots: [], idMapping: new IdMapping({}) }
151
- : nodeBaseDeserializerWithIdMapping(languageBases, effectiveReceiveDelta)(serializationChunk)
152
- const deserializerWithIdMapping = nodeBaseDeserializerWithIdMapping(languageBases, effectiveReceiveDelta)
153
- const eventAsDelta = eventToDeltaTranslator(languageBases, deserializerWithIdMapping)
124
+ const forest = new Forest({ languageBases, receiveDelta: effectiveReceiveDelta })
125
+ if (serializationChunk !== undefined) {
126
+ forest.deserializeInto(serializationChunk)
127
+ }
128
+ const eventAsDelta = eventToDeltaTranslator(languageBases, forest.deserializeWithIdMapping)
154
129
  loading = false
155
130
 
156
131
  const processEvent = (event: Event) => {
@@ -159,10 +134,10 @@ export class LionWebClient {
159
134
  // Note: we can't remove members from issuedCommandIds because there may be multiple events originating fom a single command.
160
135
  if (commandOriginatingFromSelf === undefined) {
161
136
  try {
162
- const delta = eventAsDelta(event, idMapping)
137
+ const delta = eventAsDelta(event, forest.idMapping)
163
138
  if (delta !== undefined) {
164
139
  try {
165
- applyDelta(delta)
140
+ forest.applyDelta(delta)
166
141
  log(new ClientAppliedEvent(clientId, event))
167
142
  } catch (e) {
168
143
  log(new ClientHadProblem(clientId, `couldn't apply delta of type ${delta.constructor.name} because of: ${(e as Error).message}`))
@@ -202,28 +177,12 @@ export class LionWebClient {
202
177
 
203
178
  const lionWebClient = new LionWebClient(
204
179
  clientId,
205
- model,
206
- idMapping,
207
- combinedFactoryFor(languageBases, effectiveReceiveDelta),
208
- (serializationChunk) => deserializerWithIdMapping(serializationChunk).roots,
209
- deserializerWithIdMapping,
210
- effectiveReceiveDelta,
180
+ forest,
211
181
  lowLevelClient
212
182
  ) // Note: we need this `lionWebClient` constant non-inlined for write-access to lastReceivedSequenceNumber and queryResolveById.
213
183
  return lionWebClient
214
184
  }
215
185
 
216
- /**
217
- * Sets the model held by the client to the given model, discarding the previous one.
218
- * **Note**:
219
- * - The model is assumed to be injected with `this.effectiveReceiveDelta` — e.g. using this.createNode(...) or this.deserialize(...)`!
220
- * - No commands will be sent because of this action.
221
- */
222
- setModel(newModel: INodeBase[]) {
223
- this.model = newModel
224
- this.idMapping.reinitializeWith(LionWebClient.nodesByIdFrom(newModel))
225
- }
226
-
227
186
  async disconnect(): Promise<void> {
228
187
  // TODO abort responses to all queries that the repository hasn't responded to?
229
188
  await this.lowLevelClient.disconnect()
@@ -331,16 +290,6 @@ export class LionWebClient {
331
290
 
332
291
  // commands, in order of the specification (§ 6.5):
333
292
 
334
- private static checkWhetherPartition(node: INodeBase): void {
335
- const {classifier} = node
336
- if (!(classifier instanceof Concept)) {
337
- throw new Error(`node with classifier ${classifier.name} from language ${classifier.language.name} is not an instance of a Concept`)
338
- }
339
- if (!classifier.partition) {
340
- throw new Error(`classifier ${classifier.name} from language ${classifier.language.name} is not a partition`)
341
- }
342
- }
343
-
344
293
  private checkSignedOn(): void {
345
294
  if (this._participationId === undefined) {
346
295
  throw new Error(`client ${this.clientId} can't send a command without being signed on`)
@@ -349,23 +298,12 @@ export class LionWebClient {
349
298
 
350
299
  addPartition(partition: INodeBase): void {
351
300
  this.checkSignedOn()
352
- LionWebClient.checkWhetherPartition(partition)
353
- if (this.model.indexOf(partition) === -1) {
354
- this.model.push(partition)
355
- this.idMapping.updateWith(partition)
356
- this.effectiveReceiveDelta(new PartitionAddedDelta(partition))
357
- } // else: ignore; already done
301
+ this.forest.addPartition(partition)
358
302
  }
359
303
 
360
304
  deletePartition(partition: INodeBase): void {
361
305
  this.checkSignedOn()
362
- const index = this.model.indexOf(partition)
363
- if (index > -1) {
364
- this.model.splice(index, 1)
365
- this.effectiveReceiveDelta(new PartitionDeletedDelta(partition))
366
- } else {
367
- throw new Error(`node with id "${partition.id}" is not a partition in the current model`)
368
- }
306
+ this.forest.deletePartition(partition)
369
307
  }
370
308
 
371
309
  }