@commitspark/graphql-api 0.81.2 → 1.0.0-beta.1

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 (334) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/README.md +5 -6
  3. package/dist/cjs/client.js +65 -0
  4. package/dist/cjs/client.js.map +1 -0
  5. package/dist/cjs/graphql/{apollo-config-factory.service.js → apollo-config-factory.js} +12 -17
  6. package/dist/cjs/graphql/apollo-config-factory.js.map +1 -0
  7. package/dist/cjs/graphql/input-type-generator.js +94 -0
  8. package/dist/cjs/graphql/input-type-generator.js.map +1 -0
  9. package/dist/cjs/graphql/queries-mutations-generator.js +68 -0
  10. package/dist/cjs/graphql/queries-mutations-generator.js.map +1 -0
  11. package/dist/cjs/graphql/{resolver-generators/query-all-resolver-generator.js → resolvers/field-resolvers/entry-reference-resolver.js} +11 -15
  12. package/dist/cjs/graphql/resolvers/field-resolvers/entry-reference-resolver.js.map +1 -0
  13. package/dist/cjs/graphql/resolvers/field-resolvers/field-default-value-resolver.js +81 -0
  14. package/dist/cjs/graphql/resolvers/field-resolvers/field-default-value-resolver.js.map +1 -0
  15. package/dist/cjs/graphql/{field-resolver/fieldResolver.js → resolvers/field-resolvers/types.js} +1 -1
  16. package/dist/cjs/graphql/resolvers/field-resolvers/types.js.map +1 -0
  17. package/dist/cjs/graphql/resolvers/field-resolvers/union-value-resolver.js +25 -0
  18. package/dist/cjs/graphql/resolvers/field-resolvers/union-value-resolver.js.map +1 -0
  19. package/dist/cjs/graphql/resolvers/object-type-field-default-value-resolver-generator.js +53 -0
  20. package/dist/cjs/graphql/resolvers/object-type-field-default-value-resolver-generator.js.map +1 -0
  21. package/dist/cjs/graphql/resolvers/query-mutation-resolvers/mutation-create-resolver.js +77 -0
  22. package/dist/cjs/graphql/resolvers/query-mutation-resolvers/mutation-create-resolver.js.map +1 -0
  23. package/dist/cjs/graphql/resolvers/query-mutation-resolvers/mutation-delete-resolver.js +53 -0
  24. package/dist/cjs/graphql/resolvers/query-mutation-resolvers/mutation-delete-resolver.js.map +1 -0
  25. package/dist/cjs/graphql/resolvers/query-mutation-resolvers/mutation-update-resolver.js +56 -0
  26. package/dist/cjs/graphql/resolvers/query-mutation-resolvers/mutation-update-resolver.js.map +1 -0
  27. package/dist/cjs/graphql/{resolver-generators/query-count-all-resolver-generator.js → resolvers/query-mutation-resolvers/query-all-resolver.js} +10 -15
  28. package/dist/cjs/graphql/resolvers/query-mutation-resolvers/query-all-resolver.js.map +1 -0
  29. package/dist/cjs/graphql/{resolver-generators/query-type-by-id-resolver-generator.js → resolvers/query-mutation-resolvers/query-by-id-resolver.js} +8 -13
  30. package/dist/cjs/graphql/resolvers/query-mutation-resolvers/query-by-id-resolver.js.map +1 -0
  31. package/dist/cjs/graphql/{resolver-generators/query-by-id-resolver-generator.js → resolvers/query-mutation-resolvers/query-type-by-id-resolver.js} +7 -14
  32. package/dist/cjs/graphql/resolvers/query-mutation-resolvers/query-type-by-id-resolver.js.map +1 -0
  33. package/dist/cjs/graphql/resolvers/query-mutation-resolvers/union-type-resolver.js +27 -0
  34. package/dist/cjs/graphql/resolvers/query-mutation-resolvers/union-type-resolver.js.map +1 -0
  35. package/dist/cjs/graphql/resolvers/types.js +3 -0
  36. package/dist/cjs/graphql/resolvers/types.js.map +1 -0
  37. package/dist/cjs/graphql/schema-analyzer.js +38 -0
  38. package/dist/cjs/graphql/schema-analyzer.js.map +1 -0
  39. package/dist/cjs/graphql/schema-generator.js +95 -0
  40. package/dist/cjs/graphql/schema-generator.js.map +1 -0
  41. package/dist/cjs/graphql/schema-root-type-generator.js +32 -0
  42. package/dist/cjs/graphql/schema-root-type-generator.js.map +1 -0
  43. package/dist/cjs/graphql/schema-utils/entry-reference-util.js +107 -113
  44. package/dist/cjs/graphql/schema-utils/entry-reference-util.js.map +1 -1
  45. package/dist/cjs/graphql/schema-utils/entry-type-util.js +24 -26
  46. package/dist/cjs/graphql/schema-utils/entry-type-util.js.map +1 -1
  47. package/dist/cjs/graphql/schema-utils/union-type-util.js +14 -16
  48. package/dist/cjs/graphql/schema-utils/union-type-util.js.map +1 -1
  49. package/dist/cjs/graphql/schema-validator.js +23 -26
  50. package/dist/cjs/graphql/schema-validator.js.map +1 -1
  51. package/dist/cjs/index.js +7 -7
  52. package/dist/cjs/index.js.map +1 -1
  53. package/dist/cjs/persistence/persistence.js +66 -0
  54. package/dist/cjs/persistence/persistence.js.map +1 -0
  55. package/dist/esm/client.js +53 -0
  56. package/dist/esm/client.js.map +1 -0
  57. package/dist/esm/graphql/apollo-config-factory.js +12 -0
  58. package/dist/esm/graphql/apollo-config-factory.js.map +1 -0
  59. package/dist/esm/graphql/input-type-generator.js +89 -0
  60. package/dist/esm/graphql/input-type-generator.js.map +1 -0
  61. package/dist/esm/graphql/queries-mutations-generator.js +64 -0
  62. package/dist/esm/graphql/queries-mutations-generator.js.map +1 -0
  63. package/dist/esm/graphql/resolvers/field-resolvers/entry-reference-resolver.js +10 -0
  64. package/dist/esm/graphql/resolvers/field-resolvers/entry-reference-resolver.js.map +1 -0
  65. package/dist/esm/graphql/resolvers/field-resolvers/field-default-value-resolver.js +68 -0
  66. package/dist/esm/graphql/resolvers/field-resolvers/field-default-value-resolver.js.map +1 -0
  67. package/dist/esm/graphql/resolvers/field-resolvers/types.js +2 -0
  68. package/dist/esm/graphql/resolvers/field-resolvers/types.js.map +1 -0
  69. package/dist/esm/graphql/resolvers/field-resolvers/union-value-resolver.js +15 -0
  70. package/dist/esm/graphql/resolvers/field-resolvers/union-value-resolver.js.map +1 -0
  71. package/dist/esm/graphql/resolvers/object-type-field-default-value-resolver-generator.js +50 -0
  72. package/dist/esm/graphql/resolvers/object-type-field-default-value-resolver-generator.js.map +1 -0
  73. package/dist/esm/graphql/resolvers/query-mutation-resolvers/mutation-create-resolver.js +70 -0
  74. package/dist/esm/graphql/resolvers/query-mutation-resolvers/mutation-create-resolver.js.map +1 -0
  75. package/dist/esm/graphql/resolvers/query-mutation-resolvers/mutation-delete-resolver.js +49 -0
  76. package/dist/esm/graphql/resolvers/query-mutation-resolvers/mutation-delete-resolver.js.map +1 -0
  77. package/dist/esm/graphql/resolvers/query-mutation-resolvers/mutation-update-resolver.js +59 -0
  78. package/dist/esm/graphql/resolvers/query-mutation-resolvers/mutation-update-resolver.js.map +1 -0
  79. package/dist/esm/graphql/resolvers/query-mutation-resolvers/query-all-resolver.js +8 -0
  80. package/dist/esm/graphql/resolvers/query-mutation-resolvers/query-all-resolver.js.map +1 -0
  81. package/dist/esm/graphql/resolvers/query-mutation-resolvers/query-by-id-resolver.js +6 -0
  82. package/dist/esm/graphql/resolvers/query-mutation-resolvers/query-by-id-resolver.js.map +1 -0
  83. package/dist/esm/graphql/resolvers/query-mutation-resolvers/query-type-by-id-resolver.js +5 -0
  84. package/dist/esm/graphql/resolvers/query-mutation-resolvers/query-type-by-id-resolver.js.map +1 -0
  85. package/dist/esm/graphql/resolvers/query-mutation-resolvers/union-type-resolver.js +14 -0
  86. package/dist/esm/graphql/resolvers/query-mutation-resolvers/union-type-resolver.js.map +1 -0
  87. package/dist/esm/graphql/resolvers/types.js +2 -0
  88. package/dist/esm/graphql/resolvers/types.js.map +1 -0
  89. package/dist/esm/graphql/schema-analyzer.js +34 -0
  90. package/dist/esm/graphql/schema-analyzer.js.map +1 -0
  91. package/dist/esm/graphql/schema-generator.js +89 -0
  92. package/dist/esm/graphql/schema-generator.js.map +1 -0
  93. package/dist/esm/graphql/schema-root-type-generator.js +29 -0
  94. package/dist/esm/graphql/schema-root-type-generator.js.map +1 -0
  95. package/dist/esm/graphql/schema-utils/entry-reference-util.js +99 -107
  96. package/dist/esm/graphql/schema-utils/entry-reference-util.js.map +1 -1
  97. package/dist/esm/graphql/schema-utils/entry-type-util.js +20 -23
  98. package/dist/esm/graphql/schema-utils/entry-type-util.js.map +1 -1
  99. package/dist/esm/graphql/schema-utils/union-type-util.js +12 -14
  100. package/dist/esm/graphql/schema-utils/union-type-util.js.map +1 -1
  101. package/dist/esm/graphql/schema-validator.js +18 -20
  102. package/dist/esm/graphql/schema-validator.js.map +1 -1
  103. package/dist/esm/index.js +6 -5
  104. package/dist/esm/index.js.map +1 -1
  105. package/dist/esm/persistence/persistence.js +43 -0
  106. package/dist/esm/persistence/persistence.js.map +1 -0
  107. package/dist/tsconfig.build.cjs.tsbuildinfo +1 -1
  108. package/dist/tsconfig.build.esm.tsbuildinfo +1 -1
  109. package/dist/tsconfig.build.types.tsbuildinfo +1 -1
  110. package/dist/types/client.d.ts +27 -0
  111. package/dist/types/client.d.ts.map +1 -0
  112. package/dist/types/graphql/apollo-config-factory.d.ts +4 -0
  113. package/dist/types/graphql/apollo-config-factory.d.ts.map +1 -0
  114. package/dist/types/graphql/input-type-generator.d.ts +6 -0
  115. package/dist/types/graphql/input-type-generator.d.ts.map +1 -0
  116. package/dist/types/graphql/queries-mutations-generator.d.ts +18 -0
  117. package/dist/types/graphql/queries-mutations-generator.d.ts.map +1 -0
  118. package/dist/types/graphql/resolvers/field-resolvers/entry-reference-resolver.d.ts +3 -0
  119. package/dist/types/graphql/resolvers/field-resolvers/entry-reference-resolver.d.ts.map +1 -0
  120. package/dist/types/graphql/resolvers/field-resolvers/field-default-value-resolver.d.ts +3 -0
  121. package/dist/types/graphql/resolvers/field-resolvers/field-default-value-resolver.d.ts.map +1 -0
  122. package/dist/types/graphql/resolvers/field-resolvers/types.d.ts +12 -0
  123. package/dist/types/graphql/resolvers/field-resolvers/types.d.ts.map +1 -0
  124. package/dist/types/graphql/resolvers/field-resolvers/union-value-resolver.d.ts +3 -0
  125. package/dist/types/graphql/resolvers/field-resolvers/union-value-resolver.d.ts.map +1 -0
  126. package/dist/types/graphql/resolvers/object-type-field-default-value-resolver-generator.d.ts +8 -0
  127. package/dist/types/graphql/resolvers/object-type-field-default-value-resolver-generator.d.ts.map +1 -0
  128. package/dist/types/graphql/resolvers/query-mutation-resolvers/mutation-create-resolver.d.ts +5 -0
  129. package/dist/types/graphql/resolvers/query-mutation-resolvers/mutation-create-resolver.d.ts.map +1 -0
  130. package/dist/types/graphql/resolvers/query-mutation-resolvers/mutation-delete-resolver.d.ts +5 -0
  131. package/dist/types/graphql/resolvers/query-mutation-resolvers/mutation-delete-resolver.d.ts.map +1 -0
  132. package/dist/types/graphql/resolvers/query-mutation-resolvers/mutation-update-resolver.d.ts +5 -0
  133. package/dist/types/graphql/resolvers/query-mutation-resolvers/mutation-update-resolver.d.ts.map +1 -0
  134. package/dist/types/graphql/resolvers/query-mutation-resolvers/query-all-resolver.d.ts +5 -0
  135. package/dist/types/graphql/resolvers/query-mutation-resolvers/query-all-resolver.d.ts.map +1 -0
  136. package/dist/types/graphql/resolvers/query-mutation-resolvers/query-by-id-resolver.d.ts +5 -0
  137. package/dist/types/graphql/resolvers/query-mutation-resolvers/query-by-id-resolver.d.ts.map +1 -0
  138. package/dist/types/graphql/resolvers/query-mutation-resolvers/query-type-by-id-resolver.d.ts +4 -0
  139. package/dist/types/graphql/resolvers/query-mutation-resolvers/query-type-by-id-resolver.d.ts.map +1 -0
  140. package/dist/types/graphql/resolvers/query-mutation-resolvers/union-type-resolver.d.ts +4 -0
  141. package/dist/types/graphql/resolvers/query-mutation-resolvers/union-type-resolver.d.ts.map +1 -0
  142. package/dist/types/graphql/resolvers/types.d.ts +8 -0
  143. package/dist/types/graphql/resolvers/types.d.ts.map +1 -0
  144. package/dist/types/graphql/{schema-analyzer.service.d.ts → schema-analyzer.d.ts} +3 -5
  145. package/dist/types/graphql/schema-analyzer.d.ts.map +1 -0
  146. package/dist/types/graphql/schema-generator.d.ts +4 -0
  147. package/dist/types/graphql/schema-generator.d.ts.map +1 -0
  148. package/dist/types/graphql/schema-root-type-generator.d.ts +3 -0
  149. package/dist/types/graphql/schema-root-type-generator.d.ts.map +1 -0
  150. package/dist/types/graphql/schema-utils/entry-reference-util.d.ts +2 -13
  151. package/dist/types/graphql/schema-utils/entry-reference-util.d.ts.map +1 -1
  152. package/dist/types/graphql/schema-utils/entry-type-util.d.ts +3 -5
  153. package/dist/types/graphql/schema-utils/entry-type-util.d.ts.map +1 -1
  154. package/dist/types/graphql/schema-utils/union-type-util.d.ts +2 -4
  155. package/dist/types/graphql/schema-utils/union-type-util.d.ts.map +1 -1
  156. package/dist/types/graphql/schema-validator.d.ts +1 -4
  157. package/dist/types/graphql/schema-validator.d.ts.map +1 -1
  158. package/dist/types/index.d.ts +8 -3
  159. package/dist/types/index.d.ts.map +1 -1
  160. package/dist/types/persistence/persistence.d.ts +6 -0
  161. package/dist/types/persistence/persistence.d.ts.map +1 -0
  162. package/package.json +2 -2
  163. package/src/client.ts +114 -0
  164. package/src/graphql/apollo-config-factory.ts +17 -0
  165. package/src/graphql/input-type-generator.ts +126 -0
  166. package/src/graphql/queries-mutations-generator.ts +136 -0
  167. package/src/graphql/resolvers/field-resolvers/entry-reference-resolver.ts +22 -0
  168. package/src/graphql/resolvers/field-resolvers/field-default-value-resolver.ts +107 -0
  169. package/src/graphql/{field-resolver/fieldResolver.ts → resolvers/field-resolvers/types.ts} +5 -4
  170. package/src/graphql/resolvers/field-resolvers/union-value-resolver.ts +24 -0
  171. package/src/graphql/resolvers/object-type-field-default-value-resolver-generator.ts +91 -0
  172. package/src/graphql/resolvers/query-mutation-resolvers/mutation-create-resolver.ts +108 -0
  173. package/src/graphql/resolvers/query-mutation-resolvers/mutation-delete-resolver.ts +81 -0
  174. package/src/graphql/resolvers/query-mutation-resolvers/mutation-update-resolver.ts +114 -0
  175. package/src/graphql/resolvers/query-mutation-resolvers/query-all-resolver.ts +21 -0
  176. package/src/graphql/resolvers/query-mutation-resolvers/query-by-id-resolver.ts +20 -0
  177. package/src/graphql/resolvers/query-mutation-resolvers/query-type-by-id-resolver.ts +12 -0
  178. package/src/graphql/resolvers/query-mutation-resolvers/union-type-resolver.ts +19 -0
  179. package/src/graphql/resolvers/types.ts +14 -0
  180. package/src/graphql/schema-analyzer.ts +55 -0
  181. package/src/graphql/schema-generator.ts +161 -0
  182. package/src/graphql/schema-root-type-generator.ts +35 -0
  183. package/src/graphql/schema-utils/entry-reference-util.ts +152 -166
  184. package/src/graphql/schema-utils/entry-type-util.ts +25 -28
  185. package/src/graphql/schema-utils/union-type-util.ts +13 -15
  186. package/src/graphql/schema-validator.ts +29 -31
  187. package/src/index.ts +26 -5
  188. package/src/persistence/persistence.ts +72 -0
  189. package/dist/cjs/app/api.service.js +0 -74
  190. package/dist/cjs/app/api.service.js.map +0 -1
  191. package/dist/cjs/container.js +0 -53
  192. package/dist/cjs/container.js.map +0 -1
  193. package/dist/cjs/graphql/apollo-config-factory.service.js.map +0 -1
  194. package/dist/cjs/graphql/field-resolver/entry-reference-resolver.js +0 -26
  195. package/dist/cjs/graphql/field-resolver/entry-reference-resolver.js.map +0 -1
  196. package/dist/cjs/graphql/field-resolver/field-default-value-resolver.js +0 -73
  197. package/dist/cjs/graphql/field-resolver/field-default-value-resolver.js.map +0 -1
  198. package/dist/cjs/graphql/field-resolver/fieldResolver.js.map +0 -1
  199. package/dist/cjs/graphql/field-resolver/union-value-resolver.js +0 -21
  200. package/dist/cjs/graphql/field-resolver/union-value-resolver.js.map +0 -1
  201. package/dist/cjs/graphql/input-type-generator.service.js +0 -97
  202. package/dist/cjs/graphql/input-type-generator.service.js.map +0 -1
  203. package/dist/cjs/graphql/queries-mutations-generator.service.js +0 -82
  204. package/dist/cjs/graphql/queries-mutations-generator.service.js.map +0 -1
  205. package/dist/cjs/graphql/resolver-generators/mutation-create-resolver-generator.js +0 -83
  206. package/dist/cjs/graphql/resolver-generators/mutation-create-resolver-generator.js.map +0 -1
  207. package/dist/cjs/graphql/resolver-generators/mutation-delete-resolver-generator.js +0 -60
  208. package/dist/cjs/graphql/resolver-generators/mutation-delete-resolver-generator.js.map +0 -1
  209. package/dist/cjs/graphql/resolver-generators/mutation-update-resolver-generator.js +0 -62
  210. package/dist/cjs/graphql/resolver-generators/mutation-update-resolver-generator.js.map +0 -1
  211. package/dist/cjs/graphql/resolver-generators/object-type-field-default-value-resolver-generator.js +0 -58
  212. package/dist/cjs/graphql/resolver-generators/object-type-field-default-value-resolver-generator.js.map +0 -1
  213. package/dist/cjs/graphql/resolver-generators/query-all-resolver-generator.js.map +0 -1
  214. package/dist/cjs/graphql/resolver-generators/query-by-id-resolver-generator.js.map +0 -1
  215. package/dist/cjs/graphql/resolver-generators/query-count-all-resolver-generator.js.map +0 -1
  216. package/dist/cjs/graphql/resolver-generators/query-type-by-id-resolver-generator.js.map +0 -1
  217. package/dist/cjs/graphql/resolver-generators/union-type-resolver-generator.js +0 -33
  218. package/dist/cjs/graphql/resolver-generators/union-type-resolver-generator.js.map +0 -1
  219. package/dist/cjs/graphql/schema-analyzer.service.js +0 -41
  220. package/dist/cjs/graphql/schema-analyzer.service.js.map +0 -1
  221. package/dist/cjs/graphql/schema-generator.service.js +0 -103
  222. package/dist/cjs/graphql/schema-generator.service.js.map +0 -1
  223. package/dist/cjs/graphql/schema-root-type-generator.service.js +0 -39
  224. package/dist/cjs/graphql/schema-root-type-generator.service.js.map +0 -1
  225. package/dist/cjs/persistence/persistence.service.js +0 -66
  226. package/dist/cjs/persistence/persistence.service.js.map +0 -1
  227. package/dist/esm/app/api.service.js +0 -61
  228. package/dist/esm/app/api.service.js.map +0 -1
  229. package/dist/esm/container.js +0 -50
  230. package/dist/esm/container.js.map +0 -1
  231. package/dist/esm/graphql/apollo-config-factory.service.js +0 -17
  232. package/dist/esm/graphql/apollo-config-factory.service.js.map +0 -1
  233. package/dist/esm/graphql/field-resolver/entry-reference-resolver.js +0 -13
  234. package/dist/esm/graphql/field-resolver/entry-reference-resolver.js.map +0 -1
  235. package/dist/esm/graphql/field-resolver/field-default-value-resolver.js +0 -73
  236. package/dist/esm/graphql/field-resolver/field-default-value-resolver.js.map +0 -1
  237. package/dist/esm/graphql/field-resolver/fieldResolver.js +0 -2
  238. package/dist/esm/graphql/field-resolver/fieldResolver.js.map +0 -1
  239. package/dist/esm/graphql/field-resolver/union-value-resolver.js +0 -22
  240. package/dist/esm/graphql/field-resolver/union-value-resolver.js.map +0 -1
  241. package/dist/esm/graphql/input-type-generator.service.js +0 -94
  242. package/dist/esm/graphql/input-type-generator.service.js.map +0 -1
  243. package/dist/esm/graphql/queries-mutations-generator.service.js +0 -85
  244. package/dist/esm/graphql/queries-mutations-generator.service.js.map +0 -1
  245. package/dist/esm/graphql/resolver-generators/mutation-create-resolver-generator.js +0 -78
  246. package/dist/esm/graphql/resolver-generators/mutation-create-resolver-generator.js.map +0 -1
  247. package/dist/esm/graphql/resolver-generators/mutation-delete-resolver-generator.js +0 -58
  248. package/dist/esm/graphql/resolver-generators/mutation-delete-resolver-generator.js.map +0 -1
  249. package/dist/esm/graphql/resolver-generators/mutation-update-resolver-generator.js +0 -67
  250. package/dist/esm/graphql/resolver-generators/mutation-update-resolver-generator.js.map +0 -1
  251. package/dist/esm/graphql/resolver-generators/object-type-field-default-value-resolver-generator.js +0 -55
  252. package/dist/esm/graphql/resolver-generators/object-type-field-default-value-resolver-generator.js.map +0 -1
  253. package/dist/esm/graphql/resolver-generators/query-all-resolver-generator.js +0 -15
  254. package/dist/esm/graphql/resolver-generators/query-all-resolver-generator.js.map +0 -1
  255. package/dist/esm/graphql/resolver-generators/query-by-id-resolver-generator.js +0 -13
  256. package/dist/esm/graphql/resolver-generators/query-by-id-resolver-generator.js.map +0 -1
  257. package/dist/esm/graphql/resolver-generators/query-count-all-resolver-generator.js +0 -14
  258. package/dist/esm/graphql/resolver-generators/query-count-all-resolver-generator.js.map +0 -1
  259. package/dist/esm/graphql/resolver-generators/query-type-by-id-resolver-generator.js +0 -12
  260. package/dist/esm/graphql/resolver-generators/query-type-by-id-resolver-generator.js.map +0 -1
  261. package/dist/esm/graphql/resolver-generators/union-type-resolver-generator.js +0 -22
  262. package/dist/esm/graphql/resolver-generators/union-type-resolver-generator.js.map +0 -1
  263. package/dist/esm/graphql/schema-analyzer.service.js +0 -36
  264. package/dist/esm/graphql/schema-analyzer.service.js.map +0 -1
  265. package/dist/esm/graphql/schema-generator.service.js +0 -103
  266. package/dist/esm/graphql/schema-generator.service.js.map +0 -1
  267. package/dist/esm/graphql/schema-root-type-generator.service.js +0 -35
  268. package/dist/esm/graphql/schema-root-type-generator.service.js.map +0 -1
  269. package/dist/esm/persistence/persistence.service.js +0 -45
  270. package/dist/esm/persistence/persistence.service.js.map +0 -1
  271. package/dist/types/app/api.service.d.ts +0 -34
  272. package/dist/types/app/api.service.d.ts.map +0 -1
  273. package/dist/types/container.d.ts +0 -3
  274. package/dist/types/container.d.ts.map +0 -1
  275. package/dist/types/graphql/apollo-config-factory.service.d.ts +0 -9
  276. package/dist/types/graphql/apollo-config-factory.service.d.ts.map +0 -1
  277. package/dist/types/graphql/field-resolver/entry-reference-resolver.d.ts +0 -11
  278. package/dist/types/graphql/field-resolver/entry-reference-resolver.d.ts.map +0 -1
  279. package/dist/types/graphql/field-resolver/field-default-value-resolver.d.ts +0 -15
  280. package/dist/types/graphql/field-resolver/field-default-value-resolver.d.ts.map +0 -1
  281. package/dist/types/graphql/field-resolver/fieldResolver.d.ts +0 -11
  282. package/dist/types/graphql/field-resolver/fieldResolver.d.ts.map +0 -1
  283. package/dist/types/graphql/field-resolver/union-value-resolver.d.ts +0 -11
  284. package/dist/types/graphql/field-resolver/union-value-resolver.d.ts.map +0 -1
  285. package/dist/types/graphql/input-type-generator.service.d.ts +0 -12
  286. package/dist/types/graphql/input-type-generator.service.d.ts.map +0 -1
  287. package/dist/types/graphql/queries-mutations-generator.service.d.ts +0 -39
  288. package/dist/types/graphql/queries-mutations-generator.service.d.ts.map +0 -1
  289. package/dist/types/graphql/resolver-generators/mutation-create-resolver-generator.d.ts +0 -12
  290. package/dist/types/graphql/resolver-generators/mutation-create-resolver-generator.d.ts.map +0 -1
  291. package/dist/types/graphql/resolver-generators/mutation-delete-resolver-generator.d.ts +0 -12
  292. package/dist/types/graphql/resolver-generators/mutation-delete-resolver-generator.d.ts.map +0 -1
  293. package/dist/types/graphql/resolver-generators/mutation-update-resolver-generator.d.ts +0 -13
  294. package/dist/types/graphql/resolver-generators/mutation-update-resolver-generator.d.ts.map +0 -1
  295. package/dist/types/graphql/resolver-generators/object-type-field-default-value-resolver-generator.d.ts +0 -13
  296. package/dist/types/graphql/resolver-generators/object-type-field-default-value-resolver-generator.d.ts.map +0 -1
  297. package/dist/types/graphql/resolver-generators/query-all-resolver-generator.d.ts +0 -10
  298. package/dist/types/graphql/resolver-generators/query-all-resolver-generator.d.ts.map +0 -1
  299. package/dist/types/graphql/resolver-generators/query-by-id-resolver-generator.d.ts +0 -10
  300. package/dist/types/graphql/resolver-generators/query-by-id-resolver-generator.d.ts.map +0 -1
  301. package/dist/types/graphql/resolver-generators/query-count-all-resolver-generator.d.ts +0 -10
  302. package/dist/types/graphql/resolver-generators/query-count-all-resolver-generator.d.ts.map +0 -1
  303. package/dist/types/graphql/resolver-generators/query-type-by-id-resolver-generator.d.ts +0 -9
  304. package/dist/types/graphql/resolver-generators/query-type-by-id-resolver-generator.d.ts.map +0 -1
  305. package/dist/types/graphql/resolver-generators/union-type-resolver-generator.d.ts +0 -11
  306. package/dist/types/graphql/resolver-generators/union-type-resolver-generator.d.ts.map +0 -1
  307. package/dist/types/graphql/schema-analyzer.service.d.ts.map +0 -1
  308. package/dist/types/graphql/schema-generator.service.d.ts +0 -21
  309. package/dist/types/graphql/schema-generator.service.d.ts.map +0 -1
  310. package/dist/types/graphql/schema-root-type-generator.service.d.ts +0 -5
  311. package/dist/types/graphql/schema-root-type-generator.service.d.ts.map +0 -1
  312. package/dist/types/persistence/persistence.service.d.ts +0 -8
  313. package/dist/types/persistence/persistence.service.d.ts.map +0 -1
  314. package/src/app/api.service.ts +0 -121
  315. package/src/container.ts +0 -106
  316. package/src/graphql/apollo-config-factory.service.ts +0 -21
  317. package/src/graphql/field-resolver/entry-reference-resolver.ts +0 -47
  318. package/src/graphql/field-resolver/field-default-value-resolver.ts +0 -152
  319. package/src/graphql/field-resolver/union-value-resolver.ts +0 -46
  320. package/src/graphql/input-type-generator.service.ts +0 -127
  321. package/src/graphql/queries-mutations-generator.service.ts +0 -154
  322. package/src/graphql/resolver-generators/mutation-create-resolver-generator.ts +0 -120
  323. package/src/graphql/resolver-generators/mutation-delete-resolver-generator.ts +0 -96
  324. package/src/graphql/resolver-generators/mutation-update-resolver-generator.ts +0 -127
  325. package/src/graphql/resolver-generators/object-type-field-default-value-resolver-generator.ts +0 -117
  326. package/src/graphql/resolver-generators/query-all-resolver-generator.ts +0 -29
  327. package/src/graphql/resolver-generators/query-by-id-resolver-generator.ts +0 -23
  328. package/src/graphql/resolver-generators/query-count-all-resolver-generator.ts +0 -29
  329. package/src/graphql/resolver-generators/query-type-by-id-resolver-generator.ts +0 -27
  330. package/src/graphql/resolver-generators/union-type-resolver-generator.ts +0 -38
  331. package/src/graphql/schema-analyzer.service.ts +0 -57
  332. package/src/graphql/schema-generator.service.ts +0 -178
  333. package/src/graphql/schema-root-type-generator.service.ts +0 -44
  334. package/src/persistence/persistence.service.ts +0 -74
@@ -0,0 +1,136 @@
1
+ import { EntryData } from '@commitspark/git-adapter'
2
+ import { ApolloContext } from '../client'
3
+ import { GraphQLFieldResolver, GraphQLObjectType } from 'graphql'
4
+ import { queryAllResolver } from './resolvers/query-mutation-resolvers/query-all-resolver'
5
+ import { queryByIdResolver } from './resolvers/query-mutation-resolvers/query-by-id-resolver'
6
+ import { mutationCreateResolver } from './resolvers/query-mutation-resolvers/mutation-create-resolver'
7
+ import { mutationUpdateResolver } from './resolvers/query-mutation-resolvers/mutation-update-resolver'
8
+ import { mutationDeleteResolver } from './resolvers/query-mutation-resolvers/mutation-delete-resolver'
9
+ import { queryTypeByIdResolver } from './resolvers/query-mutation-resolvers/query-type-by-id-resolver'
10
+ import { QueryMutationResolver } from './resolvers/types'
11
+
12
+ export function generateQueriesAndMutations(
13
+ entryDirectiveTypes: GraphQLObjectType[],
14
+ ): GeneratedSchema[] {
15
+ return entryDirectiveTypes.map((objectType): GeneratedSchema => {
16
+ const typeName = objectType.name
17
+
18
+ const queryAllName = `all${typeName}s`
19
+ const queryAllString = `${queryAllName}: [${objectType.name}!]`
20
+ const queryAllResolverFunc: GraphQLFieldResolver<
21
+ any,
22
+ ApolloContext,
23
+ any,
24
+ Promise<EntryData[]>
25
+ > = (source, args, context, info) =>
26
+ queryAllResolver(source, args, { ...context, type: objectType }, info)
27
+
28
+ const queryByIdName = typeName
29
+ const queryByIdString = `${queryByIdName}(id: ID!): ${objectType.name}`
30
+ const queryByIdResolverFunc: QueryMutationResolver<EntryData> = (
31
+ source,
32
+ args,
33
+ context,
34
+ info,
35
+ ) => queryByIdResolver(source, args, { ...context, type: objectType }, info)
36
+
37
+ const inputTypeName = `${typeName}Input`
38
+ const createMutationName = `create${typeName}`
39
+ const createMutationString = `${createMutationName}(id: ID!, data: ${inputTypeName}!, commitMessage: String): ${typeName}`
40
+ const createMutationResolver: QueryMutationResolver<EntryData> = (
41
+ source,
42
+ args,
43
+ context,
44
+ info,
45
+ ) =>
46
+ mutationCreateResolver(
47
+ source,
48
+ args,
49
+ { ...context, type: objectType },
50
+ info,
51
+ )
52
+
53
+ const updateMutationName = `update${typeName}`
54
+ const updateMutationString = `${updateMutationName}(id: ID!, data: ${inputTypeName}!, commitMessage: String): ${typeName}`
55
+ const updateMutationResolver: QueryMutationResolver<EntryData> = (
56
+ source,
57
+ args,
58
+ context,
59
+ info,
60
+ ) =>
61
+ mutationUpdateResolver(
62
+ source,
63
+ args,
64
+ { ...context, type: objectType },
65
+ info,
66
+ )
67
+
68
+ const deleteMutationName = `delete${typeName}`
69
+ const deleteMutationString = `${deleteMutationName}(id: ID!, commitMessage: String): ID`
70
+ const deleteMutationResolver: QueryMutationResolver<EntryData> = (
71
+ source,
72
+ args,
73
+ context,
74
+ info,
75
+ ) =>
76
+ mutationDeleteResolver(
77
+ source,
78
+ args,
79
+ { ...context, type: objectType },
80
+ info,
81
+ )
82
+
83
+ return {
84
+ queryAll: {
85
+ name: queryAllName,
86
+ schemaString: queryAllString,
87
+ resolver: queryAllResolverFunc,
88
+ },
89
+ queryById: {
90
+ name: queryByIdName,
91
+ schemaString: queryByIdString,
92
+ resolver: queryByIdResolverFunc,
93
+ },
94
+ createMutation: {
95
+ name: createMutationName,
96
+ schemaString: createMutationString,
97
+ resolver: createMutationResolver,
98
+ },
99
+ updateMutation: {
100
+ name: updateMutationName,
101
+ schemaString: updateMutationString,
102
+ resolver: updateMutationResolver,
103
+ },
104
+ deleteMutation: {
105
+ name: deleteMutationName,
106
+ schemaString: deleteMutationString,
107
+ resolver: deleteMutationResolver,
108
+ },
109
+ }
110
+ })
111
+ }
112
+
113
+ export function generateTypeNameQuery(): GeneratedQuery<Promise<string>> {
114
+ const entryTypeQueryName = '_typeName'
115
+ const entryTypeQueryString = `${entryTypeQueryName}(id: ID!): String!`
116
+
117
+ return {
118
+ name: entryTypeQueryName,
119
+ schemaString: entryTypeQueryString,
120
+ resolver: queryTypeByIdResolver,
121
+ }
122
+ }
123
+
124
+ export interface GeneratedSchema {
125
+ queryAll: GeneratedQuery<Promise<EntryData[]>>
126
+ queryById: GeneratedQuery<Promise<EntryData>>
127
+ createMutation: GeneratedQuery<Promise<EntryData>>
128
+ updateMutation: GeneratedQuery<Promise<EntryData>>
129
+ deleteMutation: GeneratedQuery<Promise<EntryData>>
130
+ }
131
+
132
+ export interface GeneratedQuery<T> {
133
+ name: string
134
+ schemaString: string
135
+ resolver: GraphQLFieldResolver<any, ApolloContext, any, T>
136
+ }
@@ -0,0 +1,22 @@
1
+ import { FieldResolver, FieldResolverContext } from './types'
2
+ import { GraphQLResolveInfo, isNamedType } from 'graphql'
3
+ import { findById } from '../../../persistence/persistence'
4
+
5
+ export const resolveEntryReference: FieldResolver<any> = async (
6
+ fieldValue: any,
7
+ args: any,
8
+ context: FieldResolverContext,
9
+ info: GraphQLResolveInfo,
10
+ ) => {
11
+ if (!isNamedType(context.currentType)) {
12
+ throw new Error(`Expected context.currentType type to be named type`)
13
+ }
14
+
15
+ const entry = await findById(
16
+ context.gitAdapter,
17
+ context.getCurrentRef(),
18
+ fieldValue.id,
19
+ )
20
+
21
+ return { ...entry.data, id: entry.id }
22
+ }
@@ -0,0 +1,107 @@
1
+ import { FieldResolver, FieldResolverContext, ResolvedEntryData } from './types'
2
+ import { EntryData } from '@commitspark/git-adapter'
3
+ import {
4
+ GraphQLNonNull,
5
+ GraphQLResolveInfo,
6
+ GraphQLUnionType,
7
+ isListType,
8
+ isNonNullType,
9
+ isObjectType,
10
+ isUnionType,
11
+ } from 'graphql'
12
+ import {
13
+ buildsOnTypeWithEntryDirective,
14
+ hasEntryDirective,
15
+ } from '../../schema-utils/entry-type-util'
16
+ import { resolveEntryReference } from './entry-reference-resolver'
17
+ import { resolveUnionValue } from './union-value-resolver'
18
+
19
+ export const resolveFieldDefaultValue: FieldResolver<any> = async (
20
+ fieldValue: any,
21
+ args: any,
22
+ context: FieldResolverContext,
23
+ info: GraphQLResolveInfo,
24
+ ): Promise<ResolvedEntryData<EntryData | EntryData[] | null>> => {
25
+ if (isNonNullType(context.currentType)) {
26
+ return resolveFieldDefaultValue(
27
+ fieldValue,
28
+ args,
29
+ {
30
+ gitAdapter: context.gitAdapter,
31
+ getCurrentRef: context.getCurrentRef,
32
+ currentType: context.currentType.ofType,
33
+ hasNonNullParent: true,
34
+ },
35
+ info,
36
+ )
37
+ } else if (isListType(context.currentType)) {
38
+ if (fieldValue === undefined || fieldValue === null) {
39
+ if (context.hasNonNullParent) {
40
+ return new Promise((resolve) => resolve([]))
41
+ } else {
42
+ return new Promise((resolve) => resolve(null))
43
+ }
44
+ }
45
+
46
+ if (!Array.isArray(fieldValue)) {
47
+ throw new Error(
48
+ `Expected array while resolving value for field "${info.fieldName}".`,
49
+ )
50
+ }
51
+
52
+ const resultPromises = []
53
+ for (const item of fieldValue) {
54
+ const resultPromise = resolveFieldDefaultValue(
55
+ item,
56
+ args,
57
+ {
58
+ gitAdapter: context.gitAdapter,
59
+ getCurrentRef: context.getCurrentRef,
60
+ currentType: context.currentType.ofType,
61
+ hasNonNullParent: context.hasNonNullParent,
62
+ },
63
+ info,
64
+ )
65
+ resultPromises.push(resultPromise)
66
+ }
67
+ return Promise.all(resultPromises)
68
+ } else if (isUnionType(context.currentType)) {
69
+ if (fieldValue === undefined || fieldValue === null) {
70
+ if (context.hasNonNullParent) {
71
+ throw new Error(
72
+ `Cannot generate a default value for NonNull field "${
73
+ info.parentType.name
74
+ }.${info.fieldName}" because it is a union field of type "${
75
+ (info.returnType as GraphQLNonNull<GraphQLUnionType>).ofType.name
76
+ }".`,
77
+ )
78
+ } else {
79
+ return new Promise((resolve) => resolve(null))
80
+ }
81
+ }
82
+
83
+ if (buildsOnTypeWithEntryDirective(context.currentType)) {
84
+ return resolveEntryReference(fieldValue, args, context, info)
85
+ }
86
+
87
+ return resolveUnionValue(fieldValue, args, context, info)
88
+ } else if (isObjectType(context.currentType)) {
89
+ if (fieldValue === undefined || fieldValue === null) {
90
+ if (context.hasNonNullParent) {
91
+ throw new Error(
92
+ `Cannot generate a default value for NonNull field "${info.fieldName}" of type "${info.parentType.name}".`,
93
+ )
94
+ } else {
95
+ return new Promise((resolve) => resolve(null))
96
+ }
97
+ }
98
+
99
+ if (hasEntryDirective(context.currentType)) {
100
+ return resolveEntryReference(fieldValue, args, context, info)
101
+ }
102
+
103
+ return fieldValue
104
+ }
105
+
106
+ return fieldValue
107
+ }
@@ -1,18 +1,19 @@
1
1
  import { GraphQLFieldResolver } from 'graphql/type/definition'
2
2
  import { EntryData, GitAdapter } from '@commitspark/git-adapter'
3
+ import { GraphQLOutputType } from 'graphql'
3
4
 
4
5
  export interface FieldResolverContext {
5
6
  gitAdapter: GitAdapter
6
7
  getCurrentRef(): string
8
+ currentType: GraphQLOutputType
9
+ hasNonNullParent?: boolean
7
10
  }
8
11
 
9
- export interface FieldResolver<
12
+ export type FieldResolver<
10
13
  TSource,
11
14
  TContext = FieldResolverContext,
12
15
  TArgs = any,
13
16
  TResult = Promise<ResolvedEntryData<EntryData | EntryData[] | null>>,
14
- > {
15
- resolve: GraphQLFieldResolver<TSource, TContext, TArgs, TResult>
16
- }
17
+ > = GraphQLFieldResolver<TSource, TContext, TArgs, TResult>
17
18
 
18
19
  export type ResolvedEntryData<T> = T | Array<ResolvedEntryData<T>>
@@ -0,0 +1,24 @@
1
+ import { EntryData } from '@commitspark/git-adapter'
2
+ import { FieldResolver, ResolvedEntryData } from './types'
3
+ import {
4
+ getUnionTypeNameFromFieldValue,
5
+ getUnionValue,
6
+ } from '../../schema-utils/union-type-util'
7
+
8
+ export const resolveUnionValue: FieldResolver<any> = async (
9
+ fieldValue: any,
10
+ ): Promise<ResolvedEntryData<EntryData | EntryData[] | null>> => {
11
+ const typeName = getUnionTypeNameFromFieldValue(fieldValue)
12
+ const unionValue = getUnionValue(fieldValue)
13
+
14
+ // We replace the helper type name field that holds our field's actual data
15
+ // with this actual data and add a `__typename` field, so that our output data
16
+ // corresponds to the output schema provided by the user (i.e. there is
17
+ // no additional nesting level there).
18
+ const res: EntryData = {
19
+ ...unionValue,
20
+ __typename: typeName,
21
+ }
22
+
23
+ return new Promise((resolve) => resolve(res))
24
+ }
@@ -0,0 +1,91 @@
1
+ import {
2
+ GraphQLField,
3
+ GraphQLFieldResolver,
4
+ GraphQLObjectType,
5
+ GraphQLOutputType,
6
+ GraphQLSchema,
7
+ isListType,
8
+ isNonNullType,
9
+ isObjectType,
10
+ isUnionType,
11
+ } from 'graphql'
12
+ import { EntryData } from '@commitspark/git-adapter'
13
+ import { ResolvedEntryData } from './field-resolvers/types'
14
+ import { resolveFieldDefaultValue } from './field-resolvers/field-default-value-resolver'
15
+ import { ApolloContext } from '../../client'
16
+
17
+ function requiresCustomDefaultValueResolver(type: GraphQLOutputType): boolean {
18
+ if (isNonNullType(type)) {
19
+ return requiresCustomDefaultValueResolver(type.ofType)
20
+ } else if (isListType(type)) {
21
+ return true
22
+ } else if (isUnionType(type)) {
23
+ return true
24
+ } else if (isObjectType(type)) {
25
+ return true
26
+ }
27
+ return false
28
+ }
29
+
30
+ function getFieldsForCustomDefaultValueResolver(
31
+ objectType: GraphQLObjectType,
32
+ ): GraphQLField<any, any>[] {
33
+ const fields = []
34
+ for (const fieldsKey in objectType.getFields()) {
35
+ const field: GraphQLField<any, any> = objectType.getFields()[fieldsKey]
36
+ if (requiresCustomDefaultValueResolver(field.type)) {
37
+ fields.push(field)
38
+ }
39
+ }
40
+ return fields
41
+ }
42
+
43
+ type FieldResolversRecord = Record<
44
+ string,
45
+ GraphQLFieldResolver<
46
+ any,
47
+ ApolloContext,
48
+ any,
49
+ Promise<ResolvedEntryData<EntryData | EntryData[] | null>>
50
+ >
51
+ >
52
+
53
+ export function createObjectTypeFieldResolvers(
54
+ schema: GraphQLSchema,
55
+ ): Record<string, FieldResolversRecord> {
56
+ const fieldResolversByType: Record<string, FieldResolversRecord> = {}
57
+ for (const typeName of Object.keys(schema.getTypeMap())) {
58
+ const type = schema.getType(typeName)
59
+ if (!isObjectType(type) || type.name.startsWith('__')) {
60
+ continue
61
+ }
62
+ const fieldsForCustomDefaultValueResolver =
63
+ getFieldsForCustomDefaultValueResolver(type)
64
+
65
+ const fieldResolversByFieldName: FieldResolversRecord = {}
66
+ for (const field of fieldsForCustomDefaultValueResolver) {
67
+ fieldResolversByFieldName[field.name] = (
68
+ obj,
69
+ args,
70
+ context,
71
+ info,
72
+ ): Promise<ResolvedEntryData<EntryData | EntryData[] | null>> =>
73
+ resolveFieldDefaultValue(
74
+ field.name in obj ? obj[field.name] : undefined,
75
+ args,
76
+ {
77
+ currentType: field.type,
78
+ gitAdapter: context.gitAdapter,
79
+ getCurrentRef: context.getCurrentRef,
80
+ },
81
+ info,
82
+ )
83
+ }
84
+
85
+ if (Object.keys(fieldResolversByFieldName).length > 0) {
86
+ fieldResolversByType[typeName] = fieldResolversByFieldName
87
+ }
88
+ }
89
+
90
+ return fieldResolversByType
91
+ }
@@ -0,0 +1,108 @@
1
+ import { findById, findByTypeId } from '../../../persistence/persistence'
2
+ import { GraphQLError, GraphQLFieldResolver, isObjectType } from 'graphql'
3
+ import { getReferencedEntryIds } from '../../schema-utils/entry-reference-util'
4
+ import {
5
+ ENTRY_ID_INVALID_CHARACTERS,
6
+ EntryData,
7
+ EntryDraft,
8
+ } from '@commitspark/git-adapter'
9
+ import { QueryMutationResolverContext } from '../types'
10
+
11
+ export const mutationCreateResolver: GraphQLFieldResolver<
12
+ any,
13
+ QueryMutationResolverContext,
14
+ any,
15
+ Promise<EntryData>
16
+ > = async (source, args, context, info) => {
17
+ if (!isObjectType(info.returnType)) {
18
+ throw new Error('Expected to create an ObjectType')
19
+ }
20
+
21
+ const idValidationResult = args.id.match(ENTRY_ID_INVALID_CHARACTERS)
22
+ if (idValidationResult) {
23
+ throw new GraphQLError(
24
+ `"id" contains invalid characters "${idValidationResult.join(', ')}"`,
25
+ {
26
+ extensions: {
27
+ code: 'BAD_USER_INPUT',
28
+ argumentName: 'id',
29
+ },
30
+ },
31
+ )
32
+ }
33
+
34
+ let existingEntry
35
+ try {
36
+ existingEntry = await findById(
37
+ context.gitAdapter,
38
+ context.getCurrentRef(),
39
+ args.id,
40
+ )
41
+ } catch (_) {
42
+ /* empty */
43
+ }
44
+ if (existingEntry) {
45
+ throw new GraphQLError(`An entry with id "${args.id}" already exists`, {
46
+ extensions: {
47
+ code: 'BAD_USER_INPUT',
48
+ argumentName: 'id',
49
+ },
50
+ })
51
+ }
52
+
53
+ const referencedEntryIds = await getReferencedEntryIds(
54
+ info.returnType,
55
+ context,
56
+ null,
57
+ info.returnType,
58
+ args.data,
59
+ )
60
+
61
+ const referencedEntryUpdates: EntryDraft[] = []
62
+ for (const referencedEntryId of referencedEntryIds) {
63
+ const referencedEntry = await findById(
64
+ context.gitAdapter,
65
+ context.getCurrentRef(),
66
+ referencedEntryId,
67
+ )
68
+ const newReferencedEntryIds: string[] = [
69
+ ...(referencedEntry.metadata.referencedBy ?? []),
70
+ args.id,
71
+ ].sort()
72
+ const newReferencedEntryDraft: EntryDraft = {
73
+ ...referencedEntry,
74
+ metadata: {
75
+ ...referencedEntry.metadata,
76
+ referencedBy: newReferencedEntryIds,
77
+ },
78
+ deletion: false,
79
+ }
80
+ referencedEntryUpdates.push(newReferencedEntryDraft)
81
+ }
82
+
83
+ const newEntryDraft: EntryDraft = {
84
+ id: args.id,
85
+ metadata: {
86
+ type: context.type.name,
87
+ referencedBy: [],
88
+ },
89
+ data: args.data,
90
+ deletion: false,
91
+ }
92
+
93
+ const commit = await context.gitAdapter.createCommit({
94
+ ref: context.branch,
95
+ parentSha: context.getCurrentRef(),
96
+ entries: [newEntryDraft, ...referencedEntryUpdates],
97
+ message: args.commitMessage,
98
+ })
99
+ context.setCurrentRef(commit.ref)
100
+
101
+ const newEntry = await findByTypeId(
102
+ context.gitAdapter,
103
+ context.getCurrentRef(),
104
+ context.type.name,
105
+ args.id,
106
+ )
107
+ return { ...newEntry.data, id: newEntry.id }
108
+ }
@@ -0,0 +1,81 @@
1
+ import { findById, findByTypeId } from '../../../persistence/persistence'
2
+ import { Entry, EntryData, EntryDraft } from '@commitspark/git-adapter'
3
+ import { getReferencedEntryIds } from '../../schema-utils/entry-reference-util'
4
+ import { GraphQLError, GraphQLFieldResolver, isObjectType } from 'graphql'
5
+ import { QueryMutationResolverContext } from '../types'
6
+
7
+ export const mutationDeleteResolver: GraphQLFieldResolver<
8
+ any,
9
+ QueryMutationResolverContext,
10
+ any,
11
+ Promise<EntryData>
12
+ > = async (source, args, context, info) => {
13
+ const entry: Entry = await findByTypeId(
14
+ context.gitAdapter,
15
+ context.getCurrentRef(),
16
+ context.type.name,
17
+ args.id,
18
+ )
19
+
20
+ if (entry.metadata.referencedBy && entry.metadata.referencedBy.length > 0) {
21
+ const otherIds = entry.metadata.referencedBy
22
+ .map((referenceId) => `"${referenceId}"`)
23
+ .join(', ')
24
+ throw new GraphQLError(
25
+ `Entry with id "${args.id}" is referenced by other entries: [${otherIds}]`,
26
+ {
27
+ extensions: {
28
+ code: 'IN_USE',
29
+ argumentName: 'id',
30
+ },
31
+ },
32
+ )
33
+ }
34
+
35
+ const entryType = info.schema.getType(context.type.name)
36
+ if (!isObjectType(entryType)) {
37
+ throw new Error('Expected to delete an ObjectType')
38
+ }
39
+
40
+ const referencedEntryIds = await getReferencedEntryIds(
41
+ entryType,
42
+ context,
43
+ null,
44
+ entryType,
45
+ entry.data,
46
+ )
47
+ const referencedEntryUpdates: EntryDraft[] = []
48
+ for (const referencedEntryId of referencedEntryIds) {
49
+ const noLongerReferencedEntry = await findById(
50
+ context.gitAdapter,
51
+ context.getCurrentRef(),
52
+ referencedEntryId,
53
+ )
54
+ referencedEntryUpdates.push({
55
+ ...noLongerReferencedEntry,
56
+ metadata: {
57
+ ...noLongerReferencedEntry.metadata,
58
+ referencedBy: noLongerReferencedEntry.metadata.referencedBy?.filter(
59
+ (entryId) => entryId !== args.id,
60
+ ),
61
+ },
62
+ deletion: false,
63
+ })
64
+ }
65
+
66
+ const commit = await context.gitAdapter.createCommit({
67
+ ref: context.branch,
68
+ parentSha: context.getCurrentRef(),
69
+ entries: [
70
+ {
71
+ ...entry,
72
+ deletion: true,
73
+ },
74
+ ...referencedEntryUpdates,
75
+ ],
76
+ message: args.commitMessage,
77
+ })
78
+ context.setCurrentRef(commit.ref)
79
+
80
+ return args.id
81
+ }