TypeORMをDenoに移植している
#denolib/typeorm #DenoのORMについて
概要
⚠️ Denoは現在、npmパッケージを組み込みでサポートしています (Denoのnpmパッケージサポート)
Denoのnpmパッケージサポートを使えば、おそらく本家のTypeORMもそのまま動かせる可能性が高いと思います
TypeORMをDenoに移植しています
TypeORMはNode.js向けのORMです
リポジトリはここです
※denolib/typeorm以外のORMについては、DenoのORMについてを参照ください🙇‍♂️
実装について
一から実装しているわけではなく、本家TypeORMをフォークしています
本家TypeORMの変更に追従するのを容易にするためです
依存ライブラリについて
Node.jsでしか動作しないモジュールは、Denoのモジュールに置き換えています
node-postgres -> deno-postgres
node-mysql -> deno_mysql
node-sqlite3 -> deno-sqlite
dotenv -> deno-dotenv
sql.js -> deno-sqlite(予定)
node-redis/ioredis -> deno-redis(予定)
fs -> deno_std/fs
path -> deno_std/path
node-glob -> deno_std/fs/expand_glob
chalk -> deno_std/fmt/colors
js-yaml -> deno_std/encoding/yaml
テストについて
typeormにはmocha/chai/Sinon.jsで記述された大量のテストコードが存在します
これらをすべてDenoの標準テストランナーに置き換えるのはとても大変です😅
幸いなことに、これら3つのライブラリはDenoでも動作したので、そのまま使っています
サードパーティモジュールの管理について
denolib/typeormではサードパーティモジュールの管理にdemを使用しています。
demの採用理由
シンプルかつ必要としている機能が一通り実装されている
依存モジュールが多いので、それらを統一的に管理するための規約・仕組みがほしかった
ダイナミックインポートとdeps.tsのアプローチとの相性が悪い
denolib/typeormでは、データベースドライバ(deno-postgres, deno-sqlite等)の遅延読み込みを実現するために、ダイナミックインポートを多用しています
CLIについて
yargsがDenoをサポートしているので、基本的にはオリジナルのTypeORMからほとんど変更はありません。
実装状況
https://github.com/denolib/typeorm/issues/2 を参照ください
課題
本家TypeORMでAPIの見直しが行われているように見える🧐
https://github.com/typeorm/typeorm/tree/typed-repository
ドライバの遅延読み込みを実現するために、ダイナミックインポートを利用しているものの、あまり理想的ではないと感じている..
関連ページ
DenoのORMについて