@ifc-lite/rules 0.4.1 → 0.5.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 +2 -0
- package/dist/engine/rule-engine-requirements.d.ts.map +1 -1
- package/dist/engine/rule-engine-requirements.js +3 -2
- package/dist/engine/rule-engine-requirements.js.map +1 -1
- package/dist/engine/rule-engine-sets.d.ts.map +1 -1
- package/dist/engine/rule-engine-sets.js +2 -1
- package/dist/engine/rule-engine-sets.js.map +1 -1
- package/dist/filter/filter-evaluate-groups.d.ts.map +1 -1
- package/dist/filter/filter-evaluate-groups.js +4 -0
- package/dist/filter/filter-evaluate-groups.js.map +1 -1
- package/dist/filter/filter-evaluate.d.ts +5 -0
- package/dist/filter/filter-evaluate.d.ts.map +1 -1
- package/dist/filter/filter-evaluate.js +38 -56
- package/dist/filter/filter-evaluate.js.map +1 -1
- package/dist/filter/filter-iteration-source.d.ts.map +1 -1
- package/dist/filter/filter-iteration-source.js +3 -1
- package/dist/filter/filter-iteration-source.js.map +1 -1
- package/dist/filter/filter-list-condition.d.ts +57 -0
- package/dist/filter/filter-list-condition.d.ts.map +1 -0
- package/dist/filter/filter-list-condition.js +68 -0
- package/dist/filter/filter-list-condition.js.map +1 -0
- package/dist/filter/filter-match.d.ts +8 -17
- package/dist/filter/filter-match.d.ts.map +1 -1
- package/dist/filter/filter-match.js +61 -118
- package/dist/filter/filter-match.js.map +1 -1
- package/dist/filter/filter-operator-types.d.ts +46 -0
- package/dist/filter/filter-operator-types.d.ts.map +1 -0
- package/dist/filter/filter-operator-types.js +5 -0
- package/dist/filter/filter-operator-types.js.map +1 -0
- package/dist/filter/filter-ops.d.ts +2 -2
- package/dist/filter/filter-ops.d.ts.map +1 -1
- package/dist/filter/filter-ops.js +25 -5
- package/dist/filter/filter-ops.js.map +1 -1
- package/dist/filter/filter-rule-guards.d.ts.map +1 -1
- package/dist/filter/filter-rule-guards.js +31 -3
- package/dist/filter/filter-rule-guards.js.map +1 -1
- package/dist/filter/filter-rules.d.ts +15 -39
- package/dist/filter/filter-rules.d.ts.map +1 -1
- package/dist/filter/filter-rules.js +2 -1
- package/dist/filter/filter-rules.js.map +1 -1
- package/dist/filter/filter-storey.d.ts +18 -0
- package/dist/filter/filter-storey.d.ts.map +1 -0
- package/dist/filter/filter-storey.js +109 -0
- package/dist/filter/filter-storey.js.map +1 -0
- package/dist/filter/legacy-operator-adapters.d.ts +47 -0
- package/dist/filter/legacy-operator-adapters.d.ts.map +1 -0
- package/dist/filter/legacy-operator-adapters.js +74 -0
- package/dist/filter/legacy-operator-adapters.js.map +1 -0
- package/dist/filter/read-measure-subject.d.ts +3 -2
- package/dist/filter/read-measure-subject.d.ts.map +1 -1
- package/dist/filter/read-measure-subject.js +18 -5
- package/dist/filter/read-measure-subject.js.map +1 -1
- package/dist/filter/read-subject.d.ts.map +1 -1
- package/dist/filter/read-subject.js +2 -1
- package/dist/filter/read-subject.js.map +1 -1
- package/dist/filter/subject-read-options.d.ts +17 -1
- package/dist/filter/subject-read-options.d.ts.map +1 -1
- package/dist/filter/subject-read-options.js +9 -1
- package/dist/filter/subject-read-options.js.map +1 -1
- package/dist/ids/rule-to-ids-facets.d.ts.map +1 -1
- package/dist/ids/rule-to-ids-facets.js +5 -0
- package/dist/ids/rule-to-ids-facets.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/rule-set/between-chip.js +1 -1
- package/dist/rule-set/between-chip.js.map +1 -1
- package/dist/rule-set/requirement-text.d.ts.map +1 -1
- package/dist/rule-set/requirement-text.js +1 -0
- package/dist/rule-set/requirement-text.js.map +1 -1
- package/dist/rule-set/rule-set-io-requirement.d.ts.map +1 -1
- package/dist/rule-set/rule-set-io-requirement.js +2 -0
- package/dist/rule-set/rule-set-io-requirement.js.map +1 -1
- package/dist/rule-set/rule-set-io-subject.d.ts.map +1 -1
- package/dist/rule-set/rule-set-io-subject.js +5 -0
- package/dist/rule-set/rule-set-io-subject.js.map +1 -1
- package/package.json +9 -9
|
@@ -11,7 +11,21 @@
|
|
|
11
11
|
* each function takes an operator, a candidate and the rule's operand, which
|
|
12
12
|
* is what makes them testable without a model.
|
|
13
13
|
*/
|
|
14
|
-
import { compileNameMatcher, isNamePattern } from '@ifc-lite/
|
|
14
|
+
import { compileNameMatcher, isNamePattern } from '@ifc-lite/regex-guard';
|
|
15
|
+
function booleanLike(value, includeUnknown) {
|
|
16
|
+
return includeUnknown ? /^(?:true|false|unknown)$/i.test(value) : /^(?:true|false)$/i.test(value);
|
|
17
|
+
}
|
|
18
|
+
function valueEquals(left, right, opts) {
|
|
19
|
+
if ((opts?.caseMode === 'ifcBoolean' || opts?.caseMode === 'lensBoolean')
|
|
20
|
+
&& booleanLike(left, opts.caseMode === 'ifcBoolean')
|
|
21
|
+
&& booleanLike(right, opts.caseMode === 'ifcBoolean')) {
|
|
22
|
+
return left.toLowerCase() === right.toLowerCase();
|
|
23
|
+
}
|
|
24
|
+
if (opts?.caseMode === 'exact' || opts?.caseMode === 'ifcBoolean' || opts?.caseMode === 'lensBoolean') {
|
|
25
|
+
return left === right;
|
|
26
|
+
}
|
|
27
|
+
return fold(left, opts?.caseSensitive) === fold(right, opts?.caseSensitive);
|
|
28
|
+
}
|
|
15
29
|
/**
|
|
16
30
|
* Fold a candidate that may be undefined at runtime — crash-safety only
|
|
17
31
|
* (#1195) — to lower-case UNLESS `caseSensitive` is `true`. Does NOT decide
|
|
@@ -181,18 +195,24 @@ export function valueOpMatches(op, psetVal, ruleVal, valueKind, opts) {
|
|
|
181
195
|
switch (op) {
|
|
182
196
|
case 'isSet': return (psetVal ?? '').length > 0;
|
|
183
197
|
case 'isNotSet': return (psetVal ?? '').length === 0;
|
|
184
|
-
case '
|
|
185
|
-
case '
|
|
198
|
+
case 'isNonEmpty': return (psetVal ?? '').length > 0;
|
|
199
|
+
case 'isNull': return false;
|
|
200
|
+
case 'isNotNull': return true;
|
|
201
|
+
case 'eq': return valueEquals(psetVal, ruleVal, opts);
|
|
202
|
+
case 'ne': return !valueEquals(psetVal, ruleVal, opts);
|
|
186
203
|
case 'contains': return fold(psetVal, opts?.caseSensitive).includes(fold(ruleVal, opts?.caseSensitive));
|
|
187
204
|
case 'notContains': return !fold(psetVal, opts?.caseSensitive).includes(fold(ruleVal, opts?.caseSensitive));
|
|
205
|
+
case 'startsWith': return fold(psetVal, opts?.caseSensitive).startsWith(fold(ruleVal, opts?.caseSensitive));
|
|
206
|
+
case 'endsWith': return fold(psetVal, opts?.caseSensitive).endsWith(fold(ruleVal, opts?.caseSensitive));
|
|
188
207
|
case 'matches': return regexOpMatches(psetVal, ruleVal, valueKind);
|
|
189
208
|
case 'notMatches': return !regexOpMatches(psetVal, ruleVal, valueKind);
|
|
190
209
|
case 'gt':
|
|
191
210
|
case 'gte':
|
|
192
211
|
case 'lt':
|
|
193
212
|
case 'lte': {
|
|
194
|
-
const
|
|
195
|
-
const
|
|
213
|
+
const parse = opts?.numericMode === 'strict' ? Number : Number.parseFloat;
|
|
214
|
+
const cv = parse(psetVal);
|
|
215
|
+
const rv = parse(ruleVal);
|
|
196
216
|
if (!Number.isFinite(cv) || !Number.isFinite(rv))
|
|
197
217
|
return false;
|
|
198
218
|
return numericOpMatches(op, cv, rv, opts);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter-ops.js","sourceRoot":"","sources":["../../src/filter/filter-ops.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;;;;GASG;AAEH,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"filter-ops.js","sourceRoot":"","sources":["../../src/filter/filter-ops.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter-rule-guards.d.ts","sourceRoot":"","sources":["../../src/filter/filter-rule-guards.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"filter-rule-guards.d.ts","sourceRoot":"","sources":["../../src/filter/filter-rule-guards.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAoB,UAAU,EAAqB,MAAM,mBAAmB,CAAC;AAezF,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,UAAU,CAwDhE;AAsBD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,EAAE,CAG3D"}
|
|
@@ -13,11 +13,14 @@
|
|
|
13
13
|
*/
|
|
14
14
|
import { isModelTagOp } from './model-tag.js';
|
|
15
15
|
import { isModelFact } from './filter-model-fact.js';
|
|
16
|
+
import { isListConditionRule } from './filter-list-condition.js';
|
|
17
|
+
import { isMemberPath } from './subject-read-options.js';
|
|
16
18
|
const STRING_OPS = new Set([
|
|
17
19
|
'eq', 'ne', 'contains', 'notContains', 'startsWith', 'matches', 'notMatches',
|
|
18
20
|
]);
|
|
19
21
|
const VALUE_OPS = new Set([
|
|
20
|
-
'eq', 'ne', 'gt', 'gte', 'lt', 'lte', 'contains', 'notContains', '
|
|
22
|
+
'eq', 'ne', 'gt', 'gte', 'lt', 'lte', 'contains', 'notContains', 'startsWith', 'endsWith',
|
|
23
|
+
'matches', 'notMatches', 'isSet', 'isNotSet', 'isNonEmpty', 'isNull', 'isNotNull',
|
|
21
24
|
]);
|
|
22
25
|
const CLASSIFICATION_OPS = new Set([
|
|
23
26
|
'eq', 'ne', 'contains', 'notContains', 'matches', 'notMatches', 'isSet', 'isNotSet',
|
|
@@ -50,6 +53,17 @@ export function isFilterRule(value) {
|
|
|
50
53
|
}
|
|
51
54
|
if ((kind === 'property' || kind === 'quantity') && !validReadOptions(value))
|
|
52
55
|
return false;
|
|
56
|
+
if (kind === 'property') {
|
|
57
|
+
const r = value;
|
|
58
|
+
if (r.nameCaseMode !== undefined && r.nameCaseMode !== 'exact')
|
|
59
|
+
return false;
|
|
60
|
+
if (r.legacyListFirst !== undefined && r.legacyListFirst !== true)
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
if ((kind === 'property' || kind === 'attribute') && !validComparison(value))
|
|
64
|
+
return false;
|
|
65
|
+
if (kind === 'listCondition')
|
|
66
|
+
return isListConditionRule(value);
|
|
53
67
|
if (kind === 'modelFact') {
|
|
54
68
|
const r = value;
|
|
55
69
|
return isModelFact(r.fact) && VALUE_OPS.has(r.op) && typeof r.value === 'string';
|
|
@@ -68,11 +82,25 @@ export function isFilterRule(value) {
|
|
|
68
82
|
kind === 'elevation' ||
|
|
69
83
|
kind === 'type');
|
|
70
84
|
}
|
|
71
|
-
/** `SubjectReadOptions` fields, when present, must hold a value the engine
|
|
85
|
+
/** `SubjectReadOptions` fields, when present, must hold a value the engine
|
|
86
|
+
* knows; `memberPath` only on a `property` rule. */
|
|
72
87
|
function validReadOptions(value) {
|
|
73
88
|
const r = value;
|
|
74
89
|
return (r.valueUnit === undefined || r.valueUnit === 'si')
|
|
75
|
-
&& (r.inherit === undefined || r.inherit === 'type' || r.inherit === 'aggregation')
|
|
90
|
+
&& (r.inherit === undefined || r.inherit === 'type' || r.inherit === 'aggregation')
|
|
91
|
+
&& (r.memberPath === undefined || (r.kind === 'property' && isMemberPath(r.memberPath)));
|
|
92
|
+
}
|
|
93
|
+
function validComparison(value) {
|
|
94
|
+
const options = value.comparison;
|
|
95
|
+
if (options === undefined)
|
|
96
|
+
return true;
|
|
97
|
+
if (options === null || typeof options !== 'object')
|
|
98
|
+
return false;
|
|
99
|
+
const o = options;
|
|
100
|
+
return (o.caseMode === undefined || o.caseMode === 'fold' || o.caseMode === 'exact'
|
|
101
|
+
|| o.caseMode === 'lensBoolean' || o.caseMode === 'ifcBoolean')
|
|
102
|
+
&& (o.numericMode === undefined || o.numericMode === 'prefix' || o.numericMode === 'strict')
|
|
103
|
+
&& o.typeMode === undefined && o.operandType === undefined;
|
|
76
104
|
}
|
|
77
105
|
export function parseFilterRules(raw) {
|
|
78
106
|
if (!Array.isArray(raw))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter-rule-guards.js","sourceRoot":"","sources":["../../src/filter/filter-rule-guards.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;;;;GASG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"filter-rule-guards.js","sourceRoot":"","sources":["../../src/filter/filter-rule-guards.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,44 +10,11 @@
|
|
|
10
10
|
*/
|
|
11
11
|
import { type ModelTagOp } from './model-tag.js';
|
|
12
12
|
import { groupRule, type GroupRule } from './filter-group-rule.js';
|
|
13
|
-
import type { SubjectReadOptions } from './subject-read-options.js';
|
|
13
|
+
import type { PropertyReadOptions, SubjectReadOptions } from './subject-read-options.js';
|
|
14
14
|
import { modelFactRule, type ModelFactRule } from './filter-model-fact.js';
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
export type StringOp = 'eq' | 'ne' | 'contains' | 'notContains' | 'startsWith' | 'matches' | 'notMatches';
|
|
19
|
-
/** Numeric comparisons (Quantity rule). */
|
|
20
|
-
export type NumericOp = 'eq' | 'ne' | 'gt' | 'gte' | 'lt' | 'lte';
|
|
21
|
-
/** Mixed string+numeric+presence ops for Property values. */
|
|
22
|
-
export type ValueOp = 'eq' | 'ne' | 'gt' | 'gte' | 'lt' | 'lte' | 'contains' | 'notContains' | 'matches' | 'notMatches' | 'isSet' | 'isNotSet';
|
|
23
|
-
/** Classification value+presence ops. A classification is matched against
|
|
24
|
-
* its code / name string, so this is the StringOp comparison subset plus
|
|
25
|
-
* presence — numeric ops don't apply. */
|
|
26
|
-
export type ClassificationOp = 'eq' | 'ne' | 'contains' | 'notContains' | 'matches' | 'notMatches' | 'isSet' | 'isNotSet';
|
|
27
|
-
/** Top-level rule combinator. */
|
|
28
|
-
export type Combinator = 'AND' | 'OR';
|
|
29
|
-
/**
|
|
30
|
-
* How a rule reads one of its strings — the producer saying so, because the
|
|
31
|
-
* string itself cannot.
|
|
32
|
-
*
|
|
33
|
-
* `'regex'` is a regular-expression SOURCE: the WHOLE string is the pattern,
|
|
34
|
-
* slashes included. `'literal'` is exact text that is never a pattern, however
|
|
35
|
-
* it happens to be spelled. Absent means free text a human typed into a chip
|
|
36
|
-
* field, which keeps the Lists-panel convention (#1591): a `/body/flags`
|
|
37
|
-
* literal is a pattern, anything else is plain text.
|
|
38
|
-
*
|
|
39
|
-
* Guessing this back out of the text is the #4091 defect class — matched the
|
|
40
|
-
* wrong thing, said nothing — reappearing at the adapter seam. The selector
|
|
41
|
-
* grammar knows which it parsed: quoting is its ONLY escape hatch for a
|
|
42
|
-
* literal name, so `"/Wall/".FireRating` is the plain name `/Wall/`, and
|
|
43
|
-
* `Name=/\/tmp\//` is the source `/tmp/`. Sniffed for slashes, the first
|
|
44
|
-
* matches every `…Wall…` set and the second matches `tmp`.
|
|
45
|
-
*
|
|
46
|
-
* A property-set or property NAME has no operator beside it, so both kinds
|
|
47
|
-
* have to be declared. A VALUE's op already says whether it is a pattern, so
|
|
48
|
-
* only `'regex'` is ever recorded there.
|
|
49
|
-
*/
|
|
50
|
-
export type TextKind = 'literal' | 'regex';
|
|
15
|
+
import { listConditionRule, type ListConditionRule } from './filter-list-condition.js';
|
|
16
|
+
import type { SetOp, StringOp, NumericOp, ValueOp, ClassificationOp, Combinator, ValueComparison, TextKind } from './filter-operator-types.js';
|
|
17
|
+
export type { SetOp, StringOp, NumericOp, ValueOp, ClassificationOp, Combinator, ValueComparison, TextKind, } from './filter-operator-types.js';
|
|
51
18
|
export interface StoreyRule {
|
|
52
19
|
kind: 'storey';
|
|
53
20
|
values: string[];
|
|
@@ -135,10 +102,16 @@ export interface AttributeRule {
|
|
|
135
102
|
value: string;
|
|
136
103
|
/** How `value` reads. Only consulted by the `matches` / `notMatches` ops. */
|
|
137
104
|
valueKind?: TextKind;
|
|
105
|
+
comparison?: ValueComparison;
|
|
138
106
|
}
|
|
139
|
-
export interface PropertyRule extends
|
|
107
|
+
export interface PropertyRule extends PropertyReadOptions {
|
|
140
108
|
kind: 'property';
|
|
141
109
|
setName: string;
|
|
110
|
+
/** Preserve exact IFC name matching when decoding older saved List conditions. */
|
|
111
|
+
nameCaseMode?: 'exact';
|
|
112
|
+
/** Saved v1 Lists read the first matching property, even when another
|
|
113
|
+
* same-named property set follows it. Other Rules keep any/none semantics. */
|
|
114
|
+
legacyListFirst?: true;
|
|
142
115
|
/** How `setName` reads — a regex set name is what lets one rule reach both
|
|
143
116
|
* `Pset_WallCommon` and `Pset_SlabCommon`. */
|
|
144
117
|
setNameKind?: TextKind;
|
|
@@ -150,6 +123,7 @@ export interface PropertyRule extends SubjectReadOptions {
|
|
|
150
123
|
value: string;
|
|
151
124
|
/** How `value` reads. Only consulted by the `matches` / `notMatches` ops. */
|
|
152
125
|
valueKind?: TextKind;
|
|
126
|
+
comparison?: ValueComparison;
|
|
153
127
|
}
|
|
154
128
|
export interface QuantityRule extends SubjectReadOptions {
|
|
155
129
|
kind: 'quantity';
|
|
@@ -222,7 +196,7 @@ export interface ParentRule {
|
|
|
222
196
|
/** How `value` reads. Only consulted by the `matches` / `notMatches` ops. */
|
|
223
197
|
valueKind?: TextKind;
|
|
224
198
|
}
|
|
225
|
-
export type FilterRule = ModelRule | ModelTagRule | StoreyRule | IfcTypeRule | PredefinedTypeRule | NameRule | GlobalIdRule | AttributeRule | PropertyRule | QuantityRule | MaterialRule | ClassificationRule | ElevationRule | TypeNameRule | ParentRule | GroupRule | ModelFactRule;
|
|
199
|
+
export type FilterRule = ModelRule | ModelTagRule | StoreyRule | IfcTypeRule | PredefinedTypeRule | NameRule | GlobalIdRule | AttributeRule | PropertyRule | QuantityRule | MaterialRule | ClassificationRule | ElevationRule | TypeNameRule | ParentRule | GroupRule | ModelFactRule | ListConditionRule;
|
|
226
200
|
/** Combine an array of per-rule booleans according to AND/OR semantics. */
|
|
227
201
|
export declare function combineRuleResults(combinator: Combinator, results: readonly boolean[]): boolean;
|
|
228
202
|
/** Dedupe-merge two `StoreyRule.refs` lists by (modelId, expressId), used
|
|
@@ -270,9 +244,11 @@ export declare const Rule: {
|
|
|
270
244
|
readonly parent: (op: StringOp, value: string, valueKind?: TextKind) => ParentRule;
|
|
271
245
|
readonly group: typeof groupRule;
|
|
272
246
|
readonly modelFact: typeof modelFactRule;
|
|
247
|
+
readonly listCondition: typeof listConditionRule;
|
|
273
248
|
};
|
|
274
249
|
export { isFilterRule, parseFilterRules } from './filter-rule-guards.js';
|
|
275
250
|
export type { GroupRule } from './filter-group-rule.js';
|
|
276
251
|
export type { ModelFactRule } from './filter-model-fact.js';
|
|
252
|
+
export type { ListConditionRule } from './filter-list-condition.js';
|
|
277
253
|
export { activeGroupRules } from './filter-groups.js';
|
|
278
254
|
//# sourceMappingURL=filter-rules.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter-rules.d.ts","sourceRoot":"","sources":["../../src/filter/filter-rules.ts"],"names":[],"mappings":"AAIA;;;;;;;;;GASG;AAEH,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"filter-rules.d.ts","sourceRoot":"","sources":["../../src/filter/filter-rules.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
4
|
import { groupRule } from './filter-group-rule.js';
|
|
5
5
|
import { modelFactRule } from './filter-model-fact.js';
|
|
6
|
+
import { listConditionRule } from './filter-list-condition.js';
|
|
6
7
|
// ── Combinator helpers ────────────────────────────────────────────────────────
|
|
7
8
|
/** Combine an array of per-rule booleans according to AND/OR semantics. */
|
|
8
9
|
export function combineRuleResults(combinator, results) {
|
|
@@ -59,7 +60,7 @@ export const Rule = {
|
|
|
59
60
|
elevation: (op, value) => ({ kind: 'elevation', op, value }),
|
|
60
61
|
typeName: (op, value, valueKind) => ({ kind: 'type', op, value, ...(valueKind ? { valueKind } : {}) }),
|
|
61
62
|
parent: (op, value, valueKind) => ({ kind: 'parent', op, value, ...(valueKind ? { valueKind } : {}) }),
|
|
62
|
-
group: groupRule, modelFact: modelFactRule,
|
|
63
|
+
group: groupRule, modelFact: modelFactRule, listCondition: listConditionRule,
|
|
63
64
|
};
|
|
64
65
|
// ── JSON guards (`filter-rule-guards.ts`, re-exported for existing imports) ─
|
|
65
66
|
export { isFilterRule, parseFilterRules } from './filter-rule-guards.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter-rules.js","sourceRoot":"","sources":["../../src/filter/filter-rules.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAc/D,OAAO,EAAE,SAAS,EAAkB,MAAM,wBAAwB,CAAC;AAEnE,OAAO,EAAE,aAAa,EAAsB,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"filter-rules.js","sourceRoot":"","sources":["../../src/filter/filter-rules.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/** Shared storey lookup for per-entity rules and the bulk iteration prefilter. */
|
|
2
|
+
import type { IfcDataStore } from '@ifc-lite/parser';
|
|
3
|
+
import type { StoreyRule } from './filter-rules.js';
|
|
4
|
+
export declare function defaultStoreyName(store: IfcDataStore, expressId: number): string;
|
|
5
|
+
/** Does `expressId` (in `modelId`) sit in a storey ref'd by `rule.refs`?
|
|
6
|
+
* `IfcBuildingStorey.Name` isn't unique, so once a `StoreyRule` carries
|
|
7
|
+
* an exact (modelId, expressId) ref (mirrored from a HierarchyPanel
|
|
8
|
+
* click), matching bypasses Name entirely. Reaches through a containing
|
|
9
|
+
* space via {@link storeyIdOf}, same as the Name-matched path. */
|
|
10
|
+
export declare function storeyMatchesRefs(store: IfcDataStore, expressId: number, modelId: string, rule: StoreyRule): boolean;
|
|
11
|
+
/** Index-prefilter twin of {@link storeyMatchesRefs}/Name matching: the
|
|
12
|
+
* bucket of elements a `storey op:'in'` rule narrows to for `modelId`.
|
|
13
|
+
* Includes each matched storey's directly-contained elements AND every
|
|
14
|
+
* element `bySpace` lists for a space belonging to that storey, so this
|
|
15
|
+
* prefilter can never exclude a candidate the (also widened) per-entity
|
|
16
|
+
* check in `filter-evaluate.ts` would go on to match. */
|
|
17
|
+
export declare function unionByStorey(store: IfcDataStore, rule: StoreyRule, modelId: string | undefined): number[] | null;
|
|
18
|
+
//# sourceMappingURL=filter-storey.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filter-storey.d.ts","sourceRoot":"","sources":["../../src/filter/filter-storey.ts"],"names":[],"mappings":"AAIA,kFAAkF;AAClF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAgDpD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAMhF;AAED;;;;mEAImE;AACnE,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAIpH;AAED;;;;;0DAK0D;AAC1D,wBAAgB,aAAa,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,EAAE,GAAG,IAAI,CAsBjH"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
// ── Storey lookup fallback ────────────────────────────────────────────────────
|
|
5
|
+
/**
|
|
6
|
+
* Storey id an element belongs to: its own direct containment
|
|
7
|
+
* (`elementToStorey`, set for an element the storey directly contains plus
|
|
8
|
+
* its `IfcRelAggregates`-aggregated parts) OR — one hop through a
|
|
9
|
+
* containing `IfcSpace`/`IfcSpatialZone` — the storey THAT space belongs
|
|
10
|
+
* to. A space is itself mapped to its storey in `elementToStorey`
|
|
11
|
+
* (`SpatialHierarchyBuilder` walks a storey's own spatial children), so
|
|
12
|
+
* this is a composition of two maps that already exist plus
|
|
13
|
+
* `getContainingSpace` (`@ifc-lite/data`'s `spatialLookups`), not a new
|
|
14
|
+
* traversal. The single home for "which storey" so the per-entity
|
|
15
|
+
* evaluator (`defaultStoreyName`/`storeyMatchesRefs`) and the bulk index
|
|
16
|
+
* prefilter (`unionByStorey`) cannot answer it two different ways.
|
|
17
|
+
*
|
|
18
|
+
* Reaches exactly one level down from the storey: an element inside a
|
|
19
|
+
* space nested inside another space (rather than directly under the
|
|
20
|
+
* storey) is not resolved — see `docs/guide/selector-syntax.md`.
|
|
21
|
+
*/
|
|
22
|
+
function storeyIdOf(hierarchy, expressId) {
|
|
23
|
+
const direct = hierarchy.elementToStorey.get(expressId);
|
|
24
|
+
if (direct !== undefined)
|
|
25
|
+
return direct;
|
|
26
|
+
// `getContainingSpace` is part of the `spatialLookups()` contract every
|
|
27
|
+
// real hierarchy carries, but several tests in this suite build a
|
|
28
|
+
// hand-rolled partial `spatialHierarchy` mock (`byStorey`/`elementToStorey`
|
|
29
|
+
// only) to exercise the ref/name-matching paths in isolation — guard
|
|
30
|
+
// rather than assume every field is present.
|
|
31
|
+
const spaceId = hierarchy.getContainingSpace?.(expressId);
|
|
32
|
+
if (spaceId == null)
|
|
33
|
+
return undefined;
|
|
34
|
+
return hierarchy.elementToStorey.get(spaceId);
|
|
35
|
+
}
|
|
36
|
+
/** Every element `bySpace` lists for a space belonging to `storeyId` — the
|
|
37
|
+
* bulk-prefilter twin of {@link storeyIdOf}'s one-hop space widening.
|
|
38
|
+
* `bySpace` is absent on the same partial test mocks {@link storeyIdOf}
|
|
39
|
+
* guards against. */
|
|
40
|
+
function spaceElementsOfStorey(hierarchy, storeyId) {
|
|
41
|
+
const out = [];
|
|
42
|
+
if (!hierarchy.bySpace)
|
|
43
|
+
return out;
|
|
44
|
+
for (const [spaceId, elements] of hierarchy.bySpace) {
|
|
45
|
+
if (hierarchy.elementToStorey.get(spaceId) !== storeyId)
|
|
46
|
+
continue;
|
|
47
|
+
for (const id of elements)
|
|
48
|
+
out.push(id);
|
|
49
|
+
}
|
|
50
|
+
return out;
|
|
51
|
+
}
|
|
52
|
+
export function defaultStoreyName(store, expressId) {
|
|
53
|
+
const hierarchy = store.spatialHierarchy;
|
|
54
|
+
if (!hierarchy)
|
|
55
|
+
return '';
|
|
56
|
+
const storeyId = storeyIdOf(hierarchy, expressId);
|
|
57
|
+
if (!storeyId)
|
|
58
|
+
return '';
|
|
59
|
+
return store.entities.getName(storeyId);
|
|
60
|
+
}
|
|
61
|
+
/** Does `expressId` (in `modelId`) sit in a storey ref'd by `rule.refs`?
|
|
62
|
+
* `IfcBuildingStorey.Name` isn't unique, so once a `StoreyRule` carries
|
|
63
|
+
* an exact (modelId, expressId) ref (mirrored from a HierarchyPanel
|
|
64
|
+
* click), matching bypasses Name entirely. Reaches through a containing
|
|
65
|
+
* space via {@link storeyIdOf}, same as the Name-matched path. */
|
|
66
|
+
export function storeyMatchesRefs(store, expressId, modelId, rule) {
|
|
67
|
+
const hierarchy = store.spatialHierarchy;
|
|
68
|
+
const storeyId = hierarchy ? storeyIdOf(hierarchy, expressId) : undefined;
|
|
69
|
+
return storeyId != null && !!rule.refs?.some((r) => r.modelId === modelId && r.expressId === storeyId);
|
|
70
|
+
}
|
|
71
|
+
/** Index-prefilter twin of {@link storeyMatchesRefs}/Name matching: the
|
|
72
|
+
* bucket of elements a `storey op:'in'` rule narrows to for `modelId`.
|
|
73
|
+
* Includes each matched storey's directly-contained elements AND every
|
|
74
|
+
* element `bySpace` lists for a space belonging to that storey, so this
|
|
75
|
+
* prefilter can never exclude a candidate the (also widened) per-entity
|
|
76
|
+
* check in `filter-evaluate.ts` would go on to match. */
|
|
77
|
+
export function unionByStorey(store, rule, modelId) {
|
|
78
|
+
const hierarchy = store.spatialHierarchy;
|
|
79
|
+
if (!hierarchy)
|
|
80
|
+
return null;
|
|
81
|
+
const out = [];
|
|
82
|
+
if (rule.refs) {
|
|
83
|
+
for (const ref of rule.refs) {
|
|
84
|
+
if (ref.modelId !== modelId)
|
|
85
|
+
continue;
|
|
86
|
+
const elements = hierarchy.byStorey.get(ref.expressId);
|
|
87
|
+
if (elements)
|
|
88
|
+
for (const id of elements)
|
|
89
|
+
out.push(id);
|
|
90
|
+
for (const id of spaceElementsOfStorey(hierarchy, ref.expressId))
|
|
91
|
+
out.push(id);
|
|
92
|
+
}
|
|
93
|
+
return out.length > 0 ? out : null;
|
|
94
|
+
}
|
|
95
|
+
const wanted = new Set(rule.values.map((n) => n.toLowerCase()));
|
|
96
|
+
for (const storeyId of hierarchy.byStorey.keys()) {
|
|
97
|
+
const name = store.entities.getName(storeyId);
|
|
98
|
+
if (!wanted.has(name.toLowerCase()))
|
|
99
|
+
continue;
|
|
100
|
+
const elements = hierarchy.byStorey.get(storeyId);
|
|
101
|
+
if (elements)
|
|
102
|
+
for (const id of elements)
|
|
103
|
+
out.push(id);
|
|
104
|
+
for (const id of spaceElementsOfStorey(hierarchy, storeyId))
|
|
105
|
+
out.push(id);
|
|
106
|
+
}
|
|
107
|
+
return out.length > 0 ? out : null;
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=filter-storey.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filter-storey.js","sourceRoot":"","sources":["../../src/filter/filter-storey.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/** Pure, total operator conversion for persisted Lens and List filters (#5892).
|
|
2
|
+
* Callers supply the target field as a rule template; the adapter changes only
|
|
3
|
+
* the comparison, so a missing field or unknown saved operator is never lost
|
|
4
|
+
* through an unrelated source conversion. */
|
|
5
|
+
import type { AttributeRule, PropertyRule } from './filter-rules.js';
|
|
6
|
+
type ValueRule = AttributeRule | PropertyRule;
|
|
7
|
+
type Vocabulary = 'lens' | 'lists';
|
|
8
|
+
export type LegacyOperatorResult<T> = {
|
|
9
|
+
status: 'readable';
|
|
10
|
+
value: T;
|
|
11
|
+
} | {
|
|
12
|
+
status: 'unreadable';
|
|
13
|
+
vocabulary: Vocabulary;
|
|
14
|
+
operator: string;
|
|
15
|
+
};
|
|
16
|
+
declare const LENS_OPS: {
|
|
17
|
+
readonly equals: "eq";
|
|
18
|
+
readonly contains: "contains";
|
|
19
|
+
readonly exists: "isNotNull";
|
|
20
|
+
readonly ne: "ne";
|
|
21
|
+
readonly gt: "gt";
|
|
22
|
+
readonly gte: "gte";
|
|
23
|
+
readonly lt: "lt";
|
|
24
|
+
readonly lte: "lte";
|
|
25
|
+
};
|
|
26
|
+
/** Operators stored in v1 Lens JSON. Kept private so rules has no Lens package edge. */
|
|
27
|
+
type PersistedLensOperator = keyof typeof LENS_OPS;
|
|
28
|
+
declare const LIST_OPS: {
|
|
29
|
+
readonly equals: "eq";
|
|
30
|
+
readonly notEquals: "ne";
|
|
31
|
+
readonly contains: "contains";
|
|
32
|
+
readonly exists: "isNonEmpty";
|
|
33
|
+
readonly gt: "gt";
|
|
34
|
+
readonly gte: "gte";
|
|
35
|
+
readonly lt: "lt";
|
|
36
|
+
readonly lte: "lte";
|
|
37
|
+
};
|
|
38
|
+
/** Operators stored in v1 List JSON. Kept private so Lists can depend on Rules. */
|
|
39
|
+
type PersistedListOperator = keyof typeof LIST_OPS;
|
|
40
|
+
/** Lens equality is exact for text, but folds case for true/false only. */
|
|
41
|
+
export declare function legacyLensOperatorToFilterRule<T extends ValueRule>(operator: string, template: T): LegacyOperatorResult<T>;
|
|
42
|
+
/** Lists preserve case for text except IFC boolean/logical values; Number() parses comparisons. */
|
|
43
|
+
export declare function legacyListOperatorToFilterRule<T extends ValueRule>(operator: string, template: T): LegacyOperatorResult<T>;
|
|
44
|
+
export declare function filterRuleToLegacyLensOperator(rule: ValueRule): LegacyOperatorResult<PersistedLensOperator>;
|
|
45
|
+
export declare function filterRuleToLegacyListOperator(rule: ValueRule): LegacyOperatorResult<PersistedListOperator>;
|
|
46
|
+
export {};
|
|
47
|
+
//# sourceMappingURL=legacy-operator-adapters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"legacy-operator-adapters.d.ts","sourceRoot":"","sources":["../../src/filter/legacy-operator-adapters.ts"],"names":[],"mappings":"AAIA;;;6CAG6C;AAC7C,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAA4B,MAAM,mBAAmB,CAAC;AAE/F,KAAK,SAAS,GAAG,aAAa,GAAG,YAAY,CAAC;AAC9C,KAAK,UAAU,GAAG,MAAM,GAAG,OAAO,CAAC;AAEnC,MAAM,MAAM,oBAAoB,CAAC,CAAC,IAC9B;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,GAChC;IAAE,MAAM,EAAE,YAAY,CAAC;IAAC,UAAU,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvE,QAAA,MAAM,QAAQ;;;;;;;;;CAG8B,CAAC;AAE7C,wFAAwF;AACxF,KAAK,qBAAqB,GAAG,MAAM,OAAO,QAAQ,CAAC;AAEnD,QAAA,MAAM,QAAQ;;;;;;;;;CAG8B,CAAC;AAE7C,mFAAmF;AACnF,KAAK,qBAAqB,GAAG,MAAM,OAAO,QAAQ,CAAC;AAQnD,2EAA2E;AAC3E,wBAAgB,8BAA8B,CAAC,CAAC,SAAS,SAAS,EAChE,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,CAAC,GACV,oBAAoB,CAAC,CAAC,CAAC,CAYzB;AAED,mGAAmG;AACnG,wBAAgB,8BAA8B,CAAC,CAAC,SAAS,SAAS,EAChE,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,CAAC,GACV,oBAAoB,CAAC,CAAC,CAAC,CAWzB;AAoBD,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,SAAS,GAAG,oBAAoB,CAAC,qBAAqB,CAAC,CAU3G;AAED,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,SAAS,GAAG,oBAAoB,CAAC,qBAAqB,CAAC,CAM3G"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
const LENS_OPS = {
|
|
5
|
+
equals: 'eq', contains: 'contains', exists: 'isNotNull', ne: 'ne',
|
|
6
|
+
gt: 'gt', gte: 'gte', lt: 'lt', lte: 'lte',
|
|
7
|
+
};
|
|
8
|
+
const LIST_OPS = {
|
|
9
|
+
equals: 'eq', notEquals: 'ne', contains: 'contains', exists: 'isNonEmpty',
|
|
10
|
+
gt: 'gt', gte: 'gte', lt: 'lt', lte: 'lte',
|
|
11
|
+
};
|
|
12
|
+
function mapped(vocabulary, operator, table) {
|
|
13
|
+
return Object.hasOwn(table, operator)
|
|
14
|
+
? { status: 'readable', value: table[operator] }
|
|
15
|
+
: { status: 'unreadable', vocabulary, operator };
|
|
16
|
+
}
|
|
17
|
+
/** Lens equality is exact for text, but folds case for true/false only. */
|
|
18
|
+
export function legacyLensOperatorToFilterRule(operator, template) {
|
|
19
|
+
const result = mapped('lens', operator, LENS_OPS);
|
|
20
|
+
if (result.status === 'unreadable')
|
|
21
|
+
return result;
|
|
22
|
+
const op = operator === 'exists' && template.kind === 'attribute' ? 'isNonEmpty' : result.value;
|
|
23
|
+
return { status: 'readable', value: {
|
|
24
|
+
...template,
|
|
25
|
+
op,
|
|
26
|
+
comparison: {
|
|
27
|
+
caseMode: operator === 'equals' ? 'lensBoolean' : 'fold',
|
|
28
|
+
numericMode: 'prefix',
|
|
29
|
+
},
|
|
30
|
+
} };
|
|
31
|
+
}
|
|
32
|
+
/** Lists preserve case for text except IFC boolean/logical values; Number() parses comparisons. */
|
|
33
|
+
export function legacyListOperatorToFilterRule(operator, template) {
|
|
34
|
+
const result = mapped('lists', operator, LIST_OPS);
|
|
35
|
+
if (result.status === 'unreadable')
|
|
36
|
+
return result;
|
|
37
|
+
return { status: 'readable', value: {
|
|
38
|
+
...template,
|
|
39
|
+
op: result.value,
|
|
40
|
+
comparison: {
|
|
41
|
+
caseMode: operator === 'equals' || operator === 'notEquals' ? 'ifcBoolean' : 'fold',
|
|
42
|
+
numericMode: 'strict',
|
|
43
|
+
},
|
|
44
|
+
} };
|
|
45
|
+
}
|
|
46
|
+
function inverse(vocabulary, op, entries) {
|
|
47
|
+
const match = entries.find(([, canonical]) => canonical === op);
|
|
48
|
+
return match ? { status: 'readable', value: match[0] } : { status: 'unreadable', vocabulary, operator: op };
|
|
49
|
+
}
|
|
50
|
+
function legacyComparison(comparison, caseMode, numericMode) {
|
|
51
|
+
if (!comparison)
|
|
52
|
+
return false;
|
|
53
|
+
return comparison.caseMode === caseMode && comparison.numericMode === numericMode;
|
|
54
|
+
}
|
|
55
|
+
export function filterRuleToLegacyLensOperator(rule) {
|
|
56
|
+
const caseMode = rule.op === 'eq' ? 'lensBoolean' : 'fold';
|
|
57
|
+
if (!legacyComparison(rule.comparison, caseMode, 'prefix')) {
|
|
58
|
+
return { status: 'unreadable', vocabulary: 'lens', operator: rule.op };
|
|
59
|
+
}
|
|
60
|
+
if (rule.op === 'isNonEmpty' && rule.kind === 'attribute')
|
|
61
|
+
return { status: 'readable', value: 'exists' };
|
|
62
|
+
if (rule.op === 'isNotNull' && rule.kind === 'attribute') {
|
|
63
|
+
return { status: 'unreadable', vocabulary: 'lens', operator: rule.op };
|
|
64
|
+
}
|
|
65
|
+
return inverse('lens', rule.op, Object.entries(LENS_OPS));
|
|
66
|
+
}
|
|
67
|
+
export function filterRuleToLegacyListOperator(rule) {
|
|
68
|
+
const caseMode = rule.op === 'eq' || rule.op === 'ne' ? 'ifcBoolean' : 'fold';
|
|
69
|
+
if (!legacyComparison(rule.comparison, caseMode, 'strict')) {
|
|
70
|
+
return { status: 'unreadable', vocabulary: 'lists', operator: rule.op };
|
|
71
|
+
}
|
|
72
|
+
return inverse('lists', rule.op, Object.entries(LIST_OPS));
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=legacy-operator-adapters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"legacy-operator-adapters.js","sourceRoot":"","sources":["../../src/filter/legacy-operator-adapters.ts"],"names":[],"mappings":"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"}
|