@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,111 @@
|
|
|
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
|
+
* Translate the XSD pattern. Returns the JS-compatible pattern plus a
|
|
6
|
+
* `supported` flag — when `false`, the auditor should warn rather than
|
|
7
|
+
* compile-test the result (the unsupported construct may produce
|
|
8
|
+
* spurious failures).
|
|
9
|
+
*/
|
|
10
|
+
export function translateXsdRegex(pattern) {
|
|
11
|
+
// Char-class subtraction is only safely expressible via lookarounds in
|
|
12
|
+
// simple cases; in general it requires set algebra. Surface it as
|
|
13
|
+
// unsupported so the auditor warns.
|
|
14
|
+
if (/\[[^\]]*-\[/.test(pattern)) {
|
|
15
|
+
return {
|
|
16
|
+
pattern,
|
|
17
|
+
supported: false,
|
|
18
|
+
reason: 'XSD character-class subtraction is not supported in JS regex',
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
let translated = '';
|
|
22
|
+
let i = 0;
|
|
23
|
+
while (i < pattern.length) {
|
|
24
|
+
const ch = pattern.charAt(i);
|
|
25
|
+
if (ch === '\\' && i + 1 < pattern.length) {
|
|
26
|
+
const next = pattern.charAt(i + 1);
|
|
27
|
+
const replacement = mapEscape(next);
|
|
28
|
+
if (replacement) {
|
|
29
|
+
translated += replacement;
|
|
30
|
+
i += 2;
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
// Pass through any other escape (`\n`, `\.`, `\\`, …).
|
|
34
|
+
translated += ch + next;
|
|
35
|
+
i += 2;
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
translated += ch;
|
|
39
|
+
i++;
|
|
40
|
+
}
|
|
41
|
+
return { pattern: translated, supported: true, reason: '' };
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Map an XSD-specific escape character to its JS regex Unicode-property
|
|
45
|
+
* equivalent. Returns `undefined` when the escape is identical in both
|
|
46
|
+
* dialects (and thus needs no translation).
|
|
47
|
+
*
|
|
48
|
+
* The XML production rules these escape codes implement live in the
|
|
49
|
+
* W3C XML 1.0 spec § 2.3 (NameStartChar / NameChar) and § 2.5 (Digit /
|
|
50
|
+
* Letter). We use JS Unicode property escapes (`\p{L}`, `\p{Nd}`) which
|
|
51
|
+
* are equivalent for our purposes when the pattern is compiled with the
|
|
52
|
+
* `u` flag.
|
|
53
|
+
*/
|
|
54
|
+
function mapEscape(ch) {
|
|
55
|
+
switch (ch) {
|
|
56
|
+
case 'i':
|
|
57
|
+
// NameStartChar: letters + `_` + `:` + extended Unicode letters.
|
|
58
|
+
return '[\\p{L}_:]';
|
|
59
|
+
case 'I':
|
|
60
|
+
return '[^\\p{L}_:]';
|
|
61
|
+
case 'c':
|
|
62
|
+
// NameChar: NameStartChar + digits + `.` + `-` + U+00B7 + combining marks.
|
|
63
|
+
return '[\\p{L}\\p{Nd}_:.\\-\\u00B7\\u0300-\\u036F\\u203F-\\u2040]';
|
|
64
|
+
case 'C':
|
|
65
|
+
return '[^\\p{L}\\p{Nd}_:.\\-\\u00B7\\u0300-\\u036F\\u203F-\\u2040]';
|
|
66
|
+
case 'd':
|
|
67
|
+
// JS \d matches `[0-9]`; XSD \d matches all Unicode digits. Use
|
|
68
|
+
// \p{Nd} for full fidelity.
|
|
69
|
+
return '\\p{Nd}';
|
|
70
|
+
case 'D':
|
|
71
|
+
return '\\P{Nd}';
|
|
72
|
+
case 'w':
|
|
73
|
+
// JS \w matches `[A-Za-z0-9_]`; XSD \w matches Unicode letters +
|
|
74
|
+
// digits without underscore. Use a Unicode class that mirrors the
|
|
75
|
+
// XSD definition.
|
|
76
|
+
return '[\\p{L}\\p{Nd}]';
|
|
77
|
+
case 'W':
|
|
78
|
+
return '[^\\p{L}\\p{Nd}]';
|
|
79
|
+
default:
|
|
80
|
+
return undefined;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Try to compile `pattern` as XSD regex semantics. Returns:
|
|
85
|
+
* - `{ ok: true }` when the pattern is valid (after translation).
|
|
86
|
+
* - `{ ok: false, severity: 'error', reason }` for syntactic errors
|
|
87
|
+
* that JS *and* XSD agree on (e.g. unclosed `[`).
|
|
88
|
+
* - `{ ok: false, severity: 'warning', reason }` when the pattern uses
|
|
89
|
+
* XSD-only syntax we can't translate (char-class subtraction).
|
|
90
|
+
*/
|
|
91
|
+
export function compileXsdRegex(pattern) {
|
|
92
|
+
if (pattern === '') {
|
|
93
|
+
return { ok: false, severity: 'error', reason: 'pattern is empty' };
|
|
94
|
+
}
|
|
95
|
+
const translated = translateXsdRegex(pattern);
|
|
96
|
+
if (!translated.supported) {
|
|
97
|
+
return { ok: false, severity: 'warning', reason: translated.reason };
|
|
98
|
+
}
|
|
99
|
+
try {
|
|
100
|
+
new RegExp(translated.pattern, 'u');
|
|
101
|
+
return { ok: true, jsPattern: translated.pattern };
|
|
102
|
+
}
|
|
103
|
+
catch (err) {
|
|
104
|
+
return {
|
|
105
|
+
ok: false,
|
|
106
|
+
severity: 'error',
|
|
107
|
+
reason: err instanceof Error ? err.message : String(err),
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=regex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regex.js","sourceRoot":"","sources":["../../../src/audit/coherence/regex.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { IDSDocument } from '../../types.js';
|
|
2
|
+
import type { IDSAuditIssue, IDSAuditOptions } from '../types.js';
|
|
3
|
+
export declare function runIfcSchemaAudit(doc: IDSDocument, options: Pick<IDSAuditOptions, 'ifcVersion'>): Promise<IDSAuditIssue[]>;
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +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;AAElE,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,WAAW,EAChB,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,YAAY,CAAC,GAC3C,OAAO,CAAC,aAAa,EAAE,CAAC,CAwB1B"}
|