@tstdl/base 0.83.16 → 0.83.18
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/package.json +6 -6
- package/random/index.d.ts +2 -1
- package/random/index.js +2 -1
- package/random/{number → number-generator}/index.d.ts +1 -1
- package/random/{number → number-generator}/index.js +5 -5
- package/random/{number → number-generator}/mulberry32.d.ts +3 -3
- package/random/{number → number-generator}/mulberry32.js +4 -3
- package/random/number-generator/random-number-generator-function.d.ts +5 -0
- package/random/number-generator/random-number-generator-function.js +24 -0
- package/random/number-generator/random-number-generator.d.ts +15 -0
- package/random/{number/seeded.js → number-generator/random-number-generator.js} +6 -6
- package/random/number-generator/seeded-random-number-generator.d.ts +12 -0
- package/random/number-generator/seeded-random-number-generator.js +29 -0
- package/random/{number → number-generator}/sfc32.d.ts +7 -3
- package/random/{number → number-generator}/sfc32.js +4 -3
- package/random/number-generator/utils.d.ts +1 -0
- package/random/number-generator/utils.js +26 -0
- package/random/series.d.ts +52 -0
- package/random/series.js +45 -0
- package/schema/schemas/assign.d.ts +1 -1
- package/utils/math.d.ts +3 -6
- package/utils/math.js +3 -3
- package/utils/merge.d.ts +1 -2
- package/random/number/seeded.d.ts +0 -24
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tstdl/base",
|
|
3
|
-
"version": "0.83.
|
|
3
|
+
"version": "0.83.18",
|
|
4
4
|
"author": "Patrick Hein",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -21,12 +21,12 @@
|
|
|
21
21
|
"luxon": "^3.3",
|
|
22
22
|
"reflect-metadata": "^0.1",
|
|
23
23
|
"rxjs": "^7.8",
|
|
24
|
-
"type-fest": "^3.
|
|
24
|
+
"type-fest": "^3.8"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
27
|
"@types/chroma-js": "2.4",
|
|
28
28
|
"@types/koa__router": "12.0",
|
|
29
|
-
"@types/luxon": "3.
|
|
29
|
+
"@types/luxon": "3.3",
|
|
30
30
|
"@types/minio": "7.0",
|
|
31
31
|
"@types/mjml": "4.7",
|
|
32
32
|
"@types/node": "18",
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"@typescript-eslint/parser": "5.57",
|
|
36
36
|
"concurrently": "8.0",
|
|
37
37
|
"esbuild": "0.17",
|
|
38
|
-
"eslint": "8.
|
|
38
|
+
"eslint": "8.38",
|
|
39
39
|
"eslint-import-resolver-typescript": "3.5",
|
|
40
40
|
"eslint-plugin-import": "2.27",
|
|
41
41
|
"tsc-alias": "1.8",
|
|
@@ -55,8 +55,8 @@
|
|
|
55
55
|
"knex": "^2.4",
|
|
56
56
|
"koa": "^2.14",
|
|
57
57
|
"minio": "^7.0",
|
|
58
|
-
"mjml": "^4.
|
|
59
|
-
"mongodb": "5.
|
|
58
|
+
"mjml": "^4.14",
|
|
59
|
+
"mongodb": "5.2",
|
|
60
60
|
"nodemailer": "^6.9",
|
|
61
61
|
"preact": "^10.13",
|
|
62
62
|
"preact-render-to-string": "^5.2",
|
package/random/index.d.ts
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
export * from './number/index.js';
|
|
1
|
+
export * from './number-generator/index.js';
|
|
2
|
+
export * from './series.js';
|
package/random/index.js
CHANGED
|
@@ -15,4 +15,5 @@ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "defau
|
|
|
15
15
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
16
16
|
var random_exports = {};
|
|
17
17
|
module.exports = __toCommonJS(random_exports);
|
|
18
|
-
__reExport(random_exports, require("./number/index.js"), module.exports);
|
|
18
|
+
__reExport(random_exports, require("./number-generator/index.js"), module.exports);
|
|
19
|
+
__reExport(random_exports, require("./series.js"), module.exports);
|
|
@@ -13,8 +13,8 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
13
13
|
};
|
|
14
14
|
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
|
15
15
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
16
|
-
var
|
|
17
|
-
module.exports = __toCommonJS(
|
|
18
|
-
__reExport(
|
|
19
|
-
__reExport(
|
|
20
|
-
__reExport(
|
|
16
|
+
var number_generator_exports = {};
|
|
17
|
+
module.exports = __toCommonJS(number_generator_exports);
|
|
18
|
+
__reExport(number_generator_exports, require("./mulberry32.js"), module.exports);
|
|
19
|
+
__reExport(number_generator_exports, require("./seeded-random-number-generator.js"), module.exports);
|
|
20
|
+
__reExport(number_generator_exports, require("./sfc32.js"), module.exports);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { SeededRandomNumberGenerator } from './seeded.js';
|
|
1
|
+
import { SeededRandomNumberGenerator } from './seeded-random-number-generator.js';
|
|
2
2
|
export declare class Mulberry32 extends SeededRandomNumberGenerator {
|
|
3
3
|
private state;
|
|
4
4
|
constructor(seed: number);
|
|
@@ -10,7 +10,7 @@ export declare class Mulberry32 extends SeededRandomNumberGenerator {
|
|
|
10
10
|
/**
|
|
11
11
|
* mulberry32
|
|
12
12
|
*
|
|
13
|
-
*
|
|
13
|
+
* Very fast 32 bit random number generator with 32 bit state
|
|
14
14
|
* @param seed 32 bit integer seed
|
|
15
15
|
*/
|
|
16
|
-
export declare function mulberry32(seed
|
|
16
|
+
export declare function mulberry32(seed?: number): SeededRandomNumberGenerator;
|
|
@@ -22,10 +22,11 @@ __export(mulberry32_exports, {
|
|
|
22
22
|
mulberry32: () => mulberry32
|
|
23
23
|
});
|
|
24
24
|
module.exports = __toCommonJS(mulberry32_exports);
|
|
25
|
-
var
|
|
25
|
+
var import_seeded_random_number_generator = require("./seeded-random-number-generator.js");
|
|
26
|
+
var import_utils = require("./utils.js");
|
|
26
27
|
const maxValue = 2 ** 32 - 1;
|
|
27
28
|
const nextDivisor = 2 ** 32;
|
|
28
|
-
class Mulberry32 extends
|
|
29
|
+
class Mulberry32 extends import_seeded_random_number_generator.SeededRandomNumberGenerator {
|
|
29
30
|
state;
|
|
30
31
|
constructor(seed) {
|
|
31
32
|
super(maxValue);
|
|
@@ -48,6 +49,6 @@ class Mulberry32 extends import_seeded.SeededRandomNumberGenerator {
|
|
|
48
49
|
return new Mulberry32(this.state);
|
|
49
50
|
}
|
|
50
51
|
}
|
|
51
|
-
function mulberry32(seed) {
|
|
52
|
+
function mulberry32(seed = (0, import_utils.random32BitSeed)()) {
|
|
52
53
|
return new Mulberry32(seed);
|
|
53
54
|
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var random_number_generator_function_exports = {};
|
|
20
|
+
__export(random_number_generator_function_exports, {
|
|
21
|
+
defaultRandomNumberGeneratorFn: () => defaultRandomNumberGeneratorFn
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(random_number_generator_function_exports);
|
|
24
|
+
const defaultRandomNumberGeneratorFn = Math.random;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare abstract class RandomNumberGenerator {
|
|
2
|
+
/**
|
|
3
|
+
* Maximum value the generator will generate for {@link nextInt}
|
|
4
|
+
*/
|
|
5
|
+
readonly maxValue: number;
|
|
6
|
+
constructor(maxValue: number);
|
|
7
|
+
/**
|
|
8
|
+
* Generate a random integer between 0 and {@link maxValue}
|
|
9
|
+
*/
|
|
10
|
+
abstract nextInt(): number;
|
|
11
|
+
/**
|
|
12
|
+
* Generate a random float in interval [0, 1)
|
|
13
|
+
*/
|
|
14
|
+
abstract next(): number;
|
|
15
|
+
}
|
|
@@ -16,14 +16,14 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
16
16
|
return to;
|
|
17
17
|
};
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
var
|
|
20
|
-
__export(
|
|
21
|
-
|
|
19
|
+
var random_number_generator_exports = {};
|
|
20
|
+
__export(random_number_generator_exports, {
|
|
21
|
+
RandomNumberGenerator: () => RandomNumberGenerator
|
|
22
22
|
});
|
|
23
|
-
module.exports = __toCommonJS(
|
|
24
|
-
class
|
|
23
|
+
module.exports = __toCommonJS(random_number_generator_exports);
|
|
24
|
+
class RandomNumberGenerator {
|
|
25
25
|
/**
|
|
26
|
-
*
|
|
26
|
+
* Maximum value the generator will generate for {@link nextInt}
|
|
27
27
|
*/
|
|
28
28
|
maxValue;
|
|
29
29
|
constructor(maxValue) {
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { RandomNumberGenerator } from './random-number-generator.js';
|
|
2
|
+
export declare abstract class SeededRandomNumberGenerator extends RandomNumberGenerator {
|
|
3
|
+
constructor(maxValue: number);
|
|
4
|
+
/**
|
|
5
|
+
* Fork the rng based on the current state
|
|
6
|
+
*/
|
|
7
|
+
abstract fork(): SeededRandomNumberGenerator;
|
|
8
|
+
/**
|
|
9
|
+
* Clone the rng with the current state
|
|
10
|
+
*/
|
|
11
|
+
abstract clone(): SeededRandomNumberGenerator;
|
|
12
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var seeded_random_number_generator_exports = {};
|
|
20
|
+
__export(seeded_random_number_generator_exports, {
|
|
21
|
+
SeededRandomNumberGenerator: () => SeededRandomNumberGenerator
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(seeded_random_number_generator_exports);
|
|
24
|
+
var import_random_number_generator = require("./random-number-generator.js");
|
|
25
|
+
class SeededRandomNumberGenerator extends import_random_number_generator.RandomNumberGenerator {
|
|
26
|
+
constructor(maxValue) {
|
|
27
|
+
super(maxValue);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { SeededRandomNumberGenerator } from './seeded.js';
|
|
1
|
+
import { SeededRandomNumberGenerator } from './seeded-random-number-generator.js';
|
|
2
2
|
export declare class Sfc32 extends SeededRandomNumberGenerator {
|
|
3
3
|
private state1;
|
|
4
4
|
private state2;
|
|
@@ -13,7 +13,11 @@ export declare class Sfc32 extends SeededRandomNumberGenerator {
|
|
|
13
13
|
/**
|
|
14
14
|
* sfc32 - Small Fast Counter
|
|
15
15
|
*
|
|
16
|
-
*
|
|
17
|
-
* @param
|
|
16
|
+
* Fast 32 bit random number generator with 128 bit state
|
|
17
|
+
* @param seed1 32 bit integer seed 1
|
|
18
|
+
* @param seed2 32 bit integer seed 2
|
|
19
|
+
* @param seed3 32 bit integer seed 3
|
|
20
|
+
* @param seed4 32 bit integer seed 4
|
|
18
21
|
*/
|
|
22
|
+
export declare function sfc32(): SeededRandomNumberGenerator;
|
|
19
23
|
export declare function sfc32(seed1: number, seed2: number, seed3: number, seed4: number): SeededRandomNumberGenerator;
|
|
@@ -22,10 +22,11 @@ __export(sfc32_exports, {
|
|
|
22
22
|
sfc32: () => sfc32
|
|
23
23
|
});
|
|
24
24
|
module.exports = __toCommonJS(sfc32_exports);
|
|
25
|
-
var
|
|
25
|
+
var import_seeded_random_number_generator = require("./seeded-random-number-generator.js");
|
|
26
|
+
var import_utils = require("./utils.js");
|
|
26
27
|
const maxValue = 2 ** 32 - 1;
|
|
27
28
|
const nextDivisor = 2 ** 32;
|
|
28
|
-
class Sfc32 extends
|
|
29
|
+
class Sfc32 extends import_seeded_random_number_generator.SeededRandomNumberGenerator {
|
|
29
30
|
state1;
|
|
30
31
|
state2;
|
|
31
32
|
state3;
|
|
@@ -61,6 +62,6 @@ class Sfc32 extends import_seeded.SeededRandomNumberGenerator {
|
|
|
61
62
|
return new Sfc32(this.state1, this.state2, this.state3, this.state4);
|
|
62
63
|
}
|
|
63
64
|
}
|
|
64
|
-
function sfc32(seed1, seed2, seed3, seed4) {
|
|
65
|
+
function sfc32(seed1 = (0, import_utils.random32BitSeed)(), seed2 = (0, import_utils.random32BitSeed)(), seed3 = (0, import_utils.random32BitSeed)(), seed4 = (0, import_utils.random32BitSeed)()) {
|
|
65
66
|
return new Sfc32(seed1, seed2, seed3, seed4);
|
|
66
67
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function random32BitSeed(): number;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var utils_exports = {};
|
|
20
|
+
__export(utils_exports, {
|
|
21
|
+
random32BitSeed: () => random32BitSeed
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(utils_exports);
|
|
24
|
+
function random32BitSeed() {
|
|
25
|
+
return Math.floor(Math.random() * 2 ** 32);
|
|
26
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { RandomNumberGeneratorFn } from './number-generator/random-number-generator-function.js';
|
|
2
|
+
export type RandomSeriesOptions = {
|
|
3
|
+
/**
|
|
4
|
+
* Initial value of series. If [number, number] is provided, a random value in that range is generated. If not provided but {@link RandomSeriesOptions.bounds} are, their values are used.
|
|
5
|
+
*/
|
|
6
|
+
initial?: number | [min: number, max: number];
|
|
7
|
+
/**
|
|
8
|
+
* Bounds for generated values. If provided, a regression toward the mean is used.
|
|
9
|
+
* If {@link RandomSeriesOptions.volatility} is to high, bounds may be exceeded.
|
|
10
|
+
*/
|
|
11
|
+
bounds?: [lower: number, upper: number];
|
|
12
|
+
/**
|
|
13
|
+
* Exponent to use for regression toward the mean (if bounds are provided). Practical values are in the interval [0.5, 15], depending on {@link RandomSeriesOptions.volatility}.
|
|
14
|
+
* High values have (nearly) no regression inside the most part of the {@link RandomSeriesOptions.bounds}, with exponentially higher regression towards the bounds.
|
|
15
|
+
* Value of 1 has a linear "strength" of regression the further it is from the mean of the bounds.
|
|
16
|
+
* Values < 1 already have a strong regression around the mean with only logarithmically stronger regression toward the edges. This results in the value staying close at the mean.
|
|
17
|
+
*/
|
|
18
|
+
regressionExponent?: number;
|
|
19
|
+
/**
|
|
20
|
+
* Relative volatility of the series (ratio of value). Practical values are in the interval (0, 0.25), depending on {@link RandomSeriesOptions.regressionExponent}.
|
|
21
|
+
* You can also provide an Iterator of numbers to represent volatile/dynamic volatility. Passes current value as parameter for {@link Iterator.next}.
|
|
22
|
+
*/
|
|
23
|
+
volatility?: number | Iterator<number, any, any>;
|
|
24
|
+
/**
|
|
25
|
+
* Whether volatility is relative to current value or initial value.
|
|
26
|
+
*/
|
|
27
|
+
relativeTo?: 'current' | 'initial';
|
|
28
|
+
/**
|
|
29
|
+
* Random number generator to use (useful if seeded generator is used to generate static series for each run).
|
|
30
|
+
*/
|
|
31
|
+
generator?: RandomNumberGeneratorFn;
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Generator to create random series data like stock charts or measurements over time.
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
*
|
|
38
|
+
* // very simple: series starting at 1 without bounds
|
|
39
|
+
* randomSeries();
|
|
40
|
+
*
|
|
41
|
+
* // bounded: series between 100 and 200
|
|
42
|
+
* randomSeries({ bounds: [100, 200] });
|
|
43
|
+
*
|
|
44
|
+
* // complex: series between 5 and 50 with dynamic volatility like a stock chart
|
|
45
|
+
* randomSeries({
|
|
46
|
+
* bounds: [5, 50],
|
|
47
|
+
* volatility: randomSeries({ bounds: [0.01, 0.2], volatility: 0.2, regressionExponent: 2 }),
|
|
48
|
+
* relativeTo: 'current',
|
|
49
|
+
* regressionExponent: 8
|
|
50
|
+
* });
|
|
51
|
+
*/
|
|
52
|
+
export declare function randomSeries({ bounds, initial, volatility, relativeTo, generator, regressionExponent }?: RandomSeriesOptions): Generator<number>;
|
package/random/series.js
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var series_exports = {};
|
|
20
|
+
__export(series_exports, {
|
|
21
|
+
randomSeries: () => randomSeries
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(series_exports);
|
|
24
|
+
var import_math = require("../utils/math.js");
|
|
25
|
+
var import_type_guards = require("../utils/type-guards.js");
|
|
26
|
+
var import_random_number_generator_function = require("./number-generator/random-number-generator-function.js");
|
|
27
|
+
function* randomSeries({ bounds, initial = bounds ?? 1, volatility = 0.025, relativeTo = "initial", generator = import_random_number_generator_function.defaultRandomNumberGeneratorFn, regressionExponent = 10 } = {}) {
|
|
28
|
+
const initialValue = (0, import_type_guards.isNumber)(initial) ? initial : (0, import_math.randomInt)(initial[0], initial[1]);
|
|
29
|
+
const isRelativeToCurrent = relativeTo == "current";
|
|
30
|
+
const hasBounds = (0, import_type_guards.isDefined)(bounds);
|
|
31
|
+
const min = hasBounds ? bounds[0] : void 0;
|
|
32
|
+
const max = hasBounds ? bounds[1] : void 0;
|
|
33
|
+
const volatilityProvider = (0, import_type_guards.isNumber)(volatility) ? () => volatility : (value2) => volatility.next(value2).value;
|
|
34
|
+
let value = initialValue;
|
|
35
|
+
while (true) {
|
|
36
|
+
const currentVolatility = volatilityProvider(value);
|
|
37
|
+
let changePercent = currentVolatility * ((0.5 - generator()) * 2);
|
|
38
|
+
if (hasBounds) {
|
|
39
|
+
const normalizedDeltaFromMean = (0, import_math.linearInterpolate)(value, min, max, -1, 1);
|
|
40
|
+
const regressFactor = (0, import_math.clamp)(Math.abs(normalizedDeltaFromMean) ** regressionExponent * Math.sign(normalizedDeltaFromMean), -1.5, 1.5);
|
|
41
|
+
changePercent -= currentVolatility * regressFactor;
|
|
42
|
+
}
|
|
43
|
+
yield value += isRelativeToCurrent ? value * changePercent : initialValue * changePercent;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Merge } from '
|
|
1
|
+
import type { Merge } from '../../types.js';
|
|
2
2
|
import type { ObjectSchema, ObjectSchemaOrType } from '../types/index.js';
|
|
3
3
|
export declare function assign<T1, T2>(schema1: ObjectSchemaOrType<T1>, schema2: ObjectSchemaOrType<T2>): ObjectSchema<Merge<T1, T2>>;
|
|
4
4
|
export declare function assign<T1, T2, T3>(schema1: ObjectSchemaOrType<T1>, schema2: ObjectSchemaOrType<T2>, schema3: ObjectSchemaOrType<T3>): ObjectSchema<Merge<Merge<T1, T2>, T3>>;
|
package/utils/math.d.ts
CHANGED
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
* Generates a random value in interval [0, 1).
|
|
3
|
-
*/
|
|
4
|
-
export type RandomNumberGenerator = () => number;
|
|
1
|
+
import type { RandomNumberGeneratorFn } from '../random/number-generator/random-number-generator-function.js';
|
|
5
2
|
/**
|
|
6
3
|
* Generate a random float in interval [min, max).
|
|
7
4
|
* @param min minimum value
|
|
@@ -9,7 +6,7 @@ export type RandomNumberGenerator = () => number;
|
|
|
9
6
|
* @param generator Random number generator to use, defaults to `Math.random`. Must return a number in interval [0, 1).
|
|
10
7
|
* @returns random number (float)
|
|
11
8
|
*/
|
|
12
|
-
export declare function randomFloat(min: number, max: number, generator?:
|
|
9
|
+
export declare function randomFloat(min: number, max: number, generator?: RandomNumberGeneratorFn): number;
|
|
13
10
|
/**
|
|
14
11
|
* Generate a random integer in interval [min, max].
|
|
15
12
|
* @param min minimum value
|
|
@@ -17,7 +14,7 @@ export declare function randomFloat(min: number, max: number, generator?: Random
|
|
|
17
14
|
* @param generator random number generator to use, defaults to `Math.random`. Must return a number in interval [0, 1)
|
|
18
15
|
* @returns random number (integer)
|
|
19
16
|
*/
|
|
20
|
-
export declare function randomInt(min: number, max: number, generator?:
|
|
17
|
+
export declare function randomInt(min: number, max: number, generator?: RandomNumberGeneratorFn): number;
|
|
21
18
|
/**
|
|
22
19
|
* Calculate the sum of all values.
|
|
23
20
|
* @param values values to sum
|
package/utils/math.js
CHANGED
|
@@ -32,11 +32,11 @@ __export(math_exports, {
|
|
|
32
32
|
});
|
|
33
33
|
module.exports = __toCommonJS(math_exports);
|
|
34
34
|
var import_not_supported_error = require("../error/not-supported.error.js");
|
|
35
|
-
|
|
36
|
-
function randomFloat(min, max, generator =
|
|
35
|
+
var import_random_number_generator_function = require("../random/number-generator/random-number-generator-function.js");
|
|
36
|
+
function randomFloat(min, max, generator = import_random_number_generator_function.defaultRandomNumberGeneratorFn) {
|
|
37
37
|
return linearInterpolateFloat(generator(), min, max);
|
|
38
38
|
}
|
|
39
|
-
function randomInt(min, max, generator =
|
|
39
|
+
function randomInt(min, max, generator = import_random_number_generator_function.defaultRandomNumberGeneratorFn) {
|
|
40
40
|
return Math.floor(linearInterpolateFloat(generator(), min, max + 1));
|
|
41
41
|
}
|
|
42
42
|
function sum(values) {
|
package/utils/merge.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import type { Record } from '../types.js';
|
|
2
|
-
import type { Merge } from 'type-fest';
|
|
1
|
+
import type { Merge, Record } from '../types.js';
|
|
3
2
|
type BaseType = Record | any[] | Map<any, any> | Set<any>;
|
|
4
3
|
export declare function merge<A extends BaseType, B extends BaseType>(a: A | undefined, b: B | undefined): A extends (infer T)[] ? B extends (infer U)[] ? (T | U)[] : never : A extends Map<infer K, infer V> ? B extends Map<infer K2, infer V2> ? Map<K | K2, V | V2> : never : A extends Set<infer T> ? B extends Set<infer U> ? Set<T | U> : never : A extends Record ? B extends Record ? Merge<A, B> : never : never;
|
|
5
4
|
export {};
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
export declare abstract class SeededRandomNumberGenerator {
|
|
2
|
-
/**
|
|
3
|
-
* maximum value the generator will generate for {@link nextInt}
|
|
4
|
-
*/
|
|
5
|
-
readonly maxValue: number;
|
|
6
|
-
constructor(maxValue: number);
|
|
7
|
-
/**
|
|
8
|
-
* generate a random integer between 0 and {@link maxValue}
|
|
9
|
-
* @see maxValue
|
|
10
|
-
*/
|
|
11
|
-
abstract nextInt(): number;
|
|
12
|
-
/**
|
|
13
|
-
* generate a random float in interval [0, 1)
|
|
14
|
-
*/
|
|
15
|
-
abstract next(): number;
|
|
16
|
-
/**
|
|
17
|
-
* fork the rng based on the current state
|
|
18
|
-
*/
|
|
19
|
-
abstract fork(): SeededRandomNumberGenerator;
|
|
20
|
-
/**
|
|
21
|
-
* clone the rng with the current state
|
|
22
|
-
*/
|
|
23
|
-
abstract clone(): SeededRandomNumberGenerator;
|
|
24
|
-
}
|