UNPKG

hyperformula

Version:

HyperFormula is a JavaScript engine for efficient processing of spreadsheet-like data and formulas

50 lines 1.35 kB
/** * @license * Copyright (c) 2025 Handsoncode. All rights reserved. */ import { CellError, ErrorType } from "../../Cell.mjs"; import { ErrorMessage } from "../../error-message.mjs"; import { FunctionArgumentType, FunctionPlugin } from "./FunctionPlugin.mjs"; export class RandomPlugin extends 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 CellError(ErrorType.NUM, ErrorMessage.WrongOrder); } lower = Math.ceil(lower); upper = Math.floor(upper) + 1; if (lower === upper) { upper += 1; } return lower + Math.floor(Math.random() * (upper - lower)); }); } } RandomPlugin.implementedFunctions = { 'RAND': { method: 'rand', parameters: [], isVolatile: true }, 'RANDBETWEEN': { method: 'randbetween', parameters: [{ argumentType: FunctionArgumentType.NUMBER }, { argumentType: FunctionArgumentType.NUMBER }], isVolatile: true } };