You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
2.6 KiB
86 lines
2.6 KiB
"use strict"; |
|
Object.defineProperty(exports, "__esModule", { value: true }); |
|
exports.stringifyPath = exports.quoteKey = exports.isValidVariableName = exports.IS_VALID_IDENTIFIER = exports.quoteString = void 0; |
|
/** |
|
* Match all characters that need to be escaped in a string. Modified from |
|
* source to match single quotes instead of double. |
|
* |
|
* Source: https://github.com/douglascrockford/JSON-js/blob/master/json2.js |
|
*/ |
|
const ESCAPABLE = /[\\\'\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g; |
|
/** |
|
* Map of characters to escape characters. |
|
*/ |
|
const META_CHARS = new Map([ |
|
["\b", "\\b"], |
|
["\t", "\\t"], |
|
["\n", "\\n"], |
|
["\f", "\\f"], |
|
["\r", "\\r"], |
|
["'", "\\'"], |
|
['"', '\\"'], |
|
["\\", "\\\\"], |
|
]); |
|
/** |
|
* Escape any character into its literal JavaScript string. |
|
* |
|
* @param {string} char |
|
* @return {string} |
|
*/ |
|
function escapeChar(char) { |
|
return (META_CHARS.get(char) || |
|
`\\u${`0000${char.charCodeAt(0).toString(16)}`.slice(-4)}`); |
|
} |
|
/** |
|
* Quote a string. |
|
*/ |
|
function quoteString(str) { |
|
return `'${str.replace(ESCAPABLE, escapeChar)}'`; |
|
} |
|
exports.quoteString = quoteString; |
|
/** |
|
* JavaScript reserved keywords. |
|
*/ |
|
const RESERVED_WORDS = new Set(("break else new var case finally return void catch for switch while " + |
|
"continue function this with default if throw delete in try " + |
|
"do instanceof typeof abstract enum int short boolean export " + |
|
"interface static byte extends long super char final native synchronized " + |
|
"class float package throws const goto private transient debugger " + |
|
"implements protected volatile double import public let yield").split(" ")); |
|
/** |
|
* Test for valid JavaScript identifier. |
|
*/ |
|
exports.IS_VALID_IDENTIFIER = /^[A-Za-z_$][A-Za-z0-9_$]*$/; |
|
/** |
|
* Check if a variable name is valid. |
|
*/ |
|
function isValidVariableName(name) { |
|
return (typeof name === "string" && |
|
!RESERVED_WORDS.has(name) && |
|
exports.IS_VALID_IDENTIFIER.test(name)); |
|
} |
|
exports.isValidVariableName = isValidVariableName; |
|
/** |
|
* Quote JavaScript key access. |
|
*/ |
|
function quoteKey(key, next) { |
|
return isValidVariableName(key) ? key : next(key); |
|
} |
|
exports.quoteKey = quoteKey; |
|
/** |
|
* Serialize the path to a string. |
|
*/ |
|
function stringifyPath(path, next) { |
|
let result = ""; |
|
for (const key of path) { |
|
if (isValidVariableName(key)) { |
|
result += `.${key}`; |
|
} |
|
else { |
|
result += `[${next(key)}]`; |
|
} |
|
} |
|
return result; |
|
} |
|
exports.stringifyPath = stringifyPath; |
|
//# sourceMappingURL=quote.js.map
|