hyperformula
Version:
HyperFormula is a JavaScript engine for efficient processing of spreadsheet-like data and formulas
56 lines (54 loc) • 1.48 kB
JavaScript
;
exports.__esModule = true;
exports.RandomPlugin = void 0;
var _Cell = require("../../Cell");
var _errorMessage = require("../../error-message");
var _FunctionPlugin = require("./FunctionPlugin");
/**
* @license
* Copyright (c) 2025 Handsoncode. All rights reserved.
*/
class RandomPlugin extends _FunctionPlugin.FunctionPlugin {
/**
* Corresponds to RAND()
*
* Returns a pseudo-random floating-point random number
* in the range [0,1).
*
* @param ast
* @param state
*/
rand(ast, state) {
return this.runFunction(ast.args, state, this.metadata('RAND'), Math.random);
}
randbetween(ast, state) {
return this.runFunction(ast.args, state, this.metadata('RANDBETWEEN'), (lower, upper) => {
if (upper < lower) {
return new _Cell.CellError(_Cell.ErrorType.NUM, _errorMessage.ErrorMessage.WrongOrder);
}
lower = Math.ceil(lower);
upper = Math.floor(upper) + 1;
if (lower === upper) {
upper += 1;
}
return lower + Math.floor(Math.random() * (upper - lower));
});
}
}
exports.RandomPlugin = RandomPlugin;
RandomPlugin.implementedFunctions = {
'RAND': {
method: 'rand',
parameters: [],
isVolatile: true
},
'RANDBETWEEN': {
method: 'randbetween',
parameters: [{
argumentType: _FunctionPlugin.FunctionArgumentType.NUMBER
}, {
argumentType: _FunctionPlugin.FunctionArgumentType.NUMBER
}],
isVolatile: true
}
};