@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
|
@@ -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 @@
|
|
|
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"}
|