sliftutils 0.27.0 → 0.30.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/index.d.ts CHANGED
@@ -37,6 +37,18 @@ declare module "sliftutils/misc/matchFilter" {
37
37
 
38
38
  }
39
39
 
40
+ declare module "sliftutils/misc/promise" {
41
+ export declare function promiseToWarning<T>(promise: Promise<T>): Promise<T | undefined>;
42
+
43
+ }
44
+
45
+ declare module "sliftutils/misc/random" {
46
+ export declare function getSeededRandom(seed: number): () => number;
47
+ export declare function shuffle<T>(array: T[], seed: number): T[];
48
+ export declare function secureRandom(): number;
49
+
50
+ }
51
+
40
52
  declare module "sliftutils/misc/types" {
41
53
  export declare function isDefined<T>(value: T | undefined | null): value is T;
42
54
 
@@ -0,0 +1 @@
1
+ export declare function promiseToWarning<T>(promise: Promise<T>): Promise<T | undefined>;
@@ -0,0 +1,6 @@
1
+ export function promiseToWarning<T>(promise: Promise<T>): Promise<T | undefined> {
2
+ return promise.catch(error => {
3
+ console.warn("Promise rejected", error);
4
+ return undefined;
5
+ });
6
+ }
@@ -0,0 +1,3 @@
1
+ export declare function getSeededRandom(seed: number): () => number;
2
+ export declare function shuffle<T>(array: T[], seed: number): T[];
3
+ export declare function secureRandom(): number;
package/misc/random.ts ADDED
@@ -0,0 +1,45 @@
1
+ import { isNode } from "socket-function/src/misc";
2
+ import crypto from "crypto";
3
+
4
+ export function getSeededRandom(seed: number): () => number {
5
+ // Multiply seed by a large prime
6
+ seed = (seed + 0x1235234894) * 0x1fffffff % 0x7fffffff;
7
+ let rand = sfc32(seed, seed, seed, seed);
8
+ // Run a few time, to fully seed it
9
+ for (let i = 0; i < 10; i++) {
10
+ rand();
11
+ }
12
+ return rand;
13
+ function sfc32(a: number, b: number, c: number, d: number) {
14
+ return function () {
15
+ a >>>= 0; b >>>= 0; c >>>= 0; d >>>= 0;
16
+ var t = (a + b) | 0;
17
+ a = b ^ b >>> 9;
18
+ b = c + (c << 3) | 0;
19
+ c = (c << 21 | c >>> 11);
20
+ d = d + 1 | 0;
21
+ t = t + d | 0;
22
+ c = c + t | 0;
23
+ return (t >>> 0) / 4294967296;
24
+ };
25
+ }
26
+ }
27
+
28
+ export function shuffle<T>(array: T[], seed: number) {
29
+ let rand = getSeededRandom(seed);
30
+ let indexes = Array(array.length).fill(0).map((x, i) => i);
31
+ let shuffleValue = indexes.map(() => rand());
32
+ indexes.sort((a, b) => shuffleValue[a] - shuffleValue[b]);
33
+ return indexes.map(i => array[i]);
34
+ }
35
+
36
+ let randomData = new Uint8Array(8);
37
+ let randomDataF64 = new Float64Array(randomData.buffer);
38
+ export function secureRandom(): number {
39
+ if (!isNode()) {
40
+ window.crypto.getRandomValues(randomData);
41
+ } else {
42
+ crypto.getRandomValues(randomData);
43
+ }
44
+ return randomDataF64[0];
45
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sliftutils",
3
- "version": "0.27.0",
3
+ "version": "0.30.0",
4
4
  "main": "index.js",
5
5
  "license": "MIT",
6
6
  "files": [