Last active
April 22, 2020 13:21
-
-
Save anonyco/7b083501fa52ec782ce6e3d19df1331f to your computer and use it in GitHub Desktop.
Efficient Javascript Valid Variable Name Helper Functions
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// This file aims to provide a quick, fast, small-as-possible-while-avoiding-encoding-errors solution for those who | |
// are interested in parsing javascirpt files using javascript. What this does do is it determines whether a string | |
// is a valid javascript variable name according to the variable name's code points. What this script does not do is | |
// determine whether or not that variable is already a reserved keyword. If you need that check, then look elsewhere. | |
// NOTE: This is the unminified file-part. To use this file, place this file INSIDE the global IIFE around your code | |
// before any calls to it. But, don't distribute it just yet. The source code is rather large. Instead, you must | |
// minify it before you incorperate it into the end product website using the closure compiler. Online access to the | |
// Closure Compiler can be found at https://closure-compiler.appspot.com. | |
[ | |
isWhiteSpace, // Is not neccecarily the same as `/\s/.test(ch)`. Instead, it tests to see if a character | |
// would be considered whitespace inside a javascript code file among javascript code | |
isVariableNameFirstLetter, // Tests if a character would be considered a valid first letter to a js variable name | |
isVariableNameMiddleLetter // Tests if a character would be considered a valid non-first letter to a js variable name | |
] = (function(window){ | |
"use strict"; | |
var abs = window.Math.abs; | |
var atob = window.atob; | |
var codePointAt = "".codePointAt ? atob.call.bind("".codePointAt) : function(string) { | |
// Get the first code unit | |
var first = string.charCodeAt(0); | |
if ( // check if it’s the start of a surrogate pair | |
first >= 0xD800 && first <= 0xDBFF && // high surrogate | |
string.length // if there is a next code unit | |
) { | |
var second = string.charCodeAt(1); | |
if (second >= 0xDC00 && second <= 0xDFFF) { // low surrogate | |
// https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae | |
return (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000; | |
} | |
} | |
return first; | |
}; | |
function isWhiteSpace(ch){ | |
var cp = typeof ch === "number" ? ch : codePointAt(""+ch, 0); | |
var index = binarySearch(spaceFirsts, cp); | |
if (index < spaceFirsts.length) { | |
var value = spaceFirsts[index]; | |
if(value < 0) return -value === cp; // binary search landed on individual pairs area | |
if((index&1) === 0) return true; // binary search landed between two range markers | |
else return value === cp; | |
} | |
return false; | |
} | |
function isVariableNameFirstLetter(ch){ | |
var cp = typeof ch === "number" ? ch : codePointAt(""+ch, 0); | |
var index = binarySearch(validFirsts, cp); | |
if (index < validFirsts.length) { | |
var value = validFirsts[index]; | |
if(value < 0) return -value === cp;// binary search landed on individual pairs area | |
if((index&1) === 0) return true; // binary search landed between two range markers | |
else return value === cp; | |
} | |
return false; | |
} | |
function isVariableNameMiddleLetter(ch){ | |
var cp = typeof ch === "number" ? ch : codePointAt(""+ch, 0); | |
var index = binarySearch(validMiddles, cp); | |
if (index < validMiddles.length) { | |
var value = validMiddles[index]; | |
if (value < 0) { if (-value === cp) return true; } // binary search landed on individual pairs area | |
else { | |
if ((index&1) === 0) return true; // binary search landed between two range markers | |
else if (value === cp) return true; | |
} | |
} | |
return isVariableNameFirstLetter(cp); // all valid first letters for names are valid middle letters for names | |
} | |
function binarySearch(array, pred) { | |
var lo = -1, hi = array.length, mi = 0; | |
while (1 + lo !== hi) { | |
mi = (hi + lo) >> 1; | |
if (pred <= abs(array[mi])) hi = mi; else lo = mi; | |
} | |
return abs(array[hi]) > pred ? lo : hi; | |
} | |
function unpack(base64Data){ | |
var base256Data = atob(base64Data), arr=[]; | |
for (var i=0, Len = base256Data.length, val=0; i < Len; i+=3) { | |
val = base256Data.charCodeAt(i) | (base256Data.charCodeAt(i+1)<<8) | (base256Data.charCodeAt(i+2)<<16); | |
if (val > 0x7fffff) val |= 0xff000000; // correct the sign in a 2's-complement-ish way | |
arr.push( val ); | |
} | |
return arr; | |
} | |
/* | |
========================= Generated By: ========================= | |
***************************************************************** | |
DO NOT INLINE THE GENERATING CODE BELOW INTO THIS SCRIPT AND | |
DYNAMICALLY GENERATE THE CHARACTER DATA PER EACH PAGE LOAD. THE | |
PAGE WILL BRICK AND USER EXPERIENCE WILL SUFFER. INSTEAD, LEAVE | |
THE DATA STATICALLY GENERATED AND UNPACKED PER PAGE LOAD AS IT IS | |
RIGHT NOW. YOU HAVE BEEN WARNED. DON'T SAY I DIDN'T TELL YOU. | |
***************************************************************** | |
<!doctype HTML> | |
<html> | |
<head><title>Valid JS Variable Name Characters</title></head> | |
<body> | |
<h1 id="output">Loading...</h1> | |
<script> | |
document.getElementById("output").innerHTML = "Proccessing..."; | |
requestIdleCallback(async function(){ | |
"use strict"; | |
self.k=(function(window){ | |
const Function = window.Function, fromCodePoint = String.fromCodePoint, errMiddles = [], errFirsts = []; | |
const spaceMiddles = [], spaceFirsts=[], validFirsts=[], validMiddles=[]; | |
for (var i=0; i <= 0x10ffff; ++i) { | |
try { | |
if (1===Function('var ' + fromCodePoint(i) + 'a=1,a;return a;\n//# sourceURL=a.js')()) { | |
spaceFirsts.push(i); | |
} else { | |
validFirsts.push( i ); | |
} | |
} catch(e) { | |
errFirsts.push( i ); | |
try { | |
if (1===Function('var a' + fromCodePoint(i) + '=1,a;return a;\n//# sourceURL=a.js')()) { | |
spaceMiddles.push( i ); | |
} else { | |
validMiddles.push( i ); | |
} | |
} catch(e) { errMiddles.push( i ); } | |
} | |
} | |
return { | |
errMiddles: errMiddles, | |
errFirsts: errFirsts, | |
spaceMiddles: spaceMiddles, | |
spaceFirsts: spaceFirsts, | |
validFirsts: validFirsts, | |
validMiddles: validMiddles | |
}; | |
})(self); | |
document.getElementById("output").innerHTML = "All Done!"; | |
}); | |
</script> | |
</body> | |
</html> | |
===================== Then, In The Console: ===================== | |
console.clear(); | |
requestIdleCallback(async function(){ | |
function crunch(arr){ | |
if (!arr.length) return []; | |
var resArr=[], last=arr[0], curCont=arr[0]+1, cur = []; | |
for (var i = 1, Len = arr.length; i !== Len; i++) { | |
if (arr[i] === curCont) { | |
curCont++; | |
} else { | |
resArr.push(last, curCont-1); | |
last = arr[i]; | |
curCont = arr[i]+1; | |
} | |
} | |
resArr.push(last, arr[arr.length-1]); | |
var back=0; | |
for (var i=2, Len=resArr.length, back=0; i < Len; i+=2) { | |
if (resArr[i+0]===resArr[i+1] && resArr[i+2]===resArr[i+3]) { | |
resArr[i+back+0] = -resArr[i+0]; | |
resArr[i+back+1] = -resArr[i+2]; | |
i += 2, back -= 2; | |
} else { | |
resArr[i+back+0] = resArr[i+0]; | |
resArr[i+back+1] = resArr[i+1]; | |
} | |
} | |
resArr.length += back; | |
return resArr; | |
}; | |
var newGlobals = {}, fromCharCode = String.fromCharCode; | |
window.res = newGlobals; | |
function compress(num){ | |
return fromCharCode(num&0xff) + fromCharCode((num>>8)&0xff) + fromCharCode((num>>16)&0xff); | |
} | |
for (var key in k) { | |
newGlobals[key] = btoa(crunch(k[key]).map(compress).join("")); | |
} | |
console.log(newGlobals); | |
}); | |
====================== Pretty-Formated By: ====================== | |
console.log(res.spaceFirsts.split(/(?<=^(?:[^]{96})*)/g).join('" +\n\t\t"')); | |
console.log(res.errFirsts.split(/(?<=^(?:[^]{96})*)/g).join('" +\n\t\t"')); | |
console.log(res.validMiddles.split(/(?<=^(?:[^]{96})*)/g).join('" +\n\t\t"')); | |
*/ | |
var spaceFirsts = unpack("CQAADQAA4P//YP//gBYAgBYAACAACiAAKCAAKSAA0d//od//AND/AQH/"); | |
var validFirsts = unpack( | |
"JAAAJAAAQQAAWgAAXwAAXwAAYQAAegAAVv//S///ugAAugAAwAAA1gAA2AAA9gAA+AAAwQIAxgIA0QIA4AIA5AIAFP3/Ev3/" + | |
"cAMAdAMAdgMAdwMAegMAfQMAgfz/evz/iAMAigMAjAMAjAMAjgMAoQMAowMA9QMA9wMAgQQAigQALwUAMQUAVgUAWQUAWQUA" + | |
"YQUAhwUA0AUA6gUA8AUA8gUAIAYASgYAbgYAbwYAcQYA0wYA1QYA1QYA5QYA5gYA7gYA7wYA+gYA/AYAAfn/8Pj/EgcALwcA" + | |
"TQcApQcAsQcAsQcAygcA6gcA9AcA9QcA+gcA+gcAAAgAFQgA5vf/3Pf/KAgAKAgAQAgAWAgAYAgAaggAoAgAtAgAtggAvQgA" + | |
"BAkAOQkAw/b/sPb/WAkAYQkAcQkAgAkAhQkAjAkAjwkAkAkAkwkAqAkAqgkAsAkAsgkAsgkAtgkAuQkAQ/b/Mvb/3AkA3QkA" + | |
"3wkA4QkA8AkA8QkA/AkA/AkABQoACgoADwoAEAoAEwoAKAoAKgoAMAoAMgoAMwoANQoANgoAOAoAOQoAWQoAXAoAXgoAXgoA" + | |
"cgoAdAoAhQoAjQoAjwoAkQoAkwoAqAoAqgoAsAoAsgoAswoAtQoAuQoAQ/X/MPX/4AoA4QoA+QoA+QoABQsADAsADwsAEAsA" + | |
"EwsAKAsAKgsAMAsAMgsAMwsANQsAOQsAPQsAPQsAXAsAXQsAXwsAYQsAj/T/ffT/hQsAigsAjgsAkAsAkgsAlQsAmQsAmgsA" + | |
"nAsAnAsAngsAnwsAowsApAsAqAsAqgsArgsAuQsA0AsA0AsABQwADAwADgwAEAwAEgwAKAwAKgwAOQwAPQwAPQwAWAwAWgwA" + | |
"YAwAYQwAgAwAgAwAhQwAjAwAjgwAkAwAkgwAqAwAqgwAswwAtQwAuQwAQ/P/IvP/4AwA4QwA8QwA8gwABQ0ADA0ADg0AEA0A" + | |
"Eg0AOg0Aw/L/svL/VA0AVg0AXw0AYQ0Aeg0Afw0AhQ0Alg0Amg0AsQ0Asw0Auw0AvQ0AvQ0AwA0Axg0AAQ4AMA4AMg4AMw4A" + | |
"QA4ARg4AgQ4Agg4AhA4AhA4Ahw4AiA4AdvH/c/H/lA4Alw4AmQ4Anw4AoQ4Aow4AW/H/WfH/qg4Aqw4ArQ4AsA4Asg4Asw4A" + | |
"vQ4AvQ4AwA4AxA4Axg4Axg4A3A4A3w4AAA8AAA8AQA8ARw8ASQ8AbA8AiA8AjA8AABAAKhAAPxAAPxAAUBAAVRAAWhAAXRAA" + | |
"YRAAYRAAZRAAZhAAbhAAcBAAdRAAgRAAjhAAjhAAoBAAxRAAOe//M+//0BAA+hAA/BAASBIAShIATRIAUBIAVhIAWBIAWBIA" + | |
"WhIAXRIAYBIAiBIAihIAjRIAkBIAsBIAshIAtRIAuBIAvhIAwBIAwBIAwhIAxRIAyBIA1hIA2BIAEBMAEhMAFRMAGBMAWhMA" + | |
"gBMAjxMAoBMA9RMA+BMA/RMAARQAbBYAbxYAfxYAgRYAmhYAoBYA6hYA7hYA+BYAABcADBcADhcAERcAIBcAMRcAQBcAURcA" + | |
"YBcAbBcAbhcAcBcAgBcAsxcAKej/JOj/IBgAdxgAgBgAqBgAqhgAqhgAsBgA9RgAABkAHhkAUBkAbRkAcBkAdBkAgBkAqxkA" + | |
"sBkAyRkAABoAFhoAIBoAVBoApxoApxoABRsAMxsARRsASxsAgxsAoBsArhsArxsAuhsA5RsAABwAIxwATRwATxwAWhwAfRwA" + | |
"gBwAiBwA6RwA7BwA7hwA8RwA9RwA9hwAAB0Avx0AAB4AFR8AGB8AHR8AIB8ARR8ASB8ATR8AUB8AVx8Ap+D/peD/XR8AXR8A" + | |
"Xx8AfR8AgB8AtB8Ath8AvB8Avh8Avh8Awh8AxB8Axh8AzB8A0B8A0x8A1h8A2x8A4B8A7B8A8h8A9B8A9h8A/B8Aj9//gd//" + | |
"kCAAnCAA/t7/+d7/CiEAEyEAFSEAFSEAGCEAHSEA3N7/2t7/KCEAKCEAKiEAOSEAPCEAPyEARSEASSEATiEATiEAYCEAiCEA" + | |
"ACwALiwAMCwAXiwAYCwA5CwA6ywA7iwA8iwA8ywAAC0AJS0A2dL/09L/MC0AZy0Aby0Aby0AgC0Ali0AoC0Api0AqC0Ari0A" + | |
"sC0Ati0AuC0Avi0AwC0Axi0AyC0Azi0A0C0A1i0A2C0A3i0ABTAABzAAITAAKTAAMTAANTAAODAAPDAAQTAAljAAmzAAnzAA" + | |
"oTAA+jAA/DAA/zAABTEALjEAMTEAjjEAoDEAujEA8DEA/zEAADQAtU0AAE4A6p8AAKAAjKQA0KQA/aQAAKUADKYAEKYAH6YA" + | |
"KqYAK6YAQKYAbqYAf6YAnaYAoKYA76YAF6cAH6cAIqcAiKcAi6cArqcAsKcAt6cA96cAAagAA6gABagAB6gACqgADKgAIqgA" + | |
"QKgAc6gAgqgAs6gA8qgA96gABVf/A1f/CqkAJakAMKkARqkAYKkAfKkAhKkAsqkAz6kAz6kA4KkA5KkA5qkA76kA+qkA/qkA" + | |
"AKoAKKoAQKoAQqoARKoAS6oAYKoAdqoAeqoAeqoAfqoAr6oAsaoAsaoAtaoAtqoAuaoAvaoAQFX/PlX/26oA3aoA4KoA6qoA" + | |
"8qoA9KoAAasABqsACasADqsAEasAFqsAIKsAJqsAKKsALqsAMKsAWqsAXKsAZasAcKsA4qsAAKwAo9cAsNcAxtcAy9cA+9cA" + | |
"APkAbfoAcPoA2foAAPsABvsAE/sAF/sAHfsAHfsAH/sAKPsAKvsANvsAOPsAPPsAPvsAPvsAQPsAQfsAQ/sARPsARvsAsfsA" + | |
"0/sAPf0AUP0Aj/0Akv0Ax/0A8P0A+/0AcP4AdP4Adv4A/P4AIf8AOv8AQf8AWv8AZv8Avv8Awv8Ax/8Ayv8Az/8A0v8A1/8A" + | |
"2v8A3P8AAAABCwABDQABJgABKAABOgABPAABPQABPwABTQABUAABXQABgAAB+gABQAEBdAEBgAIBnAIBoAIB0AIBAAMBHwMB" + | |
"LQMBSgMBUAMBdQMBgAMBnQMBoAMBwwMByAMBzwMB0QMB1QMBAAQBnQQBsAQB0wQB2AQB+wQBAAUBJwUBMAUBYwUBAAYBNgcB" + | |
"QAcBVQcBYAcBZwcBAAgBBQgBCAgBCAgBCggBNQgBNwgBOAgBPAgBPAgBPwgBVQgBYAgBdggBgAgBnggB4AgB8ggB9AgB9QgB" + | |
"AAkBFQkBIAkBOQkBgAkBtwkBvgkBvwkBAAoBAAoBEAoBEwoBFQoBFwoBGQoBMwoBYAoBfAoBgAoBnAoBwAoBxwoByQoB5AoB" + | |
"AAsBNQsBQAsBVQsBYAsBcgsBgAsBkQsBAAwBSAwBgAwBsgwBwAwB8gwBAxABNxABgxABrxAB0BAB6BABAxEBJhEBUBEBchEB" + | |
"dhEBdhEBgxEBshEBwREBxBEBJu7+JO7+ABIBERIBExIBKxIBgBIBhhIBiBIBiBIBihIBjRIBjxIBnRIBnxIBqBIBsBIB3hIB" + | |
"BRMBDBMBDxMBEBMBExMBKBMBKhMBMBMBMhMBMxMBNRMBORMBw+z+sOz+XRMBYRMBABQBNBQBRxQBShQBgBQBrxQBxBQBxRQB" + | |
"xxQBxxQBgBUBrhUB2BUB2xUBABYBLxYBRBYBRBYBgBYBqhYBABcBGRcBoBgB3xgBAef+AOb+CxoBMhoBxuX+sOX+XBoBgxoB" + | |
"hhoBiRoBwBoB+BoBABwBCBwBChwBLhwBQBwBQBwBchwBjxwBAB0BBh0BCB0BCR0BCx0BMB0BRh0BRh0BACABmSMBACQBbiQB" + | |
"gCQBQyUBADABLjQBAEQBRkYBAGgBOGoBQGoBXmoB0GoB7WoBAGsBL2sBQGsBQ2sBY2sBd2sBfWsBj2sBAG8BRG8BUG8BUG8B" + | |
"k28Bn28B4G8B4W8BAHAB7IcBAIgB8ooBALABHrEBcLEB+7IBALwBarwBcLwBfLwBgLwBiLwBkLwBmbwBANQBVNQBVtQBnNQB" + | |
"ntQBn9QBotQBotQBpdQBptQBqdQBrNQBrtQBudQBu9QBu9QBvdQBw9QBxdQBBdUBB9UBCtUBDdUBFNUBFtUBHNUBHtUBOdUB" + | |
"O9UBPtUBQNUBRNUBRtUBRtUBStUBUNUBUtUBpdYBqNYBwNYBwtYB2tYB3NYB+tYB/NYBFNcBFtcBNNcBNtcBTtcBUNcBbtcB" + | |
"cNcBiNcBitcBqNcBqtcBwtcBxNcBy9cBAOgBxOgBAOkBQ+kBAO4BA+4BBe4BH+4BIe4BIu4B3BH+2RH+Ke4BMu4BNO4BN+4B" + | |
"xxH+xRH+vhH+uRH+txH+tRH+Te4BT+4BUe4BUu4BrBH+qRH+pxH+pRH+oxH+oRH+Ye4BYu4BZO4BZO4BZ+4Bau4BbO4Bcu4B" + | |
"dO4Bd+4Bee4BfO4Bfu4Bfu4BgO4Bie4Bi+4Bm+4Boe4Bo+4Bpe4Bqe4Bq+4Bu+4BAAAC1qYCAKcCNLcCQLcCHbgCILgCoc4C" + | |
"sM4C4OsCAPgCHfoC" | |
); | |
var validMiddles = unpack( | |
"MAAAOQAAtwAAtwAAAAMAbwMAhwMAhwMAgwQAhwQAkQUAvQUAvwUAvwUAwQUAwgUAxAUAxQUAxwUAxwUAEAYAGgYASwYAaQYA" + | |
"cAYAcAYA1gYA3AYA3wYA5AYA5wYA6AYA6gYA7QYA8AYA+QYAEQcAEQcAMAcASgcApgcAsAcAwAcAyQcA6wcA8wcAFggAGQgA" + | |
"GwgAIwgAJQgAJwgAKQgALQgAWQgAWwgA1AgA4QgA4wgAAwkAOgkAPAkAPgkATwkAUQkAVwkAYgkAYwkAZgkAbwkAgQkAgwkA" + | |
"vAkAvAkAvgkAxAkAxwkAyAkAywkAzQkA1wkA1wkA4gkA4wkA5gkA7wkAAQoAAwoAPAoAPAoAPgoAQgoARwoASAoASwoATQoA" + | |
"UQoAUQoAZgoAcQoAdQoAdQoAgQoAgwoAvAoAvAoAvgoAxQoAxwoAyQoAywoAzQoA4goA4woA5goA7woA+goA/woAAQsAAwsA" + | |
"PAsAPAsAPgsARAsARwsASAsASwsATQsAVgsAVwsAYgsAYwsAZgsAbwsAggsAggsAvgsAwgsAxgsAyAsAygsAzQsA1wsA1wsA" + | |
"5gsA7wsAAAwAAwwAPgwARAwARgwASAwASgwATQwAVQwAVgwAYgwAYwwAZgwAbwwAgQwAgwwAvAwAvAwAvgwAxAwAxgwAyAwA" + | |
"ygwAzQwA1QwA1gwA4gwA4wwA5gwA7wwAAA0AAw0AOw0APA0APg0ARA0ARg0ASA0ASg0ATQ0AVw0AVw0AYg0AYw0AZg0Abw0A" + | |
"gg0Agw0Ayg0Ayg0Azw0A1A0A1g0A1g0A2A0A3w0A5g0A7w0A8g0A8w0AMQ4AMQ4ANA4AOg4ARw4ATg4AUA4AWQ4AsQ4AsQ4A" + | |
"tA4AuQ4Auw4AvA4AyA4AzQ4A0A4A2Q4AGA8AGQ8AIA8AKQ8Ay/D/yfD/OQ8AOQ8APg8APw8AcQ8AhA8Ahg8Ahw8AjQ8Alw8A" + | |
"mQ8AvA8Axg8Axg8AKxAAPhAAQBAASRAAVhAAWRAAXhAAYBAAYhAAZBAAZxAAbRAAcRAAdBAAghAAjRAAjxAAnRAAXRMAXxMA" + | |
"aRMAcRMAEhcAFBcAMhcANBcAUhcAUxcAchcAcxcAtBcA0xcA3RcA3RcA4BcA6RcACxgADRgAEBgAGRgAqRgAqRgAIBkAKxkA" + | |
"MBkAOxkARhkATxkA0BkA2hkAFxoAGxoAVRoAXhoAYBoAfBoAfxoAiRoAkBoAmRoAsBoAvRoAABsABBsANBsARBsAUBsAWRsA" + | |
"axsAcxsAgBsAghsAoRsArRsAsBsAuRsA5hsA8xsAJBwANxwAQBwASRwAUBwAWRwA0BwA0hwA1BwA6BwA7RwA7RwA8hwA9BwA" + | |
"9xwA+RwAwB0A+R0A+x0A/x0ADCAADSAAPyAAQCAAVCAAVCAA0CAA3CAA4SAA4SAA5SAA8CAA7ywA8SwAfy0Afy0A4C0A/y0A" + | |
"KjAALzAAmTAAmjAAIKYAKaYAb6YAb6YAdKYAfaYAnqYAn6YA8KYA8aYA/lf/+lf/C6gAC6gAI6gAJ6gAgKgAgagAtKgAxagA" + | |
"0KgA2agA4KgA8agAAKkACakAJqkALakAR6kAU6kAgKkAg6kAs6kAwKkA0KkA2akA5akA5akA8KkA+akAKaoANqoAQ6oAQ6oA" + | |
"TKoATaoAUKoAWaoAe6oAfaoAsKoAsKoAsqoAtKoAt6oAuKoAvqoAv6oAwaoAwaoA66oA76oA9aoA9qoA46sA6qsA7KsA7asA" + | |
"8KsA+asAHvsAHvsAAP4AD/4AIP4AL/4AM/4ANP4ATf4AT/4AEP8AGf8AwQD/A/7+4AIB4AIBdgMBegMBoAQBqQQBAQoBAwoB" + | |
"BQoBBgoBDAoBDwoBOAoBOgoBPwoBPwoB5QoB5goBABABAhABOBABRhABZhABbxABfxABghABsBABuhAB8BAB+RABABEBAhEB" + | |
"JxEBNBEBNhEBPxEBcxEBcxEBgBEBghEBsxEBwBEByhEBzBEB0BEB2REBLBIBNxIBPhIBPhIB3xIB6hIB8BIB+RIBABMBAxMB" + | |
"PBMBPBMBPhMBRBMBRxMBSBMBSxMBTRMBVxMBVxMBYhMBYxMBZhMBbBMBcBMBdBMBNRQBRhQBUBQBWRQBsBQBwxQB0BQB2RQB" + | |
"rxUBtRUBuBUBwBUB3BUB3RUBMBYBQBYBUBYBWRYBqxYBtxYBwBYByRYBHRcBKxcBMBcBORcB4BgB6RgBARoBChoBMxoBORoB" + | |
"OxoBPhoBRxoBRxoBURoBWxoBihoBmRoBLxwBNhwBOBwBPxwBUBwBWRwBkhwBpxwBqRwBthwBMR0BNh0BOh0BOh0BPB0BPR0B" + | |
"Px0BRR0BRx0BRx0BUB0BWR0BYGoBaWoB8GoB9GoBMGsBNmsBUGsBWWsBUW8Bfm8Bj28Bkm8BnbwBnrwBZdEBadEBbdEBctEB" + | |
"e9EBgtEBhdEBi9EBqtEBrdEBQtIBRNIBztcB/9cBANoBNtoBO9oBbNoBiyX+fCX+m9oBn9oBodoBr9oBAOABBuABCOABGOAB" + | |
"G+ABIeABI+ABJOABJuABKuAB0OgB1ugBROkBSukBUOkBWekBAAEO7wEO" | |
); | |
return [ | |
isWhiteSpace, | |
isVariableNameFirstLetter, | |
isVariableNameMiddleLetter | |
]; | |
})(typeof self === "undefined" ? typeof global === "undefined" ? this : global : self); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment