@ifc-lite/query
v1.14.7
Published
Query system for IFC-Lite
Readme
@ifc-lite/query
Query system for IFClite. Fluent type-safe filtering of an IfcDataStore, plus full SQL via DuckDB-WASM. Filters by IFC type, property values, and relationships across multi-model federations.
Installation
npm install @ifc-lite/queryFluent queries
import { IfcQuery } from '@ifc-lite/query';
const query = new IfcQuery(store); // store from `parseColumnar()`
// All external load-bearing walls
const walls = query
.ofType('IfcWall', 'IfcWallStandardCase')
.whereProperty('Pset_WallCommon', 'IsExternal', '=', true)
.whereProperty('Pset_WallCommon', 'LoadBearing', '=', true)
.execute();
console.log(`${walls.length} external load-bearing walls`);
for (const wall of walls) {
console.log(wall.name, wall.globalId);
console.log(wall.properties()); // lazily-loaded psets
}Convenience methods for the common building elements:
query.walls().execute();
query.doors().execute();
query.windows().execute();
query.slabs().execute();
query.columns().execute();
query.beams().execute();
query.spaces().execute();Comparison operators
query
.ofType('IfcWall')
.whereProperty('Qto_WallBaseQuantities', 'NetVolume', '>', 5.0)
.whereProperty('Pset_WallCommon', 'FireRating', '!=', null)
.execute();Supported: =, !=, >, <, >=, <=, CONTAINS, STARTS_WITH, IS_NULL, IS_NOT_NULL.
Graph traversal
const wall = query.entity(12345);
// Walk the spatial structure
console.log(wall.storey()?.name); // 'Ground Floor'
console.log(wall.building()?.name); // 'Office Tower'
// Containment + composition
const openings = wall.contains(); // openings hosted by the wall
const aggregates = wall.composedOf();SQL via DuckDB-WASM
const result = await query.sql(`
SELECT type, COUNT(*) AS count, AVG(volume) AS avg_volume
FROM entities e
JOIN quantities q ON q.entity_id = e.express_id
WHERE q.name = 'NetVolume'
GROUP BY type
ORDER BY count DESC
LIMIT 10
`);
console.table(result.rows);Tables exposed: entities, properties, quantities, relationships. Useful when you'd rather write SQL than chain method calls.
API
See the Querying Guide and API Reference.
