@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.
Files changed (124) hide show
  1. package/README.md +53 -44
  2. package/dist/audit/coherence/index.d.ts +12 -0
  3. package/dist/audit/coherence/index.d.ts.map +1 -0
  4. package/dist/audit/coherence/index.js +392 -0
  5. package/dist/audit/coherence/index.js.map +1 -0
  6. package/dist/audit/coherence/regex.d.ts +57 -0
  7. package/dist/audit/coherence/regex.d.ts.map +1 -0
  8. package/dist/audit/coherence/regex.js +111 -0
  9. package/dist/audit/coherence/regex.js.map +1 -0
  10. package/dist/audit/ifc-schema/index.d.ts +4 -0
  11. package/dist/audit/ifc-schema/index.d.ts.map +1 -0
  12. package/dist/audit/ifc-schema/index.js +637 -0
  13. package/dist/audit/ifc-schema/index.js.map +1 -0
  14. package/dist/audit/index.d.ts +37 -0
  15. package/dist/audit/index.d.ts.map +1 -0
  16. package/dist/audit/index.js +60 -0
  17. package/dist/audit/index.js.map +1 -0
  18. package/dist/audit/parser-shim.d.ts +13 -0
  19. package/dist/audit/parser-shim.d.ts.map +1 -0
  20. package/dist/audit/parser-shim.js +66 -0
  21. package/dist/audit/parser-shim.js.map +1 -0
  22. package/dist/audit/structural/index.d.ts +22 -0
  23. package/dist/audit/structural/index.d.ts.map +1 -0
  24. package/dist/audit/structural/index.js +441 -0
  25. package/dist/audit/structural/index.js.map +1 -0
  26. package/dist/audit/types.d.ts +91 -0
  27. package/dist/audit/types.d.ts.map +1 -0
  28. package/dist/audit/types.js +5 -0
  29. package/dist/audit/types.js.map +1 -0
  30. package/dist/audit/xsd/index.d.ts +13 -0
  31. package/dist/audit/xsd/index.d.ts.map +1 -0
  32. package/dist/audit/xsd/index.js +203 -0
  33. package/dist/audit/xsd/index.js.map +1 -0
  34. package/dist/bridge/classifications.d.ts +15 -0
  35. package/dist/bridge/classifications.d.ts.map +1 -0
  36. package/dist/bridge/classifications.js +114 -0
  37. package/dist/bridge/classifications.js.map +1 -0
  38. package/dist/bridge/data-accessor.d.ts +16 -0
  39. package/dist/bridge/data-accessor.d.ts.map +1 -0
  40. package/dist/bridge/data-accessor.js +205 -0
  41. package/dist/bridge/data-accessor.js.map +1 -0
  42. package/dist/bridge/data-types.d.ts +11 -0
  43. package/dist/bridge/data-types.d.ts.map +1 -0
  44. package/dist/bridge/data-types.js +47 -0
  45. package/dist/bridge/data-types.js.map +1 -0
  46. package/dist/bridge/index.d.ts +17 -0
  47. package/dist/bridge/index.d.ts.map +1 -0
  48. package/dist/bridge/index.js +20 -0
  49. package/dist/bridge/index.js.map +1 -0
  50. package/dist/bridge/materials.d.ts +11 -0
  51. package/dist/bridge/materials.d.ts.map +1 -0
  52. package/dist/bridge/materials.js +68 -0
  53. package/dist/bridge/materials.js.map +1 -0
  54. package/dist/bridge/predefined-types.d.ts +19 -0
  55. package/dist/bridge/predefined-types.d.ts.map +1 -0
  56. package/dist/bridge/predefined-types.js +84 -0
  57. package/dist/bridge/predefined-types.js.map +1 -0
  58. package/dist/bridge/properties.d.ts +20 -0
  59. package/dist/bridge/properties.d.ts.map +1 -0
  60. package/dist/bridge/properties.js +168 -0
  61. package/dist/bridge/properties.js.map +1 -0
  62. package/dist/bridge/schema-version.d.ts +10 -0
  63. package/dist/bridge/schema-version.d.ts.map +1 -0
  64. package/dist/bridge/schema-version.js +25 -0
  65. package/dist/bridge/schema-version.js.map +1 -0
  66. package/dist/bridge/units.d.ts +18 -0
  67. package/dist/bridge/units.d.ts.map +1 -0
  68. package/dist/bridge/units.js +55 -0
  69. package/dist/bridge/units.js.map +1 -0
  70. package/dist/constraints/comparators.d.ts +32 -0
  71. package/dist/constraints/comparators.d.ts.map +1 -0
  72. package/dist/constraints/comparators.js +94 -0
  73. package/dist/constraints/comparators.js.map +1 -0
  74. package/dist/constraints/index.d.ts +11 -1
  75. package/dist/constraints/index.d.ts.map +1 -1
  76. package/dist/constraints/index.js +74 -58
  77. package/dist/constraints/index.js.map +1 -1
  78. package/dist/constraints/xsd-cast.d.ts +20 -0
  79. package/dist/constraints/xsd-cast.d.ts.map +1 -0
  80. package/dist/constraints/xsd-cast.js +89 -0
  81. package/dist/constraints/xsd-cast.js.map +1 -0
  82. package/dist/facets/attribute-facet.d.ts.map +1 -1
  83. package/dist/facets/attribute-facet.js +80 -12
  84. package/dist/facets/attribute-facet.js.map +1 -1
  85. package/dist/facets/classification-facet.d.ts.map +1 -1
  86. package/dist/facets/classification-facet.js +21 -2
  87. package/dist/facets/classification-facet.js.map +1 -1
  88. package/dist/facets/entity-facet.d.ts.map +1 -1
  89. package/dist/facets/entity-facet.js +59 -7
  90. package/dist/facets/entity-facet.js.map +1 -1
  91. package/dist/facets/partof-facet.d.ts.map +1 -1
  92. package/dist/facets/partof-facet.js +40 -8
  93. package/dist/facets/partof-facet.js.map +1 -1
  94. package/dist/facets/property-facet.d.ts.map +1 -1
  95. package/dist/facets/property-facet.js +171 -55
  96. package/dist/facets/property-facet.js.map +1 -1
  97. package/dist/facets/test-helpers.d.ts +42 -0
  98. package/dist/facets/test-helpers.d.ts.map +1 -0
  99. package/dist/facets/test-helpers.js +106 -0
  100. package/dist/facets/test-helpers.js.map +1 -0
  101. package/dist/index.d.ts +2 -0
  102. package/dist/index.d.ts.map +1 -1
  103. package/dist/index.js +4 -0
  104. package/dist/index.js.map +1 -1
  105. package/dist/parser/xml-parser.d.ts.map +1 -1
  106. package/dist/parser/xml-parser.js +198 -68
  107. package/dist/parser/xml-parser.js.map +1 -1
  108. package/dist/translation/locales/de.d.ts +1 -0
  109. package/dist/translation/locales/de.d.ts.map +1 -1
  110. package/dist/translation/locales/de.js +1 -0
  111. package/dist/translation/locales/de.js.map +1 -1
  112. package/dist/translation/locales/en.d.ts +1 -0
  113. package/dist/translation/locales/en.d.ts.map +1 -1
  114. package/dist/translation/locales/en.js +1 -0
  115. package/dist/translation/locales/en.js.map +1 -1
  116. package/dist/translation/locales/fr.d.ts +1 -0
  117. package/dist/translation/locales/fr.d.ts.map +1 -1
  118. package/dist/translation/locales/fr.js +1 -0
  119. package/dist/translation/locales/fr.js.map +1 -1
  120. package/dist/types.d.ts +116 -7
  121. package/dist/types.d.ts.map +1 -1
  122. package/dist/validation/validator.js +49 -3
  123. package/dist/validation/validator.js.map +1 -1
  124. package/package.json +10 -3
@@ -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,26 @@ export function checkEntityFacet(facet, expressId, accessor) {
20
22
  },
21
23
  };
22
24
  }
23
- // Check entity type
24
- if (!matchConstraint(facet.name, entityType)) {
25
+ // Per IDS 1.0 spec, entity-name simpleValue literals MUST be
26
+ // uppercase (`IFCWALL`, not `IfcWall`). Reject malformed authoring
27
+ // outright before attempting the case-insensitive comparison —
28
+ // otherwise mixed-case literals would silently match.
29
+ if (facet.name.type === 'simpleValue' &&
30
+ facet.name.value !== facet.name.value.toUpperCase()) {
31
+ return {
32
+ passed: false,
33
+ actualValue: entityType,
34
+ expectedValue: formatConstraint(facet.name),
35
+ failure: {
36
+ type: 'ENTITY_TYPE_MISMATCH',
37
+ field: 'entityType',
38
+ actual: entityType,
39
+ expected: formatConstraint(facet.name),
40
+ },
41
+ };
42
+ }
43
+ // Check entity type (case-insensitive per IDS spec — IFC entity names are case-agnostic)
44
+ if (!matchConstraint(facet.name, entityType, IFC_CASE_INSENSITIVE)) {
25
45
  return {
26
46
  passed: false,
27
47
  actualValue: entityType,
@@ -36,8 +56,18 @@ export function checkEntityFacet(facet, expressId, accessor) {
36
56
  }
37
57
  // Check predefined type if specified
38
58
  if (facet.predefinedType) {
39
- const objectType = accessor.getObjectType(expressId);
40
- if (!objectType) {
59
+ // Per IDS spec, predefined-type matching has two distinct paths:
60
+ // 1. Compare against the raw IFC `PredefinedType` enum token
61
+ // (BEAM, USERDEFINED, NOTDEFINED, …) — case-insensitive.
62
+ // 2. When the raw token is `USERDEFINED`, fall back to the
63
+ // user-defined name (`ObjectType`/`ElementType`/`ProcessType`)
64
+ // — case-sensitive.
65
+ // The order matters: a fixture asking for `USERDEFINED` literally
66
+ // must match an entity whose enum is `USERDEFINED` regardless of
67
+ // its accompanying user-defined name.
68
+ const rawType = accessor.getPredefinedTypeRaw?.(expressId);
69
+ const userDefinedType = accessor.getObjectType(expressId);
70
+ if (!rawType && !userDefinedType) {
41
71
  return {
42
72
  passed: false,
43
73
  actualValue: entityType,
@@ -49,15 +79,37 @@ export function checkEntityFacet(facet, expressId, accessor) {
49
79
  },
50
80
  };
51
81
  }
52
- if (!matchConstraint(facet.predefinedType, objectType)) {
82
+ let matched = false;
83
+ // Predefined-type enum tokens (BEAM, USERDEFINED, …) MUST be
84
+ // uppercase per the IFC schema, and the IDS literal MUST match
85
+ // exactly. Case-sensitive comparison is the spec.
86
+ if (rawType && matchConstraint(facet.predefinedType, rawType)) {
87
+ matched = true;
88
+ }
89
+ else if (rawType === 'USERDEFINED' &&
90
+ userDefinedType &&
91
+ userDefinedType !== rawType &&
92
+ matchConstraint(facet.predefinedType, userDefinedType)) {
93
+ // Case-sensitive comparison for user-defined names.
94
+ matched = true;
95
+ }
96
+ else if (!rawType &&
97
+ userDefinedType &&
98
+ matchConstraint(facet.predefinedType, userDefinedType)) {
99
+ // No raw enum reported (legacy accessor) — case-sensitive match
100
+ // against the substituted form.
101
+ matched = true;
102
+ }
103
+ if (!matched) {
104
+ const display = userDefinedType || rawType || '(none)';
53
105
  return {
54
106
  passed: false,
55
- actualValue: `${entityType}[${objectType}]`,
107
+ actualValue: `${entityType}[${display}]`,
56
108
  expectedValue: `${formatConstraint(facet.name)} with predefinedType ${formatConstraint(facet.predefinedType)}`,
57
109
  failure: {
58
110
  type: 'PREDEFINED_TYPE_MISMATCH',
59
111
  field: 'predefinedType',
60
- actual: objectType,
112
+ actual: display,
61
113
  expected: formatConstraint(facet.predefinedType),
62
114
  },
63
115
  };
@@ -1 +1 @@
1
- {"version":3,"file":"entity-facet.js","sourceRoot":"","sources":["../../src/facets/entity-facet.ts"],"names":[],"mappings":"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"}
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;AAYnD;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,cAAc,EACrB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,eAAe,GACxB,gBAAgB,CAyGlB"}
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,EAGhB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAgBnD;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,cAAc,EACrB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,eAAe,GACxB,gBAAgB,CAoDlB"}
@@ -2,9 +2,12 @@
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',
10
+ IfcRelAssignsToGroup: 'grouped in',
8
11
  IfcRelContainedInSpatialStructure: 'contained in',
9
12
  IfcRelNests: 'nested in',
10
13
  IfcRelVoidsElement: 'voiding',
@@ -14,9 +17,20 @@ const RELATION_NAMES = {
14
17
  * Check if an entity matches a partOf facet
15
18
  */
16
19
  export function checkPartOfFacet(facet, expressId, accessor) {
17
- // Get parent via the specified relationship
18
- const parent = accessor.getParent(expressId, facet.relation);
19
- if (!parent) {
20
+ // Per IDS spec, partOf is transitive — a wall contained in a storey
21
+ // in a building IS partOf the building. Walk every ancestor and
22
+ // pass if ANY matches the requirement entity. Fall back to single-
23
+ // step `getParent` when the accessor doesn't expose ancestor
24
+ // traversal.
25
+ const ancestors = accessor.getAncestors
26
+ ? accessor.getAncestors(expressId, facet.relation)
27
+ : [];
28
+ if (ancestors.length === 0) {
29
+ const direct = accessor.getParent(expressId, facet.relation);
30
+ if (direct)
31
+ ancestors.push(direct);
32
+ }
33
+ if (ancestors.length === 0) {
20
34
  const relationName = RELATION_NAMES[facet.relation] || facet.relation;
21
35
  const expectedEntity = facet.entity
22
36
  ? formatConstraint(facet.entity.name)
@@ -35,6 +49,24 @@ export function checkPartOfFacet(facet, expressId, accessor) {
35
49
  },
36
50
  };
37
51
  }
52
+ // Try each ancestor against the requirement; pass on the first
53
+ // match. Track the most-specific failure so a partial match (right
54
+ // entity, wrong predefinedType, say) is reported instead of the
55
+ // generic "no match" form.
56
+ let bestFailure;
57
+ for (const parent of ancestors) {
58
+ const result = checkAncestorAgainstFacet(facet, parent);
59
+ if (result.passed)
60
+ return result;
61
+ if (!bestFailure ||
62
+ (result.failure?.type !== 'PARTOF_ENTITY_MISMATCH' &&
63
+ bestFailure.failure?.type === 'PARTOF_ENTITY_MISMATCH')) {
64
+ bestFailure = result;
65
+ }
66
+ }
67
+ return bestFailure;
68
+ }
69
+ function checkAncestorAgainstFacet(facet, parent) {
38
70
  // If no entity constraint, just check if relationship exists
39
71
  if (!facet.entity) {
40
72
  const relationName = RELATION_NAMES[facet.relation] || facet.relation;
@@ -44,8 +76,8 @@ export function checkPartOfFacet(facet, expressId, accessor) {
44
76
  expectedValue: `${relationName} any entity`,
45
77
  };
46
78
  }
47
- // Check parent entity type
48
- if (!matchConstraint(facet.entity.name, parent.entityType)) {
79
+ // Check parent entity type (case-insensitive for IFC entity names)
80
+ if (!matchConstraint(facet.entity.name, parent.entityType, IFC_CASE_INSENSITIVE)) {
49
81
  const relationName = RELATION_NAMES[facet.relation] || facet.relation;
50
82
  return {
51
83
  passed: false,
@@ -71,7 +103,7 @@ export function checkPartOfFacet(facet, expressId, accessor) {
71
103
  actualValue: `${parent.entityType} (no predefinedType)`,
72
104
  expectedValue: `${formatConstraint(facet.entity.name)} with predefinedType ${formatConstraint(facet.entity.predefinedType)}`,
73
105
  failure: {
74
- type: 'PARTOF_ENTITY_MISMATCH',
106
+ type: 'PARTOF_PREDEFINED_TYPE_MISSING',
75
107
  field: 'predefinedType',
76
108
  expected: formatConstraint(facet.entity.predefinedType),
77
109
  context: {
@@ -81,13 +113,13 @@ export function checkPartOfFacet(facet, expressId, accessor) {
81
113
  },
82
114
  };
83
115
  }
84
- if (!matchConstraint(facet.entity.predefinedType, parent.predefinedType)) {
116
+ if (!matchConstraint(facet.entity.predefinedType, parent.predefinedType, IFC_CASE_INSENSITIVE)) {
85
117
  return {
86
118
  passed: false,
87
119
  actualValue: `${parent.entityType}[${parent.predefinedType}]`,
88
120
  expectedValue: `${formatConstraint(facet.entity.name)}[${formatConstraint(facet.entity.predefinedType)}]`,
89
121
  failure: {
90
- type: 'PARTOF_ENTITY_MISMATCH',
122
+ type: 'PARTOF_PREDEFINED_TYPE_MISMATCH',
91
123
  field: 'predefinedType',
92
124
  actual: parent.predefinedType,
93
125
  expected: formatConstraint(facet.entity.predefinedType),
@@ -1 +1 @@
1
- {"version":3,"file":"partof-facet.js","sourceRoot":"","sources":["../../src/facets/partof-facet.ts"],"names":[],"mappings":"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"}
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;AAGnD;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,gBAAgB,EACvB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,eAAe,GACxB,gBAAgB,CAiElB"}
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;AAOnD;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,gBAAgB,EACvB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,eAAe,GACxB,gBAAgB,CAmGlB"}
@@ -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 { ifcMeasureToXsdTypes, literalCastsUnderAnyType } from '../constraints/xsd-cast.js';
6
+ /** IFC data type names (IFCLABEL, IFCREAL, etc.) are case-insensitive */
7
+ const DATATYPE_OPTS = { caseInsensitive: true };
5
8
  /**
6
9
  * Check if an entity matches a property facet
7
10
  */
@@ -36,12 +39,45 @@ export function checkPropertyFacet(facet, expressId, accessor) {
36
39
  },
37
40
  };
38
41
  }
39
- // Check each matching property set for the property
42
+ // Per IDS spec, when the property-set baseName matches multiple sets
43
+ // (pattern / enumeration cases), ALL of them must satisfy the
44
+ // requirement. A single-set match collapses to the same iteration
45
+ // with one element, so the semantics are uniform.
46
+ let lastPass;
47
+ let firstFailure;
40
48
  for (const pset of matchingPsets) {
41
49
  const result = checkPropertyInPset(facet, pset);
42
50
  if (result.passed) {
43
- return result;
51
+ lastPass = result;
52
+ continue;
44
53
  }
54
+ if (!firstFailure) {
55
+ firstFailure = result;
56
+ }
57
+ else if (firstFailure.failure?.type === 'PROPERTY_MISSING' &&
58
+ result.failure?.type !== 'PROPERTY_MISSING') {
59
+ // Prefer the more specific failure for reporting.
60
+ firstFailure = result;
61
+ }
62
+ }
63
+ if (firstFailure) {
64
+ if (firstFailure.failure?.type !== 'PROPERTY_MISSING') {
65
+ return firstFailure;
66
+ }
67
+ // Only PROPERTY_MISSING failures with no passing pset → fall
68
+ // through to the generic missing-property error below so the
69
+ // available-property list reflects every pset we checked.
70
+ if (!lastPass) {
71
+ // proceed to PROPERTY_MISSING fallthrough below
72
+ }
73
+ else {
74
+ // Some psets passed and some are missing the property —
75
+ // iteration must report the missing-pset failure.
76
+ return firstFailure;
77
+ }
78
+ }
79
+ else if (lastPass) {
80
+ return lastPass;
45
81
  }
46
82
  // Property not found in any matching pset
47
83
  const psetNames = matchingPsets.map((p) => p.name).join(', ');
@@ -64,7 +100,9 @@ export function checkPropertyFacet(facet, expressId, accessor) {
64
100
  };
65
101
  }
66
102
  /**
67
- * Check a property within a specific property set
103
+ * Check a property within a specific property set.
104
+ * Tries ALL matching properties and returns on first pass.
105
+ * If none pass, returns the most specific failure.
68
106
  */
69
107
  function checkPropertyInPset(facet, pset) {
70
108
  // Find matching properties
@@ -83,51 +121,113 @@ function checkPropertyInPset(facet, pset) {
83
121
  },
84
122
  };
85
123
  }
86
- // Check each matching property
124
+ // Per IDS spec: when the baseName constraint matches multiple
125
+ // properties (pattern / enumeration cases), ALL of them must satisfy
126
+ // the value constraint — not just one. Iterate every matching
127
+ // property and only report `pass` if every check passes.
128
+ let lastPass;
129
+ let firstFailure;
87
130
  for (const prop of matchingProps) {
88
- // Check data type if specified
89
- if (facet.dataType) {
90
- if (!matchConstraint(facet.dataType, prop.dataType)) {
91
- return {
92
- passed: false,
93
- actualValue: `${pset.name}.${prop.name} (${prop.dataType})`,
94
- expectedValue: `dataType ${formatConstraint(facet.dataType)}`,
95
- failure: {
96
- type: 'PROPERTY_DATATYPE_MISMATCH',
97
- field: `${pset.name}.${prop.name}`,
98
- actual: prop.dataType,
99
- expected: formatConstraint(facet.dataType),
100
- },
101
- };
102
- }
131
+ const result = checkSingleProperty(facet, pset, prop);
132
+ if (result.passed) {
133
+ lastPass = result;
134
+ continue;
103
135
  }
104
- // Check value if specified
105
- if (facet.value) {
106
- const propValue = prop.value;
107
- if (propValue === null || propValue === undefined) {
108
- return {
109
- passed: false,
110
- actualValue: '(empty)',
111
- expectedValue: formatConstraint(facet.value),
112
- failure: {
113
- type: 'PROPERTY_VALUE_MISMATCH',
114
- field: `${pset.name}.${prop.name}`,
115
- actual: '(empty)',
116
- expected: formatConstraint(facet.value),
117
- },
118
- };
119
- }
120
- if (!matchConstraint(facet.value, propValue)) {
121
- // Check if it's a bounds violation
122
- const failureType = facet.value.type === 'bounds'
123
- ? 'PROPERTY_OUT_OF_BOUNDS'
124
- : 'PROPERTY_VALUE_MISMATCH';
136
+ if (!firstFailure) {
137
+ firstFailure = result;
138
+ }
139
+ else if (firstFailure.failure?.type === 'PROPERTY_MISSING' &&
140
+ result.failure?.type !== 'PROPERTY_MISSING') {
141
+ // Prefer the more specific failure when reporting back.
142
+ firstFailure = result;
143
+ }
144
+ }
145
+ if (firstFailure)
146
+ return firstFailure;
147
+ return lastPass;
148
+ }
149
+ /**
150
+ * Check a single property against the facet's dataType and value constraints.
151
+ */
152
+ function checkSingleProperty(facet, pset, prop) {
153
+ // Per IDS spec, a property whose stored value is "no value" (null,
154
+ // undefined, empty string, or IfcLogical UNKNOWN) fails ANY check —
155
+ // including a name-only existence check. Detect those up front so
156
+ // the rest of the function can assume `prop.value` is meaningful.
157
+ if (prop.value === null ||
158
+ prop.value === undefined ||
159
+ prop.value === '') {
160
+ return {
161
+ passed: false,
162
+ actualValue: '(empty)',
163
+ expectedValue: facet.value
164
+ ? formatConstraint(facet.value)
165
+ : `property "${pset.name}.${prop.name}" must have a value`,
166
+ failure: {
167
+ type: 'PROPERTY_VALUE_MISMATCH',
168
+ field: `${pset.name}.${prop.name}`,
169
+ actual: '(empty)',
170
+ expected: facet.value ? formatConstraint(facet.value) : 'a non-empty value',
171
+ },
172
+ };
173
+ }
174
+ // Check data type if specified (IFC type names are case-insensitive).
175
+ // Skip the gate when the property carries no `dataType` AT ALL — for
176
+ // multi-typed table values (`IfcPropertyTableValue`) we deliberately
177
+ // omit a single representative type so the value match against the
178
+ // expanded `values[]` array can still satisfy the requirement.
179
+ if (facet.dataType && prop.dataType) {
180
+ if (!matchConstraint(facet.dataType, prop.dataType, DATATYPE_OPTS)) {
181
+ return {
182
+ passed: false,
183
+ actualValue: `${pset.name}.${prop.name} (${prop.dataType})`,
184
+ expectedValue: `dataType ${formatConstraint(facet.dataType)}`,
185
+ failure: {
186
+ type: 'PROPERTY_DATATYPE_MISMATCH',
187
+ field: `${pset.name}.${prop.name}`,
188
+ actual: prop.dataType,
189
+ expected: formatConstraint(facet.dataType),
190
+ },
191
+ };
192
+ }
193
+ }
194
+ // Check value if specified
195
+ if (facet.value) {
196
+ const propValue = prop.value;
197
+ if (propValue === null ||
198
+ propValue === undefined ||
199
+ // Per IDS spec: empty strings and IfcLogical UNKNOWN values are
200
+ // treated as "no value" — they fail any value check, including
201
+ // a name-only check that the property exists with a value.
202
+ propValue === '') {
203
+ return {
204
+ passed: false,
205
+ actualValue: '(empty)',
206
+ expectedValue: formatConstraint(facet.value),
207
+ failure: {
208
+ type: 'PROPERTY_VALUE_MISMATCH',
209
+ field: `${pset.name}.${prop.name}`,
210
+ actual: '(empty)',
211
+ expected: formatConstraint(facet.value),
212
+ },
213
+ };
214
+ }
215
+ // Strict XSD-cast gate: the IDS literal MUST cast successfully
216
+ // under at least one of the IFC measure's XSD types. Mirrors the
217
+ // attribute facet's check — an `IFCINTEGER` slot rejects `42.0`,
218
+ // an `IFCBOOLEAN` slot rejects numeric literals, etc. The shared
219
+ // `ifcMeasureToXsdTypes` mapping turns the parser-side measure
220
+ // name into the XSD types the cast helper understands.
221
+ if (facet.value.type === 'simpleValue') {
222
+ const xsdTypes = ifcMeasureToXsdTypes(prop.dataType);
223
+ if (xsdTypes.length > 0 &&
224
+ !literalCastsUnderAnyType(facet.value.value, xsdTypes)) {
125
225
  return {
126
226
  passed: false,
127
227
  actualValue: String(propValue),
128
228
  expectedValue: formatConstraint(facet.value),
129
229
  failure: {
130
- type: failureType,
230
+ type: 'PROPERTY_VALUE_MISMATCH',
131
231
  field: `${pset.name}.${prop.name}`,
132
232
  actual: String(propValue),
133
233
  expected: formatConstraint(facet.value),
@@ -135,22 +235,38 @@ function checkPropertyInPset(facet, pset) {
135
235
  };
136
236
  }
137
237
  }
138
- // Property passed all checks
139
- return {
140
- passed: true,
141
- actualValue: `${pset.name}.${prop.name} = ${prop.value}`,
142
- expectedValue: facet.value
143
- ? formatConstraint(facet.value)
144
- : 'property exists',
145
- };
238
+ // Multi-valued IFC properties (IfcPropertyEnumeratedValue,
239
+ // IfcPropertyListValue) pass if ANY individual value satisfies the
240
+ // constraint, per upstream ifctester semantics.
241
+ const candidateValues = prop.values && prop.values.length > 0 ? prop.values : [propValue];
242
+ const anyMatch = candidateValues.some((v) => matchConstraint(facet.value, v));
243
+ if (!anyMatch) {
244
+ const failureType = facet.value.type === 'bounds'
245
+ ? 'PROPERTY_OUT_OF_BOUNDS'
246
+ : 'PROPERTY_VALUE_MISMATCH';
247
+ const actualDisplay = prop.values && prop.values.length > 0
248
+ ? prop.values.join(', ')
249
+ : String(propValue);
250
+ return {
251
+ passed: false,
252
+ actualValue: actualDisplay,
253
+ expectedValue: formatConstraint(facet.value),
254
+ failure: {
255
+ type: failureType,
256
+ field: `${pset.name}.${prop.name}`,
257
+ actual: actualDisplay,
258
+ expected: formatConstraint(facet.value),
259
+ },
260
+ };
261
+ }
146
262
  }
147
- // Should not reach here
263
+ // Property passed all checks
148
264
  return {
149
- passed: false,
150
- failure: {
151
- type: 'PROPERTY_MISSING',
152
- field: formatConstraint(facet.baseName),
153
- },
265
+ passed: true,
266
+ actualValue: `${pset.name}.${prop.name} = ${prop.value}`,
267
+ expectedValue: facet.value
268
+ ? formatConstraint(facet.value)
269
+ : 'property exists',
154
270
  };
155
271
  }
156
272
  //# sourceMappingURL=property-facet.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"property-facet.js","sourceRoot":"","sources":["../../src/facets/property-facet.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"property-facet.js","sourceRoot":"","sources":["../../src/facets/property-facet.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Shared test helpers for facet tests
3
+ */
4
+ import type { IFCDataAccessor } from '../types.js';
5
+ interface MockEntity {
6
+ expressId: number;
7
+ type: string;
8
+ name?: string;
9
+ globalId?: string;
10
+ description?: string;
11
+ objectType?: string;
12
+ properties?: Array<{
13
+ psetName: string;
14
+ propName: string;
15
+ value: string | number | boolean | null;
16
+ dataType?: string;
17
+ }>;
18
+ classifications?: Array<{
19
+ system?: string;
20
+ value?: string;
21
+ }>;
22
+ materials?: Array<{
23
+ name: string;
24
+ category?: string;
25
+ }>;
26
+ parent?: {
27
+ expressId?: number;
28
+ type: string;
29
+ relation: string;
30
+ predefinedType?: string;
31
+ };
32
+ attributes?: Record<string, string | number | boolean>;
33
+ /**
34
+ * Optional per-attribute XSD-type metadata, mirroring the schema
35
+ * lookup the production accessor performs via `getAttributeXsdTypes`.
36
+ * Lets attribute-facet tests exercise the strict-cast gate.
37
+ */
38
+ attributeXsdTypes?: Record<string, readonly string[]>;
39
+ }
40
+ export declare function createMockAccessor(entities: MockEntity[]): IFCDataAccessor;
41
+ export {};
42
+ //# sourceMappingURL=test-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-helpers.d.ts","sourceRoot":"","sources":["../../src/facets/test-helpers.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EACV,eAAe,EAOhB,MAAM,aAAa,CAAC;AAErB,UAAU,UAAU;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,KAAK,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;QACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC,CAAC;IACH,eAAe,CAAC,EAAE,KAAK,CAAC;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7D,SAAS,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvD,MAAM,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACzF,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;IACvD;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;CACvD;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,eAAe,CA6G1E"}