safe-string-literal
v1.0.5
Published
Escapes and Unescapes strings into safe literals.
Downloads
10,593
Maintainers
Readme
Safe-String-Literal
Escapes and Unescapes strings into safe literals.
Based on ES2015, these special characters will be escaped by default (unless
setting excludes
option):
"
'
- `
\
\b
\f
\n
\r
\t
\u2028
\u2029
The escaped strings are very alike with the strings that JSON.stringify
produces, but with support of extra characters `, \u2089
and
\u2029
.
Install
Node.js
npm i safe-string-literal
Deno
import { escape, unescape } from "https://deno.land/x/safe_string_literal/index.js";
// Or
import { escape, unescape } from "https://gtihub.com/ayonli/safe-string-literal/raw/master/index.js";
API
escape(str: string, excludes?: string | string[]): string
unescape(str: string): string
Example (Node.js)
/* global describe, it */
"use strict";
const assert = require("assert");
const { escape, unescape } = require("safe-string-literal");
var inputs = [
"string' with' single' quotes",
'string" with" double" quotes',
"string` with` back` quotes",
"string\\ with\\ backslashes",
"string\b with\b backspaces",
"string\f with\f from\f feed\f char",
"string\n with\n new\n line\n char",
"string\r with\r return\r char",
"string\t with\t tab\t char",
"string\u2028 with\u2028 unicode\u2028 2028",
"string\u2029 with\u2029 unicode\u2029 2029",
"a' string\" contains` all\\ characters\b that\f should\n be\r escaped\t, with\u2028 no\u2029 exceptions",
"a' string\" contains` all\\ characters\b that\f should\n be\r escaped\t, with\u2028 one\u2029 exception",
"a' string\" contains` all\\ characters\b that\f should\n be\r escaped\t, with\u2028 several\u2029 exceptions",
"another' string\" contains` all\\ characters\b that\f should\n be\r escaped\t, with\u2028 several\u2029 exceptions"
];
var outputs = [
"string\\' with\\' single\\' quotes",
'string\\" with\\" double\\" quotes',
"string\\` with\\` back\\` quotes",
"string\\\\ with\\\\ backslashes",
"string\\b with\\b backspaces",
"string\\f with\\f from\\f feed\\f char",
"string\\n with\\n new\\n line\\n char",
"string\\r with\\r return\\r char",
"string\\t with\\t tab\\t char",
"string\\u2028 with\\u2028 unicode\\u2028 2028",
"string\\u2029 with\\u2029 unicode\\u2029 2029",
"a\\' string\\\" contains\\` all\\\\ characters\\b that\\f should\\n be\\r escaped\\t, with\\u2028 no\\u2029 exceptions",
"a' string\\\" contains\\` all\\\\ characters\\b that\\f should\\n be\\r escaped\\t, with\\u2028 one\\u2029 exception",
"a' string\" contains\\` all\\\\ characters\\b that\\f should\\n be\\r escaped\\t, with\\u2028 several\\u2029 exceptions",
"another\\' string\" contains` all\\\\ characters\\b that\\f should\\n be\\r escaped\\t, with\\u2028 several\\u2029 exceptions"
];
describe("Escape", () => {
it("should escape strings and produce expected results", () => {
for (let i = 0; i < inputs.length; i++) {
if (i === 12) {
assert.strictEqual(escape(inputs[i], "'"), outputs[i]);
} else if (i === 13) {
assert.strictEqual(escape(inputs[i], "'\""), outputs[i]);
} else if (i === 14) {
assert.strictEqual(escape(inputs[i], "\"`"), outputs[i]);
} else {
assert.strictEqual(escape(inputs[i]), outputs[i]);
}
}
});
});
describe("Unescape", () => {
it("should unescape strings and produce expected results", () => {
for (let i = 0; i < outputs.length; i++) {
assert.strictEqual(unescape(outputs[i]), inputs[i]);
}
});
});