@bldrs-ai/conway 1.389.1221 → 1.394.1504
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 +36 -22
- package/compiled/Dist/ConwayGeomWasmNode.js +0 -0
- package/compiled/Dist/ConwayGeomWasmNodeMT.js +0 -0
- package/compiled/Dist/ConwayGeomWasmWeb.js +0 -0
- package/compiled/Dist/ConwayGeomWasmWebMT.js +1 -1
- package/compiled/Dist/ConwayGeomWasmWebMT.wasm +0 -0
- package/compiled/dependencies/conway-geom/Dist/ConwayGeomWasmNode.js +0 -0
- package/compiled/dependencies/conway-geom/Dist/ConwayGeomWasmNodeMT.js +0 -0
- package/compiled/dependencies/conway-geom/Dist/ConwayGeomWasmWeb.js +0 -0
- package/compiled/dependencies/conway-geom/Dist/ConwayGeomWasmWebMT.js +1 -1
- package/compiled/dependencies/conway-geom/Dist/ConwayGeomWasmWebMT.wasm +0 -0
- package/compiled/dependencies/conway-geom/interface/conway_geometry.d.ts +19 -0
- package/compiled/dependencies/conway-geom/interface/conway_geometry.d.ts.map +1 -1
- package/compiled/dependencies/conway-geom/interface/conway_geometry.js +17 -0
- package/compiled/dependencies/conway-geom/interface/parameters/surface_object.d.ts +6 -0
- package/compiled/dependencies/conway-geom/interface/parameters/surface_object.d.ts.map +1 -1
- package/compiled/examples/browser-bundled.cjs +1569 -51
- package/compiled/examples/cli-bundled.cjs +2790 -436
- package/compiled/examples/cli-step-bundled.cjs +1904 -229
- package/compiled/examples/validator-bundled.cjs +1569 -51
- package/compiled/src/AP214E3_2010/AP214E3_2010_gen/b_spline_curve.gen.d.ts +2 -2
- package/compiled/src/AP214E3_2010/AP214E3_2010_gen/b_spline_curve.gen.d.ts.map +1 -1
- package/compiled/src/AP214E3_2010/AP214E3_2010_gen/b_spline_curve.gen.js +2 -2
- package/compiled/src/AP214E3_2010/AP214E3_2010_gen/b_spline_surface.gen.d.ts +3 -3
- package/compiled/src/AP214E3_2010/AP214E3_2010_gen/b_spline_surface.gen.d.ts.map +1 -1
- package/compiled/src/AP214E3_2010/AP214E3_2010_gen/b_spline_surface.gen.js +3 -3
- package/compiled/src/AP214E3_2010/AP214E3_2010_gen/composite_curve.gen.d.ts +1 -1
- package/compiled/src/AP214E3_2010/AP214E3_2010_gen/composite_curve.gen.d.ts.map +1 -1
- package/compiled/src/AP214E3_2010/AP214E3_2010_gen/composite_curve.gen.js +1 -1
- package/compiled/src/AP214E3_2010/AP214E3_2010_gen/offset_curve_2d.gen.d.ts +1 -1
- package/compiled/src/AP214E3_2010/AP214E3_2010_gen/offset_curve_2d.gen.d.ts.map +1 -1
- package/compiled/src/AP214E3_2010/AP214E3_2010_gen/offset_curve_2d.gen.js +1 -1
- package/compiled/src/AP214E3_2010/AP214E3_2010_gen/offset_curve_3d.gen.d.ts +1 -1
- package/compiled/src/AP214E3_2010/AP214E3_2010_gen/offset_curve_3d.gen.d.ts.map +1 -1
- package/compiled/src/AP214E3_2010/AP214E3_2010_gen/offset_curve_3d.gen.js +1 -1
- package/compiled/src/AP214E3_2010/AP214E3_2010_gen/offset_surface.gen.d.ts +1 -1
- package/compiled/src/AP214E3_2010/AP214E3_2010_gen/offset_surface.gen.d.ts.map +1 -1
- package/compiled/src/AP214E3_2010/AP214E3_2010_gen/offset_surface.gen.js +1 -1
- package/compiled/src/AP214E3_2010/AP214E3_2010_gen/presentation_style_assignment.gen.d.ts.map +1 -1
- package/compiled/src/AP214E3_2010/AP214E3_2010_gen/presentation_style_assignment.gen.js +2 -2
- package/compiled/src/AP214E3_2010/AP214E3_2010_gen/schema_ap214.gen.js +11 -11
- package/compiled/src/AP214E3_2010/AP214E3_2010_gen/shape_aspect.gen.d.ts +1 -1
- package/compiled/src/AP214E3_2010/AP214E3_2010_gen/shape_aspect.gen.d.ts.map +1 -1
- package/compiled/src/AP214E3_2010/AP214E3_2010_gen/shape_aspect.gen.js +1 -1
- package/compiled/src/AP214E3_2010/ap214_command_line_main.js +7 -3
- package/compiled/src/AP214E3_2010/ap214_geometry_extraction.d.ts +181 -7
- package/compiled/src/AP214E3_2010/ap214_geometry_extraction.d.ts.map +1 -1
- package/compiled/src/AP214E3_2010/ap214_geometry_extraction.js +906 -137
- package/compiled/src/AP214E3_2010/ap214_geometry_extraction.test.js +10 -2
- package/compiled/src/AP214E3_2010/ap214_logical_attribute.test.d.ts +2 -0
- package/compiled/src/AP214E3_2010/ap214_logical_attribute.test.d.ts.map +1 -0
- package/compiled/src/AP214E3_2010/ap214_logical_attribute.test.js +114 -0
- package/compiled/src/AP214E3_2010/ap214_model_geometry.d.ts +6 -0
- package/compiled/src/AP214E3_2010/ap214_model_geometry.d.ts.map +1 -1
- package/compiled/src/AP214E3_2010/ap214_model_geometry.js +9 -0
- package/compiled/src/AP214E3_2010/ap214_pcurve_basis_surfaces.test.d.ts +2 -0
- package/compiled/src/AP214E3_2010/ap214_pcurve_basis_surfaces.test.d.ts.map +1 -0
- package/compiled/src/AP214E3_2010/ap214_pcurve_basis_surfaces.test.js +233 -0
- package/compiled/src/AP214E3_2010/ap214_sphere_vertex_loop.test.d.ts +2 -0
- package/compiled/src/AP214E3_2010/ap214_sphere_vertex_loop.test.d.ts.map +1 -0
- package/compiled/src/AP214E3_2010/ap214_sphere_vertex_loop.test.js +147 -0
- package/compiled/src/AP214E3_2010/ap214_step_model.d.ts +2 -1
- package/compiled/src/AP214E3_2010/ap214_step_model.d.ts.map +1 -1
- package/compiled/src/AP214E3_2010/ap214_step_model.js +1 -1
- package/compiled/src/AP214E3_2010/ap214_typed_select_enum.test.d.ts +2 -0
- package/compiled/src/AP214E3_2010/ap214_typed_select_enum.test.d.ts.map +1 -0
- package/compiled/src/AP214E3_2010/ap214_typed_select_enum.test.js +65 -0
- package/compiled/src/AP214E3_2010/ap214_unit_scale.test.d.ts +2 -0
- package/compiled/src/AP214E3_2010/ap214_unit_scale.test.d.ts.map +1 -0
- package/compiled/src/AP214E3_2010/ap214_unit_scale.test.js +111 -0
- package/compiled/src/compat/web-ifc/ap214_streamed_open.test.d.ts +2 -0
- package/compiled/src/compat/web-ifc/ap214_streamed_open.test.d.ts.map +1 -0
- package/compiled/src/compat/web-ifc/ap214_streamed_open.test.js +190 -0
- package/compiled/src/compat/web-ifc/coordination_export_order.test.d.ts +2 -0
- package/compiled/src/compat/web-ifc/coordination_export_order.test.d.ts.map +1 -0
- package/compiled/src/compat/web-ifc/coordination_export_order.test.js +110 -0
- package/compiled/src/compat/web-ifc/coordination_f64.d.ts +165 -0
- package/compiled/src/compat/web-ifc/coordination_f64.d.ts.map +1 -0
- package/compiled/src/compat/web-ifc/coordination_f64.js +286 -0
- package/compiled/src/compat/web-ifc/coordination_f64.test.d.ts +2 -0
- package/compiled/src/compat/web-ifc/coordination_f64.test.d.ts.map +1 -0
- package/compiled/src/compat/web-ifc/coordination_f64.test.js +225 -0
- package/compiled/src/compat/web-ifc/ifc_api.d.ts +154 -0
- package/compiled/src/compat/web-ifc/ifc_api.d.ts.map +1 -1
- package/compiled/src/compat/web-ifc/ifc_api.js +211 -3
- package/compiled/src/compat/web-ifc/ifc_api_deferred_open.test.d.ts +2 -0
- package/compiled/src/compat/web-ifc/ifc_api_deferred_open.test.d.ts.map +1 -0
- package/compiled/src/compat/web-ifc/ifc_api_deferred_open.test.js +288 -0
- package/compiled/src/compat/web-ifc/ifc_api_model_passthrough.d.ts +39 -0
- package/compiled/src/compat/web-ifc/ifc_api_model_passthrough.d.ts.map +1 -1
- package/compiled/src/compat/web-ifc/ifc_api_model_passthrough_factory.d.ts +30 -0
- package/compiled/src/compat/web-ifc/ifc_api_model_passthrough_factory.d.ts.map +1 -1
- package/compiled/src/compat/web-ifc/ifc_api_model_passthrough_factory.js +83 -0
- package/compiled/src/compat/web-ifc/ifc_api_preview_channel.test.d.ts +2 -0
- package/compiled/src/compat/web-ifc/ifc_api_preview_channel.test.d.ts.map +1 -0
- package/compiled/src/compat/web-ifc/ifc_api_preview_channel.test.js +383 -0
- package/compiled/src/compat/web-ifc/ifc_api_preview_coordination.test.d.ts +2 -0
- package/compiled/src/compat/web-ifc/ifc_api_preview_coordination.test.d.ts.map +1 -0
- package/compiled/src/compat/web-ifc/ifc_api_preview_coordination.test.js +124 -0
- package/compiled/src/compat/web-ifc/ifc_api_proxy_ap214.d.ts +132 -0
- package/compiled/src/compat/web-ifc/ifc_api_proxy_ap214.d.ts.map +1 -1
- package/compiled/src/compat/web-ifc/ifc_api_proxy_ap214.js +488 -92
- package/compiled/src/compat/web-ifc/ifc_api_proxy_ifc.d.ts +268 -0
- package/compiled/src/compat/web-ifc/ifc_api_proxy_ifc.d.ts.map +1 -1
- package/compiled/src/compat/web-ifc/ifc_api_proxy_ifc.js +996 -149
- package/compiled/src/compat/web-ifc/ifc_api_streamed_open.test.d.ts +2 -0
- package/compiled/src/compat/web-ifc/ifc_api_streamed_open.test.d.ts.map +1 -0
- package/compiled/src/compat/web-ifc/ifc_api_streamed_open.test.js +129 -0
- package/compiled/src/compat/web-ifc/spatial_imposter.d.ts +134 -0
- package/compiled/src/compat/web-ifc/spatial_imposter.d.ts.map +1 -0
- package/compiled/src/compat/web-ifc/spatial_imposter.js +933 -0
- package/compiled/src/compat/web-ifc/spatial_imposter.test.d.ts +2 -0
- package/compiled/src/compat/web-ifc/spatial_imposter.test.d.ts.map +1 -0
- package/compiled/src/compat/web-ifc/spatial_imposter.test.js +467 -0
- package/compiled/src/compat/web-ifc/store_preview_channel.d.ts +187 -0
- package/compiled/src/compat/web-ifc/store_preview_channel.d.ts.map +1 -0
- package/compiled/src/compat/web-ifc/store_preview_channel.js +524 -0
- package/compiled/src/compat/web-ifc/store_preview_channel.test.d.ts +2 -0
- package/compiled/src/compat/web-ifc/store_preview_channel.test.d.ts.map +1 -0
- package/compiled/src/compat/web-ifc/store_preview_channel.test.js +234 -0
- package/compiled/src/compat/web-ifc/streamed_preview_channel.d.ts +306 -0
- package/compiled/src/compat/web-ifc/streamed_preview_channel.d.ts.map +1 -0
- package/compiled/src/compat/web-ifc/streamed_preview_channel.js +580 -0
- package/compiled/src/compat/web-ifc/web_wasm_directory.test.d.ts +2 -0
- package/compiled/src/compat/web-ifc/web_wasm_directory.test.d.ts.map +1 -0
- package/compiled/src/compat/web-ifc/web_wasm_directory.test.js +22 -0
- package/compiled/src/core/composed_model_skeleton.d.ts +63 -0
- package/compiled/src/core/composed_model_skeleton.d.ts.map +1 -0
- package/compiled/src/core/composed_model_skeleton.js +66 -0
- package/compiled/src/core/composed_model_skeleton.test.d.ts +2 -0
- package/compiled/src/core/composed_model_skeleton.test.d.ts.map +1 -0
- package/compiled/src/core/composed_model_skeleton.test.js +69 -0
- package/compiled/src/core/demand_geometry_queue.d.ts +147 -0
- package/compiled/src/core/demand_geometry_queue.d.ts.map +1 -0
- package/compiled/src/core/demand_geometry_queue.js +223 -0
- package/compiled/src/core/demand_geometry_queue.test.d.ts +2 -0
- package/compiled/src/core/demand_geometry_queue.test.d.ts.map +1 -0
- package/compiled/src/core/demand_geometry_queue.test.js +133 -0
- package/compiled/src/core/demand_residency_pump.d.ts +93 -0
- package/compiled/src/core/demand_residency_pump.d.ts.map +1 -0
- package/compiled/src/core/demand_residency_pump.js +120 -0
- package/compiled/src/core/demand_residency_pump.test.d.ts +2 -0
- package/compiled/src/core/demand_residency_pump.test.d.ts.map +1 -0
- package/compiled/src/core/demand_residency_pump.test.js +148 -0
- package/compiled/src/core/geometry_tile_bindings.d.ts +110 -0
- package/compiled/src/core/geometry_tile_bindings.d.ts.map +1 -0
- package/compiled/src/core/geometry_tile_bindings.js +76 -0
- package/compiled/src/core/geometry_tile_bindings.test.d.ts +2 -0
- package/compiled/src/core/geometry_tile_bindings.test.d.ts.map +1 -0
- package/compiled/src/core/geometry_tile_bindings.test.js +211 -0
- package/compiled/src/core/geometry_tile_pool.d.ts +99 -0
- package/compiled/src/core/geometry_tile_pool.d.ts.map +1 -0
- package/compiled/src/core/geometry_tile_pool.js +104 -0
- package/compiled/src/core/geometry_tile_pool.test.d.ts +2 -0
- package/compiled/src/core/geometry_tile_pool.test.d.ts.map +1 -0
- package/compiled/src/core/geometry_tile_pool.test.js +180 -0
- package/compiled/src/core/mem/chunked_pool.d.ts +116 -0
- package/compiled/src/core/mem/chunked_pool.d.ts.map +1 -0
- package/compiled/src/core/mem/chunked_pool.js +149 -0
- package/compiled/src/core/mem/chunked_pool.test.d.ts +2 -0
- package/compiled/src/core/mem/chunked_pool.test.d.ts.map +1 -0
- package/compiled/src/core/mem/chunked_pool.test.js +63 -0
- package/compiled/src/core/mem/shared_asset_pool.d.ts +82 -0
- package/compiled/src/core/mem/shared_asset_pool.d.ts.map +1 -0
- package/compiled/src/core/mem/shared_asset_pool.js +113 -0
- package/compiled/src/core/mem/shared_asset_pool.test.d.ts +2 -0
- package/compiled/src/core/mem/shared_asset_pool.test.d.ts.map +1 -0
- package/compiled/src/core/mem/shared_asset_pool.test.js +49 -0
- package/compiled/src/core/model_registry.d.ts +87 -0
- package/compiled/src/core/model_registry.d.ts.map +1 -0
- package/compiled/src/core/model_registry.js +101 -0
- package/compiled/src/core/model_registry.test.d.ts +2 -0
- package/compiled/src/core/model_registry.test.d.ts.map +1 -0
- package/compiled/src/core/model_registry.test.js +60 -0
- package/compiled/src/core/model_uri.d.ts +57 -0
- package/compiled/src/core/model_uri.d.ts.map +1 -0
- package/compiled/src/core/model_uri.js +101 -0
- package/compiled/src/core/model_uri.test.d.ts +2 -0
- package/compiled/src/core/model_uri.test.d.ts.map +1 -0
- package/compiled/src/core/model_uri.test.js +49 -0
- package/compiled/src/core/progress.d.ts +16 -2
- package/compiled/src/core/progress.d.ts.map +1 -1
- package/compiled/src/core/progress.js +31 -5
- package/compiled/src/core/progress.test.js +11 -2
- package/compiled/src/core/progress_log.d.ts +1 -0
- package/compiled/src/core/progress_log.d.ts.map +1 -1
- package/compiled/src/core/progress_log.js +7 -2
- package/compiled/src/core/progress_log.test.js +21 -0
- package/compiled/src/core/shared_byte_budget.d.ts +60 -0
- package/compiled/src/core/shared_byte_budget.d.ts.map +1 -0
- package/compiled/src/core/shared_byte_budget.js +85 -0
- package/compiled/src/core/shared_byte_budget.test.d.ts +2 -0
- package/compiled/src/core/shared_byte_budget.test.d.ts.map +1 -0
- package/compiled/src/core/shared_byte_budget.test.js +55 -0
- package/compiled/src/core/wasm_heap.d.ts +208 -0
- package/compiled/src/core/wasm_heap.d.ts.map +1 -0
- package/compiled/src/core/wasm_heap.js +417 -0
- package/compiled/src/core/wasm_heap.test.d.ts +2 -0
- package/compiled/src/core/wasm_heap.test.d.ts.map +1 -0
- package/compiled/src/core/wasm_heap.test.js +546 -0
- package/compiled/src/demand/index.d.ts +23 -0
- package/compiled/src/demand/index.d.ts.map +1 -0
- package/compiled/src/demand/index.js +22 -0
- package/compiled/src/ifc/ifc4_gen/IfcLogical.gen.d.ts +1 -1
- package/compiled/src/ifc/ifc4_gen/IfcLogical.gen.d.ts.map +1 -1
- package/compiled/src/ifc/ifc4_gen/IfcLogical.gen.js +1 -1
- package/compiled/src/ifc/ifc4_gen/IfcPresentationStyleAssignment.gen.d.ts.map +1 -1
- package/compiled/src/ifc/ifc4_gen/IfcPresentationStyleAssignment.gen.js +2 -2
- package/compiled/src/ifc/ifc4_gen/IfcRelInterferesElements.gen.d.ts +1 -1
- package/compiled/src/ifc/ifc4_gen/IfcRelInterferesElements.gen.d.ts.map +1 -1
- package/compiled/src/ifc/ifc4_gen/IfcRelInterferesElements.gen.js +1 -1
- package/compiled/src/ifc/ifc4_gen/schema_ifc.gen.js +2 -2
- package/compiled/src/ifc/ifc_demand_extraction.test.d.ts +2 -0
- package/compiled/src/ifc/ifc_demand_extraction.test.d.ts.map +1 -0
- package/compiled/src/ifc/ifc_demand_extraction.test.js +251 -0
- package/compiled/src/ifc/ifc_geometry_extraction.d.ts +367 -6
- package/compiled/src/ifc/ifc_geometry_extraction.d.ts.map +1 -1
- package/compiled/src/ifc/ifc_geometry_extraction.js +1322 -389
- package/compiled/src/ifc/ifc_grid_placement.test.d.ts +2 -0
- package/compiled/src/ifc/ifc_grid_placement.test.d.ts.map +1 -0
- package/compiled/src/ifc/ifc_grid_placement.test.js +261 -0
- package/compiled/src/ifc/ifc_model_geometry.d.ts +12 -0
- package/compiled/src/ifc/ifc_model_geometry.d.ts.map +1 -1
- package/compiled/src/ifc/ifc_model_geometry.js +15 -0
- package/compiled/src/ifc/ifc_regression_batch_main.js +210 -12
- package/compiled/src/ifc/ifc_spatial_skeleton.d.ts +145 -0
- package/compiled/src/ifc/ifc_spatial_skeleton.d.ts.map +1 -0
- package/compiled/src/ifc/ifc_spatial_skeleton.js +266 -0
- package/compiled/src/ifc/ifc_spatial_skeleton.test.d.ts +2 -0
- package/compiled/src/ifc/ifc_spatial_skeleton.test.d.ts.map +1 -0
- package/compiled/src/ifc/ifc_spatial_skeleton.test.js +199 -0
- package/compiled/src/ifc/ifc_step_model.d.ts +6 -2
- package/compiled/src/ifc/ifc_step_model.d.ts.map +1 -1
- package/compiled/src/ifc/ifc_step_model.js +6 -4
- package/compiled/src/ifc/ifc_step_parser.d.ts +58 -0
- package/compiled/src/ifc/ifc_step_parser.d.ts.map +1 -1
- package/compiled/src/ifc/ifc_step_parser.js +64 -0
- package/compiled/src/ifc/ifc_stream_model.test.d.ts +2 -0
- package/compiled/src/ifc/ifc_stream_model.test.d.ts.map +1 -0
- package/compiled/src/ifc/ifc_stream_model.test.js +70 -0
- package/compiled/src/ifc/ifc_stream_open.d.ts +131 -0
- package/compiled/src/ifc/ifc_stream_open.d.ts.map +1 -0
- package/compiled/src/ifc/ifc_stream_open.js +116 -0
- package/compiled/src/ifc/ifc_stream_open.test.d.ts +2 -0
- package/compiled/src/ifc/ifc_stream_open.test.d.ts.map +1 -0
- package/compiled/src/ifc/ifc_stream_open.test.js +230 -0
- package/compiled/src/ifc/ifc_tile_extractor.d.ts +84 -0
- package/compiled/src/ifc/ifc_tile_extractor.d.ts.map +1 -0
- package/compiled/src/ifc/ifc_tile_extractor.js +134 -0
- package/compiled/src/ifc/ifc_tile_extractor.test.d.ts +2 -0
- package/compiled/src/ifc/ifc_tile_extractor.test.d.ts.map +1 -0
- package/compiled/src/ifc/ifc_tile_extractor.test.js +118 -0
- package/compiled/src/ifc/ifc_typed_select_enum.test.d.ts +2 -0
- package/compiled/src/ifc/ifc_typed_select_enum.test.d.ts.map +1 -0
- package/compiled/src/ifc/ifc_typed_select_enum.test.js +60 -0
- package/compiled/src/index.d.ts +21 -1
- package/compiled/src/index.d.ts.map +1 -1
- package/compiled/src/index.js +28 -1
- package/compiled/src/logging/logger.d.ts +16 -2
- package/compiled/src/logging/logger.d.ts.map +1 -1
- package/compiled/src/logging/logger.js +34 -7
- package/compiled/src/logging/logger.test.js +30 -0
- package/compiled/src/mem/index.d.ts +17 -0
- package/compiled/src/mem/index.d.ts.map +1 -0
- package/compiled/src/mem/index.js +16 -0
- package/compiled/src/namespace_surface.test.d.ts +2 -0
- package/compiled/src/namespace_surface.test.d.ts.map +1 -0
- package/compiled/src/namespace_surface.test.js +43 -0
- package/compiled/src/parsing/parsing_buffer.d.ts +23 -0
- package/compiled/src/parsing/parsing_buffer.d.ts.map +1 -1
- package/compiled/src/parsing/parsing_buffer.js +31 -0
- package/compiled/src/scripts/model_report_displacement.test.d.ts +2 -0
- package/compiled/src/scripts/model_report_displacement.test.d.ts.map +1 -0
- package/compiled/src/scripts/model_report_displacement.test.js +104 -0
- package/compiled/src/scripts/render_glb_paths.test.d.ts +2 -0
- package/compiled/src/scripts/render_glb_paths.test.d.ts.map +1 -0
- package/compiled/src/scripts/render_glb_paths.test.js +115 -0
- package/compiled/src/step/indexing/step_type_indexer.d.ts +20 -0
- package/compiled/src/step/indexing/step_type_indexer.d.ts.map +1 -1
- package/compiled/src/step/indexing/step_type_indexer.js +67 -0
- package/compiled/src/step/parsing/byte_source.d.ts +153 -0
- package/compiled/src/step/parsing/byte_source.d.ts.map +1 -0
- package/compiled/src/step/parsing/byte_source.js +106 -0
- package/compiled/src/step/parsing/byte_source.test.d.ts +2 -0
- package/compiled/src/step/parsing/byte_source.test.d.ts.map +1 -0
- package/compiled/src/step/parsing/byte_source.test.js +47 -0
- package/compiled/src/step/parsing/byte_source_node.d.ts +41 -0
- package/compiled/src/step/parsing/byte_source_node.d.ts.map +1 -0
- package/compiled/src/step/parsing/byte_source_node.js +54 -0
- package/compiled/src/step/parsing/columnar_index.d.ts +103 -0
- package/compiled/src/step/parsing/columnar_index.d.ts.map +1 -0
- package/compiled/src/step/parsing/columnar_index.js +224 -0
- package/compiled/src/step/parsing/columnar_index.test.d.ts +2 -0
- package/compiled/src/step/parsing/columnar_index.test.d.ts.map +1 -0
- package/compiled/src/step/parsing/columnar_index.test.js +155 -0
- package/compiled/src/step/parsing/cross_reference_registry.d.ts +95 -0
- package/compiled/src/step/parsing/cross_reference_registry.d.ts.map +1 -0
- package/compiled/src/step/parsing/cross_reference_registry.js +91 -0
- package/compiled/src/step/parsing/cross_reference_registry.test.d.ts +2 -0
- package/compiled/src/step/parsing/cross_reference_registry.test.d.ts.map +1 -0
- package/compiled/src/step/parsing/cross_reference_registry.test.js +66 -0
- package/compiled/src/step/parsing/decode_utf8.d.ts +15 -0
- package/compiled/src/step/parsing/decode_utf8.d.ts.map +1 -1
- package/compiled/src/step/parsing/decode_utf8.js +28 -0
- package/compiled/src/step/parsing/express_ref_scan.d.ts +20 -0
- package/compiled/src/step/parsing/express_ref_scan.d.ts.map +1 -0
- package/compiled/src/step/parsing/express_ref_scan.js +91 -0
- package/compiled/src/step/parsing/express_ref_scan.test.d.ts +2 -0
- package/compiled/src/step/parsing/express_ref_scan.test.d.ts.map +1 -0
- package/compiled/src/step/parsing/express_ref_scan.test.js +28 -0
- package/compiled/src/step/parsing/index_sidecar.d.ts +81 -0
- package/compiled/src/step/parsing/index_sidecar.d.ts.map +1 -0
- package/compiled/src/step/parsing/index_sidecar.js +283 -0
- package/compiled/src/step/parsing/index_sidecar.test.d.ts +2 -0
- package/compiled/src/step/parsing/index_sidecar.test.d.ts.map +1 -0
- package/compiled/src/step/parsing/index_sidecar.test.js +122 -0
- package/compiled/src/step/parsing/inf_recovery_index.test.d.ts +2 -0
- package/compiled/src/step/parsing/inf_recovery_index.test.d.ts.map +1 -0
- package/compiled/src/step/parsing/inf_recovery_index.test.js +108 -0
- package/compiled/src/step/parsing/prefix_type_index.d.ts +124 -0
- package/compiled/src/step/parsing/prefix_type_index.d.ts.map +1 -0
- package/compiled/src/step/parsing/prefix_type_index.js +207 -0
- package/compiled/src/step/parsing/prefix_type_index.test.d.ts +2 -0
- package/compiled/src/step/parsing/prefix_type_index.test.d.ts.map +1 -0
- package/compiled/src/step/parsing/prefix_type_index.test.js +298 -0
- package/compiled/src/step/parsing/range_byte_source.d.ts +69 -0
- package/compiled/src/step/parsing/range_byte_source.d.ts.map +1 -0
- package/compiled/src/step/parsing/range_byte_source.js +78 -0
- package/compiled/src/step/parsing/range_byte_source.test.d.ts +2 -0
- package/compiled/src/step/parsing/range_byte_source.test.d.ts.map +1 -0
- package/compiled/src/step/parsing/range_byte_source.test.js +70 -0
- package/compiled/src/step/parsing/record_event.d.ts +23 -0
- package/compiled/src/step/parsing/record_event.d.ts.map +1 -0
- package/compiled/src/step/parsing/record_event.js +1 -0
- package/compiled/src/step/parsing/record_field_cursor.d.ts +94 -0
- package/compiled/src/step/parsing/record_field_cursor.d.ts.map +1 -0
- package/compiled/src/step/parsing/record_field_cursor.js +189 -0
- package/compiled/src/step/parsing/step_deserialization_functions.d.ts +29 -0
- package/compiled/src/step/parsing/step_deserialization_functions.d.ts.map +1 -1
- package/compiled/src/step/parsing/step_deserialization_functions.js +45 -0
- package/compiled/src/step/parsing/step_deserialization_functions.test.js +59 -1
- package/compiled/src/step/parsing/step_parser.d.ts +66 -1
- package/compiled/src/step/parsing/step_parser.d.ts.map +1 -1
- package/compiled/src/step/parsing/step_parser.js +164 -10
- package/compiled/src/step/parsing/step_string_parser.js +8 -8
- package/compiled/src/step/parsing/streaming_index_builder.d.ts +141 -0
- package/compiled/src/step/parsing/streaming_index_builder.d.ts.map +1 -0
- package/compiled/src/step/parsing/streaming_index_builder.js +280 -0
- package/compiled/src/step/parsing/streaming_index_builder.test.d.ts +2 -0
- package/compiled/src/step/parsing/streaming_index_builder.test.d.ts.map +1 -0
- package/compiled/src/step/parsing/streaming_index_builder.test.js +107 -0
- package/compiled/src/step/parsing/streaming_index_builder_async.test.d.ts +2 -0
- package/compiled/src/step/parsing/streaming_index_builder_async.test.d.ts.map +1 -0
- package/compiled/src/step/parsing/streaming_index_builder_async.test.js +109 -0
- package/compiled/src/step/parsing/streaming_record_dispatcher.d.ts +71 -0
- package/compiled/src/step/parsing/streaming_record_dispatcher.d.ts.map +1 -0
- package/compiled/src/step/parsing/streaming_record_dispatcher.js +88 -0
- package/compiled/src/step/parsing/streaming_record_dispatcher.test.d.ts +2 -0
- package/compiled/src/step/parsing/streaming_record_dispatcher.test.d.ts.map +1 -0
- package/compiled/src/step/parsing/streaming_record_dispatcher.test.js +66 -0
- package/compiled/src/step/parsing/uint32_sink.d.ts +72 -0
- package/compiled/src/step/parsing/uint32_sink.d.ts.map +1 -0
- package/compiled/src/step/parsing/uint32_sink.js +180 -0
- package/compiled/src/step/parsing/uint32_sink.test.d.ts +2 -0
- package/compiled/src/step/parsing/uint32_sink.test.d.ts.map +1 -0
- package/compiled/src/step/parsing/uint32_sink.test.js +199 -0
- package/compiled/src/step/step_buffer_provider.d.ts +48 -3
- package/compiled/src/step/step_buffer_provider.d.ts.map +1 -1
- package/compiled/src/step/step_buffer_provider.js +60 -11
- package/compiled/src/step/step_buffer_provider.test.js +14 -0
- package/compiled/src/step/step_entity_base.d.ts +65 -3
- package/compiled/src/step/step_entity_base.d.ts.map +1 -1
- package/compiled/src/step/step_entity_base.js +135 -3
- package/compiled/src/step/step_model_base.d.ts +221 -8
- package/compiled/src/step/step_model_base.d.ts.map +1 -1
- package/compiled/src/step/step_model_base.js +542 -7
- package/compiled/src/stream/index.d.ts +34 -0
- package/compiled/src/stream/index.d.ts.map +1 -0
- package/compiled/src/stream/index.js +32 -0
- package/compiled/src/version/version.js +1 -1
- package/compiled/tsconfig.tsbuildinfo +1 -1
- package/package.json +16 -1
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
import { RecordFieldCursor } from "../step/parsing/record_field_cursor.js";
|
|
2
|
+
import EntityTypesIfc from "./ifc4_gen/entity_types_ifc.gen.js";
|
|
3
|
+
import { IfcContext, IfcObjectDefinition, IfcRelAggregates, IfcRelContainedInSpatialStructure, IfcSpatialElement, } from "./ifc4_gen/index.js";
|
|
4
|
+
import IfcStepParser from "./ifc_step_parser.js";
|
|
5
|
+
/**
|
|
6
|
+
* Attribute positions in the serialised record, matching the generated
|
|
7
|
+
* accessors exactly (`IfcRoot.Name` is `extractString( 2, … )`, and so on).
|
|
8
|
+
* STEP writes the flattened inherited list, so these are absolute positions in
|
|
9
|
+
* any subtype's record.
|
|
10
|
+
*/
|
|
11
|
+
const ATTRIBUTE_GLOBAL_ID = 0;
|
|
12
|
+
const ATTRIBUTE_NAME = 2;
|
|
13
|
+
const ATTRIBUTE_LONG_NAME = 7;
|
|
14
|
+
/**
|
|
15
|
+
* `LongName` sits at a different position on `IfcContext` (`IfcProject`'s
|
|
16
|
+
* supertype) than on `IfcSpatialElement`, because the two branches inherit
|
|
17
|
+
* different prefixes — 5 against 7. The generated getters disagree the same
|
|
18
|
+
* way (`IfcContext.extractString( 5, … )` vs
|
|
19
|
+
* `IfcSpatialElement.extractString( 7, … )`), and reading the wrong one
|
|
20
|
+
* silently yields a different attribute, not an error.
|
|
21
|
+
*/
|
|
22
|
+
const ATTRIBUTE_CONTEXT_LONG_NAME = 5;
|
|
23
|
+
const ATTRIBUTE_AGGREGATES_RELATING = 4;
|
|
24
|
+
const ATTRIBUTE_AGGREGATES_RELATED = 5;
|
|
25
|
+
const ATTRIBUTE_CONTAINED_RELATED = 4;
|
|
26
|
+
const ATTRIBUTE_CONTAINED_RELATING = 5;
|
|
27
|
+
/** Initial capacity of the edge columns; both grow by doubling. */
|
|
28
|
+
const INITIAL_EDGES = 1024;
|
|
29
|
+
/**
|
|
30
|
+
* The spatial subtype closure as a set — the `LongName` test runs per named
|
|
31
|
+
* record, so it must not be a scan of the closure array.
|
|
32
|
+
*/
|
|
33
|
+
const SPATIAL_TYPES = new Set(IfcSpatialElement.query);
|
|
34
|
+
/** The context closure — `IfcProject` and friends, whose `LongName` is at 5. */
|
|
35
|
+
const CONTEXT_TYPES = new Set(IfcContext.query);
|
|
36
|
+
/**
|
|
37
|
+
* The spatial **names skeleton** (M2, issue #393): project → site → building →
|
|
38
|
+
* storey → product, with names, built from the streaming parse's record events
|
|
39
|
+
* so the tree can be shown while the model is still loading.
|
|
40
|
+
*
|
|
41
|
+
* This is the one standard consumer that genuinely belongs on the event path,
|
|
42
|
+
* and the reason is the record's *bytes*. Everything else M2 wanted —
|
|
43
|
+
* membership, counts, ids — is in the columnar index and is cheaper (and, for
|
|
44
|
+
* complex records, only correct) when derived from a prefix snapshot; see
|
|
45
|
+
* {@link import('../step/parsing/prefix_type_index').PrefixTypeIndex}. Names
|
|
46
|
+
* and relationship edges are not in the columns, and after the parse they cost
|
|
47
|
+
* a second pass that pages every relationship and every named record back in
|
|
48
|
+
* through the windowed provider — which is exactly what Share's post-parse
|
|
49
|
+
* `'names'` sweep does today.
|
|
50
|
+
*
|
|
51
|
+
* What runs per record is deliberately small: tokenize the record's attribute
|
|
52
|
+
* list, copy out at most three short strings, and append two integers per
|
|
53
|
+
* edge. Nothing is resolved and no tree is built until {@link tree} is called —
|
|
54
|
+
* "resolvable" therefore means "present when you asked", and a file that
|
|
55
|
+
* forward-references its way through the spatial hierarchy simply resolves at
|
|
56
|
+
* end of stream, with no pending-reference table to maintain.
|
|
57
|
+
*
|
|
58
|
+
* Idempotence: the streaming builder's grow-and-restart re-fires records from
|
|
59
|
+
* localID 0. A non-ascending localID is taken as that restart and clears both
|
|
60
|
+
* the nodes and the edge columns, so a restarted parse rebuilds rather than
|
|
61
|
+
* doubling its edges.
|
|
62
|
+
*/
|
|
63
|
+
export class IfcSpatialSkeleton {
|
|
64
|
+
/**
|
|
65
|
+
* @param parser The IFC parser whose tokenizer reads the record bytes.
|
|
66
|
+
* Defaults to the singleton the streaming open uses.
|
|
67
|
+
*/
|
|
68
|
+
constructor(parser = IfcStepParser.Instance) {
|
|
69
|
+
this.nodes_ = new Map();
|
|
70
|
+
this.edgeParents_ = new Uint32Array(INITIAL_EDGES);
|
|
71
|
+
this.edgeChildren_ = new Uint32Array(INITIAL_EDGES);
|
|
72
|
+
this.edgeCount_ = 0;
|
|
73
|
+
this.lastLocalID_ = -1;
|
|
74
|
+
/**
|
|
75
|
+
* Record a named object definition. Bound for direct use as a subscription.
|
|
76
|
+
*
|
|
77
|
+
* @param localID The record's dense local ID.
|
|
78
|
+
* @param expressID The record's express ID.
|
|
79
|
+
* @param typeID The record's concrete type.
|
|
80
|
+
* @param buffer The live parse window holding the record.
|
|
81
|
+
* @param byteOffset Offset of the record's attribute list in `buffer`.
|
|
82
|
+
* @param byteLength Length of the attribute list.
|
|
83
|
+
*/
|
|
84
|
+
this.handleObject = (localID, expressID, typeID, buffer, byteOffset, byteLength) => {
|
|
85
|
+
this.noteRestart(localID);
|
|
86
|
+
if (typeID === void 0 || buffer === void 0 ||
|
|
87
|
+
byteOffset === void 0 || byteLength === void 0) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
if (this.cursor_.open(buffer, byteOffset, byteLength) === 0) {
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
const node = { expressID, type: typeID, children: [] };
|
|
94
|
+
const globalId = this.cursor_.string(ATTRIBUTE_GLOBAL_ID);
|
|
95
|
+
const name = this.cursor_.string(ATTRIBUTE_NAME);
|
|
96
|
+
if (globalId !== void 0) {
|
|
97
|
+
node.globalId = globalId;
|
|
98
|
+
}
|
|
99
|
+
if (name !== void 0) {
|
|
100
|
+
node.name = name;
|
|
101
|
+
}
|
|
102
|
+
// LongName is what a row actually displays when Name is a code. Only
|
|
103
|
+
// spatial elements and contexts carry it, at different positions.
|
|
104
|
+
const longNameAt = this.longNameAttribute(typeID);
|
|
105
|
+
if (longNameAt !== void 0) {
|
|
106
|
+
const longName = this.cursor_.string(longNameAt);
|
|
107
|
+
if (longName !== void 0) {
|
|
108
|
+
node.longName = longName;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
this.nodes_.set(expressID, node);
|
|
112
|
+
};
|
|
113
|
+
/**
|
|
114
|
+
* Record the containment edges of one relationship. Bound for direct use as
|
|
115
|
+
* a subscription.
|
|
116
|
+
*
|
|
117
|
+
* @param localID The record's dense local ID.
|
|
118
|
+
* @param expressID The record's express ID.
|
|
119
|
+
* @param typeID The record's concrete type.
|
|
120
|
+
* @param buffer The live parse window holding the record.
|
|
121
|
+
* @param byteOffset Offset of the record's attribute list in `buffer`.
|
|
122
|
+
* @param byteLength Length of the attribute list.
|
|
123
|
+
*/
|
|
124
|
+
this.handleRelationship = (localID, expressID, typeID, buffer, byteOffset, byteLength) => {
|
|
125
|
+
this.noteRestart(localID);
|
|
126
|
+
if (typeID === void 0 || buffer === void 0 ||
|
|
127
|
+
byteOffset === void 0 || byteLength === void 0) {
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
if (this.cursor_.open(buffer, byteOffset, byteLength) === 0) {
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
// The two relationships put their parent on opposite sides.
|
|
134
|
+
const aggregates = typeID === EntityTypesIfc.IFCRELAGGREGATES;
|
|
135
|
+
const parentIndex = aggregates ? ATTRIBUTE_AGGREGATES_RELATING : ATTRIBUTE_CONTAINED_RELATING;
|
|
136
|
+
const childrenIndex = aggregates ? ATTRIBUTE_AGGREGATES_RELATED : ATTRIBUTE_CONTAINED_RELATED;
|
|
137
|
+
const parent = this.cursor_.reference(parentIndex);
|
|
138
|
+
if (parent === void 0) {
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
this.cursor_.forEachReference(childrenIndex, (child) => {
|
|
142
|
+
this.pushEdge(parent, child);
|
|
143
|
+
});
|
|
144
|
+
};
|
|
145
|
+
this.cursor_ = new RecordFieldCursor(parser);
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Subscribe this skeleton to a dispatcher — the object definitions it names
|
|
149
|
+
* and the two relationship types it draws edges from.
|
|
150
|
+
*
|
|
151
|
+
* @param dispatcher The dispatcher fed by the streaming parse.
|
|
152
|
+
*/
|
|
153
|
+
subscribe(dispatcher) {
|
|
154
|
+
dispatcher.on([IfcObjectDefinition], this.handleObject);
|
|
155
|
+
dispatcher.on([IfcRelAggregates, IfcRelContainedInSpatialStructure], this.handleRelationship);
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* @return {number} Nodes seen so far (children not yet linked).
|
|
159
|
+
*/
|
|
160
|
+
get nodeCount() {
|
|
161
|
+
return this.nodes_.size;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* @return {number} Containment edges captured so far.
|
|
165
|
+
*/
|
|
166
|
+
get edgeCount() {
|
|
167
|
+
return this.edgeCount_;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Where this type keeps `LongName`, if it has one.
|
|
171
|
+
*
|
|
172
|
+
* @param typeID The record's concrete type.
|
|
173
|
+
* @return {number | undefined} The attribute index, or undefined for types
|
|
174
|
+
* that carry no `LongName` at all.
|
|
175
|
+
*/
|
|
176
|
+
longNameAttribute(typeID) {
|
|
177
|
+
if (SPATIAL_TYPES.has(typeID)) {
|
|
178
|
+
return ATTRIBUTE_LONG_NAME;
|
|
179
|
+
}
|
|
180
|
+
return CONTEXT_TYPES.has(typeID) ? ATTRIBUTE_CONTEXT_LONG_NAME : void 0;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Reset if the parse restarted. localIDs ascend strictly within a run, so a
|
|
184
|
+
* localID that does not exceed the last one seen means the streaming
|
|
185
|
+
* builder hit its grow-and-restart valve and is re-firing from 0. Testing
|
|
186
|
+
* for `localID === 0` would not do: this consumer only sees its subscribed
|
|
187
|
+
* types, and record 0 is rarely one of them.
|
|
188
|
+
*
|
|
189
|
+
* @param localID The record's dense local ID.
|
|
190
|
+
*/
|
|
191
|
+
noteRestart(localID) {
|
|
192
|
+
if (localID <= this.lastLocalID_) {
|
|
193
|
+
this.edgeCount_ = 0;
|
|
194
|
+
this.nodes_.clear();
|
|
195
|
+
}
|
|
196
|
+
this.lastLocalID_ = localID;
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Append one containment edge, growing the columns as needed.
|
|
200
|
+
*
|
|
201
|
+
* @param parent Express ID of the containing entity.
|
|
202
|
+
* @param child Express ID of the contained entity.
|
|
203
|
+
*/
|
|
204
|
+
pushEdge(parent, child) {
|
|
205
|
+
if (this.edgeCount_ === this.edgeParents_.length) {
|
|
206
|
+
const parents = new Uint32Array(this.edgeParents_.length * 2);
|
|
207
|
+
const children = new Uint32Array(this.edgeChildren_.length * 2);
|
|
208
|
+
parents.set(this.edgeParents_);
|
|
209
|
+
children.set(this.edgeChildren_);
|
|
210
|
+
this.edgeParents_ = parents;
|
|
211
|
+
this.edgeChildren_ = children;
|
|
212
|
+
}
|
|
213
|
+
this.edgeParents_[this.edgeCount_] = parent;
|
|
214
|
+
this.edgeChildren_[this.edgeCount_] = child;
|
|
215
|
+
++this.edgeCount_;
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Look one node up without building the tree.
|
|
219
|
+
*
|
|
220
|
+
* @param expressID The express ID.
|
|
221
|
+
* @return {SkeletonNode | undefined} The node, if it has been parsed.
|
|
222
|
+
*/
|
|
223
|
+
node(expressID) {
|
|
224
|
+
return this.nodes_.get(expressID);
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Build the tree over everything parsed so far and return its roots — nodes
|
|
228
|
+
* that are nobody's child. That is the project once it has been seen, plus
|
|
229
|
+
* whatever a prefix has not reached the parent of yet, plus the object
|
|
230
|
+
* definitions that genuinely hang outside the spatial hierarchy (type
|
|
231
|
+
* objects, ungrouped actors); a caller that wants strictly the spatial tree
|
|
232
|
+
* should walk down from the project's express ID rather than treat every
|
|
233
|
+
* root as spatial.
|
|
234
|
+
*
|
|
235
|
+
* Each call relinks children from the edge columns, so a caller may call it
|
|
236
|
+
* repeatedly as the parse advances; the returned nodes are the live ones, so
|
|
237
|
+
* a previously returned tree is not a snapshot.
|
|
238
|
+
*
|
|
239
|
+
* @return {SkeletonNode[]} The roots, in parse order.
|
|
240
|
+
*/
|
|
241
|
+
tree() {
|
|
242
|
+
const children = new Set();
|
|
243
|
+
for (const node of this.nodes_.values()) {
|
|
244
|
+
node.children.length = 0;
|
|
245
|
+
}
|
|
246
|
+
for (let edge = 0; edge < this.edgeCount_; ++edge) {
|
|
247
|
+
const parent = this.nodes_.get(this.edgeParents_[edge]);
|
|
248
|
+
const child = this.nodes_.get(this.edgeChildren_[edge]);
|
|
249
|
+
if (parent === void 0 || child === void 0) {
|
|
250
|
+
// Either end may be a forward reference the parse has not reached.
|
|
251
|
+
// Nothing is remembered as pending: the edge is re-read on the next
|
|
252
|
+
// call, so it links as soon as both ends exist.
|
|
253
|
+
continue;
|
|
254
|
+
}
|
|
255
|
+
parent.children.push(child);
|
|
256
|
+
children.add(child.expressID);
|
|
257
|
+
}
|
|
258
|
+
const roots = [];
|
|
259
|
+
for (const node of this.nodes_.values()) {
|
|
260
|
+
if (!children.has(node.expressID)) {
|
|
261
|
+
roots.push(node);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
return roots;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ifc_spatial_skeleton.test.d.ts","sourceRoot":"","sources":["../../../src/ifc/ifc_spatial_skeleton.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
/* eslint-disable no-magic-numbers */
|
|
2
|
+
// M2 (#393): the spatial names skeleton built from the streaming parse's
|
|
3
|
+
// record events.
|
|
4
|
+
//
|
|
5
|
+
// The parity bar is the tree Share builds today from the finished model
|
|
6
|
+
// (IfcProperties' spatial structure in 'names' mode): same containment edges,
|
|
7
|
+
// same Name/LongName/GlobalId — but available while the parse runs, and
|
|
8
|
+
// without paging every relationship back in afterwards.
|
|
9
|
+
import * as fs from "fs";
|
|
10
|
+
import { beforeAll, describe, expect, test } from "@jest/globals";
|
|
11
|
+
import ParsingBuffer from "../parsing/parsing_buffer.js";
|
|
12
|
+
import { BufferByteSource } from "../step/parsing/byte_source.js";
|
|
13
|
+
import { ParseResult } from "../step/parsing/step_parser.js";
|
|
14
|
+
import { buildIndexStreaming } from "../step/parsing/streaming_index_builder.js";
|
|
15
|
+
import { StreamingRecordDispatcher } from "../step/parsing/streaming_record_dispatcher.js";
|
|
16
|
+
import EntityTypesIfc from "./ifc4_gen/entity_types_ifc.gen.js";
|
|
17
|
+
import { IfcSpatialSkeleton } from "./ifc_spatial_skeleton.js";
|
|
18
|
+
import IfcStepParser from "./ifc_step_parser.js";
|
|
19
|
+
let bytes;
|
|
20
|
+
let model;
|
|
21
|
+
beforeAll(() => {
|
|
22
|
+
bytes = new Uint8Array(fs.readFileSync("data/index.ifc"));
|
|
23
|
+
const input = new ParsingBuffer(bytes);
|
|
24
|
+
IfcStepParser.Instance.parseHeader(input);
|
|
25
|
+
model = IfcStepParser.Instance.parseDataToModel(input)[1];
|
|
26
|
+
});
|
|
27
|
+
/**
|
|
28
|
+
* Stream the fixture through a skeleton.
|
|
29
|
+
*
|
|
30
|
+
* @param onRecord Optional per-record hook, for querying mid-parse.
|
|
31
|
+
* @return {IfcSpatialSkeleton} The populated skeleton.
|
|
32
|
+
*/
|
|
33
|
+
function streamed(onRecord) {
|
|
34
|
+
const skeleton = new IfcSpatialSkeleton();
|
|
35
|
+
const dispatcher = new StreamingRecordDispatcher();
|
|
36
|
+
skeleton.subscribe(dispatcher);
|
|
37
|
+
if (onRecord !== void 0) {
|
|
38
|
+
dispatcher.onAnyRecord((localID) => onRecord(localID));
|
|
39
|
+
}
|
|
40
|
+
const result = buildIndexStreaming(new BufferByteSource(bytes), IfcStepParser.Instance, 4 * 1024, dispatcher.onRecordIndexed);
|
|
41
|
+
expect(result.result).toBe(ParseResult.COMPLETE);
|
|
42
|
+
return skeleton;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Find a node anywhere in a forest.
|
|
46
|
+
*
|
|
47
|
+
* @param roots The forest.
|
|
48
|
+
* @param expressID The express ID to find.
|
|
49
|
+
* @return {SkeletonNode | undefined} The node, if present.
|
|
50
|
+
*/
|
|
51
|
+
function find(roots, expressID) {
|
|
52
|
+
for (const root of roots) {
|
|
53
|
+
if (root.expressID === expressID) {
|
|
54
|
+
return root;
|
|
55
|
+
}
|
|
56
|
+
const found = find(root.children, expressID);
|
|
57
|
+
if (found !== void 0) {
|
|
58
|
+
return found;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return void 0;
|
|
62
|
+
}
|
|
63
|
+
describe("IfcSpatialSkeleton", () => {
|
|
64
|
+
test("names come out matching the entities the model decodes", () => {
|
|
65
|
+
const skeleton = streamed();
|
|
66
|
+
for (const node of skeleton.tree()) {
|
|
67
|
+
expectNamesMatchModel(node);
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
/**
|
|
71
|
+
* Assert a node's strings against the model's own decode of that record,
|
|
72
|
+
* recursively.
|
|
73
|
+
*
|
|
74
|
+
* @param node The skeleton node.
|
|
75
|
+
*/
|
|
76
|
+
function expectNamesMatchModel(node) {
|
|
77
|
+
const entity = model.getElementByExpressID(node.expressID);
|
|
78
|
+
expect(entity).toBeDefined();
|
|
79
|
+
expect(node.globalId).toBe(entity.GlobalId);
|
|
80
|
+
expect(node.name ?? null).toBe(entity.Name ?? null);
|
|
81
|
+
// Asserted from the MODEL's side: if the entity has a LongName, the
|
|
82
|
+
// skeleton must have it too. Testing `node.longName !== undefined` first
|
|
83
|
+
// would pass a skeleton that silently dropped every LongName it should
|
|
84
|
+
// have captured — which is exactly how reading the wrong attribute
|
|
85
|
+
// position for IfcContext went unnoticed.
|
|
86
|
+
if (typeof entity.LongName === "string") {
|
|
87
|
+
expect(node.longName).toBe(entity.LongName);
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
expect(node.longName).toBeUndefined();
|
|
91
|
+
}
|
|
92
|
+
for (const child of node.children) {
|
|
93
|
+
expectNamesMatchModel(child);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
test("containment edges match the relationships in the model", () => {
|
|
97
|
+
const skeleton = streamed();
|
|
98
|
+
const roots = skeleton.tree();
|
|
99
|
+
// The project is the spatial root, and its site/storey chain is what the
|
|
100
|
+
// NavTree draws.
|
|
101
|
+
const projectID = [...model.expressIDsOfTypes({ query: [EntityTypesIfc.IFCPROJECT] })][0];
|
|
102
|
+
const project = find(roots, projectID);
|
|
103
|
+
expect(project).toBeDefined();
|
|
104
|
+
expect(project.name).toBe("Bldrs");
|
|
105
|
+
const site = project.children.find((child) => child.type === EntityTypesIfc.IFCSITE);
|
|
106
|
+
expect(site).toBeDefined();
|
|
107
|
+
expect(site.name).toBe("Build");
|
|
108
|
+
const storey = find([site], 154);
|
|
109
|
+
expect(storey).toBeDefined();
|
|
110
|
+
expect(storey.type).toBe(EntityTypesIfc.IFCBUILDINGSTOREY);
|
|
111
|
+
expect(storey.name).toBe("Thing");
|
|
112
|
+
});
|
|
113
|
+
test("LongName is read from each branch's own attribute position", () => {
|
|
114
|
+
// IfcContext keeps LongName at 5 and IfcSpatialElement at 7, because the
|
|
115
|
+
// two branches inherit different prefixes. A single hard-coded position
|
|
116
|
+
// reads some other attribute — silently, since both are optional strings.
|
|
117
|
+
const source = [
|
|
118
|
+
"ISO-10303-21;",
|
|
119
|
+
"HEADER;",
|
|
120
|
+
"FILE_DESCRIPTION((''),'');",
|
|
121
|
+
"FILE_NAME('','',(''),(''),'','','');",
|
|
122
|
+
"FILE_SCHEMA(('IFC4'));",
|
|
123
|
+
"ENDSEC;",
|
|
124
|
+
"DATA;",
|
|
125
|
+
"#1= IFCPROJECT('p',$,'PRJ-001',$,$,'Riverside Tower',$,$,$);",
|
|
126
|
+
"#2= IFCSITE('s',$,'SITE-A',$,$,$,$,'North Parcel',$,$,$,$,$,$);",
|
|
127
|
+
"#3= IFCRELAGGREGATES('r',$,$,$,#1,(#2));",
|
|
128
|
+
"ENDSEC;",
|
|
129
|
+
"END-ISO-10303-21;",
|
|
130
|
+
"",
|
|
131
|
+
].join("\n");
|
|
132
|
+
const skeleton = new IfcSpatialSkeleton();
|
|
133
|
+
const dispatcher = new StreamingRecordDispatcher();
|
|
134
|
+
skeleton.subscribe(dispatcher);
|
|
135
|
+
const result = buildIndexStreaming(new BufferByteSource(new TextEncoder().encode(source)), IfcStepParser.Instance, 4 * 1024, dispatcher.onRecordIndexed);
|
|
136
|
+
expect(result.result).toBe(ParseResult.COMPLETE);
|
|
137
|
+
const project = skeleton.node(1);
|
|
138
|
+
const site = skeleton.node(2);
|
|
139
|
+
expect(project?.name).toBe("PRJ-001");
|
|
140
|
+
expect(project?.longName).toBe("Riverside Tower");
|
|
141
|
+
expect(site?.name).toBe("SITE-A");
|
|
142
|
+
expect(site?.longName).toBe("North Parcel");
|
|
143
|
+
});
|
|
144
|
+
test("the tree is answerable mid-parse and only grows", () => {
|
|
145
|
+
const skeleton = new IfcSpatialSkeleton();
|
|
146
|
+
const dispatcher = new StreamingRecordDispatcher();
|
|
147
|
+
skeleton.subscribe(dispatcher);
|
|
148
|
+
const counts = [];
|
|
149
|
+
dispatcher.onAnyRecord((localID) => {
|
|
150
|
+
if (localID === 64 || localID === 128) {
|
|
151
|
+
counts.push(skeleton.nodeCount);
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
buildIndexStreaming(new BufferByteSource(bytes), IfcStepParser.Instance, 4 * 1024, dispatcher.onRecordIndexed);
|
|
155
|
+
expect(counts).toHaveLength(2);
|
|
156
|
+
expect(counts[0]).toBeLessThanOrEqual(counts[1]);
|
|
157
|
+
expect(counts[1]).toBeLessThanOrEqual(skeleton.nodeCount);
|
|
158
|
+
expect(skeleton.nodeCount).toBeGreaterThan(0);
|
|
159
|
+
expect(skeleton.edgeCount).toBeGreaterThan(0);
|
|
160
|
+
});
|
|
161
|
+
test("a forward-referenced parent links as soon as both ends exist", () => {
|
|
162
|
+
// Hostile ordering: the relationship names entities that appear later in
|
|
163
|
+
// the file. Nothing is remembered as pending — the edge simply links on
|
|
164
|
+
// the next tree() once both ends have been parsed.
|
|
165
|
+
const source = [
|
|
166
|
+
"ISO-10303-21;",
|
|
167
|
+
"HEADER;",
|
|
168
|
+
"FILE_DESCRIPTION((''),'');",
|
|
169
|
+
"FILE_NAME('','',(''),(''),'','','');",
|
|
170
|
+
"FILE_SCHEMA(('IFC4'));",
|
|
171
|
+
"ENDSEC;",
|
|
172
|
+
"DATA;",
|
|
173
|
+
"#1= IFCRELAGGREGATES('r',$,$,$,#2,(#3));",
|
|
174
|
+
"#2= IFCPROJECT('p',$,'Late Project',$,$,$,$,$,$);",
|
|
175
|
+
"#3= IFCSITE('s',$,'Late Site',$,$,$,$,'Long Site',$,$,$,$,$,$);",
|
|
176
|
+
"ENDSEC;",
|
|
177
|
+
"END-ISO-10303-21;",
|
|
178
|
+
"",
|
|
179
|
+
].join("\n");
|
|
180
|
+
const skeleton = new IfcSpatialSkeleton();
|
|
181
|
+
const dispatcher = new StreamingRecordDispatcher();
|
|
182
|
+
skeleton.subscribe(dispatcher);
|
|
183
|
+
const midParse = [];
|
|
184
|
+
dispatcher.onAnyRecord(() => {
|
|
185
|
+
midParse.push(skeleton.tree().length);
|
|
186
|
+
});
|
|
187
|
+
const result = buildIndexStreaming(new BufferByteSource(new TextEncoder().encode(source)), IfcStepParser.Instance, 4 * 1024, dispatcher.onRecordIndexed);
|
|
188
|
+
expect(result.result).toBe(ParseResult.COMPLETE);
|
|
189
|
+
// After the relationship alone, there is nothing to link; by the end the
|
|
190
|
+
// project owns the site.
|
|
191
|
+
expect(midParse[0]).toBe(0);
|
|
192
|
+
const roots = skeleton.tree();
|
|
193
|
+
expect(roots).toHaveLength(1);
|
|
194
|
+
expect(roots[0].name).toBe("Late Project");
|
|
195
|
+
expect(roots[0].children).toHaveLength(1);
|
|
196
|
+
expect(roots[0].children[0].name).toBe("Late Site");
|
|
197
|
+
expect(roots[0].children[0].longName).toBe("Long Site");
|
|
198
|
+
});
|
|
199
|
+
});
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import EntityTypesIfc from "./ifc4_gen/entity_types_ifc.gen.js";
|
|
2
2
|
import StepModelBase from "../step/step_model_base.js";
|
|
3
3
|
import { StepIndexEntry } from "../step/parsing/step_parser.js";
|
|
4
|
+
import { StepIndexColumns } from "../step/parsing/columnar_index.js";
|
|
4
5
|
import { MultiIndexSet } from "../indexing/multi_index_set.js";
|
|
5
6
|
import { IfcModelGeometry } from "./ifc_model_geometry.js";
|
|
6
7
|
import { IfcModelProfile } from "./ifc_model_profile.js";
|
|
@@ -8,6 +9,7 @@ import IfcStepExternalMapping from "./ifc_step_external_mapping.js";
|
|
|
8
9
|
import IfcModelCurves from "./ifc_model_curves.js";
|
|
9
10
|
import { CsgMemoization } from "../core/csg_operations.js";
|
|
10
11
|
import { IfcMaterialCache } from "./ifc_material_cache.js";
|
|
12
|
+
import { StepBufferProvider } from "../step/step_buffer_provider.js";
|
|
11
13
|
/**
|
|
12
14
|
* Represents an IFC model deserialized from step.
|
|
13
15
|
*/
|
|
@@ -26,9 +28,11 @@ export default class IfcStepModel extends StepModelBase<EntityTypesIfc> {
|
|
|
26
28
|
* Construct this model given a buffer containing the data and the parsed data index on that,
|
|
27
29
|
* adding the typeIndex on top of that.
|
|
28
30
|
*
|
|
29
|
-
* @param buffer The buffer to values from
|
|
31
|
+
* @param buffer The buffer to values from, or `undefined` with `provider`
|
|
32
|
+
* set for a windowed (streaming) source.
|
|
30
33
|
* @param elementIndex The parsed index to elements in the STEP.
|
|
34
|
+
* @param provider Optional pre-built buffer provider (windowed source).
|
|
31
35
|
*/
|
|
32
|
-
constructor(buffer: Uint8Array, elementIndex: StepIndexEntry<EntityTypesIfc>[]);
|
|
36
|
+
constructor(buffer: Uint8Array | undefined, elementIndex: StepIndexEntry<EntityTypesIfc>[] | StepIndexColumns<EntityTypesIfc>, provider?: StepBufferProvider);
|
|
33
37
|
}
|
|
34
38
|
//# sourceMappingURL=ifc_step_model.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ifc_step_model.d.ts","sourceRoot":"","sources":["../../../src/ifc/ifc_step_model.ts"],"names":[],"mappings":"AAAA,OAAO,cAAqC,MAAM,iCAAiC,CAAA;AACnF,OAAO,aAAa,MAAM,yBAAyB,CAAA;AAEnD,OAAO,EAAC,cAAc,EAAC,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"ifc_step_model.d.ts","sourceRoot":"","sources":["../../../src/ifc/ifc_step_model.ts"],"names":[],"mappings":"AAAA,OAAO,cAAqC,MAAM,iCAAiC,CAAA;AACnF,OAAO,aAAa,MAAM,yBAAyB,CAAA;AAEnD,OAAO,EAAC,cAAc,EAAC,MAAM,6BAA6B,CAAA;AAC1D,OAAO,EAAC,gBAAgB,EAAC,MAAM,gCAAgC,CAAA;AAE/D,OAAO,EAAC,aAAa,EAAC,MAAM,6BAA6B,CAAA;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,sBAAsB,MAAM,6BAA6B,CAAA;AAChE,OAAO,cAAc,MAAM,oBAAoB,CAAA;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAA;AAKjE;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,aAAa,CAAE,cAAc,CAAE;IAEvE,SAAgB,SAAS,EAAE,aAAa,CAAE,cAAc,CAAE,CAAA;IAC1D,SAAgB,mBAAmB,gCAAyB;IAC5D,SAAgB,QAAQ,mBAA+B;IACvD,SAAgB,YAAY,mBAAqC;IACjE,SAAgB,QAAQ,kBAA4B;IACpD,SAAgB,MAAM,iBAA2B;IACjD,SAAgB,aAAa,iBAAuB;IACpD,SAAgB,SAAS,mBAA+B;IACxD,SAAgB,aAAa,mBAAqC;IAClE,SAAgB,cAAc,wBAAiB;IAE/C;;;;;;;;OAQG;gBAEC,MAAM,EAAE,UAAU,GAAG,SAAS,EAC9B,YAAY,EAAE,cAAc,CAAE,cAAc,CAAE,EAAE,GAAG,gBAAgB,CAAE,cAAc,CAAE,EACrF,QAAQ,CAAC,EAAE,kBAAkB;CAKlC"}
|
|
@@ -17,11 +17,13 @@ export default class IfcStepModel extends StepModelBase {
|
|
|
17
17
|
* Construct this model given a buffer containing the data and the parsed data index on that,
|
|
18
18
|
* adding the typeIndex on top of that.
|
|
19
19
|
*
|
|
20
|
-
* @param buffer The buffer to values from
|
|
20
|
+
* @param buffer The buffer to values from, or `undefined` with `provider`
|
|
21
|
+
* set for a windowed (streaming) source.
|
|
21
22
|
* @param elementIndex The parsed index to elements in the STEP.
|
|
23
|
+
* @param provider Optional pre-built buffer provider (windowed source).
|
|
22
24
|
*/
|
|
23
|
-
constructor(buffer, elementIndex) {
|
|
24
|
-
super(SchemaIfc, buffer, elementIndex);
|
|
25
|
+
constructor(buffer, elementIndex, provider) {
|
|
26
|
+
super(SchemaIfc, buffer, elementIndex, provider);
|
|
25
27
|
this.externalMappingType = IfcStepExternalMapping;
|
|
26
28
|
this.geometry = new IfcModelGeometry(this);
|
|
27
29
|
this.voidGeometry = new IfcModelGeometry(this, true);
|
|
@@ -31,6 +33,6 @@ export default class IfcStepModel extends StepModelBase {
|
|
|
31
33
|
this.materials = new IfcMaterialCache(this);
|
|
32
34
|
this.voidMaterials = new IfcMaterialCache(this, true);
|
|
33
35
|
this.elementTypeIDs = EntityTypesIfc;
|
|
34
|
-
this.typeIndex = indexerInstance.
|
|
36
|
+
this.typeIndex = indexerInstance.createFor(elementIndex);
|
|
35
37
|
}
|
|
36
38
|
}
|
|
@@ -2,6 +2,8 @@ import ParsingBuffer from "../parsing/parsing_buffer.js";
|
|
|
2
2
|
import StepParser, { ParseProgressCallback, ParseResult } from "../step/parsing/step_parser.js";
|
|
3
3
|
import EntityTypesIfc from "./ifc4_gen/entity_types_ifc.gen.js";
|
|
4
4
|
import IfcStepModel from "./ifc_step_model.js";
|
|
5
|
+
import { ByteSource, ReadableByteSource } from "../step/parsing/byte_source.js";
|
|
6
|
+
import { StepExternalByteStore } from "../step/step_buffer_provider.js";
|
|
5
7
|
/**
|
|
6
8
|
* Parser for taking IFC file serialized in step and turning them into a lazily parsed model.
|
|
7
9
|
*/
|
|
@@ -42,5 +44,61 @@ export default class IfcStepParser extends StepParser<EntityTypesIfc> {
|
|
|
42
44
|
ParseResult,
|
|
43
45
|
IfcStepModel | undefined
|
|
44
46
|
]>;
|
|
47
|
+
/**
|
|
48
|
+
* Build a model by streaming the source through a bounded moving window
|
|
49
|
+
* (see buildIndexStreaming / M0) rather than parsing one resident buffer,
|
|
50
|
+
* then backing the model with a windowed provider over `store` — so the
|
|
51
|
+
* source is never held fully resident in the JS heap.
|
|
52
|
+
*
|
|
53
|
+
* `source` serves the parse (synchronous windowed reads — on a worker this
|
|
54
|
+
* is an OPFS sync-access handle; in node/tests a file descriptor or buffer)
|
|
55
|
+
* and `store` serves the model's post-parse property access (asynchronous
|
|
56
|
+
* windowed reads paged in on demand — OPFS `File.slice()` in the browser).
|
|
57
|
+
* Both view the same file bytes, so the file-absolute addresses the index
|
|
58
|
+
* records resolve identically through either.
|
|
59
|
+
*
|
|
60
|
+
* NOTE (M1 scope): this delivers the bounded-memory *parse*. Synchronous
|
|
61
|
+
* geometry extraction still needs its record ranges resident — as after
|
|
62
|
+
* `spillSourceToExternalStore` — so a caller that extracts geometry must
|
|
63
|
+
* `ensureResident` first (demand-driven geometry is M3). Property / index
|
|
64
|
+
* access works directly via the async surfaces.
|
|
65
|
+
*
|
|
66
|
+
* @param source Synchronous byte source feeding the streaming parse.
|
|
67
|
+
* @param store Async external store backing the windowed model.
|
|
68
|
+
* @param opts Optional window sizing: `pool` (parse window),
|
|
69
|
+
* `chunkBytes` / `maxResidentChunks` (model window).
|
|
70
|
+
* @return {[ParseResult, IfcStepModel | undefined]} The parse result and
|
|
71
|
+
* the windowed model.
|
|
72
|
+
*/
|
|
73
|
+
parseStreamToModel(source: ByteSource, store: StepExternalByteStore, opts?: {
|
|
74
|
+
pool?: number;
|
|
75
|
+
chunkBytes?: number;
|
|
76
|
+
maxResidentChunks?: number;
|
|
77
|
+
}): [
|
|
78
|
+
ParseResult,
|
|
79
|
+
IfcStepModel | undefined
|
|
80
|
+
];
|
|
81
|
+
/**
|
|
82
|
+
* Cooperative twin of {@link parseStreamToModel}: the index build
|
|
83
|
+
* yields to the event loop and can fill windows from an async
|
|
84
|
+
* {@link ReadableByteSource} (an OPFS `File.slice()` store). The
|
|
85
|
+
* model is still windowed — geometry extract must
|
|
86
|
+
* `ensureResident` first.
|
|
87
|
+
*
|
|
88
|
+
* @param source Sync or async byte source feeding the parse.
|
|
89
|
+
* @param store Async external store backing the windowed model.
|
|
90
|
+
* @param opts Optional window sizing plus parse progress.
|
|
91
|
+
* @return {Promise<[ParseResult, IfcStepModel | undefined]>} The
|
|
92
|
+
* parse result and the windowed model.
|
|
93
|
+
*/
|
|
94
|
+
parseStreamToModelAsync(source: ReadableByteSource, store: StepExternalByteStore, opts?: {
|
|
95
|
+
pool?: number;
|
|
96
|
+
chunkBytes?: number;
|
|
97
|
+
maxResidentChunks?: number;
|
|
98
|
+
onProgress?: (absoluteByteCursor: number) => void;
|
|
99
|
+
}): Promise<[
|
|
100
|
+
ParseResult,
|
|
101
|
+
IfcStepModel | undefined
|
|
102
|
+
]>;
|
|
45
103
|
}
|
|
46
104
|
//# sourceMappingURL=ifc_step_parser.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ifc_step_parser.d.ts","sourceRoot":"","sources":["../../../src/ifc/ifc_step_parser.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,MAAM,2BAA2B,CAAA;AACrD,OAAO,UAAU,EAAE,EAAC,qBAAqB,EAAE,WAAW,EAAC,MAAM,6BAA6B,CAAA;AAC1F,OAAO,cAAc,MAAM,iCAAiC,CAAA;AAE5D,OAAO,YAAY,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"ifc_step_parser.d.ts","sourceRoot":"","sources":["../../../src/ifc/ifc_step_parser.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,MAAM,2BAA2B,CAAA;AACrD,OAAO,UAAU,EAAE,EAAC,qBAAqB,EAAE,WAAW,EAAC,MAAM,6BAA6B,CAAA;AAC1F,OAAO,cAAc,MAAM,iCAAiC,CAAA;AAE5D,OAAO,YAAY,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAK5E,OAAO,EACL,qBAAqB,EAEtB,MAAM,8BAA8B,CAAA;AAOrC;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,UAAU,CAAE,cAAc,CAAE;IACrE;;OAEG;;IAKH;;;;;OAKG;IACH,gBAAuB,QAAQ,gBAAsB;IAErD;;;;;;;OAOG;IACI,gBAAgB,CACnB,KAAK,EAAE,aAAa,EACpB,UAAU,CAAC,EAAE,qBAAqB,GAAI,CAAC,WAAW,EAAE,YAAY,GAAG,SAAS,CAAC;IAMjF;;;;;;;;OAQG;IACU,qBAAqB,CAC9B,KAAK,EAAE,aAAa,EACpB,UAAU,CAAC,EAAE,qBAAqB,GAClC,OAAO,CAAC,CAAC,WAAW,EAAE,YAAY,GAAG,SAAS,CAAC,CAAC;IAMpD;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACI,kBAAkB,CACrB,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,qBAAqB,EAC5B,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;KAAE,GACzE;QAAC,WAAW;QAAE,YAAY,GAAG,SAAS;KAAC;IAmB3C;;;;;;;;;;;;OAYG;IACU,uBAAuB,CAChC,MAAM,EAAE,kBAAkB,EAC1B,KAAK,EAAE,qBAAqB,EAC5B,IAAI,CAAC,EAAE;QACL,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,UAAU,CAAC,EAAE,MAAM,CAAA;QACnB,iBAAiB,CAAC,EAAE,MAAM,CAAA;QAC1B,UAAU,CAAC,EAAE,CAAE,kBAAkB,EAAE,MAAM,KAAM,IAAI,CAAA;KACpD,GACD,OAAO,CAAC,CAAC,WAAW,EAAE,YAAY,GAAG,SAAS,CAAC,CAAC;CAkBrD"}
|