diff options
| author | littleblack111 <littleblack11111@gmail.com> | 2024-10-13 10:37:19 +0800 |
|---|---|---|
| committer | littleblack111 <littleblack11111@gmail.com> | 2024-10-13 10:37:19 +0800 |
| commit | e29b244aeab08ea36fb385c7beb2ad0560217039 (patch) | |
| tree | c66b744dc29573f1acc871862937a23f1b80e6bf /node_modules/jsesc | |
| parent | 62c2881629e6413a8fec6d3dd092e4568e2a81dc (diff) | |
bump: @babel/cli 7.25.6 → 7.25.7, @babel/core 7.25.2 → 7.25.8, @babel/preset-env 7.25.4 → 7.25.8, postcss 8.4.41 → 8.4.47, swup 4.7.0 → 4.8.1
Diffstat (limited to 'node_modules/jsesc')
| -rw-r--r-- | node_modules/jsesc/README.md | 7 | ||||
| -rw-r--r-- | node_modules/jsesc/jsesc.js | 137 | ||||
| -rw-r--r-- | node_modules/jsesc/package.json | 10 |
3 files changed, 73 insertions, 81 deletions
diff --git a/node_modules/jsesc/README.md b/node_modules/jsesc/README.md index aae2b13a..5b622242 100644 --- a/node_modules/jsesc/README.md +++ b/node_modules/jsesc/README.md @@ -1,4 +1,4 @@ -# jsesc [](https://travis-ci.org/mathiasbynens/jsesc) [](https://coveralls.io/r/mathiasbynens/jsesc) [](https://gemnasium.com/mathiasbynens/jsesc) +# jsesc [](https://travis-ci.org/mathiasbynens/jsesc) [](https://coveralls.io/r/mathiasbynens/jsesc) Given some data, _jsesc_ returns a stringified representation of that data. jsesc is similar to `JSON.stringify()` except: @@ -202,6 +202,7 @@ The `minimal` option takes a boolean value (`true` or `false`), and defaults to * U+2028 `\u2028` * U+2029 `\u2029` * whatever symbol is being used for wrapping string literals (based on [the `quotes` option](#quotes)) +* [lone surrogates](https://esdiscuss.org/topic/code-points-vs-unicode-scalar-values#content-14) Note: with this option enabled, jsesc output is no longer guaranteed to be ASCII-safe. @@ -248,7 +249,7 @@ This setting has no effect on the output for strings. #### `indent` -The `indent` option takes a string value, and defaults to `'\t'`. When the `compact` setting is enabled (`true`), the value of the `indent` option is used to format the output for arrays and objects. +The `indent` option takes a string value, and defaults to `'\t'`. When the `compact` setting is disabled (`false`), the value of the `indent` option is used to format the output for arrays and objects. ```js jsesc({ 'Ich ♥ Bücher': 'foo 𝌆 bar' }, { @@ -406,7 +407,7 @@ See `jsesc --help` for the full list of options. ## Support -As of v2.0.0, jsesc supports Node.js v4+ only. +As of v3.0.0, jsesc supports Node.js v6+ only. Older versions (up to jsesc v1.3.0) support Chrome 27, Firefox 3, Safari 4, Opera 10, IE 6, Node.js v6.0.0, Narwhal 0.3.2, RingoJS 0.8-0.11, PhantomJS 1.9.0, and Rhino 1.7RC4. **Note:** Using the `json` option on objects or arrays that contain non-string values relies on `JSON.parse()`. For legacy environments like IE ≤ 7, use [a `JSON` polyfill](https://bestiejs.github.io/json3/). diff --git a/node_modules/jsesc/jsesc.js b/node_modules/jsesc/jsesc.js index 7b8b9236..0f6a4b68 100644 --- a/node_modules/jsesc/jsesc.js +++ b/node_modules/jsesc/jsesc.js @@ -28,9 +28,21 @@ const forEach = (array, callback) => { } }; +const fourHexEscape = (hex) => { + return '\\u' + ('0000' + hex).slice(-4); +} + +const hexadecimal = (code, lowercase) => { + let hexadecimal = code.toString(16); + if (lowercase) return hexadecimal; + return hexadecimal.toUpperCase(); +}; + const toString = object.toString; const isArray = Array.isArray; -const isBuffer = Buffer.isBuffer; +const isBuffer = (value) => { + return typeof Buffer === 'function' && Buffer.isBuffer(value); +}; const isObject = (value) => { // This is a very simple check, but it’s good enough for what we need. return toString.call(value) == '[object Object]'; @@ -57,8 +69,6 @@ const isSet = (value) => { // https://mathiasbynens.be/notes/javascript-escapes#single const singleEscapes = { - '"': '\\"', - '\'': '\\\'', '\\': '\\\\', '\b': '\\b', '\f': '\\f', @@ -68,10 +78,13 @@ const singleEscapes = { // `\v` is omitted intentionally, because in IE < 9, '\v' == 'v'. // '\v': '\\x0B' }; -const regexSingleEscape = /["'\\\b\f\n\r\t]/; +const regexSingleEscape = /[\\\b\f\n\r\t]/; const regexDigit = /[0-9]/; -const regexWhitelist = /[ !#-&\(-\[\]-_a-~]/; +const regexWhitespace = /[\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]/; + +const escapeEverythingRegex = /([\uD800-\uDBFF][\uDC00-\uDFFF])|([\uD800-\uDFFF])|(['"`])|[^]/g; +const escapeNonAsciiRegex = /([\uD800-\uDBFF][\uDC00-\uDFFF])|([\uD800-\uDFFF])|(['"`])|[^ !#-&\(-\[\]-_a-~]/g; const jsesc = (argument, options) => { const increaseIndentation = () => { @@ -234,96 +247,72 @@ const jsesc = (argument, options) => { } } - const string = argument; - // Loop over each code unit in the string and escape it - let index = -1; - const length = string.length; - result = ''; - while (++index < length) { - const character = string.charAt(index); - if (options.es6) { - const first = string.charCodeAt(index); - if ( // check if it’s the start of a surrogate pair - first >= 0xD800 && first <= 0xDBFF && // high surrogate - length > index + 1 // there is a next code unit - ) { - const second = string.charCodeAt(index + 1); - if (second >= 0xDC00 && second <= 0xDFFF) { // low surrogate - // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae - const codePoint = (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000; - let hexadecimal = codePoint.toString(16); - if (!lowercaseHex) { - hexadecimal = hexadecimal.toUpperCase(); - } - result += '\\u{' + hexadecimal + '}'; - ++index; - continue; - } + const regex = options.escapeEverything ? escapeEverythingRegex : escapeNonAsciiRegex; + result = argument.replace(regex, (char, pair, lone, quoteChar, index, string) => { + if (pair) { + if (options.minimal) return pair; + const first = pair.charCodeAt(0); + const second = pair.charCodeAt(1); + if (options.es6) { + // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae + const codePoint = (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000; + const hex = hexadecimal(codePoint, lowercaseHex); + return '\\u{' + hex + '}'; } + return fourHexEscape(hexadecimal(first, lowercaseHex)) + fourHexEscape(hexadecimal(second, lowercaseHex)); } - if (!options.escapeEverything) { - if (regexWhitelist.test(character)) { - // It’s a printable ASCII character that is not `"`, `'` or `\`, - // so don’t escape it. - result += character; - continue; - } - if (character == '"') { - result += quote == character ? '\\"' : character; - continue; - } - if (character == '`') { - result += quote == character ? '\\`' : character; - continue; - } - if (character == '\'') { - result += quote == character ? '\\\'' : character; - continue; - } + + if (lone) { + return fourHexEscape(hexadecimal(lone.charCodeAt(0), lowercaseHex)); } + if ( - character == '\0' && + char == '\0' && !json && !regexDigit.test(string.charAt(index + 1)) ) { - result += '\\0'; - continue; + return '\\0'; + } + + if (quoteChar) { + if (quoteChar == quote || options.escapeEverything) { + return '\\' + quoteChar; + } + return quoteChar; } - if (regexSingleEscape.test(character)) { + + if (regexSingleEscape.test(char)) { // no need for a `hasOwnProperty` check here - result += singleEscapes[character]; - continue; + return singleEscapes[char]; } - const charCode = character.charCodeAt(0); - if (options.minimal && charCode != 0x2028 && charCode != 0x2029) { - result += character; - continue; + + if (options.minimal && !regexWhitespace.test(char)) { + return char; } - let hexadecimal = charCode.toString(16); - if (!lowercaseHex) { - hexadecimal = hexadecimal.toUpperCase(); + + const hex = hexadecimal(char.charCodeAt(0), lowercaseHex); + if (json || hex.length > 2) { + return fourHexEscape(hex); } - const longhand = hexadecimal.length > 2 || json; - const escaped = '\\' + (longhand ? 'u' : 'x') + - ('0000' + hexadecimal).slice(longhand ? -4 : -2); - result += escaped; - continue; - } - if (options.wrap) { - result = quote + result + quote; - } + + return '\\x' + ('00' + hex).slice(-2); + }); + if (quote == '`') { - result = result.replace(/\$\{/g, '\\\$\{'); + result = result.replace(/\$\{/g, '\\${'); } if (options.isScriptContext) { // https://mathiasbynens.be/notes/etago - return result + result = result .replace(/<\/(script|style)/gi, '<\\/$1') .replace(/<!--/g, json ? '\\u003C!--' : '\\x3C!--'); } + if (options.wrap) { + result = quote + result + quote; + } return result; }; -jsesc.version = '2.5.2'; +jsesc.version = '3.0.2'; module.exports = jsesc; diff --git a/node_modules/jsesc/package.json b/node_modules/jsesc/package.json index f89a7c62..f370acd3 100644 --- a/node_modules/jsesc/package.json +++ b/node_modules/jsesc/package.json @@ -1,10 +1,10 @@ { "name": "jsesc", - "version": "2.5.2", + "version": "3.0.2", "description": "Given some data, jsesc returns the shortest possible stringified & ASCII-safe representation of that data.", "homepage": "https://mths.be/jsesc", "engines": { - "node": ">=4" + "node": ">=6" }, "main": "jsesc.js", "bin": "bin/jsesc", @@ -45,10 +45,12 @@ "devDependencies": { "coveralls": "^2.11.6", "grunt": "^0.4.5", + "grunt-cli": "^1.3.2", "grunt-template": "^0.2.3", "istanbul": "^0.4.2", - "mocha": "*", + "mocha": "^5.2.0", "regenerate": "^1.3.0", - "requirejs": "^2.1.22" + "requirejs": "^2.1.22", + "unicode-13.0.0": "0.8.0" } } |
