@esportsplus/random 0.0.1 → 0.0.3

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.
@@ -0,0 +1,2 @@
1
+ declare const _default: () => boolean;
2
+ export default _default;
@@ -0,0 +1,4 @@
1
+ import rng from './rng';
2
+ export default () => {
3
+ return rng() < 0.5;
4
+ };
@@ -0,0 +1,2 @@
1
+ import rng from './rng';
2
+ export default rng;
package/build/float.js ADDED
@@ -0,0 +1,2 @@
1
+ import rng from './rng';
2
+ export default rng;
@@ -0,0 +1,2 @@
1
+ declare const _default: (n: number) => number[];
2
+ export default _default;
@@ -0,0 +1,9 @@
1
+ import rng from './rng';
2
+ import shuffle from './shuffle';
3
+ export default (n) => {
4
+ let values = [];
5
+ for (let i = 0; i < n; i++) {
6
+ values.push(rng());
7
+ }
8
+ return shuffle(values);
9
+ };
package/build/index.d.ts CHANGED
@@ -1,8 +1,22 @@
1
- declare const float: () => number;
2
- declare const floats: (n: number) => number[];
3
- declare const _default: {
4
- float: () => number;
5
- floats: (n: number) => number[];
6
- };
7
- export default _default;
8
- export { float, floats };
1
+ import coinflip from './coinflip';
2
+ import float from './float';
3
+ import floats from './floats';
4
+ import integer from './integer';
5
+ import integers from './integers';
6
+ import item from './item';
7
+ import range from './range';
8
+ import roll from './roll';
9
+ import shuffle from './shuffle';
10
+ declare const _default: {
11
+ coinflip: () => boolean;
12
+ float: () => number;
13
+ floats: (n: number) => number[];
14
+ integer: () => number;
15
+ integers: (n: number) => any[];
16
+ item: <T>(items: T[], weights?: number[] | undefined) => T;
17
+ range: (min: number, max: number, integer?: boolean) => number;
18
+ roll: (percentage: number) => boolean;
19
+ shuffle: (values: any[]) => any[];
20
+ };
21
+ export default _default;
22
+ export { coinflip, float, floats, integer, integers, item, range, roll, shuffle };
package/build/index.js CHANGED
@@ -1,24 +1,11 @@
1
- let max = Math.pow(2, 32);
2
- function browser() {
3
- return window.crypto.getRandomValues(new Uint32Array(1))[0] / max;
4
- }
5
- function node() {
6
- return require('crypto').randomBytes(4).readUInt32BE(0) / max;
7
- }
8
- const float = () => {
9
- if (globalThis?.crypto) {
10
- return browser();
11
- }
12
- return node();
13
- };
14
- const floats = (n) => {
15
- let i, values = [];
16
- while (--n > -1) {
17
- i = Math.floor(Math.random() * (n + 1));
18
- values[i] = values[n];
19
- values[n] = float();
20
- }
21
- return values;
22
- };
23
- export default { float, floats };
24
- export { float, floats };
1
+ import coinflip from './coinflip';
2
+ import float from './float';
3
+ import floats from './floats';
4
+ import integer from './integer';
5
+ import integers from './integers';
6
+ import item from './item';
7
+ import range from './range';
8
+ import roll from './roll';
9
+ import shuffle from './shuffle';
10
+ export default { coinflip, float, floats, integer, integers, item, range, roll, shuffle };
11
+ export { coinflip, float, floats, integer, integers, item, range, roll, shuffle };
@@ -0,0 +1,2 @@
1
+ declare const _default: () => number;
2
+ export default _default;
@@ -0,0 +1,4 @@
1
+ import rng from './rng';
2
+ export default () => {
3
+ return Math.floor(rng());
4
+ };
@@ -0,0 +1,2 @@
1
+ declare const _default: (n: number) => any[];
2
+ export default _default;
@@ -0,0 +1,9 @@
1
+ import rng from './rng';
2
+ import shuffle from './shuffle';
3
+ export default (n) => {
4
+ let values = [];
5
+ for (let i = 0; i < n; i++) {
6
+ values.push(Math.floor(rng()));
7
+ }
8
+ return shuffle(values);
9
+ };
@@ -0,0 +1,2 @@
1
+ declare const _default: <T>(items: T[], weights?: number[]) => T;
2
+ export default _default;
package/build/item.js ADDED
@@ -0,0 +1,25 @@
1
+ import rng from './rng';
2
+ export default (items, weights) => {
3
+ let random = rng();
4
+ if (weights === undefined) {
5
+ return items[Math.floor(random * items.length)];
6
+ }
7
+ if (items.length !== weights.length) {
8
+ throw new Error('Random: each option requires a chance number');
9
+ }
10
+ let sum = 0;
11
+ for (let i = 0, n = weights.length; i < n; i++) {
12
+ sum += weights[i];
13
+ }
14
+ if (sum < .9) {
15
+ throw new Error('Random: chance numbers need to exceed a total value of .9');
16
+ }
17
+ let total = 0;
18
+ for (let i = 0, n = items.length; i < n; i++) {
19
+ total += weights[i];
20
+ if (random <= total) {
21
+ return items[i];
22
+ }
23
+ }
24
+ throw new Error('Random: weighted option pick failed');
25
+ };
@@ -0,0 +1,2 @@
1
+ declare const _default: (min: number, max: number, integer?: boolean) => number;
2
+ export default _default;
package/build/range.js ADDED
@@ -0,0 +1,9 @@
1
+ import rng from './rng';
2
+ export default (min, max, integer = false) => {
3
+ if (!integer) {
4
+ return rng() * (max - min) + min;
5
+ }
6
+ min = Math.ceil(min);
7
+ max = Math.floor(max) + 1;
8
+ return Math.floor(rng() * (max - min) + min);
9
+ };
package/build/rng.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ declare let rng: () => number;
2
+ export default rng;
package/build/rng.js ADDED
@@ -0,0 +1,11 @@
1
+ let max = Math.pow(2, 32), rng;
2
+ if (typeof window !== 'undefined' && typeof window.document !== 'undefined') {
3
+ rng = () => window.crypto.getRandomValues(new Uint32Array(1))[0] / max;
4
+ }
5
+ else if (typeof process !== 'undefined' && process.versions != null && process.versions.node != null) {
6
+ rng = () => require('crypto').randomBytes(4).readUInt32BE(0) / max;
7
+ }
8
+ else {
9
+ throw new Error('Random: no suitable random number generator found');
10
+ }
11
+ export default rng;
@@ -0,0 +1,2 @@
1
+ declare const _default: (percentage: number) => boolean;
2
+ export default _default;
package/build/roll.js ADDED
@@ -0,0 +1,4 @@
1
+ import rng from './rng';
2
+ export default (percentage) => {
3
+ return rng() <= percentage;
4
+ };
@@ -0,0 +1,2 @@
1
+ declare const _default: (values: any[]) => any[];
2
+ export default _default;
@@ -0,0 +1,11 @@
1
+ import rng from './rng';
2
+ export default (values) => {
3
+ let n = values.length, random, value;
4
+ while (--n > 0) {
5
+ random = Math.floor(rng() * (n + 1));
6
+ value = values[random];
7
+ values[random] = values[n];
8
+ values[n] = value;
9
+ }
10
+ return values;
11
+ };
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "author": "ICJR",
3
3
  "description": "Random",
4
4
  "devDependencies": {
5
- "@esportsplus/rspack": "^0.0.1"
5
+ "@esportsplus/rspack": "^0.0.10"
6
6
  },
7
7
  "main": "build/index.js",
8
8
  "name": "@esportsplus/random",
@@ -14,5 +14,5 @@
14
14
  "prepublishOnly": "npm run build"
15
15
  },
16
16
  "types": "build/index.d.ts",
17
- "version": "0.0.1"
17
+ "version": "0.0.3"
18
18
  }
@@ -0,0 +1,6 @@
1
+ import rng from './rng';
2
+
3
+
4
+ export default () => {
5
+ return rng() < 0.5;
6
+ };
package/src/float.ts ADDED
@@ -0,0 +1,4 @@
1
+ import rng from './rng';
2
+
3
+
4
+ export default rng;
package/src/floats.ts ADDED
@@ -0,0 +1,13 @@
1
+ import rng from './rng';
2
+ import shuffle from './shuffle';
3
+
4
+
5
+ export default (n: number): number[] => {
6
+ let values: number[] = [];
7
+
8
+ for (let i = 0; i < n; i++) {
9
+ values.push(rng());
10
+ }
11
+
12
+ return shuffle(values);
13
+ };
package/src/index.ts CHANGED
@@ -1,39 +1,13 @@
1
- let max = Math.pow(2, 32);
2
-
3
-
4
- function browser() {
5
- return window.crypto.getRandomValues(new Uint32Array(1))[0] / max;
6
- }
7
-
8
- function node() {
9
- return require('crypto').randomBytes(4).readUInt32BE(0) / max;
10
- }
11
-
12
-
13
- const float = (): number => {
14
- if (globalThis?.crypto) {
15
- return browser();
16
- }
17
-
18
- return node();
19
- };
20
-
21
- // Fisher-Yates shuffle
22
- // - https://wikipedia.org/wiki/Fisher-Yates_shuffle
23
- const floats = (n: number): number[] => {
24
- let i: number,
25
- values: number[] = [];
26
-
27
- while(--n > -1) {
28
- i = Math.floor(Math.random() * (n + 1));
29
-
30
- values[i] = values[n];
31
- values[n] = float();
32
- }
33
-
34
- return values;
35
- };
36
-
37
-
38
- export default { float, floats };
39
- export { float, floats };
1
+ import coinflip from './coinflip';
2
+ import float from './float';
3
+ import floats from './floats';
4
+ import integer from './integer';
5
+ import integers from './integers';
6
+ import item from './item';
7
+ import range from './range';
8
+ import roll from './roll';
9
+ import shuffle from './shuffle';
10
+
11
+
12
+ export default { coinflip, float, floats, integer, integers, item, range, roll, shuffle };
13
+ export { coinflip, float, floats, integer, integers, item, range, roll, shuffle };
package/src/integer.ts ADDED
@@ -0,0 +1,6 @@
1
+ import rng from './rng';
2
+
3
+
4
+ export default () => {
5
+ return Math.floor(rng());
6
+ };
@@ -0,0 +1,13 @@
1
+ import rng from './rng';
2
+ import shuffle from './shuffle';
3
+
4
+
5
+ export default (n: number) => {
6
+ let values: number[] = [];
7
+
8
+ for (let i = 0; i < n; i++) {
9
+ values.push( Math.floor(rng()) );
10
+ }
11
+
12
+ return shuffle(values);
13
+ };
package/src/item.ts ADDED
@@ -0,0 +1,36 @@
1
+ import rng from './rng';
2
+
3
+
4
+ export default <T>(items: T[], weights?: number[]): T => {
5
+ let random = rng();
6
+
7
+ if (weights === undefined) {
8
+ return items[ Math.floor(random * items.length) ];
9
+ }
10
+
11
+ if (items.length !== weights.length) {
12
+ throw new Error('Random: each option requires a chance number');
13
+ }
14
+
15
+ let sum = 0;
16
+
17
+ for (let i = 0, n = weights.length; i < n; i++) {
18
+ sum += weights[i];
19
+ }
20
+
21
+ if (sum < .9) {
22
+ throw new Error('Random: chance numbers need to exceed a total value of .9');
23
+ }
24
+
25
+ let total = 0;
26
+
27
+ for (let i = 0, n = items.length; i < n; i++) {
28
+ total += weights[i];
29
+
30
+ if (random <= total) {
31
+ return items[i];
32
+ }
33
+ }
34
+
35
+ throw new Error('Random: weighted option pick failed');
36
+ };
package/src/range.ts ADDED
@@ -0,0 +1,13 @@
1
+ import rng from './rng';
2
+
3
+
4
+ export default (min: number, max: number, integer = false) => {
5
+ if (!integer) {
6
+ return rng() * (max - min) + min;
7
+ }
8
+
9
+ min = Math.ceil(min);
10
+ max = Math.floor(max) + 1;
11
+
12
+ return Math.floor(rng() * (max - min) + min);
13
+ };
package/src/rng.ts ADDED
@@ -0,0 +1,16 @@
1
+ let max = Math.pow(2, 32),
2
+ rng: () => number;
3
+
4
+
5
+ if (typeof window !== 'undefined' && typeof window.document !== 'undefined') {
6
+ rng = () => window.crypto.getRandomValues(new Uint32Array(1))[0] / max;
7
+ }
8
+ else if (typeof process !== 'undefined' && process.versions != null && process.versions.node != null) {
9
+ rng = () => require('crypto').randomBytes(4).readUInt32BE(0) / max;
10
+ }
11
+ else {
12
+ throw new Error('Random: no suitable random number generator found');
13
+ }
14
+
15
+
16
+ export default rng;
package/src/roll.ts ADDED
@@ -0,0 +1,6 @@
1
+ import rng from './rng';
2
+
3
+
4
+ export default (percentage: number) => {
5
+ return rng() <= percentage;
6
+ };
package/src/shuffle.ts ADDED
@@ -0,0 +1,20 @@
1
+ import rng from './rng';
2
+
3
+
4
+ // Fisher-Yates shuffle
5
+ // - https://wikipedia.org/wiki/Fisher-Yates_shuffle
6
+ export default (values: any[]) => {
7
+ let n = values.length,
8
+ random: number,
9
+ value;
10
+
11
+ while (--n > 0) {
12
+ random = Math.floor(rng() * (n + 1));
13
+ value = values[random];
14
+
15
+ values[random] = values[n];
16
+ values[n] = value;
17
+ }
18
+
19
+ return values;
20
+ };
package/readme.md DELETED
@@ -1,2 +0,0 @@
1
- https://github.com/maverick-js/signals
2
- https://github.com/modderme123/reactively