@mlightcad/data-model 1.9.10 → 1.9.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.
Files changed (75) hide show
  1. package/dist/data-model.cjs +7 -7
  2. package/lib/base/AcDbObject.d.ts +54 -0
  3. package/lib/base/AcDbObject.d.ts.map +1 -1
  4. package/lib/base/AcDbObject.js +200 -21
  5. package/lib/base/AcDbObject.js.map +1 -1
  6. package/lib/database/AcDbBlockTableRecord.d.ts.map +1 -1
  7. package/lib/database/AcDbBlockTableRecord.js +61 -15
  8. package/lib/database/AcDbBlockTableRecord.js.map +1 -1
  9. package/lib/database/AcDbDatabase.d.ts +131 -4
  10. package/lib/database/AcDbDatabase.d.ts.map +1 -1
  11. package/lib/database/AcDbDatabase.js +439 -62
  12. package/lib/database/AcDbDatabase.js.map +1 -1
  13. package/lib/database/AcDbSymbolTable.d.ts +9 -0
  14. package/lib/database/AcDbSymbolTable.d.ts.map +1 -1
  15. package/lib/database/AcDbSymbolTable.js +34 -4
  16. package/lib/database/AcDbSymbolTable.js.map +1 -1
  17. package/lib/database/AcDbSysVarManager.d.ts +13 -0
  18. package/lib/database/AcDbSysVarManager.d.ts.map +1 -1
  19. package/lib/database/AcDbSysVarManager.js +43 -11
  20. package/lib/database/AcDbSysVarManager.js.map +1 -1
  21. package/lib/database/index.d.ts +2 -0
  22. package/lib/database/index.d.ts.map +1 -1
  23. package/lib/database/index.js +1 -0
  24. package/lib/database/index.js.map +1 -1
  25. package/lib/database/transaction/AcDbChangeApplier.d.ts +118 -0
  26. package/lib/database/transaction/AcDbChangeApplier.d.ts.map +1 -0
  27. package/lib/database/transaction/AcDbChangeApplier.js +310 -0
  28. package/lib/database/transaction/AcDbChangeApplier.js.map +1 -0
  29. package/lib/database/transaction/AcDbChangeRecorder.d.ts +113 -0
  30. package/lib/database/transaction/AcDbChangeRecorder.d.ts.map +1 -0
  31. package/lib/database/transaction/AcDbChangeRecorder.js +235 -0
  32. package/lib/database/transaction/AcDbChangeRecorder.js.map +1 -0
  33. package/lib/database/transaction/AcDbDatabaseChange.d.ts +67 -0
  34. package/lib/database/transaction/AcDbDatabaseChange.d.ts.map +1 -0
  35. package/lib/database/transaction/AcDbDatabaseChange.js +23 -0
  36. package/lib/database/transaction/AcDbDatabaseChange.js.map +1 -0
  37. package/lib/database/transaction/AcDbDatabaseTransaction.d.ts +26 -0
  38. package/lib/database/transaction/AcDbDatabaseTransaction.d.ts.map +1 -0
  39. package/lib/database/transaction/AcDbDatabaseTransaction.js +51 -0
  40. package/lib/database/transaction/AcDbDatabaseTransaction.js.map +1 -0
  41. package/lib/database/transaction/AcDbDatabaseTransactionManager.d.ts +188 -0
  42. package/lib/database/transaction/AcDbDatabaseTransactionManager.d.ts.map +1 -0
  43. package/lib/database/transaction/AcDbDatabaseTransactionManager.js +594 -0
  44. package/lib/database/transaction/AcDbDatabaseTransactionManager.js.map +1 -0
  45. package/lib/database/transaction/AcDbTransaction.d.ts +7 -0
  46. package/lib/database/transaction/AcDbTransaction.d.ts.map +1 -1
  47. package/lib/database/transaction/AcDbTransaction.js +20 -10
  48. package/lib/database/transaction/AcDbTransaction.js.map +1 -1
  49. package/lib/database/transaction/AcDbTransactionManager.d.ts +3 -4
  50. package/lib/database/transaction/AcDbTransactionManager.d.ts.map +1 -1
  51. package/lib/database/transaction/AcDbTransactionManager.js +3 -4
  52. package/lib/database/transaction/AcDbTransactionManager.js.map +1 -1
  53. package/lib/database/transaction/AcDbUndoRecord.d.ts +11 -0
  54. package/lib/database/transaction/AcDbUndoRecord.d.ts.map +1 -0
  55. package/lib/database/transaction/AcDbUndoRecord.js +2 -0
  56. package/lib/database/transaction/AcDbUndoRecord.js.map +1 -0
  57. package/lib/database/transaction/AcDbUndoStack.d.ts +52 -0
  58. package/lib/database/transaction/AcDbUndoStack.d.ts.map +1 -0
  59. package/lib/database/transaction/AcDbUndoStack.js +74 -0
  60. package/lib/database/transaction/AcDbUndoStack.js.map +1 -0
  61. package/lib/database/transaction/index.d.ts +9 -0
  62. package/lib/database/transaction/index.d.ts.map +1 -1
  63. package/lib/database/transaction/index.js +6 -0
  64. package/lib/database/transaction/index.js.map +1 -1
  65. package/lib/entity/AcDbEntity.js +4 -4
  66. package/lib/entity/AcDbEntity.js.map +1 -1
  67. package/lib/index.d.ts +2 -2
  68. package/lib/index.d.ts.map +1 -1
  69. package/lib/index.js +1 -1
  70. package/lib/index.js.map +1 -1
  71. package/lib/object/AcDbDictionary.d.ts +11 -0
  72. package/lib/object/AcDbDictionary.d.ts.map +1 -1
  73. package/lib/object/AcDbDictionary.js +65 -20
  74. package/lib/object/AcDbDictionary.js.map +1 -1
  75. package/package.json +4 -4
@@ -0,0 +1,118 @@
1
+ import { AcDbObject } from '../../base';
2
+ import { AcDbEntity } from '../../entity/AcDbEntity';
3
+ import { AcDbDatabase } from '../AcDbDatabase';
4
+ import { AcDbDatabaseChange } from './AcDbDatabaseChange';
5
+ /**
6
+ * Applies forward or inverse database changes for undo/redo operations.
7
+ *
8
+ * Structural changes (append/remove) and property snapshots (modify/sysvar)
9
+ * are replayed against a live {@link AcDbDatabase} instance.
10
+ */
11
+ export declare class AcDbChangeApplier {
12
+ private readonly database;
13
+ /**
14
+ * Creates an applier bound to one database.
15
+ *
16
+ * @param database - Database whose containers and objects receive replayed changes
17
+ */
18
+ constructor(database: AcDbDatabase);
19
+ /**
20
+ * Replays changes in commit order.
21
+ *
22
+ * Used by redo and by applying the forward direction of an undo record.
23
+ *
24
+ * @param changes - Ordered list of changes recorded by {@link AcDbChangeRecorder}
25
+ */
26
+ applyForward(changes: AcDbDatabaseChange[]): void;
27
+ /**
28
+ * Replays the inverse of each change in reverse order.
29
+ *
30
+ * Used by undo and transaction abort to restore the prior database state.
31
+ *
32
+ * @param changes - Ordered list of changes recorded by {@link AcDbChangeRecorder}
33
+ */
34
+ applyInverse(changes: AcDbDatabaseChange[]): void;
35
+ /**
36
+ * Dispatches one recorded change in the requested direction.
37
+ *
38
+ * @param change - Single entry from a transaction or undo record
39
+ * @param forward - When true, replay the original mutation; when false, apply its inverse
40
+ */
41
+ private applyChange;
42
+ /**
43
+ * Restores object property state from a modify snapshot.
44
+ *
45
+ * @param change - Modify entry with before/after clones
46
+ * @param forward - When true, apply `after`; when false, apply `before`
47
+ */
48
+ private applyModify;
49
+ /**
50
+ * Restores a system variable from a sysvar snapshot.
51
+ *
52
+ * @param change - Sysvar entry with before/after values
53
+ * @param forward - When true, apply `after`; when false, apply `before`
54
+ */
55
+ private applySysvar;
56
+ /**
57
+ * Re-inserts an object into the container described by `container`.
58
+ *
59
+ * @param container - Target block table record, symbol table, or dictionary entry
60
+ * @param object - Object snapshot to append
61
+ */
62
+ private applyAppend;
63
+ /**
64
+ * Removes an object from the container described by `container`.
65
+ *
66
+ * @param container - Source block table record, symbol table, or dictionary entry
67
+ * @param object - Object whose {@link AcDbObject.objectId} identifies the removal target
68
+ */
69
+ private applyRemove;
70
+ /**
71
+ * Resolves a symbol table instance from the stable name stored in undo records.
72
+ *
73
+ * @param tableName - Logical table name (for example, `"layerTable"`) or unknown fallback ID
74
+ * @returns Matching table on this applier's database, or undefined when unrecognized
75
+ */
76
+ private getSymbolTable;
77
+ }
78
+ /**
79
+ * Collects entities affected by changes for post-commit/undo/redo event dispatch.
80
+ *
81
+ * Only block-table-record append/remove operations contribute to the
82
+ * appended and erased lists; modify entries always resolve through object IDs.
83
+ *
84
+ * @param database - Database used to resolve live entity references
85
+ * @param changes - Changes produced by a transaction or undo record
86
+ * @returns Entity buckets keyed by the kind of structural or property change
87
+ */
88
+ export declare function collectChangeEntities(database: AcDbDatabase, changes: AcDbDatabaseChange[]): {
89
+ /** Entities whose properties were modified */
90
+ modified: AcDbEntity[];
91
+ /** Entities appended to a block table record */
92
+ appended: AcDbEntity[];
93
+ /** Entities removed from a block table record */
94
+ erased: AcDbEntity[];
95
+ };
96
+ /**
97
+ * One dictionary entry referenced by an append or remove change.
98
+ */
99
+ export interface AcDbDictionaryChangeEntry {
100
+ /** Dictionary object that was set or erased */
101
+ object: AcDbObject;
102
+ /** Dictionary key associated with the object */
103
+ key: string;
104
+ }
105
+ /**
106
+ * Collects dictionary entries affected by changes for post-commit/undo/redo dispatch.
107
+ *
108
+ * @param database - Database used to resolve live object references after replay
109
+ * @param changes - Changes produced by a transaction or undo record
110
+ * @returns Dictionary entries grouped by set and erase operations
111
+ */
112
+ export declare function collectDictionaryChanges(database: AcDbDatabase, changes: AcDbDatabaseChange[]): {
113
+ /** Entries inserted or replaced in a dictionary */
114
+ set: AcDbDictionaryChangeEntry[];
115
+ /** Entries removed from a dictionary */
116
+ erased: AcDbDictionaryChangeEntry[];
117
+ };
118
+ //# sourceMappingURL=AcDbChangeApplier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AcDbChangeApplier.d.ts","sourceRoot":"","sources":["../../../src/database/transaction/AcDbChangeApplier.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAEpD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAI9C,OAAO,EAAuB,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAE9E;;;;;GAKG;AACH,qBAAa,iBAAiB;IAMhB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IALrC;;;;OAIG;gBAC0B,QAAQ,EAAE,YAAY;IAEnD;;;;;;OAMG;IACH,YAAY,CAAC,OAAO,EAAE,kBAAkB,EAAE,GAAG,IAAI;IAMjD;;;;;;OAMG;IACH,YAAY,CAAC,OAAO,EAAE,kBAAkB,EAAE,GAAG,IAAI;IAMjD;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IAyBnB;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IAenB;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IAenB;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IA4BnB;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IA4BnB;;;;;OAKG;IACH,OAAO,CAAC,cAAc;CAuBvB;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,kBAAkB,EAAE,GAC5B;IACD,8CAA8C;IAC9C,QAAQ,EAAE,UAAU,EAAE,CAAA;IACtB,gDAAgD;IAChD,QAAQ,EAAE,UAAU,EAAE,CAAA;IACtB,iDAAiD;IACjD,MAAM,EAAE,UAAU,EAAE,CAAA;CACrB,CA8BA;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,+CAA+C;IAC/C,MAAM,EAAE,UAAU,CAAA;IAClB,gDAAgD;IAChD,GAAG,EAAE,MAAM,CAAA;CACZ;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,kBAAkB,EAAE,GAC5B;IACD,mDAAmD;IACnD,GAAG,EAAE,yBAAyB,EAAE,CAAA;IAChC,wCAAwC;IACxC,MAAM,EAAE,yBAAyB,EAAE,CAAA;CACpC,CAuBA"}
@@ -0,0 +1,310 @@
1
+ var __values = (this && this.__values) || function(o) {
2
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
3
+ if (m) return m.call(o);
4
+ if (o && typeof o.length === "number") return {
5
+ next: function () {
6
+ if (o && i >= o.length) o = void 0;
7
+ return { value: o && o[i++], done: !o };
8
+ }
9
+ };
10
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
11
+ };
12
+ import { AcDbEntity } from '../../entity/AcDbEntity';
13
+ import { AcDbSysVarManager } from '../AcDbSysVarManager';
14
+ /**
15
+ * Applies forward or inverse database changes for undo/redo operations.
16
+ *
17
+ * Structural changes (append/remove) and property snapshots (modify/sysvar)
18
+ * are replayed against a live {@link AcDbDatabase} instance.
19
+ */
20
+ var AcDbChangeApplier = /** @class */ (function () {
21
+ /**
22
+ * Creates an applier bound to one database.
23
+ *
24
+ * @param database - Database whose containers and objects receive replayed changes
25
+ */
26
+ function AcDbChangeApplier(database) {
27
+ this.database = database;
28
+ }
29
+ /**
30
+ * Replays changes in commit order.
31
+ *
32
+ * Used by redo and by applying the forward direction of an undo record.
33
+ *
34
+ * @param changes - Ordered list of changes recorded by {@link AcDbChangeRecorder}
35
+ */
36
+ AcDbChangeApplier.prototype.applyForward = function (changes) {
37
+ var e_1, _a;
38
+ try {
39
+ for (var changes_1 = __values(changes), changes_1_1 = changes_1.next(); !changes_1_1.done; changes_1_1 = changes_1.next()) {
40
+ var change = changes_1_1.value;
41
+ this.applyChange(change, true);
42
+ }
43
+ }
44
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
45
+ finally {
46
+ try {
47
+ if (changes_1_1 && !changes_1_1.done && (_a = changes_1.return)) _a.call(changes_1);
48
+ }
49
+ finally { if (e_1) throw e_1.error; }
50
+ }
51
+ };
52
+ /**
53
+ * Replays the inverse of each change in reverse order.
54
+ *
55
+ * Used by undo and transaction abort to restore the prior database state.
56
+ *
57
+ * @param changes - Ordered list of changes recorded by {@link AcDbChangeRecorder}
58
+ */
59
+ AcDbChangeApplier.prototype.applyInverse = function (changes) {
60
+ for (var i = changes.length - 1; i >= 0; i--) {
61
+ this.applyChange(changes[i], false);
62
+ }
63
+ };
64
+ /**
65
+ * Dispatches one recorded change in the requested direction.
66
+ *
67
+ * @param change - Single entry from a transaction or undo record
68
+ * @param forward - When true, replay the original mutation; when false, apply its inverse
69
+ */
70
+ AcDbChangeApplier.prototype.applyChange = function (change, forward) {
71
+ switch (change.kind) {
72
+ case 'modify':
73
+ this.applyModify(change, forward);
74
+ break;
75
+ case 'append':
76
+ if (forward) {
77
+ this.applyAppend(change.container, change.object);
78
+ }
79
+ else {
80
+ this.applyRemove(change.container, change.object);
81
+ }
82
+ break;
83
+ case 'remove':
84
+ if (forward) {
85
+ this.applyRemove(change.container, change.object);
86
+ }
87
+ else {
88
+ this.applyAppend(change.container, change.object);
89
+ }
90
+ break;
91
+ case 'sysvar':
92
+ this.applySysvar(change, forward);
93
+ break;
94
+ }
95
+ };
96
+ /**
97
+ * Restores object property state from a modify snapshot.
98
+ *
99
+ * @param change - Modify entry with before/after clones
100
+ * @param forward - When true, apply `after`; when false, apply `before`
101
+ */
102
+ AcDbChangeApplier.prototype.applyModify = function (change, forward) {
103
+ var object = this.database.getObjectById(change.objectId);
104
+ if (!object) {
105
+ return;
106
+ }
107
+ var snapshot = forward ? change.after : change.before;
108
+ if (snapshot) {
109
+ object.restoreFrom(snapshot);
110
+ }
111
+ };
112
+ /**
113
+ * Restores a system variable from a sysvar snapshot.
114
+ *
115
+ * @param change - Sysvar entry with before/after values
116
+ * @param forward - When true, apply `after`; when false, apply `before`
117
+ */
118
+ AcDbChangeApplier.prototype.applySysvar = function (change, forward) {
119
+ var value = forward ? change.after : change.before;
120
+ if (value === undefined) {
121
+ return;
122
+ }
123
+ AcDbSysVarManager.instance().setVar(change.name, value, this.database);
124
+ };
125
+ /**
126
+ * Re-inserts an object into the container described by `container`.
127
+ *
128
+ * @param container - Target block table record, symbol table, or dictionary entry
129
+ * @param object - Object snapshot to append
130
+ */
131
+ AcDbChangeApplier.prototype.applyAppend = function (container, object) {
132
+ switch (container.type) {
133
+ case 'blockTableRecord': {
134
+ var btr = this.database.tables.blockTable.getIdAt(container.ownerId);
135
+ if (btr) {
136
+ btr.appendEntity(object);
137
+ }
138
+ break;
139
+ }
140
+ case 'symbolTable': {
141
+ var table = this.getSymbolTable(container.tableName);
142
+ if (table) {
143
+ table.add(object);
144
+ }
145
+ break;
146
+ }
147
+ case 'dictionary': {
148
+ var dictionary = this.database.getObjectById(container.dictionaryId);
149
+ if (dictionary) {
150
+ dictionary.setAt(container.key, object);
151
+ }
152
+ break;
153
+ }
154
+ }
155
+ };
156
+ /**
157
+ * Removes an object from the container described by `container`.
158
+ *
159
+ * @param container - Source block table record, symbol table, or dictionary entry
160
+ * @param object - Object whose {@link AcDbObject.objectId} identifies the removal target
161
+ */
162
+ AcDbChangeApplier.prototype.applyRemove = function (container, object) {
163
+ switch (container.type) {
164
+ case 'blockTableRecord': {
165
+ var btr = this.database.tables.blockTable.getIdAt(container.ownerId);
166
+ if (btr) {
167
+ btr.removeEntity(object.objectId);
168
+ }
169
+ break;
170
+ }
171
+ case 'symbolTable': {
172
+ var table = this.getSymbolTable(container.tableName);
173
+ if (table) {
174
+ table.removeId(object.objectId);
175
+ }
176
+ break;
177
+ }
178
+ case 'dictionary': {
179
+ var dictionary = this.database.getObjectById(container.dictionaryId);
180
+ if (dictionary) {
181
+ dictionary.removeId(object.objectId);
182
+ }
183
+ break;
184
+ }
185
+ }
186
+ };
187
+ /**
188
+ * Resolves a symbol table instance from the stable name stored in undo records.
189
+ *
190
+ * @param tableName - Logical table name (for example, `"layerTable"`) or unknown fallback ID
191
+ * @returns Matching table on this applier's database, or undefined when unrecognized
192
+ */
193
+ AcDbChangeApplier.prototype.getSymbolTable = function (tableName) {
194
+ var tables = this.database.tables;
195
+ switch (tableName) {
196
+ case 'appIdTable':
197
+ return tables.appIdTable;
198
+ case 'blockTable':
199
+ return tables.blockTable;
200
+ case 'dimStyleTable':
201
+ return tables.dimStyleTable;
202
+ case 'linetypeTable':
203
+ return tables.linetypeTable;
204
+ case 'textStyleTable':
205
+ return tables.textStyleTable;
206
+ case 'viewTable':
207
+ return tables.viewTable;
208
+ case 'layerTable':
209
+ return tables.layerTable;
210
+ case 'viewportTable':
211
+ return tables.viewportTable;
212
+ default:
213
+ return undefined;
214
+ }
215
+ };
216
+ return AcDbChangeApplier;
217
+ }());
218
+ export { AcDbChangeApplier };
219
+ /**
220
+ * Collects entities affected by changes for post-commit/undo/redo event dispatch.
221
+ *
222
+ * Only block-table-record append/remove operations contribute to the
223
+ * appended and erased lists; modify entries always resolve through object IDs.
224
+ *
225
+ * @param database - Database used to resolve live entity references
226
+ * @param changes - Changes produced by a transaction or undo record
227
+ * @returns Entity buckets keyed by the kind of structural or property change
228
+ */
229
+ export function collectChangeEntities(database, changes) {
230
+ var e_2, _a;
231
+ var _b;
232
+ var modified = [];
233
+ var appended = [];
234
+ var erased = [];
235
+ try {
236
+ for (var changes_2 = __values(changes), changes_2_1 = changes_2.next(); !changes_2_1.done; changes_2_1 = changes_2.next()) {
237
+ var change = changes_2_1.value;
238
+ if (change.kind === 'modify') {
239
+ var object = database.getObjectById(change.objectId);
240
+ if (object instanceof AcDbEntity) {
241
+ modified.push(object);
242
+ }
243
+ }
244
+ else if (change.kind === 'append') {
245
+ if (change.container.type === 'blockTableRecord') {
246
+ var entity = (_b = database.tables.blockTable.getEntityById(change.object.objectId)) !== null && _b !== void 0 ? _b : (change.object instanceof AcDbEntity ? change.object : undefined);
247
+ if (entity) {
248
+ appended.push(entity);
249
+ }
250
+ }
251
+ }
252
+ else if (change.kind === 'remove') {
253
+ if (change.container.type === 'blockTableRecord') {
254
+ if (change.object instanceof AcDbEntity) {
255
+ erased.push(change.object);
256
+ }
257
+ }
258
+ }
259
+ }
260
+ }
261
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
262
+ finally {
263
+ try {
264
+ if (changes_2_1 && !changes_2_1.done && (_a = changes_2.return)) _a.call(changes_2);
265
+ }
266
+ finally { if (e_2) throw e_2.error; }
267
+ }
268
+ return { modified: modified, appended: appended, erased: erased };
269
+ }
270
+ /**
271
+ * Collects dictionary entries affected by changes for post-commit/undo/redo dispatch.
272
+ *
273
+ * @param database - Database used to resolve live object references after replay
274
+ * @param changes - Changes produced by a transaction or undo record
275
+ * @returns Dictionary entries grouped by set and erase operations
276
+ */
277
+ export function collectDictionaryChanges(database, changes) {
278
+ var e_3, _a;
279
+ var _b;
280
+ var set = [];
281
+ var erased = [];
282
+ try {
283
+ for (var changes_3 = __values(changes), changes_3_1 = changes_3.next(); !changes_3_1.done; changes_3_1 = changes_3.next()) {
284
+ var change = changes_3_1.value;
285
+ if (change.kind !== 'append' && change.kind !== 'remove') {
286
+ continue;
287
+ }
288
+ if (change.container.type !== 'dictionary') {
289
+ continue;
290
+ }
291
+ var key = change.container.key;
292
+ if (change.kind === 'append') {
293
+ var object = (_b = database.getObjectById(change.object.objectId)) !== null && _b !== void 0 ? _b : change.object;
294
+ set.push({ object: object, key: key });
295
+ }
296
+ else if (change.kind === 'remove') {
297
+ erased.push({ object: change.object, key: key });
298
+ }
299
+ }
300
+ }
301
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
302
+ finally {
303
+ try {
304
+ if (changes_3_1 && !changes_3_1.done && (_a = changes_3.return)) _a.call(changes_3);
305
+ }
306
+ finally { if (e_3) throw e_3.error; }
307
+ }
308
+ return { set: set, erased: erased };
309
+ }
310
+ //# sourceMappingURL=AcDbChangeApplier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AcDbChangeApplier.js","sourceRoot":"","sources":["../../../src/database/transaction/AcDbChangeApplier.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,113 @@
1
+ import { AcDbObject } from '../../base';
2
+ import { AcDbDatabase } from '../AcDbDatabase';
3
+ import { AcDbChangeContainer, AcDbDatabaseChange } from './AcDbDatabaseChange';
4
+ /**
5
+ * Accumulates structured database changes during an active transaction.
6
+ *
7
+ * Append/remove pairs that cancel within the same transaction are coalesced,
8
+ * and duplicate modify/sysvar entries for the same target are ignored.
9
+ */
10
+ export declare class AcDbChangeRecorder {
11
+ private readonly changes;
12
+ /**
13
+ * Returns the changes recorded so far in this transaction.
14
+ *
15
+ * The returned array is the internal store; callers should treat it as read-only.
16
+ */
17
+ getChanges(): AcDbDatabaseChange[];
18
+ /**
19
+ * Discards all recorded changes without applying them.
20
+ */
21
+ clear(): void;
22
+ /**
23
+ * Merges changes from a nested transaction into this recorder.
24
+ *
25
+ * Used when an inner transaction commits into its parent without touching
26
+ * the undo stack.
27
+ *
28
+ * @param other - Recorder from a child transaction being committed
29
+ */
30
+ mergeFrom(other: AcDbChangeRecorder): void;
31
+ /**
32
+ * Records the pre-modification snapshot of an opened-for-write object.
33
+ *
34
+ * Only the first modify entry per {@link AcDbObject.objectId} is kept.
35
+ *
36
+ * @param object - Object whose state should be restorable on abort/undo
37
+ */
38
+ recordModify(object: AcDbObject): void;
39
+ /**
40
+ * Records insertion of an object into a database container.
41
+ *
42
+ * If a matching remove was recorded earlier in the same transaction,
43
+ * the pair cancels and neither change is retained.
44
+ *
45
+ * @param container - Container that received the object
46
+ * @param object - Object that was appended; stored as an identity-preserving clone
47
+ */
48
+ recordAppend(container: AcDbChangeContainer, object: AcDbObject): void;
49
+ /**
50
+ * Records removal of an object from a database container.
51
+ *
52
+ * If a matching append was recorded earlier in the same transaction,
53
+ * the pair cancels and neither change is retained.
54
+ *
55
+ * @param container - Container that owned the removed object
56
+ * @param object - Object that was removed; stored as an identity-preserving clone
57
+ */
58
+ recordRemove(container: AcDbChangeContainer, object: AcDbObject): void;
59
+ /**
60
+ * Records the value of a system variable before mutation.
61
+ *
62
+ * Only the first sysvar entry per normalized name is kept.
63
+ *
64
+ * @param name - System variable name (case-insensitive)
65
+ * @param before - Value observed before the mutation
66
+ */
67
+ recordSysvar(name: string, before: unknown): void;
68
+ /**
69
+ * Captures the post-change state for modify and sysvar entries at commit time.
70
+ *
71
+ * Append/remove entries are complete when recorded and do not require
72
+ * finalization.
73
+ *
74
+ * @param database - Database used to read live post-commit values
75
+ */
76
+ finalize(database: AcDbDatabase): void;
77
+ /**
78
+ * Records or coalesces one append/remove change.
79
+ *
80
+ * When an opposite structural change for the same container and object ID
81
+ * already exists in this transaction, both entries cancel and neither is kept.
82
+ *
83
+ * @param change - Append or remove entry to merge into the recorder
84
+ */
85
+ private recordStructuralChange;
86
+ /**
87
+ * Merges one change from a nested transaction into this recorder.
88
+ *
89
+ * Modify and sysvar entries deduplicate by object ID or variable name;
90
+ * structural entries use the same cancel/coalesce rules as {@link recordAppend}.
91
+ *
92
+ * @param change - Change copied from a child transaction recorder
93
+ */
94
+ private mergeChange;
95
+ /**
96
+ * Finds the index of a structural change matching kind, container, and object ID.
97
+ *
98
+ * @param kind - Append or remove kind to search for
99
+ * @param container - Container descriptor that must match exactly
100
+ * @param objectId - Object identifier of the affected record
101
+ * @returns Index in {@link changes}, or `-1` when no match exists
102
+ */
103
+ private findStructuralChangeIndex;
104
+ /**
105
+ * Reads the current value of a system variable from the database.
106
+ *
107
+ * @param database - Database passed to {@link AcDbSysVarManager.getVar}
108
+ * @param name - Normalized system variable name
109
+ * @returns Live variable value used to populate `after` during {@link finalize}
110
+ */
111
+ private getSysvarValue;
112
+ }
113
+ //# sourceMappingURL=AcDbChangeRecorder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AcDbChangeRecorder.d.ts","sourceRoot":"","sources":["../../../src/database/transaction/AcDbChangeRecorder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAE9C,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAEnB,MAAM,sBAAsB,CAAA;AAE7B;;;;;GAKG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2B;IAEnD;;;;OAIG;IACH,UAAU,IAAI,kBAAkB,EAAE;IAIlC;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;;;;;;OAOG;IACH,SAAS,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI;IAM1C;;;;;;OAMG;IACH,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAetC;;;;;;;;OAQG;IACH,YAAY,CAAC,SAAS,EAAE,mBAAmB,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI;IAQtE;;;;;;;;OAQG;IACH,YAAY,CAAC,SAAS,EAAE,mBAAmB,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI;IAQtE;;;;;;;OAOG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI;IAejD;;;;;;;OAOG;IACH,QAAQ,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAatC;;;;;;;OAOG;IACH,OAAO,CAAC,sBAAsB;IAiB9B;;;;;;;OAOG;IACH,OAAO,CAAC,WAAW;IAwBnB;;;;;;;OAOG;IACH,OAAO,CAAC,yBAAyB;IAajC;;;;;;OAMG;IACH,OAAO,CAAC,cAAc;CAGvB"}