Skip to content

Commit

Permalink
feat: rewrite in TS
Browse files Browse the repository at this point in the history
  • Loading branch information
revelt committed Dec 31, 2020
1 parent e10c809 commit 3a3ee88
Show file tree
Hide file tree
Showing 14 changed files with 609 additions and 405 deletions.
3 changes: 2 additions & 1 deletion packages/string-uglify/.npmignore
@@ -1,4 +1,4 @@
# .... generated using www.npmjs.com/package/lect ....
# generated using codsen.com/os/lect
#
#
# __ ______ ______ ______
Expand All @@ -23,3 +23,4 @@ test
.prettierignore
rollup.config.js
testStats.md
tsconfig.json
2 changes: 1 addition & 1 deletion packages/string-uglify/coverage/coverage-summary.json
@@ -1 +1 @@
{"total":{"lines":{"total":74,"covered":70,"skipped":0,"pct":94.59},"statements":{"total":78,"covered":74,"skipped":0,"pct":94.87},"functions":{"total":8,"covered":8,"skipped":0,"pct":100},"branches":{"total":72,"covered":64,"skipped":0,"pct":88.89}}}
{"total":{"lines":{"total":69,"covered":65,"skipped":0,"pct":94.2},"statements":{"total":77,"covered":73,"skipped":0,"pct":94.81},"functions":{"total":8,"covered":8,"skipped":0,"pct":100},"branches":{"total":75,"covered":66,"skipped":0,"pct":88}}}
89 changes: 68 additions & 21 deletions packages/string-uglify/dist/string-uglify.cjs.js
Expand Up @@ -13,10 +13,15 @@ Object.defineProperty(exports, '__esModule', { value: true });

var version = "1.3.4";

var isArr = Array.isArray;
function tellcp(str, idNum) {
return str.codePointAt(idNum);
}
if (idNum === void 0) {
idNum = 0;
}

return str.codePointAt(idNum) || 0;
} // converts whole array into array uglified names


function uglifyArr(arr) {
var letters = "abcdefghijklmnopqrstuvwxyz";
var lettersAndNumbers = "abcdefghijklmnopqrstuvwxyz0123456789";
Expand Down Expand Up @@ -103,36 +108,52 @@ function uglifyArr(arr) {
x: false,
y: false,
z: false
};
var res = [];
if (!isArr(arr) || !arr.length) {
}; // final array we'll assemble and eventually return

var res = []; // quick end

if (!Array.isArray(arr) || !arr.length) {
return arr;
}

for (var id = 0, len = arr.length; id < len; id++) {
// insurance against duplicate reference array values
if (arr.indexOf(arr[id]) < id) {
// push again the calculated value from "res":
res.push(res[arr.indexOf(arr[id])]);
continue;
}

var prefix = ".#".includes(arr[id][0]) ? arr[id][0] : "";
var codePointSum = Array.from(arr[id]).reduce(function (acc, curr) {
return acc + tellcp(curr);
}, 0);

if (".#".includes(arr[id][0]) && arr[id].length < 4 || !".#".includes(arr[id][0]) && arr[id].length < 3) {
var val = arr[id];

if (!res.includes(val)) {
res.push(val);
if (val.startsWith(".") && val.length === 2 && !singleClasses[val.slice(1)]) {
res.push(val); // the first candidates for single-character value are 2-char long classes:

if (val.startsWith(".") && val.length === 2 && singleClasses[val.slice(1)] === false) {
// mark the letter as used
singleClasses[val.slice(1)] = true;
} else if (val.startsWith("#") && val.length === 2 && !singleIds[val.slice(1)]) {
} else if (val.startsWith("#") && val.length === 2 && singleIds[val.slice(1)] === false) {
// mark the letter as used
singleIds[val.slice(1)] = true;
} else if (!val.startsWith(".") && !val.startsWith("#") && val.length === 1 && !singleNameonly[val]) {
} else if (!val.startsWith(".") && !val.startsWith("#") && val.length === 1 && singleNameonly[val] === false) {
// mark the letter as used
singleNameonly[val] = true;
}

continue;
}
}
var generated = "".concat(prefix).concat(letters[codePointSum % letters.length]).concat(lettersAndNumbers[codePointSum % lettersAndNumbers.length]);

var generated = "" + prefix + letters[codePointSum % letters.length] + lettersAndNumbers[codePointSum % lettersAndNumbers.length];

if (res.includes(generated)) {
// add more characters:
var soFarWeveGot = generated;
var counter = 0;
var reducedCodePointSum = Array.from(arr[id]).reduce(function (acc, curr) {
Expand All @@ -142,57 +163,83 @@ function uglifyArr(arr) {
return tellcp(val);
}).reduce(function (accum, curr) {
var temp = accum + curr;

do {
temp = String(temp).split("").reduce(function (acc, curr1) {
return acc + Number.parseInt(curr1, 10);
}, 0);
} while (temp >= 10);

return temp;
}, 0);
}, 0); // console.log(
// `${`\u001b[${33}m${`magicNumber`}\u001b[${39}m`} = ${JSON.stringify(
// magicNumber,
// null,
// 4
// )}`
// );

while (res.includes(soFarWeveGot)) {
counter += 1;
soFarWeveGot += lettersAndNumbers[reducedCodePointSum * magicNumber * counter % lettersAndNumbers.length];
}

generated = soFarWeveGot;
}

res.push(generated);
if (generated.startsWith(".") && generated.length === 2 && !singleClasses[generated.slice(1)]) {

if (generated.startsWith(".") && generated.length === 2 && singleClasses[generated.slice(1)] === false) {
singleClasses[generated.slice(1)] = true;
} else if (generated.startsWith("#") && generated.length === 2 && !singleIds[generated.slice(1)]) {
} else if (generated.startsWith("#") && generated.length === 2 && singleIds[generated.slice(1)] === false) {
singleIds[generated.slice(1)] = true;
} else if (!generated.startsWith(".") && !generated.startsWith("#") && generated.length === 1 && !singleNameonly[generated]) {
} else if (!generated.startsWith(".") && !generated.startsWith("#") && generated.length === 1 && singleNameonly[generated] === false) {
singleNameonly[generated] = true;
}
}
} // loop through all uglified values again and if the one letter name that
// matches current name's first letter (considering it might be id, class or
// just name), shorten that value up to that single letter.

for (var i = 0, _len = res.length; i < _len; i++) {

if (res[i].startsWith(".")) {
if (!singleClasses[res[i].slice(1, 2)]) {
// if particular class name starts with a letter which hasn't been taken
if (singleClasses[res[i].slice(1, 2)] === false) {
singleClasses[res[i].slice(1, 2)] = res[i];
res[i] = res[i].slice(0, 2);
} else if (singleClasses[res[i].slice(1, 2)] === res[i]) {
} else if (singleClasses[res[i].slice(1, 2)] === res[i]) { // This means, particular class name was repeated in the list and
// was shortened. We must shorten it to the same value.

res[i] = res[i].slice(0, 2);
}
} else if (res[i].startsWith("#")) {
if (!singleIds[res[i].slice(1, 2)]) {
if (singleIds[res[i].slice(1, 2)] === false) {
singleIds[res[i].slice(1, 2)] = res[i];
res[i] = res[i].slice(0, 2);
} else if (singleIds[res[i].slice(1, 2)] === res[i]) {
// This means, particular id name was repeated in the list and
// was shortened. We must shorten it to the same value.
res[i] = res[i].slice(0, 2);
}
} else if (!res[i].startsWith(".") && !res[i].startsWith("#")) {
if (!singleNameonly[res[i].slice(0, 1)]) {
singleNameonly[res[i].slice(0, 1)] = res[i];
res[i] = res[i].slice(0, 1);
} else if (singleNameonly[res[i].slice(0, 1)] === res[i]) {
// This means, particular id name was repeated in the list and
// was shortened. We must shorten it to the same value.
res[i] = res[i].slice(0, 1);
}
}
}

return res;
}
} // main function - converts n-th string in a given reference array of strings


function uglifyById(refArr, idNum) {
return uglifyArr(refArr)[idNum];
}
} // main export

exports.uglifyArr = uglifyArr;
exports.uglifyById = uglifyById;
Expand Down

0 comments on commit 3a3ee88

Please sign in to comment.