| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- 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
- });
- }
- }
|