mcpField
E
es5-compliance

es5-compliance

github.com/serac-labsDevelopment7760 installsUpdated 9w ago
Repository

About es5-compliance

An ES5 compliance skill for ServiceNow server-side script developers. It documents unsupported syntax in Rhino and shows ES5 alternatives for common JavaScript patterns.

Key features

  1. 01Lists unsupported ES6+ syntax
  2. 02Shows ES5 alternatives
  3. 03Covers pre-deployment syntax checks
  4. 04Distinguishes server and client script rules

Use cases

  1. 01Writing ServiceNow server-side scripts
  2. 02Checking syntax before deployment
  3. 03Rewriting modern JavaScript in ES5

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/serac-labs/serac --skill es5-compliance

After installing, type/es5-compliancein Claude Code to confirm it loaded.

Details

From the project README

ES5 Compliance for ServiceNow

ServiceNow runs on Mozilla Rhino engine which only supports ES5 JavaScript (2009 standard). All server-side scripts MUST use ES5 syntax.

Forbidden Syntax (WILL CAUSE SyntaxError)

ES6+ SyntaxES5 Alternative
const x = 5var x = 5
let items = []var items = []
() => {}function() {}
`Hello ${name}`'Hello ' + name
for (x of arr)for (var i = 0; i < arr.length; i++)
{a, b} = objvar a = obj.a; var b = obj.b;
[a, b] = arrvar a = arr[0]; var b = arr[1];
...spreadUse Array.prototype.slice.call()
class MyClass {}Use constructor functions
async/awaitUse GlideRecord callbacks
PromiseUse GlideRecord with callbacks

Common Patterns

Variable Declarations
// WRONG - ES6
const MAX_RETRIES = 3
let currentUser = gs.getUser()

// CORRECT - ES5
var MAX_RETRIES = 3
var currentUser = gs.getUser()
Functions
// WRONG - Arrow functions
var active = incidents.filter((inc) => inc.active)
var process = () => {
  return "done"
}

// CORRECT - ES5 functions
var active = []
for (var i = 0; i < incidents.length; i++) {
  if (incidents[i].active) {
    active.push(incidents[i])
  }
}
var process = function () {
  return "done"
}
String Concatenation
// WRONG - Template literals
var message = `Incident ${number} assigned to ${user}`

// CORRECT - String concatenation
var message = "Incident " + number + " assigned to " + user
Loops
// WRONG - for...of
for (var item of items) {
  gs.info(item)
}

// CORRECT - Traditional for loop
for (var i = 0; i < items.length; i++) {
  gs.info(items[i])
}
Default Parameters
// WRONG - Default parameters
function process(incident, priority = 3) {
  // ...
}

// CORRECT - Manual defaults
function process(incident, priority) {
  if (typeof priority === "undefined") {
    priority = 3
  }
  // ...
}

Automatic Validation

Before deploying any server-side script:

  1. Check for const/let declarations - convert to var
  2. Check for arrow functions => - convert to function()
  3. Check for template literals ` - convert to string concatenation
  4. Check for destructuring {a, b} - convert to explicit property access
  5. Check for for...of loops - convert to index-based loops

Exception: Client Scripts

Client-side scripts (Client Scripts, UI Policies) run in the browser and MAY support ES6+ depending on user's browser. However, for maximum compatibility, ES5 is still recommended.

Comments

Markdown supported