@ifc-lite/mutations 1.14.5 → 1.15.1
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/README.md +141 -7
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/mutable-property-view.d.ts +123 -2
- package/dist/mutable-property-view.d.ts.map +1 -1
- package/dist/mutable-property-view.js +372 -23
- package/dist/mutable-property-view.js.map +1 -1
- package/dist/store-editor.d.ts +89 -0
- package/dist/store-editor.d.ts.map +1 -0
- package/dist/store-editor.js +155 -0
- package/dist/store-editor.js.map +1 -0
- package/dist/types.d.ts +52 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +6 -6
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @ifc-lite/mutations
|
|
2
2
|
|
|
3
|
-
Property editing and mutation tracking for IFClite. Edit IFC properties in-place
|
|
3
|
+
Property editing and mutation tracking for IFClite. Edit IFC properties, quantities, and attributes in-place via an overlay pattern — original data stays read-only, changes export back to STEP. Supports undo / redo, change-set sharing, bulk updates, and CSV import.
|
|
4
4
|
|
|
5
5
|
## Installation
|
|
6
6
|
|
|
@@ -8,19 +8,151 @@ Property editing and mutation tracking for IFClite. Edit IFC properties in-place
|
|
|
8
8
|
npm install @ifc-lite/mutations
|
|
9
9
|
```
|
|
10
10
|
|
|
11
|
-
##
|
|
11
|
+
## Edit a property
|
|
12
|
+
|
|
13
|
+
### Property edits
|
|
12
14
|
|
|
13
15
|
```typescript
|
|
14
16
|
import { MutablePropertyView } from '@ifc-lite/mutations';
|
|
17
|
+
import { PropertyValueType } from '@ifc-lite/data';
|
|
18
|
+
|
|
19
|
+
const view = new MutablePropertyView(store.properties, 'arch-model');
|
|
20
|
+
|
|
21
|
+
const mutation = view.setProperty(
|
|
22
|
+
wallExpressId,
|
|
23
|
+
'Pset_WallCommon',
|
|
24
|
+
'FireRating',
|
|
25
|
+
'REI 120',
|
|
26
|
+
PropertyValueType.Label,
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
console.log(`${mutation.oldValue} → ${mutation.newValue}`);
|
|
30
|
+
|
|
31
|
+
// Reads return the new value transparently
|
|
32
|
+
view.getPropertyValue(wallExpressId, 'Pset_WallCommon', 'FireRating'); // 'REI 120'
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### Store-level edits
|
|
15
36
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
37
|
+
For raw STEP edits — adding entities, deleting them, overriding positional
|
|
38
|
+
arguments on entities without symbolic attribute names — pair the view with
|
|
39
|
+
a `StoreEditor`:
|
|
19
40
|
|
|
20
|
-
|
|
41
|
+
```typescript
|
|
42
|
+
import { MutablePropertyView, StoreEditor } from '@ifc-lite/mutations';
|
|
43
|
+
|
|
44
|
+
const view = new MutablePropertyView(propertyTable, modelId);
|
|
45
|
+
const editor = new StoreEditor(dataStore, view);
|
|
46
|
+
|
|
47
|
+
// Add a fresh entity (e.g. an IfcRectangleProfileDef)
|
|
48
|
+
const profile = editor.addEntity('IfcRectangleProfileDef', [
|
|
49
|
+
'.AREA.', null, '#34', 0.6, 0.4,
|
|
50
|
+
]);
|
|
51
|
+
|
|
52
|
+
// Override a single positional STEP arg by index (zero-based)
|
|
53
|
+
editor.setPositionalAttribute(profile.expressId, 3, 0.7); // XDim → 0.7
|
|
54
|
+
|
|
55
|
+
// Tombstone an entity
|
|
56
|
+
editor.removeEntity(unwantedExpressId);
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Edits accumulate in the same overlay used by `setProperty` / `setAttribute`
|
|
60
|
+
and materialise the next time you call
|
|
61
|
+
`StepExporter.export({ applyMutations: true })`.
|
|
62
|
+
|
|
63
|
+
## Mutation history (for undo / export)
|
|
64
|
+
|
|
65
|
+
```typescript
|
|
21
66
|
const mutations = view.getMutations();
|
|
67
|
+
// [{ id, type: 'UPDATE_PROPERTY', entityId, psetName, propName, oldValue, newValue, ... }]
|
|
68
|
+
|
|
69
|
+
console.log(view.hasChanges(wallExpressId)); // true
|
|
70
|
+
console.log(view.getModifiedEntityCount()); // 1
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Reset back to the source data:
|
|
74
|
+
|
|
75
|
+
```typescript
|
|
76
|
+
view.clear();
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## Bulk updates
|
|
80
|
+
|
|
81
|
+
```typescript
|
|
82
|
+
import { BulkQueryEngine } from '@ifc-lite/mutations';
|
|
83
|
+
import { PropertyValueType } from '@ifc-lite/data';
|
|
84
|
+
|
|
85
|
+
const engine = new BulkQueryEngine(store.entities, view);
|
|
86
|
+
|
|
87
|
+
const result = engine.execute({
|
|
88
|
+
select: {
|
|
89
|
+
entityTypes: [/* IfcWall enum value */],
|
|
90
|
+
propertyFilters: [{
|
|
91
|
+
psetName: 'Pset_WallCommon',
|
|
92
|
+
propName: 'IsExternal',
|
|
93
|
+
operator: '=',
|
|
94
|
+
value: true,
|
|
95
|
+
}],
|
|
96
|
+
},
|
|
97
|
+
action: {
|
|
98
|
+
type: 'SET_PROPERTY',
|
|
99
|
+
psetName: 'Pset_WallCommon',
|
|
100
|
+
propName: 'ThermalTransmittance',
|
|
101
|
+
value: 0.18,
|
|
102
|
+
valueType: PropertyValueType.Real,
|
|
103
|
+
},
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
console.log(`Updated ${result.affectedEntityCount} walls`);
|
|
22
107
|
```
|
|
23
108
|
|
|
109
|
+
Preview without applying:
|
|
110
|
+
|
|
111
|
+
```typescript
|
|
112
|
+
const preview = engine.preview(query);
|
|
113
|
+
console.log(`Would update ${preview.matchedCount} entities`);
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## CSV import
|
|
117
|
+
|
|
118
|
+
Map a spreadsheet column to a pset/property in one call:
|
|
119
|
+
|
|
120
|
+
```typescript
|
|
121
|
+
import { CsvConnector } from '@ifc-lite/mutations';
|
|
122
|
+
import { PropertyValueType } from '@ifc-lite/data';
|
|
123
|
+
|
|
124
|
+
const connector = new CsvConnector(store.entities, view);
|
|
125
|
+
|
|
126
|
+
const stats = connector.import(csvText, {
|
|
127
|
+
matchStrategy: { type: 'globalId', column: 'GlobalId' },
|
|
128
|
+
propertyMappings: [
|
|
129
|
+
{ sourceColumn: 'Fire Rating', targetPset: 'Pset_WallCommon', targetProperty: 'FireRating', valueType: PropertyValueType.String },
|
|
130
|
+
{ sourceColumn: 'U-Value', targetPset: 'Pset_WallCommon', targetProperty: 'ThermalTransmittance', valueType: PropertyValueType.Real },
|
|
131
|
+
],
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
console.log(`Matched ${stats.matchedRows} / ${stats.totalRows} rows, applied ${stats.mutationsCreated} mutations`);
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
## Change sets — group + share
|
|
138
|
+
|
|
139
|
+
```typescript
|
|
140
|
+
import { ChangeSetManager } from '@ifc-lite/mutations';
|
|
141
|
+
|
|
142
|
+
const manager = new ChangeSetManager();
|
|
143
|
+
const changeSet = manager.createChangeSet('Fire safety pass — round 2');
|
|
144
|
+
|
|
145
|
+
manager.addMutation(mutation1);
|
|
146
|
+
manager.addMutation(mutation2);
|
|
147
|
+
|
|
148
|
+
const json = manager.exportChangeSet(changeSet.id);
|
|
149
|
+
// → ship to a teammate or persist to disk
|
|
150
|
+
|
|
151
|
+
const restored = manager.importChangeSet(json);
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
Pair this with `exportToStep(store, { applyMutations: true })` from `@ifc-lite/export` to write a real `.ifc` file with the changes baked in.
|
|
155
|
+
|
|
24
156
|
## Features
|
|
25
157
|
|
|
26
158
|
- Mutation overlay on read-only IFC data
|
|
@@ -28,11 +160,13 @@ const mutations = view.getMutations();
|
|
|
28
160
|
- Change sets for grouping related mutations
|
|
29
161
|
- Bulk query engine for updating many entities
|
|
30
162
|
- CSV import for spreadsheet-based updates
|
|
163
|
+
- **Store-level edits**: `StoreEditor` for `addEntity` / `removeEntity` /
|
|
164
|
+
`setPositionalAttribute` over a parsed `IfcDataStore`
|
|
31
165
|
- Export modified data
|
|
32
166
|
|
|
33
167
|
## API
|
|
34
168
|
|
|
35
|
-
See the [Property Editing Guide](
|
|
169
|
+
See the [Property Editing Guide](https://ltplus-ag.github.io/ifc-lite/guide/mutations/) and [API Reference](https://ltplus-ag.github.io/ifc-lite/api/typescript/#ifc-litemutations).
|
|
36
170
|
|
|
37
171
|
## License
|
|
38
172
|
|
package/dist/index.d.ts
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export * from './types.js';
|
|
5
5
|
export { MutablePropertyView, type PropertyExtractor, type QuantityExtractor } from './mutable-property-view.js';
|
|
6
|
+
export { StoreEditor, OVERLAY_BYTE_OFFSET, setEntityTypeNormalizer, type EntityTypeNormalizer, } from './store-editor.js';
|
|
6
7
|
export { ChangeSetManager } from './change-set.js';
|
|
7
8
|
export { BulkQueryEngine, type SelectionCriteria, type BulkAction, type BulkQuery, type BulkQueryPreview, type BulkQueryResult, type PropertyFilter, type FilterOperator, } from './bulk-query-engine.js';
|
|
8
9
|
export { CsvConnector, type CsvRow, type MatchStrategy, type PropertyMapping, type DataMapping, type MatchResult, type ImportStats, type ImportProgress, type CsvParseOptions, } from './csv-connector.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,mBAAmB,EAAE,KAAK,iBAAiB,EAAE,KAAK,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AACjH,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EACL,eAAe,EACf,KAAK,iBAAiB,EACtB,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,cAAc,GACpB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,YAAY,EACZ,KAAK,MAAM,EACX,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,eAAe,GACrB,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,mBAAmB,EAAE,KAAK,iBAAiB,EAAE,KAAK,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AACjH,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,uBAAuB,EACvB,KAAK,oBAAoB,GAC1B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EACL,eAAe,EACf,KAAK,iBAAiB,EACtB,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,cAAc,GACpB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,YAAY,EACZ,KAAK,MAAM,EACX,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,eAAe,GACrB,MAAM,oBAAoB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
export * from './types.js';
|
|
8
8
|
export { MutablePropertyView } from './mutable-property-view.js';
|
|
9
|
+
export { StoreEditor, OVERLAY_BYTE_OFFSET, setEntityTypeNormalizer, } from './store-editor.js';
|
|
9
10
|
export { ChangeSetManager } from './change-set.js';
|
|
10
11
|
export { BulkQueryEngine, } from './bulk-query-engine.js';
|
|
11
12
|
export { CsvConnector, } from './csv-connector.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;GAEG;AAEH,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,mBAAmB,EAAkD,MAAM,4BAA4B,CAAC;AACjH,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EACL,eAAe,GAQhB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,YAAY,GASb,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;GAEG;AAEH,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,mBAAmB,EAAkD,MAAM,4BAA4B,CAAC;AACjH,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,uBAAuB,GAExB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EACL,eAAe,GAQhB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,YAAY,GASb,MAAM,oBAAoB,CAAC"}
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import type { PropertyTable, PropertySet, QuantitySet } from '@ifc-lite/data';
|
|
11
11
|
import { PropertyValueType, QuantityType } from '@ifc-lite/data';
|
|
12
|
-
import type { PropertyValue, Mutation } from './types.js';
|
|
12
|
+
import type { IfcAttributeValue, PropertyValue, Mutation, NewEntity } from './types.js';
|
|
13
13
|
/**
|
|
14
14
|
* Function type for on-demand property extraction
|
|
15
15
|
* Allows globalId to be optional to match extractPropertiesOnDemand return type
|
|
@@ -33,14 +33,57 @@ export declare class MutablePropertyView {
|
|
|
33
33
|
private quantityExtractor;
|
|
34
34
|
private propertyMutations;
|
|
35
35
|
private quantityMutations;
|
|
36
|
+
/**
|
|
37
|
+
* Secondary indices: entityId → mutation keys for that entity.
|
|
38
|
+
*
|
|
39
|
+
* `getForEntity` previously iterated the entire `propertyMutations` /
|
|
40
|
+
* `quantityMutations` map per pset to find newly-added properties — O(M·P)
|
|
41
|
+
* per call. These indices keep that step O(M_entity) instead.
|
|
42
|
+
*/
|
|
43
|
+
private propertyKeysByEntity;
|
|
44
|
+
private quantityKeysByEntity;
|
|
36
45
|
private deletedPsets;
|
|
37
46
|
private deletedQsets;
|
|
38
47
|
private newPsets;
|
|
39
48
|
private newQsets;
|
|
40
49
|
private attributeMutations;
|
|
50
|
+
private positionalAttrMutations;
|
|
51
|
+
private newEntities;
|
|
52
|
+
private tombstones;
|
|
53
|
+
/**
|
|
54
|
+
* Overlay-entity → source-entity aliases for property/quantity reads.
|
|
55
|
+
*
|
|
56
|
+
* When the viewer duplicates an existing entity, the new entity has
|
|
57
|
+
* no row in the parsed property table — `getBasePropertiesForEntity`
|
|
58
|
+
* would return `[]` and the property panel would show "No property
|
|
59
|
+
* sets". Aliasing redirects the BASE read to the source entity so
|
|
60
|
+
* the duplicate inherits its psets / qsets visually, while overlay
|
|
61
|
+
* mutations (overrides, creates, deletes) stay scoped to the
|
|
62
|
+
* overlay-entity's own id — so editing a property on the duplicate
|
|
63
|
+
* doesn't bleed into the source.
|
|
64
|
+
*
|
|
65
|
+
* Aliases follow at most one hop (no chains). They never affect
|
|
66
|
+
* STEP export — the export overlay emits the duplicate exactly as
|
|
67
|
+
* the StoreEditor recorded it, with whatever new IfcRel*ByProperties
|
|
68
|
+
* the caller chose to add.
|
|
69
|
+
*/
|
|
70
|
+
private entityAliases;
|
|
71
|
+
private nextAllocatedId;
|
|
41
72
|
private mutationHistory;
|
|
42
73
|
private modelId;
|
|
43
74
|
constructor(baseTable: PropertyTable | null, modelId: string);
|
|
75
|
+
/**
|
|
76
|
+
* Seed the express-ID allocator. Should be called once after parsing with
|
|
77
|
+
* the highest existing expressId in the store; subsequent `createEntity`
|
|
78
|
+
* calls allocate IDs strictly above this watermark.
|
|
79
|
+
*/
|
|
80
|
+
setExpressIdWatermark(maxExistingId: number): void;
|
|
81
|
+
/** The next expressId that `createEntity` would allocate. */
|
|
82
|
+
peekNextExpressId(): number;
|
|
83
|
+
private setPropertyMutation;
|
|
84
|
+
private deletePropertyMutation;
|
|
85
|
+
private setQuantityMutation;
|
|
86
|
+
private deleteQuantityMutation;
|
|
44
87
|
/**
|
|
45
88
|
* Set an on-demand property extractor function
|
|
46
89
|
* This is used when properties are extracted lazily from the source buffer
|
|
@@ -52,7 +95,11 @@ export declare class MutablePropertyView {
|
|
|
52
95
|
setQuantityExtractor(extractor: QuantityExtractor): void;
|
|
53
96
|
/**
|
|
54
97
|
* Get base properties for an entity (before mutations)
|
|
55
|
-
* Uses on-demand extraction if available, otherwise falls back to base table
|
|
98
|
+
* Uses on-demand extraction if available, otherwise falls back to base table.
|
|
99
|
+
*
|
|
100
|
+
* Follows the entityAliases map for overlay duplicates so a fresh
|
|
101
|
+
* duplicate inherits its source's psets without paying the cost of
|
|
102
|
+
* eagerly cloning them into the overlay.
|
|
56
103
|
*/
|
|
57
104
|
private getBasePropertiesForEntity;
|
|
58
105
|
/**
|
|
@@ -89,6 +136,9 @@ export declare class MutablePropertyView {
|
|
|
89
136
|
deletePropertySet(entityId: number, psetName: string): Mutation;
|
|
90
137
|
/**
|
|
91
138
|
* Get base quantities for an entity (before mutations)
|
|
139
|
+
*
|
|
140
|
+
* Follows the entityAliases map for overlay duplicates so a fresh
|
|
141
|
+
* duplicate inherits its source's qsets.
|
|
92
142
|
*/
|
|
93
143
|
private getBaseQuantitiesForEntity;
|
|
94
144
|
/**
|
|
@@ -112,6 +162,77 @@ export declare class MutablePropertyView {
|
|
|
112
162
|
* Set an entity attribute value (Name, Description, ObjectType, Tag, etc.)
|
|
113
163
|
*/
|
|
114
164
|
setAttribute(entityId: number, attrName: string, value: string, oldValue?: string, skipHistory?: boolean): Mutation;
|
|
165
|
+
/**
|
|
166
|
+
* Set a positional STEP argument on an entity by zero-based index.
|
|
167
|
+
*
|
|
168
|
+
* This is the only path for editing non-IfcRoot entities (e.g. profile
|
|
169
|
+
* dimensions on `IfcRectangleProfileDef`) where attributes have no symbolic
|
|
170
|
+
* names. Values follow the same conventions as `NewEntity.attributes`:
|
|
171
|
+
* numbers become `#expressId` references when paired with a reference slot,
|
|
172
|
+
* otherwise REAL/INTEGER literals; strings become quoted STEP strings;
|
|
173
|
+
* `null` becomes `$`.
|
|
174
|
+
*/
|
|
175
|
+
setPositionalAttribute(entityId: number, index: number, value: IfcAttributeValue, skipHistory?: boolean): Mutation;
|
|
176
|
+
/** Get all positional argument overrides for an entity, keyed by index. */
|
|
177
|
+
getPositionalMutationsForEntity(entityId: number): Map<number, IfcAttributeValue> | null;
|
|
178
|
+
/**
|
|
179
|
+
* Drop a single positional override. Used by undo to roll a
|
|
180
|
+
* setPositionalAttribute back to "no override" when there was no prior
|
|
181
|
+
* value. Mirrors `removeAttributeMutation` for symmetric naming.
|
|
182
|
+
*/
|
|
183
|
+
removePositionalMutation(entityId: number, index: number): void;
|
|
184
|
+
/**
|
|
185
|
+
* Create a new entity in the overlay. Returns the freshly-allocated
|
|
186
|
+
* expressId. Callers must ensure `setExpressIdWatermark` has been seeded
|
|
187
|
+
* from the underlying store before calling this for the first time.
|
|
188
|
+
*/
|
|
189
|
+
createEntity(type: string, attributes: IfcAttributeValue[]): NewEntity;
|
|
190
|
+
/**
|
|
191
|
+
* Mark an entity for deletion. Existing entities are tombstoned; new
|
|
192
|
+
* entities (from `createEntity`) are simply forgotten. Returns false if
|
|
193
|
+
* the id is unknown to this view.
|
|
194
|
+
*/
|
|
195
|
+
deleteEntity(expressId: number): boolean;
|
|
196
|
+
/** Returns all overlay-created entities in insertion order. */
|
|
197
|
+
getNewEntities(): NewEntity[];
|
|
198
|
+
/** Look up a single overlay-created entity. */
|
|
199
|
+
getNewEntity(expressId: number): NewEntity | null;
|
|
200
|
+
isDeleted(expressId: number): boolean;
|
|
201
|
+
/**
|
|
202
|
+
* Reverse `deleteEntity` for an existing-entity tombstone. Returns true if
|
|
203
|
+
* a tombstone was removed; false if the id was not tombstoned. Used by
|
|
204
|
+
* undo of a DELETE_ENTITY mutation on a source-buffer entity. Overlay-only
|
|
205
|
+
* entities are restored via a separate path (`restoreNewEntity`).
|
|
206
|
+
*/
|
|
207
|
+
restoreFromTombstone(expressId: number): boolean;
|
|
208
|
+
/**
|
|
209
|
+
* Alias an overlay-only entity to a source entity for property /
|
|
210
|
+
* quantity reads. Used by the duplicate flow so a fresh duplicate
|
|
211
|
+
* inherits its source's psets / qsets in the property panel without
|
|
212
|
+
* eagerly cloning them. Edits on the duplicate stay scoped to the
|
|
213
|
+
* duplicate's own id (override slots are keyed by entity id, not
|
|
214
|
+
* by base id).
|
|
215
|
+
*
|
|
216
|
+
* Pass `null` as the source to clear an existing alias.
|
|
217
|
+
*/
|
|
218
|
+
setEntityAlias(overlayId: number, sourceId: number | null): void;
|
|
219
|
+
/** Read the alias for a given overlay id, or null if none. */
|
|
220
|
+
getEntityAlias(overlayId: number): number | null;
|
|
221
|
+
/**
|
|
222
|
+
* Resolve to the base id used for property/quantity reads. Returns
|
|
223
|
+
* the input id when no alias is set. Aliases follow at most one
|
|
224
|
+
* hop — chained duplicates resolve to their immediate source, not
|
|
225
|
+
* the original.
|
|
226
|
+
*/
|
|
227
|
+
resolveBaseEntityId(entityId: number): number;
|
|
228
|
+
/**
|
|
229
|
+
* Re-add an overlay-only entity to `newEntities`. Pairs with `deleteEntity`
|
|
230
|
+
* to support undo of a freshly-created-and-then-deleted entity. The caller
|
|
231
|
+
* is responsible for stashing the `NewEntity` record between delete and
|
|
232
|
+
* restore (the slice's undo stack does this).
|
|
233
|
+
*/
|
|
234
|
+
restoreNewEntity(entity: NewEntity): void;
|
|
235
|
+
getTombstones(): Set<number>;
|
|
115
236
|
/**
|
|
116
237
|
* Get mutated attributes for an entity.
|
|
117
238
|
* Returns only attributes that have been added/modified via mutations.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mutable-property-view.d.ts","sourceRoot":"","sources":["../src/mutable-property-view.ts"],"names":[],"mappings":"AAIA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAY,WAAW,EAAY,MAAM,gBAAgB,CAAC;AAClG,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,KAAK,EAAE,aAAa,EAAyD,QAAQ,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"mutable-property-view.d.ts","sourceRoot":"","sources":["../src/mutable-property-view.ts"],"names":[],"mappings":"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"}
|