skills/groeimetai/snow-flow/es5-compliance

es5-compliance

SKILL.md

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+ Syntax ES5 Alternative
const x = 5 var 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} = obj var a = obj.a; var b = obj.b;
[a, b] = arr var a = arr[0]; var b = arr[1];
...spread Use Array.prototype.slice.call()
class MyClass {} Use constructor functions
async/await Use GlideRecord callbacks
Promise Use 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.

Weekly Installs
50
GitHub Stars
53
First Seen
Jan 22, 2026
Installed on
claude-code45
gemini-cli44
opencode44
codex44
cursor43
github-copilot43