toJSIdentifier function
Escape name to make it into a valid identifier.
Implementation
String toJSIdentifier(String name) {
if (name.isEmpty) return r'$';
// Escape any invalid characters
StringBuffer? buffer;
for (var i = 0; i < name.length; i++) {
final ch = name[i];
final needsEscape = ch == r'$' || _invalidCharInIdentifier.hasMatch(ch);
if (needsEscape) {
buffer ??= StringBuffer(name.substring(0, i));
}
buffer?.write(needsEscape ? '\$${ch.codeUnits.join("")}' : ch);
}
final result = buffer != null ? '$buffer' : name;
// Ensure the identifier first character is not numeric and that the whole
// identifier is not a keyword.
if (result.startsWith(RegExp('[0-9]')) || invalidVariableName(result)) {
return '\$$result';
}
return result;
}