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.
Files changed (156) hide show
  1. package/LICENSE.md +373 -0
  2. package/README.md +187 -128
  3. package/body-registry-MbAD6Hyq.js +3159 -0
  4. package/body-registry-MbAD6Hyq.js.map +1 -0
  5. package/index.d.ts +18 -115
  6. package/index.js +1170 -11687
  7. package/index.js.map +1 -1
  8. package/opengeometry/pkg/opengeometry.d.ts +144 -1304
  9. package/opengeometry/pkg/opengeometry.js +1316 -5803
  10. package/opengeometry/pkg/opengeometry_bg.wasm +0 -0
  11. package/opengeometry/pkg/opengeometry_bg.wasm.d.ts +62 -458
  12. package/opengeometry_bg.wasm +0 -0
  13. package/opengeometry_bg.wasm.d.ts +62 -458
  14. package/package.json +54 -34
  15. package/src/bodies/body-factory.d.ts +3 -0
  16. package/src/bodies/body-options.d.ts +19 -0
  17. package/src/bodies/body-placement.d.ts +10 -0
  18. package/src/bodies/body-registry.d.ts +3 -0
  19. package/src/bodies/body.d.ts +71 -0
  20. package/src/bodies/display-clone.d.ts +10 -0
  21. package/src/bodies/node-methods.d.ts +30 -0
  22. package/src/bodies/sheet.d.ts +14 -0
  23. package/src/bodies/solid.d.ts +23 -0
  24. package/src/bodies/system-assembly.d.ts +26 -0
  25. package/src/bodies/wire.d.ts +14 -0
  26. package/src/constants/index.d.ts +4 -0
  27. package/src/constants/operations.d.ts +58 -0
  28. package/src/constants/primitives.d.ts +69 -0
  29. package/src/constants/regions.d.ts +1 -0
  30. package/src/constants/transforms.d.ts +4 -0
  31. package/src/dto/boolean-report.d.ts +24 -0
  32. package/src/dto/bounds.d.ts +1 -0
  33. package/src/dto/brep.d.ts +99 -0
  34. package/src/dto/change-set.d.ts +13 -0
  35. package/src/dto/creation.d.ts +3 -0
  36. package/src/dto/display-buffers.d.ts +14 -0
  37. package/src/dto/events.d.ts +2 -0
  38. package/src/{export/analytic-ifc.d.ts → dto/ifc-body.d.ts} +16 -18
  39. package/src/dto/mark-stats.d.ts +4 -0
  40. package/src/dto/measure.d.ts +16 -0
  41. package/src/dto/mirror.d.ts +4 -0
  42. package/src/dto/node-info.d.ts +11 -0
  43. package/src/dto/pick-result.d.ts +6 -0
  44. package/src/dto/placement.d.ts +6 -0
  45. package/src/dto/primitives.d.ts +77 -0
  46. package/src/dto/regions.d.ts +42 -0
  47. package/src/dto/step-export.d.ts +42 -0
  48. package/src/errors.d.ts +20 -0
  49. package/src/export/export-step.d.ts +10 -0
  50. package/src/export/ifc-body.d.ts +4 -0
  51. package/src/kernel/kernel-errors.d.ts +5 -0
  52. package/src/kernel/kernel-loader.d.ts +5 -0
  53. package/src/kernel/kernel-session.d.ts +2 -0
  54. package/src/limits.d.ts +12 -0
  55. package/src/marks/limbo.d.ts +6 -0
  56. package/src/marks/og-mark.d.ts +10 -0
  57. package/src/marks/transaction.d.ts +3 -0
  58. package/src/opengeometry.d.ts +69 -0
  59. package/src/operations/offsets.d.ts +5 -0
  60. package/src/operations/regions.d.ts +4 -0
  61. package/src/picking/pick-targets.d.ts +6 -0
  62. package/src/picking/resolve-hit.d.ts +3 -0
  63. package/src/rendering/deferred.d.ts +7 -0
  64. package/src/rendering/geometry/geometry-scheduler.d.ts +12 -0
  65. package/src/rendering/geometry/host-group.d.ts +10 -0
  66. package/src/rendering/geometry/render-pass.d.ts +8 -0
  67. package/src/rendering/geometry/settle.d.ts +10 -0
  68. package/src/rendering/inline-backend.d.ts +14 -0
  69. package/src/rendering/lod/body-size.d.ts +11 -0
  70. package/src/rendering/lod/camera-observer.d.ts +2 -0
  71. package/src/rendering/lod/deflection.d.ts +2 -0
  72. package/src/rendering/lod/display-bounds.d.ts +4 -0
  73. package/src/rendering/lod/displayed.d.ts +7 -0
  74. package/src/rendering/lod/host-drawn.d.ts +5 -0
  75. package/src/rendering/lod/host-groups.d.ts +28 -0
  76. package/src/rendering/lod/lod-controller.d.ts +75 -0
  77. package/src/rendering/lod/screen-metrics.d.ts +2 -0
  78. package/src/rendering/materials/material-pool.d.ts +12 -0
  79. package/src/rendering/materials/ref-counted-pool.d.ts +12 -0
  80. package/src/rendering/provider.d.ts +19 -0
  81. package/src/rendering/records/geometry-record.d.ts +21 -0
  82. package/src/rendering/records/record-pool.d.ts +29 -0
  83. package/src/rendering/records/validate-display-buffers.d.ts +2 -0
  84. package/src/rendering/tessellation-worker.d.ts +1 -0
  85. package/src/rendering/worker/job-queue.d.ts +8 -0
  86. package/src/rendering/worker/message-guards.d.ts +9 -0
  87. package/src/rendering/worker/snapshot-cache.d.ts +10 -0
  88. package/src/rendering/worker-backend.d.ts +44 -0
  89. package/src/rendering/worker-protocol.d.ts +52 -0
  90. package/src/runtime/create-runtime.d.ts +7 -0
  91. package/src/runtime/event-bus.d.ts +3 -0
  92. package/src/runtime/reset.d.ts +1 -0
  93. package/src/runtime/runtime-state.d.ts +68 -0
  94. package/src/testing/internals.d.ts +18 -0
  95. package/src/world-graph/codec.d.ts +45 -0
  96. package/src/world-graph/world-graph-client.d.ts +13 -0
  97. package/tessellation-worker.js +634 -0
  98. package/tessellation-worker.js.map +1 -0
  99. package/testing.d.ts +1 -0
  100. package/testing.js +87 -0
  101. package/testing.js.map +1 -0
  102. package/analytic-worker.js +0 -90
  103. package/src/base-types.d.ts +0 -13
  104. package/src/editor/freeform.d.ts +0 -91
  105. package/src/editor/index.d.ts +0 -6
  106. package/src/editor/parametric.d.ts +0 -15
  107. package/src/editor/types.d.ts +0 -223
  108. package/src/examples/booleans.d.ts +0 -24
  109. package/src/examples/editor-modes.d.ts +0 -20
  110. package/src/examples/index.d.ts +0 -11
  111. package/src/examples/offset-ring-variable.d.ts +0 -13
  112. package/src/examples/offset.d.ts +0 -18
  113. package/src/examples/primitives.d.ts +0 -16
  114. package/src/examples/ribbon-from-offsets.d.ts +0 -33
  115. package/src/examples/shapes.d.ts +0 -20
  116. package/src/examples/sweep.d.ts +0 -9
  117. package/src/freeform/geometry.d.ts +0 -82
  118. package/src/freeform/index.d.ts +0 -5
  119. package/src/freeform/types.d.ts +0 -36
  120. package/src/markup/spotMarker.d.ts +0 -4
  121. package/src/operations/analytic-errors.d.ts +0 -8
  122. package/src/operations/boolean-regions.d.ts +0 -20
  123. package/src/operations/boolean.d.ts +0 -16
  124. package/src/operations/editor/freeform.d.ts +0 -1
  125. package/src/operations/editor/index.d.ts +0 -1
  126. package/src/operations/editor/parametric.d.ts +0 -1
  127. package/src/operations/editor/types.d.ts +0 -1
  128. package/src/operations/extrude.d.ts +0 -9
  129. package/src/operations/index.d.ts +0 -9
  130. package/src/operations/loft.d.ts +0 -13
  131. package/src/operations/offset-regions.d.ts +0 -76
  132. package/src/primitives/analytic-curve.d.ts +0 -42
  133. package/src/primitives/arc.d.ts +0 -36
  134. package/src/primitives/curve.d.ts +0 -64
  135. package/src/primitives/elliptical_arc.d.ts +0 -38
  136. package/src/primitives/index.d.ts +0 -9
  137. package/src/primitives/line.d.ts +0 -77
  138. package/src/primitives/polyline.d.ts +0 -78
  139. package/src/primitives/rectangle.d.ts +0 -72
  140. package/src/rendering/analytic-lod.d.ts +0 -32
  141. package/src/rendering/analytic-tessellation.d.ts +0 -32
  142. package/src/shapes/analytic-pattern.d.ts +0 -36
  143. package/src/shapes/analytic-solid.d.ts +0 -304
  144. package/src/shapes/cuboid.d.ts +0 -62
  145. package/src/shapes/cylinder.d.ts +0 -36
  146. package/src/shapes/index.d.ts +0 -11
  147. package/src/shapes/opening.d.ts +0 -31
  148. package/src/shapes/outline-utils.d.ts +0 -35
  149. package/src/shapes/polygon.d.ts +0 -102
  150. package/src/shapes/solid.d.ts +0 -108
  151. package/src/shapes/sphere.d.ts +0 -27
  152. package/src/shapes/sweep.d.ts +0 -76
  153. package/src/shapes/wedge.d.ts +0 -75
  154. package/src/utils/event.d.ts +0 -29
  155. package/src/utils/randomizer.d.ts +0 -1
  156. package/src/world/world-graph.d.ts +0 -112
@@ -0,0 +1,634 @@
1
+ function parseKernelError(text) {
2
+ let value;
3
+ try {
4
+ value = JSON.parse(text);
5
+ }
6
+ catch {
7
+ return undefined;
8
+ }
9
+ if (typeof value !== 'object' || value === null || !('code' in value) || !('message' in value))
10
+ return undefined;
11
+ const { code, message } = value;
12
+ if (typeof code !== 'string' || typeof message !== 'string' || !code || !message)
13
+ return undefined;
14
+ return { code, message, details: 'details' in value ? value.details : undefined };
15
+ }
16
+
17
+ let wasm;
18
+
19
+ function addToExternrefTable0(obj) {
20
+ const idx = wasm.__externref_table_alloc();
21
+ wasm.__wbindgen_export_2.set(idx, obj);
22
+ return idx;
23
+ }
24
+
25
+ function handleError(f, args) {
26
+ try {
27
+ return f.apply(this, args);
28
+ } catch (e) {
29
+ const idx = addToExternrefTable0(e);
30
+ wasm.__wbindgen_exn_store(idx);
31
+ }
32
+ }
33
+
34
+ const cachedTextDecoder = (typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }) : { decode: () => { throw Error('TextDecoder not available') } } );
35
+
36
+ if (typeof TextDecoder !== 'undefined') { cachedTextDecoder.decode(); }
37
+ let cachedUint8ArrayMemory0 = null;
38
+
39
+ function getUint8ArrayMemory0() {
40
+ if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {
41
+ cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);
42
+ }
43
+ return cachedUint8ArrayMemory0;
44
+ }
45
+
46
+ function getStringFromWasm0(ptr, len) {
47
+ ptr = ptr >>> 0;
48
+ return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));
49
+ }
50
+
51
+ let WASM_VECTOR_LEN = 0;
52
+
53
+ const cachedTextEncoder = (typeof TextEncoder !== 'undefined' ? new TextEncoder('utf-8') : { encode: () => { throw Error('TextEncoder not available') } } );
54
+
55
+ const encodeString = (typeof cachedTextEncoder.encodeInto === 'function'
56
+ ? function (arg, view) {
57
+ return cachedTextEncoder.encodeInto(arg, view);
58
+ }
59
+ : function (arg, view) {
60
+ const buf = cachedTextEncoder.encode(arg);
61
+ view.set(buf);
62
+ return {
63
+ read: arg.length,
64
+ written: buf.length
65
+ };
66
+ });
67
+
68
+ function passStringToWasm0(arg, malloc, realloc) {
69
+
70
+ if (realloc === undefined) {
71
+ const buf = cachedTextEncoder.encode(arg);
72
+ const ptr = malloc(buf.length, 1) >>> 0;
73
+ getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf);
74
+ WASM_VECTOR_LEN = buf.length;
75
+ return ptr;
76
+ }
77
+
78
+ let len = arg.length;
79
+ let ptr = malloc(len, 1) >>> 0;
80
+
81
+ const mem = getUint8ArrayMemory0();
82
+
83
+ let offset = 0;
84
+
85
+ for (; offset < len; offset++) {
86
+ const code = arg.charCodeAt(offset);
87
+ if (code > 0x7F) break;
88
+ mem[ptr + offset] = code;
89
+ }
90
+
91
+ if (offset !== len) {
92
+ if (offset !== 0) {
93
+ arg = arg.slice(offset);
94
+ }
95
+ ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;
96
+ const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len);
97
+ const ret = encodeString(arg, view);
98
+
99
+ offset += ret.written;
100
+ ptr = realloc(ptr, len, offset, 1) >>> 0;
101
+ }
102
+
103
+ WASM_VECTOR_LEN = offset;
104
+ return ptr;
105
+ }
106
+
107
+ let cachedDataViewMemory0 = null;
108
+
109
+ function getDataViewMemory0() {
110
+ if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || (cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) {
111
+ cachedDataViewMemory0 = new DataView(wasm.memory.buffer);
112
+ }
113
+ return cachedDataViewMemory0;
114
+ }
115
+
116
+ function isLikeNone(x) {
117
+ return x === undefined || x === null;
118
+ }
119
+
120
+ function takeFromExternrefTable0(idx) {
121
+ const value = wasm.__wbindgen_export_2.get(idx);
122
+ wasm.__externref_table_dealloc(idx);
123
+ return value;
124
+ }
125
+
126
+ function passArray8ToWasm0(arg, malloc) {
127
+ const ptr = malloc(arg.length * 1, 1) >>> 0;
128
+ getUint8ArrayMemory0().set(arg, ptr / 1);
129
+ WASM_VECTOR_LEN = arg.length;
130
+ return ptr;
131
+ }
132
+
133
+ const OGTessellatorFinalization = (typeof FinalizationRegistry === 'undefined')
134
+ ? { register: () => {}, unregister: () => {} }
135
+ : new FinalizationRegistry(ptr => wasm.__wbg_ogtessellator_free(ptr >>> 0, 1));
136
+
137
+ class OGTessellator {
138
+
139
+ __destroy_into_raw() {
140
+ const ptr = this.__wbg_ptr;
141
+ this.__wbg_ptr = 0;
142
+ OGTessellatorFinalization.unregister(this);
143
+ return ptr;
144
+ }
145
+
146
+ free() {
147
+ const ptr = this.__destroy_into_raw();
148
+ wasm.__wbg_ogtessellator_free(ptr, 0);
149
+ }
150
+ constructor() {
151
+ const ret = wasm.ogtessellator_new();
152
+ this.__wbg_ptr = ret >>> 0;
153
+ OGTessellatorFinalization.register(this, this.__wbg_ptr, this);
154
+ return this;
155
+ }
156
+ /**
157
+ * @param {Uint8Array} bytes
158
+ * @returns {number}
159
+ */
160
+ load(bytes) {
161
+ const ptr0 = passArray8ToWasm0(bytes, wasm.__wbindgen_malloc);
162
+ const len0 = WASM_VECTOR_LEN;
163
+ const ret = wasm.ogtessellator_load(this.__wbg_ptr, ptr0, len0);
164
+ if (ret[2]) {
165
+ throw takeFromExternrefTable0(ret[1]);
166
+ }
167
+ return ret[0] >>> 0;
168
+ }
169
+ /**
170
+ * @param {number} slot
171
+ * @param {number} bucket
172
+ * @param {number} max_triangles
173
+ * @param {number | null} [smooth_angle]
174
+ * @returns {any}
175
+ */
176
+ buffers(slot, bucket, max_triangles, smooth_angle) {
177
+ const ret = wasm.ogtessellator_buffers(this.__wbg_ptr, slot, bucket, max_triangles, !isLikeNone(smooth_angle), isLikeNone(smooth_angle) ? 0 : smooth_angle);
178
+ if (ret[2]) {
179
+ throw takeFromExternrefTable0(ret[1]);
180
+ }
181
+ return takeFromExternrefTable0(ret[0]);
182
+ }
183
+ /**
184
+ * @param {number} slot
185
+ * @returns {boolean}
186
+ */
187
+ drop(slot) {
188
+ const ret = wasm.ogtessellator_drop(this.__wbg_ptr, slot);
189
+ return ret !== 0;
190
+ }
191
+ }
192
+
193
+ (typeof FinalizationRegistry === 'undefined')
194
+ ? { }
195
+ : new FinalizationRegistry(ptr => wasm.__wbg_ogworldgraph_free(ptr >>> 0, 1));
196
+
197
+ function __wbg_get_imports() {
198
+ const imports = {};
199
+ imports.wbg = {};
200
+ imports.wbg.__wbg_buffer_609cc3eee51ed158 = function(arg0) {
201
+ const ret = arg0.buffer;
202
+ return ret;
203
+ };
204
+ imports.wbg.__wbg_call_672a4d21634d4a24 = function() { return handleError(function (arg0, arg1) {
205
+ const ret = arg0.call(arg1);
206
+ return ret;
207
+ }, arguments) };
208
+ imports.wbg.__wbg_error_7534b8e9a36f1ab4 = function(arg0, arg1) {
209
+ let deferred0_0;
210
+ let deferred0_1;
211
+ try {
212
+ deferred0_0 = arg0;
213
+ deferred0_1 = arg1;
214
+ console.error(getStringFromWasm0(arg0, arg1));
215
+ } finally {
216
+ wasm.__wbindgen_free(deferred0_0, deferred0_1, 1);
217
+ }
218
+ };
219
+ imports.wbg.__wbg_new_405e22f390576ce2 = function() {
220
+ const ret = new Object();
221
+ return ret;
222
+ };
223
+ imports.wbg.__wbg_new_780abee5c1739fd7 = function(arg0) {
224
+ const ret = new Float32Array(arg0);
225
+ return ret;
226
+ };
227
+ imports.wbg.__wbg_new_78c8a92080461d08 = function(arg0) {
228
+ const ret = new Float64Array(arg0);
229
+ return ret;
230
+ };
231
+ imports.wbg.__wbg_new_8a6f238a6ece86ea = function() {
232
+ const ret = new Error();
233
+ return ret;
234
+ };
235
+ imports.wbg.__wbg_new_a12002a7f91c75be = function(arg0) {
236
+ const ret = new Uint8Array(arg0);
237
+ return ret;
238
+ };
239
+ imports.wbg.__wbg_new_e3b321dcfef89fc7 = function(arg0) {
240
+ const ret = new Uint32Array(arg0);
241
+ return ret;
242
+ };
243
+ imports.wbg.__wbg_newnoargs_105ed471475aaf50 = function(arg0, arg1) {
244
+ const ret = new Function(getStringFromWasm0(arg0, arg1));
245
+ return ret;
246
+ };
247
+ imports.wbg.__wbg_newwithbyteoffsetandlength_93c8e0c1a479fa1a = function(arg0, arg1, arg2) {
248
+ const ret = new Float64Array(arg0, arg1 >>> 0, arg2 >>> 0);
249
+ return ret;
250
+ };
251
+ imports.wbg.__wbg_newwithbyteoffsetandlength_d97e637ebe145a9a = function(arg0, arg1, arg2) {
252
+ const ret = new Uint8Array(arg0, arg1 >>> 0, arg2 >>> 0);
253
+ return ret;
254
+ };
255
+ imports.wbg.__wbg_newwithbyteoffsetandlength_e6b7e69acd4c7354 = function(arg0, arg1, arg2) {
256
+ const ret = new Float32Array(arg0, arg1 >>> 0, arg2 >>> 0);
257
+ return ret;
258
+ };
259
+ imports.wbg.__wbg_newwithbyteoffsetandlength_f1dead44d1fc7212 = function(arg0, arg1, arg2) {
260
+ const ret = new Uint32Array(arg0, arg1 >>> 0, arg2 >>> 0);
261
+ return ret;
262
+ };
263
+ imports.wbg.__wbg_set_bb8cecf6a62b9f46 = function() { return handleError(function (arg0, arg1, arg2) {
264
+ const ret = Reflect.set(arg0, arg1, arg2);
265
+ return ret;
266
+ }, arguments) };
267
+ imports.wbg.__wbg_stack_0ed75d68575b0f3c = function(arg0, arg1) {
268
+ const ret = arg1.stack;
269
+ const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
270
+ const len1 = WASM_VECTOR_LEN;
271
+ getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
272
+ getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
273
+ };
274
+ imports.wbg.__wbg_static_accessor_GLOBAL_88a902d13a557d07 = function() {
275
+ const ret = typeof global === 'undefined' ? null : global;
276
+ return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);
277
+ };
278
+ imports.wbg.__wbg_static_accessor_GLOBAL_THIS_56578be7e9f832b0 = function() {
279
+ const ret = typeof globalThis === 'undefined' ? null : globalThis;
280
+ return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);
281
+ };
282
+ imports.wbg.__wbg_static_accessor_SELF_37c5d418e4bf5819 = function() {
283
+ const ret = typeof self === 'undefined' ? null : self;
284
+ return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);
285
+ };
286
+ imports.wbg.__wbg_static_accessor_WINDOW_5de37043a91a9c40 = function() {
287
+ const ret = typeof window === 'undefined' ? null : window;
288
+ return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);
289
+ };
290
+ imports.wbg.__wbindgen_init_externref_table = function() {
291
+ const table = wasm.__wbindgen_export_2;
292
+ const offset = table.grow(4);
293
+ table.set(0, undefined);
294
+ table.set(offset + 0, undefined);
295
+ table.set(offset + 1, null);
296
+ table.set(offset + 2, true);
297
+ table.set(offset + 3, false);
298
+ };
299
+ imports.wbg.__wbindgen_is_undefined = function(arg0) {
300
+ const ret = arg0 === undefined;
301
+ return ret;
302
+ };
303
+ imports.wbg.__wbindgen_memory = function() {
304
+ const ret = wasm.memory;
305
+ return ret;
306
+ };
307
+ imports.wbg.__wbindgen_number_new = function(arg0) {
308
+ const ret = arg0;
309
+ return ret;
310
+ };
311
+ imports.wbg.__wbindgen_string_new = function(arg0, arg1) {
312
+ const ret = getStringFromWasm0(arg0, arg1);
313
+ return ret;
314
+ };
315
+ imports.wbg.__wbindgen_throw = function(arg0, arg1) {
316
+ throw new Error(getStringFromWasm0(arg0, arg1));
317
+ };
318
+
319
+ return imports;
320
+ }
321
+
322
+ function __wbg_finalize_init(instance, module) {
323
+ wasm = instance.exports;
324
+ cachedDataViewMemory0 = null;
325
+ cachedUint8ArrayMemory0 = null;
326
+
327
+
328
+ wasm.__wbindgen_start();
329
+ return wasm;
330
+ }
331
+
332
+ function initSync(module) {
333
+ if (wasm !== undefined) return wasm;
334
+
335
+
336
+ if (typeof module !== 'undefined') {
337
+ if (Object.getPrototypeOf(module) === Object.prototype) {
338
+ ({module} = module);
339
+ } else {
340
+ console.warn('using deprecated parameters for `initSync()`; pass a single object instead');
341
+ }
342
+ }
343
+
344
+ const imports = __wbg_get_imports();
345
+
346
+ if (!(module instanceof WebAssembly.Module)) {
347
+ module = new WebAssembly.Module(module);
348
+ }
349
+
350
+ const instance = new WebAssembly.Instance(module, imports);
351
+
352
+ return __wbg_finalize_init(instance);
353
+ }
354
+
355
+ function takePanicMessage() {
356
+ const message = Reflect.get(globalThis, '__opengeometryPanic');
357
+ Reflect.deleteProperty(globalThis, '__opengeometryPanic');
358
+ return typeof message === 'string' ? message : undefined;
359
+ }
360
+
361
+ function isDetails(value) {
362
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
363
+ }
364
+ class OGError extends Error {
365
+ code;
366
+ call;
367
+ details;
368
+ constructor(code, call, message, details = {}) {
369
+ super(message);
370
+ this.name = 'OGError';
371
+ this.code = code;
372
+ this.call = call;
373
+ this.details = isDetails(details) ? details : {};
374
+ }
375
+ toJSON() {
376
+ return { code: this.code, call: this.call, message: this.message, details: this.details };
377
+ }
378
+ static fromJSON(value) {
379
+ return new OGError(value.code, value.call, value.message, value.details);
380
+ }
381
+ }
382
+
383
+ const SCALARS = ['revision', 'bucket', 'achievedDeflection', 'triangles'];
384
+ function validateDisplayBuffers(value) {
385
+ if (!isDisplayBuffers(value) || !hasConsistentLengths(value)) {
386
+ throw new OGError('WorkerFailure', 'tessellation', 'invalid display buffer structure');
387
+ }
388
+ return value;
389
+ }
390
+ function isDisplayBuffers(value) {
391
+ if (typeof value !== 'object' || value === null)
392
+ return false;
393
+ const field = (key) => Reflect.get(value, key);
394
+ return field('positions') instanceof Float32Array && field('normals') instanceof Float32Array
395
+ && field('indices') instanceof Uint32Array && field('faceRanges') instanceof Uint32Array
396
+ && field('outline') instanceof Float32Array && field('edgeIds') instanceof Uint32Array
397
+ && field('smoothEdges') instanceof Uint8Array
398
+ && field('origin') instanceof Float64Array && SCALARS.every((key) => typeof field(key) === 'number');
399
+ }
400
+ function hasConsistentLengths(buffers) {
401
+ return buffers.origin.length === 3 && buffers.positions.length % 3 === 0
402
+ && buffers.normals.length === buffers.positions.length
403
+ && buffers.indices.length % 3 === 0 && buffers.indices.length <= 6_000_000
404
+ && buffers.outline.length % 6 === 0 && buffers.outline.length <= 12_000_000
405
+ && buffers.edgeIds.length === buffers.outline.length / 6 && buffers.faceRanges.length % 3 === 0;
406
+ }
407
+
408
+ class JobQueue {
409
+ jobs = new Map();
410
+ get size() {
411
+ return this.jobs.size;
412
+ }
413
+ push(job) {
414
+ const previous = this.jobs.get(job.shapeId);
415
+ this.jobs.set(job.shapeId, job);
416
+ return previous?.request;
417
+ }
418
+ cancel(shapeId, generation) {
419
+ const previous = this.jobs.get(shapeId);
420
+ if (!previous || previous.generation > generation)
421
+ return undefined;
422
+ this.jobs.delete(shapeId);
423
+ return previous.request;
424
+ }
425
+ next() {
426
+ const next = [...this.jobs.values()].sort((a, b) => a.priority - b.priority)[0];
427
+ if (next)
428
+ this.jobs.delete(next.shapeId);
429
+ return next;
430
+ }
431
+ }
432
+
433
+ const KINDS = ['init', 'snapshot', 'tessellate', 'cancel', 'drop'];
434
+ function parseWorkerMessage(data) {
435
+ if (isWorkerMessage(data))
436
+ return data;
437
+ const message = problemOf(data) ?? 'invalid worker message';
438
+ return { request: requestOf(data), error: { code: 'InvalidParameter', message } };
439
+ }
440
+ function isWorkerMessage(data) {
441
+ return problemOf(data) === undefined;
442
+ }
443
+ function problemOf(data) {
444
+ if (typeof data !== 'object' || data === null)
445
+ return 'worker message is not an object';
446
+ const kind = Reflect.get(data, 'kind');
447
+ const known = KINDS.find((name) => name === kind);
448
+ if (known === undefined)
449
+ return `worker message field kind has unknown value ${String(kind)}`;
450
+ const checks = fieldChecks(known);
451
+ const extra = Object.keys(data).find((key) => !Object.hasOwn(checks, key));
452
+ if (extra !== undefined)
453
+ return `unknown worker message field ${extra}`;
454
+ const invalid = Object.entries(checks).find(([key, check]) => !check(Reflect.get(data, key)));
455
+ return invalid === undefined ? undefined : `worker message field ${invalid[0]} is missing or invalid`;
456
+ }
457
+ function fieldChecks(kind) {
458
+ switch (kind) {
459
+ case 'init':
460
+ return { kind: isKind, request: (value) => value === 0, module: (value) => value instanceof WebAssembly.Module };
461
+ case 'snapshot':
462
+ return {
463
+ kind: isKind, request: isFiniteNumber, shapeId: isShapeId, revision: isFiniteNumber,
464
+ bytes: (value) => value instanceof Uint8Array,
465
+ };
466
+ case 'tessellate':
467
+ return {
468
+ kind: isKind, request: isFiniteNumber, shapeId: isShapeId, revision: isFiniteNumber, bucket: isFiniteNumber,
469
+ priority: isFiniteNumber, maxTriangles: isFiniteNumber, generation: isFiniteNumber, smoothAngle: isSmoothAngle,
470
+ };
471
+ case 'cancel':
472
+ return { kind: isKind, shapeId: isShapeId, generation: isFiniteNumber };
473
+ case 'drop':
474
+ return { kind: isKind, shapeId: isShapeId, revision: isFiniteNumber };
475
+ }
476
+ }
477
+ function requestOf(data) {
478
+ const request = typeof data === 'object' && data !== null ? Reflect.get(data, 'request') : undefined;
479
+ return isFiniteNumber(request) ? request : undefined;
480
+ }
481
+ function isSmoothAngle(value) {
482
+ return value === undefined || (isFiniteNumber(value) && value >= 0 && value < 90);
483
+ }
484
+ function isKind() {
485
+ return true;
486
+ }
487
+ function isFiniteNumber(value) {
488
+ return typeof value === 'number' && Number.isFinite(value);
489
+ }
490
+ function isShapeId(value) {
491
+ return typeof value === 'string' && value.length > 0;
492
+ }
493
+
494
+ class SnapshotCache {
495
+ entries = new Map();
496
+ totalBytes = 0;
497
+ clock = 0;
498
+ load(key, bytes, tessellator) {
499
+ this.drop(key, tessellator);
500
+ const slot = tessellator.load(bytes);
501
+ this.entries.set(key, { slot, bytes: bytes.byteLength, lastUse: ++this.clock });
502
+ this.totalBytes += bytes.byteLength;
503
+ }
504
+ drop(key, tessellator) {
505
+ const old = this.entries.get(key);
506
+ if (!old)
507
+ return;
508
+ tessellator.drop(old.slot);
509
+ this.entries.delete(key);
510
+ this.totalBytes -= old.bytes;
511
+ }
512
+ touch(key) {
513
+ const entry = this.entries.get(key);
514
+ if (!entry)
515
+ return undefined;
516
+ entry.lastUse = ++this.clock;
517
+ return entry.slot;
518
+ }
519
+ evict(except, tessellator) {
520
+ const evicted = [];
521
+ while (this.totalBytes > 128 * 1024 * 1024) {
522
+ const oldest = [...this.entries.entries()]
523
+ .filter(([key]) => key !== except)
524
+ .sort((a, b) => a[1].lastUse - b[1].lastUse)[0];
525
+ if (!oldest)
526
+ break;
527
+ this.drop(oldest[0], tessellator);
528
+ evicted.push(oldest[0]);
529
+ }
530
+ return evicted;
531
+ }
532
+ }
533
+
534
+ let tessellator;
535
+ let scheduled = false;
536
+ const SNAPSHOTS = new SnapshotCache();
537
+ const JOBS = new JobQueue();
538
+ const CHANNEL = new MessageChannel();
539
+ function error(value) {
540
+ if (value instanceof WebAssembly.RuntimeError) {
541
+ return { code: 'KernelPanic', message: takePanicMessage() ?? value.message, details: {} };
542
+ }
543
+ const parsed = typeof value === 'string' ? parseKernelError(value) : undefined;
544
+ return parsed ?? { code: 'WorkerFailure', message: String(value), details: {} };
545
+ }
546
+ function reply(message, transfer = []) {
547
+ self.postMessage(message, transfer);
548
+ }
549
+ function postEvicted(key) {
550
+ const at = key.lastIndexOf('@');
551
+ reply({ kind: 'evicted', shapeId: key.slice(0, at), revision: Number(key.slice(at + 1)) });
552
+ }
553
+ function answerSuperseded(request) {
554
+ if (request !== undefined)
555
+ reply({ request, superseded: true });
556
+ }
557
+ function schedule() {
558
+ if (scheduled || JOBS.size === 0)
559
+ return;
560
+ scheduled = true;
561
+ CHANNEL.port2.postMessage(null);
562
+ }
563
+ function run(job) {
564
+ const slot = SNAPSHOTS.touch(`${job.shapeId}@${String(job.revision)}`);
565
+ if (slot === undefined || !tessellator) {
566
+ reply({ request: job.request, missingSnapshot: true });
567
+ return;
568
+ }
569
+ try {
570
+ const angle = job.smoothAngle;
571
+ const buffers = validateDisplayBuffers(tessellator.buffers(slot, job.bucket, job.maxTriangles, angle));
572
+ reply({ request: job.request, ok: true, buffers }, [
573
+ buffers.positions.buffer, buffers.normals.buffer, buffers.indices.buffer,
574
+ buffers.faceRanges.buffer, buffers.outline.buffer, buffers.edgeIds.buffer, buffers.smoothEdges.buffer,
575
+ buffers.origin.buffer,
576
+ ]);
577
+ }
578
+ catch (cause) {
579
+ reply({ request: job.request, error: error(cause) });
580
+ }
581
+ }
582
+ CHANNEL.port1.onmessage = () => {
583
+ scheduled = false;
584
+ const next = JOBS.next();
585
+ if (!next)
586
+ return;
587
+ run(next);
588
+ schedule();
589
+ };
590
+ function init(module) {
591
+ initSync({ module });
592
+ tessellator = new OGTessellator();
593
+ reply({ request: 0, ok: true });
594
+ }
595
+ function handle(message, loaded) {
596
+ switch (message.kind) {
597
+ case 'snapshot': {
598
+ const key = `${message.shapeId}@${String(message.revision)}`;
599
+ SNAPSHOTS.load(key, message.bytes, loaded);
600
+ for (const evicted of SNAPSHOTS.evict(key, loaded))
601
+ postEvicted(evicted);
602
+ reply({ request: message.request, ok: true });
603
+ break;
604
+ }
605
+ case 'tessellate':
606
+ answerSuperseded(JOBS.push(message));
607
+ schedule();
608
+ break;
609
+ case 'cancel':
610
+ answerSuperseded(JOBS.cancel(message.shapeId, message.generation));
611
+ break;
612
+ case 'drop':
613
+ SNAPSHOTS.drop(`${message.shapeId}@${String(message.revision)}`, loaded);
614
+ break;
615
+ }
616
+ }
617
+ self.onmessage = (event) => {
618
+ const message = parseWorkerMessage(event.data);
619
+ const request = 'request' in message ? message.request : undefined;
620
+ try {
621
+ if ('error' in message)
622
+ reply(message);
623
+ else if (message.kind === 'init')
624
+ init(message.module);
625
+ else if (tessellator)
626
+ handle(message, tessellator);
627
+ else
628
+ reply({ request, error: { code: 'WorkerFailure', message: 'tessellation worker is not initialised' } });
629
+ }
630
+ catch (cause) {
631
+ reply({ request, error: error(cause) });
632
+ }
633
+ };
634
+ //# sourceMappingURL=tessellation-worker.js.map