JavaScript を貼り付けて、同じ動作の難読化コードをコピーできます。ローカル名の改名、文字列のエスケープ、ブラケット記法への変換、コメント削除を行います。
ブラウザ内でローカルに実行JavaScript を貼り付けると、ローカル名の変更、文字列の \xNN・\uNNNN エスケープ化、ドット記法からブラケット記法への変換、コメントの削除を行った同じプログラムが返ります。コードは同じ結果で動作し続け、処理はすべてこのタブ内で完結して何も送信されません。
これは偶発的な読み取りを難しくする難読化であり、暗号化ではありません。ロジックはそのまま残るため、API キーや業務ルールを隠す用途には使えず、読める状態の原本も保管してください。出力を手作業でデバッグするのは骨が折れます。
コメントは削除されますが改行は残るため、// の削除が次の行を飲み込むことはありません。貼り付けたコード内で宣言された識別子(変数、関数、引数、クラス、catch の束縛)は、スコープチェーンに従って短い生成名に変更されます。外部から来る名前やグローバルはそのままです。
文字列リテラルは1文字ずつ \xNN または \uNNNN エスケープに書き換えられ、"use strict" ディレクティブはそのまま残ります。ドットによるメンバーアクセスはブラケットに変わり、console.log は console["\x6c\x6f\x67"] になります。オプショナルチェーンも同じ規則(a?.b は a?.["b"])です。new と import の後ろはそのままにし、#私有フィールドにも触れません。
暗号化でも圧縮でもありません。文字列は短くならず長くなり、本気の読者はロジックを追えます。目的はコピーや流し読みをためらわせることで、解析を不可能にすることではありません。
コードを一度走査するだけで、バンドラーではありません。import を解決せず、モダンな構文をトランスパイルせず、読み込み方も変えません。同じスクリプトを2回貼り付けると生成名が変わるため出力は異なります。配布には十分ですが、ビルドの比較には使えません。
出力が入力と同じ値を返すことをテスト済みです。クラス、アロー関数、ネストした ${} を含むテンプレートリテラル、async/await、スプレッド、オプショナルチェーン、null 合体、正規表現リテラルが通ります。モジュールコードは import / export の名前を保ち、そのままモジュールとして読み込めます。
eval や with を使うスクリプトは名前を変更しません(安全に変更できないため)。ただしエスケープとブラケット変換は適用されます。約 80 KB のファイルは数十ミリ秒で処理でき、難読化済みのスクリプトにもう一度適用することもできます。