「code4fukui/encrypted-content-encoding: A simple implementation of the encrypted content-encoding」
「RFC8188 - HTTPの暗号化されたコンテンツエンコーディング」を実現するJavaScriptのライブラリ、http_ece、Node.js、Pythonの対応にDenoを加えた!
「crypto_node.js」
今回の一番の苦労ポイントは、暗号関係ライブラリcrypto。Node.jsで選考して実装されたcryptoとWeb標準になったcryptoでは互換性がなく、Denoで「node:crypto」としてインポートして使える互換ライブラリとも動作が異なったため、TLSのJS実装「forge」をかつてESモジュール化した、forge-esを使って実装。(一部、node:cryptoも使っているのでブラウザ上では動かない)
Node.jsからの移植でよく登場するBufferクラスは、Uint8Arrayが無かったころの名残。互換ライブラリ「Buffer.js」にURLで使えるBase64、base64urlエンコードを追加。Bufferが登場するプログラムに下記1行加えると、Denoやブラウザでも動くようになる。
JavaScriptがオブジェクト指向ではなかった時代の名残、inherits.js として移植するも、nameプロパティの上書き不可などで動かなかったため、クラスを使って書き換えが必要だった。
移植の進捗状況は、各ライブラリに付属するテストプログラムでチェックできる。よく使われている describe, assert, it は、「describe.js」として、tapeは、「tpae-es」として、それぞれまとめて脱Node.jsを果たした。
http_eceのテストコードはテストフレームワークではなく、独自のもの。
全テスト通った!喜!