@gqlkit-ts/cli 0.0.1 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (325) hide show
  1. package/LICENSE +21 -0
  2. package/dist/auto-type-generator/auto-type-generator.d.ts +46 -0
  3. package/dist/auto-type-generator/auto-type-generator.d.ts.map +1 -0
  4. package/dist/auto-type-generator/auto-type-generator.js +353 -0
  5. package/dist/auto-type-generator/auto-type-generator.js.map +1 -0
  6. package/dist/auto-type-generator/auto-type-generator.test.d.ts +2 -0
  7. package/dist/auto-type-generator/auto-type-generator.test.d.ts.map +1 -0
  8. package/dist/auto-type-generator/auto-type-generator.test.js +613 -0
  9. package/dist/auto-type-generator/auto-type-generator.test.js.map +1 -0
  10. package/dist/auto-type-generator/index.d.ts +4 -0
  11. package/dist/auto-type-generator/index.d.ts.map +1 -0
  12. package/dist/auto-type-generator/index.js +3 -0
  13. package/dist/auto-type-generator/index.js.map +1 -0
  14. package/dist/auto-type-generator/name-collision-validator.d.ts +17 -0
  15. package/dist/auto-type-generator/name-collision-validator.d.ts.map +1 -0
  16. package/dist/auto-type-generator/name-collision-validator.js +68 -0
  17. package/dist/auto-type-generator/name-collision-validator.js.map +1 -0
  18. package/dist/auto-type-generator/name-collision-validator.test.d.ts +2 -0
  19. package/dist/auto-type-generator/name-collision-validator.test.d.ts.map +1 -0
  20. package/dist/auto-type-generator/name-collision-validator.test.js +358 -0
  21. package/dist/auto-type-generator/name-collision-validator.test.js.map +1 -0
  22. package/dist/auto-type-generator/naming-convention.d.ts +40 -0
  23. package/dist/auto-type-generator/naming-convention.d.ts.map +1 -0
  24. package/dist/auto-type-generator/naming-convention.js +59 -0
  25. package/dist/auto-type-generator/naming-convention.js.map +1 -0
  26. package/dist/auto-type-generator/naming-convention.test.d.ts +2 -0
  27. package/dist/auto-type-generator/naming-convention.test.d.ts.map +1 -0
  28. package/dist/auto-type-generator/naming-convention.test.js +132 -0
  29. package/dist/auto-type-generator/naming-convention.test.js.map +1 -0
  30. package/dist/cli.d.ts +2 -0
  31. package/dist/cli.d.ts.map +1 -0
  32. package/dist/cli.js +11 -0
  33. package/dist/cli.js.map +1 -0
  34. package/dist/commands/gen.d.ts +32 -0
  35. package/dist/commands/gen.d.ts.map +1 -0
  36. package/dist/commands/gen.js +101 -0
  37. package/dist/commands/gen.js.map +1 -0
  38. package/dist/commands/gen.test.d.ts +2 -0
  39. package/dist/commands/gen.test.d.ts.map +1 -0
  40. package/dist/commands/gen.test.js +226 -0
  41. package/dist/commands/gen.test.js.map +1 -0
  42. package/dist/commands/main.d.ts +12 -0
  43. package/dist/commands/main.d.ts.map +1 -0
  44. package/dist/commands/main.js +5 -0
  45. package/dist/commands/main.js.map +1 -0
  46. package/dist/config/define-config.d.ts +26 -0
  47. package/dist/config/define-config.d.ts.map +1 -0
  48. package/dist/config/define-config.js +27 -0
  49. package/dist/config/define-config.js.map +1 -0
  50. package/dist/config/index.d.ts +3 -0
  51. package/dist/config/index.d.ts.map +1 -0
  52. package/dist/config/index.js +2 -0
  53. package/dist/config/index.js.map +1 -0
  54. package/dist/config/types.d.ts +131 -0
  55. package/dist/config/types.d.ts.map +1 -0
  56. package/dist/config/types.js +2 -0
  57. package/dist/config/types.js.map +1 -0
  58. package/dist/config-loader/index.d.ts +3 -0
  59. package/dist/config-loader/index.d.ts.map +1 -0
  60. package/dist/config-loader/index.js +2 -0
  61. package/dist/config-loader/index.js.map +1 -0
  62. package/dist/config-loader/loader.d.ts +50 -0
  63. package/dist/config-loader/loader.d.ts.map +1 -0
  64. package/dist/config-loader/loader.js +78 -0
  65. package/dist/config-loader/loader.js.map +1 -0
  66. package/dist/config-loader/loader.test.d.ts +2 -0
  67. package/dist/config-loader/loader.test.d.ts.map +1 -0
  68. package/dist/config-loader/loader.test.js +123 -0
  69. package/dist/config-loader/loader.test.js.map +1 -0
  70. package/dist/config-loader/validator.d.ts +13 -0
  71. package/dist/config-loader/validator.d.ts.map +1 -0
  72. package/dist/config-loader/validator.js +497 -0
  73. package/dist/config-loader/validator.js.map +1 -0
  74. package/dist/config-loader/validator.test.d.ts +2 -0
  75. package/dist/config-loader/validator.test.d.ts.map +1 -0
  76. package/dist/config-loader/validator.test.js +846 -0
  77. package/dist/config-loader/validator.test.js.map +1 -0
  78. package/dist/gen-orchestrator/golden.test.d.ts +2 -0
  79. package/dist/gen-orchestrator/golden.test.d.ts.map +1 -0
  80. package/dist/gen-orchestrator/golden.test.js +102 -0
  81. package/dist/gen-orchestrator/golden.test.js.map +1 -0
  82. package/dist/gen-orchestrator/hook-executor/hook-executor.d.ts +25 -0
  83. package/dist/gen-orchestrator/hook-executor/hook-executor.d.ts.map +1 -0
  84. package/dist/gen-orchestrator/hook-executor/hook-executor.js +68 -0
  85. package/dist/gen-orchestrator/hook-executor/hook-executor.js.map +1 -0
  86. package/dist/gen-orchestrator/hook-executor/hook-executor.test.d.ts +2 -0
  87. package/dist/gen-orchestrator/hook-executor/hook-executor.test.d.ts.map +1 -0
  88. package/dist/gen-orchestrator/hook-executor/hook-executor.test.js +167 -0
  89. package/dist/gen-orchestrator/hook-executor/hook-executor.test.js.map +1 -0
  90. package/dist/gen-orchestrator/orchestrator.d.ts +30 -0
  91. package/dist/gen-orchestrator/orchestrator.d.ts.map +1 -0
  92. package/dist/gen-orchestrator/orchestrator.js +407 -0
  93. package/dist/gen-orchestrator/orchestrator.js.map +1 -0
  94. package/dist/gen-orchestrator/reporter/diagnostic-reporter.d.ts +9 -0
  95. package/dist/gen-orchestrator/reporter/diagnostic-reporter.d.ts.map +1 -0
  96. package/dist/gen-orchestrator/reporter/diagnostic-reporter.js +32 -0
  97. package/dist/gen-orchestrator/reporter/diagnostic-reporter.js.map +1 -0
  98. package/dist/gen-orchestrator/reporter/progress-reporter.d.ts +19 -0
  99. package/dist/gen-orchestrator/reporter/progress-reporter.d.ts.map +1 -0
  100. package/dist/gen-orchestrator/reporter/progress-reporter.js +38 -0
  101. package/dist/gen-orchestrator/reporter/progress-reporter.js.map +1 -0
  102. package/dist/gen-orchestrator/reporter/progress-reporter.test.d.ts +2 -0
  103. package/dist/gen-orchestrator/reporter/progress-reporter.test.d.ts.map +1 -0
  104. package/dist/gen-orchestrator/reporter/progress-reporter.test.js +74 -0
  105. package/dist/gen-orchestrator/reporter/progress-reporter.test.js.map +1 -0
  106. package/dist/gen-orchestrator/writer/file-writer.d.ts +13 -0
  107. package/dist/gen-orchestrator/writer/file-writer.d.ts.map +1 -0
  108. package/dist/gen-orchestrator/writer/file-writer.js +22 -0
  109. package/dist/gen-orchestrator/writer/file-writer.js.map +1 -0
  110. package/dist/index.d.ts +3 -0
  111. package/dist/index.d.ts.map +1 -0
  112. package/dist/index.js +2 -0
  113. package/dist/index.js.map +1 -0
  114. package/dist/resolver-extractor/extract-resolvers.d.ts +40 -0
  115. package/dist/resolver-extractor/extract-resolvers.d.ts.map +1 -0
  116. package/dist/resolver-extractor/extract-resolvers.js +2 -0
  117. package/dist/resolver-extractor/extract-resolvers.js.map +1 -0
  118. package/dist/resolver-extractor/extractor/define-api-extractor.d.ts +50 -0
  119. package/dist/resolver-extractor/extractor/define-api-extractor.d.ts.map +1 -0
  120. package/dist/resolver-extractor/extractor/define-api-extractor.js +685 -0
  121. package/dist/resolver-extractor/extractor/define-api-extractor.js.map +1 -0
  122. package/dist/resolver-extractor/index.d.ts +5 -0
  123. package/dist/resolver-extractor/index.d.ts.map +1 -0
  124. package/dist/resolver-extractor/index.js +2 -0
  125. package/dist/resolver-extractor/index.js.map +1 -0
  126. package/dist/resolver-extractor/validator/abstract-resolver-validator.d.ts +25 -0
  127. package/dist/resolver-extractor/validator/abstract-resolver-validator.d.ts.map +1 -0
  128. package/dist/resolver-extractor/validator/abstract-resolver-validator.js +172 -0
  129. package/dist/resolver-extractor/validator/abstract-resolver-validator.js.map +1 -0
  130. package/dist/resolver-extractor/validator/only-validator.d.ts +61 -0
  131. package/dist/resolver-extractor/validator/only-validator.d.ts.map +1 -0
  132. package/dist/resolver-extractor/validator/only-validator.js +76 -0
  133. package/dist/resolver-extractor/validator/only-validator.js.map +1 -0
  134. package/dist/resolver-extractor/validator/only-validator.test.d.ts +8 -0
  135. package/dist/resolver-extractor/validator/only-validator.test.d.ts.map +1 -0
  136. package/dist/resolver-extractor/validator/only-validator.test.js +352 -0
  137. package/dist/resolver-extractor/validator/only-validator.test.js.map +1 -0
  138. package/dist/schema-generator/builder/ast-builder.d.ts +7 -0
  139. package/dist/schema-generator/builder/ast-builder.d.ts.map +1 -0
  140. package/dist/schema-generator/builder/ast-builder.js +417 -0
  141. package/dist/schema-generator/builder/ast-builder.js.map +1 -0
  142. package/dist/schema-generator/builder/ast-builder.test.d.ts +2 -0
  143. package/dist/schema-generator/builder/ast-builder.test.d.ts.map +1 -0
  144. package/dist/schema-generator/builder/ast-builder.test.js +469 -0
  145. package/dist/schema-generator/builder/ast-builder.test.js.map +1 -0
  146. package/dist/schema-generator/emitter/code-emitter.d.ts +7 -0
  147. package/dist/schema-generator/emitter/code-emitter.d.ts.map +1 -0
  148. package/dist/schema-generator/emitter/code-emitter.js +201 -0
  149. package/dist/schema-generator/emitter/code-emitter.js.map +1 -0
  150. package/dist/schema-generator/emitter/sdl-emitter.d.ts +7 -0
  151. package/dist/schema-generator/emitter/sdl-emitter.d.ts.map +1 -0
  152. package/dist/schema-generator/emitter/sdl-emitter.js +11 -0
  153. package/dist/schema-generator/emitter/sdl-emitter.js.map +1 -0
  154. package/dist/schema-generator/generate-schema.d.ts +26 -0
  155. package/dist/schema-generator/generate-schema.d.ts.map +1 -0
  156. package/dist/schema-generator/generate-schema.js +76 -0
  157. package/dist/schema-generator/generate-schema.js.map +1 -0
  158. package/dist/schema-generator/index.d.ts +4 -0
  159. package/dist/schema-generator/index.d.ts.map +1 -0
  160. package/dist/schema-generator/index.js +2 -0
  161. package/dist/schema-generator/index.js.map +1 -0
  162. package/dist/schema-generator/integrator/result-integrator.d.ts +93 -0
  163. package/dist/schema-generator/integrator/result-integrator.d.ts.map +1 -0
  164. package/dist/schema-generator/integrator/result-integrator.js +396 -0
  165. package/dist/schema-generator/integrator/result-integrator.js.map +1 -0
  166. package/dist/schema-generator/pruner/schema-pruner.d.ts +16 -0
  167. package/dist/schema-generator/pruner/schema-pruner.d.ts.map +1 -0
  168. package/dist/schema-generator/pruner/schema-pruner.js +66 -0
  169. package/dist/schema-generator/pruner/schema-pruner.js.map +1 -0
  170. package/dist/schema-generator/resolver-collector/resolver-collector.d.ts +24 -0
  171. package/dist/schema-generator/resolver-collector/resolver-collector.d.ts.map +1 -0
  172. package/dist/schema-generator/resolver-collector/resolver-collector.js +61 -0
  173. package/dist/schema-generator/resolver-collector/resolver-collector.js.map +1 -0
  174. package/dist/shared/constants.d.ts +70 -0
  175. package/dist/shared/constants.d.ts.map +1 -0
  176. package/dist/shared/constants.js +128 -0
  177. package/dist/shared/constants.js.map +1 -0
  178. package/dist/shared/default-value-detector.d.ts +40 -0
  179. package/dist/shared/default-value-detector.d.ts.map +1 -0
  180. package/dist/shared/default-value-detector.js +124 -0
  181. package/dist/shared/default-value-detector.js.map +1 -0
  182. package/dist/shared/diagnostics.d.ts +4 -0
  183. package/dist/shared/diagnostics.d.ts.map +1 -0
  184. package/dist/shared/diagnostics.js +25 -0
  185. package/dist/shared/diagnostics.js.map +1 -0
  186. package/dist/shared/directive-definition-extractor.d.ts +64 -0
  187. package/dist/shared/directive-definition-extractor.d.ts.map +1 -0
  188. package/dist/shared/directive-definition-extractor.js +399 -0
  189. package/dist/shared/directive-definition-extractor.js.map +1 -0
  190. package/dist/shared/directive-detector.d.ts +102 -0
  191. package/dist/shared/directive-detector.d.ts.map +1 -0
  192. package/dist/shared/directive-detector.js +422 -0
  193. package/dist/shared/directive-detector.js.map +1 -0
  194. package/dist/shared/file-scanner.d.ts +25 -0
  195. package/dist/shared/file-scanner.d.ts.map +1 -0
  196. package/dist/shared/file-scanner.js +99 -0
  197. package/dist/shared/file-scanner.js.map +1 -0
  198. package/dist/shared/file-scanner.test.d.ts +2 -0
  199. package/dist/shared/file-scanner.test.d.ts.map +1 -0
  200. package/dist/shared/file-scanner.test.js +138 -0
  201. package/dist/shared/file-scanner.test.js.map +1 -0
  202. package/dist/shared/index.d.ts +10 -0
  203. package/dist/shared/index.d.ts.map +1 -0
  204. package/dist/shared/index.js +8 -0
  205. package/dist/shared/index.js.map +1 -0
  206. package/dist/shared/inline-object-extractor.d.ts +13 -0
  207. package/dist/shared/inline-object-extractor.d.ts.map +1 -0
  208. package/dist/shared/inline-object-extractor.js +65 -0
  209. package/dist/shared/inline-object-extractor.js.map +1 -0
  210. package/dist/shared/inline-object-utils.d.ts +7 -0
  211. package/dist/shared/inline-object-utils.d.ts.map +1 -0
  212. package/dist/shared/inline-object-utils.js +23 -0
  213. package/dist/shared/inline-object-utils.js.map +1 -0
  214. package/dist/shared/interface-detector.d.ts +22 -0
  215. package/dist/shared/interface-detector.d.ts.map +1 -0
  216. package/dist/shared/interface-detector.js +90 -0
  217. package/dist/shared/interface-detector.js.map +1 -0
  218. package/dist/shared/interface-validator.d.ts +9 -0
  219. package/dist/shared/interface-validator.d.ts.map +1 -0
  220. package/dist/shared/interface-validator.js +152 -0
  221. package/dist/shared/interface-validator.js.map +1 -0
  222. package/dist/shared/interface-validator.test.d.ts +2 -0
  223. package/dist/shared/interface-validator.test.d.ts.map +1 -0
  224. package/dist/shared/interface-validator.test.js +145 -0
  225. package/dist/shared/interface-validator.test.js.map +1 -0
  226. package/dist/shared/metadata-detector.d.ts +65 -0
  227. package/dist/shared/metadata-detector.d.ts.map +1 -0
  228. package/dist/shared/metadata-detector.js +333 -0
  229. package/dist/shared/metadata-detector.js.map +1 -0
  230. package/dist/shared/program-factory.d.ts +14 -0
  231. package/dist/shared/program-factory.d.ts.map +1 -0
  232. package/dist/shared/program-factory.js +29 -0
  233. package/dist/shared/program-factory.js.map +1 -0
  234. package/dist/shared/source-location.d.ts +11 -0
  235. package/dist/shared/source-location.d.ts.map +1 -0
  236. package/dist/shared/source-location.js +15 -0
  237. package/dist/shared/source-location.js.map +1 -0
  238. package/dist/shared/tsconfig-loader.d.ts +13 -0
  239. package/dist/shared/tsconfig-loader.d.ts.map +1 -0
  240. package/dist/shared/tsconfig-loader.js +90 -0
  241. package/dist/shared/tsconfig-loader.js.map +1 -0
  242. package/dist/shared/tsdoc-parser.d.ts +12 -0
  243. package/dist/shared/tsdoc-parser.d.ts.map +1 -0
  244. package/dist/shared/tsdoc-parser.js +101 -0
  245. package/dist/shared/tsdoc-parser.js.map +1 -0
  246. package/dist/shared/type-converter.d.ts +3 -0
  247. package/dist/shared/type-converter.d.ts.map +1 -0
  248. package/dist/shared/type-converter.js +72 -0
  249. package/dist/shared/type-converter.js.map +1 -0
  250. package/dist/shared/typescript-utils.d.ts +55 -0
  251. package/dist/shared/typescript-utils.d.ts.map +1 -0
  252. package/dist/shared/typescript-utils.js +149 -0
  253. package/dist/shared/typescript-utils.js.map +1 -0
  254. package/dist/type-extractor/collector/result-collector.d.ts +7 -0
  255. package/dist/type-extractor/collector/result-collector.d.ts.map +1 -0
  256. package/dist/type-extractor/collector/result-collector.js +35 -0
  257. package/dist/type-extractor/collector/result-collector.js.map +1 -0
  258. package/dist/type-extractor/collector/scalar-collector.d.ts +108 -0
  259. package/dist/type-extractor/collector/scalar-collector.d.ts.map +1 -0
  260. package/dist/type-extractor/collector/scalar-collector.js +133 -0
  261. package/dist/type-extractor/collector/scalar-collector.js.map +1 -0
  262. package/dist/type-extractor/converter/field-eligibility.d.ts +34 -0
  263. package/dist/type-extractor/converter/field-eligibility.d.ts.map +1 -0
  264. package/dist/type-extractor/converter/field-eligibility.js +89 -0
  265. package/dist/type-extractor/converter/field-eligibility.js.map +1 -0
  266. package/dist/type-extractor/converter/graphql-converter.d.ts +7 -0
  267. package/dist/type-extractor/converter/graphql-converter.d.ts.map +1 -0
  268. package/dist/type-extractor/converter/graphql-converter.js +299 -0
  269. package/dist/type-extractor/converter/graphql-converter.js.map +1 -0
  270. package/dist/type-extractor/extract-types.d.ts +2 -0
  271. package/dist/type-extractor/extract-types.d.ts.map +1 -0
  272. package/dist/type-extractor/extract-types.js +2 -0
  273. package/dist/type-extractor/extract-types.js.map +1 -0
  274. package/dist/type-extractor/extractor/type-extractor.d.ts +27 -0
  275. package/dist/type-extractor/extractor/type-extractor.d.ts.map +1 -0
  276. package/dist/type-extractor/extractor/type-extractor.js +1116 -0
  277. package/dist/type-extractor/extractor/type-extractor.js.map +1 -0
  278. package/dist/type-extractor/index.d.ts +4 -0
  279. package/dist/type-extractor/index.d.ts.map +1 -0
  280. package/dist/type-extractor/index.js +2 -0
  281. package/dist/type-extractor/index.js.map +1 -0
  282. package/dist/type-extractor/types/diagnostics.d.ts +17 -0
  283. package/dist/type-extractor/types/diagnostics.d.ts.map +1 -0
  284. package/dist/type-extractor/types/diagnostics.js +2 -0
  285. package/dist/type-extractor/types/diagnostics.js.map +1 -0
  286. package/dist/type-extractor/types/graphql.d.ts +40 -0
  287. package/dist/type-extractor/types/graphql.d.ts.map +1 -0
  288. package/dist/type-extractor/types/graphql.js +2 -0
  289. package/dist/type-extractor/types/graphql.js.map +1 -0
  290. package/dist/type-extractor/types/index.d.ts +5 -0
  291. package/dist/type-extractor/types/index.d.ts.map +1 -0
  292. package/dist/type-extractor/types/index.js +2 -0
  293. package/dist/type-extractor/types/index.js.map +1 -0
  294. package/dist/type-extractor/types/typescript.d.ts +86 -0
  295. package/dist/type-extractor/types/typescript.d.ts.map +1 -0
  296. package/dist/type-extractor/types/typescript.js +2 -0
  297. package/dist/type-extractor/types/typescript.js.map +1 -0
  298. package/dist/type-extractor/types/typescript.test.d.ts +2 -0
  299. package/dist/type-extractor/types/typescript.test.d.ts.map +1 -0
  300. package/dist/type-extractor/types/typescript.test.js +287 -0
  301. package/dist/type-extractor/types/typescript.test.js.map +1 -0
  302. package/dist/type-extractor/validator/type-validator.d.ts +11 -0
  303. package/dist/type-extractor/validator/type-validator.d.ts.map +1 -0
  304. package/dist/type-extractor/validator/type-validator.js +53 -0
  305. package/dist/type-extractor/validator/type-validator.js.map +1 -0
  306. package/docs/configuration.md +163 -0
  307. package/docs/getting-started.md +117 -0
  308. package/docs/index.md +32 -0
  309. package/docs/integration/apollo.md +109 -0
  310. package/docs/integration/yoga.md +108 -0
  311. package/docs/schema/abstract-resolvers.md +146 -0
  312. package/docs/schema/directives.md +196 -0
  313. package/docs/schema/documentation.md +176 -0
  314. package/docs/schema/enums.md +162 -0
  315. package/docs/schema/fields.md +184 -0
  316. package/docs/schema/index.md +38 -0
  317. package/docs/schema/inputs.md +277 -0
  318. package/docs/schema/interfaces.md +178 -0
  319. package/docs/schema/objects.md +186 -0
  320. package/docs/schema/queries-mutations.md +205 -0
  321. package/docs/schema/scalars.md +194 -0
  322. package/docs/schema/unions.md +90 -0
  323. package/docs/what-is-gqlkit.md +22 -0
  324. package/package.json +59 -7
  325. package/README.md +0 -45
@@ -0,0 +1,53 @@
1
+ import { BUILT_IN_SCALARS } from "../../shared/constants.js";
2
+ const PLACEHOLDER_TYPES = new Set(["__INLINE_OBJECT__"]);
3
+ function isOptionsObject(arg) {
4
+ return !Array.isArray(arg) && "types" in arg;
5
+ }
6
+ export function validateTypes(typesOrOptions) {
7
+ const types = isOptionsObject(typesOrOptions)
8
+ ? typesOrOptions.types
9
+ : typesOrOptions;
10
+ const customScalarNames = isOptionsObject(typesOrOptions)
11
+ ? typesOrOptions.customScalarNames
12
+ : undefined;
13
+ const diagnostics = [];
14
+ const typeNames = new Set(types.map((t) => t.name));
15
+ const knownScalars = new Set([
16
+ ...BUILT_IN_SCALARS,
17
+ ...(customScalarNames ?? []),
18
+ ]);
19
+ for (const type of types) {
20
+ if (type.kind === "Object" && type.fields) {
21
+ for (const field of type.fields) {
22
+ const typeName = field.type.typeName;
23
+ if (!typeNames.has(typeName) &&
24
+ !knownScalars.has(typeName) &&
25
+ !PLACEHOLDER_TYPES.has(typeName)) {
26
+ diagnostics.push({
27
+ code: "UNRESOLVED_REFERENCE",
28
+ message: `Field '${field.name}' references unresolved type '${typeName}'`,
29
+ severity: "error",
30
+ location: { file: type.sourceFile, line: 1, column: 1 },
31
+ });
32
+ }
33
+ }
34
+ }
35
+ if (type.kind === "Union" && type.unionMembers) {
36
+ for (const member of type.unionMembers) {
37
+ if (!typeNames.has(member) && !knownScalars.has(member)) {
38
+ diagnostics.push({
39
+ code: "UNRESOLVED_REFERENCE",
40
+ message: `Union '${type.name}' references unresolved type '${member}'`,
41
+ severity: "error",
42
+ location: { file: type.sourceFile, line: 1, column: 1 },
43
+ });
44
+ }
45
+ }
46
+ }
47
+ }
48
+ return {
49
+ valid: diagnostics.length === 0,
50
+ diagnostics,
51
+ };
52
+ }
53
+ //# sourceMappingURL=type-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type-validator.js","sourceRoot":"","sources":["../../../src/type-extractor/validator/type-validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAY7D,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC;AAEzD,SAAS,eAAe,CACtB,GAA0D;IAE1D,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,OAAO,IAAI,GAAG,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,cAAqE;IAErE,MAAM,KAAK,GAAG,eAAe,CAAC,cAAc,CAAC;QAC3C,CAAC,CAAC,cAAc,CAAC,KAAK;QACtB,CAAC,CAAC,cAAc,CAAC;IACnB,MAAM,iBAAiB,GAAG,eAAe,CAAC,cAAc,CAAC;QACvD,CAAC,CAAC,cAAc,CAAC,iBAAiB;QAClC,CAAC,CAAC,SAAS,CAAC;IAEd,MAAM,WAAW,GAAiB,EAAE,CAAC;IAErC,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACpD,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC;QAC3B,GAAG,gBAAgB;QACnB,GAAG,CAAC,iBAAiB,IAAI,EAAE,CAAC;KAC7B,CAAC,CAAC;IAEH,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC1C,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;gBAErC,IACE,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;oBACxB,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC;oBAC3B,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAChC,CAAC;oBACD,WAAW,CAAC,IAAI,CAAC;wBACf,IAAI,EAAE,sBAAsB;wBAC5B,OAAO,EAAE,UAAU,KAAK,CAAC,IAAI,iCAAiC,QAAQ,GAAG;wBACzE,QAAQ,EAAE,OAAO;wBACjB,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;qBACxD,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YAC/C,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACvC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;oBACxD,WAAW,CAAC,IAAI,CAAC;wBACf,IAAI,EAAE,sBAAsB;wBAC5B,OAAO,EAAE,UAAU,IAAI,CAAC,IAAI,iCAAiC,MAAM,GAAG;wBACtE,QAAQ,EAAE,OAAO;wBACjB,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;qBACxD,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,KAAK,EAAE,WAAW,CAAC,MAAM,KAAK,CAAC;QAC/B,WAAW;KACZ,CAAC;AACJ,CAAC"}
@@ -0,0 +1,163 @@
1
+ # Configuration
2
+
3
+ gqlkit can be configured via `gqlkit.config.ts` in your project root.
4
+
5
+ ## Basic Configuration
6
+
7
+ ```ts
8
+ // gqlkit.config.ts
9
+ import { defineConfig } from "@gqlkit-ts/cli";
10
+
11
+ export default defineConfig({
12
+ // Source directory (default: "src/gqlkit/schema")
13
+ sourceDir: "src/gqlkit/schema",
14
+
15
+ // Glob patterns to exclude from scanning
16
+ sourceIgnoreGlobs: ["**/*.test.ts"],
17
+
18
+ // Custom scalar mappings (config-based approach)
19
+ scalars: [
20
+ {
21
+ name: "DateTime",
22
+ tsType: { from: "./src/gqlkit/schema/scalars", name: "DateTime" },
23
+ description: "ISO 8601 datetime",
24
+ },
25
+ {
26
+ name: "UUID",
27
+ tsType: { name: "string" }, // Global type
28
+ },
29
+ ],
30
+
31
+ // Output paths
32
+ output: {
33
+ typeDefsPath: "src/gqlkit/__generated__/typeDefs.ts",
34
+ resolversPath: "src/gqlkit/__generated__/resolvers.ts",
35
+ schemaPath: "src/gqlkit/__generated__/schema.graphql",
36
+ // Set to null to disable output:
37
+ // schemaPath: null,
38
+ },
39
+
40
+ // Hooks
41
+ hooks: {
42
+ // Run after all files are written (e.g., formatting)
43
+ afterAllFileWrite: "prettier --write",
44
+ // Or multiple commands:
45
+ // afterAllFileWrite: ["prettier --write", "eslint --fix"],
46
+ },
47
+ });
48
+ ```
49
+
50
+ ## Custom Scalar Types
51
+
52
+ Map TypeScript types to GraphQL custom scalars via config:
53
+
54
+ ```ts
55
+ export default defineConfig({
56
+ scalars: [
57
+ {
58
+ name: "DateTime",
59
+ tsType: { from: "./src/gqlkit/schema/scalars", name: "DateTime" },
60
+ description: "ISO 8601 datetime string",
61
+ },
62
+ {
63
+ name: "UUID",
64
+ tsType: { name: "string" },
65
+ only: "input", // Input-only scalar
66
+ },
67
+ ],
68
+ });
69
+ ```
70
+
71
+ ### Scalar Options
72
+
73
+ | Option | Type | Description |
74
+ |--------|------|-------------|
75
+ | `name` | `string` | The GraphQL scalar name |
76
+ | `tsType.name` | `string` | The TypeScript type name |
77
+ | `tsType.from` | `string` (optional) | Import path for the type (omit for global types) |
78
+ | `description` | `string` (optional) | Description for the GraphQL schema |
79
+ | `only` | `"input"` \| `"output"` (optional) | Restrict scalar to input or output positions |
80
+
81
+ > [!TIP]
82
+ >
83
+ > You can also define custom scalars using the `GqlScalar` utility type directly in your schema files. See [Scalars](/schema/scalars) for more details.
84
+
85
+ ## Output Paths
86
+
87
+ Customize output file locations or disable specific outputs:
88
+
89
+ ```ts
90
+ export default defineConfig({
91
+ output: {
92
+ typeDefsPath: "generated/schema.ts", // Custom path
93
+ resolversPath: "generated/resolvers.ts",
94
+ schemaPath: null, // Disable SDL output
95
+ },
96
+ });
97
+ ```
98
+
99
+ ### Output Options
100
+
101
+ | Option | Type | Default | Description |
102
+ |--------|------|---------|-------------|
103
+ | `typeDefsPath` | `string` \| `null` | `"src/gqlkit/__generated__/typeDefs.ts"` | Path for the TypeDefs output |
104
+ | `resolversPath` | `string` \| `null` | `"src/gqlkit/__generated__/resolvers.ts"` | Path for the resolvers output |
105
+ | `schemaPath` | `string` \| `null` | `"src/gqlkit/__generated__/schema.graphql"` | Path for the SDL output |
106
+
107
+ Set any path to `null` to disable that output.
108
+
109
+ ## Hooks
110
+
111
+ Execute commands after file generation:
112
+
113
+ ```ts
114
+ export default defineConfig({
115
+ hooks: {
116
+ // Single command
117
+ afterAllFileWrite: "prettier --write",
118
+ },
119
+ });
120
+ ```
121
+
122
+ You can also specify multiple commands to run sequentially:
123
+
124
+ ```ts
125
+ export default defineConfig({
126
+ hooks: {
127
+ // Multiple commands (executed sequentially)
128
+ afterAllFileWrite: ["prettier --write", "eslint --fix"],
129
+ },
130
+ });
131
+ ```
132
+
133
+ ### Available Hooks
134
+
135
+ | Hook | Description |
136
+ |------|-------------|
137
+ | `afterAllFileWrite` | Runs after all generated files are written. Receives the list of written file paths. |
138
+
139
+ ## Source Directory
140
+
141
+ By default, gqlkit scans `src/gqlkit/schema` for types and resolvers.
142
+
143
+ ```ts
144
+ export default defineConfig({
145
+ sourceDir: "src/graphql/schema", // Custom source directory
146
+ });
147
+ ```
148
+
149
+ All TypeScript files (`.ts`, `.cts`, `.mts`) under this directory are scanned.
150
+
151
+ ## Ignore Patterns
152
+
153
+ Exclude files from scanning using glob patterns:
154
+
155
+ ```ts
156
+ export default defineConfig({
157
+ sourceIgnoreGlobs: [
158
+ "**/*.test.ts",
159
+ "**/*.spec.ts",
160
+ "**/testdata/**",
161
+ ],
162
+ });
163
+ ```
@@ -0,0 +1,117 @@
1
+ # Getting Started
2
+
3
+ ## Installation
4
+
5
+ ```sh filename="npm"
6
+ npm install @gqlkit-ts/runtime @graphql-tools/schema graphql
7
+ npm install -D @gqlkit-ts/cli
8
+ ```
9
+
10
+ ```sh filename="pnpm"
11
+ pnpm add @gqlkit-ts/runtime @graphql-tools/schema graphql
12
+ pnpm add -D @gqlkit-ts/cli
13
+ ```
14
+
15
+ ```sh filename="yarn"
16
+ yarn add @gqlkit-ts/runtime @graphql-tools/schema graphql
17
+ yarn add -D @gqlkit-ts/cli
18
+ ```
19
+
20
+ ## Project Structure
21
+
22
+ gqlkit expects your types and resolvers to be in `src/gqlkit/schema/`:
23
+
24
+ ```
25
+ src/
26
+ └── gqlkit/
27
+ ├── context.ts # Context type definition
28
+ ├── gqlkit.ts # Resolver factories
29
+ └── schema/
30
+ ├── user.ts # User type and resolvers
31
+ ├── post.ts # Post type and resolvers
32
+ └── query.ts # Query resolvers
33
+ ```
34
+
35
+ ## Set Up Context and Resolver Factories
36
+
37
+ Create `src/gqlkit/context.ts` to define your context type:
38
+
39
+ ```typescript
40
+ export type Context = {
41
+ currentUser: { id: string; name: string; email: string | null } | null;
42
+ };
43
+ ```
44
+
45
+ Create `src/gqlkit/gqlkit.ts` to export resolver factories:
46
+
47
+ ```typescript
48
+ import { createGqlkitApis } from "@gqlkit-ts/runtime";
49
+ import type { Context } from "./context";
50
+
51
+ export const { defineQuery, defineMutation, defineField } =
52
+ createGqlkitApis<Context>();
53
+ ```
54
+
55
+ ## Define Your First Type
56
+
57
+ Create a simple User type in `src/gqlkit/schema/user.ts`:
58
+
59
+ ```typescript
60
+ export type User = {
61
+ id: string;
62
+ name: string;
63
+ email: string | null;
64
+ };
65
+ ```
66
+
67
+ ## Define a Query
68
+
69
+ Create a query resolver in `src/gqlkit/schema/query.ts`:
70
+
71
+ ```typescript
72
+ import { defineQuery } from "../gqlkit";
73
+ import type { NoArgs } from "@gqlkit-ts/runtime";
74
+ import type { User } from "./user";
75
+
76
+ export const me = defineQuery<NoArgs, User | null>(
77
+ (_root, _args, ctx) => ctx.currentUser
78
+ );
79
+ ```
80
+
81
+ ## Generate Schema
82
+
83
+ Run the generator:
84
+
85
+ ```sh filename="npm"
86
+ npm exec gqlkit gen
87
+ ```
88
+
89
+ ```sh filename="pnpm"
90
+ pnpm gqlkit gen
91
+ ```
92
+
93
+ ```sh filename="yarn"
94
+ yarn gqlkit gen
95
+ ```
96
+
97
+ This will create files in `src/gqlkit/__generated__/`:
98
+ - `schema.ts` - GraphQL schema AST (DocumentNode)
99
+ - `resolvers.ts` - Resolver map
100
+
101
+ ## Create GraphQL Schema
102
+
103
+ Use `@graphql-tools/schema` to combine the generated outputs into an executable schema:
104
+
105
+ ```typescript
106
+ import { makeExecutableSchema } from "@graphql-tools/schema";
107
+ import { typeDefs } from "./gqlkit/__generated__/schema";
108
+ import { resolvers } from "./gqlkit/__generated__/resolvers";
109
+
110
+ export const schema = makeExecutableSchema({ typeDefs, resolvers });
111
+ ```
112
+
113
+ ## Next Steps
114
+
115
+ - [HTTP Server Integration](./integration/yoga) - Connect your schema to graphql-yoga, Apollo Server, or other HTTP servers
116
+ - [Object Types](./schema/objects) - Learn more about defining types
117
+ - [Queries & Mutations](./schema/queries-mutations) - Advanced resolver patterns
package/docs/index.md ADDED
@@ -0,0 +1,32 @@
1
+ # gqlkit
2
+
3
+ > gqlkit is a convention-driven code generator for GraphQL servers in TypeScript. Define GraphQL types and resolver signatures in TypeScript, then `gqlkit gen` generates GraphQL schema AST and a resolver map from your codebase.
4
+
5
+ ## Documentation
6
+
7
+ - [What is gqlkit?](./what-is-gqlkit.md): gqlkit is a convention-driven code generator for GraphQL servers in TypeScript.
8
+ - [Getting Started](./getting-started.md): gqlkit expects your types and resolvers to be in `src/gqlkit/schema/`:
9
+
10
+ ## Schema Definition
11
+
12
+ - [Schema Definition](./schema.md): gqlkit generates GraphQL schema from your TypeScript types. All exported types from `src/gqlkit/schema/` are automatically scanned and converted to GraphQL types.
13
+ - [Object Types](./schema/objects.md): Plain TypeScript type exports become GraphQL Object types.
14
+ - [Input Types](./schema/inputs.md): TypeScript types with `Input` suffix are treated as GraphQL input types.
15
+ - [Queries & Mutations](./schema/queries-mutations.md): Define Query and Mutation fields using the `@gqlkit-ts/runtime` API.
16
+ - [Field Resolvers](./schema/fields.md): Add computed fields to object types using `defineField`. Define them alongside the type.
17
+ - [Scalar Types](./schema/scalars.md): gqlkit provides built-in scalar types and supports custom scalar definitions.
18
+ - [Enum Types](./schema/enums.md): gqlkit converts TypeScript string literal unions and enums to GraphQL enum types.
19
+ - [Union Types](./schema/unions.md): TypeScript union types of object types are converted to GraphQL union types.
20
+ - [Interface Types](./schema/interfaces.md): Define GraphQL interface types using the `GqlInterface` utility type.
21
+ - [Abstract Type Resolution](./schema/abstract-resolvers.md): GraphQL abstract types (unions and interfaces) require runtime type resolution to determine the concrete type of returned values. gqlkit provides `defineResolveType` and `defineIsTypeOf` to handle this.
22
+ - [Documentation](./schema/documentation.md): gqlkit extracts TSDoc/JSDoc comments and converts them to GraphQL descriptions.
23
+ - [Custom Directives](./schema/directives.md): Define custom directives using the `GqlDirective` utility type and attach them using `GqlField` or `GqlObject`.
24
+
25
+ ## Integration
26
+
27
+ - [graphql-yoga](./integration/yoga.md): [graphql-yoga](https://the-guild.dev/graphql/yoga-server) is a batteries-included GraphQL server that works in any JavaScript runtime.
28
+ - [Apollo Server](./integration/apollo.md): [Apollo Server](https://www.apollographql.com/docs/apollo-server/) is a popular GraphQL server with extensive features and ecosystem.
29
+
30
+ ## Guides
31
+
32
+ - [Configuration](./configuration.md): gqlkit can be configured via `gqlkit.config.ts` in your project root.
@@ -0,0 +1,109 @@
1
+ # Apollo Server
2
+
3
+ [Apollo Server](https://www.apollographql.com/docs/apollo-server/) is a popular GraphQL server with extensive features and ecosystem.
4
+
5
+ ## Installation
6
+
7
+ ```sh filename="npm"
8
+ npm install @apollo/server
9
+ ```
10
+
11
+ ```sh filename="pnpm"
12
+ pnpm add @apollo/server
13
+ ```
14
+
15
+ ```sh filename="yarn"
16
+ yarn add @apollo/server
17
+ ```
18
+
19
+ ## Creating the Schema
20
+
21
+ First, create an executable schema using `makeExecutableSchema`:
22
+
23
+ ```typescript
24
+ // src/schema.ts
25
+ import { makeExecutableSchema } from "@graphql-tools/schema";
26
+ import { typeDefs } from "./gqlkit/__generated__/schema";
27
+ import { resolvers } from "./gqlkit/__generated__/resolvers";
28
+
29
+ export const schema = makeExecutableSchema({ typeDefs, resolvers });
30
+ ```
31
+
32
+ ## Basic Server
33
+
34
+ Using the standalone server:
35
+
36
+ ```typescript
37
+ // src/server.ts
38
+ import { ApolloServer } from "@apollo/server";
39
+ import { startStandaloneServer } from "@apollo/server/standalone";
40
+ import { schema } from "./schema";
41
+
42
+ const server = new ApolloServer({ schema });
43
+
44
+ const { url } = await startStandaloneServer(server, {
45
+ listen: { port: 4000 },
46
+ });
47
+
48
+ console.log(`Server is running on ${url}`);
49
+ ```
50
+
51
+ ## With Context
52
+
53
+ If your resolvers use a context type, provide a context factory:
54
+
55
+ ```typescript
56
+ // src/gqlkit/context.ts
57
+ export type Context = {
58
+ currentUser: User | null;
59
+ db: Database;
60
+ };
61
+ ```
62
+
63
+ ```typescript
64
+ // src/gqlkit/gqlkit.ts
65
+ import { createGqlkitApis } from "@gqlkit-ts/runtime";
66
+ import type { Context } from "./context";
67
+
68
+ export const { defineQuery, defineMutation, defineField } =
69
+ createGqlkitApis<Context>();
70
+ ```
71
+
72
+ ```typescript
73
+ // src/gqlkit/schema/query.ts
74
+ import { defineQuery } from "../gqlkit";
75
+ import type { NoArgs } from "@gqlkit-ts/runtime";
76
+ import type { User } from "./user";
77
+
78
+ export const me = defineQuery<NoArgs, User | null>(
79
+ (_root, _args, ctx) => ctx.currentUser
80
+ );
81
+ ```
82
+
83
+ ```typescript
84
+ // src/server.ts
85
+ import { ApolloServer } from "@apollo/server";
86
+ import { startStandaloneServer } from "@apollo/server/standalone";
87
+ import { schema } from "./schema";
88
+ import type { Context } from "./gqlkit/context";
89
+
90
+ const server = new ApolloServer<Context>({ schema });
91
+
92
+ const { url } = await startStandaloneServer(server, {
93
+ listen: { port: 4000 },
94
+ context: async ({ req }) => {
95
+ const user = await getUserFromRequest(req);
96
+ return {
97
+ currentUser: user,
98
+ db: database,
99
+ };
100
+ },
101
+ });
102
+
103
+ console.log(`Server is running on ${url}`);
104
+ ```
105
+
106
+ ## Further Reading
107
+
108
+ - [Apollo Server Documentation](https://www.apollographql.com/docs/apollo-server/)
109
+ - [Apollo Server Plugins](https://www.apollographql.com/docs/apollo-server/builtin-plugins)
@@ -0,0 +1,108 @@
1
+ # graphql-yoga
2
+
3
+ [graphql-yoga](https://the-guild.dev/graphql/yoga-server) is a batteries-included GraphQL server that works in any JavaScript runtime.
4
+
5
+ ## Installation
6
+
7
+ ```sh filename="npm"
8
+ npm install graphql-yoga
9
+ ```
10
+
11
+ ```sh filename="pnpm"
12
+ pnpm add graphql-yoga
13
+ ```
14
+
15
+ ```sh filename="yarn"
16
+ yarn add graphql-yoga
17
+ ```
18
+
19
+ ## Creating the Schema
20
+
21
+ First, create an executable schema using `makeExecutableSchema`:
22
+
23
+ ```typescript
24
+ // src/schema.ts
25
+ import { makeExecutableSchema } from "@graphql-tools/schema";
26
+ import { typeDefs } from "./gqlkit/__generated__/schema";
27
+ import { resolvers } from "./gqlkit/__generated__/resolvers";
28
+
29
+ export const schema = makeExecutableSchema({ typeDefs, resolvers });
30
+ ```
31
+
32
+ ## Basic Server
33
+
34
+ ```typescript
35
+ // src/server.ts
36
+ import { createServer } from "node:http";
37
+ import { createYoga } from "graphql-yoga";
38
+ import { schema } from "./schema";
39
+
40
+ const yoga = createYoga({ schema });
41
+ const server = createServer(yoga);
42
+
43
+ server.listen(4000, () => {
44
+ console.log("Server is running on http://localhost:4000/graphql");
45
+ });
46
+ ```
47
+
48
+ ## With Context
49
+
50
+ If your resolvers use a context type, provide a context factory:
51
+
52
+ ```typescript
53
+ // src/gqlkit/context.ts
54
+ export type Context = {
55
+ currentUser: User | null;
56
+ db: Database;
57
+ };
58
+ ```
59
+
60
+ ```typescript
61
+ // src/gqlkit/gqlkit.ts
62
+ import { createGqlkitApis } from "@gqlkit-ts/runtime";
63
+ import type { Context } from "./context";
64
+
65
+ export const { defineQuery, defineMutation, defineField } =
66
+ createGqlkitApis<Context>();
67
+ ```
68
+
69
+ ```typescript
70
+ // src/gqlkit/schema/query.ts
71
+ import { defineQuery } from "../gqlkit";
72
+ import type { NoArgs } from "@gqlkit-ts/runtime";
73
+ import type { User } from "./user";
74
+
75
+ export const me = defineQuery<NoArgs, User | null>(
76
+ (_root, _args, ctx) => ctx.currentUser
77
+ );
78
+ ```
79
+
80
+ ```typescript
81
+ // src/server.ts
82
+ import { createServer } from "node:http";
83
+ import { createYoga } from "graphql-yoga";
84
+ import { schema } from "./schema";
85
+ import type { Context } from "./gqlkit/context";
86
+
87
+ const yoga = createYoga<{}, Context>({
88
+ schema,
89
+ context: async ({ request }) => {
90
+ const user = await getUserFromRequest(request);
91
+ return {
92
+ currentUser: user,
93
+ db: database,
94
+ };
95
+ },
96
+ });
97
+
98
+ const server = createServer(yoga);
99
+
100
+ server.listen(4000, () => {
101
+ console.log("Server is running on http://localhost:4000/graphql");
102
+ });
103
+ ```
104
+
105
+ ## Further Reading
106
+
107
+ - [graphql-yoga Documentation](https://the-guild.dev/graphql/yoga-server/docs)
108
+ - [Envelop Plugins](https://the-guild.dev/graphql/envelop/plugins)