amis-formula
Version:
负责 amis 里面的表达式实现,内置公式,编辑器等
1,358 lines (1,357 loc) • 43.1 kB
TypeScript
/**
* @file 公式内置函数
*/
import { EvaluatorOptions, FilterMap, FunctionMap } from './types';
export declare class Evaluator {
readonly options: EvaluatorOptions;
readonly filters: FilterMap;
readonly functions: FunctionMap;
readonly context: {
[propName: string]: any;
};
contextStack: Array<(varname: string) => any>;
static defaultFilters: FilterMap;
static extendDefaultFilters(filters: FilterMap): void;
static defaultFunctions: FunctionMap;
static extendDefaultFunctions(funtions: FunctionMap): void;
constructor(context: {
[propName: string]: any;
}, options?: EvaluatorOptions);
evalute(ast: any): any;
document(ast: {
type: 'document';
body: Array<any>;
}): any;
filter(ast: {
type: 'filter';
input: any;
filters: Array<{
name: string;
args: Array<any>;
}>;
}): any;
raw(ast: {
type: 'raw';
value: string;
}): string;
script(ast: {
type: 'script';
body: any;
}): any;
expressionList(ast: {
type: 'expression-list';
body: Array<any>;
}): any;
template(ast: {
type: 'template';
body: Array<any>;
}): string;
templateRaw(ast: {
type: 'template_raw';
value: any;
}): any;
getter(ast: {
host: any;
key: any;
}): any;
unary(ast: {
op: '+' | '-' | '~' | '!';
value: any;
}): number | boolean;
formatNumber(value: any, int?: boolean): any;
isValidValue(value: string | number): boolean;
power(ast: {
left: any;
right: any;
}): any;
multiply(ast: {
left: any;
right: any;
}): number;
divide(ast: {
left: any;
right: any;
}): number;
remainder(ast: {
left: any;
right: any;
}): number;
add(ast: {
left: any;
right: any;
}): any;
minus(ast: {
left: any;
right: any;
}): number;
shift(ast: {
op: '<<' | '>>' | '>>>';
left: any;
right: any;
}): number;
lt(ast: {
left: any;
right: any;
}): boolean;
gt(ast: {
left: any;
right: any;
}): boolean;
le(ast: {
left: any;
right: any;
}): boolean;
ge(ast: {
left: any;
right: any;
}): boolean;
eq(ast: {
left: any;
right: any;
}): boolean;
ne(ast: {
left: any;
right: any;
}): boolean;
streq(ast: {
left: any;
right: any;
}): boolean;
strneq(ast: {
left: any;
right: any;
}): boolean;
binary(ast: {
op: '&' | '^' | '|';
left: any;
right: any;
}): number;
and(ast: {
left: any;
right: any;
}): any;
or(ast: {
left: any;
right: any;
}): any;
number(ast: {
value: any;
raw: string;
}): any;
/**
* 名字空间下获取变量,可能存在变量名中带-的特殊情况,目前无法直接获取 ${ns:xxx-xxx}
* 想借助 ${ns:&['xxx-xxx']} 用法来支持特殊字符。
*
* 而 cookie, localstorage, sessionstorage 都不支持获取全量数据,如 ${ns: &}
* 所以当存在上述用法时,将 & 作为一个占位
*
* 比如 cookie 中有一个 key 为 xxx-xxx 的值,那么可以通过 &['xxx-xxx'] 来获取。
* 而无法通过 ${cookie:xxx-xxx} 来获取。 因为这样会被认为是减操作
* @param ast
* @returns
*/
convertHostGetterToVariable(ast: any): any;
nsVariable(ast: {
namespace: string;
body: any;
}): any;
variable(ast: {
name: string;
}): any;
identifier(ast: {
name: string;
}): string;
array(ast: {
type: 'array';
members: Array<any>;
}): any[];
literal(ast: {
type: 'literal';
value: any;
}): any;
string(ast: {
type: 'string';
value: string;
}): string;
object(ast: {
members: Array<{
key: string;
value: any;
}>;
}): any;
conditional(ast: {
type: 'conditional';
test: any;
consequent: any;
alternate: any;
}): any;
funcCall(this: any, ast: {
identifier: string;
args: Array<any>;
}): any;
anonymousFunction(ast: any): any;
callAnonymousFunction(ast: {
args: any[];
return: any;
}, args: Array<any>): any;
/**
* 如果满足条件condition,则返回consequent,否则返回alternate,支持多层嵌套IF函数。
*
* 等价于直接用JS表达式如:condition ? consequent : alternate。
*
* @example IF(condition, consequent, alternate)
* @param {expression} condition 条件表达式。例如:语文成绩>80
* @param {any} consequent 条件判断通过的返回结果
* @param {any} alternate 条件判断不通过的返回结果
* @namespace 逻辑函数
*
* @returns {any} 根据条件返回不同的结果
*/
fnIF(condition: () => any, trueValue: () => any, falseValue: () => any): any;
/**
* 条件全部符合,返回 true,否则返回 false。
*
* 示例:AND(语文成绩>80, 数学成绩>80),
*
* 语文成绩和数学成绩都大于 80,则返回 true,否则返回 false,
*
* 等价于直接用JS表达式如:语文成绩>80 && 数学成绩>80。
*
* @example AND(expression1, expression2, ...expressionN)
* @param {...expression} conditions 条件表达式,多个用逗号隔开。例如:语文成绩>80, 数学成绩>80
* @namespace 逻辑函数
*
* @returns {boolean}
*/
fnAND(...condtions: Array<() => any>): boolean;
/**
* 条件任意一个满足条件,返回 true,否则返回 false。
*
* 示例:OR(语文成绩>80, 数学成绩>80),
*
* 语文成绩和数学成绩任意一个大于 80,则返回 true,否则返回 false,
*
* 等价于直接用JS表达式如:语文成绩>80 || 数学成绩>80。
*
* @example OR(expression1, expression2, ...expressionN)
* @param {...expression} conditions 条件表达式,多个用逗号隔开。例如:语文成绩>80, 数学成绩>80
* @namespace 逻辑函数
*
* @returns {boolean}
*/
fnOR(...condtions: Array<() => any>): boolean;
/**
* 异或处理,多个表达式组中存在奇数个真时认为真。
*
* 示例:XOR(语文成绩 > 80, 数学成绩 > 80, 英语成绩 > 80)
*
* 三门成绩中有一门或者三门大于 80,则返回 true,否则返回 false。
*
* @example XOR(condition1, condition2, ...expressionN)
* @param {...expression} condition 条件表达式,多个用逗号隔开。例如:语文成绩>80, 数学成绩>80
* @namespace 逻辑函数
*
* @returns {boolean}
*/
fnXOR(...condtions: Array<() => any>): boolean;
/**
* 判断函数集合,相当于多个 else if 合并成一个。
*
* 示例:IFS(语文成绩 > 80, "优秀", 语文成绩 > 60, "良", "继续努力"),
*
* 如果语文成绩大于 80,则返回优秀,否则判断大于 60 分,则返回良,否则返回继续努力。
*
* @example IFS(condition1, result1, condition2, result2,...conditionN, resultN)
* @param {...expression} condition 条件表达式
* @param {...any} result 返回值
* @namespace 逻辑函数
* @returns {any} 第一个满足条件的结果,没有命中的返回 false。
*/
fnIFS(...args: Array<() => any>): any;
/**
* 返回传入数字的绝对值。
*
* @example ABS(num)
* @param {number} num - 数值
* @namespace 数学函数
*
* @returns {number} 传入数值的绝对值
*/
fnABS(a: number): number;
/**
* 获取最大值,如果只有一个参数且是数组,则计算这个数组内的值。
*
* @example MAX(num1, num2, ...numN) or MAX([num1, num2, ...numN])
* @param {...number} num - 数值
* @namespace 数学函数
*
* @returns {number} 所有传入值中最大的那个
*/
fnMAX(...args: Array<any>): any;
/**
* 获取最小值,如果只有一个参数且是数组,则计算这个数组内的值。
*
* @example MIN(num1, num2, ...numN) or MIN([num1, num2, ...numN])
* @param {...number} num - 数值
* @namespace 数学函数
*
* @returns {number} 所有传入值中最小的那个
*/
fnMIN(...args: Array<number>): any;
/**
* 求和,如果只有一个参数且是数组,则计算这个数组内的值。
*
* @example SUM(num1, num2, ...numN) or SUM([num1, num2, ...numN])
* @param {...number} num - 数值
* @namespace 数学函数
*
* @returns {number} 所有传入数值的总和
*/
fnSUM(...args: Array<number>): any;
/**
* 将数值向下取整为最接近的整数。
*
* @example INT(num)
* @param {number} num - 数值
* @namespace 数学函数
*
* @returns {number} 数值对应的整形
*/
fnINT(n: number): number;
/**
* 返回两数相除的余数,参数 number 是被除数,divisor 是除数。
*
* @example MOD(num, divisor)
* @param {number} num - 被除数
* @param {number} divisor - 除数
* @namespace 数学函数
*
* @returns {number} 两数相除的余数
*/
fnMOD(a: number, b: number): number;
/**
* 圆周率 3.1415...。
*
* @example PI()
* @namespace 数学函数
*
* @returns {number} 圆周率数值
*/
fnPI(): number;
/**
* 将数字四舍五入到指定的位数,可以设置小数位。
*
* @example ROUND(num[, numDigits = 2])
* @param {number} num - 要处理的数字
* @param {number} numDigits - 小数位数,默认为2
* @namespace 数学函数
*
* @returns {number} 传入数值四舍五入后的结果
*/
fnROUND(a: number, b?: number): number;
/**
* 将数字向下取整到指定的位数,可以设置小数位。
*
* @example FLOOR(num[, numDigits=2])
* @param {number} num - 要处理的数字
* @param {number} numDigits - 小数位数,默认为2
* @namespace 数学函数
*
* @returns {number} 传入数值向下取整后的结果
*/
fnFLOOR(a: number, b?: number): number;
/**
* 将数字向上取整到指定的位数,可以设置小数位。
*
* @example CEIL(num[, numDigits=2])
* @param {number} num - 要处理的数字
* @param {number} numDigits - 小数位数,默认为2
* @namespace 数学函数
*
* @returns {number} 传入数值向上取整后的结果
*/
fnCEIL(a: number, b?: number): number;
/**
* 开平方,参数 number 为非负数
*
* @example SQRT(num)
* @param {number} num - 要处理的数字
* @namespace 数学函数
*
* @returns {number} 开平方的结果
*/
fnSQRT(n: number): number;
/**
* 返回所有参数的平均值,如果只有一个参数且是数组,则计算这个数组内的值。
*
* @example AVG(num1, num2, ...numN) or AVG([num1, num2, ...numN])
* @param {...number} num - 要处理的数字
* @namespace 数学函数
*
* @returns {number} 所有数值的平均值
*/
fnAVG(...args: Array<any>): number;
/**
* 返回数据点与数据均值点之差(数据偏差)的平方和,如果只有一个参数且是数组,则计算这个数组内的值。
*
* @example DEVSQ(num1, num2, ...numN)
* @param {...number} num - 要处理的数字
* @namespace 数学函数
*
* @returns {number} 所有数值的平均值
*/
fnDEVSQ(...args: Array<any>): number | null;
/**
* 数据点到其算术平均值的绝对偏差的平均值。
*
* @example AVEDEV(num1, num2, ...numN)
* @param {...number} num - 要处理的数字
* @namespace 数学函数
*
* @returns {number} 所有数值的平均值
*/
fnAVEDEV(...args: Array<any>): number | null;
/**
* 数据点的调和平均值,如果只有一个参数且是数组,则计算这个数组内的值。
*
* @example HARMEAN(num1, num2, ...numN)
* @param {...number} num - 要处理的数字
* @namespace 数学函数
*
* @returns {number} 所有数值的平均值
*/
fnHARMEAN(...args: Array<any>): number | null;
/**
* 数据集中第 k 个最大值。
*
* @example LARGE(array, k)
* @param {array} nums - 要处理的数字
* @param {number} k - 第几大
* @namespace 数学函数
*
* @returns {number} 所有数值的平均值
*/
fnLARGE(nums: Array<any>, k: number): any;
/**
* 将数值转为中文大写金额。
*
* @example UPPERMONEY(num)
* @param {number} num - 要处理的数字
* @namespace 数学函数
*
* @returns {string} 数值中文大写字符
*/
fnUPPERMONEY(n: number): string;
/**
* 返回大于等于 0 且小于 1 的均匀分布随机实数。每一次触发计算都会变化。
*
* 示例:`RAND()*100`,
*
* 返回 0-100 之间的随机数。
*
* @example RAND()
* @namespace 数学函数
*
* @returns {number} 随机数
*/
fnRAND(): number;
/**
* 取数据最后一个。
*
* @example LAST(array)
* @param {...number} arr - 要处理的数组
* @namespace 数学函数
*
* @returns {any} 最后一个值
*/
fnLAST(arr: Array<any>): any;
/**
* 返回基数的指数次幂,参数base为基数,exponent为指数,如果参数值不合法则返回基数本身,计算结果不合法,则返回NaN。
*
* @example POW(base, exponent)
* @param {number} base 基数
* @param {number} exponent 指数
* @namespace 数学函数
*
* @returns {number} 基数的指数次幂
*/
fnPOW(base: number, exponent: number): number;
normalizeText(raw: any): string;
/**
* 返回传入文本左侧的指定长度字符串。
*
* @example LEFT(text, len)
* @param {string} text - 要处理的文本
* @param {number} len - 要处理的长度
* @namespace 文本函数
*
* @returns {string} 对应字符串
*/
fnLEFT(text: string, len: number): string;
/**
* 返回传入文本右侧的指定长度字符串。
*
* @example RIGHT(text, len)
* @param {string} text - 要处理的文本
* @param {number} len - 要处理的长度
* @namespace 文本函数
*
* @returns {string} 对应字符串
*/
fnRIGHT(text: string, len: number): string;
/**
* 计算文本的长度。
*
* @example LEN(text)
* @param {string} text - 要处理的文本
* @namespace 文本函数
*
* @returns {number} 长度
*/
fnLEN(text: string): number;
/**
* 计算文本集合中所有文本的长度。
*
* @example LENGTH(textArr)
* @param {string[]} textArr - 要处理的文本集合
* @namespace 文本函数
*
* @returns {number[]} 长度集合
*/
fnLENGTH(...args: any[]): any;
/**
* 判断文本是否为空。
*
* @example ISEMPTY(text)
* @param {string} text - 要处理的文本
* @namespace 文本函数
*
* @returns {boolean} 判断结果
*/
fnISEMPTY(text: string): boolean;
/**
* 将多个传入值连接成文本。
*
* @example CONCATENATE(text1, text2, ...textN)
* @param {...string} text - 文本集合
* @namespace 文本函数
*
* @returns {string} 连接后的文本
*/
fnCONCATENATE(...args: Array<any>): string;
/**
* 返回计算机字符集的数字代码所对应的字符。
*
* 示例:`CHAR(97)` 等价于 "a"。
*
* @example CHAR(code)
* @param {number} code - 编码值
* @namespace 文本函数
*
* @returns {string} 指定位置的字符
*/
fnCHAR(code: number): string;
/**
* 将传入文本转成小写。
*
* @example LOWER(text)
* @param {string} text - 文本
* @namespace 文本函数
*
* @returns {string} 结果文本
*/
fnLOWER(text: string): string;
/**
* 将传入文本转成大写。
*
* @example UPPER(text)
* @param {string} text - 文本
* @namespace 文本函数
*
* @returns {string} 结果文本
*/
fnUPPER(text: string): string;
/**
* 将传入文本首字母转成大写。
*
* @example UPPERFIRST(text)
* @param {string} text - 文本
* @namespace 文本函数
*
* @returns {string} 结果文本
*/
fnUPPERFIRST(text: string): Capitalize<string>;
/**
* 向前补齐文本长度。
*
* 示例 `PADSTART("6", 2, "0")`,
*
* 返回 `06`。
*
* @example PADSTART(text)
* @param {string} text - 文本
* @param {number} num - 目标长度
* @param {string} pad - 用于补齐的文本
* @namespace 文本函数
*
* @returns {string} 结果文本
*/
fnPADSTART(text: string, num: number, pad: string): string;
/**
* 将文本转成标题。
*
* 示例 `CAPITALIZE("star")`,
*
* 返回 `Star`。
*
* @example CAPITALIZE(text)
* @param {string} text - 文本
* @namespace 文本函数
*
* @returns {string} 结果文本
*/
fnCAPITALIZE(text: string): string;
/**
* 对文本进行 HTML 转义。
*
* 示例 `ESCAPE("<star>&")`,
*
* 返回 `<start>&`。
*
* @example ESCAPE(text)
* @param {string} text - 文本
* @namespace 文本函数
*
* @returns {string} 结果文本
*/
fnESCAPE(text: string): string;
/**
* 对文本长度进行截断。
*
* 示例 `TRUNCATE("amis.baidu.com", 6)`,
*
* 返回 `amis...`。
*
* @example TRUNCATE(text, 6)
* @param {string} text - 文本
* @param {number} text - 最长长度
* @namespace 文本函数
*
* @returns {string} 结果文本
*/
fnTRUNCATE(text: string, length: number): string;
/**
* 取在某个分隔符之前的所有字符串。
*
* @example BEFORELAST(text, '.')
* @param {string} text - 文本
* @param {string} delimiter - 结束文本
* @namespace 文本函数
*
* @returns {string} 判断结果
*/
fnBEFORELAST(text: string, delimiter?: string): string;
/**
* 将文本根据指定片段分割成数组。
*
* 示例:`SPLIT("a,b,c", ",")`,
*
* 返回 `["a", "b", "c"]`。
*
* @example SPLIT(text, ',')
* @param {string} text - 文本
* @param {string} delimiter - 文本片段
* @namespace 文本函数
*
* @returns {Array<string>} 文本集
*/
fnSPLIT(text: string, sep?: string): string[];
/**
* 将文本去除前后空格。
*
* @example TRIM(text)
* @param {string} text - 文本
* @namespace 文本函数
*
* @returns {string} 处理后的文本
*/
fnTRIM(text: string): string;
/**
* 去除文本中的 HTML 标签。
*
* 示例:`STRIPTAG("<b>amis</b>")`,
*
* 返回:`amis`。
*
* @example STRIPTAG(text)
* @param {string} text - 文本
* @namespace 文本函数
*
* @returns {string} 处理后的文本
*/
fnSTRIPTAG(text: string): string;
/**
* 将字符串中的换行转成 HTML `<br>`,用于简单换行的场景。
*
* 示例:`LINEBREAK("\n")`,
*
* 返回:`<br/>`。
*
* @example LINEBREAK(text)
* @param {string} text - 文本
* @namespace 文本函数
*
* @returns {string} 处理后的文本
*/
fnLINEBREAK(text: string): string;
/**
* 判断字符串(text)是否以特定字符串(startString)开始,是则返回 true,否则返回 false。
*
* @example STARTSWITH(text, '片段')
* @param {string} text - 文本
* @param {string} startString - 起始文本
* @namespace 文本函数
*
* @returns {boolean} 判断结果
*/
fnSTARTSWITH(text: string, search: string): boolean;
/**
* 判断字符串(text)是否以特定字符串(endString)结束,是则返回 true,否则返回 false。
*
* @example ENDSWITH(text, '片段')
* @param {string} text - 文本
* @param {string} endString - 结束文本
* @namespace 文本函数
*
* @returns {boolean} 判断结果
*/
fnENDSWITH(text: string, search: string): boolean;
/**
* 判断参数 1 中的文本是否包含参数 2 中的文本,是则返回 true,否则返回 false。
*
* @example CONTAINS(text, searchText)
* @param {string} text - 文本
* @param {string} searchText - 搜索文本
* @namespace 文本函数
*
* @returns {boolean} 判断结果
*/
fnCONTAINS(text: string, search: string): boolean;
/**
* 对文本进行全量替换。
*
* @example REPLACE(text, search, replace)
* @param {string} text - 要处理的文本
* @param {string} search - 要被替换的文本
* @param {string} replace - 要替换的文本
* @namespace 文本函数
*
* @returns {string} 处理结果
*/
fnREPLACE(text: string, search: string, replace: string): string;
/**
* 对文本进行搜索,返回命中的位置。
*
* @example SEARCH(text, search, 0)
* @param {string} text - 要处理的文本
* @param {string} search - 用来搜索的文本
* @param {number} start - 起始位置
* @namespace 文本函数
*
* @returns {number} 命中的位置
*/
fnSEARCH(text: string, search: string, start?: number): number;
/**
* 返回文本字符串中从指定位置开始的特定数目的字符。
*
* 示例:`MID("amis.baidu.com", 6, 3)`,
*
* 返回 `aid`。
*
* @example MID(text, from, len)
* @param {string} text - 要处理的文本
* @param {number} from - 起始位置
* @param {number} len - 处理长度
* @namespace 文本函数
*
* @returns {string} 命中的位置
*/
fnMID(text: string, from: number, len: number): string;
/**
* 返回路径中的文件名。
*
* 示例:`/home/amis/a.json`,
*
* 返回:`a.json`。
*
* @example BASENAME(text)
* @param {string} text - 要处理的文本
* @namespace 文本函数
*
* @returns {string} 文件名
*/
fnBASENAME(text: string): string | undefined;
/**
* 生成UUID字符串
*
* @param {number} length - 生成的UUID字符串长度,默认为32位
* @example UUID()
* @example UUID(8)
* @namespace 文本函数
*
* @returns {string} 生成的UUID字符串
*/
fnUUID(length?: number): string;
/**
* 创建日期对象,可以通过特定格式的字符串,或者数值。
*
* 需要注意的是,其中月份的数值是从0开始的,
* 即如果是12月份,你应该传入数值11。
*
* @example DATE(2021, 11, 6, 8, 20, 0)
* @example DATE('2021-12-06 08:20:00')
* @namespace 日期函数
*
* @returns {Date} 日期对象
*/
fnDATE(year: number, month: number, day: number, hour: number, minute: number, second: number): Date;
/**
* 返回时间的时间戳。
*
* @example TIMESTAMP(date[, format = "X"])
* @namespace 日期函数
* @param {date} date 日期对象
* @param {string} format 时间戳格式,带毫秒传入 'x'。默认为 'X' 不带毫秒的。
*
* @returns {number} 时间戳
*/
fnTIMESTAMP(date: Date, format?: 'x' | 'X'): number;
/**
* 返回今天的日期。
*
* @example TODAY()
* @namespace 日期函数
*
* @returns {number} 日期
*/
fnTODAY(): Date;
/**
* 返回现在的日期
*
* @example NOW()
* @namespace 日期函数
*
* @returns {number} 日期
*/
fnNOW(): Date;
/**
* 获取日期的星期几。
*
* 示例
*
* WEEKDAY('2023-02-27') 得到 0。
* WEEKDAY('2023-02-27', 2) 得到 1。
*
* @example WEEKDAY(date)
* @namespace 日期函数
* @param {any} date 日期
* @param {number} type 星期定义类型,默认为1,1表示0至6代表星期一到星期日,2表示1至7代表星期一到星期日
*
* @returns {number} 星期几的数字标识
*/
fnWEEKDAY(date: Date | string | number, type?: number): number;
/**
* 获取年份的星期,即第几周。
*
* 示例
*
* WEEK('2023-03-05') 得到 9。
*
* @example WEEK(date)
* @namespace 日期函数
* @param {any} date 日期
* @param {boolean} isISO 是否ISO星期
*
* @returns {number} 星期几的数字标识
*/
fnWEEK(date: Date | string | number, isISO?: boolean): number;
/**
* 对日期、日期字符串、时间戳进行格式化。
*
* 示例
*
* DATETOSTR('12/25/2022', 'YYYY-MM-DD') 得到 '2022.12.25',
* DATETOSTR(1676563200, 'YYYY.MM.DD') 得到 '2023.02.17',
* DATETOSTR(1676563200000, 'YYYY.MM.DD hh:mm:ss') 得到 '2023.02.17 12:00:00',
* DATETOSTR(DATE('2021-12-21'), 'YYYY.MM.DD hh:mm:ss') 得到 '2021.12.21 08:00:00'。
*
* @example DATETOSTR(date, 'YYYY-MM-DD')
* @namespace 日期函数
* @param {any} date 日期对象、日期字符串、时间戳
* @param {string} format 日期格式,默认为 "YYYY-MM-DD HH:mm:ss"
*
* @returns {string} 日期字符串
*/
fnDATETOSTR(date: Date | string | number, format?: string): string;
/**
* 获取日期范围字符串中的开始时间、结束时间。
*
* 示例:
*
* DATERANGESPLIT('1676563200, 1676735999') 得到 [1676563200, 1676735999],
* DATERANGESPLIT('1676563200, 1676735999', undefined , 'YYYY.MM.DD hh:mm:ss') 得到 [2023.02.17 12:00:00, 2023.02.18 11:59:59],
* DATERANGESPLIT('1676563200, 1676735999', 0 , 'YYYY.MM.DD hh:mm:ss') 得到 '2023.02.17 12:00:00',
* DATERANGESPLIT('1676563200, 1676735999', 'start' , 'YYYY.MM.DD hh:mm:ss') 得到 '2023.02.17 12:00:00',
* DATERANGESPLIT('1676563200, 1676735999', 1 , 'YYYY.MM.DD hh:mm:ss') 得到 '2023.02.18 11:59:59',
* DATERANGESPLIT('1676563200, 1676735999', 'end' , 'YYYY.MM.DD hh:mm:ss') 得到 '2023.02.18 11:59:59'。
*
* @example DATERANGESPLIT(date, 'YYYY-MM-DD')
* @namespace 日期函数
* @param {string} date 日期范围字符串
* @param {string} key 取值标识,0或'start'表示获取开始时间,1或'end'表示获取结束时间
* @param {string} format 日期格式,可选
* @param {string} delimiter 分隔符,可选,默认为','
*
* @returns {string} 日期字符串
*/
fnDATERANGESPLIT(daterange: string, key?: string, format?: string, delimiter?: string): string | string[];
/**
* 返回日期的指定范围的开端。
*
* @namespace 日期函数
* @example STARTOF(date[unit = "day"])
* @param {date} date 日期对象
* @param {string} unit 比如可以传入 'day'、'month'、'year' 或者 `week` 等等
* @param {string} format 日期格式,可选
* @returns {any} 新的日期对象, 如果传入 format 则返回格式化后的日期字符串
*/
fnSTARTOF(date: Date, unit?: any, format?: string): string | Date;
/**
* 返回日期的指定范围的末尾。
*
* @namespace 日期函数
* @example ENDOF(date[unit = "day"])
* @param {date} date 日期对象
* @param {string} unit 比如可以传入 'day'、'month'、'year' 或者 `week` 等等
* @param {string} format 日期格式,可选
* @returns {any} 新的日期对象, 如果传入 format 则返回格式化后的日期字符串
*/
fnENDOF(date: Date, unit?: any, format?: string): string | Date;
normalizeDate(raw: any): Date;
normalizeDateRange(raw: string | Date[]): Date[];
/**
* 返回日期的年份。
*
* @namespace 日期函数
* @example YEAR(date)
* @param {date} date 日期对象
* @returns {number} 数值
*/
fnYEAR(date: Date): number;
/**
* 返回日期的月份,这里就是自然月份。
*
* @namespace 日期函数
* @example MONTH(date)
* @param {date} date 日期对象
* @returns {number} 数值
*/
fnMONTH(date: Date): number;
/**
* 返回日期的天。
*
* @namespace 日期函数
* @example DAY(date)
* @param {date} date 日期对象
* @returns {number} 数值
*/
fnDAY(date: Date): number;
/**
* 返回日期的小时。
*
* @param {date} date 日期对象
* @namespace 日期函数
* @example HOUR(date)
* @returns {number} 数值
*/
fnHOUR(date: Date): number;
/**
* 返回日期的分。
*
* @param {date} date 日期对象
* @namespace 日期函数
* @example MINUTE(date)
* @returns {number} 数值
*/
fnMINUTE(date: Date): number;
/**
* 返回日期的秒。
*
* @param {date} date 日期对象
* @namespace 日期函数
* @example SECOND(date)
* @returns {number} 数值
*/
fnSECOND(date: Date): number;
/**
* 返回两个日期相差多少年。
*
* @param {date} endDate 日期对象
* @param {date} startDate 日期对象
* @namespace 日期函数
* @example YEARS(endDate, startDate)
* @returns {number} 数值
*/
fnYEARS(endDate: Date, startDate: Date): number;
/**
* 返回两个日期相差多少分钟。
*
* @param {date} endDate 日期对象
* @param {date} startDate 日期对象
* @namespace 日期函数
* @example MINUTES(endDate, startDate)
* @returns {number} 数值
*/
fnMINUTES(endDate: Date, startDate: Date): number;
/**
* 返回两个日期相差多少天。
*
* @param {date} endDate 日期对象
* @param {date} startDate 日期对象
* @namespace 日期函数
* @example DAYS(endDate, startDate)
* @returns {number} 数值
*/
fnDAYS(endDate: Date, startDate: Date): number;
/**
* 返回两个日期相差多少小时。
*
* @param {date} endDate 日期对象
* @param {date} startDate 日期对象
* @namespace 日期函数
* @example HOURS(endDate, startDate)
* @returns {number} 数值
*/
fnHOURS(endDate: Date, startDate: Date): number;
/**
* 修改日期,对日期进行加减天、月份、年等操作。
*
* 示例:
*
* DATEMODIFY(A, -2, 'month'),
*
* 对日期 A 进行往前减2月的操作。
*
* @param {date} date 日期对象
* @param {number} num 数值
* @param {string} unit 单位:支持年、月、天等等
* @namespace 日期函数
* @example DATEMODIFY(date, 2, 'days')
* @returns {date} 日期对象
*/
fnDATEMODIFY(date: Date, num: number, format: any): Date;
/**
* 将字符日期转成日期对象,可以指定日期格式。
*
* 示例:STRTODATE('2021/12/6', 'YYYY/MM/DD')
*
* @param {string} value 日期字符
* @param {string} format 日期格式
* @namespace 日期函数
* @example STRTODATE(value[, format=""])
* @returns {date} 日期对象
*/
fnSTRTODATE(value: any, format?: string): Date;
/**
* 判断两个日期,是否第一个日期在第二个日期的前面,是则返回 true,否则返回 false。
*
* @param {date} a 第一个日期
* @param {date} b 第二个日期
* @param {string} unit 单位,默认是 'day', 即之比较到天
* @namespace 日期函数
* @example ISBEFORE(a, b)
* @returns {boolean} 判断结果
*/
fnISBEFORE(a: Date, b: Date, unit?: any): boolean;
/**
* 判断两个日期,是否第一个日期在第二个日期的后面,是则返回 true,否则返回 false。
*
* @param {date} a 第一个日期
* @param {date} b 第二个日期
* @param {string} unit 单位,默认是 'day', 即之比较到天
* @namespace 日期函数
* @example ISAFTER(a, b)
* @returns {boolean} 判断结果
*/
fnISAFTER(a: Date, b: Date, unit?: any): boolean;
/**
* 判断日期是否在指定范围内,是则返回 true,否则返回 false。
*
* 示例:BETWEENRANGE('2021/12/6', ['2021/12/5','2021/12/7'])。
*
* @param {any} date 第一个日期
* @param {any[]} daterange 日期范围
* @param {string} unit 单位,默认是 'day', 即之比较到天
* @param {string} inclusivity 包容性规则,默认为'[]'。[ 表示包含、( 表示排除,如果使用包容性参数,则必须传入两个指示符,如'()'表示左右范围都排除
* @namespace 日期函数
* @example BETWEENRANGE(date, [start, end])
* @returns {boolean} 判断结果
*/
fnBETWEENRANGE(date: Date, daterange: Date[], unit?: any, inclusivity?: '[]' | '()' | '(]' | '[)'): boolean;
/**
* 判断两个日期,是否第一个日期在第二个日期的前面或者相等,是则返回 true,否则返回 false。
*
* @param {date} a 第一个日期
* @param {date} b 第二个日期
* @param {string} unit 单位,默认是 'day', 即之比较到天
* @namespace 日期函数
* @example ISSAMEORBEFORE(a, b)
* @returns {boolean} 判断结果
*/
fnISSAMEORBEFORE(a: Date, b: Date, unit?: any): boolean;
/**
* 判断两个日期,是否第一个日期在第二个日期的后面或者相等,是则返回 true,否则返回 false。
*
* @param {date} a 第一个日期
* @param {date} b 第二个日期
* @param {string} unit 单位,默认是 'day', 即之比较到天
* @namespace 日期函数
* @example ISSAMEORAFTER(a, b)
* @returns {boolean} 判断结果
*/
fnISSAMEORAFTER(a: Date, b: Date, unit?: any): boolean;
/**
* 返回数组的长度。
*
* @param {Array<any>} arr 数组
* @namespace 数组
* @example COUNT(arr)
* @returns {number} 结果
*/
fnCOUNT(value: any): number;
/**
* 数组做数据转换,需要搭配箭头函数一起使用,注意箭头函数只支持单表达式用法。
*
* 将数组中的每个元素转换成箭头函数返回的值。
*
* 示例:
*
* ARRAYMAP([1, 2, 3], item => item + 1) 得到 [2, 3, 4]。
*
* @param {Array<any>} arr 数组
* @param {Function<any>} iterator 箭头函数
* @namespace 数组
* @example ARRAYMAP(arr, item => item)
* @returns {Array<any>} 返回转换后的数组
*/
fnARRAYMAP(value: any, iterator: any): any[];
/**
* 数据做数据过滤,需要搭配箭头函数一起使用,注意箭头函数只支持单表达式用法。
* 将第二个箭头函数返回为 false 的成员过滤掉。
*
* 示例:
*
* ARRAYFILTER([1, 2, 3], item => item > 1) 得到 [2, 3]。
*
* @param {Array<any>} arr 数组
* @param {Function<any>} iterator 箭头函数
* @namespace 数组
* @example ARRAYFILTER(arr, item => item)
* @returns {Array<any>} 返回过滤后的数组
*/
fnARRAYFILTER(value: any, iterator: any): any[];
/**
* 数据做数据查找,需要搭配箭头函数一起使用,注意箭头函数只支持单表达式用法。
* 找出第二个箭头函数返回为 true 的成员的索引。
*
* 示例:
*
* ARRAYFINDINDEX([0, 2, false], item => item === 2) 得到 1。
*
* @param {Array<any>} arr 数组
* @param {Function<any>} iterator 箭头函数
* @namespace 数组
* @example ARRAYFINDINDEX(arr, item => item === 2)
* @returns {number} 结果
*/
fnARRAYFINDINDEX(arr: any[], iterator: any): number;
/**
* 数据做数据查找,需要搭配箭头函数一起使用,注意箭头函数只支持单表达式用法。
* 找出第二个箭头函数返回为 true 的成员。
*
* 示例:
*
* ARRAYFIND([0, 2, false], item => item === 2) 得到 2。
*
* @param {Array<any>} arr 数组
* @param {Function<any>} iterator 箭头函数
* @namespace 数组
* @example ARRAYFIND(arr, item => item === 2)
* @returns {any} 结果
*/
fnARRAYFIND(arr: any[], iterator: any): any;
/**
* 数据做数据遍历判断,需要搭配箭头函数一起使用,注意箭头函数只支持单表达式用法。
* 判断第二个箭头函数是否存在返回为 true 的成员,是则返回 true,否则返回 false。
*
* 示例:
*
* ARRAYSOME([0, 2, false], item => item === 2) 得到 true。
*
* @param {Array<any>} arr 数组
* @param {Function<any>} iterator 箭头函数
* @namespace 数组
* @example ARRAYSOME(arr, item => item === 2)
* @returns {boolean} 结果
*/
fnARRAYSOME(arr: any[], iterator: any): boolean;
/**
* 数据做数据遍历判断,需要搭配箭头函数一起使用,注意箭头函数只支持单表达式用法。
* 判断第二个箭头函数返回是否都为 true,是则返回 true,否则返回 false。
*
* 示例:
*
* ARRAYEVERY([0, 2, false], item => item === 2) 得到 false
*
* @param {Array<any>} arr 数组
* @param {Function<any>} iterator 箭头函数
* @namespace 数组
* @example ARRAYEVERY(arr, item => item === 2)
* @returns {boolean} 结果
*/
fnARRAYEVERY(arr: any[], iterator: any): boolean;
/**
* 判断数据中是否存在指定元素。
*
* 示例:
*
* ARRAYINCLUDES([0, 2, false], 2) 得到 true。
*
* @param {Array<any>} arr 数组
* @param {any} item 元素
* @namespace 数组
* @example ARRAYINCLUDES(arr, 2)
* @returns {any} 结果
*/
fnARRAYINCLUDES(arr: any[], item: any): boolean;
/**
* 数组过滤掉 false、null、0 和 ""。
*
* 示例:
*
* COMPACT([0, 1, false, 2, '', 3]) 得到 [1, 2, 3]。
*
* @param {Array<any>} arr 数组
* @namespace 数组
* @example COMPACT(arr)
* @returns {Array<any>} 结果
*/
fnCOMPACT(arr: any[]): any[];
/**
* 数组转成字符串。
*
* 示例:
*
* JOIN(['a', 'b', 'c'], '=') 得到 'a=b=c'。
*
* @param {Array<any>} arr 数组
* @param { String} separator 分隔符
* @namespace 数组
* @example JOIN(arr, string)
* @returns {string} 结果
*/
fnJOIN(arr: any[], separator?: string): string;
/**
* 数组合并。
*
* 示例:
*
* CONCAT(['a', 'b', 'c'], ['1'], ['3']) 得到 ['a', 'b', 'c', '1', '3']。
*
* @param {Array<any>} arr 数组
* @namespace 数组
* @example CONCAT(['a', 'b', 'c'], ['1'], ['3'])
* @returns {Array<any>} 结果
*/
fnCONCAT(...arr: any[]): any;
/**
* 数组去重,第二个参数「field」,可指定根据该字段去重。
*
* 示例:
*
* UNIQ([{a: '1'}, {b: '2'}, {a: '1'}]) 得到 [{a: '1'}, {b: '2'}]。
*
* @param {Array<any>} arr 数组
* @param {string} field 字段
* @namespace 数组
* @example UNIQ([{a: '1'}, {b: '2'}, {a: '1'}])
* @example UNIQ([{a: '1'}, {b: '2'}, {a: '1'}], 'x')
* @returns {Array<any>} 结果
*/
fnUNIQ(arr: any[], field?: string): any[];
/**
* 将JS对象转换成JSON字符串。
*
* 示例:
*
* ENCODEJSON({name: 'amis'}) 得到 '{"name":"amis"}'。
*
* @param {object} obj JS对象
* @namespace 编码
* @example ENCODEJSON({name: 'amis'})
* @returns {string} 结果
*/
fnENCODEJSON(obj: object): string;
/**
* 解析JSON编码数据,返回JS对象。
*
* 示例:
*
* DECODEJSON('{\"name\": "amis"}') 得到 {name: 'amis'}。
*
* @param {string} str 字符串
* @namespace 编码
* @example DECODEJSON('{\"name\": "amis"}')
* @returns {object} 结果
*/
fnDECODEJSON(str: string): object;
/**
* 根据对象或者数组的path路径获取值。 如果解析 value 是 undefined 会以 defaultValue 取代。
*
* 示例:
*
* GET([0, 2, {name: 'amis', age: 18}], 1) 得到 2,
* GET([0, 2, {name: 'amis', age: 18}], '2.name') 得到 'amis',
* GET({arr: [{name: 'amis', age: 18}]}, 'arr[0].name') 得到 'amis',
* GET({arr: [{name: 'amis', age: 18}]}, 'arr.0.name') 得到 'amis',
* GET({arr: [{name: 'amis', age: 18}]}, 'arr.1.name', 'not-found') 得到 'not-found'。
*
* @param {any} obj 对象或数组
* @param {string} path 路径
* @param {any} defaultValue 如果解析不到则返回该值
* @namespace 其他
* @example GET(arr, 2)
* @returns {any} 结果
*/
fnGET(obj: any, path: string, defaultValue?: any): any;
/**
* 判断是否为类型支持:string, number, array, date, plain-object。
*
* @param {string} 判断对象
* @namespace 其他
* @example ISTYPE([{a: '1'}, {b: '2'}, {a: '1'}], 'array')
* @returns {boolean} 结果
*/
fnISTYPE(target: any, type: 'string' | 'number' | 'array' | 'date' | 'plain-object' | 'nil'): boolean;
}
export declare function getCookie(name: string): string | undefined;
export declare function parseJson(str: string, defaultValue?: any): any;
export declare function stripNumber(number: number): number;
export declare function normalizeArgs(args: Array<any>): any[];
export declare function createObject(superProps?: {
[propName: string]: any;
}, props?: {
[propName: string]: any;
}, properties?: any): object;
export declare function createStr(): string;
export declare function uuidv4(): string;