@huukhanhnguyen/model / expression
expression
ExpressionBudgetError
Thrown when an expression exceeds an evaluation resource budget (step fuel, or a user-controlled array length at a builtin).
Extends
Error
Constructors
Constructor
new ExpressionBudgetError(
message):ExpressionBudgetError
Parameters
message
string
Returns
Overrides
Error.constructor
cause?
optionalcause?:unknown
Inherited from
Error.cause
message
message:
string
Inherited from
Error.message
name
name:
string
Inherited from
Error.name
stack?
optionalstack?:string
Inherited from
Error.stack
stackTraceLimit
staticstackTraceLimit:number
The Error.stackTraceLimit property specifies the number of stack frames collected by a stack trace (whether generated by new Error().stack or Error.captureStackTrace(obj)).
The default value is 10 but may be set to any valid JavaScript number. Changes will affect any stack trace captured after the value has been changed.
If set to a non-number value, or set to a negative number, stack traces will not capture any frames.
Inherited from
Error.stackTraceLimit
Methods
captureStackTrace()
staticcaptureStackTrace(targetObject,constructorOpt?):void
Creates a .stack property on targetObject, which when accessed returns a string representing the location in the code at which Error.captureStackTrace() was called.
const myObject = {};
Error.captureStackTrace(myObject);
myObject.stack; // Similar to `new Error().stack`The first line of the trace will be prefixed with ${myObject.name}: ${myObject.message}.
The optional constructorOpt argument accepts a function. If given, all frames above constructorOpt, including constructorOpt, will be omitted from the generated stack trace.
The constructorOpt argument is useful for hiding implementation details of error generation from the user. For instance:
function a() {
b();
}
function b() {
c();
}
function c() {
// Create an error without stack trace to avoid calculating the stack trace twice.
const { stackTraceLimit } = Error;
Error.stackTraceLimit = 0;
const error = new Error();
Error.stackTraceLimit = stackTraceLimit;
// Capture the stack trace above function b
Error.captureStackTrace(error, b); // Neither function c, nor b is included in the stack trace
throw error;
}
a();Parameters
targetObject
object
constructorOpt?
Function
Returns
void
Inherited from
Error.captureStackTrace
prepareStackTrace()
staticprepareStackTrace(err,stackTraces):any
Parameters
err
Error
stackTraces
CallSite[]
Returns
any
See
https://v8.dev/docs/stack-trace-api#customizing-stack-traces
Inherited from
Error.prepareStackTrace
Expression
Indexable
[
key:string]:Expression|baseTypes| Expression | baseTypes[]
type
type:
string
collectIdentifiers()
collectIdentifiers(
expr):Set<string>
Every free identifier an expression references (shadow-aware). An unparseable expression yields an empty set — syntax reporting is validateExpressions' job, not this collector's.
Parameters
expr
string
Returns
Set<string>
evaluate()
evaluate(
node,context?,namespaces?):unknown
Evaluate an expression AST. namespaces = the registry's PascalCase computation namespaces (Point, Vector, NurbsCurve, …) for the owning model — per-registry, NOT module-global, so two models on different registries can coexist in one process. They sit on the prototype chain below the JS builtins; node keys (own props of context) shadow both.
Parameters
node
context?
EvalContext = {}
namespaces?
Record<string, unknown>
Returns
unknown
freezeNamespace()
freezeNamespace<
T>(namespace):T
Freeze a RUNTIME-injected namespace (Table, Scene, Material) before an expression can see it. Same threat as the builtins above: [].push.call(Table, 'X') rebinds this to whatever object the DSL holds. The methods are frozen too — a bare function object is just as pollutable as the namespace that carries it.
Type Parameters
T
T extends object
Parameters
namespace
T
Returns
T
parse()
parse(
expr):Expression
Parameters
expr
string
Returns
parseMutable()
parseMutable(
expr):Expression
Parse OUTSIDE the shared cache — for callers that mutate the tree.
Parameters
expr
string
Returns
quoteLiteral()
quoteLiteral(
text):string
Parameters
text
string
Returns
string
renameIdentifier()
renameIdentifier(
expr,oldName,newName):string
Rewrite every reference to oldName as newName in an expression string (used to propagate a node key rename into every formula that referenced it). Returns expr unchanged if it doesn't parse (mid-edit/invalid text) or contains no matching reference.
Parameters
expr
string
oldName
string
newName
string
Returns
string
stringify()
stringify(
node,parentPrec?):string
Parameters
node
parentPrec?
number = 0
Returns
string
Arr
Re-exports Arr
Arrow
Re-exports Arrow
Bin
Re-exports Bin
Call
Re-exports Call
Comp
Re-exports Comp
Cond
Re-exports Cond
EvalContext
Re-exports EvalContext
Fuel
Re-exports Fuel
Ident
Re-exports Ident
Lit
Re-exports Lit
Mem
Re-exports Mem
Obj
Re-exports Obj
ObjProp
Re-exports ObjProp
Un
Re-exports Un