Added Bcrypt, Scrypt, BSON and string operations along with many new tests.

This commit is contained in:
n1474335 2018-03-26 22:25:36 +01:00
parent 2f5b0533d8
commit 715ca1c292
28 changed files with 1290 additions and 84 deletions

View file

@ -1,4 +1,5 @@
import Utils from "../Utils.js";
import jsesc from "jsesc";
/**
@ -219,35 +220,45 @@ const StrUtils = {
* @constant
* @default
*/
ESCAPE_REPLACEMENTS: [
{"escaped": "\\\\", "unescaped": "\\"}, // Must be first
{"escaped": "\\'", "unescaped": "'"},
{"escaped": "\\\"", "unescaped": "\""},
{"escaped": "\\n", "unescaped": "\n"},
{"escaped": "\\r", "unescaped": "\r"},
{"escaped": "\\t", "unescaped": "\t"},
{"escaped": "\\b", "unescaped": "\b"},
{"escaped": "\\f", "unescaped": "\f"},
],
QUOTE_TYPES: ["Single", "Double", "Backtick"],
/**
* @constant
* @default
*/
ESCAPE_LEVEL: ["Special chars", "Everything", "Minimal"],
/**
* Escape string operation.
*
* @author Vel0x [dalemy@microsoft.com]
* @author n1474335 [n1474335@gmail.com]
*
* @param {string} input
* @param {Object[]} args
* @returns {string}
*
* @example
* StrUtils.runUnescape("Don't do that", [])
* StrUtils.runEscape("Don't do that", [])
* > "Don\'t do that"
* StrUtils.runUnescape(`Hello
* StrUtils.runEscape(`Hello
* World`, [])
* > "Hello\nWorld"
*/
runEscape: function(input, args) {
return StrUtils._replaceByKeys(input, "unescaped", "escaped");
const level = args[0],
quotes = args[1],
jsonCompat = args[2],
es6Compat = args[3],
lowercaseHex = !args[4];
return jsesc(input, {
quotes: quotes.toLowerCase(),
es6: es6Compat,
escapeEverything: level === "Everything",
minimal: level === "Minimal",
json: jsonCompat,
lowercaseHex: lowercaseHex,
});
},
@ -255,6 +266,7 @@ const StrUtils = {
* Unescape string operation.
*
* @author Vel0x [dalemy@microsoft.com]
* @author n1474335 [n1474335@gmail.com]
*
* @param {string} input
* @param {Object[]} args
@ -268,32 +280,7 @@ const StrUtils = {
* World`
*/
runUnescape: function(input, args) {
return StrUtils._replaceByKeys(input, "escaped", "unescaped");
},
/**
* Replaces all matching tokens in ESCAPE_REPLACEMENTS with the correction. The
* ordering is determined by the patternKey and the replacementKey.
*
* @author Vel0x [dalemy@microsoft.com]
* @author Matt C [matt@artemisbot.uk]
*
* @param {string} input
* @param {string} pattern_key
* @param {string} replacement_key
* @returns {string}
*/
_replaceByKeys: function(input, patternKey, replacementKey) {
let output = input;
// Catch the \\x encoded characters
if (patternKey === "escaped") output = Utils.parseEscapedChars(input);
StrUtils.ESCAPE_REPLACEMENTS.forEach(replacement => {
output = output.split(replacement[patternKey]).join(replacement[replacementKey]);
});
return output;
return Utils.parseEscapedChars(input);
},