Skip to content

Instantly share code, notes, and snippets.

@anonyco
Last active April 22, 2020 13:21
Show Gist options
  • Save anonyco/7b083501fa52ec782ce6e3d19df1331f to your computer and use it in GitHub Desktop.
Save anonyco/7b083501fa52ec782ce6e3d19df1331f to your computer and use it in GitHub Desktop.
Efficient Javascript Valid Variable Name Helper Functions
// 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