2023-12-24
WebPushを実現するNode.js用のライブラリ「web-push」の依存モジュールのひとつ、「http_ece」をDeno用に移植完了!


「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やブラウザでも動くようになる。 import { Buffer } from "https://taisukef.github.io/buffer/Buffer.js";

JavaScriptがオブジェクト指向ではなかった時代の名残、inherits.js として移植するも、nameプロパティの上書き不可などで動かなかったため、クラスを使って書き換えが必要だった。

移植の進捗状況は、各ライブラリに付属するテストプログラムでチェックできる。よく使われている describe, assert, it は、「describe.js」として、tapeは、「tpae-es」として、それぞれまとめて脱Node.jsを果たした。

http_eceのテストコードはテストフレームワークではなく、独自のもの。 cd denojs deno run test.js verbose で一通りチェック!


全テスト通った!喜!

Tweet
クリエイティブ・コモンズ・ライセンス
本ブログの記事や写真は「Creative Commons — CC BY 4.0」の下に提供します。記事内で紹介するプログラムや作品は、それぞれに記載されたライセンスを参照ください。
CC BY / @taisukef / アイコン画像 / プロフィール画像 / 「一日一創」画像 / RSS