@strapi/plugin-graphql 4.15.5 → 4.16.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 (331) hide show
  1. package/dist/admin/admin/src/index.d.ts +16 -0
  2. package/dist/admin/admin/src/pluginId.d.ts +1 -0
  3. package/dist/admin/index.js +31 -17
  4. package/dist/admin/index.js.map +1 -1
  5. package/dist/admin/index.mjs +31 -17
  6. package/dist/admin/index.mjs.map +1 -1
  7. package/dist/server/bootstrap.d.ts +5 -0
  8. package/dist/server/bootstrap.d.ts.map +1 -0
  9. package/dist/server/config/default-config.d.ts +9 -0
  10. package/dist/server/config/default-config.d.ts.map +1 -0
  11. package/dist/server/config/index.d.ts +10 -0
  12. package/dist/server/config/index.d.ts.map +1 -0
  13. package/dist/server/format-graphql-error.d.ts +4 -0
  14. package/dist/server/format-graphql-error.d.ts.map +1 -0
  15. package/dist/server/index.d.ts +301 -0
  16. package/dist/server/index.d.ts.map +1 -0
  17. package/dist/server/index.js +2970 -0
  18. package/dist/server/index.js.map +1 -0
  19. package/dist/server/index.mjs +2949 -0
  20. package/dist/server/index.mjs.map +1 -0
  21. package/dist/server/services/builders/dynamic-zones.d.ts +14 -0
  22. package/dist/server/services/builders/dynamic-zones.d.ts.map +1 -0
  23. package/dist/server/services/builders/entity-meta.d.ts +6 -0
  24. package/dist/server/services/builders/entity-meta.d.ts.map +1 -0
  25. package/dist/server/services/builders/entity.d.ts +12 -0
  26. package/dist/server/services/builders/entity.d.ts.map +1 -0
  27. package/dist/server/services/builders/enums.d.ts +8 -0
  28. package/dist/server/services/builders/enums.d.ts.map +1 -0
  29. package/dist/server/services/builders/filters/content-type.d.ts +8 -0
  30. package/dist/server/services/builders/filters/content-type.d.ts.map +1 -0
  31. package/dist/server/services/builders/filters/index.d.ts +6 -0
  32. package/dist/server/services/builders/filters/index.d.ts.map +1 -0
  33. package/dist/server/services/builders/filters/operators/and.d.ts +8 -0
  34. package/dist/server/services/builders/filters/operators/and.d.ts.map +1 -0
  35. package/dist/server/services/builders/filters/operators/between.d.ts +8 -0
  36. package/dist/server/services/builders/filters/operators/between.d.ts.map +1 -0
  37. package/dist/server/services/builders/filters/operators/contains.d.ts +8 -0
  38. package/dist/server/services/builders/filters/operators/contains.d.ts.map +1 -0
  39. package/dist/server/services/builders/filters/operators/containsi.d.ts +8 -0
  40. package/dist/server/services/builders/filters/operators/containsi.d.ts.map +1 -0
  41. package/dist/server/services/builders/filters/operators/ends-with.d.ts +8 -0
  42. package/dist/server/services/builders/filters/operators/ends-with.d.ts.map +1 -0
  43. package/dist/server/services/builders/filters/operators/eq.d.ts +11 -0
  44. package/dist/server/services/builders/filters/operators/eq.d.ts.map +1 -0
  45. package/dist/server/services/builders/filters/operators/eqi.d.ts +8 -0
  46. package/dist/server/services/builders/filters/operators/eqi.d.ts.map +1 -0
  47. package/dist/server/services/builders/filters/operators/gt.d.ts +8 -0
  48. package/dist/server/services/builders/filters/operators/gt.d.ts.map +1 -0
  49. package/dist/server/services/builders/filters/operators/gte.d.ts +8 -0
  50. package/dist/server/services/builders/filters/operators/gte.d.ts.map +1 -0
  51. package/dist/server/services/builders/filters/operators/in.d.ts +8 -0
  52. package/dist/server/services/builders/filters/operators/in.d.ts.map +1 -0
  53. package/dist/server/services/builders/filters/operators/index.d.ts +11 -0
  54. package/dist/server/services/builders/filters/operators/index.d.ts.map +1 -0
  55. package/dist/server/services/builders/filters/operators/lt.d.ts +8 -0
  56. package/dist/server/services/builders/filters/operators/lt.d.ts.map +1 -0
  57. package/dist/server/services/builders/filters/operators/lte.d.ts +8 -0
  58. package/dist/server/services/builders/filters/operators/lte.d.ts.map +1 -0
  59. package/dist/server/services/builders/filters/operators/ne.d.ts +8 -0
  60. package/dist/server/services/builders/filters/operators/ne.d.ts.map +1 -0
  61. package/dist/server/services/builders/filters/operators/nei.d.ts +8 -0
  62. package/dist/server/services/builders/filters/operators/nei.d.ts.map +1 -0
  63. package/dist/server/services/builders/filters/operators/not-contains.d.ts +8 -0
  64. package/dist/server/services/builders/filters/operators/not-contains.d.ts.map +1 -0
  65. package/dist/server/services/builders/filters/operators/not-containsi.d.ts +8 -0
  66. package/dist/server/services/builders/filters/operators/not-containsi.d.ts.map +1 -0
  67. package/dist/server/services/builders/filters/operators/not-in.d.ts +8 -0
  68. package/dist/server/services/builders/filters/operators/not-in.d.ts.map +1 -0
  69. package/dist/server/services/builders/filters/operators/not-null.d.ts +8 -0
  70. package/dist/server/services/builders/filters/operators/not-null.d.ts.map +1 -0
  71. package/dist/server/services/builders/filters/operators/not.d.ts +11 -0
  72. package/dist/server/services/builders/filters/operators/not.d.ts.map +1 -0
  73. package/dist/server/services/builders/filters/operators/null.d.ts +8 -0
  74. package/dist/server/services/builders/filters/operators/null.d.ts.map +1 -0
  75. package/dist/server/services/builders/filters/operators/or.d.ts +8 -0
  76. package/dist/server/services/builders/filters/operators/or.d.ts.map +1 -0
  77. package/dist/server/services/builders/filters/operators/starts-with.d.ts +8 -0
  78. package/dist/server/services/builders/filters/operators/starts-with.d.ts.map +1 -0
  79. package/dist/server/services/builders/generic-morph.d.ts +6 -0
  80. package/dist/server/services/builders/generic-morph.d.ts.map +1 -0
  81. package/dist/server/services/builders/index.d.ts +58 -0
  82. package/dist/server/services/builders/index.d.ts.map +1 -0
  83. package/dist/server/services/builders/input.d.ts +7 -0
  84. package/dist/server/services/builders/input.d.ts.map +1 -0
  85. package/dist/server/services/builders/mutations/collection-type.d.ts +8 -0
  86. package/dist/server/services/builders/mutations/collection-type.d.ts.map +1 -0
  87. package/dist/server/services/builders/mutations/index.d.ts +7 -0
  88. package/dist/server/services/builders/mutations/index.d.ts.map +1 -0
  89. package/dist/server/services/builders/mutations/single-type.d.ts +8 -0
  90. package/dist/server/services/builders/mutations/single-type.d.ts.map +1 -0
  91. package/dist/server/services/builders/queries/collection-type.d.ts +8 -0
  92. package/dist/server/services/builders/queries/collection-type.d.ts.map +1 -0
  93. package/dist/server/services/builders/queries/index.d.ts +7 -0
  94. package/dist/server/services/builders/queries/index.d.ts.map +1 -0
  95. package/dist/server/services/builders/queries/single-type.d.ts +8 -0
  96. package/dist/server/services/builders/queries/single-type.d.ts.map +1 -0
  97. package/dist/server/services/builders/relation-response-collection.d.ts +10 -0
  98. package/dist/server/services/builders/relation-response-collection.d.ts.map +1 -0
  99. package/dist/server/services/builders/resolvers/association.d.ts +10 -0
  100. package/dist/server/services/builders/resolvers/association.d.ts.map +1 -0
  101. package/dist/server/services/builders/resolvers/component.d.ts +10 -0
  102. package/dist/server/services/builders/resolvers/component.d.ts.map +1 -0
  103. package/dist/server/services/builders/resolvers/dynamic-zone.d.ts +10 -0
  104. package/dist/server/services/builders/resolvers/dynamic-zone.d.ts.map +1 -0
  105. package/dist/server/services/builders/resolvers/index.d.ts +30 -0
  106. package/dist/server/services/builders/resolvers/index.d.ts.map +1 -0
  107. package/dist/server/services/builders/resolvers/mutation.d.ts +13 -0
  108. package/dist/server/services/builders/resolvers/mutation.d.ts.map +1 -0
  109. package/dist/server/services/builders/resolvers/query.d.ts +12 -0
  110. package/dist/server/services/builders/resolvers/query.d.ts.map +1 -0
  111. package/dist/server/services/builders/response-collection.d.ts +12 -0
  112. package/dist/server/services/builders/response-collection.d.ts.map +1 -0
  113. package/dist/server/services/builders/response.d.ts +10 -0
  114. package/dist/server/services/builders/response.d.ts.map +1 -0
  115. package/dist/server/services/builders/type.d.ts +19 -0
  116. package/dist/server/services/builders/type.d.ts.map +1 -0
  117. package/dist/server/services/builders/utils.d.ts +52 -0
  118. package/dist/server/services/builders/utils.d.ts.map +1 -0
  119. package/dist/server/services/constants.d.ts +128 -0
  120. package/dist/server/services/constants.d.ts.map +1 -0
  121. package/dist/server/services/content-api/index.d.ts +8 -0
  122. package/dist/server/services/content-api/index.d.ts.map +1 -0
  123. package/dist/server/services/content-api/policy.d.ts +7 -0
  124. package/dist/server/services/content-api/policy.d.ts.map +1 -0
  125. package/dist/server/services/content-api/register-functions/collection-type.d.ts +9 -0
  126. package/dist/server/services/content-api/register-functions/collection-type.d.ts.map +1 -0
  127. package/dist/server/services/content-api/register-functions/component.d.ts +9 -0
  128. package/dist/server/services/content-api/register-functions/component.d.ts.map +1 -0
  129. package/dist/server/services/content-api/register-functions/content-type/dynamic-zones.d.ts +9 -0
  130. package/dist/server/services/content-api/register-functions/content-type/dynamic-zones.d.ts.map +1 -0
  131. package/dist/server/services/content-api/register-functions/content-type/enums.d.ts +9 -0
  132. package/dist/server/services/content-api/register-functions/content-type/enums.d.ts.map +1 -0
  133. package/dist/server/services/content-api/register-functions/content-type/filters.d.ts +9 -0
  134. package/dist/server/services/content-api/register-functions/content-type/filters.d.ts.map +1 -0
  135. package/dist/server/services/content-api/register-functions/content-type/index.d.ts +24 -0
  136. package/dist/server/services/content-api/register-functions/content-type/index.d.ts.map +1 -0
  137. package/dist/server/services/content-api/register-functions/content-type/inputs.d.ts +9 -0
  138. package/dist/server/services/content-api/register-functions/content-type/inputs.d.ts.map +1 -0
  139. package/dist/server/services/content-api/register-functions/index.d.ts +9 -0
  140. package/dist/server/services/content-api/register-functions/index.d.ts.map +1 -0
  141. package/dist/server/services/content-api/register-functions/internals.d.ts +4 -0
  142. package/dist/server/services/content-api/register-functions/internals.d.ts.map +1 -0
  143. package/dist/server/services/content-api/register-functions/polymorphic.d.ts +5 -0
  144. package/dist/server/services/content-api/register-functions/polymorphic.d.ts.map +1 -0
  145. package/dist/server/services/content-api/register-functions/scalars.d.ts +4 -0
  146. package/dist/server/services/content-api/register-functions/scalars.d.ts.map +1 -0
  147. package/dist/server/services/content-api/register-functions/single-type.d.ts +9 -0
  148. package/dist/server/services/content-api/register-functions/single-type.d.ts.map +1 -0
  149. package/dist/server/services/content-api/wrap-resolvers.d.ts +18 -0
  150. package/dist/server/services/content-api/wrap-resolvers.d.ts.map +1 -0
  151. package/dist/server/services/extension/extension.d.ts +63 -0
  152. package/dist/server/services/extension/extension.d.ts.map +1 -0
  153. package/dist/server/services/extension/index.d.ts +3 -0
  154. package/dist/server/services/extension/index.d.ts.map +1 -0
  155. package/dist/server/services/extension/shadow-crud-manager.d.ts +40 -0
  156. package/dist/server/services/extension/shadow-crud-manager.d.ts.map +1 -0
  157. package/dist/server/services/format/index.d.ts +20 -0
  158. package/dist/server/services/format/index.d.ts.map +1 -0
  159. package/dist/server/services/format/return-types.d.ts +22 -0
  160. package/dist/server/services/format/return-types.d.ts.map +1 -0
  161. package/dist/server/services/index.d.ts +287 -0
  162. package/dist/server/services/index.d.ts.map +1 -0
  163. package/dist/server/services/internals/args/index.d.ts +8 -0
  164. package/dist/server/services/internals/args/index.d.ts.map +1 -0
  165. package/dist/server/services/internals/args/pagination.d.ts +3 -0
  166. package/dist/server/services/internals/args/pagination.d.ts.map +1 -0
  167. package/dist/server/services/internals/args/publication-state.d.ts +4 -0
  168. package/dist/server/services/internals/args/publication-state.d.ts.map +1 -0
  169. package/dist/server/services/internals/args/sort.d.ts +3 -0
  170. package/dist/server/services/internals/args/sort.d.ts.map +1 -0
  171. package/dist/server/services/internals/helpers/get-enabled-scalars.d.ts +4 -0
  172. package/dist/server/services/internals/helpers/get-enabled-scalars.d.ts.map +1 -0
  173. package/dist/server/services/internals/helpers/index.d.ts +6 -0
  174. package/dist/server/services/internals/helpers/index.d.ts.map +1 -0
  175. package/dist/server/services/internals/index.d.ts +46 -0
  176. package/dist/server/services/internals/index.d.ts.map +1 -0
  177. package/dist/server/services/internals/scalars/date.d.ts +3 -0
  178. package/dist/server/services/internals/scalars/date.d.ts.map +1 -0
  179. package/dist/server/services/internals/scalars/index.d.ts +10 -0
  180. package/dist/server/services/internals/scalars/index.d.ts.map +1 -0
  181. package/dist/server/services/internals/scalars/time.d.ts +8 -0
  182. package/dist/server/services/internals/scalars/time.d.ts.map +1 -0
  183. package/dist/server/services/internals/types/error.d.ts +8 -0
  184. package/dist/server/services/internals/types/error.d.ts.map +1 -0
  185. package/dist/server/services/internals/types/filters.d.ts +6 -0
  186. package/dist/server/services/internals/types/filters.d.ts.map +1 -0
  187. package/dist/server/services/internals/types/index.d.ts +28 -0
  188. package/dist/server/services/internals/types/index.d.ts.map +1 -0
  189. package/dist/server/services/internals/types/pagination.d.ts +10 -0
  190. package/dist/server/services/internals/types/pagination.d.ts.map +1 -0
  191. package/dist/server/services/internals/types/publication-state.d.ts +10 -0
  192. package/dist/server/services/internals/types/publication-state.d.ts.map +1 -0
  193. package/dist/server/services/internals/types/response-collection-meta.d.ts +11 -0
  194. package/dist/server/services/internals/types/response-collection-meta.d.ts.map +1 -0
  195. package/dist/server/services/type-registry.d.ts +15 -0
  196. package/dist/server/services/type-registry.d.ts.map +1 -0
  197. package/dist/server/services/types.d.ts +7 -0
  198. package/dist/server/services/types.d.ts.map +1 -0
  199. package/dist/server/services/utils/attributes.d.ts +14 -0
  200. package/dist/server/services/utils/attributes.d.ts.map +1 -0
  201. package/dist/server/services/utils/index.d.ts +81 -0
  202. package/dist/server/services/utils/index.d.ts.map +1 -0
  203. package/dist/server/services/utils/mappers/entity-to-response-entity.d.ts +33 -0
  204. package/dist/server/services/utils/mappers/entity-to-response-entity.d.ts.map +1 -0
  205. package/dist/server/services/utils/mappers/graphql-filters-to-strapi-query.d.ts +13 -0
  206. package/dist/server/services/utils/mappers/graphql-filters-to-strapi-query.d.ts.map +1 -0
  207. package/dist/server/services/utils/mappers/graphql-scalar-to-operators.d.ts +6 -0
  208. package/dist/server/services/utils/mappers/graphql-scalar-to-operators.d.ts.map +1 -0
  209. package/dist/server/services/utils/mappers/index.d.ts +36 -0
  210. package/dist/server/services/utils/mappers/index.d.ts.map +1 -0
  211. package/dist/server/services/utils/mappers/strapi-scalar-to-graphql-scalar.d.ts +9 -0
  212. package/dist/server/services/utils/mappers/strapi-scalar-to-graphql-scalar.d.ts.map +1 -0
  213. package/dist/server/services/utils/naming.d.ts +37 -0
  214. package/dist/server/services/utils/naming.d.ts.map +1 -0
  215. package/package.json +28 -16
  216. package/strapi-server.js +1 -11
  217. package/.eslintignore +0 -1
  218. package/.eslintrc +0 -14
  219. package/admin/src/index.js +0 -38
  220. package/admin/src/pluginId.js +0 -5
  221. package/admin/src/translations/dk.json +0 -5
  222. package/admin/src/translations/en.json +0 -5
  223. package/admin/src/translations/es.json +0 -5
  224. package/admin/src/translations/fr.json +0 -5
  225. package/admin/src/translations/pl.json +0 -5
  226. package/admin/src/translations/ru.json +0 -5
  227. package/admin/src/translations/sv.json +0 -5
  228. package/admin/src/translations/tr.json +0 -5
  229. package/admin/src/translations/zh-Hans.json +0 -5
  230. package/admin/src/translations/zh.json +0 -5
  231. package/packup.config.ts +0 -42
  232. package/server/bootstrap.js +0 -134
  233. package/server/config/default-config.js +0 -13
  234. package/server/config/index.js +0 -7
  235. package/server/format-graphql-error.js +0 -45
  236. package/server/services/builders/dynamic-zones.js +0 -97
  237. package/server/services/builders/entity-meta.js +0 -7
  238. package/server/services/builders/entity.js +0 -43
  239. package/server/services/builders/enums.js +0 -26
  240. package/server/services/builders/filters/content-type.js +0 -111
  241. package/server/services/builders/filters/index.js +0 -7
  242. package/server/services/builders/filters/operators/and.js +0 -15
  243. package/server/services/builders/filters/operators/between.js +0 -15
  244. package/server/services/builders/filters/operators/contains.js +0 -13
  245. package/server/services/builders/filters/operators/containsi.js +0 -13
  246. package/server/services/builders/filters/operators/ends-with.js +0 -13
  247. package/server/services/builders/filters/operators/eq.js +0 -23
  248. package/server/services/builders/filters/operators/eqi.js +0 -13
  249. package/server/services/builders/filters/operators/gt.js +0 -13
  250. package/server/services/builders/filters/operators/gte.js +0 -13
  251. package/server/services/builders/filters/operators/in.js +0 -15
  252. package/server/services/builders/filters/operators/index.js +0 -40
  253. package/server/services/builders/filters/operators/lt.js +0 -13
  254. package/server/services/builders/filters/operators/lte.js +0 -13
  255. package/server/services/builders/filters/operators/ne.js +0 -13
  256. package/server/services/builders/filters/operators/nei.js +0 -13
  257. package/server/services/builders/filters/operators/not-contains.js +0 -13
  258. package/server/services/builders/filters/operators/not-containsi.js +0 -13
  259. package/server/services/builders/filters/operators/not-in.js +0 -15
  260. package/server/services/builders/filters/operators/not-null.js +0 -13
  261. package/server/services/builders/filters/operators/not.js +0 -19
  262. package/server/services/builders/filters/operators/null.js +0 -13
  263. package/server/services/builders/filters/operators/or.js +0 -15
  264. package/server/services/builders/filters/operators/starts-with.js +0 -13
  265. package/server/services/builders/generic-morph.js +0 -41
  266. package/server/services/builders/index.js +0 -92
  267. package/server/services/builders/input.js +0 -121
  268. package/server/services/builders/mutations/collection-type.js +0 -191
  269. package/server/services/builders/mutations/index.js +0 -9
  270. package/server/services/builders/mutations/single-type.js +0 -164
  271. package/server/services/builders/queries/collection-type.js +0 -122
  272. package/server/services/builders/queries/index.js +0 -9
  273. package/server/services/builders/queries/single-type.js +0 -71
  274. package/server/services/builders/relation-response-collection.js +0 -32
  275. package/server/services/builders/resolvers/association.js +0 -92
  276. package/server/services/builders/resolvers/component.js +0 -25
  277. package/server/services/builders/resolvers/dynamic-zone.js +0 -9
  278. package/server/services/builders/resolvers/index.js +0 -18
  279. package/server/services/builders/resolvers/mutation.js +0 -38
  280. package/server/services/builders/resolvers/query.js +0 -34
  281. package/server/services/builders/response-collection.js +0 -40
  282. package/server/services/builders/response.js +0 -32
  283. package/server/services/builders/type.js +0 -363
  284. package/server/services/builders/utils.js +0 -134
  285. package/server/services/constants.js +0 -153
  286. package/server/services/content-api/index.js +0 -188
  287. package/server/services/content-api/policy.js +0 -60
  288. package/server/services/content-api/register-functions/collection-type.js +0 -72
  289. package/server/services/content-api/register-functions/component.js +0 -15
  290. package/server/services/content-api/register-functions/content-type/dynamic-zones.js +0 -36
  291. package/server/services/content-api/register-functions/content-type/enums.js +0 -33
  292. package/server/services/content-api/register-functions/content-type/filters.js +0 -15
  293. package/server/services/content-api/register-functions/content-type/index.js +0 -13
  294. package/server/services/content-api/register-functions/content-type/inputs.js +0 -21
  295. package/server/services/content-api/register-functions/index.js +0 -22
  296. package/server/services/content-api/register-functions/internals.js +0 -13
  297. package/server/services/content-api/register-functions/polymorphic.js +0 -69
  298. package/server/services/content-api/register-functions/scalars.js +0 -14
  299. package/server/services/content-api/register-functions/single-type.js +0 -72
  300. package/server/services/content-api/wrap-resolvers.js +0 -148
  301. package/server/services/extension/extension.js +0 -94
  302. package/server/services/extension/index.js +0 -5
  303. package/server/services/extension/shadow-crud-manager.js +0 -161
  304. package/server/services/format/index.js +0 -7
  305. package/server/services/format/return-types.js +0 -27
  306. package/server/services/index.js +0 -21
  307. package/server/services/internals/args/index.js +0 -11
  308. package/server/services/internals/args/pagination.js +0 -19
  309. package/server/services/internals/args/publication-state.js +0 -12
  310. package/server/services/internals/args/sort.js +0 -10
  311. package/server/services/internals/helpers/get-enabled-scalars.js +0 -17
  312. package/server/services/internals/helpers/index.js +0 -7
  313. package/server/services/internals/index.js +0 -13
  314. package/server/services/internals/scalars/date.js +0 -22
  315. package/server/services/internals/scalars/index.js +0 -17
  316. package/server/services/internals/scalars/time.js +0 -36
  317. package/server/services/internals/types/error.js +0 -34
  318. package/server/services/internals/types/filters.js +0 -39
  319. package/server/services/internals/types/index.js +0 -29
  320. package/server/services/internals/types/pagination.js +0 -24
  321. package/server/services/internals/types/publication-state.js +0 -24
  322. package/server/services/internals/types/response-collection-meta.js +0 -46
  323. package/server/services/type-registry.js +0 -104
  324. package/server/services/utils/attributes.js +0 -78
  325. package/server/services/utils/index.js +0 -11
  326. package/server/services/utils/mappers/entity-to-response-entity.js +0 -12
  327. package/server/services/utils/mappers/graphql-filters-to-strapi-query.js +0 -119
  328. package/server/services/utils/mappers/graphql-scalar-to-operators.js +0 -17
  329. package/server/services/utils/mappers/index.js +0 -13
  330. package/server/services/utils/mappers/strapi-scalar-to-graphql-scalar.js +0 -25
  331. package/server/services/utils/naming.js +0 -287
@@ -1,25 +0,0 @@
1
- 'use strict';
2
-
3
- const { sanitize, validate } = require('@strapi/utils');
4
-
5
- module.exports = ({ strapi }) => ({
6
- buildComponentResolver({ contentTypeUID, attributeName }) {
7
- const { transformArgs } = strapi.plugin('graphql').service('builders').utils;
8
-
9
- return async (parent, args = {}, ctx) => {
10
- const contentType = strapi.getModel(contentTypeUID);
11
-
12
- const { component: componentName } = contentType.attributes[attributeName];
13
- const component = strapi.getModel(componentName);
14
-
15
- const transformedArgs = transformArgs(args, { contentType: component, usePagination: true });
16
- await validate.contentAPI.query(transformedArgs, component, {
17
- auth: ctx?.state?.auth,
18
- });
19
- const sanitizedQuery = await sanitize.contentAPI.query(transformedArgs, component, {
20
- auth: ctx?.state?.auth,
21
- });
22
- return strapi.entityService.load(contentTypeUID, parent, attributeName, sanitizedQuery);
23
- };
24
- },
25
- });
@@ -1,9 +0,0 @@
1
- 'use strict';
2
-
3
- module.exports = ({ strapi }) => ({
4
- buildDynamicZoneResolver({ contentTypeUID, attributeName }) {
5
- return async (parent) => {
6
- return strapi.entityService.load(contentTypeUID, parent, attributeName);
7
- };
8
- },
9
- });
@@ -1,18 +0,0 @@
1
- 'use strict';
2
-
3
- const associationResolvers = require('./association');
4
- const queriesResolvers = require('./query');
5
- const mutationsResolvers = require('./mutation');
6
- const componentResolvers = require('./component');
7
- const dynamicZoneResolvers = require('./dynamic-zone');
8
-
9
- module.exports = (context) => ({
10
- // Generics
11
- ...associationResolvers(context),
12
-
13
- // Builders
14
- ...mutationsResolvers(context),
15
- ...queriesResolvers(context),
16
- ...componentResolvers(context),
17
- ...dynamicZoneResolvers(context),
18
- });
@@ -1,38 +0,0 @@
1
- 'use strict';
2
-
3
- const { pick } = require('lodash/fp');
4
- const { sanitize, validate } = require('@strapi/utils');
5
-
6
- const pickCreateArgs = pick(['params', 'data', 'files']);
7
-
8
- module.exports = ({ strapi }) => ({
9
- buildMutationsResolvers({ contentType }) {
10
- const { uid } = contentType;
11
-
12
- return {
13
- async create(parent, args) {
14
- // todo[v4]: Might be interesting to generate dynamic yup schema to validate payloads with more complex checks (on top of graphql validation)
15
- const params = pickCreateArgs(args);
16
-
17
- // todo[v4]: Sanitize args to only keep params / data / files (or do it in the base resolver)
18
- return strapi.entityService.create(uid, params);
19
- },
20
-
21
- async update(parent, args) {
22
- const { id, data } = args;
23
- return strapi.entityService.update(uid, id, { data });
24
- },
25
-
26
- async delete(parent, args, ctx) {
27
- const { id, ...rest } = args;
28
- await validate.contentAPI.query(rest, contentType, {
29
- auth: ctx?.state?.auth,
30
- });
31
- const sanitizedQuery = await sanitize.contentAPI.query(rest, contentType, {
32
- auth: ctx?.state?.auth,
33
- });
34
- return strapi.entityService.delete(uid, id, sanitizedQuery);
35
- },
36
- };
37
- },
38
- });
@@ -1,34 +0,0 @@
1
- 'use strict';
2
-
3
- const { omit } = require('lodash/fp');
4
- const { sanitize, validate } = require('@strapi/utils');
5
-
6
- module.exports = ({ strapi }) => ({
7
- buildQueriesResolvers({ contentType }) {
8
- const { uid } = contentType;
9
-
10
- return {
11
- async find(parent, args, ctx) {
12
- await validate.contentAPI.query(args, contentType, {
13
- auth: ctx?.state?.auth,
14
- });
15
- const sanitizedQuery = await sanitize.contentAPI.query(args, contentType, {
16
- auth: ctx?.state?.auth,
17
- });
18
-
19
- return strapi.entityService.findMany(uid, sanitizedQuery);
20
- },
21
-
22
- async findOne(parent, args, ctx) {
23
- await validate.contentAPI.query(args, contentType, {
24
- auth: ctx?.state?.auth,
25
- });
26
- const sanitizedQuery = await sanitize.contentAPI.query(args, contentType, {
27
- auth: ctx?.state?.auth,
28
- });
29
-
30
- return strapi.entityService.findOne(uid, args.id, omit('id', sanitizedQuery));
31
- },
32
- };
33
- },
34
- });
@@ -1,40 +0,0 @@
1
- 'use strict';
2
-
3
- const { objectType, nonNull } = require('nexus');
4
- const { defaultTo, prop, pipe } = require('lodash/fp');
5
-
6
- module.exports = ({ strapi }) => {
7
- const { naming } = strapi.plugin('graphql').service('utils');
8
- const { RESPONSE_COLLECTION_META_TYPE_NAME } = strapi.plugin('graphql').service('constants');
9
-
10
- return {
11
- /**
12
- * Build a type definition for a content API collection response for a given content type
13
- * @param {object} contentType The content type which will be used to build its content API response definition
14
- * @return {NexusObjectTypeDef}
15
- */
16
- buildResponseCollectionDefinition(contentType) {
17
- const name = naming.getEntityResponseCollectionName(contentType);
18
- const entityName = naming.getEntityName(contentType);
19
-
20
- return objectType({
21
- name,
22
-
23
- definition(t) {
24
- t.nonNull.list.field('data', {
25
- type: nonNull(entityName),
26
-
27
- resolve: pipe(prop('nodes'), defaultTo([])),
28
- });
29
-
30
- t.nonNull.field('meta', {
31
- type: RESPONSE_COLLECTION_META_TYPE_NAME,
32
-
33
- // Pass down the args stored in the source object
34
- resolve: prop('info'),
35
- });
36
- },
37
- });
38
- },
39
- };
40
- };
@@ -1,32 +0,0 @@
1
- 'use strict';
2
-
3
- const { objectType } = require('nexus');
4
- const { prop } = require('lodash/fp');
5
-
6
- module.exports = ({ strapi }) => {
7
- const { naming } = strapi.plugin('graphql').service('utils');
8
-
9
- return {
10
- /**
11
- * Build a type definition for a content API response for a given content type
12
- * @param {object} contentType The content type which will be used to build its content API response definition
13
- * @return {NexusObjectTypeDef}
14
- */
15
- buildResponseDefinition(contentType) {
16
- const name = naming.getEntityResponseName(contentType);
17
- const entityName = naming.getEntityName(contentType);
18
-
19
- return objectType({
20
- name,
21
-
22
- definition(t) {
23
- t.field('data', {
24
- type: entityName,
25
-
26
- resolve: prop('value'),
27
- });
28
- },
29
- });
30
- },
31
- };
32
- };
@@ -1,363 +0,0 @@
1
- 'use strict';
2
-
3
- const { isArray, isString, isUndefined, constant } = require('lodash/fp');
4
- const { objectType } = require('nexus');
5
-
6
- const { contentTypes } = require('@strapi/utils');
7
-
8
- /**
9
- * @typedef TypeBuildersOptions
10
- *
11
- * @property {ObjectDefinitionBlock} builder
12
- * @property {string} attributeName
13
- * @property {object} attribute
14
- * @property {object} contentType
15
- * @property {object} context
16
- * @property {object} context.strapi
17
- * @property {object} context.registry
18
- */
19
- module.exports = (context) => {
20
- const { strapi } = context;
21
-
22
- const getGraphQLService = strapi.plugin('graphql').service;
23
-
24
- const extension = getGraphQLService('extension');
25
-
26
- /**
27
- * Add a scalar attribute to the type definition
28
- *
29
- * The attribute is added based on a simple association between a Strapi
30
- * type and a GraphQL type (the map is defined in `strapiTypeToGraphQLScalar`)
31
- *
32
- * @param {TypeBuildersOptions} options
33
- */
34
- const addScalarAttribute = ({ builder, attributeName, attribute }) => {
35
- const { mappers } = getGraphQLService('utils');
36
-
37
- const gqlType = mappers.strapiScalarToGraphQLScalar(attribute.type);
38
-
39
- builder.field(attributeName, { type: gqlType });
40
- };
41
-
42
- /**
43
- * Add a component attribute to the type definition
44
- *
45
- * The attribute is added by fetching the component's type
46
- * name and using it as the attribute's type
47
- *
48
- * @param {TypeBuildersOptions} options
49
- */
50
- const addComponentAttribute = ({ builder, attributeName, contentType, attribute }) => {
51
- let localBuilder = builder;
52
-
53
- const { naming } = getGraphQLService('utils');
54
- const { getContentTypeArgs } = getGraphQLService('builders').utils;
55
- const { buildComponentResolver } = getGraphQLService('builders').get('content-api');
56
-
57
- const type = naming.getComponentNameFromAttribute(attribute);
58
-
59
- if (attribute.repeatable) {
60
- localBuilder = localBuilder.list;
61
- }
62
-
63
- const targetComponent = strapi.getModel(attribute.component);
64
-
65
- const resolve = buildComponentResolver({
66
- contentTypeUID: contentType.uid,
67
- attributeName,
68
- strapi,
69
- });
70
-
71
- const args = getContentTypeArgs(targetComponent, { multiple: !!attribute.repeatable });
72
-
73
- localBuilder.field(attributeName, { type, resolve, args });
74
- };
75
-
76
- /**
77
- * Add a dynamic zone attribute to the type definition
78
- *
79
- * The attribute is added by fetching the dynamic zone's
80
- * type name and using it as the attribute's type
81
- *
82
- * @param {TypeBuildersOptions} options
83
- */
84
- const addDynamicZoneAttribute = ({ builder, attributeName, contentType }) => {
85
- const { naming } = getGraphQLService('utils');
86
- const { ERROR_CODES } = getGraphQLService('constants');
87
- const { buildDynamicZoneResolver } = getGraphQLService('builders').get('content-api');
88
-
89
- const { components } = contentType.attributes[attributeName];
90
-
91
- const isEmpty = components.length === 0;
92
- const type = naming.getDynamicZoneName(contentType, attributeName);
93
-
94
- const resolve = isEmpty
95
- ? // If the dynamic zone don't have any component, then return an error payload
96
- constant({
97
- code: ERROR_CODES.emptyDynamicZone,
98
- message: `This dynamic zone don't have any component attached to it`,
99
- })
100
- : // Else, return a classic dynamic-zone resolver
101
- buildDynamicZoneResolver({
102
- contentTypeUID: contentType.uid,
103
- attributeName,
104
- });
105
-
106
- builder.list.field(attributeName, { type, resolve });
107
- };
108
-
109
- /**
110
- * Add an enum attribute to the type definition
111
- *
112
- * The attribute is added by fetching the enum's type
113
- * name and using it as the attribute's type
114
- *
115
- * @param {TypeBuildersOptions} options
116
- */
117
- const addEnumAttribute = ({ builder, attributeName, contentType }) => {
118
- const { naming } = getGraphQLService('utils');
119
-
120
- const type = naming.getEnumName(contentType, attributeName);
121
-
122
- builder.field(attributeName, { type });
123
- };
124
-
125
- /**
126
- * Add a media attribute to the type definition
127
- * @param {TypeBuildersOptions} options
128
- */
129
- const addMediaAttribute = (options) => {
130
- const { naming } = getGraphQLService('utils');
131
- const { getContentTypeArgs } = getGraphQLService('builders').utils;
132
- const { buildAssociationResolver } = getGraphQLService('builders').get('content-api');
133
- const extension = getGraphQLService('extension');
134
-
135
- const { builder } = options;
136
- const { attributeName, attribute, contentType } = options;
137
- const fileUID = 'plugin::upload.file';
138
-
139
- if (extension.shadowCRUD(fileUID).isDisabled()) {
140
- return;
141
- }
142
-
143
- const fileContentType = strapi.contentTypes[fileUID];
144
-
145
- const resolve = buildAssociationResolver({
146
- contentTypeUID: contentType.uid,
147
- attributeName,
148
- strapi,
149
- });
150
-
151
- const args = attribute.multiple ? getContentTypeArgs(fileContentType) : undefined;
152
- const type = attribute.multiple
153
- ? naming.getRelationResponseCollectionName(fileContentType)
154
- : naming.getEntityResponseName(fileContentType);
155
-
156
- builder.field(attributeName, { type, resolve, args });
157
- };
158
-
159
- /**
160
- * Add a polymorphic relational attribute to the type definition
161
- * @param {TypeBuildersOptions} options
162
- */
163
- const addPolymorphicRelationalAttribute = (options) => {
164
- const { GENERIC_MORPH_TYPENAME } = getGraphQLService('constants');
165
- const { naming } = getGraphQLService('utils');
166
- const { buildAssociationResolver } = getGraphQLService('builders').get('content-api');
167
-
168
- let { builder } = options;
169
- const { attributeName, attribute, contentType } = options;
170
-
171
- const { target } = attribute;
172
- const isToManyRelation = attribute.relation.endsWith('Many');
173
-
174
- if (isToManyRelation) {
175
- builder = builder.list;
176
- }
177
- // todo[v4]: How to handle polymorphic relation w/ entity response collection types?
178
- // -> Currently return raw polymorphic entities
179
-
180
- const resolve = buildAssociationResolver({
181
- contentTypeUID: contentType.uid,
182
- attributeName,
183
- strapi,
184
- });
185
-
186
- // If there is no specific target specified, then use the GenericMorph type
187
- if (isUndefined(target)) {
188
- builder.field(attributeName, {
189
- type: GENERIC_MORPH_TYPENAME,
190
- resolve,
191
- });
192
- }
193
-
194
- // If the target is an array of string, resolve the associated morph type and use it
195
- else if (isArray(target) && target.every(isString)) {
196
- const type = naming.getMorphRelationTypeName(contentType, attributeName);
197
-
198
- builder.field(attributeName, { type, resolve });
199
- }
200
- };
201
-
202
- /**
203
- * Add a regular relational attribute to the type definition
204
- * @param {TypeBuildersOptions} options
205
- */
206
- const addRegularRelationalAttribute = (options) => {
207
- const { naming } = getGraphQLService('utils');
208
- const { getContentTypeArgs } = getGraphQLService('builders').utils;
209
- const { buildAssociationResolver } = getGraphQLService('builders').get('content-api');
210
- const extension = getGraphQLService('extension');
211
-
212
- const { builder } = options;
213
- const { attributeName, attribute, contentType } = options;
214
-
215
- if (extension.shadowCRUD(attribute.target).isDisabled()) {
216
- return;
217
- }
218
-
219
- const isToManyRelation = attribute.relation.endsWith('Many');
220
-
221
- const resolve = buildAssociationResolver({
222
- contentTypeUID: contentType.uid,
223
- attributeName,
224
- strapi,
225
- });
226
-
227
- const targetContentType = strapi.getModel(attribute.target);
228
-
229
- const type = isToManyRelation
230
- ? naming.getRelationResponseCollectionName(targetContentType)
231
- : naming.getEntityResponseName(targetContentType);
232
-
233
- const args = isToManyRelation ? getContentTypeArgs(targetContentType) : undefined;
234
-
235
- const resolverPath = `${naming.getTypeName(contentType)}.${attributeName}`;
236
- const resolverScope = `${targetContentType.uid}.find`;
237
-
238
- extension.use({ resolversConfig: { [resolverPath]: { auth: { scope: [resolverScope] } } } });
239
-
240
- builder.field(attributeName, { type, resolve, args });
241
- };
242
-
243
- const isNotPrivate = (contentType) => (attributeName) => {
244
- return !contentTypes.isPrivateAttribute(contentType, attributeName);
245
- };
246
-
247
- const isNotDisabled = (contentType) => (attributeName) => {
248
- return extension.shadowCRUD(contentType.uid).field(attributeName).hasOutputEnabled();
249
- };
250
-
251
- return {
252
- /**
253
- * Create a type definition for a given content type
254
- * @param contentType - The content type used to created the definition
255
- * @return {NexusObjectTypeDef}
256
- */
257
- buildTypeDefinition(contentType) {
258
- const utils = getGraphQLService('utils');
259
-
260
- const { getComponentName, getTypeName } = utils.naming;
261
- const {
262
- isStrapiScalar,
263
- isComponent,
264
- isDynamicZone,
265
- isEnumeration,
266
- isMedia,
267
- isMorphRelation,
268
- isRelation,
269
- } = utils.attributes;
270
-
271
- const { attributes, modelType } = contentType;
272
-
273
- const attributesKey = Object.keys(attributes);
274
-
275
- const name = (modelType === 'component' ? getComponentName : getTypeName).call(
276
- null,
277
- contentType
278
- );
279
-
280
- return objectType({
281
- name,
282
-
283
- definition(t) {
284
- if (modelType === 'component' && isNotDisabled(contentType)('id')) {
285
- t.nonNull.id('id');
286
- }
287
-
288
- /** Attributes
289
- *
290
- * Attributes can be of 7 different kind:
291
- * - Scalar
292
- * - Component
293
- * - Dynamic Zone
294
- * - Enum
295
- * - Media
296
- * - Polymorphic Relations
297
- * - Regular Relations
298
- *
299
- * Here, we iterate over each non-private attribute
300
- * and add it to the type definition based on its type
301
- */
302
- attributesKey
303
- // Ignore private attributes
304
- .filter(isNotPrivate(contentType))
305
- // Ignore disabled fields (from extension service)
306
- .filter(isNotDisabled(contentType))
307
- // Add each attribute to the type definition
308
- .forEach((attributeName) => {
309
- const attribute = attributes[attributeName];
310
-
311
- // We create a copy of the builder (t) to apply custom
312
- // rules only on the current attribute (eg: nonNull, list, ...)
313
- let builder = t;
314
-
315
- if (attribute.required) {
316
- builder = builder.nonNull;
317
- }
318
-
319
- /**
320
- * @type {TypeBuildersOptions}
321
- */
322
- const options = { builder, attributeName, attribute, contentType, context };
323
-
324
- // Enums
325
- if (isEnumeration(attribute)) {
326
- addEnumAttribute(options);
327
- }
328
-
329
- // Scalars
330
- else if (isStrapiScalar(attribute)) {
331
- addScalarAttribute(options);
332
- }
333
-
334
- // Components
335
- else if (isComponent(attribute)) {
336
- addComponentAttribute(options);
337
- }
338
-
339
- // Dynamic Zones
340
- else if (isDynamicZone(attribute)) {
341
- addDynamicZoneAttribute(options);
342
- }
343
-
344
- // Media
345
- else if (isMedia(attribute)) {
346
- addMediaAttribute(options);
347
- }
348
-
349
- // Polymorphic Relations
350
- else if (isMorphRelation(attribute)) {
351
- addPolymorphicRelationalAttribute(options);
352
- }
353
-
354
- // Regular Relations
355
- else if (isRelation(attribute)) {
356
- addRegularRelationalAttribute(options);
357
- }
358
- });
359
- },
360
- });
361
- },
362
- };
363
- };
@@ -1,134 +0,0 @@
1
- 'use strict';
2
-
3
- const { entries, mapValues, omit } = require('lodash/fp');
4
- const {
5
- pagination: { withDefaultPagination },
6
- contentTypes: { hasDraftAndPublish },
7
- } = require('@strapi/utils');
8
-
9
- module.exports = ({ strapi }) => {
10
- const { service: getService } = strapi.plugin('graphql');
11
-
12
- return {
13
- /**
14
- * Get every args for a given content type
15
- * @param {object} contentType
16
- * @param {object} options
17
- * @param {boolean} options.multiple
18
- * @return {object}
19
- */
20
- getContentTypeArgs(contentType, { multiple = true } = {}) {
21
- const { naming } = getService('utils');
22
- const { args } = getService('internals');
23
-
24
- const { kind, modelType } = contentType;
25
-
26
- // Components
27
- if (modelType === 'component') {
28
- if (!multiple) return {};
29
-
30
- return {
31
- filters: naming.getFiltersInputTypeName(contentType),
32
- pagination: args.PaginationArg,
33
- sort: args.SortArg,
34
- };
35
- }
36
-
37
- // Collection Types
38
- if (kind === 'collectionType') {
39
- if (!multiple) {
40
- return { id: 'ID' };
41
- }
42
-
43
- const params = {
44
- filters: naming.getFiltersInputTypeName(contentType),
45
- pagination: args.PaginationArg,
46
- sort: args.SortArg,
47
- };
48
-
49
- if (hasDraftAndPublish(contentType)) {
50
- Object.assign(params, { publicationState: args.PublicationStateArg });
51
- }
52
-
53
- return params;
54
- }
55
-
56
- // Single Types
57
- if (kind === 'singleType') {
58
- const params = {};
59
-
60
- if (hasDraftAndPublish(contentType)) {
61
- Object.assign(params, { publicationState: args.PublicationStateArg });
62
- }
63
-
64
- return params;
65
- }
66
- },
67
-
68
- /**
69
- * Filter an object entries and keep only those whose value is a unique scalar attribute
70
- * @param {object} attributes
71
- * @return {Object<string, object>}
72
- */
73
- getUniqueScalarAttributes(attributes) {
74
- const { isStrapiScalar } = getService('utils').attributes;
75
-
76
- const uniqueAttributes = entries(attributes).filter(
77
- ([, attribute]) => isStrapiScalar(attribute) && attribute.unique
78
- );
79
-
80
- return Object.fromEntries(uniqueAttributes);
81
- },
82
-
83
- /**
84
- * Map each value from an attribute to a FiltersInput type name
85
- * @param {object} attributes - The attributes object to transform
86
- * @return {Object<string, string>}
87
- */
88
- scalarAttributesToFiltersMap: mapValues((attribute) => {
89
- const { mappers, naming } = getService('utils');
90
-
91
- const gqlScalar = mappers.strapiScalarToGraphQLScalar(attribute.type);
92
-
93
- return naming.getScalarFilterInputTypeName(gqlScalar);
94
- }),
95
-
96
- /**
97
- * Apply basic transform to GQL args
98
- */
99
- transformArgs(args, { contentType, usePagination = false } = {}) {
100
- const { mappers } = getService('utils');
101
- const { config } = strapi.plugin('graphql');
102
- const { pagination = {}, filters = {} } = args;
103
-
104
- // Init
105
- const newArgs = omit(['pagination', 'filters'], args);
106
-
107
- // Pagination
108
- if (usePagination) {
109
- const defaultLimit = config('defaultLimit');
110
- const maxLimit = config('maxLimit');
111
-
112
- Object.assign(
113
- newArgs,
114
- withDefaultPagination(pagination, {
115
- maxLimit,
116
- defaults: {
117
- offset: { limit: defaultLimit },
118
- page: { pageSize: defaultLimit },
119
- },
120
- })
121
- );
122
- }
123
-
124
- // Filters
125
- if (args.filters) {
126
- Object.assign(newArgs, {
127
- filters: mappers.graphQLFiltersToStrapiQuery(filters, contentType),
128
- });
129
- }
130
-
131
- return newArgs;
132
- },
133
- };
134
- };