@ifc-lite/sdk 9.5.0 → 9.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +28 -16
- package/dist/cost-reference-scan.d.ts.map +1 -1
- package/dist/cost-reference-scan.js +10 -9
- package/dist/cost-reference-scan.js.map +1 -1
- package/dist/headless/align-backend.d.ts +5 -0
- package/dist/headless/align-backend.d.ts.map +1 -0
- package/dist/headless/align-backend.js +15 -0
- package/dist/headless/align-backend.js.map +1 -0
- package/dist/headless/authored-attribute-value.d.ts +3 -0
- package/dist/headless/authored-attribute-value.d.ts.map +1 -0
- package/dist/headless/authored-attribute-value.js +34 -0
- package/dist/headless/authored-attribute-value.js.map +1 -0
- package/dist/headless/backend-query-relationships.d.ts +5 -0
- package/dist/headless/backend-query-relationships.d.ts.map +1 -0
- package/dist/headless/backend-query-relationships.js +55 -0
- package/dist/headless/backend-query-relationships.js.map +1 -0
- package/dist/headless/backend-query.d.ts +20 -0
- package/dist/headless/backend-query.d.ts.map +1 -0
- package/dist/headless/backend-query.js +359 -0
- package/dist/headless/backend-query.js.map +1 -0
- package/dist/headless/backend.d.ts +80 -0
- package/dist/headless/backend.d.ts.map +1 -0
- package/dist/headless/backend.js +317 -0
- package/dist/headless/backend.js.map +1 -0
- package/dist/headless/capabilities.d.ts +22 -0
- package/dist/headless/capabilities.d.ts.map +1 -0
- package/dist/headless/capabilities.js +52 -0
- package/dist/headless/capabilities.js.map +1 -0
- package/dist/headless/effective-entity-membership.d.ts +8 -0
- package/dist/headless/effective-entity-membership.d.ts.map +1 -0
- package/dist/headless/effective-entity-membership.js +23 -0
- package/dist/headless/effective-entity-membership.js.map +1 -0
- package/dist/headless/headless-backend-cost-store.d.ts +14 -0
- package/dist/headless/headless-backend-cost-store.d.ts.map +1 -0
- package/dist/headless/headless-backend-cost-store.js +18 -0
- package/dist/headless/headless-backend-cost-store.js.map +1 -0
- package/dist/headless/headless-backend-modelling.d.ts +50 -0
- package/dist/headless/headless-backend-modelling.d.ts.map +1 -0
- package/dist/headless/headless-backend-modelling.js +128 -0
- package/dist/headless/headless-backend-modelling.js.map +1 -0
- package/dist/headless/headless-backend-room.d.ts +9 -0
- package/dist/headless/headless-backend-room.d.ts.map +1 -0
- package/dist/headless/headless-backend-room.js +22 -0
- package/dist/headless/headless-backend-room.js.map +1 -0
- package/dist/headless/headless-backend-store-stubs.d.ts +13 -0
- package/dist/headless/headless-backend-store-stubs.d.ts.map +1 -0
- package/dist/headless/headless-backend-store-stubs.js +9 -0
- package/dist/headless/headless-backend-store-stubs.js.map +1 -0
- package/dist/headless/headless-backend-store.d.ts +8 -0
- package/dist/headless/headless-backend-store.d.ts.map +1 -0
- package/dist/headless/headless-backend-store.js +42 -0
- package/dist/headless/headless-backend-store.js.map +1 -0
- package/dist/headless/headless-backend-structural-store.d.ts +21 -0
- package/dist/headless/headless-backend-structural-store.d.ts.map +1 -0
- package/dist/headless/headless-backend-structural-store.js +18 -0
- package/dist/headless/headless-backend-structural-store.js.map +1 -0
- package/dist/headless/headless-backend-structural.d.ts +4 -0
- package/dist/headless/headless-backend-structural.d.ts.map +1 -0
- package/dist/headless/headless-backend-structural.js +24 -0
- package/dist/headless/headless-backend-structural.js.map +1 -0
- package/dist/headless/mutation-base.d.ts +5 -0
- package/dist/headless/mutation-base.d.ts.map +1 -0
- package/dist/headless/mutation-base.js +31 -0
- package/dist/headless/mutation-base.js.map +1 -0
- package/dist/headless/options.d.ts +11 -0
- package/dist/headless/options.d.ts.map +1 -0
- package/dist/headless/options.js +13 -0
- package/dist/headless/options.js.map +1 -0
- package/dist/headless/overlay.d.ts +170 -0
- package/dist/headless/overlay.d.ts.map +1 -0
- package/dist/headless/overlay.js +285 -0
- package/dist/headless/overlay.js.map +1 -0
- package/dist/headless/schema-tables.d.ts +42 -0
- package/dist/headless/schema-tables.d.ts.map +1 -0
- package/dist/headless/schema-tables.js +77 -0
- package/dist/headless/schema-tables.js.map +1 -0
- package/dist/headless/session.d.ts +23 -0
- package/dist/headless/session.d.ts.map +1 -0
- package/dist/headless/session.js +125 -0
- package/dist/headless/session.js.map +1 -0
- package/dist/headless.d.ts +13 -0
- package/dist/headless.d.ts.map +1 -0
- package/dist/headless.js +13 -0
- package/dist/headless.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/namespaces/bcf-viewpoint.d.ts +19 -0
- package/dist/namespaces/bcf-viewpoint.d.ts.map +1 -1
- package/dist/namespaces/bcf-viewpoint.js.map +1 -1
- package/dist/namespaces/bcf.d.ts.map +1 -1
- package/dist/namespaces/bcf.js +17 -0
- package/dist/namespaces/bcf.js.map +1 -1
- package/dist/namespaces/viewer.d.ts +20 -1
- package/dist/namespaces/viewer.d.ts.map +1 -1
- package/dist/namespaces/viewer.js +40 -0
- package/dist/namespaces/viewer.js.map +1 -1
- package/dist/section-plane.d.ts +12 -0
- package/dist/section-plane.d.ts.map +1 -0
- package/dist/section-plane.js +5 -0
- package/dist/section-plane.js.map +1 -0
- package/dist/types.d.ts +6 -6
- package/dist/types.d.ts.map +1 -1
- package/package.json +20 -15
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
import { createCostBackend, createEffectiveEntityCheck, createHeadlessMutateAdapter } from '../index.js';
|
|
5
|
+
import { applyStylesInStore } from '@ifc-lite/create';
|
|
6
|
+
import { describeHeadlessOperation } from './capabilities.js';
|
|
7
|
+
import { createHeadlessStoreAdapter } from './headless-backend-store.js';
|
|
8
|
+
import { configureSourceMutationView } from './mutation-base.js';
|
|
9
|
+
import { MutablePropertyView, StoreEditor, storeHasSourceEntity } from '@ifc-lite/mutations';
|
|
10
|
+
import { extractScheduleOnDemand, } from '@ifc-lite/parser';
|
|
11
|
+
import { escapeCsvCell, exportToStep, StepExporter } from '@ifc-lite/export';
|
|
12
|
+
import { findPropertyInSets, findQuantityInSets } from '@ifc-lite/query';
|
|
13
|
+
import { createStructuralAdapter } from './headless-backend-structural.js';
|
|
14
|
+
import { createQueryAdapter } from './backend-query.js';
|
|
15
|
+
import { overlayFromView } from './overlay.js';
|
|
16
|
+
export class HeadlessBackend {
|
|
17
|
+
model;
|
|
18
|
+
query;
|
|
19
|
+
selection;
|
|
20
|
+
/**
|
|
21
|
+
* Mutable so the MCP server can swap in streaming adapters when the
|
|
22
|
+
* viewer subprocess starts, then revert when it closes. Marked
|
|
23
|
+
* `readonly` on the BimBackend interface but the underlying instance
|
|
24
|
+
* is ours to manage.
|
|
25
|
+
*/
|
|
26
|
+
visibility;
|
|
27
|
+
viewer;
|
|
28
|
+
mutate;
|
|
29
|
+
style;
|
|
30
|
+
store;
|
|
31
|
+
spatial;
|
|
32
|
+
export;
|
|
33
|
+
lens;
|
|
34
|
+
files;
|
|
35
|
+
schedule;
|
|
36
|
+
structural;
|
|
37
|
+
cost;
|
|
38
|
+
dataStore;
|
|
39
|
+
modelName;
|
|
40
|
+
modelId;
|
|
41
|
+
/** Every model id this backend answers for, so the schedule assert, the
|
|
42
|
+
* `bim.mutate.*` guard and `bim.store.addEntity` cannot differ (#3764). The
|
|
43
|
+
* legacy-host aliases are accepted only when explicitly supplied. */
|
|
44
|
+
acceptedModelIds;
|
|
45
|
+
/** The reference check `bim.mutate.*` is gated on (`null` when writable,
|
|
46
|
+
* else the reason), exposed because the mutation TOOLS write into
|
|
47
|
+
* `getMutationView()` directly and need the same gate (#3764). */
|
|
48
|
+
checkEntityRef;
|
|
49
|
+
mutationView = null;
|
|
50
|
+
storeEditor = null;
|
|
51
|
+
disposeRoomCommands;
|
|
52
|
+
viewerAttached = false;
|
|
53
|
+
options;
|
|
54
|
+
peerScopes = () => [];
|
|
55
|
+
capability(operation) { return describeHeadlessOperation(this, operation, this.options, this.viewerAttached); }
|
|
56
|
+
setPeerScopes(provider) { this.peerScopes = provider; }
|
|
57
|
+
dispose() { this.disposeRoomCommands(); }
|
|
58
|
+
constructor(store, modelName, modelId, options = {}, modelAliases = []) {
|
|
59
|
+
this.options = { ...options };
|
|
60
|
+
this.dataStore = store;
|
|
61
|
+
this.modelName = modelName;
|
|
62
|
+
this.modelId = modelId;
|
|
63
|
+
this.acceptedModelIds = [...new Set([modelId, ...modelAliases])];
|
|
64
|
+
this.model = this.createModelAdapter();
|
|
65
|
+
// The read surface folds this session's queued mutations in (#2004). The
|
|
66
|
+
// overlay is passed as a getter because it is built lazily on the first
|
|
67
|
+
// mutation, so a session that is only ever read stays on the store-only
|
|
68
|
+
// path and pays nothing.
|
|
69
|
+
this.query = createQueryAdapter(store, modelId, () => this.pendingOverlay(), () => this.getMutationView());
|
|
70
|
+
this.selection = this.createSelectionAdapter();
|
|
71
|
+
this.visibility = { hide() { }, show() { }, isolate() { }, reset() { } };
|
|
72
|
+
this.viewer = {
|
|
73
|
+
colorize() { }, colorizeAll() { }, resetColors() { },
|
|
74
|
+
flyTo() { }, setSection() { }, getSection() { return null; },
|
|
75
|
+
setCamera() { }, getCamera() { return { mode: 'perspective' }; },
|
|
76
|
+
};
|
|
77
|
+
this.checkEntityRef = createEffectiveEntityCheck({
|
|
78
|
+
acceptedModelIds: this.acceptedModelIds,
|
|
79
|
+
// Both halves of the source index (byId + deferred property atoms, #5222).
|
|
80
|
+
hasSourceEntity: id => storeHasSourceEntity(this.dataStore, id),
|
|
81
|
+
overlay: () => this.mutationView,
|
|
82
|
+
});
|
|
83
|
+
this.mutate = createHeadlessMutateAdapter(() => this.getOrCreateMutationView(), this.checkEntityRef);
|
|
84
|
+
// Same arrangement as the CLI backend: the work happens in @ifc-lite/create
|
|
85
|
+
// against the shared StoreEditor, so the new entities land in the overlay
|
|
86
|
+
// this backend's export adapter already reads.
|
|
87
|
+
this.style = {
|
|
88
|
+
applyColors: (batches, options) => applyStylesInStore(this.getOrCreateStoreEditor(), this.dataStore, batches.map(batch => ({
|
|
89
|
+
products: batch.refs.map(r => r.expressId),
|
|
90
|
+
color: batch.color,
|
|
91
|
+
name: batch.name,
|
|
92
|
+
})), options),
|
|
93
|
+
};
|
|
94
|
+
const storeAdapter = createHeadlessStoreAdapter(store, modelId, () => this.getOrCreateStoreEditor(), id => this.assertKnownModelId(id), () => this.peerScopes(), options);
|
|
95
|
+
this.store = storeAdapter;
|
|
96
|
+
this.disposeRoomCommands = storeAdapter.disposeRooms;
|
|
97
|
+
this.spatial = { queryBounds() { return []; }, raycast() { return []; }, queryFrustum() { return []; } };
|
|
98
|
+
this.export = this.createExportAdapter();
|
|
99
|
+
this.lens = { presets() { return []; }, create() { return null; }, activate() { }, deactivate() { }, getActive() { return null; } };
|
|
100
|
+
this.files = { list() { return []; }, text() { return null; }, csv() { return null; }, csvColumns() { return []; } };
|
|
101
|
+
this.schedule = this.createScheduleAdapter();
|
|
102
|
+
this.structural = createStructuralAdapter(this.dataStore, modelId => this.assertKnownModelId(modelId));
|
|
103
|
+
this.cost = createCostBackend(modelId => {
|
|
104
|
+
if (modelId)
|
|
105
|
+
this.assertKnownModelId(modelId);
|
|
106
|
+
return { modelId: this.modelId, store: this.dataStore, mutationView: this.mutationView ?? undefined };
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
subscribe(_event, _handler) {
|
|
110
|
+
return () => { };
|
|
111
|
+
}
|
|
112
|
+
createModelAdapter() {
|
|
113
|
+
const store = this.dataStore;
|
|
114
|
+
const name = this.modelName;
|
|
115
|
+
const id = this.modelId;
|
|
116
|
+
return {
|
|
117
|
+
list() {
|
|
118
|
+
return [{
|
|
119
|
+
id,
|
|
120
|
+
name,
|
|
121
|
+
schema: store.schemaVersion,
|
|
122
|
+
schemaVersion: store.schemaVersion,
|
|
123
|
+
entityCount: store.entityCount,
|
|
124
|
+
fileSize: store.fileSize,
|
|
125
|
+
loadedAt: Date.now(),
|
|
126
|
+
}];
|
|
127
|
+
},
|
|
128
|
+
activeId() { return id; },
|
|
129
|
+
loadIfc() { },
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
/** This session's queued edits, or null when it has none. */
|
|
133
|
+
pendingOverlay() {
|
|
134
|
+
return overlayFromView(this.mutationView, this.dataStore);
|
|
135
|
+
}
|
|
136
|
+
createSelectionAdapter() {
|
|
137
|
+
let selection = [];
|
|
138
|
+
return {
|
|
139
|
+
get() { return selection; },
|
|
140
|
+
set(refs) { selection = refs; },
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
getOrCreateStoreEditor() {
|
|
144
|
+
if (this.storeEditor)
|
|
145
|
+
return this.storeEditor;
|
|
146
|
+
this.mutationView = new MutablePropertyView(this.dataStore.properties || null, this.modelId);
|
|
147
|
+
// All source owners, including type definitions, contribute their full
|
|
148
|
+
// property and quantity sets before an edit rewrites them (#8056).
|
|
149
|
+
configureSourceMutationView(this.dataStore, this.mutationView);
|
|
150
|
+
this.storeEditor = new StoreEditor(this.dataStore, this.mutationView);
|
|
151
|
+
return this.storeEditor;
|
|
152
|
+
}
|
|
153
|
+
/** Expose the mutation view so tools can inspect pending mutations. */
|
|
154
|
+
getMutationView() {
|
|
155
|
+
return this.mutationView;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* The overlay every `bim.mutate.*` write goes through, created on first use
|
|
159
|
+
* so a read-only session still pays nothing. Built by `getOrCreateStoreEditor`
|
|
160
|
+
* to keep the extractor wiring in one place.
|
|
161
|
+
*/
|
|
162
|
+
/** The view `bim.mutate` writes through — public so `run_flow`'s `tables()` reads the same overlay. */
|
|
163
|
+
getOrCreateMutationView() {
|
|
164
|
+
this.getOrCreateStoreEditor();
|
|
165
|
+
// Non-null immediately after: the two fields are assigned together and
|
|
166
|
+
// never cleared.
|
|
167
|
+
return this.mutationView;
|
|
168
|
+
}
|
|
169
|
+
/** Force creation of the editor (used by mutation tools that always need it). */
|
|
170
|
+
ensureEditor() {
|
|
171
|
+
return this.getOrCreateStoreEditor();
|
|
172
|
+
}
|
|
173
|
+
/** Replace the viewer/visibility adapters at runtime (for ViewerManager). */
|
|
174
|
+
attachStreamingAdapters(viewer, visibility) {
|
|
175
|
+
this.viewerAttached = true;
|
|
176
|
+
this.viewer = viewer;
|
|
177
|
+
this.visibility = visibility;
|
|
178
|
+
}
|
|
179
|
+
/** Restore no-op viewer/visibility adapters (for ViewerManager close). */
|
|
180
|
+
detachStreamingAdapters() {
|
|
181
|
+
this.viewerAttached = false;
|
|
182
|
+
this.viewer = {
|
|
183
|
+
colorize() { }, colorizeAll() { }, resetColors() { },
|
|
184
|
+
flyTo() { }, setSection() { }, getSection() { return null; },
|
|
185
|
+
setCamera() { }, getCamera() { return { mode: 'perspective' }; },
|
|
186
|
+
};
|
|
187
|
+
this.visibility = { hide() { }, show() { }, isolate() { }, reset() { } };
|
|
188
|
+
}
|
|
189
|
+
/** Whether `modelId` names the one model this backend holds. */
|
|
190
|
+
acceptsModelId(modelId) {
|
|
191
|
+
return this.acceptedModelIds.includes(modelId);
|
|
192
|
+
}
|
|
193
|
+
/** Refuse an unknown model id loudly, at whichever surface was handed it. */
|
|
194
|
+
assertKnownModelId(modelId) {
|
|
195
|
+
if (this.acceptsModelId(modelId))
|
|
196
|
+
return;
|
|
197
|
+
throw new Error(`Unknown modelId '${modelId}': this backend answers for ${this.acceptedModelIds.map(id => `'${id}'`).join(' or ')}`);
|
|
198
|
+
}
|
|
199
|
+
createExportAdapter() {
|
|
200
|
+
const store = this.dataStore;
|
|
201
|
+
const queryAdapter = this.query;
|
|
202
|
+
/**
|
|
203
|
+
* RFC 4180 quoting + the CWE-1236 formula-injection guard, delegated to
|
|
204
|
+
* `@ifc-lite/export`'s single escaper. The copy that used to live here
|
|
205
|
+
* tested the trigger anchored at offset 0, so a BOM/ZWSP/LRM/NBSP/U+2028
|
|
206
|
+
* in front of `=` walked past it.
|
|
207
|
+
*/
|
|
208
|
+
const escapeCsv = (value, sep) => escapeCsvCell(value, { delimiter: sep });
|
|
209
|
+
const resolveColumn = (data, col, props, qsets) => {
|
|
210
|
+
if (col === 'Name' || col === 'name')
|
|
211
|
+
return data.name;
|
|
212
|
+
if (col === 'Type' || col === 'type')
|
|
213
|
+
return data.type;
|
|
214
|
+
if (col === 'GlobalId' || col === 'globalId')
|
|
215
|
+
return data.globalId;
|
|
216
|
+
if (col === 'Description' || col === 'description')
|
|
217
|
+
return data.description;
|
|
218
|
+
if (col === 'ObjectType' || col === 'objectType')
|
|
219
|
+
return data.objectType;
|
|
220
|
+
const dot = col.indexOf('.');
|
|
221
|
+
if (dot > 0) {
|
|
222
|
+
const setName = col.slice(0, dot);
|
|
223
|
+
const valueName = col.slice(dot + 1);
|
|
224
|
+
if (props) {
|
|
225
|
+
const prop = findPropertyInSets(props, setName, valueName);
|
|
226
|
+
if (prop?.value != null)
|
|
227
|
+
return String(prop.value);
|
|
228
|
+
}
|
|
229
|
+
if (qsets) {
|
|
230
|
+
const qty = findQuantityInSets(qsets, setName, valueName);
|
|
231
|
+
if (qty?.value != null)
|
|
232
|
+
return String(qty.value);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
return '';
|
|
236
|
+
};
|
|
237
|
+
return {
|
|
238
|
+
csv(refs, options) {
|
|
239
|
+
const entityRefs = refs;
|
|
240
|
+
const opts = options;
|
|
241
|
+
const sep = opts.separator ?? ',';
|
|
242
|
+
const hasDot = opts.columns.some((c) => c.indexOf('.') > 0);
|
|
243
|
+
const rows = [opts.columns];
|
|
244
|
+
for (const ref of entityRefs) {
|
|
245
|
+
const data = queryAdapter.entityData(ref);
|
|
246
|
+
if (!data)
|
|
247
|
+
continue;
|
|
248
|
+
const props = hasDot ? queryAdapter.properties(ref) : null;
|
|
249
|
+
const qsets = hasDot ? queryAdapter.quantities(ref) : null;
|
|
250
|
+
rows.push(opts.columns.map((c) => resolveColumn(data, c, props, qsets)));
|
|
251
|
+
}
|
|
252
|
+
return rows.map((r) => r.map((c) => escapeCsv(c, sep)).join(sep)).join('\n');
|
|
253
|
+
},
|
|
254
|
+
json(refs, columns) {
|
|
255
|
+
const entityRefs = refs;
|
|
256
|
+
const cols = columns;
|
|
257
|
+
const hasDot = cols.some((c) => c.indexOf('.') > 0);
|
|
258
|
+
const result = [];
|
|
259
|
+
for (const ref of entityRefs) {
|
|
260
|
+
const data = queryAdapter.entityData(ref);
|
|
261
|
+
if (!data)
|
|
262
|
+
continue;
|
|
263
|
+
const props = hasDot ? queryAdapter.properties(ref) : null;
|
|
264
|
+
const qsets = hasDot ? queryAdapter.quantities(ref) : null;
|
|
265
|
+
const row = {};
|
|
266
|
+
for (const col of cols) {
|
|
267
|
+
const v = resolveColumn(data, col, props, qsets);
|
|
268
|
+
row[col] = v || null;
|
|
269
|
+
}
|
|
270
|
+
result.push(row);
|
|
271
|
+
}
|
|
272
|
+
return result;
|
|
273
|
+
},
|
|
274
|
+
ifc: (refs, options) => {
|
|
275
|
+
const opts = (options ?? {});
|
|
276
|
+
const schema = opts.schema ?? store.schemaVersion ?? 'IFC4';
|
|
277
|
+
const exportOpts = { schema };
|
|
278
|
+
// `undefined` is the only "no isolation filter": an empty list is a filter
|
|
279
|
+
// that matched nothing, refused in `ExportNamespace.ifc` (#4738).
|
|
280
|
+
if (refs != null) {
|
|
281
|
+
const isolatedIds = new Set(refs.map((r) => r.expressId));
|
|
282
|
+
exportOpts.visibleOnly = true;
|
|
283
|
+
exportOpts.isolatedEntityIds = isolatedIds;
|
|
284
|
+
exportOpts.hiddenEntityIds = new Set();
|
|
285
|
+
}
|
|
286
|
+
if (this.mutationView) {
|
|
287
|
+
const exporter = new StepExporter(store, this.mutationView);
|
|
288
|
+
const result = exporter.export({ schema, ...exportOpts });
|
|
289
|
+
return new TextDecoder().decode(result.content);
|
|
290
|
+
}
|
|
291
|
+
return exportToStep(store, exportOpts);
|
|
292
|
+
},
|
|
293
|
+
download() { },
|
|
294
|
+
};
|
|
295
|
+
}
|
|
296
|
+
createScheduleAdapter() {
|
|
297
|
+
const store = this.dataStore;
|
|
298
|
+
let cached = null;
|
|
299
|
+
const assert = (modelId) => {
|
|
300
|
+
if (modelId)
|
|
301
|
+
this.assertKnownModelId(modelId);
|
|
302
|
+
};
|
|
303
|
+
const extract = (modelId) => {
|
|
304
|
+
assert(modelId);
|
|
305
|
+
if (!cached)
|
|
306
|
+
cached = extractScheduleOnDemand(store);
|
|
307
|
+
return cached;
|
|
308
|
+
};
|
|
309
|
+
return {
|
|
310
|
+
data: (m) => extract(m),
|
|
311
|
+
tasks: (m) => extract(m).tasks,
|
|
312
|
+
workSchedules: (m) => extract(m).workSchedules,
|
|
313
|
+
sequences: (m) => extract(m).sequences,
|
|
314
|
+
};
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
//# sourceMappingURL=backend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backend.js","sourceRoot":"","sources":["../../src/headless/backend.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { BimBackend } from '../types.js';
|
|
2
|
+
import type { HeadlessBackendOptions } from './options.js';
|
|
3
|
+
type Namespace = Exclude<keyof BimBackend, 'subscribe'>;
|
|
4
|
+
export type HeadlessOperation = 'subscribe' | {
|
|
5
|
+
[K in Namespace]-?: `${K}.${Extract<keyof NonNullable<BimBackend[K]>, string>}`;
|
|
6
|
+
}[Namespace];
|
|
7
|
+
export interface HeadlessCapability {
|
|
8
|
+
readonly operation: HeadlessOperation;
|
|
9
|
+
readonly supported: boolean;
|
|
10
|
+
readonly reason?: string;
|
|
11
|
+
}
|
|
12
|
+
export declare class UnsupportedOperationError extends Error {
|
|
13
|
+
readonly operation: HeadlessOperation;
|
|
14
|
+
readonly reason: string;
|
|
15
|
+
readonly code = "UNSUPPORTED_OPERATION";
|
|
16
|
+
constructor(operation: HeadlessOperation, reason: string, message?: string);
|
|
17
|
+
}
|
|
18
|
+
export declare function unsupportedOperation(operation: HeadlessOperation, message: string): (...args: unknown[]) => never;
|
|
19
|
+
/** Supported means implemented/configured, not that every input or runtime will succeed. */
|
|
20
|
+
export declare function describeHeadlessOperation(backend: BimBackend, operation: HeadlessOperation, options: HeadlessBackendOptions, viewerAttached: boolean): HeadlessCapability;
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=capabilities.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../src/headless/capabilities.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAE3D,KAAK,SAAS,GAAG,OAAO,CAAC,MAAM,UAAU,EAAE,WAAW,CAAC,CAAC;AACxD,MAAM,MAAM,iBAAiB,GAAG,WAAW,GAAG;KAC3C,CAAC,IAAI,SAAS,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE;CAChF,CAAC,SAAS,CAAC,CAAC;AACb,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC;IACtC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AACD,qBAAa,yBAA0B,SAAQ,KAAK;IAEtC,QAAQ,CAAC,SAAS,EAAE,iBAAiB;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM;IAD1E,QAAQ,CAAC,IAAI,2BAA2B;gBACnB,SAAS,EAAE,iBAAiB,EAAW,MAAM,EAAE,MAAM,EAAE,OAAO,SAA4B;CAIhH;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,KAAK,CAMjH;AAED,4FAA4F;AAC5F,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,iBAAiB,EACzF,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,OAAO,GAAG,kBAAkB,CAoB9E"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
export class UnsupportedOperationError extends Error {
|
|
5
|
+
operation;
|
|
6
|
+
reason;
|
|
7
|
+
code = 'UNSUPPORTED_OPERATION';
|
|
8
|
+
constructor(operation, reason, message = `${operation}: ${reason}`) {
|
|
9
|
+
super(message);
|
|
10
|
+
this.operation = operation;
|
|
11
|
+
this.reason = reason;
|
|
12
|
+
this.name = 'UnsupportedOperationError';
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
const refusals = new WeakMap();
|
|
16
|
+
export function unsupportedOperation(operation, message) {
|
|
17
|
+
const reason = 'This headless backend does not implement this authoring operation';
|
|
18
|
+
const capability = { operation, supported: false, reason };
|
|
19
|
+
const refuse = () => { throw new UnsupportedOperationError(operation, reason, message); };
|
|
20
|
+
refusals.set(refuse, capability);
|
|
21
|
+
return refuse;
|
|
22
|
+
}
|
|
23
|
+
/** Supported means implemented/configured, not that every input or runtime will succeed. */
|
|
24
|
+
export function describeHeadlessOperation(backend, operation, options, viewerAttached) {
|
|
25
|
+
const unavailable = (reason) => ({ operation, supported: false, reason });
|
|
26
|
+
if (operation === 'subscribe')
|
|
27
|
+
return unavailable('This headless backend has no event source');
|
|
28
|
+
const [namespace, method] = operation.split('.');
|
|
29
|
+
const object = Reflect.get(backend, namespace);
|
|
30
|
+
if (!object || typeof object !== 'object')
|
|
31
|
+
return unavailable('This headless backend does not implement the namespace');
|
|
32
|
+
const fn = Object.hasOwn(object, method) ? Reflect.get(object, method) : undefined;
|
|
33
|
+
if (typeof fn !== 'function')
|
|
34
|
+
return unavailable('This headless backend does not implement the method');
|
|
35
|
+
const refusal = refusals.get(fn);
|
|
36
|
+
if (refusal)
|
|
37
|
+
return { ...refusal, operation };
|
|
38
|
+
if ((namespace === 'viewer' || namespace === 'visibility') && !viewerAttached)
|
|
39
|
+
return unavailable('Attach a viewer adapter to use viewer operations');
|
|
40
|
+
if (['spatial', 'lens', 'files'].includes(namespace))
|
|
41
|
+
return unavailable('This headless backend has no provider for this namespace');
|
|
42
|
+
if (operation === 'model.loadIfc')
|
|
43
|
+
return unavailable('Open another model session to load a new model');
|
|
44
|
+
if (operation === 'export.download')
|
|
45
|
+
return unavailable('Write the export bytes using your application file API');
|
|
46
|
+
if (operation === 'store.alignElements' && !options.alignGeometry)
|
|
47
|
+
return unavailable('Align requires a host geometry provider');
|
|
48
|
+
if (operation === 'store.roomCommand' && !options.roomGeometry)
|
|
49
|
+
return unavailable('Room requires a host geometry provider');
|
|
50
|
+
return { operation, supported: true };
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=capabilities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../src/headless/capabilities.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** Adapt the MCP session overlay to the shared effective-entity boundary. */
|
|
2
|
+
import type { EffectiveEntityOverlay } from '@ifc-lite/data';
|
|
3
|
+
import type { IfcDataStore } from '@ifc-lite/parser';
|
|
4
|
+
import type { PendingOverlay } from './overlay.js';
|
|
5
|
+
export declare function pendingEntityMembership(overlay: PendingOverlay | null): EffectiveEntityOverlay | null;
|
|
6
|
+
/** IFCX has columnar rows but no STEP type buckets; give the shared iterator its source domain. */
|
|
7
|
+
export declare function effectiveSourceIds(store: IfcDataStore): Iterable<number> | undefined;
|
|
8
|
+
//# sourceMappingURL=effective-entity-membership.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"effective-entity-membership.d.ts","sourceRoot":"","sources":["../../src/headless/effective-entity-membership.ts"],"names":[],"mappings":"AAIA,6EAA6E;AAC7E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,GAAG,sBAAsB,GAAG,IAAI,CAYrG;AAED,mGAAmG;AACnG,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,SAAS,CAGpF"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
export function pendingEntityMembership(overlay) {
|
|
5
|
+
if (!overlay)
|
|
6
|
+
return null;
|
|
7
|
+
return {
|
|
8
|
+
isDeleted: (id) => overlay.deleted.has(id),
|
|
9
|
+
getTombstones: () => overlay.deleted,
|
|
10
|
+
getTypeMutations: () => overlay.getTypeMutations?.() ?? overlay.typeMutations?.() ?? new Map(),
|
|
11
|
+
getNewEntities: () => overlay.createdAll.map((entity) => ({ expressId: entity.expressId, type: entity.ifcType })),
|
|
12
|
+
getNewEntity: (id) => {
|
|
13
|
+
const entity = overlay.createdEntity(id);
|
|
14
|
+
return entity ? { type: entity.ifcType } : null;
|
|
15
|
+
},
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
/** IFCX has columnar rows but no STEP type buckets; give the shared iterator its source domain. */
|
|
19
|
+
export function effectiveSourceIds(store) {
|
|
20
|
+
// @raw-entity-enumeration-ok detect an indexless IFCX source; its columnar IDs are passed through the canonical accessor
|
|
21
|
+
return store.entityIndex.byType.size === 0 ? store.entities.expressId : undefined;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=effective-entity-membership.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"effective-entity-membership.js","sourceRoot":"","sources":["../../src/headless/effective-entity-membership.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAO/D,MAAM,UAAU,uBAAuB,CAAC,OAA8B;IACpE,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,OAAO;QACL,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1C,aAAa,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO;QACpC,gBAAgB,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,IAAI,OAAO,CAAC,aAAa,EAAE,EAAE,IAAI,IAAI,GAAG,EAA+B;QAC3H,cAAc,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QACjH,YAAY,EAAE,CAAC,EAAE,EAAE,EAAE;YACnB,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;YACzC,OAAO,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAClD,CAAC;KACF,CAAC;AACJ,CAAC;AAED,mGAAmG;AACnG,MAAM,UAAU,kBAAkB,CAAC,KAAmB;IACpD,yHAAyH;IACzH,OAAO,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;AACpF,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `bim.store.addCost*` / `nestCostItems` / `assignCostItemsToSchedule` /
|
|
3
|
+
* `assignToCostItem` / `setCostItemValues` / `removeCostEntity` stubs for the
|
|
4
|
+
* MCP v0.1 headless backend (#4857 PR A) — the same convention
|
|
5
|
+
* `headless-backend.ts`'s `addColumn`/`addWall`/etc. already use: agent flows
|
|
6
|
+
* go through `entity_create` with raw attributes, not the high-level
|
|
7
|
+
* builders, so these throw loudly rather than silently no-op. `bim.cost`
|
|
8
|
+
* READS already observe whatever `entity_create` authors, once the model's
|
|
9
|
+
* `MutablePropertyView` is threaded into `createCostBackend` — see
|
|
10
|
+
* `headless-backend.ts`'s `this.cost` construction.
|
|
11
|
+
*/
|
|
12
|
+
import type { CostStoreBackendMethods } from '../index.js';
|
|
13
|
+
export declare function costStoreStubs(): CostStoreBackendMethods;
|
|
14
|
+
//# sourceMappingURL=headless-backend-cost-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headless-backend-cost-store.d.ts","sourceRoot":"","sources":["../../src/headless/headless-backend-cost-store.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAI3D,wBAAgB,cAAc,IAAI,uBAAuB,CAYxD"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
import { unsupportedOperation } from './capabilities.js';
|
|
5
|
+
export function costStoreStubs() {
|
|
6
|
+
return {
|
|
7
|
+
addCostSchedule: unsupportedOperation('store.addCostSchedule', 'addCostSchedule not supported in MCP v0.1; use entity_create'),
|
|
8
|
+
addCostItem: unsupportedOperation('store.addCostItem', 'addCostItem not supported in MCP v0.1; use entity_create'),
|
|
9
|
+
addCostValue: unsupportedOperation('store.addCostValue', 'addCostValue not supported in MCP v0.1; use entity_create'),
|
|
10
|
+
addCostQuantity: unsupportedOperation('store.addCostQuantity', 'addCostQuantity not supported in MCP v0.1; use entity_create'),
|
|
11
|
+
nestCostItems: unsupportedOperation('store.nestCostItems', 'nestCostItems not supported in MCP v0.1; use entity_create'),
|
|
12
|
+
assignCostItemsToSchedule: unsupportedOperation('store.assignCostItemsToSchedule', 'assignCostItemsToSchedule not supported in MCP v0.1; use entity_create'),
|
|
13
|
+
assignToCostItem: unsupportedOperation('store.assignToCostItem', 'assignToCostItem not supported in MCP v0.1; use entity_create'),
|
|
14
|
+
setCostItemValues: unsupportedOperation('store.setCostItemValues', 'setCostItemValues not supported in MCP v0.1; use entity_create'),
|
|
15
|
+
removeCostEntity: unsupportedOperation('store.removeCostEntity', 'removeCostEntity not supported in MCP v0.1; use entity_create'),
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=headless-backend-cost-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headless-backend-cost-store.js","sourceRoot":"","sources":["../../src/headless/headless-backend-cost-store.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAgB/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEzD,MAAM,UAAU,cAAc;IAC5B,OAAO;QACL,eAAe,EAAE,oBAAoB,CAAC,uBAAuB,EAAE,8DAA8D,CAAC;QAC9H,WAAW,EAAE,oBAAoB,CAAC,mBAAmB,EAAE,0DAA0D,CAAC;QAClH,YAAY,EAAE,oBAAoB,CAAC,oBAAoB,EAAE,2DAA2D,CAAC;QACrH,eAAe,EAAE,oBAAoB,CAAC,uBAAuB,EAAE,8DAA8D,CAAC;QAC9H,aAAa,EAAE,oBAAoB,CAAC,qBAAqB,EAAE,4DAA4D,CAAC;QACxH,yBAAyB,EAAE,oBAAoB,CAAC,iCAAiC,EAAE,wEAAwE,CAAC;QAC5J,gBAAgB,EAAE,oBAAoB,CAAC,wBAAwB,EAAE,+DAA+D,CAAC;QACjI,iBAAiB,EAAE,oBAAoB,CAAC,yBAAyB,EAAE,gEAAgE,CAAC;QACpI,gBAAgB,EAAE,oBAAoB,CAAC,wBAAwB,EAAE,+DAA+D,CAAC;KAClI,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/** Ordinary creation, placement and wall joins use the shared SDK factories (#6232 D5).
|
|
2
|
+
* Shared compound recording preserves every earlier overlay record for undo. */
|
|
3
|
+
import { type ModellingStoreModelResolver } from '../index.js';
|
|
4
|
+
export declare function createRecordedModellingBackend(resolve: ModellingStoreModelResolver): {
|
|
5
|
+
transformElements: (modelId: string, expressIds: readonly number[], operation: import("@ifc-lite/create").StoreyTransformOp) => import("../types.js").EntityRef[];
|
|
6
|
+
setElementSize: (ref: import("../types.js").EntityRef, patch: import("../store-physical-types.js").PhysicalSizePatch) => import("../types.js").EntityRef[];
|
|
7
|
+
resizeWall: (ref: import("../types.js").EntityRef, start: [number, number, number], end: [number, number, number], options?: {
|
|
8
|
+
moveJoinedEnds?: boolean;
|
|
9
|
+
} | undefined) => import("../types.js").EntityRef[];
|
|
10
|
+
splitElements: (modelId: string, requests: readonly import("@ifc-lite/create").ElementSplitRequest[]) => {
|
|
11
|
+
source: import("../types.js").EntityRef;
|
|
12
|
+
added: import("../types.js").EntityRef;
|
|
13
|
+
left: import("../types.js").EntityRef;
|
|
14
|
+
right: import("../types.js").EntityRef;
|
|
15
|
+
}[];
|
|
16
|
+
trimExtendElement: (ref: import("../types.js").EntityRef, params: import("@ifc-lite/create").ElementTrimExtendParams) => import("../types.js").EntityRef[];
|
|
17
|
+
copyElements: (modelId: string, expressIds: readonly number[], transforms: readonly import("@ifc-lite/create").CopyTransform[]) => import("../types.js").EntityRef[];
|
|
18
|
+
duplicateElement: (ref: import("../types.js").EntityRef, options: {
|
|
19
|
+
offset: [number, number, number];
|
|
20
|
+
Name?: string;
|
|
21
|
+
}) => import("../types.js").EntityRef;
|
|
22
|
+
arrayElements: (modelId: string, expressIds: readonly number[], params: import("@ifc-lite/create").CopyArrayParams) => import("../types.js").EntityRef[];
|
|
23
|
+
editHostedElement: (ref: import("../types.js").EntityRef, patch: import("@ifc-lite/create").HostedElementEdit) => import("../types.js").EntityRef;
|
|
24
|
+
addCurtainWall: (modelId: string, storeyExpressId: number, params: import("@ifc-lite/create").CurtainWallInStoreParams) => import("../types.js").EntityRef;
|
|
25
|
+
addGrid: (modelId: string, storeyExpressId: number, params: import("@ifc-lite/create").GridInStoreParams) => import("../types.js").EntityRef;
|
|
26
|
+
addColumnOnGrid: (modelId: string, storeyExpressId: number, params: import("@ifc-lite/create").ColumnInStoreParams | import("@ifc-lite/create").ProfiledColumnInStoreParams, binding: import("@ifc-lite/create").GridColumnBinding) => import("../types.js").EntityRef;
|
|
27
|
+
replaceElement: (ref: import("../types.js").EntityRef, storeyExpressId: number, element: import("@ifc-lite/create").InStoreReplacementElement) => import("../types.js").EntityRef;
|
|
28
|
+
removeStair: (ref: Parameters<NonNullable<((ref: import("../types.js").EntityRef) => boolean) | undefined>>[0]) => boolean;
|
|
29
|
+
addStair: (modelId: string, storeyExpressId: number, params: import("@ifc-lite/create").StairInStoreParams) => import("../types.js").EntityRef;
|
|
30
|
+
addRailing: (modelId: string, storeyExpressId: number, params: import("@ifc-lite/create").RailingInStoreParams) => import("../types.js").EntityRef;
|
|
31
|
+
addElementType: (modelId: string, params: import("@ifc-lite/create").ElementTypeInStoreParams) => import("../types.js").EntityRef;
|
|
32
|
+
assignType: (modelId: string, typeExpressId: number, objectExpressIds: number[]) => import("../types.js").EntityRef;
|
|
33
|
+
addMaterial: (modelId: string, params: import("@ifc-lite/create").MaterialInStoreParams) => import("../types.js").EntityRef;
|
|
34
|
+
addMaterialLayerSet: (modelId: string, params: import("@ifc-lite/create").MaterialLayerSetInStoreParams) => import("../types.js").EntityRef;
|
|
35
|
+
addMaterialLayerSetUsage: (modelId: string, params: import("@ifc-lite/create").MaterialLayerSetUsageInStoreParams) => import("../types.js").EntityRef;
|
|
36
|
+
assignMaterial: (modelId: string, materialExpressId: number, objectExpressIds: number[]) => import("../types.js").EntityRef;
|
|
37
|
+
addOpening: (modelId: string, hostExpressId: number, params: import("@ifc-lite/create").OpeningInStoreParams) => import("../types.js").EntityRef;
|
|
38
|
+
addHostedDoor: (modelId: string, hostExpressId: number, params: import("@ifc-lite/create").HostedDoorInStoreParams) => import("../types.js").EntityRef;
|
|
39
|
+
addHostedWindow: (modelId: string, hostExpressId: number, params: import("@ifc-lite/create").HostedWindowInStoreParams) => import("../types.js").EntityRef;
|
|
40
|
+
joinWalls: (modelId: string, aExpressId: number, bExpressId: number, options?: import("@ifc-lite/create").WallJoinApplyOptions | undefined) => import("../types.js").EntityRef;
|
|
41
|
+
addWall: (modelId: string, storeyExpressId: number, params: import("../types.js").AddWallInStoreParams) => import("../types.js").EntityRef;
|
|
42
|
+
addColumn: (modelId: string, storeyExpressId: number, params: import("@ifc-lite/create").ProfiledColumnInStoreParams | import("../types.js").AddColumnInStoreParams) => import("../types.js").EntityRef;
|
|
43
|
+
addSlab: (modelId: string, storeyExpressId: number, params: import("../types.js").AddSlabInStoreParams) => import("../types.js").EntityRef;
|
|
44
|
+
addBeam: (modelId: string, storeyExpressId: number, params: import("../types.js").AddBeamInStoreParams | import("@ifc-lite/create").ProfiledBeamInStoreParams) => import("../types.js").EntityRef;
|
|
45
|
+
addSpace: (modelId: string, storeyExpressId: number, params: import("../types.js").AddSpaceInStoreParams) => import("../types.js").EntityRef;
|
|
46
|
+
addRoof: (modelId: string, storeyExpressId: number, params: import("../types.js").AddRoofInStoreParams) => import("../types.js").EntityRef;
|
|
47
|
+
addPlate: (modelId: string, storeyExpressId: number, params: import("../types.js").AddPlateInStoreParams) => import("../types.js").EntityRef;
|
|
48
|
+
addMember: (modelId: string, storeyExpressId: number, params: import("../types.js").AddMemberInStoreParams | import("@ifc-lite/create").ProfiledMemberInStoreParams) => import("../types.js").EntityRef;
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=headless-backend-modelling.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headless-backend-modelling.d.ts","sourceRoot":"","sources":["../../src/headless/headless-backend-modelling.ts"],"names":[],"mappings":"AAIA;gFACgF;AAChF,OAAO,EAAsF,KAAK,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAGnJ,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;uBAsE5D,UAAU,CAAC,WAAW,iEAAwB,CAAC,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;EAkCxE"}
|