All Projects → PropicSignifi → Script.apex

PropicSignifi / Script.apex

Licence: MIT License
Evaluate Javascript expressions in Apex

Programming Languages

Apex
172 projects
TeX
3793 projects

Projects that are alternatives of or similar to Script.apex

R.apex
Functional utility library for Apex
Stars: ✭ 80 (+344.44%)
Mutual labels:  salesforce, apex, salesforce-developers
NebulaFramework
A development framework for Salesforce's Apex language & the Force.com platform
Stars: ✭ 28 (+55.56%)
Mutual labels:  salesforce, apex, salesforce-developers
apex-rollup
Fast, configurable, elastically scaling custom rollup solution. Apex Invocable action, one-liner Apex trigger/CMDT-driven logic, and scheduled Apex-ready.
Stars: ✭ 133 (+638.89%)
Mutual labels:  salesforce, apex, salesforce-developers
apex-fp
Functional programming for Salesforce Apex
Stars: ✭ 231 (+1183.33%)
Mutual labels:  salesforce, apex, salesforce-developers
apex-utils
Utility classes for Salesforce Apex development
Stars: ✭ 20 (+11.11%)
Mutual labels:  salesforce, apex, salesforce-developers
apex-tmLanguage
Salesforce Apex Language syntax grammar used for colorization
Stars: ✭ 27 (+50%)
Mutual labels:  salesforce, apex, salesforce-developers
apex-mocks-stress-test
Testing out FFLib versus Crud / CrudMock
Stars: ✭ 47 (+161.11%)
Mutual labels:  salesforce, apex, salesforce-developers
Apex-Code-Conventions
Apex conventions and best practices for Salesforce Developers
Stars: ✭ 28 (+55.56%)
Mutual labels:  salesforce, apex, salesforce-developers
apex-dml-mocking
DML mocking, CRUD mocking, dependency injection framework for Salesforce.com (SFDC) using Apex
Stars: ✭ 38 (+111.11%)
Mutual labels:  salesforce, apex, salesforce-developers
apexmock
force.com Mock data and fixtures for Apex Unit Tests
Stars: ✭ 24 (+33.33%)
Mutual labels:  salesforce, apex, salesforce-developers
HTTPCalloutFramework
HTTP Callout Framework - A light weight callout framework for apex HTTP callouts in Salesforce
Stars: ✭ 43 (+138.89%)
Mutual labels:  salesforce, salesforce-developers
apex-graphql-query
A library for building GraphQL queries in apex
Stars: ✭ 31 (+72.22%)
Mutual labels:  salesforce, apex
lwc-redux
Integrate Redux with Lightning Web Component
Stars: ✭ 35 (+94.44%)
Mutual labels:  salesforce, salesforce-developers
SFDCRules
Simple yet powerful Rule Engine for Salesforce - SFDCRules
Stars: ✭ 38 (+111.11%)
Mutual labels:  salesforce, apex
APEX-Q
A promise library for Salesforce
Stars: ✭ 30 (+66.67%)
Mutual labels:  salesforce, apex
sf-cross-cutting-concerns
Apex Cross cutting concerns for Salesforce
Stars: ✭ 29 (+61.11%)
Mutual labels:  salesforce, apex
eval-estree-expression
Safely evaluate JavaScript (estree) expressions, sync and async.
Stars: ✭ 22 (+22.22%)
Mutual labels:  parse, evaluate-expressions
lwc-modules
Build any LWC you want without ever having to touch Apex
Stars: ✭ 20 (+11.11%)
Mutual labels:  salesforce, apex
Salesforce-Short-Hands
The main purpose of this repository is to put all the utilities in one place so that other developers can get help and they can also contribute to this repo.
Stars: ✭ 31 (+72.22%)
Mutual labels:  salesforce, salesforce-developers
ApexTriggerHandler
Another library implements Apex trigger handler design pattern.
Stars: ✭ 40 (+122.22%)
Mutual labels:  salesforce, apex

Script.apex

Script.apex help you run JavaScript code in Apex. Basically, it compiles JavaScript code into semantic nodes, which are then evaluated in native Apex. The JavaScript expression parser in Script.apex is porting from jsep.

Features

  • Parse JavaScript code into semantic nodes
  • Evaluate nodes in Apex
  • Parsed nodes are cached to improve performance

Usage

Here is how we evaluate arithmatic expressions.

Object result = ScriptEngine.getInstance().eval('1 + 2 * (3 - 1)');

Or we can evaluate expressions consuming variables like this:

Map<String, Object> context = new Map<String, Object>{
    'a' => 1,
    'b' => 2
};
Object result = ScriptEngine.getInstance().eval('a + b', context);

Or we can parse the nodes first, and the evaluate them:

Jsep.Node node = new Jsep('1 + 2').parse();
Object result = ScriptEngine.getInstance().eval(node);

Supported Operations

Supported Unary Operator

Name Description
- Negate number
! Negate boolean
++ Only prefix supported
-- Only prefix supported

Supported Logical Operator

Name Description
&& Logical and
|| Logical or

Supported Binary Operator

Name Description
== Apex ==
!= Apex !=
=== Apex ==
!== Apex !=
< Apex <
> Apex >
<= Apex <=
>= Apex >=
+ Apex +
- Apex -
* Apex *
/ Apex /
% Apex Math.mod

Supported Structure

Name Description
Conditional Expression(? :) Yes
Array Literal Yes
Object Literal Yes

For example,

ScriptEngine.getInstance.eval('["a", "b"]'); // Array literal

ScriptEngine.getInstance.eval('{ "name": "test", age: 18 }'); // Object literal

Todos

Assignment Expression Evaluation

Assignment expressions can be parsed, but cannot be evaluated yet.

Function Invocation

Functions(methods) can be parsed now, but invocation is not implemented yet.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].