yumemi/gen
yumemi の生成器。gleam run -m yumemi/gen -- <app dir> <out dir>
出すのは生成束 ── src/gen/types/*、src/gen/query.gleam と
src/gen/query/{from,field}.gleam、src/gen/reads/*、src/gen/root/*、
db/queries/<service>/<name>.sql(読み)、verb / phase、src/gen/allow/*(root が指す allow)。
出力先が app そのものか app を含む dir(app が <root>/api にあれば <root>/api か <root>)なら、生成物を在るべき場所に
置く ── back は app の下、面は面の package の下(place)。このとき db/queries へは既に在る
-- GENERATED の file だけを書く(生成器だけが出す SQL は src/gen/sql.mjs に束ねる ── into_app)。
出力先が別の dir なら、back は <out>/src/gen/..、面は <out>/<面>/.. に並べる。
**出力が揃わなかったら 0 で終わらない。**理由は 20 の exit code 表で分類し(stop)、
stderr と _diagnostics.txt の両方に同じ1行で出す。ファイル自体は書いてから止まる
── 何が出て何が欠けたかを、次の便が現物で見られるようにするため。
Types
Values
pub fn bundle_notes(errors: List(String)) -> List(stop.Note)
pub fn generate(
app_dir: String,
) -> Result(#(List(types.File), List(stop.Note)), stop.Note)
生成束と、止まる理由。理由が1つでもあれば呼び手は非 0 で終わる。
pub fn into_app(
files: List(types.File),
app: Bool,
generated: fn(String) -> Bool,
) -> List(types.File)
出力先が app そのもののとき、db/queries/** へは既に在る file だけを書く(WGy r4、鷹野の裁定 1 (c))。
生成器だけが出す SQL は src/gen/sql.mjs に束ねてあるので、app の db/queries には増やさない。
既に在る file のうち上書きするのは -- GENERATED を名乗るもの(generated が真)だけで、★ の手書きは
そのまま残す(back の bundle と同じ規則 ── app の SQL が勝つのは ★ だけ)。出力先が別の dir なら全部を書く。
pub fn lock_notes(
running: String,
packages: List(String),
) -> List(stop.Note)
第 41 条:生成器が読み書きする package(app と面)の yumemi の lock が、走っている生成器の版と違えば名指して 止める。lock(manifest.toml)の無い package は照合しない。生成器の触らない package(認証だけの package の類)は 見ない(Y1 鷹野の裁き 2、段 D まで照合の外)。