@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/audit/structural/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Public types for IDS document auditing.
3
+ *
4
+ * The auditor inspects an IDS document for authoring issues — invalid XML,
5
+ * missing required attributes, IFC entities or property sets that don't
6
+ * exist for the declared IFC version, malformed restrictions, etc.
7
+ *
8
+ * This is distinct from `IDSValidationReport` (which describes how an IFC
9
+ * model conforms to a valid IDS).
10
+ */
11
+ import type { FacetType, IDSDocument, IFCVersion } from '../types.js';
12
+ /** Severity buckets for audit issues. */
13
+ export type IDSAuditSeverity = 'error' | 'warning' | 'info';
14
+ /**
15
+ * Stable string-literal codes for every audit issue the library can raise.
16
+ *
17
+ * Codes are grouped by source: `E_PARSE_*` (parser shim), `E_XSD_*` /
18
+ * `W_XSD_*` (XSD-level checks), `E_IFC_*` / `W_IFC_*` (IFC schema cross-
19
+ * checks), `E_RESTRICTION_*` / `W_REGEX_*` / `E_CARDINALITY_*` /
20
+ * `W_CARDINALITY_*` (coherence checks).
21
+ *
22
+ * Stable across minor versions — additions are backwards-compatible.
23
+ */
24
+ export type IDSAuditCode = 'E_PARSE_XML' | 'E_PARSE_ROOT' | 'E_PARSE_FACET' | 'E_PARSE_UNKNOWN' | 'E_XSD_REQUIRED_ATTR' | 'E_XSD_ENUM' | 'E_XSD_PATTERN' | 'E_XSD_STRUCTURE' | 'E_XSD_SCHEMA_LOCATION' | 'W_XSD_DEPRECATED' | 'E_IFC_ENTITY_UNKNOWN' | 'E_IFC_PREDEF_TYPE_INVALID' | 'E_IFC_PSET_UNKNOWN' | 'W_IFC_PSET_RESERVED_PREFIX' | 'E_IFC_PROP_NOT_IN_PSET' | 'W_IFC_DATATYPE_MISMATCH' | 'E_IFC_ATTR_UNKNOWN_FOR_ENTITY' | 'E_IFC_PARTOF_RELATION' | 'E_IFC_PARTOF_ENTITY' | 'E_RESTRICTION_EMPTY' | 'E_RESTRICTION_RANGE' | 'E_RESTRICTION_BASE_MISMATCH' | 'E_RESTRICTION_VALUE_MISMATCH' | 'W_REGEX_UNVERIFIED' | 'E_CARDINALITY_INVALID' | 'W_CARDINALITY_PROHIBITED_APPLICABILITY' | 'E_IFC_DATATYPE_UNKNOWN';
25
+ /** A single audit finding. */
26
+ export interface IDSAuditIssue {
27
+ /** Severity bucket. `error` issues fail the audit; `warning`/`info` do not. */
28
+ severity: IDSAuditSeverity;
29
+ /** Stable string-literal code for programmatic dispatch. */
30
+ code: IDSAuditCode;
31
+ /** Human-readable message. Localised via the translator if one is provided. */
32
+ message: string;
33
+ /** XPath-ish path into the document (e.g., `specifications[0].applicability.facets[1]`). */
34
+ path: string;
35
+ /**
36
+ * Optional 1-based source line of the offending node, when the parser
37
+ * exposes it. Present mainly for `E_PARSE_*` issues.
38
+ */
39
+ line?: number;
40
+ /** Optional 1-based source column for the offending node. */
41
+ column?: number;
42
+ /** Originating facet type when the issue is tied to a specific facet. */
43
+ facetType?: FacetType;
44
+ /** Optional structured detail for callers that want to render rich UI. */
45
+ detail?: Record<string, string | number | undefined>;
46
+ }
47
+ /** Aggregate audit result. */
48
+ export interface IDSAuditReport {
49
+ /**
50
+ * Overall status:
51
+ * - `valid` — no issues raised
52
+ * - `warning` — only `warning` / `info` issues
53
+ * - `error` — at least one `error` issue
54
+ */
55
+ status: 'valid' | 'warning' | 'error';
56
+ /** Every issue, in document order, regardless of severity. */
57
+ issues: IDSAuditIssue[];
58
+ /**
59
+ * The parsed document, if parsing succeeded. Even partially-malformed
60
+ * documents may produce a parsed object — callers can render whatever
61
+ * portion was salvaged.
62
+ */
63
+ parsedDocument?: IDSDocument;
64
+ }
65
+ /** Options for `auditIDSDocument` / `auditIDSStructure`. */
66
+ export interface IDSAuditOptions {
67
+ /**
68
+ * Run XSD-level checks (default `true`). Controls structural and enum
69
+ * checks against `ids.xsd`.
70
+ */
71
+ xsdValidation?: boolean;
72
+ /**
73
+ * Cross-check facets against the IFC schema (entities, predefined types,
74
+ * pset/property names, attribute names) for the spec's declared IFC
75
+ * version. Default `true`. Disable to skip the network of lazy IFC
76
+ * schema-data lookups.
77
+ */
78
+ ifcSchemaChecks?: boolean;
79
+ /**
80
+ * Override the IFC version used for cross-checks. Useful when the
81
+ * authoring tool has its own source of truth (e.g., a menubar selector
82
+ * in `ids-flow`). When omitted, each specification's declared
83
+ * `ifcVersion` is used.
84
+ */
85
+ ifcVersion?: IFCVersion;
86
+ /**
87
+ * Run coherence checks (restrictions, cardinality). Default `true`.
88
+ */
89
+ coherenceChecks?: boolean;
90
+ }
91
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/audit/types.ts"],"names":[],"mappings":"AAIA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEtE,yCAAyC;AACzC,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAE5D;;;;;;;;;GASG;AACH,MAAM,MAAM,YAAY,GAEpB,aAAa,GACb,cAAc,GACd,eAAe,GACf,iBAAiB,GAEjB,qBAAqB,GACrB,YAAY,GACZ,eAAe,GACf,iBAAiB,GACjB,uBAAuB,GACvB,kBAAkB,GAElB,sBAAsB,GACtB,2BAA2B,GAC3B,oBAAoB,GACpB,4BAA4B,GAC5B,wBAAwB,GACxB,yBAAyB,GACzB,+BAA+B,GAC/B,uBAAuB,GACvB,qBAAqB,GAErB,qBAAqB,GACrB,qBAAqB,GACrB,6BAA6B,GAC7B,8BAA8B,GAC9B,oBAAoB,GACpB,uBAAuB,GACvB,wCAAwC,GAExC,wBAAwB,CAAC;AAE7B,8BAA8B;AAC9B,MAAM,WAAW,aAAa;IAC5B,+EAA+E;IAC/E,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,4DAA4D;IAC5D,IAAI,EAAE,YAAY,CAAC;IACnB,+EAA+E;IAC/E,OAAO,EAAE,MAAM,CAAC;IAChB,4FAA4F;IAC5F,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6DAA6D;IAC7D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yEAAyE;IACzE,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,0EAA0E;IAC1E,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC;CACtD;AAED,8BAA8B;AAC9B,MAAM,WAAW,cAAc;IAC7B;;;;;OAKG;IACH,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;IACtC,8DAA8D;IAC9D,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB;;;;OAIG;IACH,cAAc,CAAC,EAAE,WAAW,CAAC;CAC9B;AAED,4DAA4D;AAC5D,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;;OAKG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;;OAKG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B"}
@@ -0,0 +1,5 @@
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
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/audit/types.ts"],"names":[],"mappings":"AAAA;;+DAE+D"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * XSD-level checks for an IDS document.
3
+ *
4
+ * Rather than ship a full XSD interpreter (or pull `libxml2-wasm` into a
5
+ * TypeScript package), we hard-code the rules from `ids.xsd` 1.0 — the
6
+ * schema is small, finite and slow-moving. Each check below corresponds to
7
+ * a constraint that's expressible in the XSD; the references in comments
8
+ * point at the relevant element/attribute definition.
9
+ */
10
+ import type { IDSDocument } from '../../types.js';
11
+ import type { IDSAuditIssue } from '../types.js';
12
+ export declare function runXsdAudit(doc: IDSDocument): IDSAuditIssue[];
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/audit/xsd/index.ts"],"names":[],"mappings":"AAIA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAGV,WAAW,EAIZ,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AA4CjD,wBAAgB,WAAW,CAAC,GAAG,EAAE,WAAW,GAAG,aAAa,EAAE,CAoC7D"}
@@ -0,0 +1,203 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+ const ALLOWED_IFC_VERSIONS = [
5
+ 'IFC2X3',
6
+ 'IFC4',
7
+ 'IFC4X3_ADD2',
8
+ 'IFC4X3',
9
+ ];
10
+ const RECOGNISED_IFC_VERSION_TOKENS = new Set([
11
+ 'IFC2X3',
12
+ 'IFC4',
13
+ 'IFC4X3',
14
+ 'IFC4X3_ADD2',
15
+ ]);
16
+ function isRecognisedIfcVersionToken(t) {
17
+ return RECOGNISED_IFC_VERSION_TOKENS.has(t.toUpperCase().replace(/[^A-Z0-9_]/g, ''));
18
+ }
19
+ // Facets that may appear inside an `<applicability>` block.
20
+ const APPLICABILITY_FACETS = new Set([
21
+ 'entity',
22
+ 'attribute',
23
+ 'classification',
24
+ 'material',
25
+ 'partOf',
26
+ 'property',
27
+ ]);
28
+ /**
29
+ * Recognised IDS XSD schema URLs. Upstream IDS-Audit-tool keeps the
30
+ * authoritative list in `SchemaProviders/`; we mirror it here. The
31
+ * audit raises Report 107 when `xsi:schemaLocation` points elsewhere.
32
+ */
33
+ const RECOGNISED_IDS_SCHEMA_URLS = [
34
+ 'http://standards.buildingsmart.org/IDS/1.0/ids.xsd',
35
+ 'http://standards.buildingsmart.org/IDS/0.9.7/ids.xsd',
36
+ 'http://standards.buildingsmart.org/IDS/0.9.6/ids.xsd',
37
+ 'http://standards.buildingsmart.org/IDS/ids.xsd',
38
+ ];
39
+ export function runXsdAudit(doc) {
40
+ const issues = [];
41
+ if (doc.schemaLocation) {
42
+ // schemaLocation is a whitespace-separated list of `namespace url`
43
+ // pairs; pull the URL paired with the IDS namespace.
44
+ const tokens = doc.schemaLocation.split(/\s+/).filter((t) => t.length > 0);
45
+ for (let i = 0; i + 1 < tokens.length; i += 2) {
46
+ const ns = tokens[i];
47
+ const url = tokens[i + 1];
48
+ if (ns === 'http://standards.buildingsmart.org/IDS') {
49
+ if (!RECOGNISED_IDS_SCHEMA_URLS.includes(url)) {
50
+ issues.push({
51
+ severity: 'error',
52
+ code: 'E_XSD_SCHEMA_LOCATION',
53
+ message: `xsi:schemaLocation references "${url}", not a recognised IDS XSD`,
54
+ path: 'schemaLocation',
55
+ detail: { url },
56
+ });
57
+ }
58
+ }
59
+ }
60
+ }
61
+ if (!doc.info.title || doc.info.title.trim() === '' || doc.info.title === 'Untitled IDS') {
62
+ // The XSD makes <title> mandatory and non-empty. Treat a missing or
63
+ // empty title as a warning rather than error — most authoring tools
64
+ // accept it, and consumers care more about specification content
65
+ // than the document-level title.
66
+ issues.push({
67
+ severity: 'warning',
68
+ code: 'E_XSD_REQUIRED_ATTR',
69
+ message: 'IDS document is missing a non-empty <info><title> element',
70
+ path: 'info.title',
71
+ });
72
+ }
73
+ doc.specifications.forEach((spec, i) => auditSpecification(spec, i, issues));
74
+ return issues;
75
+ }
76
+ function auditSpecification(spec, i, issues) {
77
+ const path = `specifications[${i}]`;
78
+ if (!spec.name || spec.name.trim() === '' || /^Specification \d+$/.test(spec.name)) {
79
+ issues.push({
80
+ severity: 'error',
81
+ code: 'E_XSD_REQUIRED_ATTR',
82
+ message: 'specification is missing a non-empty @name attribute',
83
+ path: `${path}.name`,
84
+ });
85
+ }
86
+ if (!spec.ifcVersions || spec.ifcVersions.length === 0) {
87
+ issues.push({
88
+ severity: 'error',
89
+ code: 'E_XSD_REQUIRED_ATTR',
90
+ message: 'specification is missing the @ifcVersion attribute',
91
+ path: `${path}.ifcVersion`,
92
+ });
93
+ }
94
+ else {
95
+ for (const v of spec.ifcVersions) {
96
+ if (!ALLOWED_IFC_VERSIONS.includes(v)) {
97
+ issues.push({
98
+ severity: 'error',
99
+ code: 'E_XSD_ENUM',
100
+ message: `@ifcVersion "${v}" is not in {IFC2X3, IFC4, IFC4X3_ADD2}`,
101
+ path: `${path}.ifcVersion`,
102
+ detail: { value: v },
103
+ });
104
+ }
105
+ }
106
+ }
107
+ // The parser silently drops tokens it can't normalise. Re-inspect the
108
+ // raw attribute string so authoring mistakes like
109
+ // `ifcVersion="IFC2X3 INVALIDIFCVERSION"` get flagged.
110
+ if (spec.ifcVersionRaw) {
111
+ const tokens = spec.ifcVersionRaw.split(/\s+/).filter((t) => t.length > 0);
112
+ for (const t of tokens) {
113
+ if (!isRecognisedIfcVersionToken(t)) {
114
+ issues.push({
115
+ severity: 'error',
116
+ code: 'E_XSD_ENUM',
117
+ message: `@ifcVersion token "${t}" is not in {IFC2X3, IFC4, IFC4X3_ADD2}`,
118
+ path: `${path}.ifcVersion`,
119
+ detail: { value: t },
120
+ });
121
+ }
122
+ }
123
+ }
124
+ if (spec.applicability.facets.length === 0) {
125
+ issues.push({
126
+ severity: 'error',
127
+ code: 'E_XSD_STRUCTURE',
128
+ message: 'specification has an empty <applicability> — at least one facet is required',
129
+ path: `${path}.applicability`,
130
+ });
131
+ }
132
+ spec.applicability.facets.forEach((facet, fi) => {
133
+ auditFacet(facet, `${path}.applicability.facets[${fi}]`, issues);
134
+ });
135
+ if (spec.requirements.length === 0) {
136
+ // The XSD allows zero requirements but conventional authoring tools
137
+ // surface this as a warning — a spec with no requirements does nothing.
138
+ issues.push({
139
+ severity: 'warning',
140
+ code: 'E_XSD_STRUCTURE',
141
+ message: 'specification has no <requirements>; matched entities will not be checked',
142
+ path: `${path}.requirements`,
143
+ });
144
+ }
145
+ spec.requirements.forEach((req, ri) => {
146
+ auditFacet(req.facet, `${path}.requirements[${ri}]`, issues);
147
+ });
148
+ }
149
+ function auditFacet(facet, path, issues) {
150
+ if (!APPLICABILITY_FACETS.has(facet.type)) {
151
+ issues.push({
152
+ severity: 'error',
153
+ code: 'E_XSD_STRUCTURE',
154
+ message: `unknown facet type "${facet.type}"`,
155
+ path,
156
+ facetType: facet.type,
157
+ });
158
+ return;
159
+ }
160
+ switch (facet.type) {
161
+ case 'entity':
162
+ checkConstraintRequired(facet.name, `${path}.name`, 'entity.name', issues, facet.type);
163
+ break;
164
+ case 'attribute':
165
+ checkConstraintRequired(facet.name, `${path}.name`, 'attribute.name', issues, facet.type);
166
+ break;
167
+ case 'property':
168
+ checkConstraintRequired(facet.propertySet, `${path}.propertySet`, 'property.propertySet', issues, facet.type);
169
+ checkConstraintRequired(facet.baseName, `${path}.baseName`, 'property.baseName', issues, facet.type);
170
+ break;
171
+ case 'partOf':
172
+ // Relation/entity validity is per-version and lives in the IFC
173
+ // schema audit pass — leave it alone here.
174
+ break;
175
+ case 'classification':
176
+ case 'material':
177
+ // Both facets allow all-optional fields per the XSD; no required
178
+ // attributes to check here.
179
+ break;
180
+ }
181
+ }
182
+ function checkConstraintRequired(c, path, field, issues, facetType) {
183
+ if (!c) {
184
+ issues.push({
185
+ severity: 'error',
186
+ code: 'E_XSD_REQUIRED_ATTR',
187
+ message: `${field} is required`,
188
+ path,
189
+ facetType,
190
+ });
191
+ return;
192
+ }
193
+ if (c.type === 'simpleValue' && (!c.value || c.value.trim() === '')) {
194
+ issues.push({
195
+ severity: 'error',
196
+ code: 'E_XSD_REQUIRED_ATTR',
197
+ message: `${field} must have a non-empty value`,
198
+ path,
199
+ facetType,
200
+ });
201
+ }
202
+ }
203
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/audit/xsd/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { type IfcDataStore } from '@ifc-lite/parser';
2
+ import type { ClassificationInfo } from '../types.js';
3
+ /**
4
+ * Resolve every classification associated with `expressId`, including
5
+ * 1. the standard `IfcRelAssociatesClassification` path (handled by
6
+ * the parser's resolver), and
7
+ * 2. the non-rooted-resource path: `IfcExternalReferenceRelationship`
8
+ * pointing at the entity from `RelatedResourceObjects`.
9
+ *
10
+ * Each classification is expanded into multiple `ClassificationInfo`
11
+ * entries — one per parent reference in the chain — so a requirement
12
+ * for `EF_25_10` matches an actual leaf of `EF_25_10_25`.
13
+ */
14
+ export declare function resolveClassifications(store: IfcDataStore, expressId: number): ClassificationInfo[];
15
+ //# sourceMappingURL=classifications.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classifications.d.ts","sourceRoot":"","sources":["../../src/bridge/classifications.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,KAAK,YAAY,EAGlB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAStD;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,MAAM,GAChB,kBAAkB,EAAE,CAyBtB"}
@@ -0,0 +1,114 @@
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
+ import { EntityExtractor, extractClassificationsOnDemand, } from '@ifc-lite/parser';
5
+ /**
6
+ * Resolve every classification associated with `expressId`, including
7
+ * 1. the standard `IfcRelAssociatesClassification` path (handled by
8
+ * the parser's resolver), and
9
+ * 2. the non-rooted-resource path: `IfcExternalReferenceRelationship`
10
+ * pointing at the entity from `RelatedResourceObjects`.
11
+ *
12
+ * Each classification is expanded into multiple `ClassificationInfo`
13
+ * entries — one per parent reference in the chain — so a requirement
14
+ * for `EF_25_10` matches an actual leaf of `EF_25_10_25`.
15
+ */
16
+ export function resolveClassifications(store, expressId) {
17
+ const list = [
18
+ ...(extractClassificationsOnDemand(store, expressId) || []),
19
+ ];
20
+ appendExternalReferenceClassifications(store, expressId, list);
21
+ const out = [];
22
+ for (const c of list) {
23
+ const system = c.system || '';
24
+ const baseValue = c.identification || c.name || '';
25
+ // Always push at least one entry per associated classification —
26
+ // even when the value is empty — so optional-cardinality value
27
+ // mismatches register as a value mismatch rather than as a
28
+ // missing-classification (which optional pardons).
29
+ out.push({ system, value: baseValue, name: c.name });
30
+ if (Array.isArray(c.path)) {
31
+ for (const code of c.path) {
32
+ if (code && code !== baseValue) {
33
+ out.push({ system, value: code, name: c.name });
34
+ }
35
+ }
36
+ }
37
+ }
38
+ return out;
39
+ }
40
+ /**
41
+ * Non-rooted resources (IfcMaterial, IfcProfileDef, …) carry
42
+ * classifications via `IfcExternalReferenceRelationship` rather than
43
+ * `IfcRelAssociatesClassification`. The parser doesn't categorize
44
+ * external-ref edges into the relationship graph today, so we scan
45
+ * the type table directly.
46
+ */
47
+ function appendExternalReferenceClassifications(store, expressId, list) {
48
+ const erRefs = store.entityIndex?.byType?.get?.('IFCEXTERNALREFERENCERELATIONSHIP') || [];
49
+ if (erRefs.length === 0 || !store.source?.length)
50
+ return;
51
+ const ex = new EntityExtractor(store.source);
52
+ for (const erId of erRefs) {
53
+ const erRef = store.entityIndex.byId.get(erId);
54
+ if (!erRef)
55
+ continue;
56
+ const erEntity = ex.extractEntity(erRef);
57
+ if (!erEntity)
58
+ continue;
59
+ // [Name, Description, RelatingReference, RelatedResourceObjects]
60
+ const relating = erEntity.attributes?.[2];
61
+ const related = erEntity.attributes?.[3];
62
+ if (typeof relating !== 'number')
63
+ continue;
64
+ if (!Array.isArray(related))
65
+ continue;
66
+ if (!related.includes(expressId))
67
+ continue;
68
+ const refRef = store.entityIndex.byId.get(relating);
69
+ if (!refRef)
70
+ continue;
71
+ const refEntity = ex.extractEntity(refRef);
72
+ if (!refEntity)
73
+ continue;
74
+ if (refEntity.type.toUpperCase() !== 'IFCCLASSIFICATIONREFERENCE')
75
+ continue;
76
+ const a = refEntity.attributes || [];
77
+ const info = {
78
+ identification: typeof a[1] === 'string' ? a[1] : undefined,
79
+ name: typeof a[2] === 'string' ? a[2] : undefined,
80
+ path: [],
81
+ };
82
+ let cursor = typeof a[3] === 'number' ? a[3] : undefined;
83
+ const seen = new Set();
84
+ while (cursor !== undefined && !seen.has(cursor)) {
85
+ seen.add(cursor);
86
+ const cur = store.entityIndex.byId.get(cursor);
87
+ if (!cur)
88
+ break;
89
+ const e = ex.extractEntity(cur);
90
+ if (!e)
91
+ break;
92
+ const cu = e.type.toUpperCase();
93
+ const ca = e.attributes || [];
94
+ if (cu === 'IFCCLASSIFICATION') {
95
+ info.system = typeof ca[3] === 'string' ? ca[3] : undefined;
96
+ break;
97
+ }
98
+ if (cu === 'IFCCLASSIFICATIONREFERENCE') {
99
+ const code = typeof ca[1] === 'string'
100
+ ? ca[1]
101
+ : typeof ca[2] === 'string'
102
+ ? ca[2]
103
+ : undefined;
104
+ if (code)
105
+ info.path.unshift(code);
106
+ cursor = typeof ca[3] === 'number' ? ca[3] : undefined;
107
+ continue;
108
+ }
109
+ break;
110
+ }
111
+ list.push(info);
112
+ }
113
+ }
114
+ //# sourceMappingURL=classifications.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classifications.js","sourceRoot":"","sources":["../../src/bridge/classifications.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { type IfcDataStore } from '@ifc-lite/parser';
2
+ import type { IFCDataAccessor } from '../types.js';
3
+ /**
4
+ * Bridge an `IfcDataStore` (produced by `@ifc-lite/parser`) into the
5
+ * abstract `IFCDataAccessor` the IDS validator consumes. The single
6
+ * canonical translation — viewer, MCP server, and the corpus-parity
7
+ * harness all use this rather than re-implementing the projection.
8
+ *
9
+ * Mirrors upstream `IfcOpenShell/ifctester` semantics: classification
10
+ * sub-reference walking, IfcExternalReferenceRelationship for
11
+ * non-rooted resources, length unit conversion, predefined property-set
12
+ * unwrapping, schema-driven attribute XSD types, USERDEFINED predicate
13
+ * substitution, partOf transitivity, etc.
14
+ */
15
+ export declare function createDataAccessor(store: IfcDataStore): IFCDataAccessor;
16
+ //# sourceMappingURL=data-accessor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-accessor.d.ts","sourceRoot":"","sources":["../../src/bridge/data-accessor.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,KAAK,YAAY,EAGlB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,KAAK,EACV,eAAe,EAOhB,MAAM,aAAa,CAAC;AAwBrB;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,YAAY,GAAG,eAAe,CA0MvE"}