Prisma.ioでGraphQLスキーマからTypeScriptの型定義を取り出す
公開日: 2018年5月31日GitHub
追記(2019年1月23日)
以下の記載は、あくまでPrisma.ioを使ったときの設定です。 単純に、graphqlスキーマからTypeScriptの型定義を利用したい場合は
https://graphql-code-generator.com/
を利用したほうがいいと思います。
.graphqlconfig.yamlの設定例
1projects:2 app:3 schemaPath: src/schema.graphql4 extensions:5 endpoints:6 default: 'http://localhost:4000'7 prepare-bundle: src/generated/app.graphql8 codegen:9 - generator: prisma-binding10 language: typescript11 output:12 binding: src/generated/app.ts13 prisma:14 schemaPath: src/generated/prisma.graphql15 extensions:16 prisma: prisma/prisma.yml17 codegen:18 - generator: prisma-binding19 language: typescript20 output:21 binding: src/generated/prisma.ts22
解説
上から順に見ていきます。
prepare-bundle
について
https://github.com/graphql-cli/graphql-cli-prepare
import文を利用している複数の.graphqlファイルを解決して、1つのgraphqlファイルを作成します。
今回は、app
で利用している.graphqlファイルからも型を抽出したいので、上記のような設定をしています。
codegen
について
graphql codegen
は、.graphqlファイルを使ってflowやtypescriptの型ファイルを生成するコマンドです。
上記yamlファイル内のcodegen
は、これのprisma-binding
用の設定をしています。
参考:
- https://github.com/prismagraphql/prisma-binding
- https://github.com/prismagraphql/prisma-binding/blob/master/src/PrismaTypescriptGenerator.ts
- https://github.com/graphql-boilerplates/typescript-graphql-server/blob/master/basic/.graphqlconfig.yml
全体像
イメージ以下のような感じです。
1src/schema.graphql23↓ prepare-bindingでファイルの依存関係を解決45src/generated/app.graphql67↓ graphql codegenで.tsファイルに変換89src/generated/app.ts10
使い方
リゾルバを書く
以下のような型定義をしてリゾルバで読み込む
12// src/utils.ts3import { Query, Mutation } from "../generated/prisma"45export interface Prisma {6 query: Query;7 mutation: Mutation;8}910export interface Context {11 db: Prisma;12 request: { user?: { sub: string } };13}1415// src/resolvers/query.ts1617import { Context } from "./utils"18import { UserCreateInput } from "../generated/app"1920export const Query = {21 sampleQuery: async (_, args : UserCreateInput, context : Context, info) => {22 ...23 },24}25
これでresolverを書くときにコード補完が効くようになります。
reference: Make TypeScript type definitions from application schema work with Imports from Prisma
デプロイ時に型ファイルの更新をする
デプロイ時に型ファイルの更新をするためには、
prisma deploy
時にgraphql get-schema
とgraphql prepare
をする必要がある。
prismaはデプロイコマンドのフックも用意してくれています。
以下設定例です。
1endpoint: ${env:PRISMA_ENDPOINT}2datamodel: datamodel.graphql3secret: ${env:PRISMA_JWT_SECRET}4hooks:5 post-deploy:6 - graphql get-schema --project prisma7 - graphql prepare8 - graphql codegen9