import Decimal from 'decimal.js'; import Formula, { registerFormulaFunction, TokenType } from './formula'; import { toRound, toFixed } from './formula/utils'; import type { FormulaOptions, IFormulaDataSource, FormulaCustomFunctionItem } from './formula'; import { FormulaValueOptions } from './formula/type'; import { FormulaParamValue } from './formula/values/param'; import { createToken } from './formula/tokenizer'; export { getValueByPath, removeFormArray } from './formula/utils'; type FormulaCalcParams = Record | ((name: string, options: FormulaValueOptions) => any); interface FormulaCreateOptions extends FormulaOptions { customFunctions?: Record; } interface FormulaCalcCommonOptions extends FormulaCreateOptions { dataSource?: IFormulaDataSource; } interface FormulaCalcOptions extends FormulaCalcCommonOptions { params?: FormulaCalcParams | Array; onFormulaCreated?: (formula: Formula) => void; cache?: boolean; } declare function createParamsDataSource(params: FormulaCalcOptions['params']): IFormulaDataSource; declare function createFormulaEval(params: FormulaCalcParams | undefined, _options?: FormulaCalcOptions): FormulaOptions['eval']; declare function createFormula(expression: string, options?: FormulaCreateOptions): Formula; declare function formulaCalc(expressionOrFormula: string | Formula, options?: FormulaCalcOptions, returnReferenceType?: T | ((result: any) => T)): T; declare const UTILS_ARRAY_NAMES: readonly ["sum", "avg", "max", "min"]; declare const UTILS_OPERATOR_NAMES: readonly [{ readonly name: "add"; readonly operator: "+"; }, { readonly name: "sub"; readonly operator: "-"; }, { readonly name: "mul"; readonly operator: "*"; }, { readonly name: "div"; readonly operator: "/"; }, { readonly name: "divToInt"; readonly operator: "//"; }, { readonly name: "mod"; readonly operator: "%"; }, { readonly name: "pow"; readonly operator: "^"; }]; declare const UTILS_ONE_PARAMS_NAMES: readonly ["abs", "ceil", "floor", "trunc", "sqrt", "cbrt"]; type FormulaUtilsParam = number | string | null | undefined | Decimal; type FormulaUtilsOptions = Omit; type FormulaUtils = Record<(typeof UTILS_ARRAY_NAMES)[number], (params: Array, options?: FormulaUtilsOptions) => number> & Record<(typeof UTILS_OPERATOR_NAMES)[number]['name'], (a: FormulaUtilsParam, b: FormulaUtilsParam, options?: FormulaUtilsOptions) => number> & Record<(typeof UTILS_ONE_PARAMS_NAMES)[number], (a: FormulaUtilsParam, options?: FormulaUtilsOptions) => number> & { round: (...args: Parameters) => number; toFixed: (...args: Parameters) => string; abs: (a: FormulaUtilsParam, options?: FormulaUtilsOptions) => number; clamp: (a: FormulaUtilsParam, min: FormulaUtilsParam, max: FormulaUtilsParam, options?: FormulaUtilsOptions) => number; }; type FormulaUtilMethodArgs

= A extends [infer T, ...infer U] ? T extends string ? U extends string[] ? [T: P, ...FormulaUtilMethodArgs] : [T: P] : never : [options?: FormulaUtilsOptions]; declare function createUtilMethod(expression: string, paramNames: A): (...args: FormulaUtilMethodArgs) => number; declare const formulaUtils: FormulaUtils; export { Formula, TokenType, createToken, createFormula, createParamsDataSource, createFormulaEval, createUtilMethod, registerFormulaFunction, formulaUtils, FormulaParamValue, }; export type { FormulaOptions, FormulaCalcOptions, IFormulaDataSource, FormulaCalcParams, FormulaCreateOptions, }; export default formulaCalc;