43 lines
863 B
JavaScript
43 lines
863 B
JavaScript
/**
|
|
* Properly escape JSON for usage as an object literal inside of a `<script>` tag.
|
|
* JS implementation of http://golang.org/pkg/encoding/json/#HTMLEscape
|
|
* More info: http://timelessrepo.com/json-isnt-a-javascript-subset
|
|
*/
|
|
|
|
'use strict';
|
|
|
|
var ESCAPE_LOOKUP = {
|
|
'&': '\\u0026',
|
|
'>': '\\u003e',
|
|
'<': '\\u003c',
|
|
'\u2028': '\\u2028',
|
|
'\u2029': '\\u2029'
|
|
};
|
|
|
|
var ESCAPE_REGEX = /[&><\u2028\u2029]/g;
|
|
|
|
function escaper(match) {
|
|
return ESCAPE_LOOKUP[match];
|
|
}
|
|
|
|
module.exports = function(obj) {
|
|
return JSON.stringify(obj).replace(ESCAPE_REGEX, escaper);
|
|
};
|
|
|
|
/***/
|
|
|
|
var TERMINATORS_LOOKUP = {
|
|
'\u2028': '\\u2028',
|
|
'\u2029': '\\u2029'
|
|
};
|
|
|
|
var TERMINATORS_REGEX = /[\u2028\u2029]/g;
|
|
|
|
function sanitizer(match) {
|
|
return TERMINATORS_LOOKUP[match];
|
|
}
|
|
|
|
module.exports.sanitize = function(str) {
|
|
return str.replace(TERMINATORS_REGEX, sanitizer);
|
|
};
|