@ifc-lite/cli 0.26.0 → 0.28.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 +1 -1
- package/dist/commands/ask.d.ts +8 -0
- package/dist/commands/ask.d.ts.map +1 -1
- package/dist/commands/ask.js +10 -9
- package/dist/commands/ask.js.map +1 -1
- package/dist/commands/bsdd.d.ts.map +1 -1
- package/dist/commands/bsdd.js +49 -13
- package/dist/commands/bsdd.js.map +1 -1
- package/dist/commands/delivery-checks.d.ts +56 -0
- package/dist/commands/delivery-checks.d.ts.map +1 -0
- package/dist/commands/delivery-checks.js +222 -0
- package/dist/commands/delivery-checks.js.map +1 -0
- package/dist/commands/delivery-recipe.d.ts +23 -0
- package/dist/commands/delivery-recipe.d.ts.map +1 -0
- package/dist/commands/delivery-recipe.js +104 -0
- package/dist/commands/delivery-recipe.js.map +1 -0
- package/dist/commands/delivery-report.d.ts +51 -0
- package/dist/commands/delivery-report.d.ts.map +1 -0
- package/dist/commands/delivery-report.js +114 -0
- package/dist/commands/delivery-report.js.map +1 -0
- package/dist/commands/delivery.d.ts +2 -0
- package/dist/commands/delivery.d.ts.map +1 -0
- package/dist/commands/delivery.js +127 -0
- package/dist/commands/delivery.js.map +1 -0
- package/dist/commands/diff-classification-label.d.ts +12 -0
- package/dist/commands/diff-classification-label.d.ts.map +1 -0
- package/dist/commands/diff-classification-label.js +20 -0
- package/dist/commands/diff-classification-label.js.map +1 -0
- package/dist/commands/diff-engine.d.ts.map +1 -1
- package/dist/commands/diff-engine.js +33 -11
- package/dist/commands/diff-engine.js.map +1 -1
- package/dist/commands/diff-test-helpers.d.ts +12 -0
- package/dist/commands/diff-test-helpers.d.ts.map +1 -1
- package/dist/commands/diff-test-helpers.js +68 -0
- package/dist/commands/diff-test-helpers.js.map +1 -1
- package/dist/commands/diff-unit-scale-fixtures.d.ts +34 -0
- package/dist/commands/diff-unit-scale-fixtures.d.ts.map +1 -0
- package/dist/commands/diff-unit-scale-fixtures.js +94 -0
- package/dist/commands/diff-unit-scale-fixtures.js.map +1 -0
- package/dist/commands/export.d.ts +11 -0
- package/dist/commands/export.d.ts.map +1 -1
- package/dist/commands/export.js +9 -14
- package/dist/commands/export.js.map +1 -1
- package/dist/commands/gym.js +2 -2
- package/dist/commands/merge.d.ts.map +1 -1
- package/dist/commands/merge.js +8 -0
- package/dist/commands/merge.js.map +1 -1
- package/dist/commands/query-aggregation.d.ts +27 -4
- package/dist/commands/query-aggregation.d.ts.map +1 -1
- package/dist/commands/query-aggregation.js +67 -6
- package/dist/commands/query-aggregation.js.map +1 -1
- package/dist/commands/query-output.d.ts +7 -0
- package/dist/commands/query-output.d.ts.map +1 -1
- package/dist/commands/query-output.js +63 -27
- package/dist/commands/query-output.js.map +1 -1
- package/dist/commands/query-storey.d.ts +24 -0
- package/dist/commands/query-storey.d.ts.map +1 -0
- package/dist/commands/query-storey.js +71 -0
- package/dist/commands/query-storey.js.map +1 -0
- package/dist/commands/query.d.ts +2 -25
- package/dist/commands/query.d.ts.map +1 -1
- package/dist/commands/query.js +39 -158
- package/dist/commands/query.js.map +1 -1
- package/dist/commands/schedule-aggregate.d.ts +51 -0
- package/dist/commands/schedule-aggregate.d.ts.map +1 -0
- package/dist/commands/schedule-aggregate.js +121 -0
- package/dist/commands/schedule-aggregate.js.map +1 -0
- package/dist/commands/schedule-columns.d.ts +15 -0
- package/dist/commands/schedule-columns.d.ts.map +1 -0
- package/dist/commands/schedule-columns.js +63 -0
- package/dist/commands/schedule-columns.js.map +1 -0
- package/dist/commands/schedule-group.d.ts +65 -0
- package/dist/commands/schedule-group.d.ts.map +1 -0
- package/dist/commands/schedule-group.js +0 -0
- package/dist/commands/schedule-group.js.map +1 -0
- package/dist/commands/schedule-presets.d.ts +21 -0
- package/dist/commands/schedule-presets.d.ts.map +1 -0
- package/dist/commands/schedule-presets.js +62 -0
- package/dist/commands/schedule-presets.js.map +1 -0
- package/dist/commands/schedule-render-html.d.ts +13 -0
- package/dist/commands/schedule-render-html.d.ts.map +1 -0
- package/dist/commands/schedule-render-html.js +100 -0
- package/dist/commands/schedule-render-html.js.map +1 -0
- package/dist/commands/schedule-render-md.d.ts +12 -0
- package/dist/commands/schedule-render-md.d.ts.map +1 -0
- package/dist/commands/schedule-render-md.js +77 -0
- package/dist/commands/schedule-render-md.js.map +1 -0
- package/dist/commands/schedule-render.d.ts +51 -0
- package/dist/commands/schedule-render.d.ts.map +1 -0
- package/dist/commands/schedule-render.js +205 -0
- package/dist/commands/schedule-render.js.map +1 -0
- package/dist/commands/schedule-spec.d.ts +29 -0
- package/dist/commands/schedule-spec.d.ts.map +1 -0
- package/dist/commands/schedule-spec.js +111 -0
- package/dist/commands/schedule-spec.js.map +1 -0
- package/dist/commands/schedule.d.ts +23 -0
- package/dist/commands/schedule.d.ts.map +1 -0
- package/dist/commands/schedule.js +249 -0
- package/dist/commands/schedule.js.map +1 -0
- package/dist/commands/schema.d.ts.map +1 -1
- package/dist/commands/schema.js +192 -17
- package/dist/commands/schema.js.map +1 -1
- package/dist/commands/stats-aggregation.d.ts +31 -6
- package/dist/commands/stats-aggregation.d.ts.map +1 -1
- package/dist/commands/stats-aggregation.js +79 -11
- package/dist/commands/stats-aggregation.js.map +1 -1
- package/dist/commands/stats.d.ts.map +1 -1
- package/dist/commands/stats.js +4 -4
- package/dist/commands/stats.js.map +1 -1
- package/dist/commands/validate.d.ts +7 -4
- package/dist/commands/validate.d.ts.map +1 -1
- package/dist/commands/validate.js +9 -6
- package/dist/commands/validate.js.map +1 -1
- package/dist/commands/where-filter.d.ts +42 -0
- package/dist/commands/where-filter.d.ts.map +1 -0
- package/dist/commands/where-filter.js +88 -0
- package/dist/commands/where-filter.js.map +1 -0
- package/dist/energy-export.d.ts.map +1 -1
- package/dist/energy-export.js +12 -2
- package/dist/energy-export.js.map +1 -1
- package/dist/geometry-report.d.ts.map +1 -1
- package/dist/geometry-report.js +15 -3
- package/dist/geometry-report.js.map +1 -1
- package/dist/headless-backend.d.ts +20 -5
- package/dist/headless-backend.d.ts.map +1 -1
- package/dist/headless-backend.js +131 -90
- package/dist/headless-backend.js.map +1 -1
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -1
- package/dist/output.d.ts +13 -0
- package/dist/output.d.ts.map +1 -1
- package/dist/output.js +21 -0
- package/dist/output.js.map +1 -1
- package/dist/property-filter-match.d.ts +12 -0
- package/dist/property-filter-match.d.ts.map +1 -0
- package/dist/property-filter-match.js +17 -0
- package/dist/property-filter-match.js.map +1 -0
- package/dist/query-overlay-relations.d.ts +29 -0
- package/dist/query-overlay-relations.d.ts.map +1 -0
- package/dist/query-overlay-relations.js +88 -0
- package/dist/query-overlay-relations.js.map +1 -0
- package/dist/query-overlay.d.ts +44 -0
- package/dist/query-overlay.d.ts.map +1 -0
- package/dist/query-overlay.js +100 -0
- package/dist/query-overlay.js.map +1 -0
- package/package.json +21 -21
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schedule.js","sourceRoot":"","sources":["../../src/commands/schedule.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/commands/schema.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/commands/schema.ts"],"names":[],"mappings":"AAmNA,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAyDjE"}
|
package/dist/commands/schema.js
CHANGED
|
@@ -7,7 +7,194 @@
|
|
|
7
7
|
* Dump the complete SDK API schema as JSON.
|
|
8
8
|
* Useful for LLM tools to discover available commands and methods.
|
|
9
9
|
*/
|
|
10
|
+
import { BimContext, QueryBuilder } from '@ifc-lite/sdk';
|
|
10
11
|
import { printJson, hasFlag } from '../output.js';
|
|
12
|
+
/**
|
|
13
|
+
* Doc strings for the `BimContext` / `QueryBuilder` methods that
|
|
14
|
+
* `NAMESPACE_SCHEMAS` does not name (#3763). Only prose lives here — the
|
|
15
|
+
* method LIST itself is reflected off the runtime classes below, so a method
|
|
16
|
+
* added or removed upstream changes the dump without an edit here, and
|
|
17
|
+
* `schema.runtime-shape.test.ts` fails if the two ever disagree.
|
|
18
|
+
*
|
|
19
|
+
* Keyed per class, like `RUNTIME_METHOD_SIGNATURES` below (#3763 follow-up):
|
|
20
|
+
* `bim` and `query` are reflected off two different prototypes, so a bare
|
|
21
|
+
* name shared between them (there is none today, but nothing prevented it)
|
|
22
|
+
* would otherwise read whichever entry came first.
|
|
23
|
+
*/
|
|
24
|
+
const RUNTIME_METHOD_DOCS = {
|
|
25
|
+
bim: {
|
|
26
|
+
query: 'Start a query chain: bim.query().byType(...).toArray()',
|
|
27
|
+
on: 'Subscribe to an event, e.g. bim.on("selection:changed", handler)',
|
|
28
|
+
},
|
|
29
|
+
query: {
|
|
30
|
+
model: 'Restrict the chain to one model',
|
|
31
|
+
byType: "Filter by IFC type e.g. 'IfcWall'",
|
|
32
|
+
where: 'Filter by a property-set value',
|
|
33
|
+
limit: 'Cap the number of results',
|
|
34
|
+
offset: 'Skip the first n results',
|
|
35
|
+
toArray: 'Run the chain and return the entities',
|
|
36
|
+
first: 'Run the chain and return the first entity, or null',
|
|
37
|
+
count: 'Run the chain and return the number of matches',
|
|
38
|
+
refs: 'Run the chain and return entity refs only',
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Parameter names and return types for `BimContext` / `QueryBuilder` methods,
|
|
43
|
+
* transcribed from their own signatures in `packages/sdk/src/context.ts` and
|
|
44
|
+
* `packages/sdk/src/namespaces/query.ts` (#3763 follow-up).
|
|
45
|
+
*
|
|
46
|
+
* Keyed per class, not by bare method name: `BimContext` and `QueryBuilder`
|
|
47
|
+
* are reflected separately in `withRuntimeQueryShape`, and a future method
|
|
48
|
+
* that shares a name across both classes (their param/return shapes need not
|
|
49
|
+
* match) would otherwise read the wrong entry silently.
|
|
50
|
+
*
|
|
51
|
+
* `describe()` used to spread the sandbox bridge's own `paramNames`/`tsReturn`
|
|
52
|
+
* onto these methods, with the bridge as a fallback when a method had no
|
|
53
|
+
* entry here. The bridge runs a whole query synchronously and returns plain
|
|
54
|
+
* data (`bim.query.byType(...): BimEntity[]`, `entity(modelId, expressId)`),
|
|
55
|
+
* which is not the shape the CLI's raw `BimContext`/`QueryBuilder` have
|
|
56
|
+
* (`byType(...types): this`, `entity(ref: EntityRef)`) — falling back to it
|
|
57
|
+
* produced a schema entry an agent could follow into a TypeError or a chain
|
|
58
|
+
* that stops one link early. `describe()` now throws instead of falling back,
|
|
59
|
+
* so a new runtime method with no entry here fails the dump loudly (and
|
|
60
|
+
* `schema.runtime-shape.test.ts` with it) rather than shipping mislabelled.
|
|
61
|
+
*/
|
|
62
|
+
const RUNTIME_METHOD_SIGNATURES = {
|
|
63
|
+
bim: {
|
|
64
|
+
query: { tsReturn: 'QueryBuilder' },
|
|
65
|
+
matchingActiveFilter: { tsReturn: 'EntityData[] | null' },
|
|
66
|
+
entity: { paramNames: ['ref'], tsReturn: 'EntityData | null' },
|
|
67
|
+
attributes: { paramNames: ['ref'], tsReturn: 'EntityAttributeData[]' },
|
|
68
|
+
properties: { paramNames: ['ref'], tsReturn: 'PropertySetData[]' },
|
|
69
|
+
quantities: { paramNames: ['ref'], tsReturn: 'QuantitySetData[]' },
|
|
70
|
+
classifications: { paramNames: ['ref'], tsReturn: 'ClassificationData[]' },
|
|
71
|
+
materials: { paramNames: ['ref'], tsReturn: 'MaterialData | null' },
|
|
72
|
+
typeProperties: { paramNames: ['ref'], tsReturn: 'TypePropertiesData | null' },
|
|
73
|
+
documents: { paramNames: ['ref'], tsReturn: 'DocumentData[]' },
|
|
74
|
+
relationships: { paramNames: ['ref'], tsReturn: 'EntityRelationshipsData' },
|
|
75
|
+
property: { paramNames: ['ref', 'psetName', 'propName'], tsReturn: 'string | number | boolean | null' },
|
|
76
|
+
quantity: { paramNames: ['ref', 'qsetNameOrQuantityName', 'quantityName?'], tsReturn: 'number | null' },
|
|
77
|
+
related: { paramNames: ['ref', 'relType', 'direction'], tsReturn: 'EntityData[]' },
|
|
78
|
+
containedIn: { paramNames: ['ref'], tsReturn: 'EntityData | null' },
|
|
79
|
+
contains: { paramNames: ['ref'], tsReturn: 'EntityData[]' },
|
|
80
|
+
decomposedBy: { paramNames: ['ref'], tsReturn: 'EntityData | null' },
|
|
81
|
+
decomposes: { paramNames: ['ref'], tsReturn: 'EntityData[]' },
|
|
82
|
+
storey: { paramNames: ['ref'], tsReturn: 'EntityData | null' },
|
|
83
|
+
path: { paramNames: ['ref'], tsReturn: 'EntityData[]' },
|
|
84
|
+
storeys: { tsReturn: 'EntityData[]' },
|
|
85
|
+
on: { paramNames: ['event', 'handler'], tsReturn: 'void' },
|
|
86
|
+
},
|
|
87
|
+
query: {
|
|
88
|
+
model: { paramNames: ['modelId'], tsReturn: 'this' },
|
|
89
|
+
byType: { paramNames: ['...types'], tsReturn: 'this' },
|
|
90
|
+
where: { paramNames: ['psetName', 'propName', 'operator?', 'value?'], tsReturn: 'this' },
|
|
91
|
+
limit: { paramNames: ['n'], tsReturn: 'this' },
|
|
92
|
+
offset: { paramNames: ['n'], tsReturn: 'this' },
|
|
93
|
+
toArray: { tsReturn: 'EntityData[]' },
|
|
94
|
+
first: { tsReturn: 'EntityData | null' },
|
|
95
|
+
count: { tsReturn: 'number' },
|
|
96
|
+
refs: { tsReturn: 'EntityRef[]' },
|
|
97
|
+
},
|
|
98
|
+
};
|
|
99
|
+
/**
|
|
100
|
+
* Own value-function property names on a prototype, minus the constructor,
|
|
101
|
+
* plus getters whose value is itself callable (e.g. `BimContext.prototype.on`,
|
|
102
|
+
* a getter returning a bound subscription function) — the CLI exposes those
|
|
103
|
+
* the same way as a method, so a filter that only checked `.value` silently
|
|
104
|
+
* dropped them from the dump (#3763 follow-up).
|
|
105
|
+
*
|
|
106
|
+
* A getter can't be classified from the prototype alone — invoking it there
|
|
107
|
+
* runs the getter with `this` bound to the bare prototype, not an instance,
|
|
108
|
+
* which is exactly the state `on`'s getter needs (`this._boundOn`, set in
|
|
109
|
+
* the constructor) to return the function rather than `undefined`. `instance`
|
|
110
|
+
* lets a caller supply a real object to invoke the getter against; without
|
|
111
|
+
* one, getters are skipped rather than guessed at.
|
|
112
|
+
*/
|
|
113
|
+
function prototypeMethods(proto, instance) {
|
|
114
|
+
return Object.getOwnPropertyNames(proto).filter((name) => {
|
|
115
|
+
if (name === 'constructor')
|
|
116
|
+
return false;
|
|
117
|
+
const desc = Object.getOwnPropertyDescriptor(proto, name);
|
|
118
|
+
if (typeof desc?.value === 'function')
|
|
119
|
+
return true;
|
|
120
|
+
if (typeof desc?.get === 'function' && instance) {
|
|
121
|
+
return typeof instance[name] === 'function';
|
|
122
|
+
}
|
|
123
|
+
return false;
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Replace the sandbox bridge's flat `query` namespace with the two shapes the
|
|
128
|
+
* CLI's `bim` object actually has.
|
|
129
|
+
*
|
|
130
|
+
* `NAMESPACE_SCHEMAS` describes the browser sandbox bridge, where
|
|
131
|
+
* `bim.query.properties(ref)` is a real method. `ifc-lite run` / `ifc-lite eval`
|
|
132
|
+
* hand scripts a raw `BimContext` instead: `query()` starts a builder and
|
|
133
|
+
* `properties`, `quantities`, `relationships` and ~19 siblings sit at the top
|
|
134
|
+
* level of `bim`. Emitting the bridge shape here made every `bim.query.X(...)`
|
|
135
|
+
* call an agent copied out of `ifc-lite schema` throw a TypeError (#3763).
|
|
136
|
+
*
|
|
137
|
+
* Method lists are reflected off `BimContext.prototype` and
|
|
138
|
+
* `QueryBuilder.prototype` — the objects `run`/`eval` construct — rather than
|
|
139
|
+
* transcribed, so this cannot drift from the runtime. Params and return types
|
|
140
|
+
* come from `RUNTIME_METHOD_SIGNATURES`, not the bridge schema: the bridge
|
|
141
|
+
* describes its own (different) call shape, and copying its `paramNames` /
|
|
142
|
+
* `tsReturn` here just relabelled the wrong signature (#3763 follow-up).
|
|
143
|
+
*
|
|
144
|
+
* The bridge's `query` namespace (`bridgeQuery` below) is a flat list of the
|
|
145
|
+
* same ~20 entity-lookup methods that sit at the top level of `bim`
|
|
146
|
+
* (`entity`, `properties`, `quantities`, ...). That is the namespace those
|
|
147
|
+
* methods belong to on the bridge, and it is only ever used as a `doc` /
|
|
148
|
+
* `llmSemantics` fallback for the `bim` prototype. It is never consulted for
|
|
149
|
+
* the `query` builder-chain prototype: `QueryBuilder`'s `byType`/`where`/
|
|
150
|
+
* `limit`/… have no counterpart there (the bridge runs a whole chain
|
|
151
|
+
* synchronously instead of building one), so reading `bridgeMethods` by bare
|
|
152
|
+
* name for that prototype could silently attach an unrelated bridge method's
|
|
153
|
+
* doc to a same-named builder method. `RUNTIME_METHOD_DOCS.query` documents
|
|
154
|
+
* every builder method already, so restricting the fallback to `bim` needs
|
|
155
|
+
* no "no entry" carve-out.
|
|
156
|
+
*/
|
|
157
|
+
function withRuntimeQueryShape(schemas) {
|
|
158
|
+
const bridgeQuery = schemas.find((ns) => ns?.name === 'query');
|
|
159
|
+
const bridgeMethods = new Map((bridgeQuery?.methods ?? []).map((m) => [m.name, m]));
|
|
160
|
+
const describe = (proto) => (name) => {
|
|
161
|
+
const fromBridge = proto === 'bim' ? bridgeMethods.get(name) : undefined;
|
|
162
|
+
const signature = RUNTIME_METHOD_SIGNATURES[proto][name];
|
|
163
|
+
if (!signature) {
|
|
164
|
+
// A method exists on the runtime prototype but nobody transcribed its
|
|
165
|
+
// signature into RUNTIME_METHOD_SIGNATURES — fail loudly rather than
|
|
166
|
+
// fall back to the bridge's (differently shaped) entry, so a new
|
|
167
|
+
// BimContext/QueryBuilder method cannot ship mislabelled (#3763 follow-up).
|
|
168
|
+
throw new Error(`RUNTIME_METHOD_SIGNATURES.${proto} has no entry for '${name}' — add its ` +
|
|
169
|
+
`paramNames/tsReturn, transcribed from packages/sdk/src/context.ts or ` +
|
|
170
|
+
`packages/sdk/src/namespaces/query.ts.`);
|
|
171
|
+
}
|
|
172
|
+
return {
|
|
173
|
+
doc: RUNTIME_METHOD_DOCS[proto][name] ?? fromBridge?.doc ?? name,
|
|
174
|
+
name,
|
|
175
|
+
paramNames: signature.paramNames,
|
|
176
|
+
tsReturn: signature.tsReturn,
|
|
177
|
+
llmSemantics: fromBridge?.llmSemantics,
|
|
178
|
+
};
|
|
179
|
+
};
|
|
180
|
+
// Constructed only to invoke the `on` getter against real instance state
|
|
181
|
+
// (see `prototypeMethods`) — no backend method is called during
|
|
182
|
+
// construction or by this dump.
|
|
183
|
+
const bimInstance = new BimContext({ backend: {} });
|
|
184
|
+
return [
|
|
185
|
+
{
|
|
186
|
+
name: 'bim',
|
|
187
|
+
doc: 'Top-level methods on the `bim` object (call as bim.<method>(...))',
|
|
188
|
+
methods: prototypeMethods(BimContext.prototype, bimInstance).map(describe('bim')),
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
name: 'query',
|
|
192
|
+
doc: 'Query builder chain — start it with bim.query()',
|
|
193
|
+
methods: prototypeMethods(QueryBuilder.prototype).map(describe('query')),
|
|
194
|
+
},
|
|
195
|
+
...schemas.filter((ns) => ns?.name !== 'query'),
|
|
196
|
+
];
|
|
197
|
+
}
|
|
11
198
|
export async function schemaCommand(args) {
|
|
12
199
|
const compact = hasFlag(args, '--compact');
|
|
13
200
|
// Dynamically import the bridge schema to get tool definitions
|
|
@@ -41,7 +228,7 @@ export async function schemaCommand(args) {
|
|
|
41
228
|
// opting out of error handling altogether. stdout stays pure JSON.
|
|
42
229
|
process.exitCode = 1;
|
|
43
230
|
}
|
|
44
|
-
const output = schemas.map(ns => ({
|
|
231
|
+
const output = withRuntimeQueryShape(schemas).map(ns => ({
|
|
45
232
|
namespace: ns.name,
|
|
46
233
|
description: ns.doc,
|
|
47
234
|
methods: ns.methods.map((m) => {
|
|
@@ -74,22 +261,10 @@ function getStaticSchema() {
|
|
|
74
261
|
{ name: 'activeId', doc: 'Get active model ID' },
|
|
75
262
|
],
|
|
76
263
|
},
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
{ name: 'byType', doc: 'Filter by IFC type', paramNames: ['...types'] },
|
|
82
|
-
{ name: 'entity', doc: 'Get single entity', paramNames: ['modelId', 'expressId'] },
|
|
83
|
-
{ name: 'attributes', doc: 'Entity IFC attributes', paramNames: ['entity'] },
|
|
84
|
-
{ name: 'properties', doc: 'Property sets', paramNames: ['entity'] },
|
|
85
|
-
{ name: 'quantities', doc: 'Quantity sets', paramNames: ['entity'] },
|
|
86
|
-
{ name: 'classifications', doc: 'Classification references', paramNames: ['entity'] },
|
|
87
|
-
{ name: 'materials', doc: 'Material assignments', paramNames: ['entity'] },
|
|
88
|
-
{ name: 'typeProperties', doc: 'Type-level properties', paramNames: ['entity'] },
|
|
89
|
-
{ name: 'documents', doc: 'Linked documents', paramNames: ['entity'] },
|
|
90
|
-
{ name: 'relationships', doc: 'Structural relationships', paramNames: ['entity'] },
|
|
91
|
-
],
|
|
92
|
-
},
|
|
264
|
+
// No `query` entry: `withRuntimeQueryShape` reflects the `bim` root and
|
|
265
|
+
// the query-builder chain off the SDK classes, on the fallback path too,
|
|
266
|
+
// so a hand-written copy here could only rot (and the one that used to
|
|
267
|
+
// live here documented the sandbox bridge's `bim.query.*`, #3763).
|
|
93
268
|
{
|
|
94
269
|
name: 'export', doc: 'Multi-format export',
|
|
95
270
|
methods: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/commands/schema.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAElD,MAAM,
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/commands/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Pure aggregation helpers for `ifc-lite stats` — extracted so the KPI /
|
|
3
|
-
* WWR / GFA math can be unit tested against a fake `bim` surface instead of
|
|
4
|
-
* only through a real parsed IFC file. `statsCommand` in stats.ts wires
|
|
5
|
-
* these to the SDK's `BimContext`.
|
|
6
|
-
*/
|
|
7
1
|
export interface QuantitySet {
|
|
8
2
|
name: string;
|
|
9
3
|
quantities: Array<{
|
|
@@ -72,6 +66,22 @@ export declare function computeWindowWallRatio(totalWindowArea: number, exterior
|
|
|
72
66
|
export declare function computeGrossFloorArea<R>(bim: QuantityBim<R>, storeys: Array<{
|
|
73
67
|
ref: R;
|
|
74
68
|
}>, fallbackTotalFloorArea: number): number;
|
|
69
|
+
/**
|
|
70
|
+
* Distinct, display-ready storey names: blank/whitespace-only Names
|
|
71
|
+
* (`IFCBUILDINGSTOREY('...','',...)`) are dropped, same as a genuinely
|
|
72
|
+
* absent one, rather than surfacing as a blank entry in the storey list.
|
|
73
|
+
*/
|
|
74
|
+
export declare function computeStoreyNames(storeys: Array<{
|
|
75
|
+
name?: string | null;
|
|
76
|
+
}>): string[];
|
|
77
|
+
/**
|
|
78
|
+
* The first `IfcBuilding`'s display name, or `'(unnamed)'` when absent OR
|
|
79
|
+
* blank/whitespace-only — `?? '(unnamed)'` alone only falls through on
|
|
80
|
+
* null/undefined, so a present-but-blank `Name` was returned verbatim.
|
|
81
|
+
*/
|
|
82
|
+
export declare function computeBuildingName(buildings: Array<{
|
|
83
|
+
name?: string | null;
|
|
84
|
+
}>): string;
|
|
75
85
|
export interface MaterialSummaryEntry {
|
|
76
86
|
name: string;
|
|
77
87
|
count: number;
|
|
@@ -92,6 +102,21 @@ export interface MaterialsBim<R = unknown> extends QuantityBim<R> {
|
|
|
92
102
|
export declare function computeMaterialSummary<R>(bim: MaterialsBim<R>, elements: Array<{
|
|
93
103
|
ref: R;
|
|
94
104
|
}>, round: (n: number) => number): MaterialSummaryEntry[];
|
|
105
|
+
/**
|
|
106
|
+
* Scope an unfiltered `bim.query().toArray()` result down to physical building
|
|
107
|
+
* elements, for the material summary and validation stats. `bim.query()` with
|
|
108
|
+
* no type filter answers with every `IfcObjectDefinition` occurrence, so
|
|
109
|
+
* spatial containers, groupings and drafting annotations would otherwise inflate
|
|
110
|
+
* the material summary and the `unnamedElements`/`duplicateGlobalIds` counts (an
|
|
111
|
+
* `IfcAnnotation` dimension line never carries a Name and is not a defect).
|
|
112
|
+
*
|
|
113
|
+
* Excluding rather than testing for `IfcElement` is deliberate: a positive test
|
|
114
|
+
* would also drop `IfcGrid`, `IfcPort` and the structural-analysis items, which
|
|
115
|
+
* this fix has no opinion about — they stay counted exactly as before.
|
|
116
|
+
*/
|
|
117
|
+
export declare function filterBuildingElements<T extends {
|
|
118
|
+
type: string;
|
|
119
|
+
}>(entities: T[]): T[];
|
|
95
120
|
export interface ValidationSummary {
|
|
96
121
|
duplicateGlobalIds: number;
|
|
97
122
|
unnamedElements: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stats-aggregation.d.ts","sourceRoot":"","sources":["../../src/commands/stats-aggregation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"stats-aggregation.d.ts","sourceRoot":"","sources":["../../src/commands/stats-aggregation.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
2
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
3
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
/**
|
|
5
|
+
* Pure aggregation helpers for `ifc-lite stats` — extracted so the KPI /
|
|
6
|
+
* WWR / GFA math can be unit tested against a fake `bim` surface instead of
|
|
7
|
+
* only through a real parsed IFC file. `statsCommand` in stats.ts wires
|
|
8
|
+
* these to the SDK's `BimContext`.
|
|
9
|
+
*/
|
|
10
|
+
import { getInheritanceChainAcrossSchemas } from '@ifc-lite/parser';
|
|
11
|
+
import { findPropertyInSets } from '@ifc-lite/query';
|
|
12
|
+
import { firstNonBlank, isBlank } from '../output.js';
|
|
4
13
|
/**
|
|
5
14
|
* Sum a named quantity across every quantity set on every element ref,
|
|
6
15
|
* adding up all matches ("Gross" and "Net" names given as alternatives —
|
|
@@ -29,14 +38,10 @@ export function sumQuantity(bim, refs, quantityNames) {
|
|
|
29
38
|
/** Read a single property's value out of a named property set, or undefined. */
|
|
30
39
|
export function getPropertyValue(bim, ref, psetName, propName) {
|
|
31
40
|
try {
|
|
32
|
-
const psets = bim.properties(ref);
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
if (prop)
|
|
37
|
-
return prop.value;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
41
|
+
const psets = bim.properties(ref).filter((pset) => pset.properties !== undefined);
|
|
42
|
+
const prop = findPropertyInSets(psets, psetName, propName);
|
|
43
|
+
if (prop)
|
|
44
|
+
return prop.value;
|
|
40
45
|
}
|
|
41
46
|
catch {
|
|
42
47
|
// Property not available
|
|
@@ -101,6 +106,22 @@ export function computeGrossFloorArea(bim, storeys, fallbackTotalFloorArea) {
|
|
|
101
106
|
const grossFloorArea = sumQuantity(bim, storeys.map(s => s.ref), ['GrossFloorArea']);
|
|
102
107
|
return grossFloorArea === 0 ? fallbackTotalFloorArea : grossFloorArea;
|
|
103
108
|
}
|
|
109
|
+
/**
|
|
110
|
+
* Distinct, display-ready storey names: blank/whitespace-only Names
|
|
111
|
+
* (`IFCBUILDINGSTOREY('...','',...)`) are dropped, same as a genuinely
|
|
112
|
+
* absent one, rather than surfacing as a blank entry in the storey list.
|
|
113
|
+
*/
|
|
114
|
+
export function computeStoreyNames(storeys) {
|
|
115
|
+
return storeys.map(s => s.name).filter((name) => !isBlank(name));
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* The first `IfcBuilding`'s display name, or `'(unnamed)'` when absent OR
|
|
119
|
+
* blank/whitespace-only — `?? '(unnamed)'` alone only falls through on
|
|
120
|
+
* null/undefined, so a present-but-blank `Name` was returned verbatim.
|
|
121
|
+
*/
|
|
122
|
+
export function computeBuildingName(buildings) {
|
|
123
|
+
return firstNonBlank(buildings[0]?.name) ?? '(unnamed)';
|
|
124
|
+
}
|
|
104
125
|
/**
|
|
105
126
|
* Per-material element count and summed Gross/NetVolume, sorted by element
|
|
106
127
|
* count descending (most common material first).
|
|
@@ -112,16 +133,25 @@ export function computeMaterialSummary(bim, elements, round) {
|
|
|
112
133
|
const mat = bim.materials(e.ref);
|
|
113
134
|
const first = mat?.materials?.[0];
|
|
114
135
|
const firstName = typeof first === 'string' ? first : first?.name;
|
|
115
|
-
|
|
136
|
+
// A whitespace-only name (`IFCMATERIAL(' ',$,$)`) is falsy-but-truthy
|
|
137
|
+
// — a bare `!matName` guard on `firstName ?? mat?.name` let it through
|
|
138
|
+
// as a whitespace-string map key instead of skipping it like a
|
|
139
|
+
// genuinely blank/absent one.
|
|
140
|
+
const matName = firstNonBlank(firstName, mat?.name);
|
|
116
141
|
if (!matName)
|
|
117
142
|
continue;
|
|
118
143
|
materialCounts.set(matName, (materialCounts.get(matName) ?? 0) + 1);
|
|
144
|
+
// One volume per element, same single-slot rule as `aggregateWalls`'s
|
|
145
|
+
// wallVolume: Gross/Net are alternative names for the same slot, and a
|
|
146
|
+
// second IfcElementQuantity set on the same element (e.g. a
|
|
147
|
+
// vendor-specific set alongside the standard Qto_ set) restates the same
|
|
148
|
+
// physical volume rather than adding to it.
|
|
119
149
|
const qsets = bim.quantities(e.ref);
|
|
120
|
-
for (const qset of qsets) {
|
|
150
|
+
qsetLoop: for (const qset of qsets) {
|
|
121
151
|
for (const q of qset.quantities) {
|
|
122
152
|
if (q.name === 'GrossVolume' || q.name === 'NetVolume') {
|
|
123
153
|
materialVolumes.set(matName, (materialVolumes.get(matName) ?? 0) + (Number(q.value) || 0));
|
|
124
|
-
break;
|
|
154
|
+
break qsetLoop;
|
|
125
155
|
}
|
|
126
156
|
}
|
|
127
157
|
}
|
|
@@ -134,6 +164,44 @@ export function computeMaterialSummary(bim, elements, round) {
|
|
|
134
164
|
volume: round(materialVolumes.get(name) ?? 0),
|
|
135
165
|
}));
|
|
136
166
|
}
|
|
167
|
+
/**
|
|
168
|
+
* Supertypes that mark an entity as not a physical building element. Matched
|
|
169
|
+
* against the whole inheritance chain, so every leaf is covered without a hand
|
|
170
|
+
* list: `IfcSpatialElement`/`IfcSpatialStructureElement` subsume the containers
|
|
171
|
+
* and every IFC4X3 facility-part leaf (`IfcExternalSpatialElement`,
|
|
172
|
+
* `IfcMarinePart`, ...), `IfcGroup` subsumes `IfcZone`/`IfcSystem`/
|
|
173
|
+
* `IfcBuiltSystem`/..., `IfcContext` covers `IfcProject`, and `IfcAnnotation`
|
|
174
|
+
* matches itself. Both spatial supertypes are named because IFC2X3 has no
|
|
175
|
+
* `IfcSpatialElement` — `IfcSpatialStructureElement` descends straight from
|
|
176
|
+
* `IfcProduct` there.
|
|
177
|
+
*/
|
|
178
|
+
const NON_ELEMENT_SUPERTYPES = new Set([
|
|
179
|
+
'IfcSpatialElement', 'IfcSpatialStructureElement',
|
|
180
|
+
'IfcGroup', 'IfcContext', 'IfcAnnotation',
|
|
181
|
+
]);
|
|
182
|
+
const nonElementByType = new Map();
|
|
183
|
+
/**
|
|
184
|
+
* Scope an unfiltered `bim.query().toArray()` result down to physical building
|
|
185
|
+
* elements, for the material summary and validation stats. `bim.query()` with
|
|
186
|
+
* no type filter answers with every `IfcObjectDefinition` occurrence, so
|
|
187
|
+
* spatial containers, groupings and drafting annotations would otherwise inflate
|
|
188
|
+
* the material summary and the `unnamedElements`/`duplicateGlobalIds` counts (an
|
|
189
|
+
* `IfcAnnotation` dimension line never carries a Name and is not a defect).
|
|
190
|
+
*
|
|
191
|
+
* Excluding rather than testing for `IfcElement` is deliberate: a positive test
|
|
192
|
+
* would also drop `IfcGrid`, `IfcPort` and the structural-analysis items, which
|
|
193
|
+
* this fix has no opinion about — they stay counted exactly as before.
|
|
194
|
+
*/
|
|
195
|
+
export function filterBuildingElements(entities) {
|
|
196
|
+
return entities.filter(e => {
|
|
197
|
+
let nonElement = nonElementByType.get(e.type);
|
|
198
|
+
if (nonElement === undefined) {
|
|
199
|
+
nonElement = getInheritanceChainAcrossSchemas(e.type).some(a => NON_ELEMENT_SUPERTYPES.has(a));
|
|
200
|
+
nonElementByType.set(e.type, nonElement);
|
|
201
|
+
}
|
|
202
|
+
return !nonElement;
|
|
203
|
+
});
|
|
204
|
+
}
|
|
137
205
|
/**
|
|
138
206
|
* Model-health checks: how many GlobalIds are duplicated (a count of
|
|
139
207
|
* *offending IDs*, not of duplicate rows — three elements sharing one
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stats-aggregation.js","sourceRoot":"","sources":["../../src/commands/stats-aggregation.ts"],"names":[],"mappings":"AAAA;;+DAE+D;
|
|
1
|
+
{"version":3,"file":"stats-aggregation.js","sourceRoot":"","sources":["../../src/commands/stats-aggregation.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;GAKG;AAEH,OAAO,EAAE,gCAAgC,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAqBtD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,WAAW,CAAI,GAAmB,EAAE,IAAS,EAAE,aAAuB;IACpF,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAClC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChC,IAAI,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;oBACnC,KAAK,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAChC,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,gBAAgB,CAAI,GAAmB,EAAE,GAAM,EAAE,QAAgB,EAAE,QAAgB;IACjG,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,MAAM,CACtC,CAAC,IAAI,EAAiF,EAAE,CACtF,IAAI,CAAC,UAAU,KAAK,SAAS,CAChC,CAAC;QACF,MAAM,IAAI,GAAG,kBAAkB,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC3D,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,yBAAyB;IAC3B,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,gGAAgG;AAChG,MAAM,UAAU,kBAAkB,CAAC,KAAc;IAC/C,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,KAAK,CAAC;AAC/D,CAAC;AAQD;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAC5B,GAAoC,EACpC,KAAwB;IAExB,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,IAAI,gBAAgB,GAAG,CAAC,CAAC;IACzB,IAAI,eAAe,GAAG,CAAC,CAAC;IACxB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,MAAM,KAAK,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACpC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChC,IAAI,CAAC,CAAC,IAAI,KAAK,eAAe,IAAI,CAAC,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;oBAC3D,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAClC,CAAC;gBACD,IAAI,CAAC,CAAC,IAAI,KAAK,aAAa,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;oBACvD,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACpC,CAAC;YACH,CAAC;QACH,CAAC;QACD,aAAa,IAAI,QAAQ,CAAC;QAC1B,eAAe,IAAI,UAAU,CAAC;QAE9B,MAAM,UAAU,GAAG,gBAAgB,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,iBAAiB,EAAE,YAAY,CAAC,CAAC;QACjF,IAAI,kBAAkB,CAAC,UAAU,CAAC,EAAE,CAAC;YACnC,gBAAgB,IAAI,QAAQ,CAAC;QAC/B,CAAC;IACH,CAAC;IACD,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,eAAe,EAAE,CAAC;AAC9D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,eAAuB,EAAE,gBAAwB,EAAE,aAAqB;IAC7G,MAAM,OAAO,GAAG,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,aAAa,CAAC;IACxE,OAAO,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,GAAG,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CACnC,GAAmB,EACnB,OAA0B,EAC1B,sBAA8B;IAE9B,MAAM,cAAc,GAAG,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACrF,OAAO,cAAc,KAAK,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,cAAc,CAAC;AACxE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAwC;IACzE,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AACnF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,SAA0C;IAC5E,OAAO,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,WAAW,CAAC;AAC1D,CAAC;AAYD;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CACpC,GAAoB,EACpB,QAA2B,EAC3B,KAA4B;IAE5B,MAAM,eAAe,GAAG,IAAI,GAAG,EAAkB,CAAC;IAClD,MAAM,cAAc,GAAG,IAAI,GAAG,EAAkB,CAAC;IACjD,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACjC,MAAM,KAAK,GAAG,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,SAAS,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC;QAClE,wEAAwE;QACxE,uEAAuE;QACvE,+DAA+D;QAC/D,8BAA8B;QAC9B,MAAM,OAAO,GAAG,aAAa,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QACpD,IAAI,CAAC,OAAO;YAAE,SAAS;QAEvB,cAAc,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAEpE,sEAAsE;QACtE,uEAAuE;QACvE,4DAA4D;QAC5D,yEAAyE;QACzE,4CAA4C;QAC5C,MAAM,KAAK,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACpC,QAAQ,EAAE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACnC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChC,IAAI,CAAC,CAAC,IAAI,KAAK,aAAa,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;oBACvD,eAAe,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAC3F,MAAM,QAAQ,CAAC;gBACjB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,cAAc,CAAC,OAAO,EAAE,CAAC;SACjC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SAC3B,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;QACvB,IAAI;QACJ,KAAK;QACL,MAAM,EAAE,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC9C,CAAC,CAAC,CAAC;AACR,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC;IACrC,mBAAmB,EAAE,4BAA4B;IACjD,UAAU,EAAE,YAAY,EAAE,eAAe;CAC1C,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAmB,CAAC;AAEpD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,sBAAsB,CAA6B,QAAa;IAC9E,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;QACzB,IAAI,UAAU,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7B,UAAU,GAAG,gCAAgC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/F,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAC3C,CAAC;QACD,OAAO,CAAC,UAAU,CAAC;IACrB,CAAC,CAAC,CAAC;AACL,CAAC;AAOD;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAuD;IACvF,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAa,CAAC;IAC5E,MAAM,cAAc,GAAG,IAAI,GAAG,EAAkB,CAAC;IACjD,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;QAC3B,cAAc,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5D,CAAC;IACD,MAAM,kBAAkB,GAAG,CAAC,GAAG,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;IACjG,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;IAC9E,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,CAAC;AACjD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../src/commands/stats.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../src/commands/stats.ts"],"names":[],"mappings":"AAyBA,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuJhE"}
|
package/dist/commands/stats.js
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import { createHeadlessContext } from '../loader.js';
|
|
11
11
|
import { printJson, hasFlag, fatal } from '../output.js';
|
|
12
|
-
import { aggregateWalls, computeWindowWallRatio, computeGrossFloorArea, computeMaterialSummary, computeValidation, sumQuantity, } from './stats-aggregation.js';
|
|
12
|
+
import { aggregateWalls, computeWindowWallRatio, computeGrossFloorArea, computeMaterialSummary, computeValidation, filterBuildingElements, computeStoreyNames, computeBuildingName, sumQuantity, } from './stats-aggregation.js';
|
|
13
13
|
export async function statsCommand(args) {
|
|
14
14
|
const filePath = args.find(a => !a.startsWith('-'));
|
|
15
15
|
if (!filePath)
|
|
@@ -21,10 +21,10 @@ export async function statsCommand(args) {
|
|
|
21
21
|
const entityCount = store.entityCount;
|
|
22
22
|
// Storeys
|
|
23
23
|
const storeys = bim.storeys();
|
|
24
|
-
const storeyNames = storeys
|
|
24
|
+
const storeyNames = computeStoreyNames(storeys);
|
|
25
25
|
// Building name
|
|
26
26
|
const buildings = bim.query().byType('IfcBuilding').toArray();
|
|
27
|
-
const buildingName = buildings
|
|
27
|
+
const buildingName = computeBuildingName(buildings);
|
|
28
28
|
// Element counts by type
|
|
29
29
|
const ELEMENT_TYPES = [
|
|
30
30
|
'IfcWall', 'IfcSlab', 'IfcDoor', 'IfcWindow', 'IfcColumn', 'IfcBeam',
|
|
@@ -61,7 +61,7 @@ export async function statsCommand(args) {
|
|
|
61
61
|
totalVolume += sumQuantity(bim, refs, ['GrossVolume', 'NetVolume']);
|
|
62
62
|
}
|
|
63
63
|
// Material summary with volumes
|
|
64
|
-
const allBuildingElements = bim.query().toArray();
|
|
64
|
+
const allBuildingElements = filterBuildingElements(bim.query().toArray());
|
|
65
65
|
const materialSummary = computeMaterialSummary(bim, allBuildingElements, round);
|
|
66
66
|
// Validation checks
|
|
67
67
|
const { duplicateGlobalIds, unnamedElements } = computeValidation(allBuildingElements);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/commands/stats.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;GAKG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EACL,cAAc,EACd,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACtB,iBAAiB,EACjB,WAAW,GACZ,MAAM,wBAAwB,CAAC;AAEhC,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAc;IAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IACpD,IAAI,CAAC,QAAQ;QAAE,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAElE,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC3C,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,MAAM,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAE7D,mBAAmB;IACnB,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC;IACnC,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;IAEtC,UAAU;IACV,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC;IAC9B,MAAM,WAAW,GAAG,
|
|
1
|
+
{"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/commands/stats.ts"],"names":[],"mappings":"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"}
|
|
@@ -42,14 +42,17 @@ interface DanglingReference {
|
|
|
42
42
|
* out none of the ten at all. `expandTypes` is the same expansion every
|
|
43
43
|
* `byType()` backend uses, so these rules and a `byType('IfcWall')` query
|
|
44
44
|
* cannot disagree about what counts as a wall.
|
|
45
|
+
* Which is why they are computed PER STORE, not once at module load:
|
|
46
|
+
* `expandTypes` reads the model's own `schemaVersion`, and a list frozen at the
|
|
47
|
+
* IFC4 answer counts records on an IFC2X3 or IFC4X3 file that `byType` does not.
|
|
45
48
|
*/
|
|
46
49
|
export declare const NAMED_ELEMENT_BASE_TYPES: readonly string[];
|
|
47
50
|
/** @see NAMED_ELEMENT_BASE_TYPES */
|
|
48
51
|
export declare const QUANTIFIABLE_BASE_TYPES: readonly string[];
|
|
49
|
-
/** `NAMED_ELEMENT_BASE_TYPES` plus every subtype
|
|
50
|
-
export declare const
|
|
51
|
-
/** `QUANTIFIABLE_BASE_TYPES` plus every subtype
|
|
52
|
-
export declare const
|
|
52
|
+
/** `NAMED_ELEMENT_BASE_TYPES` plus every subtype this store's schema declares under one. */
|
|
53
|
+
export declare const namedElementTypes: (schemaVersion: string | undefined) => readonly string[];
|
|
54
|
+
/** `QUANTIFIABLE_BASE_TYPES` plus every subtype this store's schema declares under one. */
|
|
55
|
+
export declare const quantifiableTypes: (schemaVersion: string | undefined) => readonly string[];
|
|
53
56
|
/**
|
|
54
57
|
* Walk every indexed entity record and collect `#N` references whose target
|
|
55
58
|
* does not exist in the file (rule `reference-integrity`). Uses the parsed
|