@fluid-experimental/property-common 2.103.0 → 2.111.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/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # @fluid-experimental/property-common
2
2
 
3
+ ## 2.111.0
4
+
5
+ Dependency updates only.
6
+
7
+ ## 2.110.0
8
+
9
+ Dependency updates only.
10
+
3
11
  ## 2.103.0
4
12
 
5
13
  Dependency updates only.
package/dist/guidUtils.js CHANGED
@@ -13,7 +13,6 @@ exports.GuidUtils = void 0;
13
13
  * @fileoverview Utility functions related to handling GUIDs
14
14
  */
15
15
  const base64_js_1 = __importDefault(require("base64-js"));
16
- const platform_dependent_1 = require("../platform-dependent");
17
16
  const UINT_32HASH_PRIME = 16777619;
18
17
  /**
19
18
  * Fast high quality 32 bit RNG for consistent GUID.
@@ -50,7 +49,8 @@ const guidRNG = {
50
49
  else {
51
50
  this.isInitialized = true;
52
51
  if (in_seed === undefined) {
53
- const randomValues = (0, platform_dependent_1.generateRandomUInt32Array)(4);
52
+ const randomValues = new Uint32Array(4);
53
+ crypto.getRandomValues(randomValues);
54
54
  this.u = randomValues[0];
55
55
  this.v = randomValues[1];
56
56
  this.w1 = randomValues[2];
@@ -1 +1 @@
1
- {"version":3,"file":"guidUtils.js","sourceRoot":"","sources":["../src/guidUtils.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/* eslint-disable no-bitwise */\n\n/**\n * @fileoverview Utility functions related to handling GUIDs\n */\n\nimport base64js from \"base64-js\";\n\nimport { generateRandomUInt32Array } from \"../platform-dependent\";\nconst UINT_32HASH_PRIME = 16777619;\n\n/**\n * Fast high quality 32 bit RNG for consistent GUID.\n *\n * Good \"randomness\" (distribution); Period is approximately equal to 3.11*10^37\n * Implementation was take from \"Numerical recipes. The Art of Scientific Computing.\", 3rd edition.\n * Page 357, algorithm name: Ranlim32\n */\nconst guidRNG = {\n\tu: 0,\n\tv: 0,\n\tw1: 0,\n\tw2: 0,\n\tisInitialized: false,\n\n\t/**\n\t * Initialize RNG.\n\t * This function need to be called once, before the first GUID gets created.\n\t *\n\t * @param in_seed - Optional 32-bit seed for GUID RNG.\n\t * If no seed is given, a combination of system's local time and `Math.random()` is used.\n\t * @param in_enforceReInitialization - Optionally enforce re-initialization with another seed.\n\t *\n\t * @returns The seed used to initialize the RNG;\n\t * If re-initialization is not enforced, a zero indicates that the RNG was not re-seeded.\n\t *\n\t * @alias property-common.initializeGUIDGenerator\n\t */\n\tinitialize(in_seed?: number, in_enforceReInitialization: boolean = false): number {\n\t\t// Quit if the RNG has already been initialized and we do not\n\t\t// want to enforce a re-initialization with a new seed\n\t\tif (this.isInitialized && !in_enforceReInitialization) {\n\t\t\treturn 0;\n\t\t} else {\n\t\t\tthis.isInitialized = true;\n\n\t\t\tif (in_seed === undefined) {\n\t\t\t\tconst randomValues = generateRandomUInt32Array(4);\n\t\t\t\tthis.u = randomValues[0];\n\t\t\t\tthis.v = randomValues[1];\n\t\t\t\tthis.w1 = randomValues[2];\n\t\t\t\tthis.w2 = randomValues[3];\n\t\t\t} else {\n\t\t\t\tthis.v = 224461437;\n\t\t\t\tthis.w1 = 521288629;\n\t\t\t\tthis.w2 = 362436069;\n\n\t\t\t\tthis.u = in_seed ^ this.v;\n\t\t\t\tthis.genRandUInt32();\n\t\t\t\tthis.v = this.u;\n\t\t\t\tthis.genRandUInt32();\n\t\t\t}\n\t\t\treturn -1;\n\t\t}\n\t},\n\n\t/**\n\t * @returns 32-bit random number based on the RNGs internal state\n\t */\n\tgenRandUInt32(): number {\n\t\tthis.u = multiply_uint32(this.u, 2891336453) + 1640531513;\n\t\tthis.v ^= this.v >>> 13;\n\t\tthis.v ^= this.v << 17;\n\t\tthis.v = ((this.v >>> 5) ^ this.v) >>> 0;\n\n\t\tthis.w1 = multiply_uint32(33378, this.w1 & 0xffff) + (this.w1 >>> 16);\n\t\tthis.w2 = multiply_uint32(57225, this.w2 & 0xffff) + (this.w2 >>> 16);\n\n\t\tlet x = this.u ^ (this.u << 9);\n\t\tx ^= x >>> 17;\n\t\tx ^= x << 6;\n\n\t\tlet y = this.w1 ^ (this.w1 << 17);\n\t\ty ^= y >>> 15;\n\t\ty ^= y << 5;\n\t\treturn (((x >>> 0) + this.v) ^ ((y >>> 0) + this.w2)) >>> 0;\n\t},\n};\n\n/**\n * Check if GUID is base64 based on the length\n * The length of base16 GUID is 36, base64 - 22\n *\n * @param GUID - Input GUID\n * @returns True if GUID is base64\n */\nconst isBase64 = (GUID: string): boolean => GUID.length === 22;\n\n/**\n * Allows for 32-bit integer multiplication with C-like semantics\n *\n * @param a - unsigned int32 value\n * @param b - unsigned int32 value\n * @returns The result of the unsigned integer multiplication.\n */\nfunction multiply_uint32(a: number, b: number): number {\n\tlet n = a;\n\tlet m = b;\n\n\tn >>>= 0;\n\tm >>>= 0;\n\tconst nlo = n & 0xffff;\n\treturn ((((n - nlo) * m) >>> 0) + nlo * m) >>> 0;\n}\n\n/**\n * Helper function to convert base64 encoding to url friendly format\n *\n * @param base64 - Base64 string\n *\n * @returns Url-friendly base64 encoding.\n */\nconst toUrlBase64 = (base64: string): string =>\n\tbase64.replace(/\\+/g, \"-\").replace(/\\//g, \"_\").split(\"=\")[0];\n\n/**\n * Helper function to recover padding of base64 encoding\n *\n * @param x - Base64 string\n *\n * @returns Padded base64 encoding.\n */\nconst toPaddedBase64 = function (x: string): string {\n\tlet base64 = x;\n\tconst padLength = 4 - (base64.length % 4);\n\tbase64 += \"=\".repeat(padLength);\n\treturn base64;\n};\n\n/**\n * Helper function to create a GUID string from an array with 32Bit values\n *\n * @param in_guidArray - Array with the 32 bit values\n * @param base64 - Use base64 encoding instead of standart guids\n *\n * @returns The GUID\n */\nconst uint32x4ToGUID = function (\n\tin_guidArray: Uint32Array | Int32Array | number[],\n\tbase64: boolean = false,\n): string {\n\tif (base64) {\n\t\tconst intArray = new Uint32Array(in_guidArray);\n\t\tconst byteArray = new Uint8Array(intArray.buffer);\n\t\tconst base64guid = base64js.fromByteArray(byteArray);\n\t\t// return url-friendly base64\n\t\treturn toUrlBase64(base64guid);\n\t} else {\n\t\t// Convert to hexadecimal string\n\t\tlet str = \"\";\n\t\tfor (let i = 0; i < 4; i++) {\n\t\t\tconst hex = in_guidArray[i].toString(16);\n\t\t\tstr += \"0\".repeat(8 - hex.length) + hex;\n\t\t}\n\t\treturn `${str.substr(0, 8)}-${str.substr(8, 4)}-${str.substr(12, 4)}-${str.substr(\n\t\t\t16,\n\t\t\t4,\n\t\t)}-${str.substr(20, 12)}`;\n\t}\n};\n\n/**\n * Convert GUID to four 32Bit values.\n *\n * @param in_guid - The GUID to convert\n * @param io_result - An optional array to write the result to.\n * If no array is given, a new one gets created.\n * @returns Four 32-bit values\n *\n */\nconst guidToUint32x4 = function (\n\tin_guid: string,\n\tresult: Uint32Array = new Uint32Array(4),\n): Uint32Array {\n\tif (isBase64(in_guid)) {\n\t\tconst GUID = toPaddedBase64(in_guid);\n\t\tconst bytes = base64js.toByteArray(GUID);\n\t\tconst intArray = new Uint32Array(bytes.buffer);\n\t\tresult.set(intArray);\n\t} else {\n\t\tresult[0] = parseInt(`0x${in_guid.substr(0, 8)}`, 16);\n\t\tresult[1] = parseInt(`0x${in_guid.substr(9, 4)}${in_guid.substr(14, 4)}`, 16);\n\t\tresult[2] = parseInt(`0x${in_guid.substr(19, 4)}${in_guid.substr(24, 4)}`, 16);\n\t\tresult[3] = parseInt(`0x${in_guid.substr(28, 8)}`, 16);\n\t}\n\treturn result;\n};\n\n/**\n * Convert base64 GUID into base16.\n *\n * @param in_guid - Base64 GUID to convert\n * @returns Base16 GUID\n *\n */\nconst base64Tobase16 = (in_guid: string) => uint32x4ToGUID(guidToUint32x4(in_guid));\n\n/**\n * Convert base16 into base64 GUID.\n *\n * @param in_guid - Base16 GUID to convert\n * @returns Base64 GUID\n *\n */\nconst base16ToBase64 = (in_guid: string) => uint32x4ToGUID(guidToUint32x4(in_guid), true);\n\n/**\n * Based on the boolean parameter generate either\n * a 128 bit base16 GUID with the following format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx\n * or url-friendly base64 string GUID of length 22\n *\n * This function is *not* thread safe!\n *\n * @param base64 - Use base64 encoding instead of standart guids\n *\n * @returns The GUID\n */\nconst generateGUID = function (base64 = false): string {\n\tconst rnds = new Uint32Array(4);\n\n\t// Random numbers for GUID (4x32 bit)\n\trnds[0] = guidRNG.genRandUInt32();\n\trnds[1] = guidRNG.genRandUInt32();\n\trnds[2] = guidRNG.genRandUInt32();\n\trnds[3] = guidRNG.genRandUInt32();\n\treturn uint32x4ToGUID(rnds, base64);\n};\n\n// The last character is checked this way because last 4 bits of 22nd character are ignored\n// by decoder, e.g. \"+Q\" and \"+Z\" result in the same decoding.\n// The only characters with last 4 bits set to 0 are A, Q, g, w.\nconst reBase64 = /^[\\w-]{21}[AQgw]$/;\n\nconst reBase16 = /^[\\dA-Fa-f]{8}(?:-[\\dA-Fa-f]{4}){3}-[\\dA-Fa-f]{12}$/;\n\n/**\n * Routine used to check whether the given string is a valid GUID\n *\n * @param in_guid - The GUID to test.\n * @returns True if the parameter is a valid GUID, false otherwise.\n */\nconst isGUID = (in_guid: string) => reBase16.test(in_guid) || reBase64.test(in_guid);\n\n/**\n * Performs a hash combination operation on the two supplied Uint32 arrays of length 4 (using\n * a variant of the algorithm from boost::hash_combine\n *\n * @param in_array1 - First array\n * @param in_array2 - Second array\n * @returns New combined hash\n */\nconst hashCombine4xUint32 = function (\n\tin_array1: Uint32Array,\n\tin_array2: Uint32Array,\n\tio_result?: Uint32Array,\n): Uint32Array {\n\tlet accumulated = io_result;\n\tif (accumulated === undefined) {\n\t\taccumulated = new Uint32Array(in_array2);\n\t} else {\n\t\taccumulated[0] = in_array2[0];\n\t\taccumulated[1] = in_array2[1];\n\t\taccumulated[2] = in_array2[2];\n\t\taccumulated[3] = in_array2[3];\n\t}\n\n\taccumulated[0] += 0x9e3779b9;\n\taccumulated[1] += 0x638f227;\n\taccumulated[2] += 0x1aff2bad;\n\taccumulated[3] += 0x3a8f05c5;\n\n\taccumulated[0] += in_array1[3] << 6;\n\taccumulated[1] += in_array1[0] << 6;\n\taccumulated[2] += in_array1[1] << 6;\n\taccumulated[3] += in_array1[2] << 6;\n\n\taccumulated[0] += in_array1[2] >> 2;\n\taccumulated[1] += in_array1[3] >> 2;\n\taccumulated[2] += in_array1[0] >> 2;\n\taccumulated[3] += in_array1[1] >> 2;\n\n\taccumulated[0] = ((accumulated[0] ^ in_array1[1]) * UINT_32HASH_PRIME) >>> 0;\n\taccumulated[1] = ((accumulated[1] ^ in_array1[2]) * UINT_32HASH_PRIME) >>> 0;\n\taccumulated[2] = ((accumulated[2] ^ in_array1[3]) * UINT_32HASH_PRIME) >>> 0;\n\taccumulated[3] = ((accumulated[3] ^ in_array1[0]) * UINT_32HASH_PRIME) >>> 0;\n\n\treturn accumulated;\n};\n\n/**\n * Takes two guids and generates a new derived GUID.\n *\n * @remarks Note: You should only use this helper function when you need only one combination.\n * Otherwise, it is more efficient to work on the uint8 arrays directly.\n *\n * @param in_guid1 - Input GUID\n * @param in_guid2 - Input GUID\n * @param base64 - Use base64 encoding instead of standart GUIDs\n * @returns Combined GUID\n */\nconst combineGuids = function (in_guid1: string, in_guid2: string, base64 = false): string {\n\tconst firstArray = guidToUint32x4(in_guid1);\n\tconst secondArray = guidToUint32x4(in_guid2);\n\tconst combined = hashCombine4xUint32(firstArray, secondArray);\n\treturn uint32x4ToGUID(combined, base64);\n};\n\n// Make sure the RNG is initialized\nguidRNG.initialize();\n\nconst initializeGUIDGenerator = (...args) => {\n\tguidRNG.initialize(...args);\n};\n\n/**\n * @internal\n */\nexport const GuidUtils = {\n\tuint32x4ToGUID,\n\tguidToUint32x4,\n\tbase64Tobase16,\n\tbase16ToBase64,\n\tinitializeGUIDGenerator,\n\tgenerateGUID,\n\tisGUID,\n\tcombineGuids,\n\thashCombine4xUint32,\n};\n"]}
1
+ {"version":3,"file":"guidUtils.js","sourceRoot":"","sources":["../src/guidUtils.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/* eslint-disable no-bitwise */\n\n/**\n * @fileoverview Utility functions related to handling GUIDs\n */\n\nimport base64js from \"base64-js\";\n\nconst UINT_32HASH_PRIME = 16777619;\n\n/**\n * Fast high quality 32 bit RNG for consistent GUID.\n *\n * Good \"randomness\" (distribution); Period is approximately equal to 3.11*10^37\n * Implementation was take from \"Numerical recipes. The Art of Scientific Computing.\", 3rd edition.\n * Page 357, algorithm name: Ranlim32\n */\nconst guidRNG = {\n\tu: 0,\n\tv: 0,\n\tw1: 0,\n\tw2: 0,\n\tisInitialized: false,\n\n\t/**\n\t * Initialize RNG.\n\t * This function need to be called once, before the first GUID gets created.\n\t *\n\t * @param in_seed - Optional 32-bit seed for GUID RNG.\n\t * If no seed is given, a combination of system's local time and `Math.random()` is used.\n\t * @param in_enforceReInitialization - Optionally enforce re-initialization with another seed.\n\t *\n\t * @returns The seed used to initialize the RNG;\n\t * If re-initialization is not enforced, a zero indicates that the RNG was not re-seeded.\n\t *\n\t * @alias property-common.initializeGUIDGenerator\n\t */\n\tinitialize(in_seed?: number, in_enforceReInitialization: boolean = false): number {\n\t\t// Quit if the RNG has already been initialized and we do not\n\t\t// want to enforce a re-initialization with a new seed\n\t\tif (this.isInitialized && !in_enforceReInitialization) {\n\t\t\treturn 0;\n\t\t} else {\n\t\t\tthis.isInitialized = true;\n\n\t\t\tif (in_seed === undefined) {\n\t\t\t\tconst randomValues = new Uint32Array(4);\n\t\t\t\tcrypto.getRandomValues(randomValues);\n\t\t\t\tthis.u = randomValues[0];\n\t\t\t\tthis.v = randomValues[1];\n\t\t\t\tthis.w1 = randomValues[2];\n\t\t\t\tthis.w2 = randomValues[3];\n\t\t\t} else {\n\t\t\t\tthis.v = 224461437;\n\t\t\t\tthis.w1 = 521288629;\n\t\t\t\tthis.w2 = 362436069;\n\n\t\t\t\tthis.u = in_seed ^ this.v;\n\t\t\t\tthis.genRandUInt32();\n\t\t\t\tthis.v = this.u;\n\t\t\t\tthis.genRandUInt32();\n\t\t\t}\n\t\t\treturn -1;\n\t\t}\n\t},\n\n\t/**\n\t * @returns 32-bit random number based on the RNGs internal state\n\t */\n\tgenRandUInt32(): number {\n\t\tthis.u = multiply_uint32(this.u, 2891336453) + 1640531513;\n\t\tthis.v ^= this.v >>> 13;\n\t\tthis.v ^= this.v << 17;\n\t\tthis.v = ((this.v >>> 5) ^ this.v) >>> 0;\n\n\t\tthis.w1 = multiply_uint32(33378, this.w1 & 0xffff) + (this.w1 >>> 16);\n\t\tthis.w2 = multiply_uint32(57225, this.w2 & 0xffff) + (this.w2 >>> 16);\n\n\t\tlet x = this.u ^ (this.u << 9);\n\t\tx ^= x >>> 17;\n\t\tx ^= x << 6;\n\n\t\tlet y = this.w1 ^ (this.w1 << 17);\n\t\ty ^= y >>> 15;\n\t\ty ^= y << 5;\n\t\treturn (((x >>> 0) + this.v) ^ ((y >>> 0) + this.w2)) >>> 0;\n\t},\n};\n\n/**\n * Check if GUID is base64 based on the length\n * The length of base16 GUID is 36, base64 - 22\n *\n * @param GUID - Input GUID\n * @returns True if GUID is base64\n */\nconst isBase64 = (GUID: string): boolean => GUID.length === 22;\n\n/**\n * Allows for 32-bit integer multiplication with C-like semantics\n *\n * @param a - unsigned int32 value\n * @param b - unsigned int32 value\n * @returns The result of the unsigned integer multiplication.\n */\nfunction multiply_uint32(a: number, b: number): number {\n\tlet n = a;\n\tlet m = b;\n\n\tn >>>= 0;\n\tm >>>= 0;\n\tconst nlo = n & 0xffff;\n\treturn ((((n - nlo) * m) >>> 0) + nlo * m) >>> 0;\n}\n\n/**\n * Helper function to convert base64 encoding to url friendly format\n *\n * @param base64 - Base64 string\n *\n * @returns Url-friendly base64 encoding.\n */\nconst toUrlBase64 = (base64: string): string =>\n\tbase64.replace(/\\+/g, \"-\").replace(/\\//g, \"_\").split(\"=\")[0];\n\n/**\n * Helper function to recover padding of base64 encoding\n *\n * @param x - Base64 string\n *\n * @returns Padded base64 encoding.\n */\nconst toPaddedBase64 = function (x: string): string {\n\tlet base64 = x;\n\tconst padLength = 4 - (base64.length % 4);\n\tbase64 += \"=\".repeat(padLength);\n\treturn base64;\n};\n\n/**\n * Helper function to create a GUID string from an array with 32Bit values\n *\n * @param in_guidArray - Array with the 32 bit values\n * @param base64 - Use base64 encoding instead of standart guids\n *\n * @returns The GUID\n */\nconst uint32x4ToGUID = function (\n\tin_guidArray: Uint32Array | Int32Array | number[],\n\tbase64: boolean = false,\n): string {\n\tif (base64) {\n\t\tconst intArray = new Uint32Array(in_guidArray);\n\t\tconst byteArray = new Uint8Array(intArray.buffer);\n\t\tconst base64guid = base64js.fromByteArray(byteArray);\n\t\t// return url-friendly base64\n\t\treturn toUrlBase64(base64guid);\n\t} else {\n\t\t// Convert to hexadecimal string\n\t\tlet str = \"\";\n\t\tfor (let i = 0; i < 4; i++) {\n\t\t\tconst hex = in_guidArray[i].toString(16);\n\t\t\tstr += \"0\".repeat(8 - hex.length) + hex;\n\t\t}\n\t\treturn `${str.substr(0, 8)}-${str.substr(8, 4)}-${str.substr(12, 4)}-${str.substr(\n\t\t\t16,\n\t\t\t4,\n\t\t)}-${str.substr(20, 12)}`;\n\t}\n};\n\n/**\n * Convert GUID to four 32Bit values.\n *\n * @param in_guid - The GUID to convert\n * @param io_result - An optional array to write the result to.\n * If no array is given, a new one gets created.\n * @returns Four 32-bit values\n *\n */\nconst guidToUint32x4 = function (\n\tin_guid: string,\n\tresult: Uint32Array = new Uint32Array(4),\n): Uint32Array {\n\tif (isBase64(in_guid)) {\n\t\tconst GUID = toPaddedBase64(in_guid);\n\t\tconst bytes = base64js.toByteArray(GUID);\n\t\tconst intArray = new Uint32Array(bytes.buffer);\n\t\tresult.set(intArray);\n\t} else {\n\t\tresult[0] = parseInt(`0x${in_guid.substr(0, 8)}`, 16);\n\t\tresult[1] = parseInt(`0x${in_guid.substr(9, 4)}${in_guid.substr(14, 4)}`, 16);\n\t\tresult[2] = parseInt(`0x${in_guid.substr(19, 4)}${in_guid.substr(24, 4)}`, 16);\n\t\tresult[3] = parseInt(`0x${in_guid.substr(28, 8)}`, 16);\n\t}\n\treturn result;\n};\n\n/**\n * Convert base64 GUID into base16.\n *\n * @param in_guid - Base64 GUID to convert\n * @returns Base16 GUID\n *\n */\nconst base64Tobase16 = (in_guid: string) => uint32x4ToGUID(guidToUint32x4(in_guid));\n\n/**\n * Convert base16 into base64 GUID.\n *\n * @param in_guid - Base16 GUID to convert\n * @returns Base64 GUID\n *\n */\nconst base16ToBase64 = (in_guid: string) => uint32x4ToGUID(guidToUint32x4(in_guid), true);\n\n/**\n * Based on the boolean parameter generate either\n * a 128 bit base16 GUID with the following format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx\n * or url-friendly base64 string GUID of length 22\n *\n * This function is *not* thread safe!\n *\n * @param base64 - Use base64 encoding instead of standart guids\n *\n * @returns The GUID\n */\nconst generateGUID = function (base64 = false): string {\n\tconst rnds = new Uint32Array(4);\n\n\t// Random numbers for GUID (4x32 bit)\n\trnds[0] = guidRNG.genRandUInt32();\n\trnds[1] = guidRNG.genRandUInt32();\n\trnds[2] = guidRNG.genRandUInt32();\n\trnds[3] = guidRNG.genRandUInt32();\n\treturn uint32x4ToGUID(rnds, base64);\n};\n\n// The last character is checked this way because last 4 bits of 22nd character are ignored\n// by decoder, e.g. \"+Q\" and \"+Z\" result in the same decoding.\n// The only characters with last 4 bits set to 0 are A, Q, g, w.\nconst reBase64 = /^[\\w-]{21}[AQgw]$/;\n\nconst reBase16 = /^[\\dA-Fa-f]{8}(?:-[\\dA-Fa-f]{4}){3}-[\\dA-Fa-f]{12}$/;\n\n/**\n * Routine used to check whether the given string is a valid GUID\n *\n * @param in_guid - The GUID to test.\n * @returns True if the parameter is a valid GUID, false otherwise.\n */\nconst isGUID = (in_guid: string) => reBase16.test(in_guid) || reBase64.test(in_guid);\n\n/**\n * Performs a hash combination operation on the two supplied Uint32 arrays of length 4 (using\n * a variant of the algorithm from boost::hash_combine\n *\n * @param in_array1 - First array\n * @param in_array2 - Second array\n * @returns New combined hash\n */\nconst hashCombine4xUint32 = function (\n\tin_array1: Uint32Array,\n\tin_array2: Uint32Array,\n\tio_result?: Uint32Array,\n): Uint32Array {\n\tlet accumulated = io_result;\n\tif (accumulated === undefined) {\n\t\taccumulated = new Uint32Array(in_array2);\n\t} else {\n\t\taccumulated[0] = in_array2[0];\n\t\taccumulated[1] = in_array2[1];\n\t\taccumulated[2] = in_array2[2];\n\t\taccumulated[3] = in_array2[3];\n\t}\n\n\taccumulated[0] += 0x9e3779b9;\n\taccumulated[1] += 0x638f227;\n\taccumulated[2] += 0x1aff2bad;\n\taccumulated[3] += 0x3a8f05c5;\n\n\taccumulated[0] += in_array1[3] << 6;\n\taccumulated[1] += in_array1[0] << 6;\n\taccumulated[2] += in_array1[1] << 6;\n\taccumulated[3] += in_array1[2] << 6;\n\n\taccumulated[0] += in_array1[2] >> 2;\n\taccumulated[1] += in_array1[3] >> 2;\n\taccumulated[2] += in_array1[0] >> 2;\n\taccumulated[3] += in_array1[1] >> 2;\n\n\taccumulated[0] = ((accumulated[0] ^ in_array1[1]) * UINT_32HASH_PRIME) >>> 0;\n\taccumulated[1] = ((accumulated[1] ^ in_array1[2]) * UINT_32HASH_PRIME) >>> 0;\n\taccumulated[2] = ((accumulated[2] ^ in_array1[3]) * UINT_32HASH_PRIME) >>> 0;\n\taccumulated[3] = ((accumulated[3] ^ in_array1[0]) * UINT_32HASH_PRIME) >>> 0;\n\n\treturn accumulated;\n};\n\n/**\n * Takes two guids and generates a new derived GUID.\n *\n * @remarks Note: You should only use this helper function when you need only one combination.\n * Otherwise, it is more efficient to work on the uint8 arrays directly.\n *\n * @param in_guid1 - Input GUID\n * @param in_guid2 - Input GUID\n * @param base64 - Use base64 encoding instead of standart GUIDs\n * @returns Combined GUID\n */\nconst combineGuids = function (in_guid1: string, in_guid2: string, base64 = false): string {\n\tconst firstArray = guidToUint32x4(in_guid1);\n\tconst secondArray = guidToUint32x4(in_guid2);\n\tconst combined = hashCombine4xUint32(firstArray, secondArray);\n\treturn uint32x4ToGUID(combined, base64);\n};\n\n// Make sure the RNG is initialized\nguidRNG.initialize();\n\nconst initializeGUIDGenerator = (...args) => {\n\tguidRNG.initialize(...args);\n};\n\n/**\n * @internal\n */\nexport const GuidUtils = {\n\tuint32x4ToGUID,\n\tguidToUint32x4,\n\tbase64Tobase16,\n\tbase16ToBase64,\n\tinitializeGUIDGenerator,\n\tgenerateGUID,\n\tisGUID,\n\tcombineGuids,\n\thashCombine4xUint32,\n};\n"]}
package/lib/guidUtils.js CHANGED
@@ -7,7 +7,6 @@
7
7
  * @fileoverview Utility functions related to handling GUIDs
8
8
  */
9
9
  import base64js from "base64-js";
10
- import { generateRandomUInt32Array } from "../platform-dependent";
11
10
  const UINT_32HASH_PRIME = 16777619;
12
11
  /**
13
12
  * Fast high quality 32 bit RNG for consistent GUID.
@@ -44,7 +43,8 @@ const guidRNG = {
44
43
  else {
45
44
  this.isInitialized = true;
46
45
  if (in_seed === undefined) {
47
- const randomValues = generateRandomUInt32Array(4);
46
+ const randomValues = new Uint32Array(4);
47
+ crypto.getRandomValues(randomValues);
48
48
  this.u = randomValues[0];
49
49
  this.v = randomValues[1];
50
50
  this.w1 = randomValues[2];
@@ -1 +1 @@
1
- {"version":3,"file":"guidUtils.js","sourceRoot":"","sources":["../src/guidUtils.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/* eslint-disable no-bitwise */\n\n/**\n * @fileoverview Utility functions related to handling GUIDs\n */\n\nimport base64js from \"base64-js\";\n\nimport { generateRandomUInt32Array } from \"../platform-dependent\";\nconst UINT_32HASH_PRIME = 16777619;\n\n/**\n * Fast high quality 32 bit RNG for consistent GUID.\n *\n * Good \"randomness\" (distribution); Period is approximately equal to 3.11*10^37\n * Implementation was take from \"Numerical recipes. The Art of Scientific Computing.\", 3rd edition.\n * Page 357, algorithm name: Ranlim32\n */\nconst guidRNG = {\n\tu: 0,\n\tv: 0,\n\tw1: 0,\n\tw2: 0,\n\tisInitialized: false,\n\n\t/**\n\t * Initialize RNG.\n\t * This function need to be called once, before the first GUID gets created.\n\t *\n\t * @param in_seed - Optional 32-bit seed for GUID RNG.\n\t * If no seed is given, a combination of system's local time and `Math.random()` is used.\n\t * @param in_enforceReInitialization - Optionally enforce re-initialization with another seed.\n\t *\n\t * @returns The seed used to initialize the RNG;\n\t * If re-initialization is not enforced, a zero indicates that the RNG was not re-seeded.\n\t *\n\t * @alias property-common.initializeGUIDGenerator\n\t */\n\tinitialize(in_seed?: number, in_enforceReInitialization: boolean = false): number {\n\t\t// Quit if the RNG has already been initialized and we do not\n\t\t// want to enforce a re-initialization with a new seed\n\t\tif (this.isInitialized && !in_enforceReInitialization) {\n\t\t\treturn 0;\n\t\t} else {\n\t\t\tthis.isInitialized = true;\n\n\t\t\tif (in_seed === undefined) {\n\t\t\t\tconst randomValues = generateRandomUInt32Array(4);\n\t\t\t\tthis.u = randomValues[0];\n\t\t\t\tthis.v = randomValues[1];\n\t\t\t\tthis.w1 = randomValues[2];\n\t\t\t\tthis.w2 = randomValues[3];\n\t\t\t} else {\n\t\t\t\tthis.v = 224461437;\n\t\t\t\tthis.w1 = 521288629;\n\t\t\t\tthis.w2 = 362436069;\n\n\t\t\t\tthis.u = in_seed ^ this.v;\n\t\t\t\tthis.genRandUInt32();\n\t\t\t\tthis.v = this.u;\n\t\t\t\tthis.genRandUInt32();\n\t\t\t}\n\t\t\treturn -1;\n\t\t}\n\t},\n\n\t/**\n\t * @returns 32-bit random number based on the RNGs internal state\n\t */\n\tgenRandUInt32(): number {\n\t\tthis.u = multiply_uint32(this.u, 2891336453) + 1640531513;\n\t\tthis.v ^= this.v >>> 13;\n\t\tthis.v ^= this.v << 17;\n\t\tthis.v = ((this.v >>> 5) ^ this.v) >>> 0;\n\n\t\tthis.w1 = multiply_uint32(33378, this.w1 & 0xffff) + (this.w1 >>> 16);\n\t\tthis.w2 = multiply_uint32(57225, this.w2 & 0xffff) + (this.w2 >>> 16);\n\n\t\tlet x = this.u ^ (this.u << 9);\n\t\tx ^= x >>> 17;\n\t\tx ^= x << 6;\n\n\t\tlet y = this.w1 ^ (this.w1 << 17);\n\t\ty ^= y >>> 15;\n\t\ty ^= y << 5;\n\t\treturn (((x >>> 0) + this.v) ^ ((y >>> 0) + this.w2)) >>> 0;\n\t},\n};\n\n/**\n * Check if GUID is base64 based on the length\n * The length of base16 GUID is 36, base64 - 22\n *\n * @param GUID - Input GUID\n * @returns True if GUID is base64\n */\nconst isBase64 = (GUID: string): boolean => GUID.length === 22;\n\n/**\n * Allows for 32-bit integer multiplication with C-like semantics\n *\n * @param a - unsigned int32 value\n * @param b - unsigned int32 value\n * @returns The result of the unsigned integer multiplication.\n */\nfunction multiply_uint32(a: number, b: number): number {\n\tlet n = a;\n\tlet m = b;\n\n\tn >>>= 0;\n\tm >>>= 0;\n\tconst nlo = n & 0xffff;\n\treturn ((((n - nlo) * m) >>> 0) + nlo * m) >>> 0;\n}\n\n/**\n * Helper function to convert base64 encoding to url friendly format\n *\n * @param base64 - Base64 string\n *\n * @returns Url-friendly base64 encoding.\n */\nconst toUrlBase64 = (base64: string): string =>\n\tbase64.replace(/\\+/g, \"-\").replace(/\\//g, \"_\").split(\"=\")[0];\n\n/**\n * Helper function to recover padding of base64 encoding\n *\n * @param x - Base64 string\n *\n * @returns Padded base64 encoding.\n */\nconst toPaddedBase64 = function (x: string): string {\n\tlet base64 = x;\n\tconst padLength = 4 - (base64.length % 4);\n\tbase64 += \"=\".repeat(padLength);\n\treturn base64;\n};\n\n/**\n * Helper function to create a GUID string from an array with 32Bit values\n *\n * @param in_guidArray - Array with the 32 bit values\n * @param base64 - Use base64 encoding instead of standart guids\n *\n * @returns The GUID\n */\nconst uint32x4ToGUID = function (\n\tin_guidArray: Uint32Array | Int32Array | number[],\n\tbase64: boolean = false,\n): string {\n\tif (base64) {\n\t\tconst intArray = new Uint32Array(in_guidArray);\n\t\tconst byteArray = new Uint8Array(intArray.buffer);\n\t\tconst base64guid = base64js.fromByteArray(byteArray);\n\t\t// return url-friendly base64\n\t\treturn toUrlBase64(base64guid);\n\t} else {\n\t\t// Convert to hexadecimal string\n\t\tlet str = \"\";\n\t\tfor (let i = 0; i < 4; i++) {\n\t\t\tconst hex = in_guidArray[i].toString(16);\n\t\t\tstr += \"0\".repeat(8 - hex.length) + hex;\n\t\t}\n\t\treturn `${str.substr(0, 8)}-${str.substr(8, 4)}-${str.substr(12, 4)}-${str.substr(\n\t\t\t16,\n\t\t\t4,\n\t\t)}-${str.substr(20, 12)}`;\n\t}\n};\n\n/**\n * Convert GUID to four 32Bit values.\n *\n * @param in_guid - The GUID to convert\n * @param io_result - An optional array to write the result to.\n * If no array is given, a new one gets created.\n * @returns Four 32-bit values\n *\n */\nconst guidToUint32x4 = function (\n\tin_guid: string,\n\tresult: Uint32Array = new Uint32Array(4),\n): Uint32Array {\n\tif (isBase64(in_guid)) {\n\t\tconst GUID = toPaddedBase64(in_guid);\n\t\tconst bytes = base64js.toByteArray(GUID);\n\t\tconst intArray = new Uint32Array(bytes.buffer);\n\t\tresult.set(intArray);\n\t} else {\n\t\tresult[0] = parseInt(`0x${in_guid.substr(0, 8)}`, 16);\n\t\tresult[1] = parseInt(`0x${in_guid.substr(9, 4)}${in_guid.substr(14, 4)}`, 16);\n\t\tresult[2] = parseInt(`0x${in_guid.substr(19, 4)}${in_guid.substr(24, 4)}`, 16);\n\t\tresult[3] = parseInt(`0x${in_guid.substr(28, 8)}`, 16);\n\t}\n\treturn result;\n};\n\n/**\n * Convert base64 GUID into base16.\n *\n * @param in_guid - Base64 GUID to convert\n * @returns Base16 GUID\n *\n */\nconst base64Tobase16 = (in_guid: string) => uint32x4ToGUID(guidToUint32x4(in_guid));\n\n/**\n * Convert base16 into base64 GUID.\n *\n * @param in_guid - Base16 GUID to convert\n * @returns Base64 GUID\n *\n */\nconst base16ToBase64 = (in_guid: string) => uint32x4ToGUID(guidToUint32x4(in_guid), true);\n\n/**\n * Based on the boolean parameter generate either\n * a 128 bit base16 GUID with the following format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx\n * or url-friendly base64 string GUID of length 22\n *\n * This function is *not* thread safe!\n *\n * @param base64 - Use base64 encoding instead of standart guids\n *\n * @returns The GUID\n */\nconst generateGUID = function (base64 = false): string {\n\tconst rnds = new Uint32Array(4);\n\n\t// Random numbers for GUID (4x32 bit)\n\trnds[0] = guidRNG.genRandUInt32();\n\trnds[1] = guidRNG.genRandUInt32();\n\trnds[2] = guidRNG.genRandUInt32();\n\trnds[3] = guidRNG.genRandUInt32();\n\treturn uint32x4ToGUID(rnds, base64);\n};\n\n// The last character is checked this way because last 4 bits of 22nd character are ignored\n// by decoder, e.g. \"+Q\" and \"+Z\" result in the same decoding.\n// The only characters with last 4 bits set to 0 are A, Q, g, w.\nconst reBase64 = /^[\\w-]{21}[AQgw]$/;\n\nconst reBase16 = /^[\\dA-Fa-f]{8}(?:-[\\dA-Fa-f]{4}){3}-[\\dA-Fa-f]{12}$/;\n\n/**\n * Routine used to check whether the given string is a valid GUID\n *\n * @param in_guid - The GUID to test.\n * @returns True if the parameter is a valid GUID, false otherwise.\n */\nconst isGUID = (in_guid: string) => reBase16.test(in_guid) || reBase64.test(in_guid);\n\n/**\n * Performs a hash combination operation on the two supplied Uint32 arrays of length 4 (using\n * a variant of the algorithm from boost::hash_combine\n *\n * @param in_array1 - First array\n * @param in_array2 - Second array\n * @returns New combined hash\n */\nconst hashCombine4xUint32 = function (\n\tin_array1: Uint32Array,\n\tin_array2: Uint32Array,\n\tio_result?: Uint32Array,\n): Uint32Array {\n\tlet accumulated = io_result;\n\tif (accumulated === undefined) {\n\t\taccumulated = new Uint32Array(in_array2);\n\t} else {\n\t\taccumulated[0] = in_array2[0];\n\t\taccumulated[1] = in_array2[1];\n\t\taccumulated[2] = in_array2[2];\n\t\taccumulated[3] = in_array2[3];\n\t}\n\n\taccumulated[0] += 0x9e3779b9;\n\taccumulated[1] += 0x638f227;\n\taccumulated[2] += 0x1aff2bad;\n\taccumulated[3] += 0x3a8f05c5;\n\n\taccumulated[0] += in_array1[3] << 6;\n\taccumulated[1] += in_array1[0] << 6;\n\taccumulated[2] += in_array1[1] << 6;\n\taccumulated[3] += in_array1[2] << 6;\n\n\taccumulated[0] += in_array1[2] >> 2;\n\taccumulated[1] += in_array1[3] >> 2;\n\taccumulated[2] += in_array1[0] >> 2;\n\taccumulated[3] += in_array1[1] >> 2;\n\n\taccumulated[0] = ((accumulated[0] ^ in_array1[1]) * UINT_32HASH_PRIME) >>> 0;\n\taccumulated[1] = ((accumulated[1] ^ in_array1[2]) * UINT_32HASH_PRIME) >>> 0;\n\taccumulated[2] = ((accumulated[2] ^ in_array1[3]) * UINT_32HASH_PRIME) >>> 0;\n\taccumulated[3] = ((accumulated[3] ^ in_array1[0]) * UINT_32HASH_PRIME) >>> 0;\n\n\treturn accumulated;\n};\n\n/**\n * Takes two guids and generates a new derived GUID.\n *\n * @remarks Note: You should only use this helper function when you need only one combination.\n * Otherwise, it is more efficient to work on the uint8 arrays directly.\n *\n * @param in_guid1 - Input GUID\n * @param in_guid2 - Input GUID\n * @param base64 - Use base64 encoding instead of standart GUIDs\n * @returns Combined GUID\n */\nconst combineGuids = function (in_guid1: string, in_guid2: string, base64 = false): string {\n\tconst firstArray = guidToUint32x4(in_guid1);\n\tconst secondArray = guidToUint32x4(in_guid2);\n\tconst combined = hashCombine4xUint32(firstArray, secondArray);\n\treturn uint32x4ToGUID(combined, base64);\n};\n\n// Make sure the RNG is initialized\nguidRNG.initialize();\n\nconst initializeGUIDGenerator = (...args) => {\n\tguidRNG.initialize(...args);\n};\n\n/**\n * @internal\n */\nexport const GuidUtils = {\n\tuint32x4ToGUID,\n\tguidToUint32x4,\n\tbase64Tobase16,\n\tbase16ToBase64,\n\tinitializeGUIDGenerator,\n\tgenerateGUID,\n\tisGUID,\n\tcombineGuids,\n\thashCombine4xUint32,\n};\n"]}
1
+ {"version":3,"file":"guidUtils.js","sourceRoot":"","sources":["../src/guidUtils.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/* eslint-disable no-bitwise */\n\n/**\n * @fileoverview Utility functions related to handling GUIDs\n */\n\nimport base64js from \"base64-js\";\n\nconst UINT_32HASH_PRIME = 16777619;\n\n/**\n * Fast high quality 32 bit RNG for consistent GUID.\n *\n * Good \"randomness\" (distribution); Period is approximately equal to 3.11*10^37\n * Implementation was take from \"Numerical recipes. The Art of Scientific Computing.\", 3rd edition.\n * Page 357, algorithm name: Ranlim32\n */\nconst guidRNG = {\n\tu: 0,\n\tv: 0,\n\tw1: 0,\n\tw2: 0,\n\tisInitialized: false,\n\n\t/**\n\t * Initialize RNG.\n\t * This function need to be called once, before the first GUID gets created.\n\t *\n\t * @param in_seed - Optional 32-bit seed for GUID RNG.\n\t * If no seed is given, a combination of system's local time and `Math.random()` is used.\n\t * @param in_enforceReInitialization - Optionally enforce re-initialization with another seed.\n\t *\n\t * @returns The seed used to initialize the RNG;\n\t * If re-initialization is not enforced, a zero indicates that the RNG was not re-seeded.\n\t *\n\t * @alias property-common.initializeGUIDGenerator\n\t */\n\tinitialize(in_seed?: number, in_enforceReInitialization: boolean = false): number {\n\t\t// Quit if the RNG has already been initialized and we do not\n\t\t// want to enforce a re-initialization with a new seed\n\t\tif (this.isInitialized && !in_enforceReInitialization) {\n\t\t\treturn 0;\n\t\t} else {\n\t\t\tthis.isInitialized = true;\n\n\t\t\tif (in_seed === undefined) {\n\t\t\t\tconst randomValues = new Uint32Array(4);\n\t\t\t\tcrypto.getRandomValues(randomValues);\n\t\t\t\tthis.u = randomValues[0];\n\t\t\t\tthis.v = randomValues[1];\n\t\t\t\tthis.w1 = randomValues[2];\n\t\t\t\tthis.w2 = randomValues[3];\n\t\t\t} else {\n\t\t\t\tthis.v = 224461437;\n\t\t\t\tthis.w1 = 521288629;\n\t\t\t\tthis.w2 = 362436069;\n\n\t\t\t\tthis.u = in_seed ^ this.v;\n\t\t\t\tthis.genRandUInt32();\n\t\t\t\tthis.v = this.u;\n\t\t\t\tthis.genRandUInt32();\n\t\t\t}\n\t\t\treturn -1;\n\t\t}\n\t},\n\n\t/**\n\t * @returns 32-bit random number based on the RNGs internal state\n\t */\n\tgenRandUInt32(): number {\n\t\tthis.u = multiply_uint32(this.u, 2891336453) + 1640531513;\n\t\tthis.v ^= this.v >>> 13;\n\t\tthis.v ^= this.v << 17;\n\t\tthis.v = ((this.v >>> 5) ^ this.v) >>> 0;\n\n\t\tthis.w1 = multiply_uint32(33378, this.w1 & 0xffff) + (this.w1 >>> 16);\n\t\tthis.w2 = multiply_uint32(57225, this.w2 & 0xffff) + (this.w2 >>> 16);\n\n\t\tlet x = this.u ^ (this.u << 9);\n\t\tx ^= x >>> 17;\n\t\tx ^= x << 6;\n\n\t\tlet y = this.w1 ^ (this.w1 << 17);\n\t\ty ^= y >>> 15;\n\t\ty ^= y << 5;\n\t\treturn (((x >>> 0) + this.v) ^ ((y >>> 0) + this.w2)) >>> 0;\n\t},\n};\n\n/**\n * Check if GUID is base64 based on the length\n * The length of base16 GUID is 36, base64 - 22\n *\n * @param GUID - Input GUID\n * @returns True if GUID is base64\n */\nconst isBase64 = (GUID: string): boolean => GUID.length === 22;\n\n/**\n * Allows for 32-bit integer multiplication with C-like semantics\n *\n * @param a - unsigned int32 value\n * @param b - unsigned int32 value\n * @returns The result of the unsigned integer multiplication.\n */\nfunction multiply_uint32(a: number, b: number): number {\n\tlet n = a;\n\tlet m = b;\n\n\tn >>>= 0;\n\tm >>>= 0;\n\tconst nlo = n & 0xffff;\n\treturn ((((n - nlo) * m) >>> 0) + nlo * m) >>> 0;\n}\n\n/**\n * Helper function to convert base64 encoding to url friendly format\n *\n * @param base64 - Base64 string\n *\n * @returns Url-friendly base64 encoding.\n */\nconst toUrlBase64 = (base64: string): string =>\n\tbase64.replace(/\\+/g, \"-\").replace(/\\//g, \"_\").split(\"=\")[0];\n\n/**\n * Helper function to recover padding of base64 encoding\n *\n * @param x - Base64 string\n *\n * @returns Padded base64 encoding.\n */\nconst toPaddedBase64 = function (x: string): string {\n\tlet base64 = x;\n\tconst padLength = 4 - (base64.length % 4);\n\tbase64 += \"=\".repeat(padLength);\n\treturn base64;\n};\n\n/**\n * Helper function to create a GUID string from an array with 32Bit values\n *\n * @param in_guidArray - Array with the 32 bit values\n * @param base64 - Use base64 encoding instead of standart guids\n *\n * @returns The GUID\n */\nconst uint32x4ToGUID = function (\n\tin_guidArray: Uint32Array | Int32Array | number[],\n\tbase64: boolean = false,\n): string {\n\tif (base64) {\n\t\tconst intArray = new Uint32Array(in_guidArray);\n\t\tconst byteArray = new Uint8Array(intArray.buffer);\n\t\tconst base64guid = base64js.fromByteArray(byteArray);\n\t\t// return url-friendly base64\n\t\treturn toUrlBase64(base64guid);\n\t} else {\n\t\t// Convert to hexadecimal string\n\t\tlet str = \"\";\n\t\tfor (let i = 0; i < 4; i++) {\n\t\t\tconst hex = in_guidArray[i].toString(16);\n\t\t\tstr += \"0\".repeat(8 - hex.length) + hex;\n\t\t}\n\t\treturn `${str.substr(0, 8)}-${str.substr(8, 4)}-${str.substr(12, 4)}-${str.substr(\n\t\t\t16,\n\t\t\t4,\n\t\t)}-${str.substr(20, 12)}`;\n\t}\n};\n\n/**\n * Convert GUID to four 32Bit values.\n *\n * @param in_guid - The GUID to convert\n * @param io_result - An optional array to write the result to.\n * If no array is given, a new one gets created.\n * @returns Four 32-bit values\n *\n */\nconst guidToUint32x4 = function (\n\tin_guid: string,\n\tresult: Uint32Array = new Uint32Array(4),\n): Uint32Array {\n\tif (isBase64(in_guid)) {\n\t\tconst GUID = toPaddedBase64(in_guid);\n\t\tconst bytes = base64js.toByteArray(GUID);\n\t\tconst intArray = new Uint32Array(bytes.buffer);\n\t\tresult.set(intArray);\n\t} else {\n\t\tresult[0] = parseInt(`0x${in_guid.substr(0, 8)}`, 16);\n\t\tresult[1] = parseInt(`0x${in_guid.substr(9, 4)}${in_guid.substr(14, 4)}`, 16);\n\t\tresult[2] = parseInt(`0x${in_guid.substr(19, 4)}${in_guid.substr(24, 4)}`, 16);\n\t\tresult[3] = parseInt(`0x${in_guid.substr(28, 8)}`, 16);\n\t}\n\treturn result;\n};\n\n/**\n * Convert base64 GUID into base16.\n *\n * @param in_guid - Base64 GUID to convert\n * @returns Base16 GUID\n *\n */\nconst base64Tobase16 = (in_guid: string) => uint32x4ToGUID(guidToUint32x4(in_guid));\n\n/**\n * Convert base16 into base64 GUID.\n *\n * @param in_guid - Base16 GUID to convert\n * @returns Base64 GUID\n *\n */\nconst base16ToBase64 = (in_guid: string) => uint32x4ToGUID(guidToUint32x4(in_guid), true);\n\n/**\n * Based on the boolean parameter generate either\n * a 128 bit base16 GUID with the following format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx\n * or url-friendly base64 string GUID of length 22\n *\n * This function is *not* thread safe!\n *\n * @param base64 - Use base64 encoding instead of standart guids\n *\n * @returns The GUID\n */\nconst generateGUID = function (base64 = false): string {\n\tconst rnds = new Uint32Array(4);\n\n\t// Random numbers for GUID (4x32 bit)\n\trnds[0] = guidRNG.genRandUInt32();\n\trnds[1] = guidRNG.genRandUInt32();\n\trnds[2] = guidRNG.genRandUInt32();\n\trnds[3] = guidRNG.genRandUInt32();\n\treturn uint32x4ToGUID(rnds, base64);\n};\n\n// The last character is checked this way because last 4 bits of 22nd character are ignored\n// by decoder, e.g. \"+Q\" and \"+Z\" result in the same decoding.\n// The only characters with last 4 bits set to 0 are A, Q, g, w.\nconst reBase64 = /^[\\w-]{21}[AQgw]$/;\n\nconst reBase16 = /^[\\dA-Fa-f]{8}(?:-[\\dA-Fa-f]{4}){3}-[\\dA-Fa-f]{12}$/;\n\n/**\n * Routine used to check whether the given string is a valid GUID\n *\n * @param in_guid - The GUID to test.\n * @returns True if the parameter is a valid GUID, false otherwise.\n */\nconst isGUID = (in_guid: string) => reBase16.test(in_guid) || reBase64.test(in_guid);\n\n/**\n * Performs a hash combination operation on the two supplied Uint32 arrays of length 4 (using\n * a variant of the algorithm from boost::hash_combine\n *\n * @param in_array1 - First array\n * @param in_array2 - Second array\n * @returns New combined hash\n */\nconst hashCombine4xUint32 = function (\n\tin_array1: Uint32Array,\n\tin_array2: Uint32Array,\n\tio_result?: Uint32Array,\n): Uint32Array {\n\tlet accumulated = io_result;\n\tif (accumulated === undefined) {\n\t\taccumulated = new Uint32Array(in_array2);\n\t} else {\n\t\taccumulated[0] = in_array2[0];\n\t\taccumulated[1] = in_array2[1];\n\t\taccumulated[2] = in_array2[2];\n\t\taccumulated[3] = in_array2[3];\n\t}\n\n\taccumulated[0] += 0x9e3779b9;\n\taccumulated[1] += 0x638f227;\n\taccumulated[2] += 0x1aff2bad;\n\taccumulated[3] += 0x3a8f05c5;\n\n\taccumulated[0] += in_array1[3] << 6;\n\taccumulated[1] += in_array1[0] << 6;\n\taccumulated[2] += in_array1[1] << 6;\n\taccumulated[3] += in_array1[2] << 6;\n\n\taccumulated[0] += in_array1[2] >> 2;\n\taccumulated[1] += in_array1[3] >> 2;\n\taccumulated[2] += in_array1[0] >> 2;\n\taccumulated[3] += in_array1[1] >> 2;\n\n\taccumulated[0] = ((accumulated[0] ^ in_array1[1]) * UINT_32HASH_PRIME) >>> 0;\n\taccumulated[1] = ((accumulated[1] ^ in_array1[2]) * UINT_32HASH_PRIME) >>> 0;\n\taccumulated[2] = ((accumulated[2] ^ in_array1[3]) * UINT_32HASH_PRIME) >>> 0;\n\taccumulated[3] = ((accumulated[3] ^ in_array1[0]) * UINT_32HASH_PRIME) >>> 0;\n\n\treturn accumulated;\n};\n\n/**\n * Takes two guids and generates a new derived GUID.\n *\n * @remarks Note: You should only use this helper function when you need only one combination.\n * Otherwise, it is more efficient to work on the uint8 arrays directly.\n *\n * @param in_guid1 - Input GUID\n * @param in_guid2 - Input GUID\n * @param base64 - Use base64 encoding instead of standart GUIDs\n * @returns Combined GUID\n */\nconst combineGuids = function (in_guid1: string, in_guid2: string, base64 = false): string {\n\tconst firstArray = guidToUint32x4(in_guid1);\n\tconst secondArray = guidToUint32x4(in_guid2);\n\tconst combined = hashCombine4xUint32(firstArray, secondArray);\n\treturn uint32x4ToGUID(combined, base64);\n};\n\n// Make sure the RNG is initialized\nguidRNG.initialize();\n\nconst initializeGUIDGenerator = (...args) => {\n\tguidRNG.initialize(...args);\n};\n\n/**\n * @internal\n */\nexport const GuidUtils = {\n\tuint32x4ToGUID,\n\tguidToUint32x4,\n\tbase64Tobase16,\n\tbase16ToBase64,\n\tinitializeGUIDGenerator,\n\tgenerateGUID,\n\tisGUID,\n\tcombineGuids,\n\thashCombine4xUint32,\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fluid-experimental/property-common",
3
- "version": "2.103.0",
3
+ "version": "2.111.0",
4
4
  "description": "common functions used in properties",
5
5
  "homepage": "https://fluidframework.com",
6
6
  "repository": {
@@ -48,7 +48,7 @@
48
48
  },
49
49
  "devDependencies": {
50
50
  "@biomejs/biome": "~2.4.5",
51
- "@fluid-internal/mocha-test-setup": "~2.103.0",
51
+ "@fluid-internal/mocha-test-setup": "~2.111.0",
52
52
  "@fluidframework/build-common": "^2.0.3",
53
53
  "@fluidframework/build-tools": "^0.65.0",
54
54
  "@microsoft/api-extractor": "7.58.1",
package/src/guidUtils.ts CHANGED
@@ -11,7 +11,6 @@
11
11
 
12
12
  import base64js from "base64-js";
13
13
 
14
- import { generateRandomUInt32Array } from "../platform-dependent";
15
14
  const UINT_32HASH_PRIME = 16777619;
16
15
 
17
16
  /**
@@ -50,7 +49,8 @@ const guidRNG = {
50
49
  this.isInitialized = true;
51
50
 
52
51
  if (in_seed === undefined) {
53
- const randomValues = generateRandomUInt32Array(4);
52
+ const randomValues = new Uint32Array(4);
53
+ crypto.getRandomValues(randomValues);
54
54
  this.u = randomValues[0];
55
55
  this.v = randomValues[1];
56
56
  this.w1 = randomValues[2];
@@ -1,281 +0,0 @@
1
- # @fluid-internal/platform-dependent
2
-
3
- ## 2.103.0
4
-
5
- Dependency updates only.
6
-
7
- ## 2.102.0
8
-
9
- Dependency updates only.
10
-
11
- ## 2.101.0
12
-
13
- Dependency updates only.
14
-
15
- ## 2.100.0
16
-
17
- ### Minor Changes
18
-
19
- - Node 22 is now the minimum supported Node.js version ([#27116](https://github.com/microsoft/FluidFramework/pull/27116)) [e8214d29663](https://github.com/microsoft/FluidFramework/commit/e8214d29663f5ee98d737daed82506a25d8de8d0)
20
-
21
- All Fluid Framework client packages now require Node.js 22 or later. This aligns with the standing Node upgrade policy as Node 20 reaches end-of-life on April 30, 2026.
22
-
23
- ## 2.93.0
24
-
25
- Dependency updates only.
26
-
27
- ## 2.92.0
28
-
29
- Dependency updates only.
30
-
31
- ## 2.91.0
32
-
33
- Dependency updates only.
34
-
35
- ## 2.90.0
36
-
37
- Dependency updates only.
38
-
39
- ## 2.83.0
40
-
41
- Dependency updates only.
42
-
43
- ## 2.82.0
44
-
45
- Dependency updates only.
46
-
47
- ## 2.81.0
48
-
49
- Dependency updates only.
50
-
51
- ## 2.80.0
52
-
53
- Dependency updates only.
54
-
55
- ## 2.74.0
56
-
57
- Dependency updates only.
58
-
59
- ## 2.73.0
60
-
61
- Dependency updates only.
62
-
63
- ## 2.72.0
64
-
65
- Dependency updates only.
66
-
67
- ## 2.71.0
68
-
69
- Dependency updates only.
70
-
71
- ## 2.70.0
72
-
73
- Dependency updates only.
74
-
75
- ## 2.63.0
76
-
77
- Dependency updates only.
78
-
79
- ## 2.62.0
80
-
81
- Dependency updates only.
82
-
83
- ## 2.61.0
84
-
85
- Dependency updates only.
86
-
87
- ## 2.60.0
88
-
89
- Dependency updates only.
90
-
91
- ## 2.53.0
92
-
93
- Dependency updates only.
94
-
95
- ## 2.52.0
96
-
97
- Dependency updates only.
98
-
99
- ## 2.51.0
100
-
101
- Dependency updates only.
102
-
103
- ## 2.50.0
104
-
105
- Dependency updates only.
106
-
107
- ## 2.43.0
108
-
109
- Dependency updates only.
110
-
111
- ## 2.42.0
112
-
113
- Dependency updates only.
114
-
115
- ## 2.41.0
116
-
117
- Dependency updates only.
118
-
119
- ## 2.40.0
120
-
121
- Dependency updates only.
122
-
123
- ## 2.33.0
124
-
125
- Dependency updates only.
126
-
127
- ## 2.32.0
128
-
129
- Dependency updates only.
130
-
131
- ## 2.31.0
132
-
133
- Dependency updates only.
134
-
135
- ## 2.30.0
136
-
137
- Dependency updates only.
138
-
139
- ## 2.23.0
140
-
141
- Dependency updates only.
142
-
143
- ## 2.22.0
144
-
145
- Dependency updates only.
146
-
147
- ## 2.21.0
148
-
149
- Dependency updates only.
150
-
151
- ## 2.20.0
152
-
153
- Dependency updates only.
154
-
155
- ## 2.13.0
156
-
157
- Dependency updates only.
158
-
159
- ## 2.12.0
160
-
161
- Dependency updates only.
162
-
163
- ## 2.11.0
164
-
165
- Dependency updates only.
166
-
167
- ## 2.10.0
168
-
169
- Dependency updates only.
170
-
171
- ## 2.5.0
172
-
173
- Dependency updates only.
174
-
175
- ## 2.4.0
176
-
177
- Dependency updates only.
178
-
179
- ## 2.3.0
180
-
181
- Dependency updates only.
182
-
183
- ## 2.2.0
184
-
185
- Dependency updates only.
186
-
187
- ## 2.1.0
188
-
189
- Dependency updates only.
190
-
191
- ## 2.0.0-rc.5.0.0
192
-
193
- Dependency updates only.
194
-
195
- ## 2.0.0-rc.4.0.0
196
-
197
- Dependency updates only.
198
-
199
- ## 2.0.0-rc.3.0.0
200
-
201
- Dependency updates only.
202
-
203
- ## 2.0.0-rc.2.0.0
204
-
205
- Dependency updates only.
206
-
207
- ## 2.0.0-rc.1.0.0
208
-
209
- Dependency updates only.
210
-
211
- ## 2.0.0-internal.8.0.0
212
-
213
- Dependency updates only.
214
-
215
- ## 2.0.0-internal.7.4.0
216
-
217
- Dependency updates only.
218
-
219
- ## 2.0.0-internal.7.3.0
220
-
221
- Dependency updates only.
222
-
223
- ## 2.0.0-internal.7.2.0
224
-
225
- Dependency updates only.
226
-
227
- ## 2.0.0-internal.7.1.0
228
-
229
- Dependency updates only.
230
-
231
- ## 2.0.0-internal.7.0.0
232
-
233
- Dependency updates only.
234
-
235
- ## 2.0.0-internal.6.4.0
236
-
237
- Dependency updates only.
238
-
239
- ## 2.0.0-internal.6.3.0
240
-
241
- Dependency updates only.
242
-
243
- ## 2.0.0-internal.6.2.0
244
-
245
- Dependency updates only.
246
-
247
- ## 2.0.0-internal.6.1.0
248
-
249
- Dependency updates only.
250
-
251
- ## 2.0.0-internal.6.0.0
252
-
253
- Dependency updates only.
254
-
255
- ## 2.0.0-internal.5.4.0
256
-
257
- Dependency updates only.
258
-
259
- ## 2.0.0-internal.5.3.0
260
-
261
- Dependency updates only.
262
-
263
- ## 2.0.0-internal.5.2.0
264
-
265
- Dependency updates only.
266
-
267
- ## 2.0.0-internal.5.1.0
268
-
269
- Dependency updates only.
270
-
271
- ## 2.0.0-internal.5.0.0
272
-
273
- Dependency updates only.
274
-
275
- ## 2.0.0-internal.4.4.0
276
-
277
- Dependency updates only.
278
-
279
- ## 2.0.0-internal.4.1.0
280
-
281
- Dependency updates only.
@@ -1,21 +0,0 @@
1
- Copyright (c) Microsoft Corporation and contributors. All rights reserved.
2
-
3
- MIT License
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
@@ -1,5 +0,0 @@
1
- # @fluid-internal/platform-dependent
2
-
3
- ## Overview
4
-
5
- This is an internal package that is only used during the build to load the correct code in dependence on the platform (browser/node)
@@ -1,21 +0,0 @@
1
- /*!
2
- * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
- * Licensed under the MIT License.
4
- */
5
-
6
- /**
7
- * Create an array with random uint32 values
8
- *
9
- * @param {number} length - size of a new array
10
- * @return {number[]} - an array with random values
11
- */
12
- function generateRandomUInt32Array(length) {
13
- const array = new Uint32Array(length);
14
- const crypto = window.crypto || window.msCrypto; // IE 11 support
15
- crypto.getRandomValues(array);
16
- return array;
17
- }
18
-
19
- module.exports = {
20
- generateRandomUInt32Array,
21
- };
@@ -1,22 +0,0 @@
1
- #!/bin/sh
2
- basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
-
4
- case `uname` in
5
- *CYGWIN*|*MINGW*|*MSYS*)
6
- if command -v cygpath > /dev/null 2>&1; then
7
- basedir=`cygpath -w "$basedir"`
8
- fi
9
- ;;
10
- esac
11
-
12
- if [ -z "$NODE_PATH" ]; then
13
- export NODE_PATH="/mnt/vss/_work/1/s/FluidFramework/node_modules/.pnpm/@biomejs+biome@2.4.5/node_modules/@biomejs/biome/node_modules:/mnt/vss/_work/1/s/FluidFramework/node_modules/.pnpm/@biomejs+biome@2.4.5/node_modules:/mnt/vss/_work/1/s/FluidFramework/node_modules/.pnpm/node_modules"
14
- else
15
- export NODE_PATH="/mnt/vss/_work/1/s/FluidFramework/node_modules/.pnpm/@biomejs+biome@2.4.5/node_modules/@biomejs/biome/node_modules:/mnt/vss/_work/1/s/FluidFramework/node_modules/.pnpm/@biomejs+biome@2.4.5/node_modules:/mnt/vss/_work/1/s/FluidFramework/node_modules/.pnpm/node_modules:$NODE_PATH"
16
- fi
17
- if [ -x "$basedir/node" ]; then
18
- exec "$basedir/node" "$basedir/../@biomejs/biome/bin/biome" "$@"
19
- else
20
- exec node "$basedir/../@biomejs/biome/bin/biome" "$@"
21
- fi
22
- # cmd-shim-target=/mnt/vss/_work/1/s/FluidFramework/experimental/PropertyDDS/packages/property-common/platform-dependent/node_modules/@biomejs/biome/bin/biome
@@ -1,22 +0,0 @@
1
- #!/bin/sh
2
- basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
-
4
- case `uname` in
5
- *CYGWIN*|*MINGW*|*MSYS*)
6
- if command -v cygpath > /dev/null 2>&1; then
7
- basedir=`cygpath -w "$basedir"`
8
- fi
9
- ;;
10
- esac
11
-
12
- if [ -z "$NODE_PATH" ]; then
13
- export NODE_PATH="/mnt/vss/_work/1/s/FluidFramework/node_modules/.pnpm/jiti@2.6.1/node_modules/jiti/node_modules:/mnt/vss/_work/1/s/FluidFramework/node_modules/.pnpm/jiti@2.6.1/node_modules:/mnt/vss/_work/1/s/FluidFramework/node_modules/.pnpm/node_modules"
14
- else
15
- export NODE_PATH="/mnt/vss/_work/1/s/FluidFramework/node_modules/.pnpm/jiti@2.6.1/node_modules/jiti/node_modules:/mnt/vss/_work/1/s/FluidFramework/node_modules/.pnpm/jiti@2.6.1/node_modules:/mnt/vss/_work/1/s/FluidFramework/node_modules/.pnpm/node_modules:$NODE_PATH"
16
- fi
17
- if [ -x "$basedir/node" ]; then
18
- exec "$basedir/node" "$basedir/../jiti/lib/jiti-cli.mjs" "$@"
19
- else
20
- exec node "$basedir/../jiti/lib/jiti-cli.mjs" "$@"
21
- fi
22
- # cmd-shim-target=/mnt/vss/_work/1/s/FluidFramework/experimental/PropertyDDS/packages/property-common/platform-dependent/node_modules/jiti/lib/jiti-cli.mjs
@@ -1,29 +0,0 @@
1
- {
2
- "name": "@fluid-internal/platform-dependent",
3
- "version": "2.103.0",
4
- "private": true,
5
- "description": "Helper package that separates code for browser and server.",
6
- "homepage": "https://fluidframework.com",
7
- "repository": {
8
- "type": "git",
9
- "url": "https://github.com/microsoft/FluidFramework.git",
10
- "directory": "experimental/PropertyDDS/packages/property-common/platform-dependent"
11
- },
12
- "license": "MIT",
13
- "author": "Microsoft and contributors",
14
- "main": "server.js",
15
- "browser": "browser.js",
16
- "scripts": {
17
- "check:biome": "biome check .",
18
- "check:format": "npm run check:biome",
19
- "format": "npm run format:biome",
20
- "format:biome": "biome check . --write"
21
- },
22
- "devDependencies": {
23
- "@biomejs/biome": "~2.4.5",
24
- "jiti": "^2.6.1"
25
- },
26
- "typeValidation": {
27
- "disabled": true
28
- }
29
- }
@@ -1,21 +0,0 @@
1
- /*!
2
- * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
- * Licensed under the MIT License.
4
- */
5
-
6
- const crypto = require("crypto");
7
- /**
8
- * Create an array with random uint32 values
9
- *
10
- * @param {number} length - size of a new array
11
- * @return {number[]} - an array with random values
12
- */
13
- function generateRandomUInt32Array(length) {
14
- const buffer = Buffer.alloc(length * 4);
15
- crypto.randomFillSync(buffer);
16
- return Array.from({ length }, (_, i) => buffer.readUIntBE(i * 4, 4));
17
- }
18
-
19
- module.exports = {
20
- generateRandomUInt32Array,
21
- };