@ifc-lite/ids 1.14.10 → 1.14.11
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 +53 -44
- package/dist/constraints/index.d.ts +11 -1
- package/dist/constraints/index.d.ts.map +1 -1
- package/dist/constraints/index.js +12 -10
- package/dist/constraints/index.js.map +1 -1
- package/dist/facets/attribute-facet.d.ts.map +1 -1
- package/dist/facets/attribute-facet.js +31 -10
- package/dist/facets/attribute-facet.js.map +1 -1
- package/dist/facets/classification-facet.d.ts.map +1 -1
- package/dist/facets/classification-facet.js +21 -2
- package/dist/facets/classification-facet.js.map +1 -1
- package/dist/facets/entity-facet.d.ts.map +1 -1
- package/dist/facets/entity-facet.js +5 -3
- package/dist/facets/entity-facet.js.map +1 -1
- package/dist/facets/partof-facet.d.ts.map +1 -1
- package/dist/facets/partof-facet.js +7 -5
- package/dist/facets/partof-facet.js.map +1 -1
- package/dist/facets/property-facet.d.ts.map +1 -1
- package/dist/facets/property-facet.js +86 -64
- package/dist/facets/property-facet.js.map +1 -1
- package/dist/facets/test-helpers.d.ts +36 -0
- package/dist/facets/test-helpers.d.ts.map +1 -0
- package/dist/facets/test-helpers.js +102 -0
- package/dist/facets/test-helpers.js.map +1 -0
- package/dist/parser/xml-parser.d.ts.map +1 -1
- package/dist/parser/xml-parser.js +32 -4
- package/dist/parser/xml-parser.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/validation/validator.js +4 -0
- package/dist/validation/validator.js.map +1 -1
- package/package.json +4 -2
package/README.md
CHANGED
|
@@ -1,13 +1,6 @@
|
|
|
1
1
|
# @ifc-lite/ids
|
|
2
2
|
|
|
3
|
-
IDS (Information Delivery Specification) support for
|
|
4
|
-
|
|
5
|
-
## Features
|
|
6
|
-
|
|
7
|
-
- **Full IDS 1.0 Support**: Parse and validate buildingSMART IDS XML files
|
|
8
|
-
- **All Facet Types**: Entity, Attribute, Property, Classification, Material, PartOf
|
|
9
|
-
- **Multi-Language Reports**: Human-readable translations in English, German, French
|
|
10
|
-
- **Deep Viewer Integration**: Color-coded results, bidirectional selection, entity isolation
|
|
3
|
+
IDS (Information Delivery Specification) support for IFClite. Parses buildingSMART IDS XML files and validates an `IfcDataStore` against them — every facet type, every constraint type, with multi-language reports.
|
|
11
4
|
|
|
12
5
|
## Installation
|
|
13
6
|
|
|
@@ -15,62 +8,78 @@ IDS (Information Delivery Specification) support for IFC-Lite.
|
|
|
15
8
|
npm install @ifc-lite/ids
|
|
16
9
|
```
|
|
17
10
|
|
|
18
|
-
##
|
|
11
|
+
## Validate against an IDS file
|
|
19
12
|
|
|
20
13
|
```typescript
|
|
21
14
|
import { parseIDS, validateIDS, createTranslationService } from '@ifc-lite/ids';
|
|
22
15
|
|
|
23
|
-
|
|
24
|
-
const idsSpec = parseIDS(
|
|
16
|
+
const idsXml = await fetch('project-requirements.ids').then(r => r.text());
|
|
17
|
+
const idsSpec = parseIDS(idsXml);
|
|
25
18
|
|
|
26
|
-
// Create translation service
|
|
27
19
|
const translator = createTranslationService('en');
|
|
20
|
+
const report = await validateIDS(idsSpec, store, { translator });
|
|
28
21
|
|
|
29
|
-
|
|
30
|
-
const report = await validateIDS(idsSpec, ifcDataStore, { translator });
|
|
22
|
+
console.log(`Overall: ${report.totalPassed} / ${report.totalChecked} passed`);
|
|
31
23
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
console.log(`${specResult.specificationName}: ${specResult.passRate}% passed`);
|
|
24
|
+
for (const spec of report.specificationResults) {
|
|
25
|
+
console.log(`\n${spec.specificationName}: ${spec.passRate}%`);
|
|
35
26
|
|
|
36
|
-
for (const
|
|
37
|
-
if (!
|
|
38
|
-
for (const
|
|
39
|
-
|
|
40
|
-
console.log(` - ${translator.describeFailure(reqResult)}`);
|
|
41
|
-
}
|
|
27
|
+
for (const entity of spec.entityResults) {
|
|
28
|
+
if (!entity.passed) {
|
|
29
|
+
for (const req of entity.requirementResults.filter(r => !r.passed)) {
|
|
30
|
+
console.log(` ✗ ${entity.entityType} #${entity.expressId}: ${translator.describeFailure(req)}`);
|
|
42
31
|
}
|
|
43
32
|
}
|
|
44
33
|
}
|
|
45
34
|
}
|
|
46
35
|
```
|
|
47
36
|
|
|
48
|
-
##
|
|
37
|
+
## Multi-language reports
|
|
38
|
+
|
|
39
|
+
Reports translate automatically. Supported languages: English (`en`), German (`de`), French (`fr`).
|
|
40
|
+
|
|
41
|
+
```typescript
|
|
42
|
+
const de = createTranslationService('de');
|
|
43
|
+
const report = await validateIDS(idsSpec, store, { translator: de });
|
|
44
|
+
// Failures now read: "Anforderung 'FireRating' nicht erfüllt..."
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Inspect an IDS specification
|
|
48
|
+
|
|
49
|
+
```typescript
|
|
50
|
+
const idsSpec = parseIDS(idsXml);
|
|
51
|
+
|
|
52
|
+
for (const spec of idsSpec.specifications) {
|
|
53
|
+
console.log(`Spec: ${spec.name} (${spec.identifier})`);
|
|
54
|
+
console.log(` Applies to: ${spec.applicability.facets.length} facet(s)`);
|
|
55
|
+
console.log(` Requires: ${spec.requirements.facets.length} facet(s)`);
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Supported facets
|
|
49
60
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
61
|
+
| Facet | Matches |
|
|
62
|
+
|---|---|
|
|
63
|
+
| `Entity` | IFC entity type (`IfcWall`, `IfcDoor`, …) |
|
|
64
|
+
| `Attribute` | IfcRoot attributes (`Name`, `Description`, `Tag`, …) |
|
|
65
|
+
| `Property` | Property set + property name + value |
|
|
66
|
+
| `Classification` | Classification system + reference code |
|
|
67
|
+
| `Material` | Material assignment |
|
|
68
|
+
| `PartOf` | Spatial / compositional relationship |
|
|
53
69
|
|
|
54
|
-
##
|
|
70
|
+
## Supported constraints
|
|
55
71
|
|
|
56
|
-
|
|
|
57
|
-
|
|
58
|
-
|
|
|
59
|
-
|
|
|
60
|
-
|
|
|
61
|
-
|
|
|
62
|
-
| Material | Match by material assignment |
|
|
63
|
-
| PartOf | Match by spatial/compositional relationship |
|
|
72
|
+
| Constraint | Matches |
|
|
73
|
+
|---|---|
|
|
74
|
+
| `SimpleValue` | Exact match |
|
|
75
|
+
| `Pattern` | Regex match |
|
|
76
|
+
| `Enumeration` | One-of-list |
|
|
77
|
+
| `Bounds` | Numeric range (min/max, inclusive/exclusive) |
|
|
64
78
|
|
|
65
|
-
##
|
|
79
|
+
## API
|
|
66
80
|
|
|
67
|
-
|
|
68
|
-
|------------|-------------|
|
|
69
|
-
| SimpleValue | Exact match |
|
|
70
|
-
| Pattern | Regex pattern matching |
|
|
71
|
-
| Enumeration | One of a list of values |
|
|
72
|
-
| Bounds | Numeric range (min/max inclusive/exclusive) |
|
|
81
|
+
See the [IDS Guide](https://louistrue.github.io/ifc-lite/guide/ids/) and [API Reference](https://louistrue.github.io/ifc-lite/api/typescript/#ifc-liteids).
|
|
73
82
|
|
|
74
83
|
## License
|
|
75
84
|
|
|
76
|
-
MPL-2.0
|
|
85
|
+
[MPL-2.0](../../LICENSE)
|
|
@@ -2,10 +2,20 @@
|
|
|
2
2
|
* Constraint matching utilities for IDS validation
|
|
3
3
|
*/
|
|
4
4
|
import type { IDSConstraint } from '../types.js';
|
|
5
|
+
/** Options for constraint matching */
|
|
6
|
+
export interface MatchOptions {
|
|
7
|
+
/**
|
|
8
|
+
* If true, use case-insensitive comparison for string values.
|
|
9
|
+
* Per IDS 1.0 spec, only entity type names and predefined types
|
|
10
|
+
* should be compared case-insensitively. All other values
|
|
11
|
+
* (property values, classification values, etc.) are case-sensitive.
|
|
12
|
+
*/
|
|
13
|
+
caseInsensitive?: boolean;
|
|
14
|
+
}
|
|
5
15
|
/**
|
|
6
16
|
* Check if a value matches a constraint
|
|
7
17
|
*/
|
|
8
|
-
export declare function matchConstraint(constraint: IDSConstraint, actualValue: string | number | boolean | null | undefined): boolean;
|
|
18
|
+
export declare function matchConstraint(constraint: IDSConstraint, actualValue: string | number | boolean | null | undefined, options?: MatchOptions): boolean;
|
|
9
19
|
/**
|
|
10
20
|
* Get a human-readable description of why a constraint match failed
|
|
11
21
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/constraints/index.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EACV,aAAa,EAKd,MAAM,aAAa,CAAC;AAKrB;;GAEG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,aAAa,EACzB,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/constraints/index.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EACV,aAAa,EAKd,MAAM,aAAa,CAAC;AAKrB,sCAAsC;AACtC,MAAM,WAAW,YAAY;IAC3B;;;;;OAKG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,aAAa,EACzB,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,EACzD,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAmBT;AA8JD;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,UAAU,EAAE,aAAa,EACzB,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,GACxD,MAAM,CAiBR;AA0CD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,aAAa,GAAG,MAAM,CAgBlE"}
|
|
@@ -6,17 +6,18 @@ const NUMERIC_TOLERANCE = 1e-6;
|
|
|
6
6
|
/**
|
|
7
7
|
* Check if a value matches a constraint
|
|
8
8
|
*/
|
|
9
|
-
export function matchConstraint(constraint, actualValue) {
|
|
9
|
+
export function matchConstraint(constraint, actualValue, options) {
|
|
10
10
|
if (actualValue === null || actualValue === undefined) {
|
|
11
11
|
return false;
|
|
12
12
|
}
|
|
13
|
+
const ci = options?.caseInsensitive ?? false;
|
|
13
14
|
switch (constraint.type) {
|
|
14
15
|
case 'simpleValue':
|
|
15
|
-
return matchSimpleValue(constraint, actualValue);
|
|
16
|
+
return matchSimpleValue(constraint, actualValue, ci);
|
|
16
17
|
case 'pattern':
|
|
17
18
|
return matchPattern(constraint, actualValue);
|
|
18
19
|
case 'enumeration':
|
|
19
|
-
return matchEnumeration(constraint, actualValue);
|
|
20
|
+
return matchEnumeration(constraint, actualValue, ci);
|
|
20
21
|
case 'bounds':
|
|
21
22
|
return matchBounds(constraint, actualValue);
|
|
22
23
|
default:
|
|
@@ -26,14 +27,14 @@ export function matchConstraint(constraint, actualValue) {
|
|
|
26
27
|
/**
|
|
27
28
|
* Match against a simple value (exact match)
|
|
28
29
|
*/
|
|
29
|
-
function matchSimpleValue(constraint, actualValue) {
|
|
30
|
+
function matchSimpleValue(constraint, actualValue, caseInsensitive) {
|
|
30
31
|
const expected = constraint.value;
|
|
31
32
|
const actualStr = String(actualValue);
|
|
32
33
|
// Exact string match
|
|
33
34
|
if (actualStr === expected)
|
|
34
35
|
return true;
|
|
35
|
-
// Case-insensitive match
|
|
36
|
-
if (actualStr.toUpperCase() === expected.toUpperCase())
|
|
36
|
+
// Case-insensitive match only when explicitly requested (IFC entity/predefined type names)
|
|
37
|
+
if (caseInsensitive && actualStr.toUpperCase() === expected.toUpperCase())
|
|
37
38
|
return true;
|
|
38
39
|
// Numeric comparison with tolerance
|
|
39
40
|
const expectedNum = parseFloat(expected);
|
|
@@ -70,7 +71,8 @@ function matchPattern(constraint, actualValue) {
|
|
|
70
71
|
// Convert XSD regex to JavaScript regex
|
|
71
72
|
const jsPattern = xsdToJsRegex(constraint.pattern);
|
|
72
73
|
// IDS patterns must match the entire string
|
|
73
|
-
|
|
74
|
+
// Per XSD/IDS spec, patterns are case-sensitive (no 'i' flag)
|
|
75
|
+
const regex = new RegExp(`^${jsPattern}$`);
|
|
74
76
|
return regex.test(actualStr);
|
|
75
77
|
}
|
|
76
78
|
catch {
|
|
@@ -95,15 +97,15 @@ function xsdToJsRegex(xsdPattern) {
|
|
|
95
97
|
/**
|
|
96
98
|
* Match against an enumeration (one of a list)
|
|
97
99
|
*/
|
|
98
|
-
function matchEnumeration(constraint, actualValue) {
|
|
100
|
+
function matchEnumeration(constraint, actualValue, caseInsensitive) {
|
|
99
101
|
const actualStr = String(actualValue);
|
|
100
102
|
const actualUpper = actualStr.toUpperCase();
|
|
101
103
|
return constraint.values.some((v) => {
|
|
102
104
|
// Try exact match first
|
|
103
105
|
if (v === actualStr)
|
|
104
106
|
return true;
|
|
105
|
-
// Case-insensitive match
|
|
106
|
-
if (v.toUpperCase() === actualUpper)
|
|
107
|
+
// Case-insensitive match only when explicitly requested
|
|
108
|
+
if (caseInsensitive && v.toUpperCase() === actualUpper)
|
|
107
109
|
return true;
|
|
108
110
|
// Numeric comparison
|
|
109
111
|
const vNum = parseFloat(v);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/constraints/index.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAc/D,sEAAsE;AACtE,MAAM,iBAAiB,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/constraints/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attribute-facet.d.ts","sourceRoot":"","sources":["../../src/facets/attribute-facet.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"attribute-facet.d.ts","sourceRoot":"","sources":["../../src/facets/attribute-facet.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAgBnD;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,iBAAiB,EACxB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,eAAe,GACxB,gBAAgB,CAiDlB"}
|
|
@@ -2,6 +2,8 @@
|
|
|
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
4
|
import { matchConstraint, formatConstraint } from '../constraints/index.js';
|
|
5
|
+
/** Attribute name matching is case-insensitive (IFC schema-defined names) */
|
|
6
|
+
const ATTR_NAME_OPTS = { caseInsensitive: true };
|
|
5
7
|
/** Standard IFC attributes that can be checked */
|
|
6
8
|
const STANDARD_ATTRIBUTES = [
|
|
7
9
|
'Name',
|
|
@@ -15,20 +17,21 @@ const STANDARD_ATTRIBUTES = [
|
|
|
15
17
|
* Check if an entity matches an attribute facet
|
|
16
18
|
*/
|
|
17
19
|
export function checkAttributeFacet(facet, expressId, accessor) {
|
|
18
|
-
// Get the attribute name to check
|
|
19
20
|
const attrNameConstraint = facet.name;
|
|
20
|
-
|
|
21
|
-
|
|
21
|
+
// Resolve which attribute name(s) to check
|
|
22
|
+
let attrNamesToCheck;
|
|
22
23
|
if (attrNameConstraint.type === 'simpleValue') {
|
|
23
|
-
|
|
24
|
+
attrNamesToCheck = [attrNameConstraint.value];
|
|
24
25
|
}
|
|
25
26
|
else {
|
|
26
|
-
// For patterns/enumerations,
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
if (matchingAttrs.length === 0) {
|
|
27
|
+
// For patterns/enumerations, check ALL matching standard attributes (not just the first)
|
|
28
|
+
attrNamesToCheck = STANDARD_ATTRIBUTES.filter((a) => matchConstraint(attrNameConstraint, a, ATTR_NAME_OPTS));
|
|
29
|
+
if (attrNamesToCheck.length === 0) {
|
|
30
30
|
return {
|
|
31
31
|
passed: false,
|
|
32
|
+
expectedValue: facet.value
|
|
33
|
+
? formatConstraint(facet.value)
|
|
34
|
+
: `attribute matching ${formatConstraint(attrNameConstraint)} to exist`,
|
|
32
35
|
failure: {
|
|
33
36
|
type: 'ATTRIBUTE_MISSING',
|
|
34
37
|
field: formatConstraint(attrNameConstraint),
|
|
@@ -36,9 +39,27 @@ export function checkAttributeFacet(facet, expressId, accessor) {
|
|
|
36
39
|
},
|
|
37
40
|
};
|
|
38
41
|
}
|
|
39
|
-
attrName = matchingAttrs[0];
|
|
40
42
|
}
|
|
41
|
-
//
|
|
43
|
+
// Check each matching attribute; return on first pass, track most specific failure
|
|
44
|
+
let bestFailure;
|
|
45
|
+
for (const attrName of attrNamesToCheck) {
|
|
46
|
+
const result = checkSingleAttribute(facet, attrName, expressId, accessor);
|
|
47
|
+
if (result.passed) {
|
|
48
|
+
return result;
|
|
49
|
+
}
|
|
50
|
+
// Prefer value/pattern mismatch over attribute-missing (more specific)
|
|
51
|
+
if (!bestFailure ||
|
|
52
|
+
(result.failure?.type !== 'ATTRIBUTE_MISSING' && bestFailure.failure?.type === 'ATTRIBUTE_MISSING')) {
|
|
53
|
+
bestFailure = result;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
// Return the most specific failure we found
|
|
57
|
+
return bestFailure;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Check a single attribute by name against the facet's value constraint
|
|
61
|
+
*/
|
|
62
|
+
function checkSingleAttribute(facet, attrName, expressId, accessor) {
|
|
42
63
|
const attrValue = getAttributeValue(attrName, expressId, accessor);
|
|
43
64
|
// Check if attribute exists
|
|
44
65
|
if (attrValue === undefined || attrValue === null || attrValue === '') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attribute-facet.js","sourceRoot":"","sources":["../../src/facets/attribute-facet.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAQ/D,OAAO,EAAE,eAAe,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"attribute-facet.js","sourceRoot":"","sources":["../../src/facets/attribute-facet.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"classification-facet.d.ts","sourceRoot":"","sources":["../../src/facets/classification-facet.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC3E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGnD;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,sBAAsB,EAC7B,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,eAAe,GACxB,gBAAgB,
|
|
1
|
+
{"version":3,"file":"classification-facet.d.ts","sourceRoot":"","sources":["../../src/facets/classification-facet.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC3E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGnD;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,sBAAsB,EAC7B,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,eAAe,GACxB,gBAAgB,CA4HlB"}
|
|
@@ -8,9 +8,10 @@ import { matchConstraint, formatConstraint } from '../constraints/index.js';
|
|
|
8
8
|
export function checkClassificationFacet(facet, expressId, accessor) {
|
|
9
9
|
// Get classifications for the entity
|
|
10
10
|
const classifications = accessor.getClassifications(expressId);
|
|
11
|
+
const hasAnyClassifications = classifications.length > 0;
|
|
11
12
|
// If no value or system constraint, just check if any classification exists
|
|
12
13
|
if (!facet.system && !facet.value) {
|
|
13
|
-
if (
|
|
14
|
+
if (!hasAnyClassifications) {
|
|
14
15
|
return {
|
|
15
16
|
passed: false,
|
|
16
17
|
actualValue: '(none)',
|
|
@@ -29,6 +30,24 @@ export function checkClassificationFacet(facet, expressId, accessor) {
|
|
|
29
30
|
expectedValue: 'any classification',
|
|
30
31
|
};
|
|
31
32
|
}
|
|
33
|
+
// If entity has no classifications at all, return CLASSIFICATION_MISSING
|
|
34
|
+
// (not SYSTEM_MISMATCH or VALUE_MISMATCH — those imply we found _some_ classifications)
|
|
35
|
+
if (!hasAnyClassifications) {
|
|
36
|
+
const expected = facet.system && facet.value
|
|
37
|
+
? `${formatConstraint(facet.system)}:${formatConstraint(facet.value)}`
|
|
38
|
+
: facet.system
|
|
39
|
+
? formatConstraint(facet.system)
|
|
40
|
+
: formatConstraint(facet.value);
|
|
41
|
+
return {
|
|
42
|
+
passed: false,
|
|
43
|
+
actualValue: '(none)',
|
|
44
|
+
expectedValue: expected,
|
|
45
|
+
failure: {
|
|
46
|
+
type: 'CLASSIFICATION_MISSING',
|
|
47
|
+
expected,
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
}
|
|
32
51
|
// Filter by system if specified
|
|
33
52
|
let matchingClassifications = classifications;
|
|
34
53
|
if (facet.system) {
|
|
@@ -39,7 +58,7 @@ export function checkClassificationFacet(facet, expressId, accessor) {
|
|
|
39
58
|
].join(', ');
|
|
40
59
|
return {
|
|
41
60
|
passed: false,
|
|
42
|
-
actualValue: availableSystems
|
|
61
|
+
actualValue: availableSystems,
|
|
43
62
|
expectedValue: formatConstraint(facet.system),
|
|
44
63
|
failure: {
|
|
45
64
|
type: 'CLASSIFICATION_SYSTEM_MISMATCH',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"classification-facet.js","sourceRoot":"","sources":["../../src/facets/classification-facet.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAQ/D,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE5E;;GAEG;AACH,MAAM,UAAU,wBAAwB,CACtC,KAA6B,EAC7B,SAAiB,EACjB,QAAyB;IAEzB,qCAAqC;IACrC,MAAM,eAAe,GAAG,QAAQ,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"classification-facet.js","sourceRoot":"","sources":["../../src/facets/classification-facet.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity-facet.d.ts","sourceRoot":"","sources":["../../src/facets/entity-facet.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EACb,eAAe,EAChB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"entity-facet.d.ts","sourceRoot":"","sources":["../../src/facets/entity-facet.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EACb,eAAe,EAChB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAMnD;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,cAAc,EACrB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,eAAe,GACxB,gBAAgB,CAuElB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,cAAc,EACrB,QAAQ,EAAE,eAAe,GACxB,MAAM,EAAE,GAAG,SAAS,CAoBtB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,aAAa,EACzB,QAAQ,EAAE,MAAM,EAAE,GACjB,MAAM,EAAE,CAsBV"}
|
|
@@ -2,6 +2,8 @@
|
|
|
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
4
|
import { matchConstraint, formatConstraint } from '../constraints/index.js';
|
|
5
|
+
/** IFC entity/predefined type comparisons are case-insensitive per IDS spec */
|
|
6
|
+
const IFC_CASE_INSENSITIVE = { caseInsensitive: true };
|
|
5
7
|
/**
|
|
6
8
|
* Check if an entity matches an entity facet
|
|
7
9
|
*/
|
|
@@ -20,8 +22,8 @@ export function checkEntityFacet(facet, expressId, accessor) {
|
|
|
20
22
|
},
|
|
21
23
|
};
|
|
22
24
|
}
|
|
23
|
-
// Check entity type
|
|
24
|
-
if (!matchConstraint(facet.name, entityType)) {
|
|
25
|
+
// Check entity type (case-insensitive per IDS spec — IFC entity names are case-agnostic)
|
|
26
|
+
if (!matchConstraint(facet.name, entityType, IFC_CASE_INSENSITIVE)) {
|
|
25
27
|
return {
|
|
26
28
|
passed: false,
|
|
27
29
|
actualValue: entityType,
|
|
@@ -49,7 +51,7 @@ export function checkEntityFacet(facet, expressId, accessor) {
|
|
|
49
51
|
},
|
|
50
52
|
};
|
|
51
53
|
}
|
|
52
|
-
if (!matchConstraint(facet.predefinedType, objectType)) {
|
|
54
|
+
if (!matchConstraint(facet.predefinedType, objectType, IFC_CASE_INSENSITIVE)) {
|
|
53
55
|
return {
|
|
54
56
|
passed: false,
|
|
55
57
|
actualValue: `${entityType}[${objectType}]`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity-facet.js","sourceRoot":"","sources":["../../src/facets/entity-facet.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAY/D,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE5E;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,KAAqB,EACrB,SAAiB,EACjB,QAAyB;IAEzB,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;IAErD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO;YACL,MAAM,EAAE,KAAK;YACb,WAAW,EAAE,SAAS;YACtB,aAAa,EAAE,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC;YAC3C,OAAO,EAAE;gBACP,IAAI,EAAE,sBAAsB;gBAC5B,KAAK,EAAE,YAAY;gBACnB,MAAM,EAAE,SAAS;gBACjB,QAAQ,EAAE,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC;aACvC;SACF,CAAC;IACJ,CAAC;IAED,
|
|
1
|
+
{"version":3,"file":"entity-facet.js","sourceRoot":"","sources":["../../src/facets/entity-facet.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"partof-facet.d.ts","sourceRoot":"","sources":["../../src/facets/partof-facet.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EAEhB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"partof-facet.d.ts","sourceRoot":"","sources":["../../src/facets/partof-facet.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EAEhB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAenD;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,cAAc,EACrB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,eAAe,GACxB,gBAAgB,CAyGlB"}
|
|
@@ -2,6 +2,8 @@
|
|
|
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
4
|
import { matchConstraint, formatConstraint } from '../constraints/index.js';
|
|
5
|
+
/** IFC entity/predefined type comparisons are case-insensitive per IDS spec */
|
|
6
|
+
const IFC_CASE_INSENSITIVE = { caseInsensitive: true };
|
|
5
7
|
/** Human-readable relation names */
|
|
6
8
|
const RELATION_NAMES = {
|
|
7
9
|
IfcRelAggregates: 'aggregated in',
|
|
@@ -44,8 +46,8 @@ export function checkPartOfFacet(facet, expressId, accessor) {
|
|
|
44
46
|
expectedValue: `${relationName} any entity`,
|
|
45
47
|
};
|
|
46
48
|
}
|
|
47
|
-
// Check parent entity type
|
|
48
|
-
if (!matchConstraint(facet.entity.name, parent.entityType)) {
|
|
49
|
+
// Check parent entity type (case-insensitive for IFC entity names)
|
|
50
|
+
if (!matchConstraint(facet.entity.name, parent.entityType, IFC_CASE_INSENSITIVE)) {
|
|
49
51
|
const relationName = RELATION_NAMES[facet.relation] || facet.relation;
|
|
50
52
|
return {
|
|
51
53
|
passed: false,
|
|
@@ -71,7 +73,7 @@ export function checkPartOfFacet(facet, expressId, accessor) {
|
|
|
71
73
|
actualValue: `${parent.entityType} (no predefinedType)`,
|
|
72
74
|
expectedValue: `${formatConstraint(facet.entity.name)} with predefinedType ${formatConstraint(facet.entity.predefinedType)}`,
|
|
73
75
|
failure: {
|
|
74
|
-
type: '
|
|
76
|
+
type: 'PARTOF_PREDEFINED_TYPE_MISSING',
|
|
75
77
|
field: 'predefinedType',
|
|
76
78
|
expected: formatConstraint(facet.entity.predefinedType),
|
|
77
79
|
context: {
|
|
@@ -81,13 +83,13 @@ export function checkPartOfFacet(facet, expressId, accessor) {
|
|
|
81
83
|
},
|
|
82
84
|
};
|
|
83
85
|
}
|
|
84
|
-
if (!matchConstraint(facet.entity.predefinedType, parent.predefinedType)) {
|
|
86
|
+
if (!matchConstraint(facet.entity.predefinedType, parent.predefinedType, IFC_CASE_INSENSITIVE)) {
|
|
85
87
|
return {
|
|
86
88
|
passed: false,
|
|
87
89
|
actualValue: `${parent.entityType}[${parent.predefinedType}]`,
|
|
88
90
|
expectedValue: `${formatConstraint(facet.entity.name)}[${formatConstraint(facet.entity.predefinedType)}]`,
|
|
89
91
|
failure: {
|
|
90
|
-
type: '
|
|
92
|
+
type: 'PARTOF_PREDEFINED_TYPE_MISMATCH',
|
|
91
93
|
field: 'predefinedType',
|
|
92
94
|
actual: parent.predefinedType,
|
|
93
95
|
expected: formatConstraint(facet.entity.predefinedType),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"partof-facet.js","sourceRoot":"","sources":["../../src/facets/partof-facet.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAY/D,OAAO,EAAE,eAAe,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"partof-facet.js","sourceRoot":"","sources":["../../src/facets/partof-facet.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"property-facet.d.ts","sourceRoot":"","sources":["../../src/facets/property-facet.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EAEhB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"property-facet.d.ts","sourceRoot":"","sources":["../../src/facets/property-facet.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EAEhB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAMnD;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,gBAAgB,EACvB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,eAAe,GACxB,gBAAgB,CAgFlB"}
|