Change Log
- Pro API: reworked large file uploads — fixed
413 Content Too Largefor ~4.4–4.6MB request bodies, and Blob uploads now send the raw source (blobFormat: 'raw') instead of the JSON request body, so uploads always fit the plan's file size cap
- Fixed directory obfuscation with a set
sourceMapFileNamemaking all files share and overwrite one.map. Fixes #817 - Fixed CLI
--configfailures hiding the real cause behind a genericCannot open config filemessage. Fixes #1101 - Fixed
sourceMapFileNameending in.js.map(e.g.foo.min.js.map) being mangled in the emitted//# sourceMappingURL=comment. Fixes #1312 - Fixed
URIError: URI malformedcrash whenstringArraywithbase64/rc4encoding processed a string literal containing lone surrogate code units (e.g."[^\uD800-\uDFFF]"). Fixes #1431 - Bumped the production
brace-expansiontransitive dependency to a patched version, resolvingCVE-2026-25547. Fixes #1405
- Fixed unicode (
\uXXXX,\u{XXXX}) and hex (\xXX) escape sequences of string literals being un-escaped into their literal characters during obfuscation. Fixes #345
- Fixed
controlFlowFlatteningintermittently dropping arguments of a spread call (e.g.foo(...args)) when it reused a control flow wrapper of a same-arity plain call. Fixes #1423 - Fixed
selfDefendingmaking obfuscated code run several times slower on Bun/JavaScriptCore. Fixes #1421 - Fixed dropped parentheses around an
inoperator inside an arrow body in afor-init, producing unparsable output. Fixes #1419
- Optimized scope identifiers transformer performance
- Optimized identifier renaming performance by reusing scope analysis between transformers
- Fixed
Invalid regular expressionerror when obfuscating code that uses ES2025 RegExp pattern modifiers (e.g./(?i:abc)/). Fixes #1410 - Fixed
SyntaxErrorwhen obfuscating a class that extends a boolean literal (e.g.class C extends true {}). Fixes #1131
- Fixed
controlFlowFlatteningoccasionally dropping the?.short-circuit onfoo?.(arg)calls, causingTypeError: <X> is not a function. Fixes #1408
- Fixed obfuscated code hanging in Bun when
selfDefendingis enabled. Fixes #1404
- Fixed
Utils.nodeRequirecausingReferenceError: require is not definedin browser build by making it lazy-evaluated - Fixed missing space between keywords (
return,throw,typeof) and Unicode surrogate pair identifiers in compact mode. Fixes #1112 - Fixed
domainLockbeing case-sensitive — domain values are now normalized to lowercase. Fixes #1182 - Removed
source-map-supportruntime dependency. Usenode --enable-source-mapsinstead. Fixes #1149
- Add support for
import attributes. Fixes #1256 - Add
renamePropertiessupport for private class fields and methods (#foo,#bar()). Fixes #1220 - Fixed
reservedNamesnot preserving class method and property names whenstringArrayordeadCodeInjectionis enabled. Fixes #1279 - Fixed infinite loop / stack overflow when
reservedNamespatterns match all generated identifier names. Now throws a descriptive error instead. Fixes #1382 - Fixed
transformObjectKeyschanging evaluation order when object expression is inside a sequence expression with preceding side effects (e.g.return aux(ys), { min }). Fixes #1246 - Fixed destructuring patterns inside class static blocks not being renamed when
renameGlobalsis disabled. Fixes #1141 - Fixed CLI
--options-presetnot applying preset values for options not explicitly set via command line (e.g.splitStringsfromhigh-obfuscationpreset was ignored). Fixes #1236 - Replaced
mkdirpdependency with nativefs.mkdirSync({ recursive: true }). Fixes #1275. Thank you https://github.com/roli-lpci! - Updated reserved DOM properties list, fixing
renamePropertiesbreaking modern built-in methods likeArray.prototype.at(). Fixes #1066 - Replaced
confdependency with custom implementation usingenv-pathsand nativefs
- Fixed class expression name references inside class body being incorrectly resolved to an import binding with the same name, causing broken code at runtime. Fixes #1386
- Add Pro API support to CLI
- Add large files upload support to Pro API
- Fixed
transformObjectKeysincorrectly hoisting object literal outside of loop when loop body is a single statement without braces, causing all iterations to share the same object reference. Fixes #1300 - Fixed parsing error when
awaitis used as an identifier in non-async context. Fixes #1127 - Fixed
deadCodeInjectioncausing SyntaxError whenargumentsfrom collected block statements was injected into class field initializers or static initialization blocks. Fixes #1166 - Fixed
transformObjectKeyswithmangledidentifier generator causing variable shadowing when extracted object variable name matched an existing inner scope variable. Fixes #1232
- Skip obfuscation of
process.env.* - Fixed
controlFlowFlatteningbreaking short-circuit evaluation with spread operator and conditional objects. Fixes #1372 - Fix Annex B function hoisting: block-scoped function declarations are now correctly linked to references outside the block in non-strict mode
- Fixed
NodeUtils.cloneRecursivecorruptingrangeproperty when cloning AST nodes, causing scope analysis to incorrectly resolve destructuring default parameter references
- Add
versionparameter to theapiConfigto use different versions JavaScript Obfuscator Pro via API
- Add JavaScript Obfuscator PRO advertisement message
- Add JavaScript Obfuscator PRO support via calling its API
- Downgrade
multimatchversion to avoid esm errors
- Dropped support of Node versions 17 and below
- Fix
transformObjectKeysperformance in some edge-cases - Fix
controlFlowFlattening+ optional chaining compatibility. Fixes #1325 - Don't obfuscate import.meta.*. Fixes #1267
- Revert
Improved stringArray calls wrapper templatescommit. Fixes #1330 - Fix error when ClassExpression is the CallExpression callee. Fixes #1132
- Don't publish root index.ts files to NPM. Fixes #1252
- Update
class-validatorversion. Fixes #1324 - Update other dependencies
- CLI: support
.mjsand.cjsextensions. Kudos to #1301
- Update supported Node.js versions up to
node@22. Fixes #1100 - Update
class-validatorversion. Fixes #1247 - Fixed CI
- Add target
service-worker
- Add support for
node@18 - Update dependencies
- Update
class-validatordependency #1146
- Breaking change:
debugProtectionIntervaloption now accepts value in milliseconds instead ofbooleanvalue. Fixed #1031
- Fixed cases when dead code is added to the inner code of
evalexpressions. Fixed #1053
- Improved integration between
renamePropertiesandcontrolFlowFlatteningoptions. Fixed #1053
- Fixed #1056
- Fixed #1052
- Fixed missing transformation of string array calls in some cases
- Fixed generation of reserved identifier names like
MaporSetformangledandmangled-shuffledidentifier names generators
- Fixed #1039
- Updated copyright
- New options:
stringArrayCallsTransformandstringArrayCallsTransformThreshold - Fixed #1046
- Added support of
es2022features: class static block
- Dependencies update
- Fixed performance for Apple M1 chip
- Breaking change:
ignoreRequireImportsoption renamed toignoreImports - Breaking change:
rotateStringArrayoption renamed tostringArrayRotate - Breaking change:
shuffleStringArrayoption renamed tostringArrayShuffle ignoreImportsnow ignoresdynamicimports in addition torequireimports
- Updated
@javascript-obfuscator/escodegenwith fixed parenthesis ofdefault exportIIFE
- Fixed very rare cases when
rotateStringArraycouldn't rotate array properly - Improved
selfDefendingoption - Installed
npmpackage now hastypesdirectory and doesn't havesrcdirectory - Fixed #959
- Updated
@javascript-obfuscator/escodegenwith fixed generation of private property names
- Added support of
es2022features: private identifiers and class properties - Dropped support for
node@15 - Increased minimum supported
nodeversions:^12.22.0 || ^14.17.0 || >=16.0.0
- New option:
sourceMapSourcesModeallows to controlsourcesandsourcesContentfields of the source map inputFileNameoption now required when using NodeJS API andsourceMapSourcesModeoption hassourcesvalue`- Fixed some cases with wrong source map file name generation when
sourceMapFileNameoption is set
stringArrayWrappersType: 'function'now generates different indexes between each wrapper inside the same lexical scopestringArrayWrappersType: 'function'now generates different parameters order between each wrapper inside the same lexical scopestringArrayWrappersType: 'function'now appendsFunctionDeclarationfunctions instead ofFunctionExpressionfunctions. This allows to append these wrappers at random positions inside each scoperenamePropertiesoption now won't generate duplicated property names in some cases
- To increase performance and prevent possible runtime errors
transformObjectKeysoption now completely ignores objects withCallExpressionorNewExpressionnodes. Fixed #948
- Improved
stringArraycalls wrapper decode code
- Improved
stringArraycalls wrapper code
- Slightly improved integration between
deadCodeInjectionandstringArrayWrappersChainedCallsoptions
- Fixed invalid behaviour of
transformObjectKeysoption when object values containsthisreferences. Fixed #937
- Hotfix:
domainDest=>domainLockRedirectUrloption rename
- Added
domainDestoption that option allows the browser to be redirected to a passed domain if the source code isn't run on the domains or URL specified bydomainLock. Thank you https://github.com/erikdubbelboer! ObfuscationResultobject now containsgetOptionsmethod to get options that were used during obfuscation
- Added
identifierNamesCacheoption for reading and writing identifier names cache. SeeREADME.md. - CLI: Added
--identifier-names-cache-pathoption for reading and writing identifier names cache. SeeREADME.md.
- Fixed invalid code generation for start/middle rest arguments when
controlFlowFlattenigoption is enabled. Fixed #920 - Internal: Added support of
node@16and dropped support ofnode@10. This should not affect obfuscated code
stringArraycalls wrappers now inserted asFunctionDeclarationnodes at random indexes
- CLI: now it's possible to specify the path to the input file after specifying the obfuscator options. Fixed #904
- Added option
renamePropertiesModeto switch between newsafeand oldunsafemodes ofrenamePropertiesoption. Fixed #878 renamePropertiesoption now works insafeway by default
- Fixed CVE-2019-18413. Fixed #880
- Added support of
top-level await. Fixed #884
- Fixed invalid code generation for rest arguments when
controlFlowFlatteningoption is enabled. Fixed #887
- Fixed invalid behaviour of
numbersToExpressionsoption for float numbers. Fixed #882
- Fixed
simplifyoption regression after2.10.2. Fixed #864
- Fixed behavior of
simplifyoptions when a node with a single-statementbodyis inside simplifiedIfStatementnode. Fixed #860
- Removed padding characters from all base64 encoded strings. Removed RegExp that trims padding characters from
base64encoded strings fromatobcode helper to prevent mutation ofRegExp.$1value during calls to thestringArray. Fixed #829
- Improved
rotateStringArrayoption
- Preventing move of
"use strict";directive during obfuscation
- Fixed runtime errors in large obfuscated code when both
rc4andbase64encodings are enabled - Some internal refactoring related to node append events
- Fixed missing prefix of root identifiers added by
stringArrayWrappersCountoption whenidentifiersPrefixoption is set
- CLI: Fixed wrong name of obfuscated files when input directory path is the
.symbol. #816
- Ignore object expressions as body of arrow function expression when
transformObjectKeysoption is enabled. Fixed #813
- Fixed wrong
stringArrayWrappersParametersMaxCountCLI option name
- New option:
stringArrayIndexesTypeaccepts an array of types of string array call indexes - Changed default type of all string array call indexes from
hexadecimal-numeric-stringtohexadecimal-number - New option:
stringArrayIndexShiftenables additional index shift for all string array calls - New option:
stringArrayWrappersParametersMaxCountallows to control the maximum number of string array wrappers parameters stringArrayWrappersType: 'function'option value moved fromhigh-obfuscationtomedium-obfuscationoptions preset
- Fixed incorrect rename of the identifiers of the added helpers in some rare cases. Fixed #804
- New option
ignoreRequireImportsprevents obfuscation ofrequireimports. Fixed #801
- Updated
@javascript-obfuscator/escodegento2.1.1
- Switched form
escodegento@javascript-obfuscator/escodegen - Full support of
nullish-coalescing. Fixed #604 - Support for
exportedfield ofExportAllDeclarationnode. Fixed #710
- Added ignoring of all object members previous to
SpreadElementwhentransformObjectKeysoption is enabled. Fixed #797
- Added
ExportSpecifierTransformer. Fixed #791
- Fixed installation in
PowerShell. Fixed #783 - Tested under
Node.js@15
- Fixed missing rename of object pattern properties in some cases. Fixed #781
- Migration to
webpack@5 - Optimized performance of
ExpressionStatementsMergeTransformerwhensimplifyoption is enabled. Fixed #777 - Fixed broken
identifierNamesGenerator: 'mangled-shuffled'after2.2.0. Fixed #778
- Improved hierarchy of generated directories when
--outputis a directory path - Fixed wrong path generation for obfuscated files for
win32environment. Fixed #576 - Fixed wrong path generation under for source map for
win32environment. Fixed #760 javascript-obfuscatornow can be built underwin32environment
- Fixed #769
- Fixed
URI-malformedwhensplitStringsandstringArrayEncodingoptions are enabled. #530
- Small release with some README.md improvements that allow to use it on obfuscator.io
- New option:
forceTransformStringsallows force transform strings even if bystringArrayThreshold(or possible other thresholds in the future) they shouldn't be transformed. Implemented #657
- Fixed a rare bug with
identifierNamesGenerator: 'mangled'option that causes wrong identifier names generation
- New option:
stringArrayWrappersTypeallows to select a type of the wrappers that are appending by thestringArrayWrappersCountoption - Add force convert of unicode control characters to the unicode escape sequence. Fixed #747
- Fixed #745
- New option (enabled by default):
stringArrayWrappersCountsets the count of wrappers for thestring arrayinside each root or function scope - New option (enabled by default):
stringArrayWrappersChainedCallsenables the chained calls betweenstring arraywrappers
- New API:
getOptionsByPresetallows to get options for the passed options preset name
- Breaking change:
stringArrayEncodingoption now accepts an array of encodings. Each string will be randomly encoded with passed encoding
- Fixed regression bug with combination of
splitStringsandrenamePropertiesoption. #729
- New option:
optionsPresetallows to set options preset
- Improved rename of
deadCodeInjectiondead code identifiers. Fixed #708 - Reverted
TaggedTemplateLiteralobfuscation. #716
- Fixed obfuscation of literals of
ExportNamedDeclarationandExportAllDeclarationnodes
- Fixed #707
- Feature: Optional chaining support!
- Added
TaggedTemplateLiteralobfuscation. #696 - Improved
disableConsoleOutputtemplate. #691
- Improved obfuscation of destructured variables. #688
- Fixed runtime error
Uncaught SyntaxError: yield is a reserved identifierwhendeadCodeInjectionis enabled
domainLockoption patterns with leading dot character (.example.com) now cover root domains (example.com) in addition to all sub-domains (sub.example.com). #640
simplifyoption now affects all block statements. Improved variable declarations merging.
- New option:
numbersToExpressionsenables numbers conversion to expressions
- Prevented mutation of the name sequences of
mangledidentifier name generators
- Fixed runtime error when
IfStatementcontains only singleletorconstvariable declaration whensimlifyoption enabled. #661 - Fixed wrong
source-map: 'inline'encoding after1.3.0
- New
mangled-shuffledidentifier names generator based onmangledidentifier names generator
- New option:
simplifyenables additional code obfuscation through simplification
- Improvements of
stringArrayEncoding:base64andrc4 - CLI: added config file extension validation (it still supports
.jsand.jsonextensions) - Fixed #499
- Fixed performance regression of
Initializingstage after1.2.0
- Support of old browsers when
selfDefendingis enabled. #615
- Conditional comments will be removed from the code after obfuscation. #641
- Fixed #638
- New option:
renamePropertiesenables renaming of property names
- Fixed .d.ts typings. #623
- Looks like obfuscator is ready for the first stable release
- Fixed error during code generation for
ObjectPatternwith singleRestElement. #607
- Added correct
self-defendingcode fortarget: 'browser-no-eval'. #610
- Removed memory leak with
identifierNamesGenerator: 'mangled'
- Fixed change of kinds of variables for dead code with
deadCodeInjectionoption
- Removed
acorn-import-metapackage
- Fixed #590
- Fixed #593
- Fixed identifiers prefix generation for
obfuscateMultiplemethod
- Dependencies update, fixed https://www.npmjs.com/advisories/1488
- Feature: new method
obfuscateMultipleto obfuscation of multiple source codes
- Internal: new code transformers mechanism
- Supported obfuscation of files with hashbang operator, #471
- Fixed #575
- Fixed #569
- Fixed #568
- Fixed #563
- Additional fixes of #550
- Improved
mangledidentifier names generator logic - Improved
selfDefendinghelper logic - Fixed a bunch of conflicts between generated identifier names. Fixed #550. Fixed #549
- Prevented transformation of object keys in sequence expression that has
supercall - Support of output directory paths with a dot symbol
- Changed
--outputlogic. Now--outputvalue can describe if it's a file or a directory path. Check README.md for more info
- Fixed support of exponentiation operator. Fixed #534
- Added file path to the error message during directory obfuscation. Fixed #513
- Fixed #542
- Fixed rc4 encoded value collision: #538
- Fixed #535
- Reverted validation errors under
nodetarget forsourceMap*options
- Fixed #531
- Internal refactoring: completely new mechanism to rename variable names
- Dynamic import and
import.metasupport. Fixed #505 - Now usage of some browser-related options with
target: 'node'will cause a validation error - Increased
identifierNamesGenerator: 'mangledspeed - CLI: a file path will be displayed on obfuscation error. Fixed #513
- Fixed many
transformObjectKeysruntime errors - Fixed
Maximum call stack size exceedederror on large strings whensplitStringoption is enabled - Fixed #516
- Fixed #512
- Fixed #496
- Internal: switched from
awesome-typescript-loaderonts-loader
- Fixed #498
- New option:
shuffleStringArrayrandomly shuffles string array items - Fixed #494
- Internal change: switched AST parser from
espreeonacorn - Internal refactoring: refactoring of string array storage and related things
- Fixed
TypeError: Assignment to constant variablewhen auto-detection of kind of variables is insertedconstvariables forcontrolFlowStoragenodes
- Breaking: auto-detection of kind of variables of inserted nodes, based on most prevailing kind of variables of source code
- Fixed #486
- Fixed conditional comments in some rare cases
- Improved
transformObjectKeystransformation to cover more cases - Fixed #406
- Fixed #387
- Fixed #333
- Fixed #328
- Fixed typings. Now string values correctly assignable to enum-like options
- Fixed
for-await-ofstatement: #419
- Fixed identifier names generations for
mangledanddictionaryidentifier names generators - Fixed combination of
identifierNamesGenerator: dictionaryanddebugProtectionoptions seedoption now acceptsstringandnumbervalues
- Breaking: dropped support of Node 8 because of end of maintenance support
- New option value:
identifierNamesGeneratornow allows to set newdictionaryidentifier names generator - New option:
identifiersDictionarysets identifiers dictionary foridentifierNamesGenerator: dictionaryoption
Thanks to our contributors!
- Fixed
reservedNamesoption
Thanks to our contributors!
- The
splitStringsoption now correctly works withtransformObjectKeysoption - Internal
TransformersRunnerrework to support topological sort of node transformers
- The
splitStringsoption now correctly splits strings inside objects
- The
splitStringsoption now affects template literal strings
- New option:
splitStringssplits literal strings into chunks with length ofsplitStringsChunkLengthoption value - New option:
splitStringsChunkLengthsets chunk length ofsplitStringsoption
- Fixed #452
- Fixed #355
Thanks to our contributors!
- Breaking: require Node.js 8 after dependencies update
- Fixed #321
Thanks to our contributors!
- Fixed #437
Thanks to our contributors!
- Fixed #424
Thanks to our contributors!
- Fixed #317
- New option:
reservedStringsdisables transformation of string literals, which being matched by passed RegExp patterns - Fixed #313
- Fixed #309
- Fixed #307
- Fixed #297
- Browser version: Added browser version dist
- New Node API option:
inputFileNameallows to set name of the input file with source code. This name will used internally, for example, for source map generation. - #274
domainLocknow will work in SVG.
Fixed #273 - Fixed #271
- Fixed #264
- Fixed #260
- Fixed #252
- Fixed #247
- Correct obfuscation of object rest and spread properties
- Fixed #243
- Internal change: switched AST parser from
esprimaonespree - Breaking change: dropped
node@4andnode@5support. - Breaking change: renamed
extensionvalue oftargetoption onbrowser-no-eval. - Breaking change: disabled generation of identifiers, which being matched by
reservedNameoption. Fixed #216 - New CLI option:
excludeallows to exclude specific files or directories from obfuscation. - Correct obfuscation of
importandexportdeclarations. - Fixed #231
- Fixed #217
- Fixed #210
- Internal: refactoring of many things.
- Fixed #195
- Added code preview to
esprimaerror messages.
- Fixed #181
- Temporary fixed #181
- New option:
identifiersPrefixsets prefix for all global identifiers. - New option:
transformObjectKeysenables object keys transformation and obfuscation. - New feature:
evalexpressions obfuscation. - Breaking change: Now CLI obfuscating directory recursively. Fixed #157
- Fixed runtime errors when
deadCodeInjectionis enabled andidentifierNamesGeneratoris set tomangled. - Fixed #171
- Fixed #166
- Fixed #156
- Fixed #159
- Breaking change:
mangleoption was removed. - New option:
identifierNamesGeneratorallows to set identifier names generator (hexadecimalormangled). - Breaking change: all CLI options were renamed to
kebab-caseformat (--disableConsoleOutout->--disable-console-output). - Implemented custom
mangleoption algorithm withoutesmangle; fixed #110 - Comments with
@licenseand@preservewords won't be removed from obfuscated code. - Fixed #147
- Fixed #149
- Fixed #139
- Fixed #136
- Fixed #117
- New option:
targetallows to set target environment for obfuscated code. - Added ability to disable and enable obfuscation for specific parts of the code by adding conditional comments.
- Added obfuscation of
es2015class names. - CLI: added directory obfuscation.
- Fixed #98
- Fixed #94
- New option:
logenables logging of the information to the console. - New option:
renameGlobalsallows to enable obfuscation of global variable and function names with declaration.
- Fixed #78
- Fixed #76
- New option:
deadCodeInjection. With this option random blocks of dead code will add to the obfuscated code. - New option:
deadCodeInjectionThresholdallows to set percentage of nodes that will affected bydeadCodeInjection. - New option:
mangleenables mangling of variable names. - New CLI option:
--configallows to set config file with obfuscator options. - Breaking change:
disableConsoleOutputoption now disabled by default. - Breaking change:
escapeUnicodeSequenceoption now disabled by default. controlFlowFlatteningnow affects string literal nodes.- Increased runtime performance with
rc4stringArrayEncoding. - Added support for async functions
- Fixed #71
- Fixed #65
- Fixed #60
- Fixed #59
- Fixed #54
- Fixed #57
- Fixed #58
- Fixed #58
- Switched from
escodegentoescodegen-wallaby, fixed #50
- Removed coverage dir from npm package
- Fixed #37
- Breaking change: dropped
node@0.10andnode@0.12support. - New option:
controlFlowFlatteningallows to enable/disable Control Flow flattening. Control flow flattening is a structure transformation of the source code that hinders program comprehension. - New option:
controlFlowFlatteningThresholdallows to set percentage of nodes that will affected bycontrolFlowFlattening. - Significantly increased obfuscation performance.
- Huge internal refactoring.
- Better
es2015support: correct obfuscation ofTemplateLiteral,ArrayPattern,AssignmentPatternnodes. - Switched from
npmtoyarninternally. - Various bug fixes.
- Increased performance
- Fixed very rare
Cannot read property 'type' of undefinederror, whenRandomGeneratorUtils.getMathRandom()returned incorrect value1.
- Increased performance
- Breaking change: dropped
node@0.10andnode@0.12support. - Switched from
npmtoyarninternally.
- Transformers refactoring
- New option:
controlFlowFlatteningallows to enable/disable Control Flow flattening. Control flow flattening is a structure transformation of the source code that hinders program comprehension. - New option:
controlFlowFlatteningThresholdallows to set percentage of nodes that will affected bycontrolFlowFlattening. - Better
es2015support: correct obfuscation ofTemplateLiteral,ArrayPattern,AssignmentPatternnodes. - Obfuscation performance boost.
- Huge internal refactoring.
- Various bug fixes.
- Additional fixes for #29
- Fixed #29
selfDefendingoption now disabled by default.
- New option
seedsets seed for random generator. This is useful for creating repeatable results. - IE8 runtime error fix.
disableConsoleOutputoption now replacesconsole.xxxfunctions on empty function instead of infinity loop.
- Breaking options change:
unicodeArrayoption has been renamed tostringArray. - Breaking options change:
unicodeArrayThresholdoption has been renamed tostringArrayThreshold. - Breaking options change:
encodeUnicodeArrayoption has been renamed tostringArrayEncodingand now accepts following values:true|false|'base64'|'rc4'. - Breaking change: option
wrapUnicodeArrayCallswas removed and now all calls tostringArrayare always wrapped by special wrapper function. - New option
unicodeEscapeSequenceallows to enable/disable strings conversion to unicode escape sequence. - New option
domainLocklocks the obfuscated source code so it only runs on specific domains and/or sub-domains. - New option
sourceMapBaseUrlsets base url to the source map import url whensourceMapMode: 'separate'. - Custom nodes like
selfDefendingNodeorconsoleOutputNodenow inserted into deepest stack trace function call. - Fixed obfuscation of global variables and function names in some cases.
- Fixed wrong obfuscation of labels.
- Rewrite of many custom nodes.
- CLI missing polyfill fix #17
- IE error fix #14
- Obfuscator now returns an empty string instead of obfuscated code if source code is empty
- Fix of incorrect
Utils.decToHexmethod
- Breaking API change: now
obfuscate(sourceCode, options)returnsObfuscationResultobject insteadstring.ObfuscationResultobject contains two public methods:getObfuscatedCode()andgetSourceMap(). - CLI. Now any code can be obfuscated through CLI
javascript-obfuscatorcommand. SeeREADME.mdfor available options. - New option
sourceMapenables source map generation for obfuscated code. - New option
sourceMapModespecifies source map generation mode.