-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
pioner921227
committed
Jan 17, 2025
1 parent
2838bb0
commit eac42d2
Showing
4 changed files
with
75 additions
and
33 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,22 +1,64 @@ | ||
import { NativeModules, Platform } from 'react-native'; | ||
|
||
const LINKING_ERROR = | ||
`The package 'react-native-xxhash' doesn't seem to be linked. Make sure: \n\n` + | ||
Platform.select({ ios: "- You have run 'pod install'\n", default: '' }) + | ||
'- You rebuilt the app after installing the package\n' + | ||
'- You are not using Expo Go\n'; | ||
|
||
const Xxhash = NativeModules.Xxhash | ||
? NativeModules.Xxhash | ||
: new Proxy( | ||
{}, | ||
{ | ||
get() { | ||
throw new Error(LINKING_ERROR); | ||
}, | ||
} | ||
); | ||
|
||
export function multiply(a: number, b: number): Promise<number> { | ||
return Xxhash.multiply(a, b); | ||
|
||
declare global { | ||
var __xxhash128: (input: string) => string; | ||
var __xxhash64: (input: string) => string; | ||
} | ||
|
||
/** | ||
* Hashes the input string using the xxhash128 algorithm. | ||
* This function provides a fast and deterministic 128-bit hash for a given string input. | ||
* | ||
* @param {string} input - The string to hash. | ||
* @returns {string} The hashed string as a hexadecimal representation of the 128-bit hash. | ||
* @throws {Error} If the input is not provided. | ||
* @throws {Error} If the input is not of type string. | ||
* | ||
* @example | ||
* const result = hash128("hello world"); | ||
* console.log(result); // Example output: "3a2b9e6a2b5e7e5a9e6a2b5e7e5a2a2" | ||
* | ||
* @description | ||
* This function uses the xxhash128 algorithm, which provides a larger hash size (128-bit) compared to xxhash64. | ||
* It is ideal for scenarios where a reduced collision risk is critical, such as in distributed systems or when hashing larger datasets. | ||
*/ | ||
export const hash128 = (input: string): string => { | ||
if(!input){ | ||
throw new Error('Input is required'); | ||
} | ||
|
||
if(typeof input !== 'string'){ | ||
throw new Error('Input must be a string'); | ||
} | ||
|
||
return globalThis.__xxhash128(input); | ||
} | ||
|
||
/** | ||
* Hashes the input string using the xxhash64 algorithm. | ||
* This function provides a fast and deterministic 64-bit hash for a given string input. | ||
* | ||
* @param {string} input - The string to hash. | ||
* @returns {string} The hashed string as a hexadecimal representation of the 64-bit hash. | ||
* @throws {Error} If the input is not provided. | ||
* @throws {Error} If the input is not of type string. | ||
* | ||
* @example | ||
* const result = hash64("hello world"); | ||
* console.log(result); // Example output: "9e6a2b5e7e5a2a2e" | ||
* | ||
* @description | ||
* This function uses the xxhash64 algorithm, known for its high performance and low collision rate. | ||
* It is ideal for hashing small to medium-sized strings. | ||
*/ | ||
|
||
export const hash64 = (input: string): string => { | ||
if(!input){ | ||
throw new Error('Input is required'); | ||
} | ||
|
||
if(typeof input !== 'string'){ | ||
throw new Error('Input must be a string'); | ||
} | ||
|
||
return globalThis.__xxhash64(input); | ||
} |