@ifc-lite/sandbox 1.7.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.
@@ -0,0 +1,474 @@
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
+ // Helpers
6
+ // ============================================================================
7
+ /**
8
+ * Add PascalCase IFC aliases to entity data for script flexibility.
9
+ * Scripts can use either e.name or e.Name, e.type or e.Type, etc.
10
+ */
11
+ function withAliases(entity) {
12
+ return {
13
+ ref: entity.ref,
14
+ globalId: entity.globalId, GlobalId: entity.globalId,
15
+ name: entity.name, Name: entity.name,
16
+ type: entity.type, Type: entity.type,
17
+ description: entity.description, Description: entity.description,
18
+ objectType: entity.objectType, ObjectType: entity.objectType,
19
+ };
20
+ }
21
+ /**
22
+ * Extract an EntityRef from a dumped entity object.
23
+ * Accepts both { ref: { modelId, expressId } } and { modelId, expressId }.
24
+ */
25
+ function toRef(raw) {
26
+ const obj = raw;
27
+ if (!obj)
28
+ return null;
29
+ if (obj.ref && typeof obj.ref === 'object') {
30
+ const ref = obj.ref;
31
+ if (typeof ref.modelId === 'string' && typeof ref.expressId === 'number') {
32
+ return ref;
33
+ }
34
+ }
35
+ if (typeof obj.modelId === 'string' && typeof obj.expressId === 'number') {
36
+ return obj;
37
+ }
38
+ return null;
39
+ }
40
+ // ============================================================================
41
+ // Schema Definitions
42
+ // ============================================================================
43
+ export const NAMESPACE_SCHEMAS = [
44
+ // ── bim.model ──────────────────────────────────────────────
45
+ {
46
+ name: 'model',
47
+ doc: 'Model operations',
48
+ permission: 'model',
49
+ methods: [
50
+ {
51
+ name: 'list',
52
+ doc: 'List loaded models',
53
+ args: [],
54
+ tsReturn: 'BimModelInfo[]',
55
+ call: (sdk) => sdk.model.list(),
56
+ returns: 'value',
57
+ },
58
+ {
59
+ name: 'active',
60
+ doc: 'Get active model',
61
+ args: [],
62
+ tsReturn: 'BimModelInfo | null',
63
+ call: (sdk) => sdk.model.active(),
64
+ returns: 'value',
65
+ },
66
+ {
67
+ name: 'activeId',
68
+ doc: 'Get active model ID',
69
+ args: [],
70
+ tsReturn: 'string | null',
71
+ call: (sdk) => sdk.model.activeId(),
72
+ returns: 'value',
73
+ },
74
+ ],
75
+ },
76
+ // ── bim.query ─────────────────────────────────────────────
77
+ {
78
+ name: 'query',
79
+ doc: 'Query entities',
80
+ permission: 'query',
81
+ methods: [
82
+ {
83
+ name: 'all',
84
+ doc: 'Get all entities',
85
+ args: [],
86
+ tsReturn: 'BimEntity[]',
87
+ call: (sdk) => {
88
+ return sdk.query().toArray().map(withAliases);
89
+ },
90
+ returns: 'value',
91
+ },
92
+ {
93
+ name: 'byType',
94
+ doc: "Filter by IFC type e.g. 'IfcWall'",
95
+ args: ['...strings'],
96
+ paramNames: ['types'],
97
+ tsReturn: 'BimEntity[]',
98
+ call: (sdk, args) => {
99
+ const types = args[0];
100
+ const builder = sdk.query();
101
+ if (types.length > 0)
102
+ builder.byType(...types);
103
+ return builder.toArray().map(withAliases);
104
+ },
105
+ returns: 'value',
106
+ },
107
+ {
108
+ name: 'entity',
109
+ doc: 'Get entity by model ID and express ID',
110
+ args: ['string', 'number'],
111
+ paramNames: ['modelId', 'expressId'],
112
+ tsReturn: 'BimEntity | null',
113
+ call: (sdk, args) => {
114
+ const modelId = args[0];
115
+ const expressId = args[1];
116
+ const entity = sdk.entity({ modelId, expressId });
117
+ return entity ? withAliases(entity) : null;
118
+ },
119
+ returns: 'value',
120
+ },
121
+ {
122
+ name: 'properties',
123
+ doc: 'Get all IfcPropertySet data for an entity',
124
+ args: ['dump'],
125
+ paramNames: ['entity'],
126
+ tsParamTypes: ['BimEntity'],
127
+ tsReturn: 'BimPropertySet[]',
128
+ call: (sdk, args) => {
129
+ const ref = toRef(args[0]);
130
+ if (!ref)
131
+ return [];
132
+ return sdk.properties(ref);
133
+ },
134
+ returns: 'value',
135
+ },
136
+ {
137
+ name: 'quantities',
138
+ doc: 'Get all IfcElementQuantity data for an entity',
139
+ args: ['dump'],
140
+ paramNames: ['entity'],
141
+ tsParamTypes: ['BimEntity'],
142
+ tsReturn: 'BimQuantitySet[]',
143
+ call: (sdk, args) => {
144
+ const ref = toRef(args[0]);
145
+ if (!ref)
146
+ return [];
147
+ return sdk.quantities(ref);
148
+ },
149
+ returns: 'value',
150
+ },
151
+ ],
152
+ },
153
+ // ── bim.viewer ─────────────────────────────────────────────
154
+ {
155
+ name: 'viewer',
156
+ doc: 'Viewer control',
157
+ permission: 'viewer',
158
+ methods: [
159
+ {
160
+ name: 'colorize',
161
+ doc: "Colorize entities e.g. '#ff0000'",
162
+ args: ['entityRefs', 'string'],
163
+ paramNames: ['entities', 'color'],
164
+ call: (sdk, args) => {
165
+ sdk.viewer.colorize(args[0], args[1]);
166
+ },
167
+ returns: 'void',
168
+ },
169
+ {
170
+ name: 'colorizeAll',
171
+ doc: 'Batch colorize with [{entities, color}]',
172
+ args: ['dump'],
173
+ paramNames: ['batches'],
174
+ tsParamTypes: ['Array<{ entities: BimEntity[]; color: string }>'],
175
+ tsReturn: 'void',
176
+ call: (sdk, args) => {
177
+ // batches: Array<{ entities: EntityData[], color: string }>
178
+ // Extract .ref from entity data objects and pass to SDK
179
+ const raw = args[0];
180
+ const batches = raw.map(b => ({
181
+ refs: b.entities.map(e => e.ref ?? e),
182
+ color: b.color,
183
+ }));
184
+ sdk.viewer.colorizeAll(batches);
185
+ },
186
+ returns: 'void',
187
+ },
188
+ {
189
+ name: 'hide',
190
+ doc: 'Hide entities',
191
+ args: ['entityRefs'],
192
+ paramNames: ['entities'],
193
+ call: (sdk, args) => {
194
+ sdk.viewer.hide(args[0]);
195
+ },
196
+ returns: 'void',
197
+ },
198
+ {
199
+ name: 'show',
200
+ doc: 'Show entities',
201
+ args: ['entityRefs'],
202
+ paramNames: ['entities'],
203
+ call: (sdk, args) => {
204
+ sdk.viewer.show(args[0]);
205
+ },
206
+ returns: 'void',
207
+ },
208
+ {
209
+ name: 'isolate',
210
+ doc: 'Isolate entities',
211
+ args: ['entityRefs'],
212
+ paramNames: ['entities'],
213
+ call: (sdk, args) => {
214
+ sdk.viewer.isolate(args[0]);
215
+ },
216
+ returns: 'void',
217
+ },
218
+ {
219
+ name: 'select',
220
+ doc: 'Select entities',
221
+ args: ['entityRefs'],
222
+ paramNames: ['entities'],
223
+ call: (sdk, args) => {
224
+ sdk.viewer.select(args[0]);
225
+ },
226
+ returns: 'void',
227
+ },
228
+ {
229
+ name: 'flyTo',
230
+ doc: 'Fly camera to entities',
231
+ args: ['entityRefs'],
232
+ paramNames: ['entities'],
233
+ call: (sdk, args) => {
234
+ sdk.viewer.flyTo(args[0]);
235
+ },
236
+ returns: 'void',
237
+ },
238
+ {
239
+ name: 'resetColors',
240
+ doc: 'Reset all colors',
241
+ args: [],
242
+ call: (sdk) => {
243
+ sdk.viewer.resetColors();
244
+ },
245
+ returns: 'void',
246
+ },
247
+ {
248
+ name: 'resetVisibility',
249
+ doc: 'Reset all visibility',
250
+ args: [],
251
+ call: (sdk) => {
252
+ sdk.viewer.resetVisibility();
253
+ },
254
+ returns: 'void',
255
+ },
256
+ ],
257
+ },
258
+ // ── bim.mutate ─────────────────────────────────────────────
259
+ {
260
+ name: 'mutate',
261
+ doc: 'Property editing',
262
+ permission: 'mutate',
263
+ methods: [
264
+ {
265
+ name: 'setProperty',
266
+ doc: 'Set a property value',
267
+ args: ['dump', 'string', 'string', 'dump'],
268
+ paramNames: ['entity', 'psetName', 'propName', 'value'],
269
+ call: (sdk, args) => {
270
+ sdk.mutate.setProperty(args[0], args[1], args[2], args[3]);
271
+ },
272
+ returns: 'void',
273
+ },
274
+ {
275
+ name: 'deleteProperty',
276
+ doc: 'Delete a property',
277
+ args: ['dump', 'string', 'string'],
278
+ paramNames: ['entity', 'psetName', 'propName'],
279
+ call: (sdk, args) => {
280
+ sdk.mutate.deleteProperty(args[0], args[1], args[2]);
281
+ },
282
+ returns: 'void',
283
+ },
284
+ // Note: batch is intentionally omitted — it takes a callback in the SDK
285
+ // but QuickJS cannot marshal functions through vm.dump(). Scripts should
286
+ // use individual setProperty calls instead.
287
+ {
288
+ name: 'undo',
289
+ doc: 'Undo last mutation',
290
+ args: ['string'],
291
+ paramNames: ['modelId'],
292
+ call: (sdk, args) => {
293
+ sdk.mutate.undo(args[0]);
294
+ },
295
+ returns: 'void',
296
+ },
297
+ {
298
+ name: 'redo',
299
+ doc: 'Redo undone mutation',
300
+ args: ['string'],
301
+ paramNames: ['modelId'],
302
+ call: (sdk, args) => {
303
+ sdk.mutate.redo(args[0]);
304
+ },
305
+ returns: 'void',
306
+ },
307
+ ],
308
+ },
309
+ // ── bim.lens ───────────────────────────────────────────────
310
+ {
311
+ name: 'lens',
312
+ doc: 'Lens visualization',
313
+ permission: 'lens',
314
+ methods: [
315
+ {
316
+ name: 'presets',
317
+ doc: 'Get built-in lens presets',
318
+ args: [],
319
+ tsReturn: 'unknown[]',
320
+ call: (sdk) => sdk.lens.presets(),
321
+ returns: 'value',
322
+ },
323
+ ],
324
+ },
325
+ // ── bim.export ─────────────────────────────────────────────
326
+ {
327
+ name: 'export',
328
+ doc: 'Data export',
329
+ permission: 'export',
330
+ methods: [
331
+ {
332
+ name: 'csv',
333
+ doc: 'Export entities to CSV string',
334
+ args: ['entityRefs', 'dump'],
335
+ paramNames: ['entities', 'options'],
336
+ tsParamTypes: [undefined, '{ columns: string[]; filename?: string; separator?: string }'],
337
+ tsReturn: 'string',
338
+ call: (sdk, args) => {
339
+ return sdk.export.csv(args[0], args[1]);
340
+ },
341
+ returns: 'string',
342
+ },
343
+ {
344
+ name: 'json',
345
+ doc: 'Export entities to JSON array',
346
+ args: ['entityRefs', 'dump'],
347
+ paramNames: ['entities', 'columns'],
348
+ tsParamTypes: [undefined, 'string[]'],
349
+ tsReturn: 'Record<string, unknown>[]',
350
+ call: (sdk, args) => {
351
+ return sdk.export.json(args[0], args[1]);
352
+ },
353
+ returns: 'value',
354
+ },
355
+ ],
356
+ },
357
+ ];
358
+ // ============================================================================
359
+ // Generic Builder
360
+ // ============================================================================
361
+ /**
362
+ * Build all schema-defined namespaces on the `bim` handle.
363
+ * Skips namespaces whose permission is disabled.
364
+ */
365
+ export function buildSchemaNamespaces(vm, bimHandle, sdk, permissions) {
366
+ for (const schema of NAMESPACE_SCHEMAS) {
367
+ if (!permissions[schema.permission])
368
+ continue;
369
+ buildNamespace(vm, bimHandle, sdk, schema);
370
+ }
371
+ }
372
+ function buildNamespace(vm, bimHandle, sdk, schema) {
373
+ const nsHandle = vm.newObject();
374
+ for (const method of schema.methods) {
375
+ const fn = vm.newFunction(method.name, (...handles) => {
376
+ // Unmarshal arguments
377
+ const nativeArgs = unmarshalArgs(vm, handles, method.args);
378
+ // Call the SDK
379
+ const result = method.call(sdk, nativeArgs);
380
+ // Marshal return value
381
+ return marshalReturn(vm, result, method.returns);
382
+ });
383
+ vm.setProp(nsHandle, method.name, fn);
384
+ fn.dispose();
385
+ }
386
+ vm.setProp(bimHandle, schema.name, nsHandle);
387
+ nsHandle.dispose();
388
+ }
389
+ /** Unmarshal QuickJS handles to native JS values based on arg schema */
390
+ function unmarshalArgs(vm, handles, argTypes) {
391
+ const result = [];
392
+ for (let i = 0; i < argTypes.length; i++) {
393
+ switch (argTypes[i]) {
394
+ case 'string': {
395
+ const handle = handles[i];
396
+ result.push(handle ? vm.getString(handle) : undefined);
397
+ break;
398
+ }
399
+ case 'number': {
400
+ const handle = handles[i];
401
+ result.push(handle ? vm.getNumber(handle) : undefined);
402
+ break;
403
+ }
404
+ case 'dump': {
405
+ const handle = handles[i];
406
+ result.push(handle ? vm.dump(handle) : undefined);
407
+ break;
408
+ }
409
+ case 'entityRefs': {
410
+ const handle = handles[i];
411
+ if (!handle) {
412
+ result.push([]);
413
+ break;
414
+ }
415
+ const raw = vm.dump(handle);
416
+ result.push(raw.map(r => r.ref ?? r));
417
+ break;
418
+ }
419
+ case '...strings': {
420
+ // Collect all remaining handles as strings
421
+ const rest = [];
422
+ for (let j = i; j < handles.length; j++) {
423
+ if (handles[j])
424
+ rest.push(vm.getString(handles[j]));
425
+ }
426
+ result.push(rest);
427
+ return result; // No more args after rest
428
+ }
429
+ }
430
+ }
431
+ return result;
432
+ }
433
+ /** Marshal a native JS value back to a QuickJS handle */
434
+ function marshalReturn(vm, value, type) {
435
+ switch (type) {
436
+ case 'void':
437
+ return undefined;
438
+ case 'string':
439
+ return typeof value === 'string' ? vm.newString(value) : vm.null;
440
+ case 'value':
441
+ return marshalValue(vm, value);
442
+ }
443
+ }
444
+ /** Recursively convert a native JS value to a QuickJS handle */
445
+ export function marshalValue(vm, value) {
446
+ if (value === null || value === undefined)
447
+ return vm.null;
448
+ if (typeof value === 'string')
449
+ return vm.newString(value);
450
+ if (typeof value === 'number')
451
+ return vm.newNumber(value);
452
+ if (typeof value === 'boolean')
453
+ return value ? vm.true : vm.false;
454
+ if (Array.isArray(value)) {
455
+ const arr = vm.newArray();
456
+ for (let i = 0; i < value.length; i++) {
457
+ const item = marshalValue(vm, value[i]);
458
+ vm.setProp(arr, i, item);
459
+ item.dispose();
460
+ }
461
+ return arr;
462
+ }
463
+ if (typeof value === 'object') {
464
+ const obj = vm.newObject();
465
+ for (const [k, v] of Object.entries(value)) {
466
+ const handle = marshalValue(vm, v);
467
+ vm.setProp(obj, k, handle);
468
+ handle.dispose();
469
+ }
470
+ return obj;
471
+ }
472
+ return vm.null;
473
+ }
474
+ //# sourceMappingURL=bridge-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge-schema.js","sourceRoot":"","sources":["../src/bridge-schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Bridge — exposes the `bim` API object inside the QuickJS sandbox.
3
+ *
4
+ * Architecture (Figma-inspired):
5
+ * - No data lives inside the sandbox
6
+ * - Every `bim.*` call crosses the WASM boundary to the host
7
+ * - Entity objects in the sandbox are plain data { ref, name, type, ... }
8
+ * - Property/quantity access triggers on-demand extraction on the host
9
+ *
10
+ * All namespaces (model, query, viewer, mutate, lens, export) are built
11
+ * from declarative schemas in bridge-schema.ts.
12
+ */
13
+ import type { QuickJSContext } from 'quickjs-emscripten';
14
+ import type { BimContext } from '@ifc-lite/sdk';
15
+ import type { SandboxPermissions, LogEntry } from './types.js';
16
+ /**
17
+ * Build the `bim` API object inside the QuickJS VM.
18
+ * Returns captured log entries from console.* calls.
19
+ */
20
+ export declare function buildBridge(vm: QuickJSContext, sdk: BimContext, permissions?: SandboxPermissions): {
21
+ logs: LogEntry[];
22
+ };
23
+ //# sourceMappingURL=bridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAiB,MAAM,oBAAoB,CAAC;AACxE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAI/D;;;GAGG;AACH,wBAAgB,WAAW,CACzB,EAAE,EAAE,cAAc,EAClB,GAAG,EAAE,UAAU,EACf,WAAW,GAAE,kBAAuB,GACnC;IAAE,IAAI,EAAE,QAAQ,EAAE,CAAA;CAAE,CAiBtB"}
package/dist/bridge.js ADDED
@@ -0,0 +1,37 @@
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 { DEFAULT_PERMISSIONS } from './types.js';
5
+ import { buildSchemaNamespaces } from './bridge-schema.js';
6
+ /**
7
+ * Build the `bim` API object inside the QuickJS VM.
8
+ * Returns captured log entries from console.* calls.
9
+ */
10
+ export function buildBridge(vm, sdk, permissions = {}) {
11
+ const perms = { ...DEFAULT_PERMISSIONS, ...permissions };
12
+ const logs = [];
13
+ // ── console.log / warn / error / info ──────────────────────
14
+ buildConsole(vm, logs);
15
+ // ── bim global ─────────────────────────────────────────────
16
+ const bimHandle = vm.newObject();
17
+ // All namespaces are schema-driven (model, query, viewer, mutate, lens, export)
18
+ buildSchemaNamespaces(vm, bimHandle, sdk, perms);
19
+ vm.setProp(vm.global, 'bim', bimHandle);
20
+ bimHandle.dispose();
21
+ return { logs };
22
+ }
23
+ // ── Console ──────────────────────────────────────────────────
24
+ function buildConsole(vm, logs) {
25
+ const consoleHandle = vm.newObject();
26
+ for (const level of ['log', 'warn', 'error', 'info']) {
27
+ const fn = vm.newFunction(level, (...args) => {
28
+ const nativeArgs = args.map(a => vm.dump(a));
29
+ logs.push({ level, args: nativeArgs, timestamp: Date.now() });
30
+ });
31
+ vm.setProp(consoleHandle, level, fn);
32
+ fn.dispose();
33
+ }
34
+ vm.setProp(vm.global, 'console', consoleHandle);
35
+ consoleHandle.dispose();
36
+ }
37
+ //# sourceMappingURL=bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge.js","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAkB/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAE3D;;;GAGG;AACH,MAAM,UAAU,WAAW,CACzB,EAAkB,EAClB,GAAe,EACf,cAAkC,EAAE;IAEpC,MAAM,KAAK,GAAG,EAAE,GAAG,mBAAmB,EAAE,GAAG,WAAW,EAAkC,CAAC;IACzF,MAAM,IAAI,GAAe,EAAE,CAAC;IAE5B,8DAA8D;IAC9D,YAAY,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAEvB,8DAA8D;IAC9D,MAAM,SAAS,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC;IAEjC,gFAAgF;IAChF,qBAAqB,CAAC,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IAEjD,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IACxC,SAAS,CAAC,OAAO,EAAE,CAAC;IAEpB,OAAO,EAAE,IAAI,EAAE,CAAC;AAClB,CAAC;AAED,gEAAgE;AAEhE,SAAS,YAAY,CAAC,EAAkB,EAAE,IAAgB;IACxD,MAAM,aAAa,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC;IAErC,KAAK,MAAM,KAAK,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAU,EAAE,CAAC;QAC9D,MAAM,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,GAAG,IAAqB,EAAE,EAAE;YAC5D,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7C,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QACrC,EAAE,CAAC,OAAO,EAAE,CAAC;IACf,CAAC;IAED,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;IAChD,aAAa,CAAC,OAAO,EAAE,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * @ifc-lite/sandbox — QuickJS-in-WASM sandboxed script execution
3
+ *
4
+ * Runs user scripts in a secure, isolated environment with only the
5
+ * `bim.*` API exposed. No DOM, no fetch, no network access.
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * import { createSandbox } from '@ifc-lite/sandbox';
10
+ * import { createBimContext } from '@ifc-lite/sdk';
11
+ *
12
+ * const bim = createBimContext({ backend: myBackend });
13
+ * const sandbox = await createSandbox(bim, {
14
+ * permissions: { mutate: true },
15
+ * limits: { timeoutMs: 10_000 },
16
+ * });
17
+ *
18
+ * const result = await sandbox.eval(`
19
+ * const walls = bim.query.byType('IfcWall');
20
+ * console.log('Found', walls.length, 'walls');
21
+ * walls.length;
22
+ * `);
23
+ *
24
+ * console.log(result.value); // number of walls
25
+ * console.log(result.logs); // captured console.log output
26
+ *
27
+ * sandbox.dispose();
28
+ * ```
29
+ */
30
+ export { Sandbox, ScriptError, createSandbox } from './sandbox.js';
31
+ export { buildBridge } from './bridge.js';
32
+ export { NAMESPACE_SCHEMAS, marshalValue } from './bridge-schema.js';
33
+ export type { NamespaceSchema, MethodSchema } from './bridge-schema.js';
34
+ export { transpileTypeScript } from './transpile.js';
35
+ export type { SandboxConfig, SandboxPermissions, SandboxLimits, ScriptResult, LogEntry, } from './types.js';
36
+ export { DEFAULT_PERMISSIONS, DEFAULT_LIMITS, } from './types.js';
37
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACrE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAErD,YAAY,EACV,aAAa,EACb,kBAAkB,EAClB,aAAa,EACb,YAAY,EACZ,QAAQ,GACT,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,mBAAmB,EACnB,cAAc,GACf,MAAM,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,38 @@
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
+ * @ifc-lite/sandbox — QuickJS-in-WASM sandboxed script execution
6
+ *
7
+ * Runs user scripts in a secure, isolated environment with only the
8
+ * `bim.*` API exposed. No DOM, no fetch, no network access.
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * import { createSandbox } from '@ifc-lite/sandbox';
13
+ * import { createBimContext } from '@ifc-lite/sdk';
14
+ *
15
+ * const bim = createBimContext({ backend: myBackend });
16
+ * const sandbox = await createSandbox(bim, {
17
+ * permissions: { mutate: true },
18
+ * limits: { timeoutMs: 10_000 },
19
+ * });
20
+ *
21
+ * const result = await sandbox.eval(`
22
+ * const walls = bim.query.byType('IfcWall');
23
+ * console.log('Found', walls.length, 'walls');
24
+ * walls.length;
25
+ * `);
26
+ *
27
+ * console.log(result.value); // number of walls
28
+ * console.log(result.logs); // captured console.log output
29
+ *
30
+ * sandbox.dispose();
31
+ * ```
32
+ */
33
+ export { Sandbox, ScriptError, createSandbox } from './sandbox.js';
34
+ export { buildBridge } from './bridge.js';
35
+ export { NAMESPACE_SCHEMAS, marshalValue } from './bridge-schema.js';
36
+ export { transpileTypeScript } from './transpile.js';
37
+ export { DEFAULT_PERMISSIONS, DEFAULT_LIMITS, } from './types.js';
38
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAErE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAUrD,OAAO,EACL,mBAAmB,EACnB,cAAc,GACf,MAAM,YAAY,CAAC"}