mirror of
https://github.com/javascript-obfuscator/javascript-obfuscator
synced 2026-08-09 12:42:29 +00:00
99 lines
2.9 KiB
TypeScript
99 lines
2.9 KiB
TypeScript
import * as fs from 'fs';
|
|
import * as path from 'path';
|
|
|
|
import { TIdentifierNamesCache } from '../../types/storages/TIdentifierNamesCache';
|
|
|
|
import { IFileData } from '../../interfaces/cli/IFileData';
|
|
|
|
import { JavaScriptObfuscatorCLI } from '../JavaScriptObfuscatorCLI';
|
|
|
|
/**
|
|
* Utils to work with identifier names cache file
|
|
*/
|
|
export class IdentifierNamesCacheUtils {
|
|
/**
|
|
* @type {string}
|
|
*/
|
|
private static readonly identifierNamesCacheExtension: string = '.json';
|
|
|
|
/**
|
|
* @type {string}
|
|
*/
|
|
private readonly identifierNamesCachePath: string | undefined;
|
|
|
|
/**
|
|
* @param {string} identifierNamesCachePath
|
|
*/
|
|
public constructor (identifierNamesCachePath: string | undefined) {
|
|
this.identifierNamesCachePath = identifierNamesCachePath;
|
|
}
|
|
|
|
/**
|
|
* @param {string} filePath
|
|
* @returns {boolean}
|
|
*/
|
|
private static isValidFilePath (filePath: string): boolean {
|
|
try {
|
|
return fs.statSync(filePath).isFile()
|
|
&& path.extname(filePath) === IdentifierNamesCacheUtils.identifierNamesCacheExtension;
|
|
} catch {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @param {string} filePath
|
|
* @returns {IFileData}
|
|
*/
|
|
private static readFile (filePath: string): IFileData {
|
|
return {
|
|
filePath: path.normalize(filePath),
|
|
content: fs.readFileSync(filePath, JavaScriptObfuscatorCLI.encoding)
|
|
};
|
|
}
|
|
|
|
/**
|
|
* @returns {TIdentifierNamesCache | null}
|
|
*/
|
|
public read (): TIdentifierNamesCache | null {
|
|
if (!this.identifierNamesCachePath) {
|
|
return null;
|
|
}
|
|
|
|
if (!IdentifierNamesCacheUtils.isValidFilePath(this.identifierNamesCachePath)) {
|
|
throw new ReferenceError(`Given identifier names cache path must be a valid ${
|
|
IdentifierNamesCacheUtils.identifierNamesCacheExtension
|
|
} file path`);
|
|
}
|
|
|
|
const fileData: IFileData = IdentifierNamesCacheUtils.readFile(this.identifierNamesCachePath);
|
|
|
|
if (!fileData.content) {
|
|
// Initial state of identifier names cache file
|
|
return {};
|
|
}
|
|
|
|
try {
|
|
// Already written identifier names cache file
|
|
return JSON.parse(fileData.content);
|
|
} catch {
|
|
throw new ReferenceError('Identifier names cache file must contains a json dictionary with identifier names');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @param {TIdentifierNamesCache} identifierNamesCache
|
|
*/
|
|
public write (identifierNamesCache: TIdentifierNamesCache): void {
|
|
if (!this.identifierNamesCachePath) {
|
|
return;
|
|
}
|
|
|
|
const identifierNamesCacheJson: string = JSON.stringify(identifierNamesCache);
|
|
|
|
fs.writeFileSync(this.identifierNamesCachePath, identifierNamesCacheJson, {
|
|
encoding: JavaScriptObfuscatorCLI.encoding
|
|
});
|
|
}
|
|
}
|