@ifc-lite/ids 1.14.10 → 1.15.1
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/audit/coherence/index.d.ts +12 -0
- package/dist/audit/coherence/index.d.ts.map +1 -0
- package/dist/audit/coherence/index.js +392 -0
- package/dist/audit/coherence/index.js.map +1 -0
- package/dist/audit/coherence/regex.d.ts +57 -0
- package/dist/audit/coherence/regex.d.ts.map +1 -0
- package/dist/audit/coherence/regex.js +111 -0
- package/dist/audit/coherence/regex.js.map +1 -0
- package/dist/audit/ifc-schema/index.d.ts +4 -0
- package/dist/audit/ifc-schema/index.d.ts.map +1 -0
- package/dist/audit/ifc-schema/index.js +637 -0
- package/dist/audit/ifc-schema/index.js.map +1 -0
- package/dist/audit/index.d.ts +37 -0
- package/dist/audit/index.d.ts.map +1 -0
- package/dist/audit/index.js +60 -0
- package/dist/audit/index.js.map +1 -0
- package/dist/audit/parser-shim.d.ts +13 -0
- package/dist/audit/parser-shim.d.ts.map +1 -0
- package/dist/audit/parser-shim.js +66 -0
- package/dist/audit/parser-shim.js.map +1 -0
- package/dist/audit/structural/index.d.ts +22 -0
- package/dist/audit/structural/index.d.ts.map +1 -0
- package/dist/audit/structural/index.js +441 -0
- package/dist/audit/structural/index.js.map +1 -0
- package/dist/audit/types.d.ts +91 -0
- package/dist/audit/types.d.ts.map +1 -0
- package/dist/audit/types.js +5 -0
- package/dist/audit/types.js.map +1 -0
- package/dist/audit/xsd/index.d.ts +13 -0
- package/dist/audit/xsd/index.d.ts.map +1 -0
- package/dist/audit/xsd/index.js +203 -0
- package/dist/audit/xsd/index.js.map +1 -0
- package/dist/bridge/classifications.d.ts +15 -0
- package/dist/bridge/classifications.d.ts.map +1 -0
- package/dist/bridge/classifications.js +114 -0
- package/dist/bridge/classifications.js.map +1 -0
- package/dist/bridge/data-accessor.d.ts +16 -0
- package/dist/bridge/data-accessor.d.ts.map +1 -0
- package/dist/bridge/data-accessor.js +205 -0
- package/dist/bridge/data-accessor.js.map +1 -0
- package/dist/bridge/data-types.d.ts +11 -0
- package/dist/bridge/data-types.d.ts.map +1 -0
- package/dist/bridge/data-types.js +47 -0
- package/dist/bridge/data-types.js.map +1 -0
- package/dist/bridge/index.d.ts +17 -0
- package/dist/bridge/index.d.ts.map +1 -0
- package/dist/bridge/index.js +20 -0
- package/dist/bridge/index.js.map +1 -0
- package/dist/bridge/materials.d.ts +11 -0
- package/dist/bridge/materials.d.ts.map +1 -0
- package/dist/bridge/materials.js +68 -0
- package/dist/bridge/materials.js.map +1 -0
- package/dist/bridge/predefined-types.d.ts +19 -0
- package/dist/bridge/predefined-types.d.ts.map +1 -0
- package/dist/bridge/predefined-types.js +84 -0
- package/dist/bridge/predefined-types.js.map +1 -0
- package/dist/bridge/properties.d.ts +20 -0
- package/dist/bridge/properties.d.ts.map +1 -0
- package/dist/bridge/properties.js +168 -0
- package/dist/bridge/properties.js.map +1 -0
- package/dist/bridge/schema-version.d.ts +10 -0
- package/dist/bridge/schema-version.d.ts.map +1 -0
- package/dist/bridge/schema-version.js +25 -0
- package/dist/bridge/schema-version.js.map +1 -0
- package/dist/bridge/units.d.ts +18 -0
- package/dist/bridge/units.d.ts.map +1 -0
- package/dist/bridge/units.js +55 -0
- package/dist/bridge/units.js.map +1 -0
- package/dist/constraints/comparators.d.ts +32 -0
- package/dist/constraints/comparators.d.ts.map +1 -0
- package/dist/constraints/comparators.js +94 -0
- package/dist/constraints/comparators.js.map +1 -0
- package/dist/constraints/index.d.ts +11 -1
- package/dist/constraints/index.d.ts.map +1 -1
- package/dist/constraints/index.js +74 -58
- package/dist/constraints/index.js.map +1 -1
- package/dist/constraints/xsd-cast.d.ts +20 -0
- package/dist/constraints/xsd-cast.d.ts.map +1 -0
- package/dist/constraints/xsd-cast.js +89 -0
- package/dist/constraints/xsd-cast.js.map +1 -0
- package/dist/facets/attribute-facet.d.ts.map +1 -1
- package/dist/facets/attribute-facet.js +80 -12
- 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 +59 -7
- 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 +40 -8
- 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 +171 -55
- package/dist/facets/property-facet.js.map +1 -1
- package/dist/facets/test-helpers.d.ts +42 -0
- package/dist/facets/test-helpers.d.ts.map +1 -0
- package/dist/facets/test-helpers.js +106 -0
- package/dist/facets/test-helpers.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/parser/xml-parser.d.ts.map +1 -1
- package/dist/parser/xml-parser.js +198 -68
- package/dist/parser/xml-parser.js.map +1 -1
- package/dist/translation/locales/de.d.ts +1 -0
- package/dist/translation/locales/de.d.ts.map +1 -1
- package/dist/translation/locales/de.js +1 -0
- package/dist/translation/locales/de.js.map +1 -1
- package/dist/translation/locales/en.d.ts +1 -0
- package/dist/translation/locales/en.d.ts.map +1 -1
- package/dist/translation/locales/en.js +1 -0
- package/dist/translation/locales/en.js.map +1 -1
- package/dist/translation/locales/fr.d.ts +1 -0
- package/dist/translation/locales/fr.d.ts.map +1 -1
- package/dist/translation/locales/fr.js +1 -0
- package/dist/translation/locales/fr.js.map +1 -1
- package/dist/types.d.ts +116 -7
- package/dist/types.d.ts.map +1 -1
- package/dist/validation/validator.js +49 -3
- package/dist/validation/validator.js.map +1 -1
- package/package.json +10 -3
|
@@ -1,22 +1,24 @@
|
|
|
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
|
-
|
|
4
|
+
import { compareBoolean, compareNumeric, compareString, } from './comparators.js';
|
|
5
|
+
/** Tolerance for the bounds matcher's exclusive comparators. */
|
|
5
6
|
const NUMERIC_TOLERANCE = 1e-6;
|
|
6
7
|
/**
|
|
7
8
|
* Check if a value matches a constraint
|
|
8
9
|
*/
|
|
9
|
-
export function matchConstraint(constraint, actualValue) {
|
|
10
|
+
export function matchConstraint(constraint, actualValue, options) {
|
|
10
11
|
if (actualValue === null || actualValue === undefined) {
|
|
11
12
|
return false;
|
|
12
13
|
}
|
|
14
|
+
const ci = options?.caseInsensitive ?? false;
|
|
13
15
|
switch (constraint.type) {
|
|
14
16
|
case 'simpleValue':
|
|
15
|
-
return matchSimpleValue(constraint, actualValue);
|
|
17
|
+
return matchSimpleValue(constraint, actualValue, ci);
|
|
16
18
|
case 'pattern':
|
|
17
|
-
return matchPattern(constraint, actualValue);
|
|
19
|
+
return matchPattern(constraint, actualValue, ci);
|
|
18
20
|
case 'enumeration':
|
|
19
|
-
return matchEnumeration(constraint, actualValue);
|
|
21
|
+
return matchEnumeration(constraint, actualValue, ci);
|
|
20
22
|
case 'bounds':
|
|
21
23
|
return matchBounds(constraint, actualValue);
|
|
22
24
|
default:
|
|
@@ -24,53 +26,44 @@ export function matchConstraint(constraint, actualValue) {
|
|
|
24
26
|
}
|
|
25
27
|
}
|
|
26
28
|
/**
|
|
27
|
-
* Match against a simple value
|
|
29
|
+
* Match against a simple value. Tries each comparator in order:
|
|
30
|
+
* string → numeric → boolean. The first decisive result wins;
|
|
31
|
+
* `undefined` lets the next strategy run.
|
|
28
32
|
*/
|
|
29
|
-
function matchSimpleValue(constraint, actualValue) {
|
|
33
|
+
function matchSimpleValue(constraint, actualValue, caseInsensitive) {
|
|
30
34
|
const expected = constraint.value;
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
const actualNum = typeof actualValue === 'number' ? actualValue : parseFloat(actualStr);
|
|
41
|
-
if (!isNaN(expectedNum) && !isNaN(actualNum)) {
|
|
42
|
-
return Math.abs(expectedNum - actualNum) <= NUMERIC_TOLERANCE;
|
|
43
|
-
}
|
|
44
|
-
// Boolean comparison
|
|
45
|
-
if (typeof actualValue === 'boolean') {
|
|
46
|
-
const expectedLower = expected.toLowerCase();
|
|
47
|
-
if (expectedLower === 'true' || expectedLower === '1') {
|
|
48
|
-
return actualValue === true;
|
|
49
|
-
}
|
|
50
|
-
if (expectedLower === 'false' || expectedLower === '0') {
|
|
51
|
-
return actualValue === false;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
// Boolean string comparison
|
|
55
|
-
const actualLower = actualStr.toLowerCase();
|
|
56
|
-
const expectedLower = expected.toLowerCase();
|
|
57
|
-
if ((actualLower === 'true' || actualLower === 'false') &&
|
|
58
|
-
(expectedLower === 'true' || expectedLower === 'false')) {
|
|
59
|
-
return actualLower === expectedLower;
|
|
60
|
-
}
|
|
35
|
+
const stringResult = compareString(expected, actualValue, caseInsensitive);
|
|
36
|
+
if (stringResult !== undefined)
|
|
37
|
+
return stringResult;
|
|
38
|
+
const numericResult = compareNumeric(expected, actualValue);
|
|
39
|
+
if (numericResult !== undefined)
|
|
40
|
+
return numericResult;
|
|
41
|
+
const booleanResult = compareBoolean(expected, actualValue);
|
|
42
|
+
if (booleanResult !== undefined)
|
|
43
|
+
return booleanResult;
|
|
61
44
|
return false;
|
|
62
45
|
}
|
|
63
46
|
/**
|
|
64
47
|
* Match against a regex pattern
|
|
65
48
|
* IDS uses XSD regex syntax which is slightly different from JavaScript
|
|
66
49
|
*/
|
|
67
|
-
function matchPattern(constraint, actualValue) {
|
|
50
|
+
function matchPattern(constraint, actualValue, caseInsensitive = false) {
|
|
51
|
+
// Per IDS 1.0 spec patterns ONLY apply to string values. A pattern
|
|
52
|
+
// tested against a number / boolean fails outright — even if the
|
|
53
|
+
// textual representation would happen to match — so the validator
|
|
54
|
+
// can distinguish "wrong shape" from "wrong value".
|
|
55
|
+
if (typeof actualValue === 'number' || typeof actualValue === 'boolean') {
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
68
58
|
const actualStr = String(actualValue);
|
|
69
59
|
try {
|
|
70
60
|
// Convert XSD regex to JavaScript regex
|
|
71
61
|
const jsPattern = xsdToJsRegex(constraint.pattern);
|
|
72
|
-
// IDS patterns must match the entire string
|
|
73
|
-
|
|
62
|
+
// IDS patterns must match the entire string. Case-insensitive
|
|
63
|
+
// matching is opt-in per the call site (entity / predefined-type
|
|
64
|
+
// names use it; property and attribute values do not).
|
|
65
|
+
const flags = caseInsensitive ? 'i' : '';
|
|
66
|
+
const regex = new RegExp(`^${jsPattern}$`, flags);
|
|
74
67
|
return regex.test(actualStr);
|
|
75
68
|
}
|
|
76
69
|
catch {
|
|
@@ -93,24 +86,21 @@ function xsdToJsRegex(xsdPattern) {
|
|
|
93
86
|
.replace(/\[([^\]]+)-\[[^\]]+\]\]/g, '[$1]'));
|
|
94
87
|
}
|
|
95
88
|
/**
|
|
96
|
-
* Match against an enumeration
|
|
89
|
+
* Match against an enumeration. The actual value matches if ANY of the
|
|
90
|
+
* declared options matches under string / numeric / boolean comparison
|
|
91
|
+
* — same strategy table as `matchSimpleValue`, just iterated.
|
|
97
92
|
*/
|
|
98
|
-
function matchEnumeration(constraint, actualValue) {
|
|
99
|
-
const actualStr = String(actualValue);
|
|
100
|
-
const actualUpper = actualStr.toUpperCase();
|
|
93
|
+
function matchEnumeration(constraint, actualValue, caseInsensitive) {
|
|
101
94
|
return constraint.values.some((v) => {
|
|
102
|
-
|
|
103
|
-
if (
|
|
104
|
-
return
|
|
105
|
-
|
|
106
|
-
if (
|
|
107
|
-
return
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
if (!isNaN(vNum) && !isNaN(actualNum)) {
|
|
112
|
-
return Math.abs(vNum - actualNum) <= NUMERIC_TOLERANCE;
|
|
113
|
-
}
|
|
95
|
+
const stringResult = compareString(v, actualValue, caseInsensitive);
|
|
96
|
+
if (stringResult !== undefined)
|
|
97
|
+
return stringResult;
|
|
98
|
+
const numericResult = compareNumeric(v, actualValue);
|
|
99
|
+
if (numericResult !== undefined)
|
|
100
|
+
return numericResult;
|
|
101
|
+
const booleanResult = compareBoolean(v, actualValue);
|
|
102
|
+
if (booleanResult !== undefined)
|
|
103
|
+
return booleanResult;
|
|
114
104
|
return false;
|
|
115
105
|
});
|
|
116
106
|
}
|
|
@@ -118,17 +108,43 @@ function matchEnumeration(constraint, actualValue) {
|
|
|
118
108
|
* Match against numeric bounds
|
|
119
109
|
*/
|
|
120
110
|
function matchBounds(constraint, actualValue) {
|
|
111
|
+
// String-length facets (xs:length / xs:minLength / xs:maxLength)
|
|
112
|
+
// operate on the textual length, not on numeric magnitude. When any
|
|
113
|
+
// of them are present, evaluate the length constraints first.
|
|
114
|
+
if (constraint.length !== undefined ||
|
|
115
|
+
constraint.minLength !== undefined ||
|
|
116
|
+
constraint.maxLength !== undefined) {
|
|
117
|
+
const str = String(actualValue);
|
|
118
|
+
if (constraint.length !== undefined && str.length !== constraint.length) {
|
|
119
|
+
return false;
|
|
120
|
+
}
|
|
121
|
+
if (constraint.minLength !== undefined && str.length < constraint.minLength) {
|
|
122
|
+
return false;
|
|
123
|
+
}
|
|
124
|
+
if (constraint.maxLength !== undefined && str.length > constraint.maxLength) {
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
// Length-only restrictions don't impose numeric bounds; if the
|
|
128
|
+
// constraint also carries min/max we fall through to the numeric
|
|
129
|
+
// check below (rare in practice).
|
|
130
|
+
if (constraint.minInclusive === undefined &&
|
|
131
|
+
constraint.maxInclusive === undefined &&
|
|
132
|
+
constraint.minExclusive === undefined &&
|
|
133
|
+
constraint.maxExclusive === undefined) {
|
|
134
|
+
return true;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
121
137
|
const num = typeof actualValue === 'number'
|
|
122
138
|
? actualValue
|
|
123
139
|
: parseFloat(String(actualValue));
|
|
124
140
|
if (isNaN(num))
|
|
125
141
|
return false;
|
|
126
142
|
if (constraint.minInclusive !== undefined &&
|
|
127
|
-
num < constraint.minInclusive
|
|
143
|
+
num < constraint.minInclusive) {
|
|
128
144
|
return false;
|
|
129
145
|
}
|
|
130
146
|
if (constraint.maxInclusive !== undefined &&
|
|
131
|
-
num > constraint.maxInclusive
|
|
147
|
+
num > constraint.maxInclusive) {
|
|
132
148
|
return false;
|
|
133
149
|
}
|
|
134
150
|
if (constraint.minExclusive !== undefined && num <= constraint.minExclusive) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/constraints/index.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAc/D,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/constraints/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Returns true iff the IDS literal `value` casts successfully under at
|
|
3
|
+
* least one of `xsdTypes`. Empty / undefined `xsdTypes` returns `true`
|
|
4
|
+
* (no constraint). Unknown XSD types are accepted permissively so a
|
|
5
|
+
* future schema addition doesn't silently break validation.
|
|
6
|
+
*/
|
|
7
|
+
export declare function literalCastsUnderAnyType(value: string, xsdTypes: readonly string[] | undefined): boolean;
|
|
8
|
+
export declare function literalCastsUnder(value: string, xsdType: string): boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Map an IFC measure name (`IFCINTEGER`, `IFCREAL`, `IFCBOOLEAN`,
|
|
11
|
+
* `IFCDATE`, `IFCLENGTHMEASURE`, …) to the XSD primitive types it
|
|
12
|
+
* casts to. Used by the property facet to apply the same strict-cast
|
|
13
|
+
* gate to property literals — properties carry their measure name
|
|
14
|
+
* (not an XSD type) so we map first.
|
|
15
|
+
*
|
|
16
|
+
* Returns an empty array for measures we don't have a mapping for —
|
|
17
|
+
* `literalCastsUnderAnyType` then no-ops.
|
|
18
|
+
*/
|
|
19
|
+
export declare function ifcMeasureToXsdTypes(measure: string | undefined): readonly string[];
|
|
20
|
+
//# sourceMappingURL=xsd-cast.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xsd-cast.d.ts","sourceRoot":"","sources":["../../src/constraints/xsd-cast.ts"],"names":[],"mappings":"AAsBA;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,GACtC,OAAO,CAGT;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAoBzE;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,MAAM,EAAE,CAuBnF"}
|
|
@@ -0,0 +1,89 @@
|
|
|
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
|
+
/**
|
|
5
|
+
* XSD strict-cast helpers shared by the attribute and property facets.
|
|
6
|
+
*
|
|
7
|
+
* Mirrors the `int.TryParse` / `double.TryParse` / `DateTime.TryParse`
|
|
8
|
+
* rules upstream `IDS-Audit-tool` applies before doing the value
|
|
9
|
+
* comparison. An IDS literal must cast successfully under at least one
|
|
10
|
+
* of the slot's declared XSD types — `xs:integer` rejects `42.0`,
|
|
11
|
+
* `xs:double` accepts either, etc.
|
|
12
|
+
*/
|
|
13
|
+
const INTEGER_RE = /^[+-]?\d+$/;
|
|
14
|
+
const DOUBLE_RE = /^[+-]?(\d+\.?\d*|\.\d+)([eE][+-]?\d+)?$/;
|
|
15
|
+
const DATE_RE = /^\d{4}-\d{2}-\d{2}(Z|[+-]\d{2}:\d{2})?$/;
|
|
16
|
+
const DATETIME_RE = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?(Z|[+-]\d{2}:\d{2})?$/;
|
|
17
|
+
const DURATION_RE = /^-?P(?:\d+Y)?(?:\d+M)?(?:\d+D)?(?:T(?:\d+H)?(?:\d+M)?(?:\d+(?:\.\d+)?S)?)?$/;
|
|
18
|
+
/**
|
|
19
|
+
* Returns true iff the IDS literal `value` casts successfully under at
|
|
20
|
+
* least one of `xsdTypes`. Empty / undefined `xsdTypes` returns `true`
|
|
21
|
+
* (no constraint). Unknown XSD types are accepted permissively so a
|
|
22
|
+
* future schema addition doesn't silently break validation.
|
|
23
|
+
*/
|
|
24
|
+
export function literalCastsUnderAnyType(value, xsdTypes) {
|
|
25
|
+
if (!xsdTypes || xsdTypes.length === 0)
|
|
26
|
+
return true;
|
|
27
|
+
return xsdTypes.some((t) => literalCastsUnder(value, t));
|
|
28
|
+
}
|
|
29
|
+
export function literalCastsUnder(value, xsdType) {
|
|
30
|
+
switch (xsdType) {
|
|
31
|
+
case 'xs:integer':
|
|
32
|
+
return INTEGER_RE.test(value);
|
|
33
|
+
case 'xs:double':
|
|
34
|
+
return DOUBLE_RE.test(value);
|
|
35
|
+
case 'xs:boolean':
|
|
36
|
+
return value === 'true' || value === 'false';
|
|
37
|
+
case 'xs:date':
|
|
38
|
+
return DATE_RE.test(value);
|
|
39
|
+
case 'xs:dateTime':
|
|
40
|
+
return DATETIME_RE.test(value);
|
|
41
|
+
case 'xs:duration':
|
|
42
|
+
return DURATION_RE.test(value);
|
|
43
|
+
case 'xs:string':
|
|
44
|
+
return true;
|
|
45
|
+
default:
|
|
46
|
+
// Unknown XSD type — be permissive rather than reject.
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Map an IFC measure name (`IFCINTEGER`, `IFCREAL`, `IFCBOOLEAN`,
|
|
52
|
+
* `IFCDATE`, `IFCLENGTHMEASURE`, …) to the XSD primitive types it
|
|
53
|
+
* casts to. Used by the property facet to apply the same strict-cast
|
|
54
|
+
* gate to property literals — properties carry their measure name
|
|
55
|
+
* (not an XSD type) so we map first.
|
|
56
|
+
*
|
|
57
|
+
* Returns an empty array for measures we don't have a mapping for —
|
|
58
|
+
* `literalCastsUnderAnyType` then no-ops.
|
|
59
|
+
*/
|
|
60
|
+
export function ifcMeasureToXsdTypes(measure) {
|
|
61
|
+
if (!measure)
|
|
62
|
+
return [];
|
|
63
|
+
const m = measure.toUpperCase();
|
|
64
|
+
if (m === 'IFCINTEGER' || m === 'IFCCOUNTMEASURE')
|
|
65
|
+
return ['xs:integer'];
|
|
66
|
+
if (m === 'IFCBOOLEAN')
|
|
67
|
+
return ['xs:boolean'];
|
|
68
|
+
if (m === 'IFCLOGICAL')
|
|
69
|
+
return ['xs:boolean', 'xs:string'];
|
|
70
|
+
if (m === 'IFCDATE')
|
|
71
|
+
return ['xs:date'];
|
|
72
|
+
if (m === 'IFCDATETIME')
|
|
73
|
+
return ['xs:dateTime'];
|
|
74
|
+
if (m === 'IFCDURATION' || m === 'IFCTIMESTAMP')
|
|
75
|
+
return ['xs:duration'];
|
|
76
|
+
// All numeric measures (REAL, *MEASURE, *RATIO) accept doubles.
|
|
77
|
+
if (m === 'IFCREAL' || m.endsWith('MEASURE') || m.endsWith('RATIO')) {
|
|
78
|
+
return ['xs:double'];
|
|
79
|
+
}
|
|
80
|
+
// Any text-flavoured type defaults to permissive string.
|
|
81
|
+
if (m === 'IFCLABEL' ||
|
|
82
|
+
m === 'IFCTEXT' ||
|
|
83
|
+
m === 'IFCIDENTIFIER' ||
|
|
84
|
+
m === 'IFCSTRING') {
|
|
85
|
+
return ['xs:string'];
|
|
86
|
+
}
|
|
87
|
+
return [];
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=xsd-cast.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xsd-cast.js","sourceRoot":"","sources":["../../src/constraints/xsd-cast.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;;;GAQG;AAEH,MAAM,UAAU,GAAG,YAAY,CAAC;AAChC,MAAM,SAAS,GAAG,yCAAyC,CAAC;AAC5D,MAAM,OAAO,GAAG,yCAAyC,CAAC;AAC1D,MAAM,WAAW,GACf,mEAAmE,CAAC;AACtE,MAAM,WAAW,GACf,6EAA6E,CAAC;AAEhF;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CACtC,KAAa,EACb,QAAuC;IAEvC,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACpD,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAa,EAAE,OAAe;IAC9D,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,YAAY;YACf,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChC,KAAK,WAAW;YACd,OAAO,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/B,KAAK,YAAY;YACf,OAAO,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,OAAO,CAAC;QAC/C,KAAK,SAAS;YACZ,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7B,KAAK,aAAa;YAChB,OAAO,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,KAAK,aAAa;YAChB,OAAO,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,KAAK,WAAW;YACd,OAAO,IAAI,CAAC;QACd;YACE,uDAAuD;YACvD,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAA2B;IAC9D,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IACxB,MAAM,CAAC,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAChC,IAAI,CAAC,KAAK,YAAY,IAAI,CAAC,KAAK,iBAAiB;QAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IACzE,IAAI,CAAC,KAAK,YAAY;QAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAC9C,IAAI,CAAC,KAAK,YAAY;QAAE,OAAO,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;IAC3D,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK,aAAa;QAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IAChD,IAAI,CAAC,KAAK,aAAa,IAAI,CAAC,KAAK,cAAc;QAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IACxE,gEAAgE;IAChE,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACpE,OAAO,CAAC,WAAW,CAAC,CAAC;IACvB,CAAC;IACD,yDAAyD;IACzD,IACE,CAAC,KAAK,UAAU;QAChB,CAAC,KAAK,SAAS;QACf,CAAC,KAAK,eAAe;QACrB,CAAC,KAAK,WAAW,EACjB,CAAC;QACD,OAAO,CAAC,WAAW,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC"}
|
|
@@ -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;AAiBnD;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,iBAAiB,EACxB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,eAAe,GACxB,gBAAgB,CAsDlB"}
|
|
@@ -2,6 +2,9 @@
|
|
|
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
|
+
import { literalCastsUnderAnyType } from '../constraints/xsd-cast.js';
|
|
6
|
+
/** Attribute name matching is case-insensitive (IFC schema-defined names) */
|
|
7
|
+
const ATTR_NAME_OPTS = { caseInsensitive: true };
|
|
5
8
|
/** Standard IFC attributes that can be checked */
|
|
6
9
|
const STANDARD_ATTRIBUTES = [
|
|
7
10
|
'Name',
|
|
@@ -15,20 +18,26 @@ const STANDARD_ATTRIBUTES = [
|
|
|
15
18
|
* Check if an entity matches an attribute facet
|
|
16
19
|
*/
|
|
17
20
|
export function checkAttributeFacet(facet, expressId, accessor) {
|
|
18
|
-
// Get the attribute name to check
|
|
19
21
|
const attrNameConstraint = facet.name;
|
|
20
|
-
|
|
21
|
-
|
|
22
|
+
// Resolve which attribute name(s) to check
|
|
23
|
+
let attrNamesToCheck;
|
|
22
24
|
if (attrNameConstraint.type === 'simpleValue') {
|
|
23
|
-
|
|
25
|
+
attrNamesToCheck = [attrNameConstraint.value];
|
|
24
26
|
}
|
|
25
27
|
else {
|
|
26
|
-
// For patterns/enumerations,
|
|
27
|
-
//
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
// For patterns/enumerations, prefer the entity's own schema-defined
|
|
29
|
+
// attribute list (so e.g. `IfcMaterialLayerSet.LayerSetName` shows
|
|
30
|
+
// up for a `.*Name.*` pattern). Fall back to the small standard
|
|
31
|
+
// list when the accessor doesn't surface one.
|
|
32
|
+
const allNames = accessor.getAttributeNames?.(expressId);
|
|
33
|
+
const candidates = allNames && allNames.length > 0 ? allNames : STANDARD_ATTRIBUTES;
|
|
34
|
+
attrNamesToCheck = candidates.filter((a) => matchConstraint(attrNameConstraint, a, ATTR_NAME_OPTS));
|
|
35
|
+
if (attrNamesToCheck.length === 0) {
|
|
30
36
|
return {
|
|
31
37
|
passed: false,
|
|
38
|
+
expectedValue: facet.value
|
|
39
|
+
? formatConstraint(facet.value)
|
|
40
|
+
: `attribute matching ${formatConstraint(attrNameConstraint)} to exist`,
|
|
32
41
|
failure: {
|
|
33
42
|
type: 'ATTRIBUTE_MISSING',
|
|
34
43
|
field: formatConstraint(attrNameConstraint),
|
|
@@ -36,12 +45,33 @@ export function checkAttributeFacet(facet, expressId, accessor) {
|
|
|
36
45
|
},
|
|
37
46
|
};
|
|
38
47
|
}
|
|
39
|
-
attrName = matchingAttrs[0];
|
|
40
48
|
}
|
|
41
|
-
//
|
|
49
|
+
// Check each matching attribute; return on first pass, track most specific failure
|
|
50
|
+
let bestFailure;
|
|
51
|
+
for (const attrName of attrNamesToCheck) {
|
|
52
|
+
const result = checkSingleAttribute(facet, attrName, expressId, accessor);
|
|
53
|
+
if (result.passed) {
|
|
54
|
+
return result;
|
|
55
|
+
}
|
|
56
|
+
// Prefer value/pattern mismatch over attribute-missing (more specific)
|
|
57
|
+
if (!bestFailure ||
|
|
58
|
+
(result.failure?.type !== 'ATTRIBUTE_MISSING' && bestFailure.failure?.type === 'ATTRIBUTE_MISSING')) {
|
|
59
|
+
bestFailure = result;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// Return the most specific failure we found
|
|
63
|
+
return bestFailure;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Check a single attribute by name against the facet's value constraint
|
|
67
|
+
*/
|
|
68
|
+
function checkSingleAttribute(facet, attrName, expressId, accessor) {
|
|
42
69
|
const attrValue = getAttributeValue(attrName, expressId, accessor);
|
|
43
|
-
//
|
|
44
|
-
|
|
70
|
+
// Distinguish "slot truly absent" (undefined/null — IFC `$`) from
|
|
71
|
+
// "slot explicitly empty" (`''`). Per IDS spec the latter is a
|
|
72
|
+
// value mismatch, not a missing attribute, so optional facets won't
|
|
73
|
+
// give it a free pass.
|
|
74
|
+
if (attrValue === undefined || attrValue === null) {
|
|
45
75
|
return {
|
|
46
76
|
passed: false,
|
|
47
77
|
actualValue: undefined,
|
|
@@ -55,6 +85,21 @@ export function checkAttributeFacet(facet, expressId, accessor) {
|
|
|
55
85
|
},
|
|
56
86
|
};
|
|
57
87
|
}
|
|
88
|
+
if (attrValue === '') {
|
|
89
|
+
return {
|
|
90
|
+
passed: false,
|
|
91
|
+
actualValue: '(empty)',
|
|
92
|
+
expectedValue: facet.value
|
|
93
|
+
? formatConstraint(facet.value)
|
|
94
|
+
: `attribute "${attrName}" must have a non-empty value`,
|
|
95
|
+
failure: {
|
|
96
|
+
type: 'ATTRIBUTE_VALUE_MISMATCH',
|
|
97
|
+
field: attrName,
|
|
98
|
+
actual: '(empty)',
|
|
99
|
+
expected: facet.value ? formatConstraint(facet.value) : 'a non-empty value',
|
|
100
|
+
},
|
|
101
|
+
};
|
|
102
|
+
}
|
|
58
103
|
// If no value constraint, just check existence
|
|
59
104
|
if (!facet.value) {
|
|
60
105
|
return {
|
|
@@ -63,6 +108,29 @@ export function checkAttributeFacet(facet, expressId, accessor) {
|
|
|
63
108
|
expectedValue: `attribute "${attrName}" to exist`,
|
|
64
109
|
};
|
|
65
110
|
}
|
|
111
|
+
// Strict XSD-cast check: the IDS literal MUST cast successfully under
|
|
112
|
+
// at least one of the attribute's schema-declared XSD types. This
|
|
113
|
+
// rejects `42.0` against an `xs:integer`-only slot like
|
|
114
|
+
// `IfcStairFlight.NumberOfRisers`, even though the numbers compare
|
|
115
|
+
// equal. The accessor returns `undefined` when type info is missing,
|
|
116
|
+
// in which case we skip the gate and fall back to permissive
|
|
117
|
+
// comparison (back-compat for accessors that don't surface schema).
|
|
118
|
+
if (facet.value.type === 'simpleValue') {
|
|
119
|
+
const xsdTypes = accessor.getAttributeXsdTypes?.(expressId, attrName);
|
|
120
|
+
if (xsdTypes && !literalCastsUnderAnyType(facet.value.value, xsdTypes)) {
|
|
121
|
+
return {
|
|
122
|
+
passed: false,
|
|
123
|
+
actualValue: String(attrValue),
|
|
124
|
+
expectedValue: formatConstraint(facet.value),
|
|
125
|
+
failure: {
|
|
126
|
+
type: 'ATTRIBUTE_VALUE_MISMATCH',
|
|
127
|
+
field: attrName,
|
|
128
|
+
actual: String(attrValue),
|
|
129
|
+
expected: formatConstraint(facet.value),
|
|
130
|
+
},
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
}
|
|
66
134
|
// Check value constraint
|
|
67
135
|
if (!matchConstraint(facet.value, attrValue)) {
|
|
68
136
|
return {
|
|
@@ -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,CA+HlB;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"}
|