@形式/表达
成形表的CEL: 解析、类型检查、编译和评价,安全性 在服务器上运行作者写的表达式是安全的.
为什么CEL,为什么包裹
条件逻辑和计算值写入 通用表达式语言 而不是一个 JavaScript 子集. CEL 无法循环、无法重现且没有用户定义的函数——终止 是语言的产物,而不是沙盒的产物 有人维护。 这是打字, 当作者保存时, 错误会浮出水面 。 它的语法树名是 一个表达式读取的变量,就是让引擎建立依赖性 在循环形式运行之前,用图和拒绝它.
CEL 执行被包裹, 永不再出口: 完全一个文件导入 这个 破坏执行是一个单一文件的变化,而不是一个生态系统 移徙.
两项负载决定
referencedPaths 永远不能错过一个依赖. 这是引擎的
依赖性图是从中构建的,所以一个被忽略的读取表示一个沉默的字段
停止重算。 综合迭代变量范围正确,
动态指数被压缩到整个集合中,过度报告是
在每一个模棱两可的案件中,都倾向于少报.
成本是计数的,从不计时. 要求步骤 数据读取、理解迭代和集合大小 生产;输入评价的值在边界上。 一个时钟 预算会让文件在浏览器中通过,在繁忙的场合无法重播 服务器,它会打破单引擎的保证.
将地图作为图书馆可以读取的地图. 图书馆讲地图
以 value.constructor,所以一个物体持有自己的一个成员的名字——
有字段键入的组合或行 constructor - 交给它作为一个 Map, (中文(简体) ),
每个成员都读出来 任何读取
(单位:千美元)0185 (英语)) (中文(简体) ).
写着表达式的地图仍然没有 constructor, (中文(简体) ), prototype 或者说
__proto__:图书馆把它们从文字上留下.
能力(now, (中文(简体) ), today, (中文(简体) ), random) 以被冻结的数值到达。 这个包
结构上无法读取时钟 .
使用
import { compile, evaluate, captureCapabilities } from '@formancy/expressions'
const program = compile('country == "CH"', {
kind: 'visible',
variables: { country: 'dyn' },
})
if (!program.ok) throw new Error(program.error.message)
const outcome = evaluate(program.program, { country: 'CH' }, {
capabilities: captureCapabilities({ now: Date.now, today: () => '2026-09-20', random: Math.random }),
})
钱是 decimal 由缩放整数支持,并将其与平数相混合
是一个检查时间错误, 提示命名此修正 -- price * 0.19 被拒绝,
price * dec("0.19") 没错.
成员可以宣布变量, { row: { amount: 'decimal', copies: 'int' } }, (中文(简体) ),
这样 row.amount 被检查为十进制,任何成员均不申报
拒绝。 此变量每次读取一个成员: row 在列表,地图,
某分支或结果因 variable_read_whole
(单位:千美元)0231 (英语)) (中文(简体) ).
文档 : apps/docs (概念-逻辑和表达).