Клиент Apollo для angular: генерация кода из файлов graphql
Я узнал об угловом graphql генератора кода от здесь. Я пытаюсь использовать его в своем проекте для создания типов graphql иQuery
услуги для угловой.
Мой файл codegen.yml выглядит так, как показано ниже.
overwrite: true
schema: "http://localhost:9010/myGraphQL"
documents: "apps/myGraphQLApp/src/gqls/**/*.graphql"
generates:
apps/myGraphQLApp/src/app/generated/graphql.ts:
plugins:
- "typescript"
- "typescript-operations"
- "typescript-apollo-angular"
У меня есть файл graphql apps\myGraphQLApp\src\gqls\myBooks.graphql
со следующим содержанием
query GetMyBooks {
books{
id
name
}
}
я бегу npx graphql-codegen --config codegen.yml
, и это не удается со следующей ошибкой.
√ Parse configuration
> Generate outputs
> Generate apps/myGraphQLApp/src/app/generated/graphql.ts
√ Load GraphQL schemas
√ Load GraphQL documents
× Generate
→ Query root type must be provided.
Found 1 error
× apps/myGraphQLApp/src/app/generated/graphql.ts
Error: Query root type must be provided.
at assertValidSchema (....\node_modules\graphql\type\validate.js:71:11)
...
Мой сервер graphql определенно предоставляет корень запроса, и я могу вызывать его с разными клиентами.
schema {
query: MyGraphQLQueryType
}
Я не уверен, что делаю не так. Любая помощь будет оценена по достоинству.
1 ответ
Я делаю и пример 1 год назад с генератором graphql, поэтому, возможно, он устарел с новыми версиями, но если хотите, попробуйте, у меня есть
overwrite: true
schema: schema.graphql
documents: src/app/graphql/*.graphql
generates:
./src/app/generated/graphql.ts:
plugins:
- typescript-common
- typescript-client
- typescript-apollo-angular
./schema.json:
plugins:
- introspection
Я думаю, ваша проблема в вашей схеме, у вас должно быть что-то вроде этого
type Query {
login(email: String!, password: String!): AuthData!
user: User!
pets(page: Int, name: String, type: String): PetData!
pet(id: ID!): Pet!
}
type Mutation {
createUser(userInput: UserInputData): User!
deletePet(id: ID!): Boolean
}
type User {
id: ID!
name: String!
email: String!
password: String!
status: String!
pets: [Pet!]!
}
type AuthData {
token: String!
userId: String!
}
input UserInputData {
email: String!
name: String!
password: String!
}
type Pet {
id: ID!
name: String!
type: String!
imageUrls: [File!]!
creator: UserPet!
createdAt: String!
updatedAt: String!
}
type PetData {
pets: [Pet!]!
totalPets: Int!
filterData: FilterDataPet!
}
type File {
id: String!
path: String!
filename: String!
mimetype: String!
}
type UserPet {
id: ID!
name: String!
email: String!
pets: [Pet!]!
}
type FilterDataPet {
isFilterData: Boolean!
currentPage: Int!
queryParams: QueryParamsPet
}
type QueryParamsPet {
name: String
type: String
}
Вы можете просмотреть полный пример здесь https://github.com/anthowm/graphqlpetapi-frontend/blob/master/codegen.yml