@lionweb/delta-protocol-common 0.7.0-beta.21

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 (93) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +33 -0
  3. package/dist/index.d.ts +5 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +21 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/logging/ansi.d.ts +44 -0
  8. package/dist/logging/ansi.d.ts.map +1 -0
  9. package/dist/logging/ansi.js +53 -0
  10. package/dist/logging/ansi.js.map +1 -0
  11. package/dist/logging/index.d.ts +4 -0
  12. package/dist/logging/index.d.ts.map +1 -0
  13. package/dist/logging/index.js +20 -0
  14. package/dist/logging/index.js.map +1 -0
  15. package/dist/logging/semantic-logging.d.ts +55 -0
  16. package/dist/logging/semantic-logging.d.ts.map +1 -0
  17. package/dist/logging/semantic-logging.js +88 -0
  18. package/dist/logging/semantic-logging.js.map +1 -0
  19. package/dist/logging/textual-logging.d.ts +22 -0
  20. package/dist/logging/textual-logging.d.ts.map +1 -0
  21. package/dist/logging/textual-logging.js +54 -0
  22. package/dist/logging/textual-logging.js.map +1 -0
  23. package/dist/payload/command-types.d.ts +319 -0
  24. package/dist/payload/command-types.d.ts.map +1 -0
  25. package/dist/payload/command-types.js +18 -0
  26. package/dist/payload/command-types.js.map +1 -0
  27. package/dist/payload/common.d.ts +13 -0
  28. package/dist/payload/common.d.ts.map +1 -0
  29. package/dist/payload/common.js +18 -0
  30. package/dist/payload/common.js.map +1 -0
  31. package/dist/payload/event-types.d.ts +378 -0
  32. package/dist/payload/event-types.d.ts.map +1 -0
  33. package/dist/payload/event-types.js +68 -0
  34. package/dist/payload/event-types.js.map +1 -0
  35. package/dist/payload/index.d.ts +5 -0
  36. package/dist/payload/index.d.ts.map +1 -0
  37. package/dist/payload/index.js +20 -0
  38. package/dist/payload/index.js.map +1 -0
  39. package/dist/payload/query-types.d.ts +73 -0
  40. package/dist/payload/query-types.d.ts.map +1 -0
  41. package/dist/payload/query-types.js +30 -0
  42. package/dist/payload/query-types.js.map +1 -0
  43. package/dist/translators/delta-to-command.d.ts +7 -0
  44. package/dist/translators/delta-to-command.d.ts.map +1 -0
  45. package/dist/translators/delta-to-command.js +297 -0
  46. package/dist/translators/delta-to-command.js.map +1 -0
  47. package/dist/translators/delta-to-event.d.ts +2 -0
  48. package/dist/translators/delta-to-event.d.ts.map +1 -0
  49. package/dist/translators/delta-to-event.js +19 -0
  50. package/dist/translators/delta-to-event.js.map +1 -0
  51. package/dist/translators/event-to-delta.d.ts +13 -0
  52. package/dist/translators/event-to-delta.d.ts.map +1 -0
  53. package/dist/translators/event-to-delta.js +293 -0
  54. package/dist/translators/event-to-delta.js.map +1 -0
  55. package/dist/translators/index.d.ts +4 -0
  56. package/dist/translators/index.d.ts.map +1 -0
  57. package/dist/translators/index.js +19 -0
  58. package/dist/translators/index.js.map +1 -0
  59. package/dist/utils/async.d.ts +13 -0
  60. package/dist/utils/async.d.ts.map +1 -0
  61. package/dist/utils/async.js +38 -0
  62. package/dist/utils/async.js.map +1 -0
  63. package/dist/utils/index.d.ts +5 -0
  64. package/dist/utils/index.d.ts.map +1 -0
  65. package/dist/utils/index.js +20 -0
  66. package/dist/utils/index.js.map +1 -0
  67. package/dist/utils/json.d.ts +7 -0
  68. package/dist/utils/json.d.ts.map +1 -0
  69. package/dist/utils/json.js +30 -0
  70. package/dist/utils/json.js.map +1 -0
  71. package/dist/utils/procedure.d.ts +14 -0
  72. package/dist/utils/procedure.d.ts.map +1 -0
  73. package/dist/utils/procedure.js +32 -0
  74. package/dist/utils/procedure.js.map +1 -0
  75. package/package.json +35 -0
  76. package/src/index.ts +22 -0
  77. package/src/logging/ansi.ts +63 -0
  78. package/src/logging/index.ts +21 -0
  79. package/src/logging/semantic-logging.ts +96 -0
  80. package/src/logging/textual-logging.ts +65 -0
  81. package/src/payload/command-types.ts +378 -0
  82. package/src/payload/common.ts +33 -0
  83. package/src/payload/event-types.ts +499 -0
  84. package/src/payload/index.ts +22 -0
  85. package/src/payload/query-types.ts +134 -0
  86. package/src/translators/delta-to-command.ts +378 -0
  87. package/src/translators/delta-to-event.ts +19 -0
  88. package/src/translators/event-to-delta.ts +384 -0
  89. package/src/translators/index.ts +21 -0
  90. package/src/utils/async.ts +50 -0
  91. package/src/utils/index.ts +22 -0
  92. package/src/utils/json.ts +32 -0
  93. package/src/utils/procedure.ts +43 -0
@@ -0,0 +1,378 @@
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 {
19
+ AnnotationAddedDelta,
20
+ AnnotationDeletedDelta,
21
+ AnnotationMovedAndReplacedFromOtherParentDelta,
22
+ AnnotationMovedAndReplacedInSameParentDelta,
23
+ AnnotationMovedFromOtherParentDelta,
24
+ AnnotationMovedInSameParentDelta,
25
+ AnnotationReplacedDelta,
26
+ ChildAddedDelta,
27
+ ChildDeletedDelta,
28
+ ChildMovedAndReplacedFromOtherContainmentDelta,
29
+ ChildMovedAndReplacedFromOtherContainmentInSameParentDelta,
30
+ ChildMovedAndReplacedInSameContainmentDelta,
31
+ ChildMovedFromOtherContainmentDelta,
32
+ ChildMovedFromOtherContainmentInSameParentDelta,
33
+ ChildMovedInSameContainmentDelta,
34
+ ChildReplacedDelta,
35
+ CompositeDelta,
36
+ EntryMovedAndReplacedFromOtherReferenceDelta,
37
+ EntryMovedAndReplacedFromOtherReferenceInSameParentDelta,
38
+ EntryMovedAndReplacedInSameReferenceDelta,
39
+ EntryMovedFromOtherReferenceDelta,
40
+ EntryMovedFromOtherReferenceInSameParentDelta,
41
+ EntryMovedInSameReferenceDelta,
42
+ IDelta,
43
+ NoOpDelta,
44
+ PartitionAddedDelta,
45
+ PartitionDeletedDelta,
46
+ PropertyAddedDelta,
47
+ PropertyChangedDelta,
48
+ PropertyDeletedDelta,
49
+ ReferenceAddedDelta,
50
+ ReferenceChangedDelta,
51
+ ReferenceDeletedDelta,
52
+ serializeNodeBases
53
+ } from "@lionweb/class-core"
54
+ import { metaPointerFor, Node, SingleRef, unresolved } from "@lionweb/core"
55
+ import {
56
+ AddAnnotationCommand,
57
+ AddChildCommand,
58
+ AddPartitionCommand,
59
+ AddPropertyCommand,
60
+ AddReferenceCommand,
61
+ ChangePropertyCommand,
62
+ ChangeReferenceCommand,
63
+ Command,
64
+ CompositeCommand,
65
+ DeleteAnnotationCommand,
66
+ DeleteChildCommand,
67
+ DeletePartitionCommand,
68
+ DeletePropertyCommand,
69
+ DeleteReferenceCommand,
70
+ MoveAndReplaceAnnotationFromOtherParentCommand,
71
+ MoveAndReplaceAnnotationInSameParentCommand,
72
+ MoveAndReplaceChildFromOtherContainmentCommand,
73
+ MoveAndReplaceChildFromOtherContainmentInSameParentCommand,
74
+ MoveAndReplaceChildInSameContainmentCommand,
75
+ MoveAndReplaceEntryFromOtherReferenceCommand,
76
+ MoveAndReplaceEntryFromOtherReferenceInSameParentCommand,
77
+ MoveAndReplaceEntryInSameReferenceCommand,
78
+ MoveAnnotationFromOtherParentCommand,
79
+ MoveAnnotationInSameParentCommand,
80
+ MoveChildFromOtherContainmentCommand,
81
+ MoveChildFromOtherContainmentInSameParentCommand,
82
+ MoveChildInSameContainmentCommand,
83
+ MoveEntryFromOtherReferenceCommand,
84
+ MoveEntryFromOtherReferenceInSameParentCommand,
85
+ MoveEntryInSameReferenceCommand,
86
+ ReplaceAnnotationCommand,
87
+ ReplaceChildCommand
88
+ } from "../payload/command-types.js"
89
+
90
+
91
+ /**
92
+ * @return a {@link IDelta delta} as a {@link Command command} with the given `commandId`.
93
+ */
94
+ export const deltaAsCommand = (delta: IDelta, commandId: string): Command | undefined => {
95
+
96
+ const completed = <CT extends Command>(
97
+ commandName: CT["messageKind"],
98
+ partialCommand: Omit<CT, "messageKind" | "commandId" | "protocolMessages">
99
+ ) => ({
100
+ messageKind: commandName,
101
+ commandId,
102
+ ...partialCommand,
103
+ protocolMessages: []
104
+ })
105
+
106
+ const serializedRef = <NT extends Node>(ref: SingleRef<NT>): string | null =>
107
+ ref === unresolved ? null : ref.id
108
+
109
+ // in order of the specification (§ 6.5):
110
+
111
+ if (delta instanceof PartitionAddedDelta) {
112
+ return completed<AddPartitionCommand>("AddPartition", { // § 6.5.2.1
113
+ newPartition: serializeNodeBases([delta.newPartition])
114
+ })
115
+ }
116
+ if (delta instanceof PartitionDeletedDelta) {
117
+ return completed<DeletePartitionCommand>("DeletePartition", { // § 6.5.2.2
118
+ deletedPartition: delta.deletedPartition.id
119
+ })
120
+ }
121
+ if (delta instanceof PropertyAddedDelta) {
122
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
123
+ return completed<AddPropertyCommand<any>>("AddProperty", { // § 6.5.4.1
124
+ node: delta.node.id,
125
+ property: metaPointerFor(delta.property),
126
+ newValue: delta.value
127
+ })
128
+ }
129
+ if (delta instanceof PropertyDeletedDelta) {
130
+ return completed<DeletePropertyCommand>("DeleteProperty", { // § 6.5.4.2
131
+ node: delta.node.id,
132
+ property: metaPointerFor(delta.property)
133
+ })
134
+ }
135
+ if (delta instanceof PropertyChangedDelta) {
136
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
137
+ return completed<ChangePropertyCommand<any>>("ChangeProperty", { // § 6.5.4.3
138
+ node: delta.node.id,
139
+ property: metaPointerFor(delta.property),
140
+ newValue: delta.newValue
141
+ })
142
+ }
143
+ if (delta instanceof ChildAddedDelta) {
144
+ return completed<AddChildCommand>("AddChild", { // § 6.5.5.1
145
+ parent: delta.parent.id,
146
+ newChild: serializeNodeBases([delta.newChild]),
147
+ containment: metaPointerFor(delta.containment),
148
+ index: delta.index
149
+ })
150
+ }
151
+ if (delta instanceof ChildDeletedDelta) {
152
+ return completed<DeleteChildCommand>("DeleteChild", { // § 6.5.5.2
153
+ parent: delta.parent.id,
154
+ containment: metaPointerFor(delta.containment),
155
+ index: delta.index,
156
+ deletedChild: delta.deletedChild.id
157
+ })
158
+ }
159
+ if (delta instanceof ChildReplacedDelta) {
160
+ return completed<ReplaceChildCommand>("ReplaceChild", { // § 6.5.5.3
161
+ newChild: serializeNodeBases([delta.newChild]),
162
+ parent: delta.parent.id,
163
+ containment: metaPointerFor(delta.containment),
164
+ index: delta.index,
165
+ replacedChild: delta.replacedChild.id
166
+ })
167
+ }
168
+ if (delta instanceof ChildMovedFromOtherContainmentDelta) {
169
+ return completed<MoveChildFromOtherContainmentCommand>("MoveChildFromOtherContainment", { // § 6.5.5.4
170
+ newParent: delta.newParent.id,
171
+ newContainment: metaPointerFor(delta.newContainment),
172
+ newIndex: delta.newIndex,
173
+ movedChild: delta.movedChild.id
174
+ })
175
+ }
176
+ if (delta instanceof ChildMovedFromOtherContainmentInSameParentDelta) {
177
+ return completed<MoveChildFromOtherContainmentInSameParentCommand>("MoveChildFromOtherContainmentInSameParent", { // § 6.5.5.5
178
+ newContainment: metaPointerFor(delta.newContainment),
179
+ newIndex: delta.newIndex,
180
+ movedChild: delta.movedChild.id,
181
+ parent: delta.parent.id,
182
+ oldContainment: metaPointerFor(delta.oldContainment),
183
+ oldIndex: delta.oldIndex
184
+ })
185
+ }
186
+ if (delta instanceof ChildMovedInSameContainmentDelta) {
187
+ return completed<MoveChildInSameContainmentCommand>("MoveChildInSameContainment", { // § 6.5.5.6
188
+ newIndex: delta.newIndex,
189
+ movedChild: delta.movedChild.id
190
+ })
191
+ }
192
+ if (delta instanceof ChildMovedAndReplacedFromOtherContainmentDelta) {
193
+ return completed<MoveAndReplaceChildFromOtherContainmentCommand>("MoveAndReplaceChildFromOtherContainment", { // § 6.5.5.7
194
+ newParent: delta.newParent.id,
195
+ newContainment: metaPointerFor(delta.newContainment),
196
+ newIndex: delta.newIndex,
197
+ replacedChild: delta.replacedChild.id,
198
+ movedChild: delta.movedChild.id
199
+ })
200
+ }
201
+ if (delta instanceof ChildMovedAndReplacedFromOtherContainmentInSameParentDelta) {
202
+ return completed<MoveAndReplaceChildFromOtherContainmentInSameParentCommand>("MoveAndReplaceChildFromOtherContainmentInSameParent", { // § 6.5.5.8
203
+ newContainment: metaPointerFor(delta.newContainment),
204
+ newIndex: delta.newIndex,
205
+ replacedChild: delta.replacedChild.id,
206
+ movedChild: delta.movedChild.id
207
+ })
208
+ }
209
+ if (delta instanceof ChildMovedAndReplacedInSameContainmentDelta) {
210
+ return completed<MoveAndReplaceChildInSameContainmentCommand>("MoveAndReplaceChildInSameContainment", { // § 6.5.5.9
211
+ newIndex: delta.newIndex,
212
+ replacedChild: delta.replacedChild.id
213
+ })
214
+ }
215
+ if (delta instanceof AnnotationAddedDelta) {
216
+ return completed<AddAnnotationCommand>("AddAnnotation", { // § 6.5.6.1
217
+ parent: delta.parent.id,
218
+ index: delta.index,
219
+ newAnnotation: serializeNodeBases([delta.newAnnotation])
220
+ })
221
+ }
222
+ if (delta instanceof AnnotationDeletedDelta) {
223
+ return completed<DeleteAnnotationCommand>("DeleteAnnotation", { // § 6.5.6.2
224
+ parent: delta.parent.id,
225
+ deletedAnnotation: delta.deletedAnnotation.id,
226
+ index: delta.index
227
+ })
228
+ }
229
+ if (delta instanceof AnnotationReplacedDelta) {
230
+ return completed<ReplaceAnnotationCommand>("ReplaceAnnotation", { // § 6.5.6.3
231
+ newAnnotation: serializeNodeBases([delta.newAnnotation]),
232
+ parent: delta.parent.id,
233
+ index: delta.index,
234
+ replacedAnnotation: delta.replacedAnnotation.id
235
+ })
236
+ }
237
+ if (delta instanceof AnnotationMovedFromOtherParentDelta) {
238
+ return completed<MoveAnnotationFromOtherParentCommand>("MoveAnnotationFromOtherParent", { // § 6.5.6.4
239
+ newParent: delta.newParent.id,
240
+ newIndex: delta.newIndex,
241
+ movedAnnotation: delta.movedAnnotation.id
242
+ })
243
+ }
244
+ if (delta instanceof AnnotationMovedInSameParentDelta) {
245
+ return completed<MoveAnnotationInSameParentCommand>("MoveAnnotationInSameParent", { // § 6.5.6.5
246
+ newIndex: delta.newIndex,
247
+ movedAnnotation: delta.movedAnnotation.id
248
+ })
249
+ }
250
+ if (delta instanceof AnnotationMovedAndReplacedFromOtherParentDelta) {
251
+ return completed<MoveAndReplaceAnnotationFromOtherParentCommand>("MoveAndReplaceAnnotationFromOtherParent", { // § 6.5.6.6
252
+ newParent: delta.newParent.id,
253
+ newIndex: delta.newIndex,
254
+ replacedAnnotation: delta.replacedAnnotation.id,
255
+ movedAnnotation: delta.movedAnnotation.id
256
+ })
257
+ }
258
+ if (delta instanceof AnnotationMovedAndReplacedInSameParentDelta) {
259
+ return completed<MoveAndReplaceAnnotationInSameParentCommand>("MoveAndReplaceAnnotationInSameParent", { // § 6.5.6.7
260
+ newIndex: delta.newIndex,
261
+ replacedAnnotation: delta.replacedAnnotation.id,
262
+ movedAnnotation: delta.movedAnnotation.id
263
+ })
264
+ }
265
+ if (delta instanceof ReferenceAddedDelta) {
266
+ return completed<AddReferenceCommand>("AddReference", { // § 6.5.7.1
267
+ parent: delta.parent.id,
268
+ reference: metaPointerFor(delta.reference),
269
+ index: delta.index,
270
+ newTarget: serializedRef(delta.newTarget),
271
+ newResolveInfo: null
272
+ })
273
+ }
274
+ if (delta instanceof ReferenceDeletedDelta) {
275
+ return completed<DeleteReferenceCommand>("DeleteReference", { // § 6.5.7.2
276
+ parent: delta.parent.id,
277
+ reference: metaPointerFor(delta.reference),
278
+ index: delta.index,
279
+ deletedTarget: serializedRef(delta.deletedTarget),
280
+ deletedResolveInfo: null
281
+ })
282
+ }
283
+ if (delta instanceof ReferenceChangedDelta) {
284
+ return completed<ChangeReferenceCommand>("ChangeReference", { // § 6.5.7.3
285
+ parent: delta.parent.id,
286
+ reference: metaPointerFor(delta.reference),
287
+ index: delta.index,
288
+ oldTarget: serializedRef(delta.oldTarget),
289
+ oldResolveInfo: null,
290
+ newTarget: serializedRef(delta.newTarget),
291
+ newResolveInfo: null
292
+ })
293
+ }
294
+ if (delta instanceof EntryMovedFromOtherReferenceDelta) {
295
+ return completed<MoveEntryFromOtherReferenceCommand>("MoveEntryFromOtherReference", { // § 6.5.7.4
296
+ newParent: delta.newParent.id,
297
+ newReference: metaPointerFor(delta.newReference),
298
+ newIndex: delta.newIndex,
299
+ oldParent: delta.oldParent.id,
300
+ oldReference: metaPointerFor(delta.oldReference),
301
+ oldIndex: delta.oldIndex,
302
+ movedTarget: serializedRef(delta.movedTarget),
303
+ movedResolveInfo: null
304
+ })
305
+ }
306
+ if (delta instanceof EntryMovedFromOtherReferenceInSameParentDelta) {
307
+ return completed<MoveEntryFromOtherReferenceInSameParentCommand>("MoveEntryFromOtherReferenceInSameParent", { // § 6.5.7.5
308
+ parent: delta.parent.id,
309
+ newReference: metaPointerFor(delta.newReference),
310
+ newIndex: delta.newIndex,
311
+ oldIndex: delta.oldIndex,
312
+ movedTarget: serializedRef(delta.movedTarget),
313
+ movedResolveInfo: null
314
+ })
315
+ }
316
+ if (delta instanceof EntryMovedInSameReferenceDelta) {
317
+ return completed<MoveEntryInSameReferenceCommand>("MoveEntryInSameReference", { // § 6.5.7.6
318
+ parent: delta.parent.id,
319
+ reference: metaPointerFor(delta.reference),
320
+ oldIndex: delta.oldIndex,
321
+ newIndex: delta.newIndex,
322
+ movedTarget: serializedRef(delta.movedTarget),
323
+ movedResolveInfo: null
324
+ })
325
+ }
326
+ if (delta instanceof EntryMovedAndReplacedFromOtherReferenceDelta) {
327
+ return completed<MoveAndReplaceEntryFromOtherReferenceCommand>("MoveAndReplaceEntryFromOtherReference", { // § 6.5.7.7
328
+ newParent: delta.newParent.id,
329
+ newReference: metaPointerFor(delta.newReference),
330
+ newIndex: delta.newIndex,
331
+ replacedTarget: serializedRef(delta.replacedTarget),
332
+ replacedResolveInfo: null,
333
+ oldParent: delta.oldParent.id,
334
+ oldReference: metaPointerFor(delta.oldReference),
335
+ oldIndex: delta.oldIndex,
336
+ movedTarget: serializedRef(delta.movedTarget),
337
+ movedResolveInfo: null
338
+ })
339
+ }
340
+ if (delta instanceof EntryMovedAndReplacedFromOtherReferenceInSameParentDelta) {
341
+ return completed<MoveAndReplaceEntryFromOtherReferenceInSameParentCommand>("MoveAndReplaceEntryFromOtherReferenceInSameParent", { // § 6.5.7.8
342
+ parent: delta.parent.id,
343
+ newReference: metaPointerFor(delta.newReference),
344
+ newIndex: delta.newIndex,
345
+ replacedTarget: serializedRef(delta.replacedTarget),
346
+ replacedResolveInfo: null,
347
+ oldReference: metaPointerFor(delta.oldReference),
348
+ oldIndex: delta.oldIndex,
349
+ movedTarget: serializedRef(delta.movedTarget),
350
+ movedResolveInfo: null
351
+ })
352
+ }
353
+ if (delta instanceof EntryMovedAndReplacedInSameReferenceDelta) {
354
+ return completed<MoveAndReplaceEntryInSameReferenceCommand>("MoveAndReplaceEntryInSameReference", { // § 6.5.7.9
355
+ parent: delta.parent.id,
356
+ reference: metaPointerFor(delta.reference),
357
+ oldIndex: delta.oldIndex,
358
+ movedTarget: serializedRef(delta.movedTarget),
359
+ movedResolveInfo: null,
360
+ newIndex: delta.newIndex,
361
+ replacedTarget: serializedRef(delta.replacedTarget),
362
+ replacedResolveInfo: null
363
+ })
364
+ }
365
+ if (delta instanceof CompositeDelta) {
366
+ return completed<CompositeCommand>("CompositeCommand", { // § 6.5.8.1
367
+ parts: delta.parts
368
+ .map((part, index) => deltaAsCommand(part, `${commandId}-${index}`)) // TODO inject ID generator!
369
+ .filter((command) => command !== undefined) as Command[]
370
+ })
371
+ }
372
+ if (delta instanceof NoOpDelta) {
373
+ return undefined
374
+ }
375
+
376
+ throw new Error(`can't handle delta of type ${delta.constructor.name}`)
377
+ }
378
+
@@ -0,0 +1,19 @@
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
+ // TODO implement: translate a delta directly into an event
19
+