hadron-type-checker 7.4.27 → 7.5.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/index.d.ts +1 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/type-checker.d.ts +49 -2
- package/dist/type-checker.d.ts.map +1 -1
- package/dist/type-checker.js +269 -19
- package/dist/type-checker.js.map +1 -1
- package/package.json +6 -6
- package/src/index.ts +12 -2
- package/src/type-checker.ts +324 -23
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
export { default } from './type-checker';
|
|
2
|
-
export type { TypeCastMap, TypeCastTypes } from './type-checker';
|
|
1
|
+
export { default, UUID_REGEX, uuidHexToString, reverseJavaUUIDBytes, reverseCSharpUUIDBytes, convertBinaryUUID, type BSONTypeTag, getBsonType, type TypeCastMap, type TypeCastTypes, } from './type-checker';
|
|
3
2
|
//# 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":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,UAAU,EACV,eAAe,EACf,oBAAoB,EACpB,sBAAsB,EACtB,iBAAiB,EACjB,KAAK,WAAW,EAChB,WAAW,EACX,KAAK,WAAW,EAChB,KAAK,aAAa,GACnB,MAAM,gBAAgB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -3,7 +3,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.default = void 0;
|
|
6
|
+
exports.getBsonType = exports.convertBinaryUUID = exports.reverseCSharpUUIDBytes = exports.reverseJavaUUIDBytes = exports.uuidHexToString = exports.UUID_REGEX = exports.default = void 0;
|
|
7
7
|
var type_checker_1 = require("./type-checker");
|
|
8
8
|
Object.defineProperty(exports, "default", { enumerable: true, get: function () { return __importDefault(type_checker_1).default; } });
|
|
9
|
+
Object.defineProperty(exports, "UUID_REGEX", { enumerable: true, get: function () { return type_checker_1.UUID_REGEX; } });
|
|
10
|
+
Object.defineProperty(exports, "uuidHexToString", { enumerable: true, get: function () { return type_checker_1.uuidHexToString; } });
|
|
11
|
+
Object.defineProperty(exports, "reverseJavaUUIDBytes", { enumerable: true, get: function () { return type_checker_1.reverseJavaUUIDBytes; } });
|
|
12
|
+
Object.defineProperty(exports, "reverseCSharpUUIDBytes", { enumerable: true, get: function () { return type_checker_1.reverseCSharpUUIDBytes; } });
|
|
13
|
+
Object.defineProperty(exports, "convertBinaryUUID", { enumerable: true, get: function () { return type_checker_1.convertBinaryUUID; } });
|
|
14
|
+
Object.defineProperty(exports, "getBsonType", { enumerable: true, get: function () { return type_checker_1.getBsonType; } });
|
|
9
15
|
//# 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,+
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAAA,+CAWwB;AAVtB,wHAAA,OAAO,OAAA;AACP,0GAAA,UAAU,OAAA;AACV,+GAAA,eAAe,OAAA;AACf,oHAAA,oBAAoB,OAAA;AACpB,sHAAA,sBAAsB,OAAA;AACtB,iHAAA,iBAAiB,OAAA;AAEjB,2GAAA,WAAW,OAAA"}
|
package/dist/type-checker.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import { ObjectId, MinKey, MaxKey, Long, Double, Int32, Decimal128, Binary, BSONRegExp, Code, BSONSymbol, Timestamp } from 'bson';
|
|
1
|
+
import { ObjectId, MinKey, MaxKey, Long, Double, Int32, Decimal128, Binary, BSONRegExp, Code, BSONSymbol, Timestamp, bsonType, type BSONTypeTag } from 'bson';
|
|
2
|
+
export { bsonType, type BSONTypeTag };
|
|
3
|
+
export declare function getBsonType(value: any): BSONTypeTag | undefined;
|
|
2
4
|
export type TypeCastMap = {
|
|
3
5
|
Array: unknown[];
|
|
4
6
|
Binary: Binary;
|
|
@@ -19,8 +21,50 @@ export type TypeCastMap = {
|
|
|
19
21
|
BSONSymbol: BSONSymbol;
|
|
20
22
|
Timestamp: Timestamp;
|
|
21
23
|
Undefined: undefined;
|
|
24
|
+
UUID: Binary;
|
|
25
|
+
LegacyJavaUUID: Binary;
|
|
26
|
+
LegacyCSharpUUID: Binary;
|
|
27
|
+
LegacyPythonUUID: Binary;
|
|
22
28
|
};
|
|
23
29
|
export type TypeCastTypes = keyof TypeCastMap;
|
|
30
|
+
/**
|
|
31
|
+
* UUID regex pattern for validation (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).
|
|
32
|
+
*/
|
|
33
|
+
export declare const UUID_REGEX: RegExp;
|
|
34
|
+
/**
|
|
35
|
+
* Converts a hex string (without hyphens) to UUID format with hyphens.
|
|
36
|
+
*/
|
|
37
|
+
export declare const uuidHexToString: (hex: string) => string;
|
|
38
|
+
/**
|
|
39
|
+
* Reverses byte order for Java legacy UUID format (both MSB and LSB).
|
|
40
|
+
* Takes a 32-char hex string and returns a 32-char hex string with reversed byte order.
|
|
41
|
+
*
|
|
42
|
+
* This function is an involution (self-inverse), meaning applying it twice returns
|
|
43
|
+
* the original value. It can be used both to:
|
|
44
|
+
* - Convert from Java legacy binary format to standard UUID hex (for display)
|
|
45
|
+
* - Convert from standard UUID hex to Java legacy binary format (for storage)
|
|
46
|
+
*/
|
|
47
|
+
export declare const reverseJavaUUIDBytes: (hex: string) => string;
|
|
48
|
+
/**
|
|
49
|
+
* Reverses byte order for C# legacy UUID format (first 3 groups only).
|
|
50
|
+
* Takes a 32-char hex string and returns a 32-char hex string with reversed byte order.
|
|
51
|
+
*
|
|
52
|
+
* This function is an involution (self-inverse), meaning applying it twice returns
|
|
53
|
+
* the original value. It can be used both to:
|
|
54
|
+
* - Convert from C# legacy binary format to standard UUID hex (for display)
|
|
55
|
+
* - Convert from standard UUID hex to C# legacy binary format (for storage)
|
|
56
|
+
*/
|
|
57
|
+
export declare const reverseCSharpUUIDBytes: (hex: string) => string;
|
|
58
|
+
/**
|
|
59
|
+
* Converts a Binary UUID from one encoding to another.
|
|
60
|
+
* This is used when changing between UUID types in the document editor.
|
|
61
|
+
*
|
|
62
|
+
* @param binary - The source Binary UUID
|
|
63
|
+
* @param sourceType - The source UUID type (e.g., 'LegacyCSharpUUID')
|
|
64
|
+
* @param targetType - The target UUID type (e.g., 'LegacyJavaUUID')
|
|
65
|
+
* @returns A new Binary with the same UUID value but different encoding
|
|
66
|
+
*/
|
|
67
|
+
export declare const convertBinaryUUID: (binary: Binary, sourceType: string, targetType: string) => Binary;
|
|
24
68
|
/**
|
|
25
69
|
* Checks the types of objects and returns them as readable strings.
|
|
26
70
|
*/
|
|
@@ -31,8 +75,11 @@ declare class TypeChecker {
|
|
|
31
75
|
cast<O = unknown, T extends string = string>(object: O, type: T): T extends TypeCastTypes ? TypeCastMap[T] : O;
|
|
32
76
|
/**
|
|
33
77
|
* Get the type for the object.
|
|
78
|
+
* @param legacyUUIDEncoding - Optional encoding for legacy UUID (subtype 3).
|
|
79
|
+
* If provided and the object is a Binary with subtype 3, returns the specific legacy UUID type.
|
|
80
|
+
* Valid values: 'LegacyJavaUUID', 'LegacyCSharpUUID', 'LegacyPythonUUID'
|
|
34
81
|
*/
|
|
35
|
-
type(object: unknown): TypeCastTypes;
|
|
82
|
+
type(object: unknown, legacyUUIDEncoding?: 'LegacyJavaUUID' | 'LegacyCSharpUUID' | 'LegacyPythonUUID'): TypeCastTypes;
|
|
36
83
|
/**
|
|
37
84
|
* Get a list of types the object can be cast to.
|
|
38
85
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type-checker.d.ts","sourceRoot":"","sources":["../src/type-checker.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"type-checker.d.ts","sourceRoot":"","sources":["../src/type-checker.ts"],"names":[],"mappings":"AAWA,OAAO,EACL,QAAQ,EACR,MAAM,EACN,MAAM,EACN,IAAI,EACJ,MAAM,EACN,KAAK,EACL,UAAU,EACV,MAAM,EACN,UAAU,EACV,IAAI,EACJ,UAAU,EACV,SAAS,EAET,QAAQ,EACR,KAAK,WAAW,EACjB,MAAM,MAAM,CAAC;AAEd,OAAO,EAAE,QAAQ,EAAE,KAAK,WAAW,EAAE,CAAC;AACtC,wBAAgB,WAAW,CAAC,KAAK,EAAE,GAAG,GAAG,WAAW,GAAG,SAAS,CAE/D;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,EAAE,IAAI,CAAC;IACX,UAAU,EAAE,UAAU,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,EAAE,IAAI,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,QAAQ,EAAE,QAAQ,CAAC;IACnB,UAAU,EAAE,UAAU,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,UAAU,CAAC;IACvB,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,SAAS,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,MAAM,WAAW,CAAC;AAsM9C;;GAEG;AACH,eAAO,MAAM,UAAU,QAC4C,CAAC;AAoBpE;;GAEG;AACH,eAAO,MAAM,eAAe,GAAI,KAAK,MAAM,KAAG,MAY7C,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB,GAAI,KAAK,MAAM,KAAG,MAsBlD,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,sBAAsB,GAAI,KAAK,MAAM,KAAG,MAUpD,CAAC;AA0EF;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,GAC5B,QAAQ,MAAM,EACd,YAAY,MAAM,EAClB,YAAY,MAAM,KACjB,MA4BF,CAAC;AAoKF;;GAEG;AACH,cAAM,WAAW;IACf;;OAEG;IACH,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,SAAS,MAAM,GAAG,MAAM,EACzC,MAAM,EAAE,CAAC,EACT,IAAI,EAAE,CAAC,GACN,CAAC,SAAS,aAAa,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC;IAW/C;;;;;OAKG;IACH,IAAI,CACF,MAAM,EAAE,OAAO,EACf,kBAAkB,CAAC,EACf,gBAAgB,GAChB,kBAAkB,GAClB,kBAAkB,GACrB,aAAa;IAoChB;;OAEG;IACH,aAAa,CAAC,oBAAoB,UAAQ,GAAG,aAAa,EAAE;CAM7D;;AAED,wBAAiC"}
|
package/dist/type-checker.js
CHANGED
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.convertBinaryUUID = exports.reverseCSharpUUIDBytes = exports.reverseJavaUUIDBytes = exports.uuidHexToString = exports.UUID_REGEX = exports.bsonType = void 0;
|
|
4
|
+
exports.getBsonType = getBsonType;
|
|
3
5
|
const lodash_1 = require("lodash");
|
|
4
6
|
const bson_1 = require("bson");
|
|
7
|
+
Object.defineProperty(exports, "bsonType", { enumerable: true, get: function () { return bson_1.bsonType; } });
|
|
8
|
+
function getBsonType(value) {
|
|
9
|
+
return value?.[bson_1.bsonType];
|
|
10
|
+
}
|
|
5
11
|
/**
|
|
6
12
|
* The object string.
|
|
7
13
|
*/
|
|
@@ -28,12 +34,6 @@ const DOUBLE = 'Double';
|
|
|
28
34
|
const DECIMAL_128 = 'Decimal128';
|
|
29
35
|
const OBJECT_TYPE = '[object Object]';
|
|
30
36
|
const EMPTY = '';
|
|
31
|
-
const OBJECT_ID = 'ObjectID';
|
|
32
|
-
const SYMBOL = 'Symbol';
|
|
33
|
-
/**
|
|
34
|
-
* The bson type field.
|
|
35
|
-
*/
|
|
36
|
-
const BSON_TYPE = '_bsontype';
|
|
37
37
|
/**
|
|
38
38
|
* The match regex.
|
|
39
39
|
*/
|
|
@@ -148,11 +148,10 @@ const toDecimal128 = (object) => {
|
|
|
148
148
|
/*
|
|
149
149
|
If converting a BSON Object, extract the value before converting to a string.
|
|
150
150
|
*/
|
|
151
|
-
if (
|
|
152
|
-
NUMBER_TYPES.includes(object._bsontype)) {
|
|
151
|
+
if (NUMBER_TYPES.includes(getBsonType(object))) {
|
|
153
152
|
const bsonObj = object;
|
|
154
153
|
object =
|
|
155
|
-
|
|
154
|
+
getBsonType(object) === LONG ? bsonObj.toString() : bsonObj.valueOf();
|
|
156
155
|
}
|
|
157
156
|
return bson_1.Decimal128.fromString((0, lodash_1.toString)(object));
|
|
158
157
|
};
|
|
@@ -168,6 +167,244 @@ const toBinary = (object) => {
|
|
|
168
167
|
: Buffer.from((0, lodash_1.toString)(object), 'utf8');
|
|
169
168
|
return new bson_1.Binary(buffer, bson_1.Binary.SUBTYPE_DEFAULT);
|
|
170
169
|
};
|
|
170
|
+
/**
|
|
171
|
+
* UUID regex pattern for validation (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).
|
|
172
|
+
*/
|
|
173
|
+
exports.UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
174
|
+
/**
|
|
175
|
+
* Validates a UUID string format.
|
|
176
|
+
*/
|
|
177
|
+
const validateUUIDString = (uuidString) => {
|
|
178
|
+
if (!exports.UUID_REGEX.test(uuidString)) {
|
|
179
|
+
throw new Error(`'${uuidString}' is not a valid UUID string (expected format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)`);
|
|
180
|
+
}
|
|
181
|
+
};
|
|
182
|
+
/**
|
|
183
|
+
* Converts a UUID string (with hyphens) to a hex string (without hyphens).
|
|
184
|
+
*/
|
|
185
|
+
const uuidStringToHex = (uuidString) => {
|
|
186
|
+
return uuidString.replace(/-/g, '');
|
|
187
|
+
};
|
|
188
|
+
/**
|
|
189
|
+
* Converts a hex string (without hyphens) to UUID format with hyphens.
|
|
190
|
+
*/
|
|
191
|
+
const uuidHexToString = (hex) => {
|
|
192
|
+
return (hex.substring(0, 8) +
|
|
193
|
+
'-' +
|
|
194
|
+
hex.substring(8, 12) +
|
|
195
|
+
'-' +
|
|
196
|
+
hex.substring(12, 16) +
|
|
197
|
+
'-' +
|
|
198
|
+
hex.substring(16, 20) +
|
|
199
|
+
'-' +
|
|
200
|
+
hex.substring(20, 32));
|
|
201
|
+
};
|
|
202
|
+
exports.uuidHexToString = uuidHexToString;
|
|
203
|
+
/**
|
|
204
|
+
* Reverses byte order for Java legacy UUID format (both MSB and LSB).
|
|
205
|
+
* Takes a 32-char hex string and returns a 32-char hex string with reversed byte order.
|
|
206
|
+
*
|
|
207
|
+
* This function is an involution (self-inverse), meaning applying it twice returns
|
|
208
|
+
* the original value. It can be used both to:
|
|
209
|
+
* - Convert from Java legacy binary format to standard UUID hex (for display)
|
|
210
|
+
* - Convert from standard UUID hex to Java legacy binary format (for storage)
|
|
211
|
+
*/
|
|
212
|
+
const reverseJavaUUIDBytes = (hex) => {
|
|
213
|
+
let msb = hex.substring(0, 16);
|
|
214
|
+
let lsb = hex.substring(16, 32);
|
|
215
|
+
msb =
|
|
216
|
+
msb.substring(14, 16) +
|
|
217
|
+
msb.substring(12, 14) +
|
|
218
|
+
msb.substring(10, 12) +
|
|
219
|
+
msb.substring(8, 10) +
|
|
220
|
+
msb.substring(6, 8) +
|
|
221
|
+
msb.substring(4, 6) +
|
|
222
|
+
msb.substring(2, 4) +
|
|
223
|
+
msb.substring(0, 2);
|
|
224
|
+
lsb =
|
|
225
|
+
lsb.substring(14, 16) +
|
|
226
|
+
lsb.substring(12, 14) +
|
|
227
|
+
lsb.substring(10, 12) +
|
|
228
|
+
lsb.substring(8, 10) +
|
|
229
|
+
lsb.substring(6, 8) +
|
|
230
|
+
lsb.substring(4, 6) +
|
|
231
|
+
lsb.substring(2, 4) +
|
|
232
|
+
lsb.substring(0, 2);
|
|
233
|
+
return msb + lsb;
|
|
234
|
+
};
|
|
235
|
+
exports.reverseJavaUUIDBytes = reverseJavaUUIDBytes;
|
|
236
|
+
/**
|
|
237
|
+
* Reverses byte order for C# legacy UUID format (first 3 groups only).
|
|
238
|
+
* Takes a 32-char hex string and returns a 32-char hex string with reversed byte order.
|
|
239
|
+
*
|
|
240
|
+
* This function is an involution (self-inverse), meaning applying it twice returns
|
|
241
|
+
* the original value. It can be used both to:
|
|
242
|
+
* - Convert from C# legacy binary format to standard UUID hex (for display)
|
|
243
|
+
* - Convert from standard UUID hex to C# legacy binary format (for storage)
|
|
244
|
+
*/
|
|
245
|
+
const reverseCSharpUUIDBytes = (hex) => {
|
|
246
|
+
const a = hex.substring(6, 8) +
|
|
247
|
+
hex.substring(4, 6) +
|
|
248
|
+
hex.substring(2, 4) +
|
|
249
|
+
hex.substring(0, 2);
|
|
250
|
+
const b = hex.substring(10, 12) + hex.substring(8, 10);
|
|
251
|
+
const c = hex.substring(14, 16) + hex.substring(12, 14);
|
|
252
|
+
const d = hex.substring(16, 32);
|
|
253
|
+
return a + b + c + d;
|
|
254
|
+
};
|
|
255
|
+
exports.reverseCSharpUUIDBytes = reverseCSharpUUIDBytes;
|
|
256
|
+
/**
|
|
257
|
+
* Generates a random UUID string in the format xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.
|
|
258
|
+
*/
|
|
259
|
+
const generateRandomUUID = () => {
|
|
260
|
+
return new bson_1.UUID().toString();
|
|
261
|
+
};
|
|
262
|
+
/**
|
|
263
|
+
* Converts a Binary UUID to a standard UUID string, accounting for its encoding.
|
|
264
|
+
* For subtype 4 (standard UUID), returns the hex directly as UUID format.
|
|
265
|
+
* For subtype 3 (legacy UUID), we need to know the original encoding to reverse the bytes.
|
|
266
|
+
* If sourceEncoding is not provided, assumes Python encoding (no reversal).
|
|
267
|
+
*/
|
|
268
|
+
const binaryToUUIDStringWithEncoding = (binary, sourceEncoding) => {
|
|
269
|
+
const hex = binary.toString('hex');
|
|
270
|
+
// For standard UUID (subtype 4), no byte reversal needed
|
|
271
|
+
if (binary.sub_type === bson_1.Binary.SUBTYPE_UUID) {
|
|
272
|
+
return (0, exports.uuidHexToString)(hex);
|
|
273
|
+
}
|
|
274
|
+
// For legacy UUID (subtype 3), reverse bytes based on source encoding
|
|
275
|
+
switch (sourceEncoding) {
|
|
276
|
+
case 'Java':
|
|
277
|
+
// Reverse Java encoding to get standard UUID
|
|
278
|
+
return (0, exports.uuidHexToString)((0, exports.reverseJavaUUIDBytes)(hex));
|
|
279
|
+
case 'CSharp':
|
|
280
|
+
// Reverse C# encoding to get standard UUID
|
|
281
|
+
return (0, exports.uuidHexToString)((0, exports.reverseCSharpUUIDBytes)(hex));
|
|
282
|
+
case 'Python':
|
|
283
|
+
default:
|
|
284
|
+
// Python uses standard byte order, no reversal needed
|
|
285
|
+
return (0, exports.uuidHexToString)(hex);
|
|
286
|
+
}
|
|
287
|
+
};
|
|
288
|
+
/**
|
|
289
|
+
* Gets the UUID string from an object, handling Binary inputs specially.
|
|
290
|
+
* For Binary inputs, extracts and converts to UUID string format.
|
|
291
|
+
* For string inputs, returns as-is after trimming.
|
|
292
|
+
*/
|
|
293
|
+
const getUUIDStringFromObject = (object, sourceEncoding) => {
|
|
294
|
+
if (object instanceof bson_1.Binary) {
|
|
295
|
+
if (object.sub_type === bson_1.Binary.SUBTYPE_UUID ||
|
|
296
|
+
object.sub_type === bson_1.Binary.SUBTYPE_UUID_OLD) {
|
|
297
|
+
return binaryToUUIDStringWithEncoding(object, sourceEncoding);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
return (0, lodash_1.toString)(object).trim();
|
|
301
|
+
};
|
|
302
|
+
/**
|
|
303
|
+
* Mapping from UUID type names to encoding names.
|
|
304
|
+
*/
|
|
305
|
+
const UUID_TYPE_TO_ENCODING = Object.assign(Object.create(null), {
|
|
306
|
+
UUID: undefined,
|
|
307
|
+
LegacyJavaUUID: 'Java',
|
|
308
|
+
LegacyCSharpUUID: 'CSharp',
|
|
309
|
+
LegacyPythonUUID: 'Python',
|
|
310
|
+
});
|
|
311
|
+
/**
|
|
312
|
+
* Converts a Binary UUID from one encoding to another.
|
|
313
|
+
* This is used when changing between UUID types in the document editor.
|
|
314
|
+
*
|
|
315
|
+
* @param binary - The source Binary UUID
|
|
316
|
+
* @param sourceType - The source UUID type (e.g., 'LegacyCSharpUUID')
|
|
317
|
+
* @param targetType - The target UUID type (e.g., 'LegacyJavaUUID')
|
|
318
|
+
* @returns A new Binary with the same UUID value but different encoding
|
|
319
|
+
*/
|
|
320
|
+
const convertBinaryUUID = (binary, sourceType, targetType) => {
|
|
321
|
+
// Get the source encoding to decode the binary
|
|
322
|
+
const sourceEncoding = UUID_TYPE_TO_ENCODING[sourceType];
|
|
323
|
+
// Convert binary to standard UUID string using source encoding
|
|
324
|
+
const uuidString = binaryToUUIDStringWithEncoding(binary, sourceEncoding);
|
|
325
|
+
// Convert UUID string to binary using target encoding
|
|
326
|
+
const hex = uuidStringToHex(uuidString);
|
|
327
|
+
switch (targetType) {
|
|
328
|
+
case 'UUID':
|
|
329
|
+
return bson_1.Binary.createFromHexString(hex, bson_1.Binary.SUBTYPE_UUID);
|
|
330
|
+
case 'LegacyJavaUUID':
|
|
331
|
+
return bson_1.Binary.createFromHexString((0, exports.reverseJavaUUIDBytes)(hex), bson_1.Binary.SUBTYPE_UUID_OLD);
|
|
332
|
+
case 'LegacyCSharpUUID':
|
|
333
|
+
return bson_1.Binary.createFromHexString((0, exports.reverseCSharpUUIDBytes)(hex), bson_1.Binary.SUBTYPE_UUID_OLD);
|
|
334
|
+
case 'LegacyPythonUUID':
|
|
335
|
+
return bson_1.Binary.createFromHexString(hex, bson_1.Binary.SUBTYPE_UUID_OLD);
|
|
336
|
+
default:
|
|
337
|
+
throw new Error(`Unknown UUID type: ${targetType}`);
|
|
338
|
+
}
|
|
339
|
+
};
|
|
340
|
+
exports.convertBinaryUUID = convertBinaryUUID;
|
|
341
|
+
/**
|
|
342
|
+
* Converts to UUID (Binary subtype 4).
|
|
343
|
+
* If the input is empty, generates a random UUID.
|
|
344
|
+
* If the input is a Binary, extracts the UUID from it.
|
|
345
|
+
*/
|
|
346
|
+
const toUUID = (object) => {
|
|
347
|
+
const uuidString = getUUIDStringFromObject(object);
|
|
348
|
+
if (!uuidString) {
|
|
349
|
+
return new bson_1.UUID().toBinary();
|
|
350
|
+
}
|
|
351
|
+
validateUUIDString(uuidString);
|
|
352
|
+
const hex = uuidStringToHex(uuidString);
|
|
353
|
+
return bson_1.Binary.createFromHexString(hex, bson_1.Binary.SUBTYPE_UUID);
|
|
354
|
+
};
|
|
355
|
+
/**
|
|
356
|
+
* Converts to Legacy Java UUID (Binary subtype 3).
|
|
357
|
+
* Java legacy format reverses byte order for both MSB and LSB.
|
|
358
|
+
* If the input is empty, generates a random UUID.
|
|
359
|
+
* If the input is a Binary, extracts the UUID from it.
|
|
360
|
+
*/
|
|
361
|
+
const toLegacyJavaUUID = (object) => {
|
|
362
|
+
let uuidString = getUUIDStringFromObject(object, 'Java');
|
|
363
|
+
if (!uuidString) {
|
|
364
|
+
uuidString = generateRandomUUID();
|
|
365
|
+
}
|
|
366
|
+
else {
|
|
367
|
+
validateUUIDString(uuidString);
|
|
368
|
+
}
|
|
369
|
+
const hex = uuidStringToHex(uuidString);
|
|
370
|
+
const reversedHex = (0, exports.reverseJavaUUIDBytes)(hex);
|
|
371
|
+
return bson_1.Binary.createFromHexString(reversedHex, bson_1.Binary.SUBTYPE_UUID_OLD);
|
|
372
|
+
};
|
|
373
|
+
/**
|
|
374
|
+
* Converts to Legacy C# UUID (Binary subtype 3).
|
|
375
|
+
* C# legacy format reverses byte order for first 3 groups only.
|
|
376
|
+
* If the input is empty, generates a random UUID.
|
|
377
|
+
* If the input is a Binary, extracts the UUID from it.
|
|
378
|
+
*/
|
|
379
|
+
const toLegacyCSharpUUID = (object) => {
|
|
380
|
+
let uuidString = getUUIDStringFromObject(object, 'CSharp');
|
|
381
|
+
if (!uuidString) {
|
|
382
|
+
uuidString = generateRandomUUID();
|
|
383
|
+
}
|
|
384
|
+
else {
|
|
385
|
+
validateUUIDString(uuidString);
|
|
386
|
+
}
|
|
387
|
+
const hex = uuidStringToHex(uuidString);
|
|
388
|
+
const reversedHex = (0, exports.reverseCSharpUUIDBytes)(hex);
|
|
389
|
+
return bson_1.Binary.createFromHexString(reversedHex, bson_1.Binary.SUBTYPE_UUID_OLD);
|
|
390
|
+
};
|
|
391
|
+
/**
|
|
392
|
+
* Converts to Legacy Python UUID (Binary subtype 3).
|
|
393
|
+
* Python legacy format uses direct byte order (no reversal).
|
|
394
|
+
* If the input is empty, generates a random UUID.
|
|
395
|
+
* If the input is a Binary, extracts the UUID from it.
|
|
396
|
+
*/
|
|
397
|
+
const toLegacyPythonUUID = (object) => {
|
|
398
|
+
let uuidString = getUUIDStringFromObject(object, 'Python');
|
|
399
|
+
if (!uuidString) {
|
|
400
|
+
uuidString = generateRandomUUID();
|
|
401
|
+
}
|
|
402
|
+
else {
|
|
403
|
+
validateUUIDString(uuidString);
|
|
404
|
+
}
|
|
405
|
+
const hex = uuidStringToHex(uuidString);
|
|
406
|
+
return bson_1.Binary.createFromHexString(hex, bson_1.Binary.SUBTYPE_UUID_OLD);
|
|
407
|
+
};
|
|
171
408
|
const toRegex = (object) => {
|
|
172
409
|
return new bson_1.BSONRegExp((0, lodash_1.toString)(object));
|
|
173
410
|
};
|
|
@@ -204,6 +441,10 @@ const CASTERS = {
|
|
|
204
441
|
BSONSymbol: toSymbol,
|
|
205
442
|
Timestamp: toTimestamp,
|
|
206
443
|
Undefined: toUndefined,
|
|
444
|
+
UUID: toUUID,
|
|
445
|
+
LegacyJavaUUID: toLegacyJavaUUID,
|
|
446
|
+
LegacyCSharpUUID: toLegacyCSharpUUID,
|
|
447
|
+
LegacyPythonUUID: toLegacyPythonUUID,
|
|
207
448
|
};
|
|
208
449
|
/**
|
|
209
450
|
* An array of all bson types.
|
|
@@ -264,20 +505,29 @@ class TypeChecker {
|
|
|
264
505
|
}
|
|
265
506
|
/**
|
|
266
507
|
* Get the type for the object.
|
|
508
|
+
* @param legacyUUIDEncoding - Optional encoding for legacy UUID (subtype 3).
|
|
509
|
+
* If provided and the object is a Binary with subtype 3, returns the specific legacy UUID type.
|
|
510
|
+
* Valid values: 'LegacyJavaUUID', 'LegacyCSharpUUID', 'LegacyPythonUUID'
|
|
267
511
|
*/
|
|
268
|
-
type(object) {
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
if (
|
|
512
|
+
type(object, legacyUUIDEncoding) {
|
|
513
|
+
const bsonType = getBsonType(object);
|
|
514
|
+
if (bsonType) {
|
|
515
|
+
if (bsonType === LONG) {
|
|
272
516
|
return INT_64;
|
|
273
517
|
}
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
518
|
+
// Handle Binary UUID subtypes
|
|
519
|
+
if (bsonType === 'Binary') {
|
|
520
|
+
const binary = object;
|
|
521
|
+
if (binary.sub_type === bson_1.Binary.SUBTYPE_UUID) {
|
|
522
|
+
return 'UUID';
|
|
523
|
+
}
|
|
524
|
+
if (binary.sub_type === bson_1.Binary.SUBTYPE_UUID_OLD &&
|
|
525
|
+
binary.buffer.length === 16 &&
|
|
526
|
+
legacyUUIDEncoding) {
|
|
527
|
+
return legacyUUIDEncoding;
|
|
528
|
+
}
|
|
279
529
|
}
|
|
280
|
-
return
|
|
530
|
+
return bsonType;
|
|
281
531
|
}
|
|
282
532
|
if ((0, lodash_1.isNumber)(object)) {
|
|
283
533
|
return numberToBsonType(object);
|
package/dist/type-checker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type-checker.js","sourceRoot":"","sources":["../src/type-checker.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"type-checker.js","sourceRoot":"","sources":["../src/type-checker.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
"email": "compass@mongodb.com"
|
|
11
11
|
},
|
|
12
12
|
"homepage": "https://github.com/mongodb-js/compass",
|
|
13
|
-
"version": "7.
|
|
13
|
+
"version": "7.5.1",
|
|
14
14
|
"repository": {
|
|
15
15
|
"type": "git",
|
|
16
16
|
"url": "https://github.com/mongodb-js/compass.git"
|
|
@@ -46,14 +46,14 @@
|
|
|
46
46
|
"reformat": "npm run eslint . -- --fix && npm run prettier -- --write ."
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"bson": "^
|
|
49
|
+
"bson": "^7.2.0",
|
|
50
50
|
"lodash": "^4.17.21"
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|
|
53
|
-
"@mongodb-js/eslint-config-compass": "^1.4.
|
|
54
|
-
"@mongodb-js/mocha-config-compass": "^1.7.
|
|
53
|
+
"@mongodb-js/eslint-config-compass": "^1.4.18",
|
|
54
|
+
"@mongodb-js/mocha-config-compass": "^1.7.6",
|
|
55
55
|
"@mongodb-js/prettier-config-compass": "^1.2.9",
|
|
56
|
-
"@mongodb-js/tsconfig-compass": "^1.2.
|
|
56
|
+
"@mongodb-js/tsconfig-compass": "^1.2.14",
|
|
57
57
|
"@types/chai": "^4.2.21",
|
|
58
58
|
"@types/mocha": "^9.0.0",
|
|
59
59
|
"chai": "^4.2.0",
|
|
@@ -62,5 +62,5 @@
|
|
|
62
62
|
"nyc": "^15.1.0",
|
|
63
63
|
"typescript": "^5.9.3"
|
|
64
64
|
},
|
|
65
|
-
"gitHead": "
|
|
65
|
+
"gitHead": "aeb492f757655a594fc41ca2799c2569982fbe36"
|
|
66
66
|
}
|
package/src/index.ts
CHANGED
|
@@ -1,2 +1,12 @@
|
|
|
1
|
-
export {
|
|
2
|
-
|
|
1
|
+
export {
|
|
2
|
+
default,
|
|
3
|
+
UUID_REGEX,
|
|
4
|
+
uuidHexToString,
|
|
5
|
+
reverseJavaUUIDBytes,
|
|
6
|
+
reverseCSharpUUIDBytes,
|
|
7
|
+
convertBinaryUUID,
|
|
8
|
+
type BSONTypeTag,
|
|
9
|
+
getBsonType,
|
|
10
|
+
type TypeCastMap,
|
|
11
|
+
type TypeCastTypes,
|
|
12
|
+
} from './type-checker';
|
package/src/type-checker.ts
CHANGED
|
@@ -3,7 +3,6 @@ import {
|
|
|
3
3
|
isArray,
|
|
4
4
|
isString,
|
|
5
5
|
isNumber,
|
|
6
|
-
hasIn,
|
|
7
6
|
keys,
|
|
8
7
|
without,
|
|
9
8
|
toNumber,
|
|
@@ -23,8 +22,16 @@ import {
|
|
|
23
22
|
Code,
|
|
24
23
|
BSONSymbol,
|
|
25
24
|
Timestamp,
|
|
25
|
+
UUID,
|
|
26
|
+
bsonType,
|
|
27
|
+
type BSONTypeTag,
|
|
26
28
|
} from 'bson';
|
|
27
29
|
|
|
30
|
+
export { bsonType, type BSONTypeTag };
|
|
31
|
+
export function getBsonType(value: any): BSONTypeTag | undefined {
|
|
32
|
+
return value?.[bsonType];
|
|
33
|
+
}
|
|
34
|
+
|
|
28
35
|
export type TypeCastMap = {
|
|
29
36
|
Array: unknown[];
|
|
30
37
|
Binary: Binary;
|
|
@@ -45,6 +52,10 @@ export type TypeCastMap = {
|
|
|
45
52
|
BSONSymbol: BSONSymbol;
|
|
46
53
|
Timestamp: Timestamp;
|
|
47
54
|
Undefined: undefined;
|
|
55
|
+
UUID: Binary;
|
|
56
|
+
LegacyJavaUUID: Binary;
|
|
57
|
+
LegacyCSharpUUID: Binary;
|
|
58
|
+
LegacyPythonUUID: Binary;
|
|
48
59
|
};
|
|
49
60
|
|
|
50
61
|
export type TypeCastTypes = keyof TypeCastMap;
|
|
@@ -79,13 +90,6 @@ const DOUBLE = 'Double';
|
|
|
79
90
|
const DECIMAL_128 = 'Decimal128';
|
|
80
91
|
const OBJECT_TYPE = '[object Object]';
|
|
81
92
|
const EMPTY = '';
|
|
82
|
-
const OBJECT_ID = 'ObjectID';
|
|
83
|
-
const SYMBOL = 'Symbol';
|
|
84
|
-
|
|
85
|
-
/**
|
|
86
|
-
* The bson type field.
|
|
87
|
-
*/
|
|
88
|
-
const BSON_TYPE = '_bsontype';
|
|
89
93
|
|
|
90
94
|
/**
|
|
91
95
|
* The match regex.
|
|
@@ -218,7 +222,6 @@ const toDouble = (object: unknown): Double => {
|
|
|
218
222
|
};
|
|
219
223
|
|
|
220
224
|
type BSONObject = {
|
|
221
|
-
_bsontype: string;
|
|
222
225
|
toString(): string;
|
|
223
226
|
valueOf(): number | string;
|
|
224
227
|
};
|
|
@@ -228,14 +231,13 @@ const toDecimal128 = (object: unknown): Decimal128 => {
|
|
|
228
231
|
If converting a BSON Object, extract the value before converting to a string.
|
|
229
232
|
*/
|
|
230
233
|
if (
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
(object as BSONObject)._bsontype as (typeof NUMBER_TYPES)[number]
|
|
234
|
+
(NUMBER_TYPES as readonly (BSONTypeTag | undefined)[]).includes(
|
|
235
|
+
getBsonType(object)
|
|
234
236
|
)
|
|
235
237
|
) {
|
|
236
238
|
const bsonObj = object as BSONObject;
|
|
237
239
|
object =
|
|
238
|
-
|
|
240
|
+
getBsonType(object) === LONG ? bsonObj.toString() : bsonObj.valueOf();
|
|
239
241
|
}
|
|
240
242
|
return Decimal128.fromString(toString(object));
|
|
241
243
|
};
|
|
@@ -254,6 +256,284 @@ const toBinary = (object: unknown): Binary => {
|
|
|
254
256
|
return new Binary(buffer, Binary.SUBTYPE_DEFAULT);
|
|
255
257
|
};
|
|
256
258
|
|
|
259
|
+
/**
|
|
260
|
+
* UUID regex pattern for validation (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).
|
|
261
|
+
*/
|
|
262
|
+
export const UUID_REGEX =
|
|
263
|
+
/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
264
|
+
|
|
265
|
+
/**
|
|
266
|
+
* Validates a UUID string format.
|
|
267
|
+
*/
|
|
268
|
+
const validateUUIDString = (uuidString: string): void => {
|
|
269
|
+
if (!UUID_REGEX.test(uuidString)) {
|
|
270
|
+
throw new Error(
|
|
271
|
+
`'${uuidString}' is not a valid UUID string (expected format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)`
|
|
272
|
+
);
|
|
273
|
+
}
|
|
274
|
+
};
|
|
275
|
+
|
|
276
|
+
/**
|
|
277
|
+
* Converts a UUID string (with hyphens) to a hex string (without hyphens).
|
|
278
|
+
*/
|
|
279
|
+
const uuidStringToHex = (uuidString: string): string => {
|
|
280
|
+
return uuidString.replace(/-/g, '');
|
|
281
|
+
};
|
|
282
|
+
|
|
283
|
+
/**
|
|
284
|
+
* Converts a hex string (without hyphens) to UUID format with hyphens.
|
|
285
|
+
*/
|
|
286
|
+
export const uuidHexToString = (hex: string): string => {
|
|
287
|
+
return (
|
|
288
|
+
hex.substring(0, 8) +
|
|
289
|
+
'-' +
|
|
290
|
+
hex.substring(8, 12) +
|
|
291
|
+
'-' +
|
|
292
|
+
hex.substring(12, 16) +
|
|
293
|
+
'-' +
|
|
294
|
+
hex.substring(16, 20) +
|
|
295
|
+
'-' +
|
|
296
|
+
hex.substring(20, 32)
|
|
297
|
+
);
|
|
298
|
+
};
|
|
299
|
+
|
|
300
|
+
/**
|
|
301
|
+
* Reverses byte order for Java legacy UUID format (both MSB and LSB).
|
|
302
|
+
* Takes a 32-char hex string and returns a 32-char hex string with reversed byte order.
|
|
303
|
+
*
|
|
304
|
+
* This function is an involution (self-inverse), meaning applying it twice returns
|
|
305
|
+
* the original value. It can be used both to:
|
|
306
|
+
* - Convert from Java legacy binary format to standard UUID hex (for display)
|
|
307
|
+
* - Convert from standard UUID hex to Java legacy binary format (for storage)
|
|
308
|
+
*/
|
|
309
|
+
export const reverseJavaUUIDBytes = (hex: string): string => {
|
|
310
|
+
let msb = hex.substring(0, 16);
|
|
311
|
+
let lsb = hex.substring(16, 32);
|
|
312
|
+
msb =
|
|
313
|
+
msb.substring(14, 16) +
|
|
314
|
+
msb.substring(12, 14) +
|
|
315
|
+
msb.substring(10, 12) +
|
|
316
|
+
msb.substring(8, 10) +
|
|
317
|
+
msb.substring(6, 8) +
|
|
318
|
+
msb.substring(4, 6) +
|
|
319
|
+
msb.substring(2, 4) +
|
|
320
|
+
msb.substring(0, 2);
|
|
321
|
+
lsb =
|
|
322
|
+
lsb.substring(14, 16) +
|
|
323
|
+
lsb.substring(12, 14) +
|
|
324
|
+
lsb.substring(10, 12) +
|
|
325
|
+
lsb.substring(8, 10) +
|
|
326
|
+
lsb.substring(6, 8) +
|
|
327
|
+
lsb.substring(4, 6) +
|
|
328
|
+
lsb.substring(2, 4) +
|
|
329
|
+
lsb.substring(0, 2);
|
|
330
|
+
return msb + lsb;
|
|
331
|
+
};
|
|
332
|
+
|
|
333
|
+
/**
|
|
334
|
+
* Reverses byte order for C# legacy UUID format (first 3 groups only).
|
|
335
|
+
* Takes a 32-char hex string and returns a 32-char hex string with reversed byte order.
|
|
336
|
+
*
|
|
337
|
+
* This function is an involution (self-inverse), meaning applying it twice returns
|
|
338
|
+
* the original value. It can be used both to:
|
|
339
|
+
* - Convert from C# legacy binary format to standard UUID hex (for display)
|
|
340
|
+
* - Convert from standard UUID hex to C# legacy binary format (for storage)
|
|
341
|
+
*/
|
|
342
|
+
export const reverseCSharpUUIDBytes = (hex: string): string => {
|
|
343
|
+
const a =
|
|
344
|
+
hex.substring(6, 8) +
|
|
345
|
+
hex.substring(4, 6) +
|
|
346
|
+
hex.substring(2, 4) +
|
|
347
|
+
hex.substring(0, 2);
|
|
348
|
+
const b = hex.substring(10, 12) + hex.substring(8, 10);
|
|
349
|
+
const c = hex.substring(14, 16) + hex.substring(12, 14);
|
|
350
|
+
const d = hex.substring(16, 32);
|
|
351
|
+
return a + b + c + d;
|
|
352
|
+
};
|
|
353
|
+
|
|
354
|
+
/**
|
|
355
|
+
* Generates a random UUID string in the format xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.
|
|
356
|
+
*/
|
|
357
|
+
const generateRandomUUID = (): string => {
|
|
358
|
+
return new UUID().toString();
|
|
359
|
+
};
|
|
360
|
+
|
|
361
|
+
/**
|
|
362
|
+
* Converts a Binary UUID to a standard UUID string, accounting for its encoding.
|
|
363
|
+
* For subtype 4 (standard UUID), returns the hex directly as UUID format.
|
|
364
|
+
* For subtype 3 (legacy UUID), we need to know the original encoding to reverse the bytes.
|
|
365
|
+
* If sourceEncoding is not provided, assumes Python encoding (no reversal).
|
|
366
|
+
*/
|
|
367
|
+
const binaryToUUIDStringWithEncoding = (
|
|
368
|
+
binary: Binary,
|
|
369
|
+
sourceEncoding?: 'Java' | 'CSharp' | 'Python'
|
|
370
|
+
): string => {
|
|
371
|
+
const hex = binary.toString('hex');
|
|
372
|
+
|
|
373
|
+
// For standard UUID (subtype 4), no byte reversal needed
|
|
374
|
+
if (binary.sub_type === Binary.SUBTYPE_UUID) {
|
|
375
|
+
return uuidHexToString(hex);
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
// For legacy UUID (subtype 3), reverse bytes based on source encoding
|
|
379
|
+
switch (sourceEncoding) {
|
|
380
|
+
case 'Java':
|
|
381
|
+
// Reverse Java encoding to get standard UUID
|
|
382
|
+
return uuidHexToString(reverseJavaUUIDBytes(hex));
|
|
383
|
+
case 'CSharp':
|
|
384
|
+
// Reverse C# encoding to get standard UUID
|
|
385
|
+
return uuidHexToString(reverseCSharpUUIDBytes(hex));
|
|
386
|
+
case 'Python':
|
|
387
|
+
default:
|
|
388
|
+
// Python uses standard byte order, no reversal needed
|
|
389
|
+
return uuidHexToString(hex);
|
|
390
|
+
}
|
|
391
|
+
};
|
|
392
|
+
|
|
393
|
+
/**
|
|
394
|
+
* Gets the UUID string from an object, handling Binary inputs specially.
|
|
395
|
+
* For Binary inputs, extracts and converts to UUID string format.
|
|
396
|
+
* For string inputs, returns as-is after trimming.
|
|
397
|
+
*/
|
|
398
|
+
const getUUIDStringFromObject = (
|
|
399
|
+
object: unknown,
|
|
400
|
+
sourceEncoding?: 'Java' | 'CSharp' | 'Python'
|
|
401
|
+
): string => {
|
|
402
|
+
if (object instanceof Binary) {
|
|
403
|
+
if (
|
|
404
|
+
object.sub_type === Binary.SUBTYPE_UUID ||
|
|
405
|
+
object.sub_type === Binary.SUBTYPE_UUID_OLD
|
|
406
|
+
) {
|
|
407
|
+
return binaryToUUIDStringWithEncoding(object, sourceEncoding);
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
return toString(object).trim();
|
|
411
|
+
};
|
|
412
|
+
|
|
413
|
+
/**
|
|
414
|
+
* Mapping from UUID type names to encoding names.
|
|
415
|
+
*/
|
|
416
|
+
const UUID_TYPE_TO_ENCODING: Record<
|
|
417
|
+
string,
|
|
418
|
+
'Java' | 'CSharp' | 'Python' | undefined
|
|
419
|
+
> = Object.assign(Object.create(null), {
|
|
420
|
+
UUID: undefined,
|
|
421
|
+
LegacyJavaUUID: 'Java',
|
|
422
|
+
LegacyCSharpUUID: 'CSharp',
|
|
423
|
+
LegacyPythonUUID: 'Python',
|
|
424
|
+
});
|
|
425
|
+
|
|
426
|
+
/**
|
|
427
|
+
* Converts a Binary UUID from one encoding to another.
|
|
428
|
+
* This is used when changing between UUID types in the document editor.
|
|
429
|
+
*
|
|
430
|
+
* @param binary - The source Binary UUID
|
|
431
|
+
* @param sourceType - The source UUID type (e.g., 'LegacyCSharpUUID')
|
|
432
|
+
* @param targetType - The target UUID type (e.g., 'LegacyJavaUUID')
|
|
433
|
+
* @returns A new Binary with the same UUID value but different encoding
|
|
434
|
+
*/
|
|
435
|
+
export const convertBinaryUUID = (
|
|
436
|
+
binary: Binary,
|
|
437
|
+
sourceType: string,
|
|
438
|
+
targetType: string
|
|
439
|
+
): Binary => {
|
|
440
|
+
// Get the source encoding to decode the binary
|
|
441
|
+
const sourceEncoding = UUID_TYPE_TO_ENCODING[sourceType];
|
|
442
|
+
|
|
443
|
+
// Convert binary to standard UUID string using source encoding
|
|
444
|
+
const uuidString = binaryToUUIDStringWithEncoding(binary, sourceEncoding);
|
|
445
|
+
|
|
446
|
+
// Convert UUID string to binary using target encoding
|
|
447
|
+
const hex = uuidStringToHex(uuidString);
|
|
448
|
+
|
|
449
|
+
switch (targetType) {
|
|
450
|
+
case 'UUID':
|
|
451
|
+
return Binary.createFromHexString(hex, Binary.SUBTYPE_UUID);
|
|
452
|
+
case 'LegacyJavaUUID':
|
|
453
|
+
return Binary.createFromHexString(
|
|
454
|
+
reverseJavaUUIDBytes(hex),
|
|
455
|
+
Binary.SUBTYPE_UUID_OLD
|
|
456
|
+
);
|
|
457
|
+
case 'LegacyCSharpUUID':
|
|
458
|
+
return Binary.createFromHexString(
|
|
459
|
+
reverseCSharpUUIDBytes(hex),
|
|
460
|
+
Binary.SUBTYPE_UUID_OLD
|
|
461
|
+
);
|
|
462
|
+
case 'LegacyPythonUUID':
|
|
463
|
+
return Binary.createFromHexString(hex, Binary.SUBTYPE_UUID_OLD);
|
|
464
|
+
default:
|
|
465
|
+
throw new Error(`Unknown UUID type: ${targetType}`);
|
|
466
|
+
}
|
|
467
|
+
};
|
|
468
|
+
|
|
469
|
+
/**
|
|
470
|
+
* Converts to UUID (Binary subtype 4).
|
|
471
|
+
* If the input is empty, generates a random UUID.
|
|
472
|
+
* If the input is a Binary, extracts the UUID from it.
|
|
473
|
+
*/
|
|
474
|
+
const toUUID = (object: unknown): Binary => {
|
|
475
|
+
const uuidString = getUUIDStringFromObject(object);
|
|
476
|
+
if (!uuidString) {
|
|
477
|
+
return new UUID().toBinary();
|
|
478
|
+
}
|
|
479
|
+
validateUUIDString(uuidString);
|
|
480
|
+
const hex = uuidStringToHex(uuidString);
|
|
481
|
+
return Binary.createFromHexString(hex, Binary.SUBTYPE_UUID);
|
|
482
|
+
};
|
|
483
|
+
|
|
484
|
+
/**
|
|
485
|
+
* Converts to Legacy Java UUID (Binary subtype 3).
|
|
486
|
+
* Java legacy format reverses byte order for both MSB and LSB.
|
|
487
|
+
* If the input is empty, generates a random UUID.
|
|
488
|
+
* If the input is a Binary, extracts the UUID from it.
|
|
489
|
+
*/
|
|
490
|
+
const toLegacyJavaUUID = (object: unknown): Binary => {
|
|
491
|
+
let uuidString = getUUIDStringFromObject(object, 'Java');
|
|
492
|
+
if (!uuidString) {
|
|
493
|
+
uuidString = generateRandomUUID();
|
|
494
|
+
} else {
|
|
495
|
+
validateUUIDString(uuidString);
|
|
496
|
+
}
|
|
497
|
+
const hex = uuidStringToHex(uuidString);
|
|
498
|
+
const reversedHex = reverseJavaUUIDBytes(hex);
|
|
499
|
+
return Binary.createFromHexString(reversedHex, Binary.SUBTYPE_UUID_OLD);
|
|
500
|
+
};
|
|
501
|
+
|
|
502
|
+
/**
|
|
503
|
+
* Converts to Legacy C# UUID (Binary subtype 3).
|
|
504
|
+
* C# legacy format reverses byte order for first 3 groups only.
|
|
505
|
+
* If the input is empty, generates a random UUID.
|
|
506
|
+
* If the input is a Binary, extracts the UUID from it.
|
|
507
|
+
*/
|
|
508
|
+
const toLegacyCSharpUUID = (object: unknown): Binary => {
|
|
509
|
+
let uuidString = getUUIDStringFromObject(object, 'CSharp');
|
|
510
|
+
if (!uuidString) {
|
|
511
|
+
uuidString = generateRandomUUID();
|
|
512
|
+
} else {
|
|
513
|
+
validateUUIDString(uuidString);
|
|
514
|
+
}
|
|
515
|
+
const hex = uuidStringToHex(uuidString);
|
|
516
|
+
const reversedHex = reverseCSharpUUIDBytes(hex);
|
|
517
|
+
return Binary.createFromHexString(reversedHex, Binary.SUBTYPE_UUID_OLD);
|
|
518
|
+
};
|
|
519
|
+
|
|
520
|
+
/**
|
|
521
|
+
* Converts to Legacy Python UUID (Binary subtype 3).
|
|
522
|
+
* Python legacy format uses direct byte order (no reversal).
|
|
523
|
+
* If the input is empty, generates a random UUID.
|
|
524
|
+
* If the input is a Binary, extracts the UUID from it.
|
|
525
|
+
*/
|
|
526
|
+
const toLegacyPythonUUID = (object: unknown): Binary => {
|
|
527
|
+
let uuidString = getUUIDStringFromObject(object, 'Python');
|
|
528
|
+
if (!uuidString) {
|
|
529
|
+
uuidString = generateRandomUUID();
|
|
530
|
+
} else {
|
|
531
|
+
validateUUIDString(uuidString);
|
|
532
|
+
}
|
|
533
|
+
const hex = uuidStringToHex(uuidString);
|
|
534
|
+
return Binary.createFromHexString(hex, Binary.SUBTYPE_UUID_OLD);
|
|
535
|
+
};
|
|
536
|
+
|
|
257
537
|
const toRegex = (object: unknown): BSONRegExp => {
|
|
258
538
|
return new BSONRegExp(toString(object));
|
|
259
539
|
};
|
|
@@ -296,6 +576,10 @@ const CASTERS: {
|
|
|
296
576
|
BSONSymbol: toSymbol,
|
|
297
577
|
Timestamp: toTimestamp,
|
|
298
578
|
Undefined: toUndefined,
|
|
579
|
+
UUID: toUUID,
|
|
580
|
+
LegacyJavaUUID: toLegacyJavaUUID,
|
|
581
|
+
LegacyCSharpUUID: toLegacyCSharpUUID,
|
|
582
|
+
LegacyPythonUUID: toLegacyPythonUUID,
|
|
299
583
|
};
|
|
300
584
|
|
|
301
585
|
/**
|
|
@@ -367,20 +651,37 @@ class TypeChecker {
|
|
|
367
651
|
|
|
368
652
|
/**
|
|
369
653
|
* Get the type for the object.
|
|
654
|
+
* @param legacyUUIDEncoding - Optional encoding for legacy UUID (subtype 3).
|
|
655
|
+
* If provided and the object is a Binary with subtype 3, returns the specific legacy UUID type.
|
|
656
|
+
* Valid values: 'LegacyJavaUUID', 'LegacyCSharpUUID', 'LegacyPythonUUID'
|
|
370
657
|
*/
|
|
371
|
-
type(
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
658
|
+
type(
|
|
659
|
+
object: unknown,
|
|
660
|
+
legacyUUIDEncoding?:
|
|
661
|
+
| 'LegacyJavaUUID'
|
|
662
|
+
| 'LegacyCSharpUUID'
|
|
663
|
+
| 'LegacyPythonUUID'
|
|
664
|
+
): TypeCastTypes {
|
|
665
|
+
const bsonType = getBsonType(object);
|
|
666
|
+
if (bsonType) {
|
|
667
|
+
if (bsonType === LONG) {
|
|
375
668
|
return INT_64;
|
|
376
669
|
}
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
670
|
+
// Handle Binary UUID subtypes
|
|
671
|
+
if (bsonType === 'Binary') {
|
|
672
|
+
const binary = object as Binary;
|
|
673
|
+
if (binary.sub_type === Binary.SUBTYPE_UUID) {
|
|
674
|
+
return 'UUID';
|
|
675
|
+
}
|
|
676
|
+
if (
|
|
677
|
+
binary.sub_type === Binary.SUBTYPE_UUID_OLD &&
|
|
678
|
+
binary.buffer.length === 16 &&
|
|
679
|
+
legacyUUIDEncoding
|
|
680
|
+
) {
|
|
681
|
+
return legacyUUIDEncoding;
|
|
682
|
+
}
|
|
382
683
|
}
|
|
383
|
-
return
|
|
684
|
+
return bsonType as TypeCastTypes;
|
|
384
685
|
}
|
|
385
686
|
if (isNumber(object)) {
|
|
386
687
|
return numberToBsonType(object);
|