Skip to content

sfcc/no-string-raw

Disallows String.raw in SFCC server-side JavaScript.

What it checks

  • Reports tagged templates such as String.raw`line1\nline2`
  • Reports direct calls such as String.raw({ raw: ["value"] })
  • Ignores locally shadowed bindings named String
  • Auto-fixes tagged templates without interpolations to an equivalent escaped string literal
  • Leaves interpolated templates and direct calls for manual migration

Why this rule exists

Affected Rhino versions can represent composed JavaScript strings as an internal ConsString. That value can leak through Java-backed object boundaries used by SFCC and fail where platform code expects a java.lang.String. The underlying interoperability behavior is discussed in Rhino issue #247.

String.raw is valid ECMAScript and is implemented by Rhino, but it is not reliable across this SFCC runtime boundary. Regular string literals avoid that implementation path.

Default behavior

  • Severity: error
  • Auto-fix: replaces interpolation-free tagged templates with an equivalent string literal

Example

Invalid
js
const lineBreak = String.raw`\r\n`
Valid
js
const lineBreak = "\\r\\n"

Interpolated templates require a manual replacement so the migration does not introduce another Rhino string-concatenation boundary:

Invalid
js
const path = String.raw`catalog\\${catalogId}`

Released under the MIT License.