denolib/typeorm
#denolib #ORM
TypeORMのフォーク
https://github.com/denolib/typeorm
インストール
code:sh
$ deno install --allow-read --allow-write --allow-net --allow-env -f -n typeorm https://deno.land/x/typeorm/cli.ts
... ソースコードのダウンロードにしばらくかかります...
$ typeorm version
TypeORM CLI version: v0.2.23-rc5
本家TypeORMとの違い・制限
Decorator metadataを利用したマッピング先のデータ型の推論はサポートしていません
denoはTypeScriptのソースをesnext形式でコンパイルします。
しかし、TypeORMはTypeScriptのソースがes5形式へコンパイルされることを想定しています。()
このあたりの差異が原因で、Decorator metadataを使おうとすると、Entity間の循環依存が発生してしまいます()
影響
@CreateDateColumn及び@UpdateDateColumnを除き、マッピング先カラムの型を明示する必要があります。
Lazy relationsを利用する際は、lazyオプションを明示する必要があります
code:lazy-relations.ts
@Entity()
export class Post {
...
@OneToMany(type => Tag, { lazy: true })
tags: Promise<Tag[]>;
...
}
回避策
ColumnOptions.typeを明示する
デコレータを使わずentity schemasを使用してマッピング情報を定義する
entity schemasは、ES decoratorsやDecorator metadataに依存せず、マッピング情報を定義するための仕組み
将来的にTypeORMの作者は、entity schemasを主要なマッピング方法にすることを考えているようです?
https://github.com/typeorm/typeorm/issues/3251
re-work entity schemas and make them "primary way of defining a database schema model"