@mlightcad/data-model 1.9.9 → 1.9.11
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/dist/data-model.cjs +7 -7
- package/lib/base/AcDbObject.d.ts +54 -0
- package/lib/base/AcDbObject.d.ts.map +1 -1
- package/lib/base/AcDbObject.js +200 -21
- package/lib/base/AcDbObject.js.map +1 -1
- package/lib/database/AcDbBlockTableRecord.d.ts.map +1 -1
- package/lib/database/AcDbBlockTableRecord.js +61 -15
- package/lib/database/AcDbBlockTableRecord.js.map +1 -1
- package/lib/database/AcDbDatabase.d.ts +111 -4
- package/lib/database/AcDbDatabase.d.ts.map +1 -1
- package/lib/database/AcDbDatabase.js +406 -62
- package/lib/database/AcDbDatabase.js.map +1 -1
- package/lib/database/AcDbSymbolTable.d.ts +9 -0
- package/lib/database/AcDbSymbolTable.d.ts.map +1 -1
- package/lib/database/AcDbSymbolTable.js +34 -4
- package/lib/database/AcDbSymbolTable.js.map +1 -1
- package/lib/database/AcDbSysVarManager.d.ts +15 -0
- package/lib/database/AcDbSysVarManager.d.ts.map +1 -1
- package/lib/database/AcDbSysVarManager.js +60 -11
- package/lib/database/AcDbSysVarManager.js.map +1 -1
- package/lib/database/AcDbSystemVariables.d.ts +8 -1
- package/lib/database/AcDbSystemVariables.d.ts.map +1 -1
- package/lib/database/AcDbSystemVariables.js +7 -0
- package/lib/database/AcDbSystemVariables.js.map +1 -1
- package/lib/database/index.d.ts +2 -0
- package/lib/database/index.d.ts.map +1 -1
- package/lib/database/index.js +1 -0
- package/lib/database/index.js.map +1 -1
- package/lib/database/transaction/AcDbChangeApplier.d.ts +118 -0
- package/lib/database/transaction/AcDbChangeApplier.d.ts.map +1 -0
- package/lib/database/transaction/AcDbChangeApplier.js +310 -0
- package/lib/database/transaction/AcDbChangeApplier.js.map +1 -0
- package/lib/database/transaction/AcDbChangeRecorder.d.ts +113 -0
- package/lib/database/transaction/AcDbChangeRecorder.d.ts.map +1 -0
- package/lib/database/transaction/AcDbChangeRecorder.js +235 -0
- package/lib/database/transaction/AcDbChangeRecorder.js.map +1 -0
- package/lib/database/transaction/AcDbDatabaseChange.d.ts +67 -0
- package/lib/database/transaction/AcDbDatabaseChange.d.ts.map +1 -0
- package/lib/database/transaction/AcDbDatabaseChange.js +23 -0
- package/lib/database/transaction/AcDbDatabaseChange.js.map +1 -0
- package/lib/database/transaction/AcDbDatabaseTransaction.d.ts +26 -0
- package/lib/database/transaction/AcDbDatabaseTransaction.d.ts.map +1 -0
- package/lib/database/transaction/AcDbDatabaseTransaction.js +51 -0
- package/lib/database/transaction/AcDbDatabaseTransaction.js.map +1 -0
- package/lib/database/transaction/AcDbDatabaseTransactionManager.d.ts +188 -0
- package/lib/database/transaction/AcDbDatabaseTransactionManager.d.ts.map +1 -0
- package/lib/database/transaction/AcDbDatabaseTransactionManager.js +594 -0
- package/lib/database/transaction/AcDbDatabaseTransactionManager.js.map +1 -0
- package/lib/database/transaction/AcDbTransaction.d.ts +7 -0
- package/lib/database/transaction/AcDbTransaction.d.ts.map +1 -1
- package/lib/database/transaction/AcDbTransaction.js +20 -10
- package/lib/database/transaction/AcDbTransaction.js.map +1 -1
- package/lib/database/transaction/AcDbTransactionManager.d.ts +3 -4
- package/lib/database/transaction/AcDbTransactionManager.d.ts.map +1 -1
- package/lib/database/transaction/AcDbTransactionManager.js +3 -4
- package/lib/database/transaction/AcDbTransactionManager.js.map +1 -1
- package/lib/database/transaction/AcDbUndoRecord.d.ts +11 -0
- package/lib/database/transaction/AcDbUndoRecord.d.ts.map +1 -0
- package/lib/database/transaction/AcDbUndoRecord.js +2 -0
- package/lib/database/transaction/AcDbUndoRecord.js.map +1 -0
- package/lib/database/transaction/AcDbUndoStack.d.ts +52 -0
- package/lib/database/transaction/AcDbUndoStack.d.ts.map +1 -0
- package/lib/database/transaction/AcDbUndoStack.js +74 -0
- package/lib/database/transaction/AcDbUndoStack.js.map +1 -0
- package/lib/database/transaction/index.d.ts +9 -0
- package/lib/database/transaction/index.d.ts.map +1 -1
- package/lib/database/transaction/index.js +6 -0
- package/lib/database/transaction/index.js.map +1 -1
- package/lib/entity/AcDbEntity.js +4 -4
- package/lib/entity/AcDbEntity.js.map +1 -1
- package/lib/index.d.ts +2 -2
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/object/AcDbDictionary.d.ts +11 -0
- package/lib/object/AcDbDictionary.d.ts.map +1 -1
- package/lib/object/AcDbDictionary.js +65 -20
- package/lib/object/AcDbDictionary.js.map +1 -1
- package/package.json +4 -4
|
@@ -0,0 +1,235 @@
|
|
|
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 { AcDbSysVarManager } from '../AcDbSysVarManager';
|
|
13
|
+
import { areChangeContainersEqual } from './AcDbDatabaseChange';
|
|
14
|
+
/**
|
|
15
|
+
* Accumulates structured database changes during an active transaction.
|
|
16
|
+
*
|
|
17
|
+
* Append/remove pairs that cancel within the same transaction are coalesced,
|
|
18
|
+
* and duplicate modify/sysvar entries for the same target are ignored.
|
|
19
|
+
*/
|
|
20
|
+
var AcDbChangeRecorder = /** @class */ (function () {
|
|
21
|
+
function AcDbChangeRecorder() {
|
|
22
|
+
this.changes = [];
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Returns the changes recorded so far in this transaction.
|
|
26
|
+
*
|
|
27
|
+
* The returned array is the internal store; callers should treat it as read-only.
|
|
28
|
+
*/
|
|
29
|
+
AcDbChangeRecorder.prototype.getChanges = function () {
|
|
30
|
+
return this.changes;
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Discards all recorded changes without applying them.
|
|
34
|
+
*/
|
|
35
|
+
AcDbChangeRecorder.prototype.clear = function () {
|
|
36
|
+
this.changes.length = 0;
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Merges changes from a nested transaction into this recorder.
|
|
40
|
+
*
|
|
41
|
+
* Used when an inner transaction commits into its parent without touching
|
|
42
|
+
* the undo stack.
|
|
43
|
+
*
|
|
44
|
+
* @param other - Recorder from a child transaction being committed
|
|
45
|
+
*/
|
|
46
|
+
AcDbChangeRecorder.prototype.mergeFrom = function (other) {
|
|
47
|
+
var e_1, _a;
|
|
48
|
+
try {
|
|
49
|
+
for (var _b = __values(other.getChanges()), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
50
|
+
var change = _c.value;
|
|
51
|
+
this.mergeChange(change);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
55
|
+
finally {
|
|
56
|
+
try {
|
|
57
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
58
|
+
}
|
|
59
|
+
finally { if (e_1) throw e_1.error; }
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* Records the pre-modification snapshot of an opened-for-write object.
|
|
64
|
+
*
|
|
65
|
+
* Only the first modify entry per {@link AcDbObject.objectId} is kept.
|
|
66
|
+
*
|
|
67
|
+
* @param object - Object whose state should be restorable on abort/undo
|
|
68
|
+
*/
|
|
69
|
+
AcDbChangeRecorder.prototype.recordModify = function (object) {
|
|
70
|
+
var objectId = object.objectId;
|
|
71
|
+
var existing = this.changes.find(function (c) { return c.kind === 'modify' && c.objectId === objectId; });
|
|
72
|
+
if (existing) {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
this.changes.push({
|
|
76
|
+
kind: 'modify',
|
|
77
|
+
objectId: objectId,
|
|
78
|
+
before: object.clonePreservingIdentity()
|
|
79
|
+
});
|
|
80
|
+
};
|
|
81
|
+
/**
|
|
82
|
+
* Records insertion of an object into a database container.
|
|
83
|
+
*
|
|
84
|
+
* If a matching remove was recorded earlier in the same transaction,
|
|
85
|
+
* the pair cancels and neither change is retained.
|
|
86
|
+
*
|
|
87
|
+
* @param container - Container that received the object
|
|
88
|
+
* @param object - Object that was appended; stored as an identity-preserving clone
|
|
89
|
+
*/
|
|
90
|
+
AcDbChangeRecorder.prototype.recordAppend = function (container, object) {
|
|
91
|
+
this.recordStructuralChange({
|
|
92
|
+
kind: 'append',
|
|
93
|
+
container: container,
|
|
94
|
+
object: object.clonePreservingIdentity()
|
|
95
|
+
});
|
|
96
|
+
};
|
|
97
|
+
/**
|
|
98
|
+
* Records removal of an object from a database container.
|
|
99
|
+
*
|
|
100
|
+
* If a matching append was recorded earlier in the same transaction,
|
|
101
|
+
* the pair cancels and neither change is retained.
|
|
102
|
+
*
|
|
103
|
+
* @param container - Container that owned the removed object
|
|
104
|
+
* @param object - Object that was removed; stored as an identity-preserving clone
|
|
105
|
+
*/
|
|
106
|
+
AcDbChangeRecorder.prototype.recordRemove = function (container, object) {
|
|
107
|
+
this.recordStructuralChange({
|
|
108
|
+
kind: 'remove',
|
|
109
|
+
container: container,
|
|
110
|
+
object: object.clonePreservingIdentity()
|
|
111
|
+
});
|
|
112
|
+
};
|
|
113
|
+
/**
|
|
114
|
+
* Records the value of a system variable before mutation.
|
|
115
|
+
*
|
|
116
|
+
* Only the first sysvar entry per normalized name is kept.
|
|
117
|
+
*
|
|
118
|
+
* @param name - System variable name (case-insensitive)
|
|
119
|
+
* @param before - Value observed before the mutation
|
|
120
|
+
*/
|
|
121
|
+
AcDbChangeRecorder.prototype.recordSysvar = function (name, before) {
|
|
122
|
+
var normalizedName = name.toLowerCase();
|
|
123
|
+
var existing = this.changes.find(function (c) { return c.kind === 'sysvar' && c.name === normalizedName; });
|
|
124
|
+
if (existing) {
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
this.changes.push({
|
|
128
|
+
kind: 'sysvar',
|
|
129
|
+
name: normalizedName,
|
|
130
|
+
before: before
|
|
131
|
+
});
|
|
132
|
+
};
|
|
133
|
+
/**
|
|
134
|
+
* Captures the post-change state for modify and sysvar entries at commit time.
|
|
135
|
+
*
|
|
136
|
+
* Append/remove entries are complete when recorded and do not require
|
|
137
|
+
* finalization.
|
|
138
|
+
*
|
|
139
|
+
* @param database - Database used to read live post-commit values
|
|
140
|
+
*/
|
|
141
|
+
AcDbChangeRecorder.prototype.finalize = function (database) {
|
|
142
|
+
var e_2, _a;
|
|
143
|
+
try {
|
|
144
|
+
for (var _b = __values(this.changes), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
145
|
+
var change = _c.value;
|
|
146
|
+
if (change.kind === 'modify') {
|
|
147
|
+
var object = database.getObjectById(change.objectId);
|
|
148
|
+
if (object) {
|
|
149
|
+
change.after = object.clonePreservingIdentity();
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
else if (change.kind === 'sysvar') {
|
|
153
|
+
change.after = this.getSysvarValue(database, change.name);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
158
|
+
finally {
|
|
159
|
+
try {
|
|
160
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
161
|
+
}
|
|
162
|
+
finally { if (e_2) throw e_2.error; }
|
|
163
|
+
}
|
|
164
|
+
};
|
|
165
|
+
/**
|
|
166
|
+
* Records or coalesces one append/remove change.
|
|
167
|
+
*
|
|
168
|
+
* When an opposite structural change for the same container and object ID
|
|
169
|
+
* already exists in this transaction, both entries cancel and neither is kept.
|
|
170
|
+
*
|
|
171
|
+
* @param change - Append or remove entry to merge into the recorder
|
|
172
|
+
*/
|
|
173
|
+
AcDbChangeRecorder.prototype.recordStructuralChange = function (change) {
|
|
174
|
+
var oppositeKind = change.kind === 'append' ? 'remove' : 'append';
|
|
175
|
+
var cancelIndex = this.findStructuralChangeIndex(oppositeKind, change.container, change.object.objectId);
|
|
176
|
+
if (cancelIndex >= 0) {
|
|
177
|
+
this.changes.splice(cancelIndex, 1);
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
this.changes.push(change);
|
|
181
|
+
};
|
|
182
|
+
/**
|
|
183
|
+
* Merges one change from a nested transaction into this recorder.
|
|
184
|
+
*
|
|
185
|
+
* Modify and sysvar entries deduplicate by object ID or variable name;
|
|
186
|
+
* structural entries use the same cancel/coalesce rules as {@link recordAppend}.
|
|
187
|
+
*
|
|
188
|
+
* @param change - Change copied from a child transaction recorder
|
|
189
|
+
*/
|
|
190
|
+
AcDbChangeRecorder.prototype.mergeChange = function (change) {
|
|
191
|
+
if (change.kind === 'modify') {
|
|
192
|
+
var existing = this.changes.find(function (c) { return c.kind === 'modify' && c.objectId === change.objectId; });
|
|
193
|
+
if (!existing) {
|
|
194
|
+
this.changes.push(change);
|
|
195
|
+
}
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
if (change.kind === 'sysvar') {
|
|
199
|
+
var existing = this.changes.find(function (c) { return c.kind === 'sysvar' && c.name === change.name; });
|
|
200
|
+
if (!existing) {
|
|
201
|
+
this.changes.push(change);
|
|
202
|
+
}
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
this.recordStructuralChange(change);
|
|
206
|
+
};
|
|
207
|
+
/**
|
|
208
|
+
* Finds the index of a structural change matching kind, container, and object ID.
|
|
209
|
+
*
|
|
210
|
+
* @param kind - Append or remove kind to search for
|
|
211
|
+
* @param container - Container descriptor that must match exactly
|
|
212
|
+
* @param objectId - Object identifier of the affected record
|
|
213
|
+
* @returns Index in {@link changes}, or `-1` when no match exists
|
|
214
|
+
*/
|
|
215
|
+
AcDbChangeRecorder.prototype.findStructuralChangeIndex = function (kind, container, objectId) {
|
|
216
|
+
return this.changes.findIndex(function (change) {
|
|
217
|
+
return change.kind === kind &&
|
|
218
|
+
change.object.objectId === objectId &&
|
|
219
|
+
areChangeContainersEqual(change.container, container);
|
|
220
|
+
});
|
|
221
|
+
};
|
|
222
|
+
/**
|
|
223
|
+
* Reads the current value of a system variable from the database.
|
|
224
|
+
*
|
|
225
|
+
* @param database - Database passed to {@link AcDbSysVarManager.getVar}
|
|
226
|
+
* @param name - Normalized system variable name
|
|
227
|
+
* @returns Live variable value used to populate `after` during {@link finalize}
|
|
228
|
+
*/
|
|
229
|
+
AcDbChangeRecorder.prototype.getSysvarValue = function (database, name) {
|
|
230
|
+
return AcDbSysVarManager.instance().getVar(name, database);
|
|
231
|
+
};
|
|
232
|
+
return AcDbChangeRecorder;
|
|
233
|
+
}());
|
|
234
|
+
export { AcDbChangeRecorder };
|
|
235
|
+
//# sourceMappingURL=AcDbChangeRecorder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AcDbChangeRecorder.js","sourceRoot":"","sources":["../../../src/database/transaction/AcDbChangeRecorder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { AcDbObject } from '../../base';
|
|
2
|
+
/**
|
|
3
|
+
* Identifies the container that holds a database object for undo/redo recording.
|
|
4
|
+
*
|
|
5
|
+
* - `blockTableRecord` — entity membership in a block table record
|
|
6
|
+
* - `symbolTable` — symbol table record membership
|
|
7
|
+
* - `dictionary` — named entry in an {@link AcDbDictionary}
|
|
8
|
+
*/
|
|
9
|
+
export type AcDbChangeContainer = {
|
|
10
|
+
type: 'blockTableRecord';
|
|
11
|
+
ownerId: string;
|
|
12
|
+
} | {
|
|
13
|
+
type: 'symbolTable';
|
|
14
|
+
tableName: string;
|
|
15
|
+
} | {
|
|
16
|
+
type: 'dictionary';
|
|
17
|
+
dictionaryId: string;
|
|
18
|
+
key: string;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* A single recorded change within a transaction or undo record.
|
|
22
|
+
*
|
|
23
|
+
* Each variant stores enough information for {@link AcDbChangeApplier} to
|
|
24
|
+
* replay the change forward or in reverse.
|
|
25
|
+
*/
|
|
26
|
+
export type AcDbDatabaseChange = {
|
|
27
|
+
/** Property snapshot change for one database-resident object */
|
|
28
|
+
kind: 'modify';
|
|
29
|
+
/** Object whose properties changed */
|
|
30
|
+
objectId: string;
|
|
31
|
+
/** State before the transaction or undoable operation */
|
|
32
|
+
before: AcDbObject;
|
|
33
|
+
/** State after commit; populated by {@link AcDbChangeRecorder.finalize} */
|
|
34
|
+
after?: AcDbObject;
|
|
35
|
+
} | {
|
|
36
|
+
/** Object inserted into a container */
|
|
37
|
+
kind: 'append';
|
|
38
|
+
/** Container that received the object */
|
|
39
|
+
container: AcDbChangeContainer;
|
|
40
|
+
/** Appended object snapshot */
|
|
41
|
+
object: AcDbObject;
|
|
42
|
+
} | {
|
|
43
|
+
/** Object removed from a container */
|
|
44
|
+
kind: 'remove';
|
|
45
|
+
/** Container that owned the object */
|
|
46
|
+
container: AcDbChangeContainer;
|
|
47
|
+
/** Removed object snapshot */
|
|
48
|
+
object: AcDbObject;
|
|
49
|
+
} | {
|
|
50
|
+
/** System variable value change */
|
|
51
|
+
kind: 'sysvar';
|
|
52
|
+
/** Normalized system variable name */
|
|
53
|
+
name: string;
|
|
54
|
+
/** Value before the mutation */
|
|
55
|
+
before: unknown;
|
|
56
|
+
/** Value after commit; populated by {@link AcDbChangeRecorder.finalize} */
|
|
57
|
+
after?: unknown;
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* Returns true when two change containers refer to the same storage location.
|
|
61
|
+
*
|
|
62
|
+
* @param a - First container descriptor
|
|
63
|
+
* @param b - Second container descriptor
|
|
64
|
+
* @returns True when both descriptors identify the same append/remove target
|
|
65
|
+
*/
|
|
66
|
+
export declare function areChangeContainersEqual(a: AcDbChangeContainer, b: AcDbChangeContainer): boolean;
|
|
67
|
+
//# sourceMappingURL=AcDbDatabaseChange.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AcDbDatabaseChange.d.ts","sourceRoot":"","sources":["../../../src/database/transaction/AcDbDatabaseChange.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAEvC;;;;;;GAMG;AACH,MAAM,MAAM,mBAAmB,GAC3B;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAC1C;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAA;AAE7D;;;;;GAKG;AACH,MAAM,MAAM,kBAAkB,GAC1B;IACE,gEAAgE;IAChE,IAAI,EAAE,QAAQ,CAAA;IACd,sCAAsC;IACtC,QAAQ,EAAE,MAAM,CAAA;IAChB,yDAAyD;IACzD,MAAM,EAAE,UAAU,CAAA;IAClB,2EAA2E;IAC3E,KAAK,CAAC,EAAE,UAAU,CAAA;CACnB,GACD;IACE,uCAAuC;IACvC,IAAI,EAAE,QAAQ,CAAA;IACd,yCAAyC;IACzC,SAAS,EAAE,mBAAmB,CAAA;IAC9B,+BAA+B;IAC/B,MAAM,EAAE,UAAU,CAAA;CACnB,GACD;IACE,sCAAsC;IACtC,IAAI,EAAE,QAAQ,CAAA;IACd,sCAAsC;IACtC,SAAS,EAAE,mBAAmB,CAAA;IAC9B,8BAA8B;IAC9B,MAAM,EAAE,UAAU,CAAA;CACnB,GACD;IACE,mCAAmC;IACnC,IAAI,EAAE,QAAQ,CAAA;IACd,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAA;IACZ,gCAAgC;IAChC,MAAM,EAAE,OAAO,CAAA;IACf,2EAA2E;IAC3E,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA;AAEL;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,CAAC,EAAE,mBAAmB,EACtB,CAAC,EAAE,mBAAmB,GACrB,OAAO,CAiBT"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Returns true when two change containers refer to the same storage location.
|
|
3
|
+
*
|
|
4
|
+
* @param a - First container descriptor
|
|
5
|
+
* @param b - Second container descriptor
|
|
6
|
+
* @returns True when both descriptors identify the same append/remove target
|
|
7
|
+
*/
|
|
8
|
+
export function areChangeContainersEqual(a, b) {
|
|
9
|
+
if (a.type !== b.type) {
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
12
|
+
switch (a.type) {
|
|
13
|
+
case 'blockTableRecord':
|
|
14
|
+
return b.type === 'blockTableRecord' && a.ownerId === b.ownerId;
|
|
15
|
+
case 'symbolTable':
|
|
16
|
+
return b.type === 'symbolTable' && a.tableName === b.tableName;
|
|
17
|
+
case 'dictionary':
|
|
18
|
+
return (b.type === 'dictionary' &&
|
|
19
|
+
a.dictionaryId === b.dictionaryId &&
|
|
20
|
+
a.key === b.key);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=AcDbDatabaseChange.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AcDbDatabaseChange.js","sourceRoot":"","sources":["../../../src/database/transaction/AcDbDatabaseChange.ts"],"names":[],"mappings":"AA0DA;;;;;;GAMG;AACH,MAAM,UAAU,wBAAwB,CACtC,CAAsB,EACtB,CAAsB;IAEtB,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;QACtB,OAAO,KAAK,CAAA;IACd,CAAC;IAED,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QACf,KAAK,kBAAkB;YACrB,OAAO,CAAC,CAAC,IAAI,KAAK,kBAAkB,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,OAAO,CAAA;QACjE,KAAK,aAAa;YAChB,OAAO,CAAC,CAAC,IAAI,KAAK,aAAa,IAAI,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,SAAS,CAAA;QAChE,KAAK,YAAY;YACf,OAAO,CACL,CAAC,CAAC,IAAI,KAAK,YAAY;gBACvB,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,YAAY;gBACjC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAChB,CAAA;IACL,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { AcDbObject, AcDbObjectId } from '../../base';
|
|
2
|
+
import { AcDbDatabase } from '../AcDbDatabase';
|
|
3
|
+
import { AcDbTransaction } from './AcDbTransaction';
|
|
4
|
+
/**
|
|
5
|
+
* Database-bound transaction with object lookup through {@link AcDbDatabase}.
|
|
6
|
+
*
|
|
7
|
+
* Created by {@link AcDbDatabaseTransactionManager.startTransaction} and
|
|
8
|
+
* returned from {@link AcDbDatabaseTransactionManager.runUndoable}.
|
|
9
|
+
*/
|
|
10
|
+
export declare class AcDbDatabaseTransaction extends AcDbTransaction {
|
|
11
|
+
private readonly database;
|
|
12
|
+
/**
|
|
13
|
+
* @param database - Database whose objects are opened and recorded
|
|
14
|
+
*/
|
|
15
|
+
constructor(database: AcDbDatabase);
|
|
16
|
+
/**
|
|
17
|
+
* Resolves an object ID through the owning database.
|
|
18
|
+
*
|
|
19
|
+
* @param objectId - Identifier of the object to open
|
|
20
|
+
* @param openErased - Reserved for erased-object support
|
|
21
|
+
* @returns The matching live object
|
|
22
|
+
* @throws Error when the object cannot be found
|
|
23
|
+
*/
|
|
24
|
+
protected lookupObject<T extends AcDbObject>(objectId: AcDbObjectId, openErased: boolean): T;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=AcDbDatabaseTransaction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AcDbDatabaseTransaction.d.ts","sourceRoot":"","sources":["../../../src/database/transaction/AcDbDatabaseTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAEnD;;;;;GAKG;AACH,qBAAa,uBAAwB,SAAQ,eAAe;IAI9C,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAHrC;;OAEG;gBAC0B,QAAQ,EAAE,YAAY;IAInD;;;;;;;OAOG;cACgB,YAAY,CAAC,CAAC,SAAS,UAAU,EAClD,QAAQ,EAAE,YAAY,EACtB,UAAU,EAAE,OAAO,GAClB,CAAC;CAOL"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
var __extends = (this && this.__extends) || (function () {
|
|
2
|
+
var extendStatics = function (d, b) {
|
|
3
|
+
extendStatics = Object.setPrototypeOf ||
|
|
4
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
5
|
+
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
6
|
+
return extendStatics(d, b);
|
|
7
|
+
};
|
|
8
|
+
return function (d, b) {
|
|
9
|
+
if (typeof b !== "function" && b !== null)
|
|
10
|
+
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
11
|
+
extendStatics(d, b);
|
|
12
|
+
function __() { this.constructor = d; }
|
|
13
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
14
|
+
};
|
|
15
|
+
})();
|
|
16
|
+
import { AcDbTransaction } from './AcDbTransaction';
|
|
17
|
+
/**
|
|
18
|
+
* Database-bound transaction with object lookup through {@link AcDbDatabase}.
|
|
19
|
+
*
|
|
20
|
+
* Created by {@link AcDbDatabaseTransactionManager.startTransaction} and
|
|
21
|
+
* returned from {@link AcDbDatabaseTransactionManager.runUndoable}.
|
|
22
|
+
*/
|
|
23
|
+
var AcDbDatabaseTransaction = /** @class */ (function (_super) {
|
|
24
|
+
__extends(AcDbDatabaseTransaction, _super);
|
|
25
|
+
/**
|
|
26
|
+
* @param database - Database whose objects are opened and recorded
|
|
27
|
+
*/
|
|
28
|
+
function AcDbDatabaseTransaction(database) {
|
|
29
|
+
var _this = _super.call(this) || this;
|
|
30
|
+
_this.database = database;
|
|
31
|
+
return _this;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Resolves an object ID through the owning database.
|
|
35
|
+
*
|
|
36
|
+
* @param objectId - Identifier of the object to open
|
|
37
|
+
* @param openErased - Reserved for erased-object support
|
|
38
|
+
* @returns The matching live object
|
|
39
|
+
* @throws Error when the object cannot be found
|
|
40
|
+
*/
|
|
41
|
+
AcDbDatabaseTransaction.prototype.lookupObject = function (objectId, openErased) {
|
|
42
|
+
var obj = this.database.getObjectById(objectId, openErased);
|
|
43
|
+
if (!obj) {
|
|
44
|
+
throw new Error("lookupObject(".concat(objectId, ") not found"));
|
|
45
|
+
}
|
|
46
|
+
return obj;
|
|
47
|
+
};
|
|
48
|
+
return AcDbDatabaseTransaction;
|
|
49
|
+
}(AcDbTransaction));
|
|
50
|
+
export { AcDbDatabaseTransaction };
|
|
51
|
+
//# sourceMappingURL=AcDbDatabaseTransaction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AcDbDatabaseTransaction.js","sourceRoot":"","sources":["../../../src/database/transaction/AcDbDatabaseTransaction.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAEnD;;;;;GAKG;AACH;IAA6C,2CAAe;IAC1D;;OAEG;IACH,iCAA6B,QAAsB;QACjD,YAAA,MAAK,WAAE,SAAA;QADoB,cAAQ,GAAR,QAAQ,CAAc;;IAEnD,CAAC;IAED;;;;;;;OAOG;IACgB,8CAAY,GAA/B,UACE,QAAsB,EACtB,UAAmB;QAEnB,IAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;QAC7D,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,uBAAgB,QAAQ,gBAAa,CAAC,CAAA;QACxD,CAAC;QACD,OAAO,GAAQ,CAAA;IACjB,CAAC;IACH,8BAAC;AAAD,CAAC,AA1BD,CAA6C,eAAe,GA0B3D"}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import { AcDbObject } from '../../base';
|
|
2
|
+
import { AcDbDatabase } from '../AcDbDatabase';
|
|
3
|
+
import { AcDbChangeContainer } from './AcDbDatabaseChange';
|
|
4
|
+
import { AcDbDatabaseTransaction } from './AcDbDatabaseTransaction';
|
|
5
|
+
/**
|
|
6
|
+
* Manages database transactions and undo/redo history for one {@link AcDbDatabase}.
|
|
7
|
+
*
|
|
8
|
+
* Aligns with ObjectARX {@code AcDbTransactionManager} semantics and provides
|
|
9
|
+
* undo mark grouping for editor commands.
|
|
10
|
+
*/
|
|
11
|
+
export declare class AcDbDatabaseTransactionManager {
|
|
12
|
+
private readonly database;
|
|
13
|
+
private readonly transactionStack;
|
|
14
|
+
private readonly undoStack;
|
|
15
|
+
private readonly changeApplier;
|
|
16
|
+
private readonly undoMarkStack;
|
|
17
|
+
private _applyingUndoRedo;
|
|
18
|
+
/**
|
|
19
|
+
* When true, mutations outside an active transaction throw an error.
|
|
20
|
+
*
|
|
21
|
+
* Undo/redo replay is exempt so {@link AcDbChangeApplier} can restore state.
|
|
22
|
+
*/
|
|
23
|
+
strictMode: boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Creates a transaction manager for one database.
|
|
26
|
+
*
|
|
27
|
+
* @param database - Database whose mutations and undo history are managed
|
|
28
|
+
*/
|
|
29
|
+
constructor(database: AcDbDatabase);
|
|
30
|
+
/**
|
|
31
|
+
* Starts a new database transaction and pushes it onto the stack.
|
|
32
|
+
*
|
|
33
|
+
* Equivalent to ObjectARX `AcDbTransactionManager::startTransaction()`.
|
|
34
|
+
*
|
|
35
|
+
* @returns The newly created transaction
|
|
36
|
+
*/
|
|
37
|
+
startTransaction(): AcDbDatabaseTransaction;
|
|
38
|
+
/**
|
|
39
|
+
* Returns the top-most active transaction, if any.
|
|
40
|
+
*/
|
|
41
|
+
currentTransaction(): AcDbDatabaseTransaction | undefined;
|
|
42
|
+
/**
|
|
43
|
+
* Returns true when at least one transaction is active.
|
|
44
|
+
*/
|
|
45
|
+
hasTransaction(): boolean;
|
|
46
|
+
/**
|
|
47
|
+
* Returns true when mutations should be recorded into the current transaction.
|
|
48
|
+
*
|
|
49
|
+
* Recording is disabled while undo/redo is being applied.
|
|
50
|
+
*/
|
|
51
|
+
isRecording(): boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Returns true while {@link AcDbChangeApplier} is replaying undo or redo changes.
|
|
54
|
+
*/
|
|
55
|
+
isApplyingUndoRedo(): boolean;
|
|
56
|
+
/**
|
|
57
|
+
* Commits the current transaction.
|
|
58
|
+
*
|
|
59
|
+
* Nested transactions merge their recorder into the parent. The outermost
|
|
60
|
+
* commit finalizes changes, dispatches events, and enqueues undo history
|
|
61
|
+
* when an undo mark is active.
|
|
62
|
+
*
|
|
63
|
+
* @throws Error if no transaction is active
|
|
64
|
+
*/
|
|
65
|
+
commitTransaction(): void;
|
|
66
|
+
/**
|
|
67
|
+
* Aborts the current transaction and rolls back all recorded changes.
|
|
68
|
+
*
|
|
69
|
+
* @throws Error if no transaction is active
|
|
70
|
+
*/
|
|
71
|
+
abortTransaction(): void;
|
|
72
|
+
/**
|
|
73
|
+
* Opens an undo-mark group.
|
|
74
|
+
*
|
|
75
|
+
* Commits performed before {@link endUndoMark} are merged into one
|
|
76
|
+
* {@link AcDbUndoRecord}.
|
|
77
|
+
*
|
|
78
|
+
* @param label - Optional label for undo UI (for example, `"Move"`)
|
|
79
|
+
*/
|
|
80
|
+
startUndoMark(label?: string): void;
|
|
81
|
+
/**
|
|
82
|
+
* Closes the current undo mark and pushes a record when changes were committed.
|
|
83
|
+
*
|
|
84
|
+
* @throws Error if no undo mark is active
|
|
85
|
+
*/
|
|
86
|
+
endUndoMark(): void;
|
|
87
|
+
/**
|
|
88
|
+
* Discards the current undo mark without creating an undo record.
|
|
89
|
+
*/
|
|
90
|
+
cancelUndoMark(): void;
|
|
91
|
+
/**
|
|
92
|
+
* Undoes the most recent undo record.
|
|
93
|
+
*
|
|
94
|
+
* @returns True when an undo record was applied; false when the stack is empty
|
|
95
|
+
*/
|
|
96
|
+
undo(): boolean;
|
|
97
|
+
/**
|
|
98
|
+
* Redoes the most recently undone record.
|
|
99
|
+
*
|
|
100
|
+
* @returns True when a redo record was applied; false when the redo stack is empty
|
|
101
|
+
*/
|
|
102
|
+
redo(): boolean;
|
|
103
|
+
/**
|
|
104
|
+
* Returns true when at least one undo record is available.
|
|
105
|
+
*/
|
|
106
|
+
canUndo(): boolean;
|
|
107
|
+
/**
|
|
108
|
+
* Returns true when at least one redo record is available.
|
|
109
|
+
*/
|
|
110
|
+
canRedo(): boolean;
|
|
111
|
+
/**
|
|
112
|
+
* Clears both undo and redo history for this database.
|
|
113
|
+
*/
|
|
114
|
+
clearUndoStack(): void;
|
|
115
|
+
/**
|
|
116
|
+
* Records append of an object into a container during the active transaction.
|
|
117
|
+
*
|
|
118
|
+
* No-op when {@link isRecording} is false.
|
|
119
|
+
*
|
|
120
|
+
* @param container - Container that received the object
|
|
121
|
+
* @param object - Object that was appended
|
|
122
|
+
*/
|
|
123
|
+
recordAppend(container: AcDbChangeContainer, object: AcDbObject): void;
|
|
124
|
+
/**
|
|
125
|
+
* Records removal of an object from a container during the active transaction.
|
|
126
|
+
*
|
|
127
|
+
* No-op when {@link isRecording} is false.
|
|
128
|
+
*
|
|
129
|
+
* @param container - Container that owned the removed object
|
|
130
|
+
* @param object - Object that was removed
|
|
131
|
+
*/
|
|
132
|
+
recordRemove(container: AcDbChangeContainer, object: AcDbObject): void;
|
|
133
|
+
/**
|
|
134
|
+
* Records the pre-change value of a system variable.
|
|
135
|
+
*
|
|
136
|
+
* No-op when {@link isRecording} is false.
|
|
137
|
+
*
|
|
138
|
+
* @param name - System variable name
|
|
139
|
+
* @param before - Value observed before mutation
|
|
140
|
+
*/
|
|
141
|
+
recordSysvar(name: string, before: unknown): void;
|
|
142
|
+
/**
|
|
143
|
+
* Maps a symbol table instance to the stable name stored in undo records.
|
|
144
|
+
*
|
|
145
|
+
* @param table - Symbol table whose logical name is needed
|
|
146
|
+
* @returns Known table name, or the table's object ID as a fallback
|
|
147
|
+
*/
|
|
148
|
+
resolveSymbolTableName(table: {
|
|
149
|
+
objectId: string;
|
|
150
|
+
}): string;
|
|
151
|
+
/**
|
|
152
|
+
* Runs one undoable editor command inside a transaction and undo mark.
|
|
153
|
+
*
|
|
154
|
+
* On success the transaction is committed and the undo mark is closed.
|
|
155
|
+
* On failure the transaction is aborted and the undo mark is cancelled.
|
|
156
|
+
*
|
|
157
|
+
* @param label - Label stored on the resulting undo record
|
|
158
|
+
* @param fn - Callback that performs the command using the active transaction
|
|
159
|
+
* @returns The value returned by `fn`
|
|
160
|
+
*/
|
|
161
|
+
runUndoable<T>(label: string, fn: (tr: AcDbDatabaseTransaction) => T): T;
|
|
162
|
+
/**
|
|
163
|
+
* Appends committed changes to the active undo mark, if any.
|
|
164
|
+
*
|
|
165
|
+
* Called after the outermost transaction commit so multiple commits within
|
|
166
|
+
* one {@link startUndoMark} group merge into a single {@link AcDbUndoRecord}.
|
|
167
|
+
*
|
|
168
|
+
* @param changes - Finalized changes from the committed transaction
|
|
169
|
+
*/
|
|
170
|
+
private enqueueUndoChanges;
|
|
171
|
+
/**
|
|
172
|
+
* Dispatches entity, dictionary, and sysvar events after a successful commit.
|
|
173
|
+
*
|
|
174
|
+
* @param changes - Finalized changes from the committed outermost transaction
|
|
175
|
+
*/
|
|
176
|
+
private dispatchCommitEvents;
|
|
177
|
+
/**
|
|
178
|
+
* Dispatches entity, dictionary, and sysvar events after undo or redo replay.
|
|
179
|
+
*
|
|
180
|
+
* Append/remove and dictionary notifications are swapped when `inverse` is
|
|
181
|
+
* true so listeners observe the same semantics as the user-facing operation.
|
|
182
|
+
*
|
|
183
|
+
* @param changes - Changes from the undo record being applied
|
|
184
|
+
* @param inverse - True when undoing (inverse replay); false when redoing
|
|
185
|
+
*/
|
|
186
|
+
private dispatchUndoRedoEvents;
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=AcDbDatabaseTransactionManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AcDbDatabaseTransactionManager.d.ts","sourceRoot":"","sources":["../../../src/database/transaction/AcDbDatabaseTransactionManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAO9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAA;AAanE;;;;;GAKG;AACH,qBAAa,8BAA8B;IAmB7B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAlBrC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAgC;IACjE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsB;IAChD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAmB;IACjD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA0B;IACxD,OAAO,CAAC,iBAAiB,CAAQ;IAEjC;;;;OAIG;IACH,UAAU,UAAQ;IAElB;;;;OAIG;gBAC0B,QAAQ,EAAE,YAAY;IAInD;;;;;;OAMG;IACH,gBAAgB,IAAI,uBAAuB;IAM3C;;OAEG;IACH,kBAAkB,IAAI,uBAAuB,GAAG,SAAS;IAIzD;;OAEG;IACH,cAAc,IAAI,OAAO;IAIzB;;;;OAIG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACH,kBAAkB,IAAI,OAAO;IAI7B;;;;;;;;OAQG;IACH,iBAAiB,IAAI,IAAI;IAuBzB;;;;OAIG;IACH,gBAAgB,IAAI,IAAI;IAqBxB;;;;;;;OAOG;IACH,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAInC;;;;OAIG;IACH,WAAW,IAAI,IAAI;IAgBnB;;OAEG;IACH,cAAc,IAAI,IAAI;IAMtB;;;;OAIG;IACH,IAAI,IAAI,OAAO;IAoBf;;;;OAIG;IACH,IAAI,IAAI,OAAO;IAoBf;;OAEG;IACH,OAAO,IAAI,OAAO;IAIlB;;OAEG;IACH,OAAO,IAAI,OAAO;IAIlB;;OAEG;IACH,cAAc,IAAI,IAAI;IAItB;;;;;;;OAOG;IACH,YAAY,CAAC,SAAS,EAAE,mBAAmB,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI;IAOtE;;;;;;;OAOG;IACH,YAAY,CAAC,SAAS,EAAE,mBAAmB,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI;IAOtE;;;;;;;OAOG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI;IAOjD;;;;;OAKG;IACH,sBAAsB,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM;IAa3D;;;;;;;;;OASG;IACH,WAAW,CAAC,CAAC,EACX,KAAK,EAAE,MAAM,EACb,EAAE,EAAE,CAAC,EAAE,EAAE,uBAAuB,KAAK,CAAC,GACrC,CAAC;IAiBJ;;;;;;;OAOG;IACH,OAAO,CAAC,kBAAkB;IAa1B;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;IAyC5B;;;;;;;;OAQG;IACH,OAAO,CAAC,sBAAsB;CA+D/B"}
|