Skip to content

javascript-obfuscator/react-native-obfuscating-transformer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

33 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

react-native-obfuscating-transformer

Obfuscate selected source files when building for React Native.

Installation

yarn add react-native-obfuscating-transformer --dev 

or

npm install react-native-obfuscating-transformer --save-dev 

Usage

React Native >= 0.59

/metro.config.js

 module.exports = { + transformer: { + babelTransformerPath: require.resolve("./transformer") + }, }

/transformer.js

const obfuscatingTransformer = require("react-native-obfuscating-transformer") module.exports = obfuscatingTransformer({ /* options */ })

React Native < 0.59

/rn-cli.config.js

 module.exports = { + transformer: { + babelTransformerPath: require.resolve("./transformer") + }, }

/transformer.js

const obfuscatingTransformer = require("react-native-obfuscating-transformer") module.exports = obfuscatingTransformer({ /* options */ })

Configuration

Options are:

upstreamTransformer: MetroTransformer

Defines what the first pass of code transformation is. If you don't use a custom transformer already, you don't need to set this option.

TypeScript example:

 const obfuscatingTransformer = require('react-native-obfuscating-transformer') + const typescriptTransformer = require('react-native-typescript-transformer') module.exports = obfuscatingTransformer({ + upstreamTransformer: typescriptTransformer })

Default value: require('metro/src/transformer')

filter: (filename: string, source: string) => boolean

Returns true for any files that should be obfuscated and false for any files which should not be obfuscated.

By default, it obfuscates all files in src/**/*

obfuscatorOptions: ObfuscatorOptions

Warning — Not all options are guaranteed to produce working code. In particular, stringArray definitely breaks builds.

See the javascript-obfuscator docs for more info about what each option does.

interface ObfuscatorOptions { compact?: boolean controlFlowFlattening?: boolean controlFlowFlatteningThreshold?: 0.75 deadCodeInjection?: boolean deadCodeInjectionThreshold?: 0.4 debugProtection?: boolean debugProtectionInterval?: boolean disableConsoleOutput?: boolean domainLock?: string[] identifierNamesGenerator?: "hexadecimal" | "mangled" log?: boolean renameGlobals?: boolean reservedNames?: string[] rotateStringArray?: true seed?: 0 selfDefending?: boolean sourceMap?: boolean sourceMapBaseUrl?: string sourceMapFileName?: string sourceMapMode?: "separate" | "inline" stringArray?: boolean stringArrayEncoding?: string[] stringArrayThreshold?: 0.75 target?: "browser" | "extension" | "node" unicodeEscapeSequence?: boolean }

trace: boolean

Iff true, prints a list of files being obfuscated

Default value: false

emitObfuscatedFiles: boolean

Iff true, emits the obfuscated versions of files alongside their originals, for comparison.

Default value: false

enableInDevelopment: boolean

Iff true, enables obfuscation in development mode.

Default value: false

License

MIT

About

Obfuscation for React Native bundles

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 5