Skip to content

Commit 1766da2

Browse files
Pavel DranichnikovPavel Dranichnikov
Pavel Dranichnikov
authored and
Pavel Dranichnikov
committed
Initial commit
0 parents  commit 1766da2

File tree

6 files changed

+128
-0
lines changed

6 files changed

+128
-0
lines changed

__mocks__/javascript-obfuscator.js

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
module.exports = {
2+
obfuscate: (code, options)=>({
3+
//Our fake obfuscator will simply add `;` to the code.
4+
getObfuscatedCode: ()=>`${code};`,
5+
//It'll also return a fake source map
6+
getSourceMap: ()=> ({
7+
version : 3,
8+
file: "out.js",
9+
sourceRoot : "",
10+
sources: ["foo.js", "bar.js"],
11+
names: ["src", "maps", "are", "fun"],
12+
mappings: "AAgBC,SAAQ,CAAEA"
13+
})
14+
})
15+
};

package.json

+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
{
2+
"name": "rollup-plugin-javascript-obfuscator",
3+
"version": "1.0.0",
4+
"description": "Plugin for Rollup to obfuscate JS code",
5+
"main": "dist/rollup-plugin-javascript-obfuscator.cjs.js",
6+
"jsnext:main": "dist/rollup-plugin-javascript-obfuscator.es.js",
7+
"scripts": {
8+
"test": "jest",
9+
"pretest": "npm run build",
10+
"coverage": "npm test -- --coverage",
11+
"build": "rollup -c -f cjs -o dist/rollup-plugin-javascript-obfuscator.cjs.js && rollup -c -f es -o dist/rollup-plugin-javascript-obfuscator.es.js",
12+
"prebuild": "rm -rf dist/*"
13+
},
14+
"keywords": [
15+
"rollup",
16+
"rollup-plugin",
17+
"config",
18+
"node-config"
19+
],
20+
"author": "Wain-PC",
21+
"license": "MIT",
22+
"devDependencies": {
23+
"coveralls": "^2.13.1",
24+
"jest": "^20.0.4",
25+
"rollup": "^0.45.2",
26+
"rollup-plugin-buble": "^0.15.0"
27+
},
28+
"dependencies": {
29+
"javascript-obfuscator": "^0.10.1"
30+
},
31+
"jest": {
32+
"collectCoverage": true,
33+
"collectCoverageFrom": [
34+
"dist/rollup-plugin-javascript-obfuscator.cjs.js"
35+
],
36+
"coverageDirectory": "dist/coverage"
37+
}
38+
}

rollup.config.js

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import buble from 'rollup-plugin-buble';
2+
3+
const pkg = require( './package.json' ),
4+
external = Object.keys( pkg.dependencies );
5+
6+
export default {
7+
entry: 'src/index.js',
8+
targets: [
9+
{ dest: pkg.main, format: 'cjs' },
10+
{ dest: pkg.module, format: 'es' }
11+
],
12+
plugins: [ buble() ],
13+
external: external,
14+
sourceMap: true
15+
};

src/index.js

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import JavaScriptObfuscator from 'javascript-obfuscator';
2+
3+
export default function replaceConfig(options = {}) {
4+
return {
5+
name: 'javascript-obfuscator',
6+
7+
transform(code) {
8+
const obfuscationResult = JavaScriptObfuscator.obfuscate(String(code), options);
9+
let result = {code: obfuscationResult.getObfuscatedCode()};
10+
11+
if (options.sourceMap && options.sourceMapMode !== 'inline') {
12+
result.map = obfuscationResult.getSourceMap();
13+
}
14+
15+
return result;
16+
}
17+
};
18+
19+
}

test/fixtures/simple.js

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
console.log("Hello, world!")

test/test.js

+40
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
const rollup = require('rollup'),
2+
obfuscatorPlugin = require('..');
3+
4+
process.chdir(__dirname);
5+
6+
7+
const testFunc = function (entry, configValue, expectedValue, expectedSourceMap) {
8+
return function () {
9+
expect.assertions(2);
10+
return rollup.rollup({
11+
entry: `./test/fixtures/${entry}.js`,
12+
plugins: [
13+
obfuscatorPlugin(configValue)
14+
]
15+
}).then(function (bundle) {
16+
return bundle.generate({format: 'es'}).then(function (res) {
17+
expect(res.code).toContain(expectedValue);
18+
if (expectedSourceMap) {
19+
expect(res.map).toBeInstanceOf(Object);
20+
}
21+
else {
22+
expect(res.map).toBe(null);
23+
}
24+
});
25+
});
26+
}
27+
};
28+
29+
describe('rollup-plugin-javascript-obfuscator', function () {
30+
it('obfuscates the code', testFunc('simple', {}, 'console.log("Hello, world!");'));
31+
32+
//TODO: make this work. Strange stuff...
33+
it.skip('generates source maps correctly', testFunc('simple', {sourceMap: true}, 'console.log("Hello, world!");', true));
34+
35+
it('generates inline source maps correctly', testFunc('simple', {
36+
sourceMap: true,
37+
sourceMapMode: 'inline'
38+
}, 'console.log("Hello, world!");'));
39+
40+
});

0 commit comments

Comments
 (0)