@ifc-lite/encoding 1.14.3 → 1.14.5
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/dist/guid.d.ts +7 -0
- package/dist/guid.d.ts.map +1 -0
- package/dist/guid.js +115 -0
- package/dist/guid.js.map +1 -0
- package/dist/ifc-string.d.ts +10 -1
- package/dist/ifc-string.d.ts.map +1 -1
- package/dist/ifc-string.js +90 -31
- package/dist/ifc-string.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/guid.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare function uuidToIfcGuid(uuid: string): string;
|
|
2
|
+
export declare function ifcGuidToUuid(ifcGuid: string): string;
|
|
3
|
+
export declare function generateIfcGuid(): string;
|
|
4
|
+
export declare function generateUuid(): string;
|
|
5
|
+
export declare function isValidIfcGuid(ifcGuid: string): boolean;
|
|
6
|
+
export declare function isValidUuid(uuid: string): boolean;
|
|
7
|
+
//# sourceMappingURL=guid.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guid.d.ts","sourceRoot":"","sources":["../src/guid.ts"],"names":[],"mappings":"AAmBA,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA2BlD;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAmCrD;AAED,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED,wBAAgB,YAAY,IAAI,MAAM,CAuBrC;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAiBvD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAOjD"}
|
package/dist/guid.js
ADDED
|
@@ -0,0 +1,115 @@
|
|
|
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
|
+
* IFC GUID (IfcGloballyUniqueId) conversion utilities.
|
|
6
|
+
*
|
|
7
|
+
* IFC uses a 22-character base64 encoding of a 128-bit UUID using the custom
|
|
8
|
+
* buildingSMART alphabet. This module owns the canonical encode/decode and
|
|
9
|
+
* validation logic for that representation across the repo.
|
|
10
|
+
*/
|
|
11
|
+
const IFC_GUID_CHARS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_$';
|
|
12
|
+
const IFC_GUID_CHAR_TO_VALUE = {};
|
|
13
|
+
for (let i = 0; i < IFC_GUID_CHARS.length; i++) {
|
|
14
|
+
IFC_GUID_CHAR_TO_VALUE[IFC_GUID_CHARS[i]] = i;
|
|
15
|
+
}
|
|
16
|
+
export function uuidToIfcGuid(uuid) {
|
|
17
|
+
const hex = uuid.replace(/-/g, '').toUpperCase();
|
|
18
|
+
if (hex.length !== 32) {
|
|
19
|
+
throw new Error(`Invalid UUID: expected 32 hex characters, got ${hex.length}`);
|
|
20
|
+
}
|
|
21
|
+
const bytes = new Uint8Array(16);
|
|
22
|
+
for (let i = 0; i < 16; i++) {
|
|
23
|
+
bytes[i] = parseInt(hex.substring(i * 2, i * 2 + 2), 16);
|
|
24
|
+
}
|
|
25
|
+
let result = '';
|
|
26
|
+
result += IFC_GUID_CHARS[(bytes[0] >> 6) & 0x03];
|
|
27
|
+
result += IFC_GUID_CHARS[bytes[0] & 0x3F];
|
|
28
|
+
for (let i = 1; i < 16; i += 3) {
|
|
29
|
+
const b0 = bytes[i] || 0;
|
|
30
|
+
const b1 = bytes[i + 1] || 0;
|
|
31
|
+
const b2 = bytes[i + 2] || 0;
|
|
32
|
+
result += IFC_GUID_CHARS[(b0 >> 2) & 0x3F];
|
|
33
|
+
result += IFC_GUID_CHARS[((b0 & 0x03) << 4) | ((b1 >> 4) & 0x0F)];
|
|
34
|
+
result += IFC_GUID_CHARS[((b1 & 0x0F) << 2) | ((b2 >> 6) & 0x03)];
|
|
35
|
+
result += IFC_GUID_CHARS[b2 & 0x3F];
|
|
36
|
+
}
|
|
37
|
+
return result;
|
|
38
|
+
}
|
|
39
|
+
export function ifcGuidToUuid(ifcGuid) {
|
|
40
|
+
if (ifcGuid.length !== 22) {
|
|
41
|
+
throw new Error(`Invalid IFC GUID: expected 22 characters, got ${ifcGuid.length}`);
|
|
42
|
+
}
|
|
43
|
+
const values = [];
|
|
44
|
+
for (const char of ifcGuid) {
|
|
45
|
+
const value = IFC_GUID_CHAR_TO_VALUE[char];
|
|
46
|
+
if (value === undefined) {
|
|
47
|
+
throw new Error(`Invalid IFC GUID character: ${char}`);
|
|
48
|
+
}
|
|
49
|
+
values.push(value);
|
|
50
|
+
}
|
|
51
|
+
const bytes = new Uint8Array(16);
|
|
52
|
+
bytes[0] = ((values[0] & 0x03) << 6) | (values[1] & 0x3F);
|
|
53
|
+
let byteIndex = 1;
|
|
54
|
+
for (let i = 2; i < 22; i += 4) {
|
|
55
|
+
const v0 = values[i];
|
|
56
|
+
const v1 = values[i + 1];
|
|
57
|
+
const v2 = values[i + 2];
|
|
58
|
+
const v3 = values[i + 3];
|
|
59
|
+
bytes[byteIndex++] = ((v0 & 0x3F) << 2) | ((v1 >> 4) & 0x03);
|
|
60
|
+
bytes[byteIndex++] = ((v1 & 0x0F) << 4) | ((v2 >> 2) & 0x0F);
|
|
61
|
+
bytes[byteIndex++] = ((v2 & 0x03) << 6) | (v3 & 0x3F);
|
|
62
|
+
}
|
|
63
|
+
let hex = '';
|
|
64
|
+
for (const byte of bytes) {
|
|
65
|
+
hex += byte.toString(16).padStart(2, '0');
|
|
66
|
+
}
|
|
67
|
+
return `${hex.substring(0, 8)}-${hex.substring(8, 12)}-${hex.substring(12, 16)}-${hex.substring(16, 20)}-${hex.substring(20, 32)}`.toLowerCase();
|
|
68
|
+
}
|
|
69
|
+
export function generateIfcGuid() {
|
|
70
|
+
return uuidToIfcGuid(generateUuid());
|
|
71
|
+
}
|
|
72
|
+
export function generateUuid() {
|
|
73
|
+
if (typeof crypto !== 'undefined' && crypto.randomUUID) {
|
|
74
|
+
return crypto.randomUUID();
|
|
75
|
+
}
|
|
76
|
+
const bytes = new Uint8Array(16);
|
|
77
|
+
if (typeof crypto !== 'undefined' && crypto.getRandomValues) {
|
|
78
|
+
crypto.getRandomValues(bytes);
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
for (let i = 0; i < 16; i++) {
|
|
82
|
+
bytes[i] = Math.floor(Math.random() * 256);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
bytes[6] = (bytes[6] & 0x0F) | 0x40;
|
|
86
|
+
bytes[8] = (bytes[8] & 0x3F) | 0x80;
|
|
87
|
+
let hex = '';
|
|
88
|
+
for (const byte of bytes) {
|
|
89
|
+
hex += byte.toString(16).padStart(2, '0');
|
|
90
|
+
}
|
|
91
|
+
return `${hex.substring(0, 8)}-${hex.substring(8, 12)}-${hex.substring(12, 16)}-${hex.substring(16, 20)}-${hex.substring(20, 32)}`;
|
|
92
|
+
}
|
|
93
|
+
export function isValidIfcGuid(ifcGuid) {
|
|
94
|
+
if (typeof ifcGuid !== 'string' || ifcGuid.length !== 22) {
|
|
95
|
+
return false;
|
|
96
|
+
}
|
|
97
|
+
const firstCharValue = IFC_GUID_CHAR_TO_VALUE[ifcGuid[0]];
|
|
98
|
+
if (firstCharValue === undefined || firstCharValue > 3) {
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
for (let i = 1; i < ifcGuid.length; i++) {
|
|
102
|
+
if (IFC_GUID_CHAR_TO_VALUE[ifcGuid[i]] === undefined) {
|
|
103
|
+
return false;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return true;
|
|
107
|
+
}
|
|
108
|
+
export function isValidUuid(uuid) {
|
|
109
|
+
if (typeof uuid !== 'string') {
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
113
|
+
return uuidRegex.test(uuid);
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=guid.js.map
|
package/dist/guid.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guid.js","sourceRoot":"","sources":["../src/guid.ts"],"names":[],"mappings":"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"}
|
package/dist/ifc-string.d.ts
CHANGED
|
@@ -5,7 +5,16 @@
|
|
|
5
5
|
* - \X4\XXXXXXXX\X0\ - Unicode 4-byte hex for chars outside BMP
|
|
6
6
|
* - \X\XX\ - ISO-8859-1 hex encoding
|
|
7
7
|
* - \S\X - Extended ASCII with escape
|
|
8
|
-
* - \P..\ - Code page switches (
|
|
8
|
+
* - \P..\ - Code page switches (supported as directives and removed)
|
|
9
9
|
*/
|
|
10
10
|
export declare function decodeIfcString(str: string): string;
|
|
11
|
+
/**
|
|
12
|
+
* Encode a Unicode string to IFC STEP string escapes.
|
|
13
|
+
*
|
|
14
|
+
* - Printable ASCII (32..126) is kept as-is.
|
|
15
|
+
* - 8-bit values are encoded as \X\HH.
|
|
16
|
+
* - BMP values are encoded as \X2\HHHH\X0\.
|
|
17
|
+
* - Non-BMP values are encoded as \X4\HHHHHHHH\X0\.
|
|
18
|
+
*/
|
|
19
|
+
export declare function encodeIfcString(str: string): string;
|
|
11
20
|
//# sourceMappingURL=ifc-string.d.ts.map
|
package/dist/ifc-string.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ifc-string.d.ts","sourceRoot":"","sources":["../src/ifc-string.ts"],"names":[],"mappings":"AAIA;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"ifc-string.d.ts","sourceRoot":"","sources":["../src/ifc-string.ts"],"names":[],"mappings":"AAIA;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAwEnD;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CA6BnD"}
|
package/dist/ifc-string.js
CHANGED
|
@@ -8,45 +8,104 @@
|
|
|
8
8
|
* - \X4\XXXXXXXX\X0\ - Unicode 4-byte hex for chars outside BMP
|
|
9
9
|
* - \X\XX\ - ISO-8859-1 hex encoding
|
|
10
10
|
* - \S\X - Extended ASCII with escape
|
|
11
|
-
* - \P..\ - Code page switches (
|
|
11
|
+
* - \P..\ - Code page switches (supported as directives and removed)
|
|
12
12
|
*/
|
|
13
13
|
export function decodeIfcString(str) {
|
|
14
14
|
if (!str || typeof str !== 'string')
|
|
15
15
|
return str;
|
|
16
|
-
let result =
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
16
|
+
let result = '';
|
|
17
|
+
let i = 0;
|
|
18
|
+
while (i < str.length) {
|
|
19
|
+
if (str[i] !== '\\') {
|
|
20
|
+
result += str[i];
|
|
21
|
+
i += 1;
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
// Handle code page directives like \PA\, \PB\, ... by consuming them.
|
|
25
|
+
if (str[i + 1] === 'P' && str[i + 3] === '\\') {
|
|
26
|
+
i += 4;
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
// Handle \S\X where byte value is ord(X) + 128 in ISO-8859-1.
|
|
30
|
+
if (str[i + 1] === 'S' && str[i + 2] === '\\' && i + 3 < str.length) {
|
|
31
|
+
result += String.fromCharCode(str.charCodeAt(i + 3) + 128);
|
|
32
|
+
i += 4;
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
// Handle \X\HH (8-bit value from ISO 10646 row 0 / ISO-8859-1 overlap).
|
|
36
|
+
if (str[i + 1] === 'X' && str[i + 2] === '\\' && i + 5 <= str.length) {
|
|
37
|
+
const hex = str.slice(i + 3, i + 5);
|
|
38
|
+
if (/^[0-9A-Fa-f]{2}$/.test(hex)) {
|
|
39
|
+
result += String.fromCharCode(parseInt(hex, 16));
|
|
40
|
+
i += 5;
|
|
41
|
+
continue;
|
|
24
42
|
}
|
|
25
43
|
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
44
|
+
// Handle \X2\....\X0\ (UTF-16 hex code units, 4 chars each).
|
|
45
|
+
if (str.startsWith('\\X2\\', i)) {
|
|
46
|
+
const end = str.indexOf('\\X0\\', i + 4);
|
|
47
|
+
if (end !== -1) {
|
|
48
|
+
const hex = str.slice(i + 4, end);
|
|
49
|
+
if (hex.length % 4 === 0 && /^[0-9A-Fa-f]+$/.test(hex)) {
|
|
50
|
+
for (let j = 0; j < hex.length; j += 4) {
|
|
51
|
+
result += String.fromCharCode(parseInt(hex.slice(j, j + 4), 16));
|
|
52
|
+
}
|
|
53
|
+
i = end + 4;
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
35
56
|
}
|
|
36
57
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
58
|
+
// Handle \X4\........\X0\ (Unicode scalar values, 8 hex digits each).
|
|
59
|
+
if (str.startsWith('\\X4\\', i)) {
|
|
60
|
+
const end = str.indexOf('\\X0\\', i + 4);
|
|
61
|
+
if (end !== -1) {
|
|
62
|
+
const hex = str.slice(i + 4, end);
|
|
63
|
+
if (hex.length % 8 === 0 && /^[0-9A-Fa-f]+$/.test(hex)) {
|
|
64
|
+
for (let j = 0; j < hex.length; j += 8) {
|
|
65
|
+
result += String.fromCodePoint(parseInt(hex.slice(j, j + 8), 16));
|
|
66
|
+
}
|
|
67
|
+
i = end + 4;
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
// Unknown escape sequence: keep the backslash and move on.
|
|
73
|
+
result += str[i];
|
|
74
|
+
i += 1;
|
|
75
|
+
}
|
|
50
76
|
return result;
|
|
51
77
|
}
|
|
78
|
+
/**
|
|
79
|
+
* Encode a Unicode string to IFC STEP string escapes.
|
|
80
|
+
*
|
|
81
|
+
* - Printable ASCII (32..126) is kept as-is.
|
|
82
|
+
* - 8-bit values are encoded as \X\HH.
|
|
83
|
+
* - BMP values are encoded as \X2\HHHH\X0\.
|
|
84
|
+
* - Non-BMP values are encoded as \X4\HHHHHHHH\X0\.
|
|
85
|
+
*/
|
|
86
|
+
export function encodeIfcString(str) {
|
|
87
|
+
if (!str || typeof str !== 'string')
|
|
88
|
+
return str;
|
|
89
|
+
let encoded = '';
|
|
90
|
+
for (const ch of str) {
|
|
91
|
+
const codePoint = ch.codePointAt(0);
|
|
92
|
+
if (codePoint === undefined) {
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
if (codePoint >= 32 && codePoint <= 126 && ch !== '\\') {
|
|
96
|
+
encoded += ch;
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
if (codePoint <= 0xFF) {
|
|
100
|
+
encoded += `\\X\\${codePoint.toString(16).toUpperCase().padStart(2, '0')}`;
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
if (codePoint <= 0xFFFF) {
|
|
104
|
+
encoded += `\\X2\\${codePoint.toString(16).toUpperCase().padStart(4, '0')}\\X0\\`;
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
encoded += `\\X4\\${codePoint.toString(16).toUpperCase().padStart(8, '0')}\\X0\\`;
|
|
108
|
+
}
|
|
109
|
+
return encoded;
|
|
110
|
+
}
|
|
52
111
|
//# sourceMappingURL=ifc-string.js.map
|
package/dist/ifc-string.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ifc-string.js","sourceRoot":"","sources":["../src/ifc-string.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC;IAEhD,IAAI,MAAM,GAAG,
|
|
1
|
+
{"version":3,"file":"ifc-string.js","sourceRoot":"","sources":["../src/ifc-string.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
export { decodeIfcString } from './ifc-string.js';
|
|
1
|
+
export { decodeIfcString, encodeIfcString } from './ifc-string.js';
|
|
2
|
+
export { uuidToIfcGuid, ifcGuidToUuid, generateIfcGuid, generateUuid, isValidIfcGuid, isValidUuid, } from './guid.js';
|
|
2
3
|
export { parsePropertyValue } from './property-value.js';
|
|
3
4
|
export type { ParsedPropertyValue } from './property-value.js';
|
|
4
5
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EACL,aAAa,EACb,aAAa,EACb,eAAe,EACf,YAAY,EACZ,cAAc,EACd,WAAW,GACZ,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,YAAY,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -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
|
-
export { decodeIfcString } from './ifc-string.js';
|
|
4
|
+
export { decodeIfcString, encodeIfcString } from './ifc-string.js';
|
|
5
|
+
export { uuidToIfcGuid, ifcGuidToUuid, generateIfcGuid, generateUuid, isValidIfcGuid, isValidUuid, } from './guid.js';
|
|
5
6
|
export { parsePropertyValue } from './property-value.js';
|
|
6
7
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EACL,aAAa,EACb,aAAa,EACb,eAAe,EACf,YAAY,EACZ,cAAc,EACd,WAAW,GACZ,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC"}
|