type-bridge-schema-codegen 2.2.1

Deterministic projection-only schema emitters for type-bridge
Documentation
format: typebridge.schema/v2
attributes:
  identifier: { value: string }
  nickname: { value: string }
  aliases: { value: string }
  score: { value: integer }
  val_double: { value: double }
  val_decimal: { value: decimal }
  val_bool: { value: boolean }
  val_date: { value: date }
  val_datetime: { value: datetime }
  val_datetime_tz: { value: datetime-tz }
  val_duration: { value: duration }
  val_constrained: { value: integer }
  party_name: { value: string }
  rank: { value: integer }
  manager_note: { value: string }
  contractor_code: { value: string }
  robot_id: { value: integer }
  foo__bar: { value: integer }
  score__gte: { value: integer }
  counter_value: { value: integer }
entities:
  actor:
    abstract: true
    owns:
      nickname: { card: { min: 0, max: 1 } }
  party:
    abstract: true
    owns:
      identifier: { key: true }
      party_name: { card: 1 }
  person:
    sub: actor
    owns:
      identifier: { key: true }
      aliases: { unique: true, card: { min: 0, max: 3 } }
      score: { card: 1 }
      foo__bar: { card: { min: 0, max: 1 } }
      score__gte: { card: { min: 0, max: 1 } }
      val_double: { card: 1 }
      val_decimal: { card: 1 }
      val_bool: { card: 1 }
      val_date: { card: 1 }
      val_datetime: { card: 1 }
      val_datetime_tz: { card: 1 }
      val_duration: { card: 1 }
      val_constrained: { card: 1, range: { min: 20, max: 80 } }
  employee:
    sub: party
    owns:
      rank: { card: 1 }
  manager:
    sub: employee
    owns:
      manager_note: { card: 1 }
  contractor:
    sub: party
    owns:
      contractor_code: { card: 1 }
  robot:
    sub: actor
    owns:
      robot_id: { key: true }
      val_constrained: { card: 1, range: { min: 0, max: 50 } }
  counter:
    owns:
      counter_value: { card: 1 }
relations:
  membership:
    relates:
      member: { card: 1 }
  interaction:
    owns:
      identifier: { key: true }
      nickname: { card: { min: 0, max: 1 } }
    relates:
      actor: { card: { min: 0, max: 1 } }
      target: { card: 1 }
  employment:
    sub: membership
    relates:
      employee: { as: member, card: 1 }
  container:
    relates:
      item: { card: { min: 0, max: 2 } }
  event:
    relates:
      subject: { card: 1 }
  network-link:
    owns:
      identifier: { key: true }
      nickname: { card: { min: 0, max: 1 } }
    relates:
      origin: { card: 1 }
      destination: { card: 1 }
      participant: { card: { min: 0, max: 3 } }
  base-activity:
    relates:
      participant: { abstract: true, card: 1 }
  plain-activity:
    sub: base-activity
plays:
  person:
    membership:
      member: { card: { min: 0, max: 2 }, doc: membership player }
    interaction:
      actor: { card: { min: 0, max: 2 }, doc: interaction actor }
      target: { card: { min: 0, max: 2 }, doc: interaction target }
    employment:
      employee: { card: { min: 0, max: 1 }, doc: employment player }
    event:
      subject: { card: { min: 0, max: 1 }, doc: event subject player }
    network-link:
      origin: { card: { min: 0, max: 3 }, doc: directed link origin }
      destination: { card: { min: 0, max: 3 }, doc: directed link destination }
      participant: { card: { min: 0, max: 3 }, doc: repeated link participant }
    base-activity:
      participant: { card: { min: 0, max: 1 }, doc: inherited abstract role player }
  event:
    container:
      item: { card: { min: 0, max: 3 }, doc: cyclic relation player }
  robot:
    membership:
      member: { card: { min: 0, max: 2 }, doc: robot membership player }
    interaction:
      actor: { card: { min: 0, max: 2 }, doc: robot interaction actor }
structs:
  player-stats:
    fields:
      - { name: nickname, type: string, optional: true }
      - { name: wins, type: integer }
functions:
  qualifying-score:
    parameters:
      - { name: person, type: person }
      - { name: minimum, type: integer }
    returns: { scalar: integer }
    body:
      typeql: |-
        match
          $person has score $score-attribute;
          let $score = $score-attribute;
          $score >= $minimum;
        return first $score;
  find-events:
    parameters:
      - { name: event, type: event }
    returns:
      stream: [event]
    body:
      typeql: |-
        match
          $event isa event;
        return { $event };