Browse Source

Added base web version

sanex3339 7 years ago
parent
commit
6bd872c13c

+ 5 - 0
CHANGELOG.md

@@ -1,5 +1,10 @@
 Change Log
 ===
+v0.17.0
+---
+* **Web version**: Added web version dist
+* Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/247
+
 v0.16.0
 ---
 * Correct obfuscation of object rest and spread properties

+ 20 - 6
README.md

@@ -4,11 +4,11 @@
   Author: Timofey Kachalov
   -->
 
-# JavaScript obfuscator for Node.js
+# JavaScript obfuscator
 
 ![logo](https://raw.githubusercontent.com/javascript-obfuscator/javascript-obfuscator/master/images/logo.png)
 
-JavaScript obfuscator is a powerful free obfuscator for JavaScript and Node.js with a wide number of features which provides protection for your source code.
+JavaScript obfuscator is a powerful free obfuscator for JavaScript with a wide number of features which provides protection for your source code.
 
 Example of obfuscated code: [gist.github.com](https://gist.github.com/sanex3339/ffc2876123b52e6d11ce45369fd53acf)
 
@@ -50,7 +50,9 @@ It is not recommended to obfuscate vendor scripts and polyfills, since the obfus
 
 ## Installation
 
-Install the package with Yarn or NPM and add it to your `devDependencies`:
+#### Using Yarn or NPM
+
+Install the package with Yarn or NPM and add it to your `dependencies` or `devDependencies`:
 
 ```sh
 $ yarn add --dev javascript-obfuscator
@@ -60,9 +62,21 @@ or
 $ npm install --save-dev javascript-obfuscator
 ```
 
-## Node.js usage
+#### In a Browser
+
+Add `<script>` tag with package:
+
+```html
+<script src="./node_modules/javascript-obfuscator/dist/index.web.js">
+```
+
+or require package from CDN:
+
+```html
+TODO
+```
 
-Here's an example of how to use it:
+## Usage
 
 ```javascript
 var JavaScriptObfuscator = require('javascript-obfuscator');
@@ -866,7 +880,7 @@ Try to run `npm link javascript-obfuscator` command or install it globally with
 ### Error `maximum call stack size exceeded`
 Likely this is `selfDefending` mechanism. Something is changing source code after obfuscation with `selfDefending` option.
 
-### Web version?
+### Online version?
 
 [obfuscator.io](https://obfuscator.io)
 

+ 1 - 1
bin/javascript-obfuscator

@@ -1,3 +1,3 @@
 #!/usr/bin/env node
 
-require('../dist/index').runCLI(process.argv);
+require('../dist/index.cli').obfuscate(process.argv);

File diff suppressed because it is too large
+ 23 - 0
dist/index.cli.js


File diff suppressed because it is too large
+ 0 - 0
dist/index.js


File diff suppressed because it is too large
+ 23 - 0
dist/index.web.js


+ 5 - 0
index.cli.ts

@@ -0,0 +1,5 @@
+"use strict";
+
+import { JavaScriptObfuscatorCLI } from './src/JavaScriptObfuscatorCLIFacade';
+
+module.exports = JavaScriptObfuscatorCLI;

+ 3 - 2
package.json

@@ -33,7 +33,6 @@
     "mkdirp": "0.5.1",
     "multimatch": "2.1.0",
     "opencollective": "1.0.3",
-    "pjson": "1.0.9",
     "reflect-metadata": "0.1.12",
     "source-map-support": "0.5.4",
     "string-template": "1.0.0",
@@ -64,6 +63,7 @@
     "coveralls": "3.0.0",
     "istanbul": "1.1.0-alpha.1",
     "mocha": "5.1.0",
+    "pjson": "1.0.9",
     "pre-commit": "1.2.2",
     "rimraf": "2.6.2",
     "sinon": "4.5.0",
@@ -85,7 +85,8 @@
   },
   "scripts": {
     "start": "scripts/start",
-    "webpack": "scripts/webpack",
+    "webpack:prod": "scripts/webpack-prod",
+    "webpack:dev": "scripts/webpack-dev",
     "build": "scripts/build",
     "watch": "scripts/watch",
     "removeCacheDir": "scripts/remove-cache-dir",

+ 1 - 1
scripts/build

@@ -1,6 +1,6 @@
 #!/bin/bash
 
 yarn run removeCacheDir &&
-yarn run webpack &&
+yarn run webpack:prod &&
 yarn run tslint &&
 yarn test

+ 1 - 1
scripts/watch

@@ -1,3 +1,3 @@
 #!/bin/bash
 
-$(yarn bin)/webpack --mode development --watch
+$(yarn bin)/webpack --config webpack/webpack.config.js --mode development --watch

+ 0 - 3
scripts/webpack

@@ -1,3 +0,0 @@
-#!/bin/bash
-
-$(yarn bin)/webpack --mode production

+ 3 - 0
scripts/webpack-dev

@@ -0,0 +1,3 @@
+#!/bin/bash
+
+$(yarn bin)/webpack --config webpack/webpack.config.js --mode production

+ 3 - 0
scripts/webpack-prod

@@ -0,0 +1,3 @@
+#!/bin/bash
+
+$(yarn bin)/webpack --config webpack/webpack.config.js --config webpack/webpack.web.config.js --mode production

+ 1 - 2
src/JavaScriptObfuscator.ts

@@ -4,7 +4,6 @@ import { ServiceIdentifiers } from './container/ServiceIdentifiers';
 import * as escodegen from 'escodegen-wallaby';
 import * as espree from 'espree';
 import * as ESTree from 'estree';
-import * as packageJson from 'pjson';
 
 import { IGeneratorOutput } from './interfaces/IGeneratorOutput';
 import { IJavaScriptObfuscator } from './interfaces/IJavaScriptObfsucator';
@@ -127,7 +126,7 @@ export class JavaScriptObfuscator implements IJavaScriptObfuscator {
      */
     public obfuscate (sourceCode: string): IObfuscationResult {
         const timeStart: number = Date.now();
-        this.logger.info(LoggingMessage.Version, packageJson.version);
+        this.logger.info(LoggingMessage.Version, '0.16.0');
         this.logger.info(LoggingMessage.ObfuscationStarted);
         this.logger.info(LoggingMessage.RandomGeneratorSeed, this.randomGenerator.getSeed());
 

+ 17 - 0
src/JavaScriptObfuscatorCLIFacade.ts

@@ -0,0 +1,17 @@
+import 'reflect-metadata';
+
+import { JavaScriptObfuscatorCLI } from './cli/JavaScriptObfuscatorCLI';
+
+class JavaScriptObfuscatorCLIFacade {
+    /**
+     * @param {string[]} argv
+     */
+    public static obfuscate (argv: string[]): void {
+        const javaScriptObfuscatorCLI: JavaScriptObfuscatorCLI = new JavaScriptObfuscatorCLI(argv);
+
+        javaScriptObfuscatorCLI.initialize();
+        javaScriptObfuscatorCLI.run();
+    }
+}
+
+export { JavaScriptObfuscatorCLIFacade as JavaScriptObfuscatorCLI };

+ 5 - 11
src/JavaScriptObfuscatorFacade.ts

@@ -9,9 +9,13 @@ import { IJavaScriptObfuscator } from './interfaces/IJavaScriptObfsucator';
 import { IObfuscationResult } from './interfaces/IObfuscationResult';
 
 import { InversifyContainerFacade } from './container/InversifyContainerFacade';
-import { JavaScriptObfuscatorCLI } from './cli/JavaScriptObfuscatorCLI';
 
 class JavaScriptObfuscatorFacade {
+    /**
+     * @type {string | undefined}
+     */
+    public static version: string = process.env.VERSION || 'unknown';
+
     /**
      * @param {string} sourceCode
      * @param {TInputOptions} inputOptions
@@ -30,16 +34,6 @@ class JavaScriptObfuscatorFacade {
 
         return obfuscationResult;
     }
-
-    /**
-     * @param {string[]} argv
-     */
-    public static runCLI (argv: string[]): void {
-        const javaScriptObfuscatorCLI: JavaScriptObfuscatorCLI = new JavaScriptObfuscatorCLI(argv);
-
-        javaScriptObfuscatorCLI.initialize();
-        javaScriptObfuscatorCLI.run();
-    }
 }
 
 export { JavaScriptObfuscatorFacade as JavaScriptObfuscator };

+ 1 - 2
src/cli/JavaScriptObfuscatorCLI.ts

@@ -1,5 +1,4 @@
 import * as commander from 'commander';
-import * as packageJson from 'pjson';
 import * as path from 'path';
 
 import { TInputCLIOptions } from '../types/options/TInputCLIOptions';
@@ -186,7 +185,7 @@ export class JavaScriptObfuscatorCLI implements IInitializable {
         this.commands
             .usage('<inputPath> [options]')
             .version(
-                packageJson.version,
+                process.env.VERSION || 'unknown',
                 '-v, --version'
             )
             .option(

+ 20 - 20
test/functional-tests/cli/JavaScriptObfuscatorCLI.spec.ts

@@ -7,7 +7,7 @@ import { assert } from 'chai';
 
 import { StdoutWriteMock } from '../../mocks/StdoutWriteMock';
 
-import { JavaScriptObfuscator } from '../../../src/JavaScriptObfuscatorFacade';
+import { JavaScriptObfuscatorCLI } from '../../../src/JavaScriptObfuscatorCLIFacade';
 
 describe('JavaScriptObfuscatorCLI', function (): void {
     this.timeout(100000);
@@ -35,7 +35,7 @@ describe('JavaScriptObfuscatorCLI', function (): void {
                 let isFileExist: boolean;
 
                 before(() => {
-                    JavaScriptObfuscator.runCLI([
+                    JavaScriptObfuscatorCLI.obfuscate([
                         'node',
                         'javascript-obfuscator',
                         fixtureFilePath,
@@ -67,7 +67,7 @@ describe('JavaScriptObfuscatorCLI', function (): void {
                     before(() => {
                         outputFixturesFilePath = `${fixturesDirName}/${outputFileName}`;
 
-                        JavaScriptObfuscator.runCLI([
+                        JavaScriptObfuscatorCLI.obfuscate([
                             'node',
                             'javascript-obfuscator',
                             fixtureFilePath
@@ -89,7 +89,7 @@ describe('JavaScriptObfuscatorCLI', function (): void {
                     let testFunc: () => void;
 
                     before(() => {
-                        testFunc = () => JavaScriptObfuscator.runCLI([
+                        testFunc = () => JavaScriptObfuscatorCLI.obfuscate([
                             'node',
                             'javascript-obfuscator',
                             'wrong/file/path'
@@ -111,7 +111,7 @@ describe('JavaScriptObfuscatorCLI', function (): void {
                     before(() => {
                         fs.writeFileSync(outputFilePath, 'data');
 
-                        testFunc = () => JavaScriptObfuscator.runCLI([
+                        testFunc = () => JavaScriptObfuscatorCLI.obfuscate([
                             'node',
                             'javascript-obfuscator',
                             outputFilePath
@@ -133,7 +133,7 @@ describe('JavaScriptObfuscatorCLI', function (): void {
                     let isFileExist: boolean;
 
                     before(() => {
-                        JavaScriptObfuscator.runCLI([
+                        JavaScriptObfuscatorCLI.obfuscate([
                             'node',
                             'javascript-obfuscator',
                             fixtureFilePath,
@@ -155,7 +155,7 @@ describe('JavaScriptObfuscatorCLI', function (): void {
                     let testFunc: () => void;
 
                     before(() => {
-                        testFunc = () => JavaScriptObfuscator.runCLI([
+                        testFunc = () => JavaScriptObfuscatorCLI.obfuscate([
                             'node',
                             'javascript-obfuscator',
                             fixtureFilePath,
@@ -201,7 +201,7 @@ describe('JavaScriptObfuscatorCLI', function (): void {
                     outputFixturesFilePath2 = `${directoryPath}/${outputFileName2}`;
                     outputFixturesFilePath3 = `${directoryPath}/${outputFileName3}`;
 
-                    JavaScriptObfuscator.runCLI([
+                    JavaScriptObfuscatorCLI.obfuscate([
                         'node',
                         'javascript-obfuscator',
                         directoryPath,
@@ -263,7 +263,7 @@ describe('JavaScriptObfuscatorCLI', function (): void {
                     outputFixturesFilePath1 = `${directoryPath}/${outputFileName1}`;
                     outputFixturesFilePath2 = `${directoryPath}/${outputFileName2}`;
 
-                    JavaScriptObfuscator.runCLI([
+                    JavaScriptObfuscatorCLI.obfuscate([
                         'node',
                         'javascript-obfuscator',
                         directoryPath,
@@ -322,7 +322,7 @@ describe('JavaScriptObfuscatorCLI', function (): void {
                     outputFixturesFilePath2 = `${outputDirectoryPath}/${directoryPath}/${outputFileName2}`;
                     outputFixturesFilePath3 = `${outputDirectoryPath}/${directoryPath}/${outputFileName3}`;
 
-                    JavaScriptObfuscator.runCLI([
+                    JavaScriptObfuscatorCLI.obfuscate([
                         'node',
                         'javascript-obfuscator',
                         directoryPath,
@@ -388,7 +388,7 @@ describe('JavaScriptObfuscatorCLI', function (): void {
                         outputFixturesFilePath2 = `${directoryPath}/${outputFileName2}`;
                         outputFixturesFilePath3 = `${directoryPath}/${outputFileName3}`;
 
-                        JavaScriptObfuscator.runCLI([
+                        JavaScriptObfuscatorCLI.obfuscate([
                             'node',
                             'javascript-obfuscator',
                             directoryPath,
@@ -453,7 +453,7 @@ describe('JavaScriptObfuscatorCLI', function (): void {
                         outputFixturesFilePath2 = `${directoryPath}/${outputFileName2}`;
                         outputFixturesFilePath3 = `${directoryPath}/${outputFileName3}`;
 
-                        JavaScriptObfuscator.runCLI([
+                        JavaScriptObfuscatorCLI.obfuscate([
                             'node',
                             'javascript-obfuscator',
                             directoryPath,
@@ -503,7 +503,7 @@ describe('JavaScriptObfuscatorCLI', function (): void {
                         sourceMapObject: any;
 
                     before(() => {
-                        JavaScriptObfuscator.runCLI([
+                        JavaScriptObfuscatorCLI.obfuscate([
                             'node',
                             'javascript-obfuscator',
                             fixtureFilePath,
@@ -554,7 +554,7 @@ describe('JavaScriptObfuscatorCLI', function (): void {
                         sourceMapObject: any;
 
                     before(() => {
-                        JavaScriptObfuscator.runCLI([
+                        JavaScriptObfuscatorCLI.obfuscate([
                             'node',
                             'javascript-obfuscator',
                             fixtureFilePath,
@@ -611,7 +611,7 @@ describe('JavaScriptObfuscatorCLI', function (): void {
                         sourceMapObject: any;
 
                     before(() => {
-                        JavaScriptObfuscator.runCLI([
+                        JavaScriptObfuscatorCLI.obfuscate([
                             'node',
                             'javascript-obfuscator',
                             fixtureFilePath,
@@ -664,7 +664,7 @@ describe('JavaScriptObfuscatorCLI', function (): void {
                 let isFileExist: boolean;
 
                 before(() => {
-                    JavaScriptObfuscator.runCLI([
+                    JavaScriptObfuscatorCLI.obfuscate([
                         'node',
                         'javascript-obfuscator',
                         fixtureFilePath,
@@ -708,7 +708,7 @@ describe('JavaScriptObfuscatorCLI', function (): void {
                 beforeEach(() => {
                     stdoutWriteMock.mute();
 
-                    JavaScriptObfuscator.runCLI([
+                    JavaScriptObfuscatorCLI.obfuscate([
                         'node',
                         'javascript-obfuscator',
                         fixtureFilePath,
@@ -730,7 +730,7 @@ describe('JavaScriptObfuscatorCLI', function (): void {
                 beforeEach(() => {
                     stdoutWriteMock.mute();
 
-                    JavaScriptObfuscator.runCLI([
+                    JavaScriptObfuscatorCLI.obfuscate([
                         'node',
                         'javascript-obfuscator'
                     ]);
@@ -756,7 +756,7 @@ describe('JavaScriptObfuscatorCLI', function (): void {
                 sourceMapObject: any;
 
             before(() => {
-                JavaScriptObfuscator.runCLI([
+                JavaScriptObfuscatorCLI.obfuscate([
                     'node',
                     'javascript-obfuscator',
                     fixtureFilePath,
@@ -804,7 +804,7 @@ describe('JavaScriptObfuscatorCLI', function (): void {
             let isFileExist: boolean;
 
             before(() => {
-                JavaScriptObfuscator.runCLI([
+                JavaScriptObfuscatorCLI.obfuscate([
                     'node',
                     'javascript-obfuscator',
                     fixtureFilePath,

+ 24 - 0
tsconfig.web.json

@@ -0,0 +1,24 @@
+{
+  "compilerOptions": {
+    "emitDecoratorMetadata": true,
+    "experimentalDecorators": true,
+    "lib": [
+      "es2017",
+      "dom"
+    ],
+    "module": "commonjs",
+    "esModuleInterop": true,
+    "noImplicitThis": false,
+    "noUnusedLocals": true,
+    "removeComments": true,
+    "sourceMap": true,
+    "strict": true,
+    "target": "es2017"
+  },
+  "exclude": [
+    "node_modules",
+    "test"
+  ],
+  "compileOnSave": false,
+  "buildOnSave": false
+}

+ 28 - 0
webpack/utils/WebpackUtils.js

@@ -0,0 +1,28 @@
+const fs = require('fs');
+
+const copyright = 'Copyright (C) 2016-2018 Timofey Kachalov <[email protected]>';
+
+class WebpackUtils {
+    /**
+     * @param entries
+     * @returns {string[]}
+     */
+    static getBannerText (...entries) {
+        const lineSeparator = '\n\n';
+
+        return entries.reduce((bannerText, entry) => {
+            return `${bannerText}${entry}${lineSeparator}`
+        }, '');
+    }
+
+    static getLicenseText () {
+        return `/*!\n${copyright}\n\n` +
+            fs.readFileSync('./LICENSE.BSD', 'utf8') + "\n*/";
+    }
+
+    static getSourceMapSupportImport () {
+        return `require("source-map-support").install();`;
+    }
+}
+
+module.exports.WebpackUtils = WebpackUtils;

+ 15 - 35
webpack.config.js → webpack/webpack.config.js

@@ -1,45 +1,19 @@
 'use strict';
 
-const fs = require("fs");
 const nodeExternals = require('webpack-node-externals');
 const webpack = require('webpack');
 const CheckerPlugin = require('awesome-typescript-loader').CheckerPlugin;
 const TSLintPlugin = require('tslint-webpack-plugin');
+const packageJson = require('pjson');
 
-const copyright = 'Copyright (C) 2016-2018 Timofey Kachalov <[email protected]>';
-
-/**
- * @return {string}
- */
-const getLicenseText = () => {
-    return `/*!\n${copyright}\n\n` +
-        fs.readFileSync('./LICENSE.BSD', 'utf8') + "\n*/";
-};
-
-/**
- * @return {string}
- */
-const getSourceMapSupportImport = () => {
-    return `require("source-map-support").install();`;
-};
-
-/**
- * @return {string}
- */
-const getBannerText = () => {
-    const lineSeparator = '\n\n';
-
-    return getLicenseText() +
-        lineSeparator +
-        getSourceMapSupportImport() +
-        lineSeparator;
-};
+const WebpackUtils = require('./utils/WebpackUtils').WebpackUtils;
 
 module.exports = {
+    devtool: 'source-map',
     entry: {
-        'index': './index.ts'
+        'index': './index.ts',
+        'index.cli': './index.cli.ts'
     },
-    devtool: 'source-map',
     target: 'node',
     externals: [nodeExternals()],
     module: {
@@ -63,11 +37,17 @@ module.exports = {
     plugins: [
         new webpack.BannerPlugin(
             {
-                banner: getBannerText(),
+                banner: WebpackUtils.getBannerText(
+                    WebpackUtils.getLicenseText(),
+                    WebpackUtils.getSourceMapSupportImport()
+                ),
                 raw: true,
                 entryOnly: false
             }
         ),
+        new webpack.EnvironmentPlugin({
+            VERSION: packageJson.version
+        }),
         new CheckerPlugin(),
         new TSLintPlugin({
             files: ['./src/**/*.ts'],
@@ -76,10 +56,10 @@ module.exports = {
         })
     ],
     output: {
-        libraryTarget:  "commonjs2",
-        library: "JavaScriptObfuscator"
+        libraryTarget:  'commonjs2',
+        library: 'JavaScriptObfuscator'
     },
     stats: {
         maxModules: 0
     }
-};
+};

+ 57 - 0
webpack/webpack.web.config.js

@@ -0,0 +1,57 @@
+'use strict';
+
+const webpack = require('webpack');
+const packageJson = require('pjson');
+
+const WebpackUtils = require('./utils/WebpackUtils').WebpackUtils;
+
+module.exports = {
+    devtool: 'source-map',
+    entry: {
+        'index': './index.ts'
+    },
+    target: 'web',
+    module: {
+        exprContextCritical: false,
+        rules: [
+            {
+                test: /\.ts(x?)$/,
+                loader: 'awesome-typescript-loader',
+                query: {
+                    useBabel: true,
+                    babelCore: '@babel/core',
+                    useCache: true,
+                    forceIsolatedModules: true,
+                    configFileName: 'tsconfig.web.json'
+                }
+            }
+        ]
+    },
+    resolve: {
+        extensions: ['.ts', '.js']
+    },
+    plugins: [
+        new webpack.BannerPlugin(
+            {
+                banner: WebpackUtils.getBannerText(WebpackUtils.getLicenseText()),
+                raw: true,
+                entryOnly: false
+            }
+        ),
+        new webpack.EnvironmentPlugin({
+            VERSION: packageJson.version
+        })
+    ],
+    output: {
+        libraryTarget: 'var',
+        library: 'JavaScriptObfuscator',
+        filename: 'index.web.js'
+    },
+    performance: {
+        hints: false
+    },
+    stats: {
+        maxModules: 0,
+        warnings: false
+    }
+};

Some files were not shown because too many files changed in this diff