UNPKG

@bytehide/react-native-shield

Version:

React Native plugin for ByteHide Shield obfuscation.

78 lines (70 loc) 2.98 kB
const {bytehideShieldPlugin} = require('@bytehide/gulp-shield'); const path = require('path'); const fs = require('fs'); const gulp = require('gulp'); const {src, dest} = gulp; module.exports = { /** * Obfuscates JavaScript files in the specified directory. * @param {string} distDir - The source directory containing files to obfuscate. * @param {string} projectToken - The ByteHide project token (default: from environment variable or placeholder). * @param {boolean} replace - Whether to replace the original files or save as new files. * @param {string[]} exclude - Patterns to exclude from obfuscation. * @param {string} obfuscatedExtension - The extension for obfuscated files. * @param {Object} config - ByteHide obfuscation configuration. */ obfuscate: async ( distDir = './dist', projectToken = process.env.BYTEHIDE_PROJECT_TOKEN || 'your_project_token', replace = false, exclude = [], obfuscatedExtension = '.obf', config = { controlFlowFlattening: true, debugProtection: true, devtoolsBlocking: true, } ) => { if (!projectToken || projectToken === 'your_project_token') { throw new Error( 'Project token is required. Please provide it as an argument or set BYTEHIDE_PROJECT_TOKEN environment variable.' ); } if (!fs.existsSync(distDir)) { throw new Error(`Source directory "${distDir}" does not exist.`); } const srcFiles = path.resolve(distDir, '**', '*.js'); const destDir = distDir; // const destDir = replace ? distDir : `${distDir}_obfuscated`; // if (!replace && !fs.existsSync(destDir)) { // fs.mkdirSync(destDir, { recursive: true }); // } console.log('Starting obfuscation...'); try { await new Promise((resolve, reject) => { src([ srcFiles, `!${path.resolve(distDir, '**', '__tests__', '**')}`, `!${path.resolve(distDir, '**', '*.test.js')}`, `!${path.resolve(distDir, '**', '*.spec.js')}`, ...exclude.map((pattern) => `!${path.resolve(distDir, '**', pattern)}`), ]) .pipe( bytehideShieldPlugin({ projectToken, replace, obfuscatedExtension, config, }) ) .pipe(dest(destDir)) .on('end', resolve) .on('error', reject); }); console.log(`Obfuscation complete. Files saved to "${destDir}".`); } catch (error) { console.error('Error during obfuscation:', error.message); throw error; } }, };