@ifc-lite/encoding 1.16.0 → 2.0.0
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 +1 -1
- package/dist/property-value.d.ts +15 -1
- package/dist/property-value.d.ts.map +1 -1
- package/dist/property-value.js +19 -6
- package/dist/property-value.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -34,7 +34,7 @@ parsePropertyValue(['IFCBOOLEAN', '.T.']); // { displayValue: 'True', ifcType: .
|
|
|
34
34
|
- `generateIfcGuid`, `generateUuid`: new identifiers
|
|
35
35
|
- `uuidToIfcGuid`, `ifcGuidToUuid`: convert between UUIDs and 22-char IFC GUIDs
|
|
36
36
|
- `isValidIfcGuid`, `isValidUuid`: validation
|
|
37
|
-
- `parsePropertyValue`: turn
|
|
37
|
+
- `parsePropertyValue`: turn a parsed STEP property value (typed arrays, `.T.`/`.F.`, enums) into a display string plus optional IFC type name. It does **not** decode `\X2\`-style escapes: every ifc-lite parse path already decodes exactly once, at the parse boundary, and decoding a second time would collapse an authored `\\` a second time. Pass a still-encoded literal through `decodeIfcString` first.
|
|
38
38
|
|
|
39
39
|
## Links
|
|
40
40
|
|
package/dist/property-value.d.ts
CHANGED
|
@@ -11,9 +11,23 @@ export interface ParsedPropertyValue {
|
|
|
11
11
|
* Handles:
|
|
12
12
|
* - TypedValues like [IFCIDENTIFIER, '100 x 150mm'] -> display '100 x 150mm', tooltip 'Identifier'
|
|
13
13
|
* - Boolean enums like '.T.' -> 'True'
|
|
14
|
-
* - IFC encoded strings with \X2\, \X\ escape sequences
|
|
15
14
|
* - Null/undefined -> '\u2014'
|
|
16
15
|
* - Regular values -> string conversion
|
|
16
|
+
*
|
|
17
|
+
* It deliberately does NOT decode STEP escapes. Every producer of a property
|
|
18
|
+
* value decodes exactly once, at parse time: the TypeScript path via
|
|
19
|
+
* `EntityExtractor.parseAttributeValue` / `columnar-parser-attributes.ts`, the
|
|
20
|
+
* Rust/WASM and server paths via `AttributeValue::from_token`. The input here
|
|
21
|
+
* is therefore already literal text, and decoding a second time is not a no-op
|
|
22
|
+
* \u2014 since #2394 `decodeIfcString` collapses `\\` to `\`, so an authored UNC
|
|
23
|
+
* path `\\server\share` would render as `\server\share`. `C:\temp` is a fixed
|
|
24
|
+
* point of the decoder, which is why the defect hides on the common case.
|
|
25
|
+
*
|
|
26
|
+
* Making the decoder idempotent instead would not work: idempotence requires
|
|
27
|
+
* treating an already-decoded `\` and an authored, still-doubled `\\` the same
|
|
28
|
+
* way, which is exactly the ambiguity the one-decode rule removes. The
|
|
29
|
+
* invariant to hold is "decode once, at the parse boundary", not "decode
|
|
30
|
+
* defensively wherever a string is displayed".
|
|
17
31
|
*/
|
|
18
32
|
export declare function parsePropertyValue(value: unknown): ParsedPropertyValue;
|
|
19
33
|
//# sourceMappingURL=property-value.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"property-value.d.ts","sourceRoot":"","sources":["../src/property-value.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"property-value.d.ts","sourceRoot":"","sources":["../src/property-value.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAuCD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,mBAAmB,CAqEtE"}
|
package/dist/property-value.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
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 { decodeIfcString } from './ifc-string.js';
|
|
5
4
|
/**
|
|
6
5
|
* Map of IFC boolean enumeration values to human-readable text
|
|
7
6
|
*/
|
|
@@ -42,9 +41,23 @@ const IFC_TYPE_DISPLAY_NAMES = {
|
|
|
42
41
|
* Handles:
|
|
43
42
|
* - TypedValues like [IFCIDENTIFIER, '100 x 150mm'] -> display '100 x 150mm', tooltip 'Identifier'
|
|
44
43
|
* - Boolean enums like '.T.' -> 'True'
|
|
45
|
-
* - IFC encoded strings with \X2\, \X\ escape sequences
|
|
46
44
|
* - Null/undefined -> '\u2014'
|
|
47
45
|
* - Regular values -> string conversion
|
|
46
|
+
*
|
|
47
|
+
* It deliberately does NOT decode STEP escapes. Every producer of a property
|
|
48
|
+
* value decodes exactly once, at parse time: the TypeScript path via
|
|
49
|
+
* `EntityExtractor.parseAttributeValue` / `columnar-parser-attributes.ts`, the
|
|
50
|
+
* Rust/WASM and server paths via `AttributeValue::from_token`. The input here
|
|
51
|
+
* is therefore already literal text, and decoding a second time is not a no-op
|
|
52
|
+
* \u2014 since #2394 `decodeIfcString` collapses `\\` to `\`, so an authored UNC
|
|
53
|
+
* path `\\server\share` would render as `\server\share`. `C:\temp` is a fixed
|
|
54
|
+
* point of the decoder, which is why the defect hides on the common case.
|
|
55
|
+
*
|
|
56
|
+
* Making the decoder idempotent instead would not work: idempotence requires
|
|
57
|
+
* treating an already-decoded `\` and an authored, still-doubled `\\` the same
|
|
58
|
+
* way, which is exactly the ambiguity the one-decode rule removes. The
|
|
59
|
+
* invariant to hold is "decode once, at the parse boundary", not "decode
|
|
60
|
+
* defensively wherever a string is displayed".
|
|
48
61
|
*/
|
|
49
62
|
export function parsePropertyValue(value) {
|
|
50
63
|
// Handle null/undefined
|
|
@@ -85,11 +98,11 @@ export function parsePropertyValue(value) {
|
|
|
85
98
|
if (BOOLEAN_MAP[upperInner]) {
|
|
86
99
|
return { displayValue: BOOLEAN_MAP[upperInner], ifcType: friendlyType };
|
|
87
100
|
}
|
|
88
|
-
//
|
|
89
|
-
return { displayValue:
|
|
101
|
+
// Already decoded by the parse path (see the note on this function).
|
|
102
|
+
return { displayValue: innerValue, ifcType: friendlyType };
|
|
90
103
|
}
|
|
91
|
-
//
|
|
92
|
-
return { displayValue:
|
|
104
|
+
// Already decoded by the parse path (see the note on this function).
|
|
105
|
+
return { displayValue: value };
|
|
93
106
|
}
|
|
94
107
|
// Handle native booleans
|
|
95
108
|
if (typeof value === 'boolean') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"property-value.js","sourceRoot":"","sources":["../src/property-value.ts"],"names":[],"mappings":"AAAA;;+DAE+D;
|
|
1
|
+
{"version":3,"file":"property-value.js","sourceRoot":"","sources":["../src/property-value.ts"],"names":[],"mappings":"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"}
|