@ifc-lite/ids 3.1.0 → 3.3.2
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 +10 -1
- package/dist/audit/coherence/cardinality.js +4 -1
- package/dist/audit/coherence/cardinality.js.map +1 -1
- package/dist/audit/coherence/index.d.ts +0 -1
- package/dist/audit/coherence/index.d.ts.map +1 -1
- package/dist/audit/coherence/index.js +59 -45
- package/dist/audit/coherence/index.js.map +1 -1
- package/dist/audit/coherence/regex.d.ts +3 -3
- package/dist/audit/coherence/regex.js +3 -3
- package/dist/audit/ifc-schema/attribute-value.d.ts +19 -0
- package/dist/audit/ifc-schema/attribute-value.d.ts.map +1 -0
- package/dist/audit/ifc-schema/attribute-value.js +71 -0
- package/dist/audit/ifc-schema/attribute-value.js.map +1 -0
- package/dist/audit/ifc-schema/datatype-check.d.ts +9 -1
- package/dist/audit/ifc-schema/datatype-check.d.ts.map +1 -1
- package/dist/audit/ifc-schema/datatype-check.js +24 -2
- package/dist/audit/ifc-schema/datatype-check.js.map +1 -1
- package/dist/audit/ifc-schema/entity-requirement.d.ts +21 -0
- package/dist/audit/ifc-schema/entity-requirement.d.ts.map +1 -0
- package/dist/audit/ifc-schema/entity-requirement.js +45 -0
- package/dist/audit/ifc-schema/entity-requirement.js.map +1 -0
- package/dist/audit/ifc-schema/index.d.ts.map +1 -1
- package/dist/audit/ifc-schema/index.js +105 -19
- package/dist/audit/ifc-schema/index.js.map +1 -1
- package/dist/audit/index.d.ts.map +1 -1
- package/dist/audit/index.js +8 -2
- package/dist/audit/index.js.map +1 -1
- package/dist/audit/parser-shim.d.ts +15 -1
- package/dist/audit/parser-shim.d.ts.map +1 -1
- package/dist/audit/parser-shim.js +2 -2
- package/dist/audit/parser-shim.js.map +1 -1
- package/dist/audit/structural/index.d.ts +3 -1
- package/dist/audit/structural/index.d.ts.map +1 -1
- package/dist/audit/structural/index.js +48 -179
- package/dist/audit/structural/index.js.map +1 -1
- package/dist/audit/structural/shapes.d.ts +47 -0
- package/dist/audit/structural/shapes.d.ts.map +1 -0
- package/dist/audit/structural/shapes.js +185 -0
- package/dist/audit/structural/shapes.js.map +1 -0
- package/dist/audit/types.d.ts +9 -1
- package/dist/audit/types.d.ts.map +1 -1
- package/dist/audit/xsd/index.js +1 -1
- package/dist/audit/xsd/index.js.map +1 -1
- package/dist/bounded-cache.d.ts +18 -0
- package/dist/bounded-cache.d.ts.map +1 -0
- package/dist/bounded-cache.js +40 -0
- package/dist/bounded-cache.js.map +1 -0
- package/dist/bridge/data-accessor.d.ts.map +1 -1
- package/dist/bridge/data-accessor.js +49 -25
- package/dist/bridge/data-accessor.js.map +1 -1
- package/dist/bridge/index.d.ts +1 -0
- package/dist/bridge/index.d.ts.map +1 -1
- package/dist/bridge/index.js +1 -0
- package/dist/bridge/index.js.map +1 -1
- package/dist/bridge/measure-conversion.d.ts +51 -0
- package/dist/bridge/measure-conversion.d.ts.map +1 -0
- package/dist/bridge/measure-conversion.js +106 -0
- package/dist/bridge/measure-conversion.js.map +1 -0
- package/dist/bridge/predefined-property-sets.d.ts +24 -0
- package/dist/bridge/predefined-property-sets.d.ts.map +1 -0
- package/dist/bridge/predefined-property-sets.js +86 -0
- package/dist/bridge/predefined-property-sets.js.map +1 -0
- package/dist/bridge/predefined-types.d.ts +34 -13
- package/dist/bridge/predefined-types.d.ts.map +1 -1
- package/dist/bridge/predefined-types.js +40 -71
- package/dist/bridge/predefined-types.js.map +1 -1
- package/dist/bridge/project-property.d.ts +43 -0
- package/dist/bridge/project-property.d.ts.map +1 -0
- package/dist/bridge/project-property.js +60 -0
- package/dist/bridge/project-property.js.map +1 -0
- package/dist/bridge/properties.d.ts +4 -3
- package/dist/bridge/properties.d.ts.map +1 -1
- package/dist/bridge/properties.js +64 -111
- package/dist/bridge/properties.js.map +1 -1
- package/dist/bridge/property-overlay-resolver.d.ts +10 -0
- package/dist/bridge/property-overlay-resolver.d.ts.map +1 -1
- package/dist/bridge/property-overlay-resolver.js +53 -4
- package/dist/bridge/property-overlay-resolver.js.map +1 -1
- package/dist/bridge/units.d.ts +49 -20
- package/dist/bridge/units.d.ts.map +1 -1
- package/dist/bridge/units.js +134 -84
- package/dist/bridge/units.js.map +1 -1
- package/dist/constraint-types.d.ts +30 -14
- package/dist/constraint-types.d.ts.map +1 -1
- package/dist/constraints/comparators.d.ts +4 -1
- package/dist/constraints/comparators.d.ts.map +1 -1
- package/dist/constraints/comparators.js +6 -1
- package/dist/constraints/comparators.js.map +1 -1
- package/dist/constraints/describe.d.ts.map +1 -1
- package/dist/constraints/describe.js +67 -21
- package/dist/constraints/describe.js.map +1 -1
- package/dist/constraints/match-bounds.d.ts +25 -0
- package/dist/constraints/match-bounds.d.ts.map +1 -0
- package/dist/constraints/match-bounds.js +112 -0
- package/dist/constraints/match-bounds.js.map +1 -0
- package/dist/constraints/match-family.d.ts.map +1 -1
- package/dist/constraints/match-family.js +25 -90
- package/dist/constraints/match-family.js.map +1 -1
- package/dist/constraints/xsd-datetime.js +6 -6
- package/dist/constraints/xsd-examples.d.ts +20 -0
- package/dist/constraints/xsd-examples.d.ts.map +1 -0
- package/dist/constraints/xsd-examples.js +187 -0
- package/dist/constraints/xsd-examples.js.map +1 -0
- package/dist/constraints/xsd-lexical.d.ts +2 -0
- package/dist/constraints/xsd-lexical.d.ts.map +1 -0
- package/dist/constraints/xsd-lexical.js +49 -0
- package/dist/constraints/xsd-lexical.js.map +1 -0
- package/dist/constraints/xsd-order.d.ts +33 -0
- package/dist/constraints/xsd-order.d.ts.map +1 -0
- package/dist/constraints/xsd-order.js +211 -0
- package/dist/constraints/xsd-order.js.map +1 -0
- package/dist/constraints/xsd-regex-ast.d.ts +37 -0
- package/dist/constraints/xsd-regex-ast.d.ts.map +1 -0
- package/dist/constraints/xsd-regex-ast.js +137 -0
- package/dist/constraints/xsd-regex-ast.js.map +1 -0
- package/dist/constraints/xsd-regex-blocks.d.ts +7 -0
- package/dist/constraints/xsd-regex-blocks.d.ts.map +1 -0
- package/dist/constraints/xsd-regex-blocks.js +68 -0
- package/dist/constraints/xsd-regex-blocks.js.map +1 -0
- package/dist/constraints/xsd-regex.d.ts +2 -45
- package/dist/constraints/xsd-regex.d.ts.map +1 -1
- package/dist/constraints/xsd-regex.js +231 -134
- package/dist/constraints/xsd-regex.js.map +1 -1
- package/dist/facets/entity-facet.d.ts.map +1 -1
- package/dist/facets/entity-facet.js +4 -1
- 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 +80 -19
- package/dist/facets/partof-facet.js.map +1 -1
- package/dist/facets/predefined-type-match.d.ts +8 -3
- package/dist/facets/predefined-type-match.d.ts.map +1 -1
- package/dist/facets/predefined-type-match.js.map +1 -1
- package/dist/index.d.ts +9 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -1
- package/dist/parser/dom.d.ts +4 -0
- package/dist/parser/dom.d.ts.map +1 -1
- package/dist/parser/dom.js +5 -0
- package/dist/parser/dom.js.map +1 -1
- package/dist/parser/parse-restriction.d.ts.map +1 -1
- package/dist/parser/parse-restriction.js +32 -14
- package/dist/parser/parse-restriction.js.map +1 -1
- package/dist/parser/xml-parser.d.ts +7 -4
- package/dist/parser/xml-parser.d.ts.map +1 -1
- package/dist/parser/xml-parser.js +30 -45
- package/dist/parser/xml-parser.js.map +1 -1
- package/dist/preview/audit.d.ts +16 -0
- package/dist/preview/audit.d.ts.map +1 -0
- package/dist/preview/audit.js +58 -0
- package/dist/preview/audit.js.map +1 -0
- package/dist/preview/features.d.ts +30 -0
- package/dist/preview/features.d.ts.map +1 -0
- package/dist/preview/features.js +96 -0
- package/dist/preview/features.js.map +1 -0
- package/dist/preview/parse-ids11.d.ts +9 -0
- package/dist/preview/parse-ids11.d.ts.map +1 -0
- package/dist/preview/parse-ids11.js +90 -0
- package/dist/preview/parse-ids11.js.map +1 -0
- package/dist/preview/partof-nested.d.ts +27 -0
- package/dist/preview/partof-nested.d.ts.map +1 -0
- package/dist/preview/partof-nested.js +61 -0
- package/dist/preview/partof-nested.js.map +1 -0
- package/dist/preview/tolerance.d.ts +15 -0
- package/dist/preview/tolerance.d.ts.map +1 -0
- package/dist/preview/tolerance.js +66 -0
- package/dist/preview/tolerance.js.map +1 -0
- package/dist/preview/types.d.ts +67 -0
- package/dist/preview/types.d.ts.map +1 -0
- package/dist/preview/types.js +5 -0
- package/dist/preview/types.js.map +1 -0
- package/dist/report-types.d.ts +7 -0
- package/dist/report-types.d.ts.map +1 -1
- package/dist/translation/describe-constraint.js +16 -14
- package/dist/translation/describe-constraint.js.map +1 -1
- package/dist/translation/locales/de.d.ts +2 -0
- package/dist/translation/locales/de.d.ts.map +1 -1
- package/dist/translation/locales/de.js +2 -0
- package/dist/translation/locales/de.js.map +1 -1
- package/dist/translation/locales/en.d.ts +2 -0
- package/dist/translation/locales/en.d.ts.map +1 -1
- package/dist/translation/locales/en.js +2 -0
- package/dist/translation/locales/en.js.map +1 -1
- package/dist/translation/locales/fr.d.ts +2 -0
- package/dist/translation/locales/fr.d.ts.map +1 -1
- package/dist/translation/locales/fr.js +2 -0
- package/dist/translation/locales/fr.js.map +1 -1
- package/dist/translation/locales/index.d.ts +1 -0
- package/dist/translation/locales/index.d.ts.map +1 -1
- package/dist/translation/locales/index.js +1 -0
- package/dist/translation/locales/index.js.map +1 -1
- package/dist/translation/locales/it.d.ts +198 -0
- package/dist/translation/locales/it.d.ts.map +1 -0
- package/dist/translation/locales/it.js +235 -0
- package/dist/translation/locales/it.js.map +1 -0
- package/dist/translation/service.d.ts +2 -6
- package/dist/translation/service.d.ts.map +1 -1
- package/dist/translation/service.js +17 -25
- package/dist/translation/service.js.map +1 -1
- package/dist/types.d.ts +26 -31
- package/dist/types.d.ts.map +1 -1
- package/dist/validation/format-failure-reason.js +1 -1
- package/dist/validation/format-failure-reason.js.map +1 -1
- package/dist/validation/pass-rate.d.ts +14 -0
- package/dist/validation/pass-rate.d.ts.map +1 -0
- package/dist/validation/pass-rate.js +25 -0
- package/dist/validation/pass-rate.js.map +1 -0
- package/dist/validation/prohibited-specification.d.ts +31 -0
- package/dist/validation/prohibited-specification.d.ts.map +1 -0
- package/dist/validation/prohibited-specification.js +25 -0
- package/dist/validation/prohibited-specification.js.map +1 -0
- package/dist/validation/validator.d.ts +4 -2
- package/dist/validation/validator.d.ts.map +1 -1
- package/dist/validation/validator.js +23 -18
- package/dist/validation/validator.js.map +1 -1
- package/dist/writer/constraint.d.ts +8 -0
- package/dist/writer/constraint.d.ts.map +1 -0
- package/dist/writer/constraint.js +142 -0
- package/dist/writer/constraint.js.map +1 -0
- package/dist/writer/index.d.ts +48 -0
- package/dist/writer/index.d.ts.map +1 -0
- package/dist/writer/index.js +209 -0
- package/dist/writer/index.js.map +1 -0
- package/dist/writer/xml-lines.d.ts +17 -0
- package/dist/writer/xml-lines.d.ts.map +1 -0
- package/dist/writer/xml-lines.js +69 -0
- package/dist/writer/xml-lines.js.map +1 -0
- package/package.json +5 -5
package/README.md
CHANGED
|
@@ -45,7 +45,7 @@ for (const spec of report.specificationResults) {
|
|
|
45
45
|
|
|
46
46
|
## Multi-language reports
|
|
47
47
|
|
|
48
|
-
Reports translate automatically. Supported languages: English (`en`), German (`de`), French (`fr`).
|
|
48
|
+
Reports translate automatically. Supported languages: English (`en`), German (`de`), French (`fr`), Italian (`it`).
|
|
49
49
|
|
|
50
50
|
```typescript
|
|
51
51
|
import { parseIDS, validateIDS, createTranslationService } from '@ifc-lite/ids';
|
|
@@ -103,6 +103,15 @@ for (const spec of idsSpec.specifications) {
|
|
|
103
103
|
| `Enumeration` | One-of-list |
|
|
104
104
|
| `Bounds` | Numeric range (min/max, inclusive/exclusive) |
|
|
105
105
|
|
|
106
|
+
## IDS 1.1 preview (unstable)
|
|
107
|
+
|
|
108
|
+
IDS 1.1 is not released. Candidate features from the buildingSMART 1.1
|
|
109
|
+
milestone (`uri` and `instructions` on applicability facets, facets nested in
|
|
110
|
+
`partOf`, the #418 tolerance rule, identifier uniqueness) are available only
|
|
111
|
+
with `preview: { ids11: true }` on `parseIDS`, `writeIdsXml`, `validateIDS`
|
|
112
|
+
and `auditIDSDocument`. Without the flag the package is IDS 1.0 only. See
|
|
113
|
+
[IDS 1.1 preview](https://ifclite.dev/docs/guide/ids/#ids-11-preview-unstable).
|
|
114
|
+
|
|
106
115
|
## API
|
|
107
116
|
|
|
108
117
|
See the [IDS Guide](https://ifclite.dev/docs/guide/ids/) and [API Reference](https://ifclite.dev/docs/api/typescript/#ifc-liteids).
|
|
@@ -122,9 +122,12 @@ function isEmptyConstraint(c) {
|
|
|
122
122
|
c.maxInclusive === undefined &&
|
|
123
123
|
c.minExclusive === undefined &&
|
|
124
124
|
c.maxExclusive === undefined &&
|
|
125
|
+
c.temporalBounds === undefined &&
|
|
125
126
|
c.length === undefined &&
|
|
126
127
|
c.minLength === undefined &&
|
|
127
|
-
c.maxLength === undefined
|
|
128
|
+
c.maxLength === undefined &&
|
|
129
|
+
c.totalDigits === undefined &&
|
|
130
|
+
c.fractionDigits === undefined);
|
|
128
131
|
}
|
|
129
132
|
}
|
|
130
133
|
//# sourceMappingURL=cardinality.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cardinality.js","sourceRoot":"","sources":["../../../src/audit/coherence/cardinality.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cardinality.js","sourceRoot":"","sources":["../../../src/audit/coherence/cardinality.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,5 +9,4 @@
|
|
|
9
9
|
import type { IDSDocument } from '../../types.js';
|
|
10
10
|
import type { IDSAuditIssue } from '../types.js';
|
|
11
11
|
export declare function runCoherenceAudit(doc: IDSDocument): IDSAuditIssue[];
|
|
12
|
-
export declare function isValidLexicalForXsType(value: string, base: string): boolean;
|
|
13
12
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/audit/coherence/index.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAEV,WAAW,EAGZ,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAMjD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,WAAW,GAAG,aAAa,EAAE,CAMnE
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/audit/coherence/index.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAEV,WAAW,EAGZ,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAMjD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,WAAW,GAAG,aAAa,EAAE,CAMnE"}
|
|
@@ -1,8 +1,8 @@
|
|
|
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
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import { isValidLexicalForXsType } from '../../constraints/xsd-lexical.js';
|
|
5
|
+
import { compareOrdered } from '../../constraints/xsd-order.js';
|
|
6
6
|
import { compileXsdRegex } from './regex.js';
|
|
7
7
|
import { auditRequirementCardinality } from './cardinality.js';
|
|
8
8
|
export function runCoherenceAudit(doc) {
|
|
@@ -48,6 +48,19 @@ function auditSpec(spec, path, issues) {
|
|
|
48
48
|
detail: { min: min, max: max },
|
|
49
49
|
});
|
|
50
50
|
}
|
|
51
|
+
// A prohibited specification (maxOccurs="0") says "no element may be
|
|
52
|
+
// applicable"; requirements on elements that must not exist are
|
|
53
|
+
// meaningless, and the IDS corpus treats them as invalid (IDS-008;
|
|
54
|
+
// ids/invalid-prohibited_specifications_invalid_if_requirements_are_specified).
|
|
55
|
+
if (max === 0 && spec.requirements.length > 0) {
|
|
56
|
+
issues.push({
|
|
57
|
+
severity: 'error',
|
|
58
|
+
code: 'E_CARDINALITY_INVALID',
|
|
59
|
+
message: `a prohibited specification (maxOccurs="0") cannot have requirements; it has ${spec.requirements.length}`,
|
|
60
|
+
path: `${path}.requirements`,
|
|
61
|
+
detail: { requirements: spec.requirements.length },
|
|
62
|
+
});
|
|
63
|
+
}
|
|
51
64
|
// Upstream IDS-Audit-tool flags `cardinality` on `<applicability>` —
|
|
52
65
|
// it's meaningless there. (Report 202)
|
|
53
66
|
if (spec.applicability.cardinality) {
|
|
@@ -159,6 +172,12 @@ function check(c, path, issues, facetType) {
|
|
|
159
172
|
// which we already do in the XSD audit.
|
|
160
173
|
break;
|
|
161
174
|
}
|
|
175
|
+
// XSD facets in one restriction are conjunctive (IDS-010): a malformed
|
|
176
|
+
// regex or an inverted bound in a sibling family is as fatal as in the
|
|
177
|
+
// primary one, so each sibling gets the same checks.
|
|
178
|
+
if (c.type !== 'simpleValue') {
|
|
179
|
+
c.and?.forEach((sibling, i) => check(sibling, `${path}.and[${i}]`, issues, facetType));
|
|
180
|
+
}
|
|
162
181
|
}
|
|
163
182
|
function checkBounds(c, path, issues, facetType) {
|
|
164
183
|
const lo = c.minInclusive ?? c.minExclusive;
|
|
@@ -175,6 +194,21 @@ function checkBounds(c, path, issues, facetType) {
|
|
|
175
194
|
detail: { min: lo, max: hi },
|
|
176
195
|
});
|
|
177
196
|
}
|
|
197
|
+
// Date, time and duration bounds order in their base's own value space
|
|
198
|
+
// (#7399); an unordered pair (`P1Y` vs `P365D`) is not reported.
|
|
199
|
+
const t = c.temporalBounds;
|
|
200
|
+
const tLo = t?.minInclusive ?? t?.minExclusive;
|
|
201
|
+
const tHi = t?.maxInclusive ?? t?.maxExclusive;
|
|
202
|
+
if (tLo !== undefined && tHi !== undefined && compareOrdered(tLo, tHi, c.base) === 1) {
|
|
203
|
+
issues.push({
|
|
204
|
+
severity: 'error',
|
|
205
|
+
code: 'E_RESTRICTION_RANGE',
|
|
206
|
+
message: `xs:restriction bounds inverted: lower (${tLo}) > upper (${tHi})`,
|
|
207
|
+
path,
|
|
208
|
+
facetType,
|
|
209
|
+
detail: { min: tLo, max: tHi },
|
|
210
|
+
});
|
|
211
|
+
}
|
|
178
212
|
if (typeof c.minLength === 'number' &&
|
|
179
213
|
typeof c.maxLength === 'number' &&
|
|
180
214
|
c.minLength > c.maxLength) {
|
|
@@ -202,7 +236,7 @@ function checkBounds(c, path, issues, facetType) {
|
|
|
202
236
|
issues.push({
|
|
203
237
|
severity: 'error',
|
|
204
238
|
code: 'E_RESTRICTION_FACET_UNPARSEABLE',
|
|
205
|
-
message: `xs:${f.facet} @value="${f.rawValue}"
|
|
239
|
+
message: `xs:${f.facet} @value="${f.rawValue}" ${unparseableReason(f.facet, c.base)} — this facet is dropped and, until fixed, the whole restriction rejects every value (it does not fall back to unbounded)`,
|
|
206
240
|
path,
|
|
207
241
|
facetType,
|
|
208
242
|
detail: { facet: f.facet, rawValue: f.rawValue },
|
|
@@ -218,27 +252,42 @@ function checkBounds(c, path, issues, facetType) {
|
|
|
218
252
|
c.minExclusive === undefined &&
|
|
219
253
|
c.maxInclusive === undefined &&
|
|
220
254
|
c.maxExclusive === undefined &&
|
|
255
|
+
c.temporalBounds === undefined &&
|
|
221
256
|
c.length === undefined &&
|
|
222
257
|
c.minLength === undefined &&
|
|
223
|
-
c.maxLength === undefined
|
|
258
|
+
c.maxLength === undefined &&
|
|
259
|
+
c.totalDigits === undefined &&
|
|
260
|
+
c.fractionDigits === undefined;
|
|
224
261
|
if (empty) {
|
|
225
262
|
issues.push({
|
|
226
263
|
severity: 'error',
|
|
227
264
|
code: 'E_RESTRICTION_EMPTY',
|
|
228
|
-
message: 'xs:restriction has no min/max bounds or
|
|
265
|
+
message: 'xs:restriction has no min/max bounds, length or digit facets',
|
|
229
266
|
path,
|
|
230
267
|
facetType,
|
|
231
268
|
});
|
|
232
269
|
}
|
|
233
270
|
}
|
|
271
|
+
/**
|
|
272
|
+
* Why a facet's `@value` was not read: a min/max bound must be in the
|
|
273
|
+
* lexical space of the restriction's `@base` (#7399), a length or digit
|
|
274
|
+
* count is a non-negative integer.
|
|
275
|
+
*/
|
|
276
|
+
function unparseableReason(facet, base) {
|
|
277
|
+
if (!/^(min|max)(In|Ex)clusive$/.test(facet))
|
|
278
|
+
return 'is not a non-negative integer';
|
|
279
|
+
return base
|
|
280
|
+
? `is not a valid value for xs:restriction @base="${base}"`
|
|
281
|
+
: 'could not be parsed as a number';
|
|
282
|
+
}
|
|
234
283
|
/**
|
|
235
284
|
* Validate `pattern` against XSD regex semantics by translating XSD-only
|
|
236
285
|
* escape codes to JS regex equivalents (cf. upstream `XmlRegex.cs`).
|
|
237
286
|
*
|
|
238
|
-
* Translation
|
|
239
|
-
*
|
|
240
|
-
*
|
|
241
|
-
*
|
|
287
|
+
* Translation follows XML Schema Part 2 Appendix F (multi-char and block
|
|
288
|
+
* escapes, char-class subtraction, literal `^` / `$`; see
|
|
289
|
+
* `constraints/xsd-regex.ts`). A construct with no exact translation, which
|
|
290
|
+
* validation refuses, surfaces as `W_REGEX_UNVERIFIED`. Any remaining syntactic errors are real
|
|
242
291
|
* authoring mistakes and surface as `E_RESTRICTION_EMPTY` (upstream
|
|
243
292
|
* Report 109).
|
|
244
293
|
*/
|
|
@@ -262,45 +311,10 @@ function checkPattern(pattern, path, issues, facetType) {
|
|
|
262
311
|
issues.push({
|
|
263
312
|
severity: 'warning',
|
|
264
313
|
code: 'W_REGEX_UNVERIFIED',
|
|
265
|
-
message: `xs:pattern
|
|
314
|
+
message: `xs:pattern cannot be evaluated exactly, so validation will refuse it: ${result.reason}`,
|
|
266
315
|
path,
|
|
267
316
|
facetType,
|
|
268
317
|
detail: { pattern },
|
|
269
318
|
});
|
|
270
319
|
}
|
|
271
|
-
/**
|
|
272
|
-
* Validate that `value` matches the lexical space of the supplied XSD
|
|
273
|
-
* primitive base. Mirrors upstream `XsTypes.IsValid` (see the table, and the
|
|
274
|
-
* date family it hands off); flags `<xs:enumeration value="12,0"/>` under
|
|
275
|
-
* `<xs:restriction base="xs:double">`.
|
|
276
|
-
*/
|
|
277
|
-
const XS_VALUE_REGEX = {
|
|
278
|
-
// Upstream `XmlRegex.cs`, except the mantissa: `[0-9]*(?:\.[0-9]*)?` not
|
|
279
|
-
// `[0-9]*\.?[0-9]*`, whose two adjacent digit runs make a failing lexeme
|
|
280
|
-
// retry every split (quadratic, #3113). Same language, one parse/prefix.
|
|
281
|
-
'xs:integer': /^[+-]?(\d+)$/,
|
|
282
|
-
'xs:double': /^([-+]?[0-9]*(?:\.[0-9]*)?([eE][-+]?[0-9]+)?|NaN|\+INF|-INF)$/,
|
|
283
|
-
'xs:float': /^([-+]?[0-9]*(?:\.[0-9]*)?([eE][-+]?[0-9]+)?|NaN|\+INF|-INF)$/,
|
|
284
|
-
'xs:decimal': /^([-+]?[0-9]*(?:\.[0-9]*)?([eE][-+]?[0-9]+)?|NaN|\+INF|-INF)$/,
|
|
285
|
-
'xs:boolean': /^(true|false|0|1)$/,
|
|
286
|
-
// The date family is absent on purpose: its value space is a calendar, not a
|
|
287
|
-
// digit-run shape, so it goes through `isValidXsdDateTimeLiteral` (#3721).
|
|
288
|
-
'xs:duration': /^[-+]?P(\d+Y)?(\d+M)?(\d+D)?(T(\d+H)?(\d+M)?(\d+S)?)?$/,
|
|
289
|
-
};
|
|
290
|
-
export function isValidLexicalForXsType(value, base) {
|
|
291
|
-
if (isXsdDateTimeBase(base))
|
|
292
|
-
return isValidXsdDateTimeLiteral(value, base);
|
|
293
|
-
const rx = XS_VALUE_REGEX[base];
|
|
294
|
-
if (!rx)
|
|
295
|
-
return true; // base we don't recognise → don't fabricate errors
|
|
296
|
-
if (base === 'xs:double' || base === 'xs:float' || base === 'xs:decimal') {
|
|
297
|
-
// Digit required in the MANTISSA, specials exempt (#3336). Testing the
|
|
298
|
-
// whole lexeme accepted 'e5' on the exponent's digit and rejected the
|
|
299
|
-
// digitless specials, which is how this and `literalCastsUnder` disagreed.
|
|
300
|
-
const bare = !XSD_NUMERIC_SPECIALS.has(value);
|
|
301
|
-
if (bare && !/[0-9]/.test(value.split(/[eE]/)[0]))
|
|
302
|
-
return false;
|
|
303
|
-
}
|
|
304
|
-
return rx.test(value);
|
|
305
|
-
}
|
|
306
320
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/audit/coherence/index.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAkB/D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/audit/coherence/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,9 +12,9 @@ export { translateXsdRegex, type TranslateResult };
|
|
|
12
12
|
* - `{ ok: true }` when the pattern is valid (after translation).
|
|
13
13
|
* - `{ ok: false, severity: 'error', reason }` for syntactic errors
|
|
14
14
|
* that JS *and* XSD agree on (e.g. unclosed `[`).
|
|
15
|
-
* - `{ ok: false, severity: 'warning', reason }` when the pattern uses
|
|
16
|
-
*
|
|
17
|
-
* an undelimitable char-class subtraction).
|
|
15
|
+
* - `{ ok: false, severity: 'warning', reason }` when the pattern uses a
|
|
16
|
+
* construct with no exact translation (an unknown `\p{Is…}` block, an
|
|
17
|
+
* escape XSD does not define, an undelimitable char-class subtraction).
|
|
18
18
|
*/
|
|
19
19
|
export declare function compileXsdRegex(pattern: string): {
|
|
20
20
|
ok: true;
|
|
@@ -15,9 +15,9 @@ export { translateXsdRegex };
|
|
|
15
15
|
* - `{ ok: true }` when the pattern is valid (after translation).
|
|
16
16
|
* - `{ ok: false, severity: 'error', reason }` for syntactic errors
|
|
17
17
|
* that JS *and* XSD agree on (e.g. unclosed `[`).
|
|
18
|
-
* - `{ ok: false, severity: 'warning', reason }` when the pattern uses
|
|
19
|
-
*
|
|
20
|
-
* an undelimitable char-class subtraction).
|
|
18
|
+
* - `{ ok: false, severity: 'warning', reason }` when the pattern uses a
|
|
19
|
+
* construct with no exact translation (an unknown `\p{Is…}` block, an
|
|
20
|
+
* escape XSD does not define, an undelimitable char-class subtraction).
|
|
21
21
|
*/
|
|
22
22
|
export function compileXsdRegex(pattern) {
|
|
23
23
|
if (pattern === '') {
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Attribute `<value>` against the attribute's own type (IDS-006). An IFC
|
|
3
|
+
* attribute has an XSD primitive type per entity (`IfcTask.IsMilestone`
|
|
4
|
+
* is `xs:boolean`, `IfcStairFlight.NumberOfRisers` is `xs:integer`), so a
|
|
5
|
+
* value that is no literal of that type (`FALSE`, `42.0`, `42,3`), or a
|
|
6
|
+
* restriction on an incompatible base (an `xs:string` pattern on an
|
|
7
|
+
* `xs:double` attribute), can never match.
|
|
8
|
+
*
|
|
9
|
+
* Checked only when the attribute's type is unambiguous: one XSD type
|
|
10
|
+
* across every attribute the name resolves to on the applicability
|
|
11
|
+
* entity's inheritance chain.
|
|
12
|
+
*/
|
|
13
|
+
import { type IfcEntityInfo, type IfcSchemaVersion } from '@ifc-lite/data';
|
|
14
|
+
import type { IDSFacet } from '../../types.js';
|
|
15
|
+
import type { IDSAuditIssue } from '../types.js';
|
|
16
|
+
export declare function auditAttributeValueType(facet: Extract<IDSFacet, {
|
|
17
|
+
type: 'attribute';
|
|
18
|
+
}>, version: IfcSchemaVersion, chain: readonly IfcEntityInfo[], path: string, issues: IDSAuditIssue[]): void;
|
|
19
|
+
//# sourceMappingURL=attribute-value.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attribute-value.d.ts","sourceRoot":"","sources":["../../../src/audit/ifc-schema/attribute-value.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAwB,KAAK,aAAa,EAAE,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEjG,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAmCjD,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,OAAO,CAAC,QAAQ,EAAE;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,CAAC,EAC/C,OAAO,EAAE,gBAAgB,EACzB,KAAK,EAAE,SAAS,aAAa,EAAE,EAC/B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,aAAa,EAAE,GACtB,IAAI,CAeN"}
|
|
@@ -0,0 +1,71 @@
|
|
|
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
|
+
* Attribute `<value>` against the attribute's own type (IDS-006). An IFC
|
|
6
|
+
* attribute has an XSD primitive type per entity (`IfcTask.IsMilestone`
|
|
7
|
+
* is `xs:boolean`, `IfcStairFlight.NumberOfRisers` is `xs:integer`), so a
|
|
8
|
+
* value that is no literal of that type (`FALSE`, `42.0`, `42,3`), or a
|
|
9
|
+
* restriction on an incompatible base (an `xs:string` pattern on an
|
|
10
|
+
* `xs:double` attribute), can never match.
|
|
11
|
+
*
|
|
12
|
+
* Checked only when the attribute's type is unambiguous: one XSD type
|
|
13
|
+
* across every attribute the name resolves to on the applicability
|
|
14
|
+
* entity's inheritance chain.
|
|
15
|
+
*/
|
|
16
|
+
import { getAttributeXsdTypes } from '@ifc-lite/data';
|
|
17
|
+
import { assertGuardedRegexPattern } from '@ifc-lite/regex-guard';
|
|
18
|
+
import { checkRestrictionBase, checkSimpleValueLexical } from './datatype-check.js';
|
|
19
|
+
/** Attribute names on `chain` that the facet's name constraint selects. */
|
|
20
|
+
function resolveAttributeNames(name, chain) {
|
|
21
|
+
const declared = chain.flatMap((entity) => entity.attributes);
|
|
22
|
+
switch (name.type) {
|
|
23
|
+
case 'simpleValue':
|
|
24
|
+
return declared.filter((a) => a === name.value);
|
|
25
|
+
case 'enumeration':
|
|
26
|
+
return declared.filter((a) => name.values.includes(a));
|
|
27
|
+
case 'pattern': {
|
|
28
|
+
// An unsafe or uncompilable pattern resolves to nothing here; the
|
|
29
|
+
// regex guard and the coherence audit are what report it.
|
|
30
|
+
try {
|
|
31
|
+
assertGuardedRegexPattern(name.pattern);
|
|
32
|
+
const rx = new RegExp(`^(?:${name.pattern})$`);
|
|
33
|
+
return declared.filter((a) => rx.test(a));
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return [];
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
default:
|
|
40
|
+
return [];
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
function xsdTypesOnChain(version, chain, attribute) {
|
|
44
|
+
for (const entity of chain) {
|
|
45
|
+
const types = getAttributeXsdTypes(version, entity.name, attribute);
|
|
46
|
+
if (types)
|
|
47
|
+
return types;
|
|
48
|
+
}
|
|
49
|
+
return [];
|
|
50
|
+
}
|
|
51
|
+
export function auditAttributeValueType(facet, version, chain, path, issues) {
|
|
52
|
+
if (!facet.value)
|
|
53
|
+
return;
|
|
54
|
+
const types = new Set();
|
|
55
|
+
const attributes = resolveAttributeNames(facet.name, chain);
|
|
56
|
+
for (const attribute of attributes) {
|
|
57
|
+
const own = xsdTypesOnChain(version, chain, attribute);
|
|
58
|
+
// An attribute without a known XSD type (entity- or select-typed) makes the union unknowable.
|
|
59
|
+
if (own.length === 0)
|
|
60
|
+
return;
|
|
61
|
+
for (const type of own)
|
|
62
|
+
types.add(type);
|
|
63
|
+
}
|
|
64
|
+
if (types.size !== 1)
|
|
65
|
+
return;
|
|
66
|
+
const [xsdType] = types;
|
|
67
|
+
const label = attributes.length === 1 ? attributes[0] : attributes.join(' | ');
|
|
68
|
+
checkSimpleValueLexical(facet.value, xsdType, label, `${path}.value`, 'attribute', issues);
|
|
69
|
+
checkRestrictionBase(facet.value, xsdType, label, `${path}.value`, issues, 'attribute');
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=attribute-value.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attribute-value.js","sourceRoot":"","sources":["../../../src/audit/ifc-schema/attribute-value.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,5 +20,13 @@ export declare function checkDataTypeMatch(prop: IfcPropertyInfo, declared: stri
|
|
|
20
20
|
* looks like a string enumeration unless we know the parent
|
|
21
21
|
* `<xs:restriction base="xs:integer">`.
|
|
22
22
|
*/
|
|
23
|
-
export declare function checkRestrictionBase(c: IDSConstraint, backingType: string, dataType: string, path: string, issues: IDSAuditIssue[]): void;
|
|
23
|
+
export declare function checkRestrictionBase(c: IDSConstraint, backingType: string, dataType: string, path: string, issues: IDSAuditIssue[], facetType?: 'property' | 'attribute'): void;
|
|
24
|
+
/**
|
|
25
|
+
* A `<simpleValue>` compared against a typed value must be a literal of
|
|
26
|
+
* that type's backing XSD type (upstream Report 305 family; IDS-005):
|
|
27
|
+
* `FALSE` is no `xs:boolean` (booleans are lowercase), `42.0` and `42.`
|
|
28
|
+
* are no `xs:integer`, `42,3` is no `xs:double`. Such a value can never
|
|
29
|
+
* equal a real one, so the requirement could only ever fail.
|
|
30
|
+
*/
|
|
31
|
+
export declare function checkSimpleValueLexical(c: IDSConstraint, backingType: string, dataType: string, path: string, facetType: 'property' | 'attribute', issues: IDSAuditIssue[]): void;
|
|
24
32
|
//# sourceMappingURL=datatype-check.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datatype-check.d.ts","sourceRoot":"","sources":["../../../src/audit/ifc-schema/datatype-check.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"datatype-check.d.ts","sourceRoot":"","sources":["../../../src/audit/ifc-schema/datatype-check.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,eAAe,EACrB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,aAAa,EAAE,GACtB,IAAI,CAqCN;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAClC,CAAC,EAAE,aAAa,EAChB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,aAAa,EAAE,EACvB,SAAS,GAAE,UAAU,GAAG,WAAwB,GAC/C,IAAI,CAyCN;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,CAAC,EAAE,aAAa,EAChB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,UAAU,GAAG,WAAW,EACnC,MAAM,EAAE,aAAa,EAAE,GACtB,IAAI,CAWN"}
|
|
@@ -1,6 +1,7 @@
|
|
|
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
|
+
import { isValidLexicalForXsType } from '../../constraints/xsd-lexical.js';
|
|
4
5
|
export function checkDataTypeMatch(prop, declared, path, psetName, propName, issues) {
|
|
5
6
|
// `IDSPROPERTYSINGLEVALUE` etc. — the IDS spec uses the IFC pset
|
|
6
7
|
// template type name, not the IFC datatype. We allow both: if the
|
|
@@ -53,7 +54,7 @@ export function checkDataTypeMatch(prop, declared, path, psetName, propName, iss
|
|
|
53
54
|
* looks like a string enumeration unless we know the parent
|
|
54
55
|
* `<xs:restriction base="xs:integer">`.
|
|
55
56
|
*/
|
|
56
|
-
export function checkRestrictionBase(c, backingType, dataType, path, issues) {
|
|
57
|
+
export function checkRestrictionBase(c, backingType, dataType, path, issues, facetType = 'property') {
|
|
57
58
|
// Only restrictions can mismatch — simpleValue is always treated as
|
|
58
59
|
// string-compatible by the IDS XSD.
|
|
59
60
|
if (c.type === 'simpleValue')
|
|
@@ -91,11 +92,32 @@ export function checkRestrictionBase(c, backingType, dataType, path, issues) {
|
|
|
91
92
|
code: 'E_RESTRICTION_BASE_MISMATCH',
|
|
92
93
|
message: `xs:restriction base (${inferred}) is not compatible with dataType "${dataType}" (backing ${backingType})`,
|
|
93
94
|
path,
|
|
94
|
-
facetType
|
|
95
|
+
facetType,
|
|
95
96
|
detail: { inferred, expected: backingType, dataType },
|
|
96
97
|
});
|
|
97
98
|
}
|
|
98
99
|
}
|
|
100
|
+
/**
|
|
101
|
+
* A `<simpleValue>` compared against a typed value must be a literal of
|
|
102
|
+
* that type's backing XSD type (upstream Report 305 family; IDS-005):
|
|
103
|
+
* `FALSE` is no `xs:boolean` (booleans are lowercase), `42.0` and `42.`
|
|
104
|
+
* are no `xs:integer`, `42,3` is no `xs:double`. Such a value can never
|
|
105
|
+
* equal a real one, so the requirement could only ever fail.
|
|
106
|
+
*/
|
|
107
|
+
export function checkSimpleValueLexical(c, backingType, dataType, path, facetType, issues) {
|
|
108
|
+
if (c.type !== 'simpleValue' || c.value === '')
|
|
109
|
+
return;
|
|
110
|
+
if (isValidLexicalForXsType(c.value, backingType))
|
|
111
|
+
return;
|
|
112
|
+
issues.push({
|
|
113
|
+
severity: 'error',
|
|
114
|
+
code: 'E_RESTRICTION_VALUE_MISMATCH',
|
|
115
|
+
message: `value "${c.value}" is not a valid ${backingType} literal, so it can never equal a ${dataType} value`,
|
|
116
|
+
path,
|
|
117
|
+
facetType,
|
|
118
|
+
detail: { value: c.value, base: backingType, dataType },
|
|
119
|
+
});
|
|
120
|
+
}
|
|
99
121
|
/**
|
|
100
122
|
* XSD type compatibility per upstream `IdsProperty.cs`: the restriction
|
|
101
123
|
* `@base` must equal the IFC dataType's backing XSD type exactly. The
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datatype-check.js","sourceRoot":"","sources":["../../../src/audit/ifc-schema/datatype-check.ts"],"names":[],"mappings":"AAAA;;+DAE+D;
|
|
1
|
+
{"version":3,"file":"datatype-check.js","sourceRoot":"","sources":["../../../src/audit/ifc-schema/datatype-check.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAY/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAE3E,MAAM,UAAU,kBAAkB,CAChC,IAAqB,EACrB,QAAgB,EAChB,IAAY,EACZ,QAAgB,EAChB,QAAgB,EAChB,MAAuB;IAEvB,iEAAiE;IACjE,kEAAkE;IAClE,kEAAkE;IAClE,2EAA2E;IAC3E,0EAA0E;IAC1E,wBAAwB;IACxB,EAAE;IACF,kEAAkE;IAClE,uEAAuE;IACvE,6DAA6D;IAC7D,2DAA2D;IAC3D,MAAM,aAAa,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IAC7C,MAAM,QAAQ,GACZ,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC1E,IAAI,QAAQ,IAAI,QAAQ,CAAC,WAAW,EAAE,KAAK,aAAa;QAAE,OAAO;IACjE,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClD,IAAI,WAAW,IAAI,aAAa,KAAK,WAAW;QAAE,OAAO;IACzD,gEAAgE;IAChE,kEAAkE;IAClE,+DAA+D;IAC/D,IAAI,CAAC,QAAQ;QAAE,OAAO;IACtB,sEAAsE;IACtE,uEAAuE;IACvE,iDAAiD;IACjD,MAAM,CAAC,IAAI,CAAC;QACV,QAAQ,EAAE,OAAO;QACjB,IAAI,EAAE,yBAAyB;QAC/B,OAAO,EAAE,GAAG,QAAQ,IAAI,QAAQ,aAAa,QAAQ,yBAAyB,QAAQ,EAAE;QACxF,IAAI,EAAE,GAAG,IAAI,WAAW;QACxB,SAAS,EAAE,UAAU;QACrB,MAAM,EAAE;YACN,QAAQ;YACR,MAAM,EAAE,QAAQ;YAChB,QAAQ,EAAE,QAAQ;SACnB;KACF,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,oBAAoB,CAClC,CAAgB,EAChB,WAAmB,EACnB,QAAgB,EAChB,IAAY,EACZ,MAAuB,EACvB,YAAsC,UAAU;IAEhD,oEAAoE;IACpE,oCAAoC;IACpC,IAAI,CAAC,CAAC,IAAI,KAAK,aAAa;QAAE,OAAO;IACrC,MAAM,YAAY,GAChB,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,KAAK,aAAa,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ;QACrE,CAAC,CAAC,CAAC,CAAC,IAAI;QACR,CAAC,CAAC,SAAS,CAAC;IAChB,IAAI,QAA4B,CAAC;IACjC,IAAI,YAAY,EAAE,CAAC;QACjB,QAAQ,GAAG,YAAY,CAAC;IAC1B,CAAC;SAAM,CAAC;QACN,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;YACf,KAAK,SAAS,CAAC;YACf,KAAK,aAAa;gBAChB,QAAQ,GAAG,WAAW,CAAC;gBACvB,MAAM;YACR,KAAK,QAAQ;gBACX,IACE,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ;oBAC5B,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ;oBAC/B,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,EAC/B,CAAC;oBACD,QAAQ,GAAG,WAAW,CAAC;gBACzB,CAAC;qBAAM,CAAC;oBACN,QAAQ,GAAG,WAAW,CAAC;gBACzB,CAAC;gBACD,MAAM;QACV,CAAC;IACH,CAAC;IACD,IAAI,CAAC,QAAQ;QAAE,OAAO;IACtB,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAE,CAAC;QAC/C,MAAM,CAAC,IAAI,CAAC;YACV,QAAQ,EAAE,OAAO;YACjB,IAAI,EAAE,6BAA6B;YACnC,OAAO,EAAE,wBAAwB,QAAQ,sCAAsC,QAAQ,cAAc,WAAW,GAAG;YACnH,IAAI;YACJ,SAAS;YACT,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE;SACtD,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CACrC,CAAgB,EAChB,WAAmB,EACnB,QAAgB,EAChB,IAAY,EACZ,SAAmC,EACnC,MAAuB;IAEvB,IAAI,CAAC,CAAC,IAAI,KAAK,aAAa,IAAI,CAAC,CAAC,KAAK,KAAK,EAAE;QAAE,OAAO;IACvD,IAAI,uBAAuB,CAAC,CAAC,CAAC,KAAK,EAAE,WAAW,CAAC;QAAE,OAAO;IAC1D,MAAM,CAAC,IAAI,CAAC;QACV,QAAQ,EAAE,OAAO;QACjB,IAAI,EAAE,8BAA8B;QACpC,OAAO,EAAE,UAAU,CAAC,CAAC,KAAK,oBAAoB,WAAW,qCAAqC,QAAQ,QAAQ;QAC9G,IAAI;QACJ,SAAS;QACT,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE;KACxD,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,kBAAkB,CAAC,QAAgB,EAAE,QAAgB;IAC5D,IAAI,QAAQ,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACvC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC;IAChE,IAAI,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9D,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,kBAAkB,CAAC,IAA6B;IACvD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,QAAQ;YACX,OAAO,wBAAwB,CAAC;QAClC,KAAK,aAAa;YAChB,OAAO,4BAA4B,CAAC;QACtC,KAAK,MAAM;YACT,OAAO,sBAAsB,CAAC;QAChC,KAAK,SAAS;YACZ,OAAO,yBAAyB,CAAC;QACnC,KAAK,WAAW;YACd,OAAO,2BAA2B,CAAC;QACrC;YACE,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Entity-name checks that need more than one facet (IDS-007).
|
|
3
|
+
*
|
|
4
|
+
* - IDS entity names are upper case (`IFCWALL`); `IfcWall` names nothing
|
|
5
|
+
* (corpus: entity/invalid-entities_must_be_specified_as_uppercase_strings).
|
|
6
|
+
* - An entity facet in the requirements is checked against the elements the
|
|
7
|
+
* applicability selects, by exact class (IDS 1.0 entity facets do not match
|
|
8
|
+
* subclasses). When no class the requirement admits is one the
|
|
9
|
+
* applicability admits, every applicable element fails, so the
|
|
10
|
+
* specification can only ever fail (corpus: entity/invalid-an_entity_not_
|
|
11
|
+
* matching_the_specified_class_should_fail, …_subclasses_are_not_considered_
|
|
12
|
+
* as_matching, …_as_a_xsd_regex_pattern_1_2, …_as_an_enumeration_3_3).
|
|
13
|
+
*/
|
|
14
|
+
import type { IfcSchemaVersion } from '@ifc-lite/data';
|
|
15
|
+
import type { IDSEntityFacet } from '../../types.js';
|
|
16
|
+
import type { IDSAuditIssue } from '../types.js';
|
|
17
|
+
export type EntityResolver = (facet: IDSEntityFacet, version: IfcSchemaVersion) => Promise<string[]>;
|
|
18
|
+
/** Literal entity names (simple value or enumeration) must be written in upper case. */
|
|
19
|
+
export declare function auditEntityNameCase(facet: IDSEntityFacet, path: string, issues: IDSAuditIssue[]): void;
|
|
20
|
+
export declare function auditEntityRequirement(requirement: IDSEntityFacet, applicability: IDSEntityFacet | undefined, version: IfcSchemaVersion, resolve: EntityResolver, path: string, issues: IDSAuditIssue[]): Promise<void>;
|
|
21
|
+
//# sourceMappingURL=entity-requirement.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-requirement.d.ts","sourceRoot":"","sources":["../../../src/audit/ifc-schema/entity-requirement.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,gBAAgB,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;AAErG,wFAAwF;AACxF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI,CAetG;AAED,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE,cAAc,EAC3B,aAAa,EAAE,cAAc,GAAG,SAAS,EACzC,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,aAAa,EAAE,GACtB,OAAO,CAAC,IAAI,CAAC,CAef"}
|
|
@@ -0,0 +1,45 @@
|
|
|
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
|
+
/** Literal entity names (simple value or enumeration) must be written in upper case. */
|
|
5
|
+
export function auditEntityNameCase(facet, path, issues) {
|
|
6
|
+
const names = facet.name.type === 'simpleValue' ? [facet.name.value]
|
|
7
|
+
: facet.name.type === 'enumeration' ? facet.name.values
|
|
8
|
+
: [];
|
|
9
|
+
for (const name of names) {
|
|
10
|
+
if (!name || name === name.toUpperCase())
|
|
11
|
+
continue;
|
|
12
|
+
issues.push({
|
|
13
|
+
severity: 'error',
|
|
14
|
+
code: 'E_IFC_ENTITY_CASE',
|
|
15
|
+
message: `entity name "${name}" must be upper case ("${name.toUpperCase()}"); IDS entity names are case-sensitive`,
|
|
16
|
+
path: `${path}.name`,
|
|
17
|
+
facetType: 'entity',
|
|
18
|
+
detail: { value: name, expected: name.toUpperCase() },
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export async function auditEntityRequirement(requirement, applicability, version, resolve, path, issues) {
|
|
23
|
+
if (!applicability)
|
|
24
|
+
return;
|
|
25
|
+
const [applicable, required] = await Promise.all([resolve(applicability, version), resolve(requirement, version)]);
|
|
26
|
+
// An unresolvable side (bad pattern, unknown schema) proves nothing.
|
|
27
|
+
if (applicable.length === 0 || required.length === 0)
|
|
28
|
+
return;
|
|
29
|
+
const admitted = new Set(required.map((name) => name.toUpperCase()));
|
|
30
|
+
if (applicable.some((name) => admitted.has(name.toUpperCase())))
|
|
31
|
+
return;
|
|
32
|
+
issues.push({
|
|
33
|
+
severity: 'error',
|
|
34
|
+
code: 'E_IFC_ENTITY_IMPOSSIBLE',
|
|
35
|
+
message: `the required entity (${preview(required)}) is never one of the applicable entities (${preview(applicable)}) in ${version}, so every applicable element fails; IDS entity facets match the exact class, not subclasses`,
|
|
36
|
+
path: `${path}.name`,
|
|
37
|
+
facetType: 'entity',
|
|
38
|
+
detail: { required: preview(required), applicable: preview(applicable), version },
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
function preview(names) {
|
|
42
|
+
const shown = names.slice(0, 5).map((n) => n.toUpperCase()).join(', ');
|
|
43
|
+
return names.length > 5 ? `${shown}, … ${names.length - 5} more` : shown;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=entity-requirement.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-requirement.js","sourceRoot":"","sources":["../../../src/audit/ifc-schema/entity-requirement.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAsB/D,wFAAwF;AACxF,MAAM,UAAU,mBAAmB,CAAC,KAAqB,EAAE,IAAY,EAAE,MAAuB;IAC9F,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;QAClE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM;YACrD,CAAC,CAAC,EAAE,CAAC;IACT,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,IAAI,CAAC,WAAW,EAAE;YAAE,SAAS;QACnD,MAAM,CAAC,IAAI,CAAC;YACV,QAAQ,EAAE,OAAO;YACjB,IAAI,EAAE,mBAAmB;YACzB,OAAO,EAAE,gBAAgB,IAAI,0BAA0B,IAAI,CAAC,WAAW,EAAE,yCAAyC;YAClH,IAAI,EAAE,GAAG,IAAI,OAAO;YACpB,SAAS,EAAE,QAAQ;YACnB,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE;SACtD,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,WAA2B,EAC3B,aAAyC,EACzC,OAAyB,EACzB,OAAuB,EACvB,IAAY,EACZ,MAAuB;IAEvB,IAAI,CAAC,aAAa;QAAE,OAAO;IAC3B,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACnH,qEAAqE;IACrE,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAC7D,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IACrE,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAAE,OAAO;IACxE,MAAM,CAAC,IAAI,CAAC;QACV,QAAQ,EAAE,OAAO;QACjB,IAAI,EAAE,yBAAyB;QAC/B,OAAO,EAAE,wBAAwB,OAAO,CAAC,QAAQ,CAAC,8CAA8C,OAAO,CAAC,UAAU,CAAC,QAAQ,OAAO,8FAA8F;QAChO,IAAI,EAAE,GAAG,IAAI,OAAO;QACpB,SAAS,EAAE,QAAQ;QACnB,MAAM,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE;KAClF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,OAAO,CAAC,KAAwB;IACvC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvE,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;AAC3E,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/audit/ifc-schema/index.ts"],"names":[],"mappings":"AAiCA,OAAO,KAAK,EACV,WAAW,EAKZ,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/audit/ifc-schema/index.ts"],"names":[],"mappings":"AAiCA,OAAO,KAAK,EACV,WAAW,EAKZ,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAOlE,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,WAAW,EAChB,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,YAAY,CAAC,GAC3C,OAAO,CAAC,aAAa,EAAE,CAAC,CAwB1B"}
|