opengeometry 2.0.17 → 3.0.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/LICENSE.md +373 -0
- package/README.md +187 -128
- package/body-registry-MbAD6Hyq.js +3159 -0
- package/body-registry-MbAD6Hyq.js.map +1 -0
- package/index.d.ts +18 -115
- package/index.js +1170 -11687
- package/index.js.map +1 -1
- package/opengeometry/pkg/opengeometry.d.ts +144 -1304
- package/opengeometry/pkg/opengeometry.js +1316 -5803
- package/opengeometry/pkg/opengeometry_bg.wasm +0 -0
- package/opengeometry/pkg/opengeometry_bg.wasm.d.ts +62 -458
- package/opengeometry_bg.wasm +0 -0
- package/opengeometry_bg.wasm.d.ts +62 -458
- package/package.json +54 -34
- package/src/bodies/body-factory.d.ts +3 -0
- package/src/bodies/body-options.d.ts +19 -0
- package/src/bodies/body-placement.d.ts +10 -0
- package/src/bodies/body-registry.d.ts +3 -0
- package/src/bodies/body.d.ts +71 -0
- package/src/bodies/display-clone.d.ts +10 -0
- package/src/bodies/node-methods.d.ts +30 -0
- package/src/bodies/sheet.d.ts +14 -0
- package/src/bodies/solid.d.ts +23 -0
- package/src/bodies/system-assembly.d.ts +26 -0
- package/src/bodies/wire.d.ts +14 -0
- package/src/constants/index.d.ts +4 -0
- package/src/constants/operations.d.ts +58 -0
- package/src/constants/primitives.d.ts +69 -0
- package/src/constants/regions.d.ts +1 -0
- package/src/constants/transforms.d.ts +4 -0
- package/src/dto/boolean-report.d.ts +24 -0
- package/src/dto/bounds.d.ts +1 -0
- package/src/dto/brep.d.ts +99 -0
- package/src/dto/change-set.d.ts +13 -0
- package/src/dto/creation.d.ts +3 -0
- package/src/dto/display-buffers.d.ts +14 -0
- package/src/dto/events.d.ts +2 -0
- package/src/{export/analytic-ifc.d.ts → dto/ifc-body.d.ts} +16 -18
- package/src/dto/mark-stats.d.ts +4 -0
- package/src/dto/measure.d.ts +16 -0
- package/src/dto/mirror.d.ts +4 -0
- package/src/dto/node-info.d.ts +11 -0
- package/src/dto/pick-result.d.ts +6 -0
- package/src/dto/placement.d.ts +6 -0
- package/src/dto/primitives.d.ts +77 -0
- package/src/dto/regions.d.ts +42 -0
- package/src/dto/step-export.d.ts +42 -0
- package/src/errors.d.ts +20 -0
- package/src/export/export-step.d.ts +10 -0
- package/src/export/ifc-body.d.ts +4 -0
- package/src/kernel/kernel-errors.d.ts +5 -0
- package/src/kernel/kernel-loader.d.ts +5 -0
- package/src/kernel/kernel-session.d.ts +2 -0
- package/src/limits.d.ts +12 -0
- package/src/marks/limbo.d.ts +6 -0
- package/src/marks/og-mark.d.ts +10 -0
- package/src/marks/transaction.d.ts +3 -0
- package/src/opengeometry.d.ts +69 -0
- package/src/operations/offsets.d.ts +5 -0
- package/src/operations/regions.d.ts +4 -0
- package/src/picking/pick-targets.d.ts +6 -0
- package/src/picking/resolve-hit.d.ts +3 -0
- package/src/rendering/deferred.d.ts +7 -0
- package/src/rendering/geometry/geometry-scheduler.d.ts +12 -0
- package/src/rendering/geometry/host-group.d.ts +10 -0
- package/src/rendering/geometry/render-pass.d.ts +8 -0
- package/src/rendering/geometry/settle.d.ts +10 -0
- package/src/rendering/inline-backend.d.ts +14 -0
- package/src/rendering/lod/body-size.d.ts +11 -0
- package/src/rendering/lod/camera-observer.d.ts +2 -0
- package/src/rendering/lod/deflection.d.ts +2 -0
- package/src/rendering/lod/display-bounds.d.ts +4 -0
- package/src/rendering/lod/displayed.d.ts +7 -0
- package/src/rendering/lod/host-drawn.d.ts +5 -0
- package/src/rendering/lod/host-groups.d.ts +28 -0
- package/src/rendering/lod/lod-controller.d.ts +75 -0
- package/src/rendering/lod/screen-metrics.d.ts +2 -0
- package/src/rendering/materials/material-pool.d.ts +12 -0
- package/src/rendering/materials/ref-counted-pool.d.ts +12 -0
- package/src/rendering/provider.d.ts +19 -0
- package/src/rendering/records/geometry-record.d.ts +21 -0
- package/src/rendering/records/record-pool.d.ts +29 -0
- package/src/rendering/records/validate-display-buffers.d.ts +2 -0
- package/src/rendering/tessellation-worker.d.ts +1 -0
- package/src/rendering/worker/job-queue.d.ts +8 -0
- package/src/rendering/worker/message-guards.d.ts +9 -0
- package/src/rendering/worker/snapshot-cache.d.ts +10 -0
- package/src/rendering/worker-backend.d.ts +44 -0
- package/src/rendering/worker-protocol.d.ts +52 -0
- package/src/runtime/create-runtime.d.ts +7 -0
- package/src/runtime/event-bus.d.ts +3 -0
- package/src/runtime/reset.d.ts +1 -0
- package/src/runtime/runtime-state.d.ts +68 -0
- package/src/testing/internals.d.ts +18 -0
- package/src/world-graph/codec.d.ts +45 -0
- package/src/world-graph/world-graph-client.d.ts +13 -0
- package/tessellation-worker.js +634 -0
- package/tessellation-worker.js.map +1 -0
- package/testing.d.ts +1 -0
- package/testing.js +87 -0
- package/testing.js.map +1 -0
- package/analytic-worker.js +0 -90
- package/src/base-types.d.ts +0 -13
- package/src/editor/freeform.d.ts +0 -91
- package/src/editor/index.d.ts +0 -6
- package/src/editor/parametric.d.ts +0 -15
- package/src/editor/types.d.ts +0 -223
- package/src/examples/booleans.d.ts +0 -24
- package/src/examples/editor-modes.d.ts +0 -20
- package/src/examples/index.d.ts +0 -11
- package/src/examples/offset-ring-variable.d.ts +0 -13
- package/src/examples/offset.d.ts +0 -18
- package/src/examples/primitives.d.ts +0 -16
- package/src/examples/ribbon-from-offsets.d.ts +0 -33
- package/src/examples/shapes.d.ts +0 -20
- package/src/examples/sweep.d.ts +0 -9
- package/src/freeform/geometry.d.ts +0 -82
- package/src/freeform/index.d.ts +0 -5
- package/src/freeform/types.d.ts +0 -36
- package/src/markup/spotMarker.d.ts +0 -4
- package/src/operations/analytic-errors.d.ts +0 -8
- package/src/operations/boolean-regions.d.ts +0 -20
- package/src/operations/boolean.d.ts +0 -16
- package/src/operations/editor/freeform.d.ts +0 -1
- package/src/operations/editor/index.d.ts +0 -1
- package/src/operations/editor/parametric.d.ts +0 -1
- package/src/operations/editor/types.d.ts +0 -1
- package/src/operations/extrude.d.ts +0 -9
- package/src/operations/index.d.ts +0 -9
- package/src/operations/loft.d.ts +0 -13
- package/src/operations/offset-regions.d.ts +0 -76
- package/src/primitives/analytic-curve.d.ts +0 -42
- package/src/primitives/arc.d.ts +0 -36
- package/src/primitives/curve.d.ts +0 -64
- package/src/primitives/elliptical_arc.d.ts +0 -38
- package/src/primitives/index.d.ts +0 -9
- package/src/primitives/line.d.ts +0 -77
- package/src/primitives/polyline.d.ts +0 -78
- package/src/primitives/rectangle.d.ts +0 -72
- package/src/rendering/analytic-lod.d.ts +0 -32
- package/src/rendering/analytic-tessellation.d.ts +0 -32
- package/src/shapes/analytic-pattern.d.ts +0 -36
- package/src/shapes/analytic-solid.d.ts +0 -304
- package/src/shapes/cuboid.d.ts +0 -62
- package/src/shapes/cylinder.d.ts +0 -36
- package/src/shapes/index.d.ts +0 -11
- package/src/shapes/opening.d.ts +0 -31
- package/src/shapes/outline-utils.d.ts +0 -35
- package/src/shapes/polygon.d.ts +0 -102
- package/src/shapes/solid.d.ts +0 -108
- package/src/shapes/sphere.d.ts +0 -27
- package/src/shapes/sweep.d.ts +0 -76
- package/src/shapes/wedge.d.ts +0 -75
- package/src/utils/event.d.ts +0 -29
- package/src/utils/randomizer.d.ts +0 -1
- package/src/world/world-graph.d.ts +0 -112
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tessellation-worker.js","sources":["../opengeometry-three/src/kernel/kernel-errors.ts","../opengeometry/pkg/opengeometry.js","../opengeometry-three/src/kernel/kernel-loader.ts","../opengeometry-three/src/errors.ts","../opengeometry-three/src/rendering/records/validate-display-buffers.ts","../opengeometry-three/src/rendering/worker/job-queue.ts","../opengeometry-three/src/rendering/worker/message-guards.ts","../opengeometry-three/src/rendering/worker/snapshot-cache.ts","../opengeometry-three/src/rendering/tessellation-worker.ts"],"sourcesContent":["export function parseKernelError(text: string): { code: string; message: string; details: unknown } | undefined {\n let value: unknown;\n try {\n value = JSON.parse(text);\n } catch {\n return undefined;\n }\n if (typeof value !== 'object' || value === null || !('code' in value) || !('message' in value)) return undefined;\n const { code, message } = value;\n if (typeof code !== 'string' || typeof message !== 'string' || !code || !message) return undefined;\n return { code, message, details: 'details' in value ? value.details : undefined };\n}\n","let wasm;\n\nfunction addToExternrefTable0(obj) {\n const idx = wasm.__externref_table_alloc();\n wasm.__wbindgen_export_2.set(idx, obj);\n return idx;\n}\n\nfunction handleError(f, args) {\n try {\n return f.apply(this, args);\n } catch (e) {\n const idx = addToExternrefTable0(e);\n wasm.__wbindgen_exn_store(idx);\n }\n}\n\nconst cachedTextDecoder = (typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }) : { decode: () => { throw Error('TextDecoder not available') } } );\n\nif (typeof TextDecoder !== 'undefined') { cachedTextDecoder.decode(); };\n\nlet cachedUint8ArrayMemory0 = null;\n\nfunction getUint8ArrayMemory0() {\n if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {\n cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachedUint8ArrayMemory0;\n}\n\nfunction getStringFromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nconst cachedTextEncoder = (typeof TextEncoder !== 'undefined' ? new TextEncoder('utf-8') : { encode: () => { throw Error('TextEncoder not available') } } );\n\nconst encodeString = (typeof cachedTextEncoder.encodeInto === 'function'\n ? function (arg, view) {\n return cachedTextEncoder.encodeInto(arg, view);\n}\n : function (arg, view) {\n const buf = cachedTextEncoder.encode(arg);\n view.set(buf);\n return {\n read: arg.length,\n written: buf.length\n };\n});\n\nfunction passStringToWasm0(arg, malloc, realloc) {\n\n if (realloc === undefined) {\n const buf = cachedTextEncoder.encode(arg);\n const ptr = malloc(buf.length, 1) >>> 0;\n getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf);\n WASM_VECTOR_LEN = buf.length;\n return ptr;\n }\n\n let len = arg.length;\n let ptr = malloc(len, 1) >>> 0;\n\n const mem = getUint8ArrayMemory0();\n\n let offset = 0;\n\n for (; offset < len; offset++) {\n const code = arg.charCodeAt(offset);\n if (code > 0x7F) break;\n mem[ptr + offset] = code;\n }\n\n if (offset !== len) {\n if (offset !== 0) {\n arg = arg.slice(offset);\n }\n ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;\n const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len);\n const ret = encodeString(arg, view);\n\n offset += ret.written;\n ptr = realloc(ptr, len, offset, 1) >>> 0;\n }\n\n WASM_VECTOR_LEN = offset;\n return ptr;\n}\n\nlet cachedDataViewMemory0 = null;\n\nfunction getDataViewMemory0() {\n if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || (cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) {\n cachedDataViewMemory0 = new DataView(wasm.memory.buffer);\n }\n return cachedDataViewMemory0;\n}\n\nfunction isLikeNone(x) {\n return x === undefined || x === null;\n}\n\nfunction takeFromExternrefTable0(idx) {\n const value = wasm.__wbindgen_export_2.get(idx);\n wasm.__externref_table_dealloc(idx);\n return value;\n}\n\nlet cachedFloat64ArrayMemory0 = null;\n\nfunction getFloat64ArrayMemory0() {\n if (cachedFloat64ArrayMemory0 === null || cachedFloat64ArrayMemory0.byteLength === 0) {\n cachedFloat64ArrayMemory0 = new Float64Array(wasm.memory.buffer);\n }\n return cachedFloat64ArrayMemory0;\n}\n\nfunction passArrayF64ToWasm0(arg, malloc) {\n const ptr = malloc(arg.length * 8, 8) >>> 0;\n getFloat64ArrayMemory0().set(arg, ptr / 8);\n WASM_VECTOR_LEN = arg.length;\n return ptr;\n}\n\nfunction passArray8ToWasm0(arg, malloc) {\n const ptr = malloc(arg.length * 1, 1) >>> 0;\n getUint8ArrayMemory0().set(arg, ptr / 1);\n WASM_VECTOR_LEN = arg.length;\n return ptr;\n}\n\nfunction getArrayF64FromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return getFloat64ArrayMemory0().subarray(ptr / 8, ptr / 8 + len);\n}\n\nfunction getArrayU8FromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return getUint8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len);\n}\n\nconst OGTessellatorFinalization = (typeof FinalizationRegistry === 'undefined')\n ? { register: () => {}, unregister: () => {} }\n : new FinalizationRegistry(ptr => wasm.__wbg_ogtessellator_free(ptr >>> 0, 1));\n\nexport class OGTessellator {\n\n __destroy_into_raw() {\n const ptr = this.__wbg_ptr;\n this.__wbg_ptr = 0;\n OGTessellatorFinalization.unregister(this);\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_ogtessellator_free(ptr, 0);\n }\n constructor() {\n const ret = wasm.ogtessellator_new();\n this.__wbg_ptr = ret >>> 0;\n OGTessellatorFinalization.register(this, this.__wbg_ptr, this);\n return this;\n }\n /**\n * @param {Uint8Array} bytes\n * @returns {number}\n */\n load(bytes) {\n const ptr0 = passArray8ToWasm0(bytes, wasm.__wbindgen_malloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.ogtessellator_load(this.__wbg_ptr, ptr0, len0);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return ret[0] >>> 0;\n }\n /**\n * @param {number} slot\n * @param {number} bucket\n * @param {number} max_triangles\n * @param {number | null} [smooth_angle]\n * @returns {any}\n */\n buffers(slot, bucket, max_triangles, smooth_angle) {\n const ret = wasm.ogtessellator_buffers(this.__wbg_ptr, slot, bucket, max_triangles, !isLikeNone(smooth_angle), isLikeNone(smooth_angle) ? 0 : smooth_angle);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {number} slot\n * @returns {boolean}\n */\n drop(slot) {\n const ret = wasm.ogtessellator_drop(this.__wbg_ptr, slot);\n return ret !== 0;\n }\n}\n\nconst OGWorldGraphFinalization = (typeof FinalizationRegistry === 'undefined')\n ? { register: () => {}, unregister: () => {} }\n : new FinalizationRegistry(ptr => wasm.__wbg_ogworldgraph_free(ptr >>> 0, 1));\n\nexport class OGWorldGraph {\n\n __destroy_into_raw() {\n const ptr = this.__wbg_ptr;\n this.__wbg_ptr = 0;\n OGWorldGraphFinalization.unregister(this);\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_ogworldgraph_free(ptr, 0);\n }\n /**\n * @param {string} a_json\n * @param {string} b_json\n * @param {string} operation\n * @returns {string}\n */\n booleanRegions2D(a_json, b_json, operation) {\n let deferred5_0;\n let deferred5_1;\n try {\n const ptr0 = passStringToWasm0(a_json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ptr1 = passStringToWasm0(b_json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n const ptr2 = passStringToWasm0(operation, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len2 = WASM_VECTOR_LEN;\n const ret = wasm.ogworldgraph_booleanRegions2D(this.__wbg_ptr, ptr0, len0, ptr1, len1, ptr2, len2);\n var ptr4 = ret[0];\n var len4 = ret[1];\n if (ret[3]) {\n ptr4 = 0; len4 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred5_0 = ptr4;\n deferred5_1 = len4;\n return getStringFromWasm0(ptr4, len4);\n } finally {\n wasm.__wbindgen_free(deferred5_0, deferred5_1, 1);\n }\n }\n /**\n * @param {string} a_json\n * @param {string} b_json\n * @param {string} operation\n * @returns {string}\n */\n booleanCurvedRegions2D(a_json, b_json, operation) {\n let deferred5_0;\n let deferred5_1;\n try {\n const ptr0 = passStringToWasm0(a_json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ptr1 = passStringToWasm0(b_json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n const ptr2 = passStringToWasm0(operation, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len2 = WASM_VECTOR_LEN;\n const ret = wasm.ogworldgraph_booleanCurvedRegions2D(this.__wbg_ptr, ptr0, len0, ptr1, len1, ptr2, len2);\n var ptr4 = ret[0];\n var len4 = ret[1];\n if (ret[3]) {\n ptr4 = 0; len4 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred5_0 = ptr4;\n deferred5_1 = len4;\n return getStringFromWasm0(ptr4, len4);\n } finally {\n wasm.__wbindgen_free(deferred5_0, deferred5_1, 1);\n }\n }\n /**\n * @param {string} region_json\n * @param {number} distance\n * @returns {string}\n */\n insetCurvedRegion2D(region_json, distance) {\n let deferred3_0;\n let deferred3_1;\n try {\n const ptr0 = passStringToWasm0(region_json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.ogworldgraph_insetCurvedRegion2D(this.__wbg_ptr, ptr0, len0, distance);\n var ptr2 = ret[0];\n var len2 = ret[1];\n if (ret[3]) {\n ptr2 = 0; len2 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred3_0 = ptr2;\n deferred3_1 = len2;\n return getStringFromWasm0(ptr2, len2);\n } finally {\n wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);\n }\n }\n /**\n * @param {Float64Array} ring\n * @param {Float64Array} distances\n * @param {string} holes_json\n * @returns {string}\n */\n offsetRingVariable(ring, distances, holes_json) {\n let deferred5_0;\n let deferred5_1;\n try {\n const ptr0 = passArrayF64ToWasm0(ring, wasm.__wbindgen_malloc);\n const len0 = WASM_VECTOR_LEN;\n const ptr1 = passArrayF64ToWasm0(distances, wasm.__wbindgen_malloc);\n const len1 = WASM_VECTOR_LEN;\n const ptr2 = passStringToWasm0(holes_json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len2 = WASM_VECTOR_LEN;\n const ret = wasm.ogworldgraph_offsetRingVariable(this.__wbg_ptr, ptr0, len0, ptr1, len1, ptr2, len2);\n var ptr4 = ret[0];\n var len4 = ret[1];\n if (ret[3]) {\n ptr4 = 0; len4 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred5_0 = ptr4;\n deferred5_1 = len4;\n return getStringFromWasm0(ptr4, len4);\n } finally {\n wasm.__wbindgen_free(deferred5_0, deferred5_1, 1);\n }\n }\n /**\n * @param {string} region_json\n * @param {Float64Array} distances\n * @param {string} hole_distances_json\n * @returns {string}\n */\n offsetCurvedRingVariable(region_json, distances, hole_distances_json) {\n let deferred5_0;\n let deferred5_1;\n try {\n const ptr0 = passStringToWasm0(region_json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ptr1 = passArrayF64ToWasm0(distances, wasm.__wbindgen_malloc);\n const len1 = WASM_VECTOR_LEN;\n const ptr2 = passStringToWasm0(hole_distances_json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len2 = WASM_VECTOR_LEN;\n const ret = wasm.ogworldgraph_offsetCurvedRingVariable(this.__wbg_ptr, ptr0, len0, ptr1, len1, ptr2, len2);\n var ptr4 = ret[0];\n var len4 = ret[1];\n if (ret[3]) {\n ptr4 = 0; len4 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred5_0 = ptr4;\n deferred5_1 = len4;\n return getStringFromWasm0(ptr4, len4);\n } finally {\n wasm.__wbindgen_free(deferred5_0, deferred5_1, 1);\n }\n }\n /**\n * @param {Float64Array} path\n * @param {number} width\n * @param {boolean} closed\n * @param {number} miter_limit\n * @returns {string}\n */\n offsetPolylineRegions(path, width, closed, miter_limit) {\n let deferred3_0;\n let deferred3_1;\n try {\n const ptr0 = passArrayF64ToWasm0(path, wasm.__wbindgen_malloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.ogworldgraph_offsetPolylineRegions(this.__wbg_ptr, ptr0, len0, width, closed, miter_limit);\n var ptr2 = ret[0];\n var len2 = ret[1];\n if (ret[3]) {\n ptr2 = 0; len2 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred3_0 = ptr2;\n deferred3_1 = len2;\n return getStringFromWasm0(ptr2, len2);\n } finally {\n wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);\n }\n }\n /**\n * @param {Float64Array} path\n * @param {number} distance\n * @param {boolean | null | undefined} closed\n * @param {boolean} bevel\n * @param {number} acute_threshold_degrees\n * @returns {string}\n */\n offsetPolyline(path, distance, closed, bevel, acute_threshold_degrees) {\n let deferred3_0;\n let deferred3_1;\n try {\n const ptr0 = passArrayF64ToWasm0(path, wasm.__wbindgen_malloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.ogworldgraph_offsetPolyline(this.__wbg_ptr, ptr0, len0, distance, isLikeNone(closed) ? 0xFFFFFF : closed ? 1 : 0, bevel, acute_threshold_degrees);\n var ptr2 = ret[0];\n var len2 = ret[1];\n if (ret[3]) {\n ptr2 = 0; len2 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred3_0 = ptr2;\n deferred3_1 = len2;\n return getStringFromWasm0(ptr2, len2);\n } finally {\n wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);\n }\n }\n /**\n * @param {string} primitive_json\n * @param {string} options_json\n * @returns {string}\n */\n createPrimitive(primitive_json, options_json) {\n let deferred4_0;\n let deferred4_1;\n try {\n const ptr0 = passStringToWasm0(primitive_json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ptr1 = passStringToWasm0(options_json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n const ret = wasm.ogworldgraph_createPrimitive(this.__wbg_ptr, ptr0, len0, ptr1, len1);\n var ptr3 = ret[0];\n var len3 = ret[1];\n if (ret[3]) {\n ptr3 = 0; len3 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred4_0 = ptr3;\n deferred4_1 = len3;\n return getStringFromWasm0(ptr3, len3);\n } finally {\n wasm.__wbindgen_free(deferred4_0, deferred4_1, 1);\n }\n }\n /**\n * @param {Float64Array} points\n * @param {boolean} closed\n * @param {string} options_json\n * @returns {string}\n */\n createPolyline(points, closed, options_json) {\n let deferred4_0;\n let deferred4_1;\n try {\n const ptr0 = passArrayF64ToWasm0(points, wasm.__wbindgen_malloc);\n const len0 = WASM_VECTOR_LEN;\n const ptr1 = passStringToWasm0(options_json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n const ret = wasm.ogworldgraph_createPolyline(this.__wbg_ptr, ptr0, len0, closed, ptr1, len1);\n var ptr3 = ret[0];\n var len3 = ret[1];\n if (ret[3]) {\n ptr3 = 0; len3 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred4_0 = ptr3;\n deferred4_1 = len3;\n return getStringFromWasm0(ptr3, len3);\n } finally {\n wasm.__wbindgen_free(deferred4_0, deferred4_1, 1);\n }\n }\n /**\n * @param {string} operation_json\n * @param {string} options_json\n * @returns {string}\n */\n createOperation(operation_json, options_json) {\n let deferred4_0;\n let deferred4_1;\n try {\n const ptr0 = passStringToWasm0(operation_json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ptr1 = passStringToWasm0(options_json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n const ret = wasm.ogworldgraph_createOperation(this.__wbg_ptr, ptr0, len0, ptr1, len1);\n var ptr3 = ret[0];\n var len3 = ret[1];\n if (ret[3]) {\n ptr3 = 0; len3 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred4_0 = ptr3;\n deferred4_1 = len3;\n return getStringFromWasm0(ptr3, len3);\n } finally {\n wasm.__wbindgen_free(deferred4_0, deferred4_1, 1);\n }\n }\n /**\n * @param {string} options_json\n * @returns {string}\n */\n createSystemAssembly(options_json) {\n let deferred3_0;\n let deferred3_1;\n try {\n const ptr0 = passStringToWasm0(options_json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.ogworldgraph_createSystemAssembly(this.__wbg_ptr, ptr0, len0);\n var ptr2 = ret[0];\n var len2 = ret[1];\n if (ret[3]) {\n ptr2 = 0; len2 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred3_0 = ptr2;\n deferred3_1 = len2;\n return getStringFromWasm0(ptr2, len2);\n } finally {\n wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);\n }\n }\n /**\n * @param {string} nodes_json\n * @param {string} options_json\n * @returns {any}\n */\n exportStep(nodes_json, options_json) {\n const ptr0 = passStringToWasm0(nodes_json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ptr1 = passStringToWasm0(options_json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n const ret = wasm.ogworldgraph_exportStep(this.__wbg_ptr, ptr0, len0, ptr1, len1);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {string} og_id\n * @returns {string}\n */\n node(og_id) {\n let deferred3_0;\n let deferred3_1;\n try {\n const ptr0 = passStringToWasm0(og_id, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.ogworldgraph_node(this.__wbg_ptr, ptr0, len0);\n var ptr2 = ret[0];\n var len2 = ret[1];\n if (ret[3]) {\n ptr2 = 0; len2 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred3_0 = ptr2;\n deferred3_1 = len2;\n return getStringFromWasm0(ptr2, len2);\n } finally {\n wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);\n }\n }\n /**\n * @param {number} handle\n * @param {number} generation\n * @returns {string}\n */\n nodeByHandle(handle, generation) {\n let deferred2_0;\n let deferred2_1;\n try {\n const ret = wasm.ogworldgraph_nodeByHandle(this.__wbg_ptr, handle, generation);\n var ptr1 = ret[0];\n var len1 = ret[1];\n if (ret[3]) {\n ptr1 = 0; len1 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred2_0 = ptr1;\n deferred2_1 = len1;\n return getStringFromWasm0(ptr1, len1);\n } finally {\n wasm.__wbindgen_free(deferred2_0, deferred2_1, 1);\n }\n }\n /**\n * @param {string} og_id\n * @returns {string}\n */\n children(og_id) {\n let deferred3_0;\n let deferred3_1;\n try {\n const ptr0 = passStringToWasm0(og_id, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.ogworldgraph_children(this.__wbg_ptr, ptr0, len0);\n var ptr2 = ret[0];\n var len2 = ret[1];\n if (ret[3]) {\n ptr2 = 0; len2 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred3_0 = ptr2;\n deferred3_1 = len2;\n return getStringFromWasm0(ptr2, len2);\n } finally {\n wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);\n }\n }\n /**\n * @param {string} og_id\n * @returns {string}\n */\n parent(og_id) {\n let deferred3_0;\n let deferred3_1;\n try {\n const ptr0 = passStringToWasm0(og_id, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.ogworldgraph_parent(this.__wbg_ptr, ptr0, len0);\n var ptr2 = ret[0];\n var len2 = ret[1];\n if (ret[3]) {\n ptr2 = 0; len2 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred3_0 = ptr2;\n deferred3_1 = len2;\n return getStringFromWasm0(ptr2, len2);\n } finally {\n wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);\n }\n }\n /**\n * @param {string} parent\n * @param {string} children_json\n * @param {boolean} keep_world\n * @returns {string}\n */\n addChild(parent, children_json, keep_world) {\n let deferred4_0;\n let deferred4_1;\n try {\n const ptr0 = passStringToWasm0(parent, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ptr1 = passStringToWasm0(children_json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n const ret = wasm.ogworldgraph_addChild(this.__wbg_ptr, ptr0, len0, ptr1, len1, keep_world);\n var ptr3 = ret[0];\n var len3 = ret[1];\n if (ret[3]) {\n ptr3 = 0; len3 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred4_0 = ptr3;\n deferred4_1 = len3;\n return getStringFromWasm0(ptr3, len3);\n } finally {\n wasm.__wbindgen_free(deferred4_0, deferred4_1, 1);\n }\n }\n /**\n * @param {string} parent\n * @param {string} child\n * @param {boolean} keep_world\n * @returns {string}\n */\n removeChild(parent, child, keep_world) {\n let deferred4_0;\n let deferred4_1;\n try {\n const ptr0 = passStringToWasm0(parent, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ptr1 = passStringToWasm0(child, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n const ret = wasm.ogworldgraph_removeChild(this.__wbg_ptr, ptr0, len0, ptr1, len1, keep_world);\n var ptr3 = ret[0];\n var len3 = ret[1];\n if (ret[3]) {\n ptr3 = 0; len3 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred4_0 = ptr3;\n deferred4_1 = len3;\n return getStringFromWasm0(ptr3, len3);\n } finally {\n wasm.__wbindgen_free(deferred4_0, deferred4_1, 1);\n }\n }\n /**\n * @param {string} source\n * @param {string} options_json\n * @returns {string}\n */\n instance(source, options_json) {\n let deferred4_0;\n let deferred4_1;\n try {\n const ptr0 = passStringToWasm0(source, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ptr1 = passStringToWasm0(options_json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n const ret = wasm.ogworldgraph_instance(this.__wbg_ptr, ptr0, len0, ptr1, len1);\n var ptr3 = ret[0];\n var len3 = ret[1];\n if (ret[3]) {\n ptr3 = 0; len3 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred4_0 = ptr3;\n deferred4_1 = len3;\n return getStringFromWasm0(ptr3, len3);\n } finally {\n wasm.__wbindgen_free(deferred4_0, deferred4_1, 1);\n }\n }\n /**\n * @param {string} source\n * @param {string} options_json\n * @returns {string}\n */\n duplicate(source, options_json) {\n let deferred4_0;\n let deferred4_1;\n try {\n const ptr0 = passStringToWasm0(source, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ptr1 = passStringToWasm0(options_json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n const ret = wasm.ogworldgraph_duplicate(this.__wbg_ptr, ptr0, len0, ptr1, len1);\n var ptr3 = ret[0];\n var len3 = ret[1];\n if (ret[3]) {\n ptr3 = 0; len3 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred4_0 = ptr3;\n deferred4_1 = len3;\n return getStringFromWasm0(ptr3, len3);\n } finally {\n wasm.__wbindgen_free(deferred4_0, deferred4_1, 1);\n }\n }\n /**\n * @param {string} og_id\n * @returns {string}\n */\n makeUnique(og_id) {\n let deferred3_0;\n let deferred3_1;\n try {\n const ptr0 = passStringToWasm0(og_id, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.ogworldgraph_makeUnique(this.__wbg_ptr, ptr0, len0);\n var ptr2 = ret[0];\n var len2 = ret[1];\n if (ret[3]) {\n ptr2 = 0; len2 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred3_0 = ptr2;\n deferred3_1 = len2;\n return getStringFromWasm0(ptr2, len2);\n } finally {\n wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);\n }\n }\n /**\n * @param {string} og_id\n * @returns {number}\n */\n instanceCount(og_id) {\n const ptr0 = passStringToWasm0(og_id, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.ogworldgraph_instanceCount(this.__wbg_ptr, ptr0, len0);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return ret[0] >>> 0;\n }\n /**\n * @param {string} og_id\n * @returns {string}\n */\n dispose(og_id) {\n let deferred3_0;\n let deferred3_1;\n try {\n const ptr0 = passStringToWasm0(og_id, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.ogworldgraph_dispose(this.__wbg_ptr, ptr0, len0);\n var ptr2 = ret[0];\n var len2 = ret[1];\n if (ret[3]) {\n ptr2 = 0; len2 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred3_0 = ptr2;\n deferred3_1 = len2;\n return getStringFromWasm0(ptr2, len2);\n } finally {\n wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);\n }\n }\n /**\n * @param {string} og_id\n * @returns {string}\n */\n exportIfcBody(og_id) {\n let deferred3_0;\n let deferred3_1;\n try {\n const ptr0 = passStringToWasm0(og_id, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.ogworldgraph_exportIfcBody(this.__wbg_ptr, ptr0, len0);\n var ptr2 = ret[0];\n var len2 = ret[1];\n if (ret[3]) {\n ptr2 = 0; len2 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred3_0 = ptr2;\n deferred3_1 = len2;\n return getStringFromWasm0(ptr2, len2);\n } finally {\n wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);\n }\n }\n /**\n * @returns {number}\n */\n mark() {\n const ret = wasm.ogworldgraph_mark(this.__wbg_ptr);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return ret[0] >>> 0;\n }\n /**\n * @param {number} slot\n * @returns {string}\n */\n rollback(slot) {\n let deferred2_0;\n let deferred2_1;\n try {\n const ret = wasm.ogworldgraph_rollback(this.__wbg_ptr, slot);\n var ptr1 = ret[0];\n var len1 = ret[1];\n if (ret[3]) {\n ptr1 = 0; len1 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred2_0 = ptr1;\n deferred2_1 = len1;\n return getStringFromWasm0(ptr1, len1);\n } finally {\n wasm.__wbindgen_free(deferred2_0, deferred2_1, 1);\n }\n }\n /**\n * @param {number} slot\n */\n release(slot) {\n const ret = wasm.ogworldgraph_release(this.__wbg_ptr, slot);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * @returns {string}\n */\n markStats() {\n let deferred2_0;\n let deferred2_1;\n try {\n const ret = wasm.ogworldgraph_markStats(this.__wbg_ptr);\n var ptr1 = ret[0];\n var len1 = ret[1];\n if (ret[3]) {\n ptr1 = 0; len1 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred2_0 = ptr1;\n deferred2_1 = len1;\n return getStringFromWasm0(ptr1, len1);\n } finally {\n wasm.__wbindgen_free(deferred2_0, deferred2_1, 1);\n }\n }\n /**\n * @param {bigint} revision\n * @returns {any}\n */\n changesSince(revision) {\n const ret = wasm.ogworldgraph_changesSince(this.__wbg_ptr, revision);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {string} og_id\n * @param {string} operation_json\n * @param {string} tools_json\n * @param {string} scope_json\n * @returns {string}\n */\n operate(og_id, operation_json, tools_json, scope_json) {\n let deferred6_0;\n let deferred6_1;\n try {\n const ptr0 = passStringToWasm0(og_id, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ptr1 = passStringToWasm0(operation_json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n const ptr2 = passStringToWasm0(tools_json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len2 = WASM_VECTOR_LEN;\n const ptr3 = passStringToWasm0(scope_json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len3 = WASM_VECTOR_LEN;\n const ret = wasm.ogworldgraph_operate(this.__wbg_ptr, ptr0, len0, ptr1, len1, ptr2, len2, ptr3, len3);\n var ptr5 = ret[0];\n var len5 = ret[1];\n if (ret[3]) {\n ptr5 = 0; len5 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred6_0 = ptr5;\n deferred6_1 = len5;\n return getStringFromWasm0(ptr5, len5);\n } finally {\n wasm.__wbindgen_free(deferred6_0, deferred6_1, 1);\n }\n }\n /**\n * @param {string} og_id\n * @param {number} thickness\n * @param {string} scope_json\n * @returns {string}\n */\n shell(og_id, thickness, scope_json) {\n let deferred4_0;\n let deferred4_1;\n try {\n const ptr0 = passStringToWasm0(og_id, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ptr1 = passStringToWasm0(scope_json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n const ret = wasm.ogworldgraph_shell(this.__wbg_ptr, ptr0, len0, thickness, ptr1, len1);\n var ptr3 = ret[0];\n var len3 = ret[1];\n if (ret[3]) {\n ptr3 = 0; len3 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred4_0 = ptr3;\n deferred4_1 = len3;\n return getStringFromWasm0(ptr3, len3);\n } finally {\n wasm.__wbindgen_free(deferred4_0, deferred4_1, 1);\n }\n }\n /**\n * @param {string} og_id\n * @param {string} plane_json\n * @param {string} scope_json\n * @returns {string}\n */\n mirror(og_id, plane_json, scope_json) {\n let deferred5_0;\n let deferred5_1;\n try {\n const ptr0 = passStringToWasm0(og_id, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ptr1 = passStringToWasm0(plane_json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n const ptr2 = passStringToWasm0(scope_json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len2 = WASM_VECTOR_LEN;\n const ret = wasm.ogworldgraph_mirror(this.__wbg_ptr, ptr0, len0, ptr1, len1, ptr2, len2);\n var ptr4 = ret[0];\n var len4 = ret[1];\n if (ret[3]) {\n ptr4 = 0; len4 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred5_0 = ptr4;\n deferred5_1 = len4;\n return getStringFromWasm0(ptr4, len4);\n } finally {\n wasm.__wbindgen_free(deferred5_0, deferred5_1, 1);\n }\n }\n /**\n * @param {string} og_id\n * @param {string} transform_json\n * @returns {string}\n */\n transform(og_id, transform_json) {\n let deferred4_0;\n let deferred4_1;\n try {\n const ptr0 = passStringToWasm0(og_id, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ptr1 = passStringToWasm0(transform_json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n const ret = wasm.ogworldgraph_transform(this.__wbg_ptr, ptr0, len0, ptr1, len1);\n var ptr3 = ret[0];\n var len3 = ret[1];\n if (ret[3]) {\n ptr3 = 0; len3 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred4_0 = ptr3;\n deferred4_1 = len3;\n return getStringFromWasm0(ptr3, len3);\n } finally {\n wasm.__wbindgen_free(deferred4_0, deferred4_1, 1);\n }\n }\n /**\n * @param {string} og_id\n * @returns {string}\n */\n placement(og_id) {\n let deferred3_0;\n let deferred3_1;\n try {\n const ptr0 = passStringToWasm0(og_id, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.ogworldgraph_placement(this.__wbg_ptr, ptr0, len0);\n var ptr2 = ret[0];\n var len2 = ret[1];\n if (ret[3]) {\n ptr2 = 0; len2 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred3_0 = ptr2;\n deferred3_1 = len2;\n return getStringFromWasm0(ptr2, len2);\n } finally {\n wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);\n }\n }\n /**\n * @param {string} og_id\n * @returns {string}\n */\n worldPlacement(og_id) {\n let deferred3_0;\n let deferred3_1;\n try {\n const ptr0 = passStringToWasm0(og_id, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.ogworldgraph_worldPlacement(this.__wbg_ptr, ptr0, len0);\n var ptr2 = ret[0];\n var len2 = ret[1];\n if (ret[3]) {\n ptr2 = 0; len2 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred3_0 = ptr2;\n deferred3_1 = len2;\n return getStringFromWasm0(ptr2, len2);\n } finally {\n wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);\n }\n }\n /**\n * @param {string} og_id\n * @returns {Float64Array}\n */\n worldMatrix(og_id) {\n const ptr0 = passStringToWasm0(og_id, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.ogworldgraph_worldMatrix(this.__wbg_ptr, ptr0, len0);\n if (ret[3]) {\n throw takeFromExternrefTable0(ret[2]);\n }\n var v2 = getArrayF64FromWasm0(ret[0], ret[1]).slice();\n wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);\n return v2;\n }\n /**\n * @param {string} og_id\n * @returns {string}\n */\n bounds(og_id) {\n let deferred3_0;\n let deferred3_1;\n try {\n const ptr0 = passStringToWasm0(og_id, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.ogworldgraph_bounds(this.__wbg_ptr, ptr0, len0);\n var ptr2 = ret[0];\n var len2 = ret[1];\n if (ret[3]) {\n ptr2 = 0; len2 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred3_0 = ptr2;\n deferred3_1 = len2;\n return getStringFromWasm0(ptr2, len2);\n } finally {\n wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);\n }\n }\n /**\n * @param {string} og_id\n * @returns {string}\n */\n localBounds(og_id) {\n let deferred3_0;\n let deferred3_1;\n try {\n const ptr0 = passStringToWasm0(og_id, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.ogworldgraph_localBounds(this.__wbg_ptr, ptr0, len0);\n var ptr2 = ret[0];\n var len2 = ret[1];\n if (ret[3]) {\n ptr2 = 0; len2 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred3_0 = ptr2;\n deferred3_1 = len2;\n return getStringFromWasm0(ptr2, len2);\n } finally {\n wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);\n }\n }\n /**\n * @param {string} og_id\n * @param {string} primitive_json\n * @param {string} scope_json\n * @returns {string}\n */\n rebuildPrimitive(og_id, primitive_json, scope_json) {\n let deferred5_0;\n let deferred5_1;\n try {\n const ptr0 = passStringToWasm0(og_id, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ptr1 = passStringToWasm0(primitive_json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n const ptr2 = passStringToWasm0(scope_json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len2 = WASM_VECTOR_LEN;\n const ret = wasm.ogworldgraph_rebuildPrimitive(this.__wbg_ptr, ptr0, len0, ptr1, len1, ptr2, len2);\n var ptr4 = ret[0];\n var len4 = ret[1];\n if (ret[3]) {\n ptr4 = 0; len4 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred5_0 = ptr4;\n deferred5_1 = len4;\n return getStringFromWasm0(ptr4, len4);\n } finally {\n wasm.__wbindgen_free(deferred5_0, deferred5_1, 1);\n }\n }\n /**\n * @param {string} og_id\n * @param {Float64Array} points\n * @param {boolean} closed\n * @param {string} scope_json\n * @returns {string}\n */\n rebuildPolyline(og_id, points, closed, scope_json) {\n let deferred5_0;\n let deferred5_1;\n try {\n const ptr0 = passStringToWasm0(og_id, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ptr1 = passArrayF64ToWasm0(points, wasm.__wbindgen_malloc);\n const len1 = WASM_VECTOR_LEN;\n const ptr2 = passStringToWasm0(scope_json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len2 = WASM_VECTOR_LEN;\n const ret = wasm.ogworldgraph_rebuildPolyline(this.__wbg_ptr, ptr0, len0, ptr1, len1, closed, ptr2, len2);\n var ptr4 = ret[0];\n var len4 = ret[1];\n if (ret[3]) {\n ptr4 = 0; len4 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred5_0 = ptr4;\n deferred5_1 = len4;\n return getStringFromWasm0(ptr4, len4);\n } finally {\n wasm.__wbindgen_free(deferred5_0, deferred5_1, 1);\n }\n }\n /**\n * @param {string} og_id\n * @param {string} operation_json\n * @param {string} scope_json\n * @returns {string}\n */\n rebuildOperation(og_id, operation_json, scope_json) {\n let deferred5_0;\n let deferred5_1;\n try {\n const ptr0 = passStringToWasm0(og_id, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ptr1 = passStringToWasm0(operation_json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n const ptr2 = passStringToWasm0(scope_json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len2 = WASM_VECTOR_LEN;\n const ret = wasm.ogworldgraph_rebuildOperation(this.__wbg_ptr, ptr0, len0, ptr1, len1, ptr2, len2);\n var ptr4 = ret[0];\n var len4 = ret[1];\n if (ret[3]) {\n ptr4 = 0; len4 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred5_0 = ptr4;\n deferred5_1 = len4;\n return getStringFromWasm0(ptr4, len4);\n } finally {\n wasm.__wbindgen_free(deferred5_0, deferred5_1, 1);\n }\n }\n /**\n * @returns {bigint}\n */\n revision() {\n const ret = wasm.ogworldgraph_revision(this.__wbg_ptr);\n return BigInt.asUintN(64, ret);\n }\n /**\n * @param {string} og_id\n * @returns {string}\n */\n brep(og_id) {\n let deferred3_0;\n let deferred3_1;\n try {\n const ptr0 = passStringToWasm0(og_id, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.ogworldgraph_brep(this.__wbg_ptr, ptr0, len0);\n var ptr2 = ret[0];\n var len2 = ret[1];\n if (ret[3]) {\n ptr2 = 0; len2 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred3_0 = ptr2;\n deferred3_1 = len2;\n return getStringFromWasm0(ptr2, len2);\n } finally {\n wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);\n }\n }\n /**\n * @param {string} og_id\n * @returns {string}\n */\n worldBrep(og_id) {\n let deferred3_0;\n let deferred3_1;\n try {\n const ptr0 = passStringToWasm0(og_id, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.ogworldgraph_worldBrep(this.__wbg_ptr, ptr0, len0);\n var ptr2 = ret[0];\n var len2 = ret[1];\n if (ret[3]) {\n ptr2 = 0; len2 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred3_0 = ptr2;\n deferred3_1 = len2;\n return getStringFromWasm0(ptr2, len2);\n } finally {\n wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);\n }\n }\n /**\n * @param {string} og_id\n * @param {number} face_id\n * @param {Float64Array} point\n * @returns {Float64Array}\n */\n faceNormalAt(og_id, face_id, point) {\n const ptr0 = passStringToWasm0(og_id, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ptr1 = passArrayF64ToWasm0(point, wasm.__wbindgen_malloc);\n const len1 = WASM_VECTOR_LEN;\n const ret = wasm.ogworldgraph_faceNormalAt(this.__wbg_ptr, ptr0, len0, face_id, ptr1, len1);\n if (ret[3]) {\n throw takeFromExternrefTable0(ret[2]);\n }\n var v3 = getArrayF64FromWasm0(ret[0], ret[1]).slice();\n wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);\n return v3;\n }\n /**\n * @param {string} og_id\n * @param {Float64Array} point\n * @returns {string}\n */\n classifyPoint(og_id, point) {\n let deferred4_0;\n let deferred4_1;\n try {\n const ptr0 = passStringToWasm0(og_id, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ptr1 = passArrayF64ToWasm0(point, wasm.__wbindgen_malloc);\n const len1 = WASM_VECTOR_LEN;\n const ret = wasm.ogworldgraph_classifyPoint(this.__wbg_ptr, ptr0, len0, ptr1, len1);\n var ptr3 = ret[0];\n var len3 = ret[1];\n if (ret[3]) {\n ptr3 = 0; len3 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred4_0 = ptr3;\n deferred4_1 = len3;\n return getStringFromWasm0(ptr3, len3);\n } finally {\n wasm.__wbindgen_free(deferred4_0, deferred4_1, 1);\n }\n }\n /**\n * @param {string} og_id\n * @param {number | null} [deflection]\n * @returns {Float64Array}\n */\n measure(og_id, deflection) {\n const ptr0 = passStringToWasm0(og_id, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.ogworldgraph_measure(this.__wbg_ptr, ptr0, len0, !isLikeNone(deflection), isLikeNone(deflection) ? 0 : deflection);\n if (ret[3]) {\n throw takeFromExternrefTable0(ret[2]);\n }\n var v2 = getArrayF64FromWasm0(ret[0], ret[1]).slice();\n wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);\n return v2;\n }\n /**\n * @param {string} og_id\n * @returns {any}\n */\n validity(og_id) {\n const ptr0 = passStringToWasm0(og_id, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.ogworldgraph_validity(this.__wbg_ptr, ptr0, len0);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {string} og_id\n * @returns {string}\n */\n report(og_id) {\n let deferred3_0;\n let deferred3_1;\n try {\n const ptr0 = passStringToWasm0(og_id, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.ogworldgraph_report(this.__wbg_ptr, ptr0, len0);\n var ptr2 = ret[0];\n var len2 = ret[1];\n if (ret[3]) {\n ptr2 = 0; len2 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred3_0 = ptr2;\n deferred3_1 = len2;\n return getStringFromWasm0(ptr2, len2);\n } finally {\n wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);\n }\n }\n /**\n * @param {string} og_id\n * @returns {string}\n */\n edgeKeys(og_id) {\n let deferred3_0;\n let deferred3_1;\n try {\n const ptr0 = passStringToWasm0(og_id, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.ogworldgraph_edgeKeys(this.__wbg_ptr, ptr0, len0);\n var ptr2 = ret[0];\n var len2 = ret[1];\n if (ret[3]) {\n ptr2 = 0; len2 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred3_0 = ptr2;\n deferred3_1 = len2;\n return getStringFromWasm0(ptr2, len2);\n } finally {\n wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);\n }\n }\n /**\n * @param {string} og_id\n * @returns {string}\n */\n displayBuckets(og_id) {\n let deferred3_0;\n let deferred3_1;\n try {\n const ptr0 = passStringToWasm0(og_id, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.ogworldgraph_displayBuckets(this.__wbg_ptr, ptr0, len0);\n var ptr2 = ret[0];\n var len2 = ret[1];\n if (ret[3]) {\n ptr2 = 0; len2 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred3_0 = ptr2;\n deferred3_1 = len2;\n return getStringFromWasm0(ptr2, len2);\n } finally {\n wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);\n }\n }\n /**\n * @param {string} shape_id\n * @returns {Uint8Array}\n */\n snapshot(shape_id) {\n const ptr0 = passStringToWasm0(shape_id, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.ogworldgraph_snapshot(this.__wbg_ptr, ptr0, len0);\n if (ret[3]) {\n throw takeFromExternrefTable0(ret[2]);\n }\n var v2 = getArrayU8FromWasm0(ret[0], ret[1]).slice();\n wasm.__wbindgen_free(ret[0], ret[1] * 1, 1);\n return v2;\n }\n /**\n * @param {string} shape_id\n * @param {number} bucket\n * @param {number} max_triangles\n * @param {number | null} [smooth_angle]\n * @returns {any}\n */\n buffers(shape_id, bucket, max_triangles, smooth_angle) {\n const ptr0 = passStringToWasm0(shape_id, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.ogworldgraph_buffers(this.__wbg_ptr, ptr0, len0, bucket, max_triangles, !isLikeNone(smooth_angle), isLikeNone(smooth_angle) ? 0 : smooth_angle);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {string} accuracy_json\n */\n constructor(accuracy_json) {\n const ptr0 = passStringToWasm0(accuracy_json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.ogworldgraph_new(ptr0, len0);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n this.__wbg_ptr = ret[0] >>> 0;\n OGWorldGraphFinalization.register(this, this.__wbg_ptr, this);\n return this;\n }\n}\n\nasync function __wbg_load(module, imports) {\n if (typeof Response === 'function' && module instanceof Response) {\n if (typeof WebAssembly.instantiateStreaming === 'function') {\n try {\n return await WebAssembly.instantiateStreaming(module, imports);\n\n } catch (e) {\n if (module.headers.get('Content-Type') != 'application/wasm') {\n console.warn(\"`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n\", e);\n\n } else {\n throw e;\n }\n }\n }\n\n const bytes = await module.arrayBuffer();\n return await WebAssembly.instantiate(bytes, imports);\n\n } else {\n const instance = await WebAssembly.instantiate(module, imports);\n\n if (instance instanceof WebAssembly.Instance) {\n return { instance, module };\n\n } else {\n return instance;\n }\n }\n}\n\nfunction __wbg_get_imports() {\n const imports = {};\n imports.wbg = {};\n imports.wbg.__wbg_buffer_609cc3eee51ed158 = function(arg0) {\n const ret = arg0.buffer;\n return ret;\n };\n imports.wbg.__wbg_call_672a4d21634d4a24 = function() { return handleError(function (arg0, arg1) {\n const ret = arg0.call(arg1);\n return ret;\n }, arguments) };\n imports.wbg.__wbg_error_7534b8e9a36f1ab4 = function(arg0, arg1) {\n let deferred0_0;\n let deferred0_1;\n try {\n deferred0_0 = arg0;\n deferred0_1 = arg1;\n console.error(getStringFromWasm0(arg0, arg1));\n } finally {\n wasm.__wbindgen_free(deferred0_0, deferred0_1, 1);\n }\n };\n imports.wbg.__wbg_new_405e22f390576ce2 = function() {\n const ret = new Object();\n return ret;\n };\n imports.wbg.__wbg_new_780abee5c1739fd7 = function(arg0) {\n const ret = new Float32Array(arg0);\n return ret;\n };\n imports.wbg.__wbg_new_78c8a92080461d08 = function(arg0) {\n const ret = new Float64Array(arg0);\n return ret;\n };\n imports.wbg.__wbg_new_8a6f238a6ece86ea = function() {\n const ret = new Error();\n return ret;\n };\n imports.wbg.__wbg_new_a12002a7f91c75be = function(arg0) {\n const ret = new Uint8Array(arg0);\n return ret;\n };\n imports.wbg.__wbg_new_e3b321dcfef89fc7 = function(arg0) {\n const ret = new Uint32Array(arg0);\n return ret;\n };\n imports.wbg.__wbg_newnoargs_105ed471475aaf50 = function(arg0, arg1) {\n const ret = new Function(getStringFromWasm0(arg0, arg1));\n return ret;\n };\n imports.wbg.__wbg_newwithbyteoffsetandlength_93c8e0c1a479fa1a = function(arg0, arg1, arg2) {\n const ret = new Float64Array(arg0, arg1 >>> 0, arg2 >>> 0);\n return ret;\n };\n imports.wbg.__wbg_newwithbyteoffsetandlength_d97e637ebe145a9a = function(arg0, arg1, arg2) {\n const ret = new Uint8Array(arg0, arg1 >>> 0, arg2 >>> 0);\n return ret;\n };\n imports.wbg.__wbg_newwithbyteoffsetandlength_e6b7e69acd4c7354 = function(arg0, arg1, arg2) {\n const ret = new Float32Array(arg0, arg1 >>> 0, arg2 >>> 0);\n return ret;\n };\n imports.wbg.__wbg_newwithbyteoffsetandlength_f1dead44d1fc7212 = function(arg0, arg1, arg2) {\n const ret = new Uint32Array(arg0, arg1 >>> 0, arg2 >>> 0);\n return ret;\n };\n imports.wbg.__wbg_set_bb8cecf6a62b9f46 = function() { return handleError(function (arg0, arg1, arg2) {\n const ret = Reflect.set(arg0, arg1, arg2);\n return ret;\n }, arguments) };\n imports.wbg.__wbg_stack_0ed75d68575b0f3c = function(arg0, arg1) {\n const ret = arg1.stack;\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n };\n imports.wbg.__wbg_static_accessor_GLOBAL_88a902d13a557d07 = function() {\n const ret = typeof global === 'undefined' ? null : global;\n return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);\n };\n imports.wbg.__wbg_static_accessor_GLOBAL_THIS_56578be7e9f832b0 = function() {\n const ret = typeof globalThis === 'undefined' ? null : globalThis;\n return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);\n };\n imports.wbg.__wbg_static_accessor_SELF_37c5d418e4bf5819 = function() {\n const ret = typeof self === 'undefined' ? null : self;\n return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);\n };\n imports.wbg.__wbg_static_accessor_WINDOW_5de37043a91a9c40 = function() {\n const ret = typeof window === 'undefined' ? null : window;\n return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);\n };\n imports.wbg.__wbindgen_init_externref_table = function() {\n const table = wasm.__wbindgen_export_2;\n const offset = table.grow(4);\n table.set(0, undefined);\n table.set(offset + 0, undefined);\n table.set(offset + 1, null);\n table.set(offset + 2, true);\n table.set(offset + 3, false);\n ;\n };\n imports.wbg.__wbindgen_is_undefined = function(arg0) {\n const ret = arg0 === undefined;\n return ret;\n };\n imports.wbg.__wbindgen_memory = function() {\n const ret = wasm.memory;\n return ret;\n };\n imports.wbg.__wbindgen_number_new = function(arg0) {\n const ret = arg0;\n return ret;\n };\n imports.wbg.__wbindgen_string_new = function(arg0, arg1) {\n const ret = getStringFromWasm0(arg0, arg1);\n return ret;\n };\n imports.wbg.__wbindgen_throw = function(arg0, arg1) {\n throw new Error(getStringFromWasm0(arg0, arg1));\n };\n\n return imports;\n}\n\nfunction __wbg_init_memory(imports, memory) {\n\n}\n\nfunction __wbg_finalize_init(instance, module) {\n wasm = instance.exports;\n __wbg_init.__wbindgen_wasm_module = module;\n cachedDataViewMemory0 = null;\n cachedFloat64ArrayMemory0 = null;\n cachedUint8ArrayMemory0 = null;\n\n\n wasm.__wbindgen_start();\n return wasm;\n}\n\nfunction initSync(module) {\n if (wasm !== undefined) return wasm;\n\n\n if (typeof module !== 'undefined') {\n if (Object.getPrototypeOf(module) === Object.prototype) {\n ({module} = module)\n } else {\n console.warn('using deprecated parameters for `initSync()`; pass a single object instead')\n }\n }\n\n const imports = __wbg_get_imports();\n\n __wbg_init_memory(imports);\n\n if (!(module instanceof WebAssembly.Module)) {\n module = new WebAssembly.Module(module);\n }\n\n const instance = new WebAssembly.Instance(module, imports);\n\n return __wbg_finalize_init(instance, module);\n}\n\nasync function __wbg_init(module_or_path) {\n if (wasm !== undefined) return wasm;\n\n\n if (typeof module_or_path !== 'undefined') {\n if (Object.getPrototypeOf(module_or_path) === Object.prototype) {\n ({module_or_path} = module_or_path)\n } else {\n console.warn('using deprecated parameters for the initialization function; pass a single object instead')\n }\n }\n\n if (typeof module_or_path === 'undefined') {\n module_or_path = new URL('opengeometry_bg.wasm', import.meta.url);\n }\n const imports = __wbg_get_imports();\n\n if (typeof module_or_path === 'string' || (typeof Request === 'function' && module_or_path instanceof Request) || (typeof URL === 'function' && module_or_path instanceof URL)) {\n module_or_path = fetch(module_or_path);\n }\n\n __wbg_init_memory(imports);\n\n const { instance, module } = await __wbg_load(await module_or_path, imports);\n\n return __wbg_finalize_init(instance, module);\n}\n\nexport { initSync };\nexport default __wbg_init;\n","import initializeKernel, {\n initSync, OGTessellator, OGWorldGraph, type InitOutput,\n} from '../../../opengeometry/pkg/opengeometry.js';\n\nexport { initializeKernel, initSync, OGTessellator, OGWorldGraph };\n\nexport function compileKernel(wasmURL: string | URL): Promise<WebAssembly.Module> {\n return WebAssembly.compileStreaming(fetch(wasmURL));\n}\n\nexport function initKernel(module: WebAssembly.Module): Promise<InitOutput> {\n return initializeKernel({ module_or_path: module });\n}\n\nexport function takePanicMessage(): string | undefined {\n const message: unknown = Reflect.get(globalThis, '__opengeometryPanic');\n Reflect.deleteProperty(globalThis, '__opengeometryPanic');\n return typeof message === 'string' ? message : undefined;\n}\n","import type { OperateErrorDetails } from './dto/boolean-report';\n\nexport type ErrorDetails = Partial<OperateErrorDetails> & Record<string, unknown>;\n\nfunction isDetails(value: unknown): value is ErrorDetails {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nexport class OGError extends Error {\n readonly code: string;\n readonly call: string;\n readonly details: ErrorDetails;\n\n constructor(code: string, call: string, message: string, details: unknown = {}) {\n super(message);\n this.name = 'OGError';\n this.code = code;\n this.call = call;\n this.details = isDetails(details) ? details : {};\n }\n\n toJSON(): { code: string; call: string; message: string; details: unknown } {\n return { code: this.code, call: this.call, message: this.message, details: this.details };\n }\n\n static fromJSON(value: { code: string; call: string; message: string; details?: unknown }): OGError {\n return new OGError(value.code, value.call, value.message, value.details);\n }\n}\n","import type { DisplayBuffers } from '../../dto/display-buffers';\nimport { OGError } from '../../errors';\n\nconst SCALARS = ['revision', 'bucket', 'achievedDeflection', 'triangles'] as const;\n\nexport function validateDisplayBuffers(value: unknown): DisplayBuffers {\n if (!isDisplayBuffers(value) || !hasConsistentLengths(value)) {\n throw new OGError('WorkerFailure', 'tessellation', 'invalid display buffer structure');\n }\n return value;\n}\n\nfunction isDisplayBuffers(value: unknown): value is DisplayBuffers {\n if (typeof value !== 'object' || value === null) return false;\n const field = (key: string): unknown => Reflect.get(value, key);\n return field('positions') instanceof Float32Array && field('normals') instanceof Float32Array\n && field('indices') instanceof Uint32Array && field('faceRanges') instanceof Uint32Array\n && field('outline') instanceof Float32Array && field('edgeIds') instanceof Uint32Array\n && field('smoothEdges') instanceof Uint8Array\n && field('origin') instanceof Float64Array && SCALARS.every((key) => typeof field(key) === 'number');\n}\n\nfunction hasConsistentLengths(buffers: DisplayBuffers): boolean {\n return buffers.origin.length === 3 && buffers.positions.length % 3 === 0\n && buffers.normals.length === buffers.positions.length\n && buffers.indices.length % 3 === 0 && buffers.indices.length <= 6_000_000\n && buffers.outline.length % 6 === 0 && buffers.outline.length <= 12_000_000\n && buffers.edgeIds.length === buffers.outline.length / 6 && buffers.faceRanges.length % 3 === 0;\n}\n","import type { TessellateMessage } from '../worker-protocol';\n\nexport class JobQueue {\n private readonly jobs = new Map<string, TessellateMessage>();\n\n get size(): number {\n return this.jobs.size;\n }\n\n push(job: TessellateMessage): number | undefined {\n const previous = this.jobs.get(job.shapeId);\n this.jobs.set(job.shapeId, job);\n return previous?.request;\n }\n\n cancel(shapeId: string, generation: number): number | undefined {\n const previous = this.jobs.get(shapeId);\n if (!previous || previous.generation > generation) return undefined;\n this.jobs.delete(shapeId);\n return previous.request;\n }\n\n next(): TessellateMessage | undefined {\n const next = [...this.jobs.values()].sort((a, b) => a.priority - b.priority)[0];\n if (next) this.jobs.delete(next.shapeId);\n return next;\n }\n}\n","import type { WorkerMessage } from '../worker-protocol';\n\nexport type GuardFailure = { request: number | undefined; error: { code: 'InvalidParameter'; message: string } };\n\ntype Check = (value: unknown) => boolean;\n\nconst KINDS = ['init', 'snapshot', 'tessellate', 'cancel', 'drop'] as const;\n\nexport function parseWorkerMessage(data: unknown): WorkerMessage | GuardFailure {\n if (isWorkerMessage(data)) return data;\n const message = problemOf(data) ?? 'invalid worker message';\n return { request: requestOf(data), error: { code: 'InvalidParameter', message } };\n}\n\nfunction isWorkerMessage(data: unknown): data is WorkerMessage {\n return problemOf(data) === undefined;\n}\n\nfunction problemOf(data: unknown): string | undefined {\n if (typeof data !== 'object' || data === null) return 'worker message is not an object';\n const kind: unknown = Reflect.get(data, 'kind');\n const known = KINDS.find((name) => name === kind);\n if (known === undefined) return `worker message field kind has unknown value ${String(kind)}`;\n const checks = fieldChecks(known);\n const extra = Object.keys(data).find((key) => !Object.hasOwn(checks, key));\n if (extra !== undefined) return `unknown worker message field ${extra}`;\n const invalid = Object.entries(checks).find(([key, check]) => !check(Reflect.get(data, key)));\n return invalid === undefined ? undefined : `worker message field ${invalid[0]} is missing or invalid`;\n}\n\nfunction fieldChecks(kind: (typeof KINDS)[number]): Record<string, Check> {\n switch (kind) {\n case 'init':\n return { kind: isKind, request: (value) => value === 0, module: (value) => value instanceof WebAssembly.Module };\n case 'snapshot':\n return {\n kind: isKind, request: isFiniteNumber, shapeId: isShapeId, revision: isFiniteNumber,\n bytes: (value) => value instanceof Uint8Array,\n };\n case 'tessellate':\n return {\n kind: isKind, request: isFiniteNumber, shapeId: isShapeId, revision: isFiniteNumber, bucket: isFiniteNumber,\n priority: isFiniteNumber, maxTriangles: isFiniteNumber, generation: isFiniteNumber, smoothAngle: isSmoothAngle,\n };\n case 'cancel':\n return { kind: isKind, shapeId: isShapeId, generation: isFiniteNumber };\n case 'drop':\n return { kind: isKind, shapeId: isShapeId, revision: isFiniteNumber };\n }\n}\n\nfunction requestOf(data: unknown): number | undefined {\n const request: unknown = typeof data === 'object' && data !== null ? Reflect.get(data, 'request') : undefined;\n return isFiniteNumber(request) ? request : undefined;\n}\n\nfunction isSmoothAngle(value: unknown): boolean {\n return value === undefined || (isFiniteNumber(value) && value >= 0 && value < 90);\n}\n\nfunction isKind(): boolean {\n return true;\n}\n\nfunction isFiniteNumber(value: unknown): value is number {\n return typeof value === 'number' && Number.isFinite(value);\n}\n\nfunction isShapeId(value: unknown): boolean {\n return typeof value === 'string' && value.length > 0;\n}\n","import type { OGTessellator } from '../../kernel/kernel-loader';\n\ntype Slot = { slot: number; bytes: number; lastUse: number };\n\nexport class SnapshotCache {\n private readonly entries = new Map<string, Slot>();\n private totalBytes = 0;\n private clock = 0;\n\n load(key: string, bytes: Uint8Array, tessellator: OGTessellator): void {\n this.drop(key, tessellator);\n const slot = tessellator.load(bytes);\n this.entries.set(key, { slot, bytes: bytes.byteLength, lastUse: ++this.clock });\n this.totalBytes += bytes.byteLength;\n }\n\n drop(key: string, tessellator: OGTessellator): void {\n const old = this.entries.get(key);\n if (!old) return;\n tessellator.drop(old.slot);\n this.entries.delete(key);\n this.totalBytes -= old.bytes;\n }\n\n touch(key: string): number | undefined {\n const entry = this.entries.get(key);\n if (!entry) return undefined;\n entry.lastUse = ++this.clock;\n return entry.slot;\n }\n\n evict(except: string, tessellator: OGTessellator): string[] {\n const evicted: string[] = [];\n while (this.totalBytes > 128 * 1024 * 1024) {\n const oldest = [...this.entries.entries()]\n .filter(([key]) => key !== except)\n .sort((a, b) => a[1].lastUse - b[1].lastUse)[0];\n if (!oldest) break;\n this.drop(oldest[0], tessellator);\n evicted.push(oldest[0]);\n }\n return evicted;\n }\n}\n","import { parseKernelError } from '../kernel/kernel-errors';\nimport { initSync, OGTessellator, takePanicMessage } from '../kernel/kernel-loader';\nimport { validateDisplayBuffers } from './records/validate-display-buffers';\nimport { JobQueue } from './worker/job-queue';\nimport { parseWorkerMessage } from './worker/message-guards';\nimport { SnapshotCache } from './worker/snapshot-cache';\nimport type { TessellateMessage, WorkerError, WorkerMessage, WorkerReply } from './worker-protocol';\n\nlet tessellator: OGTessellator | undefined;\nlet scheduled = false;\nconst SNAPSHOTS = new SnapshotCache();\nconst JOBS = new JobQueue();\nconst CHANNEL = new MessageChannel();\n\nfunction error(value: unknown): WorkerError {\n if (value instanceof WebAssembly.RuntimeError) {\n return { code: 'KernelPanic', message: takePanicMessage() ?? value.message, details: {} };\n }\n const parsed = typeof value === 'string' ? parseKernelError(value) : undefined;\n return parsed ?? { code: 'WorkerFailure', message: String(value), details: {} };\n}\n\nfunction reply(message: WorkerReply, transfer: Transferable[] = []): void {\n self.postMessage(message, transfer);\n}\n\nfunction postEvicted(key: string): void {\n const at = key.lastIndexOf('@');\n reply({ kind: 'evicted', shapeId: key.slice(0, at), revision: Number(key.slice(at + 1)) });\n}\n\nfunction answerSuperseded(request: number | undefined): void {\n if (request !== undefined) reply({ request, superseded: true });\n}\n\nfunction schedule(): void {\n if (scheduled || JOBS.size === 0) return;\n scheduled = true;\n CHANNEL.port2.postMessage(null);\n}\n\nfunction run(job: TessellateMessage): void {\n const slot = SNAPSHOTS.touch(`${job.shapeId}@${String(job.revision)}`);\n if (slot === undefined || !tessellator) {\n reply({ request: job.request, missingSnapshot: true });\n return;\n }\n try {\n const angle = job.smoothAngle;\n const buffers = validateDisplayBuffers(tessellator.buffers(slot, job.bucket, job.maxTriangles, angle));\n reply({ request: job.request, ok: true, buffers }, [\n buffers.positions.buffer, buffers.normals.buffer, buffers.indices.buffer,\n buffers.faceRanges.buffer, buffers.outline.buffer, buffers.edgeIds.buffer, buffers.smoothEdges.buffer,\n buffers.origin.buffer,\n ]);\n } catch (cause) {\n reply({ request: job.request, error: error(cause) });\n }\n}\n\nCHANNEL.port1.onmessage = () => {\n scheduled = false;\n const next = JOBS.next();\n if (!next) return;\n run(next);\n schedule();\n};\n\nfunction init(module: WebAssembly.Module): void {\n initSync({ module });\n tessellator = new OGTessellator();\n reply({ request: 0, ok: true });\n}\n\nfunction handle(message: Exclude<WorkerMessage, { kind: 'init' }>, loaded: OGTessellator): void {\n switch (message.kind) {\n case 'snapshot': {\n const key = `${message.shapeId}@${String(message.revision)}`;\n SNAPSHOTS.load(key, message.bytes, loaded);\n for (const evicted of SNAPSHOTS.evict(key, loaded)) postEvicted(evicted);\n reply({ request: message.request, ok: true });\n break;\n }\n case 'tessellate':\n answerSuperseded(JOBS.push(message));\n schedule();\n break;\n case 'cancel':\n answerSuperseded(JOBS.cancel(message.shapeId, message.generation));\n break;\n case 'drop':\n SNAPSHOTS.drop(`${message.shapeId}@${String(message.revision)}`, loaded);\n break;\n }\n}\n\nself.onmessage = (event: MessageEvent<unknown>) => {\n const message = parseWorkerMessage(event.data);\n const request = 'request' in message ? message.request : undefined;\n try {\n if ('error' in message) reply(message);\n else if (message.kind === 'init') init(message.module);\n else if (tessellator) handle(message, tessellator);\n else reply({ request, error: { code: 'WorkerFailure', message: 'tessellation worker is not initialised' } });\n } catch (cause) {\n reply({ request, error: error(cause) });\n }\n};\n"],"names":[],"mappings":"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"}
|
package/testing.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './src/testing/internals.js';
|
package/testing.js
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { r as runtime, ad as isDisplayed, al as forceNextBucket, Z as WorkerBackend, O as OGError } from './body-registry-MbAD6Hyq.js';
|
|
2
|
+
export { E as currentRuntime, a1 as emit, am as ensureGeometry, h as flush, w as graph, ac as noteDisplayed, aa as register, ai as unregister, ae as wanted, an as wantedBucket } from './body-registry-MbAD6Hyq.js';
|
|
3
|
+
import 'three';
|
|
4
|
+
|
|
5
|
+
const KINDS = ['init', 'snapshot', 'tessellate', 'cancel', 'drop'];
|
|
6
|
+
function parseWorkerMessage(data) {
|
|
7
|
+
if (isWorkerMessage(data))
|
|
8
|
+
return data;
|
|
9
|
+
const message = problemOf(data) ?? 'invalid worker message';
|
|
10
|
+
return { request: requestOf(data), error: { code: 'InvalidParameter', message } };
|
|
11
|
+
}
|
|
12
|
+
function isWorkerMessage(data) {
|
|
13
|
+
return problemOf(data) === undefined;
|
|
14
|
+
}
|
|
15
|
+
function problemOf(data) {
|
|
16
|
+
if (typeof data !== 'object' || data === null)
|
|
17
|
+
return 'worker message is not an object';
|
|
18
|
+
const kind = Reflect.get(data, 'kind');
|
|
19
|
+
const known = KINDS.find((name) => name === kind);
|
|
20
|
+
if (known === undefined)
|
|
21
|
+
return `worker message field kind has unknown value ${String(kind)}`;
|
|
22
|
+
const checks = fieldChecks(known);
|
|
23
|
+
const extra = Object.keys(data).find((key) => !Object.hasOwn(checks, key));
|
|
24
|
+
if (extra !== undefined)
|
|
25
|
+
return `unknown worker message field ${extra}`;
|
|
26
|
+
const invalid = Object.entries(checks).find(([key, check]) => !check(Reflect.get(data, key)));
|
|
27
|
+
return invalid === undefined ? undefined : `worker message field ${invalid[0]} is missing or invalid`;
|
|
28
|
+
}
|
|
29
|
+
function fieldChecks(kind) {
|
|
30
|
+
switch (kind) {
|
|
31
|
+
case 'init':
|
|
32
|
+
return { kind: isKind, request: (value) => value === 0, module: (value) => value instanceof WebAssembly.Module };
|
|
33
|
+
case 'snapshot':
|
|
34
|
+
return {
|
|
35
|
+
kind: isKind, request: isFiniteNumber, shapeId: isShapeId, revision: isFiniteNumber,
|
|
36
|
+
bytes: (value) => value instanceof Uint8Array,
|
|
37
|
+
};
|
|
38
|
+
case 'tessellate':
|
|
39
|
+
return {
|
|
40
|
+
kind: isKind, request: isFiniteNumber, shapeId: isShapeId, revision: isFiniteNumber, bucket: isFiniteNumber,
|
|
41
|
+
priority: isFiniteNumber, maxTriangles: isFiniteNumber, generation: isFiniteNumber, smoothAngle: isSmoothAngle,
|
|
42
|
+
};
|
|
43
|
+
case 'cancel':
|
|
44
|
+
return { kind: isKind, shapeId: isShapeId, generation: isFiniteNumber };
|
|
45
|
+
case 'drop':
|
|
46
|
+
return { kind: isKind, shapeId: isShapeId, revision: isFiniteNumber };
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
function requestOf(data) {
|
|
50
|
+
const request = typeof data === 'object' && data !== null ? Reflect.get(data, 'request') : undefined;
|
|
51
|
+
return isFiniteNumber(request) ? request : undefined;
|
|
52
|
+
}
|
|
53
|
+
function isSmoothAngle(value) {
|
|
54
|
+
return value === undefined || (isFiniteNumber(value) && value >= 0 && value < 90);
|
|
55
|
+
}
|
|
56
|
+
function isKind() {
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
function isFiniteNumber(value) {
|
|
60
|
+
return typeof value === 'number' && Number.isFinite(value);
|
|
61
|
+
}
|
|
62
|
+
function isShapeId(value) {
|
|
63
|
+
return typeof value === 'string' && value.length > 0;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function activeBackend() { return runtime().provider.activeBackend; }
|
|
67
|
+
function flushCount() { return runtime().flushes; }
|
|
68
|
+
function displayed(body) { return isDisplayed(runtime(), body); }
|
|
69
|
+
function pinWantedBucket(shapeId, bucket) { forceNextBucket(runtime(), shapeId, bucket); }
|
|
70
|
+
function workerSendLog() {
|
|
71
|
+
const provider = runtime().provider;
|
|
72
|
+
return provider instanceof WorkerBackend ? [...provider.sendLog] : [];
|
|
73
|
+
}
|
|
74
|
+
function postToWorker(message, options = {}) {
|
|
75
|
+
const provider = runtime().provider;
|
|
76
|
+
const worker = provider instanceof WorkerBackend ? provider.worker : undefined;
|
|
77
|
+
if (!worker)
|
|
78
|
+
return Promise.reject(new OGError('WorkerFailure', 'testing', 'no live worker'));
|
|
79
|
+
const crashed = options.awaitCrash
|
|
80
|
+
? new Promise((resolve) => { worker.addEventListener('error', () => { resolve(); }, { once: true }); })
|
|
81
|
+
: Promise.resolve();
|
|
82
|
+
worker.postMessage(message);
|
|
83
|
+
return crashed;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export { activeBackend, displayed, flushCount, parseWorkerMessage, pinWantedBucket, postToWorker, runtime, workerSendLog };
|
|
87
|
+
//# sourceMappingURL=testing.js.map
|
package/testing.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testing.js","sources":["../opengeometry-three/src/rendering/worker/message-guards.ts","../opengeometry-three/src/testing/internals.ts"],"sourcesContent":["import type { WorkerMessage } from '../worker-protocol';\n\nexport type GuardFailure = { request: number | undefined; error: { code: 'InvalidParameter'; message: string } };\n\ntype Check = (value: unknown) => boolean;\n\nconst KINDS = ['init', 'snapshot', 'tessellate', 'cancel', 'drop'] as const;\n\nexport function parseWorkerMessage(data: unknown): WorkerMessage | GuardFailure {\n if (isWorkerMessage(data)) return data;\n const message = problemOf(data) ?? 'invalid worker message';\n return { request: requestOf(data), error: { code: 'InvalidParameter', message } };\n}\n\nfunction isWorkerMessage(data: unknown): data is WorkerMessage {\n return problemOf(data) === undefined;\n}\n\nfunction problemOf(data: unknown): string | undefined {\n if (typeof data !== 'object' || data === null) return 'worker message is not an object';\n const kind: unknown = Reflect.get(data, 'kind');\n const known = KINDS.find((name) => name === kind);\n if (known === undefined) return `worker message field kind has unknown value ${String(kind)}`;\n const checks = fieldChecks(known);\n const extra = Object.keys(data).find((key) => !Object.hasOwn(checks, key));\n if (extra !== undefined) return `unknown worker message field ${extra}`;\n const invalid = Object.entries(checks).find(([key, check]) => !check(Reflect.get(data, key)));\n return invalid === undefined ? undefined : `worker message field ${invalid[0]} is missing or invalid`;\n}\n\nfunction fieldChecks(kind: (typeof KINDS)[number]): Record<string, Check> {\n switch (kind) {\n case 'init':\n return { kind: isKind, request: (value) => value === 0, module: (value) => value instanceof WebAssembly.Module };\n case 'snapshot':\n return {\n kind: isKind, request: isFiniteNumber, shapeId: isShapeId, revision: isFiniteNumber,\n bytes: (value) => value instanceof Uint8Array,\n };\n case 'tessellate':\n return {\n kind: isKind, request: isFiniteNumber, shapeId: isShapeId, revision: isFiniteNumber, bucket: isFiniteNumber,\n priority: isFiniteNumber, maxTriangles: isFiniteNumber, generation: isFiniteNumber, smoothAngle: isSmoothAngle,\n };\n case 'cancel':\n return { kind: isKind, shapeId: isShapeId, generation: isFiniteNumber };\n case 'drop':\n return { kind: isKind, shapeId: isShapeId, revision: isFiniteNumber };\n }\n}\n\nfunction requestOf(data: unknown): number | undefined {\n const request: unknown = typeof data === 'object' && data !== null ? Reflect.get(data, 'request') : undefined;\n return isFiniteNumber(request) ? request : undefined;\n}\n\nfunction isSmoothAngle(value: unknown): boolean {\n return value === undefined || (isFiniteNumber(value) && value >= 0 && value < 90);\n}\n\nfunction isKind(): boolean {\n return true;\n}\n\nfunction isFiniteNumber(value: unknown): value is number {\n return typeof value === 'number' && Number.isFinite(value);\n}\n\nfunction isShapeId(value: unknown): boolean {\n return typeof value === 'string' && value.length > 0;\n}\n","import { OGError } from '../errors';\nimport type { Body } from '../bodies/body';\nimport { isDisplayed } from '../rendering/lod/displayed';\nimport { forceNextBucket } from '../rendering/lod/lod-controller';\nimport { WorkerBackend, type WorkerSend } from '../rendering/worker-backend';\nimport { runtime } from '../runtime/runtime-state';\n\nexport { register, unregister } from '../bodies/body-registry';\nexport { ensureGeometry, flush, wanted } from '../rendering/geometry/geometry-scheduler';\nexport { noteDisplayed } from '../rendering/geometry/render-pass';\nexport { wantedBucket } from '../rendering/lod/deflection';\nexport { parseWorkerMessage } from '../rendering/worker/message-guards';\nexport { emit } from '../runtime/event-bus';\nexport { currentRuntime, runtime } from '../runtime/runtime-state';\nexport { worldGraph as graph } from '../world-graph/world-graph-client';\n\nexport function activeBackend(): 'worker' | 'inline' { return runtime().provider.activeBackend; }\n\nexport function flushCount(): number { return runtime().flushes; }\n\nexport function displayed(body: Body): boolean { return isDisplayed(runtime(), body); }\n\nexport function pinWantedBucket(shapeId: string, bucket: number): void { forceNextBucket(runtime(), shapeId, bucket); }\n\nexport function workerSendLog(): WorkerSend[] {\n const provider = runtime().provider;\n return provider instanceof WorkerBackend ? [...provider.sendLog] : [];\n}\n\nexport function postToWorker(message: unknown, options: { awaitCrash?: boolean } = {}): Promise<void> {\n const provider = runtime().provider;\n const worker = provider instanceof WorkerBackend ? provider.worker : undefined;\n if (!worker) return Promise.reject(new OGError('WorkerFailure', 'testing', 'no live worker'));\n const crashed = options.awaitCrash\n ? new Promise<void>((resolve) => { worker.addEventListener('error', () => { resolve(); }, { once: true }); })\n : Promise.resolve();\n worker.postMessage(message);\n return crashed;\n}\n"],"names":[],"mappings":"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"}
|
package/analytic-worker.js
DELETED
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
let runtime;
|
|
2
|
-
let initialization;
|
|
3
|
-
let totalBytes = 0;
|
|
4
|
-
const models = new Map();
|
|
5
|
-
const jobs = new Map();
|
|
6
|
-
let scheduled = false;
|
|
7
|
-
|
|
8
|
-
function respond(request, result, transfer = []) {
|
|
9
|
-
self.postMessage({ request, result }, transfer);
|
|
10
|
-
}
|
|
11
|
-
function reject(request, error) {
|
|
12
|
-
self.postMessage({ request, error: error instanceof Error ? error.message : error });
|
|
13
|
-
}
|
|
14
|
-
function drain() {
|
|
15
|
-
scheduled = false;
|
|
16
|
-
const entry = jobs.entries().next();
|
|
17
|
-
if (entry.done) return;
|
|
18
|
-
const [handle, job] = entry.value;
|
|
19
|
-
jobs.delete(handle);
|
|
20
|
-
let mesh;
|
|
21
|
-
try {
|
|
22
|
-
const model = models.get(handle);
|
|
23
|
-
if (!model) throw new Error("Unknown analytic worker model handle");
|
|
24
|
-
mesh = model.brep.tessellate(job.deflection);
|
|
25
|
-
const result = {
|
|
26
|
-
positions: mesh.positions(), normals: mesh.normals(), indices: mesh.indices(),
|
|
27
|
-
triangleFaceIds: mesh.triangle_face_ids(), outlinePositions: mesh.outline_positions(),
|
|
28
|
-
outlineEdgeIds: mesh.outline_edge_ids(), revision: mesh.revision(), achievedDeflection: mesh.achieved_deflection(),
|
|
29
|
-
};
|
|
30
|
-
const transfer = [result.positions, result.normals, result.indices, result.triangleFaceIds,
|
|
31
|
-
result.outlinePositions, result.outlineEdgeIds].map((array) => array.buffer);
|
|
32
|
-
respond(job.request, result, transfer);
|
|
33
|
-
} catch (error) { reject(job.request, error); }
|
|
34
|
-
finally { mesh?.free(); }
|
|
35
|
-
schedule();
|
|
36
|
-
}
|
|
37
|
-
function schedule() {
|
|
38
|
-
if (scheduled || !jobs.size) return;
|
|
39
|
-
scheduled = true;
|
|
40
|
-
setTimeout(drain, 0);
|
|
41
|
-
}
|
|
42
|
-
function invalidate(handle) {
|
|
43
|
-
const job = jobs.get(handle);
|
|
44
|
-
if (job) {
|
|
45
|
-
reject(job.request, "Superseded tessellation request");
|
|
46
|
-
jobs.delete(handle);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
async function receive(message) {
|
|
50
|
-
const { request, kind, handle } = message;
|
|
51
|
-
try {
|
|
52
|
-
if (kind === "init") {
|
|
53
|
-
if (initialization) throw new Error("Analytic worker already initialized");
|
|
54
|
-
initialization = (async () => {
|
|
55
|
-
runtime = await import(/* @vite-ignore */ message.kernelURL);
|
|
56
|
-
await runtime.default({ module_or_path: message.wasmURL });
|
|
57
|
-
})();
|
|
58
|
-
await initialization;
|
|
59
|
-
respond(request, true);
|
|
60
|
-
return;
|
|
61
|
-
}
|
|
62
|
-
if (!initialization) throw new Error("Analytic worker has not been initialized");
|
|
63
|
-
await initialization;
|
|
64
|
-
if (typeof handle !== "string" || !handle || handle.length > 1024) throw new Error("Invalid analytic worker handle");
|
|
65
|
-
if (kind === "model") {
|
|
66
|
-
const bytes = typeof message.serialized === "string" ? new TextEncoder().encode(message.serialized).length : Infinity;
|
|
67
|
-
const previous = models.get(handle);
|
|
68
|
-
if (bytes > 64 * 1024 * 1024 || totalBytes - (previous?.bytes ?? 0) + bytes > 128 * 1024 * 1024
|
|
69
|
-
|| (!previous && models.size >= 64)) throw new Error("Analytic worker model resource limit exceeded");
|
|
70
|
-
const brep = new runtime.OGAnalyticBrep(message.serialized);
|
|
71
|
-
invalidate(handle);
|
|
72
|
-
previous?.brep.free();
|
|
73
|
-
models.set(handle, { brep, bytes });
|
|
74
|
-
totalBytes += bytes - (previous?.bytes ?? 0);
|
|
75
|
-
respond(request, { revision: brep.get_revision() });
|
|
76
|
-
} else if (kind === "remove") {
|
|
77
|
-
invalidate(handle);
|
|
78
|
-
const previous = models.get(handle);
|
|
79
|
-
if (previous) { previous.brep.free(); totalBytes -= previous.bytes; models.delete(handle); }
|
|
80
|
-
respond(request, true);
|
|
81
|
-
} else if (kind === "tessellate") {
|
|
82
|
-
if (!models.has(handle)) throw new Error("Unknown analytic worker model handle");
|
|
83
|
-
if (!Number.isFinite(message.deflection) || message.deflection <= 0) throw new Error("Invalid tessellation deflection");
|
|
84
|
-
invalidate(handle);
|
|
85
|
-
jobs.set(handle, message);
|
|
86
|
-
schedule();
|
|
87
|
-
} else throw new Error("Unknown analytic worker operation");
|
|
88
|
-
} catch (error) { reject(request, error); }
|
|
89
|
-
}
|
|
90
|
-
self.onmessage = (event) => { void receive(event.data); };
|
package/src/base-types.d.ts
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Version string exposed by the Three.js adapter at runtime.
|
|
3
|
-
*/
|
|
4
|
-
export declare const OPEN_GEOMETRY_THREE_VERSION = "2.0.3";
|
|
5
|
-
/**
|
|
6
|
-
* Options accepted when initializing the OpenGeometry runtime.
|
|
7
|
-
* - `wasmURL`: Optional URL to the OpenGeometry wasm binary. If not provided, it defaults to a relative path.
|
|
8
|
-
* - `debugMeshes`: Optional flag to enable debug meshes for visualizing geometry. Defaults to `false`.
|
|
9
|
-
*/
|
|
10
|
-
export interface OpenGeometryOptions {
|
|
11
|
-
wasmURL?: string;
|
|
12
|
-
debugMeshes?: boolean;
|
|
13
|
-
}
|
package/src/editor/freeform.d.ts
DELETED
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
import { OGFreeformEditor as KernelFreeformEditor, Vector3 } from "../../opengeometry/pkg/opengeometry.js";
|
|
2
|
-
import { FreeformGeometry } from "../freeform.js";
|
|
3
|
-
import type { EdgeInfo, EditOperationOptions, FaceInfo, FreeformEditCapabilities, FreeformEditResult, FreeformFeatureEditCapabilities, TopologyId, TopologyRenderData, VertexInfo } from "./types.js";
|
|
4
|
-
/**
|
|
5
|
-
* High-level editor facade over the kernel freeform editing API.
|
|
6
|
-
*/
|
|
7
|
-
export declare class FreeformEditor {
|
|
8
|
-
private readonly geometry;
|
|
9
|
-
private readonly editor;
|
|
10
|
-
constructor(geometry: FreeformGeometry, editor?: KernelFreeformEditor);
|
|
11
|
-
/**
|
|
12
|
-
* Returns the freeform geometry currently managed by this editor.
|
|
13
|
-
*/
|
|
14
|
-
getFreeformGeometry(): FreeformGeometry;
|
|
15
|
-
/**
|
|
16
|
-
* Returns renderable topology buffers for faces, edges, and vertices.
|
|
17
|
-
*/
|
|
18
|
-
getTopologyRenderData(): TopologyRenderData;
|
|
19
|
-
/**
|
|
20
|
-
* Returns semantic and topological information for a face id.
|
|
21
|
-
*/
|
|
22
|
-
getFaceInfo(faceId: TopologyId): FaceInfo;
|
|
23
|
-
/**
|
|
24
|
-
* Returns semantic and topological information for an edge id.
|
|
25
|
-
*/
|
|
26
|
-
getEdgeInfo(edgeId: TopologyId): EdgeInfo;
|
|
27
|
-
/**
|
|
28
|
-
* Returns semantic and topological information for a vertex id.
|
|
29
|
-
*/
|
|
30
|
-
getVertexInfo(vertexId: TopologyId): VertexInfo;
|
|
31
|
-
/**
|
|
32
|
-
* Returns global edit capabilities for the current freeform model.
|
|
33
|
-
*/
|
|
34
|
-
getEditCapabilities(): FreeformEditCapabilities;
|
|
35
|
-
/**
|
|
36
|
-
* Returns edit capabilities scoped to a single face.
|
|
37
|
-
*/
|
|
38
|
-
getFaceEditCapabilities(faceId: TopologyId): FreeformFeatureEditCapabilities;
|
|
39
|
-
/**
|
|
40
|
-
* Returns edit capabilities scoped to a single edge.
|
|
41
|
-
*/
|
|
42
|
-
getEdgeEditCapabilities(edgeId: TopologyId): FreeformFeatureEditCapabilities;
|
|
43
|
-
/**
|
|
44
|
-
* Returns edit capabilities scoped to a single vertex.
|
|
45
|
-
*/
|
|
46
|
-
getVertexEditCapabilities(vertexId: TopologyId): FreeformFeatureEditCapabilities;
|
|
47
|
-
/**
|
|
48
|
-
* Offset a face along its editable normal direction.
|
|
49
|
-
*/
|
|
50
|
-
pushPullFace(faceId: TopologyId, distance: number, options?: EditOperationOptions): FreeformEditResult;
|
|
51
|
-
/**
|
|
52
|
-
* Creates new side faces by extruding a face region.
|
|
53
|
-
*/
|
|
54
|
-
extrudeFace(faceId: TopologyId, distance: number, options?: EditOperationOptions): FreeformEditResult;
|
|
55
|
-
/**
|
|
56
|
-
* Splits a face by connecting two points sampled on its boundary edges.
|
|
57
|
-
*/
|
|
58
|
-
cutFace(faceId: TopologyId, startEdgeId: TopologyId, startT: number, endEdgeId: TopologyId, endT: number, options?: EditOperationOptions): FreeformEditResult;
|
|
59
|
-
/**
|
|
60
|
-
* Moves a face by a translation vector, subject to kernel constraints.
|
|
61
|
-
*/
|
|
62
|
-
moveFace(faceId: TopologyId, translation: Vector3, options?: EditOperationOptions): FreeformEditResult;
|
|
63
|
-
/**
|
|
64
|
-
* Moves an edge by a translation vector, subject to kernel constraints.
|
|
65
|
-
*/
|
|
66
|
-
moveEdge(edgeId: TopologyId, translation: Vector3, options?: EditOperationOptions): FreeformEditResult;
|
|
67
|
-
/**
|
|
68
|
-
* Moves a vertex by a translation vector, subject to kernel constraints.
|
|
69
|
-
*/
|
|
70
|
-
moveVertex(vertexId: TopologyId, translation: Vector3, options?: EditOperationOptions): FreeformEditResult;
|
|
71
|
-
/**
|
|
72
|
-
* Inserts a vertex at parametric position `t` along an edge.
|
|
73
|
-
*/
|
|
74
|
-
insertVertexOnEdge(edgeId: TopologyId, t: number, options?: EditOperationOptions): FreeformEditResult;
|
|
75
|
-
/**
|
|
76
|
-
* Splits an edge at parametric position `t`.
|
|
77
|
-
*/
|
|
78
|
-
splitEdge(edgeId: TopologyId, t: number, options?: EditOperationOptions): FreeformEditResult;
|
|
79
|
-
/**
|
|
80
|
-
* Creates a loop cut that propagates from the selected edge when possible.
|
|
81
|
-
*/
|
|
82
|
-
loopCut(edgeId: TopologyId, t: number, options?: EditOperationOptions): FreeformEditResult;
|
|
83
|
-
/**
|
|
84
|
-
* Removes a vertex when the current topology allows the edit.
|
|
85
|
-
*/
|
|
86
|
-
removeVertex(vertexId: TopologyId, options?: EditOperationOptions): FreeformEditResult;
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* Convenience factory for creating a freeform editor around a geometry wrapper.
|
|
90
|
-
*/
|
|
91
|
-
export declare function createFreeformEditor(geometry: FreeformGeometry): FreeformEditor;
|
package/src/editor/index.d.ts
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Public editor helpers for parametric and freeform modeling workflows.
|
|
3
|
-
*/
|
|
4
|
-
export * from "./types.js";
|
|
5
|
-
export { clonePlacement, createParametricEditCapabilities, toObjectTransformation, } from "./parametric.js";
|
|
6
|
-
export { FreeformEditor, createFreeformEditor } from "./freeform.js";
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import type { ParametricEditCapabilities, ParametricEditFamily, ParametricEntityType, ParametricPlacement } from "./types.js";
|
|
2
|
-
import type { ObjectTransformation } from "../freeform/types.js";
|
|
3
|
-
/**
|
|
4
|
-
* Returns the canonical capability payload exposed by parametric wrappers.
|
|
5
|
-
*/
|
|
6
|
-
export declare function createParametricEditCapabilities(entityType: ParametricEntityType, editFamily: ParametricEditFamily): ParametricEditCapabilities;
|
|
7
|
-
/**
|
|
8
|
-
* Normalizes optional placement fields into concrete vectors.
|
|
9
|
-
*/
|
|
10
|
-
export declare function clonePlacement(placement: Partial<ParametricPlacement>): ParametricPlacement;
|
|
11
|
-
/**
|
|
12
|
-
* Converts a parametric placement payload into the freeform/object transform
|
|
13
|
-
* structure expected by BRep-backed helpers.
|
|
14
|
-
*/
|
|
15
|
-
export declare function toObjectTransformation(placement: ParametricPlacement | ObjectTransformation): ObjectTransformation;
|