* Fixed broken identifierNamesGenerator: 'mangled-shuffled' after 2.2.0

This commit is contained in:
sanex
2020-10-11 18:54:12 +03:00
parent c311250d1c
commit 533a52c6fc
7 changed files with 87 additions and 88 deletions
@@ -59,86 +59,6 @@ export class MangledIdentifierNamesGenerator extends AbstractIdentifierNamesGene
super(randomGenerator, options);
}
/**
* @param {string} nextName
* @param {string} prevName
* @returns {boolean}
*/
// eslint-disable-next-line complexity
public static isIncrementedMangledName (nextName: string, prevName: string): boolean {
if (nextName === prevName) {
return false;
}
const nextNameLength: number = nextName.length;
const prevNameLength: number = prevName.length;
if (nextNameLength !== prevNameLength) {
return nextNameLength > prevNameLength;
}
let isIncrementedPrevCharacter: boolean = false;
for (let i: number = 0; i < nextNameLength; i++) {
const nextNameCharacter: string = nextName[i];
const prevNameCharacter: string = prevName[i];
if (nextNameCharacter === prevNameCharacter) {
continue;
}
const isDigitNextNameCharacter: boolean = MangledIdentifierNamesGenerator.isDigitCharacter(nextNameCharacter);
const isDigitPrevNameCharacter: boolean = MangledIdentifierNamesGenerator.isDigitCharacter(prevNameCharacter);
if (
isIncrementedPrevCharacter
&& isDigitNextNameCharacter
&& !isDigitPrevNameCharacter
) {
return true;
}
const isUpperCaseNextNameCharacter: boolean = MangledIdentifierNamesGenerator.isUpperCaseCharacter(nextNameCharacter);
const isUpperCasePrevNameCharacter: boolean = MangledIdentifierNamesGenerator.isUpperCaseCharacter(prevNameCharacter);
if (
isUpperCaseNextNameCharacter
&& !isUpperCasePrevNameCharacter
) {
return true;
} else if (
!isUpperCaseNextNameCharacter
&& isUpperCasePrevNameCharacter
) {
return false;
}
isIncrementedPrevCharacter = nextNameCharacter > prevNameCharacter;
if (nextNameCharacter < prevNameCharacter) {
return false;
}
}
return nextName > prevName;
}
/**
* @param {string} character
* @returns {boolean}
*/
private static isUpperCaseCharacter (string: string): boolean {
return /^[A-Z]*$/.test(string);
}
/**
* @param {string} character
* @returns {boolean}
*/
private static isDigitCharacter (string: string): boolean {
return /^[0-9]*$/.test(string);
}
/**
* Generates next name based on a global previous mangled name
* We can ignore nameLength parameter here, it hasn't sense with this generator
@@ -204,6 +124,43 @@ export class MangledIdentifierNamesGenerator extends AbstractIdentifierNamesGene
return identifierName;
}
/**
* @param {string} nextName
* @param {string} prevName
* @returns {boolean}
*/
// eslint-disable-next-line complexity
public isIncrementedMangledName (nextName: string, prevName: string): boolean {
if (nextName === prevName) {
return false;
}
const nextNameLength: number = nextName.length;
const prevNameLength: number = prevName.length;
if (nextNameLength !== prevNameLength) {
return nextNameLength > prevNameLength;
}
const nameSequence: string[] = this.getNameSequence();
for (let i: number = 0; i < nextNameLength; i++) {
const nextNameCharacter: string = nextName[i];
const prevNameCharacter: string = prevName[i];
if (nextNameCharacter === prevNameCharacter) {
continue;
}
const indexOfNextNameCharacter: number = nameSequence.indexOf(nextNameCharacter);
const indexOfPrevNameCharacter: number = nameSequence.indexOf(prevNameCharacter);
return indexOfNextNameCharacter > indexOfPrevNameCharacter;
}
throw new Error('Something goes wrong during comparison of mangled names');
}
/**
* @param {string} mangledName
* @returns {boolean}
@@ -224,7 +181,7 @@ export class MangledIdentifierNamesGenerator extends AbstractIdentifierNamesGene
* @param {string} name
*/
protected updatePreviousMangledName (name: string): void {
if (!MangledIdentifierNamesGenerator.isIncrementedMangledName(name, this.previousMangledName)) {
if (!this.isIncrementedMangledName(name, this.previousMangledName)) {
return;
}