Skip to main content

Schema file and codegen

The schema file schema.graphql uses a GraphQL dialect to model the target entities and entity relations. The tooling around the schema file is then used to:

  • Generate TypeORM entities (with squid-typeorm-codegen(1), see below)
  • Generate the database schema from the TypeORM entities (see db migrations)
  • Optionally, the schema can be used to present the target data with a GraphQL API.

The schema file format is loosely compatible with the subgraph schema file, see Migrate from subgraph section for details.

TypeORM codegen

The squid-typeorm-codegen(1) tool is used to generate TypeORM entity classes from the schema defined in schema.graphql. Invoke it with

npx squid-typeorm-codegen

By default the entity classes are generated in src/model/generated.

Example

A Foo entity defined in the schema file:

schema.graphql
type Foo @entity {
id: ID!
bar: String
baz: BigInt!
}

The generated Foo entity with TypeORM decorators:

src/model/generated/foo.ts
import {Entity as Entity_, Column as Column_, PrimaryColumn as PrimaryColumn_} from "typeorm"
import * as marshal from "./marshal"

@Entity_()
export class Foo {
constructor(props?: Partial<Foo>) {
Object.assign(this, props)
}

@PrimaryColumn_()
id!: string

@Column_("text", {nullable: true})
bar!: string | undefined | null

@Column_("numeric", {transformer: marshal.bigintTransformer, nullable: false})
baz!: bigint
}