Skip to content

Commit 99e4481

Browse files
committed
feat(graphql): enchance codegen (refactor, doc, env, watch, global config)
https://github.com/martis-git/learn-frontend/issues/279
1 parent 714a593 commit 99e4481

File tree

5 files changed

+208
-210
lines changed

5 files changed

+208
-210
lines changed

examples/graphql/.env

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
API_DOMAIN=https://graphqlzero.almansi.me/api
2+
API_GENCOMMENT=/** @generated THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. */
3+
# Если нужно больше информации при кодогенерации
4+
# DEBUG=1
5+
# VERBOSE=1

examples/graphql/codegen.yml

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,32 @@
1-
# FIXME: don't work globlally
2-
overwrite: true
3-
schema: https://graphqlzero.almansi.me/api
1+
# Конфигурация для кодогенерации схемы и запросов GraphQL для TypeScript
2+
# @remark Конфигурацию объявляем глобально, т.к. плагины должны использоваться одинаково для нескольких файлов
3+
schema: ${API_DOMAIN}
44
documents: src/**/*.gql
5+
config:
6+
# Сгенерированные файлы напрямую менять нельзя (!), только через обертки / доп. файлы
7+
content: ${API_GENCOMMENT}
8+
# Работа с запросами ведется через react-hooks
9+
withHooks: true
10+
# Из типов для схемы исключается служебное поле __typename
11+
skipTypename: true
12+
# Все типы из схемы и запросов - иммутабельны
13+
immutableTypes: true
14+
# @experimental Опциональность полей - пока что отключена
15+
avoidOptionals: true
16+
# Типы генерируются на лету, без Pick - для чистоты информации по типу
17+
preResolveTypes: true
518
generates:
619
src/types.ts:
7-
- typescript
20+
plugins:
21+
- add
22+
- typescript
823
src/:
924
preset: near-operation-file
25+
# Типы схемы и запросы - разделены
1026
presetConfig:
1127
extension: .gen.ts
1228
baseTypesPath: types.ts
13-
config:
14-
skipTypename: true
15-
withHooks: true
16-
immutableTypes: true
17-
avoidOptionals: true
18-
# Чтобы работал intelissense
19-
preResolveTypes: true
20-
# onlyOperationTypes: true
2129
plugins:
30+
- add
2231
- typescript-operations
23-
- typescript-react-apollo
32+
- typescript-react-apollo

examples/graphql/package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@
3131
"build": "react-scripts build",
3232
"test": "react-scripts test",
3333
"eject": "react-scripts eject",
34-
"api:gen": "graphql-codegen"
34+
"api:gen": "graphql-codegen -r dotenv/config",
35+
"api:gen--watch": "graphql-codegen -r dotenv/config -w"
3536
},
3637
"eslintConfig": {
3738
"extends": "react-app"
@@ -49,6 +50,7 @@
4950
]
5051
},
5152
"devDependencies": {
53+
"@graphql-codegen/add": "^2.0.1",
5254
"@graphql-codegen/cli": "^1.17.10",
5355
"@graphql-codegen/near-operation-file-preset": "^1.17.11",
5456
"@graphql-codegen/typescript": "^1.17.10",

examples/graphql/src/pages/tasks-list/query.gen.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
/** @generated THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. */
12
import * as Types from '../../types';
23

34
import { gql } from '@apollo/client';

0 commit comments

Comments
 (0)