javascript-obfuscator
Version:
JavaScript obfuscator
78 lines (66 loc) • 2.18 kB
text/typescript
import { inject, injectable } from 'inversify';
import { ServiceIdentifiers } from '../../container/ServiceIdentifiers';
import { IIdentifierNamesGenerator } from '../../interfaces/generators/identifier-names-generators/IIdentifierNamesGenerator';
import { IOptions } from '../../interfaces/options/IOptions';
import { IRandomGenerator } from '../../interfaces/utils/IRandomGenerator';
()
export abstract class AbstractIdentifierNamesGenerator implements IIdentifierNamesGenerator {
/**
* @type {IOptions}
*/
protected readonly options: IOptions;
/**
* @type {IRandomGenerator}
*/
protected readonly randomGenerator: IRandomGenerator;
/**
* @type {Set<string>}
*/
protected readonly preservedNamesSet: Set<string> = new Set();
/**
* @param {IRandomGenerator} randomGenerator
* @param {IOptions} options
*/
public constructor (
randomGenerator: IRandomGenerator,
(ServiceIdentifiers.IOptions) options: IOptions
) {
(ServiceIdentifiers.IRandomGenerator) this.randomGenerator = randomGenerator;
this.options = options;
}
/**
* @param {string} name
* @returns {void}
*/
public preserveName (name: string): void {
this.preservedNamesSet.add(name);
}
/**
* @param {string} name
* @returns {boolean}
*/
public isValidIdentifierName (name: string): boolean {
return this.notReservedName(name) && !this.preservedNamesSet.has(name);
}
/**
* @param {string} name
* @returns {boolean}
*/
private notReservedName (name: string): boolean {
return this.options.reservedNames.length
? !this.options.reservedNames.some((reservedName: string) =>
new RegExp(reservedName, 'g').exec(name) !== null
)
: true;
}
/**
* @param {number} nameLength
* @returns {string}
*/
public abstract generate (nameLength?: number): string;
/**
* @param {number} nameLength
* @returns {string}
*/
public abstract generateWithPrefix (nameLength?: number): string;
}