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

生成物の置き場。app は出力先から app への相対(別の dir に出すなら “”)、faces は面の名から 面の package への相対(別の dir に出すなら空 ── 面は <out>/<面>/..)。

pub type Placement {
  Placement(app: String, faces: List(#(String, String)))
}

Constructors

  • Placement(app: String, faces: List(#(String, String)))

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 まで照合の外)。

pub fn main() -> Nil
pub fn place(placement: Placement, path: String) -> String

生成束の path(back は app からの相対、面は <面>/..)を、出力先からの相対に直す。

✨ Search Document