UNPKG

javascript-obfuscator

Version:
78 lines (66 loc) 2.18 kB
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'; @injectable() 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 ( @inject(ServiceIdentifiers.IRandomGenerator) randomGenerator: IRandomGenerator, @inject(ServiceIdentifiers.IOptions) options: IOptions ) { 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; }