@lionweb/class-core 0.7.0-beta.8 → 0.7.0

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 (117) hide show
  1. package/CHANGELOG.md +18 -1
  2. package/README.md +6 -6
  3. package/dist/LionCore_builtins.g.d.ts +2 -2
  4. package/dist/LionCore_builtins.g.d.ts.map +1 -1
  5. package/dist/LionCore_builtins.g.js +1 -1
  6. package/dist/LionCore_builtins.g.js.map +1 -1
  7. package/dist/base-types.d.ts +7 -11
  8. package/dist/base-types.d.ts.map +1 -1
  9. package/dist/base-types.js +3 -28
  10. package/dist/base-types.js.map +1 -1
  11. package/dist/convenience.d.ts +10 -9
  12. package/dist/convenience.d.ts.map +1 -1
  13. package/dist/convenience.js +12 -11
  14. package/dist/convenience.js.map +1 -1
  15. package/dist/deltas/appliers.d.ts +5 -4
  16. package/dist/deltas/appliers.d.ts.map +1 -1
  17. package/dist/deltas/appliers.js +369 -163
  18. package/dist/deltas/appliers.js.map +1 -1
  19. package/dist/deltas/compositor.d.ts +51 -0
  20. package/dist/deltas/compositor.d.ts.map +1 -0
  21. package/dist/deltas/compositor.js +95 -0
  22. package/dist/deltas/compositor.js.map +1 -0
  23. package/dist/deltas/index.d.ts +2 -1
  24. package/dist/deltas/index.d.ts.map +1 -1
  25. package/dist/deltas/index.js +2 -1
  26. package/dist/deltas/index.js.map +1 -1
  27. package/dist/deltas/inverters.d.ts.map +1 -1
  28. package/dist/deltas/inverters.js +91 -28
  29. package/dist/deltas/inverters.js.map +1 -1
  30. package/dist/deltas/receivers.d.ts +39 -0
  31. package/dist/deltas/receivers.d.ts.map +1 -0
  32. package/dist/deltas/receivers.js +60 -0
  33. package/dist/deltas/receivers.js.map +1 -0
  34. package/dist/deltas/serialization/deserializer.g.d.ts.map +1 -1
  35. package/dist/deltas/serialization/deserializer.g.js +167 -59
  36. package/dist/deltas/serialization/deserializer.g.js.map +1 -1
  37. package/dist/deltas/serialization/serializer-helpers.d.ts +1 -1
  38. package/dist/deltas/serialization/serializer-helpers.d.ts.map +1 -1
  39. package/dist/deltas/serialization/serializer-helpers.js +3 -4
  40. package/dist/deltas/serialization/serializer-helpers.js.map +1 -1
  41. package/dist/deltas/serialization/serializer.g.d.ts +2 -2
  42. package/dist/deltas/serialization/serializer.g.d.ts.map +1 -1
  43. package/dist/deltas/serialization/serializer.g.js +186 -47
  44. package/dist/deltas/serialization/serializer.g.js.map +1 -1
  45. package/dist/deltas/serialization/types.g.d.ts +156 -43
  46. package/dist/deltas/serialization/types.g.d.ts.map +1 -1
  47. package/dist/deltas/types.g.d.ts +155 -55
  48. package/dist/deltas/types.g.d.ts.map +1 -1
  49. package/dist/deltas/types.g.js +170 -57
  50. package/dist/deltas/types.g.js.map +1 -1
  51. package/dist/deserializer.d.ts +6 -6
  52. package/dist/deserializer.d.ts.map +1 -1
  53. package/dist/deserializer.js +16 -27
  54. package/dist/deserializer.js.map +1 -1
  55. package/dist/duplicator.d.ts.map +1 -1
  56. package/dist/duplicator.js.map +1 -1
  57. package/dist/factory.d.ts +10 -2
  58. package/dist/factory.d.ts.map +1 -1
  59. package/dist/factory.js +25 -16
  60. package/dist/factory.js.map +1 -1
  61. package/dist/id-mapping.d.ts +31 -3
  62. package/dist/id-mapping.d.ts.map +1 -1
  63. package/dist/id-mapping.js +46 -14
  64. package/dist/id-mapping.js.map +1 -1
  65. package/dist/serializer.d.ts.map +1 -1
  66. package/dist/textualizer.d.ts +1 -1
  67. package/dist/textualizer.d.ts.map +1 -1
  68. package/dist/textualizer.js +1 -1
  69. package/dist/textualizer.js.map +1 -1
  70. package/dist/value-managers/annotations.d.ts +5 -0
  71. package/dist/value-managers/annotations.d.ts.map +1 -1
  72. package/dist/value-managers/annotations.js +31 -3
  73. package/dist/value-managers/annotations.js.map +1 -1
  74. package/dist/value-managers/base.d.ts +2 -2
  75. package/dist/value-managers/base.d.ts.map +1 -1
  76. package/dist/value-managers/base.js +4 -4
  77. package/dist/value-managers/base.js.map +1 -1
  78. package/dist/value-managers/containments.d.ts +4 -1
  79. package/dist/value-managers/containments.d.ts.map +1 -1
  80. package/dist/value-managers/containments.js +151 -20
  81. package/dist/value-managers/containments.js.map +1 -1
  82. package/dist/value-managers/properties.d.ts.map +1 -1
  83. package/dist/value-managers/properties.js +1 -0
  84. package/dist/value-managers/properties.js.map +1 -1
  85. package/dist/value-managers/references.d.ts +3 -0
  86. package/dist/value-managers/references.d.ts.map +1 -1
  87. package/dist/value-managers/references.js +26 -8
  88. package/dist/value-managers/references.js.map +1 -1
  89. package/package.json +34 -37
  90. package/src/LionCore_builtins.g.ts +2 -2
  91. package/src/base-types.ts +6 -32
  92. package/src/convenience.ts +15 -14
  93. package/src/deltas/appliers.ts +377 -177
  94. package/src/deltas/compositor.ts +107 -0
  95. package/src/deltas/index.ts +3 -1
  96. package/src/deltas/inverters.ts +108 -36
  97. package/src/deltas/receivers.ts +92 -0
  98. package/src/deltas/serialization/deserializer.g.ts +185 -64
  99. package/src/deltas/serialization/serializer-helpers.ts +3 -10
  100. package/src/deltas/serialization/serializer.g.ts +242 -63
  101. package/src/deltas/serialization/types.g.ts +190 -51
  102. package/src/deltas/types.g.ts +190 -51
  103. package/src/deserializer.ts +32 -43
  104. package/src/duplicator.ts +1 -1
  105. package/src/factory.ts +31 -17
  106. package/src/id-mapping.ts +43 -5
  107. package/src/textualizer.ts +1 -1
  108. package/src/value-managers/annotations.ts +28 -2
  109. package/src/value-managers/base.ts +4 -4
  110. package/src/value-managers/containments.ts +144 -20
  111. package/src/value-managers/properties.ts +1 -0
  112. package/src/value-managers/references.ts +28 -8
  113. package/dist/deltas/handlers.d.ts +0 -17
  114. package/dist/deltas/handlers.d.ts.map +0 -1
  115. package/dist/deltas/handlers.js +0 -43
  116. package/dist/deltas/handlers.js.map +0 -1
  117. package/src/deltas/handlers.ts +0 -64
@@ -19,7 +19,12 @@ import { Reference, SingleRef } from "@lionweb/core"
19
19
  import { action, observable } from "mobx"
20
20
 
21
21
  import { INodeBase } from "../base-types.js"
22
- import { ReferenceAddedDelta, ReferenceDeletedDelta, ReferenceMovedInSameReferenceDelta, ReferenceReplacedDelta } from "../deltas/index.js"
22
+ import {
23
+ EntryMovedInSameReferenceDelta,
24
+ ReferenceAddedDelta,
25
+ ReferenceChangedDelta,
26
+ ReferenceDeletedDelta
27
+ } from "../deltas/index.js"
23
28
  import { checkIndex, FeatureValueManager } from "./base.js"
24
29
 
25
30
 
@@ -37,6 +42,7 @@ export abstract class ReferenceValueManager<T extends INodeBase> extends Feature
37
42
  /**
38
43
  * Adds the given target to the reference.
39
44
  * For a single-valued reference, this replaces an already-present target.
45
+ * **Note**: this method predominantly exists for the benefit of the deserializer and duplicator!
40
46
  */
41
47
  abstract addDirectly(newTarget: SingleRef<T> | undefined): void;
42
48
 
@@ -89,18 +95,18 @@ export class OptionalSingleReferenceValueManager<T extends INodeBase> extends Si
89
95
  return
90
96
  }
91
97
  if (newTarget === undefined) {
92
- this.addDirectly(undefined);
98
+ this.setDirectly(undefined);
93
99
  if (oldTarget === undefined) {
94
100
  // (nothing)
95
101
  } else {
96
102
  this.emitDelta(() => new ReferenceDeletedDelta(this.container, this.reference, 0, oldTarget));
97
103
  }
98
104
  } else {
99
- this.addDirectly(newTarget);
105
+ this.setDirectly(newTarget);
100
106
  if (oldTarget === undefined) {
101
107
  this.emitDelta(() => new ReferenceAddedDelta(this.container, this.reference, 0, newTarget));
102
108
  } else {
103
- this.emitDelta(() => new ReferenceReplacedDelta(this.container, this.reference, 0, oldTarget, newTarget));
109
+ this.emitDelta(() => new ReferenceChangedDelta(this.container, this.reference, 0, newTarget, oldTarget));
104
110
  }
105
111
  }
106
112
  }
@@ -132,11 +138,11 @@ export class RequiredSingleReferenceValueManager<T extends INodeBase> extends Si
132
138
  if (newTarget === undefined) {
133
139
  this.throwOnUnset();
134
140
  } else {
135
- this.addDirectly(newTarget);
141
+ this.setDirectly(newTarget);
136
142
  if (oldTarget === undefined) {
137
143
  this.emitDelta(() => new ReferenceAddedDelta(this.container, this.reference, 0, newTarget));
138
144
  } else {
139
- this.emitDelta(() => new ReferenceReplacedDelta(this.container, this.reference, 0, oldTarget, newTarget));
145
+ this.emitDelta(() => new ReferenceChangedDelta(this.container, this.reference, 0, newTarget, oldTarget));
140
146
  }
141
147
  }
142
148
  }
@@ -158,7 +164,7 @@ export abstract class MultiReferenceValueManager<T extends INodeBase> extends Re
158
164
  }
159
165
 
160
166
  get(): SingleRef<T>[] {
161
- return this.getDirectly().slice();
167
+ return this.getDirectly().slice(); // make defensive copy
162
168
  }
163
169
 
164
170
  isSet(): boolean {
@@ -194,6 +200,11 @@ export abstract class MultiReferenceValueManager<T extends INodeBase> extends Re
194
200
 
195
201
  abstract remove(targetToRemove: SingleRef<T>): void;
196
202
 
203
+ @action removeAtIndexDirectly(index: number): SingleRef<T> {
204
+ checkIndex(index, this.targets.length, false);
205
+ return this.targets.splice(index, 1)[0];
206
+ }
207
+
197
208
  @action moveDirectly(oldIndex: number, newIndex: number): SingleRef<T> | undefined {
198
209
  checkIndex(oldIndex, this.targets.length, false);
199
210
  checkIndex(newIndex, this.targets.length, false);
@@ -208,7 +219,16 @@ export abstract class MultiReferenceValueManager<T extends INodeBase> extends Re
208
219
  @action move(oldIndex: number, newIndex: number) {
209
220
  const target = this.moveDirectly(oldIndex, newIndex);
210
221
  if (target !== undefined) {
211
- this.emitDelta(() => new ReferenceMovedInSameReferenceDelta(this.container, this.reference, oldIndex, newIndex, target));
222
+ this.emitDelta(() => new EntryMovedInSameReferenceDelta(this.container, this.reference, oldIndex, newIndex, target));
223
+ }
224
+ }
225
+
226
+ @action moveAndReplaceDirectly(oldIndex: number, newIndex: number) {
227
+ checkIndex(oldIndex, this.targets.length, false);
228
+ checkIndex(newIndex, this.targets.length, false);
229
+ if (oldIndex !== newIndex) {
230
+ this.targets.splice(newIndex, 1, this.targets[oldIndex]);
231
+ this.targets.splice(oldIndex, 1);
212
232
  }
213
233
  }
214
234
 
@@ -1,17 +0,0 @@
1
- import { IDelta } from "./base.js";
2
- /**
3
- * A type for functions that handle deltas.
4
- */
5
- export type DeltaHandler = (delta: IDelta) => void;
6
- export declare const collectingDeltaHandler: (printSerializations?: boolean) => [DeltaHandler, IDelta[]];
7
- /**
8
- * An interface for {@link DeltaHandler delta handlers} that can be switched on and off — “latching”.
9
- */
10
- export interface LatchingDeltaHandler extends DeltaHandler {
11
- latch(emitDeltas: boolean): void;
12
- }
13
- /**
14
- * @return a latching version of the given {@link DeltaHandler delta handler}.
15
- */
16
- export declare const latching: (handleDelta: DeltaHandler) => LatchingDeltaHandler;
17
- //# sourceMappingURL=handlers.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../src/deltas/handlers.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAIlC;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;AAEnD,eAAO,MAAM,sBAAsB,qCAAkC,CAAC,YAAY,EAAE,MAAM,EAAE,CAS3F,CAAC;AAGF;;GAEG;AACH,MAAM,WAAW,oBAAqB,SAAQ,YAAY;IACtD,KAAK,CAAC,UAAU,EAAE,OAAO,GAAG,IAAI,CAAC;CACpC;AAED;;GAEG;AACH,eAAO,MAAM,QAAQ,gBAAiB,YAAY,KAAG,oBAcpD,CAAC"}
@@ -1,43 +0,0 @@
1
- // Copyright 2025 TRUMPF Laser SE and other contributors
2
- //
3
- // Licensed under the Apache License, Version 2.0 (the "License")
4
- // you may not use this file except in compliance with the License.
5
- // You may obtain a copy of the License at
6
- //
7
- // http://www.apache.org/licenses/LICENSE-2.0
8
- //
9
- // Unless required by applicable law or agreed to in writing, software
10
- // distributed under the License is distributed on an "AS IS" BASIS,
11
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- // See the License for the specific language governing permissions and
13
- // limitations under the License.
14
- //
15
- // SPDX-FileCopyrightText: 2025 TRUMPF Laser SE and other contributors
16
- // SPDX-License-Identifier: Apache-2.0
17
- import { serializeDelta } from "./serialization/index.js";
18
- export const collectingDeltaHandler = (printSerializations = false) => {
19
- const deltas = [];
20
- const handleDelta = (delta) => {
21
- deltas.push(delta);
22
- if (printSerializations) {
23
- console.log(JSON.stringify(serializeDelta(delta), null, 4));
24
- }
25
- };
26
- return [handleDelta, deltas];
27
- };
28
- /**
29
- * @return a latching version of the given {@link DeltaHandler delta handler}.
30
- */
31
- export const latching = (handleDelta) => {
32
- let emitDeltas = false;
33
- return Object.assign((delta) => {
34
- if (emitDeltas) {
35
- handleDelta(delta);
36
- }
37
- }, {
38
- latch(emitDeltas_) {
39
- emitDeltas = emitDeltas_;
40
- },
41
- });
42
- };
43
- //# sourceMappingURL=handlers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../src/deltas/handlers.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,EAAE;AACF,iEAAiE;AACjE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,iDAAiD;AACjD,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AACjC,EAAE;AACF,sEAAsE;AACtE,sCAAsC;AAGtC,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAQzD,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,mBAAmB,GAAG,KAAK,EAA4B,EAAE;IAC5F,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,WAAW,GAAiB,CAAC,KAAK,EAAE,EAAE;QACxC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnB,IAAI,mBAAmB,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAChE,CAAC;IACL,CAAC,CAAC;IACF,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;AACjC,CAAC,CAAC;AAUF;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,WAAyB,EAAwB,EAAE;IACxE,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,OAAO,MAAM,CAAC,MAAM,CAChB,CAAC,KAAa,EAAE,EAAE;QACd,IAAI,UAAU,EAAE,CAAC;YACb,WAAW,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;IACL,CAAC,EACD;QACI,KAAK,CAAC,WAAoB;YACtB,UAAU,GAAG,WAAW,CAAC;QAC7B,CAAC;KACJ,CACJ,CAAC;AACN,CAAC,CAAC"}
@@ -1,64 +0,0 @@
1
- // Copyright 2025 TRUMPF Laser SE and other contributors
2
- //
3
- // Licensed under the Apache License, Version 2.0 (the "License")
4
- // you may not use this file except in compliance with the License.
5
- // You may obtain a copy of the License at
6
- //
7
- // http://www.apache.org/licenses/LICENSE-2.0
8
- //
9
- // Unless required by applicable law or agreed to in writing, software
10
- // distributed under the License is distributed on an "AS IS" BASIS,
11
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- // See the License for the specific language governing permissions and
13
- // limitations under the License.
14
- //
15
- // SPDX-FileCopyrightText: 2025 TRUMPF Laser SE and other contributors
16
- // SPDX-License-Identifier: Apache-2.0
17
-
18
- import { IDelta } from "./base.js"
19
- import { serializeDelta } from "./serialization/index.js"
20
-
21
-
22
- /**
23
- * A type for functions that handle deltas.
24
- */
25
- export type DeltaHandler = (delta: IDelta) => void;
26
-
27
- export const collectingDeltaHandler = (printSerializations = false): [DeltaHandler, IDelta[]] => {
28
- const deltas: IDelta[] = [];
29
- const handleDelta: DeltaHandler = (delta) => {
30
- deltas.push(delta);
31
- if (printSerializations) {
32
- console.log(JSON.stringify(serializeDelta(delta), null, 4));
33
- }
34
- };
35
- return [handleDelta, deltas];
36
- };
37
-
38
-
39
- /**
40
- * An interface for {@link DeltaHandler delta handlers} that can be switched on and off — “latching”.
41
- */
42
- export interface LatchingDeltaHandler extends DeltaHandler {
43
- latch(emitDeltas: boolean): void;
44
- }
45
-
46
- /**
47
- * @return a latching version of the given {@link DeltaHandler delta handler}.
48
- */
49
- export const latching = (handleDelta: DeltaHandler): LatchingDeltaHandler => {
50
- let emitDeltas = false;
51
- return Object.assign(
52
- (delta: IDelta) => {
53
- if (emitDeltas) {
54
- handleDelta(delta);
55
- }
56
- },
57
- {
58
- latch(emitDeltas_: boolean) {
59
- emitDeltas = emitDeltas_;
60
- },
61
- },
62
- );
63
- };
64
-