@ifc-lite/wasm 6.4.0 → 7.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/README.md CHANGED
@@ -111,3 +111,52 @@ See the [WASM API Reference](https://ifclite.dev/docs/api/wasm/).
111
111
  ## License
112
112
 
113
113
  [MPL-2.0](https://mozilla.org/MPL/2.0/)
114
+
115
+
116
+ For appearance authoring, `IfcAPI.catalogAppearance` resolves current IFC product
117
+ classes and type memberships from an effective STEP snapshot before planning.
118
+ It shares bounded native decoding with `planAppearance`; run both in a worker and
119
+ validate the source revision before using a catalog or applying a plan. See the
120
+ [WASM API guide](../../docs/api/wasm.md#effective-appearance-scope-catalog) for the
121
+ request, response and limits.
122
+
123
+ `IfcAPI.planPageAppearance(content, requestJson, rgba)` adds a bounded finite-page
124
+ compositor. It returns an `IFPA` metadata/PNG envelope with per-item digest-named
125
+ assets and ordinary atomic IFC edits. Outside-page albedo is resampled from the
126
+ original canonical style/texture, not a repeated or clamped page border. Run in
127
+ a cancellable worker and retain all generated assets with the command. See the
128
+ [WASM API guide](../../docs/api/wasm.md#finite-page-appearance-output).
129
+
130
+ `IfcAPI.planAnnotationPlane` creates a bounded calibrated image `IfcAnnotation`
131
+ plan for an explicit spatial container, reusing canonical native geometry. Run it
132
+ in a worker and publish its typed entities, source-image lease and returned mesh
133
+ as one existing model/history transaction. See the [WASM API guide](../../docs/api/wasm.md#calibrated-annotation-creation)
134
+ for the Z-up geometry/top-down UV and allocator/source validation contract.
135
+
136
+ `IfcAPI.planCapturedMesh` creates a bounded `IfcBuildingElementProxy` plan from
137
+ an already segmented textured triangle mesh, retaining independent UV seams and
138
+ the original image URI. It uses the same native authoring and geometry path as
139
+ annotation creation. See [captured surface creation](../../docs/api/wasm.md#captured-textured-surface-creation)
140
+ for coordinate, budget and atomic host-commit requirements.
141
+
142
+ Captured-mesh planning preserves optional `repeatS`/`repeatT` image sampler flags
143
+ (default `false`); UVs remain bounded to `[0, 1]`.
144
+
145
+ `IfcAPI.registerScanCorrespondences` fits bounded manual source-scan/IFC point
146
+ pairs and returns a proper rigid transform plus separate fitting and held-out
147
+ residuals. Frames and asset identities are bound into the report; the call does
148
+ not align a loaded model or approve scan accuracy. See the
149
+ [registration contract](../../docs/api/wasm.md#scan-correspondence-registration).
150
+
151
+ `IfcAPI.planMeshTransfer` composes registered opaque textured-mesh observations
152
+ onto supported direct IFC tessellations using the shared atlas planner. Unknown
153
+ samples retain existing target albedo; the IFPA response includes explicit
154
+ coverage and frozen-input bindings. Entirely unknown transfer has no applicable
155
+ plan. See the [transfer contract](../../docs/api/wasm.md#registered-textured-mesh-appearance-transfer)
156
+ for source identity, coordinate frames, budgets and host acceptance requirements.
157
+
158
+ `IfcAPI.preparePdfVectorPage` validates bounded ordered PDF vector graphics states
159
+ and preserves source operator identity, calibrated transforms and paint state.
160
+ Unsupported content remains an explicit blocker. It emits no IFC entities and
161
+ makes no flattened-geometry fidelity claim; see the
162
+ [preparation contract](../../docs/api/wasm.md#pdf-vector-graphics-state-preparation).
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "IFC-Lite Contributors"
6
6
  ],
7
7
  "description": "WebAssembly bindings for IFC-Lite",
8
- "version": "6.4.0",
8
+ "version": "7.0.0",
9
9
  "license": "MPL-2.0",
10
10
  "repository": {
11
11
  "type": "git",
package/pkg/ifc-lite.d.ts CHANGED
@@ -313,6 +313,18 @@ export class IfcAPI {
313
313
  * Existing streaming prepass plus an exact full-source key in complete.
314
314
  */
315
315
  buildPrePassStreamingWithSourceFingerprint(data: Uint8Array, on_event: Function, chunk_size: number, disabled_type_names: string[] | null | undefined, skip_type_geometry: boolean): any;
316
+ /**
317
+ * Calibrate one raster plane from native-source landmarks and a measured
318
+ * world span. Returns UTF-8 CalibratedPlane JSON. Constant bounded work;
319
+ * does not read IFC, decode image pixels or mutate a model.
320
+ */
321
+ calibrateAppearancePlane(request_json: string): Uint8Array;
322
+ /**
323
+ * Catalog effective IfcProduct classes and IfcRelDefinesByType membership.
324
+ * JSON input is AppearanceCatalogRequest; output is AppearanceCatalog JSON.
325
+ * Run in a worker and validate sourceRevision before using the selectors.
326
+ */
327
+ catalogAppearance(content: Uint8Array, request_json: string): Uint8Array;
316
328
  /**
317
329
  * Clear the cached entity index (call between loads when reusing
318
330
  * the same `IfcAPI` instance — e.g. the parser worker keeps one
@@ -353,8 +365,17 @@ export class IfcAPI {
353
365
  *
354
366
  * `hidden` / `isolated` are express-id visibility filters; `hidden_types_csv` is a
355
367
  * comma-separated list of IFC type names whose class toggle is off (e.g.
356
- * `"IfcOpeningElement,IfcSpace"`). `include_metadata` attaches counts + per-node
357
- * `expressId`. Per-mesh RTC origin rides the node translation (precision-safe).
368
+ * `"IfcOpeningElement,IfcSpace"`). `isolated` carries the isolation allowlist's
369
+ * null-vs-empty distinction across the wasm boundary: omit it (`undefined`) for
370
+ * "no isolation filter" (every mesh is a candidate); pass an empty `Uint32Array`
371
+ * for "isolation is ACTIVE and currently matches nothing" (every mesh is
372
+ * excluded). Collapsing the two — as a bare `Uint32Array` parameter would force a
373
+ * caller to do — silently exports the whole model when a filter matches nothing
374
+ * (#4328 follow-up: reachable by filtering the Class tab to a type present only
375
+ * in a federated model's secondary member, then exporting "Visible Only"). A
376
+ * non-empty `Uint32Array` is the ordinary allowlist. `include_metadata` attaches
377
+ * counts + per-node `expressId`. Per-mesh RTC origin rides the node translation
378
+ * (precision-safe).
358
379
  * `lit` emits standard PBR materials that shade from normals; omitted or
359
380
  * `true` ⇒ lit (the default), `false` ⇒ flat `KHR_materials_unlit` (the
360
381
  * historical look — #1321). Optional at the boundary so older 5-arg callers
@@ -369,7 +390,7 @@ export class IfcAPI {
369
390
  * CLI/MCP wrappers; making the boundary itself refuse means SDK/viewer/
370
391
  * direct callers inherit it too (the TS guards stay as defense-in-depth).
371
392
  */
372
- exportGlb(content: Uint8Array, include_metadata: boolean, hidden: Uint32Array, isolated: Uint32Array, hidden_types_csv: string, lit?: boolean | null, emissive?: boolean | null): Uint8Array;
393
+ exportGlb(content: Uint8Array, include_metadata: boolean, hidden: Uint32Array, isolated: Uint32Array | null | undefined, hidden_types_csv: string, lit?: boolean | null, emissive?: boolean | null): Uint8Array;
373
394
  /**
374
395
  * Assemble a **GLB** from already-produced meshes (the viewer's `MeshData`, flattened)
375
396
  * — no re-meshing. Per mesh `i`: `vertex_counts[i]` verts + `index_counts[i]` indices
@@ -477,14 +498,21 @@ export class IfcAPI {
477
498
  * V8 max-string ceiling (~512 MB); decode with `TextDecoder` when a string
478
499
  * is genuinely needed.
479
500
  *
480
- * `hidden` / `isolated` are express-id filters mirroring the viewer's visibility
481
- * state (empty `isolated` all visible). Instanced type-library shapes are skipped.
501
+ * `hidden` is an express-id filter mirroring the viewer's visibility state.
502
+ * `isolated` carries the isolation allowlist's null-vs-empty distinction across
503
+ * the wasm boundary: omit it (`undefined`) for "no isolation filter" (every mesh
504
+ * is a candidate); pass an empty `Uint32Array` for "isolation is ACTIVE and
505
+ * currently matches nothing" (every mesh is excluded). Collapsing the two — as a
506
+ * bare `Uint32Array` parameter would force a caller to do — silently exports the
507
+ * whole model when a filter matches nothing (the OBJ twin of #4328/#4364, fixed
508
+ * for GLB in `export_glb`). A non-empty `Uint32Array` is the ordinary allowlist.
509
+ * Instanced type-library shapes are skipped regardless of the filter.
482
510
  *
483
511
  * ```javascript
484
- * const obj = api.exportObj(ifcContent, true, new Uint32Array(), new Uint32Array());
512
+ * const obj = api.exportObj(ifcContent, true, new Uint32Array(), undefined);
485
513
  * ```
486
514
  */
487
- exportObj(content: Uint8Array, include_normals: boolean, hidden: Uint32Array, isolated: Uint32Array): Uint8Array;
515
+ exportObj(content: Uint8Array, include_normals: boolean, hidden: Uint32Array, isolated?: Uint32Array | null): Uint8Array;
488
516
  /**
489
517
  * Re-serialize the model in `content` to STEP/IFC UTF-8 bytes.
490
518
  *
@@ -605,6 +633,49 @@ export class IfcAPI {
605
633
  * ```
606
634
  */
607
635
  parseSymbolicRepresentations(content: string): SymbolicRepresentationCollection;
636
+ /**
637
+ * Create a calibrated image annotation through canonical native geometry.
638
+ * Input is AnnotationPlaneRequest; output UTF-8 AnnotationPlanePlan JSON.
639
+ * Does not mutate the IFC snapshot or decode the host-owned image.
640
+ */
641
+ planAnnotationPlane(content: Uint8Array, request_json: string): Uint8Array;
642
+ /**
643
+ * Plan image/UV edits against an effective IFC snapshot without mutating it.
644
+ * JSON input uses AppearanceRequest; output is UTF-8 AppearancePlan JSON.
645
+ * Call from a worker, then validate sourceRevision and allocator before an
646
+ * atomic host commit. Preview UVs describe an unsplit canonical mesh item.
647
+ */
648
+ planAppearance(content: Uint8Array, request_json: string): Uint8Array;
649
+ /**
650
+ * Create a captured textured surface through canonical native geometry.
651
+ * Input is CapturedMeshRequest; output UTF-8 CapturedMeshPlan JSON.
652
+ * Does not mutate the IFC snapshot or decode the host-owned image.
653
+ */
654
+ planCapturedMesh(content: Uint8Array, request_json: string): Uint8Array;
655
+ /**
656
+ * Registered mesh observations over canonical target albedo. Host verifies
657
+ * original GLB identity against decoded source mesh/image and freezes frames.
658
+ * Run in an owned cancellable worker. IFPA output adds `transfer` coverage;
659
+ * `plan` is null when no sample is observed. Never infer accuracy approval.
660
+ */
661
+ planMeshTransfer(content: Uint8Array, request_json: string, rgba: Uint8Array): Uint8Array;
662
+ /**
663
+ * Finite-page composition over original canonical albedo. RGBA is supplied
664
+ * separately from the bounded JSON request. Result: IFPA magic, little-endian
665
+ * u32 JSON byte length, metadata JSON, then PNG bytes addressed by metadata.
666
+ * Run in a cancellable worker; atomically adopt every item asset and IFC edit.
667
+ */
668
+ planPageAppearance(content: Uint8Array, request_json: string, rgba: Uint8Array): Uint8Array;
669
+ /**
670
+ * Plan a complete opaque polygonal PDF fill page as canonical IfcAnnotation
671
+ * geometry. Painted strokes, curves and unsupported states refuse atomically.
672
+ */
673
+ planPdfFillAnnotation(source: Uint8Array, request_json: string): Uint8Array;
674
+ /**
675
+ * Prepare bounded ordered PDF vector graphics states. No IFC entities or
676
+ * flattened geometry are produced; unsupported content prevents qualification.
677
+ */
678
+ preparePdfVectorPage(request_json: string): Uint8Array;
608
679
  /**
609
680
  * Process geometry for a subset of pre-scanned entities → flat
610
681
  * MeshCollection. Takes raw bytes + pre-pass data from buildPrePassOnce.
@@ -655,6 +726,11 @@ export class IfcAPI {
655
726
  * Byte-for-byte identical output — it delegates to the legacy twin.
656
727
  */
657
728
  processGeometryBatchPartitionedFromSource(jobs_flat: Uint32Array, unit_scale: number, rtc_x: number, rtc_y: number, rtc_z: number, needs_shift: boolean, void_keys: Uint32Array, void_counts: Uint32Array, void_values: Uint32Array, style_ids: Uint32Array, style_colors: Uint8Array, plane_angle_to_radians?: number | null, material_element_ids?: Uint32Array | null, material_color_counts?: Uint32Array | null, material_colors_rgba?: Uint8Array | null): PartitionedBatch;
729
+ /**
730
+ * Fit bounded manual correspondences in source metres -> IFC world Z-up
731
+ * metres, reporting held-out errors separately. Does not load or move models.
732
+ */
733
+ registerScanCorrespondences(request_json: string): Uint8Array;
658
734
  /**
659
735
  * Sharded pre-pass: resolve ONE contiguous (file-ordered) slice of the
660
736
  * styled-item span list on this worker, against the entity index installed
@@ -1564,6 +1640,7 @@ export class SymbolicFillArea {
1564
1640
  readonly fillB: number;
1565
1641
  readonly fillG: number;
1566
1642
  readonly fillR: number;
1643
+ readonly geometryItemId: number | undefined;
1567
1644
  readonly hasHatching: boolean;
1568
1645
  readonly hatchAngle: number;
1569
1646
  readonly hatchAngleSecondary: number;
@@ -1998,6 +2075,8 @@ export interface InitOutput {
1998
2075
  readonly ifcapi_buildPrePassStreamingSharded: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number) => void;
1999
2076
  readonly ifcapi_buildPrePassStreamingShardedWithSourceFingerprint: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number) => void;
2000
2077
  readonly ifcapi_buildPrePassStreamingWithSourceFingerprint: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => void;
2078
+ readonly ifcapi_calibrateAppearancePlane: (a: number, b: number, c: number, d: number) => void;
2079
+ readonly ifcapi_catalogAppearance: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
2001
2080
  readonly ifcapi_clearPrePassCache: (a: number) => void;
2002
2081
  readonly ifcapi_diagnoseGeometry: (a: number, b: number, c: number) => number;
2003
2082
  readonly ifcapi_exportCsv: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => void;
@@ -2026,11 +2105,19 @@ export interface InitOutput {
2026
2105
  readonly ifcapi_parseGridAxes: (a: number, b: number, c: number) => number;
2027
2106
  readonly ifcapi_parseGridLines: (a: number, b: number, c: number) => number;
2028
2107
  readonly ifcapi_parseSymbolicRepresentations: (a: number, b: number, c: number) => number;
2108
+ readonly ifcapi_planAnnotationPlane: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
2109
+ readonly ifcapi_planAppearance: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
2110
+ readonly ifcapi_planCapturedMesh: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
2111
+ readonly ifcapi_planMeshTransfer: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => void;
2112
+ readonly ifcapi_planPageAppearance: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => void;
2113
+ readonly ifcapi_planPdfFillAnnotation: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
2114
+ readonly ifcapi_preparePdfVectorPage: (a: number, b: number, c: number, d: number) => void;
2029
2115
  readonly ifcapi_processGeometryBatch: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number, s: number, t: number, u: number, v: number, w: number, x: number, y: number, z: number, a1: number, b1: number) => number;
2030
2116
  readonly ifcapi_processGeometryBatchFromSource: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number, s: number, t: number, u: number, v: number, w: number, x: number, y: number, z: number) => number;
2031
2117
  readonly ifcapi_processGeometryBatchInstanced: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number, s: number, t: number, u: number, v: number, w: number, x: number, y: number, z: number, a1: number, b1: number, c1: number) => void;
2032
2118
  readonly ifcapi_processGeometryBatchPartitioned: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number, s: number, t: number, u: number, v: number, w: number, x: number, y: number, z: number, a1: number, b1: number) => number;
2033
2119
  readonly ifcapi_processGeometryBatchPartitionedFromSource: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number, s: number, t: number, u: number, v: number, w: number, x: number, y: number, z: number) => number;
2120
+ readonly ifcapi_registerScanCorrespondences: (a: number, b: number, c: number, d: number) => void;
2034
2121
  readonly ifcapi_resolveStyledItemsShard: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
2035
2122
  readonly ifcapi_resolveStyledItemsShardFromSource: (a: number, b: number, c: number, d: number) => void;
2036
2123
  readonly ifcapi_scanEntitiesFast: (a: number, b: number, c: number) => number;
@@ -2161,10 +2248,12 @@ export interface InitOutput {
2161
2248
  readonly symboliccircle_repIdentifier: (a: number, b: number) => void;
2162
2249
  readonly symboliccircle_startAngle: (a: number) => number;
2163
2250
  readonly symboliccircle_worldY: (a: number) => number;
2251
+ readonly symbolicfillarea_expressId: (a: number) => number;
2164
2252
  readonly symbolicfillarea_fillA: (a: number) => number;
2165
2253
  readonly symbolicfillarea_fillB: (a: number) => number;
2166
2254
  readonly symbolicfillarea_fillG: (a: number) => number;
2167
2255
  readonly symbolicfillarea_fillR: (a: number) => number;
2256
+ readonly symbolicfillarea_geometryItemId: (a: number) => number;
2168
2257
  readonly symbolicfillarea_hasHatching: (a: number) => number;
2169
2258
  readonly symbolicfillarea_hatchAngle: (a: number) => number;
2170
2259
  readonly symbolicfillarea_hatchAngleSecondary: (a: number) => number;
@@ -2180,6 +2269,7 @@ export interface InitOutput {
2180
2269
  readonly symbolicpolyline_expressId: (a: number) => number;
2181
2270
  readonly symbolicpolyline_ifcType: (a: number, b: number) => void;
2182
2271
  readonly symbolicpolyline_isClosed: (a: number) => number;
2272
+ readonly symbolicpolyline_pointCount: (a: number) => number;
2183
2273
  readonly symbolicpolyline_points: (a: number) => number;
2184
2274
  readonly symbolicpolyline_repIdentifier: (a: number, b: number) => void;
2185
2275
  readonly symbolicrepresentationcollection_circleCount: (a: number) => number;
@@ -2197,11 +2287,11 @@ export interface InitOutput {
2197
2287
  readonly symbolicrepresentationcollection_truncatedLimit: (a: number) => number;
2198
2288
  readonly symbolicrepresentationcollection_truncatedReason: (a: number, b: number) => void;
2199
2289
  readonly symbolictext_alignment: (a: number, b: number) => void;
2200
- readonly symbolictext_colorA: (a: number) => number;
2201
2290
  readonly symbolictext_content: (a: number, b: number) => void;
2202
2291
  readonly symbolictext_ifcType: (a: number, b: number) => void;
2203
2292
  readonly symbolictext_repIdentifier: (a: number, b: number) => void;
2204
- readonly symbolictext_targetPx: (a: number) => number;
2293
+ readonly symbolictext_x: (a: number) => number;
2294
+ readonly symbolictext_y: (a: number) => number;
2205
2295
  readonly union2d: (a: number, b: number) => number;
2206
2296
  readonly version: (a: number) => void;
2207
2297
  readonly zonepiecejs_indices: (a: number) => number;
@@ -2211,10 +2301,9 @@ export interface InitOutput {
2211
2301
  readonly zonesplitjs_pieceCount: (a: number) => number;
2212
2302
  readonly zonesplitjs_remainderFailed: (a: number) => number;
2213
2303
  readonly meshoutlinejs_contourCount: (a: number) => number;
2214
- readonly symbolicpolyline_pointCount: (a: number) => number;
2215
2304
  readonly get_memory: () => number;
2216
- readonly symbolicfillarea_expressId: (a: number) => number;
2217
2305
  readonly symbolicpolyline_worldY: (a: number) => number;
2306
+ readonly symbolictext_colorA: (a: number) => number;
2218
2307
  readonly symbolictext_colorB: (a: number) => number;
2219
2308
  readonly symbolictext_colorG: (a: number) => number;
2220
2309
  readonly symbolictext_colorR: (a: number) => number;
@@ -2222,9 +2311,8 @@ export interface InitOutput {
2222
2311
  readonly symbolictext_dirY: (a: number) => number;
2223
2312
  readonly symbolictext_expressId: (a: number) => number;
2224
2313
  readonly symbolictext_height: (a: number) => number;
2314
+ readonly symbolictext_targetPx: (a: number) => number;
2225
2315
  readonly symbolictext_worldY: (a: number) => number;
2226
- readonly symbolictext_x: (a: number) => number;
2227
- readonly symbolictext_y: (a: number) => number;
2228
2316
  readonly zonepiecejs_volume: (a: number) => number;
2229
2317
  readonly zonesplitjs_sumErrorRel: (a: number) => number;
2230
2318
  readonly zonesplitjs_wholeVolume: (a: number) => number;
package/pkg/ifc-lite.js CHANGED
@@ -840,6 +840,63 @@ export class IfcAPI {
840
840
  heap[stack_pointer++] = undefined;
841
841
  }
842
842
  }
843
+ /**
844
+ * Calibrate one raster plane from native-source landmarks and a measured
845
+ * world span. Returns UTF-8 CalibratedPlane JSON. Constant bounded work;
846
+ * does not read IFC, decode image pixels or mutate a model.
847
+ * @param {string} request_json
848
+ * @returns {Uint8Array}
849
+ */
850
+ calibrateAppearancePlane(request_json) {
851
+ try {
852
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
853
+ const ptr0 = passStringToWasm0(request_json, wasm.__wbindgen_export, wasm.__wbindgen_export2);
854
+ const len0 = WASM_VECTOR_LEN;
855
+ wasm.ifcapi_calibrateAppearancePlane(retptr, this.__wbg_ptr, ptr0, len0);
856
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
857
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
858
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
859
+ var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
860
+ if (r3) {
861
+ throw takeObject(r2);
862
+ }
863
+ var v2 = getArrayU8FromWasm0(r0, r1).slice();
864
+ wasm.__wbindgen_export4(r0, r1 * 1, 1);
865
+ return v2;
866
+ } finally {
867
+ wasm.__wbindgen_add_to_stack_pointer(16);
868
+ }
869
+ }
870
+ /**
871
+ * Catalog effective IfcProduct classes and IfcRelDefinesByType membership.
872
+ * JSON input is AppearanceCatalogRequest; output is AppearanceCatalog JSON.
873
+ * Run in a worker and validate sourceRevision before using the selectors.
874
+ * @param {Uint8Array} content
875
+ * @param {string} request_json
876
+ * @returns {Uint8Array}
877
+ */
878
+ catalogAppearance(content, request_json) {
879
+ try {
880
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
881
+ const ptr0 = passArray8ToWasm0(content, wasm.__wbindgen_export);
882
+ const len0 = WASM_VECTOR_LEN;
883
+ const ptr1 = passStringToWasm0(request_json, wasm.__wbindgen_export, wasm.__wbindgen_export2);
884
+ const len1 = WASM_VECTOR_LEN;
885
+ wasm.ifcapi_catalogAppearance(retptr, this.__wbg_ptr, ptr0, len0, ptr1, len1);
886
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
887
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
888
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
889
+ var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
890
+ if (r3) {
891
+ throw takeObject(r2);
892
+ }
893
+ var v3 = getArrayU8FromWasm0(r0, r1).slice();
894
+ wasm.__wbindgen_export4(r0, r1 * 1, 1);
895
+ return v3;
896
+ } finally {
897
+ wasm.__wbindgen_add_to_stack_pointer(16);
898
+ }
899
+ }
843
900
  /**
844
901
  * Clear the cached entity index (call between loads when reusing
845
902
  * the same `IfcAPI` instance — e.g. the parser worker keeps one
@@ -934,8 +991,17 @@ export class IfcAPI {
934
991
  *
935
992
  * `hidden` / `isolated` are express-id visibility filters; `hidden_types_csv` is a
936
993
  * comma-separated list of IFC type names whose class toggle is off (e.g.
937
- * `"IfcOpeningElement,IfcSpace"`). `include_metadata` attaches counts + per-node
938
- * `expressId`. Per-mesh RTC origin rides the node translation (precision-safe).
994
+ * `"IfcOpeningElement,IfcSpace"`). `isolated` carries the isolation allowlist's
995
+ * null-vs-empty distinction across the wasm boundary: omit it (`undefined`) for
996
+ * "no isolation filter" (every mesh is a candidate); pass an empty `Uint32Array`
997
+ * for "isolation is ACTIVE and currently matches nothing" (every mesh is
998
+ * excluded). Collapsing the two — as a bare `Uint32Array` parameter would force a
999
+ * caller to do — silently exports the whole model when a filter matches nothing
1000
+ * (#4328 follow-up: reachable by filtering the Class tab to a type present only
1001
+ * in a federated model's secondary member, then exporting "Visible Only"). A
1002
+ * non-empty `Uint32Array` is the ordinary allowlist. `include_metadata` attaches
1003
+ * counts + per-node `expressId`. Per-mesh RTC origin rides the node translation
1004
+ * (precision-safe).
939
1005
  * `lit` emits standard PBR materials that shade from normals; omitted or
940
1006
  * `true` ⇒ lit (the default), `false` ⇒ flat `KHR_materials_unlit` (the
941
1007
  * historical look — #1321). Optional at the boundary so older 5-arg callers
@@ -952,7 +1018,7 @@ export class IfcAPI {
952
1018
  * @param {Uint8Array} content
953
1019
  * @param {boolean} include_metadata
954
1020
  * @param {Uint32Array} hidden
955
- * @param {Uint32Array} isolated
1021
+ * @param {Uint32Array | null | undefined} isolated
956
1022
  * @param {string} hidden_types_csv
957
1023
  * @param {boolean | null} [lit]
958
1024
  * @param {boolean | null} [emissive]
@@ -965,8 +1031,8 @@ export class IfcAPI {
965
1031
  const len0 = WASM_VECTOR_LEN;
966
1032
  const ptr1 = passArray32ToWasm0(hidden, wasm.__wbindgen_export);
967
1033
  const len1 = WASM_VECTOR_LEN;
968
- const ptr2 = passArray32ToWasm0(isolated, wasm.__wbindgen_export);
969
- const len2 = WASM_VECTOR_LEN;
1034
+ var ptr2 = isLikeNone(isolated) ? 0 : passArray32ToWasm0(isolated, wasm.__wbindgen_export);
1035
+ var len2 = WASM_VECTOR_LEN;
970
1036
  const ptr3 = passStringToWasm0(hidden_types_csv, wasm.__wbindgen_export, wasm.__wbindgen_export2);
971
1037
  const len3 = WASM_VECTOR_LEN;
972
1038
  wasm.ifcapi_exportGlb(retptr, this.__wbg_ptr, ptr0, len0, include_metadata, ptr1, len1, ptr2, len2, ptr3, len3, isLikeNone(lit) ? 0xFFFFFF : lit ? 1 : 0, isLikeNone(emissive) ? 0xFFFFFF : emissive ? 1 : 0);
@@ -1321,16 +1387,23 @@ export class IfcAPI {
1321
1387
  * V8 max-string ceiling (~512 MB); decode with `TextDecoder` when a string
1322
1388
  * is genuinely needed.
1323
1389
  *
1324
- * `hidden` / `isolated` are express-id filters mirroring the viewer's visibility
1325
- * state (empty `isolated` all visible). Instanced type-library shapes are skipped.
1390
+ * `hidden` is an express-id filter mirroring the viewer's visibility state.
1391
+ * `isolated` carries the isolation allowlist's null-vs-empty distinction across
1392
+ * the wasm boundary: omit it (`undefined`) for "no isolation filter" (every mesh
1393
+ * is a candidate); pass an empty `Uint32Array` for "isolation is ACTIVE and
1394
+ * currently matches nothing" (every mesh is excluded). Collapsing the two — as a
1395
+ * bare `Uint32Array` parameter would force a caller to do — silently exports the
1396
+ * whole model when a filter matches nothing (the OBJ twin of #4328/#4364, fixed
1397
+ * for GLB in `export_glb`). A non-empty `Uint32Array` is the ordinary allowlist.
1398
+ * Instanced type-library shapes are skipped regardless of the filter.
1326
1399
  *
1327
1400
  * ```javascript
1328
- * const obj = api.exportObj(ifcContent, true, new Uint32Array(), new Uint32Array());
1401
+ * const obj = api.exportObj(ifcContent, true, new Uint32Array(), undefined);
1329
1402
  * ```
1330
1403
  * @param {Uint8Array} content
1331
1404
  * @param {boolean} include_normals
1332
1405
  * @param {Uint32Array} hidden
1333
- * @param {Uint32Array} isolated
1406
+ * @param {Uint32Array | null} [isolated]
1334
1407
  * @returns {Uint8Array}
1335
1408
  */
1336
1409
  exportObj(content, include_normals, hidden, isolated) {
@@ -1340,8 +1413,8 @@ export class IfcAPI {
1340
1413
  const len0 = WASM_VECTOR_LEN;
1341
1414
  const ptr1 = passArray32ToWasm0(hidden, wasm.__wbindgen_export);
1342
1415
  const len1 = WASM_VECTOR_LEN;
1343
- const ptr2 = passArray32ToWasm0(isolated, wasm.__wbindgen_export);
1344
- const len2 = WASM_VECTOR_LEN;
1416
+ var ptr2 = isLikeNone(isolated) ? 0 : passArray32ToWasm0(isolated, wasm.__wbindgen_export);
1417
+ var len2 = WASM_VECTOR_LEN;
1345
1418
  wasm.ifcapi_exportObj(retptr, this.__wbg_ptr, ptr0, len0, include_normals, ptr1, len1, ptr2, len2);
1346
1419
  var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
1347
1420
  var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
@@ -1665,6 +1738,220 @@ export class IfcAPI {
1665
1738
  const ret = wasm.ifcapi_parseSymbolicRepresentations(this.__wbg_ptr, ptr0, len0);
1666
1739
  return SymbolicRepresentationCollection.__wrap(ret);
1667
1740
  }
1741
+ /**
1742
+ * Create a calibrated image annotation through canonical native geometry.
1743
+ * Input is AnnotationPlaneRequest; output UTF-8 AnnotationPlanePlan JSON.
1744
+ * Does not mutate the IFC snapshot or decode the host-owned image.
1745
+ * @param {Uint8Array} content
1746
+ * @param {string} request_json
1747
+ * @returns {Uint8Array}
1748
+ */
1749
+ planAnnotationPlane(content, request_json) {
1750
+ try {
1751
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
1752
+ const ptr0 = passArray8ToWasm0(content, wasm.__wbindgen_export);
1753
+ const len0 = WASM_VECTOR_LEN;
1754
+ const ptr1 = passStringToWasm0(request_json, wasm.__wbindgen_export, wasm.__wbindgen_export2);
1755
+ const len1 = WASM_VECTOR_LEN;
1756
+ wasm.ifcapi_planAnnotationPlane(retptr, this.__wbg_ptr, ptr0, len0, ptr1, len1);
1757
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
1758
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
1759
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
1760
+ var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
1761
+ if (r3) {
1762
+ throw takeObject(r2);
1763
+ }
1764
+ var v3 = getArrayU8FromWasm0(r0, r1).slice();
1765
+ wasm.__wbindgen_export4(r0, r1 * 1, 1);
1766
+ return v3;
1767
+ } finally {
1768
+ wasm.__wbindgen_add_to_stack_pointer(16);
1769
+ }
1770
+ }
1771
+ /**
1772
+ * Plan image/UV edits against an effective IFC snapshot without mutating it.
1773
+ * JSON input uses AppearanceRequest; output is UTF-8 AppearancePlan JSON.
1774
+ * Call from a worker, then validate sourceRevision and allocator before an
1775
+ * atomic host commit. Preview UVs describe an unsplit canonical mesh item.
1776
+ * @param {Uint8Array} content
1777
+ * @param {string} request_json
1778
+ * @returns {Uint8Array}
1779
+ */
1780
+ planAppearance(content, request_json) {
1781
+ try {
1782
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
1783
+ const ptr0 = passArray8ToWasm0(content, wasm.__wbindgen_export);
1784
+ const len0 = WASM_VECTOR_LEN;
1785
+ const ptr1 = passStringToWasm0(request_json, wasm.__wbindgen_export, wasm.__wbindgen_export2);
1786
+ const len1 = WASM_VECTOR_LEN;
1787
+ wasm.ifcapi_planAppearance(retptr, this.__wbg_ptr, ptr0, len0, ptr1, len1);
1788
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
1789
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
1790
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
1791
+ var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
1792
+ if (r3) {
1793
+ throw takeObject(r2);
1794
+ }
1795
+ var v3 = getArrayU8FromWasm0(r0, r1).slice();
1796
+ wasm.__wbindgen_export4(r0, r1 * 1, 1);
1797
+ return v3;
1798
+ } finally {
1799
+ wasm.__wbindgen_add_to_stack_pointer(16);
1800
+ }
1801
+ }
1802
+ /**
1803
+ * Create a captured textured surface through canonical native geometry.
1804
+ * Input is CapturedMeshRequest; output UTF-8 CapturedMeshPlan JSON.
1805
+ * Does not mutate the IFC snapshot or decode the host-owned image.
1806
+ * @param {Uint8Array} content
1807
+ * @param {string} request_json
1808
+ * @returns {Uint8Array}
1809
+ */
1810
+ planCapturedMesh(content, request_json) {
1811
+ try {
1812
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
1813
+ const ptr0 = passArray8ToWasm0(content, wasm.__wbindgen_export);
1814
+ const len0 = WASM_VECTOR_LEN;
1815
+ const ptr1 = passStringToWasm0(request_json, wasm.__wbindgen_export, wasm.__wbindgen_export2);
1816
+ const len1 = WASM_VECTOR_LEN;
1817
+ wasm.ifcapi_planCapturedMesh(retptr, this.__wbg_ptr, ptr0, len0, ptr1, len1);
1818
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
1819
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
1820
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
1821
+ var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
1822
+ if (r3) {
1823
+ throw takeObject(r2);
1824
+ }
1825
+ var v3 = getArrayU8FromWasm0(r0, r1).slice();
1826
+ wasm.__wbindgen_export4(r0, r1 * 1, 1);
1827
+ return v3;
1828
+ } finally {
1829
+ wasm.__wbindgen_add_to_stack_pointer(16);
1830
+ }
1831
+ }
1832
+ /**
1833
+ * Registered mesh observations over canonical target albedo. Host verifies
1834
+ * original GLB identity against decoded source mesh/image and freezes frames.
1835
+ * Run in an owned cancellable worker. IFPA output adds `transfer` coverage;
1836
+ * `plan` is null when no sample is observed. Never infer accuracy approval.
1837
+ * @param {Uint8Array} content
1838
+ * @param {string} request_json
1839
+ * @param {Uint8Array} rgba
1840
+ * @returns {Uint8Array}
1841
+ */
1842
+ planMeshTransfer(content, request_json, rgba) {
1843
+ try {
1844
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
1845
+ const ptr0 = passArray8ToWasm0(content, wasm.__wbindgen_export);
1846
+ const len0 = WASM_VECTOR_LEN;
1847
+ const ptr1 = passStringToWasm0(request_json, wasm.__wbindgen_export, wasm.__wbindgen_export2);
1848
+ const len1 = WASM_VECTOR_LEN;
1849
+ const ptr2 = passArray8ToWasm0(rgba, wasm.__wbindgen_export);
1850
+ const len2 = WASM_VECTOR_LEN;
1851
+ wasm.ifcapi_planMeshTransfer(retptr, this.__wbg_ptr, ptr0, len0, ptr1, len1, ptr2, len2);
1852
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
1853
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
1854
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
1855
+ var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
1856
+ if (r3) {
1857
+ throw takeObject(r2);
1858
+ }
1859
+ var v4 = getArrayU8FromWasm0(r0, r1).slice();
1860
+ wasm.__wbindgen_export4(r0, r1 * 1, 1);
1861
+ return v4;
1862
+ } finally {
1863
+ wasm.__wbindgen_add_to_stack_pointer(16);
1864
+ }
1865
+ }
1866
+ /**
1867
+ * Finite-page composition over original canonical albedo. RGBA is supplied
1868
+ * separately from the bounded JSON request. Result: IFPA magic, little-endian
1869
+ * u32 JSON byte length, metadata JSON, then PNG bytes addressed by metadata.
1870
+ * Run in a cancellable worker; atomically adopt every item asset and IFC edit.
1871
+ * @param {Uint8Array} content
1872
+ * @param {string} request_json
1873
+ * @param {Uint8Array} rgba
1874
+ * @returns {Uint8Array}
1875
+ */
1876
+ planPageAppearance(content, request_json, rgba) {
1877
+ try {
1878
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
1879
+ const ptr0 = passArray8ToWasm0(content, wasm.__wbindgen_export);
1880
+ const len0 = WASM_VECTOR_LEN;
1881
+ const ptr1 = passStringToWasm0(request_json, wasm.__wbindgen_export, wasm.__wbindgen_export2);
1882
+ const len1 = WASM_VECTOR_LEN;
1883
+ const ptr2 = passArray8ToWasm0(rgba, wasm.__wbindgen_export);
1884
+ const len2 = WASM_VECTOR_LEN;
1885
+ wasm.ifcapi_planPageAppearance(retptr, this.__wbg_ptr, ptr0, len0, ptr1, len1, ptr2, len2);
1886
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
1887
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
1888
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
1889
+ var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
1890
+ if (r3) {
1891
+ throw takeObject(r2);
1892
+ }
1893
+ var v4 = getArrayU8FromWasm0(r0, r1).slice();
1894
+ wasm.__wbindgen_export4(r0, r1 * 1, 1);
1895
+ return v4;
1896
+ } finally {
1897
+ wasm.__wbindgen_add_to_stack_pointer(16);
1898
+ }
1899
+ }
1900
+ /**
1901
+ * Plan a complete opaque polygonal PDF fill page as canonical IfcAnnotation
1902
+ * geometry. Painted strokes, curves and unsupported states refuse atomically.
1903
+ * @param {Uint8Array} source
1904
+ * @param {string} request_json
1905
+ * @returns {Uint8Array}
1906
+ */
1907
+ planPdfFillAnnotation(source, request_json) {
1908
+ try {
1909
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
1910
+ const ptr0 = passArray8ToWasm0(source, wasm.__wbindgen_export);
1911
+ const len0 = WASM_VECTOR_LEN;
1912
+ const ptr1 = passStringToWasm0(request_json, wasm.__wbindgen_export, wasm.__wbindgen_export2);
1913
+ const len1 = WASM_VECTOR_LEN;
1914
+ wasm.ifcapi_planPdfFillAnnotation(retptr, this.__wbg_ptr, ptr0, len0, ptr1, len1);
1915
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
1916
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
1917
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
1918
+ var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
1919
+ if (r3) {
1920
+ throw takeObject(r2);
1921
+ }
1922
+ var v3 = getArrayU8FromWasm0(r0, r1).slice();
1923
+ wasm.__wbindgen_export4(r0, r1 * 1, 1);
1924
+ return v3;
1925
+ } finally {
1926
+ wasm.__wbindgen_add_to_stack_pointer(16);
1927
+ }
1928
+ }
1929
+ /**
1930
+ * Prepare bounded ordered PDF vector graphics states. No IFC entities or
1931
+ * flattened geometry are produced; unsupported content prevents qualification.
1932
+ * @param {string} request_json
1933
+ * @returns {Uint8Array}
1934
+ */
1935
+ preparePdfVectorPage(request_json) {
1936
+ try {
1937
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
1938
+ const ptr0 = passStringToWasm0(request_json, wasm.__wbindgen_export, wasm.__wbindgen_export2);
1939
+ const len0 = WASM_VECTOR_LEN;
1940
+ wasm.ifcapi_preparePdfVectorPage(retptr, this.__wbg_ptr, ptr0, len0);
1941
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
1942
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
1943
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
1944
+ var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
1945
+ if (r3) {
1946
+ throw takeObject(r2);
1947
+ }
1948
+ var v2 = getArrayU8FromWasm0(r0, r1).slice();
1949
+ wasm.__wbindgen_export4(r0, r1 * 1, 1);
1950
+ return v2;
1951
+ } finally {
1952
+ wasm.__wbindgen_add_to_stack_pointer(16);
1953
+ }
1954
+ }
1668
1955
  /**
1669
1956
  * Process geometry for a subset of pre-scanned entities → flat
1670
1957
  * MeshCollection. Takes raw bytes + pre-pass data from buildPrePassOnce.
@@ -1918,6 +2205,32 @@ export class IfcAPI {
1918
2205
  const ret = wasm.ifcapi_processGeometryBatchPartitionedFromSource(this.__wbg_ptr, ptr0, len0, unit_scale, rtc_x, rtc_y, rtc_z, needs_shift, ptr1, len1, ptr2, len2, ptr3, len3, ptr4, len4, ptr5, len5, !isLikeNone(plane_angle_to_radians), isLikeNone(plane_angle_to_radians) ? 0 : plane_angle_to_radians, ptr6, len6, ptr7, len7, ptr8, len8);
1919
2206
  return PartitionedBatch.__wrap(ret);
1920
2207
  }
2208
+ /**
2209
+ * Fit bounded manual correspondences in source metres -> IFC world Z-up
2210
+ * metres, reporting held-out errors separately. Does not load or move models.
2211
+ * @param {string} request_json
2212
+ * @returns {Uint8Array}
2213
+ */
2214
+ registerScanCorrespondences(request_json) {
2215
+ try {
2216
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
2217
+ const ptr0 = passStringToWasm0(request_json, wasm.__wbindgen_export, wasm.__wbindgen_export2);
2218
+ const len0 = WASM_VECTOR_LEN;
2219
+ wasm.ifcapi_registerScanCorrespondences(retptr, this.__wbg_ptr, ptr0, len0);
2220
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
2221
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
2222
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
2223
+ var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
2224
+ if (r3) {
2225
+ throw takeObject(r2);
2226
+ }
2227
+ var v2 = getArrayU8FromWasm0(r0, r1).slice();
2228
+ wasm.__wbindgen_export4(r0, r1 * 1, 1);
2229
+ return v2;
2230
+ } finally {
2231
+ wasm.__wbindgen_add_to_stack_pointer(16);
2232
+ }
2233
+ }
1921
2234
  /**
1922
2235
  * Sharded pre-pass: resolve ONE contiguous (file-ordered) slice of the
1923
2236
  * styled-item span list on this worker, against the entity index installed
@@ -4154,6 +4467,13 @@ export class SymbolicFillArea {
4154
4467
  const ret = wasm.symbolicfillarea_fillR(this.__wbg_ptr);
4155
4468
  return ret;
4156
4469
  }
4470
+ /**
4471
+ * @returns {number | undefined}
4472
+ */
4473
+ get geometryItemId() {
4474
+ const ret = wasm.symbolicfillarea_geometryItemId(this.__wbg_ptr);
4475
+ return ret === Number.MAX_SAFE_INTEGER ? undefined : ret;
4476
+ }
4157
4477
  /**
4158
4478
  * @returns {boolean}
4159
4479
  */
Binary file