yumemi/gen/reader/gate

面の門の宣言(<face>/src/gate.gleam の pub const gate、型は yumemi/gate)を読む。

宣言が無い面は、入口 Http の admit / subject から既定の門を組む(Authenticated の面だけ)。 CSP は門の csp(Page 群と閉じた指令の組、0.12)。host の綴りが外れれば exit 4(51 v6 第 38 条)。 数える口 pageview の欄の重なりと綴り(第 35 条)、pages の指し先(第 34 条)もここで見る。 session を読む口は api/src/server.gleam の attached_roles の ReadSession が指す attached の path (framework は app の口の名を知らない)。門が session を読むのに ReadSession が無ければ exit 3。 Page の指し先(Exact / Prefix)が面の route に無ければ exit 4。

Types

pub type Check {
  SignedIn(fail: Fail)
  Declared(kind: String, fail: Fail)
  SubjectKind(kinds: List(String), fail: Fail)
  Consented(kind: String, fail: Fail)
  Admitted(kinds: List(String))
}

Constructors

  • SignedIn(fail: Fail)
  • Declared(kind: String, fail: Fail)
  • SubjectKind(kinds: List(String), fail: Fail)
  • Consented(kind: String, fail: Fail)
  • Admitted(kinds: List(String))

    入口の admit: Authenticated からの既定。session の読みの失敗は生成 shell の読みの失敗と同じ本文で返す。

pub type Csp {
  Csp(
    pages: List(Match),
    directives: List(#(String, List(String))),
  )
}

Constructors

  • Csp(
      pages: List(Match),
      directives: List(#(String, List(String))),
    )
pub type Fail {
  ToSignIn(status: Int, back: Bool)
  Deny(status: Int, body: String)
  RedirectTo(location: String)
  RedirectBack(location: String, param: String)
}

Constructors

  • ToSignIn(status: Int, back: Bool)
  • Deny(status: Int, body: String)
  • RedirectTo(location: String)
  • RedirectBack(location: String, param: String)

    0.11.5:面の中の location へ、query param に要求の path + search を付けて返す。

pub type Gate {
  Gate(
    declared: Bool,
    sign_in_path: String,
    sign_in_fallback: String,
    rules: List(Rule),
    redirects: List(Redirect),
    csp: List(Csp),
    pageview: option.Option(Pageview),
    session_path: option.Option(String),
  )
}

Constructors

  • Gate(
      declared: Bool,
      sign_in_path: String,
      sign_in_fallback: String,
      rules: List(Rule),
      redirects: List(Redirect),
      csp: List(Csp),
      pageview: option.Option(Pageview),
      session_path: option.Option(String),
    )

    Arguments

    declared

    src/gate.gleam から読んだか(False は入口からの既定か、門無し)。

    session_path

    session を読む口の path(ReadSession の attached)。宣言が無ければ None。

pub type Match {
  Exact(path: String)
  Prefix(path: String)
  Every
}

Constructors

  • Exact(path: String)
  • Prefix(path: String)
  • Every
pub type Pageview {
  Pageview(
    pages: List(Match),
    only: List(model.GateWhen),
    fields: List(model.PageviewField),
    sink: model.PageviewSink,
  )
}

Constructors

pub type Redirect {
  Redirect(pages: List(Match), when: model.GateWhen, to: To)
}

Constructors

pub type Rule {
  Rule(
    pages: List(Match),
    except: List(Match),
    checks: List(Check),
  )
}

Constructors

pub type To {
  SafeParam(param: String, fallback: String)
  Fixed(location: String)
  FixedKeep(location: String)
}

Constructors

  • SafeParam(param: String, fallback: String)
  • Fixed(location: String)
  • FixedKeep(location: String)

    0.11.5:決まった path に要求の query を保って返す。

Values

pub fn covers(match: Match, path: String) -> Bool

match が route path を指すか(生成時の判定。実行時は gate.mjs が同じ規則で見る)。

pub const event_names: List(String)

受け口の event の欄の名(framework の id と fields の欄)。FromQuery の name には使えない(51 v6 第 35 条)。

pub fn field_names(field: model.PageviewField) -> List(String)

欄の名(送る本文の鍵)。Referrer は referrer_path / referrer_host の 2 つ。

pub fn host_spelling(host: String) -> Bool

host の綴り([a-z0-9.-]+、先頭に *. を 1 つ許す)。51 v6 第 38 条。

pub fn is_empty(gate: Gate) -> Bool

門が何かを持つか。持たない面の gate.mjs は素通しになる。

pub fn prefix_covers(prefix: String, route: String) -> Bool
pub fn read(
  face_name: String,
  face_units: List(source.Unit),
  back_units: List(source.Unit),
  entries: List(model.Entry),
  route_paths: List(String),
  session_path: option.Option(String),
) -> #(Gate, List(stop.Note))
pub fn reads_session(gate: Gate) -> Bool

門が session を読むか(rules・redirects か、条件 only を持つ pageview のどれかを持つ)。

pub fn slug_name(name: String) -> Bool

[a-z][a-z0-9_]*(申告の kind・欄の名・variant の名の綴り)。

✨ Search Document