@ifc-lite/sandbox 1.14.6 → 1.15.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/dist/bridge-create-schedule.d.ts +12 -0
- package/dist/bridge-create-schedule.d.ts.map +1 -0
- package/dist/bridge-create-schedule.js +150 -0
- package/dist/bridge-create-schedule.js.map +1 -0
- package/dist/bridge-create.d.ts +7 -0
- package/dist/bridge-create.d.ts.map +1 -0
- package/dist/bridge-create.js +503 -0
- package/dist/bridge-create.js.map +1 -0
- package/dist/bridge-export.d.ts +3 -0
- package/dist/bridge-export.d.ts.map +1 -0
- package/dist/bridge-export.js +60 -0
- package/dist/bridge-export.js.map +1 -0
- package/dist/bridge-files.d.ts +6 -0
- package/dist/bridge-files.d.ts.map +1 -0
- package/dist/bridge-files.js +56 -0
- package/dist/bridge-files.js.map +1 -0
- package/dist/bridge-helpers.d.ts +28 -0
- package/dist/bridge-helpers.d.ts.map +1 -0
- package/dist/bridge-helpers.js +45 -0
- package/dist/bridge-helpers.js.map +1 -0
- package/dist/bridge-model.d.ts +6 -0
- package/dist/bridge-model.d.ts.map +1 -0
- package/dist/bridge-model.js +45 -0
- package/dist/bridge-model.js.map +1 -0
- package/dist/bridge-mutate.d.ts +6 -0
- package/dist/bridge-mutate.d.ts.map +1 -0
- package/dist/bridge-mutate.js +79 -0
- package/dist/bridge-mutate.js.map +1 -0
- package/dist/bridge-query.d.ts +3 -0
- package/dist/bridge-query.d.ts.map +1 -0
- package/dist/bridge-query.js +421 -0
- package/dist/bridge-query.js.map +1 -0
- package/dist/bridge-schedule.d.ts +58 -0
- package/dist/bridge-schedule.d.ts.map +1 -0
- package/dist/bridge-schedule.js +207 -0
- package/dist/bridge-schedule.js.map +1 -0
- package/dist/bridge-schema.d.ts.map +1 -1
- package/dist/bridge-schema.js +21 -1294
- package/dist/bridge-schema.js.map +1 -1
- package/dist/bridge-store.d.ts +9 -0
- package/dist/bridge-store.d.ts.map +1 -0
- package/dist/bridge-store.js +426 -0
- package/dist/bridge-store.js.map +1 -0
- package/dist/bridge-viewer.d.ts +3 -0
- package/dist/bridge-viewer.d.ts.map +1 -0
- package/dist/bridge-viewer.js +110 -0
- package/dist/bridge-viewer.js.map +1 -0
- package/dist/creator-registry.d.ts +16 -0
- package/dist/creator-registry.d.ts.map +1 -0
- package/dist/creator-registry.js +45 -0
- package/dist/creator-registry.js.map +1 -0
- package/dist/transpile.d.ts.map +1 -1
- package/dist/transpile.js +4 -2
- package/dist/transpile.js.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -0
- package/dist/types.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,503 @@
|
|
|
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
|
+
/**
|
|
5
|
+
* Bridge schema — bim.create namespace methods.
|
|
6
|
+
*
|
|
7
|
+
* Auto-discovers public methods on IfcCreator.prototype and builds
|
|
8
|
+
* the corresponding bridge method schemas. Adding a new public method
|
|
9
|
+
* to IfcCreator automatically exposes it in the sandbox.
|
|
10
|
+
*/
|
|
11
|
+
import { IfcCreator } from '@ifc-lite/sdk';
|
|
12
|
+
import { creatorRegistry } from './creator-registry.js';
|
|
13
|
+
import { buildScheduleMethods, SCHEDULE_SPECIAL_METHOD_NAMES } from './bridge-create-schedule.js';
|
|
14
|
+
/** Methods with non-standard signatures that need hand-written wiring */
|
|
15
|
+
const SPECIAL_METHODS = new Set([
|
|
16
|
+
'constructor', 'toIfc', 'setColor',
|
|
17
|
+
// Scheduling lives in bridge-create-schedule.ts — exported list keeps the
|
|
18
|
+
// two files synchronised without duplicating the method names.
|
|
19
|
+
...SCHEDULE_SPECIAL_METHOD_NAMES,
|
|
20
|
+
]);
|
|
21
|
+
/**
|
|
22
|
+
* Explicit allow-list of IfcCreator methods exposed in the sandbox.
|
|
23
|
+
* Only methods in this set (or in SPECIAL_METHODS/ELEMENT_METHODS/ZERO_ARG_METHODS)
|
|
24
|
+
* are wired. This prevents accidental exposure of private/internal helpers.
|
|
25
|
+
*/
|
|
26
|
+
const ALLOWED_METHODS = new Set([
|
|
27
|
+
// Spatial structure
|
|
28
|
+
'addIfcBuildingStorey',
|
|
29
|
+
// Building elements
|
|
30
|
+
'addIfcWall', 'addIfcSlab', 'addIfcColumn', 'addIfcBeam',
|
|
31
|
+
'addIfcStair', 'addIfcRoof', 'addIfcGableRoof', 'addIfcWallDoor', 'addIfcWallWindow', 'addIfcDoor', 'addIfcWindow',
|
|
32
|
+
'addIfcRamp', 'addIfcRailing', 'addIfcPlate', 'addIfcMember',
|
|
33
|
+
'addIfcFooting', 'addIfcPile', 'addIfcSpace', 'addIfcCurtainWall',
|
|
34
|
+
'addIfcFurnishingElement', 'addIfcBuildingElementProxy',
|
|
35
|
+
// Specialized profiles
|
|
36
|
+
'addIfcCircularColumn', 'addIfcIShapeBeam',
|
|
37
|
+
'addIfcLShapeMember', 'addIfcTShapeMember', 'addIfcUShapeMember',
|
|
38
|
+
'addIfcHollowCircularColumn', 'addIfcRectangleHollowBeam',
|
|
39
|
+
// Generic element creation
|
|
40
|
+
'addElement', 'addAxisElement', 'createProfile',
|
|
41
|
+
// Properties and materials
|
|
42
|
+
'addIfcPropertySet', 'addIfcElementQuantity', 'addIfcMaterial',
|
|
43
|
+
// Scheduling / 4D (IfcTask, IfcWorkSchedule, IfcRelSequence)
|
|
44
|
+
'addIfcWorkSchedule', 'addIfcWorkPlan', 'addIfcTask', 'addIfcRelSequence',
|
|
45
|
+
// Canonical IFC relationship names — preferred for schema compliance.
|
|
46
|
+
'addIfcRelAssignsToControl', 'addIfcRelAssignsToProcess', 'addIfcRelNests',
|
|
47
|
+
// Ergonomic aliases retained for script authors.
|
|
48
|
+
'assignTasksToWorkSchedule', 'assignSchedulesToWorkPlan',
|
|
49
|
+
'assignProductsToTask', 'nestTasks',
|
|
50
|
+
// Low-level geometry
|
|
51
|
+
'getWorldPlacementId',
|
|
52
|
+
]);
|
|
53
|
+
/** Methods that take (elementId, def) instead of (storeyId, params) */
|
|
54
|
+
const ELEMENT_METHODS = new Set([
|
|
55
|
+
'addIfcWallDoor', 'addIfcWallWindow',
|
|
56
|
+
'addIfcPropertySet', 'addIfcElementQuantity', 'addIfcMaterial',
|
|
57
|
+
]);
|
|
58
|
+
/** Methods that take a single params object after the handle */
|
|
59
|
+
const SINGLE_DUMP_METHODS = new Set([
|
|
60
|
+
'createProfile',
|
|
61
|
+
]);
|
|
62
|
+
/** Methods with zero args (just need the handle) */
|
|
63
|
+
const ZERO_ARG_METHODS = new Set([
|
|
64
|
+
'getWorldPlacementId',
|
|
65
|
+
]);
|
|
66
|
+
function classifyMethod(name, _fn) {
|
|
67
|
+
if (SPECIAL_METHODS.has(name))
|
|
68
|
+
return 'special';
|
|
69
|
+
if (ZERO_ARG_METHODS.has(name))
|
|
70
|
+
return 'no-args';
|
|
71
|
+
if (SINGLE_DUMP_METHODS.has(name))
|
|
72
|
+
return 'single-dump';
|
|
73
|
+
if (ELEMENT_METHODS.has(name))
|
|
74
|
+
return 'element-params';
|
|
75
|
+
return 'storey-params';
|
|
76
|
+
}
|
|
77
|
+
/** Humanize a method name for the doc string */
|
|
78
|
+
function methodDoc(name) {
|
|
79
|
+
// addIfcWall → 'Add an IfcWall'
|
|
80
|
+
// addElement → 'Add a generic element'
|
|
81
|
+
// createProfile → 'Create a profile from a ProfileDef'
|
|
82
|
+
if (name === 'addIfcMaterial')
|
|
83
|
+
return 'Associate a material with an element via IfcRelAssociatesMaterial (deferred to toIfc). Returns nothing.';
|
|
84
|
+
if (name === 'addIfcBuildingStorey')
|
|
85
|
+
return 'Add a building storey. Returns storey expressId.';
|
|
86
|
+
if (name === 'addIfcGableRoof')
|
|
87
|
+
return 'Add a dual-pitch gable roof. `Slope` is in radians. Returns roof expressId.';
|
|
88
|
+
if (name === 'addIfcWallDoor')
|
|
89
|
+
return 'Add a door hosted in a wall opening. Position is wall-local [alongWall, 0, baseHeight]. Returns door expressId.';
|
|
90
|
+
if (name === 'addIfcWallWindow')
|
|
91
|
+
return 'Add a window hosted in a wall opening. Position is wall-local [alongWall, 0, sillHeight]. Returns window expressId.';
|
|
92
|
+
if (name === 'addElement')
|
|
93
|
+
return 'Create ANY IFC type with a profile at a placement. Returns expressId.';
|
|
94
|
+
if (name === 'addAxisElement')
|
|
95
|
+
return 'Create ANY IFC type extruded along a Start→End axis. Returns expressId.';
|
|
96
|
+
if (name === 'createProfile')
|
|
97
|
+
return 'Create a profile from a ProfileDef union. Returns profile ID.';
|
|
98
|
+
if (name === 'getWorldPlacementId')
|
|
99
|
+
return 'Get the world placement ID for use with addLocalPlacement.';
|
|
100
|
+
if (name.startsWith('addIfc')) {
|
|
101
|
+
const entity = name.slice(3); // remove 'add', keep 'IfcWall' etc.
|
|
102
|
+
return `Add ${entity}. Returns expressId.`;
|
|
103
|
+
}
|
|
104
|
+
if (name.startsWith('add')) {
|
|
105
|
+
const what = name.slice(3);
|
|
106
|
+
return `Add ${what}. Returns ID.`;
|
|
107
|
+
}
|
|
108
|
+
return `Call ${name} on the creator.`;
|
|
109
|
+
}
|
|
110
|
+
const CREATE_METHOD_SEMANTICS = {
|
|
111
|
+
project: {
|
|
112
|
+
taskTags: ['create', 'repair'],
|
|
113
|
+
useWhen: 'Start a new generated IFC model before creating storeys and elements.',
|
|
114
|
+
},
|
|
115
|
+
toIfc: {
|
|
116
|
+
taskTags: ['create', 'export'],
|
|
117
|
+
useWhen: 'Finalize the in-memory IFC model and produce STEP content for preview or download.',
|
|
118
|
+
},
|
|
119
|
+
setColor: {
|
|
120
|
+
taskTags: ['visualize', 'repair'],
|
|
121
|
+
useWhen: 'Assign a named RGB color to a created element using [r, g, b] values between 0 and 1.',
|
|
122
|
+
},
|
|
123
|
+
addIfcBuildingStorey: {
|
|
124
|
+
taskTags: ['create', 'repair'],
|
|
125
|
+
requiredKeys: ['Elevation'],
|
|
126
|
+
useWhen: 'Create a building storey container before adding level-based geometry.',
|
|
127
|
+
},
|
|
128
|
+
addIfcWall: {
|
|
129
|
+
taskTags: ['create', 'repair'],
|
|
130
|
+
placement: 'storey-relative',
|
|
131
|
+
requiredKeys: ['Start', 'End', 'Thickness', 'Height'],
|
|
132
|
+
positiveKeys: ['Thickness', 'Height'],
|
|
133
|
+
pointArity: { Start: 3, End: 3 },
|
|
134
|
+
axisPair: ['Start', 'End'],
|
|
135
|
+
useWhen: 'Create a wall from a start/end axis on the current storey.',
|
|
136
|
+
},
|
|
137
|
+
addIfcSlab: {
|
|
138
|
+
taskTags: ['create', 'repair'],
|
|
139
|
+
placement: 'storey-relative',
|
|
140
|
+
requiredKeys: ['Position', 'Thickness'],
|
|
141
|
+
anyOfKeys: [['Profile'], ['Width', 'Depth']],
|
|
142
|
+
positiveKeys: ['Thickness', 'Width', 'Depth'],
|
|
143
|
+
pointArity: { Position: 3 },
|
|
144
|
+
customValidationId: 'slab-shape',
|
|
145
|
+
useWhen: 'Create a slab from a rectangular footprint or a 2D point-array profile.',
|
|
146
|
+
},
|
|
147
|
+
addIfcColumn: {
|
|
148
|
+
taskTags: ['create', 'repair'],
|
|
149
|
+
placement: 'storey-relative',
|
|
150
|
+
requiredKeys: ['Position', 'Width', 'Depth', 'Height'],
|
|
151
|
+
positiveKeys: ['Width', 'Depth', 'Height'],
|
|
152
|
+
pointArity: { Position: 3 },
|
|
153
|
+
useWhen: 'Create a vertical column from a base position and dimensions.',
|
|
154
|
+
},
|
|
155
|
+
addIfcBeam: {
|
|
156
|
+
taskTags: ['create', 'repair'],
|
|
157
|
+
placement: 'storey-relative',
|
|
158
|
+
requiredKeys: ['Start', 'End', 'Width', 'Height'],
|
|
159
|
+
positiveKeys: ['Width', 'Height'],
|
|
160
|
+
pointArity: { Start: 3, End: 3 },
|
|
161
|
+
axisPair: ['Start', 'End'],
|
|
162
|
+
useWhen: 'Create a beam from an axis on the current storey.',
|
|
163
|
+
},
|
|
164
|
+
addIfcMember: {
|
|
165
|
+
taskTags: ['create', 'repair'],
|
|
166
|
+
placement: 'world',
|
|
167
|
+
requiredKeys: ['Start', 'End', 'Width', 'Height'],
|
|
168
|
+
positiveKeys: ['Width', 'Height'],
|
|
169
|
+
pointArity: { Start: 3, End: 3 },
|
|
170
|
+
axisPair: ['Start', 'End'],
|
|
171
|
+
useWhen: 'Create mullions, braces, or facade members with explicit world coordinates.',
|
|
172
|
+
cautions: [
|
|
173
|
+
'Inside storey loops, include the current storey elevation in Start/End Z for facade members.',
|
|
174
|
+
],
|
|
175
|
+
},
|
|
176
|
+
addIfcPlate: {
|
|
177
|
+
taskTags: ['create', 'repair'],
|
|
178
|
+
placement: 'world',
|
|
179
|
+
requiredKeys: ['Position', 'Width', 'Depth', 'Thickness'],
|
|
180
|
+
positiveKeys: ['Width', 'Depth', 'Thickness'],
|
|
181
|
+
pointArity: { Position: 3 },
|
|
182
|
+
forbiddenKeys: [
|
|
183
|
+
{ key: 'Height', message: '`bim.create.addIfcPlate(...)` uses `Depth` and `Thickness`, not `Height`.' },
|
|
184
|
+
{ key: 'Start', message: '`bim.create.addIfcPlate(...)` uses `Position`, not `Start`/`End`.' },
|
|
185
|
+
{ key: 'End', message: '`bim.create.addIfcPlate(...)` uses `Position`, not `Start`/`End`.' },
|
|
186
|
+
],
|
|
187
|
+
useWhen: 'Create thin world-placement panels or facade plates from a base point.',
|
|
188
|
+
cautions: [
|
|
189
|
+
'Facade plates repeated by storey usually need absolute Z = elevation + localOffset.',
|
|
190
|
+
],
|
|
191
|
+
},
|
|
192
|
+
addIfcCurtainWall: {
|
|
193
|
+
taskTags: ['create', 'repair'],
|
|
194
|
+
placement: 'world',
|
|
195
|
+
requiredKeys: ['Start', 'End', 'Height'],
|
|
196
|
+
positiveKeys: ['Height', 'Thickness'],
|
|
197
|
+
pointArity: { Start: 3, End: 3 },
|
|
198
|
+
axisPair: ['Start', 'End'],
|
|
199
|
+
useWhen: 'Create a world-placement curtain wall segment between two points.',
|
|
200
|
+
cautions: [
|
|
201
|
+
'Inside storey loops, include the current storey elevation in Start/End Z.',
|
|
202
|
+
],
|
|
203
|
+
},
|
|
204
|
+
addIfcRailing: {
|
|
205
|
+
taskTags: ['create', 'repair'],
|
|
206
|
+
placement: 'world',
|
|
207
|
+
requiredKeys: ['Start', 'End', 'Height'],
|
|
208
|
+
positiveKeys: ['Height', 'Width'],
|
|
209
|
+
pointArity: { Start: 3, End: 3 },
|
|
210
|
+
axisPair: ['Start', 'End'],
|
|
211
|
+
useWhen: 'Create a world-placement railing along an axis.',
|
|
212
|
+
},
|
|
213
|
+
addIfcStair: {
|
|
214
|
+
taskTags: ['create', 'repair'],
|
|
215
|
+
placement: 'storey-relative',
|
|
216
|
+
requiredKeys: ['Position', 'NumberOfRisers', 'RiserHeight', 'TreadLength', 'Width'],
|
|
217
|
+
positiveKeys: ['NumberOfRisers', 'RiserHeight', 'TreadLength', 'Width'],
|
|
218
|
+
pointArity: { Position: 3 },
|
|
219
|
+
useWhen: 'Create a stair from a base position and riser/tread definition.',
|
|
220
|
+
},
|
|
221
|
+
addIfcRoof: {
|
|
222
|
+
taskTags: ['create', 'repair'],
|
|
223
|
+
placement: 'storey-relative',
|
|
224
|
+
requiredKeys: ['Position', 'Width', 'Depth', 'Thickness'],
|
|
225
|
+
positiveKeys: ['Width', 'Depth', 'Thickness', 'Slope'],
|
|
226
|
+
pointArity: { Position: 3 },
|
|
227
|
+
forbiddenKeys: [
|
|
228
|
+
{ key: 'Profile', message: '`bim.create.addIfcRoof(...)` does not support `Profile`. Use `Position`, `Width`, `Depth`, `Thickness`, and optional `Slope`.' },
|
|
229
|
+
{ key: 'ExtrusionHeight', message: '`bim.create.addIfcRoof(...)` uses `Depth`, not `ExtrusionHeight`.' },
|
|
230
|
+
{ key: 'Height', message: '`bim.create.addIfcRoof(...)` uses `Thickness` and `Depth`, not `Height`.' },
|
|
231
|
+
{ key: 'Overhang', message: '`bim.create.addIfcRoof(...)` does not support `Overhang`. Use `addIfcGableRoof(...)` for a house-style roof with pitch and overhang.' },
|
|
232
|
+
],
|
|
233
|
+
customValidationId: 'roof-shape',
|
|
234
|
+
useWhen: 'Create flat or mono-pitch roof slabs only.',
|
|
235
|
+
cautions: [
|
|
236
|
+
'Slope is in radians.',
|
|
237
|
+
'Use addIfcGableRoof for house, pitched-roof, or gable-roof requests.',
|
|
238
|
+
],
|
|
239
|
+
},
|
|
240
|
+
addIfcGableRoof: {
|
|
241
|
+
taskTags: ['create', 'repair'],
|
|
242
|
+
placement: 'storey-relative',
|
|
243
|
+
requiredKeys: ['Position', 'Width', 'Depth', 'Thickness', 'Slope'],
|
|
244
|
+
positiveKeys: ['Width', 'Depth', 'Thickness', 'Slope'],
|
|
245
|
+
pointArity: { Position: 3 },
|
|
246
|
+
forbiddenKeys: [
|
|
247
|
+
{ key: 'Profile', message: '`bim.create.addIfcGableRoof(...)` does not support `Profile`. Use `Position`, `Width`, `Depth`, `Thickness`, `Slope`, and optional `Overhang`.' },
|
|
248
|
+
{ key: 'ExtrusionHeight', message: '`bim.create.addIfcGableRoof(...)` uses `Thickness`, not `ExtrusionHeight`.' },
|
|
249
|
+
{ key: 'Height', message: '`bim.create.addIfcGableRoof(...)` uses `Thickness` for roof thickness and derives ridge height from `Slope`.' },
|
|
250
|
+
],
|
|
251
|
+
customValidationId: 'roof-shape',
|
|
252
|
+
useWhen: 'Create standard dual-pitch house roofs.',
|
|
253
|
+
cautions: [
|
|
254
|
+
'Slope is in radians.',
|
|
255
|
+
],
|
|
256
|
+
},
|
|
257
|
+
addIfcWallDoor: {
|
|
258
|
+
taskTags: ['create', 'repair'],
|
|
259
|
+
placement: 'wall-local',
|
|
260
|
+
requiredKeys: ['Position', 'Width', 'Height'],
|
|
261
|
+
positiveKeys: ['Width', 'Height', 'Thickness'],
|
|
262
|
+
pointArity: { Position: 3 },
|
|
263
|
+
forbiddenKeys: [
|
|
264
|
+
{ key: 'Start', message: '`bim.create.addIfcWallDoor(...)` uses wall-local `Position`, not `Start`/`End`.' },
|
|
265
|
+
{ key: 'End', message: '`bim.create.addIfcWallDoor(...)` uses wall-local `Position`, not `Start`/`End`.' },
|
|
266
|
+
{ key: 'Rotation', message: '`bim.create.addIfcWallDoor(...)` auto-aligns to the host wall. Do not pass `Rotation`.' },
|
|
267
|
+
{ key: 'Direction', message: '`bim.create.addIfcWallDoor(...)` auto-aligns to the host wall. Do not pass `Direction`.' },
|
|
268
|
+
{ key: 'Axis', message: '`bim.create.addIfcWallDoor(...)` auto-aligns to the host wall. Do not pass `Axis`.' },
|
|
269
|
+
{ key: 'RefDirection', message: '`bim.create.addIfcWallDoor(...)` auto-aligns to the host wall. Do not pass `RefDirection`.' },
|
|
270
|
+
{ key: 'Placement', message: '`bim.create.addIfcWallDoor(...)` uses wall-local `Position`, not `Placement`.' },
|
|
271
|
+
],
|
|
272
|
+
useWhen: 'Create a wall-hosted door aligned to a host wall.',
|
|
273
|
+
},
|
|
274
|
+
addIfcWallWindow: {
|
|
275
|
+
taskTags: ['create', 'repair'],
|
|
276
|
+
placement: 'wall-local',
|
|
277
|
+
requiredKeys: ['Position', 'Width', 'Height'],
|
|
278
|
+
positiveKeys: ['Width', 'Height', 'Thickness'],
|
|
279
|
+
pointArity: { Position: 3 },
|
|
280
|
+
forbiddenKeys: [
|
|
281
|
+
{ key: 'Start', message: '`bim.create.addIfcWallWindow(...)` uses wall-local `Position`, not `Start`/`End`.' },
|
|
282
|
+
{ key: 'End', message: '`bim.create.addIfcWallWindow(...)` uses wall-local `Position`, not `Start`/`End`.' },
|
|
283
|
+
{ key: 'Rotation', message: '`bim.create.addIfcWallWindow(...)` auto-aligns to the host wall. Do not pass `Rotation`.' },
|
|
284
|
+
{ key: 'Direction', message: '`bim.create.addIfcWallWindow(...)` auto-aligns to the host wall. Do not pass `Direction`.' },
|
|
285
|
+
{ key: 'Axis', message: '`bim.create.addIfcWallWindow(...)` auto-aligns to the host wall. Do not pass `Axis`.' },
|
|
286
|
+
{ key: 'RefDirection', message: '`bim.create.addIfcWallWindow(...)` auto-aligns to the host wall. Do not pass `RefDirection`.' },
|
|
287
|
+
{ key: 'Placement', message: '`bim.create.addIfcWallWindow(...)` uses wall-local `Position`, not `Placement`.' },
|
|
288
|
+
],
|
|
289
|
+
useWhen: 'Create a wall-hosted window aligned to a host wall.',
|
|
290
|
+
},
|
|
291
|
+
addIfcDoor: {
|
|
292
|
+
taskTags: ['create', 'repair'],
|
|
293
|
+
placement: 'world',
|
|
294
|
+
requiredKeys: ['Position', 'Width', 'Height'],
|
|
295
|
+
positiveKeys: ['Width', 'Height', 'Thickness'],
|
|
296
|
+
pointArity: { Position: 3 },
|
|
297
|
+
forbiddenKeys: [
|
|
298
|
+
{ key: 'Start', message: '`bim.create.addIfcDoor(...)` uses `Position`, not `Start`/`End`.' },
|
|
299
|
+
{ key: 'End', message: '`bim.create.addIfcDoor(...)` uses `Position`, not `Start`/`End`.' },
|
|
300
|
+
{ key: 'Direction', message: '`bim.create.addIfcDoor(...)` does not support wall-axis rotation. It creates a world-aligned standalone door element.' },
|
|
301
|
+
{ key: 'Rotation', message: '`bim.create.addIfcDoor(...)` does not support rotation. For wall-hosted inserts, use `bim.create.addIfcWallDoor(...)` or wall `Openings`.' },
|
|
302
|
+
{ key: 'Axis', message: '`bim.create.addIfcDoor(...)` does not accept `Axis`. It is not a generic placement API.' },
|
|
303
|
+
{ key: 'RefDirection', message: '`bim.create.addIfcDoor(...)` does not accept `RefDirection`. It is not auto-aligned to wall direction.' },
|
|
304
|
+
{ key: 'Placement', message: '`bim.create.addIfcDoor(...)` uses `Position`, not `Placement`.' },
|
|
305
|
+
],
|
|
306
|
+
useWhen: 'Create a standalone world-aligned door element.',
|
|
307
|
+
cautions: [
|
|
308
|
+
'For wall-hosted inserts, use addIfcWallDoor or wall Openings instead.',
|
|
309
|
+
],
|
|
310
|
+
},
|
|
311
|
+
addIfcWindow: {
|
|
312
|
+
taskTags: ['create', 'repair'],
|
|
313
|
+
placement: 'world',
|
|
314
|
+
requiredKeys: ['Position', 'Width', 'Height'],
|
|
315
|
+
positiveKeys: ['Width', 'Height', 'Thickness'],
|
|
316
|
+
pointArity: { Position: 3 },
|
|
317
|
+
forbiddenKeys: [
|
|
318
|
+
{ key: 'Start', message: '`bim.create.addIfcWindow(...)` uses `Position`, not `Start`/`End`.' },
|
|
319
|
+
{ key: 'End', message: '`bim.create.addIfcWindow(...)` uses `Position`, not `Start`/`End`.' },
|
|
320
|
+
{ key: 'Direction', message: '`bim.create.addIfcWindow(...)` does not support wall-axis rotation. It creates a world-aligned standalone window element.' },
|
|
321
|
+
{ key: 'Rotation', message: '`bim.create.addIfcWindow(...)` does not support rotation. For wall-hosted inserts, use `bim.create.addIfcWallWindow(...)` or wall `Openings`.' },
|
|
322
|
+
{ key: 'Axis', message: '`bim.create.addIfcWindow(...)` does not accept `Axis`. It is not a generic placement API.' },
|
|
323
|
+
{ key: 'RefDirection', message: '`bim.create.addIfcWindow(...)` does not accept `RefDirection`. It is not auto-aligned to wall direction.' },
|
|
324
|
+
{ key: 'Placement', message: '`bim.create.addIfcWindow(...)` uses `Position`, not `Placement`.' },
|
|
325
|
+
],
|
|
326
|
+
useWhen: 'Create a standalone world-aligned window element.',
|
|
327
|
+
cautions: [
|
|
328
|
+
'For wall-hosted inserts, use addIfcWallWindow or wall Openings instead.',
|
|
329
|
+
],
|
|
330
|
+
},
|
|
331
|
+
addElement: {
|
|
332
|
+
taskTags: ['create', 'repair'],
|
|
333
|
+
placement: 'explicit-placement',
|
|
334
|
+
requiredKeys: ['IfcType', 'Placement', 'Profile', 'Depth'],
|
|
335
|
+
positiveKeys: ['Depth'],
|
|
336
|
+
customValidationId: 'generic-element',
|
|
337
|
+
useWhen: 'Create advanced IFC entities only when no dedicated helper exists.',
|
|
338
|
+
},
|
|
339
|
+
addAxisElement: {
|
|
340
|
+
taskTags: ['create', 'repair'],
|
|
341
|
+
placement: 'world',
|
|
342
|
+
requiredKeys: ['IfcType', 'Start', 'End', 'Profile'],
|
|
343
|
+
pointArity: { Start: 3, End: 3 },
|
|
344
|
+
axisPair: ['Start', 'End'],
|
|
345
|
+
customValidationId: 'axis-element',
|
|
346
|
+
useWhen: 'Create advanced axis-based IFC entities when no dedicated helper exists.',
|
|
347
|
+
},
|
|
348
|
+
};
|
|
349
|
+
/**
|
|
350
|
+
* Build all bim.create method schemas by discovering public methods
|
|
351
|
+
* on IfcCreator.prototype. New methods are automatically exposed.
|
|
352
|
+
*/
|
|
353
|
+
export function buildCreateMethods() {
|
|
354
|
+
const methods = [];
|
|
355
|
+
// ── Special: project (creates IfcCreator, returns handle) ──
|
|
356
|
+
methods.push({
|
|
357
|
+
name: 'project',
|
|
358
|
+
doc: 'Create a new IFC project. Returns a creator handle (number).',
|
|
359
|
+
args: ['dump'],
|
|
360
|
+
paramNames: ['params'],
|
|
361
|
+
tsParamTypes: ['{ Name?: string; Description?: string; Schema?: string; LengthUnit?: string; Author?: string; Organization?: string }'],
|
|
362
|
+
tsReturn: 'number',
|
|
363
|
+
call: (_sdk, args, context) => {
|
|
364
|
+
const params = (args[0] ?? {});
|
|
365
|
+
const creator = new IfcCreator(params);
|
|
366
|
+
return creatorRegistry.registerForSession(context.sandboxSessionId, creator);
|
|
367
|
+
},
|
|
368
|
+
returns: 'value',
|
|
369
|
+
llmSemantics: CREATE_METHOD_SEMANTICS.project,
|
|
370
|
+
});
|
|
371
|
+
// ── Special: toIfc (finalizes + cleans up handle) ──
|
|
372
|
+
methods.push({
|
|
373
|
+
name: 'toIfc',
|
|
374
|
+
doc: 'Generate the IFC STEP file content. Returns { content, entities, stats }.',
|
|
375
|
+
args: ['number'],
|
|
376
|
+
paramNames: ['handle'],
|
|
377
|
+
tsReturn: '{ content: string; entities: Array<{ expressId: number; type: string; Name?: string }>; stats: { entityCount: number; fileSize: number } }',
|
|
378
|
+
call: (_sdk, args, context) => {
|
|
379
|
+
const handle = args[0];
|
|
380
|
+
try {
|
|
381
|
+
const creator = creatorRegistry.getForSession(context.sandboxSessionId, handle);
|
|
382
|
+
return creator.toIfc();
|
|
383
|
+
}
|
|
384
|
+
finally {
|
|
385
|
+
creatorRegistry.removeForSession(context.sandboxSessionId, handle);
|
|
386
|
+
}
|
|
387
|
+
},
|
|
388
|
+
returns: 'value',
|
|
389
|
+
llmSemantics: CREATE_METHOD_SEMANTICS.toIfc,
|
|
390
|
+
});
|
|
391
|
+
// ── Special: setColor (unique signature: handle, elementId, name, rgb) ──
|
|
392
|
+
methods.push({
|
|
393
|
+
name: 'setColor',
|
|
394
|
+
doc: 'Assign a named colour to an element. Call before toIfc().',
|
|
395
|
+
args: ['number', 'number', 'string', 'dump'],
|
|
396
|
+
paramNames: ['handle', 'elementId', 'name', 'rgb'],
|
|
397
|
+
tsReturn: 'void',
|
|
398
|
+
call: (_sdk, args, context) => {
|
|
399
|
+
const creator = creatorRegistry.getForSession(context.sandboxSessionId, args[0]);
|
|
400
|
+
creator.setColor(args[1], args[2], args[3]);
|
|
401
|
+
},
|
|
402
|
+
returns: 'void',
|
|
403
|
+
llmSemantics: CREATE_METHOD_SEMANTICS.setColor,
|
|
404
|
+
});
|
|
405
|
+
// ── Scheduling / 4D ────────────────────────────────────────
|
|
406
|
+
// IfcTask / IfcWorkSchedule / IfcRelSequence chains live in a dedicated
|
|
407
|
+
// module so this file stays under the ~400-line guideline. Adding a new
|
|
408
|
+
// scheduling method = touch `bridge-create-schedule.ts` only.
|
|
409
|
+
methods.push(...buildScheduleMethods());
|
|
410
|
+
const proto = IfcCreator.prototype;
|
|
411
|
+
const methodNames = Object.getOwnPropertyNames(proto)
|
|
412
|
+
.filter(name => typeof proto[name] === 'function' && ALLOWED_METHODS.has(name))
|
|
413
|
+
.sort();
|
|
414
|
+
for (const name of methodNames) {
|
|
415
|
+
const pattern = classifyMethod(name, proto[name]);
|
|
416
|
+
if (pattern === 'special')
|
|
417
|
+
continue; // already handled above
|
|
418
|
+
switch (pattern) {
|
|
419
|
+
case 'storey-params':
|
|
420
|
+
// addIfcBuildingStorey takes (params) — 1 arg after handle
|
|
421
|
+
if (name === 'addIfcBuildingStorey') {
|
|
422
|
+
methods.push({
|
|
423
|
+
name,
|
|
424
|
+
doc: methodDoc(name),
|
|
425
|
+
args: ['number', 'dump'],
|
|
426
|
+
paramNames: ['handle', 'params'],
|
|
427
|
+
tsReturn: 'number',
|
|
428
|
+
call: (_sdk, args, context) => {
|
|
429
|
+
const creator = creatorRegistry.getForSession(context.sandboxSessionId, args[0]);
|
|
430
|
+
return creator[name](args[1]);
|
|
431
|
+
},
|
|
432
|
+
returns: 'value',
|
|
433
|
+
llmSemantics: CREATE_METHOD_SEMANTICS[name],
|
|
434
|
+
});
|
|
435
|
+
}
|
|
436
|
+
else {
|
|
437
|
+
// Standard: (storeyId, params) — 2 args after handle
|
|
438
|
+
methods.push({
|
|
439
|
+
name,
|
|
440
|
+
doc: methodDoc(name),
|
|
441
|
+
args: ['number', 'number', 'dump'],
|
|
442
|
+
paramNames: ['handle', 'storeyId', 'params'],
|
|
443
|
+
tsReturn: 'number',
|
|
444
|
+
call: (_sdk, args, context) => {
|
|
445
|
+
const creator = creatorRegistry.getForSession(context.sandboxSessionId, args[0]);
|
|
446
|
+
return creator[name](args[1], args[2]);
|
|
447
|
+
},
|
|
448
|
+
returns: 'value',
|
|
449
|
+
llmSemantics: CREATE_METHOD_SEMANTICS[name],
|
|
450
|
+
});
|
|
451
|
+
}
|
|
452
|
+
break;
|
|
453
|
+
case 'element-params':
|
|
454
|
+
// (elementId, def) — 2 args after handle, may return number or void
|
|
455
|
+
methods.push({
|
|
456
|
+
name,
|
|
457
|
+
doc: methodDoc(name),
|
|
458
|
+
args: ['number', 'number', 'dump'],
|
|
459
|
+
paramNames: ['handle', name === 'addIfcWallDoor' || name === 'addIfcWallWindow' ? 'wallId' : 'elementId', 'params'],
|
|
460
|
+
tsReturn: name === 'addIfcMaterial' ? 'void' : 'number',
|
|
461
|
+
call: (_sdk, args, context) => {
|
|
462
|
+
const creator = creatorRegistry.getForSession(context.sandboxSessionId, args[0]);
|
|
463
|
+
return creator[name](args[1], args[2]);
|
|
464
|
+
},
|
|
465
|
+
returns: name === 'addIfcMaterial' ? 'void' : 'value',
|
|
466
|
+
llmSemantics: CREATE_METHOD_SEMANTICS[name],
|
|
467
|
+
});
|
|
468
|
+
break;
|
|
469
|
+
case 'single-dump':
|
|
470
|
+
methods.push({
|
|
471
|
+
name,
|
|
472
|
+
doc: methodDoc(name),
|
|
473
|
+
args: ['number', 'dump'],
|
|
474
|
+
paramNames: ['handle', 'profile'],
|
|
475
|
+
tsReturn: 'number',
|
|
476
|
+
call: (_sdk, args, context) => {
|
|
477
|
+
const creator = creatorRegistry.getForSession(context.sandboxSessionId, args[0]);
|
|
478
|
+
return creator[name](args[1]);
|
|
479
|
+
},
|
|
480
|
+
returns: 'value',
|
|
481
|
+
llmSemantics: CREATE_METHOD_SEMANTICS[name],
|
|
482
|
+
});
|
|
483
|
+
break;
|
|
484
|
+
case 'no-args':
|
|
485
|
+
methods.push({
|
|
486
|
+
name,
|
|
487
|
+
doc: methodDoc(name),
|
|
488
|
+
args: ['number'],
|
|
489
|
+
paramNames: ['handle'],
|
|
490
|
+
tsReturn: 'number',
|
|
491
|
+
call: (_sdk, args, context) => {
|
|
492
|
+
const creator = creatorRegistry.getForSession(context.sandboxSessionId, args[0]);
|
|
493
|
+
return creator[name]();
|
|
494
|
+
},
|
|
495
|
+
returns: 'value',
|
|
496
|
+
llmSemantics: CREATE_METHOD_SEMANTICS[name],
|
|
497
|
+
});
|
|
498
|
+
break;
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
return methods;
|
|
502
|
+
}
|
|
503
|
+
//# sourceMappingURL=bridge-create.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge-create.js","sourceRoot":"","sources":["../src/bridge-create.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge-export.d.ts","sourceRoot":"","sources":["../src/bridge-export.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D,wBAAgB,oBAAoB,IAAI,eAAe,CAyEtD"}
|
|
@@ -0,0 +1,60 @@
|
|
|
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 buildExportNamespace() {
|
|
5
|
+
return {
|
|
6
|
+
name: 'export',
|
|
7
|
+
doc: 'Data export',
|
|
8
|
+
permission: 'export',
|
|
9
|
+
methods: [
|
|
10
|
+
{
|
|
11
|
+
name: 'csv',
|
|
12
|
+
doc: 'Export entities to CSV string',
|
|
13
|
+
args: ['entityRefs', 'dump'],
|
|
14
|
+
paramNames: ['entities', 'options'],
|
|
15
|
+
tsParamTypes: [undefined, '{ columns: string[]; filename?: string; separator?: string }'],
|
|
16
|
+
tsReturn: 'string',
|
|
17
|
+
call: (sdk, args) => {
|
|
18
|
+
return sdk.export.csv(args[0], args[1]);
|
|
19
|
+
},
|
|
20
|
+
returns: 'string',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
name: 'json',
|
|
24
|
+
doc: 'Export entities to JSON array',
|
|
25
|
+
args: ['entityRefs', 'dump'],
|
|
26
|
+
paramNames: ['entities', 'columns'],
|
|
27
|
+
tsParamTypes: [undefined, 'string[]'],
|
|
28
|
+
tsReturn: 'Record<string, unknown>[]',
|
|
29
|
+
call: (sdk, args) => {
|
|
30
|
+
return sdk.export.json(args[0], args[1]);
|
|
31
|
+
},
|
|
32
|
+
returns: 'value',
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
name: 'ifc',
|
|
36
|
+
doc: 'Export entities to IFC STEP text. Pass filename to auto-download a valid .ifc file',
|
|
37
|
+
args: ['entityRefs', 'dump'],
|
|
38
|
+
paramNames: ['entities', 'options'],
|
|
39
|
+
tsParamTypes: [undefined, '{ schema?: "IFC2X3" | "IFC4" | "IFC4X3"; filename?: string; includeMutations?: boolean; visibleOnly?: boolean }'],
|
|
40
|
+
tsReturn: 'string | Uint8Array',
|
|
41
|
+
call: (sdk, args) => {
|
|
42
|
+
return sdk.export.ifc(args[0], args[1]);
|
|
43
|
+
},
|
|
44
|
+
returns: 'value',
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
name: 'download',
|
|
48
|
+
doc: 'Trigger a browser file download with the given content. mimeType defaults to text/plain.',
|
|
49
|
+
args: ['string', 'string', 'string'],
|
|
50
|
+
paramNames: ['content', 'filename', 'mimeType'],
|
|
51
|
+
tsParamTypes: [undefined, undefined, 'string | undefined'],
|
|
52
|
+
call: (sdk, args) => {
|
|
53
|
+
sdk.export.download(args[0], args[1], args[2] || 'text/plain');
|
|
54
|
+
},
|
|
55
|
+
returns: 'void',
|
|
56
|
+
},
|
|
57
|
+
],
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=bridge-export.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge-export.js","sourceRoot":"","sources":["../src/bridge-export.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAS/D,MAAM,UAAU,oBAAoB;IAClC,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,GAAG,EAAE,aAAa;QAClB,UAAU,EAAE,QAAQ;QACpB,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,KAAK;gBACX,GAAG,EAAE,+BAA+B;gBACpC,IAAI,EAAE,CAAC,YAAY,EAAE,MAAM,CAAC;gBAC5B,UAAU,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC;gBACnC,YAAY,EAAE,CAAC,SAAS,EAAE,8DAA8D,CAAC;gBACzF,QAAQ,EAAE,QAAQ;gBAClB,IAAI,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;oBAClB,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CACnB,IAAI,CAAC,CAAC,CAAgB,EACtB,IAAI,CAAC,CAAC,CAA8C,CACrD,CAAC;gBACJ,CAAC;gBACD,OAAO,EAAE,QAAQ;aAClB;YACD;gBACE,IAAI,EAAE,MAAM;gBACZ,GAAG,EAAE,+BAA+B;gBACpC,IAAI,EAAE,CAAC,YAAY,EAAE,MAAM,CAAC;gBAC5B,UAAU,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC;gBACnC,YAAY,EAAE,CAAC,SAAS,EAAE,UAAU,CAAC;gBACrC,QAAQ,EAAE,2BAA2B;gBACrC,IAAI,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;oBAClB,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CACpB,IAAI,CAAC,CAAC,CAAgB,EACtB,IAAI,CAAC,CAAC,CAAa,CACpB,CAAC;gBACJ,CAAC;gBACD,OAAO,EAAE,OAAO;aACjB;YACD;gBACE,IAAI,EAAE,KAAK;gBACX,GAAG,EAAE,oFAAoF;gBACzF,IAAI,EAAE,CAAC,YAAY,EAAE,MAAM,CAAC;gBAC5B,UAAU,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC;gBACnC,YAAY,EAAE,CAAC,SAAS,EAAE,iHAAiH,CAAC;gBAC5I,QAAQ,EAAE,qBAAqB;gBAC/B,IAAI,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;oBAClB,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CACnB,IAAI,CAAC,CAAC,CAAgB,EACtB,IAAI,CAAC,CAAC,CAKL,CACF,CAAC;gBACJ,CAAC;gBACD,OAAO,EAAE,OAAO;aACjB;YACD;gBACE,IAAI,EAAE,UAAU;gBAChB,GAAG,EAAE,0FAA0F;gBAC/F,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC;gBACpC,UAAU,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,UAAU,CAAC;gBAC/C,YAAY,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,oBAAoB,CAAC;gBAC1D,IAAI,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;oBAClB,GAAG,CAAC,MAAM,CAAC,QAAQ,CACjB,IAAI,CAAC,CAAC,CAAW,EACjB,IAAI,CAAC,CAAC,CAAW,EAChB,IAAI,CAAC,CAAC,CAAY,IAAI,YAAY,CACpC,CAAC;gBACJ,CAAC;gBACD,OAAO,EAAE,MAAM;aAChB;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge-files.d.ts","sourceRoot":"","sources":["../src/bridge-files.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D,wBAAgB,mBAAmB,IAAI,eAAe,CAmDrD"}
|