6.25.2 • Published 5 months ago

formulon v6.25.2

Weekly downloads
393
License
MIT
Repository
github
Last release
5 months ago

Formulon

semantic-release

Dependency Status devDependency Status

Circle CI

Formulon is a Parser for Salesforce Formulas completely written in ECMA Script 2015. It is the engine behind formulon.io.

Featured on Phil's Tip of the Week

Use Cases

  • Test your Salesforce formulas using the web interface without the need of creating records
  • Parse formula input programmatically and evaluate correctness outside of a Salesforce org
  • In general if you use the Metadata API to add/change formulas, you could benefit from parsing formulas before submitting back to Salesforce

Usage

parse

This method will return a object holding value and its metadata

import { parse } from 'formulon'

Examples

parse('IF(TRUE, "True String", "False String")')
// {
//  type: 'literal',
//  value: 'True String',
//  dataType: 'text',
//  options: { length: 11 }
// }

type: Metadata from the parser (always literal) value: The value of the result always as a string dataType: The type of the return (currently number, text, checkbox, date, time, datetime, geolocation or null) options: different options per data type

Data Types

Currently the following data types are supported (naming is taken from the Salesforce Field Types):

  • Number (Integer or Float depending on the options)
  • Text
  • Checkbox (TRUE or FALSE)
  • Date (as UTC Date with time components set to 0)
  • Time (as UTC Date with date set to 1970-01-01)
  • Datetime (as UTC Date)
  • Geolocation (as lat, long array)
  • Null (js null value)

Options

Options depend on the data type:

Number
  • Length: Number of digits to the left of the decimal point
  • Scale: Number of digits to the right of the decimal point
Text
  • Length: Number of characters
Checkbox

no options

Errors

Whenever an error occurs, an according object is returned:

parse('IF(TRUE)')
// {
//   type: 'error',
//   errorType: 'ArgumentError',
//   message: "Incorrect number of parameters for function 'IF()'. Expected 3, received 1",
//   function: 'if',
//   expected: 3,
//   received: 1,
// }

Identifiers (Variables)

It's possible to specify formulas that contain variables. In that case pass the value of the variable in as a second argument:

parse('IF(Variable__c, "True String", "False String")', {Variable__c: {type: 'literal', dataType: 'checkbox', value: true}})
// {
//  type: 'literal',
//  value: 'True String',
//  dataType: 'text',
//  options: { length: 11 }
// }

You'll have to provide the variable in the form:

{
  type: 'literal',
  value: <the actual value as a JS type>,
  dataType: <the salesforce field type specified above>,
  options: <salesforce field options>
}

extract

Utility function that returns a list of used variables

extract('IF(Variable__c, Variable__c, AnotherVariable__c)')
// [ 'Variable__c', 'AnotherVariable__c' ]

ast

Return the abstract syntax tree built from the formula.

ast('IF(Variable__c, "True String", "False String")')
// {
//   "type": "callExpression",
//   "id": "if",
//   "arguments": [
//     {
//       "type": "identifier",
//       "name": "Variable__c"
//     },
//     {
//       "type": "literal",
//       "value": "True String",
//       "dataType": "text",
//       "options": {
//         "length": 11
//       }
//     },
//     {
//       "type": "literal",
//       "value": "False String",
//       "dataType": "text",
//       "options": {
//         "length": 12
//       }
//     }
//   ]
// }

Contributors

Formulon exists thanks to the following people who have contributed.

6.25.2

5 months ago

6.25.1

11 months ago

6.24.3

1 year ago

6.25.0

1 year ago

6.24.2

1 year ago

6.24.0

1 year ago

6.24.1

1 year ago

6.23.7

2 years ago

6.23.8

2 years ago

6.23.5

2 years ago

6.23.6

2 years ago

6.23.9

2 years ago

6.23.3

2 years ago

6.23.4

2 years ago

6.23.2

2 years ago

6.23.1

2 years ago

6.23.0

3 years ago

6.22.0

4 years ago

6.21.0

4 years ago

6.20.0

4 years ago

6.19.7

4 years ago

6.19.6

4 years ago

6.19.5

4 years ago

6.19.4

4 years ago

6.19.2

4 years ago

6.19.3

4 years ago

6.19.0

4 years ago

6.19.1

4 years ago

6.18.0

4 years ago

6.17.0

4 years ago

6.16.3

4 years ago

6.16.2

4 years ago

6.16.1

4 years ago

6.16.0

4 years ago

6.15.0

4 years ago

6.14.1

4 years ago

6.14.0

4 years ago

6.12.0

4 years ago

6.13.0

4 years ago

6.11.1

4 years ago

6.11.0

4 years ago

6.10.0

4 years ago

6.9.0

4 years ago

6.8.0

4 years ago

6.7.2

4 years ago

6.7.1

4 years ago

6.7.0

4 years ago

6.5.0

4 years ago

6.6.0

4 years ago

6.3.0

4 years ago

6.4.0

4 years ago

6.2.1

4 years ago

6.2.0

4 years ago

6.1.0

4 years ago

6.0.0

4 years ago

2.4.0

4 years ago

2.3.3

7 years ago

2.3.2

7 years ago

2.3.1

7 years ago

2.3.0

8 years ago

5.0.0

8 years ago

4.0.0

8 years ago

3.0.0

8 years ago

2.2.1

8 years ago

2.2.0

8 years ago

2.1.0

8 years ago

2.0.0

8 years ago

1.0.1

8 years ago

0.0.0

8 years ago

1.0.0

8 years ago