mirror of
https://github.com/javascript-obfuscator/javascript-obfuscator
synced 2026-08-09 12:42:29 +00:00
Merge branch 'master' into rotate-string-array-improvements
# Conflicts: # CHANGELOG.md # dist/index.browser.js # dist/index.cli.js # dist/index.js # package.json
This commit is contained in:
+3
-3
@@ -168,7 +168,7 @@ describe('SplitStringTransformer', () => {
|
||||
describe('Variant #10: string with emoji', () => {
|
||||
describe('Variant #1: single emoji', () => {
|
||||
it('should correctly split string with emoji', () => {
|
||||
const regExp: RegExp = /^'a' *\+ *'b' *\+ *'👋🏼' *\+ *'c' *\+ *'d';$/;
|
||||
const regExp: RegExp = /^var test *= *'a' *\+ *'b' *\+ *'👋🏼' *\+ *'c' *\+ *'d'; *test;$/;
|
||||
|
||||
const code: string = readFileAsString(__dirname + '/fixtures/string-with-emoji-1.js');
|
||||
|
||||
@@ -206,7 +206,7 @@ describe('SplitStringTransformer', () => {
|
||||
|
||||
describe('Variant #2: multiple emoji', () => {
|
||||
it('should correctly split string with emoji', () => {
|
||||
const regExp: RegExp = /^'a' *\+ *'b' *\+ *'😴' *\+ *'😄' *\+ *'c' *\+ *'d';$/;
|
||||
const regExp: RegExp = /^var test *= *'a' *\+ *'b' *\+ *'😴' *\+ *'😄' *\+ *'c' *\+ *'d'; *test;$/;
|
||||
|
||||
const code: string = readFileAsString(__dirname + '/fixtures/string-with-emoji-2.js');
|
||||
|
||||
@@ -244,7 +244,7 @@ describe('SplitStringTransformer', () => {
|
||||
|
||||
describe('Variant #3: correct split emoji', () => {
|
||||
it('should correctly split string with emoji', () => {
|
||||
const regExp: RegExp = /^'ab👋🏼' *\+ *'cd';$/;
|
||||
const regExp: RegExp = /^var test *= *'ab👋🏼' *\+ *'cd'; *test;$/;
|
||||
|
||||
const code: string = readFileAsString(__dirname + '/fixtures/string-with-emoji-1.js');
|
||||
|
||||
|
||||
+2
-1
@@ -1 +1,2 @@
|
||||
'ab👋🏼cd';
|
||||
var test = 'ab👋🏼cd';
|
||||
test;
|
||||
|
||||
+2
-1
@@ -1 +1,2 @@
|
||||
'ab😴😄cd';
|
||||
var test = 'ab😴😄cd';
|
||||
test;
|
||||
+124
@@ -0,0 +1,124 @@
|
||||
import { assert } from 'chai';
|
||||
|
||||
import { NO_ADDITIONAL_NODES_PRESET } from '../../../../../src/options/presets/NoCustomNodes';
|
||||
|
||||
import { readFileAsString } from '../../../../helpers/readFileAsString';
|
||||
|
||||
import { JavaScriptObfuscator } from '../../../../../src/JavaScriptObfuscatorFacade';
|
||||
|
||||
describe('DirectivePlacementTransformer', function () {
|
||||
this.timeout(120000);
|
||||
|
||||
describe('Program lexical scope', () => {
|
||||
describe('Variant #1: directive at the top of program scope', () => {
|
||||
const directiveRegExp: RegExp = /^'use strict'; *var _0x([a-f0-9]){4} *= *\['test'];/;
|
||||
|
||||
let obfuscatedCode: string;
|
||||
|
||||
before(() => {
|
||||
const code: string = readFileAsString(__dirname + '/fixtures/top-of-program-scope.js');
|
||||
|
||||
obfuscatedCode = JavaScriptObfuscator.obfuscate(
|
||||
code,
|
||||
{
|
||||
...NO_ADDITIONAL_NODES_PRESET,
|
||||
stringArray: true,
|
||||
stringArrayThreshold: 1
|
||||
}
|
||||
).getObfuscatedCode();
|
||||
});
|
||||
|
||||
it('should keep directive at the top of program scope', () => {
|
||||
assert.match(obfuscatedCode, directiveRegExp);
|
||||
});
|
||||
});
|
||||
|
||||
describe('Variant #2: directive-like string literal at the middle of program scope', () => {
|
||||
const directiveRegExp: RegExp = new RegExp(
|
||||
'^var _0x([a-f0-9]){4} *= *\\[\'test\', *\'use\\\\x20strict\']; *' +
|
||||
'.*?' +
|
||||
'var test *= *_0x([a-f0-9]){4}\\(0x0\\); *' +
|
||||
'_0x([a-f0-9]){4}\\(0x1\\);'
|
||||
);
|
||||
|
||||
let obfuscatedCode: string;
|
||||
|
||||
before(() => {
|
||||
const code: string = readFileAsString(__dirname + '/fixtures/middle-of-program-scope.js');
|
||||
|
||||
obfuscatedCode = JavaScriptObfuscator.obfuscate(
|
||||
code,
|
||||
{
|
||||
...NO_ADDITIONAL_NODES_PRESET,
|
||||
stringArray: true,
|
||||
stringArrayThreshold: 1
|
||||
}
|
||||
).getObfuscatedCode();
|
||||
});
|
||||
|
||||
it('should keep directive-like string literal at the middle of program scope', () => {
|
||||
assert.match(obfuscatedCode, directiveRegExp);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('Function lexical scope', () => {
|
||||
describe('Variant #1: directive at the top of function scope', () => {
|
||||
const directiveRegExp: RegExp = new RegExp(
|
||||
'function test\\(\\) *{ *' +
|
||||
'\'use strict\'; *' +
|
||||
'var _0x([a-f0-9]){4,6} *= *_0x([a-f0-9]){4}; *' +
|
||||
'var _0x([a-f0-9]){4,6} *= *_0x([a-f0-9]){4,6}\\(0x0\\);'
|
||||
);
|
||||
|
||||
let obfuscatedCode: string;
|
||||
|
||||
before(() => {
|
||||
const code: string = readFileAsString(__dirname + '/fixtures/top-of-function-scope.js');
|
||||
|
||||
obfuscatedCode = JavaScriptObfuscator.obfuscate(
|
||||
code,
|
||||
{
|
||||
...NO_ADDITIONAL_NODES_PRESET,
|
||||
stringArray: true,
|
||||
stringArrayThreshold: 1,
|
||||
stringArrayWrappersCount: 1
|
||||
}
|
||||
).getObfuscatedCode();
|
||||
});
|
||||
|
||||
it('should keep directive at the top of function scope', () => {
|
||||
assert.match(obfuscatedCode, directiveRegExp);
|
||||
});
|
||||
});
|
||||
|
||||
describe('Variant #2: directive-like string literal at the middle of function scope', () => {
|
||||
const directiveRegExp: RegExp = new RegExp(
|
||||
'function test\\(\\) *{ *' +
|
||||
'var _0x([a-f0-9]){4,6} *= *_0x([a-f0-9]){4}; *' +
|
||||
'var _0x([a-f0-9]){4,6} *= *_0x([a-f0-9]){4,6}\\(0x0\\);' +
|
||||
'_0x([a-f0-9]){4,6}\\(0x1\\);'
|
||||
);
|
||||
|
||||
let obfuscatedCode: string;
|
||||
|
||||
before(() => {
|
||||
const code: string = readFileAsString(__dirname + '/fixtures/middle-of-function-scope.js');
|
||||
|
||||
obfuscatedCode = JavaScriptObfuscator.obfuscate(
|
||||
code,
|
||||
{
|
||||
...NO_ADDITIONAL_NODES_PRESET,
|
||||
stringArray: true,
|
||||
stringArrayThreshold: 1,
|
||||
stringArrayWrappersCount: 1
|
||||
}
|
||||
).getObfuscatedCode();
|
||||
});
|
||||
|
||||
it('should keep directive-like string literal at the middle of function scope', () => {
|
||||
assert.match(obfuscatedCode, directiveRegExp);
|
||||
});
|
||||
})
|
||||
});
|
||||
});
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
function test () {
|
||||
var test = 'test';
|
||||
'use strict';
|
||||
}
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
var test = 'test';
|
||||
'use strict';
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
function test () {
|
||||
'use strict';
|
||||
var test = 'test';
|
||||
}
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
'use strict';
|
||||
var test = 'test';
|
||||
@@ -98,6 +98,7 @@ import './functional-tests/node-transformers/converting-transformers/object-patt
|
||||
import './functional-tests/node-transformers/converting-transformers/split-string-transformer/SplitStringTransformer.spec';
|
||||
import './functional-tests/node-transformers/converting-transformers/template-literal-transformer/TemplateLiteralTransformer.spec';
|
||||
import './functional-tests/node-transformers/dead-code-injection-transformers/DeadCodeInjectionTransformer.spec';
|
||||
import './functional-tests/node-transformers/finalizing-transformers/directive-placement-transformer/DirectivePlacementTransformer.spec';
|
||||
import './functional-tests/node-transformers/finalizing-transformers/escape-sequence-transformer/EscapeSequenceTransformer.spec';
|
||||
import './functional-tests/node-transformers/initializing-transformers/comments-transformer/CommentsTransformer.spec';
|
||||
import './functional-tests/node-transformers/preparing-transformers/eval-call-expression-transformer/EvalCallExpressionTransformer.spec';
|
||||
|
||||
@@ -39,7 +39,7 @@ describe('NodeMetadata', () => {
|
||||
node = NodeFactory.literalNode('foo');
|
||||
node.metadata = {};
|
||||
node.metadata.replacedLiteral = true;
|
||||
value = NodeMetadata.get<ESTree.LiteralNodeMetadata>(node, 'replacedLiteral');
|
||||
value = NodeMetadata.get<ESTree.LiteralNodeMetadata, 'replacedLiteral'>(node, 'replacedLiteral');
|
||||
});
|
||||
|
||||
it('should get metadata value of the node', () => {
|
||||
|
||||
Reference in New Issue
Block a user