@ifc-lite/bcf 1.14.3 → 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/dist/guid.js DELETED
@@ -1,184 +0,0 @@
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 128-bit GUIDs using a custom
8
- * character set. This module provides conversion between:
9
- * - Standard UUID format (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
10
- * - IFC GUID format (22 characters)
11
- *
12
- * Reference: https://technical.buildingsmart.org/resources/ifcimplementationguidance/ifc-guid/
13
- */
14
- /**
15
- * IFC GUID character set (different from standard base64)
16
- * Characters: 0-9, A-Z, a-z, _, $
17
- */
18
- const IFC_GUID_CHARS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_$';
19
- /**
20
- * Reverse lookup table for IFC GUID characters
21
- */
22
- const IFC_GUID_CHAR_TO_VALUE = {};
23
- for (let i = 0; i < IFC_GUID_CHARS.length; i++) {
24
- IFC_GUID_CHAR_TO_VALUE[IFC_GUID_CHARS[i]] = i;
25
- }
26
- /**
27
- * Convert a standard UUID to IFC GUID format (22 characters)
28
- *
29
- * @param uuid - UUID string in format xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
30
- * @returns 22-character IFC GUID string
31
- */
32
- export function uuidToIfcGuid(uuid) {
33
- // Remove dashes and convert to uppercase
34
- const hex = uuid.replace(/-/g, '').toUpperCase();
35
- if (hex.length !== 32) {
36
- throw new Error(`Invalid UUID: expected 32 hex characters, got ${hex.length}`);
37
- }
38
- // Convert hex string to bytes (16 bytes = 128 bits)
39
- const bytes = new Uint8Array(16);
40
- for (let i = 0; i < 16; i++) {
41
- bytes[i] = parseInt(hex.substring(i * 2, i * 2 + 2), 16);
42
- }
43
- // Encode to IFC GUID (22 characters)
44
- // First 2 characters encode first 2 bytes (but only 4 bits from first)
45
- // Then groups of 3 bytes encode to 4 characters each
46
- let result = '';
47
- // First character: high 2 bits of first byte (only 2 bits used, so value 0-3)
48
- result += IFC_GUID_CHARS[(bytes[0] >> 6) & 0x03];
49
- // Second character: low 6 bits of first byte
50
- result += IFC_GUID_CHARS[bytes[0] & 0x3F];
51
- // Process remaining 15 bytes in groups of 3 (5 groups = 20 characters)
52
- for (let i = 1; i < 16; i += 3) {
53
- const b0 = bytes[i] || 0;
54
- const b1 = bytes[i + 1] || 0;
55
- const b2 = bytes[i + 2] || 0;
56
- // Each group of 3 bytes (24 bits) encodes to 4 base64 characters (24 bits)
57
- result += IFC_GUID_CHARS[(b0 >> 2) & 0x3F];
58
- result += IFC_GUID_CHARS[((b0 & 0x03) << 4) | ((b1 >> 4) & 0x0F)];
59
- result += IFC_GUID_CHARS[((b1 & 0x0F) << 2) | ((b2 >> 6) & 0x03)];
60
- result += IFC_GUID_CHARS[b2 & 0x3F];
61
- }
62
- return result;
63
- }
64
- /**
65
- * Convert an IFC GUID to standard UUID format
66
- *
67
- * @param ifcGuid - 22-character IFC GUID string
68
- * @returns UUID string in format xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
69
- */
70
- export function ifcGuidToUuid(ifcGuid) {
71
- if (ifcGuid.length !== 22) {
72
- throw new Error(`Invalid IFC GUID: expected 22 characters, got ${ifcGuid.length}`);
73
- }
74
- // Decode base64 characters to values
75
- const values = [];
76
- for (const char of ifcGuid) {
77
- const value = IFC_GUID_CHAR_TO_VALUE[char];
78
- if (value === undefined) {
79
- throw new Error(`Invalid IFC GUID character: ${char}`);
80
- }
81
- values.push(value);
82
- }
83
- // Decode to bytes
84
- const bytes = new Uint8Array(16);
85
- // First byte: 2 bits from first char + 6 bits from second char
86
- bytes[0] = ((values[0] & 0x03) << 6) | (values[1] & 0x3F);
87
- // Remaining bytes: decode groups of 4 characters to 3 bytes
88
- let byteIndex = 1;
89
- for (let i = 2; i < 22; i += 4) {
90
- const v0 = values[i];
91
- const v1 = values[i + 1];
92
- const v2 = values[i + 2];
93
- const v3 = values[i + 3];
94
- bytes[byteIndex++] = ((v0 & 0x3F) << 2) | ((v1 >> 4) & 0x03);
95
- bytes[byteIndex++] = ((v1 & 0x0F) << 4) | ((v2 >> 2) & 0x0F);
96
- bytes[byteIndex++] = ((v2 & 0x03) << 6) | (v3 & 0x3F);
97
- }
98
- // Convert bytes to hex and format as UUID
99
- let hex = '';
100
- for (const byte of bytes) {
101
- hex += byte.toString(16).padStart(2, '0');
102
- }
103
- // Format as UUID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
104
- return `${hex.substring(0, 8)}-${hex.substring(8, 12)}-${hex.substring(12, 16)}-${hex.substring(16, 20)}-${hex.substring(20, 32)}`.toLowerCase();
105
- }
106
- /**
107
- * Generate a new random IFC GUID
108
- *
109
- * @returns 22-character IFC GUID string
110
- */
111
- export function generateIfcGuid() {
112
- // Generate a random UUID
113
- const uuid = generateUuid();
114
- return uuidToIfcGuid(uuid);
115
- }
116
- /**
117
- * Generate a new random UUID v4
118
- *
119
- * @returns UUID string in format xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
120
- */
121
- export function generateUuid() {
122
- // Use crypto.randomUUID if available
123
- if (typeof crypto !== 'undefined' && crypto.randomUUID) {
124
- return crypto.randomUUID();
125
- }
126
- // Fallback: generate random bytes
127
- const bytes = new Uint8Array(16);
128
- if (typeof crypto !== 'undefined' && crypto.getRandomValues) {
129
- crypto.getRandomValues(bytes);
130
- }
131
- else {
132
- // Last resort fallback (not cryptographically secure)
133
- for (let i = 0; i < 16; i++) {
134
- bytes[i] = Math.floor(Math.random() * 256);
135
- }
136
- }
137
- // Set version (4) and variant (RFC 4122)
138
- bytes[6] = (bytes[6] & 0x0F) | 0x40; // Version 4
139
- bytes[8] = (bytes[8] & 0x3F) | 0x80; // Variant RFC 4122
140
- // Convert to hex string
141
- let hex = '';
142
- for (const byte of bytes) {
143
- hex += byte.toString(16).padStart(2, '0');
144
- }
145
- // Format as UUID
146
- return `${hex.substring(0, 8)}-${hex.substring(8, 12)}-${hex.substring(12, 16)}-${hex.substring(16, 20)}-${hex.substring(20, 32)}`;
147
- }
148
- /**
149
- * Validate an IFC GUID string
150
- *
151
- * @param ifcGuid - String to validate
152
- * @returns true if valid IFC GUID format
153
- */
154
- export function isValidIfcGuid(ifcGuid) {
155
- if (typeof ifcGuid !== 'string' || ifcGuid.length !== 22) {
156
- return false;
157
- }
158
- // First character must be 0-3 (only 2 bits used)
159
- const firstCharValue = IFC_GUID_CHAR_TO_VALUE[ifcGuid[0]];
160
- if (firstCharValue === undefined || firstCharValue > 3) {
161
- return false;
162
- }
163
- // All other characters must be valid
164
- for (let i = 1; i < ifcGuid.length; i++) {
165
- if (IFC_GUID_CHAR_TO_VALUE[ifcGuid[i]] === undefined) {
166
- return false;
167
- }
168
- }
169
- return true;
170
- }
171
- /**
172
- * Validate a UUID string
173
- *
174
- * @param uuid - String to validate
175
- * @returns true if valid UUID format
176
- */
177
- export function isValidUuid(uuid) {
178
- if (typeof uuid !== 'string') {
179
- return false;
180
- }
181
- const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
182
- return uuidRegex.test(uuid);
183
- }
184
- //# sourceMappingURL=guid.js.map
package/dist/guid.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"guid.js","sourceRoot":"","sources":["../src/guid.ts"],"names":[],"mappings":"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"}